]>
Commit | Line | Data |
---|---|---|
0a9064fb MY |
1 | /* |
2 | * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> | |
3 | * Released under the terms of the GNU GPL v2.0. | |
4 | */ | |
5 | ||
bf7ab1e7 MY |
6 | #include <QTextBrowser> |
7 | #include <QTreeWidget> | |
8 | #include <QMainWindow> | |
9 | #include <QHeaderView> | |
0a9064fb | 10 | #include <qsettings.h> |
bf7ab1e7 MY |
11 | #include <QPushButton> |
12 | #include <QSettings> | |
13 | #include <QLineEdit> | |
14 | #include <QSplitter> | |
15 | #include <QCheckBox> | |
16 | #include <QDialog> | |
17 | #include "expr.h" | |
0a9064fb MY |
18 | |
19 | class ConfigView; | |
20 | class ConfigList; | |
21 | class ConfigItem; | |
22 | class ConfigLineEdit; | |
23 | class ConfigMainWindow; | |
24 | ||
25 | class ConfigSettings : public QSettings { | |
26 | public: | |
27 | ConfigSettings(); | |
bf7ab1e7 MY |
28 | QList<int> readSizes(const QString& key, bool *ok); |
29 | bool writeSizes(const QString& key, const QList<int>& value); | |
0a9064fb MY |
30 | }; |
31 | ||
32 | enum colIdx { | |
33 | promptColIdx, nameColIdx, noColIdx, modColIdx, yesColIdx, dataColIdx, colNr | |
34 | }; | |
35 | enum listMode { | |
36 | singleMode, menuMode, symbolMode, fullMode, listMode | |
37 | }; | |
38 | enum optionMode { | |
39 | normalOpt = 0, allOpt, promptOpt | |
40 | }; | |
41 | ||
bf7ab1e7 | 42 | class ConfigList : public QTreeWidget { |
0a9064fb | 43 | Q_OBJECT |
bf7ab1e7 | 44 | typedef class QTreeWidget Parent; |
0a9064fb MY |
45 | public: |
46 | ConfigList(ConfigView* p, const char *name = 0); | |
47 | void reinit(void); | |
48 | ConfigView* parent(void) const | |
49 | { | |
50 | return (ConfigView*)Parent::parent(); | |
51 | } | |
52 | ConfigItem* findConfigItem(struct menu *); | |
53 | ||
54 | protected: | |
55 | void keyPressEvent(QKeyEvent *e); | |
bf7ab1e7 MY |
56 | void mousePressEvent(QMouseEvent *e); |
57 | void mouseReleaseEvent(QMouseEvent *e); | |
58 | void mouseMoveEvent(QMouseEvent *e); | |
59 | void mouseDoubleClickEvent(QMouseEvent *e); | |
0a9064fb MY |
60 | void focusInEvent(QFocusEvent *e); |
61 | void contextMenuEvent(QContextMenuEvent *e); | |
62 | ||
63 | public slots: | |
64 | void setRootMenu(struct menu *menu); | |
65 | ||
66 | void updateList(ConfigItem *item); | |
67 | void setValue(ConfigItem* item, tristate val); | |
68 | void changeValue(ConfigItem* item); | |
69 | void updateSelection(void); | |
70 | void saveSettings(void); | |
71 | signals: | |
72 | void menuChanged(struct menu *menu); | |
73 | void menuSelected(struct menu *menu); | |
74 | void parentSelected(void); | |
75 | void gotFocus(struct menu *); | |
76 | ||
77 | public: | |
78 | void updateListAll(void) | |
79 | { | |
80 | updateAll = true; | |
81 | updateList(NULL); | |
82 | updateAll = false; | |
83 | } | |
84 | ConfigList* listView() | |
85 | { | |
86 | return this; | |
87 | } | |
88 | ConfigItem* firstChild() const | |
89 | { | |
bf7ab1e7 | 90 | return (ConfigItem *)children().first(); |
0a9064fb | 91 | } |
bf7ab1e7 | 92 | void addColumn(colIdx idx) |
0a9064fb | 93 | { |
bf7ab1e7 | 94 | showColumn(idx); |
0a9064fb MY |
95 | } |
96 | void removeColumn(colIdx idx) | |
97 | { | |
bf7ab1e7 | 98 | hideColumn(idx); |
0a9064fb MY |
99 | } |
100 | void setAllOpen(bool open); | |
101 | void setParentMenu(void); | |
102 | ||
103 | bool menuSkip(struct menu *); | |
104 | ||
bf7ab1e7 MY |
105 | void updateMenuList(ConfigItem *parent, struct menu*); |
106 | void updateMenuList(ConfigList *parent, struct menu*); | |
0a9064fb MY |
107 | |
108 | bool updateAll; | |
109 | ||
110 | QPixmap symbolYesPix, symbolModPix, symbolNoPix; | |
111 | QPixmap choiceYesPix, choiceNoPix; | |
112 | QPixmap menuPix, menuInvPix, menuBackPix, voidPix; | |
113 | ||
114 | bool showName, showRange, showData; | |
115 | enum listMode mode; | |
116 | enum optionMode optMode; | |
117 | struct menu *rootEntry; | |
bf7ab1e7 MY |
118 | QPalette disabledColorGroup; |
119 | QPalette inactivedColorGroup; | |
120 | QMenu* headerPopup; | |
0a9064fb MY |
121 | }; |
122 | ||
bf7ab1e7 MY |
123 | class ConfigItem : public QTreeWidgetItem { |
124 | typedef class QTreeWidgetItem Parent; | |
0a9064fb | 125 | public: |
bf7ab1e7 MY |
126 | ConfigItem(ConfigList *parent, ConfigItem *after, struct menu *m, bool v) |
127 | : Parent(parent, after), nextItem(0), menu(m), visible(v), goParent(false) | |
0a9064fb MY |
128 | { |
129 | init(); | |
130 | } | |
131 | ConfigItem(ConfigItem *parent, ConfigItem *after, struct menu *m, bool v) | |
bf7ab1e7 | 132 | : Parent(parent, after), nextItem(0), menu(m), visible(v), goParent(false) |
0a9064fb MY |
133 | { |
134 | init(); | |
135 | } | |
bf7ab1e7 MY |
136 | ConfigItem(ConfigList *parent, ConfigItem *after, bool v) |
137 | : Parent(parent, after), nextItem(0), menu(0), visible(v), goParent(true) | |
0a9064fb MY |
138 | { |
139 | init(); | |
140 | } | |
141 | ~ConfigItem(void); | |
142 | void init(void); | |
143 | void okRename(int col); | |
144 | void updateMenu(void); | |
145 | void testUpdateMenu(bool v); | |
146 | ConfigList* listView() const | |
147 | { | |
bf7ab1e7 | 148 | return (ConfigList*)Parent::treeWidget(); |
0a9064fb MY |
149 | } |
150 | ConfigItem* firstChild() const | |
151 | { | |
bf7ab1e7 | 152 | return (ConfigItem *)Parent::child(0); |
0a9064fb | 153 | } |
bf7ab1e7 | 154 | ConfigItem* nextSibling() |
0a9064fb | 155 | { |
bf7ab1e7 MY |
156 | ConfigItem *ret = NULL; |
157 | ConfigItem *_parent = (ConfigItem *)parent(); | |
158 | ||
159 | if(_parent) { | |
160 | ret = (ConfigItem *)_parent->child(_parent->indexOfChild(this)+1); | |
161 | } else { | |
162 | QTreeWidget *_treeWidget = treeWidget(); | |
163 | ret = (ConfigItem *)_treeWidget->topLevelItem(_treeWidget->indexOfTopLevelItem(this)+1); | |
164 | } | |
165 | ||
166 | return ret; | |
0a9064fb MY |
167 | } |
168 | void setText(colIdx idx, const QString& text) | |
169 | { | |
bf7ab1e7 | 170 | Parent::setText(idx, text); |
0a9064fb MY |
171 | } |
172 | QString text(colIdx idx) const | |
173 | { | |
bf7ab1e7 | 174 | return Parent::text(idx); |
0a9064fb | 175 | } |
bf7ab1e7 | 176 | void setPixmap(colIdx idx, const QIcon &icon) |
0a9064fb | 177 | { |
bf7ab1e7 | 178 | Parent::setIcon(idx, icon); |
0a9064fb | 179 | } |
bf7ab1e7 | 180 | const QIcon pixmap(colIdx idx) const |
0a9064fb | 181 | { |
bf7ab1e7 | 182 | return icon(idx); |
0a9064fb | 183 | } |
bf7ab1e7 | 184 | // TODO: Implement paintCell |
0a9064fb MY |
185 | |
186 | ConfigItem* nextItem; | |
187 | struct menu *menu; | |
188 | bool visible; | |
189 | bool goParent; | |
190 | }; | |
191 | ||
192 | class ConfigLineEdit : public QLineEdit { | |
193 | Q_OBJECT | |
194 | typedef class QLineEdit Parent; | |
195 | public: | |
196 | ConfigLineEdit(ConfigView* parent); | |
197 | ConfigView* parent(void) const | |
198 | { | |
199 | return (ConfigView*)Parent::parent(); | |
200 | } | |
201 | void show(ConfigItem *i); | |
202 | void keyPressEvent(QKeyEvent *e); | |
203 | ||
204 | public: | |
205 | ConfigItem *item; | |
206 | }; | |
207 | ||
bf7ab1e7 | 208 | class ConfigView : public QWidget { |
0a9064fb | 209 | Q_OBJECT |
bf7ab1e7 | 210 | typedef class QWidget Parent; |
0a9064fb MY |
211 | public: |
212 | ConfigView(QWidget* parent, const char *name = 0); | |
213 | ~ConfigView(void); | |
214 | static void updateList(ConfigItem* item); | |
215 | static void updateListAll(void); | |
216 | ||
217 | bool showName(void) const { return list->showName; } | |
218 | bool showRange(void) const { return list->showRange; } | |
219 | bool showData(void) const { return list->showData; } | |
220 | public slots: | |
221 | void setShowName(bool); | |
222 | void setShowRange(bool); | |
223 | void setShowData(bool); | |
224 | void setOptionMode(QAction *); | |
225 | signals: | |
226 | void showNameChanged(bool); | |
227 | void showRangeChanged(bool); | |
228 | void showDataChanged(bool); | |
229 | public: | |
230 | ConfigList* list; | |
231 | ConfigLineEdit* lineEdit; | |
232 | ||
233 | static ConfigView* viewList; | |
234 | ConfigView* nextView; | |
235 | ||
236 | static QAction *showNormalAction; | |
237 | static QAction *showAllAction; | |
238 | static QAction *showPromptAction; | |
239 | }; | |
240 | ||
bf7ab1e7 | 241 | class ConfigInfoView : public QTextBrowser { |
0a9064fb | 242 | Q_OBJECT |
bf7ab1e7 | 243 | typedef class QTextBrowser Parent; |
0a9064fb MY |
244 | public: |
245 | ConfigInfoView(QWidget* parent, const char *name = 0); | |
246 | bool showDebug(void) const { return _showDebug; } | |
247 | ||
248 | public slots: | |
249 | void setInfo(struct menu *menu); | |
250 | void saveSettings(void); | |
251 | void setShowDebug(bool); | |
252 | ||
253 | signals: | |
254 | void showDebugChanged(bool); | |
255 | void menuSelected(struct menu *); | |
256 | ||
257 | protected: | |
258 | void symbolInfo(void); | |
259 | void menuInfo(void); | |
260 | QString debug_info(struct symbol *sym); | |
261 | static QString print_filter(const QString &str); | |
262 | static void expr_print_help(void *data, struct symbol *sym, const char *str); | |
bf7ab1e7 MY |
263 | QMenu *createStandardContextMenu(const QPoint & pos); |
264 | void contextMenuEvent(QContextMenuEvent *e); | |
0a9064fb MY |
265 | |
266 | struct symbol *sym; | |
267 | struct menu *_menu; | |
268 | bool _showDebug; | |
269 | }; | |
270 | ||
271 | class ConfigSearchWindow : public QDialog { | |
272 | Q_OBJECT | |
273 | typedef class QDialog Parent; | |
274 | public: | |
275 | ConfigSearchWindow(ConfigMainWindow* parent, const char *name = 0); | |
276 | ||
277 | public slots: | |
278 | void saveSettings(void); | |
279 | void search(void); | |
280 | ||
281 | protected: | |
282 | QLineEdit* editField; | |
283 | QPushButton* searchButton; | |
284 | QSplitter* split; | |
285 | ConfigView* list; | |
286 | ConfigInfoView* info; | |
287 | ||
288 | struct symbol **result; | |
289 | }; | |
290 | ||
bf7ab1e7 | 291 | class ConfigMainWindow : public QMainWindow { |
0a9064fb MY |
292 | Q_OBJECT |
293 | ||
bf7ab1e7 | 294 | static QAction *saveAction; |
0a9064fb MY |
295 | static void conf_changed(void); |
296 | public: | |
297 | ConfigMainWindow(void); | |
298 | public slots: | |
299 | void changeMenu(struct menu *); | |
300 | void setMenuLink(struct menu *); | |
301 | void listFocusChanged(void); | |
302 | void goBack(void); | |
303 | void loadConfig(void); | |
304 | bool saveConfig(void); | |
305 | void saveConfigAs(void); | |
306 | void searchConfig(void); | |
307 | void showSingleView(void); | |
308 | void showSplitView(void); | |
309 | void showFullView(void); | |
310 | void showIntro(void); | |
311 | void showAbout(void); | |
312 | void saveSettings(void); | |
313 | ||
314 | protected: | |
315 | void closeEvent(QCloseEvent *e); | |
316 | ||
317 | ConfigSearchWindow *searchWindow; | |
318 | ConfigView *menuView; | |
319 | ConfigList *menuList; | |
320 | ConfigView *configView; | |
321 | ConfigList *configList; | |
322 | ConfigInfoView *helpText; | |
bf7ab1e7 MY |
323 | QToolBar *toolBar; |
324 | QAction *backAction; | |
325 | QAction *singleViewAction; | |
326 | QAction *splitViewAction; | |
327 | QAction *fullViewAction; | |
328 | QSplitter *split1; | |
329 | QSplitter *split2; | |
0a9064fb | 330 | }; |