trunk 20080912
[gitenigma.git] / src / setup_osd.cpp
blob4bfc1bc13097468437480d9d2a811f96530075cf
1 #include <setup_osd.h>
3 #include <setup_osd_extra.h>
5 #include <setupskin.h>
6 #include <enigma.h>
7 #include <enigma_main.h>
8 #include <lib/base/i18n.h>
9 #include <lib/dvb/edvb.h>
10 #include <lib/gdi/gfbdc.h>
11 #include <lib/gdi/font.h>
12 #include <lib/gui/eskin.h>
13 #include <lib/gui/ebutton.h>
14 #include <lib/gui/echeckbox.h>
15 #include <lib/gui/guiactions.h>
16 #include <lib/gui/slider.h>
17 #include <lib/gui/statusbar.h>
18 #include <lib/gui/emessage.h>
19 #include <lib/system/econfig.h>
20 #include <lib/system/info.h>
21 #include <lib/system/init.h>
22 #include <lib/system/init_num.h>
24 class PluginOffsetScreen: public eWidget
26 enum { posLeftTop, posRightBottom } curPos;
27 eLabel *descr;
28 int eventHandler( const eWidgetEvent & e );
29 int left, top, right, bottom;
30 void redrawLeftTop( gPainter *target );
31 void redrawRightBottom( gPainter *target );
32 void redrawWidget(gPainter *target, const eRect &where);
33 gColor foreColor, backColor;
34 public:
35 PluginOffsetScreen();
38 struct PluginOffsetActions
40 eActionMap map;
41 eAction leftTop, rightBottom, store;
42 PluginOffsetActions()
43 :map("PluginOffsetActions", _("PluginOffsetActions")),
44 leftTop(map,"leftTop", _("enable set the leftTop Point of the rectangle")),
45 rightBottom(map,"rightBottom", _("enable set the rightBottom Point of the rectangle")),
46 store(map, "store", _("saves the current positions"))
51 eAutoInitP0<PluginOffsetActions> i_PluginOffsetActions(eAutoInitNumbers::actions, "tuxtxt offset actions");
53 int PluginOffsetScreen::eventHandler( const eWidgetEvent &event )
55 switch ( event.type )
57 case eWidgetEvent::execBegin:
58 eConfig::getInstance()->getKey("/enigma/plugins/needoffsets/left", left);
59 eConfig::getInstance()->getKey("/enigma/plugins/needoffsets/top", top);
60 eConfig::getInstance()->getKey("/enigma/plugins/needoffsets/right", right);
61 eConfig::getInstance()->getKey("/enigma/plugins/needoffsets/bottom", bottom);
62 invalidate();
63 return 0;
64 case eWidgetEvent::execDone:
65 eConfig::getInstance()->setKey("/enigma/plugins/needoffsets/left", left);
66 eConfig::getInstance()->setKey("/enigma/plugins/needoffsets/top", top);
67 eConfig::getInstance()->setKey("/enigma/plugins/needoffsets/right", right);
68 eConfig::getInstance()->setKey("/enigma/plugins/needoffsets/bottom", bottom);
69 return 0;
70 case eWidgetEvent::willShow:
71 invalidate();
72 return 0;
73 case eWidgetEvent::evtAction:
74 if (event.action == &i_PluginOffsetActions->leftTop)
76 curPos=posLeftTop;
77 return 0;
79 else if (event.action == &i_PluginOffsetActions->rightBottom)
81 curPos=posRightBottom;
82 return 0;
84 else if (event.action == &i_cursorActions->cancel)
86 close(0);
87 return 0;
89 else if (event.action == &i_PluginOffsetActions->store)
91 close(0);
92 return 0;
94 else if (event.action == &i_cursorActions->left)
96 if ( curPos == posLeftTop )
97 left--;
98 else if (curPos == posRightBottom )
99 right--;
101 else if (event.action == &i_cursorActions->right)
103 if ( curPos == posLeftTop )
104 left++;
105 else if (curPos == posRightBottom )
106 right++;
108 else if (event.action == &i_cursorActions->up)
110 if ( curPos == posLeftTop )
111 top--;
112 else if (curPos == posRightBottom )
113 bottom--;
115 else if (event.action == &i_cursorActions->down)
117 if ( curPos == posLeftTop )
118 top++;
119 else if (curPos == posRightBottom )
120 bottom++;
122 else
123 break;
124 if ( curPos == posLeftTop )
125 invalidate( eRect( ePoint(left-1, top-1), eSize(102, 102) ) );
126 else if ( curPos == posRightBottom )
127 invalidate( eRect( ePoint(right-101, bottom-101), eSize(102, 102) ) );
128 return 0;
129 default:
130 break;
132 return eWidget::eventHandler( event );
135 void PluginOffsetScreen::redrawLeftTop( gPainter *target )
137 target->fill( eRect( ePoint( left, top ), eSize( 100, 3 ) ) );
138 target->fill( eRect( ePoint( left, top ), eSize( 3, 100 ) ) );
141 void PluginOffsetScreen::redrawRightBottom( gPainter *target )
143 target->fill( eRect( ePoint( right-3, bottom-100 ), eSize( 3, 100 ) ) );
144 target->fill( eRect( ePoint( right-100, bottom-3 ), eSize( 100, 3 ) ) );
147 void PluginOffsetScreen::redrawWidget(gPainter *target, const eRect &where)
149 target->setForegroundColor( foreColor );
150 if ( where.intersects( eRect( ePoint( left, top ), eSize( 100, 100 ) ) ) )
151 redrawLeftTop( target );
152 if ( where.intersects( eRect( ePoint( right-3, bottom-100 ), eSize( 3, 100 ) ) ) )
153 redrawRightBottom( target );
156 PluginOffsetScreen::PluginOffsetScreen()
157 :eWidget(0, 1), curPos( posLeftTop ),
158 left(20), top(20), right( 699 ), bottom( 555 )
160 foreColor = eSkin::getActive()->queryColor("eWindow.titleBarFont");
161 setForegroundColor( foreColor );
162 move(ePoint(0,0));
163 resize(eSize(768,576));
164 descr = new eLabel( this );
165 descr->setFlags( eLabel::flagVCenter|RS_WRAP );
166 descr->setForegroundColor( foreColor );
167 descr->resize(eSize(568,300));
168 descr->move(ePoint(100,100));
169 descr->setText(_("here you can center the tuxtxt rectangle...\npress red to select the left top edge\npress green to select the right bottom edge\nuse the cursor keys to move the selected edges"));
170 eSize ext = descr->getExtend();
171 ext+=eSize(8,4); // the given Size of the Text is okay... but the renderer sucks...
172 descr->resize( ext );
173 descr->move( ePoint( (width()/2)-(ext.width()/2) , (height()/2)-(ext.height()/2) ) );
174 descr->show();
175 addActionMap(&i_PluginOffsetActions->map);
176 addActionMap(&i_cursorActions->map);
177 addActionToHelpList( &i_PluginOffsetActions->leftTop );
178 addActionToHelpList( &i_PluginOffsetActions->rightBottom );
179 setHelpID(96);
182 eZapOsdSetup::eZapOsdSetup()
183 :eWindow(0)
185 init_eZapOsdSetup();
188 void eZapOsdSetup::init_eZapOsdSetup()
190 setText(_("OSD Settings"));
191 cmove(ePoint(140, 125));
192 cresize(eSize(460, 350));
194 int fd=eSkin::getActive()->queryValue("fontsize", 20);
196 alpha = gFBDC::getInstance()->getAlpha();
197 eLabel* l = new eLabel(this);
198 l->setText(_("Alpha:"));
199 l->move(ePoint(20, 20));
200 l->resize(eSize(110, fd+4));
201 sAlpha = new eSlider( this, l, 0, 512 );
202 sAlpha->setIncrement( eSystemInfo::getInstance()->getAlphaIncrement() ); // Percent !
204 sAlpha->move( ePoint( 150, 20 ) );
205 sAlpha->resize(eSize( 290, fd+4 ) );
206 sAlpha->setHelpText(_("change the transparency correction"));
207 sAlpha->setValue( alpha);
208 CONNECT( sAlpha->changed, eZapOsdSetup::alphaChanged );
210 brightness = gFBDC::getInstance()->getBrightness();
211 l = new eLabel(this);
212 l->setText(_("Brightness:"));
213 l->move(ePoint(20, 60));
214 l->resize(eSize(120, fd+4));
215 sBrightness = new eSlider( this, l, 0, 255 );
216 sBrightness->setIncrement( 5 ); // Percent !
217 sBrightness->move( ePoint( 150, 60 ) );
218 sBrightness->resize(eSize( 290, fd+4 ) );
219 sBrightness->setHelpText(_("change the brightness correction"));
220 sBrightness->setValue( brightness);
221 CONNECT( sBrightness->changed, eZapOsdSetup::brightnessChanged );
223 gamma = gFBDC::getInstance()->getGamma();
224 l = new eLabel(this);
225 l->setText(_("Contrast:"));
226 l->move(ePoint(20, 100));
227 l->resize(eSize(120, fd+4));
228 sGamma = new eSlider( this, l, 0, 255 );
229 sGamma->setIncrement( 5 ); // Percent !
230 sGamma->move( ePoint( 150, 100 ) );
231 sGamma->resize(eSize( 290, fd+4 ) );
232 sGamma->setHelpText(_("change the contrast"));
233 sGamma->setValue( gamma);
234 CONNECT( sGamma->changed, eZapOsdSetup::gammaChanged );
236 simpleMainMenu=new eCheckbox(this);
237 simpleMainMenu->setText(_("Show Mainmenu like Listbox"));
238 simpleMainMenu->setHelpText(_("show the Mainmenu in normal listbox style"));
239 simpleMainMenu->move(ePoint(20,140));
240 simpleMainMenu->resize(eSize(420,35));
241 int bla=0;
242 eConfig::getInstance()->getKey("/ezap/osd/simpleMainMenu", bla);
243 simpleMainMenu->setCheck(bla);
245 skin=new eButton(this);
246 skin->setText(_("Change skin"));
247 skin->setShortcut("blue");
248 skin->setShortcutPixmap("blue");
249 skin->move(ePoint(20, 190));
250 skin->resize(eSize(205, 40));
251 skin->loadDeco();
252 skin->setHelpText(_("press ok to open skin selector"));
253 CONNECT( skin->selected, eZapOsdSetup::skinPressed );
255 pluginoffs=new eButton(this);
256 pluginoffs->setText(_("TuxText position"));
257 pluginoffs->setHelpText(_("here you can center the Tuxtxt (builtin videotext)"));
258 pluginoffs->setShortcut("yellow");
259 pluginoffs->setShortcutPixmap("yellow");
260 pluginoffs->move(ePoint(235, 190));
261 pluginoffs->resize(eSize(205, 40));
262 pluginoffs->loadDeco();
263 CONNECT( pluginoffs->selected, eZapOsdSetup::pluginPositionPressed );
265 ok=new eButton(this);
266 ok->setText(_("save"));
267 ok->setShortcut("green");
268 ok->setShortcutPixmap("green");
269 ok->move(ePoint(20, 245));
270 ok->resize(eSize(205, 40));
271 ok->setHelpText(_("save changes and return"));
272 ok->loadDeco();
274 CONNECT(ok->selected, eZapOsdSetup::okPressed);
276 expert=new eButton(this);
277 expert->setText(_("additional settings"));
278 expert->setShortcut("red");
279 expert->setShortcutPixmap("red");
280 expert->move(ePoint(235, 245));
281 expert->resize(eSize(205, 40));
282 expert->loadDeco();
283 expert->setHelpText(_("open additional settings"));
284 CONNECT( expert->selected, eZapOsdSetup::expertPressed );
286 statusbar=new eStatusBar(this);
287 statusbar->move( ePoint(0, clientrect.height()-50 ) );
288 statusbar->resize( eSize( clientrect.width(), 50) );
289 statusbar->loadDeco();
290 setHelpID(83);
293 eZapOsdSetup::~eZapOsdSetup()
297 void eZapOsdSetup::alphaChanged( int i )
299 alpha = i;
300 gFBDC::getInstance()->setAlpha(alpha);
303 void eZapOsdSetup::brightnessChanged( int i )
305 brightness = i;
306 gFBDC::getInstance()->setBrightness(brightness);
309 void eZapOsdSetup::gammaChanged( int i )
311 gamma = i;
312 gFBDC::getInstance()->setGamma(gamma);
315 void eZapOsdSetup::pluginPositionPressed()
317 eWidget *oldfocus=focus;
318 hide();
319 PluginOffsetScreen scr;
320 scr.show();
321 scr.exec();
322 scr.hide();
323 show();
324 setFocus(oldfocus);
327 void eZapOsdSetup::okPressed()
329 eConfig::getInstance()->setKey("/ezap/osd/simpleMainMenu", simpleMainMenu->isChecked());
330 gFBDC::getInstance()->saveSettings();
331 eConfig::getInstance()->flush();
332 close(1);
335 void eZapOsdSetup::skinPressed()
337 eWidget *oldfocus=focus;
338 hide();
339 eSkinSetup setup;
340 int res;
341 #ifndef DISABLE_LCD
342 setup.setLCD(LCDTitle, LCDElement);
343 #endif
344 setup.show();
345 res=setup.exec();
346 setup.hide();
347 if (!res)
349 eMessageBox msg(_("You have to restart enigma to apply the new skin\nRestart now?"), _("Skin changed"), eMessageBox::btYes|eMessageBox::btNo|eMessageBox::iconQuestion, eMessageBox::btYes );
350 msg.show();
351 int ret = msg.exec();
352 msg.hide();
353 if ( ret == eMessageBox::btYes )
355 if ( eZapMain::getInstance()->checkRecordState() )
356 eZap::getInstance()->quit(2);
358 msg.hide();
360 show();
361 setFocus(oldfocus);
364 void eZapOsdSetup::expertPressed()
366 hide();
367 eOSDExpertSetup setup;
368 #ifndef DISABLE_LCD
369 setup.setLCD(LCDTitle, LCDElement);
370 #endif
371 setup.show();
372 setup.exec();
373 setup.hide();
374 eConfig::getInstance()->flush();
375 show();
378 int eZapOsdSetup::eventHandler( const eWidgetEvent &e )
380 switch (e.type)
382 case eWidgetEvent::execDone:
384 gFBDC::getInstance()->reloadSettings();
385 break;
387 default:
388 return eWindow::eventHandler( e );
390 return 1;