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
+2
View File
@@ -28,6 +28,8 @@
#include <ServerProtocol.h>
using std::nothrow;
using BPrivate::BMenuWindow;
class _ExtraMenuData_ {
public:
+119 -69
View File
@@ -5,7 +5,6 @@
* Authors:
* Marc Flerackers (mflerackers@androme.be)
* Stefano Ceccherini (burton666@libero.it)
*
*/
//! BMenuWindow is a custom BWindow for BMenus.
@@ -17,12 +16,58 @@
#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 kScrollStep = 16;
BMenuScroller::BMenuScroller(BRect frame, BMenu *menu)
: BView(frame, "menu scroller", 0, B_WILL_DRAW | B_FRAME_EVENTS
| B_PULSE_NEEDED),
: BView(frame, "menu scroller", 0,
B_WILL_DRAW | B_FRAME_EVENTS | B_PULSE_NEEDED),
fMenu(menu),
fUpperButton(0, 0, frame.right, kScrollerHeight),
fLowerButton(0, frame.bottom - kScrollerHeight, frame.right, frame.bottom),
@@ -136,6 +181,77 @@ BMenuScroller::Draw(BRect updateRect)
// #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)
// 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,
@@ -216,69 +332,3 @@ BMenuWindow::DetachScrollers()
delete fScroller;
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));
}