Home | History | Annotate | Download | only in kconfig
      1 /*
      2  * Copyright (C) 2002 Roman Zippel <zippel (at) 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);
     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:
     78 	void updateListAll(void)
     79 	{
     80 		updateAll = true;
     81 		updateList(NULL);
     82 		updateAll = false;
     83 	}
     84 	ConfigList* listView()
     85 	{
     86 		return this;
     87 	}
     88 	ConfigItem* firstChild() const
     89 	{
     90 		return (ConfigItem *)children().first();
     91 	}
     92 	void addColumn(colIdx idx)
     93 	{
     94 		showColumn(idx);
     95 	}
     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:
    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 	}
    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 	}
    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);
    146 	ConfigList* listView() const
    147 	{
    148 		return (ConfigList*)Parent::treeWidget();
    149 	}
    150 	ConfigItem* firstChild() const
    151 	{
    152 		return (ConfigItem *)Parent::child(0);
    153 	}
    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 	}
    168 	void setText(colIdx idx, const QString& text)
    169 	{
    170 		Parent::setText(idx, text);
    171 	}
    172 	QString text(colIdx idx) const
    173 	{
    174 		return Parent::text(idx);
    175 	}
    176 	void setPixmap(colIdx idx, const QIcon &icon)
    177 	{
    178 		Parent::setIcon(idx, icon);
    179 	}
    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);
    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 
    217 	bool showName(void) const { return list->showName; }
    218 	bool showRange(void) const { return list->showRange; }
    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);
    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