#pragma implementation "notebook.h"
#endif
+#include "wx/app.h"
#include "wx/string.h"
#include "wx/log.h"
#include "wx/imaglist.h"
// check that the page index is valid
#define IS_VALID_PAGE(nPage) (((nPage) >= 0) && ((nPage) < GetPageCount()))
-#ifdef __DARWIN__
- // I got these values for Mac OS X from the Appearance mgr docs. (Mark Newsam)
-const short kwxMacTabLeftMargin = 20 ;
-const short kwxMacTabTopMargin = 38 ;
-const short kwxMacTabRightMargin = 20 ;
-const short kwxMacTabBottomMargin = 12 ;
-#else
-const short kwxMacTabLeftMargin = 16 ;
-const short kwxMacTabTopMargin = 30 ;
-const short kwxMacTabRightMargin = 16 ;
-const short kwxMacTabBottomMargin = 16 ;
-#endif
+static bool constantsSet = false ;
+
+ short kwxMacTabLeftMargin = 0 ;
+ short kwxMacTabTopMargin = 0 ;
+ short kwxMacTabRightMargin = 0 ;
+ short kwxMacTabBottomMargin = 0 ;
// ----------------------------------------------------------------------------
// event table
BEGIN_EVENT_TABLE(wxNotebook, wxControl)
EVT_NOTEBOOK_PAGE_CHANGED(-1, wxNotebook::OnSelChange)
-
+ EVT_MOUSE_EVENTS(wxNotebook::OnMouse)
+
EVT_SIZE(wxNotebook::OnSize)
EVT_SET_FOCUS(wxNotebook::OnSetFocus)
EVT_NAVIGATION_KEY(wxNotebook::OnNavigationKey)
// common part of all ctors
void wxNotebook::Init()
{
-#ifdef __DARWIN__
- m_macHorizontalBorder = 7;
- m_macVerticalBorder = 8;
-#endif
+ if ( !constantsSet )
+ {
+ if ( UMAHasAquaLayout() )
+ {
+ // I got these values for Mac OS X from the Appearance mgr docs. (Mark Newsam)
+ kwxMacTabLeftMargin = 20 ;
+ kwxMacTabTopMargin = 38 ;
+ kwxMacTabRightMargin = 20 ;
+ kwxMacTabBottomMargin = 12 ;
+ }
+ else
+ {
+ kwxMacTabLeftMargin = 16 ;
+ kwxMacTabTopMargin = 30 ;
+ kwxMacTabRightMargin = 16 ;
+ kwxMacTabBottomMargin = 16 ;
+ }
+ constantsSet = true ;
+ }
+ if ( UMAHasAquaLayout() )
+ {
+ m_macHorizontalBorder = 7;
+ m_macVerticalBorder = 8;
+ }
+
m_nSelection = -1;
}
MacPreControlCreate( parent , id , "" , pos , size ,style, wxDefaultValidator , name , &bounds , title ) ;
- m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , false , 0 , 0 , 1,
+ m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , title , false , 0 , 0 , 1,
kControlTabSmallProc , (long) this ) ;
MacPostControlCreate() ;
m_macControl = NULL ;
}
+wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage)
+{
+ wxSize sizeTotal = sizePage;
+
+ int major,minor;
+ wxGetOsVersion( &major, &minor );
+
+ // Mac has large notebook borders. Aqua even more so.
+
+ if ( HasFlag(wxNB_LEFT) || HasFlag(wxNB_RIGHT) )
+ {
+ sizeTotal.x += 90;
+
+ if (major >= 10)
+ sizeTotal.y += 28;
+ else
+ sizeTotal.y += 20;
+ }
+ else
+ {
+ if (major >= 10)
+ {
+ sizeTotal.x += 34;
+ sizeTotal.y += 46;
+ }
+ else
+ {
+ sizeTotal.x += 22;
+ sizeTotal.y += 44;
+ }
+ }
+
+ return sizeTotal;
+}
+
// ----------------------------------------------------------------------------
// wxNotebook accessors
// ----------------------------------------------------------------------------
return m_nSelection ;
ChangePage(m_nSelection, nPage);
- SetControlValue( m_macControl , m_nSelection + 1 ) ;
+ SetControlValue( (ControlHandle) m_macControl , m_nSelection + 1 ) ;
return m_nSelection;
}
*/
void wxNotebook::MacSetupTabs()
{
- SetControlMaximum( m_macControl , GetPageCount() ) ;
+ SetControlMaximum( (ControlHandle) m_macControl , GetPageCount() ) ;
wxNotebookPage *page;
ControlTabInfoRec info;
strcpy( (char *) info.name , page->GetLabel() ) ;
c2pstr( (char *) info.name ) ;
#endif
- SetControlData( m_macControl, ii+1, kControlTabInfoTag,
+ SetControlData( (ControlHandle) m_macControl, ii+1, kControlTabInfoTag,
sizeof( ControlTabInfoRec) , (char*) &info ) ;
- SetControlData( m_macControl, ii+1, kControlTabEnabledFlagTag,
+ SetControlData( (ControlHandle) m_macControl, ii+1, kControlTabEnabledFlagTag,
sizeof( Boolean ), (Ptr)&enabled );
}
Rect bounds;
- GetControlBounds(m_macControl, &bounds);
- InvalWindowRect(GetMacRootWindow(), &bounds);
+ GetControlBounds((ControlHandle)m_macControl, &bounds);
+ InvalWindowRect((WindowRef)MacGetRootWindow(), &bounds);
}
// ----------------------------------------------------------------------------
m_nSelection = nSel;
}
-void wxNotebook::MacHandleControlClick( ControlHandle control , SInt16 controlpart )
+
+void wxNotebook::OnMouse( wxMouseEvent &event )
+{
+ if ( (ControlHandle) m_macControl == NULL )
+ {
+ event.Skip() ;
+ return ;
+ }
+
+ if (event.GetEventType() == wxEVT_LEFT_DOWN || event.GetEventType() == wxEVT_LEFT_DCLICK )
+ {
+ int x = event.m_x ;
+ int y = event.m_y ;
+
+ MacClientToRootWindow( &x , &y ) ;
+
+ ControlHandle control ;
+ Point localwhere ;
+ SInt16 controlpart ;
+
+ localwhere.h = x ;
+ localwhere.v = y ;
+
+ short modifiers = 0;
+
+ if ( !event.m_leftDown && !event.m_rightDown )
+ modifiers |= btnState ;
+
+ if ( event.m_shiftDown )
+ modifiers |= shiftKey ;
+
+ if ( event.m_controlDown )
+ modifiers |= controlKey ;
+
+ if ( event.m_altDown )
+ modifiers |= optionKey ;
+
+ if ( event.m_metaDown )
+ modifiers |= cmdKey ;
+
+ control = (ControlHandle) m_macControl ;
+ if ( control && ::IsControlActive( control ) )
+ {
+ {
+ wxNotebookEvent changing(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, m_windowId,
+ ::GetControlValue(control) - 1, m_nSelection);
+ changing.SetEventObject(this);
+ ProcessEvent(changing);
+
+ if(changing.IsAllowed())
+ {
+ controlpart = ::HandleControlClick(control, localwhere, modifiers,
+ (ControlActionUPP) -1);
+ wxTheApp->s_lastMouseDown = 0 ;
+
+ wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, m_windowId,
+ ::GetControlValue(control) - 1, m_nSelection);
+ event.SetEventObject(this);
+
+ ProcessEvent(event);
+ }
+ }
+ }
+ }
+}
+
+
+void wxNotebook::MacHandleControlClick( WXWidget control , wxInt16 controlpart )
{
- wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, m_windowId , ::GetControlValue(m_macControl) - 1, m_nSelection);
+#if 0
+ wxNotebookEvent event(wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, m_windowId , ::GetControlValue((ControlHandle)m_macControl) - 1, m_nSelection);
event.SetEventObject(this);
ProcessEvent(event);
+#endif
}