xref: /linux/scripts/kconfig/qconf.h (revision d39d0ed196aa1685bb24771e92f78633c66ac9cb)
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 <qlistview.h>
7 #if QT_VERSION >= 300
8 #include <qsettings.h>
9 #else
10 class QSettings {
11 public:
12 	void beginGroup(const QString& group) { }
13 	void endGroup(void) { }
14 	bool readBoolEntry(const QString& key, bool def = FALSE, bool* ok = 0) const
15 	{ if (ok) *ok = FALSE; return def; }
16 	int readNumEntry(const QString& key, int def = 0, bool* ok = 0) const
17 	{ if (ok) *ok = FALSE; return def; }
18 	QString readEntry(const QString& key, const QString& def = QString::null, bool* ok = 0) const
19 	{ if (ok) *ok = FALSE; return def; }
20 	QStringList readListEntry(const QString& key, bool* ok = 0) const
21 	{ if (ok) *ok = FALSE; return QStringList(); }
22 	template <class t>
23 	bool writeEntry(const QString& key, t value)
24 	{ return TRUE; }
25 };
26 #endif
27 
28 class ConfigView;
29 class ConfigList;
30 class ConfigItem;
31 class ConfigLineEdit;
32 class ConfigMainWindow;
33 
34 
35 class ConfigSettings : public QSettings {
36 public:
37 	QValueList<int> readSizes(const QString& key, bool *ok);
38 	bool writeSizes(const QString& key, const QValueList<int>& value);
39 };
40 
41 enum colIdx {
42 	promptColIdx, nameColIdx, noColIdx, modColIdx, yesColIdx, dataColIdx, colNr
43 };
44 enum listMode {
45 	singleMode, menuMode, symbolMode, fullMode, listMode
46 };
47 enum optionMode {
48 	normalOpt = 0, allOpt, promptOpt
49 };
50 
51 class ConfigList : public QListView {
52 	Q_OBJECT
53 	typedef class QListView Parent;
54 public:
55 	ConfigList(ConfigView* p, const char *name = 0);
56 	void reinit(void);
57 	ConfigView* parent(void) const
58 	{
59 		return (ConfigView*)Parent::parent();
60 	}
61 	ConfigItem* findConfigItem(struct menu *);
62 
63 protected:
64 	void keyPressEvent(QKeyEvent *e);
65 	void contentsMousePressEvent(QMouseEvent *e);
66 	void contentsMouseReleaseEvent(QMouseEvent *e);
67 	void contentsMouseMoveEvent(QMouseEvent *e);
68 	void contentsMouseDoubleClickEvent(QMouseEvent *e);
69 	void focusInEvent(QFocusEvent *e);
70 	void contextMenuEvent(QContextMenuEvent *e);
71 
72 public slots:
73 	void setRootMenu(struct menu *menu);
74 
75 	void updateList(ConfigItem *item);
76 	void setValue(ConfigItem* item, tristate val);
77 	void changeValue(ConfigItem* item);
78 	void updateSelection(void);
79 	void saveSettings(void);
80 signals:
81 	void menuChanged(struct menu *menu);
82 	void menuSelected(struct menu *menu);
83 	void parentSelected(void);
84 	void gotFocus(struct menu *);
85 
86 public:
87 	void updateListAll(void)
88 	{
89 		updateAll = true;
90 		updateList(NULL);
91 		updateAll = false;
92 	}
93 	ConfigList* listView()
94 	{
95 		return this;
96 	}
97 	ConfigItem* firstChild() const
98 	{
99 		return (ConfigItem *)Parent::firstChild();
100 	}
101 	int mapIdx(colIdx idx)
102 	{
103 		return colMap[idx];
104 	}
105 	void addColumn(colIdx idx, const QString& label)
106 	{
107 		colMap[idx] = Parent::addColumn(label);
108 		colRevMap[colMap[idx]] = idx;
109 	}
110 	void removeColumn(colIdx idx)
111 	{
112 		int col = colMap[idx];
113 		if (col >= 0) {
114 			Parent::removeColumn(col);
115 			colRevMap[col] = colMap[idx] = -1;
116 		}
117 	}
118 	void setAllOpen(bool open);
119 	void setParentMenu(void);
120 
121 	bool menuSkip(struct menu *);
122 
123 	template <class P>
124 	void updateMenuList(P*, struct menu*);
125 
126 	bool updateAll;
127 
128 	QPixmap symbolYesPix, symbolModPix, symbolNoPix;
129 	QPixmap choiceYesPix, choiceNoPix;
130 	QPixmap menuPix, menuInvPix, menuBackPix, voidPix;
131 
132 	bool showName, showRange, showData;
133 	enum listMode mode;
134 	enum optionMode optMode;
135 	struct menu *rootEntry;
136 	QColorGroup disabledColorGroup;
137 	QColorGroup inactivedColorGroup;
138 	QPopupMenu* headerPopup;
139 
140 private:
141 	int colMap[colNr];
142 	int colRevMap[colNr];
143 };
144 
145 class ConfigItem : public QListViewItem {
146 	typedef class QListViewItem Parent;
147 public:
148 	ConfigItem(QListView *parent, ConfigItem *after, struct menu *m, bool v)
149 	: Parent(parent, after), menu(m), visible(v), goParent(false)
150 	{
151 		init();
152 	}
153 	ConfigItem(ConfigItem *parent, ConfigItem *after, struct menu *m, bool v)
154 	: Parent(parent, after), menu(m), visible(v), goParent(false)
155 	{
156 		init();
157 	}
158 	ConfigItem(QListView *parent, ConfigItem *after, bool v)
159 	: Parent(parent, after), menu(0), visible(v), goParent(true)
160 	{
161 		init();
162 	}
163 	~ConfigItem(void);
164 	void init(void);
165 #if QT_VERSION >= 300
166 	void okRename(int col);
167 #endif
168 	void updateMenu(void);
169 	void testUpdateMenu(bool v);
170 	ConfigList* listView() const
171 	{
172 		return (ConfigList*)Parent::listView();
173 	}
174 	ConfigItem* firstChild() const
175 	{
176 		return (ConfigItem *)Parent::firstChild();
177 	}
178 	ConfigItem* nextSibling() const
179 	{
180 		return (ConfigItem *)Parent::nextSibling();
181 	}
182 	void setText(colIdx idx, const QString& text)
183 	{
184 		Parent::setText(listView()->mapIdx(idx), text);
185 	}
186 	QString text(colIdx idx) const
187 	{
188 		return Parent::text(listView()->mapIdx(idx));
189 	}
190 	void setPixmap(colIdx idx, const QPixmap& pm)
191 	{
192 		Parent::setPixmap(listView()->mapIdx(idx), pm);
193 	}
194 	const QPixmap* pixmap(colIdx idx) const
195 	{
196 		return Parent::pixmap(listView()->mapIdx(idx));
197 	}
198 	void paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align);
199 
200 	ConfigItem* nextItem;
201 	struct menu *menu;
202 	bool visible;
203 	bool goParent;
204 };
205 
206 class ConfigLineEdit : public QLineEdit {
207 	Q_OBJECT
208 	typedef class QLineEdit Parent;
209 public:
210 	ConfigLineEdit(ConfigView* parent);
211 	ConfigView* parent(void) const
212 	{
213 		return (ConfigView*)Parent::parent();
214 	}
215 	void show(ConfigItem *i);
216 	void keyPressEvent(QKeyEvent *e);
217 
218 public:
219 	ConfigItem *item;
220 };
221 
222 class ConfigView : public QVBox {
223 	Q_OBJECT
224 	typedef class QVBox Parent;
225 public:
226 	ConfigView(QWidget* parent, const char *name = 0);
227 	~ConfigView(void);
228 	static void updateList(ConfigItem* item);
229 	static void updateListAll(void);
230 
231 	bool showName(void) const { return list->showName; }
232 	bool showRange(void) const { return list->showRange; }
233 	bool showData(void) const { return list->showData; }
234 public slots:
235 	void setShowName(bool);
236 	void setShowRange(bool);
237 	void setShowData(bool);
238 	void setOptionMode(QAction *);
239 signals:
240 	void showNameChanged(bool);
241 	void showRangeChanged(bool);
242 	void showDataChanged(bool);
243 public:
244 	ConfigList* list;
245 	ConfigLineEdit* lineEdit;
246 
247 	static ConfigView* viewList;
248 	ConfigView* nextView;
249 
250 	static QAction *showNormalAction;
251 	static QAction *showAllAction;
252 	static QAction *showPromptAction;
253 };
254 
255 class ConfigInfoView : public QTextBrowser {
256 	Q_OBJECT
257 	typedef class QTextBrowser Parent;
258 public:
259 	ConfigInfoView(QWidget* parent, const char *name = 0);
260 	bool showDebug(void) const { return _showDebug; }
261 
262 public slots:
263 	void setInfo(struct menu *menu);
264 	void saveSettings(void);
265 	void setShowDebug(bool);
266 
267 signals:
268 	void showDebugChanged(bool);
269 	void menuSelected(struct menu *);
270 
271 protected:
272 	void symbolInfo(void);
273 	void menuInfo(void);
274 	QString debug_info(struct symbol *sym);
275 	static QString print_filter(const QString &str);
276 	static void expr_print_help(void *data, struct symbol *sym, const char *str);
277 	QPopupMenu* createPopupMenu(const QPoint& pos);
278 	void contentsContextMenuEvent(QContextMenuEvent *e);
279 
280 	struct symbol *sym;
281 	struct menu *menu;
282 	bool _showDebug;
283 };
284 
285 class ConfigSearchWindow : public QDialog {
286 	Q_OBJECT
287 	typedef class QDialog Parent;
288 public:
289 	ConfigSearchWindow(ConfigMainWindow* parent, const char *name = 0);
290 
291 public slots:
292 	void saveSettings(void);
293 	void search(void);
294 
295 protected:
296 	QLineEdit* editField;
297 	QPushButton* searchButton;
298 	QSplitter* split;
299 	ConfigView* list;
300 	ConfigInfoView* info;
301 
302 	struct symbol **result;
303 };
304 
305 class ConfigMainWindow : public QMainWindow {
306 	Q_OBJECT
307 
308 	static QAction *saveAction;
309 	static void conf_changed(void);
310 public:
311 	ConfigMainWindow(void);
312 public slots:
313 	void changeMenu(struct menu *);
314 	void setMenuLink(struct menu *);
315 	void listFocusChanged(void);
316 	void goBack(void);
317 	void loadConfig(void);
318 	void saveConfig(void);
319 	void saveConfigAs(void);
320 	void searchConfig(void);
321 	void showSingleView(void);
322 	void showSplitView(void);
323 	void showFullView(void);
324 	void showIntro(void);
325 	void showAbout(void);
326 	void saveSettings(void);
327 
328 protected:
329 	void closeEvent(QCloseEvent *e);
330 
331 	ConfigSearchWindow *searchWindow;
332 	ConfigView *menuView;
333 	ConfigList *menuList;
334 	ConfigView *configView;
335 	ConfigList *configList;
336 	ConfigInfoView *helpText;
337 	QToolBar *toolBar;
338 	QAction *backAction;
339 	QSplitter* split1;
340 	QSplitter* split2;
341 };
342