1 /***************************************************************************
2 begin : Sun May 16 2010
3 copyright : (C) 2010 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * Please see toplevel file COPYING for license details *
8 ***************************************************************************/
9
10
11
12
13
14 static GWENHYWFAR_CB
Gtk2Gui_WTextBrowser_SetIntProperty(GWEN_WIDGET * w,GWEN_DIALOG_PROPERTY prop,GWEN_UNUSED int index,int value,GWEN_UNUSED int doSignal)15 int Gtk2Gui_WTextBrowser_SetIntProperty(GWEN_WIDGET *w,
16 GWEN_DIALOG_PROPERTY prop,
17 GWEN_UNUSED int index,
18 int value,
19 GWEN_UNUSED int doSignal)
20 {
21 GtkWidget *g; /* text view */
22 GtkWidget *gs; /* scrollable window */
23
24 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT));
25 assert(g);
26 gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
27 assert(gs);
28
29 switch (prop) {
30 case GWEN_DialogProperty_Enabled:
31 gtk_widget_set_sensitive(GTK_WIDGET(gs), (value==0)?FALSE:TRUE);
32 return 0;
33
34 case GWEN_DialogProperty_Focus:
35 gtk_widget_grab_focus(GTK_WIDGET(gs));
36 return 0;
37
38 case GWEN_DialogProperty_Width:
39 case GWEN_DialogProperty_Height:
40 /* just ignore these for now */
41 return 0;
42
43 default:
44 break;
45 }
46
47 DBG_WARN(GWEN_LOGDOMAIN,
48 "Function is not appropriate for this type of widget (%s)",
49 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
50 return GWEN_ERROR_INVALID;
51 }
52
53
54
55
56 static GWENHYWFAR_CB
Gtk2Gui_WTextBrowser_GetIntProperty(GWEN_WIDGET * w,GWEN_DIALOG_PROPERTY prop,GWEN_UNUSED int index,int defaultValue)57 int Gtk2Gui_WTextBrowser_GetIntProperty(GWEN_WIDGET *w,
58 GWEN_DIALOG_PROPERTY prop,
59 GWEN_UNUSED int index,
60 int defaultValue)
61 {
62 GtkWidget *g; /* text view */
63 GtkWidget *gs; /* scrollable window */
64
65 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT));
66 assert(g);
67 gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
68 assert(gs);
69
70 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT));
71 assert(g);
72
73 switch (prop) {
74 case GWEN_DialogProperty_Enabled:
75 return (gtk_widget_get_sensitive(GTK_WIDGET(gs))==TRUE)?1:0;
76
77 case GWEN_DialogProperty_Focus:
78 return (gtk_widget_has_focus(GTK_WIDGET(gs))==TRUE)?1:0;
79 return 0;
80
81 case GWEN_DialogProperty_Width:
82 case GWEN_DialogProperty_Height:
83 /* just ignore these for now */
84 return 0;
85
86 default:
87 break;
88 }
89
90 DBG_WARN(GWEN_LOGDOMAIN,
91 "Function is not appropriate for this type of widget (%s)",
92 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
93 return defaultValue;
94 }
95
96
97
98 static GWENHYWFAR_CB
Gtk2Gui_WTextBrowser_SetCharProperty(GWEN_WIDGET * w,GWEN_DIALOG_PROPERTY prop,GWEN_UNUSED int index,const char * value,GWEN_UNUSED int doSignal)99 int Gtk2Gui_WTextBrowser_SetCharProperty(GWEN_WIDGET *w,
100 GWEN_DIALOG_PROPERTY prop,
101 GWEN_UNUSED int index,
102 const char *value,
103 GWEN_UNUSED int doSignal)
104 {
105 GtkWidget *g; /* text view */
106 GtkWidget *gs; /* scrollable window */
107 GWEN_BUFFER *tbuf;
108
109 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT));
110 assert(g);
111 gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
112 assert(gs);
113
114 tbuf=GWEN_Buffer_new(0, 128, 0, 1);
115 if (value && *value)
116 Gtk2Gui_GetRawText(value, tbuf);
117
118 switch (prop) {
119 case GWEN_DialogProperty_Value: {
120 GtkTextBuffer *tb;
121 GtkAdjustment *va;
122
123 tb=gtk_text_view_get_buffer(GTK_TEXT_VIEW(g));
124 assert(tb);
125 gtk_text_buffer_set_text(tb, GWEN_Buffer_GetStart(tbuf), -1);
126
127 /* scroll to end */
128 va=gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(gs));
129 if (va)
130 gtk_adjustment_set_value(va, va->upper);
131 GWEN_Buffer_free(tbuf);
132
133 return 0;
134 }
135 default:
136 break;
137 }
138
139 DBG_WARN(GWEN_LOGDOMAIN,
140 "Function is not appropriate for this type of widget (%s)",
141 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
142 GWEN_Buffer_free(tbuf);
143 return GWEN_ERROR_INVALID;
144 }
145
146
147
148 static GWENHYWFAR_CB
Gtk2Gui_WTextBrowser_GetCharProperty(GWEN_WIDGET * w,GWEN_DIALOG_PROPERTY prop,GWEN_UNUSED int index,const char * defaultValue)149 const char *Gtk2Gui_WTextBrowser_GetCharProperty(GWEN_WIDGET *w,
150 GWEN_DIALOG_PROPERTY prop,
151 GWEN_UNUSED int index,
152 const char *defaultValue)
153 {
154 GtkWidget *g; /* text view */
155 GtkWidget *gs; /* scrollable window */
156
157 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_CONTENT));
158 assert(g);
159 gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
160 assert(gs);
161
162 switch (prop) {
163 case GWEN_DialogProperty_Value: {
164 GtkTextBuffer *tb;
165 GtkTextIter startIter;
166 GtkTextIter endIter;
167 gchar *s;
168
169 tb=gtk_text_view_get_buffer(GTK_TEXT_VIEW(g));
170 assert(tb);
171
172 gtk_text_buffer_get_start_iter(tb, &startIter);
173 gtk_text_buffer_get_end_iter(tb, &endIter);
174
175 s=gtk_text_buffer_get_text(tb, &startIter, &endIter, FALSE);
176 if (s) {
177 GWEN_Widget_SetText(w, GTK2_DIALOG_STRING_VALUE, s);
178 g_free(s);
179 return GWEN_Widget_GetText(w, GTK2_DIALOG_STRING_VALUE);
180 }
181 return defaultValue;
182 }
183
184 default:
185 break;
186 }
187
188 DBG_WARN(GWEN_LOGDOMAIN,
189 "Function is not appropriate for this type of widget (%s)",
190 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
191 return defaultValue;
192 }
193
194
195
Gtk2Gui_WTextBrowser_Setup(GWEN_WIDGET * w)196 int Gtk2Gui_WTextBrowser_Setup(GWEN_WIDGET *w)
197 {
198 GtkWidget *gs;
199 GtkWidget *g;
200 const char *s;
201 /*uint32_t flags;*/
202 GWEN_WIDGET *wParent;
203
204 /*flags=GWEN_Widget_GetFlags(w);*/
205 wParent=GWEN_Widget_Tree_GetParent(w);
206 s=GWEN_Widget_GetText(w, 0);
207
208 /* create widget */
209 gs=gtk_scrolled_window_new(NULL, NULL);
210 g=gtk_text_view_new();
211 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(gs), g);
212
213 if (s && *s) {
214 GWEN_BUFFER *tbuf;
215
216 tbuf=GWEN_Buffer_new(0, 128, 0, 1);
217 Gtk2Gui_GetRawText(s, tbuf);
218 gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(g)), GWEN_Buffer_GetStart(tbuf), -1);
219 GWEN_Buffer_free(tbuf);
220 }
221
222 GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void *) gs);
223 GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void *) g);
224
225 GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WTextBrowser_SetIntProperty);
226 GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WTextBrowser_GetIntProperty);
227 GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WTextBrowser_SetCharProperty);
228 GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WTextBrowser_GetCharProperty);
229
230 if (wParent)
231 GWEN_Widget_AddChildGuiWidget(wParent, w);
232
233 return 0;
234 }
235
236
237