2007-09-23 20:13:58 +00:00
|
|
|
/* Jinete - a GUI library
|
2008-02-10 12:52:15 +00:00
|
|
|
* Copyright (C) 2003-2008 David A. Capello.
|
2007-09-23 20:13:58 +00:00
|
|
|
* All rights reserved.
|
2007-09-18 23:57:02 +00:00
|
|
|
*
|
2007-09-23 20:13:58 +00:00
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions are
|
|
|
|
* met:
|
|
|
|
*
|
|
|
|
* * Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in
|
|
|
|
* the documentation and/or other materials provided with the
|
|
|
|
* distribution.
|
|
|
|
* * Neither the name of the Jinete nor the names of its contributors may
|
|
|
|
* be used to endorse or promote products derived from this software
|
|
|
|
* without specific prior written permission.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
2007-09-18 23:57:02 +00:00
|
|
|
*/
|
|
|
|
|
2008-01-07 15:10:17 +00:00
|
|
|
#include <assert.h>
|
|
|
|
|
2007-12-05 01:30:50 +00:00
|
|
|
#include "jinete/jmanager.h"
|
|
|
|
#include "jinete/jtheme.h"
|
|
|
|
#include "jinete/jwidget.h"
|
|
|
|
#include "jinete/jwindow.h"
|
2007-09-18 23:57:02 +00:00
|
|
|
|
|
|
|
static JID nwidgets = 0;
|
|
|
|
static JWidget *widgets = NULL;
|
|
|
|
|
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
|
|
|
{
|
2008-01-07 15:10:17 +00:00
|
|
|
assert((widget_id >= 0) && (widget_id < nwidgets));
|
2007-09-18 23:57:02 +00:00
|
|
|
|
|
|
|
return widgets[widget_id];
|
|
|
|
}
|
|
|
|
|
2008-01-03 23:22:04 +00:00
|
|
|
JWidget *_ji_get_widget_array(int *n)
|
2007-09-18 23:57:02 +00:00
|
|
|
{
|
|
|
|
*n = nwidgets;
|
|
|
|
return widgets;
|
|
|
|
}
|
|
|
|
|
2008-10-01 01:27:51 +00:00
|
|
|
JWidget _ji_get_new_widget()
|
2007-09-18 23:57:02 +00:00
|
|
|
{
|
|
|
|
JID widget_id;
|
|
|
|
|
|
|
|
/* first widget */
|
|
|
|
if (!widgets) {
|
|
|
|
nwidgets = 2;
|
2008-01-07 15:10:17 +00:00
|
|
|
widgets = (JWidget *)jmalloc(sizeof(JWidget) * nwidgets);
|
2007-09-18 23:57:02 +00:00
|
|
|
|
|
|
|
/* id=0 no widget */
|
|
|
|
widgets[0] = NULL;
|
|
|
|
|
|
|
|
/* id>0 all widgets */
|
2008-01-07 15:10:17 +00:00
|
|
|
widgets[1] = (JWidget)jnew(struct jwidget, 1);
|
2007-09-18 23:57:02 +00:00
|
|
|
widgets[1]->id = widget_id = 1;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
/* find a free slot */
|
|
|
|
for (widget_id=1; widget_id<nwidgets; widget_id++) {
|
|
|
|
/* is it free? */
|
|
|
|
if (widgets[widget_id]->id != widget_id)
|
|
|
|
/* yeah */
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* we need make other widget? */
|
|
|
|
if (widget_id == nwidgets) {
|
|
|
|
nwidgets++;
|
2008-01-07 15:10:17 +00:00
|
|
|
widgets = (JWidget *)jrealloc(widgets,
|
|
|
|
sizeof(JWidget) * nwidgets);
|
|
|
|
widgets[widget_id] = (JWidget)jnew(struct jwidget, 1);
|
2007-09-18 23:57:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* using this */
|
|
|
|
widgets[widget_id]->id = widget_id;
|
|
|
|
}
|
|
|
|
|
|
|
|
return widgets[widget_id];
|
|
|
|
}
|
|
|
|
|
2008-01-03 23:22:04 +00:00
|
|
|
void _ji_free_widget(JWidget widget)
|
2007-09-18 23:57:02 +00:00
|
|
|
{
|
|
|
|
widgets[widget->id]->id = 0;
|
|
|
|
}
|
|
|
|
|
2008-10-01 01:27:51 +00:00
|
|
|
void _ji_free_all_widgets()
|
2007-09-18 23:57:02 +00:00
|
|
|
{
|
|
|
|
int c;
|
|
|
|
|
|
|
|
if (nwidgets) {
|
|
|
|
for (c=0; c<nwidgets; c++)
|
2008-02-29 19:29:49 +00:00
|
|
|
if (widgets[c] != NULL)
|
|
|
|
jfree(widgets[c]);
|
2007-09-18 23:57:02 +00:00
|
|
|
|
2008-01-07 15:10:17 +00:00
|
|
|
jfree(widgets);
|
2007-09-18 23:57:02 +00:00
|
|
|
widgets = NULL;
|
|
|
|
nwidgets = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
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 &&
|
|
|
|
widget->id < nwidgets &&
|
|
|
|
widgets[widget->id] &&
|
|
|
|
widgets[widget->id]->id == widget->id);
|
|
|
|
}
|
|
|
|
|
2008-01-07 15:10:17 +00:00
|
|
|
void _ji_set_font_of_all_widgets(struct FONT *f)
|
2007-09-18 23:57:02 +00:00
|
|
|
{
|
2008-02-29 19:29:49 +00:00
|
|
|
int c;
|
2007-09-18 23:57:02 +00:00
|
|
|
|
2008-03-22 18:43:56 +00:00
|
|
|
/* first of all, we have to set the font to all the widgets */
|
2007-09-18 23:57:02 +00:00
|
|
|
for (c=0; c<nwidgets; c++)
|
2008-03-22 18:43:56 +00:00
|
|
|
if (_ji_is_valid_widget(widgets[c]))
|
2008-01-07 15:10:17 +00:00
|
|
|
jwidget_set_font(widgets[c], f);
|
2008-03-22 18:43:56 +00:00
|
|
|
|
|
|
|
/* then we can reinitialize the theme of each widget */
|
|
|
|
for (c=0; c<nwidgets; c++)
|
|
|
|
if (_ji_is_valid_widget(widgets[c]))
|
2008-01-07 15:10:17 +00:00
|
|
|
jwidget_init_theme(widgets[c]);
|
2007-09-18 23:57:02 +00:00
|
|
|
|
2008-03-22 18:43:56 +00:00
|
|
|
/* remap the windows */
|
2007-09-18 23:57:02 +00:00
|
|
|
for (c=0; c<nwidgets; c++)
|
2008-02-29 19:29:49 +00:00
|
|
|
if (_ji_is_valid_widget(widgets[c])) {
|
2007-09-18 23:57:02 +00:00
|
|
|
if (widgets[c]->type == JI_WINDOW)
|
2008-01-07 15:10:17 +00:00
|
|
|
jwindow_remap(widgets[c]);
|
2007-09-18 23:57:02 +00:00
|
|
|
}
|
|
|
|
|
2008-03-22 18:43:56 +00:00
|
|
|
/* refresh the screen */
|
2008-01-07 15:10:17 +00:00
|
|
|
jmanager_refresh_screen();
|
2007-09-18 23:57:02 +00:00
|
|
|
}
|