2 Copyright 2004-2007 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, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 #include "vchannellist.h"
25 #include "vvideolivetv.h"
32 #include "vchannelselect.h"
34 VChannelList::VChannelList(ULONG type)
36 boxstack = BoxStack::getInstance();
39 if (Video::getInstance()->getFormat() == Video::PAL)
50 if (type == VDR::VIDEO)
52 setTitleText(tr("Channels"));
54 else if (type == VDR::RADIO)
56 setTitleText(tr("Radio Stations"));
58 setTitleBarColour(Colour::TITLEBARBACKGROUND);
60 sl.setPosition(10, 30 + 5);
61 sl.setSize(area.w - 20, area.h - 30 - 15 - 30);
65 VChannelList::~VChannelList()
70 for (UINT i = 0; i < chanList->size(); i++)
72 delete (*chanList)[i];
80 void VChannelList::setList(ChannelList* tlist)
93 for (UINT i = 0; i < chanList->size(); i++)
95 chan = (*chanList)[i];
96 sprintf(str, "%lu\t%s", chan->number, chan->name);
97 chan->index = sl.addOption(str, (ULONG)chan, first);
103 void VChannelList::highlightChannel(Channel* chan)
105 sl.hintSetCurrent(chan->index);
108 boxstack->update(this);
111 void VChannelList::draw()
116 // Put the status stuff at the bottom
121 w.nextSymbol = WSymbol::UP;
122 w.setPosition(20, 385);
125 w.nextSymbol = WSymbol::DOWN;
126 w.setPosition(50, 385);
129 w.nextSymbol = WSymbol::SKIPBACK;
130 w.setPosition(85, 385);
133 w.nextSymbol = WSymbol::SKIPFORWARD;
134 w.setPosition(115, 385);
137 w.nextSymbol = WSymbol::PLAY;
138 w.setPosition(150, 385);
144 void VChannelList::doShowingBar()
146 int topOption = sl.getTopOption() + 1;
147 if (sl.getNumOptions() == 0) topOption = 0;
150 sprintf(showing, tr("%i to %i of %i"), topOption, sl.getBottomOption(), sl.getNumOptions());
152 rectangle(220, 385, 220+160, 385+25, Colour::VIEWBACKGROUND);
153 drawText(showing, 220, 385, Colour::LIGHTTEXT);
156 int VChannelList::handleCommand(int command)
167 boxstack->update(this);
170 case Remote::DF_DOWN:
177 boxstack->update(this);
180 case Remote::SKIPBACK:
186 boxstack->update(this);
189 case Remote::SKIPFORWARD:
195 boxstack->update(this);
209 VChannelSelect* v = new VChannelSelect(this);
213 v->handleCommand(command);
219 Channel* chan = NULL;
220 if (chanList) chan = (Channel*)sl.getCurrentOptionData();
221 if (chan == NULL) return 2;
223 VVideoLiveTV* v = new VVideoLiveTV(chanList, chan->number, this);
234 // stop command getting to any more views
238 void VChannelList::processMessage(Message* m)
240 /* if (m->message == Message::MOUSE_MOVE) {
241 if (sl.mouseAndroidScroll((m->tag >> 16),(m->tag & 0xFFFF),
242 (m->parameter >> 16),(m->parameter & 0xFFFF))) {
245 boxstack->update(this);
248 else */if (m->message == Message::MOUSE_MOVE)
250 if (sl.mouseMove((m->parameter>>16)-getScreenX(),(m->parameter&0xFFFF)-getScreenY()))
254 boxstack->update(this);
257 else if (m->message == Message::MOUSE_LBDOWN)
259 if (sl.mouseLBDOWN((m->parameter>>16)-getScreenX(),(m->parameter&0xFFFF)-getScreenY()))
261 boxstack->handleCommand(Remote::OK); //simulate OK press
264 { //check if press is outside this view! then simulate cancel
265 int x=(m->parameter>>16)-getScreenX();
266 int y=(m->parameter&0xFFFF)-getScreenY();
267 if (x<0 || y <0 || x>(int)getWidth() || y>(int)getHeight())
269 boxstack->handleCommand(Remote::BACK); //simulate cancel press
273 else if (m->message == Message::CHANNEL_CHANGE)
275 Channel* chan = NULL;
276 for (UINT i = 0; i < chanList->size(); i++)
278 if ((*chanList)[i]->number == m->parameter)
280 chan = (*chanList)[i];
286 if (chan->type == VDR::VIDEO)
288 VVideoLiveTV* v = new VVideoLiveTV(chanList, chan->number, this);
295 VVideoLive* v = new VVideoLive(chanList, chan->type, this);
299 v->channelChange(VVideoLive::NUMBER, chan->number);