]> git.vomp.tv Git - vompclient.git/blob - wselectlist.h
Replace TVMedia & OsdVector refcounting with new Image system
[vompclient.git] / wselectlist.h
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 #ifndef WSELECTLIST_H
21 #define WSELECTLIST_H
22
23 #include <string>
24 #include <vector>
25
26 #include "defines.h"
27 #include "image.h"
28 #include "boxx.h"
29
30 typedef struct
31 {
32   std::string text;
33   void* data;
34   Image image;
35 } wsloption;
36
37 class WSelectList : public Boxx
38 {
39   public:
40     WSelectList();
41     virtual ~WSelectList();
42     void clear();
43     void addColumn(int x);
44     int getColumn(int x);
45
46     void setNoLoop();
47     void setShowSelOption(bool set) { showseloption = set; }
48     void setDarkSelOption(bool set) { darkseloption = set; }
49     // FIXME 4 versions !
50     int addOption(const char* text, void* data, int selected);
51     int addOption(const std::string& text, void* data, int selected);
52     int addOption(const char* text, void* data, int selected, Image& icon);
53     int addOption(const std::string& text, void* data, int selected, Image& icon);
54     void draw();
55     void setBackgroundColour(const DrawStyle& colour);
56     void setLinesPerOption(float lines) { linesPerOption = lines; }
57
58     void down();
59     void up();
60     void pageUp();
61     void pageDown();
62
63     int getTopOption();
64     int getNumOptions();
65     int getBottomOption();     // actually returns bottom + 1 i.e. the one just past display ?!
66     int getNumOptionsDisplayable();
67     int getCurrentOption();
68     void* getCurrentOptionData();
69
70     void hintSetCurrent(int index);
71     void hintSetTop(int index);
72
73     virtual bool mouseMove(int x, int y);
74     virtual bool mouseLBDOWN(int x, int y);
75     virtual bool mouseAndroidScroll(int x, int y, int sx, int sy);
76
77   private:
78     void drawOptionLine(const std::string& text, int xpos, int ypos, int width, const DrawStyle& colour, Image& icon);
79     int getMouseLine(int x, int y);
80
81     DrawStyle backgroundColour;
82     std::vector<wsloption> options;
83     int selectedOption{};
84     int topOption{};
85     int numOptionsDisplayable{};
86     int columns[10];
87     int numColumns{};
88     int noLoop{};
89     bool showseloption{true};
90     bool darkseloption{};
91     float linesPerOption{1};
92     UINT gap{1};
93 };
94
95 #endif