10c874100SMasahiro Yamada /* SPDX-License-Identifier: GPL-2.0 */ 21da177e4SLinus Torvalds /* 31da177e4SLinus Torvalds * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> 41da177e4SLinus Torvalds */ 51da177e4SLinus Torvalds 668ccb7efSBoris Barbulovski #include <QCheckBox> 768ccb7efSBoris Barbulovski #include <QDialog> 8cf81dfa4SMauro Carvalho Chehab #include <QHeaderView> 9cf81dfa4SMauro Carvalho Chehab #include <QLineEdit> 10cf81dfa4SMauro Carvalho Chehab #include <QMainWindow> 11cf81dfa4SMauro Carvalho Chehab #include <QPushButton> 12cf81dfa4SMauro Carvalho Chehab #include <QSettings> 13cf81dfa4SMauro Carvalho Chehab #include <QSplitter> 1437162a68SMasahiro Yamada #include <QStyledItemDelegate> 15cf81dfa4SMauro Carvalho Chehab #include <QTextBrowser> 16cf81dfa4SMauro Carvalho Chehab #include <QTreeWidget> 17cf81dfa4SMauro Carvalho Chehab 1868ccb7efSBoris Barbulovski #include "expr.h" 19133c5f7cSAlexander Stein 201019f1a5SBoris Barbulovski class ConfigList; 211019f1a5SBoris Barbulovski class ConfigItem; 221da177e4SLinus Torvalds class ConfigMainWindow; 231da177e4SLinus Torvalds 241da177e4SLinus Torvalds class ConfigSettings : public QSettings { 251da177e4SLinus Torvalds public: 2600d4f8fcSBen Hutchings ConfigSettings(); 27041fbdc2SBoris Barbulovski QList<int> readSizes(const QString& key, bool *ok); 28041fbdc2SBoris Barbulovski bool writeSizes(const QString& key, const QList<int>& value); 291da177e4SLinus Torvalds }; 301da177e4SLinus Torvalds 311da177e4SLinus Torvalds enum colIdx { 32*a0fce283SMasahiro Yamada promptColIdx, nameColIdx, dataColIdx 331da177e4SLinus Torvalds }; 341da177e4SLinus Torvalds enum listMode { 3543bf612aSRoman Zippel singleMode, menuMode, symbolMode, fullMode, listMode 361da177e4SLinus Torvalds }; 3739a4897cSLi Zefan enum optionMode { 3839a4897cSLi Zefan normalOpt = 0, allOpt, promptOpt 3939a4897cSLi Zefan }; 401da177e4SLinus Torvalds 411019f1a5SBoris Barbulovski class ConfigList : public QTreeWidget { 421019f1a5SBoris Barbulovski Q_OBJECT 431019f1a5SBoris Barbulovski typedef class QTreeWidget Parent; 441019f1a5SBoris Barbulovski public: 4562ed1656SMasahiro Yamada ConfigList(QWidget *parent, const char *name = 0); 46f9b918faSMasahiro Yamada ~ConfigList(); 4759e56440SBoris Barbulovski void reinit(void); 48b06c3ec3SMauro Carvalho Chehab ConfigItem* findConfigItem(struct menu *); setSelected(QTreeWidgetItem * item,bool enable)49b06c3ec3SMauro Carvalho Chehab void setSelected(QTreeWidgetItem *item, bool enable) { 50b06c3ec3SMauro Carvalho Chehab for (int i = 0; i < selectedItems().size(); i++) 51b06c3ec3SMauro Carvalho Chehab selectedItems().at(i)->setSelected(false); 52b06c3ec3SMauro Carvalho Chehab 53b06c3ec3SMauro Carvalho Chehab item->setSelected(enable); 54b06c3ec3SMauro Carvalho Chehab } 5559e56440SBoris Barbulovski 5659e56440SBoris Barbulovski protected: 5759e56440SBoris Barbulovski void keyPressEvent(QKeyEvent *e); 58d5d973c3SBoris Barbulovski void mousePressEvent(QMouseEvent *e); 59d5d973c3SBoris Barbulovski void mouseReleaseEvent(QMouseEvent *e); 60d5d973c3SBoris Barbulovski void mouseMoveEvent(QMouseEvent *e); 61d5d973c3SBoris Barbulovski void mouseDoubleClickEvent(QMouseEvent *e); 6259e56440SBoris Barbulovski void focusInEvent(QFocusEvent *e); 6359e56440SBoris Barbulovski void contextMenuEvent(QContextMenuEvent *e); 6459e56440SBoris Barbulovski 6559e56440SBoris Barbulovski public slots: 6659e56440SBoris Barbulovski void setRootMenu(struct menu *menu); 6759e56440SBoris Barbulovski 68cb77043fSMasahiro Yamada void updateList(); 6959e56440SBoris Barbulovski void setValue(ConfigItem* item, tristate val); 7059e56440SBoris Barbulovski void changeValue(ConfigItem* item); 7159e56440SBoris Barbulovski void updateSelection(void); 7259e56440SBoris Barbulovski void saveSettings(void); 73d4bbe8a1SMasahiro Yamada void setOptionMode(QAction *action); 747930dd91SMasahiro Yamada void setShowName(bool on); 75d4bbe8a1SMasahiro Yamada 7659e56440SBoris Barbulovski signals: 7759e56440SBoris Barbulovski void menuChanged(struct menu *menu); 7859e56440SBoris Barbulovski void menuSelected(struct menu *menu); 79b311142fSMauro Carvalho Chehab void itemSelected(struct menu *menu); 8059e56440SBoris Barbulovski void parentSelected(void); 8159e56440SBoris Barbulovski void gotFocus(struct menu *); 827930dd91SMasahiro Yamada void showNameChanged(bool on); 8359e56440SBoris Barbulovski 8459e56440SBoris Barbulovski public: updateListAll(void)8559e56440SBoris Barbulovski void updateListAll(void) 8659e56440SBoris Barbulovski { 8759e56440SBoris Barbulovski updateAll = true; 88cb77043fSMasahiro Yamada updateList(); 8959e56440SBoris Barbulovski updateAll = false; 9059e56440SBoris Barbulovski } 9159e56440SBoris Barbulovski void setAllOpen(bool open); 9259e56440SBoris Barbulovski void setParentMenu(void); 9359e56440SBoris Barbulovski 9459e56440SBoris Barbulovski bool menuSkip(struct menu *); 9559e56440SBoris Barbulovski 965c6f1554SBoris Barbulovski void updateMenuList(ConfigItem *parent, struct menu*); 975b75a6c8SMasahiro Yamada void updateMenuList(struct menu *menu); 9859e56440SBoris Barbulovski 9959e56440SBoris Barbulovski bool updateAll; 10059e56440SBoris Barbulovski 101*a0fce283SMasahiro Yamada bool showName; 10259e56440SBoris Barbulovski enum listMode mode; 10359e56440SBoris Barbulovski enum optionMode optMode; 10459e56440SBoris Barbulovski struct menu *rootEntry; 10559e56440SBoris Barbulovski QPalette disabledColorGroup; 10659e56440SBoris Barbulovski QPalette inactivedColorGroup; 10759e56440SBoris Barbulovski QMenu* headerPopup; 108d4bbe8a1SMasahiro Yamada 109f9b918faSMasahiro Yamada static QList<ConfigList *> allLists; 110f9b918faSMasahiro Yamada static void updateListForAll(); 111f9b918faSMasahiro Yamada static void updateListAllForAll(); 112f9b918faSMasahiro Yamada 113d4bbe8a1SMasahiro Yamada static QAction *showNormalAction, *showAllAction, *showPromptAction; 1141019f1a5SBoris Barbulovski }; 1151019f1a5SBoris Barbulovski 1161019f1a5SBoris Barbulovski class ConfigItem : public QTreeWidgetItem { 1171019f1a5SBoris Barbulovski typedef class QTreeWidgetItem Parent; 1181019f1a5SBoris Barbulovski public: ConfigItem(ConfigList * parent,ConfigItem * after,struct menu * m,bool v)119d960b988SBoris Barbulovski ConfigItem(ConfigList *parent, ConfigItem *after, struct menu *m, bool v) 12086c05282SBoris Barbulovski : Parent(parent, after), nextItem(0), menu(m), visible(v), goParent(false) 1211019f1a5SBoris Barbulovski { 1221019f1a5SBoris Barbulovski init(); 1231019f1a5SBoris Barbulovski } ConfigItem(ConfigItem * parent,ConfigItem * after,struct menu * m,bool v)1241019f1a5SBoris Barbulovski ConfigItem(ConfigItem *parent, ConfigItem *after, struct menu *m, bool v) 12586c05282SBoris Barbulovski : Parent(parent, after), nextItem(0), menu(m), visible(v), goParent(false) 1261019f1a5SBoris Barbulovski { 1271019f1a5SBoris Barbulovski init(); 1281019f1a5SBoris Barbulovski } ConfigItem(ConfigList * parent,ConfigItem * after,bool v)129d960b988SBoris Barbulovski ConfigItem(ConfigList *parent, ConfigItem *after, bool v) 13086c05282SBoris Barbulovski : Parent(parent, after), nextItem(0), menu(0), visible(v), goParent(true) 1311019f1a5SBoris Barbulovski { 1321019f1a5SBoris Barbulovski init(); 1331019f1a5SBoris Barbulovski } 1341019f1a5SBoris Barbulovski ~ConfigItem(void); 1351019f1a5SBoris Barbulovski void init(void); 13659e56440SBoris Barbulovski void updateMenu(void); 13759e56440SBoris Barbulovski void testUpdateMenu(bool v); listView()13859e56440SBoris Barbulovski ConfigList* listView() const 13959e56440SBoris Barbulovski { 14059e56440SBoris Barbulovski return (ConfigList*)Parent::treeWidget(); 14159e56440SBoris Barbulovski } firstChild()14259e56440SBoris Barbulovski ConfigItem* firstChild() const 14359e56440SBoris Barbulovski { 14459e56440SBoris Barbulovski return (ConfigItem *)Parent::child(0); 14559e56440SBoris Barbulovski } nextSibling()146d5d973c3SBoris Barbulovski ConfigItem* nextSibling() 14759e56440SBoris Barbulovski { 148d5d973c3SBoris Barbulovski ConfigItem *ret = NULL; 149d5d973c3SBoris Barbulovski ConfigItem *_parent = (ConfigItem *)parent(); 150d5d973c3SBoris Barbulovski 151d5d973c3SBoris Barbulovski if(_parent) { 152d5d973c3SBoris Barbulovski ret = (ConfigItem *)_parent->child(_parent->indexOfChild(this)+1); 153d5d973c3SBoris Barbulovski } else { 154d5d973c3SBoris Barbulovski QTreeWidget *_treeWidget = treeWidget(); 155d5d973c3SBoris Barbulovski ret = (ConfigItem *)_treeWidget->topLevelItem(_treeWidget->indexOfTopLevelItem(this)+1); 156d5d973c3SBoris Barbulovski } 157d5d973c3SBoris Barbulovski 158d5d973c3SBoris Barbulovski return ret; 15959e56440SBoris Barbulovski } 160d5d973c3SBoris Barbulovski // TODO: Implement paintCell 1611019f1a5SBoris Barbulovski 1621019f1a5SBoris Barbulovski ConfigItem* nextItem; 1631019f1a5SBoris Barbulovski struct menu *menu; 1641019f1a5SBoris Barbulovski bool visible; 1651019f1a5SBoris Barbulovski bool goParent; 1665cb255ffSMasahiro Yamada 1675cb255ffSMasahiro Yamada static QIcon symbolYesIcon, symbolModIcon, symbolNoIcon; 1685cb255ffSMasahiro Yamada static QIcon choiceYesIcon, choiceNoIcon; 1695cb255ffSMasahiro Yamada static QIcon menuIcon, menubackIcon; 1701019f1a5SBoris Barbulovski }; 1711019f1a5SBoris Barbulovski 17237162a68SMasahiro Yamada class ConfigItemDelegate : public QStyledItemDelegate 17337162a68SMasahiro Yamada { 17437162a68SMasahiro Yamada private: 17537162a68SMasahiro Yamada struct menu *menu; 17637162a68SMasahiro Yamada public: 17737162a68SMasahiro Yamada ConfigItemDelegate(QObject *parent = nullptr) QStyledItemDelegate(parent)17837162a68SMasahiro Yamada : QStyledItemDelegate(parent) {} 17937162a68SMasahiro Yamada QWidget *createEditor(QWidget *parent, 18037162a68SMasahiro Yamada const QStyleOptionViewItem &option, 18137162a68SMasahiro Yamada const QModelIndex &index) const override; 18237162a68SMasahiro Yamada void setModelData(QWidget *editor, QAbstractItemModel *model, 18337162a68SMasahiro Yamada const QModelIndex &index) const override; 18437162a68SMasahiro Yamada }; 18537162a68SMasahiro Yamada 186924bbb53SBoris Barbulovski class ConfigInfoView : public QTextBrowser { 18743bf612aSRoman Zippel Q_OBJECT 188924bbb53SBoris Barbulovski typedef class QTextBrowser Parent; 1897d1300e6SMasahiro Yamada QMenu *contextMenu; 19043bf612aSRoman Zippel public: 19143bf612aSRoman Zippel ConfigInfoView(QWidget* parent, const char *name = 0); showDebug(void)19243bf612aSRoman Zippel bool showDebug(void) const { return _showDebug; } 19343bf612aSRoman Zippel 19443bf612aSRoman Zippel public slots: 19543bf612aSRoman Zippel void setInfo(struct menu *menu); 1967fc925fdSRoman Zippel void saveSettings(void); 19743bf612aSRoman Zippel void setShowDebug(bool); 198c4f7398bSMauro Carvalho Chehab void clicked (const QUrl &url); 19943bf612aSRoman Zippel 20043bf612aSRoman Zippel signals: 20143bf612aSRoman Zippel void showDebugChanged(bool); 202b65a47e1SRoman Zippel void menuSelected(struct menu *); 20343bf612aSRoman Zippel 20443bf612aSRoman Zippel protected: 205ab45d190SRoman Zippel void symbolInfo(void); 20643bf612aSRoman Zippel void menuInfo(void); 20743bf612aSRoman Zippel QString debug_info(struct symbol *sym); 20843bf612aSRoman Zippel static QString print_filter(const QString &str); 209ab45d190SRoman Zippel static void expr_print_help(void *data, struct symbol *sym, const char *str); 2107d1300e6SMasahiro Yamada void contextMenuEvent(QContextMenuEvent *event); 21143bf612aSRoman Zippel 212ab45d190SRoman Zippel struct symbol *sym; 213133c5f7cSAlexander Stein struct menu *_menu; 21443bf612aSRoman Zippel bool _showDebug; 21543bf612aSRoman Zippel }; 21643bf612aSRoman Zippel 21743bf612aSRoman Zippel class ConfigSearchWindow : public QDialog { 21843bf612aSRoman Zippel Q_OBJECT 21943bf612aSRoman Zippel typedef class QDialog Parent; 22043bf612aSRoman Zippel public: 221740fdef8SMasahiro Yamada ConfigSearchWindow(ConfigMainWindow *parent); 2227fc925fdSRoman Zippel 22343bf612aSRoman Zippel public slots: 2247fc925fdSRoman Zippel void saveSettings(void); 22543bf612aSRoman Zippel void search(void); 2267fc925fdSRoman Zippel 22743bf612aSRoman Zippel protected: 22843bf612aSRoman Zippel QLineEdit* editField; 22943bf612aSRoman Zippel QPushButton* searchButton; 2307fc925fdSRoman Zippel QSplitter* split; 23162ed1656SMasahiro Yamada ConfigList *list; 23243bf612aSRoman Zippel ConfigInfoView* info; 23343bf612aSRoman Zippel 23443bf612aSRoman Zippel struct symbol **result; 23543bf612aSRoman Zippel }; 23643bf612aSRoman Zippel 237b1f8a45bSBoris Barbulovski class ConfigMainWindow : public QMainWindow { 2381da177e4SLinus Torvalds Q_OBJECT 2393b354c55SKarsten Wiese 2408741908bSMasahiro Yamada char *configname; 24185eaf28aSBoris Barbulovski static QAction *saveAction; 2423b354c55SKarsten Wiese static void conf_changed(void); 2431da177e4SLinus Torvalds public: 2441da177e4SLinus Torvalds ConfigMainWindow(void); 2451da177e4SLinus Torvalds public slots: 2461da177e4SLinus Torvalds void changeMenu(struct menu *); 247b311142fSMauro Carvalho Chehab void changeItens(struct menu *); 248b65a47e1SRoman Zippel void setMenuLink(struct menu *); 2491da177e4SLinus Torvalds void listFocusChanged(void); 2501da177e4SLinus Torvalds void goBack(void); 2511da177e4SLinus Torvalds void loadConfig(void); 252bac6aa86SMichal Marek bool saveConfig(void); 2531da177e4SLinus Torvalds void saveConfigAs(void); 25443bf612aSRoman Zippel void searchConfig(void); 2551da177e4SLinus Torvalds void showSingleView(void); 2561da177e4SLinus Torvalds void showSplitView(void); 2571da177e4SLinus Torvalds void showFullView(void); 2581da177e4SLinus Torvalds void showIntro(void); 2591da177e4SLinus Torvalds void showAbout(void); 2601da177e4SLinus Torvalds void saveSettings(void); 2611da177e4SLinus Torvalds 2621da177e4SLinus Torvalds protected: 2631da177e4SLinus Torvalds void closeEvent(QCloseEvent *e); 2641da177e4SLinus Torvalds 26543bf612aSRoman Zippel ConfigSearchWindow *searchWindow; 2661019f1a5SBoris Barbulovski ConfigList *menuList; 2671019f1a5SBoris Barbulovski ConfigList *configList; 26843bf612aSRoman Zippel ConfigInfoView *helpText; 26985eaf28aSBoris Barbulovski QAction *backAction; 270780505e3SBoris Barbulovski QAction *singleViewAction; 271780505e3SBoris Barbulovski QAction *splitViewAction; 272780505e3SBoris Barbulovski QAction *fullViewAction; 2731da177e4SLinus Torvalds QSplitter *split1; 2741da177e4SLinus Torvalds QSplitter *split2; 2751da177e4SLinus Torvalds }; 276