fix empty expressions in dvb list search
[enigma2.git] / lib / gui / eslider.cpp
1 #include <lib/gui/eslider.h>
2
3 eSlider::eSlider(eWidget *parent)
4         :eWidget(parent), m_have_border_color(false), m_start(0), m_orientation(orHorizontal), m_border_width(0)
5 {
6 }
7
8 void eSlider::setPixmap(gPixmap *pixmap)
9 {
10         m_pixmap = pixmap;
11         event(evtChangedSlider);
12 }
13
14 void eSlider::setBorderWidth(int pixel)
15 {
16         m_border_width=pixel;
17         invalidate();
18 }
19
20 void eSlider::setBorderColor(const gRGB &color)
21 {
22         m_border_color=color;
23         m_have_border_color=true;
24         invalidate();
25 }
26
27 int eSlider::event(int event, void *data, void *data2)
28 {
29         switch (event)
30         {
31         case evtPaint:
32         {
33                 ePtr<eWindowStyle> style;
34                 gPainter &painter = *(gPainter*)data2;
35
36                 eSize s(size());
37
38                 getStyle(style);
39                 style->paintBackground(painter, ePoint(0,0), s);
40                 style->setStyle(painter, eWindowStyle::styleLabel); // TODO - own style
41                 
42                 if (!m_pixmap)
43                         painter.fill(m_currently_filled);
44                 else
45                         painter.blit(m_pixmap, ePoint(0, 0), m_currently_filled.extends);
46
47 // border
48                 if (m_have_border_color)
49                         painter.setForegroundColor(m_border_color);
50                 painter.fill(eRect(0, 0, s.width(), m_border_width));
51                 painter.fill(eRect(0, m_border_width, m_border_width, s.height()-m_border_width));
52                 painter.fill(eRect(m_border_width, s.height()-m_border_width, s.width()-m_border_width, m_border_width));
53                 painter.fill(eRect(s.width()-m_border_width, m_border_width, m_border_width, s.height()-m_border_width));
54
55                 return 0;
56         }
57         case evtChangedSlider:
58         {
59                 int num_pix = 0, start_pix = 0;
60                 gRegion old_currently_filled = m_currently_filled;
61
62                 int pixsize = (m_orientation == orHorizontal) ? size().width() : size().height();
63
64                 if (m_min < m_max)
65                 {
66                         num_pix = pixsize * (m_value - m_start) / (m_max - m_min);
67                         start_pix = pixsize * m_start / (m_max - m_min);
68                 }
69                 
70                 if  (start_pix < 0)
71                 {
72                         num_pix += start_pix;
73                         start_pix = 0;
74                 }
75                 
76                 if (num_pix < 0)
77                         num_pix = 0;
78
79                 if (m_orientation == orHorizontal)
80                         m_currently_filled = eRect(start_pix, 0, num_pix, pixsize);
81                 else
82                         m_currently_filled = eRect(0, start_pix, pixsize, num_pix);
83
84                         // redraw what *was* filled before and now isn't.
85                 invalidate(m_currently_filled - old_currently_filled);
86                         // redraw what wasn't filled before and is now.
87                 invalidate(old_currently_filled - m_currently_filled);
88                 
89                 return 0;
90         }
91         default:
92                 return eWidget::event(event, data, data2);
93         }
94 }
95
96 void eSlider::setValue(int value)
97 {
98         m_value = value;
99         event(evtChangedSlider);
100 }
101
102 void eSlider::setStartEnd(int start, int end)
103 {
104         m_value = end;
105         m_start = start;
106         event(evtChangedSlider);
107 }
108
109 void eSlider::setOrientation(int orientation)
110 {
111         m_orientation = orientation;
112         event(evtChangedSlider);
113 }
114
115 void eSlider::setRange(int min, int max)
116 {
117         m_min = min;
118         m_max = max;
119         event(evtChangedSlider);
120 }