00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 static GWENHYWFAR_CB
00015 int Gtk2Gui_WPushButton_SetIntProperty(GWEN_WIDGET *w,
00016 GWEN_DIALOG_PROPERTY prop,
00017 int index,
00018 int value,
00019 int doSignal) {
00020 GtkButton *g;
00021
00022 g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00023 assert(g);
00024
00025 switch(prop) {
00026 case GWEN_DialogProperty_Enabled:
00027 gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE);
00028 return 0;
00029
00030 case GWEN_DialogProperty_Focus:
00031 gtk_widget_grab_focus(GTK_WIDGET(g));
00032 return 0;
00033
00034 case GWEN_DialogProperty_Width:
00035 case GWEN_DialogProperty_Height:
00036
00037 return 0;
00038
00039 default:
00040 break;
00041 }
00042
00043 DBG_WARN(GWEN_LOGDOMAIN,
00044 "Function is not appropriate for this type of widget (%s)",
00045 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00046 return GWEN_ERROR_INVALID;
00047 }
00048
00049
00050
00051
00052 static GWENHYWFAR_CB
00053 int Gtk2Gui_WPushButton_GetIntProperty(GWEN_WIDGET *w,
00054 GWEN_DIALOG_PROPERTY prop,
00055 int index,
00056 int defaultValue) {
00057 GtkButton *g;
00058
00059 g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00060 assert(g);
00061
00062 switch(prop) {
00063 case GWEN_DialogProperty_Enabled:
00064 return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0;
00065
00066 case GWEN_DialogProperty_Focus:
00067 return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0;
00068 return 0;
00069
00070 case GWEN_DialogProperty_Width:
00071 case GWEN_DialogProperty_Height:
00072
00073 return 0;
00074
00075 default:
00076 break;
00077 }
00078
00079 DBG_WARN(GWEN_LOGDOMAIN,
00080 "Function is not appropriate for this type of widget (%s)",
00081 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00082 return defaultValue;
00083 }
00084
00085
00086
00087 static GWENHYWFAR_CB
00088 int Gtk2Gui_WPushButton_SetCharProperty(GWEN_WIDGET *w,
00089 GWEN_DIALOG_PROPERTY prop,
00090 int index,
00091 const char *value,
00092 int doSignal) {
00093 GtkButton *g;
00094
00095 g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00096 assert(g);
00097
00098 switch(prop) {
00099 case GWEN_DialogProperty_Title:
00100 gtk_button_set_label(g, value);
00101 return 0;
00102 default:
00103 break;
00104 }
00105
00106 DBG_WARN(GWEN_LOGDOMAIN,
00107 "Function is not appropriate for this type of widget (%s)",
00108 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00109 return GWEN_ERROR_INVALID;
00110 }
00111
00112
00113
00114 static GWENHYWFAR_CB
00115 const char* Gtk2Gui_WPushButton_GetCharProperty(GWEN_WIDGET *w,
00116 GWEN_DIALOG_PROPERTY prop,
00117 int index,
00118 const char *defaultValue) {
00119 GtkButton *g;
00120
00121 g=GTK_BUTTON(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00122 assert(g);
00123
00124 switch(prop) {
00125 case GWEN_DialogProperty_Title:
00126 return gtk_button_get_label(g);
00127 default:
00128 break;
00129 }
00130
00131 DBG_WARN(GWEN_LOGDOMAIN,
00132 "Function is not appropriate for this type of widget (%s)",
00133 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00134 return defaultValue;
00135 }
00136
00137
00138
00139 static void Gtk2Gui_WPushButton_Clicked_handler(GtkButton *button, gpointer data) {
00140 GWEN_WIDGET *w;
00141 int rv;
00142
00143 w=data;
00144 assert(w);
00145 rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w),
00146 GWEN_DialogEvent_TypeActivated,
00147 GWEN_Widget_GetName(w));
00148 if (rv==GWEN_DialogEvent_ResultAccept)
00149 Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1);
00150 else if (rv==GWEN_DialogEvent_ResultReject)
00151 Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0);
00152 }
00153
00154
00155
00156 int Gtk2Gui_WPushButton_Setup(GWEN_WIDGET *w) {
00157 GtkWidget *g;
00158 const char *s;
00159 uint32_t flags;
00160 GWEN_WIDGET *wParent;
00161 gulong clicked_handler_id;
00162
00163 flags=GWEN_Widget_GetFlags(w);
00164 wParent=GWEN_Widget_Tree_GetParent(w);
00165 s=GWEN_Widget_GetText(w, 0);
00166
00167
00168 if (s && *s)
00169 g=gtk_button_new_with_mnemonic(s);
00170 else
00171 g=gtk_button_new();
00172
00173 s=GWEN_Widget_GetIconFileName(w);
00174 if (s && *s) {
00175 GWEN_STRINGLIST *sl;
00176
00177 sl=GWEN_Dialog_GetMediaPaths(GWEN_Widget_GetDialog(w));
00178 if (sl) {
00179 int rv;
00180 GWEN_BUFFER *tbuf;
00181
00182 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
00183 rv=GWEN_Directory_FindFileInPaths(sl, s, tbuf);
00184 if (rv<0) {
00185 DBG_ERROR(GWEN_LOGDOMAIN, "Image file [%s] not found (%d)", s, rv);
00186
00187 }
00188 else {
00189 GtkWidget *gImage;
00190
00191 gImage=gtk_image_new_from_file(GWEN_Buffer_GetStart(tbuf));
00192 gtk_button_set_image(GTK_BUTTON(g), gImage);
00193 gtk_button_set_image_position(GTK_BUTTON(g), GTK_POS_LEFT);
00194 }
00195 GWEN_Buffer_free(tbuf);
00196 }
00197 }
00198
00199 GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g);
00200 GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g);
00201
00202 GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WPushButton_SetIntProperty);
00203 GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WPushButton_GetIntProperty);
00204 GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WPushButton_SetCharProperty);
00205 GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WPushButton_GetCharProperty);
00206
00207 clicked_handler_id=g_signal_connect(g,
00208 "clicked",
00209 G_CALLBACK (Gtk2Gui_WPushButton_Clicked_handler),
00210 w);
00211
00212 if (wParent)
00213 GWEN_Widget_AddChildGuiWidget(wParent, w);
00214
00215 return 0;
00216 }
00217
00218