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:
Stefano Ceccherini
2007-10-22 14:59:04 +00:00
parent a637e3c53c
commit 3c5bd34432
3 changed files with 124 additions and 188 deletions
+24 -53
View File
@@ -1,19 +1,11 @@
/******************************************************************************* /*
/ * Copyright 2001-2007, Haiku, Inc. All Rights Reserved.
/ File: OptionControl.h * Distributed under the terms of the MIT License.
/ */
/ 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
/
*******************************************************************************/
#if !defined(_OPTION_CONTROL_H) #ifndef _OPTION_CONTROL_H
#define _OPTION_CONTROL_H #define _OPTION_CONTROL_H
#include <InterfaceDefs.h>
#include <Control.h> #include <Control.h>
enum { enum {
@@ -21,59 +13,37 @@ enum {
}; };
class BOptionControl : class BOptionControl : public BControl {
public BControl
{
public: public:
BOptionControl(BRect frame, const char *name, const char *label,
BOptionControl(
BRect frame,
const char * name,
const char * label,
BMessage *message, BMessage *message,
uint32 resize = B_FOLLOW_LEFT | B_FOLLOW_TOP, uint32 resizeMask = B_FOLLOW_LEFT | B_FOLLOW_TOP,
uint32 flags = B_WILL_DRAW); uint32 flags = B_WILL_DRAW);
virtual ~BOptionControl(); virtual ~BOptionControl();
virtual void MessageReceived( virtual void MessageReceived(BMessage *message);
BMessage * message);
status_t AddOption( status_t AddOption(const char *name, int32 value);
const char * name, virtual bool GetOptionAt(int32 index, const char **outName,
int32 value); int32 *outValue) = 0;
virtual bool GetOptionAt( virtual void RemoveOptionAt(int32 index) = 0;
int32 index,
const char ** out_name,
int32 * out_value) = 0;
virtual void RemoveOptionAt(
int32 index) = 0;
virtual int32 CountOptions() const = 0; virtual int32 CountOptions() const = 0;
virtual status_t AddOptionAt( virtual status_t AddOptionAt(const char *name, int32 value,
const char * name,
int32 value,
int32 index) = 0; int32 index) = 0;
virtual int32 SelectedOption( // index >= 0 returned directly virtual int32 SelectedOption(const char **name = 0,
const char ** name = 0, int32 *outValue = 0) const = 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: private:
BOptionControl();
BOptionControl(const BOptionControl &clone);
BOptionControl &operator=(const BOptionControl &clone);
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_0(void *, ...);
virtual status_t _Reserved_OptionControl_1(void *, ...); virtual status_t _Reserved_OptionControl_1(void *, ...);
virtual status_t _Reserved_OptionControl_2(void *, ...); virtual status_t _Reserved_OptionControl_2(void *, ...);
@@ -93,3 +63,4 @@ virtual status_t _Reserved_OptionControl_11(void *, ...);
#endif /* _OPTION_CONTROL_H */ #endif /* _OPTION_CONTROL_H */
+29 -64
View File
@@ -1,89 +1,57 @@
/******************************************************************************* /*
/ * Copyright 2001-2007, Haiku, Inc. All Rights Reserved.
/ File: OptionPopUp.h * Distributed under the terms of the MIT License.
/ */
/ Description: A BOptionPopUp is a BControl that has a popup menu.
/
/ Copyright 1997-99, Be Incorporated, All Rights Reserved
/
*******************************************************************************/
#ifndef _OPTION_POP_UP_H
#if !defined(_OPTION_POP_UP_H)
#define _OPTION_POP_UP_H #define _OPTION_POP_UP_H
#include <OptionControl.h> #include <OptionControl.h>
class BMenuField; class BMenuField;
class BOptionPopUp : public BOptionControl {
class BOptionPopUp :
public BOptionControl
{
public: public:
BOptionPopUp( BOptionPopUp(BRect frame, const char *name, const char *label,
BRect frame, BMessage *message, uint32 resizeMask = B_FOLLOW_LEFT | B_FOLLOW_TOP,
const char * name,
const char * label,
BMessage * message,
uint32 resize = B_FOLLOW_LEFT | B_FOLLOW_TOP,
uint32 flags = B_WILL_DRAW); uint32 flags = B_WILL_DRAW);
BOptionPopUp( BOptionPopUp(BRect frame, const char *name, const char *label,
BRect frame, BMessage *message, bool fixed,
const char * name, uint32 resizeMask = B_FOLLOW_LEFT | B_FOLLOW_TOP,
const char * label,
BMessage * message,
bool fixed,
uint32 resize = B_FOLLOW_LEFT | B_FOLLOW_TOP,
uint32 flags = B_WILL_DRAW); uint32 flags = B_WILL_DRAW);
~BOptionPopUp(); ~BOptionPopUp();
BMenuField* MenuField(); BMenuField* MenuField();
virtual bool GetOptionAt( virtual bool GetOptionAt(int32 index, const char **outName,
int32 index, int32 *outValue);
const char ** out_name, virtual void RemoveOptionAt(int32 index);
int32 * out_value);
virtual void RemoveOptionAt(
int32 index);
virtual int32 CountOptions() const; virtual int32 CountOptions() const;
virtual status_t AddOptionAt( virtual status_t AddOptionAt(const char *name, int32 value,
const char * name,
int32 value,
int32 index); int32 index);
virtual void AllAttached(); virtual void AllAttached();
virtual void MessageReceived( virtual void MessageReceived(BMessage *message);
BMessage * message); virtual void SetLabel(const char *text);
virtual void SetLabel( virtual void SetValue(int32 value);
const char *text); virtual void SetEnabled(bool enabled);
virtual void SetValue( virtual void GetPreferredSize(float *width, float *height);
int32 value);
virtual void SetEnabled(
bool on);
virtual void GetPreferredSize(
float *width,
float *height);
virtual void ResizeToPreferred(); virtual void ResizeToPreferred();
virtual int32 SelectedOption(
const char ** outName = 0, virtual int32 SelectedOption(const char **outName = 0,
int32 * outValue = 0) const; int32 * outValue = 0) const;
private: private:
BOptionPopUp(); /* private unimplemented */ BOptionPopUp();
BOptionPopUp( BOptionPopUp(const BOptionPopUp &clone);
const BOptionPopUp & clone); BOptionPopUp &operator=(const BOptionPopUp &clone);
BOptionPopUp & operator=(
const BOptionPopUp & clone);
/* Mmmh, stuffing! */
virtual status_t _Reserved_OptionControl_0(void *, ...); virtual status_t _Reserved_OptionControl_0(void *, ...);
virtual status_t _Reserved_OptionControl_1(void *, ...); virtual status_t _Reserved_OptionControl_1(void *, ...);
virtual status_t _Reserved_OptionControl_2(void *, ...); virtual status_t _Reserved_OptionControl_2(void *, ...);
virtual status_t _Reserved_OptionControl_3(void *, ...); virtual status_t _Reserved_OptionControl_3(void *, ...);
/* Mmmh, stuffing! */
virtual status_t _Reserved_OptionPopUp_0(void *, ...); virtual status_t _Reserved_OptionPopUp_0(void *, ...);
virtual status_t _Reserved_OptionPopUp_1(void *, ...); virtual status_t _Reserved_OptionPopUp_1(void *, ...);
virtual status_t _Reserved_OptionPopUp_2(void *, ...); virtual status_t _Reserved_OptionPopUp_2(void *, ...);
@@ -94,12 +62,9 @@ virtual status_t _Reserved_OptionPopUp_6(void *, ...);
virtual status_t _Reserved_OptionPopUp_7(void *, ...); virtual status_t _Reserved_OptionPopUp_7(void *, ...);
BMenuField * _mField; BMenuField* fMenuField;
uint32 _reserved_menu_control_[8]; uint32 _reserved_menu_control_[8];
}; };
#endif /* _OPTION_POP_UP_H */ #endif /* _OPTION_POP_UP_H */
+24 -24
View File
@@ -1,9 +1,9 @@
/* /*
* Copyright 2003-2005, Haiku, Inc. * Copyright 2003-2007, Haiku, Inc.
* Distributed under the terms of the MIT license. * Distributed under the terms of the MIT license.
* *
* Authors: * Authors:
* Stefano Ceccherini ([email protected]) * Stefano Ceccherini <[email protected]>
*/ */
@@ -38,8 +38,8 @@ BOptionPopUp::BOptionPopUp(BRect frame, const char *name, const char *label,
: BOptionControl(frame, name, label, message, resize, flags) : BOptionControl(frame, name, label, message, resize, flags)
{ {
BPopUpMenu *popUp = new BPopUpMenu(label, true, true); BPopUpMenu *popUp = new BPopUpMenu(label, true, true);
_mField = new BMenuField(Bounds(), "_menu", label, popUp); fMenuField = new BMenuField(Bounds(), "_menu", label, popUp);
AddChild(_mField); AddChild(fMenuField);
} }
@@ -58,8 +58,8 @@ BOptionPopUp::BOptionPopUp(BRect frame, const char *name, const char *label,
: BOptionControl(frame, name, label, message, resize, flags) : BOptionControl(frame, name, label, message, resize, flags)
{ {
BPopUpMenu *popUp = new BPopUpMenu(label, true, true); BPopUpMenu *popUp = new BPopUpMenu(label, true, true);
_mField = new BMenuField(Bounds(), "_menu", label, popUp, fixed); fMenuField = new BMenuField(Bounds(), "_menu", label, popUp, fixed);
AddChild(_mField); AddChild(fMenuField);
} }
@@ -74,7 +74,7 @@ BOptionPopUp::~BOptionPopUp()
BMenuField * BMenuField *
BOptionPopUp::MenuField() BOptionPopUp::MenuField()
{ {
return _mField; return fMenuField;
} }
@@ -91,7 +91,7 @@ bool
BOptionPopUp::GetOptionAt(int32 index, const char **outName, int32 *outValue) BOptionPopUp::GetOptionAt(int32 index, const char **outName, int32 *outValue)
{ {
bool result = false; bool result = false;
BMenu *menu = _mField->Menu(); BMenu *menu = fMenuField->Menu();
if (menu != NULL) { if (menu != NULL) {
BMenuItem *item = menu->ItemAt(index); BMenuItem *item = menu->ItemAt(index);
@@ -115,7 +115,7 @@ BOptionPopUp::GetOptionAt(int32 index, const char **outName, int32 *outValue)
void void
BOptionPopUp::RemoveOptionAt(int32 index) BOptionPopUp::RemoveOptionAt(int32 index)
{ {
BMenu *menu = _mField->Menu(); BMenu *menu = fMenuField->Menu();
if (menu != NULL) { if (menu != NULL) {
BMenuItem *item = menu->ItemAt(index); BMenuItem *item = menu->ItemAt(index);
if (item != NULL) { if (item != NULL) {
@@ -131,7 +131,7 @@ BOptionPopUp::RemoveOptionAt(int32 index)
int32 int32
BOptionPopUp::CountOptions() const BOptionPopUp::CountOptions() const
{ {
BMenu *menu = _mField->Menu(); BMenu *menu = fMenuField->Menu();
return (menu != NULL) ? menu->CountItems() : 0; return (menu != NULL) ? menu->CountItems() : 0;
} }
@@ -147,7 +147,7 @@ BOptionPopUp::CountOptions() const
status_t status_t
BOptionPopUp::AddOptionAt(const char *name, int32 value, int32 index) BOptionPopUp::AddOptionAt(const char *name, int32 value, int32 index)
{ {
BMenu *menu = _mField->Menu(); BMenu *menu = fMenuField->Menu();
if (menu == NULL) if (menu == NULL)
return B_ERROR; return B_ERROR;
@@ -182,10 +182,10 @@ BOptionPopUp::AddOptionAt(const char *name, int32 value, int32 index)
void void
BOptionPopUp::AllAttached() BOptionPopUp::AllAttached()
{ {
BMenu *menu = _mField->Menu(); BMenu *menu = fMenuField->Menu();
if (menu != NULL) { if (menu != NULL) {
float labelWidth = _mField->StringWidth(_mField->Label()); float labelWidth = fMenuField->StringWidth(fMenuField->Label());
_mField->SetDivider(labelWidth + kLabelSpace); fMenuField->SetDivider(labelWidth + kLabelSpace);
menu->SetTargetForItems(this); menu->SetTargetForItems(this);
} }
} }
@@ -205,11 +205,11 @@ void
BOptionPopUp::SetLabel(const char *text) BOptionPopUp::SetLabel(const char *text)
{ {
BControl::SetLabel(text); BControl::SetLabel(text);
_mField->SetLabel(text); fMenuField->SetLabel(text);
// We are not sure the menu can keep the whole // We are not sure the menu can keep the whole
// string as label, so we ask it what label it's got // string as label, so we ask it what label it's got
float newWidth = _mField->StringWidth(_mField->Label()); float newWidth = fMenuField->StringWidth(fMenuField->Label());
_mField->SetDivider(newWidth + kLabelSpace); fMenuField->SetDivider(newWidth + kLabelSpace);
} }
@@ -221,7 +221,7 @@ void
BOptionPopUp::SetValue(int32 value) BOptionPopUp::SetValue(int32 value)
{ {
BControl::SetValue(value); BControl::SetValue(value);
BMenu *menu = _mField->Menu(); BMenu *menu = fMenuField->Menu();
if (menu == NULL) if (menu == NULL)
return; return;
@@ -267,7 +267,7 @@ BOptionPopUp::GetPreferredSize(float* _width, float* _height)
// Calculate control's height, looking at the BMenuField font's height // Calculate control's height, looking at the BMenuField font's height
if (_height != NULL) { if (_height != NULL) {
font_height fontHeight; font_height fontHeight;
_mField->GetFontHeight(&fontHeight); fMenuField->GetFontHeight(&fontHeight);
*_height = fontHeight.ascent + fontHeight.descent *_height = fontHeight.ascent + fontHeight.descent
+ fontHeight.leading + kHeightModifier; + fontHeight.leading + kHeightModifier;
@@ -275,7 +275,7 @@ BOptionPopUp::GetPreferredSize(float* _width, float* _height)
if (_width != NULL) { if (_width != NULL) {
float maxWidth = 0; float maxWidth = 0;
BMenu *menu = _mField->Menu(); BMenu *menu = fMenuField->Menu();
if (menu == NULL) if (menu == NULL)
return; 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; *_width = maxWidth;
} }
} }
@@ -309,8 +309,8 @@ BOptionPopUp::ResizeToPreferred()
GetPreferredSize(&width, &height); GetPreferredSize(&width, &height);
ResizeTo(width, height); ResizeTo(width, height);
float newWidth = _mField->StringWidth(BControl::Label()); float newWidth = fMenuField->StringWidth(BControl::Label());
_mField->SetDivider(newWidth + kLabelSpace); fMenuField->SetDivider(newWidth + kLabelSpace);
} }
@@ -322,7 +322,7 @@ BOptionPopUp::ResizeToPreferred()
int32 int32
BOptionPopUp::SelectedOption(const char **outName, int32 *outValue) const BOptionPopUp::SelectedOption(const char **outName, int32 *outValue) const
{ {
BMenu *menu = _mField->Menu(); BMenu *menu = fMenuField->Menu();
if (menu != NULL) { if (menu != NULL) {
BMenuItem *marked = menu->FindMarked(); BMenuItem *marked = menu->FindMarked();
if (marked != NULL) { if (marked != NULL) {