]> git.vomp.tv Git - vompclient.git/blob - vserverselect.cc
Fix text corruption in live TV OSD clock
[vompclient.git] / vserverselect.cc
1 /*
2     Copyright 2004-2020 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 "defines.h"
21 #include "input.h"
22 #include "colour.h"
23 #include "video.h"
24 #include "boxstack.h"
25 #include "i18n.h"
26 #include "messagequeue.h"
27
28 #include "vserverselect.h"
29
30 VServerSelect::VServerSelect(const VDPC& servers, MessageReceiver* treplyTo)
31 {
32   setSize(300, 200);
33   createBuffer();
34   if (Video::getInstance()->getFormat() == Video::PAL)
35   {
36     setPosition(220, 200);
37   }
38   else
39   {
40     setPosition(210, 150);
41   }
42
43   setTitleBarOn(1);
44   setTitleBarColour(DrawStyle::TITLEBARBACKGROUND);
45   setTitleText(tr("Choose a VDR server"));
46
47   sl.setPosition(10, 30 + 5);
48   sl.setSize(area.w - 20, area.h - 30 - 15);
49   add(&sl);
50
51   sl.addOption(servers[0].name.c_str(), 0, 1);
52   for(UINT k = 1; k < servers.numServers(); k++)
53   {
54     sl.addOption(servers[k].name.c_str(), 0, 0);
55   }
56
57   replyTo = treplyTo;
58   MessageQueue::getInstance()->addReceiver(this);
59 }
60
61 VServerSelect::~VServerSelect()
62 {
63   MessageQueue::getInstance()->removeReceiver(this);
64 }
65
66 void VServerSelect::draw()
67 {
68   TBBoxx::draw();
69 }
70
71 int VServerSelect::handleCommand(int command)
72 {
73   switch(command)
74   {
75     case Input::UP:
76     {
77       sl.up();
78       sl.draw();
79       BoxStack::getInstance()->update(this);
80       return BoxStack::COMMAND_HANDLED;
81     }
82     case Input::DOWN:
83     {
84       sl.down();
85       sl.draw();
86       BoxStack::getInstance()->update(this);
87       return BoxStack::COMMAND_HANDLED;
88     }
89     case Input::OK:
90     {
91       Message* m = new Message(); // Question/Answer mech. Better being messages
92       m->to = replyTo;
93       m->message = Message::SERVER_SELECTED;
94       m->parameter = sl.getCurrentOption();
95       MessageQueue::getInstance()->postMessage(m);
96       return BoxStack::DELETE_ME;
97     }
98   }
99
100   return BoxStack::ABANDON_COMMAND;
101 }
102
103 void VServerSelect::processMessage(Message* m)
104 {
105   if (m->message == Message::MOUSE_MOVE)
106   {
107     if (sl.mouseMove(m->parameter - getScreenX(), m->tag - getScreenY()))
108     {
109       sl.draw();
110       BoxStack::getInstance()->update(this);
111     }
112   }
113   else if (m->message == Message::MOUSE_LBDOWN)
114   {
115     if (sl.mouseLBDOWN(m->parameter - getScreenX(), m->tag - getScreenY()))
116     {
117       Input::sendInputKey(Input::OK);
118     }
119   }
120 }