Files
wxWidgets/src/osx/cocoa/notebook.mm
Vadim Zeitlin 03647350fc No changes, just removed hard tabs and trailing white space.
This commit is huge but there are no non-white-space changes in it.

Some files containing third-party sources (src/msw/wince/time.cpp,
src/x11/pango*.cpp) were left unchanged.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61724 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2009-08-21 10:41:26 +00:00

260 lines
7.1 KiB
Plaintext

///////////////////////////////////////////////////////////////////////////////
// Name: src/osx/cocoa/notebook.mm
// Purpose: implementation of wxNotebook
// Author: Stefan Csomor
// Modified by:
// Created: 1998-01-01
// RCS-ID: $Id: notebmac.cpp 55079 2008-08-13 14:56:42Z PC $
// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
#if wxUSE_NOTEBOOK
#include "wx/notebook.h"
#ifndef WX_PRECOMP
#include "wx/string.h"
#include "wx/log.h"
#include "wx/app.h"
#include "wx/image.h"
#endif
#include "wx/string.h"
#include "wx/imaglist.h"
#include "wx/osx/private.h"
//
// controller
//
@interface wxTabViewController : NSObject
{
}
- (BOOL)tabView:(NSTabView *)tabView shouldSelectTabViewItem:(NSTabViewItem *)tabViewItem;
- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem;
@end
@interface wxNSTabView : NSTabView
{
}
@end
@implementation wxTabViewController
- (id) init
{
[super init];
return self;
}
- (BOOL)tabView:(NSTabView *)tabView shouldSelectTabViewItem:(NSTabViewItem *)tabViewItem
{
wxUnusedVar(tabViewItem);
wxNSTabView* view = (wxNSTabView*) tabView;
wxWidgetCocoaImpl* viewimpl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( view );
if ( viewimpl )
{
// wxNotebook* wxpeer = (wxNotebook*) viewimpl->GetWXPeer();
}
return YES;
}
- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem;
{
wxUnusedVar(tabViewItem);
wxNSTabView* view = (wxNSTabView*) tabView;
wxWidgetCocoaImpl* viewimpl = (wxWidgetCocoaImpl* ) wxWidgetImpl::FindFromWXWidget( view );
if ( viewimpl )
{
wxNotebook* wxpeer = (wxNotebook*) viewimpl->GetWXPeer();
wxpeer->OSXHandleClicked(0);
}
}
@end
@implementation wxNSTabView
+ (void)initialize
{
static BOOL initialized = NO;
if (!initialized)
{
initialized = YES;
wxOSXCocoaClassAddWXMethods( self );
}
}
@end
class wxCocoaTabView : public wxWidgetCocoaImpl
{
public:
wxCocoaTabView( wxWindowMac* peer , WXWidget w ) : wxWidgetCocoaImpl(peer, w)
{
}
void GetContentArea( int &left , int &top , int &width , int &height ) const
{
wxNSTabView* slf = (wxNSTabView*) m_osxView;
NSRect r = [slf contentRect];
left = (int)r.origin.x;
top = (int)r.origin.y;
width = (int)r.size.width;
height = (int)r.size.height;
}
void SetValue( wxInt32 value )
{
wxNSTabView* slf = (wxNSTabView*) m_osxView;
// avoid 'changed' events when setting the tab programmatically
wxTabViewController* controller = [slf delegate];
[slf setDelegate:nil];
[slf selectTabViewItemAtIndex:(value-1)];
[slf setDelegate:controller];
}
wxInt32 GetValue() const
{
wxNSTabView* slf = (wxNSTabView*) m_osxView;
NSTabViewItem* selectedItem = [slf selectedTabViewItem];
if ( selectedItem == nil )
return 0;
else
return [slf indexOfTabViewItem:selectedItem]+1;
}
void SetMaximum( wxInt32 maximum )
{
wxNSTabView* slf = (wxNSTabView*) m_osxView;
int cocoacount = [slf numberOfTabViewItems ];
// avoid 'changed' events when setting the tab programmatically
wxTabViewController* controller = [slf delegate];
[slf setDelegate:nil];
if ( maximum > cocoacount )
{
for ( int i = cocoacount ; i < maximum ; ++i )
{
NSTabViewItem* item = [[NSTabViewItem alloc] init];
[slf addTabViewItem:item];
[item release];
}
}
else if ( maximum < cocoacount )
{
for ( int i = cocoacount -1 ; i >= maximum ; --i )
{
NSTabViewItem* item = [(wxNSTabView*) m_osxView tabViewItemAtIndex:i];
[slf removeTabViewItem:item];
}
}
[slf setDelegate:controller];
}
void SetupTabs( const wxNotebook& notebook)
{
int pcount = notebook.GetPageCount();
SetMaximum( pcount );
for ( int i = 0 ; i < pcount ; ++i )
{
wxNotebookPage* page = notebook.GetPage(i);
NSTabViewItem* item = [(wxNSTabView*) m_osxView tabViewItemAtIndex:i];
[item setView:page->GetHandle() ];
wxCFStringRef cf( page->GetLabel() , notebook.GetFont().GetEncoding() );
[item setLabel:cf.AsNSString()];
if ( notebook.GetImageList() && notebook.GetPageImage(i) >= 0 )
{
const wxBitmap bmap = notebook.GetImageList()->GetBitmap( notebook.GetPageImage( i ) ) ;
if ( bmap.Ok() )
{
// TODO how to set an image on a tab
}
}
}
}
};
/*
#if 0
Rect bounds = wxMacGetBoundsForControl( this, pos, size );
if ( bounds.right <= bounds.left )
bounds.right = bounds.left + 100;
if ( bounds.bottom <= bounds.top )
bounds.bottom = bounds.top + 100;
UInt16 tabstyle = kControlTabDirectionNorth;
if ( HasFlag(wxBK_LEFT) )
tabstyle = kControlTabDirectionWest;
else if ( HasFlag( wxBK_RIGHT ) )
tabstyle = kControlTabDirectionEast;
else if ( HasFlag( wxBK_BOTTOM ) )
tabstyle = kControlTabDirectionSouth;
ControlTabSize tabsize;
switch (GetWindowVariant())
{
case wxWINDOW_VARIANT_MINI:
tabsize = 3 ;
break;
case wxWINDOW_VARIANT_SMALL:
tabsize = kControlTabSizeSmall;
break;
default:
tabsize = kControlTabSizeLarge;
break;
}
m_peer = new wxMacControl( this );
OSStatus err = CreateTabsControl(
MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds,
tabsize, tabstyle, 0, NULL, m_peer->GetControlRefAddr() );
verify_noerr( err );
#endif
*/
wxWidgetImplType* wxWidgetImpl::CreateTabView( wxWindowMac* wxpeer,
wxWindowMac* WXUNUSED(parent),
wxWindowID WXUNUSED(id),
const wxPoint& pos,
const wxSize& size,
long style,
long WXUNUSED(extraStyle))
{
static wxTabViewController* controller = NULL;
if ( !controller )
controller =[[wxTabViewController alloc] init];
NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
NSTabViewType tabstyle = NSTopTabsBezelBorder;
if ( style & wxBK_LEFT )
tabstyle = NSLeftTabsBezelBorder;
else if ( style & wxBK_RIGHT )
tabstyle = NSRightTabsBezelBorder;
else if ( style & wxBK_BOTTOM )
tabstyle = NSBottomTabsBezelBorder;
wxNSTabView* v = [[wxNSTabView alloc] initWithFrame:r];
[v setTabViewType:tabstyle];
wxWidgetCocoaImpl* c = new wxCocoaTabView( wxpeer, v );
[v setDelegate: controller];
return c;
}
#endif