2010-09-27 22:18:17 +00:00
|
|
|
// ASE gui library
|
2011-01-18 23:49:53 +00:00
|
|
|
// Copyright (C) 2001-2011 David Capello
|
2010-09-27 22:18:17 +00:00
|
|
|
//
|
|
|
|
// This source file is ditributed under a BSD-like license, please
|
|
|
|
// read LICENSE.txt for more information.
|
2007-09-18 23:57:02 +00:00
|
|
|
|
2009-07-12 20:29:16 +00:00
|
|
|
#include "config.h"
|
|
|
|
|
2009-05-30 21:22:52 +00:00
|
|
|
#include <vector>
|
2008-01-07 15:10:17 +00:00
|
|
|
|
2011-01-21 20:50:04 +00:00
|
|
|
#include "gui/frame.h"
|
2010-09-26 18:59:32 +00:00
|
|
|
#include "gui/jmanager.h"
|
2011-01-21 20:50:04 +00:00
|
|
|
#include "gui/theme.h"
|
2010-10-02 14:19:09 +00:00
|
|
|
#include "gui/widget.h"
|
2007-09-18 23:57:02 +00:00
|
|
|
|
2009-08-05 01:53:02 +00:00
|
|
|
static std::vector<JWidget>* widgets;
|
|
|
|
|
|
|
|
int _ji_widgets_init()
|
|
|
|
{
|
|
|
|
widgets = new std::vector<JWidget>;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void _ji_widgets_exit()
|
|
|
|
{
|
|
|
|
delete widgets;
|
|
|
|
}
|
2007-09-18 23:57:02 +00:00
|
|
|
|
2008-01-03 23:22:04 +00:00
|
|
|
JWidget _ji_get_widget_by_id(JID widget_id)
|
2007-09-18 23:57:02 +00:00
|
|
|
{
|
2010-08-04 02:33:44 +00:00
|
|
|
ASSERT((widget_id >= 0) && (widget_id < widgets->size()));
|
2007-09-18 23:57:02 +00:00
|
|
|
|
2009-08-05 01:53:02 +00:00
|
|
|
return (*widgets)[widget_id];
|
2007-09-18 23:57:02 +00:00
|
|
|
}
|
|
|
|
|
2009-05-30 21:22:52 +00:00
|
|
|
JWidget* _ji_get_widget_array(int* n)
|
2007-09-18 23:57:02 +00:00
|
|
|
{
|
2009-08-05 01:53:02 +00:00
|
|
|
*n = widgets->size();
|
|
|
|
return &widgets->front();
|
2007-09-18 23:57:02 +00:00
|
|
|
}
|
|
|
|
|
2009-05-30 21:22:52 +00:00
|
|
|
void _ji_add_widget(JWidget widget)
|
2007-09-18 23:57:02 +00:00
|
|
|
{
|
|
|
|
JID widget_id;
|
|
|
|
|
2009-05-30 21:22:52 +00:00
|
|
|
// first widget
|
2009-08-05 01:53:02 +00:00
|
|
|
if (widgets->empty()) {
|
|
|
|
widgets->resize(2);
|
2007-09-18 23:57:02 +00:00
|
|
|
|
2009-05-30 21:22:52 +00:00
|
|
|
// id=0 no widget
|
2009-08-05 01:53:02 +00:00
|
|
|
(*widgets)[0] = NULL;
|
2007-09-18 23:57:02 +00:00
|
|
|
|
2009-05-30 21:22:52 +00:00
|
|
|
// id>0 all widgets
|
2009-08-05 01:53:02 +00:00
|
|
|
(*widgets)[1] = widget;
|
|
|
|
(*widgets)[1]->id = widget_id = 1;
|
2007-09-18 23:57:02 +00:00
|
|
|
}
|
|
|
|
else {
|
2009-05-30 21:22:52 +00:00
|
|
|
// find a free slot
|
2009-08-05 01:53:02 +00:00
|
|
|
for (widget_id=1; widget_id<widgets->size(); widget_id++) {
|
2009-05-30 21:22:52 +00:00
|
|
|
// is it free?
|
2009-08-05 01:53:02 +00:00
|
|
|
if ((*widgets)[widget_id] == NULL)
|
2007-09-18 23:57:02 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2009-05-30 21:22:52 +00:00
|
|
|
// we need space for other widget more?
|
2009-08-05 01:53:02 +00:00
|
|
|
if (widget_id == widgets->size())
|
|
|
|
widgets->resize(widgets->size()+1);
|
2007-09-18 23:57:02 +00:00
|
|
|
|
2009-08-05 01:53:02 +00:00
|
|
|
(*widgets)[widget_id] = widget;
|
|
|
|
(*widgets)[widget_id]->id = widget_id;
|
2007-09-18 23:57:02 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-05-30 21:22:52 +00:00
|
|
|
void _ji_remove_widget(JWidget widget)
|
2007-09-18 23:57:02 +00:00
|
|
|
{
|
2010-08-04 02:33:44 +00:00
|
|
|
ASSERT_VALID_WIDGET(widget);
|
2007-09-18 23:57:02 +00:00
|
|
|
|
2009-08-05 01:53:02 +00:00
|
|
|
(*widgets)[widget->id] = NULL;
|
2007-09-18 23:57:02 +00:00
|
|
|
}
|
|
|
|
|
2008-01-03 23:22:04 +00:00
|
|
|
bool _ji_is_valid_widget(JWidget widget)
|
2007-09-18 23:57:02 +00:00
|
|
|
{
|
|
|
|
return (widget &&
|
|
|
|
widget->id >= 0 &&
|
2009-08-05 01:53:02 +00:00
|
|
|
widget->id < widgets->size() &&
|
|
|
|
(*widgets)[widget->id] &&
|
|
|
|
(*widgets)[widget->id]->id == widget->id);
|
2007-09-18 23:57:02 +00:00
|
|
|
}
|
|
|
|
|
2010-03-09 02:43:28 +00:00
|
|
|
void _ji_set_font_of_all_widgets(FONT* f)
|
2007-09-18 23:57:02 +00:00
|
|
|
{
|
2009-08-17 18:00:38 +00:00
|
|
|
size_t c;
|
2007-09-18 23:57:02 +00:00
|
|
|
|
2009-08-05 01:53:02 +00:00
|
|
|
// first of all, we have to set the font to all the widgets
|
|
|
|
for (c=0; c<widgets->size(); c++)
|
|
|
|
if (_ji_is_valid_widget((*widgets)[c]))
|
2010-01-26 00:38:05 +00:00
|
|
|
(*widgets)[c]->setFont(f);
|
2008-03-22 18:43:56 +00:00
|
|
|
|
2010-03-09 02:43:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void _ji_reinit_theme_in_all_widgets()
|
|
|
|
{
|
|
|
|
size_t c;
|
|
|
|
|
|
|
|
// Then we can reinitialize the theme of each widget
|
2009-08-05 01:53:02 +00:00
|
|
|
for (c=0; c<widgets->size(); c++)
|
2010-03-09 02:43:28 +00:00
|
|
|
if (_ji_is_valid_widget((*widgets)[c])) {
|
2011-01-21 21:08:25 +00:00
|
|
|
(*widgets)[c]->setTheme(CurrentTheme::get());
|
|
|
|
|
2009-08-05 01:53:02 +00:00
|
|
|
jwidget_init_theme((*widgets)[c]);
|
2010-03-09 02:43:28 +00:00
|
|
|
}
|
2007-09-18 23:57:02 +00:00
|
|
|
|
2010-03-09 02:43:28 +00:00
|
|
|
// Remap the windows
|
2009-08-05 01:53:02 +00:00
|
|
|
for (c=0; c<widgets->size(); c++)
|
|
|
|
if (_ji_is_valid_widget((*widgets)[c])) {
|
2010-01-26 00:38:05 +00:00
|
|
|
if ((*widgets)[c]->type == JI_FRAME)
|
|
|
|
static_cast<Frame*>((*widgets)[c])->remap_window();
|
2007-09-18 23:57:02 +00:00
|
|
|
}
|
|
|
|
|
2010-03-09 02:43:28 +00:00
|
|
|
// Refresh the screen
|
2008-01-07 15:10:17 +00:00
|
|
|
jmanager_refresh_screen();
|
2007-09-18 23:57:02 +00:00
|
|
|
}
|