2 Copyright 2004-2005 Chris Tallon
4 This file is part of VOMP.
6 VOMP is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 VOMP is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with VOMP. If not, see <https://www.gnu.org/licenses/>.
24 #include "vchannellist.h"
25 #include "vrecordinglistclassic.h"
26 #include "vrecordinglistadvanced.h"
27 #include "vtimerlist.h"
33 #include "vscreensaver.h"
34 #include "vmedialist.h"
37 #include "staticartwork.h"
39 #include "imageloader.h"
45 boxstack = BoxStack::getInstance();
52 #ifndef GRADIENT_DRAWING
55 if (Video::getInstance()->getFormat() == Video::PAL)
57 setPosition(140, 170);
61 setPosition(130, 140);
66 setPosition(140, 150);
70 setTitleBarColour(DrawStyle::TITLEBARBACKGROUND);
73 #ifndef GRADIENT_DRAWING
74 jpeg.setPosition(240, 60);
76 jpeg.init("/vdr.jpg");
82 vdr.setPosition(250, 65);
83 vdr.setSize(180, 160);
85 ImageLoader* loader = ImageLoader::getInstance();
87 Image vdrImage = loader->createStatic(sa_vdrlogo);
88 vdr.setImage(vdrImage, WTVMedia::ZoomHorizontal);
93 sl.setPosition(20, 40);
94 #ifdef GRADIENT_DRAWING
97 sl.setLinesPerOption(1.5f);
100 sl.setSize(200, 160);
104 setTitleText(tr("Welcome"));
108 icon = loader->createStatic(sa_tv);
109 sl.addOption(tr("1. Live TV"), reinterpret_cast<void*>(1), 1, icon);
111 icon = loader->createStatic(sa_radio);
112 sl.addOption(tr("2. Radio"), reinterpret_cast<void*>(2), 0, icon);
114 icon = loader->createStatic(sa_recordings);
115 sl.addOption(tr("3. Recordings"), reinterpret_cast<void*>(3), 0, icon);
117 icon = loader->createStatic(sa_timers);
118 sl.addOption(tr("4. Timers"), reinterpret_cast<void*>(4), 0, icon);
119 #ifdef VOMP_PLATTFORM_MVP
120 sl.addOption(tr("5. MediaPlayer"), reinterpret_cast<void*>(5), 0);
123 icon = loader->createStatic(sa_properties);
124 sl.addOption(tr("6. Options"), reinterpret_cast<void*>(6), 0, icon);
126 icon = loader->createStatic(sa_restart);
128 #ifndef VOMP_HAS_EXIT
129 sl.addOption(tr("7. Reboot"), reinterpret_cast<void*>(7), 0, icon);
131 sl.addOption(tr("7. Exit"), reinterpret_cast<void*>(7), 0, icon);
134 MessageQueue::getInstance()->addReceiver(this);
137 void VWelcome::preDelete()
139 Timers::getInstance()->cancelTimer(this, 1);
142 VWelcome::~VWelcome()
144 MessageQueue::getInstance()->removeReceiver(this);
147 void VWelcome::draw()
153 void VWelcome::drawClock()
155 // Blank the area first
156 #ifndef GRADIENT_DRAWING
157 rectangle(area.w - 60, 0, 60, 30, titleBarColour);
163 LOCALTIME_R(&t, &tms);
165 strftime(timeString, 19, "%H:%M", &tms);
166 drawTextRJ(timeString, 450, 5, DrawStyle::LIGHTTEXT);
168 time_t dt = 60 - (t % 60); // seconds to the next minute
169 if (dt == 0) dt = 60; // advance a whole minute if necessary
170 dt += t; // get a time_t value for it rather than using duration
171 // (so it will occur at the actual second and not second and a half)
173 Timers::getInstance()->setTimerT(this, 1, dt);
176 void VWelcome::timercall(int /* clientReference */)
178 #ifndef GRADIENT_DRAWING
183 boxstack->update(this, &clockRegion);
186 int VWelcome::handleCommand(int command)
194 boxstack->update(this);
195 return BoxStack::COMMAND_HANDLED;
201 boxstack->update(this);
202 return BoxStack::COMMAND_HANDLED;
207 return BoxStack::COMMAND_HANDLED;
212 return BoxStack::COMMAND_HANDLED;
217 return BoxStack::COMMAND_HANDLED;
222 return BoxStack::COMMAND_HANDLED;
226 #ifdef VOMP_PLATTFORM_MVP
229 return BoxStack::COMMAND_HANDLED;
234 return BoxStack::COMMAND_HANDLED;
238 Control::getInstance()->doReboot();
239 return BoxStack::COMMAND_HANDLED;
243 ULONG option = reinterpret_cast<ULONG>(sl.getCurrentOptionData());
247 return BoxStack::COMMAND_HANDLED;
249 else if (option == 2)
252 return BoxStack::COMMAND_HANDLED;
254 else if (option == 3)
257 return BoxStack::COMMAND_HANDLED;
259 else if (option == 4)
262 return BoxStack::COMMAND_HANDLED;
264 else if (option == 5)
267 return BoxStack::COMMAND_HANDLED;
269 else if (option == 6)
272 return BoxStack::COMMAND_HANDLED;
274 else if (option == 7)
276 Control::getInstance()->doReboot();
277 return BoxStack::COMMAND_HANDLED;
279 return BoxStack::COMMAND_HANDLED; // never gets here
284 VScreensaver* vscreensaver = new VScreensaver();
285 boxstack->add(vscreensaver);
286 vscreensaver->draw();
287 // boxstack->update(vscreensaver);
289 return BoxStack::COMMAND_HANDLED;
296 // return BoxStack::DELETE_ME;
300 return BoxStack::ABANDON_COMMAND;
303 void VWelcome::doChannelsList()
305 std::shared_ptr<ChannelList> chanList = VDR::getInstance()->getChannelsList(VDR::VIDEO);
309 VChannelList* vchan = new VChannelList(VDR::VIDEO);
310 vchan->setList(chanList);
313 boxstack->add(vchan);
314 boxstack->update(vchan);
318 Control::getInstance()->connectionLost();
322 void VWelcome::doRadioList()
324 std::shared_ptr<ChannelList> chanList = VDR::getInstance()->getChannelsList(VDR::RADIO);
328 VChannelList* vchan = new VChannelList(VDR::RADIO);
329 vchan->setList(chanList);
332 boxstack->add(vchan);
333 boxstack->update(vchan);
337 Control::getInstance()->connectionLost();
341 void VWelcome::doRecordingsList()
343 VRecordingList* vrec;
344 if (Control::getInstance()->isAdvMenus())
345 vrec = new VRecordingListAdvanced();
347 vrec = new VRecordingListClassic();
351 boxstack->update(vrec);
355 Control::getInstance()->connectionLost();
359 void VWelcome::doMediaList()
361 #ifdef VOMP_MEDIAPLAYER
362 VMediaList::createList();
366 void VWelcome::doTimersList()
368 VTimerList* vtl = new VTimerList();
372 Control::getInstance()->connectionLost();
378 boxstack->update(vtl);
381 void VWelcome::doOptions()
383 // VOptionsMenu* voptionsmenu = new VOptionsMenu();
384 // voptionsmenu->draw();
385 // boxstack->add(voptionsmenu);
386 // boxstack->updateView(voptionsmenu);
388 VOpts* vopts = new VOpts();
390 boxstack->add(vopts);
391 boxstack->update(vopts);
394 void VWelcome::processMessage(Message* m)
396 if (m->message == Message::MOUSE_MOVE)
398 if (sl.mouseMove(m->parameter - getScreenX(), m->tag - getScreenY()))
401 boxstack->update(this);
404 else if (m->message == Message::MOUSE_LBDOWN)
406 if (sl.mouseLBDOWN(m->parameter - getScreenX(), m->tag - getScreenY()))
408 Input::sendInputKey(Input::OK);