Commit d5d973c3 authored by Boris Barbulovski's avatar Boris Barbulovski Committed by Michal Marek

Port xconfig to Qt5 - Put back some of the old implementation(part 2).

Signed-off-by: default avatarBoris Barbulovski <bbarbulovski@gmail.com>
Signed-off-by: default avatarThiago Macieira <thiago.macieira@intel.com>
Signed-off-by: default avatarMichal Marek <mmarek@suse.com>
parent 59e56440
...@@ -102,10 +102,135 @@ void ConfigItem::okRename(int col) ...@@ -102,10 +102,135 @@ void ConfigItem::okRename(int col)
*/ */
void ConfigItem::updateMenu(void) void ConfigItem::updateMenu(void)
{ {
ConfigList* list;
struct symbol* sym;
struct property *prop;
QString prompt;
int type;
tristate expr;
list = listView();
if (goParent) {
setPixmap(promptColIdx, list->menuBackPix);
prompt = "..";
goto set_prompt;
}
sym = menu->sym;
prop = menu->prompt;
prompt = _(menu_get_prompt(menu));
if (prop) switch (prop->type) {
case P_MENU:
if (list->mode == singleMode || list->mode == symbolMode) {
/* a menuconfig entry is displayed differently
* depending whether it's at the view root or a child.
*/
if (sym && list->rootEntry == menu)
break;
setPixmap(promptColIdx, list->menuPix);
} else {
if (sym)
break;
setPixmap(promptColIdx, QIcon());
}
goto set_prompt;
case P_COMMENT:
setPixmap(promptColIdx, QIcon());
goto set_prompt;
default:
;
}
if (!sym)
goto set_prompt;
setText(nameColIdx, QString::fromLocal8Bit(sym->name));
type = sym_get_type(sym);
switch (type) {
case S_BOOLEAN:
case S_TRISTATE:
char ch;
if (!sym_is_changable(sym) && list->optMode == normalOpt) {
setPixmap(promptColIdx, QIcon());
setText(noColIdx, QString::null);
setText(modColIdx, QString::null);
setText(yesColIdx, QString::null);
break;
}
expr = sym_get_tristate_value(sym);
switch (expr) {
case yes:
if (sym_is_choice_value(sym) && type == S_BOOLEAN)
setPixmap(promptColIdx, list->choiceYesPix);
else
setPixmap(promptColIdx, list->symbolYesPix);
setText(yesColIdx, "Y");
ch = 'Y';
break;
case mod:
setPixmap(promptColIdx, list->symbolModPix);
setText(modColIdx, "M");
ch = 'M';
break;
default:
if (sym_is_choice_value(sym) && type == S_BOOLEAN)
setPixmap(promptColIdx, list->choiceNoPix);
else
setPixmap(promptColIdx, list->symbolNoPix);
setText(noColIdx, "N");
ch = 'N';
break;
}
if (expr != no)
setText(noColIdx, sym_tristate_within_range(sym, no) ? "_" : 0);
if (expr != mod)
setText(modColIdx, sym_tristate_within_range(sym, mod) ? "_" : 0);
if (expr != yes)
setText(yesColIdx, sym_tristate_within_range(sym, yes) ? "_" : 0);
setText(dataColIdx, QChar(ch));
break;
case S_INT:
case S_HEX:
case S_STRING:
const char* data;
data = sym_get_string_value(sym);
//int i = list->mapIdx(dataColIdx);
//if (i >= 0)
// setRenameEnabled(i, true);
setText(dataColIdx, data);
if (type == S_STRING)
prompt = QString("%1: %2").arg(prompt).arg(data);
else
prompt = QString("(%2) %1").arg(prompt).arg(data);
break;
}
if (!sym_has_value(sym) && visible)
prompt += _(" (NEW)");
set_prompt:
setText(promptColIdx, prompt);
} }
void ConfigItem::testUpdateMenu(bool v) void ConfigItem::testUpdateMenu(bool v)
{ {
ConfigItem* i;
visible = v;
if (!menu)
return;
sym_calc_value(menu->sym);
if (menu->flags & MENU_CHANGED) {
/* the menu entry changed, so update all list items */
menu->flags &= ~MENU_CHANGED;
for (i = (ConfigItem*)menu->data; i; i = i->nextItem)
i->updateMenu();
} else if (listView()->updateAll)
updateMenu();
} }
...@@ -114,6 +239,16 @@ void ConfigItem::testUpdateMenu(bool v) ...@@ -114,6 +239,16 @@ void ConfigItem::testUpdateMenu(bool v)
*/ */
void ConfigItem::init(void) void ConfigItem::init(void)
{ {
if (menu) {
ConfigList* list = listView();
nextItem = (ConfigItem*)menu->data;
menu->data = this;
if (list->mode != fullMode)
setExpanded(true);
sym_calc_value(menu->sym);
}
updateMenu();
} }
/* /*
...@@ -121,17 +256,30 @@ void ConfigItem::init(void) ...@@ -121,17 +256,30 @@ void ConfigItem::init(void)
*/ */
ConfigItem::~ConfigItem(void) ConfigItem::~ConfigItem(void)
{ {
if (menu) {
ConfigItem** ip = (ConfigItem**)&menu->data;
for (; *ip; ip = &(*ip)->nextItem) {
if (*ip == this) {
*ip = nextItem;
break;
}
}
}
} }
ConfigLineEdit::ConfigLineEdit(ConfigView* parent) ConfigLineEdit::ConfigLineEdit(ConfigView* parent)
: Parent(parent) : Parent(parent)
{ {
connect(this, SIGNAL(editingFinished()), SLOT(hide())); connect(this, SIGNAL(lostFocus()), SLOT(hide()));
} }
void ConfigLineEdit::show(ConfigItem* i) void ConfigLineEdit::show(ConfigItem* i)
{ {
item = i; item = i;
if (sym_get_string_value(item->menu->sym))
setText(QString::fromLocal8Bit(sym_get_string_value(item->menu->sym)));
else
setText(QString::null);
Parent::show(); Parent::show();
setFocus(); setFocus();
} }
...@@ -143,6 +291,7 @@ void ConfigLineEdit::keyPressEvent(QKeyEvent* e) ...@@ -143,6 +291,7 @@ void ConfigLineEdit::keyPressEvent(QKeyEvent* e)
break; break;
case Qt::Key_Return: case Qt::Key_Return:
case Qt::Key_Enter: case Qt::Key_Enter:
sym_set_string_value(item->menu->sym, text().toLatin1());
parent()->updateList(item); parent()->updateList(item);
break; break;
default: default:
...@@ -163,42 +312,251 @@ ConfigList::ConfigList(ConfigView* p, const char *name) ...@@ -163,42 +312,251 @@ ConfigList::ConfigList(ConfigView* p, const char *name)
showName(false), showRange(false), showData(false), optMode(normalOpt), showName(false), showRange(false), showData(false), optMode(normalOpt),
rootEntry(0), headerPopup(0) rootEntry(0), headerPopup(0)
{ {
int i;
setObjectName(name);
setSortingEnabled(-1);
setRootIsDecorated(true);
connect(this, SIGNAL(selectionChanged(void)),
SLOT(updateSelection(void)));
if (name) {
configSettings->beginGroup(name);
showName = configSettings->value("/showName", false).toBool();
showRange = configSettings->value("/showRange", false).toBool();
showData = configSettings->value("/showData", false).toBool();
optMode = (enum optionMode)configSettings->value("/optionMode", 0).toInt();
configSettings->endGroup();
connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings()));
}
addColumn(promptColIdx);
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) void ConfigList::reinit(void)
{ {
removeColumn(dataColIdx);
removeColumn(yesColIdx);
removeColumn(modColIdx);
removeColumn(noColIdx);
removeColumn(nameColIdx);
if (showName)
addColumn(nameColIdx);
if (showRange) {
addColumn(noColIdx);
addColumn(modColIdx);
addColumn(yesColIdx);
}
if (showData)
addColumn(dataColIdx);
updateListAll();
} }
void ConfigList::saveSettings(void) void ConfigList::saveSettings(void)
{ {
if (!objectName().isEmpty()) {
configSettings->beginGroup(objectName());
configSettings->setValue("/showName", showName);
configSettings->setValue("/showRange", showRange);
configSettings->setValue("/showData", showData);
configSettings->setValue("/optionMode", (int)optMode);
configSettings->endGroup();
}
} }
ConfigItem* ConfigList::findConfigItem(struct menu *menu) 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;
enum prop_type type;
ConfigItem* item = (ConfigItem*)selectedItems().first();
if (!item)
return;
menu = item->menu;
emit menuChanged(menu);
if (!menu)
return;
type = menu->prompt ? menu->prompt->type : P_UNKNOWN;
if (mode == menuMode && type == P_MENU)
emit menuSelected(menu);
} }
void ConfigList::updateList(ConfigItem* item) void ConfigList::updateList(ConfigItem* item)
{ {
ConfigItem* last = 0;
if (!rootEntry) {
if (mode != listMode)
goto update;
QTreeWidgetItemIterator it(this);
ConfigItem* item;
while (*it) {
item = (ConfigItem*)(*it);
if (!item->menu)
continue;
item->testUpdateMenu(menu_is_visible(item->menu));
++it;
}
return;
}
if (rootEntry != &rootmenu && (mode == singleMode ||
(mode == symbolMode && rootEntry->parent != &rootmenu))) {
item = firstChild();
if (!item)
item = new ConfigItem(this, 0, true);
last = item;
}
if ((mode == singleMode || (mode == symbolMode && !(rootEntry->flags & MENU_ROOT))) &&
rootEntry->sym && rootEntry->prompt) {
item = last ? last->nextSibling() : firstChild();
if (!item)
item = new ConfigItem(this, last, rootEntry, true);
else
item->testUpdateMenu(true);
updateMenuList(item, rootEntry);
update();
return;
}
update:
updateMenuList(this, rootEntry);
update();
} }
void ConfigList::setValue(ConfigItem* item, tristate val) void ConfigList::setValue(ConfigItem* item, tristate val)
{ {
struct symbol* sym;
int type;
tristate oldval;
sym = item->menu ? item->menu->sym : 0;
if (!sym)
return;
type = sym_get_type(sym);
switch (type) {
case S_BOOLEAN:
case S_TRISTATE:
oldval = sym_get_tristate_value(sym);
if (!sym_set_tristate_value(sym, val))
return;
if (oldval == no && item->menu->list)
item->setExpanded(true);
parent()->updateList(item);
break;
}
} }
void ConfigList::changeValue(ConfigItem* item) void ConfigList::changeValue(ConfigItem* item)
{ {
struct symbol* sym;
struct menu* menu;
int type, oldexpr, newexpr;
menu = item->menu;
if (!menu)
return;
sym = menu->sym;
if (!sym) {
if (item->menu->list)
item->setExpanded(!item->isExpanded());
return;
}
type = sym_get_type(sym);
switch (type) {
case S_BOOLEAN:
case S_TRISTATE:
oldexpr = sym_get_tristate_value(sym);
newexpr = sym_toggle_tristate_value(sym);
if (item->menu->list) {
if (oldexpr == newexpr)
item->setExpanded(!item->isExpanded());
else if (oldexpr == no)
item->setExpanded(true);
}
if (oldexpr != newexpr)
parent()->updateList(item);
break;
case S_INT:
case S_HEX:
case S_STRING:
break;
}
} }
void ConfigList::setRootMenu(struct menu *menu) void ConfigList::setRootMenu(struct menu *menu)
{ {
enum prop_type type;
if (rootEntry == menu)
return;
type = menu && menu->prompt ? menu->prompt->type : P_UNKNOWN;
if (type != P_MENU)
return;
updateMenuList(this, 0);
rootEntry = menu;
updateListAll();
if (currentItem()) {
currentItem()->setSelected(hasFocus());
scrollToItem(currentItem());
}
} }
void ConfigList::setParentMenu(void) void ConfigList::setParentMenu(void)
{ {
ConfigItem* item;
struct menu *oldroot;
oldroot = rootEntry;
if (rootEntry == &rootmenu)
return;
setRootMenu(menu_get_parent_menu(rootEntry->parent));
QTreeWidgetItemIterator it(this);
while (*it) {
item = (ConfigItem *)(*it);
if (item->menu == oldroot) {
setCurrentItem(item);
scrollToItem(item);
break;
}
++it;
}
} }
/* /*
...@@ -211,34 +569,250 @@ void ConfigList::setParentMenu(void) ...@@ -211,34 +569,250 @@ void ConfigList::setParentMenu(void)
template <class P> template <class P>
void ConfigList::updateMenuList(P* parent, struct menu* menu) 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()))
item->parent()->removeChild(item);
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 (!menuSkip(child)) {
if (!child->sym && !child->list && !child->prompt)
continue;
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) void ConfigList::keyPressEvent(QKeyEvent* ev)
{ {
QTreeWidgetItem* i = currentItem();
ConfigItem* item;
struct menu *menu;
enum prop_type type;
if (ev->key() == Qt::Key_Escape && mode != fullMode && mode != listMode) {
emit parentSelected();
ev->accept();
return;
}
if (!i) {
Parent::keyPressEvent(ev);
return;
}
item = (ConfigItem*)i;
switch (ev->key()) {
case Qt::Key_Return:
case Qt::Key_Enter:
if (item->goParent) {
emit parentSelected();
break;
}
menu = item->menu;
if (!menu)
break;
type = menu->prompt ? menu->prompt->type : P_UNKNOWN;
if (type == P_MENU && rootEntry != menu &&
mode != fullMode && mode != menuMode) {
emit menuSelected(menu);
break;
}
case Qt::Key_Space:
changeValue(item);
break;
case Qt::Key_N:
setValue(item, no);
break;
case Qt::Key_M:
setValue(item, mod);
break;
case Qt::Key_Y:
setValue(item, yes);
break;
default:
Parent::keyPressEvent(ev);
return;
}
ev->accept();
} }
void ConfigList::contentsMousePressEvent(QMouseEvent* e) void ConfigList::mousePressEvent(QMouseEvent* e)
{ {
//QPoint p(contentsToViewport(e->pos()));
//printf("contentsMousePressEvent: %d,%d\n", p.x(), p.y());
Parent::mousePressEvent(e);
} }
void ConfigList::contentsMouseReleaseEvent(QMouseEvent* e) void ConfigList::mouseReleaseEvent(QMouseEvent* e)
{ {
QPoint p = e->pos();
ConfigItem* item = (ConfigItem*)itemAt(p);
struct menu *menu;
enum prop_type ptype;
QIcon icon;
int idx, x;
if (!item)
goto skip;
menu = item->menu;
x = header()->offset() + p.x();
idx = header()->sectionPosition(x);
switch (idx) {
case promptColIdx:
icon = item->pixmap(promptColIdx);
break;
case noColIdx:
setValue(item, no);
break;
case modColIdx:
setValue(item, mod);
break;
case yesColIdx:
setValue(item, yes);
break;
case dataColIdx:
changeValue(item);
break;
}
skip:
//printf("contentsMouseReleaseEvent: %d,%d\n", p.x(), p.y());
Parent::mouseReleaseEvent(e);
} }
void ConfigList::contentsMouseMoveEvent(QMouseEvent* e) void ConfigList::mouseMoveEvent(QMouseEvent* e)
{ {
//QPoint p(contentsToViewport(e->pos()));
//printf("contentsMouseMoveEvent: %d,%d\n", p.x(), p.y());
Parent::mouseMoveEvent(e);
} }
void ConfigList::contentsMouseDoubleClickEvent(QMouseEvent* e) void ConfigList::mouseDoubleClickEvent(QMouseEvent* e)
{ {
QPoint p = e->pos(); // TODO: Check if this works(was contentsToViewport).
ConfigItem* item = (ConfigItem*)itemAt(p);
struct menu *menu;
enum prop_type ptype;
if (!item)
goto skip;
if (item->goParent) {
emit parentSelected();
goto skip;
}
menu = item->menu;
if (!menu)
goto skip;
ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN;
if (ptype == P_MENU && (mode == singleMode || mode == symbolMode))
emit menuSelected(menu);
else if (menu->sym)
changeValue(item);
skip:
//printf("contentsMouseDoubleClickEvent: %d,%d\n", p.x(), p.y());
Parent::mouseDoubleClickEvent(e);
} }
void ConfigList::focusInEvent(QFocusEvent *e) void ConfigList::focusInEvent(QFocusEvent *e)
{ {
struct menu *menu = NULL;
Parent::focusInEvent(e);
ConfigItem* item = (ConfigItem *)currentItem();
if (item) {
item->setSelected(true);
menu = item->menu;
}
emit gotFocus(menu);
} }
void ConfigList::contextMenuEvent(QContextMenuEvent *e) void ConfigList::contextMenuEvent(QContextMenuEvent *e)
{ {
if (e->y() <= header()->geometry().bottom()) {
if (!headerPopup) {
QAction *action;
headerPopup = new QMenu(this);
action = new QAction(_("Show Name"), this);
action->setCheckable(true);
connect(action, SIGNAL(toggled(bool)),
parent(), SLOT(setShowName(bool)));
connect(parent(), SIGNAL(showNameChanged(bool)),
action, SLOT(setOn(bool)));
action->setChecked(showName);
headerPopup->addAction(action);
action = new QAction(_("Show Range"), this);
action->setCheckable(true);
connect(action, SIGNAL(toggled(bool)),
parent(), SLOT(setShowRange(bool)));
connect(parent(), SIGNAL(showRangeChanged(bool)),
action, SLOT(setOn(bool)));
action->setChecked(showRange);
headerPopup->addAction(action);
action = new QAction(_("Show Data"), this);
action->setCheckable(true);
connect(action, SIGNAL(toggled(bool)),
parent(), SLOT(setShowData(bool)));
connect(parent(), SIGNAL(showDataChanged(bool)),
action, SLOT(setOn(bool)));
action->setChecked(showData);
headerPopup->addAction(action);
}
headerPopup->exec(e->globalPos());
e->accept();
} else
e->ignore();
} }
ConfigView*ConfigView::viewList; ConfigView*ConfigView::viewList;
...@@ -276,33 +850,78 @@ ConfigView::~ConfigView(void) ...@@ -276,33 +850,78 @@ ConfigView::~ConfigView(void)
void ConfigView::setOptionMode(QAction *act) void ConfigView::setOptionMode(QAction *act)
{ {
if (act == showNormalAction)
list->optMode = normalOpt;
else if (act == showAllAction)
list->optMode = allOpt;
else
list->optMode = promptOpt;
list->updateListAll();
} }
void ConfigView::setShowName(bool b) void ConfigView::setShowName(bool b)
{ {
if (list->showName != b) {
list->showName = b;
list->reinit();
emit showNameChanged(b);
}
} }
void ConfigView::setShowRange(bool b) void ConfigView::setShowRange(bool b)
{ {
if (list->showRange != b) {
list->showRange = b;
list->reinit();
emit showRangeChanged(b);
}
} }
void ConfigView::setShowData(bool b) void ConfigView::setShowData(bool b)
{ {
if (list->showData != b) {
list->showData = b;
list->reinit();
emit showDataChanged(b);
}
}
void ConfigList::setAllOpen(bool open)
{
QTreeWidgetItemIterator it(this);
while (*it) {
(*it)->setExpanded(open);
++it;
}
} }
void ConfigView::updateList(ConfigItem* item) void ConfigView::updateList(ConfigItem* item)
{ {
ConfigView* v;
for (v = viewList; v; v = v->nextView)
v->list->updateList(item);
} }
void ConfigView::updateListAll(void) void ConfigView::updateListAll(void)
{ {
ConfigView* v;
for (v = viewList; v; v = v->nextView)
v->list->updateListAll();
} }
ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name) ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name)
: Parent(parent), sym(0), _menu(0) : Parent(parent), sym(0), _menu(0)
{ {
if (name) { setObjectName(name);
configSettings->beginGroup(name);
if (!objectName().isEmpty()) {
configSettings->beginGroup(objectName());
_showDebug = configSettings->value("/showDebug", false).toBool(); _showDebug = configSettings->value("/showDebug", false).toBool();
configSettings->endGroup(); configSettings->endGroup();
connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings())); connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings()));
...@@ -311,6 +930,11 @@ ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name) ...@@ -311,6 +930,11 @@ ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name)
void ConfigInfoView::saveSettings(void) void ConfigInfoView::saveSettings(void)
{ {
if (!objectName().isEmpty()) {
configSettings->beginGroup(objectName());
configSettings->setValue("/showDebug", showDebug());
configSettings->endGroup();
}
} }
void ConfigInfoView::setShowDebug(bool b) void ConfigInfoView::setShowDebug(bool b)
...@@ -528,6 +1152,7 @@ void ConfigInfoView::contextMenuEvent(QContextMenuEvent *e) ...@@ -528,6 +1152,7 @@ void ConfigInfoView::contextMenuEvent(QContextMenuEvent *e)
ConfigSearchWindow::ConfigSearchWindow(ConfigMainWindow* parent, const char *name) ConfigSearchWindow::ConfigSearchWindow(ConfigMainWindow* parent, const char *name)
: Parent(parent), result(NULL) : Parent(parent), result(NULL)
{ {
setObjectName(name);
setWindowTitle("Search Config"); setWindowTitle("Search Config");
QVBoxLayout* layout1 = new QVBoxLayout(this); QVBoxLayout* layout1 = new QVBoxLayout(this);
...@@ -549,6 +1174,7 @@ ConfigSearchWindow::ConfigSearchWindow(ConfigMainWindow* parent, const char *nam ...@@ -549,6 +1174,7 @@ ConfigSearchWindow::ConfigSearchWindow(ConfigMainWindow* parent, const char *nam
split = new QSplitter(this); split = new QSplitter(this);
split->setOrientation(Qt::Vertical); split->setOrientation(Qt::Vertical);
list = new ConfigView(split, name); list = new ConfigView(split, name);
list->list->mode = listMode;
info = new ConfigInfoView(split, name); info = new ConfigInfoView(split, name);
connect(list->list, SIGNAL(menuChanged(struct menu *)), connect(list->list, SIGNAL(menuChanged(struct menu *)),
info, SLOT(setInfo(struct menu *))); info, SLOT(setInfo(struct menu *)));
...@@ -580,10 +1206,35 @@ ConfigSearchWindow::ConfigSearchWindow(ConfigMainWindow* parent, const char *nam ...@@ -580,10 +1206,35 @@ ConfigSearchWindow::ConfigSearchWindow(ConfigMainWindow* parent, const char *nam
void ConfigSearchWindow::saveSettings(void) void ConfigSearchWindow::saveSettings(void)
{ {
if (!objectName().isEmpty()) {
configSettings->beginGroup(objectName());
configSettings->setValue("/window x", pos().x());
configSettings->setValue("/window y", pos().y());
configSettings->setValue("/window width", size().width());
configSettings->setValue("/window height", size().height());
configSettings->writeSizes("/split", split->sizes());
configSettings->endGroup();
}
} }
void ConfigSearchWindow::search(void) void ConfigSearchWindow::search(void)
{ {
struct symbol **p;
struct property *prop;
ConfigItem *lastItem = NULL;
free(result);
list->list->clear();
info->clear();
result = sym_re_search(editField->text().toLatin1());
if (!result)
return;
for (p = result; *p; p++) {
for_all_prompts((*p), prop)
lastItem = new ConfigItem(list->list, lastItem, prop->menu,
menu_is_visible(prop->menu));
}
} }
/* /*
...@@ -739,6 +1390,23 @@ ConfigMainWindow::ConfigMainWindow(void) ...@@ -739,6 +1390,23 @@ ConfigMainWindow::ConfigMainWindow(void)
helpMenu->addAction(showIntroAction); helpMenu->addAction(showIntroAction);
helpMenu->addAction(showAboutAction); helpMenu->addAction(showAboutAction);
connect(configList, SIGNAL(menuChanged(struct menu *)),
helpText, SLOT(setInfo(struct menu *)));
connect(configList, SIGNAL(menuSelected(struct menu *)),
SLOT(changeMenu(struct menu *)));
connect(configList, SIGNAL(parentSelected()),
SLOT(goBack()));
connect(menuList, SIGNAL(menuChanged(struct menu *)),
helpText, SLOT(setInfo(struct menu *)));
connect(menuList, SIGNAL(menuSelected(struct menu *)),
SLOT(changeMenu(struct menu *)));
connect(configList, SIGNAL(gotFocus(struct menu *)),
helpText, SLOT(setInfo(struct menu *)));
connect(menuList, SIGNAL(gotFocus(struct menu *)),
helpText, SLOT(setInfo(struct menu *)));
connect(menuList, SIGNAL(gotFocus(struct menu *)),
SLOT(listFocusChanged(void)));
connect(helpText, SIGNAL(menuSelected(struct menu *)), connect(helpText, SIGNAL(menuSelected(struct menu *)),
SLOT(setMenuLink(struct menu *))); SLOT(setMenuLink(struct menu *)));
...@@ -796,19 +1464,86 @@ void ConfigMainWindow::searchConfig(void) ...@@ -796,19 +1464,86 @@ void ConfigMainWindow::searchConfig(void)
void ConfigMainWindow::changeMenu(struct menu *menu) void ConfigMainWindow::changeMenu(struct menu *menu)
{ {
configList->setRootMenu(menu);
if (configList->rootEntry->parent == &rootmenu)
backAction->setEnabled(false);
else
backAction->setEnabled(true);
} }
void ConfigMainWindow::setMenuLink(struct menu *menu) void ConfigMainWindow::setMenuLink(struct menu *menu)
{ {
struct menu *parent;
ConfigList* list = NULL;
ConfigItem* item;
if (configList->menuSkip(menu))
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) {
item->setSelected(true);
menuList->scrollToItem(item);
}
list->setRootMenu(parent);
}
break;
case fullMode:
list = configList;
break;
default:
break;
}
if (list) {
item = list->findConfigItem(menu);
if (item) {
item->setSelected(true);
list->scrollToItem(item);
list->setFocus();
}
}
} }
void ConfigMainWindow::listFocusChanged(void) void ConfigMainWindow::listFocusChanged(void)
{ {
if (menuList->mode == menuMode)
configList->clearSelection();
} }
void ConfigMainWindow::goBack(void) void ConfigMainWindow::goBack(void)
{ {
ConfigItem* item;
configList->setParentMenu();
if (configList->rootEntry == &rootmenu)
backAction->setEnabled(false);
item = (ConfigItem*)menuList->selectedItems().first();
while (item) {
if (item->menu == configList->rootEntry) {
item->setSelected(true);
break;
}
item = (ConfigItem*)item->parent();
}
} }
void ConfigMainWindow::showSingleView(void) void ConfigMainWindow::showSingleView(void)
...@@ -821,6 +1556,12 @@ void ConfigMainWindow::showSingleView(void) ...@@ -821,6 +1556,12 @@ void ConfigMainWindow::showSingleView(void)
fullViewAction->setChecked(false); fullViewAction->setChecked(false);
menuView->hide(); menuView->hide();
menuList->setRootMenu(0);
configList->mode = singleMode;
if (configList->rootEntry == &rootmenu)
configList->updateListAll();
else
configList->setRootMenu(&rootmenu);
configList->setFocus(); configList->setFocus();
} }
...@@ -833,6 +1574,16 @@ void ConfigMainWindow::showSplitView(void) ...@@ -833,6 +1574,16 @@ void ConfigMainWindow::showSplitView(void)
fullViewAction->setEnabled(true); fullViewAction->setEnabled(true);
fullViewAction->setChecked(false); fullViewAction->setChecked(false);
configList->mode = symbolMode;
if (configList->rootEntry == &rootmenu)
configList->updateListAll();
else
configList->setRootMenu(&rootmenu);
configList->setAllOpen(true);
configApp->processEvents();
menuList->mode = menuMode;
menuList->setRootMenu(&rootmenu);
menuList->setAllOpen(true);
menuView->show(); menuView->show();
menuList->setFocus(); menuList->setFocus();
} }
...@@ -847,6 +1598,12 @@ void ConfigMainWindow::showFullView(void) ...@@ -847,6 +1598,12 @@ void ConfigMainWindow::showFullView(void)
fullViewAction->setChecked(true); fullViewAction->setChecked(true);
menuView->hide(); menuView->hide();
menuList->setRootMenu(0);
configList->mode = fullMode;
if (configList->rootEntry == &rootmenu)
configList->updateListAll();
else
configList->setRootMenu(&rootmenu);
configList->setFocus(); configList->setFocus();
} }
...@@ -914,7 +1671,22 @@ void ConfigMainWindow::saveSettings(void) ...@@ -914,7 +1671,22 @@ void ConfigMainWindow::saveSettings(void)
configSettings->setValue("/window height", size().height()); configSettings->setValue("/window height", size().height());
QString entry; QString entry;
switch(configList->mode) {
case singleMode :
entry = "single";
break;
case symbolMode :
entry = "split";
break;
case fullMode :
entry = "full";
break;
default:
break;
}
configSettings->setValue("/listMode", entry); configSettings->setValue("/listMode", entry);
configSettings->writeSizes("/split1", split1->sizes()); configSettings->writeSizes("/split1", split1->sizes());
......
...@@ -53,10 +53,10 @@ class ConfigList : public QTreeWidget { ...@@ -53,10 +53,10 @@ class ConfigList : public QTreeWidget {
protected: protected:
void keyPressEvent(QKeyEvent *e); void keyPressEvent(QKeyEvent *e);
void contentsMousePressEvent(QMouseEvent *e); void mousePressEvent(QMouseEvent *e);
void contentsMouseReleaseEvent(QMouseEvent *e); void mouseReleaseEvent(QMouseEvent *e);
void contentsMouseMoveEvent(QMouseEvent *e); void mouseMoveEvent(QMouseEvent *e);
void contentsMouseDoubleClickEvent(QMouseEvent *e); void mouseDoubleClickEvent(QMouseEvent *e);
void focusInEvent(QFocusEvent *e); void focusInEvent(QFocusEvent *e);
void contextMenuEvent(QContextMenuEvent *e); void contextMenuEvent(QContextMenuEvent *e);
...@@ -87,16 +87,15 @@ public slots: ...@@ -87,16 +87,15 @@ public slots:
} }
ConfigItem* firstChild() const ConfigItem* firstChild() const
{ {
// TODO: Implement me. return (ConfigItem *)children().first();
return NULL;
} }
void addColumn(colIdx idx, const QString& label) void addColumn(colIdx idx)
{ {
// TODO: Implement me. showColumn(idx);
} }
void removeColumn(colIdx idx) void removeColumn(colIdx idx)
{ {
// TODO: Implement me. hideColumn(idx);
} }
void setAllOpen(bool open); void setAllOpen(bool open);
void setParentMenu(void); void setParentMenu(void);
...@@ -124,7 +123,7 @@ public slots: ...@@ -124,7 +123,7 @@ public slots:
class ConfigItem : public QTreeWidgetItem { class ConfigItem : public QTreeWidgetItem {
typedef class QTreeWidgetItem Parent; typedef class QTreeWidgetItem Parent;
public: public:
ConfigItem(QTreeWidgetItem *parent, ConfigItem *after, struct menu *m, bool v) ConfigItem(QTreeWidget *parent, ConfigItem *after, struct menu *m, bool v)
: Parent(parent, after), menu(m), visible(v), goParent(false) : Parent(parent, after), menu(m), visible(v), goParent(false)
{ {
init(); init();
...@@ -134,7 +133,7 @@ class ConfigItem : public QTreeWidgetItem { ...@@ -134,7 +133,7 @@ class ConfigItem : public QTreeWidgetItem {
{ {
init(); init();
} }
ConfigItem(QTreeWidgetItem *parent, ConfigItem *after, bool v) ConfigItem(QTreeWidget *parent, ConfigItem *after, bool v)
: Parent(parent, after), menu(0), visible(v), goParent(true) : Parent(parent, after), menu(0), visible(v), goParent(true)
{ {
init(); init();
...@@ -152,9 +151,19 @@ class ConfigItem : public QTreeWidgetItem { ...@@ -152,9 +151,19 @@ class ConfigItem : public QTreeWidgetItem {
{ {
return (ConfigItem *)Parent::child(0); return (ConfigItem *)Parent::child(0);
} }
ConfigItem* nextSibling() const ConfigItem* nextSibling()
{ {
return NULL; // TODO: Implement me ConfigItem *ret = NULL;
ConfigItem *_parent = (ConfigItem *)parent();
if(_parent) {
ret = (ConfigItem *)_parent->child(_parent->indexOfChild(this)+1);
} else {
QTreeWidget *_treeWidget = treeWidget();
ret = (ConfigItem *)_treeWidget->topLevelItem(_treeWidget->indexOfTopLevelItem(this)+1);
}
return ret;
} }
void setText(colIdx idx, const QString& text) void setText(colIdx idx, const QString& text)
{ {
...@@ -164,15 +173,15 @@ class ConfigItem : public QTreeWidgetItem { ...@@ -164,15 +173,15 @@ class ConfigItem : public QTreeWidgetItem {
{ {
return Parent::text(idx); return Parent::text(idx);
} }
void setPixmap(colIdx idx, const QPixmap& pm) void setPixmap(colIdx idx, const QIcon &icon)
{ {
// TODO: Implement me Parent::setIcon(idx, icon);
} }
const QPixmap* pixmap(colIdx idx) const const QIcon pixmap(colIdx idx) const
{ {
return NULL; // TODO: Implement me return icon(idx);
} }
// Implement paintCell // TODO: Implement paintCell
ConfigItem* nextItem; ConfigItem* nextItem;
struct menu *menu; struct menu *menu;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment