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

View File

@ -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 */

View File

@ -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 */

View File

@ -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) {