1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* |
3 | * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> |
4 | */ |
5 | |
6 | #include <QCheckBox> |
7 | #include <QDialog> |
8 | #include <QHeaderView> |
9 | #include <QLineEdit> |
10 | #include <QMainWindow> |
11 | #include <QPushButton> |
12 | #include <QSettings> |
13 | #include <QSplitter> |
14 | #include <QStyledItemDelegate> |
15 | #include <QTextBrowser> |
16 | #include <QTreeWidget> |
17 | |
18 | #include "expr.h" |
19 | |
20 | class ConfigList; |
21 | class ConfigItem; |
22 | class ConfigMainWindow; |
23 | |
24 | class ConfigSettings : public QSettings { |
25 | public: |
26 | ConfigSettings(); |
27 | QList<int> readSizes(const QString& key, bool *ok); |
28 | bool writeSizes(const QString& key, const QList<int>& value); |
29 | }; |
30 | |
31 | enum colIdx { |
32 | promptColIdx, nameColIdx, dataColIdx |
33 | }; |
34 | enum listMode { |
35 | singleMode, , symbolMode, fullMode, listMode |
36 | }; |
37 | enum optionMode { |
38 | normalOpt = 0, allOpt, promptOpt |
39 | }; |
40 | |
41 | class ConfigList : public QTreeWidget { |
42 | Q_OBJECT |
43 | typedef class QTreeWidget Parent; |
44 | public: |
45 | ConfigList(QWidget *parent, const char *name = 0); |
46 | ~ConfigList(); |
47 | void reinit(void); |
48 | ConfigItem* (struct menu *); |
49 | void setSelected(QTreeWidgetItem *item, bool enable) { |
50 | for (int i = 0; i < selectedItems().size(); i++) |
51 | selectedItems().at(i)->setSelected(false); |
52 | |
53 | item->setSelected(enable); |
54 | } |
55 | |
56 | protected: |
57 | void keyPressEvent(QKeyEvent *e); |
58 | void mousePressEvent(QMouseEvent *e); |
59 | void mouseReleaseEvent(QMouseEvent *e); |
60 | void mouseMoveEvent(QMouseEvent *e); |
61 | void mouseDoubleClickEvent(QMouseEvent *e); |
62 | void focusInEvent(QFocusEvent *e); |
63 | void (QContextMenuEvent *e); |
64 | |
65 | public slots: |
66 | void setRootMenu(struct menu *menu); |
67 | |
68 | void updateList(); |
69 | void setValue(ConfigItem* item, tristate val); |
70 | void changeValue(ConfigItem* item); |
71 | void updateSelection(void); |
72 | void saveSettings(void); |
73 | void setOptionMode(QAction *action); |
74 | void setShowName(bool on); |
75 | |
76 | signals: |
77 | void menuChanged(struct menu *menu); |
78 | void (struct menu *); |
79 | void (struct menu *); |
80 | void parentSelected(void); |
81 | void (struct menu *); |
82 | void showNameChanged(bool on); |
83 | |
84 | public: |
85 | void updateListAll(void) |
86 | { |
87 | updateAll = true; |
88 | updateList(); |
89 | updateAll = false; |
90 | } |
91 | void setAllOpen(bool open); |
92 | void (void); |
93 | |
94 | bool (struct menu *); |
95 | |
96 | void (ConfigItem *parent, struct menu*); |
97 | void (struct menu *); |
98 | |
99 | bool updateAll; |
100 | |
101 | bool showName; |
102 | enum listMode mode; |
103 | enum optionMode optMode; |
104 | struct menu *rootEntry; |
105 | QPalette disabledColorGroup; |
106 | QPalette inactivedColorGroup; |
107 | QMenu* ; |
108 | |
109 | static QList<ConfigList *> allLists; |
110 | static void updateListForAll(); |
111 | static void updateListAllForAll(); |
112 | |
113 | static QAction *showNormalAction, *showAllAction, *showPromptAction; |
114 | }; |
115 | |
116 | class ConfigItem : public QTreeWidgetItem { |
117 | typedef class QTreeWidgetItem Parent; |
118 | public: |
119 | (ConfigList *parent, ConfigItem *after, struct menu *m, bool v) |
120 | : Parent(parent, after), nextItem(0), menu(m), visible(v), goParent(false) |
121 | { |
122 | init(); |
123 | } |
124 | (ConfigItem *parent, ConfigItem *after, struct menu *m, bool v) |
125 | : Parent(parent, after), nextItem(0), menu(m), visible(v), goParent(false) |
126 | { |
127 | init(); |
128 | } |
129 | ConfigItem(ConfigList *parent, ConfigItem *after, bool v) |
130 | : Parent(parent, after), nextItem(0), menu(0), visible(v), goParent(true) |
131 | { |
132 | init(); |
133 | } |
134 | ~ConfigItem(void); |
135 | void init(void); |
136 | void (void); |
137 | void (bool v); |
138 | ConfigList* listView() const |
139 | { |
140 | return (ConfigList*)Parent::treeWidget(); |
141 | } |
142 | ConfigItem* firstChild() const |
143 | { |
144 | return (ConfigItem *)Parent::child(0); |
145 | } |
146 | ConfigItem* nextSibling() |
147 | { |
148 | ConfigItem *ret = NULL; |
149 | ConfigItem *_parent = (ConfigItem *)parent(); |
150 | |
151 | if(_parent) { |
152 | ret = (ConfigItem *)_parent->child(_parent->indexOfChild(this)+1); |
153 | } else { |
154 | QTreeWidget *_treeWidget = treeWidget(); |
155 | ret = (ConfigItem *)_treeWidget->topLevelItem(_treeWidget->indexOfTopLevelItem(this)+1); |
156 | } |
157 | |
158 | return ret; |
159 | } |
160 | // TODO: Implement paintCell |
161 | |
162 | ConfigItem* nextItem; |
163 | struct menu *; |
164 | bool visible; |
165 | bool goParent; |
166 | |
167 | static QIcon symbolYesIcon, symbolModIcon, symbolNoIcon; |
168 | static QIcon choiceYesIcon, choiceNoIcon; |
169 | static QIcon , ; |
170 | }; |
171 | |
172 | class ConfigItemDelegate : public QStyledItemDelegate |
173 | { |
174 | private: |
175 | struct menu *; |
176 | public: |
177 | ConfigItemDelegate(QObject *parent = nullptr) |
178 | : QStyledItemDelegate(parent) {} |
179 | QWidget *createEditor(QWidget *parent, |
180 | const QStyleOptionViewItem &option, |
181 | const QModelIndex &index) const override; |
182 | void setModelData(QWidget *editor, QAbstractItemModel *model, |
183 | const QModelIndex &index) const override; |
184 | }; |
185 | |
186 | class ConfigInfoView : public QTextBrowser { |
187 | Q_OBJECT |
188 | typedef class QTextBrowser Parent; |
189 | QMenu *; |
190 | public: |
191 | ConfigInfoView(QWidget* parent, const char *name = 0); |
192 | bool showDebug(void) const { return _showDebug; } |
193 | |
194 | public slots: |
195 | void setInfo(struct menu *menu); |
196 | void saveSettings(void); |
197 | void setShowDebug(bool); |
198 | void clicked (const QUrl &url); |
199 | |
200 | signals: |
201 | void showDebugChanged(bool); |
202 | void (struct menu *); |
203 | |
204 | protected: |
205 | void symbolInfo(void); |
206 | void (void); |
207 | QString debug_info(struct symbol *sym); |
208 | static QString print_filter(const QString &str); |
209 | static void expr_print_help(void *data, struct symbol *sym, const char *str); |
210 | void (QContextMenuEvent *event); |
211 | |
212 | struct symbol *sym; |
213 | struct menu *; |
214 | bool _showDebug; |
215 | }; |
216 | |
217 | class ConfigSearchWindow : public QDialog { |
218 | Q_OBJECT |
219 | typedef class QDialog Parent; |
220 | public: |
221 | ConfigSearchWindow(ConfigMainWindow *parent); |
222 | |
223 | public slots: |
224 | void saveSettings(void); |
225 | void search(void); |
226 | |
227 | protected: |
228 | QLineEdit* editField; |
229 | QPushButton* searchButton; |
230 | QSplitter* split; |
231 | ConfigList *list; |
232 | ConfigInfoView* info; |
233 | |
234 | struct symbol **result; |
235 | }; |
236 | |
237 | class ConfigMainWindow : public QMainWindow { |
238 | Q_OBJECT |
239 | |
240 | char *configname; |
241 | static QAction *saveAction; |
242 | static void conf_changed(void); |
243 | public: |
244 | ConfigMainWindow(void); |
245 | public slots: |
246 | void changeMenu(struct menu *); |
247 | void changeItens(struct menu *); |
248 | void setMenuLink(struct menu *); |
249 | void listFocusChanged(void); |
250 | void goBack(void); |
251 | void loadConfig(void); |
252 | bool saveConfig(void); |
253 | void saveConfigAs(void); |
254 | void searchConfig(void); |
255 | void showSingleView(void); |
256 | void showSplitView(void); |
257 | void showFullView(void); |
258 | void showIntro(void); |
259 | void showAbout(void); |
260 | void saveSettings(void); |
261 | |
262 | protected: |
263 | void closeEvent(QCloseEvent *e); |
264 | |
265 | ConfigSearchWindow *searchWindow; |
266 | ConfigList *menuList; |
267 | ConfigList *configList; |
268 | ConfigInfoView *helpText; |
269 | QAction *backAction; |
270 | QAction *singleViewAction; |
271 | QAction *splitViewAction; |
272 | QAction *fullViewAction; |
273 | QSplitter *split1; |
274 | QSplitter *split2; |
275 | }; |
276 | |