From 16e53b2a2e94742f3b55ee73700bb264e36638d4 Mon Sep 17 00:00:00 2001 From: kergoth Date: Tue, 17 Jun 2003 17:03:49 +0000 Subject: Update LinuxKernelConf version to 1.4. --- (limited to 'scripts/kconfig/qconf.cc') diff --git a/scripts/kconfig/qconf.cc b/scripts/kconfig/qconf.cc index bed541d..52419ad 100644 --- a/scripts/kconfig/qconf.cc +++ b/scripts/kconfig/qconf.cc @@ -42,15 +42,12 @@ static QSettings *configSettings; * menu: entry to be updated */ template -static void updateMenuList(P* parent, struct menu* menu) +void ConfigList::updateMenuList(P* parent, struct menu* menu) { struct menu* child; - ConfigList* list = parent->listView(); ConfigItem* item; ConfigItem* last; bool visible; - bool showAll = list->showAll; - enum listMode mode = list->mode; enum prop_type type; if (!menu) { @@ -59,18 +56,20 @@ static void updateMenuList(P* parent, struct menu* menu) return; } - last = 0; + 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 (type != P_ROOTMENU) + if (!(child->flags & MENU_ROOT)) goto hide; break; case symbolMode: - if (type == P_ROOTMENU) + if (child->flags & MENU_ROOT) goto hide; break; default: @@ -81,26 +80,17 @@ static void updateMenuList(P* parent, struct menu* menu) if (showAll || visible) { if (!item || item->menu != child) item = new ConfigItem(parent, last, child, visible); - else { - item->visible = visible; - if (item->updateNeeded()) { - ConfigItem* i = (ConfigItem*)child->data; - for (; i; i = i->nextItem) { - i->updateMenu(); - } - } else if (list->updateAll) - item->updateMenu(); - } + else + item->testUpdateMenu(visible); - if (mode == fullMode || mode == menuMode || - (type != P_MENU && type != P_ROOTMENU)) + if (mode == fullMode || mode == menuMode || type != P_MENU) updateMenuList(item, child); else updateMenuList(item, 0); last = item; continue; } - hide: + hide: if (item && item->menu == child) { last = parent->firstChild(); if (last == item) @@ -131,24 +121,45 @@ void ConfigItem::updateMenu(void) { ConfigList* list; struct symbol* sym; + struct property *prop; QString prompt; int type; - enum prop_type ptype; tristate expr; list = listView(); + if (goParent) { + setPixmap(promptColIdx, list->menuBackPix); + prompt = ".."; + goto set_prompt; + } sym = menu->sym; - if (!sym) { - setText(promptColIdx, menu_get_prompt(menu)); - ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN; - if ((ptype == P_ROOTMENU || ptype == P_MENU) && - (list->mode == singleMode || list->mode == symbolMode)) + 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 + } else { + if (sym) + break; setPixmap(promptColIdx, 0); - return; + } + goto set_prompt; + case P_COMMENT: + setPixmap(promptColIdx, 0); + goto set_prompt; + default: + ; } + if (!sym) + goto set_prompt; setText(nameColIdx, sym->name); @@ -158,8 +169,8 @@ void ConfigItem::updateMenu(void) case S_TRISTATE: char ch; - prompt = menu_get_prompt(menu); if (!sym_is_changable(sym) && !list->showAll) { + setPixmap(promptColIdx, 0); setText(noColIdx, 0); setText(modColIdx, 0); setText(yesColIdx, 0); @@ -211,26 +222,33 @@ void ConfigItem::updateMenu(void) #endif setText(dataColIdx, data); if (type == S_STRING) - prompt.sprintf("%s: %s", menu_get_prompt(menu), data); + prompt.sprintf("%s: %s", prompt.latin1(), data); else - prompt.sprintf("(%s) %s", data, menu_get_prompt(menu)); + prompt.sprintf("(%s) %s", data, prompt.latin1()); break; } if (!sym_has_value(sym) && visible) prompt += " (NEW)"; +set_prompt: setText(promptColIdx, prompt); } -bool ConfigItem::updateNeeded(void) +void ConfigItem::testUpdateMenu(bool v) { - struct symbol* sym = menu->sym; - if (sym) - sym_calc_value(sym); + 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; - return true; - } - return false; + for (i = (ConfigItem*)menu->data; i; i = i->nextItem) + i->updateMenu(); + } else if (listView()->updateAll) + updateMenu(); } void ConfigItem::paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align) @@ -251,14 +269,15 @@ void ConfigItem::paintCell(QPainter* p, const QColorGroup& cg, int column, int w */ void ConfigItem::init(void) { - ConfigList* list = listView(); - nextItem = (ConfigItem*)menu->data; - menu->data = this; + if (menu) { + ConfigList* list = listView(); + nextItem = (ConfigItem*)menu->data; + menu->data = this; - if (list->mode != fullMode) - setOpen(TRUE); - if (menu->sym) + if (list->mode != fullMode) + setOpen(TRUE); sym_calc_value(menu->sym); + } updateMenu(); } @@ -267,11 +286,13 @@ void ConfigItem::init(void) */ ConfigItem::~ConfigItem(void) { - ConfigItem** ip = &(ConfigItem*)menu->data; - for (; *ip; ip = &(*ip)->nextItem) { - if (*ip == this) { - *ip = nextItem; - break; + if (menu) { + ConfigItem** ip = (ConfigItem**)&menu->data; + for (; *ip; ip = &(*ip)->nextItem) { + if (*ip == this) { + *ip = nextItem; + break; + } } } } @@ -310,7 +331,8 @@ ConfigList::ConfigList(ConfigView* p, ConfigMainWindow* cv) : Parent(p), cview(cv), 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), + 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) { @@ -366,14 +388,37 @@ void ConfigList::updateSelection(void) cview->setHelp(item); menu = item->menu; + if (!menu) + return; type = menu->prompt ? menu->prompt->type : P_UNKNOWN; - if (mode == menuMode && (type == P_MENU || type == P_ROOTMENU)) + if (mode == menuMode && type == P_MENU) emit menuSelected(menu); } void ConfigList::updateList(ConfigItem* item) { - (void)item; // unused so far + ConfigItem* last = 0; + + if (!rootEntry) + goto update; + + 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 && rootEntry->sym && rootEntry->prompt) { + item = last ? last->nextSibling() : firstChild(); + if (!item) + item = new ConfigItem(this, last, rootEntry, true); + + updateMenuList(item, rootEntry); + triggerUpdate(); + return; + } +update: updateMenuList(this, rootEntry); triggerUpdate(); } @@ -392,7 +437,7 @@ void ConfigList::setValue(ConfigItem* item, tristate val) int type; tristate oldval; - sym = item->menu->sym; + sym = item->menu ? item->menu->sym : 0; if (!sym) return; @@ -418,6 +463,8 @@ void ConfigList::changeValue(ConfigItem* item) int type, oldexpr, newexpr; menu = item->menu; + if (!menu) + return; sym = menu->sym; if (!sym) { if (item->menu->list) @@ -460,7 +507,7 @@ void ConfigList::setRootMenu(struct menu *menu) if (rootEntry == menu) return; type = menu && menu->prompt ? menu->prompt->type : P_UNKNOWN; - if (type != P_MENU && type != P_ROOTMENU) + if (type != P_MENU) return; updateMenuList(this, 0); rootEntry = menu; @@ -471,13 +518,12 @@ void ConfigList::setRootMenu(struct menu *menu) void ConfigList::setParentMenu(void) { ConfigItem* item; - struct menu *oldroot, *newroot; + struct menu *oldroot; oldroot = rootEntry; - newroot = menu_get_parent_menu(oldroot); - if (newroot == oldroot) + if (rootEntry == &rootmenu) return; - setRootMenu(newroot); + setRootMenu(menu_get_parent_menu(rootEntry->parent)); QListViewItemIterator it(this); for (; (item = (ConfigItem*)it.current()); it++) { @@ -511,9 +557,16 @@ void ConfigList::keyPressEvent(QKeyEvent* ev) switch (ev->key()) { case Key_Return: case 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 || type == P_ROOTMENU) && mode != fullMode) { + if (type == P_MENU && rootEntry != menu && + mode != fullMode && mode != menuMode) { emit menuSelected(menu); break; } @@ -548,6 +601,7 @@ void ConfigList::contentsMouseReleaseEvent(QMouseEvent* e) QPoint p(contentsToViewport(e->pos())); ConfigItem* item = (ConfigItem*)itemAt(p); struct menu *menu; + enum prop_type ptype; const QPixmap* pm; int idx, x; @@ -564,10 +618,17 @@ void ConfigList::contentsMouseReleaseEvent(QMouseEvent* e) int off = header()->sectionPos(0) + itemMargin() + treeStepSize() * (item->depth() + (rootIsDecorated() ? 1 : 0)); if (x >= off && x < off + pm->width()) { - if (menu->sym) - changeValue(item); - else + if (item->goParent) { + emit parentSelected(); + break; + } else if (!menu) + break; + ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN; + if (ptype == P_MENU && rootEntry != menu && + mode != fullMode && mode != menuMode) emit menuSelected(menu); + else + changeValue(item); } } break; @@ -606,10 +667,15 @@ void ConfigList::contentsMouseDoubleClickEvent(QMouseEvent* e) 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_ROOTMENU || ptype == P_MENU) && - (mode == singleMode || mode == symbolMode)) + if (ptype == P_MENU && (mode == singleMode || mode == symbolMode)) emit menuSelected(menu); else if (menu->sym) changeValue(item); @@ -677,7 +743,6 @@ void ConfigView::updateListAll(void) */ ConfigMainWindow::ConfigMainWindow(void) { - ConfigView* view; QMenuBar* menu; QSplitter* split1; QSplitter* split2; @@ -707,15 +772,15 @@ ConfigMainWindow::ConfigMainWindow(void) split1->setOrientation(QSplitter::Horizontal); setCentralWidget(split1); - view = new ConfigView(split1, this); - menuList = view->list; + menuView = new ConfigView(split1, this); + menuList = menuView->list; split2 = new QSplitter(split1); split2->setOrientation(QSplitter::Vertical); // create config tree - view = new ConfigView(split2, this); - configList = view->list; + configView = new ConfigView(split2, this); + configList = configView->list; helpText = new QTextView(split2); helpText->setTextFormat(Qt::RichText); @@ -818,7 +883,6 @@ ConfigMainWindow::ConfigMainWindow(void) connect(menuList, SIGNAL(gotFocus(void)), SLOT(listFocusChanged(void))); - //showFullView(); showSplitView(); } @@ -864,89 +928,107 @@ static void expr_print_help(void *data, const char *str) void ConfigMainWindow::setHelp(QListViewItem* item) { struct symbol* sym; - struct menu* menu; + struct menu* menu = 0; configList->parent()->lineEdit->hide(); - if (item) { - QString head, debug, help; + if (item) menu = ((ConfigItem*)item)->menu; - sym = menu->sym; - if (sym) { - if (menu->prompt) { - head += ""; - head += print_filter(menu->prompt->text); - head += ""; - if (sym->name) { - head += " ("; - head += print_filter(sym->name); - head += ")"; - } - } else if (sym->name) { - head += ""; + if (!menu) { + helpText->setText(NULL); + return; + } + + QString head, debug, help; + menu = ((ConfigItem*)item)->menu; + sym = menu->sym; + if (sym) { + if (menu->prompt) { + head += ""; + head += print_filter(menu->prompt->text); + head += ""; + if (sym->name) { + head += " ("; head += print_filter(sym->name); - head += ""; + head += ")"; } - head += "

"; - - if (showDebug) { - debug += "type: "; - debug += print_filter(sym_type_name(sym->type)); + } else if (sym->name) { + head += ""; + head += print_filter(sym->name); + head += ""; + } + head += "

"; + + if (showDebug) { + debug += "type: "; + debug += print_filter(sym_type_name(sym->type)); + if (sym_is_choice(sym)) + debug += " (choice)"; + debug += "
"; + if (sym->rev_dep.expr) { + debug += "reverse dep: "; + expr_print(sym->rev_dep.expr, expr_print_help, &debug, E_NONE); debug += "
"; - for (struct property *prop = sym->prop; prop; prop = prop->next) { - switch (prop->type) { - case P_PROMPT: - debug += "prompt: "; - debug += print_filter(prop->text); - debug += "
"; - if (prop->visible.expr) { - debug += "  dep: "; - expr_print(prop->visible.expr, expr_print_help, &debug, E_NONE); - debug += "
"; - } - break; - case P_DEFAULT: - debug += "default: "; - if (sym_is_choice(sym)) - debug += print_filter(prop->def->name); - else { - sym_calc_value(prop->def); - debug += print_filter(sym_get_string_value(prop->def)); - } - debug += "
"; - if (prop->visible.expr) { - debug += "  dep: "; - expr_print(prop->visible.expr, expr_print_help, &debug, E_NONE); - debug += "
"; - } - break; - case P_CHOICE: - break; - default: - debug += "unknown property: "; - debug += prop_get_type_name(prop->type); + } + for (struct property *prop = sym->prop; prop; prop = prop->next) { + switch (prop->type) { + case P_PROMPT: + case P_MENU: + debug += "prompt: "; + debug += print_filter(prop->text); + debug += "
"; + break; + case P_DEFAULT: + debug += "default: "; + expr_print(prop->expr, expr_print_help, &debug, E_NONE); + debug += "
"; + break; + case P_CHOICE: + if (sym_is_choice(sym)) { + debug += "choice: "; + expr_print(prop->expr, expr_print_help, &debug, E_NONE); debug += "
"; } + break; + case P_SELECT: + debug += "select: "; + expr_print(prop->expr, expr_print_help, &debug, E_NONE); + debug += "
"; + break; + case P_RANGE: + debug += "range: "; + expr_print(prop->expr, expr_print_help, &debug, E_NONE); + debug += "
"; + break; + default: + debug += "unknown property: "; + debug += prop_get_type_name(prop->type); + debug += "
"; } - debug += "
"; - } - - help = print_filter(sym->help); - } else if (menu->prompt) { - head += ""; - head += print_filter(menu->prompt->text); - head += "

"; - if (showDebug) { - if (menu->prompt->visible.expr) { - debug += "  dep: "; - expr_print(menu->prompt->visible.expr, expr_print_help, &debug, E_NONE); + if (prop->visible.expr) { + debug += "    dep: "; + expr_print(prop->visible.expr, expr_print_help, &debug, E_NONE); debug += "
"; } } + debug += "
"; + } + + help = print_filter(sym->help); + } else if (menu->prompt) { + head += ""; + head += print_filter(menu->prompt->text); + head += "

"; + if (showDebug) { + if (menu->prompt->visible.expr) { + debug += "  dep: "; + expr_print(menu->prompt->visible.expr, expr_print_help, &debug, E_NONE); + debug += "

"; + } } - helpText->setText(head + debug + help); - return; } - helpText->setText(NULL); + if (showDebug) + debug += QString().sprintf("defined at %s:%d

", menu->file->name, menu->lineno); + helpText->setText(head + debug + help); } void ConfigMainWindow::loadConfig(void) @@ -1010,7 +1092,7 @@ void ConfigMainWindow::goBack(void) void ConfigMainWindow::showSingleView(void) { - menuList->hide(); + menuView->hide(); menuList->setRootMenu(0); configList->mode = singleMode; if (configList->rootEntry == &rootmenu) @@ -1032,14 +1114,14 @@ void ConfigMainWindow::showSplitView(void) configApp->processEvents(); menuList->mode = menuMode; menuList->setRootMenu(&rootmenu); - menuList->show(); menuList->setAllOpen(TRUE); + menuView->show(); menuList->setFocus(); } void ConfigMainWindow::showFullView(void) { - menuList->hide(); + menuView->hide(); menuList->setRootMenu(0); configList->mode = fullMode; if (configList->rootEntry == &rootmenu) @@ -1073,6 +1155,8 @@ void ConfigMainWindow::setShowName(bool b) return; configList->showName = b; configList->reinit(); + menuList->showName = b; + menuList->reinit(); } void ConfigMainWindow::setShowRange(bool b) @@ -1081,6 +1165,8 @@ void ConfigMainWindow::setShowRange(bool b) return; configList->showRange = b; configList->reinit(); + menuList->showRange = b; + menuList->reinit(); } void ConfigMainWindow::setShowData(bool b) @@ -1089,6 +1175,8 @@ void ConfigMainWindow::setShowData(bool b) return; configList->showData = b; configList->reinit(); + menuList->showData = b; + menuList->reinit(); } /* @@ -1146,12 +1234,25 @@ void ConfigMainWindow::showAbout(void) void fixup_rootmenu(struct menu *menu) { struct menu *child; + static int menu_cnt = 0; - if (!menu->prompt || menu->prompt->type != P_MENU) - return; - menu->prompt->type = P_ROOTMENU; - for (child = menu->list; child; child = child->next) - fixup_rootmenu(child); + menu->flags |= MENU_ROOT; + for (child = menu->list; child; child = child->next) { + if (child->prompt && child->prompt->type == P_MENU) { + menu_cnt++; + fixup_rootmenu(child); + menu_cnt--; + } else if (!menu_cnt) + fixup_rootmenu(child); + } +} + +static const char *progname; + +static void usage(void) +{ + printf("%s \n", progname); + exit(0); } int main(int ac, char** av) @@ -1163,23 +1264,23 @@ int main(int ac, char** av) kconfig_load(); #endif + progname = av[0]; configApp = new QApplication(ac, av); #if QT_VERSION >= 300 configSettings = new QSettings; #endif if (ac > 1 && av[1][0] == '-') { switch (av[1][1]) { - case 'a': - //showAll = 1; - break; case 'h': case '?': - printf("%s \n", av[0]); - exit(0); + usage(); } name = av[2]; } else name = av[1]; + if (!name) + usage(); + conf_parse(name); fixup_rootmenu(&rootmenu); conf_read(NULL); -- cgit v0.9.0.2