libcvd-members
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libcvd-members] gvars3 gvars3/GUI_Fltk.h src/GUI_Fltk.cc src/GU...


From: Edward Rosten
Subject: [libcvd-members] gvars3 gvars3/GUI_Fltk.h src/GUI_Fltk.cc src/GU...
Date: Thu, 14 Jun 2007 21:37:28 +0000

CVSROOT:        /cvsroot/libcvd
Module name:    gvars3
Changes by:     Edward Rosten <edrosten>        07/06/14 21:37:27

Modified files:
        gvars3         : GUI_Fltk.h 
        src            : GUI_Fltk.cc GUI_readline.cc 

Log message:
        Backported AddSpin to GUI_Fltk

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gvars3/gvars3/GUI_Fltk.h?cvsroot=libcvd&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gvars3/src/GUI_Fltk.cc?cvsroot=libcvd&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/gvars3/src/GUI_readline.cc?cvsroot=libcvd&r1=1.5&r2=1.6

Patches:
Index: gvars3/GUI_Fltk.h
===================================================================
RCS file: /cvsroot/libcvd/gvars3/gvars3/GUI_Fltk.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- gvars3/GUI_Fltk.h   22 Nov 2005 18:33:27 -0000      1.4
+++ gvars3/GUI_Fltk.h   14 Jun 2007 21:37:27 -0000      1.5
@@ -53,6 +53,9 @@
                void AddPushButton(std::string cmd, std::string args);
                void AddToggleButton(std::string cmd, std::string args);
                void AddSlider(std::string cmd, std::string args);
+               void AddSpin(std::string cmd, std::string args);
+               //void AddSmallToggle(std::string cmd, std::string args);
+
 
                std::string remove_suffix(std::string cmd, std::string suffix);
                bool   check_window(std::string win_name, std::string fname);
@@ -81,6 +84,9 @@
                static void AddToggleButtonCB(void*, std::string, std::string);
                static void AddSliderCB(void*, std::string, std::string);
                static void AddMonitorCB(void*, std::string, std::string);
+               static void AddSpinCB(void*, std::string, std::string);
+               //static void AddSmallToggleCB(void*, std::string, std::string);
+
                static void* do_stuff_CB(void*);
 };
                

Index: src/GUI_Fltk.cc
===================================================================
RCS file: /cvsroot/libcvd/gvars3/src/GUI_Fltk.cc,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- src/GUI_Fltk.cc     22 Nov 2005 18:33:34 -0000      1.4
+++ src/GUI_Fltk.cc     14 Jun 2007 21:37:27 -0000      1.5
@@ -34,6 +34,7 @@
 #include <FL/Fl_Button.h>
 #include <FL/Fl_Check_Button.h>
 #include <Fl/Fl_Value_Slider.h>
+#include <Fl/Fl_Value_Input.h>
 #include <Fl/Fl_Box.h>
 
 
@@ -170,9 +171,17 @@
 
                void add(Fl_Widget* widg)
                {
+            int lw = 0, lh = 0;
+
+            if((widg->align() & FL_ALIGN_LEFT) && !(widg->align() & 
FL_ALIGN_INSIDE) )
+                widg->measure_label(lw, lh);
+
+
+
+
                        //Position the widget
-                       widg->resize(GUI_Fltk::widget_padding_x, h() + 
GUI_Fltk::widget_padding_y, 
-                                                w() - 2 * 
GUI_Fltk::widget_padding_x , GUI_Fltk::widget_height);
+                       widg->resize(GUI_Fltk::widget_padding_x + lw, h() + 
GUI_Fltk::widget_padding_y, 
+                                                w() - 2 * 
GUI_Fltk::widget_padding_x - lw , GUI_Fltk::widget_height);
 
                        //Resize the window
                        size(w(), h() + GUI_Fltk::widget_height + 2 * 
GUI_Fltk::widget_padding_y);
@@ -259,6 +268,8 @@
        gui->RegisterCommand(vs[0] + ".AddToggleButton", AddToggleButtonCB, 
this);
        gui->RegisterCommand(vs[0] + ".AddSlider", AddSliderCB, this);
        gui->RegisterCommand(vs[0] + ".AddMonitor", AddMonitorCB, this);
+       gui->RegisterCommand(vs[0] + ".AddSpin", AddSpinCB, this);
+       //gui->RegisterCommand(vs[0] + ".AddSmallToggleButton", 
AddSmallToggleCB, this);
 }
 
 void GUI_Fltk::DestroyWindowCB(void* ptr, string cmd, string args)
@@ -280,6 +291,9 @@
        gui->UnRegisterCommand(win_name + ".AddToggleButton");
        gui->UnRegisterCommand(win_name + ".AddSlider");
        gui->UnRegisterCommand(win_name + ".AddMonitor");
+       gui->UnRegisterCommand(win_name + ".AddSpin");
+       //gui->UnRegisterCommand(win_name + ".AddSmallToggleButton");
+
 
        delete windows[win_name].win;
        //windows[win_name].win->hide();
@@ -589,4 +603,109 @@
 }
 
 //GUI_Fltk  Gui_Fltk(&GUI);
+
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+//
+// Spincontrol stuff
+//
+
+void GUI_Fltk::AddSpinCB(void* ptr, string cmd, string args)
+{
+       //Fl::lock();
+       UI.AddSpin(cmd, args);
+       //Fl::unlock();
+}
+
+class spin2: public Fl_Value_Input
+{
+       public:
+               spin2(string gvar_name, string t,  GVars2 *pgv2, double min, 
double max)
+               :Fl_Value_Input(0, 0, 1, 1),gv2(pgv2),varname(gvar_name), 
title(t)
+               {
+                       label(title.c_str());
+                       align(FL_ALIGN_LEFT);
+                       bounds(min, max);
+                       callback(my_callback);
+                       when(FL_WHEN_CHANGED);
+                       increment(0, 1);
+                       poll_update();
+               }
+
+               void poll_update()
+               {
+                       string crnt=gv2->StringValue(varname, true);
+
+
+                       if(crnt != cached_value)
+                       {
+                               cached_value = crnt;
+                               double newval=0;
+                               serialize::from_string(crnt, newval);
+
+                               //Update range if necessary
+                               if(newval > maximum()) maximum(newval);
+                               if(newval < minimum()) minimum(newval);
+
+                               value(newval);
+                       }
+               }
+
+               void set_gvar_to_value()
+               {
+                       ostringstream ost;
+                       ost << value();
+                       gv2->SetVar(varname, ost.str(), 1);
+                       cached_value = ost.str();
+               }
+
+       private:
+               GVars2 *gv2;
+               string varname, cached_value, title;
+
+               static void my_callback(Fl_Widget* w, long what_shall_I_do)
+               {
+                       spin2* s = (spin2*) w;
+
+                       if(what_shall_I_do == POLL_UPDATE)
+                               s->poll_update();
+                       else
+                               s->set_gvar_to_value();
+               }
+};
+
+void GUI_Fltk::AddSpin(string cmd, string args)
+{
+       string win_name = remove_suffix(cmd, ".AddSpin");
+       string title = "";
+
+       vector<string> vs = ChopAndUnquoteString(args);
+       if(vs.size() != 3 && vs.size() != 4)
+       {
+               cerr << "! GUI_Fltk::AddSpin: Need 3-4 params (gvar_name min 
max [title]])." << endl;
+               return;
+       }
+
+       if(!check_window(win_name, "AddSpin"))
+               return;
+
+       window& w = windows[win_name];
+
+       double min, max;
+
+       serialize::from_string(vs[1], min);
+       serialize::from_string(vs[2], max);
+
+    if( vs.size() == 4)
+        title = vs[3];
+
+       Fl_Widget* b = new spin2(vs[0], title, gv2, min, max);
+
+       w.win->add(b);
+}
+
+
 }

Index: src/GUI_readline.cc
===================================================================
RCS file: /cvsroot/libcvd/gvars3/src/GUI_readline.cc,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- src/GUI_readline.cc 8 Jun 2007 22:33:02 -0000       1.5
+++ src/GUI_readline.cc 14 Jun 2007 21:37:27 -0000      1.6
@@ -141,6 +141,7 @@
                else
                {
                        GUI.ParseLine(line);
+                       if(line != "")
                        add_history(line);
                }
        }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]