initial commit

Signed-off-by: Peter Siegmund <mars3142@noreply.mars3142.dev>
This commit is contained in:
2025-10-31 23:37:30 +01:00
commit bf6b52fd94
9654 changed files with 4035664 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(nullptr)
{
}
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(nullptr), m_ColumnCell(nullptr), m_ItemCell(nullptr)
{
Init();
}
wxDataViewRendererNativeData(NSCell* initColumnCell)
: m_Object(nullptr), m_ColumnCell([initColumnCell retain]), m_ItemCell(nullptr)
{
Init();
}
wxDataViewRendererNativeData(NSCell* initColumnCell, id initObject)
: m_Object([initObject retain]), m_ColumnCell([initColumnCell retain]), m_ItemCell(nullptr)
{
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() override;
virtual bool DeleteColumn(wxDataViewColumn* columnPtr) override;
virtual void DoSetExpanderColumn(wxDataViewColumn const* columnPtr) override;
virtual wxDataViewColumn* GetColumn(unsigned int pos) const override;
virtual int GetColumnPosition(wxDataViewColumn const* columnPtr) const override;
virtual bool InsertColumn(unsigned int pos, wxDataViewColumn* columnPtr) override;
virtual void FitColumnWidthToContent(unsigned int pos) override;
// item related methods (inherited from wxDataViewWidgetImpl)
virtual bool Add(const wxDataViewItem& parent, const wxDataViewItem& item) override;
virtual bool Add(const wxDataViewItem& parent,
const wxDataViewItemArray& items) override;
virtual void Collapse(const wxDataViewItem& item) override;
virtual void EnsureVisible(const wxDataViewItem& item,
wxDataViewColumn const* columnPtr) override;
virtual unsigned int GetCount() const override;
virtual int GetCountPerPage() const override;
virtual wxRect GetRectangle(const wxDataViewItem& item,
wxDataViewColumn const* columnPtr) override;
virtual wxDataViewItem GetTopItem() const override;
virtual bool IsExpanded(const wxDataViewItem& item) const override;
virtual bool Reload() override;
virtual bool Remove(const wxDataViewItem& parent) override;
virtual bool Update(const wxDataViewColumn* columnPtr) override;
virtual bool Update(const wxDataViewItem& parent,
const wxDataViewItem& item) override;
virtual bool Update(const wxDataViewItem& parent,
const wxDataViewItemArray& items) override;
// model related methods
virtual bool AssociateModel(wxDataViewModel* model) override;
//
// selection related methods (inherited from wxDataViewWidgetImpl)
//
virtual wxDataViewItem GetCurrentItem() const override;
virtual void SetCurrentItem(const wxDataViewItem& item) override;
virtual wxDataViewColumn *GetCurrentColumn() const override;
virtual int GetSelectedItemsCount() const override;
virtual int GetSelections(wxDataViewItemArray& sel) const override;
virtual bool IsSelected(const wxDataViewItem& item) const override;
virtual void Select(const wxDataViewItem& item) override;
virtual void Select(const wxDataViewItemArray& items) override;
virtual void SelectAll() override;
virtual void Unselect(const wxDataViewItem& item) override;
virtual void UnselectAll() override;
//
// sorting related methods
//
virtual wxDataViewColumn* GetSortingColumn () const override;
virtual void Resort() override;
//
// other methods (inherited from wxDataViewWidgetImpl)
//
virtual void DoSetIndent(int indent) override;
virtual void DoExpand(const wxDataViewItem& item, bool expandChildren) override;
virtual void HitTest(const wxPoint& point,
wxDataViewItem& item,
wxDataViewColumn*& columnPtr) const override;
virtual void SetRowHeight(int height) override;
virtual void SetRowHeight(const wxDataViewItem& item, unsigned int height) override;
virtual void OnSize() override;
virtual void StartEditor( const wxDataViewItem & item, unsigned int column ) override;
// Cocoa-specific helpers
id GetItemAtRow(int row) const;
virtual void SetFont(const wxFont& font) override;
virtual void keyEvent(WX_NSEvent event, WXWidget slf, void* _cmd) override;
virtual bool doCommandBySelector(void* sel, WXWidget slf, void* _cmd) override;
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() override;
void OSXUseLowLevelWakeup(bool useIt)
{ m_osxLowLevelWakeUp = useIt ; }
protected:
virtual int DoDispatchTimeout(unsigned long timeout) override;
virtual void OSXDoRun() override;
virtual void OSXDoStop() override;
virtual CFRunLoopRef CFGetCurrentRunLoop() const override;
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,602 @@
/////////////////////////////////////////////////////////////////////////////
// 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
// 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
#include <vector>
//
// 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,
wxCompositionMode composition) ;
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 override;
virtual void SetVisibility(bool) override;
// 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) override;
virtual void Raise() override;
virtual void Lower() override;
virtual void ScrollRect( const wxRect *rect, int dx, int dy ) override;
virtual WXWidget GetWXWidget() const override { return m_osxView; }
virtual void SetBackgroundColour(const wxColour&) override;
virtual bool SetBackgroundStyle(wxBackgroundStyle style) override;
virtual void SetForegroundColour(const wxColour& col) override;
virtual void GetContentArea( int &left, int &top, int &width, int &height ) const override;
virtual void Move(int x, int y, int width, int height) override;
virtual void GetPosition( int &x, int &y ) const override;
virtual void GetSize( int &width, int &height ) const override;
virtual void SetControlSize( wxWindowVariant variant ) override;
virtual void GetLayoutInset(int &left , int &top , int &right, int &bottom) const override;
virtual void SetNeedsDisplay( const wxRect* where = nullptr ) override;
virtual bool GetNeedsDisplay() const override;
virtual void EnableFocusRing(bool enabled) override;
virtual void SetDrawingEnabled(bool enabled) override;
virtual bool CanFocus() const override;
// return true if successful
virtual bool SetFocus() override;
virtual bool HasFocus() const override;
void RemoveFromParent() override;
void Embed( wxWidgetImpl *parent ) override;
void SetDefaultButton( bool isDefault ) override;
void PerformClick() override;
virtual void SetLabel(const wxString& title) override;
void SetCursor( const wxCursor & cursor ) override;
void CaptureMouse() override;
void ReleaseMouse() override;
#if wxUSE_DRAG_AND_DROP
void SetDropTarget(wxDropTarget* target) override;
#endif
wxInt32 GetValue() const override;
void SetValue( wxInt32 v ) override;
wxBitmap GetBitmap() const override;
void SetBitmap( const wxBitmapBundle& bitmap ) override;
void SetBitmapPosition( wxDirection dir ) override;
void SetupTabs( const wxNotebook &notebook ) override;
void GetBestRect( wxRect *r ) const override;
bool IsEnabled() const override;
void Enable( bool enable ) override;
bool ButtonClickDidStateChange() override { return true; }
void SetMinimum( wxInt32 v ) override;
void SetMaximum( wxInt32 v ) override;
void SetIncrement(int value) override;
wxInt32 GetMinimum() const override;
wxInt32 GetMaximum() const override;
int GetIncrement() const override;
void PulseGauge() override;
void SetScrollThumb( wxInt32 value, wxInt32 thumbSize ) override;
void SetFont(const wxFont & font) override;
void SetToolTip( wxToolTip* tooltip ) override;
void InstallEventHandler( WXWidget control = nullptr ) override;
bool EnableTouchEvents(int eventsMask) override;
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 = nullptr);
using MouseEvents = std::vector<wxMouseEvent>;
virtual MouseEvents TranslateMouseEvent(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);
virtual void TouchesCancel(NSEvent *event);
#if !wxOSX_USE_NATIVE_FLIPPED
void SetFlipped(bool flipped);
virtual bool IsFlipped() const { return m_isFlipped; }
#endif
virtual double GetContentScaleFactor() const override;
// 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();
virtual void AdjustClippingView(wxScrollBar* horizontal, wxScrollBar* vertical) override;
virtual void UseClippingView() override;
virtual WXWidget GetContainer() const override { return m_osxClipView ? m_osxClipView : m_osxView; }
virtual void ApplyScrollViewBorderType() override;
protected:
WXWidget m_osxView;
WXWidget m_osxClipView;
// 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() override;
void Create( wxWindow* parent, const wxPoint& pos, const wxSize& size,
long style, long extraStyle, const wxString& name ) override;
void Create( wxWindow* parent, WXWindow nativeWindow );
WXWindow GetWXWindow() const override;
void Raise() override;
void Lower() override;
bool Show(bool show) override;
virtual bool ShowWithEffect(bool show,
wxShowEffect effect,
unsigned timeout) override;
void Update() override;
bool SetTransparent(wxByte alpha) override;
bool SetBackgroundColour(const wxColour& col ) override;
void SetExtraStyle( long exStyle ) override;
void SetWindowStyleFlag( long style ) override;
bool SetBackgroundStyle(wxBackgroundStyle style) override;
bool CanSetTransparent() override;
void MoveWindow(int x, int y, int width, int height) override;
void GetPosition( int &x, int &y ) const override;
void GetSize( int &width, int &height ) const override;
void GetContentArea( int &left, int &top, int &width, int &height ) const override;
bool SetShape(const wxRegion& region) override;
virtual void SetTitle( const wxString& title ) override;
virtual wxContentProtection GetContentProtection() const override;
virtual bool SetContentProtection(wxContentProtection contentProtection) override;
virtual bool EnableCloseButton(bool enable) override;
virtual bool EnableMaximizeButton(bool enable) override;
virtual bool EnableMinimizeButton(bool enable) override;
virtual bool IsMaximized() const override;
virtual bool IsIconized() const override;
virtual void Iconize( bool iconize ) override;
virtual void Maximize(bool maximize) override;
virtual bool IsFullScreen() const override;
bool EnableFullScreenView(bool enable, long style) override;
virtual bool ShowFullScreen(bool show, long style) override;
virtual void ShowWithoutActivating() override;
virtual void RequestUserAttention(int flags) override;
virtual void ScreenToWindow( int *x, int *y ) override;
virtual void WindowToScreen( int *x, int *y ) override;
virtual bool IsActive() override;
virtual void SetModified(bool modified) override;
virtual bool IsModified() const override;
virtual void SetRepresentedFilename(const wxString& filename) override;
virtual void SetBottomBorderThickness(int thickness) override;
wxNonOwnedWindow* GetWXPeer() { return m_wxPeer; }
CGWindowLevel GetWindowLevel() const override { return m_macWindowLevel; }
void RestoreWindowLevel() override;
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) override;
#if wxUSE_MARKUP
virtual void SetLabelMarkup(const wxString& markup) override;
#endif // wxUSE_MARKUP
void SetPressedBitmap( const wxBitmapBundle& bitmap ) override;
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 );
WXDLLIMPEXP_CORE NSPoint wxToNSPointF(NSView* parent, const wxPoint2DDouble& p);
WXDLLIMPEXP_CORE wxPoint2DDouble wxFromNSPointF(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>
{
}
// Note that the name WXFieldEditor is special and is checked by
// windowWillReturnFieldEditor: in wxNonOwnedWindowController
// implementation, see there.
@property (retain) wxNSTextFieldEditor* WXFieldEditor;
@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
{
BOOL m_withinTextDidChange;
}
@property (retain) wxNSTextFieldEditor* WXFieldEditor;
@end
@interface wxNSComboBox : NSComboBox
{
}
@property (retain) wxNSTextFieldEditor* WXFieldEditor;
@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();
wxPoint wxMacCocoaGetCursorHotSpot( WX_NSCursor cursor );
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(nullptr)
{}
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) override
{
m_pos += PrepareText(text).length();
}
virtual void OnAttrStart(const Attr& WXUNUSED(attr)) override
{
// 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) override
{
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) override
{
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) override
{
return text;
}
wxDECLARE_NO_COPY_CLASS(wxItemMarkupToAttrString);
};
#endif // _WX_OSX_COCOA_PRIVATE_MARKUPTOATTR_H_

View File

@@ -0,0 +1,212 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/osx/cocoa/private/textimpl.h
// Purpose: textcontrol implementation classes that have to be exposed
// Author: Stefan Csomor
// 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() = default;
virtual bool ShouldHandleKeyNavigation(const wxKeyEvent &event) const override;
virtual void SetInitialLabel(const wxString& WXUNUSED(title)) override
{
// 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 override { return true; }
virtual void SetMaxLength(unsigned long len) override;
virtual bool CanForceUpper() override { return true; }
virtual void ForceUpper() override;
virtual wxTextSearchResult SearchText(const wxTextSearch& WXUNUSED(search)) const override
{
wxFAIL_MSG("SearchText() should only be used with multiline controls.");
return wxTextSearchResult{};
}
virtual wxString GetStringValue() const override ;
virtual void SetStringValue( const wxString &str) override ;
virtual wxString GetRTFValue() const override
{
wxFAIL_MSG("GetRTFValue() should only be used with multiline controls.");
return wxEmptyString;
}
virtual void SetRTFValue(const wxString& WXUNUSED(str)) override
{
wxFAIL_MSG("SetRTFValue() should only be used with multiline controls.");
}
virtual void Copy() override ;
virtual void Cut() override ;
virtual void Paste() override ;
virtual bool CanPaste() const override ;
virtual void SetEditable(bool editable) override ;
virtual long GetLastPosition() const override;
virtual void GetSelection( long* from, long* to) const override ;
virtual void SetSelection( long from , long to ) override;
virtual bool PositionToXY(long pos, long *x, long *y) const override;
virtual long XYToPosition(long x, long y) const override;
virtual void ShowPosition(long pos) override;
virtual void WriteText(const wxString& str) override ;
virtual bool HasOwnContextMenu() const override { return true; }
virtual bool SetHint(const wxString& hint) override;
virtual void SetJustification() override;
virtual void controlAction(WXWidget slf, void* _cmd, void *sender) override;
virtual bool becomeFirstResponder(WXWidget slf, void *_cmd) override;
virtual bool resignFirstResponder(WXWidget slf, void *_cmd) override;
virtual void EnableNewLineReplacement(bool enable) override;
virtual bool GetNewLineReplacement() override;
virtual void SetInternalSelection( long from , long to );
virtual void UpdateInternalSelectionFromEditor( wxNSTextFieldEditor* editor);
virtual wxSize GetBestSize() const override;
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) override;
virtual wxTextSearchResult SearchText(const wxTextSearch &search) const override;
virtual wxString GetStringValue() const override ;
virtual void SetStringValue( const wxString &str) override ;
virtual wxString GetRTFValue() const override;
virtual void SetRTFValue(const wxString& str) override;
virtual void Copy() override ;
virtual void Cut() override ;
virtual void Paste() override ;
virtual bool CanPaste() const override ;
virtual void SetEditable(bool editable) override ;
virtual long GetLastPosition() const override;
virtual void GetSelection( long* from, long* to) const override ;
virtual void SetSelection( long from , long to ) override;
virtual bool PositionToXY(long pos, long *x, long *y) const override;
virtual long XYToPosition(long x, long y) const override;
virtual void ShowPosition(long pos) override;
virtual void WriteText(const wxString& str) override ;
virtual void SetFont(const wxFont & font) override;
virtual bool GetStyle(long position, wxTextAttr& style) override;
virtual void SetStyle(long start, long end, const wxTextAttr& style) override;
virtual bool CanFocus() const override;
virtual bool HasOwnContextMenu() const override { return true; }
#if wxUSE_SPELLCHECK
virtual void CheckSpelling(const wxTextProofOptions& options) override;
virtual wxTextProofOptions GetCheckingOptions() const override;
#endif // wxUSE_SPELLCHECK
virtual void EnableAutomaticQuoteSubstitution(bool enable) override;
virtual void EnableAutomaticDashSubstitution(bool enable) override;
virtual void EnableNewLineReplacement(bool enable) override;
virtual bool GetNewLineReplacement() override;
virtual wxSize GetBestSize() const override;
virtual void SetJustification() override;
virtual void controlTextDidChange() override;
virtual bool CanUndo() const override;
virtual void Undo() override;
virtual bool CanRedo() const override;
virtual void Redo() override;
virtual void EmptyUndoBuffer() override;
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 override;
virtual void SetSelectedItem(int item) override;
virtual int GetNumberOfItems() const override;
virtual void InsertItem(int pos, const wxString& item) override;
virtual void RemoveItem(int pos) override;
virtual void Clear() override;
virtual wxString GetStringAtIndex(int pos) const override;
virtual int FindString(const wxString& text) const override;
virtual void Popup() override;
virtual void Dismiss() override;
virtual void SetEditable(bool editable) override;
virtual void mouseEvent(WX_NSEvent event, WXWidget slf, void *_cmd) override;
private:
NSComboBox* m_comboBox;
};
#endif // _WX_OSX_COCOA_PRIVATE_TEXTIMPL_H_