corrected scrolling problems for controls, switched to separate wxSpinCtrl implementation, both wxComboBox and wxSpinCtrl now have proper parenting for their members
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16352 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -51,7 +51,7 @@ class wxComboBoxText : public wxTextCtrl
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
wxComboBoxText( wxComboBox * cb )
|
wxComboBoxText( wxComboBox * cb )
|
||||||
: wxTextCtrl( cb->GetParent(), 1 )
|
: wxTextCtrl( cb , 1 )
|
||||||
{
|
{
|
||||||
m_cb = cb;
|
m_cb = cb;
|
||||||
}
|
}
|
||||||
@@ -81,7 +81,7 @@ class wxComboBoxChoice : public wxChoice
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
wxComboBoxChoice(wxComboBox *cb, int style)
|
wxComboBoxChoice(wxComboBox *cb, int style)
|
||||||
: wxChoice( cb->GetParent(), 1 )
|
: wxChoice( cb , 1 )
|
||||||
{
|
{
|
||||||
m_cb = cb;
|
m_cb = cb;
|
||||||
}
|
}
|
||||||
@@ -145,13 +145,13 @@ void wxComboBox::DoMoveWindow(int x, int y, int width, int height) {
|
|||||||
|
|
||||||
if ( m_text == 0 )
|
if ( m_text == 0 )
|
||||||
{
|
{
|
||||||
m_choice->SetSize(x, y, width, -1);
|
m_choice->SetSize(0, 0 , width, -1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxCoord wText = width - POPUPWIDTH;
|
wxCoord wText = width - POPUPWIDTH;
|
||||||
m_text->SetSize(x, y, wText, height);
|
m_text->SetSize(0, 0, wText, height);
|
||||||
m_choice->SetSize(x + wText + MARGIN, y, POPUPWIDTH, -1);
|
m_choice->SetSize(0 + wText + MARGIN, 0, POPUPWIDTH, -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,13 +166,6 @@ bool wxComboBox::Enable(bool enable)
|
|||||||
if ( !wxControl::Enable(enable) )
|
if ( !wxControl::Enable(enable) )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
m_choice->Enable(enable);
|
|
||||||
|
|
||||||
if ( m_text != 0 )
|
|
||||||
{
|
|
||||||
m_text->Enable(enable);
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,17 +174,6 @@ bool wxComboBox::Show(bool show)
|
|||||||
if ( !wxControl::Show(show) )
|
if ( !wxControl::Show(show) )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
// under GTK Show() is called the first time before we are fully
|
|
||||||
// constructed
|
|
||||||
if ( m_choice )
|
|
||||||
{
|
|
||||||
m_choice->Show(show);
|
|
||||||
if ( m_text != 0 )
|
|
||||||
{
|
|
||||||
m_text->Show(show);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,13 +206,13 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id,
|
|||||||
Rect bounds ;
|
Rect bounds ;
|
||||||
Str255 title ;
|
Str255 title ;
|
||||||
|
|
||||||
if ( !wxControl::Create(parent, id, pos, size, style,
|
if ( !wxControl::Create(parent, id, wxDefaultPosition, wxDefaultSize, style ,
|
||||||
wxDefaultValidator, name) )
|
wxDefaultValidator, name) )
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_choice = new wxComboBoxChoice(this, style);
|
m_choice = new wxComboBoxChoice(this, style );
|
||||||
|
|
||||||
wxSize csize = size;
|
wxSize csize = size;
|
||||||
if ( style & wxCB_READONLY )
|
if ( style & wxCB_READONLY )
|
||||||
@@ -246,21 +228,12 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
DoSetSize(pos.x, pos.y, csize.x, csize.y);
|
DoSetSize(pos.x, pos.y, csize.x, csize.y);
|
||||||
|
|
||||||
for ( int i = 0 ; i < n ; i++ )
|
for ( int i = 0 ; i < n ; i++ )
|
||||||
{
|
{
|
||||||
m_choice->DoAppend( choices[ i ] );
|
m_choice->DoAppend( choices[ i ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
// have to disable this window to avoid interfering it with message
|
|
||||||
// processing to the text and the button... but pretend it is enabled to
|
|
||||||
// make IsEnabled() return TRUE
|
|
||||||
wxControl::Enable(FALSE); // don't use non virtual Disable() here!
|
|
||||||
m_isEnabled = TRUE;
|
|
||||||
|
|
||||||
// we don't even need to show this window itself - and not doing it avoids
|
|
||||||
// that it overwrites the text control
|
|
||||||
wxControl::Show(FALSE);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -118,7 +118,13 @@ bool wxControl::Create(wxWindow *parent, wxWindowID id,
|
|||||||
m_macControl = NULL ;
|
m_macControl = NULL ;
|
||||||
m_macHorizontalBorder = 0 ; // additional pixels around the real control
|
m_macHorizontalBorder = 0 ; // additional pixels around the real control
|
||||||
m_macVerticalBorder = 0 ;
|
m_macVerticalBorder = 0 ;
|
||||||
|
|
||||||
bool rval = wxWindow::Create(parent, id, pos, size, style, name);
|
bool rval = wxWindow::Create(parent, id, pos, size, style, name);
|
||||||
|
if ( parent )
|
||||||
|
{
|
||||||
|
m_backgroundColour = parent->GetBackgroundColour() ;
|
||||||
|
m_foregroundColour = parent->GetForegroundColour() ;
|
||||||
|
}
|
||||||
if (rval) {
|
if (rval) {
|
||||||
#if wxUSE_VALIDATORS
|
#if wxUSE_VALIDATORS
|
||||||
SetValidator(validator);
|
SetValidator(validator);
|
||||||
@@ -410,7 +416,7 @@ void wxControl::MacAdjustControlRect()
|
|||||||
else
|
else
|
||||||
m_width = bestsize.right - bestsize.left ;
|
m_width = bestsize.right - bestsize.left ;
|
||||||
|
|
||||||
m_width += 2 * m_macHorizontalBorder ;
|
m_width += 2 * m_macHorizontalBorder + MacGetLeftBorderSize() + MacGetRightBorderSize() ;
|
||||||
}
|
}
|
||||||
if ( m_height == -1 )
|
if ( m_height == -1 )
|
||||||
{
|
{
|
||||||
@@ -418,10 +424,10 @@ void wxControl::MacAdjustControlRect()
|
|||||||
if ( m_height < 10 )
|
if ( m_height < 10 )
|
||||||
m_height = 13 ;
|
m_height = 13 ;
|
||||||
|
|
||||||
m_height += 2 * m_macVerticalBorder;
|
m_height += 2 * m_macVerticalBorder + MacGetTopBorderSize() + MacGetBottomBorderSize() ;
|
||||||
}
|
}
|
||||||
|
MacUpdateDimensions() ;
|
||||||
UMASizeControl( (ControlHandle) m_macControl , m_width - 2 * m_macHorizontalBorder, m_height - 2 * m_macVerticalBorder ) ;
|
// UMASizeControl( (ControlHandle) m_macControl , m_width - 2 * m_macHorizontalBorder, m_height - 2 * m_macVerticalBorder ) ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -433,35 +439,49 @@ WXWidget wxControl::MacGetContainerForEmbedding()
|
|||||||
return wxWindow::MacGetContainerForEmbedding() ;
|
return wxWindow::MacGetContainerForEmbedding() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxControl::MacSuperChangedPosition()
|
void wxControl::MacUpdateDimensions()
|
||||||
{
|
{
|
||||||
if ( (ControlHandle) m_macControl )
|
// actually in the current systems this should never be possible, but later reparenting
|
||||||
{
|
// may become a reality
|
||||||
Rect contrlRect ;
|
|
||||||
GetControlBounds( (ControlHandle) m_macControl , &contrlRect ) ;
|
if ( (ControlHandle) m_macControl == NULL )
|
||||||
int former_mac_x = contrlRect.left ;
|
return ;
|
||||||
int former_mac_y = contrlRect.top ;
|
|
||||||
int mac_x = m_x ;
|
if ( GetParent() == NULL )
|
||||||
int mac_y = m_y ;
|
return ;
|
||||||
GetParent()->MacWindowToRootWindow( & mac_x , & mac_y ) ;
|
|
||||||
|
|
||||||
WindowRef rootwindow = (WindowRef) MacGetRootWindow() ;
|
WindowRef rootwindow = (WindowRef) MacGetRootWindow() ;
|
||||||
|
if ( rootwindow == NULL )
|
||||||
|
return ;
|
||||||
|
|
||||||
if ( mac_x + m_macHorizontalBorder != former_mac_x ||
|
Rect oldBounds ;
|
||||||
mac_y + m_macVerticalBorder != former_mac_y )
|
GetControlBounds( (ControlHandle) m_macControl , &oldBounds ) ;
|
||||||
{
|
|
||||||
{
|
|
||||||
Rect inval = { former_mac_y , former_mac_x , former_mac_y + m_height , former_mac_x + m_width } ;
|
|
||||||
InvalWindowRect( rootwindow , &inval ) ;
|
|
||||||
}
|
|
||||||
UMAMoveControl( (ControlHandle) m_macControl , mac_x + m_macHorizontalBorder , mac_y + m_macVerticalBorder ) ;
|
|
||||||
{
|
|
||||||
Rect inval = { mac_y , mac_x , mac_y + m_height , mac_x + m_width } ;
|
|
||||||
InvalWindowRect( rootwindow , &inval ) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
int new_x = m_x + MacGetLeftBorderSize() + m_macHorizontalBorder ;
|
||||||
|
int new_y = m_y + MacGetTopBorderSize() + m_macVerticalBorder ;
|
||||||
|
int new_width = m_width - MacGetLeftBorderSize() - MacGetRightBorderSize() - 2 * m_macHorizontalBorder ;
|
||||||
|
int new_height = m_height - MacGetTopBorderSize() - MacGetBottomBorderSize() - 2 * m_macVerticalBorder ;
|
||||||
|
|
||||||
|
GetParent()->MacWindowToRootWindow( & new_x , & new_y ) ;
|
||||||
|
bool doMove = new_x != oldBounds.left || new_y != oldBounds.top ;
|
||||||
|
bool doResize = ( oldBounds.right - oldBounds.left ) != new_width || (oldBounds.bottom - oldBounds.top ) != new_height ;
|
||||||
|
if ( doMove || doResize )
|
||||||
|
{
|
||||||
|
InvalWindowRect( rootwindow, &oldBounds ) ;
|
||||||
|
if ( doMove )
|
||||||
|
{
|
||||||
|
UMAMoveControl( (ControlHandle) m_macControl , new_x , new_y ) ;
|
||||||
|
}
|
||||||
|
if ( doResize )
|
||||||
|
{
|
||||||
|
UMASizeControl( (ControlHandle) m_macControl , new_width , new_height ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxControl::MacSuperChangedPosition()
|
||||||
|
{
|
||||||
|
MacUpdateDimensions() ;
|
||||||
wxWindow::MacSuperChangedPosition() ;
|
wxWindow::MacSuperChangedPosition() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -500,6 +520,10 @@ void wxControl::DoSetSize(int x, int y,
|
|||||||
int width, int height,
|
int width, int height,
|
||||||
int sizeFlags )
|
int sizeFlags )
|
||||||
{
|
{
|
||||||
|
wxWindow::DoSetSize( x , y ,width , height ,sizeFlags ) ;
|
||||||
|
return ;
|
||||||
|
/*
|
||||||
|
|
||||||
if ( (ControlHandle) m_macControl == NULL )
|
if ( (ControlHandle) m_macControl == NULL )
|
||||||
{
|
{
|
||||||
wxWindow::DoSetSize( x , y ,width , height ,sizeFlags ) ;
|
wxWindow::DoSetSize( x , y ,width , height ,sizeFlags ) ;
|
||||||
@@ -614,6 +638,7 @@ void wxControl::DoSetSize(int x, int y,
|
|||||||
|
|
||||||
Refresh() ;
|
Refresh() ;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxControl::Show(bool show)
|
bool wxControl::Show(bool show)
|
||||||
|
@@ -327,112 +327,23 @@ void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart )
|
|||||||
|
|
||||||
void wxSlider::DoSetSize(int x, int y, int width, int height, int sizeFlags)
|
void wxSlider::DoSetSize(int x, int y, int width, int height, int sizeFlags)
|
||||||
{
|
{
|
||||||
Rect oldbounds, newbounds;
|
wxControl::DoSetSize( x, y , width , height ,sizeFlags ) ;
|
||||||
int new_x, new_y, new_width, new_height;
|
|
||||||
int mac_x, mac_y;
|
|
||||||
|
|
||||||
new_x = m_x;
|
|
||||||
new_y = m_y;
|
|
||||||
new_width = m_width;
|
|
||||||
new_height = m_height;
|
|
||||||
|
|
||||||
if (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)
|
|
||||||
{
|
|
||||||
new_x = x;
|
|
||||||
new_y = y;
|
|
||||||
new_width = width;
|
|
||||||
new_height = height;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (x != -1) new_x = x;
|
|
||||||
if (y != -1) new_y = y;
|
|
||||||
if (width != -1) new_width = width;
|
|
||||||
if (height != -1) new_height = height;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sizeFlags & wxSIZE_AUTO)
|
void wxSlider::MacUpdateDimensions()
|
||||||
{
|
{
|
||||||
wxSize size = GetBestSize();
|
// actually in the current systems this should never be possible, but later reparenting
|
||||||
if (sizeFlags & wxSIZE_AUTO_WIDTH)
|
// may become a reality
|
||||||
{
|
|
||||||
if (width == -1) new_width = size.x;
|
|
||||||
}
|
|
||||||
if (sizeFlags & wxSIZE_AUTO_HEIGHT)
|
|
||||||
{
|
|
||||||
if (height == -1) new_height = size.y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AdjustForParentClientOrigin(new_x, new_y, sizeFlags);
|
if ( (ControlHandle) m_macControl == NULL )
|
||||||
|
return ;
|
||||||
|
|
||||||
mac_x = new_x;
|
if ( GetParent() == NULL )
|
||||||
mac_y = new_y;
|
return ;
|
||||||
if(GetParent()) {
|
|
||||||
GetParent()->MacClientToRootWindow(&mac_x, &mac_y);
|
|
||||||
}
|
|
||||||
|
|
||||||
GetControlBounds( (ControlHandle) m_macControl, &oldbounds);
|
WindowRef rootwindow = (WindowRef) MacGetRootWindow() ;
|
||||||
oldbounds.right = oldbounds.left + m_width;
|
if ( rootwindow == NULL )
|
||||||
oldbounds.bottom = oldbounds.top + m_height;
|
return ;
|
||||||
|
|
||||||
bool doMove = false;
|
|
||||||
bool doResize = false;
|
|
||||||
|
|
||||||
if ( mac_x != oldbounds.left || mac_y != oldbounds.top )
|
|
||||||
{
|
|
||||||
doMove = true ;
|
|
||||||
}
|
|
||||||
if ( new_width != m_width || new_height != m_height )
|
|
||||||
{
|
|
||||||
doResize = true ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( doMove || doResize )
|
|
||||||
{
|
|
||||||
// Ensure resize is within constraints
|
|
||||||
if ((m_minWidth != -1) && (new_width < m_minWidth)) {
|
|
||||||
new_width = m_minWidth;
|
|
||||||
}
|
|
||||||
if ((m_minHeight != -1) && (new_height < m_minHeight)) {
|
|
||||||
new_height = m_minHeight;
|
|
||||||
}
|
|
||||||
if ((m_maxWidth != -1) && (new_width > m_maxWidth)) {
|
|
||||||
new_width = m_maxWidth;
|
|
||||||
}
|
|
||||||
if ((m_maxHeight != -1) && (new_height > m_maxHeight)) {
|
|
||||||
new_height = m_maxHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
DoMoveWindow(new_x, new_y, new_width, new_height);
|
|
||||||
|
|
||||||
// Update window at old and new positions
|
|
||||||
SetRect(&newbounds, m_x, m_y, m_x + m_width, m_y + m_height);
|
|
||||||
WindowRef rootwindow = (WindowRef) MacGetRootWindow();
|
|
||||||
InvalWindowRect( rootwindow , &oldbounds );
|
|
||||||
InvalWindowRect( rootwindow , &newbounds );
|
|
||||||
|
|
||||||
if ( doMove )
|
|
||||||
{
|
|
||||||
wxMoveEvent event(wxPoint(m_x, m_y), m_windowId);
|
|
||||||
event.SetEventObject(this);
|
|
||||||
GetEventHandler()->ProcessEvent(event) ;
|
|
||||||
}
|
|
||||||
if ( doResize )
|
|
||||||
{
|
|
||||||
wxSizeEvent event(wxSize(m_width, m_height), m_windowId);
|
|
||||||
event.SetEventObject(this);
|
|
||||||
GetEventHandler()->ProcessEvent(event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxSlider::DoMoveWindow(int x, int y, int width, int height)
|
|
||||||
{
|
|
||||||
m_x = x;
|
|
||||||
m_y = y;
|
|
||||||
m_width = width;
|
|
||||||
m_height = height;
|
|
||||||
|
|
||||||
int xborder, yborder;
|
int xborder, yborder;
|
||||||
int minValWidth, maxValWidth, textwidth, textheight;
|
int minValWidth, maxValWidth, textwidth, textheight;
|
||||||
@@ -469,22 +380,45 @@ void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart )
|
|||||||
if(GetWindowStyle() & wxSL_VERTICAL)
|
if(GetWindowStyle() & wxSL_VERTICAL)
|
||||||
{
|
{
|
||||||
m_macMinimumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT,
|
m_macMinimumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT,
|
||||||
height - yborder - textheight);
|
m_height - yborder - textheight);
|
||||||
m_macMaximumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT, 0);
|
m_macMaximumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT, 0);
|
||||||
m_macValueStatic->Move(0, height - textheight);
|
m_macValueStatic->Move(0, m_height - textheight);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_macMinimumStatic->Move(0, sliderBreadth + wxSLIDER_BORDERTEXT);
|
m_macMinimumStatic->Move(0, sliderBreadth + wxSLIDER_BORDERTEXT);
|
||||||
m_macMaximumStatic->Move(width - xborder - maxValWidth / 2,
|
m_macMaximumStatic->Move(m_width - xborder - maxValWidth / 2,
|
||||||
sliderBreadth + wxSLIDER_BORDERTEXT);
|
sliderBreadth + wxSLIDER_BORDERTEXT);
|
||||||
m_macValueStatic->Move(width - textwidth, 0);
|
m_macValueStatic->Move(m_width - textwidth, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(GetParent()) {
|
Rect oldBounds ;
|
||||||
GetParent()->MacClientToRootWindow(&x, &y);
|
GetControlBounds( (ControlHandle) m_macControl , &oldBounds ) ;
|
||||||
|
|
||||||
|
int new_x = m_x + MacGetLeftBorderSize() + m_macHorizontalBorder ;
|
||||||
|
int new_y = m_y + MacGetTopBorderSize() + m_macVerticalBorder ;
|
||||||
|
int new_width = m_width - MacGetLeftBorderSize() - MacGetRightBorderSize() - 2 * m_macHorizontalBorder - xborder ;
|
||||||
|
int new_height = m_height - MacGetTopBorderSize() - MacGetBottomBorderSize() - 2 * m_macVerticalBorder - yborder ;
|
||||||
|
|
||||||
|
GetParent()->MacWindowToRootWindow( & new_x , & new_y ) ;
|
||||||
|
bool doMove = new_x != oldBounds.left || new_y != oldBounds.top ;
|
||||||
|
bool doResize = ( oldBounds.right - oldBounds.left ) != new_width || (oldBounds.bottom - oldBounds.top ) != new_height ;
|
||||||
|
if ( doMove || doResize )
|
||||||
|
{
|
||||||
|
InvalWindowRect( rootwindow, &oldBounds ) ;
|
||||||
|
if ( doMove )
|
||||||
|
{
|
||||||
|
UMAMoveControl( (ControlHandle) m_macControl , new_x , new_y ) ;
|
||||||
|
}
|
||||||
|
if ( doResize )
|
||||||
|
{
|
||||||
|
UMASizeControl( (ControlHandle) m_macControl , new_width , new_height ) ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
UMAMoveControl( (ControlHandle) m_macControl, x, y);
|
}
|
||||||
UMASizeControl( (ControlHandle) m_macControl, width - xborder, height - yborder);
|
|
||||||
|
void wxSlider::DoMoveWindow(int x, int y, int width, int height)
|
||||||
|
{
|
||||||
|
wxControl::DoMoveWindow(x,y,width,height) ;
|
||||||
}
|
}
|
@@ -14,32 +14,309 @@
|
|||||||
|
|
||||||
#include "wx/defs.h"
|
#include "wx/defs.h"
|
||||||
|
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/textctrl.h"
|
||||||
|
#endif //WX_PRECOMP
|
||||||
|
|
||||||
#if wxUSE_SPINCTRL
|
#if wxUSE_SPINCTRL
|
||||||
|
|
||||||
|
#include "wx/spinbutt.h"
|
||||||
|
#include "wx/spinctrl.h"
|
||||||
|
|
||||||
|
|
||||||
#include "wx/spinctrl.h"
|
#include "wx/spinctrl.h"
|
||||||
|
|
||||||
#if 0
|
// ----------------------------------------------------------------------------
|
||||||
|
// constants
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
// now using the generic impl
|
// the margin between the text control and the spin
|
||||||
//-----------------------------------------------------------------------------
|
static const wxCoord MARGIN = 2;
|
||||||
// wxSpinCtrl
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#if wxUSE_SPINBTN && !defined(__WXMAC__)
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxSpinCtrlText: text control used by spin control
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
#if !USE_SHARED_LIBRARY
|
class wxSpinCtrlText : public wxTextCtrl
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl,wxControl)
|
{
|
||||||
|
public:
|
||||||
|
wxSpinCtrlText(wxSpinCtrl *spin, const wxString& value)
|
||||||
|
: wxTextCtrl(spin , -1, value)
|
||||||
|
{
|
||||||
|
m_spin = spin;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void OnTextChange(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
int val;
|
||||||
|
if ( m_spin->GetTextValue(&val) )
|
||||||
|
{
|
||||||
|
m_spin->GetSpinButton()->SetValue(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
event.Skip();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ProcessEvent(wxEvent &event)
|
||||||
|
{
|
||||||
|
// Hand button down events to wxSpinCtrl. Doesn't work.
|
||||||
|
if (event.GetEventType() == wxEVT_LEFT_DOWN && m_spin->ProcessEvent( event ))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
return wxTextCtrl::ProcessEvent( event );
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxSpinCtrl *m_spin;
|
||||||
|
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
};
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(wxSpinCtrlText, wxTextCtrl)
|
||||||
|
EVT_TEXT(-1, wxSpinCtrlText::OnTextChange)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxSpinCtrlButton: spin button used by spin control
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class wxSpinCtrlButton : public wxSpinButton
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxSpinCtrlButton(wxSpinCtrl *spin, int style)
|
||||||
|
: wxSpinButton(spin )
|
||||||
|
{
|
||||||
|
m_spin = spin;
|
||||||
|
|
||||||
|
SetWindowStyle(style | wxSP_VERTICAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void OnSpinButton(wxSpinEvent& eventSpin)
|
||||||
|
{
|
||||||
|
#if defined(__WXMAC__) || defined(__WXMOTIF__)
|
||||||
|
m_spin->SetTextValue(eventSpin.GetPosition());
|
||||||
|
|
||||||
|
wxCommandEvent event(wxEVT_COMMAND_SPINCTRL_UPDATED, m_spin->GetId());
|
||||||
|
event.SetEventObject(m_spin);
|
||||||
|
event.SetInt(eventSpin.GetPosition());
|
||||||
|
|
||||||
|
m_spin->GetEventHandler()->ProcessEvent(event);
|
||||||
|
#else
|
||||||
|
m_spin->SetTextValue(eventSpin.GetPosition());
|
||||||
|
eventSpin.Skip();
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#else // !wxUSE_SPINBTN
|
private:
|
||||||
|
wxSpinCtrl *m_spin;
|
||||||
|
|
||||||
#if !USE_SHARED_LIBRARY
|
DECLARE_EVENT_TABLE()
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl,wxTextCtrl)
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // wxUSE_SPINBTN/!wxUSE_SPINBTN
|
BEGIN_EVENT_TABLE(wxSpinCtrlButton, wxSpinButton)
|
||||||
|
EVT_SPIN(-1, wxSpinCtrlButton::OnSpinButton)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
#endif
|
IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl, wxControl)
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// implementation
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxSpinCtrl creation
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void wxSpinCtrl::Init()
|
||||||
|
{
|
||||||
|
m_text = NULL;
|
||||||
|
m_btn = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxSpinCtrl::Create(wxWindow *parent,
|
||||||
|
wxWindowID id,
|
||||||
|
const wxString& value,
|
||||||
|
const wxPoint& pos,
|
||||||
|
const wxSize& size,
|
||||||
|
long style,
|
||||||
|
int min,
|
||||||
|
int max,
|
||||||
|
int initial,
|
||||||
|
const wxString& name)
|
||||||
|
{
|
||||||
|
if ( !wxControl::Create(parent, id, wxDefaultPosition, wxDefaultSize, style,
|
||||||
|
wxDefaultValidator, name) )
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// the string value overrides the numeric one (for backwards compatibility
|
||||||
|
// reasons and also because it is simpler to satisfy the string value which
|
||||||
|
// comes much sooner in the list of arguments and leave the initial
|
||||||
|
// parameter unspecified)
|
||||||
|
if ( !value.empty() )
|
||||||
|
{
|
||||||
|
long l;
|
||||||
|
if ( value.ToLong(&l) )
|
||||||
|
initial = l;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxSize csize = size ;
|
||||||
|
m_text = new wxSpinCtrlText(this, value);
|
||||||
|
m_btn = new wxSpinCtrlButton(this, style);
|
||||||
|
|
||||||
|
m_btn->SetRange(min, max);
|
||||||
|
m_btn->SetValue(initial);
|
||||||
|
|
||||||
|
if ( size.y == -1 ) {
|
||||||
|
csize.y = m_text->GetSize().y ;
|
||||||
|
}
|
||||||
|
DoSetSize(pos.x , pos.y , csize.x, csize.y);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxSpinCtrl::~wxSpinCtrl()
|
||||||
|
{
|
||||||
|
// delete the controls now, don't leave them alive even though they would
|
||||||
|
// still be eventually deleted by our parent - but it will be too late, the
|
||||||
|
// user code expects them to be gone now
|
||||||
|
delete m_text;
|
||||||
|
m_text = NULL ;
|
||||||
|
delete m_btn;
|
||||||
|
m_btn = NULL ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// geometry
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxSize wxSpinCtrl::DoGetBestSize() const
|
||||||
|
{
|
||||||
|
wxSize sizeBtn = m_btn->GetBestSize(),
|
||||||
|
sizeText = m_text->GetBestSize();
|
||||||
|
|
||||||
|
return wxSize(sizeBtn.x + sizeText.x + MARGIN, sizeText.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSpinCtrl::DoMoveWindow(int x, int y, int width, int height)
|
||||||
|
{
|
||||||
|
wxControl::DoMoveWindow(x, y, width, height);
|
||||||
|
|
||||||
|
// position the subcontrols inside the client area
|
||||||
|
wxSize sizeBtn = m_btn->GetSize();
|
||||||
|
|
||||||
|
wxCoord wText = width - sizeBtn.x;
|
||||||
|
m_text->SetSize(0, 0, wText, height);
|
||||||
|
m_btn->SetSize(0 + wText + MARGIN, 0, -1, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// operations forwarded to the subcontrols
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxSpinCtrl::Enable(bool enable)
|
||||||
|
{
|
||||||
|
if ( !wxControl::Enable(enable) )
|
||||||
|
return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxSpinCtrl::Show(bool show)
|
||||||
|
{
|
||||||
|
if ( !wxControl::Show(show) )
|
||||||
|
return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// value and range access
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxSpinCtrl::GetTextValue(int *val) const
|
||||||
|
{
|
||||||
|
long l;
|
||||||
|
if ( !m_text->GetValue().ToLong(&l) )
|
||||||
|
{
|
||||||
|
// not a number at all
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( l < GetMin() || l > GetMax() )
|
||||||
|
{
|
||||||
|
// out of range
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*val = l;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxSpinCtrl::GetValue() const
|
||||||
|
{
|
||||||
|
return m_btn ? m_btn->GetValue() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxSpinCtrl::GetMin() const
|
||||||
|
{
|
||||||
|
return m_btn ? m_btn->GetMin() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxSpinCtrl::GetMax() const
|
||||||
|
{
|
||||||
|
return m_btn ? m_btn->GetMax() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// changing value and range
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void wxSpinCtrl::SetTextValue(int val)
|
||||||
|
{
|
||||||
|
wxCHECK_RET( m_text, _T("invalid call to wxSpinCtrl::SetTextValue") );
|
||||||
|
|
||||||
|
m_text->SetValue(wxString::Format(_T("%d"), val));
|
||||||
|
|
||||||
|
// select all text
|
||||||
|
m_text->SetSelection(0, -1);
|
||||||
|
|
||||||
|
// and give focus to the control!
|
||||||
|
// m_text->SetFocus(); Why???? TODO.
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSpinCtrl::SetValue(int val)
|
||||||
|
{
|
||||||
|
wxCHECK_RET( m_btn, _T("invalid call to wxSpinCtrl::SetValue") );
|
||||||
|
|
||||||
|
SetTextValue(val);
|
||||||
|
|
||||||
|
m_btn->SetValue(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSpinCtrl::SetValue(const wxString& text)
|
||||||
|
{
|
||||||
|
wxCHECK_RET( m_text, _T("invalid call to wxSpinCtrl::SetValue") );
|
||||||
|
|
||||||
|
long val;
|
||||||
|
if ( text.ToLong(&val) && ((val > INT_MIN) && (val < INT_MAX)) )
|
||||||
|
{
|
||||||
|
SetValue((int)val);
|
||||||
|
}
|
||||||
|
else // not a number at all or out of range
|
||||||
|
{
|
||||||
|
m_text->SetValue(text);
|
||||||
|
m_text->SetSelection(0, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSpinCtrl::SetRange(int min, int max)
|
||||||
|
{
|
||||||
|
wxCHECK_RET( m_btn, _T("invalid call to wxSpinCtrl::SetRange") );
|
||||||
|
|
||||||
|
m_btn->SetRange(min, max);
|
||||||
|
}
|
||||||
|
|
||||||
#endif // wxUSE_SPINCTRL
|
#endif // wxUSE_SPINCTRL
|
||||||
|
|
||||||
|
@@ -594,6 +594,9 @@ void wxWindowMac::DoMoveWindow(int x, int y, int width, int height)
|
|||||||
m_width = actualWidth ;
|
m_width = actualWidth ;
|
||||||
m_height = actualHeight ;
|
m_height = actualHeight ;
|
||||||
|
|
||||||
|
// update any low-level frame-relative positions
|
||||||
|
|
||||||
|
MacUpdateDimensions() ;
|
||||||
// erase new position
|
// erase new position
|
||||||
|
|
||||||
Refresh() ;
|
Refresh() ;
|
||||||
@@ -1195,6 +1198,7 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect)
|
|||||||
if (child == m_vScrollBar) continue;
|
if (child == m_vScrollBar) continue;
|
||||||
if (child == m_hScrollBar) continue;
|
if (child == m_hScrollBar) continue;
|
||||||
if (child->IsTopLevel()) continue;
|
if (child->IsTopLevel()) continue;
|
||||||
|
|
||||||
int x,y;
|
int x,y;
|
||||||
child->GetPosition( &x, &y );
|
child->GetPosition( &x, &y );
|
||||||
int w,h;
|
int w,h;
|
||||||
@@ -1437,7 +1441,7 @@ bool wxWindowMac::MacDispatchMouseEvent(wxMouseEvent& event)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
|
||||||
if ( IsKindOf( CLASSINFO ( wxStaticBox ) ) || IsKindOf( CLASSINFO( wxSpinCtrl ) ))
|
if ( IsKindOf( CLASSINFO ( wxStaticBox ) ) /* || IsKindOf( CLASSINFO( wxSpinCtrl ) ) */)
|
||||||
return FALSE ;
|
return FALSE ;
|
||||||
|
|
||||||
WindowRef window = (WindowRef) MacGetRootWindow() ;
|
WindowRef window = (WindowRef) MacGetRootWindow() ;
|
||||||
|
@@ -51,7 +51,7 @@ class wxComboBoxText : public wxTextCtrl
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
wxComboBoxText( wxComboBox * cb )
|
wxComboBoxText( wxComboBox * cb )
|
||||||
: wxTextCtrl( cb->GetParent(), 1 )
|
: wxTextCtrl( cb , 1 )
|
||||||
{
|
{
|
||||||
m_cb = cb;
|
m_cb = cb;
|
||||||
}
|
}
|
||||||
@@ -81,7 +81,7 @@ class wxComboBoxChoice : public wxChoice
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
wxComboBoxChoice(wxComboBox *cb, int style)
|
wxComboBoxChoice(wxComboBox *cb, int style)
|
||||||
: wxChoice( cb->GetParent(), 1 )
|
: wxChoice( cb , 1 )
|
||||||
{
|
{
|
||||||
m_cb = cb;
|
m_cb = cb;
|
||||||
}
|
}
|
||||||
@@ -145,13 +145,13 @@ void wxComboBox::DoMoveWindow(int x, int y, int width, int height) {
|
|||||||
|
|
||||||
if ( m_text == 0 )
|
if ( m_text == 0 )
|
||||||
{
|
{
|
||||||
m_choice->SetSize(x, y, width, -1);
|
m_choice->SetSize(0, 0 , width, -1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wxCoord wText = width - POPUPWIDTH;
|
wxCoord wText = width - POPUPWIDTH;
|
||||||
m_text->SetSize(x, y, wText, height);
|
m_text->SetSize(0, 0, wText, height);
|
||||||
m_choice->SetSize(x + wText + MARGIN, y, POPUPWIDTH, -1);
|
m_choice->SetSize(0 + wText + MARGIN, 0, POPUPWIDTH, -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,13 +166,6 @@ bool wxComboBox::Enable(bool enable)
|
|||||||
if ( !wxControl::Enable(enable) )
|
if ( !wxControl::Enable(enable) )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
m_choice->Enable(enable);
|
|
||||||
|
|
||||||
if ( m_text != 0 )
|
|
||||||
{
|
|
||||||
m_text->Enable(enable);
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,17 +174,6 @@ bool wxComboBox::Show(bool show)
|
|||||||
if ( !wxControl::Show(show) )
|
if ( !wxControl::Show(show) )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
// under GTK Show() is called the first time before we are fully
|
|
||||||
// constructed
|
|
||||||
if ( m_choice )
|
|
||||||
{
|
|
||||||
m_choice->Show(show);
|
|
||||||
if ( m_text != 0 )
|
|
||||||
{
|
|
||||||
m_text->Show(show);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,13 +206,13 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id,
|
|||||||
Rect bounds ;
|
Rect bounds ;
|
||||||
Str255 title ;
|
Str255 title ;
|
||||||
|
|
||||||
if ( !wxControl::Create(parent, id, pos, size, style,
|
if ( !wxControl::Create(parent, id, wxDefaultPosition, wxDefaultSize, style ,
|
||||||
wxDefaultValidator, name) )
|
wxDefaultValidator, name) )
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_choice = new wxComboBoxChoice(this, style);
|
m_choice = new wxComboBoxChoice(this, style );
|
||||||
|
|
||||||
wxSize csize = size;
|
wxSize csize = size;
|
||||||
if ( style & wxCB_READONLY )
|
if ( style & wxCB_READONLY )
|
||||||
@@ -246,21 +228,12 @@ bool wxComboBox::Create(wxWindow *parent, wxWindowID id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
DoSetSize(pos.x, pos.y, csize.x, csize.y);
|
DoSetSize(pos.x, pos.y, csize.x, csize.y);
|
||||||
|
|
||||||
for ( int i = 0 ; i < n ; i++ )
|
for ( int i = 0 ; i < n ; i++ )
|
||||||
{
|
{
|
||||||
m_choice->DoAppend( choices[ i ] );
|
m_choice->DoAppend( choices[ i ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
// have to disable this window to avoid interfering it with message
|
|
||||||
// processing to the text and the button... but pretend it is enabled to
|
|
||||||
// make IsEnabled() return TRUE
|
|
||||||
wxControl::Enable(FALSE); // don't use non virtual Disable() here!
|
|
||||||
m_isEnabled = TRUE;
|
|
||||||
|
|
||||||
// we don't even need to show this window itself - and not doing it avoids
|
|
||||||
// that it overwrites the text control
|
|
||||||
wxControl::Show(FALSE);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -118,7 +118,13 @@ bool wxControl::Create(wxWindow *parent, wxWindowID id,
|
|||||||
m_macControl = NULL ;
|
m_macControl = NULL ;
|
||||||
m_macHorizontalBorder = 0 ; // additional pixels around the real control
|
m_macHorizontalBorder = 0 ; // additional pixels around the real control
|
||||||
m_macVerticalBorder = 0 ;
|
m_macVerticalBorder = 0 ;
|
||||||
|
|
||||||
bool rval = wxWindow::Create(parent, id, pos, size, style, name);
|
bool rval = wxWindow::Create(parent, id, pos, size, style, name);
|
||||||
|
if ( parent )
|
||||||
|
{
|
||||||
|
m_backgroundColour = parent->GetBackgroundColour() ;
|
||||||
|
m_foregroundColour = parent->GetForegroundColour() ;
|
||||||
|
}
|
||||||
if (rval) {
|
if (rval) {
|
||||||
#if wxUSE_VALIDATORS
|
#if wxUSE_VALIDATORS
|
||||||
SetValidator(validator);
|
SetValidator(validator);
|
||||||
@@ -410,7 +416,7 @@ void wxControl::MacAdjustControlRect()
|
|||||||
else
|
else
|
||||||
m_width = bestsize.right - bestsize.left ;
|
m_width = bestsize.right - bestsize.left ;
|
||||||
|
|
||||||
m_width += 2 * m_macHorizontalBorder ;
|
m_width += 2 * m_macHorizontalBorder + MacGetLeftBorderSize() + MacGetRightBorderSize() ;
|
||||||
}
|
}
|
||||||
if ( m_height == -1 )
|
if ( m_height == -1 )
|
||||||
{
|
{
|
||||||
@@ -418,10 +424,10 @@ void wxControl::MacAdjustControlRect()
|
|||||||
if ( m_height < 10 )
|
if ( m_height < 10 )
|
||||||
m_height = 13 ;
|
m_height = 13 ;
|
||||||
|
|
||||||
m_height += 2 * m_macVerticalBorder;
|
m_height += 2 * m_macVerticalBorder + MacGetTopBorderSize() + MacGetBottomBorderSize() ;
|
||||||
}
|
}
|
||||||
|
MacUpdateDimensions() ;
|
||||||
UMASizeControl( (ControlHandle) m_macControl , m_width - 2 * m_macHorizontalBorder, m_height - 2 * m_macVerticalBorder ) ;
|
// UMASizeControl( (ControlHandle) m_macControl , m_width - 2 * m_macHorizontalBorder, m_height - 2 * m_macVerticalBorder ) ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -433,35 +439,49 @@ WXWidget wxControl::MacGetContainerForEmbedding()
|
|||||||
return wxWindow::MacGetContainerForEmbedding() ;
|
return wxWindow::MacGetContainerForEmbedding() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxControl::MacSuperChangedPosition()
|
void wxControl::MacUpdateDimensions()
|
||||||
{
|
{
|
||||||
if ( (ControlHandle) m_macControl )
|
// actually in the current systems this should never be possible, but later reparenting
|
||||||
{
|
// may become a reality
|
||||||
Rect contrlRect ;
|
|
||||||
GetControlBounds( (ControlHandle) m_macControl , &contrlRect ) ;
|
if ( (ControlHandle) m_macControl == NULL )
|
||||||
int former_mac_x = contrlRect.left ;
|
return ;
|
||||||
int former_mac_y = contrlRect.top ;
|
|
||||||
int mac_x = m_x ;
|
if ( GetParent() == NULL )
|
||||||
int mac_y = m_y ;
|
return ;
|
||||||
GetParent()->MacWindowToRootWindow( & mac_x , & mac_y ) ;
|
|
||||||
|
|
||||||
WindowRef rootwindow = (WindowRef) MacGetRootWindow() ;
|
WindowRef rootwindow = (WindowRef) MacGetRootWindow() ;
|
||||||
|
if ( rootwindow == NULL )
|
||||||
|
return ;
|
||||||
|
|
||||||
if ( mac_x + m_macHorizontalBorder != former_mac_x ||
|
Rect oldBounds ;
|
||||||
mac_y + m_macVerticalBorder != former_mac_y )
|
GetControlBounds( (ControlHandle) m_macControl , &oldBounds ) ;
|
||||||
{
|
|
||||||
{
|
|
||||||
Rect inval = { former_mac_y , former_mac_x , former_mac_y + m_height , former_mac_x + m_width } ;
|
|
||||||
InvalWindowRect( rootwindow , &inval ) ;
|
|
||||||
}
|
|
||||||
UMAMoveControl( (ControlHandle) m_macControl , mac_x + m_macHorizontalBorder , mac_y + m_macVerticalBorder ) ;
|
|
||||||
{
|
|
||||||
Rect inval = { mac_y , mac_x , mac_y + m_height , mac_x + m_width } ;
|
|
||||||
InvalWindowRect( rootwindow , &inval ) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
int new_x = m_x + MacGetLeftBorderSize() + m_macHorizontalBorder ;
|
||||||
|
int new_y = m_y + MacGetTopBorderSize() + m_macVerticalBorder ;
|
||||||
|
int new_width = m_width - MacGetLeftBorderSize() - MacGetRightBorderSize() - 2 * m_macHorizontalBorder ;
|
||||||
|
int new_height = m_height - MacGetTopBorderSize() - MacGetBottomBorderSize() - 2 * m_macVerticalBorder ;
|
||||||
|
|
||||||
|
GetParent()->MacWindowToRootWindow( & new_x , & new_y ) ;
|
||||||
|
bool doMove = new_x != oldBounds.left || new_y != oldBounds.top ;
|
||||||
|
bool doResize = ( oldBounds.right - oldBounds.left ) != new_width || (oldBounds.bottom - oldBounds.top ) != new_height ;
|
||||||
|
if ( doMove || doResize )
|
||||||
|
{
|
||||||
|
InvalWindowRect( rootwindow, &oldBounds ) ;
|
||||||
|
if ( doMove )
|
||||||
|
{
|
||||||
|
UMAMoveControl( (ControlHandle) m_macControl , new_x , new_y ) ;
|
||||||
|
}
|
||||||
|
if ( doResize )
|
||||||
|
{
|
||||||
|
UMASizeControl( (ControlHandle) m_macControl , new_width , new_height ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxControl::MacSuperChangedPosition()
|
||||||
|
{
|
||||||
|
MacUpdateDimensions() ;
|
||||||
wxWindow::MacSuperChangedPosition() ;
|
wxWindow::MacSuperChangedPosition() ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -500,6 +520,10 @@ void wxControl::DoSetSize(int x, int y,
|
|||||||
int width, int height,
|
int width, int height,
|
||||||
int sizeFlags )
|
int sizeFlags )
|
||||||
{
|
{
|
||||||
|
wxWindow::DoSetSize( x , y ,width , height ,sizeFlags ) ;
|
||||||
|
return ;
|
||||||
|
/*
|
||||||
|
|
||||||
if ( (ControlHandle) m_macControl == NULL )
|
if ( (ControlHandle) m_macControl == NULL )
|
||||||
{
|
{
|
||||||
wxWindow::DoSetSize( x , y ,width , height ,sizeFlags ) ;
|
wxWindow::DoSetSize( x , y ,width , height ,sizeFlags ) ;
|
||||||
@@ -614,6 +638,7 @@ void wxControl::DoSetSize(int x, int y,
|
|||||||
|
|
||||||
Refresh() ;
|
Refresh() ;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxControl::Show(bool show)
|
bool wxControl::Show(bool show)
|
||||||
|
@@ -327,112 +327,23 @@ void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart )
|
|||||||
|
|
||||||
void wxSlider::DoSetSize(int x, int y, int width, int height, int sizeFlags)
|
void wxSlider::DoSetSize(int x, int y, int width, int height, int sizeFlags)
|
||||||
{
|
{
|
||||||
Rect oldbounds, newbounds;
|
wxControl::DoSetSize( x, y , width , height ,sizeFlags ) ;
|
||||||
int new_x, new_y, new_width, new_height;
|
|
||||||
int mac_x, mac_y;
|
|
||||||
|
|
||||||
new_x = m_x;
|
|
||||||
new_y = m_y;
|
|
||||||
new_width = m_width;
|
|
||||||
new_height = m_height;
|
|
||||||
|
|
||||||
if (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)
|
|
||||||
{
|
|
||||||
new_x = x;
|
|
||||||
new_y = y;
|
|
||||||
new_width = width;
|
|
||||||
new_height = height;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (x != -1) new_x = x;
|
|
||||||
if (y != -1) new_y = y;
|
|
||||||
if (width != -1) new_width = width;
|
|
||||||
if (height != -1) new_height = height;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(sizeFlags & wxSIZE_AUTO)
|
void wxSlider::MacUpdateDimensions()
|
||||||
{
|
{
|
||||||
wxSize size = GetBestSize();
|
// actually in the current systems this should never be possible, but later reparenting
|
||||||
if (sizeFlags & wxSIZE_AUTO_WIDTH)
|
// may become a reality
|
||||||
{
|
|
||||||
if (width == -1) new_width = size.x;
|
|
||||||
}
|
|
||||||
if (sizeFlags & wxSIZE_AUTO_HEIGHT)
|
|
||||||
{
|
|
||||||
if (height == -1) new_height = size.y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AdjustForParentClientOrigin(new_x, new_y, sizeFlags);
|
if ( (ControlHandle) m_macControl == NULL )
|
||||||
|
return ;
|
||||||
|
|
||||||
mac_x = new_x;
|
if ( GetParent() == NULL )
|
||||||
mac_y = new_y;
|
return ;
|
||||||
if(GetParent()) {
|
|
||||||
GetParent()->MacClientToRootWindow(&mac_x, &mac_y);
|
|
||||||
}
|
|
||||||
|
|
||||||
GetControlBounds( (ControlHandle) m_macControl, &oldbounds);
|
WindowRef rootwindow = (WindowRef) MacGetRootWindow() ;
|
||||||
oldbounds.right = oldbounds.left + m_width;
|
if ( rootwindow == NULL )
|
||||||
oldbounds.bottom = oldbounds.top + m_height;
|
return ;
|
||||||
|
|
||||||
bool doMove = false;
|
|
||||||
bool doResize = false;
|
|
||||||
|
|
||||||
if ( mac_x != oldbounds.left || mac_y != oldbounds.top )
|
|
||||||
{
|
|
||||||
doMove = true ;
|
|
||||||
}
|
|
||||||
if ( new_width != m_width || new_height != m_height )
|
|
||||||
{
|
|
||||||
doResize = true ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( doMove || doResize )
|
|
||||||
{
|
|
||||||
// Ensure resize is within constraints
|
|
||||||
if ((m_minWidth != -1) && (new_width < m_minWidth)) {
|
|
||||||
new_width = m_minWidth;
|
|
||||||
}
|
|
||||||
if ((m_minHeight != -1) && (new_height < m_minHeight)) {
|
|
||||||
new_height = m_minHeight;
|
|
||||||
}
|
|
||||||
if ((m_maxWidth != -1) && (new_width > m_maxWidth)) {
|
|
||||||
new_width = m_maxWidth;
|
|
||||||
}
|
|
||||||
if ((m_maxHeight != -1) && (new_height > m_maxHeight)) {
|
|
||||||
new_height = m_maxHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
DoMoveWindow(new_x, new_y, new_width, new_height);
|
|
||||||
|
|
||||||
// Update window at old and new positions
|
|
||||||
SetRect(&newbounds, m_x, m_y, m_x + m_width, m_y + m_height);
|
|
||||||
WindowRef rootwindow = (WindowRef) MacGetRootWindow();
|
|
||||||
InvalWindowRect( rootwindow , &oldbounds );
|
|
||||||
InvalWindowRect( rootwindow , &newbounds );
|
|
||||||
|
|
||||||
if ( doMove )
|
|
||||||
{
|
|
||||||
wxMoveEvent event(wxPoint(m_x, m_y), m_windowId);
|
|
||||||
event.SetEventObject(this);
|
|
||||||
GetEventHandler()->ProcessEvent(event) ;
|
|
||||||
}
|
|
||||||
if ( doResize )
|
|
||||||
{
|
|
||||||
wxSizeEvent event(wxSize(m_width, m_height), m_windowId);
|
|
||||||
event.SetEventObject(this);
|
|
||||||
GetEventHandler()->ProcessEvent(event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxSlider::DoMoveWindow(int x, int y, int width, int height)
|
|
||||||
{
|
|
||||||
m_x = x;
|
|
||||||
m_y = y;
|
|
||||||
m_width = width;
|
|
||||||
m_height = height;
|
|
||||||
|
|
||||||
int xborder, yborder;
|
int xborder, yborder;
|
||||||
int minValWidth, maxValWidth, textwidth, textheight;
|
int minValWidth, maxValWidth, textwidth, textheight;
|
||||||
@@ -469,22 +380,45 @@ void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart )
|
|||||||
if(GetWindowStyle() & wxSL_VERTICAL)
|
if(GetWindowStyle() & wxSL_VERTICAL)
|
||||||
{
|
{
|
||||||
m_macMinimumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT,
|
m_macMinimumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT,
|
||||||
height - yborder - textheight);
|
m_height - yborder - textheight);
|
||||||
m_macMaximumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT, 0);
|
m_macMaximumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT, 0);
|
||||||
m_macValueStatic->Move(0, height - textheight);
|
m_macValueStatic->Move(0, m_height - textheight);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_macMinimumStatic->Move(0, sliderBreadth + wxSLIDER_BORDERTEXT);
|
m_macMinimumStatic->Move(0, sliderBreadth + wxSLIDER_BORDERTEXT);
|
||||||
m_macMaximumStatic->Move(width - xborder - maxValWidth / 2,
|
m_macMaximumStatic->Move(m_width - xborder - maxValWidth / 2,
|
||||||
sliderBreadth + wxSLIDER_BORDERTEXT);
|
sliderBreadth + wxSLIDER_BORDERTEXT);
|
||||||
m_macValueStatic->Move(width - textwidth, 0);
|
m_macValueStatic->Move(m_width - textwidth, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(GetParent()) {
|
Rect oldBounds ;
|
||||||
GetParent()->MacClientToRootWindow(&x, &y);
|
GetControlBounds( (ControlHandle) m_macControl , &oldBounds ) ;
|
||||||
|
|
||||||
|
int new_x = m_x + MacGetLeftBorderSize() + m_macHorizontalBorder ;
|
||||||
|
int new_y = m_y + MacGetTopBorderSize() + m_macVerticalBorder ;
|
||||||
|
int new_width = m_width - MacGetLeftBorderSize() - MacGetRightBorderSize() - 2 * m_macHorizontalBorder - xborder ;
|
||||||
|
int new_height = m_height - MacGetTopBorderSize() - MacGetBottomBorderSize() - 2 * m_macVerticalBorder - yborder ;
|
||||||
|
|
||||||
|
GetParent()->MacWindowToRootWindow( & new_x , & new_y ) ;
|
||||||
|
bool doMove = new_x != oldBounds.left || new_y != oldBounds.top ;
|
||||||
|
bool doResize = ( oldBounds.right - oldBounds.left ) != new_width || (oldBounds.bottom - oldBounds.top ) != new_height ;
|
||||||
|
if ( doMove || doResize )
|
||||||
|
{
|
||||||
|
InvalWindowRect( rootwindow, &oldBounds ) ;
|
||||||
|
if ( doMove )
|
||||||
|
{
|
||||||
|
UMAMoveControl( (ControlHandle) m_macControl , new_x , new_y ) ;
|
||||||
|
}
|
||||||
|
if ( doResize )
|
||||||
|
{
|
||||||
|
UMASizeControl( (ControlHandle) m_macControl , new_width , new_height ) ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
UMAMoveControl( (ControlHandle) m_macControl, x, y);
|
}
|
||||||
UMASizeControl( (ControlHandle) m_macControl, width - xborder, height - yborder);
|
|
||||||
|
void wxSlider::DoMoveWindow(int x, int y, int width, int height)
|
||||||
|
{
|
||||||
|
wxControl::DoMoveWindow(x,y,width,height) ;
|
||||||
}
|
}
|
@@ -14,32 +14,309 @@
|
|||||||
|
|
||||||
#include "wx/defs.h"
|
#include "wx/defs.h"
|
||||||
|
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/textctrl.h"
|
||||||
|
#endif //WX_PRECOMP
|
||||||
|
|
||||||
#if wxUSE_SPINCTRL
|
#if wxUSE_SPINCTRL
|
||||||
|
|
||||||
|
#include "wx/spinbutt.h"
|
||||||
|
#include "wx/spinctrl.h"
|
||||||
|
|
||||||
|
|
||||||
#include "wx/spinctrl.h"
|
#include "wx/spinctrl.h"
|
||||||
|
|
||||||
#if 0
|
// ----------------------------------------------------------------------------
|
||||||
|
// constants
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
// now using the generic impl
|
// the margin between the text control and the spin
|
||||||
//-----------------------------------------------------------------------------
|
static const wxCoord MARGIN = 2;
|
||||||
// wxSpinCtrl
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#if wxUSE_SPINBTN && !defined(__WXMAC__)
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxSpinCtrlText: text control used by spin control
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
#if !USE_SHARED_LIBRARY
|
class wxSpinCtrlText : public wxTextCtrl
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl,wxControl)
|
{
|
||||||
|
public:
|
||||||
|
wxSpinCtrlText(wxSpinCtrl *spin, const wxString& value)
|
||||||
|
: wxTextCtrl(spin , -1, value)
|
||||||
|
{
|
||||||
|
m_spin = spin;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void OnTextChange(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
int val;
|
||||||
|
if ( m_spin->GetTextValue(&val) )
|
||||||
|
{
|
||||||
|
m_spin->GetSpinButton()->SetValue(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
event.Skip();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ProcessEvent(wxEvent &event)
|
||||||
|
{
|
||||||
|
// Hand button down events to wxSpinCtrl. Doesn't work.
|
||||||
|
if (event.GetEventType() == wxEVT_LEFT_DOWN && m_spin->ProcessEvent( event ))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
return wxTextCtrl::ProcessEvent( event );
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxSpinCtrl *m_spin;
|
||||||
|
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
};
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(wxSpinCtrlText, wxTextCtrl)
|
||||||
|
EVT_TEXT(-1, wxSpinCtrlText::OnTextChange)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxSpinCtrlButton: spin button used by spin control
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class wxSpinCtrlButton : public wxSpinButton
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxSpinCtrlButton(wxSpinCtrl *spin, int style)
|
||||||
|
: wxSpinButton(spin )
|
||||||
|
{
|
||||||
|
m_spin = spin;
|
||||||
|
|
||||||
|
SetWindowStyle(style | wxSP_VERTICAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void OnSpinButton(wxSpinEvent& eventSpin)
|
||||||
|
{
|
||||||
|
#if defined(__WXMAC__) || defined(__WXMOTIF__)
|
||||||
|
m_spin->SetTextValue(eventSpin.GetPosition());
|
||||||
|
|
||||||
|
wxCommandEvent event(wxEVT_COMMAND_SPINCTRL_UPDATED, m_spin->GetId());
|
||||||
|
event.SetEventObject(m_spin);
|
||||||
|
event.SetInt(eventSpin.GetPosition());
|
||||||
|
|
||||||
|
m_spin->GetEventHandler()->ProcessEvent(event);
|
||||||
|
#else
|
||||||
|
m_spin->SetTextValue(eventSpin.GetPosition());
|
||||||
|
eventSpin.Skip();
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
#else // !wxUSE_SPINBTN
|
private:
|
||||||
|
wxSpinCtrl *m_spin;
|
||||||
|
|
||||||
#if !USE_SHARED_LIBRARY
|
DECLARE_EVENT_TABLE()
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl,wxTextCtrl)
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // wxUSE_SPINBTN/!wxUSE_SPINBTN
|
BEGIN_EVENT_TABLE(wxSpinCtrlButton, wxSpinButton)
|
||||||
|
EVT_SPIN(-1, wxSpinCtrlButton::OnSpinButton)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
#endif
|
IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl, wxControl)
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// implementation
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxSpinCtrl creation
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void wxSpinCtrl::Init()
|
||||||
|
{
|
||||||
|
m_text = NULL;
|
||||||
|
m_btn = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxSpinCtrl::Create(wxWindow *parent,
|
||||||
|
wxWindowID id,
|
||||||
|
const wxString& value,
|
||||||
|
const wxPoint& pos,
|
||||||
|
const wxSize& size,
|
||||||
|
long style,
|
||||||
|
int min,
|
||||||
|
int max,
|
||||||
|
int initial,
|
||||||
|
const wxString& name)
|
||||||
|
{
|
||||||
|
if ( !wxControl::Create(parent, id, wxDefaultPosition, wxDefaultSize, style,
|
||||||
|
wxDefaultValidator, name) )
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// the string value overrides the numeric one (for backwards compatibility
|
||||||
|
// reasons and also because it is simpler to satisfy the string value which
|
||||||
|
// comes much sooner in the list of arguments and leave the initial
|
||||||
|
// parameter unspecified)
|
||||||
|
if ( !value.empty() )
|
||||||
|
{
|
||||||
|
long l;
|
||||||
|
if ( value.ToLong(&l) )
|
||||||
|
initial = l;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxSize csize = size ;
|
||||||
|
m_text = new wxSpinCtrlText(this, value);
|
||||||
|
m_btn = new wxSpinCtrlButton(this, style);
|
||||||
|
|
||||||
|
m_btn->SetRange(min, max);
|
||||||
|
m_btn->SetValue(initial);
|
||||||
|
|
||||||
|
if ( size.y == -1 ) {
|
||||||
|
csize.y = m_text->GetSize().y ;
|
||||||
|
}
|
||||||
|
DoSetSize(pos.x , pos.y , csize.x, csize.y);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxSpinCtrl::~wxSpinCtrl()
|
||||||
|
{
|
||||||
|
// delete the controls now, don't leave them alive even though they would
|
||||||
|
// still be eventually deleted by our parent - but it will be too late, the
|
||||||
|
// user code expects them to be gone now
|
||||||
|
delete m_text;
|
||||||
|
m_text = NULL ;
|
||||||
|
delete m_btn;
|
||||||
|
m_btn = NULL ;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// geometry
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxSize wxSpinCtrl::DoGetBestSize() const
|
||||||
|
{
|
||||||
|
wxSize sizeBtn = m_btn->GetBestSize(),
|
||||||
|
sizeText = m_text->GetBestSize();
|
||||||
|
|
||||||
|
return wxSize(sizeBtn.x + sizeText.x + MARGIN, sizeText.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSpinCtrl::DoMoveWindow(int x, int y, int width, int height)
|
||||||
|
{
|
||||||
|
wxControl::DoMoveWindow(x, y, width, height);
|
||||||
|
|
||||||
|
// position the subcontrols inside the client area
|
||||||
|
wxSize sizeBtn = m_btn->GetSize();
|
||||||
|
|
||||||
|
wxCoord wText = width - sizeBtn.x;
|
||||||
|
m_text->SetSize(0, 0, wText, height);
|
||||||
|
m_btn->SetSize(0 + wText + MARGIN, 0, -1, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// operations forwarded to the subcontrols
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxSpinCtrl::Enable(bool enable)
|
||||||
|
{
|
||||||
|
if ( !wxControl::Enable(enable) )
|
||||||
|
return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxSpinCtrl::Show(bool show)
|
||||||
|
{
|
||||||
|
if ( !wxControl::Show(show) )
|
||||||
|
return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// value and range access
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxSpinCtrl::GetTextValue(int *val) const
|
||||||
|
{
|
||||||
|
long l;
|
||||||
|
if ( !m_text->GetValue().ToLong(&l) )
|
||||||
|
{
|
||||||
|
// not a number at all
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( l < GetMin() || l > GetMax() )
|
||||||
|
{
|
||||||
|
// out of range
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
*val = l;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxSpinCtrl::GetValue() const
|
||||||
|
{
|
||||||
|
return m_btn ? m_btn->GetValue() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxSpinCtrl::GetMin() const
|
||||||
|
{
|
||||||
|
return m_btn ? m_btn->GetMin() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxSpinCtrl::GetMax() const
|
||||||
|
{
|
||||||
|
return m_btn ? m_btn->GetMax() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// changing value and range
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void wxSpinCtrl::SetTextValue(int val)
|
||||||
|
{
|
||||||
|
wxCHECK_RET( m_text, _T("invalid call to wxSpinCtrl::SetTextValue") );
|
||||||
|
|
||||||
|
m_text->SetValue(wxString::Format(_T("%d"), val));
|
||||||
|
|
||||||
|
// select all text
|
||||||
|
m_text->SetSelection(0, -1);
|
||||||
|
|
||||||
|
// and give focus to the control!
|
||||||
|
// m_text->SetFocus(); Why???? TODO.
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSpinCtrl::SetValue(int val)
|
||||||
|
{
|
||||||
|
wxCHECK_RET( m_btn, _T("invalid call to wxSpinCtrl::SetValue") );
|
||||||
|
|
||||||
|
SetTextValue(val);
|
||||||
|
|
||||||
|
m_btn->SetValue(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSpinCtrl::SetValue(const wxString& text)
|
||||||
|
{
|
||||||
|
wxCHECK_RET( m_text, _T("invalid call to wxSpinCtrl::SetValue") );
|
||||||
|
|
||||||
|
long val;
|
||||||
|
if ( text.ToLong(&val) && ((val > INT_MIN) && (val < INT_MAX)) )
|
||||||
|
{
|
||||||
|
SetValue((int)val);
|
||||||
|
}
|
||||||
|
else // not a number at all or out of range
|
||||||
|
{
|
||||||
|
m_text->SetValue(text);
|
||||||
|
m_text->SetSelection(0, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSpinCtrl::SetRange(int min, int max)
|
||||||
|
{
|
||||||
|
wxCHECK_RET( m_btn, _T("invalid call to wxSpinCtrl::SetRange") );
|
||||||
|
|
||||||
|
m_btn->SetRange(min, max);
|
||||||
|
}
|
||||||
|
|
||||||
#endif // wxUSE_SPINCTRL
|
#endif // wxUSE_SPINCTRL
|
||||||
|
|
||||||
|
@@ -594,6 +594,9 @@ void wxWindowMac::DoMoveWindow(int x, int y, int width, int height)
|
|||||||
m_width = actualWidth ;
|
m_width = actualWidth ;
|
||||||
m_height = actualHeight ;
|
m_height = actualHeight ;
|
||||||
|
|
||||||
|
// update any low-level frame-relative positions
|
||||||
|
|
||||||
|
MacUpdateDimensions() ;
|
||||||
// erase new position
|
// erase new position
|
||||||
|
|
||||||
Refresh() ;
|
Refresh() ;
|
||||||
@@ -1195,6 +1198,7 @@ void wxWindowMac::ScrollWindow(int dx, int dy, const wxRect *rect)
|
|||||||
if (child == m_vScrollBar) continue;
|
if (child == m_vScrollBar) continue;
|
||||||
if (child == m_hScrollBar) continue;
|
if (child == m_hScrollBar) continue;
|
||||||
if (child->IsTopLevel()) continue;
|
if (child->IsTopLevel()) continue;
|
||||||
|
|
||||||
int x,y;
|
int x,y;
|
||||||
child->GetPosition( &x, &y );
|
child->GetPosition( &x, &y );
|
||||||
int w,h;
|
int w,h;
|
||||||
@@ -1437,7 +1441,7 @@ bool wxWindowMac::MacDispatchMouseEvent(wxMouseEvent& event)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
|
||||||
if ( IsKindOf( CLASSINFO ( wxStaticBox ) ) || IsKindOf( CLASSINFO( wxSpinCtrl ) ))
|
if ( IsKindOf( CLASSINFO ( wxStaticBox ) ) /* || IsKindOf( CLASSINFO( wxSpinCtrl ) ) */)
|
||||||
return FALSE ;
|
return FALSE ;
|
||||||
|
|
||||||
WindowRef window = (WindowRef) MacGetRootWindow() ;
|
WindowRef window = (WindowRef) MacGetRootWindow() ;
|
||||||
|
Reference in New Issue
Block a user