00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 static GWENHYWFAR_CB
00015 int Gtk2Gui_WTextBrowser_SetIntProperty(GWEN_WIDGET *w,
00016 GWEN_DIALOG_PROPERTY prop,
00017 int index,
00018 int value,
00019 int doSignal) {
00020 GtkWidget *g;
00021 GtkWidget *gs;
00022
00023 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT));
00024 assert(g);
00025 gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00026 assert(gs);
00027
00028 switch(prop) {
00029 case GWEN_DialogProperty_Enabled:
00030 gtk_widget_set_sensitive(GTK_WIDGET(gs), (value==0)?FALSE:TRUE);
00031 return 0;
00032
00033 case GWEN_DialogProperty_Focus:
00034 gtk_widget_grab_focus(GTK_WIDGET(gs));
00035 return 0;
00036
00037 case GWEN_DialogProperty_Width:
00038 case GWEN_DialogProperty_Height:
00039
00040 return 0;
00041
00042 default:
00043 break;
00044 }
00045
00046 DBG_WARN(GWEN_LOGDOMAIN,
00047 "Function is not appropriate for this type of widget (%s)",
00048 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00049 return GWEN_ERROR_INVALID;
00050 }
00051
00052
00053
00054
00055 static GWENHYWFAR_CB
00056 int Gtk2Gui_WTextBrowser_GetIntProperty(GWEN_WIDGET *w,
00057 GWEN_DIALOG_PROPERTY prop,
00058 int index,
00059 int defaultValue) {
00060 GtkWidget *g;
00061 GtkWidget *gs;
00062
00063 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT));
00064 assert(g);
00065 gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00066 assert(gs);
00067
00068 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT));
00069 assert(g);
00070
00071 switch(prop) {
00072 case GWEN_DialogProperty_Enabled:
00073 return (gtk_widget_get_sensitive(GTK_WIDGET(gs))==TRUE)?1:0;
00074
00075 case GWEN_DialogProperty_Focus:
00076 return (gtk_widget_has_focus(GTK_WIDGET(gs))==TRUE)?1:0;
00077 return 0;
00078
00079 case GWEN_DialogProperty_Width:
00080 case GWEN_DialogProperty_Height:
00081
00082 return 0;
00083
00084 default:
00085 break;
00086 }
00087
00088 DBG_WARN(GWEN_LOGDOMAIN,
00089 "Function is not appropriate for this type of widget (%s)",
00090 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00091 return defaultValue;
00092 }
00093
00094
00095
00096 static GWENHYWFAR_CB
00097 int Gtk2Gui_WTextBrowser_SetCharProperty(GWEN_WIDGET *w,
00098 GWEN_DIALOG_PROPERTY prop,
00099 int index,
00100 const char *value,
00101 int doSignal) {
00102 GtkWidget *g;
00103 GtkWidget *gs;
00104 GWEN_BUFFER *tbuf;
00105
00106 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT));
00107 assert(g);
00108 gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00109 assert(gs);
00110
00111 tbuf=GWEN_Buffer_new(0, 128, 0, 1);
00112 if (value && *value)
00113 Gtk2Gui_GetRawText(value, tbuf);
00114
00115 switch(prop) {
00116 case GWEN_DialogProperty_Value: {
00117 GtkTextBuffer *tb;
00118 GtkAdjustment *va;
00119
00120 tb=gtk_text_view_get_buffer(GTK_TEXT_VIEW(g));
00121 assert(tb);
00122 gtk_text_buffer_set_text(tb, GWEN_Buffer_GetStart(tbuf), -1);
00123
00124
00125 va=gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(gs));
00126 if (va)
00127 gtk_adjustment_set_value(va, va->upper);
00128 GWEN_Buffer_free(tbuf);
00129
00130 return 0;
00131 }
00132 default:
00133 break;
00134 }
00135
00136 DBG_WARN(GWEN_LOGDOMAIN,
00137 "Function is not appropriate for this type of widget (%s)",
00138 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00139 GWEN_Buffer_free(tbuf);
00140 return GWEN_ERROR_INVALID;
00141 }
00142
00143
00144
00145 static GWENHYWFAR_CB
00146 const char* Gtk2Gui_WTextBrowser_GetCharProperty(GWEN_WIDGET *w,
00147 GWEN_DIALOG_PROPERTY prop,
00148 int index,
00149 const char *defaultValue) {
00150 GtkWidget *g;
00151 GtkWidget *gs;
00152
00153 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT));
00154 assert(g);
00155 gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00156 assert(gs);
00157
00158 switch(prop) {
00159 case GWEN_DialogProperty_Value: {
00160 GtkTextBuffer *tb;
00161 GtkTextIter startIter;
00162 GtkTextIter endIter;
00163 gchar *s;
00164
00165 tb=gtk_text_view_get_buffer(GTK_TEXT_VIEW(g));
00166 assert(tb);
00167
00168 gtk_text_buffer_get_start_iter(tb, &startIter);
00169 gtk_text_buffer_get_end_iter(tb, &endIter);
00170
00171 s=gtk_text_buffer_get_text(tb, &startIter, &endIter, FALSE);
00172 if (s) {
00173 GWEN_Widget_SetText(w, GTK2_DIALOG_STRING_VALUE, s);
00174 g_free(s);
00175 return GWEN_Widget_GetText(w, GTK2_DIALOG_STRING_VALUE);
00176 }
00177 return defaultValue;
00178 }
00179
00180 default:
00181 break;
00182 }
00183
00184 DBG_WARN(GWEN_LOGDOMAIN,
00185 "Function is not appropriate for this type of widget (%s)",
00186 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00187 return defaultValue;
00188 }
00189
00190
00191
00192 int Gtk2Gui_WTextBrowser_Setup(GWEN_WIDGET *w) {
00193 GtkWidget *gs;
00194 GtkWidget *g;
00195 const char *s;
00196 uint32_t flags;
00197 GWEN_WIDGET *wParent;
00198
00199 flags=GWEN_Widget_GetFlags(w);
00200 wParent=GWEN_Widget_Tree_GetParent(w);
00201 s=GWEN_Widget_GetText(w, 0);
00202
00203
00204 gs=gtk_scrolled_window_new(NULL, NULL);
00205 g=gtk_text_view_new();
00206 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(gs), g);
00207
00208 if (s && *s) {
00209 GWEN_BUFFER *tbuf;
00210
00211 tbuf=GWEN_Buffer_new(0, 128, 0, 1);
00212 Gtk2Gui_GetRawText(s, tbuf);
00213 gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(g)), GWEN_Buffer_GetStart(tbuf), -1);
00214 GWEN_Buffer_free(tbuf);
00215 }
00216
00217 GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) gs);
00218 GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g);
00219
00220 GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WTextBrowser_SetIntProperty);
00221 GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WTextBrowser_GetIntProperty);
00222 GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WTextBrowser_SetCharProperty);
00223 GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WTextBrowser_GetCharProperty);
00224
00225 if (wParent)
00226 GWEN_Widget_AddChildGuiWidget(wParent, w);
00227
00228 return 0;
00229 }
00230
00231