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