It compiles, ship it. JMarc, can you see why I might be segfaulting

(see code) ?

Have I done this right ? Things are still wonky ... and what will I need
to do later ...


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@4773 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
John Levon 2002-07-24 20:06:22 +00:00
parent 6c3456a115
commit e82c5a64dd
3 changed files with 25 additions and 19 deletions

View File

@ -1,3 +1,7 @@
2002-07-24 John Levon <moz@compsoc.man.ac.uk>
* Menubar_pimpl.C: make it compile again
2002-07-24 Angus Leeming <leeming@lyx.org>
* FileDialog_private.C (done): add a false to the arguments passed to

View File

@ -72,27 +72,28 @@ Menubar::Pimpl::Pimpl(LyXView * view, MenuBackend const & mbe)
Menu::const_iterator m = mbe.getMenubar().begin();
Menu::const_iterator end = mbe.getMenubar().end();
for (; m != end; ++m) {
makeMenu(owner_->menuBar(), *m);
Menu tomenu;
Menu const frommenu = menubackend_.getMenu(m->submenuname());
menubackend_.expand(frommenu, tomenu, owner_->buffer());
makeMenu(owner_->menuBar(), m, tomenu);
}
}
void Menubar::Pimpl::makeMenu(QMenuData * parent, MenuItem const & menu)
void Menubar::Pimpl::makeMenu(QMenuData * parent, MenuItem const * item, Menu const & menu)
{
// FIXME: does this leak or not ?
QPopupMenu * pm = new QPopupMenu();
int const parentid = parent->insertItem(getLabel(menu).c_str(), pm);
int const parentid = parent->insertItem(getLabel(*item).c_str(), pm);
Menu md;
menubackend_.getMenu(menu.submenu()).expand(md, 0);
Menu::const_iterator m = md.begin();
Menu::const_iterator end = md.end();
Menu::const_iterator m = menu.begin();
Menu::const_iterator end = menu.end();
for (; m != end; ++m) {
// FIXME: handle the special stuff here
if (m->kind() == MenuItem::Separator) {
pm->insertSeparator();
} else if (m->kind() == MenuItem::Submenu) {
makeMenu(pm, *m);
makeMenu(pm, m, m->submenu());
} else {
pm->insertItem(getLabel(*m).c_str(), m->action());
MenuItemInfo const info(pm, m->action(), m);
@ -101,8 +102,8 @@ void Menubar::Pimpl::makeMenu(QMenuData * parent, MenuItem const & menu)
}
}
MenuItemInfo const info(parent, parentid, &menu);
items_[menu.label()] = info;
MenuItemInfo const info(parent, parentid, item);
items_[item->label()] = info;
updateSubmenu(info);
}
@ -111,14 +112,13 @@ void Menubar::Pimpl::makeMenu(QMenuData * parent, MenuItem const & menu)
// two-level submenus
void Menubar::Pimpl::updateSubmenu(MenuItemInfo const & i)
{
bool enable = true;
#if 0
#if 0 // SEGFAULTS
// 7 0x0809d372 in Menu::begin (this=0x0) at MenuBackend.h:138
// 8 0x081dcf60 in Menubar::Pimpl::updateSubmenu (this=0x839eaa0, i=@0xbffff010) at Menubar_pimpl.C:116
bool enable = false;
Menu md;
// FIXME FIXME SEGFAULTS
menubackend_.getMenu(i.item_->submenu()).expand(md, 0);
Menu::const_iterator m = md.begin();
Menu::const_iterator end = md.end();
Menu::const_iterator m = i.item_->submenu().begin();
Menu::const_iterator end = i.item_->submenu().end();
for (; m != end; ++m) {
if (m->action() > 0) {
FuncStatus const status =
@ -127,6 +127,8 @@ void Menubar::Pimpl::updateSubmenu(MenuItemInfo const & i)
enable = true;
}
}
#else
bool enable = true;
#endif
i.parent_->setItemEnabled(i.id_, enable);
}

View File

@ -64,7 +64,7 @@ public:
private:
/// create a menu
void makeMenu(QMenuData * parent, MenuItem const & menu);
void makeMenu(QMenuData * parent, MenuItem const * item, Menu const & menu);
/// special handling updating a submenu label
void updateSubmenu(MenuItemInfo const & i);