kconfig: finer customization via popup menus
This allows to configure every symbol list and info window separately via a
popup menu, these settings are also separately saved and restored. Cleanup
the ConfigSettings class a bit to reduce the number of #ifdef.
Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
diff --git a/scripts/kconfig/qconf.cc b/scripts/kconfig/qconf.cc
index 2befaea..f3f86e7 100644
--- a/scripts/kconfig/qconf.cc
+++ b/scripts/kconfig/qconf.cc
@@ -36,6 +36,7 @@
#endif
static QApplication *configApp;
+static ConfigSettings *configSettings;
static inline QString qgettext(const char* str)
{
@@ -47,23 +48,6 @@
return QString::fromLocal8Bit(gettext(str.latin1()));
}
-ConfigSettings::ConfigSettings()
- : showAll(false), showName(false), showRange(false), showData(false)
-{
-}
-
-#if QT_VERSION >= 300
-/**
- * Reads the list column settings from the application settings.
- */
-void ConfigSettings::readListSettings()
-{
- showAll = readBoolEntry("/kconfig/qconf/showAll", false);
- showName = readBoolEntry("/kconfig/qconf/showName", false);
- showRange = readBoolEntry("/kconfig/qconf/showRange", false);
- showData = readBoolEntry("/kconfig/qconf/showData", false);
-}
-
/**
* Reads a list of integer values from the application settings.
*/
@@ -92,77 +76,8 @@
stringList.push_back(QString::number(*it));
return writeEntry(key, stringList);
}
-#endif
-/*
- * update all the children of a menu entry
- * removes/adds the entries from the parent widget as necessary
- *
- * parent: either the menu list widget or a menu entry widget
- * menu: entry to be updated
- */
-template <class P>
-void ConfigList::updateMenuList(P* parent, struct menu* menu)
-{
- struct menu* child;
- ConfigItem* item;
- ConfigItem* last;
- bool visible;
- enum prop_type type;
-
- if (!menu) {
- while ((item = parent->firstChild()))
- delete item;
- return;
- }
-
- last = parent->firstChild();
- if (last && !last->goParent)
- last = 0;
- for (child = menu->list; child; child = child->next) {
- item = last ? last->nextSibling() : parent->firstChild();
- type = child->prompt ? child->prompt->type : P_UNKNOWN;
-
- switch (mode) {
- case menuMode:
- if (!(child->flags & MENU_ROOT))
- goto hide;
- break;
- case symbolMode:
- if (child->flags & MENU_ROOT)
- goto hide;
- break;
- default:
- break;
- }
-
- visible = menu_is_visible(child);
- if (showAll || visible) {
- if (!item || item->menu != child)
- item = new ConfigItem(parent, last, child, visible);
- else
- item->testUpdateMenu(visible);
-
- if (mode == fullMode || mode == menuMode || type != P_MENU)
- updateMenuList(item, child);
- else
- updateMenuList(item, 0);
- last = item;
- continue;
- }
- hide:
- if (item && item->menu == child) {
- last = parent->firstChild();
- if (last == item)
- last = 0;
- else while (last->nextSibling() != item)
- last = last->nextSibling();
- delete item;
- }
- }
-}
-
#if QT_VERSION >= 300
/*
* set the new data
@@ -395,14 +310,14 @@
hide();
}
-ConfigList::ConfigList(ConfigView* p, ConfigSettings* configSettings)
- : Parent(p),
+ConfigList::ConfigList(ConfigView* p, const char *name)
+ : Parent(p, name),
updateAll(false),
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),
- rootEntry(0)
+ rootEntry(0), headerPopup(0)
{
int i;
@@ -416,11 +331,14 @@
connect(this, SIGNAL(selectionChanged(void)),
SLOT(updateSelection(void)));
- if (configSettings) {
- showAll = configSettings->showAll;
- showName = configSettings->showName;
- showRange = configSettings->showRange;
- showData = configSettings->showData;
+ 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);
+ configSettings->endGroup();
+ connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings()));
}
for (i = 0; i < colNr; i++)
@@ -451,6 +369,18 @@
updateListAll();
}
+void ConfigList::saveSettings(void)
+{
+ if (name()) {
+ configSettings->beginGroup(name());
+ configSettings->writeEntry("/showName", showName);
+ configSettings->writeEntry("/showRange", showRange);
+ configSettings->writeEntry("/showData", showData);
+ configSettings->writeEntry("/showAll", showAll);
+ configSettings->endGroup();
+ }
+}
+
void ConfigList::updateSelection(void)
{
struct menu *menu;
@@ -512,14 +442,6 @@
triggerUpdate();
}
-void ConfigList::setAllOpen(bool open)
-{
- QListViewItemIterator it(this);
-
- for (; it.current(); it++)
- it.current()->setOpen(open);
-}
-
void ConfigList::setValue(ConfigItem* item, tristate val)
{
struct symbol* sym;
@@ -624,6 +546,74 @@
}
}
+/*
+ * update all the children of a menu entry
+ * removes/adds the entries from the parent widget as necessary
+ *
+ * parent: either the menu list widget or a menu entry widget
+ * menu: entry to be updated
+ */
+template <class P>
+void ConfigList::updateMenuList(P* parent, struct menu* menu)
+{
+ struct menu* child;
+ ConfigItem* item;
+ ConfigItem* last;
+ bool visible;
+ enum prop_type type;
+
+ if (!menu) {
+ while ((item = parent->firstChild()))
+ delete item;
+ return;
+ }
+
+ last = parent->firstChild();
+ if (last && !last->goParent)
+ last = 0;
+ for (child = menu->list; child; child = child->next) {
+ item = last ? last->nextSibling() : parent->firstChild();
+ type = child->prompt ? child->prompt->type : P_UNKNOWN;
+
+ switch (mode) {
+ case menuMode:
+ if (!(child->flags & MENU_ROOT))
+ goto hide;
+ break;
+ case symbolMode:
+ if (child->flags & MENU_ROOT)
+ goto hide;
+ break;
+ default:
+ break;
+ }
+
+ visible = menu_is_visible(child);
+ if (showAll || visible) {
+ if (!item || item->menu != child)
+ item = new ConfigItem(parent, last, child, visible);
+ else
+ item->testUpdateMenu(visible);
+
+ if (mode == fullMode || mode == menuMode || type != P_MENU)
+ updateMenuList(item, child);
+ else
+ updateMenuList(item, 0);
+ last = item;
+ continue;
+ }
+ hide:
+ if (item && item->menu == child) {
+ last = parent->firstChild();
+ if (last == item)
+ last = 0;
+ else while (last->nextSibling() != item)
+ last = last->nextSibling();
+ delete item;
+ }
+ }
+}
+
void ConfigList::keyPressEvent(QKeyEvent* ev)
{
QListViewItem* i = currentItem();
@@ -786,12 +776,50 @@
emit gotFocus();
}
+void ConfigList::contextMenuEvent(QContextMenuEvent *e)
+{
+ if (e->y() <= header()->geometry().bottom()) {
+ if (!headerPopup) {
+ QAction *action;
+
+ headerPopup = new QPopupMenu(this);
+ action = new QAction("Show Name", 0, this);
+ action->setToggleAction(TRUE);
+ connect(action, SIGNAL(toggled(bool)),
+ parent(), SLOT(setShowName(bool)));
+ connect(parent(), SIGNAL(showNameChanged(bool)),
+ action, SLOT(setOn(bool)));
+ action->setOn(showName);
+ action->addTo(headerPopup);
+ action = new QAction("Show Range", 0, this);
+ action->setToggleAction(TRUE);
+ connect(action, SIGNAL(toggled(bool)),
+ parent(), SLOT(setShowRange(bool)));
+ connect(parent(), SIGNAL(showRangeChanged(bool)),
+ action, SLOT(setOn(bool)));
+ action->setOn(showRange);
+ action->addTo(headerPopup);
+ action = new QAction("Show Data", 0, this);
+ action->setToggleAction(TRUE);
+ connect(action, SIGNAL(toggled(bool)),
+ parent(), SLOT(setShowData(bool)));
+ connect(parent(), SIGNAL(showDataChanged(bool)),
+ action, SLOT(setOn(bool)));
+ action->setOn(showData);
+ action->addTo(headerPopup);
+ }
+ headerPopup->exec(e->globalPos());
+ e->accept();
+ } else
+ e->ignore();
+}
+
ConfigView* ConfigView::viewList;
-ConfigView::ConfigView(QWidget* parent, ConfigSettings *configSettings)
- : Parent(parent)
+ConfigView::ConfigView(QWidget* parent, const char *name)
+ : Parent(parent, name)
{
- list = new ConfigList(this, configSettings);
+ list = new ConfigList(this, name);
lineEdit = new ConfigLineEdit(this);
lineEdit->hide();
@@ -811,6 +839,50 @@
}
}
+void ConfigView::setShowAll(bool b)
+{
+ if (list->showAll != b) {
+ list->showAll = b;
+ list->updateListAll();
+ emit showAllChanged(b);
+ }
+}
+
+void ConfigView::setShowName(bool b)
+{
+ if (list->showName != b) {
+ list->showName = b;
+ list->reinit();
+ emit showNameChanged(b);
+ }
+}
+
+void ConfigView::setShowRange(bool b)
+{
+ if (list->showRange != b) {
+ list->showRange = b;
+ list->reinit();
+ emit showRangeChanged(b);
+ }
+}
+
+void ConfigView::setShowData(bool b)
+{
+ if (list->showData != b) {
+ list->showData = b;
+ list->reinit();
+ emit showDataChanged(b);
+ }
+}
+
+void ConfigList::setAllOpen(bool open)
+{
+ QListViewItemIterator it(this);
+
+ for (; it.current(); it++)
+ it.current()->setOpen(open);
+}
+
void ConfigView::updateList(ConfigItem* item)
{
ConfigView* v;
@@ -830,6 +902,21 @@
ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name)
: Parent(parent, name), menu(0)
{
+ if (name) {
+ configSettings->beginGroup(name);
+ _showDebug = configSettings->readBoolEntry("/showDebug", false);
+ configSettings->endGroup();
+ connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings()));
+ }
+}
+
+void ConfigInfoView::saveSettings(void)
+{
+ if (name()) {
+ configSettings->beginGroup(name());
+ configSettings->writeEntry("/showDebug", showDebug());
+ configSettings->endGroup();
+ }
}
void ConfigInfoView::setShowDebug(bool b)
@@ -1006,8 +1093,26 @@
reinterpret_cast<QString*>(data)->append(print_filter(str));
}
-ConfigSearchWindow::ConfigSearchWindow(QWidget* parent)
- : Parent(parent), result(NULL)
+QPopupMenu* ConfigInfoView::createPopupMenu(const QPoint& pos)
+{
+ QPopupMenu* popup = Parent::createPopupMenu(pos);
+ QAction* action = new QAction("Show Debug Info", 0, popup);
+ action->setToggleAction(TRUE);
+ connect(action, SIGNAL(toggled(bool)), SLOT(setShowDebug(bool)));
+ connect(this, SIGNAL(showDebugChanged(bool)), action, SLOT(setOn(bool)));
+ action->setOn(showDebug());
+ popup->insertSeparator();
+ action->addTo(popup);
+ return popup;
+}
+
+void ConfigInfoView::contentsContextMenuEvent(QContextMenuEvent *e)
+{
+ Parent::contentsContextMenuEvent(e);
+}
+
+ConfigSearchWindow::ConfigSearchWindow(QWidget* parent, const char *name)
+ : Parent(parent, name), result(NULL)
{
setCaption("Search Config");
@@ -1023,14 +1128,47 @@
layout2->addWidget(searchButton);
layout1->addLayout(layout2);
- QSplitter* split = new QSplitter(this);
+ split = new QSplitter(this);
split->setOrientation(QSplitter::Vertical);
- list = new ConfigView(split, NULL);
+ list = new ConfigView(split, name);
list->list->mode = listMode;
- info = new ConfigInfoView(split);
+ info = new ConfigInfoView(split, name);
connect(list->list, SIGNAL(menuChanged(struct menu *)),
info, SLOT(setInfo(struct menu *)));
layout1->addWidget(split);
+
+ if (name) {
+ int x, y, width, height;
+ bool ok;
+
+ configSettings->beginGroup(name);
+ width = configSettings->readNumEntry("/window width", parent->width() / 2);
+ height = configSettings->readNumEntry("/window height", parent->height() / 2);
+ resize(width, height);
+ x = configSettings->readNumEntry("/window x", 0, &ok);
+ if (ok)
+ y = configSettings->readNumEntry("/window y", 0, &ok);
+ if (ok)
+ move(x, y);
+ QValueList<int> sizes = configSettings->readSizes("/split", &ok);
+ if (ok)
+ split->setSizes(sizes);
+ configSettings->endGroup();
+ connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings()));
+ }
+}
+
+void ConfigSearchWindow::saveSettings(void)
+{
+ if (name()) {
+ configSettings->beginGroup(name());
+ configSettings->writeEntry("/window x", pos().x());
+ configSettings->writeEntry("/window y", pos().y());
+ configSettings->writeEntry("/window width", size().width());
+ configSettings->writeEntry("/window height", size().height());
+ configSettings->writeSizes("/split", split->sizes());
+ configSettings->endGroup();
+ }
}
void ConfigSearchWindow::search(void)
@@ -1058,49 +1196,36 @@
ConfigMainWindow::ConfigMainWindow(void)
{
QMenuBar* menu;
- bool ok, showDebug;
+ bool ok;
int x, y, width, height;
QWidget *d = configApp->desktop();
- ConfigSettings* configSettings = new ConfigSettings();
-#if QT_VERSION >= 300
- width = configSettings->readNumEntry("/kconfig/qconf/window width", d->width() - 64);
- height = configSettings->readNumEntry("/kconfig/qconf/window height", d->height() - 64);
+ width = configSettings->readNumEntry("/window width", d->width() - 64);
+ height = configSettings->readNumEntry("/window height", d->height() - 64);
resize(width, height);
- x = configSettings->readNumEntry("/kconfig/qconf/window x", 0, &ok);
+ x = configSettings->readNumEntry("/window x", 0, &ok);
if (ok)
- y = configSettings->readNumEntry("/kconfig/qconf/window y", 0, &ok);
+ y = configSettings->readNumEntry("/window y", 0, &ok);
if (ok)
move(x, y);
- showDebug = configSettings->readBoolEntry("/kconfig/qconf/showDebug", false);
-
- // read list settings into configSettings, will be used later for ConfigList setup
- configSettings->readListSettings();
-#else
- width = d->width() - 64;
- height = d->height() - 64;
- resize(width, height);
- showDebug = false;
-#endif
split1 = new QSplitter(this);
split1->setOrientation(QSplitter::Horizontal);
setCentralWidget(split1);
- menuView = new ConfigView(split1, configSettings);
+ menuView = new ConfigView(split1, "menu");
menuList = menuView->list;
split2 = new QSplitter(split1);
split2->setOrientation(QSplitter::Vertical);
// create config tree
- configView = new ConfigView(split2, configSettings);
+ configView = new ConfigView(split2, "config");
configList = configView->list;
- helpText = new ConfigInfoView(split2);
+ helpText = new ConfigInfoView(split2, "help");
helpText->setTextFormat(Qt::RichText);
- helpText->setShowDebug(showDebug);
setTabOrder(configList, helpText);
configList->setFocus();
@@ -1130,25 +1255,29 @@
QAction *showNameAction = new QAction(NULL, "Show Name", 0, this);
showNameAction->setToggleAction(TRUE);
- showNameAction->setOn(configList->showName);
- connect(showNameAction, SIGNAL(toggled(bool)), SLOT(setShowName(bool)));
+ connect(showNameAction, SIGNAL(toggled(bool)), configView, SLOT(setShowName(bool)));
+ connect(configView, SIGNAL(showNameChanged(bool)), showNameAction, SLOT(setOn(bool)));
+ showNameAction->setOn(configView->showName());
QAction *showRangeAction = new QAction(NULL, "Show Range", 0, this);
showRangeAction->setToggleAction(TRUE);
+ connect(showRangeAction, SIGNAL(toggled(bool)), configView, SLOT(setShowRange(bool)));
+ connect(configView, SIGNAL(showRangeChanged(bool)), showRangeAction, SLOT(setOn(bool)));
showRangeAction->setOn(configList->showRange);
- connect(showRangeAction, SIGNAL(toggled(bool)), SLOT(setShowRange(bool)));
QAction *showDataAction = new QAction(NULL, "Show Data", 0, this);
showDataAction->setToggleAction(TRUE);
+ connect(showDataAction, SIGNAL(toggled(bool)), configView, SLOT(setShowData(bool)));
+ connect(configView, SIGNAL(showDataChanged(bool)), showDataAction, SLOT(setOn(bool)));
showDataAction->setOn(configList->showData);
- connect(showDataAction, SIGNAL(toggled(bool)), SLOT(setShowData(bool)));
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);
- connect(showAllAction, SIGNAL(toggled(bool)), SLOT(setShowAll(bool)));
QAction *showDebugAction = new QAction(NULL, "Show Debug Info", 0, this);
showDebugAction->setToggleAction(TRUE);
- showDebugAction->setOn(showDebug);
connect(showDebugAction, SIGNAL(toggled(bool)), helpText, SLOT(setShowDebug(bool)));
connect(helpText, SIGNAL(showDebugChanged(bool)), showDebugAction, SLOT(setOn(bool)));
+ showDebugAction->setOn(helpText->showDebug());
QAction *showIntroAction = new QAction(NULL, "Introduction", 0, this);
connect(showIntroAction, SIGNAL(activated()), SLOT(showIntro()));
@@ -1209,8 +1338,7 @@
connect(menuList, SIGNAL(gotFocus(void)),
SLOT(listFocusChanged(void)));
-#if QT_VERSION >= 300
- QString listMode = configSettings->readEntry("/kconfig/qconf/listMode", "symbol");
+ QString listMode = configSettings->readEntry("/listMode", "symbol");
if (listMode == "single")
showSingleView();
else if (listMode == "full")
@@ -1219,17 +1347,13 @@
showSplitView();
// UI setup done, restore splitter positions
- QValueList<int> sizes = configSettings->readSizes("/kconfig/qconf/split1", &ok);
+ QValueList<int> sizes = configSettings->readSizes("/split1", &ok);
if (ok)
split1->setSizes(sizes);
- sizes = configSettings->readSizes("/kconfig/qconf/split2", &ok);
+ sizes = configSettings->readSizes("/split2", &ok);
if (ok)
split2->setSizes(sizes);
-#else
- showSplitView();
-#endif
- delete configSettings;
}
/*
@@ -1237,7 +1361,6 @@
*/
void ConfigMainWindow::setHelp(QListViewItem* item)
{
- struct symbol* sym;
struct menu* menu = 0;
if (item)
@@ -1273,7 +1396,7 @@
void ConfigMainWindow::searchConfig(void)
{
if (!searchWindow)
- searchWindow = new ConfigSearchWindow(this);
+ searchWindow = new ConfigSearchWindow(this, "search");
searchWindow->show();
}
@@ -1353,46 +1476,6 @@
configList->setFocus();
}
-void ConfigMainWindow::setShowAll(bool b)
-{
- if (configList->showAll == b)
- return;
- configList->showAll = b;
- configList->updateListAll();
- menuList->showAll = b;
- menuList->updateListAll();
-}
-
-void ConfigMainWindow::setShowName(bool b)
-{
- if (configList->showName == b)
- return;
- configList->showName = b;
- configList->reinit();
- menuList->showName = b;
- menuList->reinit();
-}
-
-void ConfigMainWindow::setShowRange(bool b)
-{
- if (configList->showRange == b)
- return;
- configList->showRange = b;
- configList->reinit();
- menuList->showRange = b;
- menuList->reinit();
-}
-
-void ConfigMainWindow::setShowData(bool b)
-{
- if (configList->showData == b)
- return;
- configList->showData = b;
- configList->reinit();
- menuList->showData = b;
- menuList->reinit();
-}
-
/*
* ask for saving configuration before quitting
* TODO ask only when something changed
@@ -1447,17 +1530,10 @@
void ConfigMainWindow::saveSettings(void)
{
-#if QT_VERSION >= 300
- ConfigSettings *configSettings = new ConfigSettings;
- configSettings->writeEntry("/kconfig/qconf/window x", pos().x());
- configSettings->writeEntry("/kconfig/qconf/window y", pos().y());
- configSettings->writeEntry("/kconfig/qconf/window width", size().width());
- configSettings->writeEntry("/kconfig/qconf/window height", size().height());
- configSettings->writeEntry("/kconfig/qconf/showName", configList->showName);
- configSettings->writeEntry("/kconfig/qconf/showRange", configList->showRange);
- configSettings->writeEntry("/kconfig/qconf/showData", configList->showData);
- configSettings->writeEntry("/kconfig/qconf/showAll", configList->showAll);
- configSettings->writeEntry("/kconfig/qconf/showDebug", helpText->showDebug());
+ configSettings->writeEntry("/window x", pos().x());
+ configSettings->writeEntry("/window y", pos().y());
+ configSettings->writeEntry("/window width", size().width());
+ configSettings->writeEntry("/window height", size().height());
QString entry;
switch(configList->mode) {
@@ -1473,13 +1549,10 @@
entry = "full";
break;
}
- configSettings->writeEntry("/kconfig/qconf/listMode", entry);
+ configSettings->writeEntry("/listMode", entry);
- configSettings->writeSizes("/kconfig/qconf/split1", split1->sizes());
- configSettings->writeSizes("/kconfig/qconf/split2", split2->sizes());
-
- delete configSettings;
-#endif
+ configSettings->writeSizes("/split1", split1->sizes());
+ configSettings->writeSizes("/split2", split2->sizes());
}
void fixup_rootmenu(struct menu *menu)
@@ -1537,6 +1610,8 @@
conf_read(NULL);
//zconfdump(stdout);
+ configSettings = new ConfigSettings();
+ configSettings->beginGroup("/kconfig/qconf");
v = new ConfigMainWindow();
//zconfdump(stdout);
@@ -1546,5 +1621,8 @@
v->show();
configApp->exec();
+ configSettings->endGroup();
+ delete configSettings;
+
return 0;
}
diff --git a/scripts/kconfig/qconf.h b/scripts/kconfig/qconf.h
index a548d13..fb50e1c 100644
--- a/scripts/kconfig/qconf.h
+++ b/scripts/kconfig/qconf.h
@@ -7,9 +7,25 @@
#if QT_VERSION >= 300
#include <qsettings.h>
#else
-class QSettings { };
+class QSettings {
+public:
+ void beginGroup(const QString& group) { }
+ void endGroup(void) { }
+ bool readBoolEntry(const QString& key, bool def = FALSE, bool* ok = 0) const
+ { if (ok) *ok = FALSE; return def; }
+ int readNumEntry(const QString& key, int def = 0, bool* ok = 0) const
+ { if (ok) *ok = FALSE; return def; }
+ QString readEntry(const QString& key, const QString& def = QString::null, bool* ok = 0) const
+ { if (ok) *ok = FALSE; return def; }
+ QStringList readListEntry(const QString& key, bool* ok = 0) const
+ { if (ok) *ok = FALSE; return QStringList(); }
+ template <class t>
+ bool writeEntry(const QString& key, t value)
+ { return TRUE; }
+};
#endif
+class ConfigView;
class ConfigList;
class ConfigItem;
class ConfigLineEdit;
@@ -18,35 +34,8 @@
class ConfigSettings : public QSettings {
public:
- ConfigSettings();
-
-#if QT_VERSION >= 300
- void readListSettings();
QValueList<int> readSizes(const QString& key, bool *ok);
bool writeSizes(const QString& key, const QValueList<int>& value);
-#endif
-
- bool showAll;
- bool showName;
- bool showRange;
- bool showData;
-};
-
-class ConfigView : public QVBox {
- Q_OBJECT
- typedef class QVBox Parent;
-public:
- ConfigView(QWidget* parent, ConfigSettings* configSettings);
- ~ConfigView(void);
- static void updateList(ConfigItem* item);
- static void updateListAll(void);
-
-public:
- ConfigList* list;
- ConfigLineEdit* lineEdit;
-
- static ConfigView* viewList;
- ConfigView* nextView;
};
enum colIdx {
@@ -60,7 +49,7 @@
Q_OBJECT
typedef class QListView Parent;
public:
- ConfigList(ConfigView* p, ConfigSettings *configSettings);
+ ConfigList(ConfigView* p, const char *name = 0);
void reinit(void);
ConfigView* parent(void) const
{
@@ -74,6 +63,8 @@
void contentsMouseMoveEvent(QMouseEvent *e);
void contentsMouseDoubleClickEvent(QMouseEvent *e);
void focusInEvent(QFocusEvent *e);
+ void contextMenuEvent(QContextMenuEvent *e);
+
public slots:
void setRootMenu(struct menu *menu);
@@ -81,6 +72,7 @@
void setValue(ConfigItem* item, tristate val);
void changeValue(ConfigItem* item);
void updateSelection(void);
+ void saveSettings(void);
signals:
void menuChanged(struct menu *menu);
void menuSelected(struct menu *menu);
@@ -136,6 +128,7 @@
struct menu *rootEntry;
QColorGroup disabledColorGroup;
QColorGroup inactivedColorGroup;
+ QPopupMenu* headerPopup;
private:
int colMap[colNr];
@@ -219,6 +212,37 @@
ConfigItem *item;
};
+class ConfigView : public QVBox {
+ Q_OBJECT
+ typedef class QVBox Parent;
+public:
+ ConfigView(QWidget* parent, const char *name = 0);
+ ~ConfigView(void);
+ 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);
+signals:
+ void showAllChanged(bool);
+ void showNameChanged(bool);
+ void showRangeChanged(bool);
+ void showDataChanged(bool);
+public:
+ ConfigList* list;
+ ConfigLineEdit* lineEdit;
+
+ static ConfigView* viewList;
+ ConfigView* nextView;
+};
+
class ConfigInfoView : public QTextBrowser {
Q_OBJECT
typedef class QTextBrowser Parent;
@@ -228,6 +252,7 @@
public slots:
void setInfo(struct menu *menu);
+ void saveSettings(void);
void setSource(const QString& name);
void setShowDebug(bool);
@@ -239,6 +264,8 @@
QString debug_info(struct symbol *sym);
static QString print_filter(const QString &str);
static void expr_print_help(void *data, const char *str);
+ QPopupMenu* createPopupMenu(const QPoint& pos);
+ void contentsContextMenuEvent(QContextMenuEvent *e);
struct menu *menu;
bool _showDebug;
@@ -248,12 +275,16 @@
Q_OBJECT
typedef class QDialog Parent;
public:
- ConfigSearchWindow(QWidget* parent);
+ ConfigSearchWindow(QWidget* parent, const char *name = 0);
+
public slots:
+ void saveSettings(void);
void search(void);
+
protected:
QLineEdit* editField;
QPushButton* searchButton;
+ QSplitter* split;
ConfigView* list;
ConfigInfoView* info;
@@ -276,10 +307,6 @@
void showSingleView(void);
void showSplitView(void);
void showFullView(void);
- void setShowAll(bool);
- void setShowRange(bool);
- void setShowName(bool);
- void setShowData(bool);
void showIntro(void);
void showAbout(void);
void saveSettings(void);