xref: /openbmc/linux/scripts/kconfig/qconf.h (revision cbecf716ca618fd44feda6bd9a64a8179d031fc5)
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