qconf.h 7.2 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5
/*
 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
 * Released under the terms of the GNU GPL v2.0.
 */

A
Alexander Stein 已提交
6 7 8
#include <q3listview.h>
#include <qsettings.h>

9
class ConfigView;
L
Linus Torvalds 已提交
10 11 12 13 14 15 16
class ConfigList;
class ConfigItem;
class ConfigLineEdit;
class ConfigMainWindow;

class ConfigSettings : public QSettings {
public:
17
	ConfigSettings();
A
Alexander Stein 已提交
18 19
	Q3ValueList<int> readSizes(const QString& key, bool *ok);
	bool writeSizes(const QString& key, const Q3ValueList<int>& value);
L
Linus Torvalds 已提交
20 21 22 23 24 25
};

enum colIdx {
	promptColIdx, nameColIdx, noColIdx, modColIdx, yesColIdx, dataColIdx, colNr
};
enum listMode {
26
	singleMode, menuMode, symbolMode, fullMode, listMode
L
Linus Torvalds 已提交
27
};
28 29 30
enum optionMode {
	normalOpt = 0, allOpt, promptOpt
};
L
Linus Torvalds 已提交
31

A
Alexander Stein 已提交
32
class ConfigList : public Q3ListView {
L
Linus Torvalds 已提交
33
	Q_OBJECT
A
Alexander Stein 已提交
34
	typedef class Q3ListView Parent;
L
Linus Torvalds 已提交
35
public:
36
	ConfigList(ConfigView* p, const char *name = 0);
L
Linus Torvalds 已提交
37 38 39 40 41
	void reinit(void);
	ConfigView* parent(void) const
	{
		return (ConfigView*)Parent::parent();
	}
42
	ConfigItem* findConfigItem(struct menu *);
L
Linus Torvalds 已提交
43 44 45 46 47 48 49 50

protected:
	void keyPressEvent(QKeyEvent *e);
	void contentsMousePressEvent(QMouseEvent *e);
	void contentsMouseReleaseEvent(QMouseEvent *e);
	void contentsMouseMoveEvent(QMouseEvent *e);
	void contentsMouseDoubleClickEvent(QMouseEvent *e);
	void focusInEvent(QFocusEvent *e);
51 52
	void contextMenuEvent(QContextMenuEvent *e);

L
Linus Torvalds 已提交
53 54 55 56 57 58 59
public slots:
	void setRootMenu(struct menu *menu);

	void updateList(ConfigItem *item);
	void setValue(ConfigItem* item, tristate val);
	void changeValue(ConfigItem* item);
	void updateSelection(void);
60
	void saveSettings(void);
L
Linus Torvalds 已提交
61
signals:
62
	void menuChanged(struct menu *menu);
L
Linus Torvalds 已提交
63 64
	void menuSelected(struct menu *menu);
	void parentSelected(void);
65
	void gotFocus(struct menu *);
L
Linus Torvalds 已提交
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

public:
	void updateListAll(void)
	{
		updateAll = true;
		updateList(NULL);
		updateAll = false;
	}
	ConfigList* listView()
	{
		return this;
	}
	ConfigItem* firstChild() const
	{
		return (ConfigItem *)Parent::firstChild();
	}
	int mapIdx(colIdx idx)
	{
		return colMap[idx];
	}
	void addColumn(colIdx idx, const QString& label)
	{
		colMap[idx] = Parent::addColumn(label);
		colRevMap[colMap[idx]] = idx;
	}
	void removeColumn(colIdx idx)
	{
		int col = colMap[idx];
		if (col >= 0) {
			Parent::removeColumn(col);
			colRevMap[col] = colMap[idx] = -1;
		}
	}
	void setAllOpen(bool open);
	void setParentMenu(void);

102 103
	bool menuSkip(struct menu *);

L
Linus Torvalds 已提交
104
	template <class P>
105
	void updateMenuList(P*, struct menu*);
L
Linus Torvalds 已提交
106 107 108 109 110 111 112

	bool updateAll;

	QPixmap symbolYesPix, symbolModPix, symbolNoPix;
	QPixmap choiceYesPix, choiceNoPix;
	QPixmap menuPix, menuInvPix, menuBackPix, voidPix;

113
	bool showName, showRange, showData;
L
Linus Torvalds 已提交
114
	enum listMode mode;
115
	enum optionMode optMode;
L
Linus Torvalds 已提交
116 117 118
	struct menu *rootEntry;
	QColorGroup disabledColorGroup;
	QColorGroup inactivedColorGroup;
A
Alexander Stein 已提交
119
	Q3PopupMenu* headerPopup;
L
Linus Torvalds 已提交
120 121 122 123 124 125

private:
	int colMap[colNr];
	int colRevMap[colNr];
};

A
Alexander Stein 已提交
126 127
class ConfigItem : public Q3ListViewItem {
	typedef class Q3ListViewItem Parent;
L
Linus Torvalds 已提交
128
public:
A
Alexander Stein 已提交
129
	ConfigItem(Q3ListView *parent, ConfigItem *after, struct menu *m, bool v)
L
Linus Torvalds 已提交
130 131 132 133 134 135 136 137 138
	: Parent(parent, after), menu(m), visible(v), goParent(false)
	{
		init();
	}
	ConfigItem(ConfigItem *parent, ConfigItem *after, struct menu *m, bool v)
	: Parent(parent, after), menu(m), visible(v), goParent(false)
	{
		init();
	}
A
Alexander Stein 已提交
139
	ConfigItem(Q3ListView *parent, ConfigItem *after, bool v)
L
Linus Torvalds 已提交
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
	: Parent(parent, after), menu(0), visible(v), goParent(true)
	{
		init();
	}
	~ConfigItem(void);
	void init(void);
	void okRename(int col);
	void updateMenu(void);
	void testUpdateMenu(bool v);
	ConfigList* listView() const
	{
		return (ConfigList*)Parent::listView();
	}
	ConfigItem* firstChild() const
	{
		return (ConfigItem *)Parent::firstChild();
	}
	ConfigItem* nextSibling() const
	{
		return (ConfigItem *)Parent::nextSibling();
	}
	void setText(colIdx idx, const QString& text)
	{
		Parent::setText(listView()->mapIdx(idx), text);
	}
	QString text(colIdx idx) const
	{
		return Parent::text(listView()->mapIdx(idx));
	}
	void setPixmap(colIdx idx, const QPixmap& pm)
	{
		Parent::setPixmap(listView()->mapIdx(idx), pm);
	}
	const QPixmap* pixmap(colIdx idx) const
	{
		return Parent::pixmap(listView()->mapIdx(idx));
	}
	void paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align);

	ConfigItem* nextItem;
	struct menu *menu;
	bool visible;
	bool goParent;
};

class ConfigLineEdit : public QLineEdit {
	Q_OBJECT
	typedef class QLineEdit Parent;
public:
189
	ConfigLineEdit(ConfigView* parent);
L
Linus Torvalds 已提交
190 191 192 193 194 195 196 197 198 199 200
	ConfigView* parent(void) const
	{
		return (ConfigView*)Parent::parent();
	}
	void show(ConfigItem *i);
	void keyPressEvent(QKeyEvent *e);

public:
	ConfigItem *item;
};

A
Alexander Stein 已提交
201
class ConfigView : public Q3VBox {
202
	Q_OBJECT
A
Alexander Stein 已提交
203
	typedef class Q3VBox Parent;
204 205 206 207 208 209 210 211 212 213 214 215 216
public:
	ConfigView(QWidget* parent, const char *name = 0);
	~ConfigView(void);
	static void updateList(ConfigItem* item);
	static void updateListAll(void);

	bool showName(void) const { return list->showName; }
	bool showRange(void) const { return list->showRange; }
	bool showData(void) const { return list->showData; }
public slots:
	void setShowName(bool);
	void setShowRange(bool);
	void setShowData(bool);
217
	void setOptionMode(QAction *);
218 219 220 221 222 223 224 225 226 227
signals:
	void showNameChanged(bool);
	void showRangeChanged(bool);
	void showDataChanged(bool);
public:
	ConfigList* list;
	ConfigLineEdit* lineEdit;

	static ConfigView* viewList;
	ConfigView* nextView;
228 229 230 231

	static QAction *showNormalAction;
	static QAction *showAllAction;
	static QAction *showPromptAction;
232 233
};

A
Alexander Stein 已提交
234
class ConfigInfoView : public Q3TextBrowser {
235
	Q_OBJECT
A
Alexander Stein 已提交
236
	typedef class Q3TextBrowser Parent;
237 238 239 240 241 242
public:
	ConfigInfoView(QWidget* parent, const char *name = 0);
	bool showDebug(void) const { return _showDebug; }

public slots:
	void setInfo(struct menu *menu);
243
	void saveSettings(void);
244 245 246 247
	void setShowDebug(bool);

signals:
	void showDebugChanged(bool);
248
	void menuSelected(struct menu *);
249 250

protected:
251
	void symbolInfo(void);
252 253 254
	void menuInfo(void);
	QString debug_info(struct symbol *sym);
	static QString print_filter(const QString &str);
255
	static void expr_print_help(void *data, struct symbol *sym, const char *str);
A
Alexander Stein 已提交
256
	Q3PopupMenu* createPopupMenu(const QPoint& pos);
257
	void contentsContextMenuEvent(QContextMenuEvent *e);
258

259
	struct symbol *sym;
A
Alexander Stein 已提交
260
	struct menu *_menu;
261 262 263 264 265 266 267
	bool _showDebug;
};

class ConfigSearchWindow : public QDialog {
	Q_OBJECT
	typedef class QDialog Parent;
public:
268
	ConfigSearchWindow(ConfigMainWindow* parent, const char *name = 0);
269

270
public slots:
271
	void saveSettings(void);
272
	void search(void);
273

274 275 276
protected:
	QLineEdit* editField;
	QPushButton* searchButton;
277
	QSplitter* split;
278 279 280 281 282 283
	ConfigView* list;
	ConfigInfoView* info;

	struct symbol **result;
};

A
Alexander Stein 已提交
284
class ConfigMainWindow : public Q3MainWindow {
L
Linus Torvalds 已提交
285
	Q_OBJECT
286

A
Alexander Stein 已提交
287
	static Q3Action *saveAction;
288
	static void conf_changed(void);
L
Linus Torvalds 已提交
289 290 291 292
public:
	ConfigMainWindow(void);
public slots:
	void changeMenu(struct menu *);
293
	void setMenuLink(struct menu *);
L
Linus Torvalds 已提交
294 295 296
	void listFocusChanged(void);
	void goBack(void);
	void loadConfig(void);
297
	bool saveConfig(void);
L
Linus Torvalds 已提交
298
	void saveConfigAs(void);
299
	void searchConfig(void);
L
Linus Torvalds 已提交
300 301 302 303 304 305 306 307 308 309
	void showSingleView(void);
	void showSplitView(void);
	void showFullView(void);
	void showIntro(void);
	void showAbout(void);
	void saveSettings(void);

protected:
	void closeEvent(QCloseEvent *e);

310
	ConfigSearchWindow *searchWindow;
L
Linus Torvalds 已提交
311 312 313 314
	ConfigView *menuView;
	ConfigList *menuList;
	ConfigView *configView;
	ConfigList *configList;
315
	ConfigInfoView *helpText;
A
Alexander Stein 已提交
316 317
	Q3ToolBar *toolBar;
	Q3Action *backAction;
L
Linus Torvalds 已提交
318 319 320
	QSplitter* split1;
	QSplitter* split2;
};