gwenhywfar  4.3.3
w_textedit.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_WTextEdit_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_WTextEdit_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_WTextEdit_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     GtkTextBuffer *tb;
00101     GtkTextIter endIter;
00102 
00103     tb=gtk_text_view_get_buffer(GTK_TEXT_VIEW(g));
00104     assert(tb);
00105     if (value && *value)
00106       gtk_text_buffer_set_text(tb, value, -1);
00107     else
00108       gtk_text_buffer_set_text(tb, "", -1);
00109 
00110     gtk_text_buffer_get_end_iter(tb, &endIter);
00111     gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(g), &endIter, 0.5, FALSE, 0.0, 0.0);
00112     return 0;
00113   }
00114   default:
00115     break;
00116   }
00117 
00118   DBG_WARN(GWEN_LOGDOMAIN,
00119            "Function is not appropriate for this type of widget (%s)",
00120            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00121   return GWEN_ERROR_INVALID;
00122 }
00123 
00124 
00125 
00126 static GWENHYWFAR_CB
00127 const char* Gtk2Gui_WTextEdit_GetCharProperty(GWEN_WIDGET *w,
00128                                               GWEN_DIALOG_PROPERTY prop,
00129                                               int index,
00130                                               const char *defaultValue) {
00131   GtkWidget *g;
00132 
00133   g=GTK_WIDGET(GWEN_Widget_GetImplData(w, GTK2_DIALOG_WIDGET_REAL));
00134   assert(g);
00135 
00136   switch(prop) {
00137   case GWEN_DialogProperty_Value: {
00138     GtkTextBuffer *tb;
00139     GtkTextIter startIter;
00140     GtkTextIter endIter;
00141     gchar *s;
00142 
00143     tb=gtk_text_view_get_buffer(GTK_TEXT_VIEW(g));
00144     assert(tb);
00145 
00146     gtk_text_buffer_get_start_iter(tb, &startIter);
00147     gtk_text_buffer_get_end_iter(tb, &endIter);
00148 
00149     s=gtk_text_buffer_get_text(tb, &startIter, &endIter, FALSE);
00150     if (s) {
00151       GWEN_Widget_SetText(w, GTK2_DIALOG_STRING_VALUE, s);
00152       g_free(s);
00153       return GWEN_Widget_GetText(w, GTK2_DIALOG_STRING_VALUE);
00154     }
00155     return defaultValue;
00156   }
00157 
00158   default:
00159     break;
00160   }
00161 
00162   DBG_WARN(GWEN_LOGDOMAIN,
00163            "Function is not appropriate for this type of widget (%s)",
00164            GWEN_Widget_Type_toString(GWEN_Widget_GetType(w)));
00165   return defaultValue;
00166 }
00167 
00168 
00169 
00170 static void Gtk2Gui_WTextEdit_Changed_handler(GtkTextBuffer *buffer, gpointer data) {
00171   GWEN_WIDGET *w;
00172   int rv;
00173 
00174   w=data;
00175   assert(w);
00176   rv=GWEN_Dialog_EmitSignal(GWEN_Widget_GetDialog(w),
00177                             GWEN_DialogEvent_TypeValueChanged,
00178                             GWEN_Widget_GetName(w));
00179   if (rv==GWEN_DialogEvent_ResultAccept)
00180     Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 1);
00181   else if (rv==GWEN_DialogEvent_ResultReject)
00182     Gtk2Gui_Dialog_Leave(GWEN_Widget_GetTopDialog(w), 0);
00183 }
00184 
00185 
00186 
00187 int Gtk2Gui_WTextEdit_Setup(GWEN_WIDGET *w) {
00188   GtkWidget *g;
00189   const char *s;
00190   uint32_t flags;
00191   GWEN_WIDGET *wParent;
00192   gulong changed_handler_id;
00193 
00194   flags=GWEN_Widget_GetFlags(w);
00195   wParent=GWEN_Widget_Tree_GetParent(w);
00196   s=GWEN_Widget_GetText(w, 0);
00197 
00198   /* create widget */
00199   g=gtk_text_view_new();
00200   if (s && *s)
00201     gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(g)), s, -1);
00202 
00203   GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g);
00204   GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g);
00205 
00206   GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WTextEdit_SetIntProperty);
00207   GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WTextEdit_GetIntProperty);
00208   GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WTextEdit_SetCharProperty);
00209   GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WTextEdit_GetCharProperty);
00210 
00211   changed_handler_id=g_signal_connect(gtk_text_view_get_buffer(GTK_TEXT_VIEW(g)),
00212                                       "changed",
00213                                       G_CALLBACK (Gtk2Gui_WTextEdit_Changed_handler),
00214                                       w);
00215 
00216   if (wParent)
00217     GWEN_Widget_AddChildGuiWidget(wParent, w);
00218 
00219   return 0;
00220 }
00221 
00222