]> git.vomp.tv Git - vompclient.git/blob - vtimerlist.cc
View timer
[vompclient.git] / vtimerlist.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, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21 #include "vtimerlist.h"
22
23 VTimerList::VTimerList(RecTimerList* trtl)
24 {
25   recTimerList = trtl;
26
27   clockRegion.x = 420;
28   clockRegion.y = 0;
29   clockRegion.w = 150;
30   clockRegion.h = 30;
31
32   create(570, 420);
33   if (Video::getInstance()->getFormat() == Video::PAL)
34   {
35     setScreenPos(80, 70);
36   }
37   else
38   {
39     setScreenPos(70, 35);
40   }
41
42
43   setBackgroundColour(Colour::VIEWBACKGROUND);
44   setTitleBarOn(1);
45   setTitleText(tr("Timers"));
46   setTitleBarColour(Colour::TITLEBARBACKGROUND);
47
48   sl.setSurface(surface);
49   sl.setSurfaceOffset(10, 30 + 5);
50   sl.setDimensions(area.w - 20, area.h - 30 - 15 - 30);
51
52   // Draw statics
53
54   draw(); // View::draw
55
56   WSymbol w;
57   w.setSurface(surface);
58
59   w.nextSymbol = WSymbol::UP;
60   w.setSurfaceOffset(20, 385);
61   w.draw();
62
63   w.nextSymbol = WSymbol::DOWN;
64   w.setSurfaceOffset(50, 385);
65   w.draw();
66
67   w.nextSymbol = WSymbol::SKIPBACK;
68   w.setSurfaceOffset(85, 385);
69   w.draw();
70
71   w.nextSymbol = WSymbol::SKIPFORWARD;
72   w.setSurfaceOffset(115, 385);
73   w.draw();
74
75   drawTextRJ("[ok] = edit", 560, 385, Colour::LIGHTTEXT);
76
77
78   insertData();
79   sl.draw();
80   drawShowing();
81   drawClock();
82 }
83
84 VTimerList::~VTimerList()
85 {
86   Timers::getInstance()->cancelTimer(this, 1);
87   if (recTimerList)
88   {
89     for (UINT i = 0; i < recTimerList->size(); i++)
90     {
91       delete (*recTimerList)[i];
92     }
93
94     recTimerList->clear();
95     delete recTimerList;
96   }
97 }
98
99 void VTimerList::insertData()
100 {
101   char strA[300];
102   char strB[300];
103   char status;
104
105   struct tm* btime;
106
107   // FIXME all drawing stuff in this class and sl.clear somewhere?!
108
109   sl.addColumn(0);
110   sl.addColumn(130);
111
112   RecTimer* recTimer;
113   int first = 1;
114
115   for (UINT i = 0; i < recTimerList->size(); i++)
116   {
117     recTimer = (*recTimerList)[i];
118     if (recTimer->recording)
119     {
120       status = 'R';
121     }
122     else if (recTimer->pending)
123     {
124       status = 'X';
125     }
126     else if (recTimer->active == 0)
127     {
128       status = 'N';
129     }
130     else
131     {
132       status = 'O';
133     }
134
135     btime = localtime((time_t*)&recTimer->startTime);
136     strftime(strA, 299, "%d/%m %H:%M ", btime);
137     snprintf(strB, 299, "%c %s\t%s", status, strA, recTimer->getName());
138     recTimer->index = sl.addOption(strB, first);
139     first = 0;
140   }
141 }
142
143 void VTimerList::drawClock()
144 {
145   // Blank the area first
146   rectangle(area.w - 150, 0, 150, 30, titleBarColour);
147
148   char timeString[20];
149   time_t t;
150   time(&t);
151   struct tm* tms = localtime(&t);
152   strftime(timeString, 19, "%d/%m %H:%M:%S", tms);
153   drawTextRJ(timeString, 560, 5, Colour::LIGHTTEXT);
154
155   Timers::getInstance()->setTimer(this, 1, t + 1);
156 }
157
158 void VTimerList::drawShowing()
159 {
160   int topOption = sl.getTopOption() + 1;
161   if (sl.getNumOptions() == 0) topOption = 0;
162
163   rectangle(220, 385, 180, 25, Colour::VIEWBACKGROUND);
164   char showing[200];
165   sprintf(showing, tr("%i to %i of %i"), topOption, sl.getBottomOption(), sl.getNumOptions());
166   drawText(showing, 220, 385, Colour::LIGHTTEXT);
167 }
168
169 void VTimerList::timercall(int clientReference)
170 {
171   drawClock();
172   ViewMan::getInstance()->updateView(this, &clockRegion);
173 }
174
175 int VTimerList::handleCommand(int command)
176 {
177   switch(command)
178   {
179     case Remote::DF_UP:
180     case Remote::UP:
181     {
182       sl.up();
183       sl.draw();
184       drawShowing();
185       ViewMan::getInstance()->updateView(this);
186       return 2;
187     }
188     case Remote::DF_DOWN:
189     case Remote::DOWN:
190     {
191       sl.down();
192       sl.draw();
193       drawShowing();
194       ViewMan::getInstance()->updateView(this);
195       return 2;
196     }
197     case Remote::SKIPBACK:
198     {
199       sl.pageUp();
200       sl.draw();
201       drawShowing();
202       ViewMan::getInstance()->updateView(this);
203       return 2;
204     }
205     case Remote::SKIPFORWARD:
206     {
207       sl.pageDown();
208       sl.draw();
209       drawShowing();
210       ViewMan::getInstance()->updateView(this);
211       return 2;
212     }
213     case Remote::OK:
214     {
215       RecTimer* recTimer = NULL;
216       if (recTimerList)
217       {
218         int currentOption = sl.getCurrentOption();
219
220         for (UINT i = 0; i < recTimerList->size(); i++)
221         {
222           recTimer = (*recTimerList)[i];
223           if (currentOption == recTimer->index) break;
224         }
225       }
226
227       if (recTimer == NULL) return 2;
228
229       VTimerEdit* v = new VTimerEdit(recTimer);
230       ViewMan::getInstance()->add(v);
231       ViewMan::getInstance()->updateView(v);
232
233       return 2;
234     }
235     case Remote::BACK:
236     {
237       return 4;
238     }
239   }
240   // stop command getting to any more views
241   return 1;
242 }