UniWidgets  1.0.0
functions.h
00001 #ifndef _FUNCTIONS_LIBGLADE_H
00002 #define _FUNCTIONS_LIBGLADE_H
00003 
00004 #include <gtkmm.h>
00005 #include <libglademm.h>
00006 #include <glibmm.h>
00007 #include <glade/glade-init.h>
00008 #include <glade/glade-build.h>
00009 #include <uwidgets/UWidgets.h>
00010 #include <usvgwidgets/USVGWidgets.h>
00011 #include <objects/Objects.h>
00012 #include <components/Components.h>
00013 #include <typical/Typical.h>
00014 #include <uniwidgets/UPostcreate.h>
00015 
00016 using namespace UniWidgets;
00017 using namespace std;
00018 
00019 //----------------------------------------------------------
00020 template <class UType> static GtkWidget *glade_new(GladeXML *xml, GType widget_type, GladeWidgetInfo *info)
00021 {   
00022     UType *uw = manage(new UType);
00023     GtkWidget *w = GTK_WIDGET(uw->gobj());
00024     GObjectClass *oclass = G_OBJECT_GET_CLASS(w);
00025 //  GtkWidgetClass *widget_class = GTK_WIDGET_GET_CLASS(w);
00026 
00027     for (unsigned int i=0; i<info->n_properties; i++) {
00028         Glib::ustring name_prop(info->properties[i].name);
00029         const gchar *name;
00030         if(name_prop == "tooltip")
00031             name = "tooltip-text";
00032         else
00033             name = info->properties[i].name;
00034         const gchar *value = info->properties[i].value;
00035         GParamSpec *pspec;
00036 
00037         pspec = g_object_class_find_property (oclass, name);
00038         if (pspec) {
00039             GValue gvalue = { 0 };
00040             
00041             if (glade_xml_set_value_from_string(xml, pspec, value, &gvalue)) {
00042                 g_object_set_property(G_OBJECT(w), name, &gvalue);
00043                 g_value_unset(&gvalue);
00044             }
00045         }
00046     }
00047 
00048     return w;
00049 };
00050 //----------------------------------------------------------
00051 template <class UType> static GtkWidget *glade_new_indicatortwo(GladeXML *xml, GType widget_type, GladeWidgetInfo *info)
00052 {   
00053     UType *uw = manage(new UType);
00054     GtkWidget *w = GTK_WIDGET(uw->gobj());
00055     GObjectClass *oclass = G_OBJECT_GET_CLASS(w);
00056 //  GtkWidgetClass *widget_class = GTK_WIDGET_GET_CLASS(w);
00057 
00058     for (unsigned int i=0; i<info->n_properties; i++) {
00059         Glib::ustring name_prop(info->properties[i].name);
00060         const gchar *name;
00061         if(name_prop == "tooltip")
00062             name = "tooltip-text";
00063         else
00064             name = info->properties[i].name;
00065         const gchar *value = info->properties[i].value;
00066         GParamSpec *pspec;
00067         
00068         pspec = g_object_class_find_property (oclass, name);
00069         if (pspec) {
00070             GValue gvalue = { 0 };
00071             
00072             if (glade_xml_set_value_from_string(xml, pspec, value, &gvalue)) {
00073                 g_object_set_property(G_OBJECT(w), name, &gvalue);
00074                 g_value_unset(&gvalue);
00075             }
00076         }
00077     }
00078 
00079     UPostcreate<IndicatorTwoState>::run(uw);
00080 
00081     return w;
00082 };
00083 //----------------------------------------------------------
00084 template <class UType> static GtkWidget *glade_new_indicatorfour(GladeXML *xml, GType widget_type, GladeWidgetInfo *info)
00085 {   
00086     UType *uw = manage(new UType);
00087     GtkWidget *w = GTK_WIDGET(uw->gobj());
00088     GObjectClass *oclass = G_OBJECT_GET_CLASS(w);
00089 //  GtkWidgetClass *widget_class = GTK_WIDGET_GET_CLASS(w);
00090 
00091     for (unsigned int i=0; i<info->n_properties; i++) {
00092         Glib::ustring name_prop(info->properties[i].name);
00093         const gchar *name;
00094         if(name_prop == "tooltip")
00095             name = "tooltip-text";
00096         else
00097             name = info->properties[i].name;
00098         const gchar *value = info->properties[i].value;
00099         GParamSpec *pspec;
00100         
00101         pspec = g_object_class_find_property (oclass, name);
00102         if (pspec) {
00103             GValue gvalue = { 0 };
00104             
00105             if (glade_xml_set_value_from_string(xml, pspec, value, &gvalue)) {
00106                 g_object_set_property(G_OBJECT(w), name, &gvalue);
00107                 g_value_unset(&gvalue);
00108             }
00109         }
00110     }
00111 
00112     UPostcreate<IndicatorFourState>::run(uw);
00113 
00114     return w;
00115 };
00116 //----------------------------------------------------------
00117 template <class UType> static GtkWidget *glade_new_gdg(GladeXML *xml, GType widget_type, GladeWidgetInfo *info)
00118 {   
00119     UType *uw = manage(new UType);
00120     GtkWidget *w = GTK_WIDGET(uw->gobj());
00121     GObjectClass *oclass = G_OBJECT_GET_CLASS(w);
00122 //  GtkWidgetClass *widget_class = GTK_WIDGET_GET_CLASS(w);
00123 
00124     for (unsigned int i=0; i<info->n_properties; i++) {
00125         Glib::ustring name_prop(info->properties[i].name);
00126         const gchar *name;
00127         if(name_prop == "tooltip")
00128             name = "tooltip-text";
00129         else
00130             name = info->properties[i].name;
00131         const gchar *value = info->properties[i].value;
00132         GParamSpec *pspec;
00133         
00134         pspec = g_object_class_find_property (oclass, name);
00135         if (pspec) {
00136             GValue gvalue = { 0 };
00137             
00138             if (glade_xml_set_value_from_string(xml, pspec, value, &gvalue)) {
00139                 g_object_set_property(G_OBJECT(w), name, &gvalue);
00140                 g_value_unset(&gvalue);
00141             }
00142         }
00143     }
00144 
00145     UPostcreate<GDG>::run(uw);
00146 
00147     return w;
00148 };
00149 //----------------------------------------------------------
00150 template <class UType> static GtkWidget *glade_new_vdg(GladeXML *xml, GType widget_type, GladeWidgetInfo *info)
00151 {   
00152     UType *uw = manage(new UType);
00153     GtkWidget *w = GTK_WIDGET(uw->gobj());
00154     GObjectClass *oclass = G_OBJECT_GET_CLASS(w);
00155 //  GtkWidgetClass *widget_class = GTK_WIDGET_GET_CLASS(w);
00156 
00157     for (unsigned int i=0; i<info->n_properties; i++) {
00158         Glib::ustring name_prop(info->properties[i].name);
00159         const gchar *name;
00160         if(name_prop == "tooltip")
00161             name = "tooltip-text";
00162         else
00163             name = info->properties[i].name;
00164         const gchar *value = info->properties[i].value;
00165         GParamSpec *pspec;
00166         
00167         pspec = g_object_class_find_property (oclass, name);
00168         if (pspec) {
00169             GValue gvalue = { 0 };
00170             
00171             if (glade_xml_set_value_from_string(xml, pspec, value, &gvalue)) {
00172                 g_object_set_property(G_OBJECT(w), name, &gvalue);
00173                 g_value_unset(&gvalue);
00174             }
00175         }
00176     }
00177 
00178     UPostcreate<VDG>::run(uw);
00179 
00180     return w;
00181 };
00182 //----------------------------------------------------------
00183 static GtkWidget
00184 *proxywidget_glade_new(GladeXML *xml, GType widget_type, GladeWidgetInfo *info)
00185 {
00186 //  GtkWidgetClass *widget_class = GTK_WIDGET_GET_CLASS(w);
00187     Glib::ustring module_name;
00188     Glib::ustring manager_name;
00189     Glib::ustring alive_sensor;
00190     Glib::ustring confirm_sensor;
00191     Glib::ustring auto_confirm_time_str;
00192 
00193     for (unsigned int i=0; i<info->n_properties ; i++) {
00194         Glib::ustring name(info->properties[i].name);
00195         if(name == "tooltip")
00196             name = "tooltip-text";
00197         if ( name == "module_name" ) {
00198             module_name = info->properties[i].value;
00199         }
00200         if ( name == "manager_name" ) {
00201             manager_name = info->properties[i].value;
00202         }
00203         if ( name == "alive_sensor" ) {
00204             alive_sensor = info->properties[i].value;
00205         }
00206         if ( name == "confirm_sensor" ) {
00207             confirm_sensor = info->properties[i].value;
00208         }
00209         if ( name == "auto_confirm_time_str" ) {
00210             auto_confirm_time_str = info->properties[i].value;
00211         }
00212     }
00213 
00214     UProxyWidget *proxy_widget = manage(new UProxyWidget(module_name, manager_name
00215                                     ,alive_sensor
00216                                     ,confirm_sensor
00217                                     ,auto_confirm_time_str));
00218     GtkWidget *w = GTK_WIDGET(proxy_widget->gobj());
00219     GObjectClass *oclass = G_OBJECT_GET_CLASS(w);
00220 
00221     for (unsigned int i=0; i<info->n_properties; i++) {
00222         Glib::ustring name_prop(info->properties[i].name);
00223         const gchar *name;
00224         if(name_prop == "tooltip")
00225             name = "tooltip-text";
00226         else
00227             name = info->properties[i].name;
00228         if (Glib::ustring(name) == "module_name")
00229             continue;
00230         if (Glib::ustring(name) == "manager_name")
00231             continue;
00232         if (Glib::ustring(name) == "alive_sensor")
00233             continue;
00234         if (Glib::ustring(name) == "confirm_sensor")
00235             continue;
00236         if (Glib::ustring(name) == "auto_confirm_time_str")
00237             continue;
00238 
00239         const gchar *value = info->properties[i].value;
00240         GParamSpec *pspec;
00241 
00242         pspec = g_object_class_find_property (oclass, name);
00243         if (pspec) {
00244             GValue gvalue = { 0 };
00245 
00246             if (glade_xml_set_value_from_string(xml, pspec, value, &gvalue)) {
00247                 g_object_set_property(G_OBJECT(w), name, &gvalue);
00248                 g_value_unset(&gvalue);
00249             }
00250         }
00251     }
00252 
00253 //  UPostcreateProxyWidget::run(w);
00254 //  UPostcreate<GtkWidget>::run(w);
00255 
00256     return w;
00257 }
00258 
00259 static GtkWidget
00260 *usvgindicatorplus_glade_new(GladeXML *xml, GType widget_type, GladeWidgetInfo *info)
00261 {
00262     Glib::ustring image0_path;
00263     Glib::ustring image1_path;
00264     int n=0;
00265     for (unsigned int i=0; i<info->n_properties && n<2; i++) {
00266         Glib::ustring name(info->properties[i].name);
00267         if(name == "tooltip")
00268             name = "tooltip-text";
00269         if (name == "image0_path") {
00270             image0_path = info->properties[i].value;
00271             n++;
00272         }
00273         if (name == "image1_path") {
00274             image1_path = info->properties[i].value;
00275             n++;
00276         }
00277     }
00278     USVGIndicatorPlus *usvgindicatorplus = manage(new USVGIndicatorPlus(image0_path, image1_path));
00279     GtkWidget *w = GTK_WIDGET(usvgindicatorplus->gobj());
00280     GObjectClass *oclass = G_OBJECT_GET_CLASS(w);
00281 
00282     for (unsigned int i=0; i<info->n_properties; i++) {
00283         Glib::ustring name_prop(info->properties[i].name);
00284         const gchar *name;
00285         if(name_prop == "tooltip")
00286             name = "tooltip-text";
00287         else
00288             name = info->properties[i].name;
00289 
00290         if (Glib::ustring(name) == "image0-path")
00291             continue;
00292         if (Glib::ustring(name) == "image1-path")
00293             continue;
00294 
00295         const gchar *value = info->properties[i].value;
00296         GParamSpec *pspec;
00297 
00298         pspec = g_object_class_find_property (oclass, name);
00299         if (pspec) {
00300         GValue gvalue = { 0 };
00301 
00302             if (glade_xml_set_value_from_string(xml, pspec, value, &gvalue)) {
00303                 g_object_set_property(G_OBJECT(w), name, &gvalue);
00304                 g_value_unset(&gvalue);
00305             }
00306         }
00307     }
00308 
00309 //  UPostcreateSvgIndicatorPlus::run(w);
00310 //  UPostcreate<GtkWidget>::run(w);
00311 
00312     return w;
00313 }
00314 
00315 static GtkWidget
00316 *usvgbuttonindicator_glade_new(GladeXML *xml, GType widget_type, GladeWidgetInfo *info)
00317 {
00318     Glib::ustring image0_path;
00319     Glib::ustring image1_path;
00320     int n=0;
00321     for (unsigned int i=0; i<info->n_properties && n<2; i++) {
00322         Glib::ustring name(info->properties[i].name);
00323     if(name == "tooltip")
00324         name = "tooltip-text";
00325         if (name == "image0_path") {
00326             image0_path = info->properties[i].value;
00327             n++;
00328         }
00329         if (name == "image1_path") {
00330             image1_path = info->properties[i].value;
00331             n++;
00332         }
00333     }
00334     USVGButtonIndicator *usvgbuttonindicator = manage(new USVGButtonIndicator(image0_path, image1_path));
00335     GtkWidget *w = GTK_WIDGET(usvgbuttonindicator->gobj());
00336     GObjectClass *oclass = G_OBJECT_GET_CLASS(w);
00337 
00338     for (unsigned int i=0; i<info->n_properties; i++) {
00339        Glib::ustring name_prop(info->properties[i].name);
00340     const gchar *name;
00341     if(name_prop == "tooltip")
00342         name = "tooltip-text";
00343     else
00344         name = info->properties[i].name;
00345 
00346         if (Glib::ustring(name) == "image0-path")
00347             continue;
00348         if (Glib::ustring(name) == "image1-path")
00349             continue;
00350 
00351         const gchar *value = info->properties[i].value;
00352         GParamSpec *pspec;
00353 
00354         pspec = g_object_class_find_property (oclass, name);
00355         if (pspec) {
00356         GValue gvalue = { 0 };
00357 
00358             if (glade_xml_set_value_from_string(xml, pspec, value, &gvalue)) {
00359                 g_object_set_property(G_OBJECT(w), name, &gvalue);
00360                 g_value_unset(&gvalue);
00361             }
00362         }
00363     }
00364 
00365 //  UPostcreateSvgIndicator::run(w);
00366 //  UPostcreate<GtkWidget>::run(w);
00367 
00368     return w;
00369 }
00370 
00371 static GtkWidget
00372 *usvgindicatorbig_glade_new(GladeXML *xml, GType widget_type, GladeWidgetInfo *info)
00373 {
00374     Glib::ustring image0_path;
00375     Glib::ustring image1_path;
00376     Glib::ustring name;
00377     int n=0;
00378     for (unsigned int i=0; i<info->n_properties && n<3; i++) {
00379         Glib::ustring name(info->properties[i].name);
00380         if(name == "tooltip")
00381             name = "tooltip-text";
00382         if ( name == "falsefile" ) {
00383             image0_path = info->properties[i].value;
00384             n++;
00385         }
00386         if ( name == "truefile" ) {
00387             image1_path = info->properties[i].value;
00388             n++;
00389         }
00390         if ( name == "name" ) {
00391             name = info->properties[i].value;
00392             n++;
00393         }
00394     }
00395 
00396     USVGIndicatorBig *usvgindicatorbig = manage(new USVGIndicatorBig(image0_path, image1_path));
00397     GtkWidget *w = GTK_WIDGET(usvgindicatorbig->gobj());
00398     GObjectClass *oclass = G_OBJECT_GET_CLASS(w);
00399 
00400     for (unsigned int i=0; i<info->n_properties; i++) {
00401         Glib::ustring name_prop(info->properties[i].name);
00402         const gchar *name;
00403         if(name_prop == "tooltip")
00404             name = "tooltip-text";
00405         else
00406             name = info->properties[i].name;
00407 
00408         if (Glib::ustring(name) == "falsefile")
00409             continue;
00410         if (Glib::ustring(name) == "truefile")
00411             continue;
00412 
00413         const gchar *value = info->properties[i].value;
00414         GParamSpec *pspec;
00415 
00416         pspec = g_object_class_find_property (oclass, name);
00417         if (pspec) {
00418             GValue gvalue = { 0 };
00419 
00420             if (glade_xml_set_value_from_string(xml, pspec, value, &gvalue)) {
00421                 g_object_set_property(G_OBJECT(w), name, &gvalue);
00422                 g_value_unset(&gvalue);
00423             }
00424         }
00425     }
00426 
00427 //  UPostcreateSvgIndicatorBig::run(w);
00428 //  UPostcreate<GtkWidget>::run(w);
00429 
00430     return w;
00431 }
00432 
00433 static void
00434 notebook_build_children(GladeXML *self, GtkWidget *parent,
00435             GladeWidgetInfo *info)
00436 {
00437     unsigned int i, j, tab = 0;
00438     enum {
00439     PANE_ITEM,
00440     TAB_ITEM,
00441     MENU_ITEM
00442     } type;
00443 
00444     g_object_ref(G_OBJECT(parent));
00445     for (i = 0; i < info->n_children; i++) {
00446     GladeWidgetInfo *childinfo = info->children[i].child;
00447     GtkWidget *child = glade_xml_build_widget(self, childinfo);
00448 
00449     type = PANE_ITEM;
00450     for (j = 0; j < info->children[i].n_properties; j++) {
00451     if (!strcmp (info->children[i].properties[j].name, "type")) {
00452         const char *value = info->children[i].properties[j].value;
00453 
00454         if (!strcmp (value, "tab"))
00455             type = TAB_ITEM;
00456         break;
00457         }
00458     }
00459 
00460     if (type == TAB_ITEM) { /* The GtkNotebook API blows */
00461         GtkWidget *body;
00462 
00463         body = gtk_notebook_get_nth_page (GTK_NOTEBOOK (parent), (tab - 1));
00464         gtk_notebook_set_tab_label (GTK_NOTEBOOK (parent), body, child);
00465     } else {
00466         gtk_notebook_append_page (GTK_NOTEBOOK (parent), child, NULL);
00467         tab++;
00468     }
00469     }
00470     g_object_unref(G_OBJECT(parent));
00471 }
00472 
00473 //----------------------------------------------------------
00474 #endif