1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
10 #include <QMainWindow>
11 #include <QPushButton>
14 #include <QStyledItemDelegate>
15 #include <QTextBrowser>
16 #include <QTreeWidget>
22 class ConfigMainWindow
;
24 class ConfigSettings
: public QSettings
{
27 QList
<int> readSizes(const QString
& key
, bool *ok
);
28 bool writeSizes(const QString
& key
, const QList
<int>& value
);
32 promptColIdx
, nameColIdx
, dataColIdx
35 singleMode
, menuMode
, symbolMode
, fullMode
, listMode
38 normalOpt
= 0, allOpt
, promptOpt
41 class ConfigList
: public QTreeWidget
{
43 typedef class QTreeWidget Parent
;
45 ConfigList(QWidget
*parent
, const char *name
= NULL
);
48 ConfigItem
* findConfigItem(struct menu
*);
49 void setSelected(QTreeWidgetItem
*item
, bool enable
) {
50 for (int i
= 0; i
< selectedItems().size(); i
++)
51 selectedItems().at(i
)->setSelected(false);
53 item
->setSelected(enable
);
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 contextMenuEvent(QContextMenuEvent
*e
);
66 void setRootMenu(struct menu
*menu
);
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
);
77 void menuChanged(struct menu
*menu
);
78 void menuSelected(struct menu
*menu
);
79 void itemSelected(struct menu
*menu
);
80 void parentSelected(void);
81 void gotFocus(struct menu
*);
82 void showNameChanged(bool on
);
85 void updateListAll(void)
91 void setAllOpen(bool open
);
92 void setParentMenu(void);
94 bool menuSkip(struct menu
*);
96 void updateMenuList(ConfigItem
*parent
, struct menu
*);
97 void updateMenuList(struct menu
*menu
);
103 enum optionMode optMode
;
104 struct menu
*rootEntry
;
105 QPalette disabledColorGroup
;
106 QPalette inactivedColorGroup
;
109 static QList
<ConfigList
*> allLists
;
110 static void updateListForAll();
111 static void updateListAllForAll();
113 static QAction
*showNormalAction
, *showAllAction
, *showPromptAction
;
116 class ConfigItem
: public QTreeWidgetItem
{
117 typedef class QTreeWidgetItem Parent
;
119 ConfigItem(ConfigList
*parent
, ConfigItem
*after
, struct menu
*m
, bool v
)
120 : Parent(parent
, after
), nextItem(0), menu(m
), visible(v
), goParent(false)
124 ConfigItem(ConfigItem
*parent
, ConfigItem
*after
, struct menu
*m
, bool v
)
125 : Parent(parent
, after
), nextItem(0), menu(m
), visible(v
), goParent(false)
129 ConfigItem(ConfigList
*parent
, ConfigItem
*after
, bool v
)
130 : Parent(parent
, after
), nextItem(0), menu(0), visible(v
), goParent(true)
136 void updateMenu(void);
137 void testUpdateMenu(bool v
);
138 ConfigList
* listView() const
140 return (ConfigList
*)Parent::treeWidget();
142 ConfigItem
* firstChild() const
144 return (ConfigItem
*)Parent::child(0);
146 ConfigItem
* nextSibling()
148 ConfigItem
*ret
= NULL
;
149 ConfigItem
*_parent
= (ConfigItem
*)parent();
152 ret
= (ConfigItem
*)_parent
->child(_parent
->indexOfChild(this)+1);
154 QTreeWidget
*_treeWidget
= treeWidget();
155 ret
= (ConfigItem
*)_treeWidget
->topLevelItem(_treeWidget
->indexOfTopLevelItem(this)+1);
160 // TODO: Implement paintCell
162 ConfigItem
* nextItem
;
167 static QIcon symbolYesIcon
, symbolModIcon
, symbolNoIcon
;
168 static QIcon choiceYesIcon
, choiceNoIcon
;
169 static QIcon menuIcon
, menubackIcon
;
172 class ConfigItemDelegate
: public QStyledItemDelegate
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
;
186 class ConfigInfoView
: public QTextBrowser
{
188 typedef class QTextBrowser Parent
;
191 ConfigInfoView(QWidget
* parent
, const char *name
= NULL
);
192 bool showDebug(void) const { return _showDebug
; }
195 void setInfo(struct menu
*menu
);
196 void saveSettings(void);
197 void setShowDebug(bool);
198 void clicked (const QUrl
&url
);
201 void showDebugChanged(bool);
202 void menuSelected(struct menu
*);
205 void symbolInfo(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 contextMenuEvent(QContextMenuEvent
*event
);
217 class ConfigSearchWindow
: public QDialog
{
219 typedef class QDialog Parent
;
221 ConfigSearchWindow(ConfigMainWindow
*parent
);
224 void saveSettings(void);
228 QLineEdit
* editField
;
229 QPushButton
* searchButton
;
232 ConfigInfoView
* info
;
234 struct symbol
**result
;
237 class ConfigMainWindow
: public QMainWindow
{
241 static QAction
*saveAction
;
242 static void conf_changed(void);
244 ConfigMainWindow(void);
246 void changeMenu(struct menu
*);
247 void changeItens(struct menu
*);
248 void setMenuLink(struct menu
*);
249 void listFocusChanged(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);
263 void closeEvent(QCloseEvent
*e
);
265 ConfigSearchWindow
*searchWindow
;
266 ConfigList
*menuList
;
267 ConfigList
*configList
;
268 ConfigInfoView
*helpText
;
270 QAction
*singleViewAction
;
271 QAction
*splitViewAction
;
272 QAction
*fullViewAction
;