add requester slider capabilities: vertical orientation and start offset (untested)
authorFelix Domke <tmbinc@elitedvb.net>
Thu, 10 Nov 2005 23:47:36 +0000 (23:47 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Thu, 10 Nov 2005 23:47:36 +0000 (23:47 +0000)
lib/gui/eslider.cpp
lib/gui/eslider.h

index 665c6c1c11108f28e3c43de6fa906b481dba0438..bf7a577640ccd2fa47d7d79baa51da42ea59b35e 100644 (file)
@@ -1,6 +1,6 @@
 #include <lib/gui/eslider.h>
 
-eSlider::eSlider(eWidget *parent): eWidget(parent)
+eSlider::eSlider(eWidget *parent): eWidget(parent), m_orientation(orHorizontal), m_start(0)
 {
 }
 
@@ -13,7 +13,6 @@ int eSlider::event(int event, void *data, void *data2)
                ePtr<eWindowStyle> style;
                gPainter &painter = *(gPainter*)data2;
                
-               
                getStyle(style);
                style->paintBackground(painter, ePoint(0, 0), size());
                style->setStyle(painter, eWindowStyle::styleLabel); // TODO - own style
@@ -23,12 +22,30 @@ int eSlider::event(int event, void *data, void *data2)
        }
        case evtChangedSlider:
        {
-
-               int num_pix = 0;
-               if (m_min < m_max)
-                       num_pix = size().width() * m_value / (m_max - m_min);
+               int num_pix = 0, start_pix = 0;
                gRegion old_currently_filled = m_currently_filled;
-               m_currently_filled = eRect(0, 0, num_pix, size().height());
+               
+               int pixsize = (m_orientation == orHorizontal) ? size().width() : size().height();
+               
+               if (m_min < m_max)
+               {
+                       num_pix = pixsize * (m_value - m_start) / (m_max - m_min);
+                       start_pix = pixsize * m_start / (m_max - m_min);
+               }
+               
+               if  (start_pix < 0)
+               {
+                       num_pix += start_pix;
+                       start_pix = 0;
+               }
+               
+               if (num_pix < 0)
+                       num_pix = 0;
+
+               if (m_orientation == orHorizontal)
+                       m_currently_filled = eRect(start_pix, 0, num_pix, size().height());
+               else
+                       m_currently_filled = eRect(0, start_pix, size().width(), num_pix);
                
                        // redraw what *was* filled before and now isn't.
                invalidate(m_currently_filled - old_currently_filled);
@@ -48,6 +65,19 @@ void eSlider::setValue(int value)
        event(evtChangedSlider);
 }
 
+void eSlider::setStartEnd(int start, int end)
+{
+       m_value = end;
+       m_start = start;
+       event(evtChangedSlider);
+}
+
+void eSlider::setOrientation(int orientation)
+{
+       m_orientation = orientation;
+       event(evtChangedSlider);
+}
+
 void eSlider::setRange(int min, int max)
 {
        m_min = min;
index 5b7b59f0e634755d0cc511f4d745c0aa5b72859b..5dcad3dbc7e2474c81e820a8f45fe0d05e294f67 100644 (file)
@@ -8,7 +8,10 @@ class eSlider: public eWidget
 public:
        eSlider(eWidget *parent);
        void setValue(int val);
+       void setStartEnd(int start, int end);
        void setRange(int min, int max);
+       enum { orHorizontal, orVertical };
+       void setOrientation(int orientation);
 protected:
        int event(int event, void *data=0, void *data2=0);
 private:
@@ -16,7 +19,7 @@ private:
        {
                evtChangedSlider = evtUserWidget
        };
-       int m_min, m_max, m_value;
+       int m_min, m_max, m_value, m_start, m_orientation;
        
        gRegion m_currently_filled;
 };