]> git.vomp.tv Git - vompclient.git/blob - vwelcome.cc
Rename Remote class to Input, RemoteLinux to InputLinux
[vompclient.git] / vwelcome.cc
1 /*
2     Copyright 2004-2005 Chris Tallon
3
4     This file is part of VOMP.
5
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.
10
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.
15
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/>.
18 */
19
20 #include "vwelcome.h"
21
22 #include "input.h"
23 #include "vdr.h"
24 #include "vchannellist.h"
25 #include "vrecordinglistclassic.h"
26 #include "vrecordinglistadvanced.h"
27 #include "vtimerlist.h"
28 #include "command.h"
29 #include "message.h"
30 #include "colour.h"
31 #include "video.h"
32 #include "i18n.h"
33 #include "timers.h"
34 #include "vscreensaver.h"
35 #include "vmedialist.h"
36 #include "boxstack.h"
37 #include "vopts.h"
38 #include "staticartwork.h"
39
40 #include "log.h"
41
42 VWelcome::VWelcome()
43 {
44   boxstack = BoxStack::getInstance();
45
46   clockRegion.x = 400;
47   clockRegion.y = 0;
48   clockRegion.w = 60;
49   clockRegion.h = 30;
50
51 #ifndef GRADIENT_DRAWING
52   setSize(460, 220);
53   createBuffer();
54   if (Video::getInstance()->getFormat() == Video::PAL)
55   {
56     setPosition(140, 170);
57   }
58   else
59   {
60     setPosition(130, 140);
61   }
62 #else
63   setSize(460, 280);
64   createBuffer();
65   setPosition(140, 150);
66 #endif
67
68   setTitleBarOn(1);
69   setTitleBarColour(DrawStyle::TITLEBARBACKGROUND);
70
71
72 #ifndef GRADIENT_DRAWING
73   jpeg.setPosition(240, 60);
74 #ifndef _MIPS_ARCH
75   jpeg.init("/vdr.jpg");
76 #else
77   jpeg.init("vdr.jpg");
78 #endif
79   add(&jpeg);
80 #else
81   vdr.setPosition(250, 65);
82   vdr.setSize(180, 160);
83   TVMediaInfo sinfo;
84   sinfo.setStaticArtwork(sa_vdrlogo);
85   vdr.setTVMedia(sinfo, WTVMedia::ZoomHorizontal);
86   add(&vdr);
87
88 #endif
89
90   sl.setPosition(20, 40);
91 #ifdef GRADIENT_DRAWING
92   sl.addColumn(0);
93   sl.addColumn(25);
94   sl.setLinesPerOption(1.5f);
95   sl.setSize(200, 230);
96 #else
97   sl.setSize(200, 160);
98 #endif
99   add(&sl);
100
101   setTitleText(tr("Welcome"));
102
103
104   TVMediaInfo *info= new TVMediaInfo();
105   info->setStaticArtwork(sa_tv);
106   sl.addOption(tr("1. Live TV"), 1, 1,info);
107
108   info= new TVMediaInfo();
109   info->setStaticArtwork(sa_radio);
110   sl.addOption(tr("2. Radio"), 2, 0,info);
111
112   info= new TVMediaInfo();
113   info->setStaticArtwork(sa_recordings);
114   sl.addOption(tr("3. Recordings"), 3, 0,info);
115
116   info= new TVMediaInfo();
117   info->setStaticArtwork(sa_timers);
118   sl.addOption(tr("4. Timers"), 4, 0,info);
119 #ifdef VOMP_PLATTFORM_MVP
120   sl.addOption(tr("5. MediaPlayer"), 5, 0);
121 #endif
122
123   info= new TVMediaInfo();
124   info->setStaticArtwork(sa_properties);
125   sl.addOption(tr("6. Options"), 6, 0,info);
126
127   info= new TVMediaInfo();
128   info->setStaticArtwork(sa_restart);
129 #ifndef VOMP_HAS_EXIT
130   sl.addOption(tr("7. Reboot"), 7, 0,info);
131 #else
132     sl.addOption(tr("7. Exit"), 7, 0,info);
133 #endif
134
135
136 }
137
138 void VWelcome::preDelete()
139 {
140   Timers::getInstance()->cancelTimer(this, 1);
141 }
142
143 VWelcome::~VWelcome()
144 {
145 }
146
147 void VWelcome::draw()
148 {
149   TBBoxx::draw();
150   drawClock();
151 }
152
153 void VWelcome::drawClock()
154 {
155   // Blank the area first
156 #ifndef GRADIENT_DRAWING
157   rectangle(area.w - 60, 0, 60, 30, titleBarColour);
158 #endif
159   char timeString[20];
160   time_t t;
161   time(&t);
162   struct tm tms;
163   LOCALTIME_R(&t, &tms);
164
165   strftime(timeString, 19, "%H:%M", &tms);
166   drawTextRJ(timeString, 450, 5, DrawStyle::LIGHTTEXT);
167
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)
172
173   Timers::getInstance()->setTimerT(this, 1, dt);
174 }
175
176 void VWelcome::timercall(int /* clientReference */)
177 {
178 #ifndef GRADIENT_DRAWING
179   drawClock();
180 #else
181   draw();
182 #endif
183   boxstack->update(this, &clockRegion);
184 }
185
186 int VWelcome::handleCommand(int command)
187 {
188   switch(command)
189   {
190     case Input::DF_UP:
191     case Input::UP:
192     {
193       sl.up();
194       sl.draw();
195       boxstack->update(this);
196       return 2;
197     }
198     case Input::DF_DOWN:
199     case Input::DOWN:
200     {
201       sl.down();
202       sl.draw();
203       boxstack->update(this);
204       return 2;
205     }
206     case Input::ONE:
207     {
208       doChannelsList();
209       return 2;
210     }
211     case Input::TWO:
212     {
213       doRadioList();
214       return 2;
215     }
216     case Input::THREE:
217     {
218       doRecordingsList();
219       return 2;
220     }
221     case Input::FOUR:
222     {
223       doTimersList();
224       return 2;
225     }
226     case Input::FIVE:
227     {
228 #ifdef VOMP_PLATTFORM_MVP
229       doMediaList();
230 #endif
231       return 2;
232     }
233     case Input::SIX:
234     {
235       doOptions();
236       return 2;
237     }
238     case Input::SEVEN:
239     {
240       Command::getInstance()->doReboot();
241       return 2;
242     }
243     case Input::OK:
244     {
245       ULONG option = sl.getCurrentOptionData();
246       if (option == 1)
247       {
248         doChannelsList();
249         return 2;
250       }
251       else if (option == 2)
252       {
253         doRadioList();
254         return 2;
255       }
256       else if (option == 3)
257       {
258         doRecordingsList();
259         return 2;
260       }
261       else if (option == 4)
262       {
263         doTimersList();
264         return 2;
265       }
266       else if (option == 5)
267       {
268         doMediaList();
269         return 2;
270       }
271       else if (option == 6)
272       {
273         doOptions();
274         return 2;
275       }
276       else if (option == 7)
277       {
278         Command::getInstance()->doReboot();
279         return 2;
280       }
281       return 2; // never gets here
282     }
283 //#ifdef DEV
284     case Input::NINE:
285     {
286       VScreensaver* vscreensaver = new VScreensaver();
287       boxstack->add(vscreensaver);
288       vscreensaver->draw();
289 //      boxstack->update(vscreensaver);
290
291       return 2;
292     }
293 //#endif
294
295     // Test
296 //    case Input::BACK:
297 //    {
298 //      return 4;
299 //    }
300
301   }
302   return 1;
303 }
304
305 void VWelcome::doChannelsList()
306 {
307   ChannelList* chanList = VDR::getInstance()->getChannelsList(VDR::VIDEO);
308
309   if (chanList)
310   {
311     VChannelList* vchan = new VChannelList(VDR::VIDEO);
312     vchan->setList(chanList);
313
314     vchan->draw();
315     boxstack->add(vchan);
316     boxstack->update(vchan);
317   }
318   else
319   {
320     Command::getInstance()->connectionLost();
321   }
322 }
323
324 void VWelcome::doRadioList()
325 {
326   ChannelList* chanList = VDR::getInstance()->getChannelsList(VDR::RADIO);
327
328   if (chanList)
329   {
330     VChannelList* vchan = new VChannelList(VDR::RADIO);
331     vchan->setList(chanList);
332
333     vchan->draw();
334     boxstack->add(vchan);
335     boxstack->update(vchan);
336   }
337   else
338   {
339     Command::getInstance()->connectionLost();
340   }
341 }
342
343 void VWelcome::doRecordingsList()
344 {
345         VRecordingList* vrec;
346         if (Command::getInstance()->isAdvMenus())
347            vrec = new VRecordingListAdvanced();
348         else
349            vrec = new VRecordingListClassic();
350
351         vrec->draw();
352         boxstack->add(vrec);
353         boxstack->update(vrec);
354
355         if (!vrec->load())
356         {
357                 Command::getInstance()->connectionLost();
358         }
359 }
360
361 void VWelcome::doMediaList()
362 {
363 #ifdef VOMP_MEDIAPLAYER
364   VMediaList::createList();
365 #endif
366 }
367
368 void VWelcome::doTimersList()
369 {
370   VTimerList* vtl = new VTimerList();
371   if (!vtl->load())
372   {
373     delete vtl;
374     Command::getInstance()->connectionLost();
375     return;
376   }
377   
378   vtl->draw();
379   boxstack->add(vtl);
380   boxstack->update(vtl);
381 }
382
383 void VWelcome::doOptions()
384 {
385 //  VOptionsMenu* voptionsmenu = new VOptionsMenu();
386 //  voptionsmenu->draw();
387 //  boxstack->add(voptionsmenu);
388 //  boxstack->updateView(voptionsmenu);
389
390   VOpts* vopts = new VOpts();
391   vopts->draw();
392   boxstack->add(vopts);
393   boxstack->update(vopts);
394 }
395
396 void VWelcome::processMessage(Message* m)
397 {
398   if (m->message == Message::MOUSE_MOVE)
399   {
400     if (sl.mouseMove((m->parameter>>16)-getScreenX(),(m->parameter&0xFFFF)-getScreenY()))
401     {
402       sl.draw();
403       boxstack->update(this);
404     }
405   }
406   else if (m->message == Message::MOUSE_LBDOWN)
407   {
408     if (sl.mouseLBDOWN((m->parameter>>16)-getScreenX(),(m->parameter&0xFFFF)-getScreenY()))
409     {
410       boxstack->handleCommand(Input::OK); //simulate OK press
411     }
412   }
413 }