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
Gtk3Gui_WScrollArea_SetIntProperty(GWEN_WIDGET * w,GWEN_DIALOG_PROPERTY prop,GWEN_UNUSED int index,int value,GWEN_UNUSED int doSignal)15 int Gtk3Gui_WScrollArea_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, GTK3_DIALOG_WIDGET_CONTENT));
25   assert(g);
26   gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK3_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
Gtk3Gui_WScrollArea_GetIntProperty(GWEN_WIDGET * w,GWEN_DIALOG_PROPERTY prop,GWEN_UNUSED int index,int defaultValue)57 int Gtk3Gui_WScrollArea_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, GTK3_DIALOG_WIDGET_CONTENT));
66   assert(g);
67   gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK3_DIALOG_WIDGET_REAL));
68   assert(gs);
69 
70   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK3_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
Gtk3Gui_WScrollArea_SetCharProperty(GWEN_WIDGET * w,GWEN_UNUSED GWEN_DIALOG_PROPERTY prop,GWEN_UNUSED int index,GWEN_UNUSED const char * value,GWEN_UNUSED int doSignal)99 int Gtk3Gui_WScrollArea_SetCharProperty(GWEN_WIDGET *w,
100                                         GWEN_UNUSED GWEN_DIALOG_PROPERTY prop,
101                                         GWEN_UNUSED int index,
102                                         GWEN_UNUSED const char *value,
103                                         GWEN_UNUSED int doSignal)
104 {
105   GtkWidget *g;         /* scrollable window */
106   GtkWidget *gContent;  /* vbox */
107 
108   gContent=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK3_DIALOG_WIDGET_CONTENT));
109   assert(gContent);
110   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK3_DIALOG_WIDGET_REAL));
111   assert(g);
112 
113   DBG_WARN(GWEN_LOGDOMAIN,
114            "Function is not appropriate for this type of widget (%s)",
115            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
116   return GWEN_ERROR_INVALID;
117 }
118 
119 
120 
121 static GWENHYWFAR_CB
Gtk3Gui_WScrollArea_GetCharProperty(GWEN_WIDGET * w,GWEN_UNUSED GWEN_DIALOG_PROPERTY prop,GWEN_UNUSED int index,const char * defaultValue)122 const char *Gtk3Gui_WScrollArea_GetCharProperty(GWEN_WIDGET *w,
123                                                 GWEN_UNUSED GWEN_DIALOG_PROPERTY prop,
124                                                 GWEN_UNUSED int index,
125                                                 const char *defaultValue)
126 {
127   GtkWidget *gs; /* scrollable window */
128   GtkWidget *g;  /* vbox */
129 
130   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK3_DIALOG_WIDGET_CONTENT));
131   assert(g);
132   gs=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK3_DIALOG_WIDGET_REAL));
133   assert(gs);
134 
135   DBG_WARN(GWEN_LOGDOMAIN,
136            "Function is not appropriate for this type of widget (%s)",
137            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
138   return defaultValue;
139 }
140 
141 
142 
143 static GWENHYWFAR_CB
Gtk3Gui_WScrollArea_AddChildGuiWidget(GWEN_WIDGET * w,GWEN_WIDGET * wChild)144 int Gtk3Gui_WScrollArea_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild)
145 {
146   GtkWidget *g;
147   GtkWidget *gChild;
148   uint32_t cflags;
149 
150   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK3_DIALOG_WIDGET_CONTENT));
151   assert(g);
152 
153   gChild=GTK_WIDGET(GWEN_Widget_GetImplData(wChild, GTK3_DIALOG_WIDGET_REAL));
154   assert(gChild);
155 
156   cflags=GWEN_Widget_GetFlags(wChild);
157 
158   gtk_box_pack_start(GTK_BOX(g), gChild,
159                      (cflags & GWEN_WIDGET_FLAGS_FILLY)?TRUE:FALSE,
160                      (cflags & GWEN_WIDGET_FLAGS_FILLY)?TRUE:FALSE,
161                      0);
162 
163   return 0;
164 }
165 
166 
167 
Gtk3Gui_WScrollArea_Setup(GWEN_WIDGET * w)168 int Gtk3Gui_WScrollArea_Setup(GWEN_WIDGET *w)
169 {
170   GtkWidget *g;
171   GtkWidget *gContent;
172   GWEN_WIDGET *wParent;
173 
174   wParent=GWEN_Widget_Tree_GetParent(w);
175 
176   /* create widget */
177   g=gtk_scrolled_window_new(NULL, NULL);
178   gContent=gtk_box_new(GTK_ORIENTATION_VERTICAL,
179                        GTK3_GUI_DIALOG_DEFAULT_BOX_SPACING);
180 
181   GWEN_Widget_SetImplData(w, GTK3_DIALOG_WIDGET_REAL, (void *) g);
182   GWEN_Widget_SetImplData(w, GTK3_DIALOG_WIDGET_CONTENT, (void *) gContent);
183 
184   GWEN_Widget_SetSetIntPropertyFn(w, Gtk3Gui_WScrollArea_SetIntProperty);
185   GWEN_Widget_SetGetIntPropertyFn(w, Gtk3Gui_WScrollArea_GetIntProperty);
186   GWEN_Widget_SetSetCharPropertyFn(w, Gtk3Gui_WScrollArea_SetCharProperty);
187   GWEN_Widget_SetGetCharPropertyFn(w, Gtk3Gui_WScrollArea_GetCharProperty);
188   GWEN_Widget_SetAddChildGuiWidgetFn(w, Gtk3Gui_WScrollArea_AddChildGuiWidget);
189 
190   if (wParent)
191     GWEN_Widget_AddChildGuiWidget(wParent, w);
192 
193   return 0;
194 }
195 
196 
197