Add wx headers and ext

This commit is contained in:
Joey Yakimowich-Payne 2023-02-06 09:04:33 -07:00
commit 66d3c7b811
No known key found for this signature in database
GPG key ID: 6BFE655FA5ABD1E1
1531 changed files with 295895 additions and 0 deletions

View file

@ -0,0 +1,56 @@
/*
* Name: wx/osx/cocoa/chkconf.h
* Purpose: Compiler-specific configuration checking
* Author: Stefan Csomor
* Modified by:
* Created: 2008-07-30
* Copyright: (c) Stefan Csomor
* Licence: wxWindows licence
*/
#ifndef _WX_OSX_COCOA_CHKCONF_H_
#define _WX_OSX_COCOA_CHKCONF_H_
/*
* native (1) or emulated (0) toolbar
*/
#ifndef wxOSX_USE_NATIVE_TOOLBAR
#define wxOSX_USE_NATIVE_TOOLBAR 1
#endif
/*
* leave is isFlipped and don't override
*/
#ifndef wxOSX_USE_NATIVE_FLIPPED
#define wxOSX_USE_NATIVE_FLIPPED 1
#endif
/*
* Audio System
*/
#define wxOSX_USE_QUICKTIME 0
#define wxOSX_USE_AUDIOTOOLBOX 1
/*
Use the more efficient FSEvents API instead of kqueue
events for file system watcher since that version introduced a flag that
allows watching files as well as sub directories.
*/
#define wxHAVE_FSEVENTS_FILE_NOTIFICATIONS 1
/*
* turn off old style icon format if not asked for
*/
#ifndef wxOSX_USE_ICONREF
#define wxOSX_USE_ICONREF 0
#endif
/*
* turning off capabilities that don't work under cocoa yet
*/
#endif
/* _WX_MAC_CHKCONF_H_ */

View file

@ -0,0 +1,564 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/osx/cocoa/dataview.h
// Purpose: wxDataViewCtrl native implementation header for carbon
// Author:
// Copyright: (c) 2009
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_DATAVIEWCTRL_COCOOA_H_
#define _WX_DATAVIEWCTRL_COCOOA_H_
#include "wx/defs.h"
#import <Cocoa/Cocoa.h>
#include "wx/osx/core/dataview.h"
#include "wx/osx/private.h"
// Forward declaration
class wxCocoaDataViewControl;
/*
Dramatis personae:
[vertical arrows indicate inheritance, horizontal -- aggregation]
wxWindow ---> wxWidgetCocoaImpl wxDataViewWidgetImpl NSOutlineView
| \ / |
| \ / |
| \ / |
v \/ \/ v
wxDataViewCtrl -------> wxCocoaDataViewControl <-------> wxCocoaOutlineView
The right most classes are Objective-C only and can't be used from (pure)
C++ code.
*/
// ============================================================================
// wxPointerObject: simply stores a pointer, without taking its ownership
// ============================================================================
// Two pointer objects are equal if the containing pointers are equal. This
// means also that the hash value of a pointer object depends only on the
// stored pointer.
@interface wxPointerObject : NSObject
{
void* pointer;
}
-(id) initWithPointer:(void*)initPointer;
-(void*) pointer;
-(void) setPointer:(void*)newPointer;
@end
// ============================================================================
// wxSortDescriptorObject: helper class to use native sorting facilities
// ============================================================================
@interface wxSortDescriptorObject : NSSortDescriptor<NSCopying>
{
wxDataViewColumn* columnPtr; // pointer to the sorting column
wxDataViewModel* modelPtr; // pointer to model
}
-(id)
initWithModelPtr:(wxDataViewModel*)initModelPtr
sortingColumnPtr:(wxDataViewColumn*)initColumnPtr
ascending:(BOOL)sortAscending;
-(wxDataViewColumn*) columnPtr;
-(wxDataViewModel*) modelPtr;
-(void) setColumnPtr:(wxDataViewColumn*)newColumnPtr;
-(void) setModelPtr:(wxDataViewModel*)newModelPtr;
@end
// ============================================================================
// wxDataViewColumnNativeData: extra data for wxDataViewColumn
// ============================================================================
class wxDataViewColumnNativeData
{
public:
wxDataViewColumnNativeData() : m_NativeColumnPtr(NULL)
{
}
wxDataViewColumnNativeData(NSTableColumn* initNativeColumnPtr)
: m_NativeColumnPtr(initNativeColumnPtr)
{
}
NSTableColumn* GetNativeColumnPtr() const
{
return m_NativeColumnPtr;
}
void SetNativeColumnPtr(NSTableColumn* newNativeColumnPtr)
{
m_NativeColumnPtr = newNativeColumnPtr;
}
private:
// not owned by us
NSTableColumn* m_NativeColumnPtr;
};
// ============================================================================
// wxDataViewRendererNativeData: extra data for wxDataViewRenderer
// ============================================================================
class wxDataViewRendererNativeData
{
public:
wxDataViewRendererNativeData()
: m_Object(NULL), m_ColumnCell(NULL), m_ItemCell(NULL)
{
Init();
}
wxDataViewRendererNativeData(NSCell* initColumnCell)
: m_Object(NULL), m_ColumnCell([initColumnCell retain]), m_ItemCell(NULL)
{
Init();
}
wxDataViewRendererNativeData(NSCell* initColumnCell, id initObject)
: m_Object([initObject retain]), m_ColumnCell([initColumnCell retain]), m_ItemCell(NULL)
{
Init();
}
~wxDataViewRendererNativeData()
{
[m_ColumnCell release];
[m_Object release];
[m_origFont release];
[m_origTextColour release];
[m_origBackgroundColour release];
}
NSCell* GetColumnCell() const { return m_ColumnCell; }
NSTableColumn* GetColumnPtr() const { return m_TableColumnPtr; }
id GetItem() const { return m_Item; }
NSCell* GetItemCell() const { return m_ItemCell; }
id GetObject() const { return m_Object; }
void SetColumnCell(NSCell* newCell)
{
[newCell retain];
[m_ColumnCell release];
m_ColumnCell = newCell;
}
void SetColumnPtr(NSTableColumn* newColumnPtr)
{
m_TableColumnPtr = newColumnPtr;
}
void SetItem(id newItem)
{
m_Item = newItem;
}
void SetItemCell(NSCell* newCell)
{
m_ItemCell = newCell;
}
void SetObject(id newObject)
{
[newObject retain];
[m_Object release];
m_Object = newObject;
}
// The original cell font and text colour stored here are NULL by default
// and are only initialized to the values retrieved from the cell when we
// change them from wxCocoaOutlineView:willDisplayCell:forTableColumn:item:
// which calls our SaveOriginalXXX() methods before changing the cell
// attributes.
//
// This allows us to avoid doing anything for the columns without any
// attributes but still be able to restore the correct attributes for the
// ones that do.
NSFont *GetOriginalFont() const { return m_origFont; }
NSColor *GetOriginalTextColour() const { return m_origTextColour; }
NSColor *GetOriginalBackgroundColour() const { return m_origBackgroundColour; }
void SaveOriginalFont(NSFont *font)
{
m_origFont = [font retain];
}
void SaveOriginalTextColour(NSColor *textColour)
{
m_origTextColour = [textColour retain];
}
void SaveOriginalBackgroundColour(NSColor *backgroundColour)
{
m_origBackgroundColour = [backgroundColour retain];
}
// The ellipsization mode which we need to set for each cell being rendered.
void SetEllipsizeMode(wxEllipsizeMode mode) { m_ellipsizeMode = mode; }
wxEllipsizeMode GetEllipsizeMode() const { return m_ellipsizeMode; }
// Set the line break mode for the given cell using our m_ellipsizeMode
void ApplyLineBreakMode(NSCell *cell);
// Does the rendered use a font that the control can't override?
void SetHasCustomFont(bool has) { m_hasCustomFont = has; }
bool HasCustomFont() const { return m_hasCustomFont; }
private:
// common part of all ctors
void Init();
id m_Item; // item NOT owned by renderer
// object that can be used by renderer for storing special data (owned by
// renderer)
id m_Object;
NSCell* m_ColumnCell; // column's cell is owned by renderer
NSCell* m_ItemCell; // item's cell is NOT owned by renderer
NSTableColumn* m_TableColumnPtr; // column NOT owned by renderer
// we own those if they're non-NULL
NSFont *m_origFont;
NSColor *m_origTextColour;
NSColor *m_origBackgroundColour;
wxEllipsizeMode m_ellipsizeMode;
bool m_hasCustomFont;
};
// ============================================================================
// wxCocoaOutlineDataSource
// ============================================================================
// This class implements the data source delegate for the outline view.
// As only an informal protocol exists this class inherits from NSObject only.
//
// As mentioned in the documentation for NSOutlineView the native control does
// not own any data. Therefore, it has to be done by the data source.
// Unfortunately, wxWidget's data source is a C++ data source but
// NSOutlineDataSource requires objects as data. Therefore, the data (or better
// the native item objects) have to be stored additionally in the native data
// source.
// NSOutlineView requires quick access to the item objects and quick linear
// access to an item's children. This requires normally a hash type of storage
// for the item object itself and an array structure for each item's children.
// This means that basically two times the whole structure of wxWidget's model
// class has to be stored.
// This implementation is using a compromise: all items that are in use by the
// control are stored in a set (from there they can be easily retrieved) and
// owned by the set. Furthermore, children of the last parent are stored
// in a linear list.
//
@interface wxCocoaOutlineDataSource : NSObject <NSOutlineViewDataSource>
{
// descriptors specifying the sorting (currently the array only holds one
// object only)
NSArray* sortDescriptors;
NSMutableArray* children; // buffered children
NSMutableSet* items; // stores all items that are in use by the control
wxCocoaDataViewControl* implementation;
wxDataViewModel* model;
// parent of the buffered children; the object is owned
wxPointerObject* currentParentItem;
}
// methods of informal protocol:
-(BOOL)
outlineView:(NSOutlineView*)outlineView
acceptDrop:(id<NSDraggingInfo>)info
item:(id)item
childIndex:(NSInteger)index;
-(id)
outlineView:(NSOutlineView*)outlineView
child:(NSInteger)index
ofItem:(id)item;
-(id)
outlineView:(NSOutlineView*)outlineView
objectValueForTableColumn:(NSTableColumn*)tableColumn
byItem:(id)item;
-(BOOL)
outlineView:(NSOutlineView*)outlineView
isItemExpandable:(id)item;
-(NSInteger)
outlineView:(NSOutlineView*)outlineView
numberOfChildrenOfItem:(id)item;
-(NSDragOperation)
outlineView:(NSOutlineView*)outlineView
validateDrop:(id<NSDraggingInfo>)info
proposedItem:(id)item
proposedChildIndex:(NSInteger)index;
-(BOOL)
outlineView:(NSOutlineView*)outlineView
writeItems:(NSArray*)items
toPasteboard:(NSPasteboard*)pasteboard;
// buffer for items handling
-(void) addToBuffer:(wxPointerObject*)item;
-(void) clearBuffer;
// returns the item in the buffer that has got the same pointer as "item",
// if such an item does not exist nil is returned
-(wxPointerObject*) getDataViewItemFromBuffer:(const wxDataViewItem&)item;
-(wxPointerObject*) getItemFromBuffer:(wxPointerObject*)item;
-(BOOL) isInBuffer:(wxPointerObject*)item;
-(void) removeFromBuffer:(wxPointerObject*)item;
// buffered children handling
-(void) clearChildren;
-(wxPointerObject*) getChild:(NSUInteger)index;
-(NSUInteger) getChildCount;
// buffer handling
-(void) clearBuffers;
// sorting
-(NSArray*) sortDescriptors;
-(void) setSortDescriptors:(NSArray*)newSortDescriptors;
// access to wxWidgets variables
-(wxPointerObject*) currentParentItem;
-(wxCocoaDataViewControl*) implementation;
-(wxDataViewModel*) model;
-(void) setCurrentParentItem:(wxPointerObject*)newCurrentParentItem;
-(void) setImplementation:(wxCocoaDataViewControl*)newImplementation;
-(void) setModel:(wxDataViewModel*)newModel;
// other methods
-(void)
bufferItem:(wxPointerObject*)parentItem
withChildren:(wxDataViewItemArray*)dataViewChildrenPtr;
@end
// ============================================================================
// wxCustomCell: used for custom renderers
// ============================================================================
@interface wxCustomCell : NSTextFieldCell
{
}
-(NSSize) cellSize;
@end
// ============================================================================
// wxImageCell: used for bitmap renderer
// ============================================================================
@interface wxImageCell : NSImageCell
{
}
-(NSSize) cellSize;
@end
// ============================================================================
// NSTextFieldCell customized to allow vertical alignment
// ============================================================================
@interface wxTextFieldCell : NSTextFieldCell
{
@private
int alignment_;
BOOL adjustRect_;
}
-(void) setWXAlignment:(int)alignment;
@end
// ============================================================================
// wxImageTextCell
// ============================================================================
//
// As the native cocoa environment does not have a cell displaying an icon/
// image and text at the same time, it has to be implemented by the user.
// This implementation follows the implementation of Chuck Pisula in Apple's
// DragNDropOutline sample application.
// Although in wxDataViewCtrl icons are used on OSX icons do not exist for
// display. Therefore, the cell is also called wxImageTextCell.
// Instead of displaying images of any size (which is possible) this cell uses
// a fixed size for displaying the image. Larger images are scaled to fit
// into their reserved space. Smaller or not existing images use the fixed
// reserved size and are scaled if necessary.
//
@interface wxImageTextCell : wxTextFieldCell
{
@private
CGFloat xImageShift; // shift for the image in x-direction from border
CGFloat spaceImageText; // space between image and text
NSImage* image; // the image itself
NSSize imageSize; // largest size of the image; default size is (16, 16)
// the text alignment is used to align the whole cell (image and text)
NSTextAlignment cellAlignment;
}
-(NSTextAlignment) alignment;
-(void) setAlignment:(NSTextAlignment)newAlignment;
-(NSImage*) image;
-(void) setImage:(NSImage*)newImage;
-(NSSize) imageSize;
-(void) setImageSize:(NSSize) newImageSize;
-(NSSize) cellSize;
@end
// ============================================================================
// wxCocoaOutlineView
// ============================================================================
@interface wxCocoaOutlineView : NSOutlineView <NSOutlineViewDelegate>
{
@private
// column and row of the cell being edited or -1 if none
int currentlyEditedColumn,
currentlyEditedRow;
wxCocoaDataViewControl* implementation;
}
-(wxCocoaDataViewControl*) implementation;
-(void) setImplementation:(wxCocoaDataViewControl*) newImplementation;
@end
// ============================================================================
// wxCocoaDataViewControl
// ============================================================================
// This is the internal interface class between wxDataViewCtrl (wxWidget) and
// the native source view (Mac OS X cocoa).
class wxCocoaDataViewControl : public wxWidgetCocoaImpl,
public wxDataViewWidgetImpl
{
public:
// constructors / destructor
wxCocoaDataViewControl(wxWindow* peer,
const wxPoint& pos,
const wxSize& size,
long style);
virtual ~wxCocoaDataViewControl();
wxDataViewCtrl* GetDataViewCtrl() const
{
return static_cast<wxDataViewCtrl*>(GetWXPeer());
}
// column related methods (inherited from wxDataViewWidgetImpl)
virtual bool ClearColumns() wxOVERRIDE;
virtual bool DeleteColumn(wxDataViewColumn* columnPtr) wxOVERRIDE;
virtual void DoSetExpanderColumn(wxDataViewColumn const* columnPtr) wxOVERRIDE;
virtual wxDataViewColumn* GetColumn(unsigned int pos) const wxOVERRIDE;
virtual int GetColumnPosition(wxDataViewColumn const* columnPtr) const wxOVERRIDE;
virtual bool InsertColumn(unsigned int pos, wxDataViewColumn* columnPtr) wxOVERRIDE;
virtual void FitColumnWidthToContent(unsigned int pos) wxOVERRIDE;
// item related methods (inherited from wxDataViewWidgetImpl)
virtual bool Add(const wxDataViewItem& parent, const wxDataViewItem& item) wxOVERRIDE;
virtual bool Add(const wxDataViewItem& parent,
const wxDataViewItemArray& items) wxOVERRIDE;
virtual void Collapse(const wxDataViewItem& item) wxOVERRIDE;
virtual void EnsureVisible(const wxDataViewItem& item,
wxDataViewColumn const* columnPtr) wxOVERRIDE;
virtual unsigned int GetCount() const wxOVERRIDE;
virtual int GetCountPerPage() const wxOVERRIDE;
virtual wxRect GetRectangle(const wxDataViewItem& item,
wxDataViewColumn const* columnPtr) wxOVERRIDE;
virtual wxDataViewItem GetTopItem() const wxOVERRIDE;
virtual bool IsExpanded(const wxDataViewItem& item) const wxOVERRIDE;
virtual bool Reload() wxOVERRIDE;
virtual bool Remove(const wxDataViewItem& parent) wxOVERRIDE;
virtual bool Update(const wxDataViewColumn* columnPtr) wxOVERRIDE;
virtual bool Update(const wxDataViewItem& parent,
const wxDataViewItem& item) wxOVERRIDE;
virtual bool Update(const wxDataViewItem& parent,
const wxDataViewItemArray& items) wxOVERRIDE;
// model related methods
virtual bool AssociateModel(wxDataViewModel* model) wxOVERRIDE;
//
// selection related methods (inherited from wxDataViewWidgetImpl)
//
virtual wxDataViewItem GetCurrentItem() const wxOVERRIDE;
virtual void SetCurrentItem(const wxDataViewItem& item) wxOVERRIDE;
virtual wxDataViewColumn *GetCurrentColumn() const wxOVERRIDE;
virtual int GetSelectedItemsCount() const wxOVERRIDE;
virtual int GetSelections(wxDataViewItemArray& sel) const wxOVERRIDE;
virtual bool IsSelected(const wxDataViewItem& item) const wxOVERRIDE;
virtual void Select(const wxDataViewItem& item) wxOVERRIDE;
virtual void Select(const wxDataViewItemArray& items) wxOVERRIDE;
virtual void SelectAll() wxOVERRIDE;
virtual void Unselect(const wxDataViewItem& item) wxOVERRIDE;
virtual void UnselectAll() wxOVERRIDE;
//
// sorting related methods
//
virtual wxDataViewColumn* GetSortingColumn () const wxOVERRIDE;
virtual void Resort() wxOVERRIDE;
//
// other methods (inherited from wxDataViewWidgetImpl)
//
virtual void DoSetIndent(int indent) wxOVERRIDE;
virtual void DoExpand(const wxDataViewItem& item, bool expandChildren) wxOVERRIDE;
virtual void HitTest(const wxPoint& point,
wxDataViewItem& item,
wxDataViewColumn*& columnPtr) const wxOVERRIDE;
virtual void SetRowHeight(int height) wxOVERRIDE;
virtual void SetRowHeight(const wxDataViewItem& item, unsigned int height) wxOVERRIDE;
virtual void OnSize() wxOVERRIDE;
virtual void StartEditor( const wxDataViewItem & item, unsigned int column ) wxOVERRIDE;
// Cocoa-specific helpers
id GetItemAtRow(int row) const;
virtual void SetFont(const wxFont& font) wxOVERRIDE;
virtual void keyEvent(WX_NSEvent event, WXWidget slf, void* _cmd) wxOVERRIDE;
virtual bool doCommandBySelector(void* sel, WXWidget slf, void* _cmd) wxOVERRIDE;
private:
void InitOutlineView(long style);
int GetDefaultRowHeight() const;
wxCocoaOutlineDataSource* m_DataSource;
wxCocoaOutlineView* m_OutlineView;
// Width of expander in pixels, computed on demand.
int m_expanderWidth;
};
#endif // _WX_DATAVIEWCTRL_COCOOA_H_

View file

@ -0,0 +1,48 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/osx/cocoa/evtloop.h
// Purpose: declaration of wxGUIEventLoop for wxOSX/Cocoa
// Author: Vadim Zeitlin
// Created: 2008-12-28
// Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_OSX_COCOA_EVTLOOP_H_
#define _WX_OSX_COCOA_EVTLOOP_H_
class WXDLLIMPEXP_BASE wxGUIEventLoop : public wxCFEventLoop
{
public:
wxGUIEventLoop();
~wxGUIEventLoop();
void BeginModalSession( wxWindow* modalWindow );
void EndModalSession();
virtual void WakeUp() wxOVERRIDE;
void OSXUseLowLevelWakeup(bool useIt)
{ m_osxLowLevelWakeUp = useIt ; }
protected:
virtual int DoDispatchTimeout(unsigned long timeout) wxOVERRIDE;
virtual void OSXDoRun() wxOVERRIDE;
virtual void OSXDoStop() wxOVERRIDE;
virtual CFRunLoopRef CFGetCurrentRunLoop() const wxOVERRIDE;
void* m_modalSession;
wxWindow* m_modalWindow;
WXWindow m_dummyWindow;
int m_modalNestedLevel;
bool m_osxLowLevelWakeUp;
};
#endif // _WX_OSX_COCOA_EVTLOOP_H_

View file

@ -0,0 +1,589 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/osx/cocoa/private.h
// Purpose: Private declarations: as this header is only included by
// wxWidgets itself, it may contain identifiers which don't start
// with "wx".
// Author: Stefan Csomor
// Modified by:
// Created: 1998-01-01
// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_PRIVATE_COCOA_H_
#define _WX_PRIVATE_COCOA_H_
#include <ApplicationServices/ApplicationServices.h>
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif
//
// shared between Cocoa and Carbon
//
#include "wx/bmpbndl.h"
// bring in theming types without pulling in the headers
#if wxUSE_GUI
typedef SInt16 ThemeBrush;
CGColorRef WXDLLIMPEXP_CORE wxMacCreateCGColorFromHITheme( ThemeBrush brush ) ;
OSStatus WXDLLIMPEXP_CORE wxMacDrawCGImage(
CGContextRef inContext,
const CGRect * inBounds,
CGImageRef inImage) ;
void WXDLLIMPEXP_CORE wxOSXDrawNSImage(
CGContextRef inContext,
const CGRect * inBounds,
WX_NSImage inImage) ;
WX_NSImage WXDLLIMPEXP_CORE wxOSXGetSystemImage(const wxString& name);
WX_NSImage WXDLLIMPEXP_CORE wxOSXGetNSImageFromCGImage( CGImageRef image, double scale = 1.0, bool isTemplate = false);
WX_NSImage WXDLLIMPEXP_CORE wxOSXGetNSImageFromIconRef( WXHICON iconref );
WX_NSImage WXDLLIMPEXP_CORE wxOSXGetNSImageFromCFURL( CFURLRef urlref );
WX_NSImage WXDLLIMPEXP_CORE wxOSXGetIconForType(OSType type );
void WXDLLIMPEXP_CORE wxOSXSetImageSize(WX_NSImage image, CGFloat width, CGFloat height);
wxBitmapBundle WXDLLIMPEXP_CORE wxOSXCreateSystemBitmapBundle(const wxString& id, const wxString &client, const wxSize& size);
WXWindow WXDLLIMPEXP_CORE wxOSXGetMainWindow();
WXWindow WXDLLIMPEXP_CORE wxOSXGetKeyWindow();
WXImage WXDLLIMPEXP_CORE wxOSXGetNSImageFromNSCursor(const WXHCURSOR cursor);
class WXDLLIMPEXP_FWD_CORE wxDialog;
class WXDLLIMPEXP_FWD_CORE wxWidgetCocoaImpl;
// a class which disables sending wx keydown events useful when adding text programmatically, for wx-internal use only
class wxWidgetCocoaNativeKeyDownSuspender
{
public:
// stops sending keydown events for text inserted into this widget
explicit wxWidgetCocoaNativeKeyDownSuspender(wxWidgetCocoaImpl *target);
// resumes sending keydown events
~wxWidgetCocoaNativeKeyDownSuspender();
private:
wxWidgetCocoaImpl *m_target;
NSEvent* m_nsevent;
bool m_wxsent;
wxDECLARE_NO_COPY_CLASS(wxWidgetCocoaNativeKeyDownSuspender);
};
class WXDLLIMPEXP_CORE wxWidgetCocoaImpl : public wxWidgetImpl
{
public :
wxWidgetCocoaImpl( wxWindowMac* peer , WXWidget w, int flags = 0 ) ;
wxWidgetCocoaImpl() ;
~wxWidgetCocoaImpl();
void Init();
virtual bool IsVisible() const wxOVERRIDE;
virtual void SetVisibility(bool) wxOVERRIDE;
// we provide a static function which can be reused from
// wxNonOwnedWindowCocoaImpl too
static bool ShowViewOrWindowWithEffect(wxWindow *win,
bool show,
wxShowEffect effect,
unsigned timeout);
virtual bool ShowWithEffect(bool show,
wxShowEffect effect,
unsigned timeout) wxOVERRIDE;
virtual void Raise() wxOVERRIDE;
virtual void Lower() wxOVERRIDE;
virtual void ScrollRect( const wxRect *rect, int dx, int dy ) wxOVERRIDE;
virtual WXWidget GetWXWidget() const wxOVERRIDE { return m_osxView; }
virtual void SetBackgroundColour(const wxColour&) wxOVERRIDE;
virtual bool SetBackgroundStyle(wxBackgroundStyle style) wxOVERRIDE;
virtual void SetForegroundColour(const wxColour& col) wxOVERRIDE;
virtual void GetContentArea( int &left, int &top, int &width, int &height ) const wxOVERRIDE;
virtual void Move(int x, int y, int width, int height) wxOVERRIDE;
virtual void GetPosition( int &x, int &y ) const wxOVERRIDE;
virtual void GetSize( int &width, int &height ) const wxOVERRIDE;
virtual void SetControlSize( wxWindowVariant variant ) wxOVERRIDE;
virtual void GetLayoutInset(int &left , int &top , int &right, int &bottom) const wxOVERRIDE;
virtual void SetNeedsDisplay( const wxRect* where = NULL ) wxOVERRIDE;
virtual bool GetNeedsDisplay() const wxOVERRIDE;
virtual void EnableFocusRing(bool enabled) wxOVERRIDE;
virtual void SetDrawingEnabled(bool enabled) wxOVERRIDE;
virtual bool CanFocus() const wxOVERRIDE;
// return true if successful
virtual bool SetFocus() wxOVERRIDE;
virtual bool HasFocus() const wxOVERRIDE;
void RemoveFromParent() wxOVERRIDE;
void Embed( wxWidgetImpl *parent ) wxOVERRIDE;
void SetDefaultButton( bool isDefault ) wxOVERRIDE;
void PerformClick() wxOVERRIDE;
virtual void SetLabel(const wxString& title, wxFontEncoding encoding) wxOVERRIDE;
void SetCursor( const wxCursor & cursor ) wxOVERRIDE;
void CaptureMouse() wxOVERRIDE;
void ReleaseMouse() wxOVERRIDE;
#if wxUSE_DRAG_AND_DROP
void SetDropTarget(wxDropTarget* target) wxOVERRIDE;
#endif
wxInt32 GetValue() const wxOVERRIDE;
void SetValue( wxInt32 v ) wxOVERRIDE;
wxBitmap GetBitmap() const wxOVERRIDE;
void SetBitmap( const wxBitmapBundle& bitmap ) wxOVERRIDE;
void SetBitmapPosition( wxDirection dir ) wxOVERRIDE;
void SetupTabs( const wxNotebook &notebook ) wxOVERRIDE;
void GetBestRect( wxRect *r ) const wxOVERRIDE;
bool IsEnabled() const wxOVERRIDE;
void Enable( bool enable ) wxOVERRIDE;
bool ButtonClickDidStateChange() wxOVERRIDE { return true; }
void SetMinimum( wxInt32 v ) wxOVERRIDE;
void SetMaximum( wxInt32 v ) wxOVERRIDE;
void SetIncrement(int value) wxOVERRIDE;
wxInt32 GetMinimum() const wxOVERRIDE;
wxInt32 GetMaximum() const wxOVERRIDE;
int GetIncrement() const wxOVERRIDE;
void PulseGauge() wxOVERRIDE;
void SetScrollThumb( wxInt32 value, wxInt32 thumbSize ) wxOVERRIDE;
void SetFont(const wxFont & font) wxOVERRIDE;
void SetToolTip( wxToolTip* tooltip ) wxOVERRIDE;
void InstallEventHandler( WXWidget control = NULL ) wxOVERRIDE;
bool EnableTouchEvents(int eventsMask) wxOVERRIDE;
virtual bool ShouldHandleKeyNavigation(const wxKeyEvent &event) const;
bool DoHandleKeyNavigation(const wxKeyEvent &event);
virtual bool DoHandleMouseEvent(NSEvent *event);
virtual bool DoHandleKeyEvent(NSEvent *event);
virtual bool DoHandleCharEvent(NSEvent *event, NSString *text);
virtual void DoNotifyFocusSet();
virtual void DoNotifyFocusLost();
virtual void DoNotifyFocusEvent(bool receivedFocus, wxWidgetImpl* otherWindow);
virtual void SetupKeyEvent(wxKeyEvent &wxevent, NSEvent * nsEvent, NSString* charString = NULL);
virtual void SetupMouseEvent(wxMouseEvent &wxevent, NSEvent * nsEvent);
void SetupCoordinates(wxCoord &x, wxCoord &y, NSEvent *nsEvent);
virtual bool SetupCursor(NSEvent* event);
virtual void PanGestureEvent(NSPanGestureRecognizer *panGestureRecognizer);
virtual void ZoomGestureEvent(NSMagnificationGestureRecognizer *magnificationGestureRecognizer);
virtual void RotateGestureEvent(NSRotationGestureRecognizer *rotationGestureRecognizer);
virtual void LongPressEvent(NSPressGestureRecognizer *pressGestureRecognizer);
virtual void TouchesBegan(NSEvent *event);
virtual void TouchesMoved(NSEvent *event);
virtual void TouchesEnded(NSEvent *event);
#if !wxOSX_USE_NATIVE_FLIPPED
void SetFlipped(bool flipped);
virtual bool IsFlipped() const { return m_isFlipped; }
#endif
virtual double GetContentScaleFactor() const wxOVERRIDE;
// cocoa thunk connected calls
#if wxUSE_DRAG_AND_DROP
virtual unsigned int draggingEntered(void* sender, WXWidget slf, void* _cmd);
virtual void draggingExited(void* sender, WXWidget slf, void* _cmd);
virtual unsigned int draggingUpdated(void* sender, WXWidget slf, void* _cmd);
virtual bool performDragOperation(void* sender, WXWidget slf, void* _cmd);
#endif
virtual void mouseEvent(WX_NSEvent event, WXWidget slf, void* _cmd);
virtual void cursorUpdate(WX_NSEvent event, WXWidget slf, void* _cmd);
virtual void keyEvent(WX_NSEvent event, WXWidget slf, void* _cmd);
virtual void insertText(NSString* text, WXWidget slf, void* _cmd);
// Returns true if the event was processed by a user-defined event handler.
virtual bool doCommandBySelector(void* sel, WXWidget slf, void* _cmd);
virtual bool acceptsFirstResponder(WXWidget slf, void* _cmd);
virtual bool becomeFirstResponder(WXWidget slf, void* _cmd);
virtual bool resignFirstResponder(WXWidget slf, void* _cmd);
#if !wxOSX_USE_NATIVE_FLIPPED
virtual bool isFlipped(WXWidget slf, void* _cmd);
#endif
virtual void drawRect(void* rect, WXWidget slf, void* _cmd);
virtual void controlAction(WXWidget slf, void* _cmd, void* sender);
virtual void controlDoubleAction(WXWidget slf, void* _cmd, void *sender);
// for wxTextCtrl-derived classes, put here since they don't all derive
// from the same pimpl class.
virtual void controlTextDidChange();
protected:
WXWidget m_osxView;
// begins processing of native key down event, storing the native event for later wx event generation
void BeginNativeKeyDownEvent( NSEvent* event );
// done with the current native key down event
void EndNativeKeyDownEvent();
// allow executing text changes without triggering key down events
// is currently processing a native key down event
bool IsInNativeKeyDown() const;
// the native key event
NSEvent* GetLastNativeKeyDownEvent();
// did send the wx event for the current native key down event
void SetKeyDownSent();
// was the wx event for the current native key down event sent
bool WasKeyDownSent() const;
// Return the view to apply the font/colour to.
NSView* GetViewWithText() const;
NSEvent* m_lastKeyDownEvent;
bool m_lastKeyDownWXSent;
#if !wxOSX_USE_NATIVE_FLIPPED
bool m_isFlipped;
#endif
// if it the control has an editor, that editor will already send some
// events, don't resend them
bool m_hasEditor;
friend class wxWidgetCocoaNativeKeyDownSuspender;
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxWidgetCocoaImpl);
};
DECLARE_WXCOCOA_OBJC_CLASS( wxNSWindow );
class wxNonOwnedWindowCocoaImpl : public wxNonOwnedWindowImpl
{
public :
wxNonOwnedWindowCocoaImpl( wxNonOwnedWindow* nonownedwnd) ;
wxNonOwnedWindowCocoaImpl();
virtual ~wxNonOwnedWindowCocoaImpl();
virtual void WillBeDestroyed() wxOVERRIDE;
void Create( wxWindow* parent, const wxPoint& pos, const wxSize& size,
long style, long extraStyle, const wxString& name ) wxOVERRIDE;
void Create( wxWindow* parent, WXWindow nativeWindow );
WXWindow GetWXWindow() const wxOVERRIDE;
void Raise() wxOVERRIDE;
void Lower() wxOVERRIDE;
bool Show(bool show) wxOVERRIDE;
virtual bool ShowWithEffect(bool show,
wxShowEffect effect,
unsigned timeout) wxOVERRIDE;
void Update() wxOVERRIDE;
bool SetTransparent(wxByte alpha) wxOVERRIDE;
bool SetBackgroundColour(const wxColour& col ) wxOVERRIDE;
void SetExtraStyle( long exStyle ) wxOVERRIDE;
void SetWindowStyleFlag( long style ) wxOVERRIDE;
bool SetBackgroundStyle(wxBackgroundStyle style) wxOVERRIDE;
bool CanSetTransparent() wxOVERRIDE;
void MoveWindow(int x, int y, int width, int height) wxOVERRIDE;
void GetPosition( int &x, int &y ) const wxOVERRIDE;
void GetSize( int &width, int &height ) const wxOVERRIDE;
void GetContentArea( int &left, int &top, int &width, int &height ) const wxOVERRIDE;
bool SetShape(const wxRegion& region) wxOVERRIDE;
virtual void SetTitle( const wxString& title, wxFontEncoding encoding ) wxOVERRIDE;
virtual wxContentProtection GetContentProtection() const wxOVERRIDE;
virtual bool SetContentProtection(wxContentProtection contentProtection) wxOVERRIDE;
virtual bool EnableCloseButton(bool enable) wxOVERRIDE;
virtual bool EnableMaximizeButton(bool enable) wxOVERRIDE;
virtual bool EnableMinimizeButton(bool enable) wxOVERRIDE;
virtual bool IsMaximized() const wxOVERRIDE;
virtual bool IsIconized() const wxOVERRIDE;
virtual void Iconize( bool iconize ) wxOVERRIDE;
virtual void Maximize(bool maximize) wxOVERRIDE;
virtual bool IsFullScreen() const wxOVERRIDE;
bool EnableFullScreenView(bool enable, long style) wxOVERRIDE;
virtual bool ShowFullScreen(bool show, long style) wxOVERRIDE;
virtual void ShowWithoutActivating() wxOVERRIDE;
virtual void RequestUserAttention(int flags) wxOVERRIDE;
virtual void ScreenToWindow( int *x, int *y ) wxOVERRIDE;
virtual void WindowToScreen( int *x, int *y ) wxOVERRIDE;
virtual bool IsActive() wxOVERRIDE;
virtual void SetModified(bool modified) wxOVERRIDE;
virtual bool IsModified() const wxOVERRIDE;
virtual void SetRepresentedFilename(const wxString& filename) wxOVERRIDE;
virtual void SetBottomBorderThickness(int thickness) wxOVERRIDE;
wxNonOwnedWindow* GetWXPeer() { return m_wxPeer; }
CGWindowLevel GetWindowLevel() const wxOVERRIDE { return m_macWindowLevel; }
void RestoreWindowLevel() wxOVERRIDE;
bool m_macIgnoreNextFullscreenChange = false;
long m_macFullscreenStyle = wxFULLSCREEN_ALL;
static WX_NSResponder GetNextFirstResponder() ;
static WX_NSResponder GetFormerFirstResponder() ;
protected :
CGWindowLevel m_macWindowLevel;
WXWindow m_macWindow;
void * m_macFullScreenData ;
private:
void SetUpForModalParent();
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCocoaImpl);
};
DECLARE_WXCOCOA_OBJC_CLASS( wxNSButton );
class wxButtonCocoaImpl : public wxWidgetCocoaImpl, public wxButtonImpl
{
public:
wxButtonCocoaImpl(wxWindowMac *wxpeer, wxNSButton *v);
virtual void SetBitmap(const wxBitmapBundle& bitmap) wxOVERRIDE;
#if wxUSE_MARKUP
virtual void SetLabelMarkup(const wxString& markup) wxOVERRIDE;
#endif // wxUSE_MARKUP
void SetPressedBitmap( const wxBitmapBundle& bitmap ) wxOVERRIDE;
void SetAcceleratorFromLabel(const wxString& label);
NSButton *GetNSButton() const;
};
#ifdef __OBJC__
typedef NSRect WXRect;
typedef void (*wxOSX_TextEventHandlerPtr)(NSView* self, SEL _cmd, NSString *event);
typedef void (*wxOSX_EventHandlerPtr)(NSView* self, SEL _cmd, NSEvent *event);
typedef BOOL (*wxOSX_PerformKeyEventHandlerPtr)(NSView* self, SEL _cmd, NSEvent *event);
typedef void (*wxOSX_DoCommandBySelectorPtr)(NSView* self, SEL _cmd, SEL _sel);
typedef BOOL (*wxOSX_FocusHandlerPtr)(NSView* self, SEL _cmd);
typedef void (*wxOSX_DoCommandBySelectorPtr)(NSView* self, SEL _cmd, SEL _sel);
typedef NSDragOperation (*wxOSX_DraggingEnteredOrUpdatedHandlerPtr)(NSView *self, SEL _cmd, void *sender);
typedef void (*wxOSX_DraggingExitedHandlerPtr)(NSView *self, SEL _cmd, void *sender);
typedef BOOL (*wxOSX_PerformDragOperationHandlerPtr)(NSView *self, SEL _cmd, void *sender);
WXDLLIMPEXP_CORE NSScreen* wxOSXGetMenuScreen();
WXDLLIMPEXP_CORE NSRect wxToNSRect( NSView* parent, const wxRect& r );
WXDLLIMPEXP_CORE wxRect wxFromNSRect( NSView* parent, const NSRect& rect );
WXDLLIMPEXP_CORE NSPoint wxToNSPoint( NSView* parent, const wxPoint& p );
WXDLLIMPEXP_CORE wxPoint wxFromNSPoint( NSView* parent, const NSPoint& p );
NSRect WXDLLIMPEXP_CORE wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const wxSize &size ,
bool adjustForOrigin = true );
WXDLLIMPEXP_CORE NSView* wxOSXGetViewFromResponder( NSResponder* responder );
// used for many wxControls
@interface wxNSButton : NSButton
{
NSTrackingRectTag rectTag;
}
@end
@interface wxNSBox : NSBox
{
}
@end
@interface wxNSTextFieldEditor : NSTextView
{
NSEvent* lastKeyDownEvent;
NSTextField* textField;
}
- (void) setTextField:(NSTextField*) field;
@end
@interface wxNSTextField : NSTextField <NSTextFieldDelegate>
{
wxNSTextFieldEditor* fieldEditor;
}
- (wxNSTextFieldEditor*) fieldEditor;
- (void) setFieldEditor:(wxNSTextFieldEditor*) fieldEditor;
@end
@interface wxNSSecureTextField : NSSecureTextField <NSTextFieldDelegate>
{
}
@end
@interface wxNSTextView : NSTextView <NSTextViewDelegate>
{
}
- (void)textDidChange:(NSNotification *)aNotification;
- (void)changeColor:(id)sender;
@property (retain) NSUndoManager* undoManager;
@end
@interface wxNSSearchField : NSSearchField
{
wxNSTextFieldEditor* fieldEditor;
BOOL m_withinTextDidChange;
}
- (wxNSTextFieldEditor*) fieldEditor;
- (void) setFieldEditor:(wxNSTextFieldEditor*) fieldEditor;
@end
@interface wxNSComboBox : NSComboBox
{
wxNSTextFieldEditor* fieldEditor;
}
- (wxNSTextFieldEditor*) fieldEditor;
- (void) setFieldEditor:(wxNSTextFieldEditor*) fieldEditor;
@end
@interface wxNSMenu : NSMenu
{
wxMenuImpl* impl;
}
- (void) setImplementation:(wxMenuImpl*) item;
- (wxMenuImpl*) implementation;
@end
@interface wxNSMenuItem : NSMenuItem
{
wxMenuItemImpl* impl;
}
- (void) setImplementation:(wxMenuItemImpl*) item;
- (wxMenuItemImpl*) implementation;
- (void)clickedAction:(id)sender;
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem;
@end
// this enum declares which methods should not be overridden in the native view classes
enum wxOSXSkipOverrides {
wxOSXSKIP_NONE = 0x0,
wxOSXSKIP_DRAW = 0x1,
wxOSXSKIP_DND = 0x2
};
void WXDLLIMPEXP_CORE wxOSXCocoaClassAddWXMethods(Class c, wxOSXSkipOverrides skipFlags = wxOSXSKIP_NONE);
/*
We need this for ShowModal, as the sheet just disables the parent window and
returns control to the app, whereas we don't want to return from ShowModal
until the sheet has been dismissed.
*/
@interface ModalDialogDelegate : NSObject
{
BOOL sheetFinished;
int resultCode;
wxDialog* impl;
}
- (void)setImplementation: (wxDialog *)dialog;
- (BOOL)finished;
- (int)code;
- (void)waitForSheetToFinish;
- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(int)returnCode contextInfo:(void *)contextInfo;
@end
WXEXPORT
@interface wxNSAppController : NSObject <NSApplicationDelegate>
{
}
@end
#endif // __OBJC__
// NSCursor
WX_NSCursor wxMacCocoaCreateStockCursor( int cursor_type );
WX_NSCursor wxMacCocoaCreateCursorFromCGImage( CGImageRef cgImageRef, float hotSpotX, float hotSpotY );
void wxMacCocoaSetCursor( WX_NSCursor cursor );
void wxMacCocoaHideCursor();
void wxMacCocoaShowCursor();
typedef struct tagClassicCursor
{
wxUint16 bits[16];
wxUint16 mask[16];
wxInt16 hotspot[2];
}ClassicCursor;
const short kwxCursorBullseye = 0;
const short kwxCursorBlank = 1;
const short kwxCursorPencil = 2;
const short kwxCursorMagnifier = 3;
const short kwxCursorNoEntry = 4;
const short kwxCursorPaintBrush = 5;
const short kwxCursorPointRight = 6;
const short kwxCursorPointLeft = 7;
const short kwxCursorQuestionArrow = 8;
const short kwxCursorRightArrow = 9;
const short kwxCursorSizeNS = 10;
const short kwxCursorSize = 11;
const short kwxCursorSizeNESW = 12;
const short kwxCursorSizeNWSE = 13;
const short kwxCursorRoller = 14;
const short kwxCursorWatch = 15;
const short kwxCursorLast = kwxCursorWatch;
// exposing our fallback cursor map
extern ClassicCursor gMacCursors[];
extern NSLayoutManager* gNSLayoutManager;
// helper class for setting the current appearance to the
// effective appearance and restore when exiting scope
class WXDLLIMPEXP_CORE wxOSXEffectiveAppearanceSetter
{
public:
wxOSXEffectiveAppearanceSetter();
~wxOSXEffectiveAppearanceSetter();
private:
void * formerAppearance;
};
#endif // wxUSE_GUI
#endif
// _WX_PRIVATE_COCOA_H_

View file

@ -0,0 +1,50 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/osx/cocoa/private/date.h
// Purpose: NSDate-related helpers
// Author: Vadim Zeitlin
// Created: 2011-12-19
// Copyright: (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_OSX_COCOA_PRIVATE_DATE_H_
#define _WX_OSX_COCOA_PRIVATE_DATE_H_
#include "wx/datetime.h"
namespace wxOSXImpl
{
// Functions to convert between NSDate and wxDateTime.
// Returns an NSDate corresponding to the given wxDateTime which can be invalid
// (in which case nil is returned).
inline NSDate* NSDateFromWX(const wxDateTime& dt)
{
if ( !dt.IsValid() )
return nil;
// Get the internal representation as a double used by NSDate.
double ticks = dt.GetValue().ToDouble();
// wxDateTime uses milliseconds while NSDate uses (fractional) seconds.
return [NSDate dateWithTimeIntervalSince1970:ticks/1000.];
}
// Returns wxDateTime corresponding to the given NSDate (which may be nil).
inline wxDateTime NSDateToWX(const NSDate* d)
{
if ( !d )
return wxDefaultDateTime;
// Reverse everything done above.
wxLongLong ll;
ll.Assign([d timeIntervalSince1970]*1000);
wxDateTime dt(ll);
return dt;
}
} // namespace wxOSXImpl
#endif // _WX_OSX_COCOA_PRIVATE_DATE_H_

View file

@ -0,0 +1,181 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/osx/cocoa/private/markuptoattr.h
// Purpose: Class to convert markup to Cocoa attributed strings.
// Author: Vadim Zeitlin
// Created: 2011-02-22
// Copyright: (c) 2011 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_OSX_COCOA_PRIVATE_MARKUPTOATTR_H_
#define _WX_OSX_COCOA_PRIVATE_MARKUPTOATTR_H_
#include "wx/private/markupparserattr.h"
// ----------------------------------------------------------------------------
// wxMarkupToAttrString: create NSAttributedString from markup.
// ----------------------------------------------------------------------------
class wxMarkupToAttrStringBase : public wxMarkupParserAttrOutput
{
protected:
// We don't care about the original colours because we never use them but
// we do need the correct initial font as we apply modifiers (e.g. create a
// font larger than it) to it and so it must be valid.
wxMarkupToAttrStringBase(const wxFont& font)
: wxMarkupParserAttrOutput(font, wxColour(), wxColour()),
m_attrString(NULL)
{}
void Parse(const wxFont& font, const wxString& markup)
{
const wxCFStringRef label(PrepareText(wxMarkupParser::Strip(markup)));
m_attrString = [[NSMutableAttributedString alloc]
initWithString: label.AsNSString()];
m_pos = 0;
[m_attrString beginEditing];
// First thing we do is change the default string font: as mentioned in
// Apple documentation, attributed strings use "Helvetica 12" font by
// default which is different from the system "Lucida Grande" font. So
// we need to explicitly change the font for the entire string.
ApplyFont(font, NSMakeRange(0, [m_attrString length]));
// Now translate the markup tags to corresponding attributes.
wxMarkupParser parser(*this);
parser.Parse(markup);
[m_attrString endEditing];
}
~wxMarkupToAttrStringBase()
{
if ( m_attrString )
[m_attrString release];
}
void ApplyFont(const wxFont& font, const NSRange& range)
{
[m_attrString addAttribute:NSFontAttributeName
value:font.OSXGetNSFont()
range:range];
if ( font.GetStrikethrough() )
{
[m_attrString addAttribute:NSStrikethroughStyleAttributeName
value:@(NSUnderlineStyleSingle)
range:range];
}
if ( font.GetUnderlined() )
{
[m_attrString addAttribute:NSUnderlineStyleAttributeName
value:@(NSUnderlineStyleSingle)
range:range];
}
}
// prepare text chunk for display, e.g. strip mnemonics from it
virtual wxString PrepareText(const wxString& text) = 0;
public:
// Accessor for the users of this class.
//
// We keep ownership of the returned string.
NSMutableAttributedString *GetNSAttributedString() const
{
return m_attrString;
}
// Implement base class pure virtual methods to process markup tags.
virtual void OnText(const wxString& text)
{
m_pos += PrepareText(text).length();
}
virtual void OnAttrStart(const Attr& WXUNUSED(attr))
{
// Just remember the starting position of the range, we can't really
// set the attribute until we find the end of it.
m_rangeStarts.push(m_pos);
}
virtual void OnAttrEnd(const Attr& attr)
{
unsigned start = m_rangeStarts.top();
m_rangeStarts.pop();
const NSRange range = NSMakeRange(start, m_pos - start);
ApplyFont(attr.font, range);
if ( attr.foreground.IsOk() )
{
[m_attrString addAttribute:NSForegroundColorAttributeName
value:attr.foreground.OSXGetNSColor()
range:range];
}
if ( attr.background.IsOk() )
{
[m_attrString addAttribute:NSBackgroundColorAttributeName
value:attr.background.OSXGetNSColor()
range:range];
}
}
private:
// The attributed string we're building.
NSMutableAttributedString *m_attrString;
// The current position in the output string.
unsigned m_pos;
// The positions of starting ranges.
wxStack<unsigned> m_rangeStarts;
};
// for use with labels with mnemonics
class wxMarkupToAttrString : public wxMarkupToAttrStringBase
{
public:
wxMarkupToAttrString(const wxFont& font, const wxString& markup)
: wxMarkupToAttrStringBase(font)
{
Parse(font, markup);
}
protected:
virtual wxString PrepareText(const wxString& text)
{
return wxControl::RemoveMnemonics(text);
}
wxDECLARE_NO_COPY_CLASS(wxMarkupToAttrString);
};
// for raw markup with no mnemonics
class wxItemMarkupToAttrString : public wxMarkupToAttrStringBase
{
public:
wxItemMarkupToAttrString(const wxFont& font, const wxString& markup)
: wxMarkupToAttrStringBase(font)
{
Parse(font, markup);
}
protected:
virtual wxString PrepareText(const wxString& text)
{
return text;
}
wxDECLARE_NO_COPY_CLASS(wxItemMarkupToAttrString);
};
#endif // _WX_OSX_COCOA_PRIVATE_MARKUPTOATTR_H_

View file

@ -0,0 +1,194 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/osx/cocoa/private/textimpl.h
// Purpose: textcontrol implementation classes that have to be exposed
// Author: Stefan Csomor
// Modified by:
// Created: 03/02/99
// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_OSX_COCOA_PRIVATE_TEXTIMPL_H_
#define _WX_OSX_COCOA_PRIVATE_TEXTIMPL_H_
#include "wx/combobox.h"
#include "wx/osx/private.h"
@class wxTextEntryFormatter;
class wxNSTextBase : public wxWidgetCocoaImpl, public wxTextWidgetImpl
{
public :
wxNSTextBase( wxTextCtrl *text, WXWidget w )
: wxWidgetCocoaImpl(text, w),
wxTextWidgetImpl(text)
{
}
wxNSTextBase( wxWindow *wxPeer, wxTextEntry *entry, WXWidget w )
: wxWidgetCocoaImpl(wxPeer, w),
wxTextWidgetImpl(entry)
{
}
virtual ~wxNSTextBase() { }
virtual bool ShouldHandleKeyNavigation(const wxKeyEvent &event) const wxOVERRIDE;
virtual void SetInitialLabel(const wxString& WXUNUSED(title), wxFontEncoding WXUNUSED(encoding)) wxOVERRIDE
{
// Don't do anything here, text controls don't have any label and
// setting it would overwrite the string value set when creating it.
}
};
// implementation exposed, so that search control can pull it
class wxNSTextFieldControl : public wxNSTextBase
{
public :
// wxNSTextFieldControl must always be associated with a wxTextEntry. If
// it's associated with a wxTextCtrl then we can get the associated entry
// from it but otherwise the second ctor should be used to explicitly pass
// us the entry.
wxNSTextFieldControl( wxTextCtrl *text, WXWidget w );
wxNSTextFieldControl( wxWindow *wxPeer, wxTextEntry *entry, WXWidget w );
virtual ~wxNSTextFieldControl();
virtual bool CanClipMaxLength() const wxOVERRIDE { return true; }
virtual void SetMaxLength(unsigned long len) wxOVERRIDE;
virtual bool CanForceUpper() wxOVERRIDE { return true; }
virtual void ForceUpper() wxOVERRIDE;
virtual wxString GetStringValue() const wxOVERRIDE ;
virtual void SetStringValue( const wxString &str) wxOVERRIDE ;
virtual void Copy() wxOVERRIDE ;
virtual void Cut() wxOVERRIDE ;
virtual void Paste() wxOVERRIDE ;
virtual bool CanPaste() const wxOVERRIDE ;
virtual void SetEditable(bool editable) wxOVERRIDE ;
virtual long GetLastPosition() const wxOVERRIDE;
virtual void GetSelection( long* from, long* to) const wxOVERRIDE ;
virtual void SetSelection( long from , long to ) wxOVERRIDE;
virtual bool PositionToXY(long pos, long *x, long *y) const wxOVERRIDE;
virtual long XYToPosition(long x, long y) const wxOVERRIDE;
virtual void ShowPosition(long pos) wxOVERRIDE;
virtual void WriteText(const wxString& str) wxOVERRIDE ;
virtual bool HasOwnContextMenu() const wxOVERRIDE { return true; }
virtual bool SetHint(const wxString& hint) wxOVERRIDE;
virtual void SetJustification() wxOVERRIDE;
virtual void controlAction(WXWidget slf, void* _cmd, void *sender) wxOVERRIDE;
virtual bool becomeFirstResponder(WXWidget slf, void *_cmd) wxOVERRIDE;
virtual bool resignFirstResponder(WXWidget slf, void *_cmd) wxOVERRIDE;
virtual void EnableNewLineReplacement(bool enable) wxOVERRIDE;
virtual bool GetNewLineReplacement() wxOVERRIDE;
virtual void SetInternalSelection( long from , long to );
virtual void UpdateInternalSelectionFromEditor( wxNSTextFieldEditor* editor);
virtual wxSize GetBestSize() const wxOVERRIDE;
protected :
NSTextField* m_textField;
long m_selStart;
long m_selEnd;
private:
// Common part of both ctors.
void Init(WXWidget w);
// Get our formatter, creating it if necessary.
wxTextEntryFormatter* GetFormatter();
};
class wxNSTextViewControl : public wxNSTextBase
{
public:
wxNSTextViewControl( wxTextCtrl *wxPeer, WXWidget w, long style );
virtual ~wxNSTextViewControl();
virtual void insertText(NSString* text, WXWidget slf, void *_cmd) wxOVERRIDE;
virtual wxString GetStringValue() const wxOVERRIDE ;
virtual void SetStringValue( const wxString &str) wxOVERRIDE ;
virtual void Copy() wxOVERRIDE ;
virtual void Cut() wxOVERRIDE ;
virtual void Paste() wxOVERRIDE ;
virtual bool CanPaste() const wxOVERRIDE ;
virtual void SetEditable(bool editable) wxOVERRIDE ;
virtual long GetLastPosition() const wxOVERRIDE;
virtual void GetSelection( long* from, long* to) const wxOVERRIDE ;
virtual void SetSelection( long from , long to ) wxOVERRIDE;
virtual bool PositionToXY(long pos, long *x, long *y) const wxOVERRIDE;
virtual long XYToPosition(long x, long y) const wxOVERRIDE;
virtual void ShowPosition(long pos) wxOVERRIDE;
virtual void WriteText(const wxString& str) wxOVERRIDE ;
virtual void SetFont(const wxFont & font) wxOVERRIDE;
virtual bool GetStyle(long position, wxTextAttr& style) wxOVERRIDE;
virtual void SetStyle(long start, long end, const wxTextAttr& style) wxOVERRIDE;
virtual bool CanFocus() const wxOVERRIDE;
virtual bool HasOwnContextMenu() const wxOVERRIDE { return true; }
#if wxUSE_SPELLCHECK
virtual void CheckSpelling(const wxTextProofOptions& options) wxOVERRIDE;
virtual wxTextProofOptions GetCheckingOptions() const wxOVERRIDE;
#endif // wxUSE_SPELLCHECK
virtual void EnableAutomaticQuoteSubstitution(bool enable) wxOVERRIDE;
virtual void EnableAutomaticDashSubstitution(bool enable) wxOVERRIDE;
virtual void EnableNewLineReplacement(bool enable) wxOVERRIDE;
virtual bool GetNewLineReplacement() wxOVERRIDE;
virtual wxSize GetBestSize() const wxOVERRIDE;
virtual void SetJustification() wxOVERRIDE;
virtual void controlTextDidChange() wxOVERRIDE;
virtual bool CanUndo() const wxOVERRIDE;
virtual void Undo() wxOVERRIDE;
virtual bool CanRedo() const wxOVERRIDE;
virtual void Redo() wxOVERRIDE;
virtual void EmptyUndoBuffer() wxOVERRIDE;
protected:
void DoUpdateTextStyle();
NSScrollView* m_scrollView;
NSTextView* m_textView;
bool m_useCharWrapping;
NSUndoManager* m_undoManager;
};
class wxNSComboBoxControl : public wxNSTextFieldControl, public wxComboWidgetImpl
{
public :
wxNSComboBoxControl( wxComboBox *wxPeer, WXWidget w );
virtual ~wxNSComboBoxControl();
virtual int GetSelectedItem() const;
virtual void SetSelectedItem(int item);
virtual int GetNumberOfItems() const;
virtual void InsertItem(int pos, const wxString& item);
virtual void RemoveItem(int pos);
virtual void Clear();
virtual wxString GetStringAtIndex(int pos) const;
virtual int FindString(const wxString& text) const;
virtual void Popup();
virtual void Dismiss();
virtual void SetEditable(bool editable);
virtual void mouseEvent(WX_NSEvent event, WXWidget slf, void *_cmd);
private:
NSComboBox* m_comboBox;
};
#endif // _WX_OSX_COCOA_PRIVATE_TEXTIMPL_H_

View file

@ -0,0 +1,46 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/osx/cocoa/stdpaths.h
// Purpose: wxStandardPaths for Cocoa
// Author: Tobias Taschner
// Created: 2015-09-09
// Copyright: (c) 2015 wxWidgets development team
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_COCOA_STDPATHS_H_
#define _WX_COCOA_STDPATHS_H_
// ----------------------------------------------------------------------------
// wxStandardPaths
// ----------------------------------------------------------------------------
class WXDLLIMPEXP_BASE wxStandardPaths : public wxStandardPathsBase
{
public:
virtual ~wxStandardPaths();
// implement base class pure virtuals
virtual wxString GetExecutablePath() const wxOVERRIDE;
virtual wxString GetConfigDir() const wxOVERRIDE;
virtual wxString GetUserConfigDir() const wxOVERRIDE;
virtual wxString GetDataDir() const wxOVERRIDE;
virtual wxString GetLocalDataDir() const wxOVERRIDE;
virtual wxString GetUserDataDir() const wxOVERRIDE;
virtual wxString GetPluginsDir() const wxOVERRIDE;
virtual wxString GetResourcesDir() const wxOVERRIDE;
virtual wxString
GetLocalizedResourcesDir(const wxString& lang,
ResourceCat category = ResourceCat_None) const wxOVERRIDE;
virtual wxString GetUserDir(Dir userDir) const wxOVERRIDE;
virtual wxString MakeConfigFileName(const wxString& basename,
ConfigFileConv conv = ConfigFileConv_Ext
) const wxOVERRIDE;
protected:
// Ctor is protected, use wxStandardPaths::Get() instead of instantiating
// objects of this class directly.
wxStandardPaths();
};
#endif // _WX_COCOA_STDPATHS_H_