xconfig: add support to show hidden options which have prompts
Li Zefan [Mon, 10 May 2010 08:33:41 +0000 (16:33 +0800)]
This feature has been supported in menuconfig and gconfig, so
here add it to xconfig.

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Signed-off-by: Michal Marek <mmarek@suse.cz>

scripts/kconfig/qconf.cc
scripts/kconfig/qconf.h

index 5e01af2..820df2d 100644 (file)
@@ -148,7 +148,7 @@ void ConfigItem::updateMenu(void)
        case S_TRISTATE:
                char ch;
 
-               if (!sym_is_changable(sym) && !list->showAll) {
+               if (!sym_is_changable(sym) && list->optMode == normalOpt) {
                        setPixmap(promptColIdx, 0);
                        setText(noColIdx, QString::null);
                        setText(modColIdx, QString::null);
@@ -319,7 +319,7 @@ ConfigList::ConfigList(ConfigView* p, const char *name)
          symbolYesPix(xpm_symbol_yes), symbolModPix(xpm_symbol_mod), symbolNoPix(xpm_symbol_no),
          choiceYesPix(xpm_choice_yes), choiceNoPix(xpm_choice_no),
          menuPix(xpm_menu), menuInvPix(xpm_menu_inv), menuBackPix(xpm_menuback), voidPix(xpm_void),
-         showAll(false), showName(false), showRange(false), showData(false),
+         showName(false), showRange(false), showData(false), optMode(normalOpt),
          rootEntry(0), headerPopup(0)
 {
        int i;
@@ -336,10 +336,10 @@ ConfigList::ConfigList(ConfigView* p, const char *name)
 
        if (name) {
                configSettings->beginGroup(name);
-               showAll = configSettings->readBoolEntry("/showAll", false);
                showName = configSettings->readBoolEntry("/showName", false);
                showRange = configSettings->readBoolEntry("/showRange", false);
                showData = configSettings->readBoolEntry("/showData", false);
+               optMode = (enum optionMode)configSettings->readNumEntry("/optionMode", false);
                configSettings->endGroup();
                connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings()));
        }
@@ -351,6 +351,17 @@ ConfigList::ConfigList(ConfigView* p, const char *name)
        reinit();
 }
 
+bool ConfigList::menuSkip(struct menu *menu)
+{
+       if (optMode == normalOpt && menu_is_visible(menu))
+               return false;
+       if (optMode == promptOpt && menu_has_prompt(menu))
+               return false;
+       if (optMode == allOpt)
+               return false;
+       return true;
+}
+
 void ConfigList::reinit(void)
 {
        removeColumn(dataColIdx);
@@ -379,7 +390,7 @@ void ConfigList::saveSettings(void)
                configSettings->writeEntry("/showName", showName);
                configSettings->writeEntry("/showRange", showRange);
                configSettings->writeEntry("/showData", showData);
-               configSettings->writeEntry("/showAll", showAll);
+               configSettings->writeEntry("/optionMode", (int)optMode);
                configSettings->endGroup();
        }
 }
@@ -605,7 +616,7 @@ void ConfigList::updateMenuList(P* parent, struct menu* menu)
                }
 
                visible = menu_is_visible(child);
-               if (showAll || visible) {
+               if (!menuSkip(child)) {
                        if (!child->sym && !child->list && !child->prompt)
                                continue;
                        if (!item || item->menu != child)
@@ -834,7 +845,10 @@ void ConfigList::contextMenuEvent(QContextMenuEvent *e)
                e->ignore();
 }
 
-ConfigView* ConfigView::viewList;
+ConfigView*ConfigView::viewList;
+QAction *ConfigView::showNormalAction;
+QAction *ConfigView::showAllAction;
+QAction *ConfigView::showPromptAction;
 
 ConfigView::ConfigView(QWidget* parent, const char *name)
        : Parent(parent, name)
@@ -859,13 +873,16 @@ ConfigView::~ConfigView(void)
        }
 }
 
-void ConfigView::setShowAll(bool b)
+void ConfigView::setOptionMode(QAction *act)
 {
-       if (list->showAll != b) {
-               list->showAll = b;
-               list->updateListAll();
-               emit showAllChanged(b);
-       }
+       if (act == showNormalAction)
+               list->optMode = normalOpt;
+       else if (act == showAllAction)
+               list->optMode = allOpt;
+       else
+               list->optMode = promptOpt;
+
+       list->updateListAll();
 }
 
 void ConfigView::setShowName(bool b)
@@ -1320,11 +1337,24 @@ ConfigMainWindow::ConfigMainWindow(void)
          connect(showDataAction, SIGNAL(toggled(bool)), configView, SLOT(setShowData(bool)));
          connect(configView, SIGNAL(showDataChanged(bool)), showDataAction, SLOT(setOn(bool)));
          showDataAction->setOn(configList->showData);
-       QAction *showAllAction = new QAction(NULL, _("Show All Options"), 0, this);
-         showAllAction->setToggleAction(TRUE);
-         connect(showAllAction, SIGNAL(toggled(bool)), configView, SLOT(setShowAll(bool)));
-         connect(showAllAction, SIGNAL(toggled(bool)), menuView, SLOT(setShowAll(bool)));
-         showAllAction->setOn(configList->showAll);
+
+       QActionGroup *optGroup = new QActionGroup(this);
+       optGroup->setExclusive(TRUE);
+       connect(optGroup, SIGNAL(selected(QAction *)), configView,
+               SLOT(setOptionMode(QAction *)));
+       connect(optGroup, SIGNAL(selected(QAction *)), menuView,
+               SLOT(setOptionMode(QAction *)));
+
+       configView->showNormalAction = new QAction(NULL, _("Show Normal Options"), 0, optGroup);
+       configView->showAllAction = new QAction(NULL, _("Show All Options"), 0, optGroup);
+       configView->showPromptAction = new QAction(NULL, _("Show Prompt Options"), 0, optGroup);
+       configView->showNormalAction->setToggleAction(TRUE);
+       configView->showNormalAction->setOn(configList->optMode == normalOpt);
+       configView->showAllAction->setToggleAction(TRUE);
+       configView->showAllAction->setOn(configList->optMode == allOpt);
+       configView->showPromptAction->setToggleAction(TRUE);
+       configView->showPromptAction->setOn(configList->optMode == promptOpt);
+
        QAction *showDebugAction = new QAction(NULL, _("Show Debug Info"), 0, this);
          showDebugAction->setToggleAction(TRUE);
          connect(showDebugAction, SIGNAL(toggled(bool)), helpText, SLOT(setShowDebug(bool)));
@@ -1367,7 +1397,8 @@ ConfigMainWindow::ConfigMainWindow(void)
        showRangeAction->addTo(optionMenu);
        showDataAction->addTo(optionMenu);
        optionMenu->insertSeparator();
-       showAllAction->addTo(optionMenu);
+       optGroup->addTo(optionMenu);
+       optionMenu->insertSeparator();
        showDebugAction->addTo(optionMenu);
 
        // create help menu
@@ -1462,7 +1493,7 @@ void ConfigMainWindow::setMenuLink(struct menu *menu)
        ConfigList* list = NULL;
        ConfigItem* item;
 
-       if (!menu_is_visible(menu) && !configView->showAll())
+       if (configList->menuSkip(menu))
                return;
 
        switch (configList->mode) {
index 54775ae..636a74b 100644 (file)
@@ -44,6 +44,9 @@ enum colIdx {
 enum listMode {
        singleMode, menuMode, symbolMode, fullMode, listMode
 };
+enum optionMode {
+       normalOpt = 0, allOpt, promptOpt
+};
 
 class ConfigList : public QListView {
        Q_OBJECT
@@ -115,6 +118,8 @@ public:
        void setAllOpen(bool open);
        void setParentMenu(void);
 
+       bool menuSkip(struct menu *);
+
        template <class P>
        void updateMenuList(P*, struct menu*);
 
@@ -124,8 +129,9 @@ public:
        QPixmap choiceYesPix, choiceNoPix;
        QPixmap menuPix, menuInvPix, menuBackPix, voidPix;
 
-       bool showAll, showName, showRange, showData;
+       bool showName, showRange, showData;
        enum listMode mode;
+       enum optionMode optMode;
        struct menu *rootEntry;
        QColorGroup disabledColorGroup;
        QColorGroup inactivedColorGroup;
@@ -222,17 +228,15 @@ public:
        static void updateList(ConfigItem* item);
        static void updateListAll(void);
 
-       bool showAll(void) const { return list->showAll; }
        bool showName(void) const { return list->showName; }
        bool showRange(void) const { return list->showRange; }
        bool showData(void) const { return list->showData; }
 public slots:
-       void setShowAll(bool);
        void setShowName(bool);
        void setShowRange(bool);
        void setShowData(bool);
+       void setOptionMode(QAction *);
 signals:
-       void showAllChanged(bool);
        void showNameChanged(bool);
        void showRangeChanged(bool);
        void showDataChanged(bool);
@@ -242,6 +246,10 @@ public:
 
        static ConfigView* viewList;
        ConfigView* nextView;
+
+       static QAction *showNormalAction;
+       static QAction *showAllAction;
+       static QAction *showPromptAction;
 };
 
 class ConfigInfoView : public QTextBrowser {