Moved BMenuWindow, BMenuFrame, and BMenuScroller into the BPrivate namespace.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19360 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2006-11-22 11:52:18 +00:00
parent aa389c6b38
commit 2628e60cbc
4 changed files with 142 additions and 134 deletions
+6 -4
View File
@@ -21,8 +21,10 @@
class BMenuItem; class BMenuItem;
class BMenuBar; class BMenuBar;
class BMenuWindow;
class BMenuFrame; namespace BPrivate {
class BMenuWindow;
}
class _ExtraMenuData_; class _ExtraMenuData_;
@@ -210,7 +212,7 @@ virtual void _ReservedMenu6();
bool OverSuper(BPoint loc); bool OverSuper(BPoint loc);
bool OverSubmenu(BMenuItem *item, BPoint loc); bool OverSubmenu(BMenuItem *item, BPoint loc);
BMenuWindow *MenuWindow(); BPrivate::BMenuWindow* MenuWindow();
void DeleteMenuWindow(); void DeleteMenuWindow();
BMenuItem *HitTestItems(BPoint where, BPoint slop = B_ORIGIN) const; BMenuItem *HitTestItems(BPoint where, BPoint slop = B_ORIGIN) const;
BRect Superbounds() const; BRect Superbounds() const;
@@ -265,7 +267,7 @@ static bool sAltAsCommandKey;
BList fItems; BList fItems;
BRect fPad; BRect fPad;
BMenuItem *fSelected; BMenuItem *fSelected;
BMenuWindow *fCachedMenuWindow; BPrivate::BMenuWindow* fCachedMenuWindow;
BMenu *fSuper; BMenu *fSuper;
BMenuItem *fSuperitem; BMenuItem *fSuperitem;
BRect fSuperbounds; BRect fSuperbounds;
+15 -61
View File
@@ -1,72 +1,24 @@
//------------------------------------------------------------------------------ /*
// Copyright (c) 2003-2004, Haiku, Inc. * Copyright 2001-2006, Haiku, Inc.
// * Distributed under the terms of the MIT License.
// Permission is hereby granted, free of charge, to any person obtaining a *
// copy of this software and associated documentation files (the "Software"), * Authors:
// to deal in the Software without restriction, including without limitation * Marc Flerackers ([email protected])
// the rights to use, copy, modify, merge, publish, distribute, sublicense, * Stefano Ceccherini ([email protected])
// and/or sell copies of the Software, and to permit persons to whom the */
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//
// File Name: MenuWindow.h
// Authors: Marc Flerackers ([email protected])
// Stefano Ceccherini ([email protected])
// Description: BMenuWindow is the custom BWindow for menus.
//------------------------------------------------------------------------------
#ifndef __MENUWINDOW_H #ifndef __MENUWINDOW_H
#define __MENUWINDOW_H #define __MENUWINDOW_H
#include <Window.h> #include <Window.h>
class BMenu; class BMenu;
class BMenuScroller : public BView {
public:
BMenuScroller(BRect frame, BMenu *menu);
virtual ~BMenuScroller();
virtual void Pulse();
virtual void Draw(BRect updateRect);
private:
BMenu *fMenu;
BRect fUpperButton;
BRect fLowerButton;
float fValue;
float fLimit;
bool fUpperEnabled;
bool fLowerEnabled;
uint32 fButton;
BPoint fPosition;
};
class BMenuFrame : public BView { namespace BPrivate {
public:
BMenuFrame(BMenu *menu);
virtual void AttachedToWindow(); class BMenuFrame;
virtual void DetachedFromWindow(); class BMenuScroller;
virtual void Draw(BRect updateRect);
private:
friend class BMenuWindow;
BMenu *fMenu;
};
class BMenuWindow : public BWindow { class BMenuWindow : public BWindow {
@@ -85,4 +37,6 @@ class BMenuWindow : public BWindow {
BMenuFrame *fMenuFrame; BMenuFrame *fMenuFrame;
}; };
#endif } // namespace BPrivate
#endif // __MENUWINDOW_H
+2
View File
@@ -28,6 +28,8 @@
#include <ServerProtocol.h> #include <ServerProtocol.h>
using std::nothrow; using std::nothrow;
using BPrivate::BMenuWindow;
class _ExtraMenuData_ { class _ExtraMenuData_ {
public: public:
+119 -69
View File
@@ -5,7 +5,6 @@
* Authors: * Authors:
* Marc Flerackers (mflerackers@androme.be) * Marc Flerackers (mflerackers@androme.be)
* Stefano Ceccherini (burton666@libero.it) * Stefano Ceccherini (burton666@libero.it)
*
*/ */
//! BMenuWindow is a custom BWindow for BMenus. //! BMenuWindow is a custom BWindow for BMenus.
@@ -17,12 +16,58 @@
#include <WindowPrivate.h> #include <WindowPrivate.h>
namespace BPrivate {
class BMenuScroller : public BView {
public:
BMenuScroller(BRect frame, BMenu *menu);
virtual ~BMenuScroller();
virtual void Pulse();
virtual void Draw(BRect updateRect);
private:
BMenu *fMenu;
BRect fUpperButton;
BRect fLowerButton;
float fValue;
float fLimit;
bool fUpperEnabled;
bool fLowerEnabled;
uint32 fButton;
BPoint fPosition;
};
class BMenuFrame : public BView {
public:
BMenuFrame(BMenu *menu);
virtual ~BMenuFrame();
virtual void AttachedToWindow();
virtual void DetachedFromWindow();
virtual void Draw(BRect updateRect);
private:
friend class BMenuWindow;
BMenu *fMenu;
};
} // namespace BPrivate
using namespace BPrivate;
const int kScrollerHeight = 10; const int kScrollerHeight = 10;
const int kScrollStep = 16; const int kScrollStep = 16;
BMenuScroller::BMenuScroller(BRect frame, BMenu *menu) BMenuScroller::BMenuScroller(BRect frame, BMenu *menu)
: BView(frame, "menu scroller", 0, B_WILL_DRAW | B_FRAME_EVENTS : BView(frame, "menu scroller", 0,
| B_PULSE_NEEDED), B_WILL_DRAW | B_FRAME_EVENTS | B_PULSE_NEEDED),
fMenu(menu), fMenu(menu),
fUpperButton(0, 0, frame.right, kScrollerHeight), fUpperButton(0, 0, frame.right, kScrollerHeight),
fLowerButton(0, frame.bottom - kScrollerHeight, frame.right, frame.bottom), fLowerButton(0, frame.bottom - kScrollerHeight, frame.right, frame.bottom),
@@ -136,6 +181,77 @@ BMenuScroller::Draw(BRect updateRect)
// #pragma mark - // #pragma mark -
BMenuFrame::BMenuFrame(BMenu *menu)
: BView(BRect(0, 0, 1, 1), "menu frame", B_FOLLOW_ALL_SIDES, B_WILL_DRAW),
fMenu(menu)
{
}
BMenuFrame::~BMenuFrame()
{
}
void
BMenuFrame::AttachedToWindow()
{
BView::AttachedToWindow();
if (fMenu != NULL)
AddChild(fMenu);
ResizeTo(Window()->Bounds().Width(), Window()->Bounds().Height());
if (fMenu != NULL) {
BFont font;
fMenu->GetFont(&font);
SetFont(&font);
}
}
void
BMenuFrame::DetachedFromWindow()
{
if (fMenu != NULL)
RemoveChild(fMenu);
}
void
BMenuFrame::Draw(BRect updateRect)
{
if (fMenu != NULL && fMenu->CountItems() == 0) {
// 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.
// See also BMenu::UpdateWindowViewSize()
SetHighColor(ui_color(B_MENU_BACKGROUND_COLOR));
SetLowColor(HighColor());
FillRect(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));
DrawString(kEmptyMenuLabel, where);
}
SetHighColor(tint_color(ui_color(B_MENU_BACKGROUND_COLOR), B_DARKEN_2_TINT));
BRect bounds(Bounds());
StrokeLine(BPoint(bounds.right, bounds.top),
BPoint(bounds.right, bounds.bottom - 1));
StrokeLine(BPoint(bounds.left + 1, bounds.bottom),
BPoint(bounds.right, bounds.bottom));
}
// #pragma mark -
BMenuWindow::BMenuWindow(const char *name) BMenuWindow::BMenuWindow(const char *name)
// The window will be resized by BMenu, so just pass a dummy rect // The window will be resized by BMenu, so just pass a dummy rect
: BWindow(BRect(0, 0, 0, 0), name, B_BORDERED_WINDOW_LOOK, kMenuWindowFeel, : BWindow(BRect(0, 0, 0, 0), name, B_BORDERED_WINDOW_LOOK, kMenuWindowFeel,
@@ -216,69 +332,3 @@ BMenuWindow::DetachScrollers()
delete fScroller; delete fScroller;
fScroller = NULL; fScroller = NULL;
} }
// #pragma mark -
BMenuFrame::BMenuFrame(BMenu *menu)
: BView(BRect(0, 0, 1, 1), "menu frame", B_FOLLOW_ALL_SIDES, B_WILL_DRAW),
fMenu(menu)
{
}
void
BMenuFrame::AttachedToWindow()
{
BView::AttachedToWindow();
if (fMenu != NULL)
AddChild(fMenu);
ResizeTo(Window()->Bounds().Width(), Window()->Bounds().Height());
if (fMenu != NULL) {
BFont font;
fMenu->GetFont(&font);
SetFont(&font);
}
}
void
BMenuFrame::DetachedFromWindow()
{
if (fMenu != NULL)
RemoveChild(fMenu);
}
void
BMenuFrame::Draw(BRect updateRect)
{
if (fMenu != NULL && fMenu->CountItems() == 0) {
// 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.
// See also BMenu::UpdateWindowViewSize()
SetHighColor(ui_color(B_MENU_BACKGROUND_COLOR));
SetLowColor(HighColor());
FillRect(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));
DrawString(kEmptyMenuLabel, where);
}
SetHighColor(tint_color(ui_color(B_MENU_BACKGROUND_COLOR), B_DARKEN_2_TINT));
BRect bounds(Bounds());
StrokeLine(BPoint(bounds.right, bounds.top),
BPoint(bounds.right, bounds.bottom - 1));
StrokeLine(BPoint(bounds.left + 1, bounds.bottom),
BPoint(bounds.right, bounds.bottom));
}