]> git.vomp.tv Git - vompclient-marten.git/blob - woptionbox.cc
Mouse support (part 1)
[vompclient-marten.git] / woptionbox.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 "woptionbox.h"
22
23 WOptionBox::WOptionBox()
24 {
25   numOptions = 0;
26   options = NULL;
27   active = 0;
28   currentOption = 0;
29
30   mode = MODE_TEXT;
31 }
32
33 WOptionBox::~WOptionBox()
34 {
35   if (!options) return;
36
37   for(UINT i = 0; i < numOptions; i++) delete[] options[i];
38   free(options);
39 }
40
41 void WOptionBox::addOption(const char* takeText)
42 {
43   int length = strlen(takeText);
44   char* newOption = new char[length + 1];
45   strcpy(newOption, takeText);
46   options = (char**)realloc(options, (numOptions+1) * sizeof(char*));
47   options[numOptions] = newOption;
48   numOptions++;
49 }
50
51 void WOptionBox::setActive(UCHAR tactive)
52 {
53   active = tactive;
54 }
55
56 void WOptionBox::draw()
57 {
58   if (active)
59   {
60     fillColour(Colour::SELECTHIGHLIGHT);
61     drawText(options[currentOption], 0, 0, Colour::DARKTEXT);
62   }
63   else
64   {
65     fillColour(Colour::BUTTONBACKGROUND);
66     drawText(options[currentOption], 0, 0, Colour::LIGHTTEXT);
67   }
68 }
69
70 void WOptionBox::left()
71 {
72   if (currentOption == 0) return;
73   --currentOption;
74 }
75
76 void WOptionBox::right()
77 {
78   if (currentOption == (numOptions - 1)) return;
79   ++currentOption;
80 }
81
82 void WOptionBox::cycle()
83 {
84   if (currentOption == (numOptions - 1))
85   {
86     currentOption = 0;
87   }
88   else
89   {
90     ++currentOption;
91   }
92 }
93
94 void WOptionBox::setSelected(const char* toSelect)
95 {
96   for(UINT i = 0; i < numOptions; i++)
97   {
98     if (!strcmp(toSelect, options[i]))
99     {
100       currentOption = i;
101       return;
102     }
103   }
104   currentOption = 0;
105 }
106
107 //char* WOptionBox::getSelected()
108 //{
109 //  return options[currentOption];
110 //}
111
112 int WOptionBox::getSelectedIndex()
113 {
114   if (mode == MODE_TEXT)
115   {
116     return currentOption;
117   }
118   else
119   {
120     return atoi(options[currentOption]);
121   }
122 }
123
124 void WOptionBox::setIntMode(int startInt, int setNumOptions)
125 {
126   mode = MODE_INT;
127
128   int cInt;
129   char buffer[20];
130
131   for (cInt = startInt; cInt < (startInt + setNumOptions); cInt++)
132   {
133     sprintf(buffer, "%i", cInt);
134     addOption(buffer);
135   }
136 }
137
138 void WOptionBox::setSelected(int toSelect)
139 {
140   for(UINT i = 0; i < numOptions; i++)
141   {
142     if (atoi(options[i]) == toSelect)
143     {
144       currentOption = i;
145       return;
146     }
147   }
148   currentOption = 0;
149 }
150
151 bool WOptionBox::mouseMove(int x, int y)
152 {
153   if ((x-offsetX)>=area.x && (y-offsetY)>=area.y
154     && (x-offsetX)<=area.w && (y-offsetY)<=area.h && !active)
155   {
156     setActive(1);
157     return true;
158   }
159   return false;
160 }
161
162 bool WOptionBox::mouseLBDOWN(int x, int y)
163 {
164   if ((x-offsetX)>=area.x && (y-offsetY)>=area.y
165     && (x-offsetX)<=area.w && (y-offsetY)<=area.h && active)
166   {
167     return true;
168   }
169   return false;
170 }