adding toolbar implementation for iphone
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62633 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -48,8 +48,10 @@ class WXDLLIMPEXP_CORE wxToolBar: public wxToolBarBase
|
|||||||
// override/implement base class virtuals
|
// override/implement base class virtuals
|
||||||
virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const;
|
virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const;
|
||||||
|
|
||||||
|
#ifndef __WXOSX_IPHONE__
|
||||||
virtual bool Show(bool show = true);
|
virtual bool Show(bool show = true);
|
||||||
virtual bool IsShown() const;
|
virtual bool IsShown() const;
|
||||||
|
#endif
|
||||||
virtual bool Realize();
|
virtual bool Realize();
|
||||||
|
|
||||||
virtual void SetToolBitmapSize(const wxSize& size);
|
virtual void SetToolBitmapSize(const wxSize& size);
|
||||||
@@ -60,12 +62,14 @@ class WXDLLIMPEXP_CORE wxToolBar: public wxToolBarBase
|
|||||||
virtual void SetToolNormalBitmap(int id, const wxBitmap& bitmap);
|
virtual void SetToolNormalBitmap(int id, const wxBitmap& bitmap);
|
||||||
virtual void SetToolDisabledBitmap(int id, const wxBitmap& bitmap);
|
virtual void SetToolDisabledBitmap(int id, const wxBitmap& bitmap);
|
||||||
|
|
||||||
|
#ifndef __WXOSX_IPHONE__
|
||||||
// Add all the buttons
|
// Add all the buttons
|
||||||
|
|
||||||
virtual wxString MacGetToolTipString( wxPoint &where ) ;
|
virtual wxString MacGetToolTipString( wxPoint &where ) ;
|
||||||
void OnPaint(wxPaintEvent& event) ;
|
void OnPaint(wxPaintEvent& event) ;
|
||||||
void OnMouse(wxMouseEvent& event) ;
|
void OnMouse(wxMouseEvent& event) ;
|
||||||
virtual void MacSuperChangedPosition() ;
|
virtual void MacSuperChangedPosition() ;
|
||||||
|
#endif
|
||||||
|
|
||||||
#if wxOSX_USE_NATIVE_TOOLBAR
|
#if wxOSX_USE_NATIVE_TOOLBAR
|
||||||
bool MacInstallNativeToolbar(bool usesNative);
|
bool MacInstallNativeToolbar(bool usesNative);
|
||||||
@@ -76,8 +80,10 @@ protected:
|
|||||||
// common part of all ctors
|
// common part of all ctors
|
||||||
void Init();
|
void Init();
|
||||||
|
|
||||||
virtual void DoGetSize(int *width, int *height) const;
|
#ifndef __WXOSX_IPHONE__
|
||||||
|
virtual void DoGetSize(int *width, int *height) const;
|
||||||
virtual wxSize DoGetBestSize() const;
|
virtual wxSize DoGetBestSize() const;
|
||||||
|
#endif
|
||||||
virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool);
|
virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool);
|
||||||
virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool);
|
virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool);
|
||||||
|
|
||||||
@@ -101,6 +107,9 @@ protected:
|
|||||||
bool m_macUsesNativeToolbar ;
|
bool m_macUsesNativeToolbar ;
|
||||||
void* m_macToolbar ;
|
void* m_macToolbar ;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __WXOSX_IPHONE__
|
||||||
|
WX_UIView m_macToolbar;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // wxUSE_TOOLBAR
|
#endif // wxUSE_TOOLBAR
|
||||||
|
411
src/osx/iphone/toolbar.mm
Normal file
411
src/osx/iphone/toolbar.mm
Normal file
@@ -0,0 +1,411 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: src/osx/carbon/toolbar.cpp
|
||||||
|
// Purpose: wxToolBar
|
||||||
|
// Author: Stefan Csomor
|
||||||
|
// Modified by:
|
||||||
|
// Created: 04/01/98
|
||||||
|
// RCS-ID: $Id: toolbar.cpp 54954 2008-08-03 11:27:03Z VZ $
|
||||||
|
// Copyright: (c) Stefan Csomor
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
|
||||||
|
#if wxUSE_TOOLBAR
|
||||||
|
|
||||||
|
#include "wx/toolbar.h"
|
||||||
|
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/wx.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "wx/app.h"
|
||||||
|
#include "wx/osx/private.h"
|
||||||
|
#include "wx/geometry.h"
|
||||||
|
#include "wx/sysopt.h"
|
||||||
|
|
||||||
|
#pragma mark -
|
||||||
|
#pragma mark Tool Implementation
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(wxToolBar, wxToolBarBase)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// private classes
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class wxToolBarTool;
|
||||||
|
|
||||||
|
@interface wxUIToolbar : UIToolbar
|
||||||
|
{
|
||||||
|
NSMutableArray* mutableBarItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)clickedAction:(id)sender;
|
||||||
|
|
||||||
|
- (void)insertTool:(UIBarButtonItem*) item atIndex:(size_t) pos;
|
||||||
|
|
||||||
|
- (void)removeTool:(size_t) pos;
|
||||||
|
|
||||||
|
- (id)init;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
class wxToolBarTool : public wxToolBarToolBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxToolBarTool(
|
||||||
|
wxToolBar *tbar,
|
||||||
|
int id,
|
||||||
|
const wxString& label,
|
||||||
|
const wxBitmap& bmpNormal,
|
||||||
|
const wxBitmap& bmpDisabled,
|
||||||
|
wxItemKind kind,
|
||||||
|
wxObject *clientData,
|
||||||
|
const wxString& shortHelp,
|
||||||
|
const wxString& longHelp );
|
||||||
|
|
||||||
|
wxToolBarTool(wxToolBar *tbar, wxControl *control, const wxString& label);
|
||||||
|
|
||||||
|
virtual ~wxToolBarTool();
|
||||||
|
|
||||||
|
void Action()
|
||||||
|
{
|
||||||
|
wxToolBar *tbar = (wxToolBar*) GetToolBar();
|
||||||
|
if (CanBeToggled())
|
||||||
|
{
|
||||||
|
bool shouldToggle;
|
||||||
|
|
||||||
|
shouldToggle = !IsToggled();
|
||||||
|
tbar->ToggleTool( GetId(), shouldToggle );
|
||||||
|
}
|
||||||
|
|
||||||
|
tbar->OnLeftClick( GetId(), IsToggled() );
|
||||||
|
}
|
||||||
|
|
||||||
|
UIBarButtonItem* GetUIBarButtonItem() const {return m_toolbarItem;}
|
||||||
|
private:
|
||||||
|
|
||||||
|
void Init()
|
||||||
|
{
|
||||||
|
m_toolbarItem = NULL;
|
||||||
|
m_index = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
UIBarButtonItem* m_toolbarItem;
|
||||||
|
// position in its toolbar, -1 means not inserted
|
||||||
|
CFIndex m_index;
|
||||||
|
};
|
||||||
|
|
||||||
|
WX_DECLARE_HASH_MAP(WX_NSObject, wxToolBarTool*, wxPointerHash, wxPointerEqual, ToolBarToolMap);
|
||||||
|
static ToolBarToolMap wxToolBarToolList;
|
||||||
|
|
||||||
|
wxToolBarTool::wxToolBarTool(
|
||||||
|
wxToolBar *tbar,
|
||||||
|
int id,
|
||||||
|
const wxString& label,
|
||||||
|
const wxBitmap& bmpNormal,
|
||||||
|
const wxBitmap& bmpDisabled,
|
||||||
|
wxItemKind kind,
|
||||||
|
wxObject *clientData,
|
||||||
|
const wxString& shortHelp,
|
||||||
|
const wxString& longHelp )
|
||||||
|
:
|
||||||
|
wxToolBarToolBase(
|
||||||
|
tbar, id, label, bmpNormal, bmpDisabled, kind,
|
||||||
|
clientData, shortHelp, longHelp )
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
UIBarButtonItem* bui = [UIBarButtonItem alloc];
|
||||||
|
UIBarButtonItemStyle style = UIBarButtonItemStylePlain;
|
||||||
|
wxUIToolbar* toolbar = (wxUIToolbar*) tbar->GetHandle();
|
||||||
|
|
||||||
|
if ( bmpNormal.Ok() )
|
||||||
|
{
|
||||||
|
[bui initWithImage:bmpNormal.GetUIImage() style:UIBarButtonItemStylePlain target:toolbar
|
||||||
|
action:@selector(clickedAction:)];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( id == wxID_OK )
|
||||||
|
style = UIBarButtonItemStyleDone;
|
||||||
|
else
|
||||||
|
style = UIBarButtonItemStyleBordered;
|
||||||
|
|
||||||
|
[bui initWithTitle:wxCFStringRef(label).AsNSString() style:style target:toolbar
|
||||||
|
action:@selector(clickedAction:)];
|
||||||
|
}
|
||||||
|
|
||||||
|
m_toolbarItem = bui;
|
||||||
|
wxToolBarToolList[bui] = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxToolBarTool::wxToolBarTool(wxToolBar *tbar, wxControl *control, const wxString& label)
|
||||||
|
: wxToolBarToolBase(tbar, control, label)
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
UIBarButtonItem* bui = [UIBarButtonItem alloc];
|
||||||
|
|
||||||
|
[bui initWithCustomView:control->GetHandle() ];
|
||||||
|
|
||||||
|
m_toolbarItem = bui;
|
||||||
|
wxToolBarToolList[bui] = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxToolBarTool::~wxToolBarTool()
|
||||||
|
{
|
||||||
|
bool found = true ;
|
||||||
|
while ( found )
|
||||||
|
{
|
||||||
|
found = false ;
|
||||||
|
ToolBarToolMap::iterator it;
|
||||||
|
for ( it = wxToolBarToolList.begin(); it != wxToolBarToolList.end(); ++it )
|
||||||
|
{
|
||||||
|
if ( it->second == this )
|
||||||
|
{
|
||||||
|
wxToolBarToolList.erase(it);
|
||||||
|
found = true ;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxToolBarToolBase *wxToolBar::CreateTool(
|
||||||
|
int id,
|
||||||
|
const wxString& label,
|
||||||
|
const wxBitmap& bmpNormal,
|
||||||
|
const wxBitmap& bmpDisabled,
|
||||||
|
wxItemKind kind,
|
||||||
|
wxObject *clientData,
|
||||||
|
const wxString& shortHelp,
|
||||||
|
const wxString& longHelp )
|
||||||
|
{
|
||||||
|
return new wxToolBarTool(
|
||||||
|
this, id, label, bmpNormal, bmpDisabled, kind,
|
||||||
|
clientData, shortHelp, longHelp );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxToolBarToolBase *
|
||||||
|
wxToolBar::CreateTool(wxControl *control, const wxString& label)
|
||||||
|
{
|
||||||
|
return new wxToolBarTool(this, control, label);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxToolBar::Init()
|
||||||
|
{
|
||||||
|
m_maxWidth = -1;
|
||||||
|
m_maxHeight = -1;
|
||||||
|
|
||||||
|
m_macToolbar = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// also for the toolbar we have the dual implementation:
|
||||||
|
// only when MacInstallNativeToolbar is called is the native toolbar set as the window toolbar
|
||||||
|
|
||||||
|
bool wxToolBar::Create(
|
||||||
|
wxWindow *parent,
|
||||||
|
wxWindowID id,
|
||||||
|
const wxPoint& pos,
|
||||||
|
const wxSize& size,
|
||||||
|
long style,
|
||||||
|
const wxString& name )
|
||||||
|
{
|
||||||
|
m_macIsUserPane = false ;
|
||||||
|
|
||||||
|
if ( !wxToolBarBase::Create( parent, id, pos, size, style, wxDefaultValidator, name ) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
FixupStyle();
|
||||||
|
|
||||||
|
CGRect r = CGRectMake( pos.x, pos.y, size.x, size.y) ;
|
||||||
|
|
||||||
|
wxUIToolbar* toolbar = [[wxUIToolbar alloc] init];
|
||||||
|
[toolbar sizeToFit];
|
||||||
|
|
||||||
|
switch ( [[UIApplication sharedApplication] statusBarStyle] )
|
||||||
|
{
|
||||||
|
case UIStatusBarStyleBlackOpaque:
|
||||||
|
toolbar.barStyle = UIBarStyleBlack;
|
||||||
|
break;
|
||||||
|
case UIStatusBarStyleBlackTranslucent:
|
||||||
|
toolbar.barStyle = UIBarStyleBlack;
|
||||||
|
toolbar.translucent = YES;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
toolbar.barStyle = UIBarStyleDefault;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
m_macToolbar = toolbar;
|
||||||
|
|
||||||
|
m_peer = new wxWidgetIPhoneImpl( this, toolbar );
|
||||||
|
MacPostControlCreate(pos, size) ;
|
||||||
|
NSLog(@"toolbar was created %@",toolbar);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxToolBar::~wxToolBar()
|
||||||
|
{
|
||||||
|
m_macToolbar = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxToolBar::Realize()
|
||||||
|
{
|
||||||
|
if ( !wxToolBarBase::Realize() )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxToolBar::SetToolBitmapSize(const wxSize& size)
|
||||||
|
{
|
||||||
|
m_defaultWidth = size.x;
|
||||||
|
m_defaultHeight = size.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The button size is bigger than the bitmap size
|
||||||
|
wxSize wxToolBar::GetToolSize() const
|
||||||
|
{
|
||||||
|
return wxSize(m_defaultWidth, m_defaultHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxToolBar::SetRows(int nRows)
|
||||||
|
{
|
||||||
|
// avoid resizing the frame uselessly
|
||||||
|
if ( nRows != m_maxRows )
|
||||||
|
m_maxRows = nRows;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxToolBar::SetToolNormalBitmap( int id, const wxBitmap& bitmap )
|
||||||
|
{
|
||||||
|
wxToolBarTool* tool = static_cast<wxToolBarTool*>(FindById(id));
|
||||||
|
if ( tool )
|
||||||
|
{
|
||||||
|
wxCHECK_RET( tool->IsButton(), wxT("Can only set bitmap on button tools."));
|
||||||
|
|
||||||
|
tool->SetNormalBitmap(bitmap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxToolBar::SetToolDisabledBitmap( int id, const wxBitmap& bitmap )
|
||||||
|
{
|
||||||
|
wxToolBarTool* tool = static_cast<wxToolBarTool*>(FindById(id));
|
||||||
|
if ( tool )
|
||||||
|
{
|
||||||
|
wxCHECK_RET( tool->IsButton(), wxT("Can only set bitmap on button tools."));
|
||||||
|
|
||||||
|
tool->SetDisabledBitmap(bitmap);
|
||||||
|
|
||||||
|
// TODO: what to do for this one?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
wxToolBarToolBase *wxToolBar::FindToolForPosition(wxCoord x, wxCoord y) const
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxToolBar::DoEnableTool(wxToolBarToolBase *t, bool enable)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
if ( t != NULL )
|
||||||
|
((wxToolBarTool*)t)->DoEnable( enable );
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxToolBar::DoToggleTool(wxToolBarToolBase *t, bool toggle)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
wxToolBarTool *tool = (wxToolBarTool *)t;
|
||||||
|
if ( ( tool != NULL ) && tool->IsButton() )
|
||||||
|
tool->UpdateToggleImage( toggle );
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase)
|
||||||
|
{
|
||||||
|
wxToolBarTool *tool = static_cast< wxToolBarTool*>(toolBase );
|
||||||
|
if (tool == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
wxSize toolSize = GetToolSize();
|
||||||
|
|
||||||
|
switch (tool->GetStyle())
|
||||||
|
{
|
||||||
|
case wxTOOL_STYLE_SEPARATOR:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case wxTOOL_STYLE_BUTTON:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case wxTOOL_STYLE_CONTROL:
|
||||||
|
// right now there's nothing to do here
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
[(wxUIToolbar*)m_macToolbar insertTool:tool->GetUIBarButtonItem() atIndex:pos];
|
||||||
|
InvalidateBestSize();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxToolBar::DoSetToggle(wxToolBarToolBase *WXUNUSED(tool), bool WXUNUSED(toggle))
|
||||||
|
{
|
||||||
|
wxFAIL_MSG( wxT("not implemented") );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxToolBar::DoDeleteTool(size_t pos, wxToolBarToolBase *toolbase)
|
||||||
|
{
|
||||||
|
wxToolBarTool* tool = static_cast< wxToolBarTool*>(toolbase );
|
||||||
|
|
||||||
|
[(wxUIToolbar*)m_macToolbar removeTool:pos];
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxToolBar::SetWindowStyleFlag( long style )
|
||||||
|
{
|
||||||
|
wxToolBarBase::SetWindowStyleFlag( style );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@implementation wxUIToolbar
|
||||||
|
|
||||||
|
- (id)init
|
||||||
|
{
|
||||||
|
if (!(self = [super init]))
|
||||||
|
return nil;
|
||||||
|
|
||||||
|
mutableBarItems = [NSMutableArray arrayWithCapacity:5];
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)clickedAction:(id)sender
|
||||||
|
{
|
||||||
|
ToolBarToolMap::iterator node = wxToolBarToolList.find(sender);
|
||||||
|
|
||||||
|
if ( node != wxToolBarToolList.end() )
|
||||||
|
node->second->Action();
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)insertTool:(UIBarButtonItem*) item atIndex:(size_t) pos
|
||||||
|
{
|
||||||
|
[mutableBarItems insertObject:item atIndex:pos];
|
||||||
|
[super setItems:mutableBarItems];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)removeTool:(size_t) pos
|
||||||
|
{
|
||||||
|
[mutableBarItems removeObjectAtIndex:pos];
|
||||||
|
[super setItems:mutableBarItems];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif // wxUSE_TOOLBAR
|
Reference in New Issue
Block a user