00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 typedef struct GTK2_GRIDLAYOUT_WIDGET GTK2_GRIDLAYOUT_WIDGET;
00013 struct GTK2_GRIDLAYOUT_WIDGET {
00014 int sortByRow;
00015 int allocatedColumns;
00016 int allocatedRows;
00017
00018 int currentColumn;
00019 int currentRow;
00020 };
00021
00022
00023 GWEN_INHERIT(GWEN_WIDGET, GTK2_GRIDLAYOUT_WIDGET)
00024
00025
00026
00027 static GWENHYWFAR_CB
00028 int Gtk2Gui_WGridLayout_SetIntProperty(GWEN_WIDGET *w,
00029 GWEN_DIALOG_PROPERTY prop,
00030 int index,
00031 int value,
00032 int doSignal) {
00033 GtkWidget *g;
00034
00035 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00036 assert(g);
00037
00038 switch(prop) {
00039 case GWEN_DialogProperty_Enabled:
00040 gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE);
00041 return 0;
00042
00043 case GWEN_DialogProperty_Focus:
00044 gtk_widget_grab_focus(GTK_WIDGET(g));
00045 return 0;
00046
00047 default:
00048 break;
00049 }
00050
00051 DBG_WARN(GWEN_LOGDOMAIN,
00052 "Function is not appropriate for this type of widget (%s)",
00053 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00054 return GWEN_ERROR_INVALID;
00055 }
00056
00057
00058
00059
00060 static GWENHYWFAR_CB
00061 int Gtk2Gui_WGridLayout_GetIntProperty(GWEN_WIDGET *w,
00062 GWEN_DIALOG_PROPERTY prop,
00063 int index,
00064 int defaultValue) {
00065 GtkWidget *g;
00066
00067 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00068 assert(g);
00069
00070 switch(prop) {
00071 case GWEN_DialogProperty_Enabled:
00072 return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0;
00073
00074 case GWEN_DialogProperty_Focus:
00075 return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0;
00076 return 0;
00077
00078 default:
00079 break;
00080 }
00081
00082 DBG_WARN(GWEN_LOGDOMAIN,
00083 "Function is not appropriate for this type of widget (%s)",
00084 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00085 return defaultValue;
00086 }
00087
00088
00089
00090 static GWENHYWFAR_CB
00091 int Gtk2Gui_WGridLayout_SetCharProperty(GWEN_WIDGET *w,
00092 GWEN_DIALOG_PROPERTY prop,
00093 int index,
00094 const char *value,
00095 int doSignal) {
00096 GtkWidget *g;
00097
00098 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00099 assert(g);
00100
00101 DBG_WARN(GWEN_LOGDOMAIN,
00102 "Function is not appropriate for this type of widget (%s)",
00103 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00104 return GWEN_ERROR_INVALID;
00105 }
00106
00107
00108
00109 static GWENHYWFAR_CB
00110 const char* Gtk2Gui_WGridLayout_GetCharProperty(GWEN_WIDGET *w,
00111 GWEN_DIALOG_PROPERTY prop,
00112 int index,
00113 const char *defaultValue) {
00114 GtkWidget *g;
00115
00116 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00117 assert(g);
00118
00119 DBG_WARN(GWEN_LOGDOMAIN,
00120 "Function is not appropriate for this type of widget (%s)",
00121 GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00122 return defaultValue;
00123 }
00124
00125
00126
00127 static GWENHYWFAR_CB
00128 int Gtk2Gui_WGridLayout_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) {
00129 GTK2_GRIDLAYOUT_WIDGET *xw;
00130 GtkWidget *g;
00131 GtkWidget *gChild;
00132 uint32_t cflags;
00133 int x;
00134 int y;
00135
00136 assert(w);
00137 xw=GWEN_INHERIT_GETDATA(GWEN_WIDGET, GTK2_GRIDLAYOUT_WIDGET, w);
00138 assert(xw);
00139
00140 cflags=GWEN_Widget_GetFlags(wChild);
00141
00142 g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00143 assert(g);
00144
00145 gChild=GTK_WIDGET(GWEN_Widget_GetImplData(wChild, GTK2_DIALOG_WIDGET_REAL));
00146 assert(gChild);
00147
00148 if (xw->sortByRow) {
00149
00150 y=(xw->currentRow)++;
00151 if (y>=xw->allocatedRows) {
00152 xw->currentRow=0;
00153 y=(xw->currentRow)++;
00154 xw->currentColumn++;
00155 }
00156
00157 x=xw->currentColumn;
00158 if (x>=xw->allocatedColumns) {
00159 xw->allocatedColumns=x+1;
00160 gtk_table_resize(GTK_TABLE(g), xw->allocatedRows, xw->allocatedColumns);
00161 }
00162 }
00163 else {
00164
00165 x=(xw->currentColumn)++;
00166 if (x>=xw->allocatedColumns) {
00167 xw->currentColumn=0;
00168 x=(xw->currentColumn)++;
00169 xw->currentRow++;
00170 }
00171
00172 y=xw->currentRow;
00173 if (y>=xw->allocatedRows) {
00174 xw->allocatedRows=y+1;
00175 gtk_table_resize(GTK_TABLE(g), xw->allocatedRows, xw->allocatedColumns);
00176 }
00177 }
00178
00179 gtk_table_attach(GTK_TABLE(g), gChild,
00180 x, x+1, y, y+1,
00181 (cflags & GWEN_WIDGET_FLAGS_FILLX)?(GTK_FILL|GTK_EXPAND):0,
00182 (cflags & GWEN_WIDGET_FLAGS_FILLY)?(GTK_FILL|GTK_EXPAND):0,
00183 GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING,
00184 GTK2_GUI_DIALOG_DEFAULT_BOX_SPACING);
00185
00186 return 0;
00187 }
00188
00189
00190
00191
00192 static GWENHYWFAR_CB
00193 void Gtk2Gui_WGridLayout_FreeData(void *bp, void *p) {
00194 GTK2_GRIDLAYOUT_WIDGET *xw;
00195
00196 xw=(GTK2_GRIDLAYOUT_WIDGET*) p;
00197
00198 GWEN_FREE_OBJECT(xw);
00199 }
00200
00201
00202
00203 int Gtk2Gui_WGridLayout_Setup(GWEN_WIDGET *w) {
00204 GtkWidget *g;
00205 uint32_t flags;
00206 GWEN_WIDGET *wParent;
00207 GTK2_GRIDLAYOUT_WIDGET *xw;
00208 int rows;
00209 int cols;
00210
00211 GWEN_NEW_OBJECT(GTK2_GRIDLAYOUT_WIDGET, xw);
00212 GWEN_INHERIT_SETDATA(GWEN_WIDGET, GTK2_GRIDLAYOUT_WIDGET, w, xw, Gtk2Gui_WGridLayout_FreeData);
00213
00214 flags=GWEN_Widget_GetFlags(w);
00215 wParent=GWEN_Widget_Tree_GetParent(w);
00216 cols=GWEN_Widget_GetColumns(w);
00217 rows=GWEN_Widget_GetRows(w);
00218
00219 if (rows>0) {
00220 xw->sortByRow=1;
00221 xw->allocatedRows=rows;
00222 xw->allocatedColumns=1;
00223 }
00224 else {
00225 xw->sortByRow=0;
00226 xw->allocatedColumns=cols;
00227 xw->allocatedRows=1;
00228 }
00229
00230 g=gtk_table_new(xw->allocatedRows, xw->allocatedColumns, FALSE);
00231
00232 GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g);
00233 GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g);
00234
00235 GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WGridLayout_SetIntProperty);
00236 GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WGridLayout_GetIntProperty);
00237 GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WGridLayout_SetCharProperty);
00238 GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WGridLayout_GetCharProperty);
00239 GWEN_Widget_SetAddChildGuiWidgetFn(w, Gtk2Gui_WGridLayout_AddChildGuiWidget);
00240
00241 if (wParent)
00242 GWEN_Widget_AddChildGuiWidget(wParent, w);
00243
00244 return 0;
00245 }
00246
00247