cable scan works now
[enigma2.git] / lib / gui / epositiongauge.cpp
1 #include <lib/gui/epositiongauge.h>
2 #include <lib/gui/epixmap.h>
3
4 ePositionGauge::ePositionGauge(eWidget *parent)
5         : eWidget(parent)
6 {
7         m_point_widget = new ePixmap(this);
8         m_point_widget->setAlphatest(1);
9         m_position = 0;
10         m_length = 0;
11 }
12
13 ePositionGauge::~ePositionGauge()
14 {
15         delete m_point_widget;
16 }
17
18 void ePositionGauge::setLength(const pts_t &len)
19 {
20         eDebug("set len: %llx", len);
21         if (m_length == len)
22                 return;
23         m_length = len;
24         updatePosition();
25 }
26
27 void ePositionGauge::setPosition(const pts_t &pos)
28 {
29         eDebug("set position: %llx", pos);
30         if (m_position == pos)
31                 return;
32         m_position = pos;
33         updatePosition();
34 }
35
36 void ePositionGauge::setInColor(const gRGB &color)
37 {
38         invalidate();
39 }
40
41 void ePositionGauge::setPointer(gPixmap *pixmap, const ePoint &center)
42 {
43         m_point_center = center;
44         m_point_widget->setPixmap(pixmap);
45         m_point_widget->resize(pixmap->size());
46         updatePosition();
47 }
48
49 int ePositionGauge::event(int event, void *data, void *data2)
50 {
51         switch (event)
52         {
53         case evtPaint:
54         {
55                 ePtr<eWindowStyle> style;
56                 gPainter &painter = *(gPainter*)data2;
57
58                 eSize s(size());
59
60                 getStyle(style);
61                 style->paintBackground(painter, ePoint(0,0), s);
62                 style->setStyle(painter, eWindowStyle::styleLabel); // TODO - own style
63                 painter.setForegroundColor(gRGB(0x225b7395));
64
65                 painter.fill(eRect(0, 10, s.width(), s.height()-14));
66                 
67 //              painter.setForegroundColor(gRGB(0x00000000));
68                 painter.fill(eRect(s.width() - 2, 2, s.width() - 1, s.height() - 4));
69                 painter.fill(eRect(0, 2, 2, s.height() - 4));
70                 
71 #if 0
72 // border
73                 if (m_have_border_color)
74                         painter.setForegroundColor(m_border_color);
75                 painter.fill(eRect(0, 0, s.width(), m_border_width));
76                 painter.fill(eRect(0, m_border_width, m_border_width, s.height()-m_border_width));
77                 painter.fill(eRect(m_border_width, s.height()-m_border_width, s.width()-m_border_width, m_border_width));
78                 painter.fill(eRect(s.width()-m_border_width, m_border_width, m_border_width, s.height()-m_border_width));
79 #endif
80
81                 return 0;
82         }
83         case evtChangedPosition:
84                 return 0;
85         default:
86                 return eWidget::event(event, data, data2);
87         }
88 }
89
90 void ePositionGauge::updatePosition()
91 {
92         if (!m_length)
93                 return;
94
95         int width = size().width();
96         int x = width * m_position / m_length;
97         m_pos = x;
98         int base = (size().height() - 10) / 2;
99
100         m_point_widget->move(ePoint(m_pos - m_point_center.x(), base - m_point_center.y()));
101 }