From 92aa9dcf8579e6bb7d506d7443a77eb150396cb8 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Fri, 31 Dec 2004 11:44:04 +0000 Subject: [PATCH] some more cleanups. The AddItem() variation which accepts a BRect parameter now calls the debugger if called when the layout is not B_ITEMS_IN_MATRIX. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10556 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/Menu.cpp | 35 ++++++++++++++++++++++----------- src/kits/interface/MenuItem.cpp | 2 +- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/kits/interface/Menu.cpp b/src/kits/interface/Menu.cpp index 26f035dc33..53a4c32ec1 100644 --- a/src/kits/interface/Menu.cpp +++ b/src/kits/interface/Menu.cpp @@ -160,8 +160,7 @@ BMenu::BMenu(const char *name, float width, float height) BMenu::~BMenu() { - for (int i = 0; i < CountItems(); i++) - delete ItemAt(i); + RemoveItems(0, CountItems(), true); } @@ -187,7 +186,7 @@ BMenu::Archive(BMessage *data, bool deep) const { status_t err = BView::Archive(data, deep); - if (err != B_OK) + if (err < B_OK) return err; if (Layout() != B_ITEMS_IN_ROW) { @@ -239,7 +238,7 @@ void BMenu::AttachedToWindow() { BView::AttachedToWindow(); - + LayoutItems(0); } @@ -287,10 +286,13 @@ BMenu::AddItem(BMenuItem *item, int32 index) bool BMenu::AddItem(BMenuItem *item, BRect frame) { + if (fLayout != B_ITEMS_IN_MATRIX) + debugger("BMenu::AddItem(BMenuItem *, BRect) this method can only" + " be called if the menu layout is B_ITEMS_IN_MATRIX"); + if (!item) return false; - frame.PrintToStream(); item->fBounds = frame; return AddItem(item, CountItems()); @@ -326,6 +328,10 @@ BMenu::AddItem(BMenu *submenu, int32 index) bool BMenu::AddItem(BMenu *submenu, BRect frame) { + if (fLayout != B_ITEMS_IN_MATRIX) + debugger("BMenu::AddItem(BMenu *, BRect) this method can only" + " be called if the menu layout is B_ITEMS_IN_MATRIX"); + BMenuItem *item = new BMenuItem(submenu); submenu->fSuper = this; item->fBounds = frame; @@ -1033,12 +1039,12 @@ void BMenu::_hide() { BWindow *window = Window(); - if (window) { window->RemoveChild(this); window->Lock(); window->Quit(); } + } @@ -1059,9 +1065,7 @@ BMenu::_track(int *action, long start) break; } - if (item && fSelected != item) { - SelectItem(item); - } + SelectItem(item); Draw(Bounds()); UnlockLooper(); @@ -1204,6 +1208,7 @@ BMenu::ComputeLayout(int32 index, bool bestFit, bool moveItems, case B_ITEMS_IN_MATRIX: { printf("BMenu: B_ITEMS_IN_MATRIX not yet implemented\n"); + frame = Frame(); break; } @@ -1262,9 +1267,9 @@ BMenu::ScrollIntoView(BMenuItem *item) void BMenu::DrawItems(BRect updateRect) { - for (int i = 0; i < fItems.CountItems(); i++) { + for (int32 i = 0; i < fItems.CountItems(); i++) { if (ItemAt(i)->Frame().Intersects(updateRect)) { - ItemAt(i)->Draw(); + ItemAt(i)->Draw(); } } Sync(); @@ -1395,8 +1400,14 @@ BMenu::Uninstall() void -BMenu::SelectItem(BMenuItem *m, uint32 showSubmenu,bool selectFirstItem) +BMenu::SelectItem(BMenuItem *menuItem, uint32 showSubmenu, bool selectFirstItem) { + if (menuItem != fSelected) { + if (fSelected != NULL) + fSelected->Select(false); + menuItem->Select(true); + fSelected = menuItem; + } } diff --git a/src/kits/interface/MenuItem.cpp b/src/kits/interface/MenuItem.cpp index 33a35d6377..c6184cc5da 100644 --- a/src/kits/interface/MenuItem.cpp +++ b/src/kits/interface/MenuItem.cpp @@ -382,7 +382,7 @@ BMenuItem::Draw() B_DISABLED_LABEL_TINT)); fSuper->MovePenTo(ContentLocation()); - DrawContent(); + //DrawContent(); if (fSuper->Layout() == B_ITEMS_IN_COLUMN) { if (IsMarked())