Fixed uninstalled toolbars in native toolbar mode, with a method for
specifying non-native if required Added code to toolbar sample for testing uninstalled toolbar git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46558 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -47,6 +47,12 @@
|
|||||||
#error You need to enable XPM support to use XPM bitmaps with toolbar!
|
#error You need to enable XPM support to use XPM bitmaps with toolbar!
|
||||||
#endif // USE_XPM_BITMAPS
|
#endif // USE_XPM_BITMAPS
|
||||||
|
|
||||||
|
// If this is 1, the sample will test an extra toolbar identical to the
|
||||||
|
// main one, but not managed by the frame. This can test subtle differences
|
||||||
|
// in the way toolbars are handled, especially on Mac where there is one
|
||||||
|
// native, 'installed' toolbar.
|
||||||
|
#define USE_UNMANAGED_TOOLBAR 0
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// resources
|
// resources
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -96,6 +102,7 @@ public:
|
|||||||
const wxSize& size = wxDefaultSize,
|
const wxSize& size = wxDefaultSize,
|
||||||
long style = wxDEFAULT_FRAME_STYLE|wxCLIP_CHILDREN|wxNO_FULL_REPAINT_ON_RESIZE);
|
long style = wxDEFAULT_FRAME_STYLE|wxCLIP_CHILDREN|wxNO_FULL_REPAINT_ON_RESIZE);
|
||||||
|
|
||||||
|
void PopulateToolbar(wxToolBarBase* toolBar);
|
||||||
void RecreateToolbar();
|
void RecreateToolbar();
|
||||||
|
|
||||||
void OnQuit(wxCommandEvent& event);
|
void OnQuit(wxCommandEvent& event);
|
||||||
@@ -155,6 +162,9 @@ private:
|
|||||||
|
|
||||||
wxTextCtrl *m_textWindow;
|
wxTextCtrl *m_textWindow;
|
||||||
|
|
||||||
|
wxPanel *m_panel;
|
||||||
|
wxToolBar *m_extraToolBar;
|
||||||
|
|
||||||
wxToolBar *m_tbar;
|
wxToolBar *m_tbar;
|
||||||
|
|
||||||
// the path to the custom bitmap for the test toolbar tool
|
// the path to the custom bitmap for the test toolbar tool
|
||||||
@@ -337,6 +347,11 @@ void MyFrame::RecreateToolbar()
|
|||||||
toolBar = CreateToolBar(style, ID_TOOLBAR);
|
toolBar = CreateToolBar(style, ID_TOOLBAR);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
PopulateToolbar(toolBar);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyFrame::PopulateToolbar(wxToolBarBase* toolBar)
|
||||||
|
{
|
||||||
// Set up toolbar
|
// Set up toolbar
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@@ -591,10 +606,25 @@ MyFrame::MyFrame(wxFrame* parent,
|
|||||||
|
|
||||||
menuBar->Check(IDM_TOOLBAR_TOP_ORIENTATION, true );
|
menuBar->Check(IDM_TOOLBAR_TOP_ORIENTATION, true );
|
||||||
m_toolbarPosition = TOOLBAR_TOP;
|
m_toolbarPosition = TOOLBAR_TOP;
|
||||||
|
|
||||||
// Create the toolbar
|
// Create the toolbar
|
||||||
RecreateToolbar();
|
RecreateToolbar();
|
||||||
|
|
||||||
m_textWindow = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE);
|
m_panel = new wxPanel(this, wxID_ANY);
|
||||||
|
#if USE_UNMANAGED_TOOLBAR
|
||||||
|
m_extraToolBar = new wxToolBar(m_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTB_TEXT|wxTB_FLAT|wxTB_TOP);
|
||||||
|
PopulateToolbar(m_extraToolBar);
|
||||||
|
#else
|
||||||
|
m_extraToolBar = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
m_textWindow = new wxTextCtrl(m_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE);
|
||||||
|
|
||||||
|
wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL);
|
||||||
|
m_panel->SetSizer(sizer);
|
||||||
|
if (m_extraToolBar)
|
||||||
|
sizer->Add(m_extraToolBar, 0, wxEXPAND, 0);
|
||||||
|
sizer->Add(m_textWindow, 1, wxEXPAND, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyFrame::LayoutChildren()
|
void MyFrame::LayoutChildren()
|
||||||
@@ -613,7 +643,7 @@ void MyFrame::LayoutChildren()
|
|||||||
offset = 0;
|
offset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_textWindow->SetSize(offset, 0, size.x - offset, size.y);
|
m_panel->SetSize(offset, 0, size.x - offset, size.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyFrame::OnSize(wxSizeEvent& event)
|
void MyFrame::OnSize(wxSizeEvent& event)
|
||||||
|
@@ -22,6 +22,7 @@
|
|||||||
#include "wx/app.h"
|
#include "wx/app.h"
|
||||||
#include "wx/mac/uma.h"
|
#include "wx/mac/uma.h"
|
||||||
#include "wx/geometry.h"
|
#include "wx/geometry.h"
|
||||||
|
#include "wx/sysopt.h"
|
||||||
|
|
||||||
|
|
||||||
#ifdef __WXMAC_OSX__
|
#ifdef __WXMAC_OSX__
|
||||||
@@ -842,6 +843,8 @@ bool wxToolBar::Create(
|
|||||||
OSStatus err = noErr;
|
OSStatus err = noErr;
|
||||||
|
|
||||||
#if wxMAC_USE_NATIVE_TOOLBAR
|
#if wxMAC_USE_NATIVE_TOOLBAR
|
||||||
|
if (parent->IsKindOf(CLASSINFO(wxFrame)) && wxSystemOptions::GetOptionInt(wxT("mac.toolbar.no-native")) != 1)
|
||||||
|
{
|
||||||
wxString labelStr = wxString::Format( wxT("%xd"), (int)this );
|
wxString labelStr = wxString::Format( wxT("%xd"), (int)this );
|
||||||
err = HIToolbarCreate(
|
err = HIToolbarCreate(
|
||||||
wxMacCFStringHolder( labelStr, wxFont::GetDefaultEncoding() ), 0,
|
wxMacCFStringHolder( labelStr, wxFont::GetDefaultEncoding() ), 0,
|
||||||
@@ -865,6 +868,7 @@ bool wxToolBar::Create(
|
|||||||
HIToolbarSetDisplayMode( (HIToolbarRef) m_macHIToolbarRef, mode );
|
HIToolbarSetDisplayMode( (HIToolbarRef) m_macHIToolbarRef, mode );
|
||||||
HIToolbarSetDisplaySize( (HIToolbarRef) m_macHIToolbarRef, displaySize );
|
HIToolbarSetDisplaySize( (HIToolbarRef) m_macHIToolbarRef, displaySize );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#endif // wxMAC_USE_NATIVE_TOOLBAR
|
#endif // wxMAC_USE_NATIVE_TOOLBAR
|
||||||
|
|
||||||
return (err == noErr);
|
return (err == noErr);
|
||||||
@@ -1470,12 +1474,17 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase)
|
|||||||
|
|
||||||
// in flat style we need a visual separator
|
// in flat style we need a visual separator
|
||||||
#if wxMAC_USE_NATIVE_TOOLBAR
|
#if wxMAC_USE_NATIVE_TOOLBAR
|
||||||
|
if (m_macHIToolbarRef != NULL)
|
||||||
|
{
|
||||||
err = HIToolbarItemCreate(
|
err = HIToolbarItemCreate(
|
||||||
kHIToolbarSeparatorIdentifier,
|
kHIToolbarSeparatorIdentifier,
|
||||||
kHIToolbarItemCantBeRemoved | kHIToolbarItemIsSeparator | kHIToolbarItemAllowDuplicates,
|
kHIToolbarItemCantBeRemoved | kHIToolbarItemIsSeparator | kHIToolbarItemAllowDuplicates,
|
||||||
&item );
|
&item );
|
||||||
if (err == noErr)
|
if (err == noErr)
|
||||||
tool->SetToolbarItemRef( item );
|
tool->SetToolbarItemRef( item );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
err = noErr;
|
||||||
#endif // wxMAC_USE_NATIVE_TOOLBAR
|
#endif // wxMAC_USE_NATIVE_TOOLBAR
|
||||||
|
|
||||||
CreateSeparatorControl( window, &toolrect, &controlHandle );
|
CreateSeparatorControl( window, &toolrect, &controlHandle );
|
||||||
@@ -1504,6 +1513,8 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if wxMAC_USE_NATIVE_TOOLBAR
|
#if wxMAC_USE_NATIVE_TOOLBAR
|
||||||
|
if (m_macHIToolbarRef != NULL)
|
||||||
|
{
|
||||||
wxString labelStr = wxString::Format(wxT("%xd"), (int)tool);
|
wxString labelStr = wxString::Format(wxT("%xd"), (int)tool);
|
||||||
err = HIToolbarItemCreate(
|
err = HIToolbarItemCreate(
|
||||||
wxMacCFStringHolder(labelStr, wxFont::GetDefaultEncoding()),
|
wxMacCFStringHolder(labelStr, wxFont::GetDefaultEncoding()),
|
||||||
@@ -1518,6 +1529,9 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase)
|
|||||||
HIToolbarItemSetCommandID( item, kHIToolbarCommandPressAction );
|
HIToolbarItemSetCommandID( item, kHIToolbarCommandPressAction );
|
||||||
tool->SetToolbarItemRef( item );
|
tool->SetToolbarItemRef( item );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
err = noErr;
|
||||||
#endif // wxMAC_USE_NATIVE_TOOLBAR
|
#endif // wxMAC_USE_NATIVE_TOOLBAR
|
||||||
|
|
||||||
wxMacReleaseBitmapButton( &info );
|
wxMacReleaseBitmapButton( &info );
|
||||||
@@ -1538,6 +1552,7 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase)
|
|||||||
case wxTOOL_STYLE_CONTROL:
|
case wxTOOL_STYLE_CONTROL:
|
||||||
|
|
||||||
#if wxMAC_USE_NATIVE_TOOLBAR
|
#if wxMAC_USE_NATIVE_TOOLBAR
|
||||||
|
if (m_macHIToolbarRef != NULL)
|
||||||
{
|
{
|
||||||
wxCHECK_MSG( tool->GetControl(), false, _T("control must be non-NULL") );
|
wxCHECK_MSG( tool->GetControl(), false, _T("control must be non-NULL") );
|
||||||
|
|
||||||
@@ -1552,7 +1567,11 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase)
|
|||||||
}
|
}
|
||||||
CFRelease( data ) ;
|
CFRelease( data ) ;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
err = noErr;
|
||||||
|
break;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
// right now there's nothing to do here
|
// right now there's nothing to do here
|
||||||
#endif
|
#endif
|
||||||
@@ -1564,7 +1583,7 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase)
|
|||||||
|
|
||||||
#if wxMAC_USE_NATIVE_TOOLBAR
|
#if wxMAC_USE_NATIVE_TOOLBAR
|
||||||
wxString label = tool->GetLabel();
|
wxString label = tool->GetLabel();
|
||||||
if ( !label.empty() )
|
if (m_macHIToolbarRef && !label.empty() )
|
||||||
{
|
{
|
||||||
// strip mnemonics from the label for compatibility
|
// strip mnemonics from the label for compatibility
|
||||||
// with the usual labels in wxStaticText sense
|
// with the usual labels in wxStaticText sense
|
||||||
@@ -1630,11 +1649,14 @@ bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolbase)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if wxMAC_USE_NATIVE_TOOLBAR
|
#if wxMAC_USE_NATIVE_TOOLBAR
|
||||||
|
if (m_macHIToolbarRef != NULL)
|
||||||
|
{
|
||||||
if ( removeIndex != -1 && m_macHIToolbarRef )
|
if ( removeIndex != -1 && m_macHIToolbarRef )
|
||||||
{
|
{
|
||||||
HIToolbarRemoveItemAtIndex( (HIToolbarRef) m_macHIToolbarRef, removeIndex );
|
HIToolbarRemoveItemAtIndex( (HIToolbarRef) m_macHIToolbarRef, removeIndex );
|
||||||
tool->SetIndex( -1 );
|
tool->SetIndex( -1 );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
switch ( tool->GetStyle() )
|
switch ( tool->GetStyle() )
|
||||||
{
|
{
|
||||||
@@ -1668,8 +1690,11 @@ bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolbase)
|
|||||||
tool2->SetPosition( pt );
|
tool2->SetPosition( pt );
|
||||||
|
|
||||||
#if wxMAC_USE_NATIVE_TOOLBAR
|
#if wxMAC_USE_NATIVE_TOOLBAR
|
||||||
|
if (m_macHIToolbarRef != NULL)
|
||||||
|
{
|
||||||
if ( removeIndex != -1 && tool2->GetIndex() > removeIndex )
|
if ( removeIndex != -1 && tool2->GetIndex() > removeIndex )
|
||||||
tool2->SetIndex( tool2->GetIndex() - 1 );
|
tool2->SetIndex( tool2->GetIndex() - 1 );
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user