qconf.h 7.7 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
#if QT_VERSION < 0x040000
L
Linus Torvalds 已提交
7 8
#include <qlistview.h>
#else
A
Alexander Stein 已提交
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#include <q3listview.h>
#endif
#include <qsettings.h>

#if QT_VERSION < 0x040000
#define Q3ValueList             QValueList
#define Q3PopupMenu             QPopupMenu
#define Q3ListView              QListView
#define Q3ListViewItem          QListViewItem
#define Q3VBox                  QVBox
#define Q3TextBrowser           QTextBrowser
#define Q3MainWindow            QMainWindow
#define Q3Action                QAction
#define Q3ToolBar               QToolBar
#define Q3ListViewItemIterator  QListViewItemIterator
#define Q3FileDialog            QFileDialog
L
Linus Torvalds 已提交
25 26
#endif

27
class ConfigView;
L
Linus Torvalds 已提交
28 29 30 31 32 33 34
class ConfigList;
class ConfigItem;
class ConfigLineEdit;
class ConfigMainWindow;

class ConfigSettings : public QSettings {
public:
A
Alexander Stein 已提交
35 36
	Q3ValueList<int> readSizes(const QString& key, bool *ok);
	bool writeSizes(const QString& key, const Q3ValueList<int>& value);
L
Linus Torvalds 已提交
37 38 39 40 41 42
};

enum colIdx {
	promptColIdx, nameColIdx, noColIdx, modColIdx, yesColIdx, dataColIdx, colNr
};
enum listMode {
43
	singleMode, menuMode, symbolMode, fullMode, listMode
L
Linus Torvalds 已提交
44
};
45 46 47
enum optionMode {
	normalOpt = 0, allOpt, promptOpt
};
L
Linus Torvalds 已提交
48

A
Alexander Stein 已提交
49
class ConfigList : public Q3ListView {
L
Linus Torvalds 已提交
50
	Q_OBJECT
A
Alexander Stein 已提交
51
	typedef class Q3ListView Parent;
L
Linus Torvalds 已提交
52
public:
53
	ConfigList(ConfigView* p, const char *name = 0);
L
Linus Torvalds 已提交
54 55 56 57 58
	void reinit(void);
	ConfigView* parent(void) const
	{
		return (ConfigView*)Parent::parent();
	}
59
	ConfigItem* findConfigItem(struct menu *);
L
Linus Torvalds 已提交
60 61 62 63 64 65 66 67

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);
68 69
	void contextMenuEvent(QContextMenuEvent *e);

L
Linus Torvalds 已提交
70 71 72 73 74 75 76
public slots:
	void setRootMenu(struct menu *menu);

	void updateList(ConfigItem *item);
	void setValue(ConfigItem* item, tristate val);
	void changeValue(ConfigItem* item);
	void updateSelection(void);
77
	void saveSettings(void);
L
Linus Torvalds 已提交
78
signals:
79
	void menuChanged(struct menu *menu);
L
Linus Torvalds 已提交
80 81
	void menuSelected(struct menu *menu);
	void parentSelected(void);
82
	void gotFocus(struct menu *);
L
Linus Torvalds 已提交
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118

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);

119 120
	bool menuSkip(struct menu *);

L
Linus Torvalds 已提交
121
	template <class P>
122
	void updateMenuList(P*, struct menu*);
L
Linus Torvalds 已提交
123 124 125 126 127 128 129

	bool updateAll;

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

130
	bool showName, showRange, showData;
L
Linus Torvalds 已提交
131
	enum listMode mode;
132
	enum optionMode optMode;
L
Linus Torvalds 已提交
133 134 135
	struct menu *rootEntry;
	QColorGroup disabledColorGroup;
	QColorGroup inactivedColorGroup;
A
Alexander Stein 已提交
136
	Q3PopupMenu* headerPopup;
L
Linus Torvalds 已提交
137 138 139 140 141 142

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

A
Alexander Stein 已提交
143 144
class ConfigItem : public Q3ListViewItem {
	typedef class Q3ListViewItem Parent;
L
Linus Torvalds 已提交
145
public:
A
Alexander Stein 已提交
146
	ConfigItem(Q3ListView *parent, ConfigItem *after, struct menu *m, bool v)
L
Linus Torvalds 已提交
147 148 149 150 151 152 153 154 155
	: 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 已提交
156
	ConfigItem(Q3ListView *parent, ConfigItem *after, bool v)
L
Linus Torvalds 已提交
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 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
	: 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:
206
	ConfigLineEdit(ConfigView* parent);
L
Linus Torvalds 已提交
207 208 209 210 211 212 213 214 215 216 217
	ConfigView* parent(void) const
	{
		return (ConfigView*)Parent::parent();
	}
	void show(ConfigItem *i);
	void keyPressEvent(QKeyEvent *e);

public:
	ConfigItem *item;
};

A
Alexander Stein 已提交
218
class ConfigView : public Q3VBox {
219
	Q_OBJECT
A
Alexander Stein 已提交
220
	typedef class Q3VBox Parent;
221 222 223 224 225 226 227 228 229 230 231 232 233
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);
234
	void setOptionMode(QAction *);
235 236 237 238 239 240 241 242 243 244
signals:
	void showNameChanged(bool);
	void showRangeChanged(bool);
	void showDataChanged(bool);
public:
	ConfigList* list;
	ConfigLineEdit* lineEdit;

	static ConfigView* viewList;
	ConfigView* nextView;
245 246 247 248

	static QAction *showNormalAction;
	static QAction *showAllAction;
	static QAction *showPromptAction;
249 250
};

A
Alexander Stein 已提交
251
class ConfigInfoView : public Q3TextBrowser {
252
	Q_OBJECT
A
Alexander Stein 已提交
253
	typedef class Q3TextBrowser Parent;
254 255 256 257 258 259
public:
	ConfigInfoView(QWidget* parent, const char *name = 0);
	bool showDebug(void) const { return _showDebug; }

public slots:
	void setInfo(struct menu *menu);
260
	void saveSettings(void);
261 262 263 264
	void setShowDebug(bool);

signals:
	void showDebugChanged(bool);
265
	void menuSelected(struct menu *);
266 267

protected:
268
	void symbolInfo(void);
269 270 271
	void menuInfo(void);
	QString debug_info(struct symbol *sym);
	static QString print_filter(const QString &str);
272
	static void expr_print_help(void *data, struct symbol *sym, const char *str);
A
Alexander Stein 已提交
273
	Q3PopupMenu* createPopupMenu(const QPoint& pos);
274
	void contentsContextMenuEvent(QContextMenuEvent *e);
275

276
	struct symbol *sym;
A
Alexander Stein 已提交
277
	struct menu *_menu;
278 279 280 281 282 283 284
	bool _showDebug;
};

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

287
public slots:
288
	void saveSettings(void);
289
	void search(void);
290

291 292 293
protected:
	QLineEdit* editField;
	QPushButton* searchButton;
294
	QSplitter* split;
295 296 297 298 299 300
	ConfigView* list;
	ConfigInfoView* info;

	struct symbol **result;
};

A
Alexander Stein 已提交
301
class ConfigMainWindow : public Q3MainWindow {
L
Linus Torvalds 已提交
302
	Q_OBJECT
303

A
Alexander Stein 已提交
304
	static Q3Action *saveAction;
305
	static void conf_changed(void);
L
Linus Torvalds 已提交
306 307 308 309
public:
	ConfigMainWindow(void);
public slots:
	void changeMenu(struct menu *);
310
	void setMenuLink(struct menu *);
L
Linus Torvalds 已提交
311 312 313 314 315
	void listFocusChanged(void);
	void goBack(void);
	void loadConfig(void);
	void saveConfig(void);
	void saveConfigAs(void);
316
	void searchConfig(void);
L
Linus Torvalds 已提交
317 318 319 320 321 322 323 324 325 326
	void showSingleView(void);
	void showSplitView(void);
	void showFullView(void);
	void showIntro(void);
	void showAbout(void);
	void saveSettings(void);

protected:
	void closeEvent(QCloseEvent *e);

327
	ConfigSearchWindow *searchWindow;
L
Linus Torvalds 已提交
328 329 330 331
	ConfigView *menuView;
	ConfigList *menuList;
	ConfigView *configView;
	ConfigList *configList;
332
	ConfigInfoView *helpText;
A
Alexander Stein 已提交
333 334
	Q3ToolBar *toolBar;
	Q3Action *backAction;
L
Linus Torvalds 已提交
335 336 337
	QSplitter* split1;
	QSplitter* split2;
};