gwenhywfar  4.3.1
w_lineedit.c
Go to the documentation of this file.
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_WLineEdit_SetIntProperty(GWEN_WIDGET *w,
00016                                        GWEN_DIALOG_PROPERTY prop,
00017                                        int index,
00018                                        int value,
00019                                        int doSignal) {
00020   GtkWidget *g;
00021 
00022   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00023   assert(g);
00024 
00025   switch(prop) {
00026   case GWEN_DialogProperty_Enabled:
00027     gtk_widget_set_sensitive(GTK_WIDGET(g), (value==0)?FALSE:TRUE);
00028     return 0;
00029   
00030   case GWEN_DialogProperty_Focus:
00031     gtk_widget_grab_focus(GTK_WIDGET(g));
00032     return 0;
00033 
00034   case GWEN_DialogProperty_Width:
00035   case GWEN_DialogProperty_Height:
00036     /* just ignore these for now */
00037     return 0;
00038 
00039   default:
00040     break;
00041   }
00042 
00043   DBG_WARN(GWEN_LOGDOMAIN,
00044            "Function is not appropriate for this type of widget (%s)",
00045            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00046   return GWEN_ERROR_INVALID;
00047 }
00048 
00049 
00050 
00051 
00052 static GWENHYWFAR_CB
00053 int Gtk2Gui_WLineEdit_GetIntProperty(GWEN_WIDGET *w,
00054                                        GWEN_DIALOG_PROPERTY prop,
00055                                        int index,
00056                                        int defaultValue) {
00057   GtkWidget *g;
00058 
00059   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00060   assert(g);
00061 
00062   switch(prop) {
00063   case GWEN_DialogProperty_Enabled:
00064     return (gtk_widget_get_sensitive(GTK_WIDGET(g))==TRUE)?1:0;
00065 
00066   case GWEN_DialogProperty_Focus:
00067     return (gtk_widget_has_focus(GTK_WIDGET(g))==TRUE)?1:0;
00068     return 0;
00069 
00070   case GWEN_DialogProperty_Width:
00071   case GWEN_DialogProperty_Height:
00072     /* just ignore these for now */
00073     return 0;
00074 
00075   default:
00076     break;
00077   }
00078 
00079   DBG_WARN(GWEN_LOGDOMAIN,
00080            "Function is not appropriate for this type of widget (%s)",
00081            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00082   return defaultValue;
00083 }
00084 
00085 
00086 
00087 static GWENHYWFAR_CB
00088 int Gtk2Gui_WLineEdit_SetCharProperty(GWEN_WIDGET *w,
00089                                         GWEN_DIALOG_PROPERTY prop,
00090                                         int index,
00091                                         const char *value,
00092                                         int doSignal) {
00093   GtkWidget *g;
00094 
00095   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00096   assert(g);
00097 
00098   switch(prop) {
00099   case GWEN_DialogProperty_Value:
00100     gtk_entry_set_text(GTK_ENTRY(g), value);
00101     return 0;
00102   default:
00103     break;
00104   }
00105 
00106   DBG_WARN(GWEN_LOGDOMAIN,
00107            "Function is not appropriate for this type of widget (%s)",
00108            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00109   return GWEN_ERROR_INVALID;
00110 }
00111 
00112 
00113 
00114 static GWENHYWFAR_CB
00115 const char* Gtk2Gui_WLineEdit_GetCharProperty(GWEN_WIDGET *w,
00116                                                 GWEN_DIALOG_PROPERTY prop,
00117                                                 int index,
00118                                                 const char *defaultValue) {
00119   GtkWidget *g;
00120 
00121   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00122   assert(g);
00123 
00124   switch(prop) {
00125   case GWEN_DialogProperty_Value:
00126     return gtk_entry_get_text(GTK_ENTRY(g));
00127   default:
00128     break;
00129   }
00130 
00131   DBG_WARN(GWEN_LOGDOMAIN,
00132            "Function is not appropriate for this type of widget (%s)",
00133            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00134   return defaultValue;
00135 }
00136 
00137 
00138 
00139 static void Gtk2Gui_WLineEdit_Deleted_text_handler(GtkEntryBuffer *entrybuffer,
00140                                                    guint arg1,
00141                                                    guint arg2,
00142                                                    gpointer data) {
00143   GWEN_WIDGET *w;
00144   int rv;
00145 
00146   w=data;
00147   assert(w);
00148   rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w),
00149                             GWEN_DialogEvent_TypeValueChanged,
00150                             GWEN_Widget_GetName(w));
00151   if (rv==GWEN_DialogEvent_ResultAccept)
00152     Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1);
00153   else if (rv==GWEN_DialogEvent_ResultReject)
00154     Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0);
00155 }
00156 
00157 
00158 
00159 static void Gtk2Gui_WLineEdit_Inserted_text_handler(GtkEntryBuffer *entrybuffer,
00160                                                     guint arg1,
00161                                                     gchar *arg2,
00162                                                     guint arg3,
00163                                                     gpointer data) {
00164   GWEN_WIDGET *w;
00165   int rv;
00166 
00167   w=data;
00168   assert(w);
00169   rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w),
00170                             GWEN_DialogEvent_TypeValueChanged,
00171                             GWEN_Widget_GetName(w));
00172   if (rv==GWEN_DialogEvent_ResultAccept)
00173     Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1);
00174   else if (rv==GWEN_DialogEvent_ResultReject)
00175     Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0);
00176 }
00177 
00178 
00179 
00180 int Gtk2Gui_WLineEdit_Setup(GWEN_WIDGET *w) {
00181   GtkWidget *g;
00182   const char *s;
00183   uint32_t flags;
00184   GWEN_WIDGET *wParent;
00185   gulong deleted_text_handler_id;
00186   gulong inserted_text_handler_id;
00187   gboolean text_is_visible;
00188 
00189   flags=GWEN_Widget_GetFlags(w);
00190   text_is_visible = (flags & GWEN_WIDGET_FLAGS_PASSWORD) == 0;
00191   wParent=GWEN_Widget_Tree_GetParent(w);
00192   s=GWEN_Widget_GetText(w, 0);
00193 
00194   /* create widget */
00195   g=gtk_entry_new();
00196   if (s && *s)
00197     gtk_entry_set_text(GTK_ENTRY(g), s);
00198   gtk_entry_set_visibility(GTK_ENTRY(g), text_is_visible);
00199 
00200   GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g);
00201   GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g);
00202 
00203   GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WLineEdit_SetIntProperty);
00204   GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WLineEdit_GetIntProperty);
00205   GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WLineEdit_SetCharProperty);
00206   GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WLineEdit_GetCharProperty);
00207 
00208   deleted_text_handler_id=g_signal_connect(gtk_entry_get_buffer(GTK_ENTRY(g)),
00209                                            "deleted-text",
00210                                            G_CALLBACK (Gtk2Gui_WLineEdit_Deleted_text_handler),
00211                                            w);
00212 
00213   inserted_text_handler_id=g_signal_connect(gtk_entry_get_buffer(GTK_ENTRY(g)),
00214                                             "inserted-text",
00215                                             G_CALLBACK (Gtk2Gui_WLineEdit_Inserted_text_handler),
00216                                             w);
00217 
00218   if (wParent)
00219     GWEN_Widget_AddChildGuiWidget(wParent, w);
00220 
00221   return 0;
00222 }
00223 
00224