with only a little modification could be generic
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4626 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
2c4c7d0466
commit
1395ff56f4
@ -22,91 +22,69 @@ WXDLLEXPORT_DATA(extern const char*) wxRadioBoxNameStr;
|
||||
|
||||
// List box item
|
||||
class WXDLLEXPORT wxBitmap ;
|
||||
|
||||
class WXDLLEXPORT wxRadioButton ;
|
||||
|
||||
class WXDLLEXPORT wxRadioBox: public wxControl
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxRadioBox)
|
||||
|
||||
DECLARE_DYNAMIC_CLASS(wxRadioBox)
|
||||
public:
|
||||
wxRadioBox();
|
||||
// Constructors & destructor
|
||||
wxRadioBox();
|
||||
inline wxRadioBox(wxWindow *parent, wxWindowID id, const wxString& title,
|
||||
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
|
||||
int n = 0, const wxString choices[] = NULL,
|
||||
int majorDim = 0, long style = wxRA_HORIZONTAL,
|
||||
const wxValidator& val = wxDefaultValidator, const wxString& name = wxRadioBoxNameStr)
|
||||
{
|
||||
Create(parent, id, title, pos, size, n, choices, majorDim, style, val, name);
|
||||
}
|
||||
~wxRadioBox();
|
||||
bool Create(wxWindow *parent, wxWindowID id, const wxString& title,
|
||||
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
|
||||
int n = 0, const wxString choices[] = NULL,
|
||||
int majorDim = 0, long style = wxRA_HORIZONTAL,
|
||||
const wxValidator& val = wxDefaultValidator, const wxString& name = wxRadioBoxNameStr);
|
||||
|
||||
wxRadioBox(wxWindow *parent, wxWindowID id, const wxString& title,
|
||||
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
|
||||
int n = 0, const wxString choices[] = NULL,
|
||||
int majorDim = 0, long style = wxRA_HORIZONTAL,
|
||||
const wxValidator& val = wxDefaultValidator, const wxString& name = wxRadioBoxNameStr)
|
||||
{
|
||||
Create(parent, id, title, pos, size, n, choices, majorDim, style, val, name);
|
||||
}
|
||||
// Specific functions (in wxWindows2 reference)
|
||||
void Enable(bool enable);
|
||||
void Enable(int item, bool enable);
|
||||
int FindString(const wxString& s) const;
|
||||
wxString GetLabel() const;
|
||||
wxString GetLabel(int item) const;
|
||||
int GetSelection() const;
|
||||
wxString GetString(int item) const;
|
||||
virtual wxString GetStringSelection() const;
|
||||
inline virtual int Number() const { return m_noItems; } ;
|
||||
void SetLabel(const wxString& label) ;
|
||||
void SetLabel(int item, const wxString& label) ;
|
||||
void SetSelection(int item);
|
||||
virtual bool SetStringSelection(const wxString& s);
|
||||
bool Show(bool show);
|
||||
void Show(int item, bool show) ;
|
||||
|
||||
~wxRadioBox();
|
||||
// Other external functions
|
||||
void Command(wxCommandEvent& event);
|
||||
void SetFocus();
|
||||
|
||||
bool Create(wxWindow *parent, wxWindowID id, const wxString& title,
|
||||
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
|
||||
int n = 0, const wxString choices[] = NULL,
|
||||
int majorDim = 0, long style = wxRA_HORIZONTAL,
|
||||
const wxValidator& val = wxDefaultValidator, const wxString& name = wxRadioBoxNameStr);
|
||||
|
||||
int FindString(const wxString& s) const;
|
||||
void SetSelection(int N);
|
||||
int GetSelection() const;
|
||||
wxString GetString(int N) const;
|
||||
|
||||
void GetSize(int *x, int *y) const;
|
||||
void GetPosition(int *x, int *y) const;
|
||||
|
||||
void SetLabel(int item, const wxString& label);
|
||||
void SetLabel(int item, wxBitmap *bitmap);
|
||||
wxString GetLabel(int item) const;
|
||||
bool Show(bool show);
|
||||
void SetFocus();
|
||||
bool Enable(bool enable);
|
||||
void Enable(int item, bool enable);
|
||||
void Show(int item, bool show);
|
||||
void SetLabelFont(const wxFont& WXUNUSED(font)) {};
|
||||
void SetButtonFont(const wxFont& font) { SetFont(font); }
|
||||
|
||||
virtual wxString GetStringSelection() const;
|
||||
virtual bool SetStringSelection(const wxString& s);
|
||||
virtual int Number() const { return m_noItems; };
|
||||
void Command(wxCommandEvent& event);
|
||||
|
||||
int GetNumberOfRowsOrCols() const { return m_noRowsOrCols; }
|
||||
void SetNumberOfRowsOrCols(int n) { m_noRowsOrCols = n; }
|
||||
|
||||
// implementation only from now on
|
||||
// -------------------------------
|
||||
|
||||
wxRadioButton *GetRadioButtons() const { return m_radioButtons; }
|
||||
void SendNotificationEvent();
|
||||
|
||||
// get the number of buttons per column/row
|
||||
int GetNumVer() const;
|
||||
int GetNumHor() const;
|
||||
|
||||
#if WXWIN_COMPATIBILITY
|
||||
wxRadioBox(wxWindow *parent, wxFunction func, const char *title,
|
||||
int x = -1, int y = -1, int width = -1, int height = -1,
|
||||
int n = 0, char **choices = NULL,
|
||||
int majorDim = 0, long style = wxRA_HORIZONTAL, const char *name = wxRadioBoxNameStr);
|
||||
#endif // WXWIN_COMPATIBILITY
|
||||
// Other variable access functions
|
||||
inline int GetNumberOfRowsOrCols() const { return m_noRowsOrCols; }
|
||||
inline void SetNumberOfRowsOrCols(int n) { m_noRowsOrCols = n; }
|
||||
|
||||
protected:
|
||||
void SubclassRadioButton(WXHWND hWndBtn);
|
||||
wxRadioButton *m_radioButtonCycle;
|
||||
|
||||
int m_majorDim ;
|
||||
int m_noItems;
|
||||
int m_noRowsOrCols;
|
||||
|
||||
wxRadioButton * m_radioButtons;
|
||||
int m_majorDim;
|
||||
int * m_radioWidth; // for bitmaps
|
||||
int * m_radioHeight;
|
||||
|
||||
int m_noItems;
|
||||
int m_noRowsOrCols;
|
||||
int m_selectedButton;
|
||||
|
||||
virtual void DoSetSize(int x, int y,
|
||||
// Internal functions
|
||||
virtual void DoSetSize(int x, int y,
|
||||
int width, int height,
|
||||
int sizeFlags = wxSIZE_AUTO);
|
||||
int GetNumHor() const;
|
||||
int GetNumVer() const;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -2,54 +2,89 @@
|
||||
// Name: radiobox.cpp
|
||||
// Purpose: wxRadioBox
|
||||
// Author: AUTHOR
|
||||
// Modified by:
|
||||
// Modified by: JS Lair (99/11/15) first implementation
|
||||
// Created: ??/??/98
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) AUTHOR
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// headers
|
||||
//-------------------------------------------------------------------------------------
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma implementation "radiobox.h"
|
||||
#endif
|
||||
|
||||
#include "wx/radiobox.h"
|
||||
#include <wx/mac/uma.h>
|
||||
|
||||
#if !USE_SHARED_LIBRARY
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl)
|
||||
#endif
|
||||
|
||||
// Radio box item
|
||||
#pragma mark -
|
||||
#pragma mark ### Constructors & destructor ###
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ wxRadioBox()
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Default constructor
|
||||
|
||||
wxRadioBox::wxRadioBox()
|
||||
{
|
||||
m_selectedButton = -1;
|
||||
m_noItems = 0;
|
||||
m_noRowsOrCols = 0;
|
||||
m_majorDim = 0 ;
|
||||
m_radioButtonCycle = NULL;
|
||||
}
|
||||
|
||||
bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title,
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ wxRadioBox(wxWindow*, wxWindowID, const wxString&, const wxPoint&,
|
||||
// const wxSize&, int, const wxString[], int, long,
|
||||
// const wxValidator&, const wxString&)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Contructor, creating and showing a radiobox
|
||||
//
|
||||
// inline defined
|
||||
//
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ ~wxRadioBox
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Destructor, destroying the radiobox item
|
||||
|
||||
wxRadioBox::~wxRadioBox()
|
||||
{
|
||||
wxRadioButton *next,*current;
|
||||
|
||||
current=m_radioButtonCycle->NextInCycle();
|
||||
next=current->NextInCycle();
|
||||
while (current!=m_radioButtonCycle) {
|
||||
delete current;
|
||||
current=next;
|
||||
next=current->NextInCycle();
|
||||
}
|
||||
delete current;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ Create
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Create the radiobox for two-step construction
|
||||
|
||||
bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
|
||||
const wxPoint& pos, const wxSize& size,
|
||||
int n, const wxString choices[],
|
||||
int majorDim, long style,
|
||||
const wxValidator& val, const wxString& name)
|
||||
{
|
||||
m_selectedButton = -1;
|
||||
int i;
|
||||
|
||||
m_noItems = n;
|
||||
|
||||
SetName(name);
|
||||
SetValidator(val);
|
||||
|
||||
parent->AddChild(this);
|
||||
|
||||
m_windowStyle = (long&)style;
|
||||
|
||||
if (id == -1)
|
||||
m_windowId = NewControlId();
|
||||
else
|
||||
m_windowId = id;
|
||||
|
||||
m_noRowsOrCols = majorDim;
|
||||
m_radioButtonCycle = NULL;
|
||||
|
||||
if (majorDim==0)
|
||||
m_majorDim = n ;
|
||||
@ -57,98 +92,161 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title,
|
||||
m_majorDim = majorDim ;
|
||||
|
||||
|
||||
// TODO create radiobox
|
||||
return FALSE;
|
||||
Rect bounds ;
|
||||
Str255 title ;
|
||||
|
||||
MacPreControlCreate( parent , id , label , pos , size ,style, *((wxValidator*)NULL) , name , &bounds , title ) ;
|
||||
|
||||
m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , true , 0 , 0 , 1,
|
||||
kControlGroupBoxTextTitleProc , (long) this ) ;
|
||||
|
||||
MacPostControlCreate() ;
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
wxRadioButton *radBtn = new wxRadioButton(this, NewControlId(),choices[i],wxPoint(5,20*i+10));
|
||||
m_radioButtonCycle=radBtn->AddInCycle(m_radioButtonCycle);
|
||||
}
|
||||
|
||||
SetSelection(0);
|
||||
SetSize(pos.x,pos.y,size.x,size.y);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
wxRadioBox::~wxRadioBox()
|
||||
#pragma mark -
|
||||
#pragma mark ### Specific functions (reference v2) ###
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ Enable(bool)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Enables or disables the entire radiobox
|
||||
|
||||
void wxRadioBox::Enable(bool enable)
|
||||
{
|
||||
// TODO
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
wxControl::Enable(enable);
|
||||
|
||||
current=m_radioButtonCycle;
|
||||
for (i=0;i<m_noItems;i++) {
|
||||
current->Enable(enable);
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ Enable(int, bool)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Enables or disables an given button
|
||||
|
||||
void wxRadioBox::Enable(int item, bool enable)
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
if ((item < 0) || (item >= m_noItems))
|
||||
return;
|
||||
i=0;
|
||||
current=m_radioButtonCycle;
|
||||
while (i!=item) {
|
||||
i++;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
return current->Enable(enable);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ FindString
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Finds a button matching the given string, returning the position if found
|
||||
// or -1 if not found
|
||||
|
||||
int wxRadioBox::FindString(const wxString& s) const
|
||||
{
|
||||
// TODO
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
current=m_radioButtonCycle;
|
||||
for (i = 0; i < m_noItems; i++)
|
||||
{
|
||||
if (s == current->GetLabel())
|
||||
return i;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void wxRadioBox::SetSelection(int n)
|
||||
{
|
||||
if ((n < 0) || (n >= m_noItems))
|
||||
return;
|
||||
// TODO
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ GetLabel()
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Returns the radiobox label
|
||||
|
||||
m_selectedButton = n;
|
||||
wxString wxRadioBox::GetLabel() const
|
||||
{
|
||||
return wxControl::GetLabel();
|
||||
}
|
||||
|
||||
// Get single selection, for single choice list items
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ GetLabel(int)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Returns the label for the given button
|
||||
|
||||
wxString wxRadioBox::GetLabel(int item) const
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
if ((item < 0) || (item >= m_noItems))
|
||||
return wxString("");
|
||||
i=0;
|
||||
current=m_radioButtonCycle;
|
||||
while (i!=item) {
|
||||
i++;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
return current->GetLabel();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ GetSelection
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Returns the zero-based position of the selected button
|
||||
|
||||
int wxRadioBox::GetSelection() const
|
||||
{
|
||||
return m_selectedButton;
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
i=0;
|
||||
current=m_radioButtonCycle;
|
||||
while (!current->GetValue()) {
|
||||
i++;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ GetString
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Find string for position
|
||||
wxString wxRadioBox::GetString(int n) const
|
||||
|
||||
wxString wxRadioBox::GetString(int item) const
|
||||
{
|
||||
// TODO
|
||||
return wxString("");
|
||||
|
||||
return GetLabel(item);
|
||||
}
|
||||
|
||||
void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
|
||||
{
|
||||
wxControl::DoSetSize( x , y , width , height , sizeFlags ) ;
|
||||
}
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ GetStringSelection
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Returns the selected string
|
||||
|
||||
void wxRadioBox::GetSize(int *width, int *height) const
|
||||
{
|
||||
wxControl::GetSize( width , height ) ;
|
||||
}
|
||||
|
||||
void wxRadioBox::GetPosition(int *x, int *y) const
|
||||
{
|
||||
wxControl::GetPosition( x , y ) ;
|
||||
}
|
||||
|
||||
wxString wxRadioBox::GetLabel( int item ) const
|
||||
{
|
||||
// TODO
|
||||
return wxString("");
|
||||
}
|
||||
|
||||
void wxRadioBox::SetLabel(int item , const wxString& label)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void wxRadioBox::SetFocus()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
bool wxRadioBox::Show(bool show)
|
||||
{
|
||||
return wxControl::Show( show ) ;
|
||||
}
|
||||
|
||||
// Enable a specific button
|
||||
void wxRadioBox::Enable(int item, bool enable)
|
||||
{
|
||||
}
|
||||
|
||||
// Enable all controls
|
||||
bool wxRadioBox::Enable(bool enable)
|
||||
{
|
||||
return wxControl::Enable(enable);
|
||||
}
|
||||
|
||||
// Show a specific button
|
||||
void wxRadioBox::Show(int item, bool show)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// For single selection items only
|
||||
wxString wxRadioBox::GetStringSelection () const
|
||||
{
|
||||
int sel = GetSelection ();
|
||||
@ -158,6 +256,74 @@ wxString wxRadioBox::GetStringSelection () const
|
||||
return wxString("");
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ Number
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Returns the number of buttons in the radiobox
|
||||
//
|
||||
// inline defined
|
||||
//
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ SetLabel(const wxString&)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Sets the radiobox label
|
||||
|
||||
void wxRadioBox::SetLabel(const wxString& label)
|
||||
{
|
||||
return wxControl::SetLabel(label);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ SetLabel(int, const wxString&)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Sets the label of a given button
|
||||
|
||||
void wxRadioBox::SetLabel(int item,const wxString& label)
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
if ((item < 0) || (item >= m_noItems))
|
||||
return;
|
||||
i=0;
|
||||
current=m_radioButtonCycle;
|
||||
while (i!=item) {
|
||||
i++;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
return current->SetLabel(label);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ SetSelection
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Sets a button by passing the desired position. This does not cause
|
||||
// wxEVT_COMMAND_RADIOBOX_SELECTED event to get emitted
|
||||
|
||||
void wxRadioBox::SetSelection(int item)
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
if ((item < 0) || (item >= m_noItems))
|
||||
return;
|
||||
i=0;
|
||||
current=m_radioButtonCycle;
|
||||
while (i!=item) {
|
||||
i++;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
current->SetValue(true);
|
||||
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ SetStringSelection
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Sets a button by passing the desired string. This does not cause
|
||||
// wxEVT_COMMAND_RADIOBOX_SELECTED event to get emitted
|
||||
|
||||
bool wxRadioBox::SetStringSelection (const wxString& s)
|
||||
{
|
||||
int sel = FindString (s);
|
||||
@ -170,10 +336,208 @@ bool wxRadioBox::SetStringSelection (const wxString& s)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ Show(bool)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Shows or hides the entire radiobox
|
||||
|
||||
bool wxRadioBox::Show(bool show)
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
wxControl::Show(show);
|
||||
|
||||
current=m_radioButtonCycle;
|
||||
for (i=0;i<m_noItems;i++) {
|
||||
current->Show(show);
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ Show(int, bool)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Shows or hides the given button
|
||||
|
||||
void wxRadioBox::Show(int item, bool show)
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
if ((item < 0) || (item >= m_noItems))
|
||||
return;
|
||||
i=0;
|
||||
current=m_radioButtonCycle;
|
||||
while (i!=item) {
|
||||
i++;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
current->Show(show);
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark ### Other external functions ###
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ Command
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Simulates the effect of the user issuing a command to the item
|
||||
|
||||
void wxRadioBox::Command (wxCommandEvent & event)
|
||||
{
|
||||
SetSelection (event.m_commandInt);
|
||||
SetSelection (event.GetInt());
|
||||
ProcessCommand (event);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ SetFocus
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Sets the selected button to receive keyboard input
|
||||
|
||||
void wxRadioBox::SetFocus()
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
i=0;
|
||||
current=m_radioButtonCycle;
|
||||
while (!current->GetValue()) {
|
||||
i++;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
current->SetFocus();
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark ### Internal functions ###
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ DoSetSize
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Simulates the effect of the user issuing a command to the item
|
||||
|
||||
#define RADIO_SIZE 20
|
||||
|
||||
void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
// define the position
|
||||
|
||||
int x_current, y_current;
|
||||
int x_offset,y_offset;
|
||||
|
||||
x_offset = x;
|
||||
y_offset = y;
|
||||
GetPosition(&x_current, &y_current);
|
||||
if ((x == -1) || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
|
||||
x_offset = x_current;
|
||||
if ((y == -1) || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
|
||||
y_offset = y_current;
|
||||
|
||||
// define size
|
||||
|
||||
int charWidth,charHeight;
|
||||
int maxWidth,maxHeight;
|
||||
int eachWidth[128],eachHeight[128];
|
||||
int totWidth,totHeight;
|
||||
|
||||
SetFont(GetParent()->GetFont());
|
||||
GetTextExtent(wxString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), &charWidth, &charHeight);
|
||||
charWidth/=52;
|
||||
|
||||
maxWidth=-1;
|
||||
maxHeight=-1;
|
||||
for (i = 0 ; i < m_noItems; i++)
|
||||
{
|
||||
GetTextExtent(GetLabel(i), &eachWidth[i], &eachHeight[i]);
|
||||
eachWidth[i] = (int)(eachWidth[i] + RADIO_SIZE);
|
||||
eachHeight[i] = (int)((3*eachHeight[i])/2);
|
||||
if (maxWidth<eachWidth[i]) maxWidth = eachWidth[i];
|
||||
if (maxHeight<eachHeight[i]) maxHeight = eachHeight[i];
|
||||
}
|
||||
|
||||
totHeight = GetNumVer() * (maxHeight + charHeight/2) + charHeight*3/2;
|
||||
totWidth = GetNumHor() * (maxWidth + charWidth) + charWidth;
|
||||
|
||||
wxControl::DoSetSize(x_offset,y_offset,totWidth,totHeight);
|
||||
|
||||
// arrange radiobuttons
|
||||
|
||||
int x_start,y_start;
|
||||
|
||||
|
||||
x_start = charWidth;
|
||||
y_start = charHeight*3/2;
|
||||
x_offset = x_start;
|
||||
y_offset = y_start;
|
||||
|
||||
current=m_radioButtonCycle;
|
||||
for ( i = 0 ; i < m_noItems; i++)
|
||||
{
|
||||
if (i&&((i%m_majorDim)==0)) // not to do for the zero button!
|
||||
{
|
||||
if (m_windowStyle & wxRA_VERTICAL)
|
||||
{
|
||||
x_offset += maxWidth + charWidth;
|
||||
y_offset = y_start;
|
||||
}
|
||||
else
|
||||
{
|
||||
x_offset = x_start;
|
||||
y_offset += maxHeight + charHeight/2;
|
||||
}
|
||||
}
|
||||
|
||||
current->SetSize(x_offset,y_offset,eachWidth[i],eachHeight[i]);
|
||||
current=current->NextInCycle();
|
||||
|
||||
if (m_windowStyle & wxRA_SPECIFY_ROWS)
|
||||
y_offset += maxHeight + charHeight/2;
|
||||
else
|
||||
x_offset += maxWidth + charWidth;
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ GetNumVer
|
||||
//-------------------------------------------------------------------------------------
|
||||
// return the number of buttons in the vertical direction
|
||||
|
||||
int wxRadioBox::GetNumVer() const
|
||||
{
|
||||
if ( m_windowStyle & wxRA_SPECIFY_ROWS )
|
||||
{
|
||||
return m_majorDim;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (m_noItems + m_majorDim - 1)/m_majorDim;
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ GetNumHor
|
||||
//-------------------------------------------------------------------------------------
|
||||
// return the number of buttons in the horizontal direction
|
||||
|
||||
int wxRadioBox::GetNumHor() const
|
||||
{
|
||||
if ( m_windowStyle & wxRA_SPECIFY_ROWS )
|
||||
{
|
||||
return (m_noItems + m_majorDim - 1)/m_majorDim;
|
||||
}
|
||||
else
|
||||
{
|
||||
return m_majorDim;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -2,54 +2,89 @@
|
||||
// Name: radiobox.cpp
|
||||
// Purpose: wxRadioBox
|
||||
// Author: AUTHOR
|
||||
// Modified by:
|
||||
// Modified by: JS Lair (99/11/15) first implementation
|
||||
// Created: ??/??/98
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) AUTHOR
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// headers
|
||||
//-------------------------------------------------------------------------------------
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma implementation "radiobox.h"
|
||||
#endif
|
||||
|
||||
#include "wx/radiobox.h"
|
||||
#include <wx/mac/uma.h>
|
||||
|
||||
#if !USE_SHARED_LIBRARY
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl)
|
||||
#endif
|
||||
|
||||
// Radio box item
|
||||
#pragma mark -
|
||||
#pragma mark ### Constructors & destructor ###
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ wxRadioBox()
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Default constructor
|
||||
|
||||
wxRadioBox::wxRadioBox()
|
||||
{
|
||||
m_selectedButton = -1;
|
||||
m_noItems = 0;
|
||||
m_noRowsOrCols = 0;
|
||||
m_majorDim = 0 ;
|
||||
m_radioButtonCycle = NULL;
|
||||
}
|
||||
|
||||
bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title,
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ wxRadioBox(wxWindow*, wxWindowID, const wxString&, const wxPoint&,
|
||||
// const wxSize&, int, const wxString[], int, long,
|
||||
// const wxValidator&, const wxString&)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Contructor, creating and showing a radiobox
|
||||
//
|
||||
// inline defined
|
||||
//
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ ~wxRadioBox
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Destructor, destroying the radiobox item
|
||||
|
||||
wxRadioBox::~wxRadioBox()
|
||||
{
|
||||
wxRadioButton *next,*current;
|
||||
|
||||
current=m_radioButtonCycle->NextInCycle();
|
||||
next=current->NextInCycle();
|
||||
while (current!=m_radioButtonCycle) {
|
||||
delete current;
|
||||
current=next;
|
||||
next=current->NextInCycle();
|
||||
}
|
||||
delete current;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ Create
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Create the radiobox for two-step construction
|
||||
|
||||
bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
|
||||
const wxPoint& pos, const wxSize& size,
|
||||
int n, const wxString choices[],
|
||||
int majorDim, long style,
|
||||
const wxValidator& val, const wxString& name)
|
||||
{
|
||||
m_selectedButton = -1;
|
||||
int i;
|
||||
|
||||
m_noItems = n;
|
||||
|
||||
SetName(name);
|
||||
SetValidator(val);
|
||||
|
||||
parent->AddChild(this);
|
||||
|
||||
m_windowStyle = (long&)style;
|
||||
|
||||
if (id == -1)
|
||||
m_windowId = NewControlId();
|
||||
else
|
||||
m_windowId = id;
|
||||
|
||||
m_noRowsOrCols = majorDim;
|
||||
m_radioButtonCycle = NULL;
|
||||
|
||||
if (majorDim==0)
|
||||
m_majorDim = n ;
|
||||
@ -57,98 +92,161 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title,
|
||||
m_majorDim = majorDim ;
|
||||
|
||||
|
||||
// TODO create radiobox
|
||||
return FALSE;
|
||||
Rect bounds ;
|
||||
Str255 title ;
|
||||
|
||||
MacPreControlCreate( parent , id , label , pos , size ,style, *((wxValidator*)NULL) , name , &bounds , title ) ;
|
||||
|
||||
m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , true , 0 , 0 , 1,
|
||||
kControlGroupBoxTextTitleProc , (long) this ) ;
|
||||
|
||||
MacPostControlCreate() ;
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
wxRadioButton *radBtn = new wxRadioButton(this, NewControlId(),choices[i],wxPoint(5,20*i+10));
|
||||
m_radioButtonCycle=radBtn->AddInCycle(m_radioButtonCycle);
|
||||
}
|
||||
|
||||
SetSelection(0);
|
||||
SetSize(pos.x,pos.y,size.x,size.y);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
wxRadioBox::~wxRadioBox()
|
||||
#pragma mark -
|
||||
#pragma mark ### Specific functions (reference v2) ###
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ Enable(bool)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Enables or disables the entire radiobox
|
||||
|
||||
void wxRadioBox::Enable(bool enable)
|
||||
{
|
||||
// TODO
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
wxControl::Enable(enable);
|
||||
|
||||
current=m_radioButtonCycle;
|
||||
for (i=0;i<m_noItems;i++) {
|
||||
current->Enable(enable);
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ Enable(int, bool)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Enables or disables an given button
|
||||
|
||||
void wxRadioBox::Enable(int item, bool enable)
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
if ((item < 0) || (item >= m_noItems))
|
||||
return;
|
||||
i=0;
|
||||
current=m_radioButtonCycle;
|
||||
while (i!=item) {
|
||||
i++;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
return current->Enable(enable);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ FindString
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Finds a button matching the given string, returning the position if found
|
||||
// or -1 if not found
|
||||
|
||||
int wxRadioBox::FindString(const wxString& s) const
|
||||
{
|
||||
// TODO
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
current=m_radioButtonCycle;
|
||||
for (i = 0; i < m_noItems; i++)
|
||||
{
|
||||
if (s == current->GetLabel())
|
||||
return i;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void wxRadioBox::SetSelection(int n)
|
||||
{
|
||||
if ((n < 0) || (n >= m_noItems))
|
||||
return;
|
||||
// TODO
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ GetLabel()
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Returns the radiobox label
|
||||
|
||||
m_selectedButton = n;
|
||||
wxString wxRadioBox::GetLabel() const
|
||||
{
|
||||
return wxControl::GetLabel();
|
||||
}
|
||||
|
||||
// Get single selection, for single choice list items
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ GetLabel(int)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Returns the label for the given button
|
||||
|
||||
wxString wxRadioBox::GetLabel(int item) const
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
if ((item < 0) || (item >= m_noItems))
|
||||
return wxString("");
|
||||
i=0;
|
||||
current=m_radioButtonCycle;
|
||||
while (i!=item) {
|
||||
i++;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
return current->GetLabel();
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ GetSelection
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Returns the zero-based position of the selected button
|
||||
|
||||
int wxRadioBox::GetSelection() const
|
||||
{
|
||||
return m_selectedButton;
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
i=0;
|
||||
current=m_radioButtonCycle;
|
||||
while (!current->GetValue()) {
|
||||
i++;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ GetString
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Find string for position
|
||||
wxString wxRadioBox::GetString(int n) const
|
||||
|
||||
wxString wxRadioBox::GetString(int item) const
|
||||
{
|
||||
// TODO
|
||||
return wxString("");
|
||||
|
||||
return GetLabel(item);
|
||||
}
|
||||
|
||||
void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
|
||||
{
|
||||
wxControl::DoSetSize( x , y , width , height , sizeFlags ) ;
|
||||
}
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ GetStringSelection
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Returns the selected string
|
||||
|
||||
void wxRadioBox::GetSize(int *width, int *height) const
|
||||
{
|
||||
wxControl::GetSize( width , height ) ;
|
||||
}
|
||||
|
||||
void wxRadioBox::GetPosition(int *x, int *y) const
|
||||
{
|
||||
wxControl::GetPosition( x , y ) ;
|
||||
}
|
||||
|
||||
wxString wxRadioBox::GetLabel( int item ) const
|
||||
{
|
||||
// TODO
|
||||
return wxString("");
|
||||
}
|
||||
|
||||
void wxRadioBox::SetLabel(int item , const wxString& label)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void wxRadioBox::SetFocus()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
bool wxRadioBox::Show(bool show)
|
||||
{
|
||||
return wxControl::Show( show ) ;
|
||||
}
|
||||
|
||||
// Enable a specific button
|
||||
void wxRadioBox::Enable(int item, bool enable)
|
||||
{
|
||||
}
|
||||
|
||||
// Enable all controls
|
||||
bool wxRadioBox::Enable(bool enable)
|
||||
{
|
||||
return wxControl::Enable(enable);
|
||||
}
|
||||
|
||||
// Show a specific button
|
||||
void wxRadioBox::Show(int item, bool show)
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
// For single selection items only
|
||||
wxString wxRadioBox::GetStringSelection () const
|
||||
{
|
||||
int sel = GetSelection ();
|
||||
@ -158,6 +256,74 @@ wxString wxRadioBox::GetStringSelection () const
|
||||
return wxString("");
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ Number
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Returns the number of buttons in the radiobox
|
||||
//
|
||||
// inline defined
|
||||
//
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ SetLabel(const wxString&)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Sets the radiobox label
|
||||
|
||||
void wxRadioBox::SetLabel(const wxString& label)
|
||||
{
|
||||
return wxControl::SetLabel(label);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ SetLabel(int, const wxString&)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Sets the label of a given button
|
||||
|
||||
void wxRadioBox::SetLabel(int item,const wxString& label)
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
if ((item < 0) || (item >= m_noItems))
|
||||
return;
|
||||
i=0;
|
||||
current=m_radioButtonCycle;
|
||||
while (i!=item) {
|
||||
i++;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
return current->SetLabel(label);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ SetSelection
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Sets a button by passing the desired position. This does not cause
|
||||
// wxEVT_COMMAND_RADIOBOX_SELECTED event to get emitted
|
||||
|
||||
void wxRadioBox::SetSelection(int item)
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
if ((item < 0) || (item >= m_noItems))
|
||||
return;
|
||||
i=0;
|
||||
current=m_radioButtonCycle;
|
||||
while (i!=item) {
|
||||
i++;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
current->SetValue(true);
|
||||
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ SetStringSelection
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Sets a button by passing the desired string. This does not cause
|
||||
// wxEVT_COMMAND_RADIOBOX_SELECTED event to get emitted
|
||||
|
||||
bool wxRadioBox::SetStringSelection (const wxString& s)
|
||||
{
|
||||
int sel = FindString (s);
|
||||
@ -170,10 +336,208 @@ bool wxRadioBox::SetStringSelection (const wxString& s)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ Show(bool)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Shows or hides the entire radiobox
|
||||
|
||||
bool wxRadioBox::Show(bool show)
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
wxControl::Show(show);
|
||||
|
||||
current=m_radioButtonCycle;
|
||||
for (i=0;i<m_noItems;i++) {
|
||||
current->Show(show);
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ Show(int, bool)
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Shows or hides the given button
|
||||
|
||||
void wxRadioBox::Show(int item, bool show)
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
if ((item < 0) || (item >= m_noItems))
|
||||
return;
|
||||
i=0;
|
||||
current=m_radioButtonCycle;
|
||||
while (i!=item) {
|
||||
i++;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
current->Show(show);
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark ### Other external functions ###
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ Command
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Simulates the effect of the user issuing a command to the item
|
||||
|
||||
void wxRadioBox::Command (wxCommandEvent & event)
|
||||
{
|
||||
SetSelection (event.m_commandInt);
|
||||
SetSelection (event.GetInt());
|
||||
ProcessCommand (event);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ SetFocus
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Sets the selected button to receive keyboard input
|
||||
|
||||
void wxRadioBox::SetFocus()
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
i=0;
|
||||
current=m_radioButtonCycle;
|
||||
while (!current->GetValue()) {
|
||||
i++;
|
||||
current=current->NextInCycle();
|
||||
}
|
||||
current->SetFocus();
|
||||
}
|
||||
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark ### Internal functions ###
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ DoSetSize
|
||||
//-------------------------------------------------------------------------------------
|
||||
// Simulates the effect of the user issuing a command to the item
|
||||
|
||||
#define RADIO_SIZE 20
|
||||
|
||||
void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
|
||||
{
|
||||
int i;
|
||||
wxRadioButton *current;
|
||||
|
||||
// define the position
|
||||
|
||||
int x_current, y_current;
|
||||
int x_offset,y_offset;
|
||||
|
||||
x_offset = x;
|
||||
y_offset = y;
|
||||
GetPosition(&x_current, &y_current);
|
||||
if ((x == -1) || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
|
||||
x_offset = x_current;
|
||||
if ((y == -1) || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
|
||||
y_offset = y_current;
|
||||
|
||||
// define size
|
||||
|
||||
int charWidth,charHeight;
|
||||
int maxWidth,maxHeight;
|
||||
int eachWidth[128],eachHeight[128];
|
||||
int totWidth,totHeight;
|
||||
|
||||
SetFont(GetParent()->GetFont());
|
||||
GetTextExtent(wxString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), &charWidth, &charHeight);
|
||||
charWidth/=52;
|
||||
|
||||
maxWidth=-1;
|
||||
maxHeight=-1;
|
||||
for (i = 0 ; i < m_noItems; i++)
|
||||
{
|
||||
GetTextExtent(GetLabel(i), &eachWidth[i], &eachHeight[i]);
|
||||
eachWidth[i] = (int)(eachWidth[i] + RADIO_SIZE);
|
||||
eachHeight[i] = (int)((3*eachHeight[i])/2);
|
||||
if (maxWidth<eachWidth[i]) maxWidth = eachWidth[i];
|
||||
if (maxHeight<eachHeight[i]) maxHeight = eachHeight[i];
|
||||
}
|
||||
|
||||
totHeight = GetNumVer() * (maxHeight + charHeight/2) + charHeight*3/2;
|
||||
totWidth = GetNumHor() * (maxWidth + charWidth) + charWidth;
|
||||
|
||||
wxControl::DoSetSize(x_offset,y_offset,totWidth,totHeight);
|
||||
|
||||
// arrange radiobuttons
|
||||
|
||||
int x_start,y_start;
|
||||
|
||||
|
||||
x_start = charWidth;
|
||||
y_start = charHeight*3/2;
|
||||
x_offset = x_start;
|
||||
y_offset = y_start;
|
||||
|
||||
current=m_radioButtonCycle;
|
||||
for ( i = 0 ; i < m_noItems; i++)
|
||||
{
|
||||
if (i&&((i%m_majorDim)==0)) // not to do for the zero button!
|
||||
{
|
||||
if (m_windowStyle & wxRA_VERTICAL)
|
||||
{
|
||||
x_offset += maxWidth + charWidth;
|
||||
y_offset = y_start;
|
||||
}
|
||||
else
|
||||
{
|
||||
x_offset = x_start;
|
||||
y_offset += maxHeight + charHeight/2;
|
||||
}
|
||||
}
|
||||
|
||||
current->SetSize(x_offset,y_offset,eachWidth[i],eachHeight[i]);
|
||||
current=current->NextInCycle();
|
||||
|
||||
if (m_windowStyle & wxRA_SPECIFY_ROWS)
|
||||
y_offset += maxHeight + charHeight/2;
|
||||
else
|
||||
x_offset += maxWidth + charWidth;
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ GetNumVer
|
||||
//-------------------------------------------------------------------------------------
|
||||
// return the number of buttons in the vertical direction
|
||||
|
||||
int wxRadioBox::GetNumVer() const
|
||||
{
|
||||
if ( m_windowStyle & wxRA_SPECIFY_ROWS )
|
||||
{
|
||||
return m_majorDim;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (m_noItems + m_majorDim - 1)/m_majorDim;
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------
|
||||
// ¥ GetNumHor
|
||||
//-------------------------------------------------------------------------------------
|
||||
// return the number of buttons in the horizontal direction
|
||||
|
||||
int wxRadioBox::GetNumHor() const
|
||||
{
|
||||
if ( m_windowStyle & wxRA_SPECIFY_ROWS )
|
||||
{
|
||||
return (m_noItems + m_majorDim - 1)/m_majorDim;
|
||||
}
|
||||
else
|
||||
{
|
||||
return m_majorDim;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user