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_WTextBrowser_SetIntProperty(GWEN_WIDGET *w, 00016 GWEN_DIALOG_PROPERTY prop, 00017 int index, 00018 int value, 00019 int doSignal) { 00020 GtkWidget *g; /* text view */ 00021 GtkWidget *gs; /* scrollable window */ 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 /* just ignore these for now */ 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; /* text view */ 00061 GtkWidget *gs; /* scrollable window */ 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 /* just ignore these for now */ 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; /* text view */ 00103 GtkWidget *gs; /* scrollable window */ 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 /* scroll to end */ 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; /* text view */ 00151 GtkWidget *gs; /* scrollable window */ 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 /* create widget */ 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