ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/truck/DashInterface/MenuList.cpp
Revision: 45
Committed: 2008-03-06T18:12:54-08:00 (14 years, 6 months ago) by douglas
File size: 3223 byte(s)
Log Message:
Beginnings of an sqlite3 api ala Menes' dbi.

File Contents

# User Rev Content
1 douglas 42 // Menu List
2     //
3     // Douglas Thrift
4     //
5     // $Id$
6    
7     #include <foreach.hpp>
8    
9     #include "MenuList.hpp"
10    
11     MenuList *MenuList::previous;
12    
13     MenuList::MenuItem::MenuItem(MenuList *list) : list(list)
14     {
15     }
16    
17 douglas 44 MenuList::MenuList(MenuList *parent, Display &display, size_t size) : parent(parent), display(display), cursor(0), list(size)
18 douglas 42 {
19     }
20    
21     MenuList::~MenuList()
22     {
23     _foreach (std::vector<MenuItem *>, item, list)
24     delete *item;
25     }
26    
27     MenuList *MenuList::Enter()
28     {
29     return list[state.item]->Select();
30     }
31    
32     MenuList *MenuList::Right()
33     {
34     MenuItem *item(list[state.item]);
35    
36     if (dynamic_cast<SubItem *>(item))
37     return item->Select();
38    
39     return this;
40     }
41    
42     MenuList *MenuList::Left()
43     {
44     return parent;
45     }
46    
47     void MenuList::Render()
48     {
49 douglas 44 display.SetCursorPosition(19, cursor);
50    
51 douglas 42 if (this != previous || state != old)
52     {
53 douglas 44 display.Set(0, 0, (state.bottom != 0 ? '\x1a' : ' '));
54     display.Set(0, 1, '\x12');
55     display.Set(0, 2, '\x13');
56     display.Set(0, 3, (state.top < list.size() ? '\x1b' : ' '));
57 douglas 42
58     _forall (size_t, index, state.bottom, state.top)
59     {
60     MenuItem *item(list[index]);
61     std::string value(*item);
62    
63 douglas 44 value.resize(18, ' ');
64 douglas 42
65     if (BoolItem *item_ = dynamic_cast<BoolItem *>(item))
66     value += (*item_ ? '\x94' : '\xcf');
67     else if (dynamic_cast<SubItem *>(item))
68     value += '\x10';
69     else
70     value += ' ';
71    
72 douglas 44 display.Set(1, _index, value);
73 douglas 42 }
74     }
75     else
76     _forall (size_t, index, state.bottom, state.top)
77     if (BoolItem *item = dynamic_cast<BoolItem *>(list[index]))
78     display.Set(19, _index, (*item ? _B("\x94") : _B("\xcf")));
79     }
80    
81     MenuList &MenuList::operator ++()
82     {
83 douglas 44 old = state;
84    
85 douglas 42 size_t next(state.item + 1);
86    
87     if (next != list.size())
88     {
89     if (next == state.bottom)
90     ++state.top, ++state.bottom;
91     else
92 douglas 44 ++cursor;
93 douglas 42
94     state.item = next;
95     }
96    
97     return *this;
98     }
99    
100     MenuList &MenuList::operator --()
101     {
102 douglas 44 old = state;
103    
104 douglas 42 if (state.item != 0)
105     if (state.item-- == state.top)
106     --state.top, --state.bottom;
107     else
108 douglas 44 --cursor;
109 douglas 42
110     return *this;
111     }
112    
113     TopList::AppendItem::AppendItem(MenuList *list, bool &append) : MenuItem(list), append(append)
114     {
115     }
116    
117     MenuList *TopList::AppendItem::Select()
118     {
119     append = !append;
120    
121     return list;
122     }
123    
124     TopList::AppendItem::operator std::string() const
125     {
126     return _B("Append");
127     }
128    
129     TopList::AppendItem::operator bool() const
130     {
131     return append;
132     }
133    
134     TopList::ShuffleItem::ShuffleItem(MenuList *list, Audacious::Audacious &audacious) : MenuItem(list), audacious(audacious)
135     {
136     }
137    
138     MenuList *TopList::ShuffleItem::Select()
139     {
140     if (audacious.IsRunning())
141     audacious.ToggleShuffle();
142    
143     return list;
144     }
145    
146     TopList::ShuffleItem::operator std::string() const
147     {
148     return _B("Shuffle");
149     }
150    
151     TopList::ShuffleItem::operator bool() const
152     {
153     return audacious.IsRunning() ? audacious.IsShuffle() : false;
154     }
155    
156 douglas 43 TopList::MusicItem::MusicItem(MenuList *list, Audacious::Audacious &audacious) : MenuItem(list), audacious(audacious)
157     {
158     }
159    
160     MenuList *TopList::MusicItem::Select()
161     {
162 douglas 44 delete this;
163    
164 douglas 43 return NULL;
165     }
166    
167     TopList::MusicItem::operator std::string() const
168     {
169     return _B("Music");
170     }
171    
172 douglas 44 TopList::TopList(Display &display, Audacious::Audacious &audacious, bool &append) : MenuList(this, display, 3)
173 douglas 42 {
174     previous = NULL;
175     list[0] = new AppendItem(this, append);
176     list[1] = new ShuffleItem(this, audacious);
177 douglas 43 list[2] = new MusicItem(this, audacious);
178 douglas 42 }

Properties

Name Value
svn:keywords Id