Rewrote OptionPopUp.h and OptionControl.h
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22663 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
a637e3c53c
commit
3c5bd34432
@ -1,19 +1,11 @@
|
||||
/*******************************************************************************
|
||||
/
|
||||
/ File: OptionControl.h
|
||||
/
|
||||
/ Description: A BOptionControl is an abstract interface for BControls that select
|
||||
/ between a set of named values; the names are displayed to the user, but the
|
||||
/ corresponding values are returned in Value().
|
||||
/
|
||||
/ Copyright 1997-99, Be Incorporated, All Rights Reserved
|
||||
/
|
||||
*******************************************************************************/
|
||||
/*
|
||||
* Copyright 2001-2007, Haiku, Inc. All Rights Reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
#if !defined(_OPTION_CONTROL_H)
|
||||
#ifndef _OPTION_CONTROL_H
|
||||
#define _OPTION_CONTROL_H
|
||||
|
||||
#include <InterfaceDefs.h>
|
||||
#include <Control.h>
|
||||
|
||||
enum {
|
||||
@ -21,75 +13,54 @@ enum {
|
||||
};
|
||||
|
||||
|
||||
class BOptionControl :
|
||||
public BControl
|
||||
{
|
||||
public:
|
||||
class BOptionControl : public BControl {
|
||||
public:
|
||||
BOptionControl(BRect frame, const char *name, const char *label,
|
||||
BMessage *message,
|
||||
uint32 resizeMask = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
||||
uint32 flags = B_WILL_DRAW);
|
||||
virtual ~BOptionControl();
|
||||
|
||||
BOptionControl(
|
||||
BRect frame,
|
||||
const char * name,
|
||||
const char * label,
|
||||
BMessage * message,
|
||||
uint32 resize = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
||||
uint32 flags = B_WILL_DRAW);
|
||||
virtual ~BOptionControl();
|
||||
virtual void MessageReceived(BMessage *message);
|
||||
|
||||
virtual void MessageReceived(
|
||||
BMessage * message);
|
||||
status_t AddOption(const char *name, int32 value);
|
||||
virtual bool GetOptionAt(int32 index, const char **outName,
|
||||
int32 *outValue) = 0;
|
||||
virtual void RemoveOptionAt(int32 index) = 0;
|
||||
virtual int32 CountOptions() const = 0;
|
||||
virtual status_t AddOptionAt(const char *name, int32 value,
|
||||
int32 index) = 0;
|
||||
virtual int32 SelectedOption(const char **name = 0,
|
||||
int32 *outValue = 0) const = 0;
|
||||
|
||||
status_t AddOption(
|
||||
const char * name,
|
||||
int32 value);
|
||||
virtual bool GetOptionAt(
|
||||
int32 index,
|
||||
const char ** out_name,
|
||||
int32 * out_value) = 0;
|
||||
virtual void RemoveOptionAt(
|
||||
int32 index) = 0;
|
||||
virtual int32 CountOptions() const = 0;
|
||||
virtual status_t AddOptionAt(
|
||||
const char * name,
|
||||
int32 value,
|
||||
int32 index) = 0;
|
||||
virtual int32 SelectedOption( // index >= 0 returned directly
|
||||
const char ** name = 0,
|
||||
int32 * value = 0) const = 0;
|
||||
virtual status_t SelectOptionFor(int32 value);
|
||||
virtual status_t SelectOptionFor(const char *name);
|
||||
|
||||
virtual status_t SelectOptionFor(
|
||||
int32 value);
|
||||
virtual status_t SelectOptionFor(
|
||||
const char *name);
|
||||
protected:
|
||||
protected:
|
||||
BMessage* MakeValueMessage(int32 value);
|
||||
|
||||
BMessage * MakeValueMessage(
|
||||
int32 value);
|
||||
private:
|
||||
BOptionControl();
|
||||
BOptionControl(const BOptionControl &clone);
|
||||
BOptionControl &operator=(const BOptionControl &clone);
|
||||
|
||||
private:
|
||||
|
||||
BOptionControl(); /* private unimplemented */
|
||||
BOptionControl(
|
||||
const BOptionControl & clone);
|
||||
BOptionControl & operator=(
|
||||
const BOptionControl & clone);
|
||||
|
||||
/* Mmmh, stuffing! */
|
||||
virtual status_t _Reserved_OptionControl_0(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_1(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_2(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_3(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_4(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_5(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_6(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_7(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_8(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_9(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_10(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_11(void *, ...);
|
||||
|
||||
uint32 _reserved_selection_control_[8];
|
||||
virtual status_t _Reserved_OptionControl_0(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_1(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_2(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_3(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_4(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_5(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_6(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_7(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_8(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_9(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_10(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_11(void *, ...);
|
||||
|
||||
uint32 _reserved_selection_control_[8];
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif /* _OPTION_CONTROL_H */
|
||||
|
||||
|
@ -1,105 +1,70 @@
|
||||
/*******************************************************************************
|
||||
/
|
||||
/ File: OptionPopUp.h
|
||||
/
|
||||
/ Description: A BOptionPopUp is a BControl that has a popup menu.
|
||||
/
|
||||
/ Copyright 1997-99, Be Incorporated, All Rights Reserved
|
||||
/
|
||||
*******************************************************************************/
|
||||
/*
|
||||
* Copyright 2001-2007, Haiku, Inc. All Rights Reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
|
||||
#if !defined(_OPTION_POP_UP_H)
|
||||
#ifndef _OPTION_POP_UP_H
|
||||
#define _OPTION_POP_UP_H
|
||||
|
||||
#include <OptionControl.h>
|
||||
|
||||
|
||||
class BMenuField;
|
||||
class BOptionPopUp : public BOptionControl {
|
||||
public:
|
||||
BOptionPopUp(BRect frame, const char *name, const char *label,
|
||||
BMessage *message, uint32 resizeMask = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
||||
uint32 flags = B_WILL_DRAW);
|
||||
BOptionPopUp(BRect frame, const char *name, const char *label,
|
||||
BMessage *message, bool fixed,
|
||||
uint32 resizeMask = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
||||
uint32 flags = B_WILL_DRAW);
|
||||
~BOptionPopUp();
|
||||
|
||||
BMenuField* MenuField();
|
||||
|
||||
virtual bool GetOptionAt(int32 index, const char **outName,
|
||||
int32 *outValue);
|
||||
virtual void RemoveOptionAt(int32 index);
|
||||
virtual int32 CountOptions() const;
|
||||
virtual status_t AddOptionAt(const char *name, int32 value,
|
||||
int32 index);
|
||||
|
||||
virtual void AllAttached();
|
||||
virtual void MessageReceived(BMessage *message);
|
||||
virtual void SetLabel(const char *text);
|
||||
virtual void SetValue(int32 value);
|
||||
virtual void SetEnabled(bool enabled);
|
||||
virtual void GetPreferredSize(float *width, float *height);
|
||||
virtual void ResizeToPreferred();
|
||||
|
||||
virtual int32 SelectedOption(const char **outName = 0,
|
||||
int32 * outValue = 0) const;
|
||||
private:
|
||||
|
||||
BOptionPopUp();
|
||||
BOptionPopUp(const BOptionPopUp &clone);
|
||||
BOptionPopUp &operator=(const BOptionPopUp &clone);
|
||||
|
||||
|
||||
virtual status_t _Reserved_OptionControl_0(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_1(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_2(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_3(void *, ...);
|
||||
|
||||
class BOptionPopUp :
|
||||
public BOptionControl
|
||||
{
|
||||
public:
|
||||
BOptionPopUp(
|
||||
BRect frame,
|
||||
const char * name,
|
||||
const char * label,
|
||||
BMessage * message,
|
||||
uint32 resize = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
||||
uint32 flags = B_WILL_DRAW);
|
||||
BOptionPopUp(
|
||||
BRect frame,
|
||||
const char * name,
|
||||
const char * label,
|
||||
BMessage * message,
|
||||
bool fixed,
|
||||
uint32 resize = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
||||
uint32 flags = B_WILL_DRAW);
|
||||
~BOptionPopUp();
|
||||
|
||||
BMenuField * MenuField();
|
||||
|
||||
virtual bool GetOptionAt(
|
||||
int32 index,
|
||||
const char ** out_name,
|
||||
int32 * out_value);
|
||||
virtual void RemoveOptionAt(
|
||||
int32 index);
|
||||
virtual int32 CountOptions() const;
|
||||
virtual status_t AddOptionAt(
|
||||
const char * name,
|
||||
int32 value,
|
||||
int32 index);
|
||||
|
||||
virtual void AllAttached();
|
||||
virtual void MessageReceived(
|
||||
BMessage * message);
|
||||
virtual void SetLabel(
|
||||
const char *text);
|
||||
virtual void SetValue(
|
||||
int32 value);
|
||||
virtual void SetEnabled(
|
||||
bool on);
|
||||
virtual void GetPreferredSize(
|
||||
float *width,
|
||||
float *height);
|
||||
virtual void ResizeToPreferred();
|
||||
virtual int32 SelectedOption(
|
||||
const char ** outName = 0,
|
||||
int32 * outValue = 0) const;
|
||||
private:
|
||||
|
||||
BOptionPopUp(); /* private unimplemented */
|
||||
BOptionPopUp(
|
||||
const BOptionPopUp & clone);
|
||||
BOptionPopUp & operator=(
|
||||
const BOptionPopUp & clone);
|
||||
|
||||
/* Mmmh, stuffing! */
|
||||
virtual status_t _Reserved_OptionControl_0(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_1(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_2(void *, ...);
|
||||
virtual status_t _Reserved_OptionControl_3(void *, ...);
|
||||
/* Mmmh, stuffing! */
|
||||
virtual status_t _Reserved_OptionPopUp_0(void *, ...);
|
||||
virtual status_t _Reserved_OptionPopUp_1(void *, ...);
|
||||
virtual status_t _Reserved_OptionPopUp_2(void *, ...);
|
||||
virtual status_t _Reserved_OptionPopUp_3(void *, ...);
|
||||
virtual status_t _Reserved_OptionPopUp_4(void *, ...);
|
||||
virtual status_t _Reserved_OptionPopUp_5(void *, ...);
|
||||
virtual status_t _Reserved_OptionPopUp_6(void *, ...);
|
||||
virtual status_t _Reserved_OptionPopUp_7(void *, ...);
|
||||
virtual status_t _Reserved_OptionPopUp_0(void *, ...);
|
||||
virtual status_t _Reserved_OptionPopUp_1(void *, ...);
|
||||
virtual status_t _Reserved_OptionPopUp_2(void *, ...);
|
||||
virtual status_t _Reserved_OptionPopUp_3(void *, ...);
|
||||
virtual status_t _Reserved_OptionPopUp_4(void *, ...);
|
||||
virtual status_t _Reserved_OptionPopUp_5(void *, ...);
|
||||
virtual status_t _Reserved_OptionPopUp_6(void *, ...);
|
||||
virtual status_t _Reserved_OptionPopUp_7(void *, ...);
|
||||
|
||||
|
||||
BMenuField * _mField;
|
||||
uint32 _reserved_menu_control_[8];
|
||||
|
||||
BMenuField* fMenuField;
|
||||
uint32 _reserved_menu_control_[8];
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /* _OPTION_POP_UP_H */
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
/*
|
||||
* Copyright 2003-2005, Haiku, Inc.
|
||||
* Copyright 2003-2007, Haiku, Inc.
|
||||
* Distributed under the terms of the MIT license.
|
||||
*
|
||||
* Authors:
|
||||
* Stefano Ceccherini (burton666@libero.it)
|
||||
* Stefano Ceccherini <stefano.ceccherini@gmail.com>
|
||||
*/
|
||||
|
||||
|
||||
@ -38,8 +38,8 @@ BOptionPopUp::BOptionPopUp(BRect frame, const char *name, const char *label,
|
||||
: BOptionControl(frame, name, label, message, resize, flags)
|
||||
{
|
||||
BPopUpMenu *popUp = new BPopUpMenu(label, true, true);
|
||||
_mField = new BMenuField(Bounds(), "_menu", label, popUp);
|
||||
AddChild(_mField);
|
||||
fMenuField = new BMenuField(Bounds(), "_menu", label, popUp);
|
||||
AddChild(fMenuField);
|
||||
}
|
||||
|
||||
|
||||
@ -58,8 +58,8 @@ BOptionPopUp::BOptionPopUp(BRect frame, const char *name, const char *label,
|
||||
: BOptionControl(frame, name, label, message, resize, flags)
|
||||
{
|
||||
BPopUpMenu *popUp = new BPopUpMenu(label, true, true);
|
||||
_mField = new BMenuField(Bounds(), "_menu", label, popUp, fixed);
|
||||
AddChild(_mField);
|
||||
fMenuField = new BMenuField(Bounds(), "_menu", label, popUp, fixed);
|
||||
AddChild(fMenuField);
|
||||
}
|
||||
|
||||
|
||||
@ -74,7 +74,7 @@ BOptionPopUp::~BOptionPopUp()
|
||||
BMenuField *
|
||||
BOptionPopUp::MenuField()
|
||||
{
|
||||
return _mField;
|
||||
return fMenuField;
|
||||
}
|
||||
|
||||
|
||||
@ -91,7 +91,7 @@ bool
|
||||
BOptionPopUp::GetOptionAt(int32 index, const char **outName, int32 *outValue)
|
||||
{
|
||||
bool result = false;
|
||||
BMenu *menu = _mField->Menu();
|
||||
BMenu *menu = fMenuField->Menu();
|
||||
|
||||
if (menu != NULL) {
|
||||
BMenuItem *item = menu->ItemAt(index);
|
||||
@ -115,7 +115,7 @@ BOptionPopUp::GetOptionAt(int32 index, const char **outName, int32 *outValue)
|
||||
void
|
||||
BOptionPopUp::RemoveOptionAt(int32 index)
|
||||
{
|
||||
BMenu *menu = _mField->Menu();
|
||||
BMenu *menu = fMenuField->Menu();
|
||||
if (menu != NULL) {
|
||||
BMenuItem *item = menu->ItemAt(index);
|
||||
if (item != NULL) {
|
||||
@ -131,7 +131,7 @@ BOptionPopUp::RemoveOptionAt(int32 index)
|
||||
int32
|
||||
BOptionPopUp::CountOptions() const
|
||||
{
|
||||
BMenu *menu = _mField->Menu();
|
||||
BMenu *menu = fMenuField->Menu();
|
||||
return (menu != NULL) ? menu->CountItems() : 0;
|
||||
}
|
||||
|
||||
@ -147,7 +147,7 @@ BOptionPopUp::CountOptions() const
|
||||
status_t
|
||||
BOptionPopUp::AddOptionAt(const char *name, int32 value, int32 index)
|
||||
{
|
||||
BMenu *menu = _mField->Menu();
|
||||
BMenu *menu = fMenuField->Menu();
|
||||
if (menu == NULL)
|
||||
return B_ERROR;
|
||||
|
||||
@ -182,10 +182,10 @@ BOptionPopUp::AddOptionAt(const char *name, int32 value, int32 index)
|
||||
void
|
||||
BOptionPopUp::AllAttached()
|
||||
{
|
||||
BMenu *menu = _mField->Menu();
|
||||
BMenu *menu = fMenuField->Menu();
|
||||
if (menu != NULL) {
|
||||
float labelWidth = _mField->StringWidth(_mField->Label());
|
||||
_mField->SetDivider(labelWidth + kLabelSpace);
|
||||
float labelWidth = fMenuField->StringWidth(fMenuField->Label());
|
||||
fMenuField->SetDivider(labelWidth + kLabelSpace);
|
||||
menu->SetTargetForItems(this);
|
||||
}
|
||||
}
|
||||
@ -205,11 +205,11 @@ void
|
||||
BOptionPopUp::SetLabel(const char *text)
|
||||
{
|
||||
BControl::SetLabel(text);
|
||||
_mField->SetLabel(text);
|
||||
fMenuField->SetLabel(text);
|
||||
// We are not sure the menu can keep the whole
|
||||
// string as label, so we ask it what label it's got
|
||||
float newWidth = _mField->StringWidth(_mField->Label());
|
||||
_mField->SetDivider(newWidth + kLabelSpace);
|
||||
float newWidth = fMenuField->StringWidth(fMenuField->Label());
|
||||
fMenuField->SetDivider(newWidth + kLabelSpace);
|
||||
}
|
||||
|
||||
|
||||
@ -221,7 +221,7 @@ void
|
||||
BOptionPopUp::SetValue(int32 value)
|
||||
{
|
||||
BControl::SetValue(value);
|
||||
BMenu *menu = _mField->Menu();
|
||||
BMenu *menu = fMenuField->Menu();
|
||||
if (menu == NULL)
|
||||
return;
|
||||
|
||||
@ -267,7 +267,7 @@ BOptionPopUp::GetPreferredSize(float* _width, float* _height)
|
||||
// Calculate control's height, looking at the BMenuField font's height
|
||||
if (_height != NULL) {
|
||||
font_height fontHeight;
|
||||
_mField->GetFontHeight(&fontHeight);
|
||||
fMenuField->GetFontHeight(&fontHeight);
|
||||
|
||||
*_height = fontHeight.ascent + fontHeight.descent
|
||||
+ fontHeight.leading + kHeightModifier;
|
||||
@ -275,7 +275,7 @@ BOptionPopUp::GetPreferredSize(float* _width, float* _height)
|
||||
|
||||
if (_width != NULL) {
|
||||
float maxWidth = 0;
|
||||
BMenu *menu = _mField->Menu();
|
||||
BMenu *menu = fMenuField->Menu();
|
||||
if (menu == NULL)
|
||||
return;
|
||||
|
||||
@ -291,7 +291,7 @@ BOptionPopUp::GetPreferredSize(float* _width, float* _height)
|
||||
}
|
||||
}
|
||||
|
||||
maxWidth += _mField->StringWidth(BControl::Label()) + kLabelSpace + kWidthModifier;
|
||||
maxWidth += fMenuField->StringWidth(BControl::Label()) + kLabelSpace + kWidthModifier;
|
||||
*_width = maxWidth;
|
||||
}
|
||||
}
|
||||
@ -309,8 +309,8 @@ BOptionPopUp::ResizeToPreferred()
|
||||
GetPreferredSize(&width, &height);
|
||||
ResizeTo(width, height);
|
||||
|
||||
float newWidth = _mField->StringWidth(BControl::Label());
|
||||
_mField->SetDivider(newWidth + kLabelSpace);
|
||||
float newWidth = fMenuField->StringWidth(BControl::Label());
|
||||
fMenuField->SetDivider(newWidth + kLabelSpace);
|
||||
}
|
||||
|
||||
|
||||
@ -322,7 +322,7 @@ BOptionPopUp::ResizeToPreferred()
|
||||
int32
|
||||
BOptionPopUp::SelectedOption(const char **outName, int32 *outValue) const
|
||||
{
|
||||
BMenu *menu = _mField->Menu();
|
||||
BMenu *menu = fMenuField->Menu();
|
||||
if (menu != NULL) {
|
||||
BMenuItem *marked = menu->FindMarked();
|
||||
if (marked != NULL) {
|
||||
|
Loading…
Reference in New Issue
Block a user