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