summaryrefslogtreecommitdiffhomepage
path: root/mixgtk/mixgtk_widgets.c
diff options
context:
space:
mode:
Diffstat (limited to 'mixgtk/mixgtk_widgets.c')
-rw-r--r--mixgtk/mixgtk_widgets.c84
1 files changed, 58 insertions, 26 deletions
diff --git a/mixgtk/mixgtk_widgets.c b/mixgtk/mixgtk_widgets.c
index 61f973f..18d60e1 100644
--- a/mixgtk/mixgtk_widgets.c
+++ b/mixgtk/mixgtk_widgets.c
@@ -28,18 +28,22 @@
#include "mixgtk_config.h"
#include "mixgtk_widgets.h"
-/* the glade spec */
-static GladeXML *xml_ = NULL;
-
-/* widget names */
-static const gchar *names_[] = {
+/* dialog names */
+static const gchar * dnames_[] = {
"main_window",
- "main_statusbar",
"word_dialog",
"about_dialog",
"goto_dialog",
"color_dialog",
+ "colorsel_dialog",
"fontsel_dialog",
+};
+
+#define DLG_NO_ (sizeof (dnames_) / sizeof(dnames_[0]))
+
+/* widget names */
+static const gchar *names_[] = {
+ "main_statusbar",
"mixvm_widget",
"command_prompt",
"command_log",
@@ -73,39 +77,54 @@ static const gchar *names_[] = {
#define GPL_TEXT_ "gpl_text"
#define AUTOSAVE_ITEM_ "save_on_exit"
-GtkWidget *about_;
+/* the glade specs */
+static GladeXML *xml_[DLG_NO_] = {NULL};
+/* the about dialog */
+static GtkWidget *about_ = NULL;
+
+/* the xml file name */
+static const gchar *file_ = NULL;
+
+static void init_xml_ (mixgtk_dialog_id_t dlg)
+{
+ xml_[dlg] = glade_xml_new (file_, dnames_[dlg]);
+ glade_xml_signal_autoconnect (xml_[dlg]);
+ g_assert (xml_[dlg] != NULL);
+}
static void
init_autosave_ (void)
{
GtkCheckMenuItem *item = GTK_CHECK_MENU_ITEM
- (mixgtk_widget_factory_get_by_name (AUTOSAVE_ITEM_));
+ (mixgtk_widget_factory_get_child_by_name
+ (MIXGTK_MAIN, AUTOSAVE_ITEM_));
if (item)
{
gtk_check_menu_item_set_active (item, mixgtk_config_is_autosave ());
}
}
+static void
+init_about_ (void)
+{
+ GtkWidget *label;
+ about_ = mixgtk_widget_factory_get_dialog (MIXGTK_ABOUT_DIALOG);
+ g_assert (about_ != NULL);
+ label = mixgtk_widget_factory_get_child_by_name (MIXGTK_ABOUT_DIALOG,
+ VERSION_LABEL_);
+ g_assert (label != NULL);
+ gtk_label_set_text (GTK_LABEL(label), VERSION);
+ gtk_widget_show (label);
+}
+
/* create a new factory from an xml glade file */
gboolean
mixgtk_widget_factory_init (const char *glade_file)
{
- GtkWidget *label;
-
glade_init ();
- xml_ = glade_xml_new (glade_file, NULL);
- if (!xml_) return FALSE;
- glade_xml_signal_autoconnect (xml_);
-
- about_ = mixgtk_widget_factory_get (MIXGTK_WIDGET_ABOUT_DIALOG);
- g_return_val_if_fail (about_ != NULL, FALSE);
- label = mixgtk_widget_factory_get_by_name (VERSION_LABEL_);
- g_return_val_if_fail (label != NULL, FALSE);
- gtk_label_set_text (GTK_LABEL(label), VERSION);
- gtk_widget_show (label);
-
+ file_ = g_strdup (glade_file);
+ init_xml_ (MIXGTK_MAIN);
init_autosave_ ();
-
return TRUE;
}
@@ -114,19 +133,32 @@ GtkWidget *
mixgtk_widget_factory_get (mixgtk_widget_id_t widget)
{
g_return_val_if_fail (widget < WIDGET_NO_, NULL);
- return glade_xml_get_widget (xml_, names_[widget]);
+ return glade_xml_get_widget (xml_[MIXGTK_MAIN], names_[widget]);
}
-/* Get a widget by name */
+
GtkWidget *
-mixgtk_widget_factory_get_by_name (const gchar *name)
+mixgtk_widget_factory_get_dialog (mixgtk_dialog_id_t dlg)
{
- return glade_xml_get_widget (xml_, name);
+ if (!xml_[dlg]) init_xml_ (dlg);
+ return glade_xml_get_widget (xml_[dlg], dnames_[dlg]);
}
+GtkWidget *
+mixgtk_widget_factory_get_child_by_name (mixgtk_dialog_id_t dlg,
+ const gchar *name)
+{
+ g_return_val_if_fail (dlg < DLG_NO_, NULL);
+ g_return_val_if_fail (name != NULL, NULL);
+ if (!xml_[dlg]) init_xml_ (dlg);
+ return glade_xml_get_widget (xml_[dlg], name);
+}
+
+
/* about box */
void
on_about_activate (GtkWidget *w, gpointer data)
{
+ if (!about_) init_about_ ();
gtk_widget_show (about_);
}