pcs.C

Go to the documentation of this file.
00001 /* Gxsm - Gnome X Scanning Microscopy
00002  * universal STM/AFM/SARLS/SPALEED/... controlling and
00003  * data analysis software
00004  * 
00005  * Copyright (C) 1999,2000,2001,2002,2003 Percy Zahl
00006  *
00007  * Authors: Percy Zahl <zahl@users.sf.net>
00008  * additional features: Andreas Klust <klust@users.sf.net>
00009  * WWW Home: http://gxsm.sf.net
00010  *
00011  * This program is free software; you can redistribute it and/or modify
00012  * it under the terms of the GNU General Public License as published by
00013  * the Free Software Foundation; either version 2 of the License, or
00014  * (at your option) any later version.
00015  *
00016  * This program is distributed in the hope that it will be useful,
00017  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00018  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00019  * GNU General Public License for more details.
00020  *
00021  * You should have received a copy of the GNU General Public License
00022  * along with this program; if not, write to the Free Software
00023  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
00024  */
00025 
00026 /* -*- Mode: C++; indent-tabs-mode: nil; c-basic-offset: 8 c-style: "K&R" -*- */
00027 
00028 #include <iostream>
00029 #include "pcs.h"
00030 #include "xsmdebug.h"
00031 #include "gtkspinbuttonsci.h"
00032 
00033 #define EC_INF 1e133
00034 
00035 GtkTooltips *remote_pcs_tips = NULL;
00036 
00037 int total_message_count = 0;
00038 int total_message_count_int = 0;
00039 
00040 Param_Control::Param_Control(UnitObj *U, char *W, double *V, double VMi, double VMa, char *p){
00041         unit = U;
00042         warning = W ? g_strdup(W) : NULL;
00043         Dval = V; Ival=0; ULval=0; Sval=0;
00044         setMin (VMi);
00045         setMax (VMa);
00046         prec = g_strdup(p);
00047         Init();
00048 }
00049 
00050 Param_Control::Param_Control(UnitObj *U, char *W, unsigned long *V, double VMi, double VMa, char *p){
00051         unit = U;
00052         warning = W ? g_strdup(W) : NULL;
00053         ULval = V; Ival=0; Dval=0; Sval=0;
00054         setMin (VMi);
00055         setMax (VMa);
00056         prec = g_strdup(p);
00057         Init();
00058 }
00059 
00060 Param_Control::Param_Control(UnitObj *U, char *W, int *V, double VMi, double VMa, char *p){
00061         unit = U;
00062         warning = W ? g_strdup(W) : NULL;
00063         Ival = V; ULval=0; Dval=0; Sval=0;
00064         setMin (VMi);
00065         setMax (VMa);
00066         prec = g_strdup(p);
00067         Init();
00068 }
00069 
00070 Param_Control::Param_Control(UnitObj *U, char *W, short *V, double VMi, double VMa, char *p){
00071         unit = U;
00072         warning = W ? g_strdup(W) : NULL;
00073         Sval = V; ULval=0; Ival=0; Dval=0;
00074         setMin (VMi);
00075         setMax (VMa);
00076         prec = g_strdup(p);
00077         Init();
00078 }
00079 
00080 Param_Control::~Param_Control(){
00081         if (warning)
00082                 g_free (warning);
00083         g_free(prec);
00084         if (refname)
00085                 g_free (refname);
00086         if (info)
00087                 g_free (info);
00088 }
00089 
00090 void Param_Control::Val(double *V){
00091         Dval = V; Ival=0; Sval=0;
00092 }
00093 
00094 void Param_Control::Val(int *V){
00095         Ival = V; Dval=0; Sval=0;
00096 }
00097 
00098 void Param_Control::Val(unsigned long *V){
00099         ULval=V; Ival = 0; Dval=0; Sval=0;
00100 }
00101 
00102 void Param_Control::Val(short *V){
00103         Sval = V; Ival=0; Dval=0;
00104 }
00105 
00106 void Param_Control::setMax(double VMa, double Vmax_warn){
00107         vMax = VMa;
00108         vMax_warn = Vmax_warn;
00109         update_limits ();
00110 }
00111   
00112 void Param_Control::setMin(double VMi, double Vmin_warn){
00113         vMin = VMi;
00114         vMin_warn = Vmin_warn;
00115         update_limits ();
00116 }
00117 
00118 void Param_Control::set_exclude(double V_ex_lo, double V_ex_hi){
00119         v_ex_lo = V_ex_lo;
00120         v_ex_hi = V_ex_hi;
00121         update_limits ();
00122 }
00123 
00124 void Param_Control::set_info (gchar* Info){
00125         if (info)
00126                 g_free (info);
00127         info = NULL;
00128         if (Info)
00129                 info = g_strdup (Info); 
00130 }
00131 
00132 void Param_Control::Prec(char *p){
00133         g_free(prec);
00134         prec = g_strdup(p);
00135 }
00136 
00137 gint Param_Control::ShowMessage(char *txt, char *options, gint default_choice){
00138         XSM_DEBUG(DBG_L2, txt );
00139 
00140         if (options)
00141                 XSM_DEBUG(DBG_L2, options );
00142 
00143         return default_choice;
00144 }
00145 
00146 void Param_Control::Put_Value(){
00147         char txt[64];
00148         Get_UsrString(txt);
00149         XSM_DEBUG(DBG_L2, txt );
00150 }
00151 
00152 double Param_Control::Get_dValue(){
00153         if(Dval)
00154                 return *Dval;
00155         else
00156                 if(Ival)
00157                         return (double)*Ival;
00158                 else
00159                         if(Sval)
00160                                 return (double)*Sval;
00161                         else
00162                                 if(ULval)
00163                                         return (double)*ULval;
00164         return 0.;
00165 }
00166 
00167 gchar *Param_Control::Get_UsrString(){
00168         gchar *fmt = g_strdup_printf("%%%s %s %s", prec, unit->Symbol(), info?info:" ");
00169         gchar *txt;     
00170         txt = g_strdup_printf(fmt, unit->Base2Usr(Get_dValue()));
00171         g_free(fmt);
00172         return txt;
00173 }
00174 
00175 void Param_Control::Get_UsrString(char *txt){
00176         gchar *fmt = g_strdup_printf("%%%s %s %s", prec, unit->Symbol(), info?info:" ");
00177         sprintf(txt, fmt, unit->Base2Usr(Get_dValue()));
00178         g_free(fmt);
00179 }
00180 
00181 void Param_Control::Set_FromValue(double nVal){
00182         if(nVal <= vMax && nVal >= vMin){
00183                 if(nVal >= vMax_warn || nVal <= vMin_warn){
00184                         if (ShowMessage ("Value is outside of WARNING limits!", "Force|Cancel", 0)){
00185                                 Put_Value ();
00186                                 return;
00187                         }       
00188                 }
00189 
00190                 if(nVal >= v_ex_lo && nVal <= v_ex_hi){
00191                         if (ShowMessage ("Value is within EXCLUDE range!", "Force|Cancel", 0) == 0){
00192                                 Put_Value ();
00193                                 return;
00194                         }
00195                 }
00196 
00197                 if(Dval)
00198                         *Dval = nVal;
00199                 else
00200                         if(Ival)
00201                                 *Ival = (int)nVal;
00202                         else
00203                                 if(Sval)
00204                                         *Sval = (short)nVal;
00205                                 else
00206                                         if(ULval)
00207                                                 *ULval = (unsigned long)nVal;
00208         }
00209         else{
00210                 gchar *ref = g_strconcat("[",refname ? refname:" ","]",NULL);
00211                 gchar *txt = g_strdup_printf("%s %s: %g ... %g %s", 
00212                                              MLD_VALID_RANGE,
00213                                              ref,
00214                                              unit->Base2Usr(vMin), 
00215                                              unit->Base2Usr(vMax), 
00216                                              unit->Symbol());
00217 
00218                 if (warning)
00219                         ShowMessage(txt);
00220                 else
00221                         g_print (txt);
00222 
00223                 g_free(txt);
00224                 g_free(ref);
00225         }
00226         Put_Value();
00227 }
00228 
00229 void Param_Control::Set_Parameter(double value, int flg, int usr2base){
00230         char ctxt[64];
00231         if(flg){
00232                 if(usr2base)
00233                         Set_FromValue(unit->Usr2Base(value));
00234                 else
00235                         Set_FromValue(value);
00236         }else{
00237                 Get_UsrString(ctxt);
00238                 XSM_DEBUG(DBG_L2, "Set Value [" << ctxt << "] = " );
00239                 std::cin >> ctxt;
00240                 Set_FromValue(unit->Usr2Base(atof(ctxt)));
00241         }
00242         if(ChangeNoticeFkt)
00243                 (*ChangeNoticeFkt)(this, FktData);
00244 }
00245 
00246 void Gtk_EntryControl::adjustment_callback(GtkAdjustment *adj, Gtk_EntryControl *gpcs){
00247 //      static GTimer* changed_delay = NULL;
00248         if (!adj) return;
00249 //      if (!adj && changed_delay) { 
00250 //              g_timer_destroy (changed_delay); 
00251 //              changed_delay = NULL; 
00252 //              return;
00253 //      } // cleanup!
00254 
00255         gpcs->Set_Parameter(adj->value, TRUE);
00256 
00257         // add jog behavior
00258 /*      if (changed_delay)
00259                 changed_delay = g_timer_new ();
00260         if (fabs (adj->value) > adj->upper*0.9){
00261                 if (g_timer_elapsed (changed_delay, NULL) < 0.5)
00262                         return;
00263                 g_timer_start (changed_delay);
00264                 adj->upper *= 5.;
00265                 adj->lower *= 5.;
00266                 gtk_adjustment_changed (GTK_ADJUSTMENT (adj));
00267         } else if (fabs (adj->value) < adj->upper*0.1){
00268                 if (g_timer_elapsed (changed_delay, NULL) < 0.5) 
00269                         return;
00270                 g_timer_start (changed_delay);
00271                 adj->upper /= 5.;
00272                 adj->lower /= 5.;
00273                 gtk_adjustment_changed (GTK_ADJUSTMENT (adj));
00274         }
00275 */
00276 }
00277 
00278 
00279 gint Gtk_EntryControl::ShowMessage(char *txt, char *options, gint default_choice){
00280         if (!txt) 
00281                 return 0;
00282 
00283         ++total_message_count_int;
00284         if (++total_message_count > 6){
00285                 std::cerr << "[" << total_message_count_int << "] Repeted Messag(es), popup blocked: " << txt << std::endl;
00286                 --total_message_count;
00287                 return 0;
00288         }
00289 
00290 
00291         if (options){
00292                 GtkWidget *label = gtk_label_new (_(txt));
00293                 gtk_widget_show (label);
00294         
00295                 GtkWidget *dialog = gtk_dialog_new_with_buttons (_("Please confirm!"),
00296                                                                  NULL,
00297                                                                  (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
00298                                                                  GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, 
00299                                                                  GTK_STOCK_CANCEL, default_choice,
00300                                                                  NULL);
00301 
00302                 gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
00303                                    label, TRUE, TRUE, GNOME_PAD);
00304                 
00305                 gint result = gtk_dialog_run (GTK_DIALOG (dialog));
00306                 gtk_widget_destroy (dialog);
00307 
00308                 --total_message_count;
00309                 return result;
00310         } else {
00311                 GtkWidget *dialog = gtk_message_dialog_new (NULL,
00312                                                             GTK_DIALOG_DESTROY_WITH_PARENT,
00313                                                             GTK_MESSAGE_INFO,
00314                                                             GTK_BUTTONS_CLOSE,
00315                                                             txt);
00316         
00317                 g_signal_connect_swapped (GTK_OBJECT (dialog), "response",
00318                                           G_CALLBACK (gtk_widget_destroy),
00319                                           GTK_OBJECT (dialog));
00320                 gtk_widget_show (dialog);
00321 
00322                 --total_message_count;
00323                 return default_choice;
00324         }
00325 
00326         return -1;
00327 }
00328 
00329 GtkWidget* make_edit (const gchar* labeltxt, GtkBox* vbox){
00330   GtkWidget *label, *entry, *hbox;
00331 
00332   hbox = gtk_hbox_new (FALSE, 0);
00333   gtk_widget_show (hbox);
00334   gtk_container_add (GTK_CONTAINER (vbox), hbox);
00335   
00336   label = gtk_label_new (labeltxt);
00337   gtk_widget_show (label);
00338   gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, GNOME_PAD);
00339 
00340   gtk_widget_set_size_request (label, 150, -1);
00341   gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
00342 
00343   entry = gtk_entry_new ();
00344   gtk_widget_set_size_request (entry, 100, -1);
00345   gtk_widget_show (entry);
00346   gtk_container_add (GTK_CONTAINER (hbox), entry);
00347   
00348   return entry;
00349 }
00350 
00351 
00352 void Gtk_EntryControl::pcs_adjustment_configure (){
00353         if (! gtk_object_get_data( GTK_OBJECT (entry), "Adjustment_PCS_Name"))
00354                 return;
00355 
00356         get_pcs_configuartion ();
00357         gchar *tmp = g_strconcat (_("Info:"\
00358                                   "\nYou can also use the gconf-editor to modify"\
00359                                   "\nthis settings, the gconf path is:"),
00360                                   "\n /apps/gxsm2/Adjustments/",
00361                                   (gchar*) gtk_object_get_data( GTK_OBJECT (entry), 
00362                                                                 "Adjustment_PCS_Name"),
00363                                   NULL);
00364 
00365         GtkWidget *label = gtk_label_new (tmp);
00366         gtk_widget_show (label);
00367         g_free (tmp);   
00368 
00369         tmp = g_strconcat (_("Configure"), 
00370                            " ",
00371                            (gchar*) gtk_object_get_data( GTK_OBJECT (entry), 
00372                                                          "Adjustment_PCS_Name"),
00373                            NULL);
00374 
00375         GtkWidget *dialog = gtk_dialog_new_with_buttons (tmp,
00376                                                          NULL,
00377                                                          (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
00378                                                          GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
00379                                                          GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
00380                                                          NULL);
00381         g_free (tmp); tmp=NULL;
00382 
00383         gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), label, TRUE, TRUE, GNOME_PAD);
00384         GtkWidget *input;
00385         Gtk_EntryControl *ec;
00386 //      gchar *msg = _("Sorry, not allowed.");
00387         gchar *msg = NULL;
00388 
00389         input = make_edit (_("Upper Limit"), GTK_BOX(GTK_DIALOG(dialog)->vbox));
00390         ec = new Gtk_EntryControl (unit, msg, &vMax, -EC_INF, EC_INF, prec, input);
00391         input = make_edit (_("Upper Warn"), GTK_BOX(GTK_DIALOG(dialog)->vbox));
00392         ec = new Gtk_EntryControl (unit, msg, &vMax_warn, -EC_INF, EC_INF, prec, input);
00393         input = make_edit (_("Lower Warn"), GTK_BOX(GTK_DIALOG(dialog)->vbox));
00394         ec = new Gtk_EntryControl (unit, msg, &vMin_warn, -EC_INF, EC_INF, prec, input);
00395         input = make_edit (_("Lower Limit"), GTK_BOX(GTK_DIALOG(dialog)->vbox));
00396         ec = new Gtk_EntryControl (unit, msg, &vMin, -EC_INF, EC_INF, prec, input);
00397 
00398         gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), gtk_hseparator_new (), TRUE, TRUE, GNOME_PAD);
00399 
00400         input = make_edit (_("Exclude Hi"), GTK_BOX(GTK_DIALOG(dialog)->vbox));
00401         ec = new Gtk_EntryControl (unit, msg, &v_ex_hi, -EC_INF, EC_INF, prec, input);
00402         input = make_edit (_("Exclude Lo"), GTK_BOX(GTK_DIALOG(dialog)->vbox));
00403         ec = new Gtk_EntryControl (unit, msg, &v_ex_lo, -EC_INF, EC_INF, prec, input);
00404 
00405         gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), gtk_hseparator_new (), TRUE, TRUE, GNOME_PAD);
00406 
00407         input = make_edit (_("Step [B1]"), GTK_BOX(GTK_DIALOG(dialog)->vbox));
00408         ec = new Gtk_EntryControl (unit, msg, &step, -EC_INF, EC_INF, prec, input);
00409         input = make_edit (_("Page [B2]"), GTK_BOX(GTK_DIALOG(dialog)->vbox));
00410         ec = new Gtk_EntryControl (unit, msg, &page, -EC_INF, EC_INF, prec, input);
00411         input = make_edit (_("Pg10 [B3]"), GTK_BOX(GTK_DIALOG(dialog)->vbox));
00412         ec = new Gtk_EntryControl (unit, msg, &page10, -EC_INF, EC_INF, prec, input);
00413 
00414         UnitObj *unity = new UnitObj(" "," ");
00415         input = make_edit (_("Progressive"), GTK_BOX(GTK_DIALOG(dialog)->vbox));
00416         ec = new Gtk_EntryControl (unity, msg, &progressive, 0., 1., "g", input);
00417         
00418         gint result = gtk_dialog_run (GTK_DIALOG (dialog));
00419 
00420         gtk_widget_destroy (dialog);
00421         delete unity;
00422 
00423         if (result == GTK_RESPONSE_ACCEPT)
00424                 put_pcs_configuartion ();
00425 }
00426 
00427 #define XRM_GET_WD(L, V) tdv = g_strdup_printf ("%g", V); xrm.Get (L, &V, tdv); g_free (tdv)
00428 
00429 void Gtk_EntryControl::get_pcs_configuartion (){
00430         XSM_DEBUG (DBG_L2, "GET-PCS-ADJ:\n");
00431         if (! gtk_object_get_data( GTK_OBJECT (entry), "Adjustment_PCS_Name"))
00432                 return;
00433 
00434         gchar *tdv=NULL;
00435         XsmRescourceManager xrm("Adjustments", 
00436                                 (gchar*)gtk_object_get_data( GTK_OBJECT (entry), 
00437                                                              "Adjustment_PCS_Name"));
00438 
00439         XSM_DEBUG(DBG_L2, ((gchar*)gtk_object_get_data( GTK_OBJECT (entry), "Adjustment_PCS_Name")));
00440 
00441         XRM_GET_WD ("upper_limit", vMax);
00442         XRM_GET_WD ("upper_warn", vMax_warn);
00443         XRM_GET_WD ("lower_warn", vMin_warn);
00444         XRM_GET_WD ("lower_limit", vMin);
00445         XRM_GET_WD ("exclude_hi", v_ex_hi);
00446         XRM_GET_WD ("exclude_lo", v_ex_lo);
00447         XRM_GET_WD ("step", step);
00448         XRM_GET_WD ("page", page);
00449         XRM_GET_WD ("page10", page10);
00450         XRM_GET_WD ("progressive", progressive);
00451 }
00452 
00453 #define XRM_PUT_WD(L, V) xrm.Put (L, V);
00454 
00455 void Gtk_EntryControl::put_pcs_configuartion (){
00456         XSM_DEBUG(DBG_L2, "PUT-PCS-ADJ:\n");
00457         if (! gtk_object_get_data( GTK_OBJECT (entry), "Adjustment_PCS_Name"))
00458                 return;
00459 
00460         XsmRescourceManager xrm("Adjustments", 
00461                                 (gchar*)gtk_object_get_data( GTK_OBJECT (entry), 
00462                                                              "Adjustment_PCS_Name"));
00463 
00464         XSM_DEBUG(DBG_L2, ((gchar*)gtk_object_get_data( GTK_OBJECT (entry), "Adjustment_PCS_Name")));
00465 
00466         XRM_PUT_WD ("upper_limit", vMax);
00467         XRM_PUT_WD ("upper_warn", vMax_warn);
00468         XRM_PUT_WD ("lower_warn", vMin_warn);
00469         XRM_PUT_WD ("lower_limit", vMin);
00470         XRM_PUT_WD ("exclude_hi", v_ex_hi);
00471         XRM_PUT_WD ("exclude_lo", v_ex_lo);
00472         XRM_PUT_WD ("step", step);
00473         XRM_PUT_WD ("page", page);
00474         XRM_PUT_WD ("page10", page10);
00475         XRM_PUT_WD ("progressive", progressive);
00476 
00477         if (GTK_IS_SPIN_BUTTON_SCI (entry)){
00478                 gtk_spin_button_sci_configure (GTK_SPIN_BUTTON_SCI (entry), 
00479                                                GTK_ADJUSTMENT (adj), progressive, 0);   
00480                 gtk_spin_button_sci_set_increments (GTK_SPIN_BUTTON_SCI (entry),
00481                                                     step, page);
00482         }
00483         if (adj){
00484                 GTK_ADJUSTMENT (adj) -> upper = vMax;
00485                 GTK_ADJUSTMENT (adj) -> lower = vMin;
00486                 gtk_adjustment_changed (GTK_ADJUSTMENT (adj));
00487         }
00488 }
00489 
00490 static gint
00491 ec_gtk_spin_button_sci_output (GtkSpinbuttonsci *spin_button_sci)
00492 {   
00493         gchar *buf = ((Gtk_EntryControl *)gtk_object_get_data( GTK_OBJECT (spin_button_sci), "Gtk_EntryControl"))->Get_UsrString();
00494         if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button_sci))))
00495                 gtk_entry_set_text (GTK_ENTRY (spin_button_sci), buf);
00496         g_free (buf);
00497         return TRUE;
00498 }
00499 
00500 static gint
00501 ec_gtk_spin_button_sci_input (GtkSpinbuttonsci *spin_button_sci,
00502                                gdouble       *new_val)
00503 {
00504         gchar *err = NULL;
00505         *new_val = g_strtod (gtk_entry_get_text (GTK_ENTRY (spin_button_sci)), &err);
00506         *new_val = (gdouble)(((Gtk_EntryControl *)gtk_object_get_data( GTK_OBJECT (spin_button_sci), "Gtk_EntryControl"))->Convert2Base (*new_val));
00507 
00508         if (*err)
00509                 return GTK_INPUT_ERROR;
00510         else
00511                 return FALSE;
00512 }
00513 
00514 static void 
00515 ec_pcs_adjustment_configure (GtkWidget *menuitem, Gtk_EntryControl *gpcs){
00516         gpcs->pcs_adjustment_configure ();
00517 }
00518 
00519 
00520 static void 
00521 ec_pcs_populate_popup (GtkEntry *entry, GtkMenu *menu, Gtk_EntryControl* gpcs){
00522         GtkWidget *menuitem;
00523 
00524         menuitem = gtk_separator_menu_item_new ();
00525         gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
00526         gtk_widget_show (menuitem);
00527 
00528         gchar *cfg_label = g_strconcat (_("Configure"),
00529                                         " ",
00530                                         gtk_object_get_data( GTK_OBJECT (entry), 
00531                                                              "Adjustment_PCS_Name"),
00532                                         NULL);
00533 
00534         menuitem = gtk_menu_item_new_with_label (cfg_label);
00535         g_signal_connect (menuitem, "activate",
00536                           G_CALLBACK (ec_pcs_adjustment_configure), gpcs);
00537 
00538         gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
00539         gtk_widget_show (menuitem);
00540 }
00541 
00542 void Gtk_EntryControl::InitRegisterCb(double AdjStep, double AdjPage, double AdjProg){
00543         adj=NULL;
00544         enable_client = TRUE;
00545 
00546         page10 = 10.*AdjPage;
00547         page   = AdjPage;
00548         step   = AdjStep;
00549         progressive = AdjProg;
00550 
00551         if (GTK_IS_SPIN_BUTTON_SCI (entry)){
00552                 XSM_DEBUG (DBG_L2, "Entry is GTK_IS_SPIN_BUTTON_SCI, retrieving PCS adj configuration.\n");
00553                 get_pcs_configuartion ();
00554         }
00555 
00556         Put_Value();
00557 
00558         gtk_object_set_data( GTK_OBJECT (entry), "Gtk_EntryControl", this);
00559         gtk_signal_connect (GTK_OBJECT (entry), "activate",
00560                             GTK_SIGNAL_FUNC (&Gtk_EntryControl::update_callback),
00561                             (gpointer) NULL);
00562         gtk_signal_connect (GTK_OBJECT (entry), "focus_out_event",
00563                             GTK_SIGNAL_FUNC (&Gtk_EntryControl::update_callback),
00564                             (gpointer) NULL);
00565 
00566         if(AdjStep){
00567                 gtk_signal_connect (GTK_OBJECT (entry), "populate_popup",
00568                                     GTK_SIGNAL_FUNC (&ec_pcs_populate_popup),
00569                                     (gpointer) this);
00570 
00571                 adj = gtk_adjustment_new( Get_dValue (), vMin, vMax, step, page, 0);
00572                 gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
00573                                     GTK_SIGNAL_FUNC (Gtk_EntryControl::adjustment_callback), this);
00574 
00575                 if (GTK_IS_SPIN_BUTTON_SCI (entry)){
00576                         gtk_signal_connect (GTK_OBJECT (entry), "output",
00577                                             GTK_SIGNAL_FUNC (&ec_gtk_spin_button_sci_output),
00578                                             (gpointer) NULL);
00579                         gtk_signal_connect (GTK_OBJECT (entry), "input",
00580                                             GTK_SIGNAL_FUNC (&ec_gtk_spin_button_sci_input),
00581                                             (gpointer) NULL);
00582                         gtk_spin_button_sci_configure (GTK_SPIN_BUTTON_SCI (entry), 
00583                                                        GTK_ADJUSTMENT (adj), progressive, 0);   
00584                 }
00585         }
00586 }
00587 
00588 GSList *Gtk_EntryControl::AddEntry2RemoteList(gchar *RefName, GSList *remotelist){
00589         gchar *help;
00590         if(refname) 
00591                 g_free (refname);
00592         refname = g_strdup(RefName);
00593         
00594         if (!remote_pcs_tips){
00595                 remote_pcs_tips = gtk_tooltips_new ();
00596                 gtk_tooltips_disable (remote_pcs_tips);
00597         }
00598 
00599         help = g_strconcat ("Remote example: set (\"", refname, "\", \"12.3\")\n", NULL);
00600         gtk_tooltips_set_tip (GTK_TOOLTIPS (remote_pcs_tips), entry, refname, help);
00601           
00602         return g_slist_prepend(remotelist, this);
00603 }

Generated on Sat Apr 1 09:04:02 2006 for GXSM by  doxygen 1.4.6