kconfig: jump to linked menu prompt
If clicking on of the links, which leads to a visible prompt, jump to it in the symbol list. 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>
This commit is contained in:
parent
ab45d190fd
commit
b65a47e1ac
|
@ -381,6 +381,18 @@ void ConfigList::saveSettings(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ConfigItem* ConfigList::findConfigItem(struct menu *menu)
|
||||||
|
{
|
||||||
|
ConfigItem* item = (ConfigItem*)menu->data;
|
||||||
|
|
||||||
|
for (; item; item = item->nextItem) {
|
||||||
|
if (this == item->listView())
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
void ConfigList::updateSelection(void)
|
void ConfigList::updateSelection(void)
|
||||||
{
|
{
|
||||||
struct menu *menu;
|
struct menu *menu;
|
||||||
|
@ -524,6 +536,7 @@ void ConfigList::setRootMenu(struct menu *menu)
|
||||||
rootEntry = menu;
|
rootEntry = menu;
|
||||||
updateListAll();
|
updateListAll();
|
||||||
setSelected(currentItem(), hasFocus());
|
setSelected(currentItem(), hasFocus());
|
||||||
|
ensureItemVisible(currentItem());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigList::setParentMenu(void)
|
void ConfigList::setParentMenu(void)
|
||||||
|
@ -766,14 +779,16 @@ skip:
|
||||||
|
|
||||||
void ConfigList::focusInEvent(QFocusEvent *e)
|
void ConfigList::focusInEvent(QFocusEvent *e)
|
||||||
{
|
{
|
||||||
|
struct menu *menu = NULL;
|
||||||
|
|
||||||
Parent::focusInEvent(e);
|
Parent::focusInEvent(e);
|
||||||
|
|
||||||
QListViewItem* item = currentItem();
|
ConfigItem* item = (ConfigItem *)currentItem();
|
||||||
if (!item)
|
if (item) {
|
||||||
return;
|
setSelected(item, TRUE);
|
||||||
|
menu = item->menu;
|
||||||
setSelected(item, TRUE);
|
}
|
||||||
emit gotFocus();
|
emit gotFocus(menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigList::contextMenuEvent(QContextMenuEvent *e)
|
void ConfigList::contextMenuEvent(QContextMenuEvent *e)
|
||||||
|
@ -933,6 +948,8 @@ void ConfigInfoView::setShowDebug(bool b)
|
||||||
|
|
||||||
void ConfigInfoView::setInfo(struct menu *m)
|
void ConfigInfoView::setInfo(struct menu *m)
|
||||||
{
|
{
|
||||||
|
if (menu == m)
|
||||||
|
return;
|
||||||
menu = m;
|
menu = m;
|
||||||
if (!menu)
|
if (!menu)
|
||||||
clear();
|
clear();
|
||||||
|
@ -954,6 +971,7 @@ void ConfigInfoView::setSource(const QString& name)
|
||||||
if (sscanf(p, "m%p", &m) == 1 && menu != m) {
|
if (sscanf(p, "m%p", &m) == 1 && menu != m) {
|
||||||
menu = m;
|
menu = m;
|
||||||
menuInfo();
|
menuInfo();
|
||||||
|
emit menuSelected(menu);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
|
@ -1380,10 +1398,14 @@ ConfigMainWindow::ConfigMainWindow(void)
|
||||||
connect(menuList, SIGNAL(menuSelected(struct menu *)),
|
connect(menuList, SIGNAL(menuSelected(struct menu *)),
|
||||||
SLOT(changeMenu(struct menu *)));
|
SLOT(changeMenu(struct menu *)));
|
||||||
|
|
||||||
connect(configList, SIGNAL(gotFocus(void)),
|
connect(configList, SIGNAL(gotFocus(struct menu *)),
|
||||||
SLOT(listFocusChanged(void)));
|
helpText, SLOT(setInfo(struct menu *)));
|
||||||
connect(menuList, SIGNAL(gotFocus(void)),
|
connect(menuList, SIGNAL(gotFocus(struct menu *)),
|
||||||
|
helpText, SLOT(setInfo(struct menu *)));
|
||||||
|
connect(menuList, SIGNAL(gotFocus(struct menu *)),
|
||||||
SLOT(listFocusChanged(void)));
|
SLOT(listFocusChanged(void)));
|
||||||
|
connect(helpText, SIGNAL(menuSelected(struct menu *)),
|
||||||
|
SLOT(setMenuLink(struct menu *)));
|
||||||
|
|
||||||
QString listMode = configSettings->readEntry("/listMode", "symbol");
|
QString listMode = configSettings->readEntry("/listMode", "symbol");
|
||||||
if (listMode == "single")
|
if (listMode == "single")
|
||||||
|
@ -1403,18 +1425,6 @@ ConfigMainWindow::ConfigMainWindow(void)
|
||||||
split2->setSizes(sizes);
|
split2->setSizes(sizes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* display a new help entry as soon as a new menu entry is selected
|
|
||||||
*/
|
|
||||||
void ConfigMainWindow::setHelp(QListViewItem* item)
|
|
||||||
{
|
|
||||||
struct menu* menu = 0;
|
|
||||||
|
|
||||||
if (item)
|
|
||||||
menu = ((ConfigItem*)item)->menu;
|
|
||||||
helpText->setInfo(menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigMainWindow::loadConfig(void)
|
void ConfigMainWindow::loadConfig(void)
|
||||||
{
|
{
|
||||||
QString s = QFileDialog::getOpenFileName(".config", NULL, this);
|
QString s = QFileDialog::getOpenFileName(".config", NULL, this);
|
||||||
|
@ -1453,15 +1463,60 @@ void ConfigMainWindow::changeMenu(struct menu *menu)
|
||||||
backAction->setEnabled(TRUE);
|
backAction->setEnabled(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConfigMainWindow::setMenuLink(struct menu *menu)
|
||||||
|
{
|
||||||
|
struct menu *parent;
|
||||||
|
ConfigList* list = NULL;
|
||||||
|
ConfigItem* item;
|
||||||
|
|
||||||
|
if (!menu_is_visible(menu) && !configView->showAll())
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (configList->mode) {
|
||||||
|
case singleMode:
|
||||||
|
list = configList;
|
||||||
|
parent = menu_get_parent_menu(menu);
|
||||||
|
if (!parent)
|
||||||
|
return;
|
||||||
|
list->setRootMenu(parent);
|
||||||
|
break;
|
||||||
|
case symbolMode:
|
||||||
|
if (menu->flags & MENU_ROOT) {
|
||||||
|
configList->setRootMenu(menu);
|
||||||
|
configList->clearSelection();
|
||||||
|
list = menuList;
|
||||||
|
} else {
|
||||||
|
list = configList;
|
||||||
|
parent = menu_get_parent_menu(menu->parent);
|
||||||
|
if (!parent)
|
||||||
|
return;
|
||||||
|
item = menuList->findConfigItem(parent);
|
||||||
|
if (item) {
|
||||||
|
menuList->setSelected(item, TRUE);
|
||||||
|
menuList->ensureItemVisible(item);
|
||||||
|
}
|
||||||
|
list->setRootMenu(parent);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case fullMode:
|
||||||
|
list = configList;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (list) {
|
||||||
|
item = list->findConfigItem(menu);
|
||||||
|
if (item) {
|
||||||
|
list->setSelected(item, TRUE);
|
||||||
|
list->ensureItemVisible(item);
|
||||||
|
list->setFocus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ConfigMainWindow::listFocusChanged(void)
|
void ConfigMainWindow::listFocusChanged(void)
|
||||||
{
|
{
|
||||||
if (menuList->hasFocus()) {
|
if (menuList->mode == menuMode)
|
||||||
if (menuList->mode == menuMode)
|
configList->clearSelection();
|
||||||
configList->clearSelection();
|
|
||||||
setHelp(menuList->selectedItem());
|
|
||||||
} else if (configList->hasFocus()) {
|
|
||||||
setHelp(configList->selectedItem());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigMainWindow::goBack(void)
|
void ConfigMainWindow::goBack(void)
|
||||||
|
|
|
@ -55,6 +55,7 @@ public:
|
||||||
{
|
{
|
||||||
return (ConfigView*)Parent::parent();
|
return (ConfigView*)Parent::parent();
|
||||||
}
|
}
|
||||||
|
ConfigItem* findConfigItem(struct menu *);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void keyPressEvent(QKeyEvent *e);
|
void keyPressEvent(QKeyEvent *e);
|
||||||
|
@ -77,7 +78,7 @@ signals:
|
||||||
void menuChanged(struct menu *menu);
|
void menuChanged(struct menu *menu);
|
||||||
void menuSelected(struct menu *menu);
|
void menuSelected(struct menu *menu);
|
||||||
void parentSelected(void);
|
void parentSelected(void);
|
||||||
void gotFocus(void);
|
void gotFocus(struct menu *);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void updateListAll(void)
|
void updateListAll(void)
|
||||||
|
@ -258,6 +259,7 @@ public slots:
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void showDebugChanged(bool);
|
void showDebugChanged(bool);
|
||||||
|
void menuSelected(struct menu *);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void symbolInfo(void);
|
void symbolInfo(void);
|
||||||
|
@ -298,8 +300,8 @@ class ConfigMainWindow : public QMainWindow {
|
||||||
public:
|
public:
|
||||||
ConfigMainWindow(void);
|
ConfigMainWindow(void);
|
||||||
public slots:
|
public slots:
|
||||||
void setHelp(QListViewItem* item);
|
|
||||||
void changeMenu(struct menu *);
|
void changeMenu(struct menu *);
|
||||||
|
void setMenuLink(struct menu *);
|
||||||
void listFocusChanged(void);
|
void listFocusChanged(void);
|
||||||
void goBack(void);
|
void goBack(void);
|
||||||
void loadConfig(void);
|
void loadConfig(void);
|
||||||
|
|
Loading…
Reference in a new issue