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


From: Ethan Eade
Subject: [libcvd-members] gvars3 gvars3/GUI_Fltk.h src/GUI_Fltk.cc
Date: Tue, 01 Apr 2008 11:54:56 +0000

CVSROOT:        /cvsroot/libcvd
Module name:    gvars3
Changes by:     Ethan Eade <ethaneade>  08/04/01 11:54:56

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

Log message:
        Added labels again.  Also allow fourth parameter to AddSlider, which if 
it exists, causes the slider value to be shown on the slider tab.

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

Patches:
Index: gvars3/GUI_Fltk.h
===================================================================
RCS file: /cvsroot/libcvd/gvars3/gvars3/GUI_Fltk.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- gvars3/GUI_Fltk.h   20 Feb 2008 19:03:58 -0000      1.6
+++ gvars3/GUI_Fltk.h   1 Apr 2008 11:54:56 -0000       1.7
@@ -54,6 +54,7 @@
                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 AddLabel(std::string cmd, std::string args);
                //void AddSmallToggle(std::string cmd, std::string args);
 
 
@@ -85,6 +86,7 @@
                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 AddLabelCB(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.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- src/GUI_Fltk.cc     20 Feb 2008 19:03:59 -0000      1.7
+++ src/GUI_Fltk.cc     1 Apr 2008 11:54:56 -0000       1.8
@@ -33,6 +33,7 @@
 #include <error.h>
 
 #include <FL/Fl.H>
+#include <FL/fl_draw.H>
 #include <FL/Fl_Window.H>
 #include <FL/Fl_Widget.H>
 #include <FL/Fl_Button.H>
@@ -269,6 +270,7 @@
        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] + ".AddLabel", AddLabelCB, this);
        //gui->RegisterCommand(vs[0] + ".AddSmallToggleButton", 
AddSmallToggleCB, this);
 }
 
@@ -292,6 +294,7 @@
        GUI.UnRegisterCommand(win_name + ".AddSlider");
        GUI.UnRegisterCommand(win_name + ".AddMonitor");
        GUI.UnRegisterCommand(win_name + ".AddSpin");
+       GUI.UnRegisterCommand(win_name + ".AddLabel");
        //gui->UnRegisterCommand(win_name + ".AddSmallToggleButton");
 
 
@@ -450,22 +453,38 @@
 class slider_bar: public slider_type
 {
        public:
-               slider_bar(string gvar_name, double min, double max)
-               :slider_type(0, 0, 1, 1),varname(gvar_name)
+    slider_bar(string gvar_name, double min, double max, bool show_val_)
+       :slider_type(0, 0, 1, 1),varname(gvar_name), show_val(show_val_)
                {
-                       type(FL_HOR_SLIDER);
+                       type(FL_HORIZONTAL);
                        bounds(min, max);
+                       align(FL_ALIGN_CENTER);
                        callback(my_callback);
                        when(FL_WHEN_CHANGED);
                        step(0);
                        poll_update();
                }
 
+    double compute_slider_frac()
+    {
+       fl_font(labelfont(), labelsize());
+       double lw = fl_width(label());
+       double s_size = lw + 5;
+       return s_size / w();    
+    }
+
+    void resize(int x_, int y_, int w_, int h_)
+    {
+       slider_type::resize(x_,y_,w_,h_);
+       if (show_val)
+           slider_size(compute_slider_frac());
+    }
+
+
                void poll_update()
                {
                        string crnt=GV3::get_var(varname);
 
-                       
                        if(crnt != cached_value)
                        {
                                cached_value = crnt;
@@ -476,20 +495,28 @@
                                if(newval > maximum()) maximum(newval);
                                if(newval < minimum()) minimum(newval);
 
+                               if (show_val) {
+                                   label(cached_value.c_str());
+                                   double new_frac = compute_slider_frac();
+                                   if (new_frac > slider_size())
+                                       slider_size(new_frac);
+                               }
                                value(newval);
                        }
                }
 
-               void set_gvar_to_value()
+               string set_gvar_to_value()
                {       
                        ostringstream ost;
+                       ost.precision(3);
                        ost << value();
                        GV3::set_var(varname, ost.str(), 1);
-                       cached_value = ost.str();
+                       return ost.str();
                }
 
        private:
                string varname, cached_value;
+    bool show_val;
 
                static void my_callback(Fl_Widget* w, long what_shall_I_do)
                {
@@ -497,8 +524,10 @@
 
                        if(what_shall_I_do == POLL_UPDATE)
                                s->poll_update();
-                       else
-                               s->set_gvar_to_value();
+                       else {
+                               string val = s->set_gvar_to_value();
+                               s->poll_update();
+                       }
                }
 };
 
@@ -507,9 +536,9 @@
        string win_name = remove_suffix(cmd, ".AddSlider");
 
        vector<string> vs = ChopAndUnquoteString(args);
-       if(vs.size() != 3)
+       if(vs.size() != 3 && vs.size() !=4)
        {
-               cerr << "! GUI_Fltk::AddSlider: Need 3 params (gvar_name min 
max)." << endl;
+               cerr << "! GUI_Fltk::AddSlider: Need 3 or 4 params (gvar_name 
min max [showval])." << endl;
                return;
        }
 
@@ -523,7 +552,7 @@
        serialize::from_string(vs[1], min);
        serialize::from_string(vs[2], max);
 
-       Fl_Widget* b = new slider_bar(vs[0], min, max);
+       Fl_Widget* b = new slider_bar(vs[0], min, max, vs.size()==4);
 
        w.win->add(b);
 }
@@ -700,6 +729,52 @@
        w.win->add(b);
 }
 
+
+void GUI_Fltk::AddLabelCB(void* ptr, string cmd, string args)
+{
+       //Fl::lock();
+       UI.AddLabel(cmd, args);
+       //Fl::unlock();
+}
+
+
+class label: public Fl_Box
+{
+       public:
+               label(string t)
+               :Fl_Box(0, 0, 1, 1), title(t)
+               {
+                       align(FL_ALIGN_CENTER);
+                        Fl_Box::label(title.c_str());
+               }
+        private:
+            string title;
+};
+
+void GUI_Fltk::AddLabel(string cmd, string args)
+{
+    string win_name = remove_suffix(cmd, ".AddLabel");
+
+       vector<string> vs = ChopAndUnquoteString(args);
+       if(vs.size() != 1)
+       {
+               cout << "! GUI_Fltk::AddLabel: Need 1 params (label)." << endl;
+               return;
+       }
+
+       if(!check_window(win_name, "AddLabel"))
+               return;
+
+       window& w = windows[win_name];
+
+       Fl_Widget* m = new label(vs[0]);
+       w.win->add(m);
+}
+
+
+
+
+
 //Instantiations
 class GUI_Fltk GUI_Fltk_instance;
 




reply via email to

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