void TTeamMenuItem::ToggleExpandState(bool resizeWindow) { fExpanded = !fExpanded; if (fExpanded) { // Populate Menu() with the stuff from SubMenu(). TWindowMenu* sub = (static_cast<TWindowMenu*>(Submenu())); if (sub) { // force the menu to update it's contents. bool locked = sub->LockLooper(); // if locking the looper failed, the menu is just not visible sub->AttachedToWindow(); if (locked) sub->UnlockLooper(); if (sub->CountItems() > 1) { TExpandoMenuBar* parent = static_cast<TExpandoMenuBar*>(Menu()); int myindex = parent->IndexOf(this) + 1; TWindowMenuItem* windowItem = NULL; int childIndex = 0; int totalChildren = sub->CountItems() - 4; // hide, show, close, separator. for (; childIndex < totalChildren; childIndex++) { windowItem = static_cast<TWindowMenuItem*> (sub->RemoveItem((int32)0)); parent->AddItem(windowItem, myindex + childIndex); windowItem->ExpandedItem(true); } sub->SetExpanded(true, myindex + childIndex); if (resizeWindow) parent->SizeWindow(); } } } else { // Remove the goodies from the Menu() that should be in the SubMenu(); TWindowMenu* sub = static_cast<TWindowMenu*>(Submenu()); if (sub) { TExpandoMenuBar* parent = static_cast<TExpandoMenuBar*>(Menu()); TWindowMenuItem* windowItem = NULL; int childIndex = parent->IndexOf(this) + 1; while (!parent->SubmenuAt(childIndex) && childIndex < parent->CountItems()) { windowItem = static_cast<TWindowMenuItem*> (parent->RemoveItem(childIndex)); sub->AddItem(windowItem, 0); windowItem->ExpandedItem(false); } sub->SetExpanded(false, 0); if (resizeWindow) parent->SizeWindow(); } } }
TWindowMenuItem* TTeamMenuItem::ExpandedWindowItem(int32 id) { if (!fExpanded) { // Paranoia return NULL; } TExpandoMenuBar* parent = static_cast<TExpandoMenuBar*>(Menu()); int childIndex = parent->IndexOf(this) + 1; while (!parent->SubmenuAt(childIndex) && childIndex < parent->CountItems()) { TWindowMenuItem* item = static_cast<TWindowMenuItem*>(parent->ItemAt(childIndex)); if (item->ID() == id) return item; childIndex++; } return NULL; }