void Box::show()
{
- show(area);
+ blt(area);
}
-void Box::show(Region& r)
+void Box::blt(Region& r)
{
Log::getInstance()->log("Box", Log::DEBUG, "Show region %p %u %u %u %u", surface, r.x, r.y, r.w, r.h);
// surface->updateToScreen(area.x, area.y, area.w, area.h);
Box();
virtual ~Box();
- void setScreenPos(int x, int y);
+ void setScreenPos(int x, int y); // Even numbers only!!!
void setSurfaceOffset(UINT x, UINT y);
- void show();
- void show(Region& r);
+ void show(); // Obselete
+ void blt(Region& r); // For use only by ViewMan
virtual void draw();
void drawPara(char* text, int x, int y, Colour& colour);
// Drawing functions level 0
- void rectangle(int x1, int y1, int x2, int y2, Colour& colour);
+ void rectangle(int x1, int y1, int w, int h, Colour& colour);
void drawText(char* text, int x, int y, Colour& colour);
void drawTextRJ(char* text, int x, int y, Colour& colour);
void drawTextCentre(char* text, int x, int y, Colour& colour);
v->create(video->getScreenWidth(), video->getScreenHeight());
v->setBackgroundColour(Colour::VIDEOBLUE);
v->draw();
- v->show();
viewman->add(v);
+ viewman->updateView(v);
viewman->removeView(v);
// Wallpaper
wallpaper->init("/wallpaperNTSC.jpg");
}
wallpaper->draw();
- wallpaper->show();
viewman->add(wallpaper);
+ viewman->updateView(wallpaper);
// End of startup. Lock the mutex and put the first view up
case Remote::VOLUMEDOWN:
{
VVolume* v = new VVolume();
- v->handleCommand(button); // this will draw+show
viewman->add(v);
+ v->handleCommand(button); // this will draw+show
return;
}
case Remote::MUTE:
{
VMute* v = new VMute();
v->draw();
- v->show();
viewman->add(v);
+ viewman->updateView(v);
return;
}
case Remote::POWER:
{
Video::getInstance()->signalOff();
viewman->removeAll();
- wallpaper->show();
+ viewman->updateView(wallpaper);
VDR::getInstance()->configSave("General", "Last Power State", "Off");
VDR::getInstance()->disconnect();
vi->setOneLiner(tr("Connected, loading config"));
vi->draw();
- vi->show();
viewman->add(vi);
-
+ viewman->updateView(vi);
VDR* vdr = VDR::getInstance();
char* config;
VWelcome* vw = new VWelcome();
vw->draw();
- vw->show();
viewman->add(vw);
+ viewman->updateView(vw);
}
sl.draw();
doShowingBar();
- show();
+ ViewMan::getInstance()->updateView(this);
return 2;
}
case Remote::DF_DOWN:
sl.draw();
doShowingBar();
- show();
+ ViewMan::getInstance()->updateView(this);
return 2;
}
case Remote::SKIPBACK:
sl.draw();
doShowingBar();
- show();
+ ViewMan::getInstance()->updateView(this);
return 2;
}
case Remote::SKIPFORWARD:
sl.draw();
doShowingBar();
- show();
+ ViewMan::getInstance()->updateView(this);
return 2;
}
case Remote::OK:
VVideoLive* v = new VVideoLive(chanList, chan->type);
v->channelChange(VVideoLive::NUMBER, chan->number);
- ViewMan::getInstance()->add(v);
v->draw();
- v->show();
+ ViewMan::getInstance()->add(v);
+ ViewMan::getInstance()->updateView(v);
return 2;
}
++numGot;
draw();
- show();
+ ViewMan::getInstance()->updateView(this);
if (numGot == 3)
{
{
setOneLiner(tr("Locating server"));
draw();
- show();
+ viewman->updateView(this);
vdr->findServers(serverIPs);
if (!irun)
VServerSelect* vs = new VServerSelect(&serverIPs);
vs->setParent(this);
vs->draw();
- vs->show();
viewman->add(vs); // FIXME - do this better - perhaps post message to Command
// Otherwise it will be using ViewMan without the Command mutex locked
+ viewman->updateView(vs);
+
threadLock();
threadWaitForSignal();
threadUnlock();
setOneLiner(tr("Connecting to VDR"));
draw();
- show();
+ viewman->updateView(this);
success = vdr->connect();
if (success)
}
draw();
- show();
+ viewman->updateView(this);
nanosleep(&ts, NULL);
} while(!success);
\r
VEpg::VEpg(VVideoLive* v, UINT currentChannel)\r
{\r
+ viewman = ViewMan::getInstance();\r
+\r
for(UINT listIndex = 0; listIndex < 7; listIndex++)\r
{\r
// initialise array of pointers to eventlist structures\r
void VEpg::draw()\r
{\r
View::draw(); // draw pallet\r
- chanListbox.draw();\r
- drawgrid();\r
- chanName.draw(); // TODO this should be dealt with by vvideolive\r
- progTitle.draw();\r
- progInfo.draw();\r
\r
-// Display the status and key stuff at the bottom\r
+ // Moved all the dynamic data drawing to a seperate function\r
+\r
+\r
+ Log::getInstance()->log("EPG", Log::DEBUG, "START TIME");\r
+ // Display the status and key stuff at the bottom\r
int keyx = chanListbox.getOffsetX();\r
int keyy = chanListbox.getOffsetY() + chanListbox.getHeight() + 2;\r
surface->fillblt(keyx, keyy, 610, Surface::getFontHeight() * 2 + 14, surface->rgba(100, 100, 100, 255));\r
drawText(tr("Guide / Back: Close"), keyx + 292 , keyy + 5, Colour::LIGHTTEXT);\r
\r
surface->fillblt(keyx + 290, keyy + Surface::getFontHeight() + 8, 180, Surface::getFontHeight() + 2, surface->rgba( 180, 180, 180, 255));\r
- Colour red = Colour(130, 0, 0);\r
- drawText(tr("Rec: Set timer"), keyx + 292, keyy + Surface::getFontHeight() + 9, red);\r
+// Colour red = Colour(130, 0, 0);\r
+// drawText(tr("Rec: Set timer"), keyx + 292, keyy + Surface::getFontHeight() + 9, red);\r
\r
surface->fillblt(keyx + 474, keyy + 4, 128, Surface::getFontHeight() + 2, surface->rgba( 180, 180, 180, 255));\r
w.nextSymbol = WSymbol::PLAY;\r
\r
surface->fillblt(keyx + 474, keyy + Surface::getFontHeight() + 8, 128, Surface::getFontHeight() + 2, surface->rgba( 180, 180, 180, 255));\r
drawText(tr("Go: Preview"), keyx + 476, keyy + Surface::getFontHeight() + 9, Colour::LIGHTTEXT);\r
+\r
+\r
+ Log::getInstance()->log("EPG", Log::DEBUG, "END TIME");\r
+\r
+ // Draw all the dynamic data\r
+ drawData();\r
}\r
\r
+void VEpg::drawData()\r
+{\r
+ // Not doing View::draw() every time causes\r
+ // things not to be cleared off the surface properly\r
+ // So, blank out the data area first\r
+\r
+ rectangle(\r
+ chanListbox.getOffsetX(),\r
+ chanListbox.getOffsetY() - Surface::getFontHeight() - 3,\r
+ 610, // FIXME make this dynamic\r
+ chanListbox.getHeight() + Surface::getFontHeight() + 3,\r
+ Colour::BLACK);\r
+\r
+ chanListbox.draw();\r
+ drawgrid();\r
+ chanName.draw(); // TODO this should be dealt with by vvideolive\r
+ progTitle.draw();\r
+ progInfo.draw();\r
+}
+
+\r
int VEpg::handleCommand(int command)\r
{\r
switch(command)\r
case Remote::UP:\r
{ // cursor up the channel list\r
chanListbox.up();\r
- draw();\r
- show();\r
+ drawData();\r
+ viewman->updateView(this);\r
return 2;\r
}\r
case Remote::DF_DOWN:\r
case Remote::DOWN:\r
{ // cursor down the channel list\r
chanListbox.down();\r
- draw();\r
- show();\r
+ drawData();\r
+ viewman->updateView(this);\r
return 2;\r
}\r
case Remote::DF_LEFT:\r
case Remote::LEFT:\r
{ // cursor left through time\r
selTime = thisEvent.time - 1;\r
- draw();\r
- show();\r
+ drawData();\r
+ viewman->updateView(this);\r
return 2;\r
}\r
case Remote::DF_RIGHT:\r
{\r
// cursor right through time\r
selTime = thisEvent.time + thisEvent.duration;\r
- draw();\r
- show();\r
+ drawData();\r
+ viewman->updateView(this);\r
return 2;\r
}\r
case Remote::RED:\r
{\r
// cursor up one page\r
chanListbox.pageUp();\r
- draw();\r
- show();\r
+ drawData();\r
+ viewman->updateView(this);\r
return 2;\r
}\r
case Remote::GREEN:\r
{\r
// cursor down one page\r
chanListbox.pageDown();\r
- draw();\r
- show();\r
+ drawData();\r
+ viewman->updateView(this);\r
return 2;\r
}\r
case Remote::BLUE:\r
{\r
// step forward 24 hours\r
selTime += 24 * 60 * 60;\r
- draw();\r
- show();\r
+ drawData();\r
+ viewman->updateView(this);\r
return 2;\r
}\r
case Remote::YELLOW:\r
{\r
// step forward 24 hours\r
selTime -= 24 * 60 * 60;\r
- draw();\r
- show();\r
+ drawData();\r
+ viewman->updateView(this);\r
return 2;\r
}\r
case Remote::RECORD:\r
\r
void VEpg::drawgrid() // redraws grid and select programme\r
{\r
-// draw the grid of programmes\r
+ // draw the grid of programmes\r
char timeString[20];\r
time_t t;\r
time(&t); // set t = now\r
{\r
chanName.setText(chname);\r
chanName.draw();\r
- show();\r
+ viewman->updateView(this);\r
}\r
\r
void VEpg::paintCell(Event* event, int yOffset, Colour bg, Colour fg)\r
private:\r
void setInfo(Event* event); // display details of selected programme\r
void drawgrid(); // redraws grid and select programme\r
+ void drawData();\r
\r
WSelectList chanListbox; // listbox to display available channels\r
WTextbox progTitle; // area to display time and title of selected programme\r
void paintCell(Event* event, int yOffset, Colour bg, Colour fg);\r
time_t prevHour(time_t* t);\r
VVideoLive* videoLive;\r
+ ViewMan* viewman;\r
};\r
\r
#endif\r
public:
View();
virtual ~View();
- bool create(UINT width, UINT height);
+ bool create(UINT width, UINT height); // Even numbers only ?
virtual void draw();
virtual int handleCommand(int command);
void ViewMan::updateView(View* toUpdate, Region* regionToUpdate)
{
+ Log::getInstance()->log("ViewMan", Log::DEBUG, "UpdateView called");
// Get the z index of the view
int z;
{
r2 = rl.front();
r2.z = z;
- views[z]->show(r2);
+ views[z]->blt(r2);
rl.pop_front();
}
}
while(!rl.empty())
{
r2 = rl.front();
- views[r2.z]->show(r2);
+ views[r2.z]->blt(r2);
rl.pop_front();
}
}
View* toAdd = (View*)m->parameter;
add(toAdd);
toAdd->draw();
- toAdd->show();
+ updateView(toAdd);
}
}
}
create(500, 120);
if (Video::getInstance()->getFormat() == Video::PAL)
{
- setScreenPos(125, 410);
+ setScreenPos(124, 410);
}
else
{
- setScreenPos(115, 320);
+ setScreenPos(114, 320);
}
sl.up();
sl.draw();
- show();
+ ViewMan::getInstance()->updateView(this);
// Arrows pressed, go to an 8s timer
Timers::getInstance()->setTimer(this, 1, (struct timespec){8, 0});
sl.down();
sl.draw();
- show();
+ ViewMan::getInstance()->updateView(this);
// Arrows pressed, go to an 8s timer
Timers::getInstance()->setTimer(this, 1, (struct timespec){8, 0});
vi->setScreenPos(110, 90);
}
vi->create(510, 270);
+ vi->draw();
ViewMan::getInstance()->add(vi);
- vi->draw();
- vi->show();
+ ViewMan::getInstance()->updateView(vi);
return 2;
{
isMuted = Audio::getInstance()->toggleUserMute();
draw();
- show();
+ ViewMan::getInstance()->updateView(this);
// handled
return 2;
}
VOptions::VOptions()
{
+ viewman = ViewMan::getInstance();
+
create(530, 85+(NUM_OPTIONS*30));
if (Video::getInstance()->getFormat() == Video::PAL)
{
--selectedOption;
optionBox[selectedOption].setActive(1);
draw();
- show();
+ viewman->updateView(this);
}
return 2;
}
++selectedOption;
optionBox[selectedOption].setActive(1);
draw();
- show();
+ viewman->updateView(this);
}
return 2;
}
{
optionBox[selectedOption].left();
draw();
- show();
+ viewman->updateView(this);
return 2;
}
case Remote::DF_RIGHT:
{
optionBox[selectedOption].right();
draw();
- show();
+ viewman->updateView(this);
return 2;
}
case Remote::BACK:
{
optionBox[selectedOption].cycle();
draw();
- show();
+ viewman->updateView(this);
}
}
Message *m = new Message();
m->to = VWelcome::getInstance();
m->message = Message::REDRAW_LANG;
- ViewMan::getInstance()->postMessage(m);
+ viewman->postMessage(m);
}
if (result[2] != optionsAtStart[2])
WOptionBox optionBox[numOptions];
VDR* vdr;
int* optionsAtStart;
+ ViewMan* viewman;
};
#endif
{
swap();
draw();
- show();
+ ViewMan::getInstance()->updateView(this);
return 2;
}
case Remote::DF_RIGHT:
{
swap();
draw();
- show();
+ ViewMan::getInstance()->updateView(this);
return 2;
}
case Remote::BACK:
{
myParent = tparent;
dataInvalid = 0;
+ viewman = ViewMan::getInstance();
create(570, 420);
if (Video::getInstance()->getFormat() == Video::PAL)
Message* m = new Message();
m->to = myParent;
m->message = Message::CHILD_CLOSE;
- ViewMan::getInstance()->postMessage(m);
+ viewman->postMessage(m);
}
// only delete the list if this is not a sub dir window
Message* m1 = new Message();
m1->to = myParent;
m1->message = Message::REDRAW_DATA;
- ViewMan::getInstance()->postMessage(m1);
+ viewman->postMessage(m1);
}
show();
if (toPlay)
{
VVideoRec* vidrec = new VVideoRec(toPlay);
- ViewMan::getInstance()->add(vidrec);
vidrec->draw();
- vidrec->show();
+ viewman->add(vidrec);
+ viewman->updateView(vidrec);
vidrec->go(0);
return 1;
}
ULLONG position = VDR::getInstance()->getResumePoint(toResume->fileName);
VVideoRec* vidrec = new VVideoRec(toResume);
- ViewMan::getInstance()->add(vidrec);
vidrec->draw();
- vidrec->show();
+ viewman->add(vidrec);
+ viewman->updateView(vidrec);
vidrec->go(position);
return 1;
}
sl.draw();
doShowingBar();
- show();
+ viewman->updateView(this);
return 2;
}
case Remote::DF_DOWN:
sl.draw();
doShowingBar();
- show();
+ viewman->updateView(this);
return 2;
}
case Remote::SKIPBACK:
sl.draw();
doShowingBar();
- show();
+ viewman->updateView(this);
return 2;
}
case Remote::SKIPFORWARD:
sl.draw();
doShowingBar();
- show();
+ viewman->updateView(this);
return 2;
}
case Remote::OK:
{
VRecordingList* sub = new VRecordingList(this);
sub->setDir(curDir);
- ViewMan::getInstance()->add(sub);
+ viewman->add(sub);
sub->draw();
sub->show();
VRecordingMenu* v = new VRecordingMenu();
v->setParent(this);
v->setRecording(current);
- ViewMan::getInstance()->add(v);
+ viewman->add(v);
v->draw();
v->show();
return 2;
private:
VRecordingList* myParent;
Directory* recDir;
+ ViewMan* viewman;
WSelectList sl;
int dataInvalid;
{
sl.up();
sl.draw();
- show();
+ ViewMan::getInstance()->updateView(this);
return 2;
}
case Remote::DF_DOWN:
{
sl.down();
sl.draw();
- show();
+ ViewMan::getInstance()->updateView(this);
return 2;
}
case Remote::OK:
vi->setScreenPos(110, 90);
}
vi->create(490, 300);
-
- ViewMan::getInstance()->add(vi);
vi->draw();
- vi->show();
+ ViewMan::getInstance()->add(vi);
+ ViewMan::getInstance()->updateView(vi);
if (summary) delete[] summary;
v->setScreenPos(220, 140);
}
- ViewMan::getInstance()->add(v);
v->draw();
- v->show();
+ ViewMan::getInstance()->add(v);
+ ViewMan::getInstance()->updateView(v);
return 2;
}
}
{
sl.up();
sl.draw();
- show();
+ ViewMan::getInstance()->updateView(this);
return 2;
}
case Remote::DF_DOWN:
{
sl.down();
sl.draw();
- show();
+ ViewMan::getInstance()->updateView(this);
return 2;
}
case Remote::OK:
case Remote::ZERO ... Remote::NINE:
{
VChannelSelect* v = new VChannelSelect(this, command);
- viewman->add(v);
v->draw();
- v->show();
+ viewman->add(v);
+ viewman->updateView(v);
}
}
VLiveBanner* vlb = VLiveBanner::getInstance(); // guaranteed to be one
vlb->setChannel((*chanList)[currentChannel]);
vlb->draw();
- vlb->show();
+ viewman->updateView(vlb);
}
}
else if (m->message == Message::CHANNEL_DOWN)
VLiveBanner* vlb = VLiveBanner::getInstance(); // guaranteed to be one
vlb->setChannel((*chanList)[currentChannel]);
vlb->draw();
- vlb->show();
+ viewman->updateView(vlb);
}
}
else if (m->message == Message::STREAM_END)
{
displayVolume = Audio::getInstance()->volumeDown();
draw();
- show();
+ ViewMan::getInstance()->updateView(this);
// handled
return 2;
}
{
displayVolume = Audio::getInstance()->volumeUp();
draw();
- show();
+ ViewMan::getInstance()->updateView(this);
// handled
return 2;
}
VWelcome::VWelcome()
{
instance = this;
+ viewman = ViewMan::getInstance();
clockRegion.x = 400;
clockRegion.y = 0;
void VWelcome::timercall(int clientReference)
{
drawClock();
- ViewMan::getInstance()->updateView(this, &clockRegion);
+ viewman->updateView(this, &clockRegion);
}
int VWelcome::handleCommand(int command)
{
switch(command)
{
- case Remote::NINE:
- {
- VInfo* viewWait = new VInfo();
- viewWait->create(100, 100);
- viewWait->setScreenPos(485, 185);
- viewWait->setTitleBarOn(0);
- viewWait->setBackgroundColour(Colour::DANGER);
- viewWait->draw();
- viewWait->show();
- ViewMan::getInstance()->add(viewWait);
-
- return 2;
- }
-
case Remote::DF_UP:
case Remote::UP:
{
sl.up();
sl.draw();
- show();
+ viewman->updateView(this);
return 2;
}
case Remote::DF_DOWN:
{
sl.down();
sl.draw();
- show();
+ viewman->updateView(this);
return 2;
}
case Remote::ONE:
VChannelList* vchan = new VChannelList(VDR::VIDEO);
vchan->setList(chanList);
- ViewMan::getInstance()->add(vchan);
vchan->draw();
- vchan->show();
+ viewman->add(vchan);
+ viewman->updateView(vchan);
// Message* m = new Message();
VChannelList* vchan = new VChannelList(VDR::RADIO);
vchan->setList(chanList);
- ViewMan::getInstance()->add(vchan);
vchan->draw();
- vchan->show();
+ viewman->add(vchan);
+ viewman->updateView(vchan);
}
}
void VWelcome::doRecordingsList()
{
- ViewMan* viewman = ViewMan::getInstance();
-
VInfo* viewWait = new VInfo();
viewWait->create(460, 190);
if (Video::getInstance()->getFormat() == Video::PAL)
}
viewWait->setOneLiner(tr("Downloading recordings list"));
viewWait->draw();
- viewWait->show();
viewman->add(viewWait);
-
+ viewman->updateView(viewWait);
VDR* vdr = VDR::getInstance();
Directory* recDir = vdr->getRecordingsList();
{
VRecordingList* vrec = new VRecordingList(NULL);
vrec->setDir(recDir);
-
- ViewMan::getInstance()->add(vrec);
-
vrec->draw();
- vrec->show();
+
+ viewman->add(vrec);
+ viewman->updateView(vrec);
}
Log::getInstance()->log("VWelcome", Log::DEBUG, "possible delay start");
void VWelcome::doOptions()
{
VOptions* voptions = new VOptions();
- ViewMan::getInstance()->add(voptions);
voptions->draw();
- voptions->show();
+ viewman->add(voptions);
+ viewman->updateView(voptions);
}
void VWelcome::processMessage(Message* m)
Log::getInstance()->log("VWelcome", Log::DEBUG, "Got redraw lang message");
setup();
draw();
- show(); // careful, this only works properly because the only place
- // this is called from is voptions and that disappears before
- // this message is delivered
+ viewman->updateView(this);
}
}
WSelectList sl;
WJpeg jpeg;
+ ViewMan* viewman;
+
void doChannelsList();
void doRadioList();
void doRecordingsList();