* Cleanup, no functional change.

* Remove superfluous operator=() implementations.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32174 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler 2009-08-07 08:01:27 +00:00
parent d82ea8abda
commit 50f8cd14bb
6 changed files with 320 additions and 319 deletions

View File

@ -1,34 +1,36 @@
/*
* Copyright 2006-2008, Haiku, Inc. All Rights Reserved.
* Copyright 2006-2009, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _MENU_FIELD_H
#define _MENU_FIELD_H
#include <BeBuild.h>
#include <Menu.h> /* For convenience */
#include <Menu.h>
#include <View.h>
class BMenuBar;
class BMenuField : public BView {
public:
public:
BMenuField(BRect frame, const char* name,
const char* label, BMenu* menu,
uint32 resize = B_FOLLOW_LEFT|B_FOLLOW_TOP,
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
BMenuField(BRect frame, const char* name,
const char* label, BMenu* menu,
bool fixed_size,
uint32 resize = B_FOLLOW_LEFT|B_FOLLOW_TOP,
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
BMenuField(const char* name,
const char* label, BMenu* menu,
BMessage* message,
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
uint32 flags = B_WILL_DRAW | B_NAVIGABLE);
BMenuField(const char* label,
BMenu* menu, BMessage* message = NULL);
BMenu* menu, BMessage* message = NULL);
BMenuField(BMessage* data);
virtual ~BMenuField();
@ -57,7 +59,7 @@ class BMenuField : public BView {
virtual void SetLabel(const char* label);
const char* Label() const;
virtual void SetEnabled(bool on);
bool IsEnabled() const;
@ -86,7 +88,7 @@ class BMenuField : public BView {
BLayoutItem* CreateLabelLayoutItem();
BLayoutItem* CreateMenuBarLayoutItem();
/*----- Private or reserved -----------------------------------------*/
virtual status_t Perform(perform_code d, void* arg);
@ -107,17 +109,16 @@ private:
virtual void _ReservedMenuField2();
virtual void _ReservedMenuField3();
BMenuField &operator=(const BMenuField&);
BMenuField& operator=(const BMenuField& other);
void InitObject(const char* label);
void InitObject2();
void DrawLabel(BRect bounds, BRect update);
static void InitMenu(BMenu* menu);
int32 _MenuTask();
static int32 _thread_entry(void *arg);
void _UpdateFrame();
void _InitMenuBar(BMenu* menu,
BRect frame, bool fixedSize);

View File

@ -22,7 +22,7 @@
#include <Window.h>
_BMCFilter_::_BMCFilter_(BMenuField *menuField, uint32 what)
_BMCFilter_::_BMCFilter_(BMenuField* menuField, uint32 what)
:
BMessageFilter(B_ANY_DELIVERY, B_ANY_SOURCE, what),
fMenuField(menuField)
@ -36,10 +36,10 @@ _BMCFilter_::~_BMCFilter_()
filter_result
_BMCFilter_::Filter(BMessage *message, BHandler **handler)
_BMCFilter_::Filter(BMessage* message, BHandler** handler)
{
if (message->what == B_MOUSE_DOWN) {
if (BView *view = dynamic_cast<BView *>(*handler)) {
if (BView* view = dynamic_cast<BView*>(*handler)) {
BPoint point;
message->FindPoint("be:view_where", &point);
view->ConvertToParent(&point);
@ -52,13 +52,6 @@ _BMCFilter_::Filter(BMessage *message, BHandler **handler)
}
_BMCFilter_ &
_BMCFilter_::operator=(const _BMCFilter_ &)
{
return *this;
}
// #pragma mark -
@ -87,7 +80,7 @@ _BMCMenuBar_::_BMCMenuBar_(bool fixedSize, BMenuField* menuField)
}
_BMCMenuBar_::_BMCMenuBar_(BMessage *data)
_BMCMenuBar_::_BMCMenuBar_(BMessage* data)
: BMenuBar(data),
fMenuField(NULL),
fFixedSize(true),
@ -108,8 +101,8 @@ _BMCMenuBar_::~_BMCMenuBar_()
}
BArchivable *
_BMCMenuBar_::Instantiate(BMessage *data)
BArchivable*
_BMCMenuBar_::Instantiate(BMessage* data)
{
if (validate_instantiation(data, "_BMCMenuBar_"))
return new _BMCMenuBar_(data);
@ -121,10 +114,10 @@ _BMCMenuBar_::Instantiate(BMessage *data)
void
_BMCMenuBar_::AttachedToWindow()
{
fMenuField = static_cast<BMenuField *>(Parent());
fMenuField = static_cast<BMenuField*>(Parent());
// Don't cause the KeyMenuBar to change by being attached
BMenuBar *menuBar = Window()->KeyMenuBar();
BMenuBar* menuBar = Window()->KeyMenuBar();
BMenuBar::AttachedToWindow();
Window()->SetKeyMenuBar(menuBar);
@ -307,12 +300,12 @@ _BMCMenuBar_::FrameResized(float width, float height)
void
_BMCMenuBar_::MessageReceived(BMessage *msg)
_BMCMenuBar_::MessageReceived(BMessage* msg)
{
switch (msg->what) {
case 'TICK':
{
BMenuItem *item = ItemAt(0);
BMenuItem* item = ItemAt(0);
if (item && item->Submenu() && item->Submenu()->Window()) {
BMessage message(B_KEY_DOWN);
@ -389,13 +382,6 @@ _BMCMenuBar_::MaxSize()
}
_BMCMenuBar_
&_BMCMenuBar_::operator=(const _BMCMenuBar_ &)
{
return *this;
}
void
_BMCMenuBar_::_Init(bool setMaxContentWidth)
{

View File

@ -8,6 +8,7 @@
* Rene Gollent (anevilyak@gmail.com)
*/
#include <Menu.h>
#include <new>
@ -65,10 +66,10 @@ private:
class ExtraMenuData {
public:
menu_tracking_hook trackingHook;
void *trackingState;
menu_tracking_hook trackingHook;
void* trackingState;
ExtraMenuData(menu_tracking_hook func, void *state)
ExtraMenuData(menu_tracking_hook func, void* state)
{
trackingHook = func;
trackingState = state;
@ -173,7 +174,7 @@ static property_info sPropList[] = {
};
const char *BPrivate::kEmptyMenuLabel = "<empty>";
const char* BPrivate::kEmptyMenuLabel = "<empty>";
struct BMenu::LayoutData {
@ -182,7 +183,7 @@ struct BMenu::LayoutData {
};
BMenu::BMenu(const char *name, menu_layout layout)
BMenu::BMenu(const char* name, menu_layout layout)
: BView(BRect(0, 0, 0, 0), name, 0, B_WILL_DRAW),
fChosenItem(NULL),
fPad(14.0f, 2.0f, 20.0f, 0.0f),
@ -216,7 +217,7 @@ BMenu::BMenu(const char *name, menu_layout layout)
}
BMenu::BMenu(const char *name, float width, float height)
BMenu::BMenu(const char* name, float width, float height)
: BView(BRect(0.0f, width, 0.0f, height), name, 0, B_WILL_DRAW),
fChosenItem(NULL),
fSelected(NULL),
@ -261,7 +262,7 @@ BMenu::~BMenu()
}
BMenu::BMenu(BMessage *archive)
BMenu::BMenu(BMessage* archive)
: BView(archive),
fChosenItem(NULL),
fPad(14.0f, 2.0f, 20.0f, 0.0f),
@ -306,7 +307,7 @@ BMenu::Instantiate(BMessage* archive)
status_t
BMenu::Archive(BMessage *data, bool deep) const
BMenu::Archive(BMessage* data, bool deep) const
{
status_t err = BView::Archive(data, deep);
@ -325,7 +326,7 @@ BMenu::Archive(BMessage *data, bool deep) const
if (err == B_OK)
err = data->AddFloat("_maxwidth", fMaxContentWidth);
if (err == B_OK && deep) {
BMenuItem *item = NULL;
BMenuItem* item = NULL;
int32 index = 0;
while ((item = ItemAt(index++)) != NULL) {
BMessage itemData;
@ -353,17 +354,17 @@ BMenu::AttachedToWindow()
// when called there. Probably because the BApplication isn't yet
// initialized, or running.
BMenu::sAltAsCommandKey = true;
key_map *keys = NULL;
char *chars = NULL;
key_map* keys = NULL;
char* chars = NULL;
get_key_map(&keys, &chars);
if (keys == NULL || keys->left_command_key != 0x5d
|| keys->left_control_key != 0x5c)
BMenu::sAltAsCommandKey = false;
free(chars);
free(keys);
BMenuItem *superItem = Superitem();
BMenu *superMenu = Supermenu();
BMenuItem* superItem = Superitem();
BMenu* superMenu = Supermenu();
if (AddDynamicItem(B_INITIAL_ADD)) {
do {
if (superMenu != NULL && !superMenu->_OkToProceed(superItem)) {
@ -390,18 +391,19 @@ BMenu::DetachedFromWindow()
bool
BMenu::AddItem(BMenuItem *item)
BMenu::AddItem(BMenuItem* item)
{
return AddItem(item, CountItems());
}
bool
BMenu::AddItem(BMenuItem *item, int32 index)
BMenu::AddItem(BMenuItem* item, int32 index)
{
if (fLayout == B_ITEMS_IN_MATRIX)
debugger("BMenu::AddItem(BMenuItem *, int32) this method can only "
"be called if the menu layout is not B_ITEMS_IN_MATRIX");
if (fLayout == B_ITEMS_IN_MATRIX) {
debugger("BMenu::AddItem(BMenuItem*, int32) this method can only "
"be called if the menu layout is not B_ITEMS_IN_MATRIX");
}
if (!item || !_AddItem(item, index))
return false;
@ -420,11 +422,12 @@ BMenu::AddItem(BMenuItem *item, int32 index)
bool
BMenu::AddItem(BMenuItem *item, BRect frame)
BMenu::AddItem(BMenuItem* item, BRect frame)
{
if (fLayout != B_ITEMS_IN_MATRIX)
debugger("BMenu::AddItem(BMenuItem *, BRect) this method can only "
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;
@ -449,9 +452,9 @@ BMenu::AddItem(BMenuItem *item, BRect frame)
bool
BMenu::AddItem(BMenu *submenu)
BMenu::AddItem(BMenu* submenu)
{
BMenuItem *item = new (nothrow) BMenuItem(submenu);
BMenuItem* item = new (nothrow) BMenuItem(submenu);
if (!item)
return false;
@ -466,13 +469,14 @@ BMenu::AddItem(BMenu *submenu)
bool
BMenu::AddItem(BMenu *submenu, int32 index)
BMenu::AddItem(BMenu* submenu, int32 index)
{
if (fLayout == B_ITEMS_IN_MATRIX)
debugger("BMenu::AddItem(BMenuItem *, int32) this method can only "
"be called if the menu layout is not B_ITEMS_IN_MATRIX");
if (fLayout == B_ITEMS_IN_MATRIX) {
debugger("BMenu::AddItem(BMenuItem*, int32) this method can only "
"be called if the menu layout is not B_ITEMS_IN_MATRIX");
}
BMenuItem *item = new (nothrow) BMenuItem(submenu);
BMenuItem* item = new (nothrow) BMenuItem(submenu);
if (!item)
return false;
@ -487,13 +491,14 @@ BMenu::AddItem(BMenu *submenu, int32 index)
bool
BMenu::AddItem(BMenu *submenu, BRect frame)
BMenu::AddItem(BMenu* submenu, BRect frame)
{
if (fLayout != B_ITEMS_IN_MATRIX)
debugger("BMenu::AddItem(BMenu *, BRect) this method can only "
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 (nothrow) BMenuItem(submenu);
BMenuItem* item = new (nothrow) BMenuItem(submenu);
if (!item)
return false;
@ -508,7 +513,7 @@ BMenu::AddItem(BMenu *submenu, BRect frame)
bool
BMenu::AddList(BList *list, int32 index)
BMenu::AddList(BList* list, int32 index)
{
// TODO: test this function, it's not documented in the bebook.
if (list == NULL)
@ -518,7 +523,7 @@ BMenu::AddList(BList *list, int32 index)
int32 numItems = list->CountItems();
for (int32 i = 0; i < numItems; i++) {
BMenuItem *item = static_cast<BMenuItem *>(list->ItemAt(i));
BMenuItem* item = static_cast<BMenuItem*>(list->ItemAt(i));
if (item != NULL) {
if (!_AddItem(item, index + i))
break;
@ -543,7 +548,7 @@ BMenu::AddList(BList *list, int32 index)
bool
BMenu::AddSeparatorItem()
{
BMenuItem *item = new (nothrow) BSeparatorItem();
BMenuItem* item = new (nothrow) BSeparatorItem();
if (!item || !AddItem(item, CountItems())) {
delete item;
return false;
@ -554,16 +559,16 @@ BMenu::AddSeparatorItem()
bool
BMenu::RemoveItem(BMenuItem *item)
BMenu::RemoveItem(BMenuItem* item)
{
return _RemoveItems(0, 0, item, false);
}
BMenuItem *
BMenuItem*
BMenu::RemoveItem(int32 index)
{
BMenuItem *item = ItemAt(index);
BMenuItem* item = ItemAt(index);
if (item != NULL)
_RemoveItems(0, 0, item, false);
return item;
@ -578,10 +583,10 @@ BMenu::RemoveItems(int32 index, int32 count, bool deleteItems)
bool
BMenu::RemoveItem(BMenu *submenu)
BMenu::RemoveItem(BMenu* submenu)
{
for (int32 i = 0; i < fItems.CountItems(); i++) {
if (static_cast<BMenuItem *>(fItems.ItemAtFast(i))->Submenu() == submenu)
if (static_cast<BMenuItem*>(fItems.ItemAtFast(i))->Submenu() == submenu)
return _RemoveItems(i, 1, NULL, false);
}
@ -596,30 +601,30 @@ BMenu::CountItems() const
}
BMenuItem *
BMenuItem*
BMenu::ItemAt(int32 index) const
{
return static_cast<BMenuItem *>(fItems.ItemAt(index));
return static_cast<BMenuItem*>(fItems.ItemAt(index));
}
BMenu *
BMenu*
BMenu::SubmenuAt(int32 index) const
{
BMenuItem *item = static_cast<BMenuItem *>(fItems.ItemAt(index));
return (item != NULL) ? item->Submenu() : NULL;
BMenuItem* item = static_cast<BMenuItem*>(fItems.ItemAt(index));
return item != NULL ? item->Submenu() : NULL;
}
int32
BMenu::IndexOf(BMenuItem *item) const
BMenu::IndexOf(BMenuItem* item) const
{
return fItems.IndexOf(item);
}
int32
BMenu::IndexOf(BMenu *submenu) const
BMenu::IndexOf(BMenu* submenu) const
{
for (int32 i = 0; i < fItems.CountItems(); i++) {
if (ItemAt(i)->Submenu() == submenu)
@ -630,10 +635,10 @@ BMenu::IndexOf(BMenu *submenu) const
}
BMenuItem *
BMenu::FindItem(const char *label) const
BMenuItem*
BMenu::FindItem(const char* label) const
{
BMenuItem *item = NULL;
BMenuItem* item = NULL;
for (int32 i = 0; i < CountItems(); i++) {
item = ItemAt(i);
@ -652,10 +657,10 @@ BMenu::FindItem(const char *label) const
}
BMenuItem *
BMenuItem*
BMenu::FindItem(uint32 command) const
{
BMenuItem *item = NULL;
BMenuItem* item = NULL;
for (int32 i = 0; i < CountItems(); i++) {
item = ItemAt(i);
@ -675,7 +680,7 @@ BMenu::FindItem(uint32 command) const
status_t
BMenu::SetTargetForItems(BHandler *handler)
BMenu::SetTargetForItems(BHandler* handler)
{
status_t status = B_OK;
for (int32 i = 0; i < fItems.CountItems(); i++) {
@ -792,11 +797,11 @@ BMenu::MaxContentWidth() const
}
BMenuItem *
BMenuItem*
BMenu::FindMarked()
{
for (int32 i = 0; i < fItems.CountItems(); i++) {
BMenuItem *item = ItemAt(i);
BMenuItem* item = ItemAt(i);
if (item->IsMarked())
return item;
}
@ -805,14 +810,14 @@ BMenu::FindMarked()
}
BMenu *
BMenu*
BMenu::Supermenu() const
{
return fSuper;
}
BMenuItem *
BMenuItem*
BMenu::Superitem() const
{
return fSuperitem;
@ -820,7 +825,7 @@ BMenu::Superitem() const
void
BMenu::MessageReceived(BMessage *msg)
BMenu::MessageReceived(BMessage* msg)
{
switch (msg->what) {
case B_MOUSE_WHEEL_CHANGED:
@ -830,7 +835,7 @@ BMenu::MessageReceived(BMessage *msg)
if (deltaY == 0)
return;
BMenuWindow *window = dynamic_cast<BMenuWindow *>(Window());
BMenuWindow* window = dynamic_cast<BMenuWindow*>(Window());
if (window == NULL)
return;
@ -847,7 +852,7 @@ BMenu::MessageReceived(BMessage *msg)
void
BMenu::KeyDown(const char *bytes, int32 numBytes)
BMenu::KeyDown(const char* bytes, int32 numBytes)
{
// TODO: Test how it works on beos and implement it correctly
switch (bytes[0]) {
@ -866,9 +871,9 @@ BMenu::KeyDown(const char *bytes, int32 numBytes)
_SelectNextItem(fSelected, false);
else {
// this case has to be handled a bit specially.
BMenuItem *item = Superitem();
BMenuItem* item = Superitem();
if (item) {
if (dynamic_cast<BMenuBar *>(Supermenu())) {
if (dynamic_cast<BMenuBar*>(Supermenu())) {
// if we're at the top menu below the menu bar, pass the keypress to
// the menu bar so we can move to another top level menu
BMessenger msgr(Supermenu());
@ -885,7 +890,7 @@ BMenu::KeyDown(const char *bytes, int32 numBytes)
else {
if (fSelected && fSelected->Submenu()) {
_SelectItem(fSelected, true, true);
} else if (dynamic_cast<BMenuBar *>(Supermenu())) {
} else if (dynamic_cast<BMenuBar*>(Supermenu())) {
// if we have no submenu and we're an
// item in the top menu below the menubar,
// pass the keypress to the menubar
@ -899,7 +904,7 @@ BMenu::KeyDown(const char *bytes, int32 numBytes)
case B_PAGE_UP:
case B_PAGE_DOWN:
{
BMenuWindow *window = dynamic_cast<BMenuWindow *>(Window());
BMenuWindow* window = dynamic_cast<BMenuWindow*>(Window());
if (window == NULL || !window->HasScrollers())
break;
@ -988,7 +993,7 @@ BMenu::PreferredSize()
void
BMenu::GetPreferredSize(float *_width, float *_height)
BMenu::GetPreferredSize(float* _width, float* _height)
{
_ValidatePreferredSize();
@ -1052,12 +1057,12 @@ BMenu::InvalidateLayout(bool descendants)
}
BHandler *
BMenu::ResolveSpecifier(BMessage *msg, int32 index, BMessage *specifier,
int32 form, const char *property)
BHandler*
BMenu::ResolveSpecifier(BMessage* msg, int32 index, BMessage* specifier,
int32 form, const char* property)
{
BPropertyInfo propInfo(sPropList);
BHandler *target = NULL;
BHandler* target = NULL;
switch (propInfo.FindMatch(msg, 0, specifier, form, property)) {
case B_ERROR:
@ -1098,7 +1103,7 @@ BMenu::ResolveSpecifier(BMessage *msg, int32 index, BMessage *specifier,
status_t
BMenu::GetSupportedSuites(BMessage *data)
BMenu::GetSupportedSuites(BMessage* data)
{
if (data == NULL)
return B_BAD_VALUE;
@ -1195,7 +1200,7 @@ BMenu::AllDetached()
}
BMenu::BMenu(BRect frame, const char *name, uint32 resizingMode, uint32 flags,
BMenu::BMenu(BRect frame, const char* name, uint32 resizingMode, uint32 flags,
menu_layout layout, bool resizeToFit)
: BView(frame, name, resizingMode, flags),
fChosenItem(NULL),
@ -1237,8 +1242,8 @@ BMenu::SetItemMargins(float left, float top, float right, float bottom)
void
BMenu::GetItemMargins(float *left, float *top, float *right,
float *bottom) const
BMenu::GetItemMargins(float* left, float* top, float* right,
float* bottom) const
{
if (left != NULL)
*left = fPad.left;
@ -1281,8 +1286,8 @@ BMenu::Hide()
}
BMenuItem *
BMenu::Track(bool sticky, BRect *clickToOpenRect)
BMenuItem*
BMenu::Track(bool sticky, BRect* clickToOpenRect)
{
if (sticky && LockLooper()) {
//RedrawAfterSticky(Bounds());
@ -1299,7 +1304,7 @@ BMenu::Track(bool sticky, BRect *clickToOpenRect)
_SetStickyMode(sticky);
int action;
BMenuItem *menuItem = _Track(&action);
BMenuItem* menuItem = _Track(&action);
fExtraRect = NULL;
@ -1351,7 +1356,7 @@ BMenu::DrawBackground(BRect update)
void
BMenu::SetTrackingHook(menu_tracking_hook func, void *state)
BMenu::SetTrackingHook(menu_tracking_hook func, void* state)
{
delete fExtraMenuData;
fExtraMenuData = new (nothrow) BPrivate::ExtraMenuData(func, state);
@ -1364,13 +1369,6 @@ void BMenu::_ReservedMenu5() {}
void BMenu::_ReservedMenu6() {}
BMenu &
BMenu::operator=(const BMenu &)
{
return *this;
}
void
BMenu::_InitData(BMessage* archive)
{
@ -1389,7 +1387,7 @@ BMenu::_InitData(BMessage* archive)
fTriggerEnabled = sMenuInfo.triggers_always_shown;
if (archive != NULL) {
archive->FindInt32("_layout", (int32 *)&fLayout);
archive->FindInt32("_layout", (int32*)&fLayout);
archive->FindBool("_rsize_to_fit", &fResizeToFit);
bool disabled;
if (archive->FindBool("_disable", &disabled) == B_OK)
@ -1405,8 +1403,8 @@ BMenu::_InitData(BMessage* archive)
BMessage msg;
for (int32 i = 0; archive->FindMessage("_items", i, &msg) == B_OK; i++) {
BArchivable *object = instantiate_object(&msg);
if (BMenuItem *item = dynamic_cast<BMenuItem *>(object)) {
BArchivable* object = instantiate_object(&msg);
if (BMenuItem* item = dynamic_cast<BMenuItem*>(object)) {
BRect bounds;
if (fLayout == B_ITEMS_IN_MATRIX
&& archive->FindRect("_i_frames", i, &bounds) == B_OK)
@ -1424,7 +1422,7 @@ BMenu::_Show(bool selectFirstItem)
{
// See if the supermenu has a cached menuwindow,
// and use that one if possible.
BMenuWindow *window = NULL;
BMenuWindow* window = NULL;
bool ourWindow = false;
if (fSuper != NULL) {
fSuperbounds = fSuper->ConvertToScreen(fSuper->Bounds());
@ -1481,7 +1479,7 @@ BMenu::_Show(bool selectFirstItem)
void
BMenu::_Hide()
{
BMenuWindow *window = dynamic_cast<BMenuWindow *>(Window());
BMenuWindow* window = dynamic_cast<BMenuWindow*>(Window());
if (window == NULL || !window->Lock())
return;
@ -1513,11 +1511,11 @@ const static int32 kMouseMotionThreshold = 15;
// TODO: Same as above. Actually, we could get rid of the kHysteresis
BMenuItem *
BMenu::_Track(int *action, long start)
BMenuItem*
BMenu::_Track(int* action, long start)
{
// TODO: cleanup
BMenuItem *item = NULL;
BMenuItem* item = NULL;
BRect navAreaRectAbove, navAreaRectBelow;
bigtime_t selectedTime = system_time();
bigtime_t navigationAreaTime = 0;
@ -1543,7 +1541,7 @@ BMenu::_Track(int *action, long start)
if (!LockLooper())
break;
BMenuWindow *window = static_cast<BMenuWindow *>(Window());
BMenuWindow* window = static_cast<BMenuWindow*>(Window());
BPoint screenLocation = ConvertToScreen(location);
if (window->CheckForScrolling(screenLocation)) {
UnlockLooper();
@ -1567,14 +1565,14 @@ BMenu::_Track(int *action, long start)
// redraw itself
UnlockLooper();
int submenuAction = MENU_STATE_TRACKING;
BMenu *submenu = fSelected->Submenu();
BMenu* submenu = fSelected->Submenu();
submenu->_SetStickyMode(_IsStickyMode());
// The following call blocks until the submenu
// gives control back to us, either because the mouse
// pointer goes out of the submenu's bounds, or because
// the user closes the menu
BMenuItem *submenuItem = submenu->_Track(&submenuAction);
BMenuItem* submenuItem = submenu->_Track(&submenuAction);
if (submenuAction == MENU_STATE_CLOSED) {
item = submenuItem;
fState = MENU_STATE_CLOSED;
@ -1627,7 +1625,8 @@ BMenu::_Track(int *action, long start)
// mouseSpeed in px per ms
// (actually point_distance returns the square of the distance,
// so it's more px^2 per ms)
mouseSpeed = (int32)(point_distance(newLocation, location) * 1000 / (newPollTime - pollTime));
mouseSpeed = (int32)(point_distance(newLocation, location) * 1000
/ (newPollTime - pollTime));
pollTime = newPollTime;
if (newLocation != location || newButtons != buttons) {
@ -1698,7 +1697,7 @@ BMenu::_UpdateNavigationArea(BPoint position, BRect& navAreaRectAbove,
if (fSelected == NULL)
return;
BMenu *submenu = fSelected->Submenu();
BMenu* submenu = fSelected->Submenu();
if (submenu != NULL) {
BRect menuBounds = ConvertToScreen(Bounds());
@ -1857,7 +1856,7 @@ BMenu::_UpdateStateClose(BMenuItem* item, const BPoint& where,
bool
BMenu::_AddItem(BMenuItem *item, int32 index)
BMenu::_AddItem(BMenuItem* item, int32 index)
{
ASSERT(item != NULL);
if (index < 0 || index > fItems.CountItems())
@ -1885,13 +1884,13 @@ BMenu::_AddItem(BMenuItem *item, int32 index)
bool
BMenu::_RemoveItems(int32 index, int32 count, BMenuItem *item, bool deleteItems)
BMenu::_RemoveItems(int32 index, int32 count, BMenuItem* item, bool deleteItems)
{
bool success = false;
bool invalidateLayout = false;
bool locked = LockLooper();
BWindow *window = Window();
BWindow* window = Window();
// The plan is simple: If we're given a BMenuItem directly, we use it
// and ignore index and count. Otherwise, we use them instead.
@ -2060,7 +2059,7 @@ BMenu::_ComputeColumnLayout(int32 index, bool bestFit, bool moveItems,
frame.Set(0, 0, 0, -1);
for (; index < fItems.CountItems(); index++) {
BMenuItem *item = ItemAt(index);
BMenuItem* item = ItemAt(index);
float width, height;
item->GetContentSize(&width, &height);
@ -2121,7 +2120,7 @@ BMenu::_ComputeRowLayout(int32 index, bool bestFit, bool moveItems,
+ fPad.bottom));
for (int32 i = 0; i < fItems.CountItems(); i++) {
BMenuItem *item = ItemAt(i);
BMenuItem* item = ItemAt(i);
float width, height;
item->GetContentSize(&width, &height);
@ -2152,7 +2151,7 @@ BMenu::_ComputeMatrixLayout(BRect &frame)
{
frame.Set(0, 0, 0, 0);
for (int32 i = 0; i < CountItems(); i++) {
BMenuItem *item = ItemAt(i);
BMenuItem* item = ItemAt(i);
if (item != NULL) {
frame.left = min_c(frame.left, item->Frame().left);
frame.right = max_c(frame.right, item->Frame().right);
@ -2167,8 +2166,8 @@ BMenu::_ComputeMatrixLayout(BRect &frame)
BPoint
BMenu::ScreenLocation()
{
BMenu *superMenu = Supermenu();
BMenuItem *superItem = Superitem();
BMenu* superMenu = Supermenu();
BMenuItem* superItem = Superitem();
if (superMenu == NULL || superItem == NULL) {
debugger("BMenu can't determine where to draw."
@ -2188,7 +2187,7 @@ BMenu::ScreenLocation()
BRect
BMenu::_CalcFrame(BPoint where, bool *scrollOn)
BMenu::_CalcFrame(BPoint where, bool* scrollOn)
{
// TODO: Improve me
BRect bounds = Bounds();
@ -2197,15 +2196,15 @@ BMenu::_CalcFrame(BPoint where, bool *scrollOn)
BScreen screen(Window());
BRect screenFrame = screen.Frame();
BMenu *superMenu = Supermenu();
BMenuItem *superItem = Superitem();
BMenu* superMenu = Supermenu();
BMenuItem* superItem = Superitem();
bool scroll = false;
// TODO: Horrible hack:
// When added to a BMenuField, a BPopUpMenu is the child of
// a _BMCMenuBar_ to "fake" the menu hierarchy
if (superMenu == NULL || superItem == NULL
|| dynamic_cast<_BMCMenuBar_ *>(superMenu) != NULL) {
|| dynamic_cast<_BMCMenuBar_*>(superMenu) != NULL) {
// just move the window on screen
if (frame.bottom > screenFrame.bottom)
@ -2217,7 +2216,6 @@ BMenu::_CalcFrame(BPoint where, bool *scrollOn)
frame.OffsetBy(screenFrame.right - frame.right, 0);
else if (frame.left < screenFrame.left)
frame.OffsetBy(-frame.left, 0);
} else if (superMenu->Layout() == B_ITEMS_IN_COLUMN) {
if (frame.right > screenFrame.right)
frame.OffsetBy(-superItem->Frame().Width() - frame.Width() - 2, 0);
@ -2230,7 +2228,7 @@ BMenu::_CalcFrame(BPoint where, bool *scrollOn)
} else {
if (frame.bottom > screenFrame.bottom) {
if (scrollOn != NULL && superMenu != NULL
&& dynamic_cast<BMenuBar *>(superMenu) != NULL
&& dynamic_cast<BMenuBar*>(superMenu) != NULL
&& frame.top < (screenFrame.bottom - 80)) {
scroll = true;
} else {
@ -2262,7 +2260,7 @@ BMenu::_DrawItems(BRect updateRect)
{
int32 itemCount = fItems.CountItems();
for (int32 i = 0; i < itemCount; i++) {
BMenuItem *item = ItemAt(i);
BMenuItem* item = ItemAt(i);
if (item->Frame().Intersects(updateRect))
item->Draw();
}
@ -2270,7 +2268,7 @@ BMenu::_DrawItems(BRect updateRect)
int
BMenu::_State(BMenuItem **item) const
BMenu::_State(BMenuItem** item) const
{
if (fState == MENU_STATE_TRACKING || fState == MENU_STATE_CLOSED)
return fState;
@ -2283,7 +2281,7 @@ BMenu::_State(BMenuItem **item) const
void
BMenu::_InvokeItem(BMenuItem *item, bool now)
BMenu::_InvokeItem(BMenuItem* item, bool now)
{
if (!item->IsEnabled())
return;
@ -2308,8 +2306,8 @@ BMenu::_InvokeItem(BMenuItem *item, bool now)
}
// Lock the root menu window before calling BMenuItem::Invoke()
BMenu *parent = this;
BMenu *rootMenu = NULL;
BMenu* parent = this;
BMenu* rootMenu = NULL;
do {
rootMenu = parent;
parent = rootMenu->Supermenu();
@ -2333,12 +2331,12 @@ BMenu::_OverSuper(BPoint location)
bool
BMenu::_OverSubmenu(BMenuItem *item, BPoint loc)
BMenu::_OverSubmenu(BMenuItem* item, BPoint loc)
{
if (item == NULL)
return false;
BMenu *subMenu = item->Submenu();
BMenu* subMenu = item->Submenu();
if (subMenu == NULL || subMenu->Window() == NULL)
return false;
@ -2350,7 +2348,7 @@ BMenu::_OverSubmenu(BMenuItem *item, BPoint loc)
}
BMenuWindow *
BMenuWindow*
BMenu::_MenuWindow()
{
#if USE_CACHED_MENUWINDOW
@ -2375,7 +2373,7 @@ BMenu::_DeleteMenuWindow()
}
BMenuItem *
BMenuItem*
BMenu::_HitTestItems(BPoint where, BPoint slop) const
{
// TODO: Take "slop" into account ?
@ -2387,7 +2385,7 @@ BMenu::_HitTestItems(BPoint where, BPoint slop) const
int32 itemCount = CountItems();
for (int32 i = 0; i < itemCount; i++) {
BMenuItem *item = ItemAt(i);
BMenuItem* item = ItemAt(i);
if (item->Frame().Contains(where))
return item;
}
@ -2415,7 +2413,7 @@ BMenu::_CacheFontInfo()
void
BMenu::_ItemMarked(BMenuItem *item)
BMenu::_ItemMarked(BMenuItem* item)
{
if (IsRadioMode()) {
for (int32 i = 0; i < CountItems(); i++) {
@ -2431,7 +2429,7 @@ BMenu::_ItemMarked(BMenuItem *item)
void
BMenu::_Install(BWindow *target)
BMenu::_Install(BWindow* target)
{
for (int32 i = 0; i < CountItems(); i++)
ItemAt(i)->Install(target);
@ -2454,7 +2452,7 @@ BMenu::_SelectItem(BMenuItem* menuItem, bool showSubmenu, bool selectFirstItem)
if (menuItem != fSelected) {
if (fSelected != NULL) {
fSelected->Select(false);
BMenu *subMenu = fSelected->Submenu();
BMenu* subMenu = fSelected->Submenu();
if (subMenu != NULL && subMenu->Window() != NULL)
subMenu->_Hide();
}
@ -2465,7 +2463,7 @@ BMenu::_SelectItem(BMenuItem* menuItem, bool showSubmenu, bool selectFirstItem)
}
if (fSelected != NULL && showSubmenu) {
BMenu *subMenu = fSelected->Submenu();
BMenu* subMenu = fSelected->Submenu();
if (subMenu != NULL && subMenu->Window() == NULL) {
if (!subMenu->_Show(selectFirstItem)) {
// something went wrong, deselect the item
@ -2478,25 +2476,25 @@ BMenu::_SelectItem(BMenuItem* menuItem, bool showSubmenu, bool selectFirstItem)
bool
BMenu::_SelectNextItem(BMenuItem *item, bool forward)
BMenu::_SelectNextItem(BMenuItem* item, bool forward)
{
if (CountItems() == 0) // cannot select next item in an empty menu
return false;
BMenuItem *nextItem = _NextItem(item, forward);
BMenuItem* nextItem = _NextItem(item, forward);
if (nextItem == NULL)
return false;
bool openMenu = false;
if (dynamic_cast<BMenuBar *>(this) != NULL)
if (dynamic_cast<BMenuBar*>(this) != NULL)
openMenu = true;
_SelectItem(nextItem, openMenu);
return true;
}
BMenuItem *
BMenu::_NextItem(BMenuItem *item, bool forward) const
BMenuItem*
BMenu::_NextItem(BMenuItem* item, bool forward) const
{
// go to next item, and skip over disabled items such as separators
int32 index = fItems.IndexOf(item);
@ -2549,7 +2547,7 @@ BMenu::_SetStickyMode(bool on)
fSuper->_SetStickyMode(on);
else {
// TODO: Ugly hack, but it needs to be done right here in this method
BMenuBar *menuBar = dynamic_cast<BMenuBar *>(this);
BMenuBar* menuBar = dynamic_cast<BMenuBar*>(this);
if (on && menuBar != NULL && menuBar->LockLooper()) {
// Steal the focus from the current focus view
// (needed to handle keyboard navigation)
@ -2581,7 +2579,7 @@ BMenu::_CalcTriggers()
// Set triggers for items which don't have one yet
for (int32 i = 0; i < CountItems(); i++) {
BMenuItem *item = ItemAt(i);
BMenuItem* item = ItemAt(i);
if (item->Trigger() == 0) {
uint32 trigger;
int32 index;
@ -2593,7 +2591,7 @@ BMenu::_CalcTriggers()
bool
BMenu::_ChooseTrigger(const char *title, int32& index, uint32& trigger,
BMenu::_ChooseTrigger(const char* title, int32& index, uint32& trigger,
BPrivate::TriggerList& triggers)
{
if (title == NULL)
@ -2629,19 +2627,19 @@ BMenu::_ChooseTrigger(const char *title, int32& index, uint32& trigger,
void
BMenu::_UpdateWindowViewSize(bool updatePosition)
{
BMenuWindow *window = static_cast<BMenuWindow *>(Window());
BMenuWindow* window = static_cast<BMenuWindow*>(Window());
if (window == NULL)
return;
if (dynamic_cast<BMenuBar *>(this) != NULL)
if (dynamic_cast<BMenuBar*>(this) != NULL)
return;
if (!fResizeToFit)
return;
bool scroll = false;
const BPoint screenLocation = updatePosition ? ScreenLocation()
: window->Frame().LeftTop();
const BPoint screenLocation = updatePosition
? ScreenLocation() : window->Frame().LeftTop();
BRect frame = _CalcFrame(screenLocation, &scroll);
ResizeTo(frame.Width(), frame.Height());
@ -2653,7 +2651,7 @@ BMenu::_UpdateWindowViewSize(bool updatePosition)
// If we need scrolling, resize the window to fit the screen and
// attach scrollers to our cached BMenuWindow.
if (dynamic_cast<BMenuBar *>(Supermenu()) == NULL) {
if (dynamic_cast<BMenuBar*>(Supermenu()) == NULL) {
window->ResizeTo(Bounds().Width(), screen.Frame().bottom);
frame.top = 0;
} else {
@ -2690,7 +2688,7 @@ BMenu::_OkToProceed(BMenuItem* item)
// TODO: I added the check for BMenuBar to solve a problem with Deskbar.
// BeOS seems to do something similar. This could also be a bug in Deskbar, though.
if ((buttons != 0 && stickyMode)
|| ((dynamic_cast<BMenuBar *>(this) == NULL
|| ((dynamic_cast<BMenuBar*>(this) == NULL
&& (buttons == 0 && !stickyMode)) || _HitTestItems(where) != item))
return false;
@ -2714,7 +2712,7 @@ void
BMenu::_QuitTracking(bool onlyThis)
{
_SelectItem(NULL);
if (BMenuBar *menuBar = dynamic_cast<BMenuBar *>(this))
if (BMenuBar* menuBar = dynamic_cast<BMenuBar*>(this))
menuBar->_RestoreFocus();
fChosenItem = NULL;
@ -2732,9 +2730,10 @@ BMenu::_QuitTracking(bool onlyThis)
// TODO: Maybe the following two methods would fit better into InterfaceDefs.cpp
// In R5, they do all the work client side, we let the app_server handle the details.
// In R5, they do all the work client side, we let the app_server handle the
// details.
status_t
set_menu_info(menu_info *info)
set_menu_info(menu_info* info)
{
if (!info)
return B_BAD_VALUE;
@ -2753,7 +2752,7 @@ set_menu_info(menu_info *info)
status_t
get_menu_info(menu_info *info)
get_menu_info(menu_info* info)
{
if (!info)
return B_BAD_VALUE;

View File

@ -8,6 +8,7 @@
* Stephan Aßmus <superstippi@gmx.de>
*/
#include <MenuBar.h>
#include <math.h>
@ -31,20 +32,21 @@ using BPrivate::gDefaultTokens;
struct menubar_data {
BMenuBar *menuBar;
int32 menuIndex;
BMenuBar* menuBar;
int32 menuIndex;
bool sticky;
bool showMenu;
bool sticky;
bool showMenu;
bool useRect;
BRect rect;
bool useRect;
BRect rect;
};
BMenuBar::BMenuBar(BRect frame, const char *title, uint32 resizeMask,
BMenuBar::BMenuBar(BRect frame, const char* title, uint32 resizeMask,
menu_layout layout, bool resizeToFit)
: BMenu(frame, title, resizeMask, B_WILL_DRAW | B_FRAME_EVENTS, layout,
:
BMenu(frame, title, resizeMask, B_WILL_DRAW | B_FRAME_EVENTS, layout,
resizeToFit),
fBorder(B_BORDER_FRAME),
fTrackingPID(-1),
@ -57,8 +59,9 @@ BMenuBar::BMenuBar(BRect frame, const char *title, uint32 resizeMask,
}
BMenuBar::BMenuBar(const char *title, menu_layout layout, uint32 flags)
: BMenu(BRect(), title, B_FOLLOW_NONE,
BMenuBar::BMenuBar(const char* title, menu_layout layout, uint32 flags)
:
BMenu(BRect(), title, B_FOLLOW_NONE,
flags | B_WILL_DRAW | B_FRAME_EVENTS | B_SUPPORTS_LAYOUT,
layout, false),
fBorder(B_BORDER_FRAME),
@ -72,8 +75,9 @@ BMenuBar::BMenuBar(const char *title, menu_layout layout, uint32 flags)
}
BMenuBar::BMenuBar(BMessage *data)
: BMenu(data),
BMenuBar::BMenuBar(BMessage* data)
:
BMenu(data),
fBorder(B_BORDER_FRAME),
fTrackingPID(-1),
fPrevFocusToken(-1),
@ -87,7 +91,7 @@ BMenuBar::BMenuBar(BMessage *data)
SetBorder((menu_bar_border)border);
menu_layout layout = B_ITEMS_IN_COLUMN;
data->FindInt32("_layout", (int32 *)&layout);
data->FindInt32("_layout", (int32*)&layout);
_InitData(layout);
}
@ -104,8 +108,8 @@ BMenuBar::~BMenuBar()
}
BArchivable *
BMenuBar::Instantiate(BMessage *data)
BArchivable*
BMenuBar::Instantiate(BMessage* data)
{
if (validate_instantiation(data, "BMenuBar"))
return new BMenuBar(data);
@ -115,7 +119,7 @@ BMenuBar::Instantiate(BMessage *data)
status_t
BMenuBar::Archive(BMessage *data, bool deep) const
BMenuBar::Archive(BMessage* data, bool deep) const
{
status_t err = BMenu::Archive(data, deep);
@ -183,7 +187,8 @@ BMenuBar::Draw(BRect updateRect)
BPoint(bounds.right, bounds.bottom - 1.0f));
SetHighColor(tint_color(noTint, B_DARKEN_2_TINT));
StrokeLine(BPoint(0.0f, bounds.bottom), BPoint(bounds.right, bounds.bottom));
StrokeLine(BPoint(0.0f, bounds.bottom),
BPoint(bounds.right, bounds.bottom));
StrokeLine(BPoint(bounds.right, 0.0f), BPoint(bounds.right, bounds.bottom));
SetHighColor(color);
@ -213,7 +218,7 @@ BMenuBar::DetachedFromWindow()
void
BMenuBar::MessageReceived(BMessage *msg)
BMenuBar::MessageReceived(BMessage* msg)
{
BMenu::MessageReceived(msg);
}
@ -225,7 +230,7 @@ BMenuBar::MouseDown(BPoint where)
if (fTracking)
return;
BWindow *window = Window();
BWindow* window = Window();
if (!window->IsActive() || !window->IsFront()) {
window->Activate();
window->UpdateIfNeeded();
@ -293,15 +298,16 @@ BMenuBar::Hide()
}
BHandler *
BMenuBar::ResolveSpecifier(BMessage *msg, int32 index, BMessage *specifier, int32 form, const char *property)
BHandler*
BMenuBar::ResolveSpecifier(BMessage* msg, int32 index, BMessage* specifier,
int32 form, const char* property)
{
return BMenu::ResolveSpecifier(msg, index, specifier, form, property);
}
status_t
BMenuBar::GetSupportedSuites(BMessage *data)
BMenuBar::GetSupportedSuites(BMessage* data)
{
return BMenu::GetSupportedSuites(data);
}
@ -315,7 +321,7 @@ BMenuBar::ResizeToPreferred()
void
BMenuBar::GetPreferredSize(float *width, float *height)
BMenuBar::GetPreferredSize(float* width, float* height)
{
BMenu::GetPreferredSize(width, height);
}
@ -373,7 +379,7 @@ BMenuBar::Perform(perform_code code, void* _data)
BMenuBar::GetHeightForWidth(data->width, &data->min, &data->max,
&data->preferred);
return B_OK;
}
}
case PERFORM_CODE_SET_LAYOUT:
{
perform_data_set_layout* data = (perform_data_set_layout*)_data;
@ -438,12 +444,13 @@ BMenuBar::operator=(const BMenuBar &)
void
BMenuBar::StartMenuBar(int32 menuIndex, bool sticky, bool showMenu, BRect *specialRect)
BMenuBar::StartMenuBar(int32 menuIndex, bool sticky, bool showMenu,
BRect* specialRect)
{
if (fTracking)
return;
BWindow *window = Window();
BWindow* window = Window();
if (window == NULL)
debugger("MenuBar must be added to a window before it can be used.");
@ -461,7 +468,8 @@ BMenuBar::StartMenuBar(int32 menuIndex, bool sticky, bool showMenu, BRect *speci
fMenuSem = create_sem(0, "window close sem");
_set_menu_sem_(window, fMenuSem);
fTrackingPID = spawn_thread(_TrackTask, "menu_tracking", B_DISPLAY_PRIORITY, NULL);
fTrackingPID = spawn_thread(_TrackTask, "menu_tracking", B_DISPLAY_PRIORITY,
NULL);
if (fTrackingPID >= 0) {
menubar_data data;
data.menuBar = this;
@ -482,15 +490,14 @@ BMenuBar::StartMenuBar(int32 menuIndex, bool sticky, bool showMenu, BRect *speci
}
/* static */
int32
BMenuBar::_TrackTask(void *arg)
/*static*/ int32
BMenuBar::_TrackTask(void* arg)
{
menubar_data data;
thread_id id;
receive_data(&id, &data, sizeof(data));
BMenuBar *menuBar = data.menuBar;
BMenuBar* menuBar = data.menuBar;
if (data.useRect)
menuBar->fExtraRect = &data.rect;
menuBar->_SetStickyMode(data.sticky);
@ -502,7 +509,7 @@ BMenuBar::_TrackTask(void *arg)
menuBar->fExtraRect = NULL;
// We aren't the BWindow thread, so don't call MenusEnded() directly
BWindow *window = menuBar->Window();
BWindow* window = menuBar->Window();
window->PostMessage(_MENUS_DONE_);
_set_menu_sem_(window, B_BAD_SEM_ID);
@ -513,13 +520,13 @@ BMenuBar::_TrackTask(void *arg)
}
BMenuItem *
BMenuBar::_Track(int32 *action, int32 startIndex, bool showMenu)
BMenuItem*
BMenuBar::_Track(int32* action, int32 startIndex, bool showMenu)
{
// TODO: Cleanup, merge some "if" blocks if possible
fChosenItem = NULL;
BWindow *window = Window();
BWindow* window = Window();
fState = MENU_STATE_TRACKING;
BPoint where;
@ -546,7 +553,7 @@ BMenuBar::_Track(int32 *action, int32 startIndex, bool showMenu)
if (_OverSubmenu(fSelected, ConvertToScreen(where))) {
// call _Track() from the selected sub-menu when the mouse cursor
// is over its window
BMenu *menu = fSelected->Submenu();
BMenu* menu = fSelected->Submenu();
window->Unlock();
snoozeAmount = 30000;
bool wasSticky = _IsStickyMode();
@ -571,7 +578,8 @@ BMenuBar::_Track(int32 *action, int32 startIndex, bool showMenu)
// that are children of BMenuFields "sticky" (see ticket #953)
if (localAction == MENU_STATE_CLOSED) {
if (fExtraRect != NULL && fExtraRect->Contains(where)
// 9 = 3 pixels ^ 2 (since point_distance() returns the square of the distance)
// 9 = 3 pixels ^ 2 (since point_distance() returns the
// square of the distance)
&& point_distance(newWhere, where) < 9) {
_SetStickyMode(true);
fExtraRect = NULL;
@ -669,9 +677,9 @@ BMenuBar::_StealFocus()
if (fPrevFocusToken != -1)
return;
BWindow *window = Window();
BWindow* window = Window();
if (window != NULL && window->Lock()) {
BView *focus = window->CurrentFocus();
BView* focus = window->CurrentFocus();
if (focus != NULL && focus != this)
fPrevFocusToken = _get_object_token_(focus);
MakeFocus();
@ -683,12 +691,13 @@ BMenuBar::_StealFocus()
void
BMenuBar::_RestoreFocus()
{
BWindow *window = Window();
BWindow* window = Window();
if (window != NULL && window->Lock()) {
BHandler *handler = NULL;
BHandler* handler = NULL;
if (fPrevFocusToken != -1
&& gDefaultTokens.GetToken(fPrevFocusToken, B_HANDLER_TOKEN, (void **)&handler) == B_OK) {
BView *view = dynamic_cast<BView *>(handler);
&& gDefaultTokens.GetToken(fPrevFocusToken, B_HANDLER_TOKEN,
(void**)&handler) == B_OK) {
BView* view = dynamic_cast<BView*>(handler);
if (view != NULL && view->Window() == window)
view->MakeFocus();

View File

@ -1,5 +1,5 @@
/*
* Copyright 2001-2008, Haiku, Inc.
* Copyright 2001-2009, Haiku, Inc.
* Distributed under the terms of the MIT License.
*
* Authors:
@ -8,6 +8,7 @@
* Ingo Weinhold <bonefish@cs.tu-berlin.de>
*/
#include <MenuField.h>
#include <stdlib.h>
@ -87,10 +88,11 @@ private:
struct BMenuField::LayoutData {
LayoutData()
: label_layout_item(NULL),
menu_bar_layout_item(NULL),
previous_height(-1),
valid(false)
:
label_layout_item(NULL),
menu_bar_layout_item(NULL),
previous_height(-1),
valid(false)
{
}
@ -113,9 +115,10 @@ struct BMenuField::LayoutData {
static float kVMargin = 2.0f;
BMenuField::BMenuField(BRect frame, const char *name, const char *label,
BMenu *menu, uint32 resize, uint32 flags)
: BView(frame, name, resize, flags)
BMenuField::BMenuField(BRect frame, const char* name, const char* label,
BMenu* menu, uint32 resize, uint32 flags)
:
BView(frame, name, resize, flags)
{
CALLED();
@ -130,9 +133,10 @@ BMenuField::BMenuField(BRect frame, const char *name, const char *label,
}
BMenuField::BMenuField(BRect frame, const char *name, const char *label,
BMenu *menu, bool fixedSize, uint32 resize, uint32 flags)
: BView(frame, name, resize, flags)
BMenuField::BMenuField(BRect frame, const char* name, const char* label,
BMenu* menu, bool fixedSize, uint32 resize, uint32 flags)
:
BView(frame, name, resize, flags)
{
InitObject(label);
@ -146,8 +150,9 @@ BMenuField::BMenuField(BRect frame, const char *name, const char *label,
BMenuField::BMenuField(const char* name, const char* label, BMenu* menu,
BMessage* message, uint32 flags)
: BView(name, flags | B_FRAME_EVENTS)
BMessage* message, uint32 flags)
:
BView(name, flags | B_FRAME_EVENTS)
{
InitObject(label);
@ -157,9 +162,9 @@ BMenuField::BMenuField(const char* name, const char* label, BMenu* menu,
}
BMenuField::BMenuField(const char* label,
BMenu* menu, BMessage* message)
: BView(NULL, B_WILL_DRAW | B_NAVIGABLE | B_FRAME_EVENTS)
BMenuField::BMenuField(const char* label, BMenu* menu, BMessage* message)
:
BView(NULL, B_WILL_DRAW | B_NAVIGABLE | B_FRAME_EVENTS)
{
InitObject(label);
@ -169,10 +174,11 @@ BMenuField::BMenuField(const char* label,
}
BMenuField::BMenuField(BMessage *data)
: BView(data)
BMenuField::BMenuField(BMessage* data)
:
BView(data)
{
const char *label = NULL;
const char* label = NULL;
data->FindString("_label", &label);
InitObject(label);
@ -200,9 +206,8 @@ BMenuField::BMenuField(BMessage *data)
bool dmark = false;
data->FindBool("be:dmark", &dmark);
if (_BMCMenuBar_ *menuBar = dynamic_cast<_BMCMenuBar_ *>(fMenuBar)) {
if (_BMCMenuBar_* menuBar = dynamic_cast<_BMCMenuBar_*>(fMenuBar))
menuBar->TogglePopUpMarker(dmark);
}
}
@ -218,8 +223,8 @@ BMenuField::~BMenuField()
}
BArchivable *
BMenuField::Instantiate(BMessage *data)
BArchivable*
BMenuField::Instantiate(BMessage* data)
{
if (validate_instantiation(data, "BMenuField"))
return new BMenuField(data);
@ -229,7 +234,7 @@ BMenuField::Instantiate(BMessage *data)
status_t
BMenuField::Archive(BMessage *data, bool deep) const
BMenuField::Archive(BMessage* data, bool deep) const
{
status_t ret = BView::Archive(data, deep);
@ -248,9 +253,9 @@ BMenuField::Archive(BMessage *data, bool deep) const
ret = data->AddBool("be:fixeds", true);
bool dmark = false;
if (_BMCMenuBar_ *menuBar = dynamic_cast<_BMCMenuBar_ *>(fMenuBar)) {
if (_BMCMenuBar_* menuBar = dynamic_cast<_BMCMenuBar_*>(fMenuBar))
dmark = menuBar->IsPopUpMarkerShown();
}
data->AddBool("be:dmark", dmark);
return ret;
@ -362,7 +367,7 @@ BMenuField::MouseDown(BPoint where)
void
BMenuField::KeyDown(const char *bytes, int32 numBytes)
BMenuField::KeyDown(const char* bytes, int32 numBytes)
{
switch (bytes[0]) {
case B_SPACE:
@ -405,7 +410,7 @@ BMenuField::MakeFocus(bool state)
void
BMenuField::MessageReceived(BMessage *msg)
BMenuField::MessageReceived(BMessage* msg)
{
BView::MessageReceived(msg);
}
@ -429,7 +434,7 @@ BMenuField::MouseUp(BPoint point)
void
BMenuField::MouseMoved(BPoint point, uint32 code, const BMessage *message)
BMenuField::MouseMoved(BPoint point, uint32 code, const BMessage* message)
{
BView::MouseMoved(point, code, message);
}
@ -472,21 +477,21 @@ BMenuField::FrameResized(float newWidth, float newHeight)
}
BMenu *
BMenu*
BMenuField::Menu() const
{
return fMenu;
}
BMenuBar *
BMenuBar*
BMenuField::MenuBar() const
{
return fMenuBar;
}
BMenuItem *
BMenuItem*
BMenuField::MenuItem() const
{
return fMenuBar->ItemAt(0);
@ -494,7 +499,7 @@ BMenuField::MenuItem() const
void
BMenuField::SetLabel(const char *label)
BMenuField::SetLabel(const char* label)
{
if (fLabel) {
if (label && strcmp(fLabel, label) == 0)
@ -512,7 +517,7 @@ BMenuField::SetLabel(const char *label)
}
const char *
const char*
BMenuField::Label() const
{
return fLabel;
@ -598,7 +603,7 @@ BMenuField::Divider() const
void
BMenuField::ShowPopUpMarker()
{
if (_BMCMenuBar_ *menuBar = dynamic_cast<_BMCMenuBar_ *>(fMenuBar)) {
if (_BMCMenuBar_* menuBar = dynamic_cast<_BMCMenuBar_*>(fMenuBar)) {
menuBar->TogglePopUpMarker(true);
menuBar->Invalidate();
}
@ -608,23 +613,23 @@ BMenuField::ShowPopUpMarker()
void
BMenuField::HidePopUpMarker()
{
if (_BMCMenuBar_ *menuBar = dynamic_cast<_BMCMenuBar_ *>(fMenuBar)) {
if (_BMCMenuBar_* menuBar = dynamic_cast<_BMCMenuBar_*>(fMenuBar)) {
menuBar->TogglePopUpMarker(false);
menuBar->Invalidate();
}
}
BHandler *
BMenuField::ResolveSpecifier(BMessage *message, int32 index,
BMessage *specifier, int32 form, const char *property)
BHandler*
BMenuField::ResolveSpecifier(BMessage* message, int32 index,
BMessage* specifier, int32 form, const char* property)
{
return BView::ResolveSpecifier(message, index, specifier, form, property);
}
status_t
BMenuField::GetSupportedSuites(BMessage *data)
BMenuField::GetSupportedSuites(BMessage* data)
{
return BView::GetSupportedSuites(data);
}
@ -658,7 +663,7 @@ BMenuField::ResizeToPreferred()
void
BMenuField::GetPreferredSize(float *_width, float *_height)
BMenuField::GetPreferredSize(float* _width, float* _height)
{
CALLED();
@ -854,15 +859,8 @@ void BMenuField::_ReservedMenuField2() {}
void BMenuField::_ReservedMenuField3() {}
BMenuField &
BMenuField::operator=(const BMenuField &)
{
return *this;
}
void
BMenuField::InitObject(const char *label)
BMenuField::InitObject(const char* label)
{
CALLED();
@ -945,23 +943,22 @@ BMenuField::DrawLabel(BRect bounds, BRect update)
void
BMenuField::InitMenu(BMenu *menu)
BMenuField::InitMenu(BMenu* menu)
{
menu->SetFont(be_plain_font);
int32 index = 0;
BMenu *subMenu;
BMenu* subMenu;
while ((subMenu = menu->SubmenuAt(index++)) != NULL)
InitMenu(subMenu);
}
/* static */
int32
BMenuField::_thread_entry(void *arg)
/*static*/ int32
BMenuField::_thread_entry(void* arg)
{
return static_cast<BMenuField *>(arg)->_MenuTask();
return static_cast<BMenuField*>(arg)->_MenuTask();
}
@ -970,12 +967,12 @@ BMenuField::_MenuTask()
{
if (!LockLooper())
return 0;
fSelected = true;
fTransition = true;
Invalidate();
UnlockLooper();
bool tracking;
do {
snooze(20000);
@ -990,7 +987,7 @@ BMenuField::_MenuTask()
if (LockLooper()) {
fSelected = false;
fTransition = true;
Invalidate();
Invalidate();
UnlockLooper();
}
@ -1040,11 +1037,11 @@ BMenuField::_InitMenuBar(BMenu* menu, BRect frame, bool fixedSize)
frame.top = kVMargin;
frame.right -= kVMargin;
frame.bottom -= kVMargin;
TRACE("frame(%.1f, %.1f, %.1f, %.1f) (%.2f, %.2f)\n",
frame.left, frame.top, frame.right, frame.bottom,
frame.Width(), frame.Height());
fMenuBar = new _BMCMenuBar_(frame, fixedSize, this);
}
@ -1098,7 +1095,7 @@ BMenuField::_ValidateLayoutData()
// TODO: BMenu::MinSize() is using the ResizeMode() to decide the
// minimum width. If the mode is B_FOLLOW_LEFT_RIGHT, it will use the
// parent's frame width or window's frame width. So at least the returned
// size is wrong, but appearantly it doesn't have much bad effect.
// size is wrong, but apparantly it doesn't have much bad effect.
fLayoutData->menu_bar_min = fMenuBar->MinSize();
TRACE("menu bar min width: %.2f\n", fLayoutData->menu_bar_min.width);
@ -1117,7 +1114,6 @@ BMenuField::_ValidateLayoutData()
fLayoutData->valid = true;
TRACE("width: %.2f, height: %.2f\n", min.width, min.height);
}

View File

@ -23,42 +23,45 @@
namespace BPrivate {
class BMenuScroller : public BView {
public:
BMenuScroller(BRect frame);
public:
BMenuScroller(BRect frame);
bool IsEnabled() const;
void SetEnabled(const bool &enabled);
private:
bool fEnabled;
bool IsEnabled() const;
void SetEnabled(bool enabled);
private:
bool fEnabled;
};
class BMenuFrame : public BView {
public:
BMenuFrame(BMenu *menu);
public:
BMenuFrame(BMenu* menu);
virtual void AttachedToWindow();
virtual void DetachedFromWindow();
virtual void Draw(BRect updateRect);
virtual void AttachedToWindow();
virtual void DetachedFromWindow();
virtual void Draw(BRect updateRect);
private:
friend class BMenuWindow;
private:
friend class BMenuWindow;
BMenu *fMenu;
BMenu* fMenu;
};
class UpperScroller : public BMenuScroller {
public:
UpperScroller(BRect frame);
virtual void Draw(BRect updateRect);
UpperScroller(BRect frame);
virtual void Draw(BRect updateRect);
};
class LowerScroller : public BMenuScroller {
public:
LowerScroller(BRect frame);
virtual void Draw(BRect updateRect);
LowerScroller(BRect frame);
virtual void Draw(BRect updateRect);
};
@ -72,7 +75,8 @@ const int kScrollerHeight = 10;
BMenuScroller::BMenuScroller(BRect frame)
: BView(frame, "menu scroller", 0, B_WILL_DRAW | B_FRAME_EVENTS),
:
BView(frame, "menu scroller", 0, B_WILL_DRAW | B_FRAME_EVENTS),
fEnabled(false)
{
SetViewColor(ui_color(B_MENU_BACKGROUND_COLOR));
@ -87,7 +91,7 @@ BMenuScroller::IsEnabled() const
void
BMenuScroller::SetEnabled(const bool &enabled)
BMenuScroller::SetEnabled(bool enabled)
{
fEnabled = enabled;
}
@ -112,15 +116,16 @@ UpperScroller::Draw(BRect updateRect)
// Draw the upper arrow.
if (IsEnabled())
SetHighColor(0, 0, 0);
else
else {
SetHighColor(tint_color(ui_color(B_MENU_BACKGROUND_COLOR),
B_DARKEN_2_TINT));
B_DARKEN_2_TINT));
}
FillRect(Bounds(), B_SOLID_LOW);
FillTriangle(BPoint(middle, (kScrollerHeight / 2) - 3),
BPoint(middle + 5, (kScrollerHeight / 2) + 2),
BPoint(middle - 5, (kScrollerHeight / 2) + 2));
BPoint(middle + 5, (kScrollerHeight / 2) + 2),
BPoint(middle - 5, (kScrollerHeight / 2) + 2));
}
@ -143,17 +148,18 @@ LowerScroller::Draw(BRect updateRect)
// Draw the lower arrow.
if (IsEnabled())
SetHighColor(0, 0, 0);
else
else {
SetHighColor(tint_color(ui_color(B_MENU_BACKGROUND_COLOR),
B_DARKEN_2_TINT));
}
FillRect(frame, B_SOLID_LOW);
float middle = Bounds().right / 2;
FillTriangle(BPoint(middle, frame.bottom - (kScrollerHeight / 2) + 3),
BPoint(middle + 5, frame.bottom - (kScrollerHeight / 2) - 2),
BPoint(middle - 5, frame.bottom - (kScrollerHeight / 2) - 2));
BPoint(middle + 5, frame.bottom - (kScrollerHeight / 2) - 2),
BPoint(middle - 5, frame.bottom - (kScrollerHeight / 2) - 2));
}
@ -161,7 +167,8 @@ LowerScroller::Draw(BRect updateRect)
BMenuFrame::BMenuFrame(BMenu *menu)
: BView(BRect(0, 0, 1, 1), "menu frame", B_FOLLOW_ALL_SIDES, B_WILL_DRAW),
:
BView(BRect(0, 0, 1, 1), "menu frame", B_FOLLOW_ALL_SIDES, B_WILL_DRAW),
fMenu(menu)
{
}
@ -205,8 +212,8 @@ BMenuFrame::Draw(BRect updateRect)
// TODO: Review this as it's a bit hacky.
// Menu has a size of 0, 0, since there are no items in it.
// So the BMenuFrame class has to fake it and draw an empty item.
// Note that we can't add a real "empty" item because then we couldn't
// tell if the item was added by us or not.
// Note that we can't add a real "empty" item because then we
// couldn't tell if the item was added by us or not.
// See also BMenu::UpdateWindowViewSize()
SetHighColor(ui_color(B_MENU_BACKGROUND_COLOR));
SetLowColor(HighColor());
@ -215,8 +222,11 @@ BMenuFrame::Draw(BRect updateRect)
font_height height;
GetFontHeight(&height);
SetHighColor(tint_color(ui_color(B_MENU_BACKGROUND_COLOR), B_DISABLED_LABEL_TINT));
BPoint where((Bounds().Width() - fMenu->StringWidth(kEmptyMenuLabel)) / 2, ceilf(height.ascent + 1));
SetHighColor(tint_color(ui_color(B_MENU_BACKGROUND_COLOR),
B_DISABLED_LABEL_TINT));
BPoint where(
(Bounds().Width() - fMenu->StringWidth(kEmptyMenuLabel)) / 2,
ceilf(height.ascent + 1));
DrawString(kEmptyMenuLabel, where);
}