gwenhywfar 4.0.3
|
00001 /*************************************************************************** 00002 begin : Sun May 16 2010 00003 copyright : (C) 2010 by Martin Preuss 00004 email : martin@libchipcard.de 00005 00006 *************************************************************************** 00007 * Please see toplevel file COPYING for license details * 00008 ***************************************************************************/ 00009 00010 00011 00012 00013 00014 static GWENHYWFAR_CB 00015 int Gtk2Gui_WTextEdit_SetIntProperty(GWEN_WIDGET *w, 00016 GWEN_DIALOG_PROPERTY prop, 00017 int index, 00018 int value, 00019 int doSignal) { 00020 GtkWidget *g; 00021 00022 g=GTK_WIDGET(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 /* just ignore these for now */ 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_WTextEdit_GetIntProperty(GWEN_WIDGET *w, 00054 GWEN_DIALOG_PROPERTY prop, 00055 int index, 00056 int defaultValue) { 00057 GtkWidget *g; 00058 00059 g=GTK_WIDGET(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 /* just ignore these for now */ 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_WTextEdit_SetCharProperty(GWEN_WIDGET *w, 00089 GWEN_DIALOG_PROPERTY prop, 00090 int index, 00091 const char *value, 00092 int doSignal) { 00093 GtkWidget *g; 00094 00095 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); 00096 assert(g); 00097 00098 switch(prop) { 00099 case GWEN_DialogProperty_Value: { 00100 GtkTextBuffer *tb; 00101 GtkTextIter endIter; 00102 00103 tb=gtk_text_view_get_buffer(GTK_TEXT_VIEW(g)); 00104 assert(tb); 00105 if (value && *value) 00106 gtk_text_buffer_set_text(tb, value, -1); 00107 else 00108 gtk_text_buffer_set_text(tb, "", -1); 00109 00110 gtk_text_buffer_get_end_iter(tb, &endIter); 00111 gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(g), &endIter, 0.5, FALSE, 0.0, 0.0); 00112 return 0; 00113 } 00114 default: 00115 break; 00116 } 00117 00118 DBG_WARN(GWEN_LOGDOMAIN, 00119 "Function is not appropriate for this type of widget (%s)", 00120 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); 00121 return GWEN_ERROR_INVALID; 00122 } 00123 00124 00125 00126 static GWENHYWFAR_CB 00127 const char* Gtk2Gui_WTextEdit_GetCharProperty(GWEN_WIDGET *w, 00128 GWEN_DIALOG_PROPERTY prop, 00129 int index, 00130 const char *defaultValue) { 00131 GtkWidget *g; 00132 00133 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL)); 00134 assert(g); 00135 00136 switch(prop) { 00137 case GWEN_DialogProperty_Value: { 00138 GtkTextBuffer *tb; 00139 GtkTextIter startIter; 00140 GtkTextIter endIter; 00141 gchar *s; 00142 00143 tb=gtk_text_view_get_buffer(GTK_TEXT_VIEW(g)); 00144 assert(tb); 00145 00146 gtk_text_buffer_get_start_iter(tb, &startIter); 00147 gtk_text_buffer_get_end_iter(tb, &endIter); 00148 00149 s=gtk_text_buffer_get_text(tb, &startIter, &endIter, FALSE); 00150 if (s) { 00151 GWEN_Widget_SetText(w, GTK2_DIALOG_STRING_VALUE, s); 00152 g_free(s); 00153 return GWEN_Widget_GetText(w, GTK2_DIALOG_STRING_VALUE); 00154 } 00155 return defaultValue; 00156 } 00157 00158 default: 00159 break; 00160 } 00161 00162 DBG_WARN(GWEN_LOGDOMAIN, 00163 "Function is not appropriate for this type of widget (%s)", 00164 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w))); 00165 return defaultValue; 00166 } 00167 00168 00169 00170 static void Gtk2Gui_WTextEdit_Changed_handler(GtkTextBuffer *buffer, gpointer data) { 00171 GWEN_WIDGET *w; 00172 int rv; 00173 00174 w=data; 00175 assert(w); 00176 rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w), 00177 GWEN_DialogEvent_TypeValueChanged, 00178 GWEN_Widget_GetName(w)); 00179 if (rv==GWEN_DialogEvent_ResultAccept) 00180 Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1); 00181 else if (rv==GWEN_DialogEvent_ResultReject) 00182 Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0); 00183 } 00184 00185 00186 00187 int Gtk2Gui_WTextEdit_Setup(GWEN_WIDGET *w) { 00188 GtkWidget *g; 00189 const char *s; 00190 uint32_t flags; 00191 GWEN_WIDGET *wParent; 00192 gulong changed_handler_id; 00193 00194 flags=GWEN_Widget_GetFlags(w); 00195 wParent=GWEN_Widget_Tree_GetParent(w); 00196 s=GWEN_Widget_GetText(w, 0); 00197 00198 /* create widget */ 00199 g=gtk_text_view_new(); 00200 if (s && *s) 00201 gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(g)), s, -1); 00202 00203 GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); 00204 GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); 00205 00206 GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WTextEdit_SetIntProperty); 00207 GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WTextEdit_GetIntProperty); 00208 GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WTextEdit_SetCharProperty); 00209 GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WTextEdit_GetCharProperty); 00210 00211 changed_handler_id=g_signal_connect(gtk_text_view_get_buffer(GTK_TEXT_VIEW(g)), 00212 "changed", 00213 G_CALLBACK (Gtk2Gui_WTextEdit_Changed_handler), 00214 w); 00215 00216 if (wParent) 00217 GWEN_Widget_AddChildGuiWidget(wParent, w); 00218 00219 return 0; 00220 } 00221 00222