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