linux/scripts/kconfig/qconf.h
<<
>>
Prefs
   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
  27class ConfigView;
  28class ConfigList;
  29class ConfigItem;
  30class ConfigLineEdit;
  31class ConfigMainWindow;
  32
  33class ConfigSettings : public QSettings {
  34public:
  35        Q3ValueList<int> readSizes(const QString& key, bool *ok);
  36        bool writeSizes(const QString& key, const Q3ValueList<int>& value);
  37};
  38
  39enum colIdx {
  40        promptColIdx, nameColIdx, noColIdx, modColIdx, yesColIdx, dataColIdx, colNr
  41};
  42enum listMode {
  43        singleMode, menuMode, symbolMode, fullMode, listMode
  44};
  45enum optionMode {
  46        normalOpt = 0, allOpt, promptOpt
  47};
  48
  49class ConfigList : public Q3ListView {
  50        Q_OBJECT
  51        typedef class Q3ListView Parent;
  52public:
  53        ConfigList(ConfigView* p, const char *name = 0);
  54        void reinit(void);
  55        ConfigView* parent(void) const
  56        {
  57                return (ConfigView*)Parent::parent();
  58        }
  59        ConfigItem* findConfigItem(struct menu *);
  60
  61protected:
  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
  70public 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);
  78signals:
  79        void menuChanged(struct menu *menu);
  80        void menuSelected(struct menu *menu);
  81        void parentSelected(void);
  82        void gotFocus(struct menu *);
  83
  84public:
  85        void updateListAll(void)
  86        {
  87                updateAll = true;
  88                updateList(NULL);
  89                updateAll = false;
  90        }
  91        ConfigList* listView()
  92        {
  93                return this;
  94        }
  95        ConfigItem* firstChild() const
  96        {
  97                return (ConfigItem *)Parent::firstChild();
  98        }
  99        int mapIdx(colIdx idx)
 100        {
 101                return colMap[idx];
 102        }
 103        void addColumn(colIdx idx, const QString& label)
 104        {
 105                colMap[idx] = Parent::addColumn(label);
 106                colRevMap[colMap[idx]] = idx;
 107        }
 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
 138private:
 139        int colMap[colNr];
 140        int colRevMap[colNr];
 141};
 142
 143class ConfigItem : public Q3ListViewItem {
 144        typedef class Q3ListViewItem Parent;
 145public:
 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        }
 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        }
 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);
 166        ConfigList* listView() const
 167        {
 168                return (ConfigList*)Parent::listView();
 169        }
 170        ConfigItem* firstChild() const
 171        {
 172                return (ConfigItem *)Parent::firstChild();
 173        }
 174        ConfigItem* nextSibling() const
 175        {
 176                return (ConfigItem *)Parent::nextSibling();
 177        }
 178        void setText(colIdx idx, const QString& text)
 179        {
 180                Parent::setText(listView()->mapIdx(idx), text);
 181        }
 182        QString text(colIdx idx) const
 183        {
 184                return Parent::text(listView()->mapIdx(idx));
 185        }
 186        void setPixmap(colIdx idx, const QPixmap& pm)
 187        {
 188                Parent::setPixmap(listView()->mapIdx(idx), pm);
 189        }
 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
 202class ConfigLineEdit : public QLineEdit {
 203        Q_OBJECT
 204        typedef class QLineEdit Parent;
 205public:
 206        ConfigLineEdit(ConfigView* parent);
 207        ConfigView* parent(void) const
 208        {
 209                return (ConfigView*)Parent::parent();
 210        }
 211        void show(ConfigItem *i);
 212        void keyPressEvent(QKeyEvent *e);
 213
 214public:
 215        ConfigItem *item;
 216};
 217
 218class ConfigView : public Q3VBox {
 219        Q_OBJECT
 220        typedef class Q3VBox Parent;
 221public:
 222        ConfigView(QWidget* parent, const char *name = 0);
 223        ~ConfigView(void);
 224        static void updateList(ConfigItem* item);
 225        static void updateListAll(void);
 226
 227        bool showName(void) const { return list->showName; }
 228        bool showRange(void) const { return list->showRange; }
 229        bool showData(void) const { return list->showData; }
 230public slots:
 231        void setShowName(bool);
 232        void setShowRange(bool);
 233        void setShowData(bool);
 234        void setOptionMode(QAction *);
 235signals:
 236        void showNameChanged(bool);
 237        void showRangeChanged(bool);
 238        void showDataChanged(bool);
 239public:
 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
 251class ConfigInfoView : public Q3TextBrowser {
 252        Q_OBJECT
 253        typedef class Q3TextBrowser Parent;
 254public:
 255        ConfigInfoView(QWidget* parent, const char *name = 0);
 256        bool showDebug(void) const { return _showDebug; }
 257
 258public slots:
 259        void setInfo(struct menu *menu);
 260        void saveSettings(void);
 261        void setShowDebug(bool);
 262
 263signals:
 264        void showDebugChanged(bool);
 265        void menuSelected(struct menu *);
 266
 267protected:
 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
 281class ConfigSearchWindow : public QDialog {
 282        Q_OBJECT
 283        typedef class QDialog Parent;
 284public:
 285        ConfigSearchWindow(ConfigMainWindow* parent, const char *name = 0);
 286
 287public slots:
 288        void saveSettings(void);
 289        void search(void);
 290
 291protected:
 292        QLineEdit* editField;
 293        QPushButton* searchButton;
 294        QSplitter* split;
 295        ConfigView* list;
 296        ConfigInfoView* info;
 297
 298        struct symbol **result;
 299};
 300
 301class ConfigMainWindow : public Q3MainWindow {
 302        Q_OBJECT
 303
 304        static Q3Action *saveAction;
 305        static void conf_changed(void);
 306public:
 307        ConfigMainWindow(void);
 308public 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
 324protected:
 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