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:
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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));
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user