MacHandleControlClick extended by mouseStillDown state for supporting things like THUMBRELEASE

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20998 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2003-06-07 20:58:38 +00:00
parent e71a0aa95f
commit 4b26b60fac
22 changed files with 60 additions and 50 deletions

View File

@@ -117,7 +117,7 @@ void wxButton::Command (wxCommandEvent & event)
ProcessCommand (event); ProcessCommand (event);
} }
void wxButton::MacHandleControlClick( WXWidget WXUNUSED(control) , wxInt16 controlpart ) void wxButton::MacHandleControlClick( WXWidget WXUNUSED(control) , wxInt16 controlpart , bool WXUNUSED(mouseStillDown) )
{ {
if ( controlpart != kControlNoPart ) if ( controlpart != kControlNoPart )
{ {

View File

@@ -117,7 +117,7 @@ void wxButton::Command (wxCommandEvent & event)
ProcessCommand (event); ProcessCommand (event);
} }
void wxButton::MacHandleControlClick( WXWidget WXUNUSED(control) , wxInt16 controlpart ) void wxButton::MacHandleControlClick( WXWidget WXUNUSED(control) , wxInt16 controlpart , bool WXUNUSED(mouseStillDown) )
{ {
if ( controlpart != kControlNoPart ) if ( controlpart != kControlNoPart )
{ {

View File

@@ -61,7 +61,7 @@ void wxCheckBox::Command (wxCommandEvent & event)
ProcessCommand (event); ProcessCommand (event);
} }
void wxCheckBox::MacHandleControlClick( WXWidget WXUNUSED(control), wxInt16 WXUNUSED(controlpart) ) void wxCheckBox::MacHandleControlClick( WXWidget WXUNUSED(control), wxInt16 WXUNUSED(controlpart) , bool WXUNUSED(mouseStillDown) )
{ {
SetValue( !GetValue() ) ; SetValue( !GetValue() ) ;
wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, m_windowId ); wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, m_windowId );

View File

@@ -207,7 +207,7 @@ wxClientData* wxChoice::DoGetItemClientObject( int n ) const
return (wxClientData *)DoGetItemClientData(n); return (wxClientData *)DoGetItemClientData(n);
} }
void wxChoice::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxChoice::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED(mouseStillDown))
{ {
wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId ); wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId );
int n = GetSelection(); int n = GetSelection();

View File

@@ -78,7 +78,7 @@ pascal void wxMacLiveScrollbarActionProc( ControlHandle control , ControlPartCod
wxControl* wx = (wxControl*) GetControlReference( control ) ; wxControl* wx = (wxControl*) GetControlReference( control ) ;
if ( wx ) if ( wx )
{ {
wx->MacHandleControlClick( control , partCode ) ; wx->MacHandleControlClick( control , partCode , true /* stillDown */ ) ;
} }
} }
} }
@@ -365,6 +365,10 @@ void wxControl::MacPostControlCreate()
{ {
ControlFontStyleRec controlstyle ; ControlFontStyleRec controlstyle ;
controlstyle.flags = kControlUseFontMask ; controlstyle.flags = kControlUseFontMask ;
if (IsKindOf( CLASSINFO( wxButton ) ) )
controlstyle.font = kControlFontSmallSystemFont ; // eventually kControlFontBigSystemFont ;
else
controlstyle.font = kControlFontSmallSystemFont ; controlstyle.font = kControlFontSmallSystemFont ;
::SetControlFontStyle( (ControlHandle) m_macControl , &controlstyle ) ; ::SetControlFontStyle( (ControlHandle) m_macControl , &controlstyle ) ;
@@ -871,11 +875,9 @@ void wxControl::OnMouseEvent( wxMouseEvent &event )
{ {
controlpart = ::HandleControlClick( control , localwhere , modifiers , (ControlActionUPP) -1 ) ; controlpart = ::HandleControlClick( control , localwhere , modifiers , (ControlActionUPP) -1 ) ;
wxTheApp->s_lastMouseDown = 0 ; wxTheApp->s_lastMouseDown = 0 ;
if ( control && controlpart != kControlNoPart && if ( control && controlpart != kControlNoPart )
! IsKindOf( CLASSINFO( wxScrollBar ) )
) // otherwise we will get the event twice for scrollbar
{ {
MacHandleControlClick( control , controlpart ) ; MacHandleControlClick( control , controlpart , false /* mouse not down anymore */ ) ;
} }
} }
} }
@@ -895,7 +897,7 @@ bool wxControl::MacCanFocus() const
return false ; return false ;
} }
void wxControl::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxControl::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED( mouseStillDown ) )
{ {
wxASSERT_MSG( (ControlHandle) m_macControl != NULL , wxT("No valid mac control") ) ; wxASSERT_MSG( (ControlHandle) m_macControl != NULL , wxT("No valid mac control") ) ;
} }

View File

@@ -823,7 +823,7 @@ void wxListBox::OnSize( const wxSizeEvent &event)
LCellSize( pt , (ListHandle)m_macList ) ; LCellSize( pt , (ListHandle)m_macList ) ;
} }
void wxListBox::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxListBox::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED(mouseStillDown))
{ {
Boolean wasDoubleClick = false ; Boolean wasDoubleClick = false ;
long result ; long result ;

View File

@@ -634,7 +634,7 @@ void wxNotebook::OnMouse( wxMouseEvent &event )
} }
void wxNotebook::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxNotebook::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED( mouseStillDown ) )
{ {
#if 0 #if 0
wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, m_windowId , ::GetControl32BitValue((ControlHandle)m_macControl) - 1, m_nSelection); wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, m_windowId , ::GetControl32BitValue((ControlHandle)m_macControl) - 1, m_nSelection);

View File

@@ -97,7 +97,7 @@ void wxRadioButton::Command (wxCommandEvent & event)
ProcessCommand (event); ProcessCommand (event);
} }
void wxRadioButton::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxRadioButton::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED(mouseStillDown))
{ {
if ( GetValue() ) if ( GetValue() )
return ; return ;

View File

@@ -105,7 +105,7 @@ void wxScrollBar::Command(wxCommandEvent& event)
ProcessCommand(event); ProcessCommand(event);
} }
void wxScrollBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxScrollBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool mouseStillDown )
{ {
if ( (ControlHandle) m_macControl == NULL ) if ( (ControlHandle) m_macControl == NULL )
return ; return ;
@@ -117,6 +117,10 @@ void wxScrollBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart
wxEventType scrollEvent = wxEVT_NULL; wxEventType scrollEvent = wxEVT_NULL;
int nScrollInc; int nScrollInc;
// all events have already been reported during mouse down, except for THUMBRELEASE
if ( !mouseStillDown && controlpart !=kControlIndicatorPart )
return ;
switch( controlpart ) switch( controlpart )
{ {
case kControlUpButtonPart : case kControlUpButtonPart :
@@ -137,7 +141,10 @@ void wxScrollBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart
break ; break ;
case kControlIndicatorPart : case kControlIndicatorPart :
nScrollInc = 0 ; nScrollInc = 0 ;
if ( mouseStillDown )
scrollEvent = wxEVT_SCROLL_THUMBTRACK; scrollEvent = wxEVT_SCROLL_THUMBTRACK;
else
scrollEvent = wxEVT_SCROLL_THUMBRELEASE;
break ; break ;
default : default :
wxFAIL_MSG(wxT("illegal scrollbar selector")); wxFAIL_MSG(wxT("illegal scrollbar selector"));

View File

@@ -238,7 +238,7 @@ void wxSlider::Command (wxCommandEvent & event)
ProcessCommand (event); ProcessCommand (event);
} }
void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart, bool WXUNUSED(mouseStillDown) )
{ {
SInt16 value = ::GetControl32BitValue( (ControlHandle) m_macControl ) ; SInt16 value = ::GetControl32BitValue( (ControlHandle) m_macControl ) ;

View File

@@ -147,7 +147,7 @@ void wxSpinButton::MacHandleValueChanged( int inc )
} }
} }
void wxSpinButton::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxSpinButton::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED(mouseStillDown))
{ {
if ( (ControlHandle) m_macControl == NULL ) if ( (ControlHandle) m_macControl == NULL )
return ; return ;

View File

@@ -390,7 +390,7 @@ wxSize wxToolBar::GetToolSize() const
return wxSize(m_defaultWidth + 4, m_defaultHeight + 4); return wxSize(m_defaultWidth + 4, m_defaultHeight + 4);
} }
void wxToolBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxToolBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED( mouseStillDown ) )
{ {
wxToolBarToolsList::Node *node; wxToolBarToolsList::Node *node;
for ( node = m_tools.GetFirst(); node; node = node->GetNext() ) for ( node = m_tools.GetFirst(); node; node = node->GetNext() )
@@ -602,15 +602,11 @@ void wxToolBar::OnMouse( wxMouseEvent &event )
if ( control && ::IsControlActive( control ) ) if ( control && ::IsControlActive( control ) )
{ {
{ {
if ( controlpart == kControlIndicatorPart && !UMAHasAppearance() )
controlpart = ::HandleControlClick( control , localwhere , modifiers , (ControlActionUPP) NULL ) ;
else
controlpart = ::HandleControlClick( control , localwhere , modifiers , (ControlActionUPP) -1 ) ; controlpart = ::HandleControlClick( control , localwhere , modifiers , (ControlActionUPP) -1 ) ;
wxTheApp->s_lastMouseDown = 0 ; wxTheApp->s_lastMouseDown = 0 ;
if ( controlpart && ! ( ( UMAHasAppearance() || (controlpart != kControlIndicatorPart) ) if ( control && controlpart != kControlNoPart ) // otherwise we will get the event twice
&& (IsKindOf( CLASSINFO( wxScrollBar ) ) ) ) ) // otherwise we will get the event twice
{ {
MacHandleControlClick( control , controlpart ) ; MacHandleControlClick( control , controlpart , false /* not down anymore */ ) ;
} }
} }
} }

View File

@@ -61,7 +61,7 @@ void wxCheckBox::Command (wxCommandEvent & event)
ProcessCommand (event); ProcessCommand (event);
} }
void wxCheckBox::MacHandleControlClick( WXWidget WXUNUSED(control), wxInt16 WXUNUSED(controlpart) ) void wxCheckBox::MacHandleControlClick( WXWidget WXUNUSED(control), wxInt16 WXUNUSED(controlpart) , bool WXUNUSED(mouseStillDown) )
{ {
SetValue( !GetValue() ) ; SetValue( !GetValue() ) ;
wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, m_windowId ); wxCommandEvent event(wxEVT_COMMAND_CHECKBOX_CLICKED, m_windowId );

View File

@@ -207,7 +207,7 @@ wxClientData* wxChoice::DoGetItemClientObject( int n ) const
return (wxClientData *)DoGetItemClientData(n); return (wxClientData *)DoGetItemClientData(n);
} }
void wxChoice::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxChoice::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED(mouseStillDown))
{ {
wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId ); wxCommandEvent event(wxEVT_COMMAND_CHOICE_SELECTED, m_windowId );
int n = GetSelection(); int n = GetSelection();

View File

@@ -78,7 +78,7 @@ pascal void wxMacLiveScrollbarActionProc( ControlHandle control , ControlPartCod
wxControl* wx = (wxControl*) GetControlReference( control ) ; wxControl* wx = (wxControl*) GetControlReference( control ) ;
if ( wx ) if ( wx )
{ {
wx->MacHandleControlClick( control , partCode ) ; wx->MacHandleControlClick( control , partCode , true /* stillDown */ ) ;
} }
} }
} }
@@ -365,6 +365,10 @@ void wxControl::MacPostControlCreate()
{ {
ControlFontStyleRec controlstyle ; ControlFontStyleRec controlstyle ;
controlstyle.flags = kControlUseFontMask ; controlstyle.flags = kControlUseFontMask ;
if (IsKindOf( CLASSINFO( wxButton ) ) )
controlstyle.font = kControlFontSmallSystemFont ; // eventually kControlFontBigSystemFont ;
else
controlstyle.font = kControlFontSmallSystemFont ; controlstyle.font = kControlFontSmallSystemFont ;
::SetControlFontStyle( (ControlHandle) m_macControl , &controlstyle ) ; ::SetControlFontStyle( (ControlHandle) m_macControl , &controlstyle ) ;
@@ -871,11 +875,9 @@ void wxControl::OnMouseEvent( wxMouseEvent &event )
{ {
controlpart = ::HandleControlClick( control , localwhere , modifiers , (ControlActionUPP) -1 ) ; controlpart = ::HandleControlClick( control , localwhere , modifiers , (ControlActionUPP) -1 ) ;
wxTheApp->s_lastMouseDown = 0 ; wxTheApp->s_lastMouseDown = 0 ;
if ( control && controlpart != kControlNoPart && if ( control && controlpart != kControlNoPart )
! IsKindOf( CLASSINFO( wxScrollBar ) )
) // otherwise we will get the event twice for scrollbar
{ {
MacHandleControlClick( control , controlpart ) ; MacHandleControlClick( control , controlpart , false /* mouse not down anymore */ ) ;
} }
} }
} }
@@ -895,7 +897,7 @@ bool wxControl::MacCanFocus() const
return false ; return false ;
} }
void wxControl::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxControl::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED( mouseStillDown ) )
{ {
wxASSERT_MSG( (ControlHandle) m_macControl != NULL , wxT("No valid mac control") ) ; wxASSERT_MSG( (ControlHandle) m_macControl != NULL , wxT("No valid mac control") ) ;
} }

View File

@@ -823,7 +823,7 @@ void wxListBox::OnSize( const wxSizeEvent &event)
LCellSize( pt , (ListHandle)m_macList ) ; LCellSize( pt , (ListHandle)m_macList ) ;
} }
void wxListBox::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxListBox::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED(mouseStillDown))
{ {
Boolean wasDoubleClick = false ; Boolean wasDoubleClick = false ;
long result ; long result ;

View File

@@ -634,7 +634,7 @@ void wxNotebook::OnMouse( wxMouseEvent &event )
} }
void wxNotebook::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxNotebook::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED( mouseStillDown ) )
{ {
#if 0 #if 0
wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, m_windowId , ::GetControl32BitValue((ControlHandle)m_macControl) - 1, m_nSelection); wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, m_windowId , ::GetControl32BitValue((ControlHandle)m_macControl) - 1, m_nSelection);

View File

@@ -97,7 +97,7 @@ void wxRadioButton::Command (wxCommandEvent & event)
ProcessCommand (event); ProcessCommand (event);
} }
void wxRadioButton::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxRadioButton::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED(mouseStillDown))
{ {
if ( GetValue() ) if ( GetValue() )
return ; return ;

View File

@@ -105,7 +105,7 @@ void wxScrollBar::Command(wxCommandEvent& event)
ProcessCommand(event); ProcessCommand(event);
} }
void wxScrollBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxScrollBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool mouseStillDown )
{ {
if ( (ControlHandle) m_macControl == NULL ) if ( (ControlHandle) m_macControl == NULL )
return ; return ;
@@ -117,6 +117,10 @@ void wxScrollBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart
wxEventType scrollEvent = wxEVT_NULL; wxEventType scrollEvent = wxEVT_NULL;
int nScrollInc; int nScrollInc;
// all events have already been reported during mouse down, except for THUMBRELEASE
if ( !mouseStillDown && controlpart !=kControlIndicatorPart )
return ;
switch( controlpart ) switch( controlpart )
{ {
case kControlUpButtonPart : case kControlUpButtonPart :
@@ -137,7 +141,10 @@ void wxScrollBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart
break ; break ;
case kControlIndicatorPart : case kControlIndicatorPart :
nScrollInc = 0 ; nScrollInc = 0 ;
if ( mouseStillDown )
scrollEvent = wxEVT_SCROLL_THUMBTRACK; scrollEvent = wxEVT_SCROLL_THUMBTRACK;
else
scrollEvent = wxEVT_SCROLL_THUMBRELEASE;
break ; break ;
default : default :
wxFAIL_MSG(wxT("illegal scrollbar selector")); wxFAIL_MSG(wxT("illegal scrollbar selector"));

View File

@@ -238,7 +238,7 @@ void wxSlider::Command (wxCommandEvent & event)
ProcessCommand (event); ProcessCommand (event);
} }
void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxSlider::MacHandleControlClick( WXWidget control , wxInt16 controlpart, bool WXUNUSED(mouseStillDown) )
{ {
SInt16 value = ::GetControl32BitValue( (ControlHandle) m_macControl ) ; SInt16 value = ::GetControl32BitValue( (ControlHandle) m_macControl ) ;

View File

@@ -147,7 +147,7 @@ void wxSpinButton::MacHandleValueChanged( int inc )
} }
} }
void wxSpinButton::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxSpinButton::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED(mouseStillDown))
{ {
if ( (ControlHandle) m_macControl == NULL ) if ( (ControlHandle) m_macControl == NULL )
return ; return ;

View File

@@ -390,7 +390,7 @@ wxSize wxToolBar::GetToolSize() const
return wxSize(m_defaultWidth + 4, m_defaultHeight + 4); return wxSize(m_defaultWidth + 4, m_defaultHeight + 4);
} }
void wxToolBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart ) void wxToolBar::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED( mouseStillDown ) )
{ {
wxToolBarToolsList::Node *node; wxToolBarToolsList::Node *node;
for ( node = m_tools.GetFirst(); node; node = node->GetNext() ) for ( node = m_tools.GetFirst(); node; node = node->GetNext() )
@@ -602,15 +602,11 @@ void wxToolBar::OnMouse( wxMouseEvent &event )
if ( control && ::IsControlActive( control ) ) if ( control && ::IsControlActive( control ) )
{ {
{ {
if ( controlpart == kControlIndicatorPart && !UMAHasAppearance() )
controlpart = ::HandleControlClick( control , localwhere , modifiers , (ControlActionUPP) NULL ) ;
else
controlpart = ::HandleControlClick( control , localwhere , modifiers , (ControlActionUPP) -1 ) ; controlpart = ::HandleControlClick( control , localwhere , modifiers , (ControlActionUPP) -1 ) ;
wxTheApp->s_lastMouseDown = 0 ; wxTheApp->s_lastMouseDown = 0 ;
if ( controlpart && ! ( ( UMAHasAppearance() || (controlpart != kControlIndicatorPart) ) if ( control && controlpart != kControlNoPart ) // otherwise we will get the event twice
&& (IsKindOf( CLASSINFO( wxScrollBar ) ) ) ) ) // otherwise we will get the event twice
{ {
MacHandleControlClick( control , controlpart ) ; MacHandleControlClick( control , controlpart , false /* not down anymore */ ) ;
} }
} }
} }