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