00001
00002
00003
00004
00005
00006
00007
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
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
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
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