osx new layout
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55419 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
70231bce2d
commit
524c47aa3a
@ -44,21 +44,20 @@ class WXDLLIMPEXP_CORE wxApp: public wxAppBase
|
||||
virtual void SetPrintMode(int mode) { m_printMode = mode; }
|
||||
virtual int GetPrintMode() const { return m_printMode; }
|
||||
|
||||
// calling OnInit with an auto-release pool ready ...
|
||||
virtual bool CallOnInit();
|
||||
#if wxUSE_GUI
|
||||
// setting up all MacOS Specific Event-Handlers etc
|
||||
virtual bool OnInitGui();
|
||||
#endif // wxUSE_GUI
|
||||
#if wxOSX_USE_IPHONE
|
||||
virtual bool CallOnInit();
|
||||
virtual int OnRun();
|
||||
#endif
|
||||
|
||||
virtual bool ProcessIdle();
|
||||
|
||||
// implementation only
|
||||
void OnIdle(wxIdleEvent& event);
|
||||
void OnEndSession(wxCloseEvent& event);
|
||||
void OnQueryEndSession(wxCloseEvent& event);
|
||||
|
||||
void MacDoOneEvent() ;
|
||||
|
||||
protected:
|
||||
int m_printMode; // wxPRINT_WINDOWS, wxPRINT_POSTSCRIPT
|
||||
|
||||
@ -88,6 +87,8 @@ public:
|
||||
|
||||
private:
|
||||
// mac specifics
|
||||
virtual bool DoInitGui();
|
||||
virtual void DoCleanUp();
|
||||
|
||||
WXEVENTHANDLERREF m_macEventHandler ;
|
||||
WXEVENTHANDLERCALLREF m_macCurrentEventHandlerCallRef ;
|
||||
@ -101,7 +102,6 @@ public:
|
||||
static wxString s_macHelpMenuTitleName ;
|
||||
|
||||
WXEVENTREF MacGetCurrentEvent() { return m_macCurrentEvent ; }
|
||||
void MacHandleOneEvent( WXEVENTREF ev ) ;
|
||||
|
||||
// For embedded use. By default does nothing.
|
||||
virtual void MacHandleUnhandledEvent( WXEVENTREF ev );
|
||||
|
@ -162,6 +162,10 @@ public:
|
||||
// returns a CGImageRef which must released after usage with CGImageRelease
|
||||
CGImageRef CreateCGImage() const ;
|
||||
|
||||
#if wxOSX_USE_COCOA_OR_IPHONE
|
||||
// returns an autoreleased version of the image
|
||||
WX_NSImage GetNSImage() const;
|
||||
#endif
|
||||
// returns a IconRef which must be retained before and released after usage
|
||||
IconRef GetIconRef() const;
|
||||
// returns a IconRef which must be released after usage
|
||||
|
@ -43,12 +43,15 @@ public:
|
||||
const wxValidator& validator = wxDefaultValidator,
|
||||
const wxString& name = wxButtonNameStr);
|
||||
|
||||
virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ;
|
||||
static wxSize GetDefaultSize();
|
||||
|
||||
virtual wxWindow *SetDefault();
|
||||
virtual void Command(wxCommandEvent& event);
|
||||
|
||||
// osx specific event handling common for all osx-ports
|
||||
|
||||
virtual bool HandleClicked( double timestampsec );
|
||||
|
||||
protected:
|
||||
virtual wxSize DoGetBestSize() const ;
|
||||
|
||||
@ -82,7 +85,9 @@ public:
|
||||
void SetOpen( bool open );
|
||||
bool IsOpen() const;
|
||||
|
||||
virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ;
|
||||
// osx specific event handling common for all osx-ports
|
||||
|
||||
virtual bool HandleClicked( double timestampsec );
|
||||
|
||||
protected:
|
||||
virtual wxSize DoGetBestSize() const ;
|
||||
|
@ -34,9 +34,11 @@ public:
|
||||
virtual void SetValue(bool);
|
||||
virtual bool GetValue() const;
|
||||
|
||||
virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ;
|
||||
virtual void Command(wxCommandEvent& event);
|
||||
|
||||
// osx specific event handling common for all osx-ports
|
||||
|
||||
virtual bool HandleClicked( double timestampsec );
|
||||
protected:
|
||||
void DoSet3StateValue(wxCheckBoxState val);
|
||||
virtual wxCheckBoxState DoGet3StateValue() const;
|
||||
|
@ -13,15 +13,6 @@
|
||||
#ifndef _WX_MAC_CHECKLST_H_
|
||||
#define _WX_MAC_CHECKLST_H_
|
||||
|
||||
class wxMacCheckListControl
|
||||
{
|
||||
public :
|
||||
virtual bool MacIsChecked(unsigned int n) const = 0;
|
||||
virtual void MacCheck(unsigned int n, bool bCheck = true) = 0;
|
||||
|
||||
virtual ~wxMacCheckListControl() { }
|
||||
};
|
||||
|
||||
class WXDLLIMPEXP_CORE wxCheckListBox : public wxCheckListBoxBase
|
||||
{
|
||||
public:
|
||||
@ -77,9 +68,22 @@ public:
|
||||
bool IsChecked(unsigned int uiIndex) const;
|
||||
void Check(unsigned int uiIndex, bool bCheck = true);
|
||||
|
||||
wxMacCheckListControl* GetPeer() const;
|
||||
// data callbacks
|
||||
virtual void GetValueCallback( unsigned int n, wxListWidgetColumn* col , wxListWidgetCellValue& value );
|
||||
virtual void SetValueCallback( unsigned int n, wxListWidgetColumn* col , wxListWidgetCellValue& value );
|
||||
|
||||
protected:
|
||||
// override all methods which add/delete items to update m_checks array as
|
||||
// well
|
||||
virtual void OnItemInserted(unsigned int pos);
|
||||
virtual void DoDeleteOneItem(unsigned int n);
|
||||
virtual void DoClear();
|
||||
|
||||
// the array containing the checked status of the items
|
||||
wxArrayInt m_checks;
|
||||
|
||||
wxListWidgetColumn* m_checkColumn ;
|
||||
|
||||
void Init();
|
||||
|
||||
private:
|
||||
|
@ -28,7 +28,7 @@ class WXDLLIMPEXP_CORE wxChoice: public wxChoiceBase
|
||||
|
||||
public:
|
||||
wxChoice()
|
||||
: m_strings(), m_datas(), m_macPopUpMenuHandle(NULL)
|
||||
: m_strings(), m_datas()
|
||||
{}
|
||||
|
||||
virtual ~wxChoice() ;
|
||||
@ -76,7 +76,9 @@ public:
|
||||
virtual int FindString(const wxString& s, bool bCase = false) const;
|
||||
virtual wxString GetString(unsigned int n) const ;
|
||||
virtual void SetString(unsigned int pos, const wxString& s);
|
||||
virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ;
|
||||
// osx specific event handling common for all osx-ports
|
||||
|
||||
virtual bool HandleClicked( double timestampsec );
|
||||
|
||||
protected:
|
||||
virtual void DoDeleteOneItem(unsigned int n);
|
||||
@ -92,7 +94,7 @@ protected:
|
||||
|
||||
wxArrayString m_strings;
|
||||
wxChoiceDataArray m_datas ;
|
||||
WXHMENU m_macPopUpMenuHandle ;
|
||||
wxMenu* m_popUpMenu ;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -125,7 +125,9 @@ class WXDLLIMPEXP_CORE wxComboBox : public wxControl, public wxComboBoxBase
|
||||
|
||||
virtual wxClientDataType GetClientDataType() const;
|
||||
|
||||
wxInt32 MacControlHit( WXEVENTHANDLERREF handler, WXEVENTREF event );
|
||||
// osx specific event handling common for all osx-ports
|
||||
|
||||
virtual bool HandleClicked( double timestampsec );
|
||||
|
||||
wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST
|
||||
|
||||
|
@ -12,53 +12,19 @@
|
||||
#ifndef _WX_MAC_CARBON_EVTLOOP_H_
|
||||
#define _WX_MAC_CARBON_EVTLOOP_H_
|
||||
|
||||
// set wxOSX_USE_RUN_APP_EVENT_LOOP to 1 if the standard
|
||||
// RunApplicationEventLoop function should be used, otherwise
|
||||
// the lower level CarbonEventLoop will be used
|
||||
//
|
||||
// in the long run we should make this 1 by default but we will have to clean
|
||||
// up event handling to make sure we don't miss handling of things like pending
|
||||
// events etc and perhaps we will also have to pipe events through an
|
||||
// ueber-event-handler to make sure we have one place to do all these
|
||||
// house-keeping functions
|
||||
#define wxOSX_USE_RUN_APP_EVENT_LOOP 0
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxEventLoop
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#if wxOSX_USE_RUN_APP_EVENT_LOOP
|
||||
|
||||
class WXDLLIMPEXP_CORE wxGUIEventLoop : public wxEventLoopBase
|
||||
{
|
||||
public:
|
||||
wxGUIEventLoop() { m_exitcode = 0; }
|
||||
|
||||
// implement base class pure virtuals
|
||||
virtual int Run();
|
||||
virtual void Exit(int rc = 0);
|
||||
virtual bool Pending() const;
|
||||
virtual bool Dispatch();
|
||||
|
||||
private:
|
||||
int m_exitcode;
|
||||
};
|
||||
|
||||
#else // manual event loop
|
||||
|
||||
class WXDLLIMPEXP_CORE wxGUIEventLoop : public wxEventLoopManual
|
||||
{
|
||||
public:
|
||||
wxGUIEventLoop() { }
|
||||
wxGUIEventLoop();
|
||||
|
||||
virtual bool Pending() const;
|
||||
virtual bool Dispatch();
|
||||
|
||||
// implement base class pure virtual
|
||||
virtual void WakeUp();
|
||||
private:
|
||||
double m_sleepTime;
|
||||
};
|
||||
|
||||
#endif // auto/manual event loop
|
||||
|
||||
#endif // _WX_MAC_CARBON_EVTLOOP_H_
|
||||
|
||||
|
@ -50,7 +50,9 @@ public:
|
||||
|
||||
bool Create(const wxNativeFontInfo& info);
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
bool MacCreateFromThemeFont( wxUint16 themeFontID ) ;
|
||||
#endif
|
||||
#if wxOSX_USE_CORE_TEXT
|
||||
bool MacCreateFromUIFont( wxUint32 coreTextFontType );
|
||||
bool MacCreateFromCTFontDescriptor( const void * ctFontDescriptor, int pointSize = 0 );
|
||||
|
@ -103,8 +103,13 @@ protected:
|
||||
virtual void DoGetClientSize(int *width, int *height) const;
|
||||
virtual void DoSetClientSize(int width, int height);
|
||||
|
||||
#if wxUSE_MENUS
|
||||
virtual void DetachMenuBar();
|
||||
virtual void AttachMenuBar(wxMenuBar *menubar);
|
||||
#endif
|
||||
|
||||
// osx specific event handling common for all osx-ports
|
||||
virtual void HandleResized( long timestamp );
|
||||
|
||||
protected:
|
||||
// the last focused child: we restore focus to it on activation
|
||||
|
@ -12,13 +12,17 @@
|
||||
#ifndef _WX_GLCANVAS_H_
|
||||
#define _WX_GLCANVAS_H_
|
||||
|
||||
#ifdef __DARWIN__
|
||||
# include <OpenGL/gl.h>
|
||||
# include <AGL/agl.h>
|
||||
#else
|
||||
# include <gl.h>
|
||||
# include <agl.h>
|
||||
#endif
|
||||
#include <OpenGL/gl.h>
|
||||
|
||||
// low level calls
|
||||
|
||||
WXDLLIMPEXP_GL WXGLContext WXGLCreateContext( WXGLPixelFormat pixelFormat, WXGLContext shareContext );
|
||||
WXDLLIMPEXP_GL void WXGLDestroyContext( WXGLContext context );
|
||||
WXDLLIMPEXP_GL WXGLContext WXGLGetCurrentContext();
|
||||
WXDLLIMPEXP_GL void WXGLSwapBuffers( WXGLContext context );
|
||||
|
||||
WXDLLIMPEXP_GL WXGLPixelFormat WXGLChoosePixelFormat(const int *attribList);
|
||||
WXDLLIMPEXP_GL void WXGLDestroyPixelFormat( WXGLPixelFormat pixelFormat );
|
||||
|
||||
class WXDLLIMPEXP_GL wxGLContext : public wxGLContextBase
|
||||
{
|
||||
@ -29,10 +33,10 @@ public:
|
||||
virtual bool SetCurrent(const wxGLCanvas& win) const;
|
||||
|
||||
// Mac-specific
|
||||
AGLContext GetAGLContext() const { return m_aglContext; }
|
||||
|
||||
WXGLContext GetWXGLContext() const { return m_glContext; }
|
||||
|
||||
private:
|
||||
AGLContext m_aglContext;
|
||||
WXGLContext m_glContext;
|
||||
|
||||
DECLARE_NO_COPY_CLASS(wxGLContext)
|
||||
};
|
||||
@ -71,7 +75,7 @@ public:
|
||||
static bool IsAGLMultiSampleAvailable();
|
||||
|
||||
// return the pixel format used by this window
|
||||
AGLPixelFormat GetAGLPixelFormat() const { return m_aglFormat; }
|
||||
WXGLPixelFormat GetWXGLPixelFormat() const { return m_glFormat; }
|
||||
|
||||
// update the view port of the current context to match this window
|
||||
void SetViewport();
|
||||
@ -119,6 +123,7 @@ public:
|
||||
|
||||
// implementation-only from now on
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
// Unlike some other platforms, this must get called if you override it,
|
||||
// i.e. don't forget "event.Skip()" in your EVT_SIZE handler
|
||||
void OnSize(wxSizeEvent& event);
|
||||
@ -128,12 +133,19 @@ public:
|
||||
virtual void MacVisibilityChanged();
|
||||
|
||||
void MacUpdateView();
|
||||
|
||||
GLint GetAglBufferName() const { return m_bufferName; }
|
||||
#endif
|
||||
|
||||
protected:
|
||||
AGLPixelFormat m_aglFormat;
|
||||
WXGLPixelFormat m_glFormat;
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
bool m_macCanvasIsShown,
|
||||
m_needsUpdate;
|
||||
WXGLContext m_dummyContext;
|
||||
GLint m_bufferName;
|
||||
#endif
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
DECLARE_CLASS(wxGLCanvas)
|
||||
|
@ -21,8 +21,8 @@
|
||||
// forward decl for GetSelections()
|
||||
class wxArrayInt;
|
||||
|
||||
// forward decl for wxMacListControl data type.
|
||||
class wxMacListControl;
|
||||
// forward decl for wxListWidgetImpl data type.
|
||||
class wxListWidgetImpl;
|
||||
|
||||
// List box item
|
||||
|
||||
@ -32,6 +32,10 @@ WX_DEFINE_ARRAY( char* , wxListDataArray );
|
||||
// List box control
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLIMPEXP_CORE wxListWidgetColumn;
|
||||
|
||||
class WXDLLIMPEXP_CORE wxListWidgetCellValue;
|
||||
|
||||
class WXDLLIMPEXP_CORE wxListBox : public wxListBoxBase
|
||||
{
|
||||
public:
|
||||
@ -86,7 +90,7 @@ public:
|
||||
const wxString& name = wxListBoxNameStr);
|
||||
|
||||
virtual ~wxListBox();
|
||||
|
||||
|
||||
// implement base class pure virtuals
|
||||
virtual void Refresh(bool eraseBack = true, const wxRect *rect = NULL);
|
||||
|
||||
@ -95,6 +99,10 @@ public:
|
||||
virtual void SetString(unsigned int n, const wxString& s);
|
||||
virtual int FindString(const wxString& s, bool bCase = false) const;
|
||||
|
||||
// data callbacks
|
||||
virtual void GetValueCallback( unsigned int n, wxListWidgetColumn* col , wxListWidgetCellValue& value );
|
||||
virtual void SetValueCallback( unsigned int n, wxListWidgetColumn* col , wxListWidgetCellValue& value );
|
||||
|
||||
virtual bool IsSelected(int n) const;
|
||||
virtual int GetSelection() const;
|
||||
virtual int GetSelections(wxArrayInt& aSelections) const;
|
||||
@ -110,11 +118,15 @@ public:
|
||||
static wxVisualAttributes
|
||||
GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
|
||||
|
||||
wxMacListControl* GetPeer() const;
|
||||
wxListWidgetImpl* GetListPeer() const;
|
||||
|
||||
bool MacGetBlockEvents() const { return m_blockEvents; }
|
||||
|
||||
protected:
|
||||
// callback for derived classes which may have to insert additional data
|
||||
// at a certain line - which cannot be predetermined for sorted list data
|
||||
virtual void OnItemInserted(unsigned int pos);
|
||||
|
||||
virtual void DoClear();
|
||||
virtual void DoDeleteOneItem(unsigned int n);
|
||||
|
||||
@ -139,6 +151,21 @@ protected:
|
||||
|
||||
bool m_blockEvents;
|
||||
|
||||
wxListWidgetColumn* m_textColumn;
|
||||
|
||||
// data storage (copied from univ)
|
||||
|
||||
// the array containing all items (it is sorted if the listbox has
|
||||
// wxLB_SORT style)
|
||||
union
|
||||
{
|
||||
wxArrayString *unsorted;
|
||||
wxSortedArrayString *sorted;
|
||||
} m_strings;
|
||||
|
||||
// and this one the client data (either void or wxClientData)
|
||||
wxArrayPtrVoid m_itemsClientData;
|
||||
|
||||
private:
|
||||
DECLARE_DYNAMIC_CLASS(wxListBox)
|
||||
DECLARE_EVENT_TABLE()
|
||||
|
@ -18,7 +18,6 @@
|
||||
#define wxMAC_ALWAYS_USE_GENERIC_LISTCTRL wxT("mac.listctrl.always_use_generic")
|
||||
|
||||
class wxMacDataBrowserListCtrlControl;
|
||||
class wxMacListControl;
|
||||
class wxListCtrlTextCtrlWrapper;
|
||||
class wxListCtrlRenameTimer;
|
||||
|
||||
@ -281,7 +280,7 @@ class WXDLLIMPEXP_CORE wxListCtrl: public wxControl
|
||||
// data is arbitrary data to be passed to the sort function.
|
||||
bool SortItems(wxListCtrlCompare fn, long data);
|
||||
|
||||
wxMacListControl* GetPeer() const;
|
||||
wxMacDataBrowserListCtrlControl* GetListPeer() const;
|
||||
|
||||
// these functions are only used for virtual list view controls, i.e. the
|
||||
// ones with wxLC_VIRTUAL style
|
||||
|
@ -20,6 +20,8 @@ class WXDLLIMPEXP_FWD_CORE wxFrame;
|
||||
// Menu
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLIMPEXP_FWD_CORE wxMenuImpl ;
|
||||
|
||||
class WXDLLIMPEXP_CORE wxMenu : public wxMenuBase
|
||||
{
|
||||
public:
|
||||
@ -37,34 +39,40 @@ public:
|
||||
|
||||
virtual void SetTitle(const wxString& title);
|
||||
|
||||
// MSW-specific
|
||||
bool ProcessCommand(wxCommandEvent& event);
|
||||
|
||||
// semi-private accessors
|
||||
|
||||
// get the window which contains this menu
|
||||
wxWindow *GetWindow() const;
|
||||
// get the menu handle
|
||||
WXHMENU GetHMenu() const ;
|
||||
|
||||
// implementation only from now on
|
||||
// -------------------------------
|
||||
|
||||
int MacGetIndexFromId( int id ) ;
|
||||
int MacGetIndexFromItem( wxMenuItem *pItem ) ;
|
||||
void MacEnableMenu( bool bDoEnable ) ;
|
||||
// MacOS needs to know about submenus somewhere within this menu
|
||||
// before it can be displayed , also hide special menu items like preferences
|
||||
// that are handled by the OS
|
||||
void MacBeforeDisplay( bool isSubMenu ) ;
|
||||
// undo all changes from the MacBeforeDisplay call
|
||||
void MacAfterDisplay( bool isSubMenu ) ;
|
||||
|
||||
// semi-private accessors
|
||||
// get the window which contains this menu
|
||||
wxWindow *GetWindow() const;
|
||||
// get the menu handle
|
||||
WXHMENU GetHMenu() const { return m_hMenu; }
|
||||
|
||||
short MacGetMenuId() { return m_macMenuId ; }
|
||||
|
||||
wxInt32 MacHandleCommandProcess( wxMenuItem* item, int id, wxWindow* targetWindow = NULL );
|
||||
wxInt32 MacHandleCommandUpdateStatus( wxMenuItem* item, int id, wxWindow* targetWindow = NULL);
|
||||
bool HandleCommandUpdateStatus( wxMenuItem* menuItem, wxWindow* senderWindow = NULL);
|
||||
bool HandleCommandProcess( wxMenuItem* menuItem, wxWindow* senderWindow = NULL);
|
||||
void HandleMenuItemHighlighted( wxMenuItem* menuItem );
|
||||
void HandleMenuOpened();
|
||||
void HandleMenuClosed();
|
||||
|
||||
wxMenuImpl* GetPeer() { return m_peer; }
|
||||
|
||||
// make sure we can veto
|
||||
void SetAllowRearrange( bool allow );
|
||||
bool AllowRearrange() const { return m_allowRearrange; }
|
||||
|
||||
// if a menu is used purely for internal implementation reasons (eg wxChoice)
|
||||
// we don't want native menu events being triggered
|
||||
void SetNoEventsMode( bool noEvents );
|
||||
bool GetNoEventsMode() const { return m_noEventsMode; }
|
||||
protected:
|
||||
// hide special menu items like exit, preferences etc
|
||||
// that are expected in the app menu
|
||||
void DoRearrange() ;
|
||||
|
||||
bool DoHandleMenuEvent( wxEvent& evt );
|
||||
virtual wxMenuItem* DoAppend(wxMenuItem *item);
|
||||
virtual wxMenuItem* DoInsert(size_t pos, wxMenuItem *item);
|
||||
virtual wxMenuItem* DoRemove(wxMenuItem *item);
|
||||
@ -82,19 +90,24 @@ private:
|
||||
// if TRUE, insert a breal before appending the next item
|
||||
bool m_doBreak;
|
||||
|
||||
// in this menu rearranging of menu items (esp hiding) is allowed
|
||||
bool m_allowRearrange;
|
||||
|
||||
// don't trigger native events
|
||||
bool m_noEventsMode;
|
||||
|
||||
// the position of the first item in the current radio group or -1
|
||||
int m_startRadioGroup;
|
||||
|
||||
// the menu handle of this menu
|
||||
WXHMENU m_hMenu;
|
||||
|
||||
short m_macMenuId;
|
||||
|
||||
static short s_macNextMenuId ;
|
||||
|
||||
wxMenuImpl* m_peer;
|
||||
|
||||
DECLARE_DYNAMIC_CLASS(wxMenu)
|
||||
};
|
||||
|
||||
#if wxOSX_USE_COCOA_OR_CARBON
|
||||
|
||||
// the iphone only has popup-menus
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Menu Bar (a la Windows)
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -132,7 +145,6 @@ public:
|
||||
}
|
||||
|
||||
// implementation from now on
|
||||
WXHMENU Create();
|
||||
int FindMenu(const wxString& title);
|
||||
void Detach();
|
||||
|
||||
@ -173,10 +185,14 @@ protected:
|
||||
static WXHMENU s_macWindowMenuHandle ;
|
||||
|
||||
private:
|
||||
static wxMenuBar* s_macInstalledMenuBar ;
|
||||
static wxMenuBar* s_macCommonMenuBar ;
|
||||
static wxMenuBar* s_macInstalledMenuBar ;
|
||||
static wxMenuBar* s_macCommonMenuBar ;
|
||||
|
||||
wxMenu* m_rootMenu;
|
||||
|
||||
DECLARE_DYNAMIC_CLASS(wxMenuBar)
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif // _WX_MENU_H_
|
||||
|
@ -22,6 +22,9 @@
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxMenuItem: an item in the menu, optionally implements owner-drawn behaviour
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLIMPEXP_FWD_CORE wxMenuItemImpl ;
|
||||
|
||||
class WXDLLIMPEXP_CORE wxMenuItem: public wxMenuItemBase
|
||||
{
|
||||
public:
|
||||
@ -53,9 +56,8 @@ public:
|
||||
void SetRadioGroupStart(int start);
|
||||
void SetRadioGroupEnd(int end);
|
||||
|
||||
wxMenuItemImpl* GetPeer() { return m_peer; }
|
||||
private:
|
||||
void DoUpdateItemBitmap( WXHMENU menu, wxUint16 index) ;
|
||||
|
||||
void UncheckRadio() ;
|
||||
|
||||
// the positions of the first and last items of the radio group this item
|
||||
@ -73,6 +75,8 @@ private:
|
||||
|
||||
wxBitmap m_bitmap; // Bitmap for menuitem, if any
|
||||
void* m_menu ; // the appropriate menu , may also be a system menu
|
||||
|
||||
wxMenuItemImpl* m_peer;
|
||||
|
||||
DECLARE_DYNAMIC_CLASS(wxMenuItem)
|
||||
};
|
||||
|
@ -97,7 +97,13 @@ public:
|
||||
|
||||
wxNonOwnedWindowImpl* GetNonOwnedPeer() const { return m_nowpeer; }
|
||||
|
||||
// osx specific event handling common for all osx-ports
|
||||
|
||||
virtual void HandleActivated( double timestampsec, bool didActivate );
|
||||
virtual void HandleResized( double timestampsec );
|
||||
virtual void HandleMoved( double timestampsec );
|
||||
virtual void HandleResizing( double timestampsec, wxRect* rect );
|
||||
|
||||
protected:
|
||||
// common part of all ctors
|
||||
void Init();
|
||||
|
@ -117,7 +117,9 @@ public:
|
||||
// base class virtuals
|
||||
// -------------------
|
||||
virtual void Command(wxCommandEvent& event);
|
||||
virtual wxInt32 MacControlHit(WXEVENTHANDLERREF handler, WXEVENTREF event);
|
||||
// osx specific event handling common for all osx-ports
|
||||
|
||||
virtual bool HandleClicked( double timestampsec );
|
||||
|
||||
protected:
|
||||
virtual wxNotebookPage *DoRemovePage(size_t page) ;
|
||||
|
@ -25,6 +25,8 @@ typedef SInt32 SRefCon;
|
||||
|
||||
#if wxUSE_GUI
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
|
||||
#include "wx/listbox.h"
|
||||
#include "wx/osx/carbon/dc.h"
|
||||
#include "wx/osx/carbon/dcclient.h"
|
||||
@ -289,8 +291,6 @@ public :
|
||||
|
||||
void Init();
|
||||
|
||||
virtual void Destroy();
|
||||
|
||||
void SetReferenceInNativeControl();
|
||||
static wxMacControl* GetReferenceFromNativeControl(ControlRef control);
|
||||
|
||||
@ -313,6 +313,7 @@ public :
|
||||
virtual void Move(int x, int y, int width, int height);
|
||||
virtual void GetPosition( int &x, int &y ) const;
|
||||
virtual void GetSize( int &width, int &height ) const;
|
||||
virtual void SetControlSize( wxWindowVariant variant ) ;
|
||||
|
||||
// where is in native window relative coordinates
|
||||
virtual void SetNeedsDisplay( const wxRect* where = NULL );
|
||||
@ -325,6 +326,28 @@ public :
|
||||
|
||||
void RemoveFromParent();
|
||||
void Embed( wxWidgetImpl *parent );
|
||||
|
||||
void SetDefaultButton( bool isDefault );
|
||||
void PerformClick();
|
||||
void SetLabel( const wxString& title, wxFontEncoding encoding );
|
||||
|
||||
wxInt32 GetValue() const;
|
||||
void SetValue( wxInt32 v );
|
||||
void SetBitmap( const wxBitmap& bitmap );
|
||||
void SetupTabs( const wxNotebook ¬ebook );
|
||||
|
||||
void GetBestRect( wxRect *r ) const;
|
||||
bool IsEnabled() const;
|
||||
void Enable( bool enable );
|
||||
bool ButtonClickDidStateChange() { return false ;}
|
||||
void SetMinimum( wxInt32 v );
|
||||
void SetMaximum( wxInt32 v );
|
||||
void PulseGauge() ;
|
||||
void SetScrollThumb( wxInt32 value, wxInt32 thumbSize );
|
||||
|
||||
// temp convenience methods
|
||||
|
||||
void GetBestRect( Rect *r ) const;
|
||||
/*
|
||||
void operator= (ControlRef c) { m_controlRef = c; }
|
||||
operator ControlRef () { return m_controlRef; }
|
||||
@ -340,14 +363,8 @@ public :
|
||||
|
||||
virtual OSStatus SendHICommand( UInt32 commandID , OptionBits inOptions = 0 );
|
||||
|
||||
virtual SInt32 GetValue() const;
|
||||
virtual SInt32 GetMaximum() const;
|
||||
virtual SInt32 GetMinimum() const;
|
||||
|
||||
virtual void SetValue( SInt32 v );
|
||||
virtual void SetMinimum( SInt32 v );
|
||||
virtual void SetMaximum( SInt32 v );
|
||||
|
||||
|
||||
virtual void SetValueAndRange( SInt32 value , SInt32 minimum , SInt32 maximum );
|
||||
virtual void SetRange( SInt32 minimum , SInt32 maximum );
|
||||
|
||||
@ -404,7 +421,6 @@ public :
|
||||
}
|
||||
|
||||
// Flash the control for the specified amount of time
|
||||
virtual void Flash( ControlPartCode part , UInt32 ticks = 8 );
|
||||
|
||||
virtual void VisibilityChanged( bool shown );
|
||||
virtual void SuperChangedPosition();
|
||||
@ -414,13 +430,11 @@ public :
|
||||
virtual void SetBackgroundColour( const wxColour& col );
|
||||
virtual ControlPartCode HandleKey( SInt16 keyCode, SInt16 charCode, EventModifiers modifiers );
|
||||
void SetActionProc( ControlActionUPP actionProc );
|
||||
void SetViewSize( SInt32 viewSize );
|
||||
SInt32 GetViewSize() const;
|
||||
|
||||
virtual void SetVisibility( bool visible );
|
||||
virtual bool IsEnabled() const;
|
||||
|
||||
virtual bool IsActive() const;
|
||||
virtual void Enable( bool enable );
|
||||
|
||||
// invalidates this control and all children
|
||||
virtual void InvalidateWithChildren();
|
||||
@ -429,9 +443,7 @@ public :
|
||||
// in native parent window relative coordinates
|
||||
|
||||
virtual void GetRectInWindowCoords( Rect *r );
|
||||
virtual void GetBestRect( Rect *r );
|
||||
|
||||
virtual void SetLabel( const wxString &title );
|
||||
|
||||
virtual void GetFeatures( UInt32 *features );
|
||||
virtual OSStatus GetRegion( ControlPartCode partCode , RgnHandle region );
|
||||
@ -614,38 +626,23 @@ const DataBrowserPropertyID kMinColumnId = 1050;
|
||||
|
||||
// base API for high-level databrowser operations
|
||||
|
||||
class WXDLLIMPEXP_CORE wxMacListControl
|
||||
{
|
||||
public:
|
||||
virtual void MacDelete( unsigned int n ) = 0;
|
||||
virtual void MacInsert( unsigned int n, const wxArrayStringsAdapter& items, int column = -1 ) = 0;
|
||||
// returns index of newly created line
|
||||
virtual int MacAppend( const wxString& item ) = 0;
|
||||
virtual void MacSetString( unsigned int n, const wxString& item ) = 0;
|
||||
virtual void MacClear() = 0;
|
||||
virtual void MacDeselectAll() = 0;
|
||||
virtual void MacSetSelection( unsigned int n, bool select, bool multi ) = 0;
|
||||
virtual int MacGetSelection() const = 0;
|
||||
virtual int MacGetSelections( wxArrayInt& aSelections ) const = 0;
|
||||
virtual bool MacIsSelected( unsigned int n ) const = 0;
|
||||
virtual void MacScrollTo( unsigned int n ) = 0;
|
||||
virtual wxString MacGetString( unsigned int n) const = 0;
|
||||
virtual unsigned int MacGetCount() const = 0;
|
||||
|
||||
virtual void MacSetClientData( unsigned int n, void * data) = 0;
|
||||
virtual void * MacGetClientData( unsigned int) const = 0;
|
||||
|
||||
virtual ~wxMacListControl() { }
|
||||
};
|
||||
|
||||
// base class for databrowser items
|
||||
|
||||
enum DataItemType {
|
||||
DataItem_Text
|
||||
};
|
||||
|
||||
/*
|
||||
class WXDLLIMPEXP_CORE wxMacDataItem
|
||||
{
|
||||
public :
|
||||
wxMacDataItem();
|
||||
virtual ~wxMacDataItem();
|
||||
} ;
|
||||
*/
|
||||
|
||||
class WXDLLIMPEXP_CORE wxMacDataItem
|
||||
{
|
||||
public :
|
||||
wxMacDataItem();
|
||||
virtual ~wxMacDataItem();
|
||||
@ -664,24 +661,11 @@ public :
|
||||
DataBrowserItemNotification message,
|
||||
DataBrowserItemDataRef itemData ) const;
|
||||
|
||||
void SetLabel( const wxString& str);
|
||||
const wxString& GetLabel() const;
|
||||
|
||||
void SetOrder( SInt32 order );
|
||||
SInt32 GetOrder() const;
|
||||
|
||||
void SetData( void* data);
|
||||
void* GetData() const;
|
||||
|
||||
void SetColumn( short col );
|
||||
short GetColumn();
|
||||
|
||||
protected :
|
||||
wxString m_label;
|
||||
wxCFStringRef m_cfLabel;
|
||||
void * m_data;
|
||||
SInt32 m_order;
|
||||
DataBrowserPropertyID m_colId;
|
||||
|
||||
};
|
||||
|
||||
@ -693,18 +677,17 @@ enum ListSortOrder {
|
||||
|
||||
typedef wxMacDataItem* wxMacDataItemPtr;
|
||||
const wxMacDataItemPtr wxMacDataBrowserRootContainer = NULL;
|
||||
typedef void * wxListColumnId ;
|
||||
|
||||
WX_DEFINE_USER_EXPORTED_ARRAY_PTR(wxMacDataItemPtr, wxArrayMacDataItemPtr, class WXDLLIMPEXP_CORE);
|
||||
|
||||
class WXDLLIMPEXP_CORE wxMacDataItemBrowserControl : public wxMacDataBrowserControl, public wxMacListControl
|
||||
class WXDLLIMPEXP_CORE wxMacDataItemBrowserControl : public wxMacDataBrowserControl
|
||||
{
|
||||
public :
|
||||
wxMacDataItemBrowserControl( wxWindow* peer , const wxPoint& pos, const wxSize& size, long style);
|
||||
wxMacDataItemBrowserControl() {}
|
||||
// create a list item (can be a subclass of wxMacListBoxItem)
|
||||
|
||||
virtual wxMacDataItem* CreateItem();
|
||||
|
||||
unsigned int GetItemCount(const wxMacDataItem* container, bool recurse , DataBrowserItemState state) const;
|
||||
void GetItems(const wxMacDataItem* container, bool recurse ,
|
||||
DataBrowserItemState state, wxArrayMacDataItemPtr &items ) const;
|
||||
@ -741,6 +724,18 @@ public :
|
||||
|
||||
void GetSelectionAnchor( wxMacDataItemPtr* first , wxMacDataItemPtr* last) const;
|
||||
|
||||
// add and remove
|
||||
|
||||
virtual void MacDelete( unsigned int n );
|
||||
virtual void MacInsert( unsigned int n, wxMacDataItem* item);
|
||||
virtual void MacClear();
|
||||
|
||||
// accessing content
|
||||
|
||||
virtual unsigned int MacGetCount() const;
|
||||
|
||||
public :
|
||||
|
||||
// item aware methods, to be used in subclasses
|
||||
|
||||
virtual Boolean CompareItems(const wxMacDataItem* itemOneID,
|
||||
@ -763,35 +758,6 @@ public :
|
||||
bool IsSelectionSuppressed() const { return m_suppressSelection; }
|
||||
bool SuppressSelection( bool suppress );
|
||||
|
||||
|
||||
// wxMacListControl Methods
|
||||
// add and remove
|
||||
|
||||
virtual void MacDelete( unsigned int n );
|
||||
virtual void MacInsert( unsigned int n, const wxArrayStringsAdapter& items, int column = -1 );
|
||||
virtual int MacAppend( const wxString& item );
|
||||
virtual void MacClear();
|
||||
|
||||
// selecting
|
||||
|
||||
virtual void MacDeselectAll();
|
||||
virtual void MacSetSelection( unsigned int n, bool select, bool multi = false );
|
||||
virtual int MacGetSelection() const;
|
||||
virtual int MacGetSelections( wxArrayInt& aSelections ) const;
|
||||
virtual bool MacIsSelected( unsigned int n ) const;
|
||||
|
||||
// display
|
||||
|
||||
virtual void MacScrollTo( unsigned int n );
|
||||
|
||||
// accessing content
|
||||
|
||||
virtual void MacSetString( unsigned int n, const wxString& item );
|
||||
virtual void MacSetClientData( unsigned int n, void * data);
|
||||
virtual wxString MacGetString( unsigned int n) const;
|
||||
virtual void * MacGetClientData( unsigned int) const;
|
||||
virtual unsigned int MacGetCount() const;
|
||||
|
||||
// client data
|
||||
|
||||
virtual wxClientDataType GetClientDataType() const;
|
||||
@ -854,28 +820,112 @@ public :
|
||||
|
||||
virtual ~wxMacListBoxItem();
|
||||
|
||||
virtual OSStatus GetSetData(wxMacDataItemBrowserControl *owner ,
|
||||
DataBrowserPropertyID property,
|
||||
DataBrowserItemDataRef itemData,
|
||||
bool changeValue );
|
||||
|
||||
virtual void Notification(wxMacDataItemBrowserControl *owner ,
|
||||
DataBrowserItemNotification message,
|
||||
DataBrowserItemDataRef itemData ) const;
|
||||
protected :
|
||||
};
|
||||
|
||||
class WXDLLIMPEXP_CORE wxMacDataBrowserListControl : public wxMacDataItemBrowserControl
|
||||
class WXDLLIMPEXP_CORE wxMacDataBrowserColumn : public wxListWidgetColumn
|
||||
{
|
||||
public :
|
||||
wxMacDataBrowserColumn( DataBrowserPropertyID propertyId, DataBrowserPropertyType colType, bool editable )
|
||||
: m_property(propertyId), m_editable(editable), m_type( colType )
|
||||
{
|
||||
}
|
||||
~wxMacDataBrowserColumn()
|
||||
{
|
||||
}
|
||||
DataBrowserPropertyID GetProperty() const { return m_property ; }
|
||||
|
||||
bool IsEditable() const { return m_editable; }
|
||||
|
||||
DataBrowserPropertyType GetType() const { return m_type; }
|
||||
|
||||
protected :
|
||||
DataBrowserPropertyID m_property;
|
||||
bool m_editable;
|
||||
DataBrowserPropertyType m_type;
|
||||
} ;
|
||||
|
||||
WX_DEFINE_ARRAY_PTR(wxMacDataBrowserColumn *, wxArrayMacDataBrowserColumns);
|
||||
|
||||
|
||||
class WXDLLIMPEXP_CORE wxMacDataBrowserCellValue : public wxListWidgetCellValue
|
||||
{
|
||||
public :
|
||||
wxMacDataBrowserCellValue(DataBrowserItemDataRef data) : m_data(data) {}
|
||||
virtual ~wxMacDataBrowserCellValue() {}
|
||||
|
||||
virtual void Set( CFStringRef value );
|
||||
virtual void Set( const wxString& value );
|
||||
virtual void Set( int value ) ;
|
||||
|
||||
virtual int GetIntValue() const ;
|
||||
virtual wxString GetStringValue() const ;
|
||||
protected :
|
||||
DataBrowserItemDataRef m_data;
|
||||
} ;
|
||||
|
||||
|
||||
class WXDLLIMPEXP_CORE wxMacDataBrowserListControl : public wxMacDataItemBrowserControl, public wxListWidgetImpl
|
||||
{
|
||||
public:
|
||||
wxMacDataBrowserListControl( wxWindow *peer, const wxPoint& pos, const wxSize& size, long style );
|
||||
wxMacDataBrowserListControl() {}
|
||||
virtual ~wxMacDataBrowserListControl();
|
||||
|
||||
virtual wxMacDataItem* CreateItem();
|
||||
// wxListWidgetImpl Methods
|
||||
|
||||
virtual void ItemNotification(
|
||||
const wxMacDataItem* itemID,
|
||||
DataBrowserItemNotification message,
|
||||
DataBrowserItemDataRef itemData);
|
||||
wxListWidgetColumn* InsertTextColumn( unsigned int pos, const wxString& title, bool editable = false,
|
||||
wxAlignment just = wxALIGN_LEFT , int defaultWidth = -1) ;
|
||||
wxListWidgetColumn* InsertCheckColumn( unsigned int pos , const wxString& title, bool editable = false,
|
||||
wxAlignment just = wxALIGN_LEFT , int defaultWidth = -1) ;
|
||||
|
||||
wxMacDataBrowserColumn* DoInsertColumn( unsigned int pos, DataBrowserPropertyID property,
|
||||
const wxString& title, bool editable,
|
||||
DataBrowserPropertyType colType, SInt16 just, int width );
|
||||
// add and remove
|
||||
|
||||
virtual void ListDelete( unsigned int n );
|
||||
virtual void ListInsert( unsigned int n );
|
||||
virtual void ListClear();
|
||||
|
||||
// selecting
|
||||
|
||||
virtual void ListDeselectAll();
|
||||
virtual void ListSetSelection( unsigned int n, bool select, bool multi = false );
|
||||
virtual int ListGetSelection() const;
|
||||
virtual int ListGetSelections( wxArrayInt& aSelections ) const;
|
||||
virtual bool ListIsSelected( unsigned int n ) const;
|
||||
|
||||
// display
|
||||
|
||||
virtual void ListScrollTo( unsigned int n );
|
||||
|
||||
// accessing content
|
||||
|
||||
virtual unsigned int ListGetCount() const;
|
||||
|
||||
virtual void UpdateLine( unsigned int n, wxListWidgetColumn* col = NULL );
|
||||
virtual void UpdateLineToEnd( unsigned int n) ;
|
||||
|
||||
virtual void ItemNotification(
|
||||
const wxMacDataItem* itemID,
|
||||
DataBrowserItemNotification message,
|
||||
DataBrowserItemDataRef itemData);
|
||||
|
||||
// pointing back
|
||||
|
||||
// wxWindow * GetPeer() const;
|
||||
wxMacDataBrowserColumn* GetColumnFromProperty( DataBrowserPropertyID );
|
||||
private:
|
||||
wxArrayMacDataBrowserColumns m_columns;
|
||||
int m_nextColumnId ;
|
||||
|
||||
DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacDataBrowserListControl)
|
||||
};
|
||||
|
@ -15,10 +15,19 @@
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
// common interface for all implementations
|
||||
class wxMacTextControl : public wxMacControl
|
||||
class wxMacTextControl :
|
||||
#if wxOSX_USE_CARBON
|
||||
public wxMacControl
|
||||
#else
|
||||
public wxWidgetCocoaImpl
|
||||
#endif
|
||||
{
|
||||
public :
|
||||
#if wxOSX_USE_CARBON
|
||||
wxMacTextControl( wxTextCtrl *peer ) ;
|
||||
#else
|
||||
wxMacTextControl::wxMacTextControl(wxTextCtrl* peer, WXWidget w) ;
|
||||
#endif
|
||||
virtual ~wxMacTextControl() ;
|
||||
|
||||
virtual bool CanFocus() const { return true; }
|
||||
@ -61,6 +70,7 @@ public :
|
||||
virtual void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle );
|
||||
};
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
class wxMacUnicodeTextControl : public wxMacTextControl
|
||||
{
|
||||
public :
|
||||
@ -95,5 +105,6 @@ protected :
|
||||
public :
|
||||
ControlEditTextSelectionRec m_selection ;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // _WX_MAC_PRIVATE_MACTEXT_H_
|
||||
|
@ -41,12 +41,14 @@ public:
|
||||
|
||||
// implementation
|
||||
|
||||
virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ;
|
||||
void Command(wxCommandEvent& event);
|
||||
wxRadioButton *AddInCycle(wxRadioButton *cycle);
|
||||
void RemoveFromCycle();
|
||||
inline wxRadioButton *NextInCycle() {return m_cycle;}
|
||||
|
||||
// osx specific event handling common for all osx-ports
|
||||
|
||||
virtual bool HandleClicked( double timestampsec );
|
||||
protected:
|
||||
|
||||
wxRadioButton *m_cycle;
|
||||
|
@ -48,12 +48,12 @@ public:
|
||||
|
||||
// implementation only from now on
|
||||
void Command(wxCommandEvent& event);
|
||||
#if wxOSX_USE_CARBON
|
||||
virtual void MacHandleControlClick( WXWidget control ,
|
||||
wxInt16 controlpart ,
|
||||
bool mouseStillDown ) ;
|
||||
virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler ,
|
||||
WXEVENTREF mevent ) ;
|
||||
|
||||
#endif
|
||||
virtual bool HandleClicked( double timestampsec );
|
||||
protected:
|
||||
virtual wxSize DoGetBestSize() const;
|
||||
|
||||
|
@ -75,7 +75,9 @@ public:
|
||||
void SetTick(int tickPos) ;
|
||||
|
||||
void Command(wxCommandEvent& event);
|
||||
virtual wxInt32 MacControlHit(WXEVENTHANDLERREF handler, WXEVENTREF event);
|
||||
// osx specific event handling common for all osx-ports
|
||||
|
||||
virtual bool HandleClicked( double timestampsec );
|
||||
void MacHandleControlClick(WXWidget control, wxInt16 controlpart, bool mouseStillDown);
|
||||
|
||||
protected:
|
||||
|
@ -52,21 +52,23 @@ public:
|
||||
|
||||
|
||||
// accessors
|
||||
virtual int GetMin() const;
|
||||
virtual int GetMax() const;
|
||||
virtual int GetValue() const;
|
||||
virtual void SetValue(int val);
|
||||
virtual void SetRange(int minVal, int maxVal);
|
||||
virtual int GetValue() const ;
|
||||
virtual void SetValue(int val);
|
||||
|
||||
// implementation
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
virtual void MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool mouseStillDown ) ;
|
||||
virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ;
|
||||
#endif
|
||||
// osx specific event handling common for all osx-ports
|
||||
|
||||
virtual bool HandleClicked( double timestampsec );
|
||||
|
||||
protected:
|
||||
void MacHandleValueChanged( int inc ) ;
|
||||
virtual wxSize DoGetBestSize() const;
|
||||
int m_value ;
|
||||
void SendThumbTrackEvent() ;
|
||||
|
||||
virtual wxSize DoGetBestSize() const;
|
||||
|
||||
private:
|
||||
DECLARE_DYNAMIC_CLASS(wxSpinButton)
|
||||
|
@ -44,7 +44,7 @@ public:
|
||||
virtual void SetValue(bool value);
|
||||
virtual bool GetValue() const ;
|
||||
|
||||
virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ;
|
||||
virtual bool HandleClicked( double timestampsec );
|
||||
|
||||
virtual void Command(wxCommandEvent& event);
|
||||
|
||||
@ -88,7 +88,7 @@ public:
|
||||
virtual void SetValue(bool value);
|
||||
virtual bool GetValue() const ;
|
||||
|
||||
virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ;
|
||||
virtual bool HandleClicked( double timestampsec );
|
||||
|
||||
virtual void Command(wxCommandEvent& event);
|
||||
|
||||
|
@ -99,7 +99,7 @@ protected:
|
||||
DECLARE_EVENT_TABLE()
|
||||
#if wxOSX_USE_NATIVE_TOOLBAR
|
||||
bool m_macUsesNativeToolbar ;
|
||||
void* m_macHIToolbarRef ;
|
||||
void* m_macToolbar ;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -14,8 +14,6 @@
|
||||
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
long UMAGetSystemVersion() ;
|
||||
|
||||
#if wxUSE_GUI
|
||||
|
||||
// menu manager
|
||||
@ -24,8 +22,6 @@ MenuRef UMANewMenu( SInt16 id , const wxString& title , wxFontEncoding e
|
||||
void UMASetMenuTitle( MenuRef menu , const wxString& title , wxFontEncoding encoding) ;
|
||||
void UMAEnableMenuItem( MenuRef inMenu , MenuItemIndex item , bool enable ) ;
|
||||
|
||||
void UMAAppendSubMenuItem( MenuRef menu , const wxString& title , wxFontEncoding encoding , SInt16 submenuid ) ;
|
||||
void UMAInsertSubMenuItem( MenuRef menu , const wxString& title , wxFontEncoding encoding , MenuItemIndex item , SInt16 submenuid ) ;
|
||||
void UMAAppendMenuItem( MenuRef menu , const wxString& title , wxFontEncoding encoding , wxAcceleratorEntry *entry = NULL ) ;
|
||||
void UMAInsertMenuItem( MenuRef menu , const wxString& title , wxFontEncoding encoding , MenuItemIndex item , wxAcceleratorEntry *entry = NULL ) ;
|
||||
void UMASetMenuItemShortcut( MenuRef menu , MenuItemIndex item , wxAcceleratorEntry *entry ) ;
|
||||
|
@ -84,7 +84,9 @@ public:
|
||||
const;
|
||||
protected:
|
||||
virtual void DoEnable( bool enable );
|
||||
#if wxUSE_MENUS
|
||||
virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
|
||||
#endif
|
||||
|
||||
virtual void DoFreeze();
|
||||
virtual void DoThaw();
|
||||
@ -247,6 +249,9 @@ public:
|
||||
void * MacGetCGContextRef() { return m_cgContextRef ; }
|
||||
void MacSetCGContextRef(void * cg) { m_cgContextRef = cg ; }
|
||||
|
||||
// osx specific event handling common for all osx-ports
|
||||
|
||||
virtual bool HandleClicked( double timestampsec );
|
||||
protected:
|
||||
// For controls like radio buttons which are genuinely composite
|
||||
wxList m_subControls;
|
||||
|
@ -84,44 +84,8 @@
|
||||
#define wxUSE_TASKBARICON 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
#if wxUSE_POPUPWIN
|
||||
#undef wxUSE_POPUPWIN
|
||||
#define wxUSE_POPUPWIN 0
|
||||
#endif
|
||||
|
||||
#if wxUSE_COMBOBOX
|
||||
#undef wxUSE_COMBOBOX
|
||||
#define wxUSE_COMBOBOX 0
|
||||
#endif
|
||||
|
||||
|
||||
#if wxUSE_MENUS
|
||||
#undef wxUSE_MENUS
|
||||
#define wxUSE_MENUS 0
|
||||
#endif
|
||||
|
||||
#if wxUSE_CALENDARCTRL
|
||||
#undef wxUSE_CALENDARCTRL
|
||||
#define wxUSE_CALENDARCTRL 0
|
||||
#endif
|
||||
|
||||
#if wxUSE_WXHTML_HELP
|
||||
#undef wxUSE_WXHTML_HELP
|
||||
#define wxUSE_WXHTML_HELP 0
|
||||
#endif
|
||||
|
||||
#if wxUSE_DOC_VIEW_ARCHITECTURE
|
||||
#undef wxUSE_DOC_VIEW_ARCHITECTURE
|
||||
#define wxUSE_DOC_VIEW_ARCHITECTURE 0
|
||||
#endif
|
||||
|
||||
#if wxUSE_PRINTING_ARCHITECTURE
|
||||
#undef wxUSE_PRINTING_ARCHITECTURE
|
||||
#define wxUSE_PRINTING_ARCHITECTURE 0
|
||||
#endif
|
||||
|
||||
*/
|
||||
#define wxUSE_WXHTML_HELP 0
|
||||
|
||||
#endif
|
||||
/* _WX_MAC_CHKCONF_H_ */
|
||||
|
@ -24,9 +24,72 @@
|
||||
extern wxRect wxFromNSRect( NSView* parent, const NSRect& rect );
|
||||
extern NSPoint wxToNSPoint( NSView* parent, const wxPoint& p );
|
||||
extern wxPoint wxFromNSPoint( NSView* parent, const NSPoint& p );
|
||||
|
||||
// used for many wxControls
|
||||
|
||||
@interface wxNSButton : NSButton
|
||||
{
|
||||
wxWidgetImpl* impl;
|
||||
}
|
||||
|
||||
- (void)setImplementation: (wxWidgetImpl *) theImplementation;
|
||||
- (wxWidgetImpl*) implementation;
|
||||
- (BOOL) isFlipped;
|
||||
- (void) clickedAction: (id) sender;
|
||||
|
||||
@end
|
||||
|
||||
@interface wxNSBox : NSBox
|
||||
{
|
||||
wxWidgetImpl* impl;
|
||||
}
|
||||
|
||||
- (void)setImplementation: (wxWidgetImpl *) theImplementation;
|
||||
- (wxWidgetImpl*) implementation;
|
||||
- (BOOL) isFlipped;
|
||||
|
||||
@end
|
||||
|
||||
@interface wxNSTextField : NSTextField
|
||||
{
|
||||
wxWidgetImpl* impl;
|
||||
}
|
||||
|
||||
- (void)setImplementation: (wxWidgetImpl *) theImplementation;
|
||||
- (wxWidgetImpl*) implementation;
|
||||
- (BOOL) isFlipped;
|
||||
|
||||
@end
|
||||
|
||||
NSRect WXDLLIMPEXP_CORE wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const wxSize &size ,
|
||||
bool adjustForOrigin = true );
|
||||
|
||||
#endif // __OBJC__
|
||||
|
||||
//
|
||||
// shared between Cocoa and Carbon
|
||||
//
|
||||
|
||||
// bring in themeing types without pulling in the headers
|
||||
|
||||
typedef SInt16 ThemeBrush;
|
||||
long UMAGetSystemVersion() ;
|
||||
CGColorRef wxMacCreateCGColorFromHITheme( ThemeBrush brush ) ;
|
||||
OSStatus WXDLLIMPEXP_CORE wxMacDrawCGImage(
|
||||
CGContextRef inContext,
|
||||
const CGRect * inBounds,
|
||||
CGImageRef inImage) ;
|
||||
WX_NSImage wxOSXCreateNSImageFromCGImage( CGImageRef image );
|
||||
|
||||
WXDLLIMPEXP_BASE void wxMacStringToPascal( const wxString&from , StringPtr to );
|
||||
WXDLLIMPEXP_BASE wxString wxMacFSRefToPath( const FSRef *fsRef , CFStringRef additionalPathComponent = NULL );
|
||||
WXDLLIMPEXP_BASE OSStatus wxMacPathToFSRef( const wxString&path , FSRef *fsRef );
|
||||
WXDLLIMPEXP_BASE wxString wxMacHFSUniStrToString( ConstHFSUniStr255Param uniname );
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
#if wxUSE_GUI
|
||||
|
||||
class WXDLLIMPEXP_CORE wxWidgetCocoaImpl : public wxWidgetImpl
|
||||
@ -39,7 +102,8 @@ public :
|
||||
void Init();
|
||||
|
||||
virtual bool IsVisible() const ;
|
||||
|
||||
virtual void SetVisibility(bool);
|
||||
|
||||
virtual void Raise();
|
||||
|
||||
virtual void Lower();
|
||||
@ -48,10 +112,13 @@ public :
|
||||
|
||||
virtual WXWidget GetWXWidget() const { return m_osxView; }
|
||||
|
||||
virtual void SetBackgroundColour(const wxColour&);
|
||||
|
||||
virtual void GetContentArea( int &left , int &top , int &width , int &height ) const;
|
||||
virtual void Move(int x, int y, int width, int height);
|
||||
virtual void GetPosition( int &x, int &y ) const;
|
||||
virtual void GetSize( int &width, int &height ) const;
|
||||
virtual void SetControlSize( wxWindowVariant variant );
|
||||
|
||||
virtual void SetNeedsDisplay( const wxRect* where = NULL );
|
||||
virtual bool GetNeedsDisplay() const;
|
||||
@ -63,6 +130,24 @@ public :
|
||||
|
||||
void RemoveFromParent();
|
||||
void Embed( wxWidgetImpl *parent );
|
||||
|
||||
void SetDefaultButton( bool isDefault );
|
||||
void PerformClick();
|
||||
void SetLabel(const wxString& title, wxFontEncoding encoding);
|
||||
|
||||
wxInt32 GetValue() const;
|
||||
void SetValue( wxInt32 v );
|
||||
void SetBitmap( const wxBitmap& bitmap );
|
||||
void SetupTabs( const wxNotebook ¬ebook );
|
||||
void GetBestRect( wxRect *r ) const;
|
||||
bool IsEnabled() const;
|
||||
void Enable( bool enable );
|
||||
bool ButtonClickDidStateChange() { return true ;}
|
||||
void SetMinimum( wxInt32 v );
|
||||
void SetMaximum( wxInt32 v );
|
||||
void PulseGauge();
|
||||
void SetScrollThumb( wxInt32 value, wxInt32 thumbSize );
|
||||
|
||||
protected:
|
||||
WXWidget m_osxView;
|
||||
DECLARE_DYNAMIC_CLASS_NO_COPY(wxWidgetCocoaImpl)
|
||||
@ -142,6 +227,27 @@ typedef struct tagClassicCursor
|
||||
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 kwxCursorLast = kwxCursorRoller;
|
||||
|
||||
// exposing our fallback cursor map
|
||||
|
||||
extern ClassicCursor gMacCursors[];
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
174
include/wx/osx/core/mimetype.h
Normal file
174
include/wx/osx/core/mimetype.h
Normal file
@ -0,0 +1,174 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: wx/osx/core/mimetype.h
|
||||
// Purpose: classes and functions to manage MIME types
|
||||
// Author: Vadim Zeitlin
|
||||
// Modified by:
|
||||
// Created: 23.09.98
|
||||
// RCS-ID: $Id: mimetype.h 54448 2008-07-01 09:28:08Z RR $
|
||||
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
|
||||
// Licence: wxWindows licence (part of wxExtra library)
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef _MIMETYPE_IMPL_H
|
||||
#define _MIMETYPE_IMPL_H
|
||||
|
||||
#include "wx/mimetype.h"
|
||||
|
||||
#if wxUSE_MIMETYPE
|
||||
|
||||
class wxMimeTypeCommands;
|
||||
|
||||
WX_DEFINE_ARRAY_PTR(wxMimeTypeCommands *, wxMimeCommandsArray);
|
||||
|
||||
// this is the real wxMimeTypesManager for Unix
|
||||
class WXDLLIMPEXP_BASE wxMimeTypesManagerImpl
|
||||
{
|
||||
public:
|
||||
// ctor and dtor
|
||||
wxMimeTypesManagerImpl();
|
||||
virtual ~wxMimeTypesManagerImpl();
|
||||
|
||||
// load all data into memory - done when it is needed for the first time
|
||||
void Initialize(int mailcapStyles = wxMAILCAP_ALL,
|
||||
const wxString& extraDir = wxEmptyString);
|
||||
|
||||
// and delete the data here
|
||||
void ClearData();
|
||||
|
||||
// implement containing class functions
|
||||
wxFileType *GetFileTypeFromExtension(const wxString& ext);
|
||||
wxFileType *GetFileTypeFromMimeType(const wxString& mimeType);
|
||||
|
||||
size_t EnumAllFileTypes(wxArrayString& mimetypes);
|
||||
|
||||
void AddFallback(const wxFileTypeInfo& filetype);
|
||||
|
||||
// add information about the given mimetype
|
||||
void AddMimeTypeInfo(const wxString& mimetype,
|
||||
const wxString& extensions,
|
||||
const wxString& description);
|
||||
void AddMailcapInfo(const wxString& strType,
|
||||
const wxString& strOpenCmd,
|
||||
const wxString& strPrintCmd,
|
||||
const wxString& strTest,
|
||||
const wxString& strDesc);
|
||||
|
||||
// add a new record to the user .mailcap/.mime.types files
|
||||
wxFileType *Associate(const wxFileTypeInfo& ftInfo);
|
||||
// remove association
|
||||
bool Unassociate(wxFileType *ft);
|
||||
|
||||
// accessors
|
||||
// get the string containing space separated extensions for the given
|
||||
// file type
|
||||
wxString GetExtension(size_t index) { return m_aExtensions[index]; }
|
||||
|
||||
protected:
|
||||
void InitIfNeeded();
|
||||
|
||||
wxArrayString m_aTypes, // MIME types
|
||||
m_aDescriptions, // descriptions (just some text)
|
||||
m_aExtensions, // space separated list of extensions
|
||||
m_aIcons; // Icon filenames
|
||||
|
||||
// verb=command pairs for this file type
|
||||
wxMimeCommandsArray m_aEntries;
|
||||
|
||||
// are we initialized?
|
||||
bool m_initialized;
|
||||
|
||||
wxString GetCommand(const wxString &verb, size_t nIndex) const;
|
||||
|
||||
// Read XDG *.desktop file
|
||||
void LoadXDGApp(const wxString& filename);
|
||||
// Scan XDG directory
|
||||
void LoadXDGAppsFilesFromDir(const wxString& dirname);
|
||||
|
||||
// Load XDG globs files
|
||||
void LoadXDGGlobs(const wxString& filename);
|
||||
|
||||
// functions used to do associations
|
||||
virtual int AddToMimeData(const wxString& strType,
|
||||
const wxString& strIcon,
|
||||
wxMimeTypeCommands *entry,
|
||||
const wxArrayString& strExtensions,
|
||||
const wxString& strDesc,
|
||||
bool replaceExisting = TRUE);
|
||||
virtual bool DoAssociation(const wxString& strType,
|
||||
const wxString& strIcon,
|
||||
wxMimeTypeCommands *entry,
|
||||
const wxArrayString& strExtensions,
|
||||
const wxString& strDesc);
|
||||
|
||||
// give it access to m_aXXX variables
|
||||
friend class WXDLLIMPEXP_FWD_BASE wxFileTypeImpl;
|
||||
};
|
||||
|
||||
class WXDLLIMPEXP_BASE wxFileTypeImpl
|
||||
{
|
||||
public:
|
||||
// initialization functions
|
||||
// this is used to construct a list of mimetypes which match;
|
||||
// if built with GetFileTypeFromMimetype index 0 has the exact match and
|
||||
// index 1 the type / * match
|
||||
// if built with GetFileTypeFromExtension, index 0 has the mimetype for
|
||||
// the first extension found, index 1 for the second and so on
|
||||
|
||||
void Init(wxMimeTypesManagerImpl *manager, size_t index)
|
||||
{ m_manager = manager; m_index.Add(index); }
|
||||
|
||||
// accessors
|
||||
bool GetExtensions(wxArrayString& extensions);
|
||||
bool GetMimeType(wxString *mimeType) const
|
||||
{ *mimeType = m_manager->m_aTypes[m_index[0]]; return TRUE; }
|
||||
bool GetMimeTypes(wxArrayString& mimeTypes) const;
|
||||
bool GetIcon(wxIconLocation *iconLoc) const;
|
||||
|
||||
bool GetDescription(wxString *desc) const
|
||||
{ *desc = m_manager->m_aDescriptions[m_index[0]]; return TRUE; }
|
||||
|
||||
bool GetOpenCommand(wxString *openCmd,
|
||||
const wxFileType::MessageParameters& params) const
|
||||
{
|
||||
*openCmd = GetExpandedCommand(wxT("open"), params);
|
||||
return (! openCmd -> IsEmpty() );
|
||||
}
|
||||
|
||||
bool GetPrintCommand(wxString *printCmd,
|
||||
const wxFileType::MessageParameters& params) const
|
||||
{
|
||||
*printCmd = GetExpandedCommand(wxT("print"), params);
|
||||
return (! printCmd -> IsEmpty() );
|
||||
}
|
||||
|
||||
// return the number of commands defined for this file type, 0 if none
|
||||
size_t GetAllCommands(wxArrayString *verbs, wxArrayString *commands,
|
||||
const wxFileType::MessageParameters& params) const;
|
||||
|
||||
|
||||
// remove the record for this file type
|
||||
// probably a mistake to come here, use wxMimeTypesManager.Unassociate (ft) instead
|
||||
bool Unassociate(wxFileType *ft)
|
||||
{
|
||||
return m_manager->Unassociate(ft);
|
||||
}
|
||||
|
||||
// set an arbitrary command, ask confirmation if it already exists and
|
||||
// overwriteprompt is TRUE
|
||||
bool SetCommand(const wxString& cmd, const wxString& verb, bool overwriteprompt = TRUE);
|
||||
bool SetDefaultIcon(const wxString& strIcon = wxEmptyString, int index = 0);
|
||||
|
||||
private:
|
||||
wxString
|
||||
GetExpandedCommand(const wxString & verb,
|
||||
const wxFileType::MessageParameters& params) const;
|
||||
|
||||
wxMimeTypesManagerImpl *m_manager;
|
||||
wxArrayInt m_index; // in the wxMimeTypesManagerImpl arrays
|
||||
};
|
||||
|
||||
#endif // wxUSE_MIMETYPE
|
||||
|
||||
#endif // _MIMETYPE_IMPL_H
|
||||
|
||||
|
@ -21,6 +21,10 @@
|
||||
#include "wx/osx/core/cfstring.h"
|
||||
#include "wx/osx/core/cfdataref.h"
|
||||
|
||||
#if wxOSX_USE_COCOA_OR_CARBON
|
||||
WXDLLIMPEXP_BASE long UMAGetSystemVersion() ;
|
||||
#endif
|
||||
|
||||
#if wxUSE_GUI
|
||||
|
||||
#if wxOSX_USE_IPHONE
|
||||
@ -79,6 +83,79 @@ class wxWindowMac;
|
||||
extern wxWindow* g_MacLastWindow;
|
||||
class wxNonOwnedWindow;
|
||||
|
||||
// temporary typedef so that no additional casts are necessary within carbon code at the moment
|
||||
|
||||
class wxMacControl;
|
||||
class wxWidgetImpl;
|
||||
class wxNotebook;
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
typedef wxMacControl wxWidgetImplType;
|
||||
#else
|
||||
typedef wxWidgetImpl wxWidgetImplType;
|
||||
#endif
|
||||
|
||||
class wxMenuItemImpl : public wxObject
|
||||
{
|
||||
public :
|
||||
wxMenuItemImpl( wxMenuItem* peer ) : m_peer(peer)
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~wxMenuItemImpl() ;
|
||||
virtual void SetBitmap( const wxBitmap& bitmap ) = 0;
|
||||
virtual void Enable( bool enable ) = 0;
|
||||
virtual void Check( bool check ) = 0;
|
||||
virtual void SetLabel( const wxString& text, wxAcceleratorEntry *entry ) = 0;
|
||||
virtual void Hide( bool hide = true ) = 0;
|
||||
|
||||
virtual void * GetHMenuItem() = 0;
|
||||
|
||||
wxMenuItem* GetWXPeer() { return m_peer ; }
|
||||
|
||||
static wxMenuItemImpl* Create( wxMenuItem* peer, wxMenu *pParentMenu,
|
||||
int id,
|
||||
const wxString& text,
|
||||
wxAcceleratorEntry *entry,
|
||||
const wxString& strHelp,
|
||||
wxItemKind kind,
|
||||
wxMenu *pSubMenu );
|
||||
|
||||
protected :
|
||||
wxMenuItem* m_peer;
|
||||
|
||||
DECLARE_ABSTRACT_CLASS(wxMenuItemImpl);
|
||||
} ;
|
||||
|
||||
class wxMenuImpl : public wxObject
|
||||
{
|
||||
public :
|
||||
wxMenuImpl( wxMenu* peer ) : m_peer(peer)
|
||||
{
|
||||
}
|
||||
|
||||
virtual ~wxMenuImpl() ;
|
||||
virtual void InsertOrAppend(wxMenuItem *pItem, size_t pos) = 0;
|
||||
virtual void Remove( wxMenuItem *pItem ) = 0;
|
||||
|
||||
virtual void MakeRoot() = 0;
|
||||
|
||||
virtual void SetTitle( const wxString& text ) = 0;
|
||||
|
||||
virtual WXHMENU GetHMenu() = 0;
|
||||
|
||||
wxMenu* GetWXPeer() { return m_peer ; }
|
||||
|
||||
static wxMenuImpl* Create( wxMenu* peer, const wxString& title );
|
||||
static wxMenuImpl* CreateRootMenu( wxMenu* peer );
|
||||
protected :
|
||||
wxMenu* m_peer;
|
||||
|
||||
DECLARE_ABSTRACT_CLASS(wxMenuItemImpl);
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
class WXDLLIMPEXP_CORE wxWidgetImpl : public wxObject
|
||||
{
|
||||
public :
|
||||
@ -88,8 +165,6 @@ public :
|
||||
|
||||
void Init();
|
||||
|
||||
virtual void Destroy();
|
||||
|
||||
bool IsRootControl() const { return m_isRootControl; }
|
||||
|
||||
wxWindowMac* GetWXPeer() const { return m_wxPeer; }
|
||||
@ -117,6 +192,7 @@ public :
|
||||
virtual void Move(int x, int y, int width, int height) = 0;
|
||||
virtual void GetPosition( int &x, int &y ) const = 0;
|
||||
virtual void GetSize( int &width, int &height ) const = 0;
|
||||
virtual void SetControlSize( wxWindowVariant variant ) = 0;
|
||||
|
||||
virtual void SetNeedsDisplay( const wxRect* where = NULL ) = 0;
|
||||
virtual bool GetNeedsDisplay() const = 0;
|
||||
@ -131,12 +207,201 @@ public :
|
||||
|
||||
virtual void RemoveFromParent() = 0;
|
||||
virtual void Embed( wxWidgetImpl *parent ) = 0;
|
||||
|
||||
virtual void SetDefaultButton( bool isDefault ) = 0;
|
||||
virtual void PerformClick() = 0;
|
||||
virtual void SetLabel( const wxString& title, wxFontEncoding encoding ) = 0;
|
||||
|
||||
virtual wxInt32 GetValue() const = 0;
|
||||
virtual void SetValue( wxInt32 v ) = 0;
|
||||
virtual void SetBitmap( const wxBitmap& bitmap ) = 0;
|
||||
virtual void SetupTabs( const wxNotebook ¬ebook ) =0;
|
||||
virtual void GetBestRect( wxRect *r ) const = 0;
|
||||
virtual bool IsEnabled() const = 0;
|
||||
virtual void Enable( bool enable ) = 0;
|
||||
virtual void SetMinimum( wxInt32 v ) = 0;
|
||||
virtual void SetMaximum( wxInt32 v ) = 0;
|
||||
virtual void PulseGauge() = 0;
|
||||
virtual void SetScrollThumb( wxInt32 value, wxInt32 thumbSize ) = 0;
|
||||
|
||||
// is the clicked event sent AFTER the state already changed, so no additional
|
||||
// state changing logic is required from the outside
|
||||
virtual bool ButtonClickDidStateChange() = 0;
|
||||
|
||||
// static creation methods, must be implemented by all toolkits
|
||||
|
||||
static wxWidgetImpl* CreateUserPane( wxWindowMac* wxpeer, const wxPoint& pos, const wxSize& size,
|
||||
long style, long extraStyle, const wxString& name) ;
|
||||
static wxWidgetImpl* CreateContentView( wxNonOwnedWindow* now ) ;
|
||||
static wxWidgetImplType* CreateUserPane( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle) ;
|
||||
static wxWidgetImplType* CreateContentView( wxNonOwnedWindow* now ) ;
|
||||
|
||||
static wxWidgetImplType* CreateButton( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle) ;
|
||||
|
||||
static wxWidgetImplType* CreateDisclosureTriangle( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle) ;
|
||||
|
||||
static wxWidgetImplType* CreateStaticLine( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle) ;
|
||||
|
||||
static wxWidgetImplType* CreateGroupBox( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle) ;
|
||||
|
||||
static wxWidgetImplType* CreateStaticText( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle) ;
|
||||
|
||||
static wxWidgetImplType* CreateTextControl( wxTextCtrl* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxString& content,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle) ;
|
||||
|
||||
static wxWidgetImplType* CreateCheckBox( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle);
|
||||
|
||||
static wxWidgetImplType* CreateRadioButton( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle);
|
||||
|
||||
static wxWidgetImplType* CreateToggleButton( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle);
|
||||
|
||||
static wxWidgetImplType* CreateBitmapToggleButton( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle);
|
||||
|
||||
static wxWidgetImplType* CreateBitmapButton( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle);
|
||||
|
||||
static wxWidgetImplType* CreateTabView( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle);
|
||||
|
||||
static wxWidgetImplType* CreateGauge( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
wxInt32 value,
|
||||
wxInt32 minimum,
|
||||
wxInt32 maximum,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle);
|
||||
|
||||
static wxWidgetImplType* CreateSlider( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
wxInt32 value,
|
||||
wxInt32 minimum,
|
||||
wxInt32 maximum,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle);
|
||||
|
||||
static wxWidgetImplType* CreateSpinButton( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
wxInt32 value,
|
||||
wxInt32 minimum,
|
||||
wxInt32 maximum,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle);
|
||||
|
||||
static wxWidgetImplType* CreateScrollBar( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle);
|
||||
|
||||
static wxWidgetImplType* CreateChoice( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
wxMenu* menu,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle);
|
||||
|
||||
static wxWidgetImplType* CreateListBox( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle);
|
||||
|
||||
// converts from Toplevel-Content relative to local
|
||||
static void Convert( wxPoint *pt , wxWidgetImpl *from , wxWidgetImpl *to );
|
||||
@ -148,6 +413,73 @@ protected :
|
||||
DECLARE_ABSTRACT_CLASS(wxWidgetImpl)
|
||||
};
|
||||
|
||||
//
|
||||
// the interface to be implemented eg by a listbox
|
||||
//
|
||||
|
||||
class WXDLLIMPEXP_CORE wxMacDataItem ;
|
||||
|
||||
class WXDLLIMPEXP_CORE wxListWidgetColumn
|
||||
{
|
||||
public :
|
||||
virtual ~wxListWidgetColumn() {}
|
||||
} ;
|
||||
|
||||
class WXDLLIMPEXP_CORE wxListWidgetCellValue
|
||||
{
|
||||
public :
|
||||
wxListWidgetCellValue() {}
|
||||
virtual ~wxListWidgetCellValue() {}
|
||||
|
||||
virtual void Set( CFStringRef value ) = 0;
|
||||
virtual void Set( const wxString& value ) = 0;
|
||||
virtual void Set( int value ) = 0;
|
||||
|
||||
virtual int GetIntValue() const = 0;
|
||||
virtual wxString GetStringValue() const = 0;
|
||||
} ;
|
||||
|
||||
class WXDLLIMPEXP_CORE wxListWidgetImpl
|
||||
{
|
||||
public:
|
||||
wxListWidgetImpl() {}
|
||||
virtual ~wxListWidgetImpl() { }
|
||||
|
||||
virtual wxListWidgetColumn* InsertTextColumn( unsigned pos, const wxString& title, bool editable = false,
|
||||
wxAlignment just = wxALIGN_LEFT , int defaultWidth = -1) = 0 ;
|
||||
virtual wxListWidgetColumn* InsertCheckColumn( unsigned pos , const wxString& title, bool editable = false,
|
||||
wxAlignment just = wxALIGN_LEFT , int defaultWidth = -1) = 0 ;
|
||||
|
||||
// add and remove
|
||||
|
||||
// TODO will be replaced
|
||||
virtual void ListDelete( unsigned int n ) = 0;
|
||||
virtual void ListInsert( unsigned int n ) = 0;
|
||||
virtual void ListClear() = 0;
|
||||
|
||||
// selecting
|
||||
|
||||
virtual void ListDeselectAll() = 0;
|
||||
virtual void ListSetSelection( unsigned int n, bool select, bool multi ) = 0;
|
||||
virtual int ListGetSelection() const = 0;
|
||||
virtual int ListGetSelections( wxArrayInt& aSelections ) const = 0;
|
||||
virtual bool ListIsSelected( unsigned int n ) const = 0;
|
||||
|
||||
// display
|
||||
|
||||
virtual void ListScrollTo( unsigned int n ) = 0;
|
||||
virtual void UpdateLine( unsigned int n, wxListWidgetColumn* col = NULL ) = 0;
|
||||
virtual void UpdateLineToEnd( unsigned int n) = 0;
|
||||
|
||||
// accessing content
|
||||
|
||||
virtual unsigned int ListGetCount() const = 0;
|
||||
};
|
||||
|
||||
//
|
||||
// toplevel window implementation class
|
||||
//
|
||||
|
||||
class wxNonOwnedWindowImpl : public wxObject
|
||||
{
|
||||
public :
|
||||
@ -248,6 +580,12 @@ public :
|
||||
virtual void WindowToScreen( int *x, int *y ) = 0;
|
||||
|
||||
wxNonOwnedWindow* GetWXPeer() { return m_wxPeer; }
|
||||
|
||||
// static creation methods, must be implemented by all toolkits
|
||||
|
||||
static wxNonOwnedWindowImpl* CreateNonOwnedWindow( wxNonOwnedWindow* wxpeer, wxWindow* parent, const wxPoint& pos, const wxSize& size,
|
||||
long style, long extraStyle, const wxString& name ) ;
|
||||
|
||||
protected :
|
||||
wxNonOwnedWindow* m_wxPeer;
|
||||
DECLARE_ABSTRACT_CLASS(wxNonOwnedWindowImpl)
|
||||
|
@ -67,6 +67,84 @@
|
||||
#define wxUSE_TASKBARICON 0
|
||||
#endif
|
||||
|
||||
#define wxUSE_BUTTON 1
|
||||
#define wxUSE_CARET 1
|
||||
#define wxUSE_CHOICE 1
|
||||
#define wxUSE_SCROLLBAR 1
|
||||
#define wxUSE_STATUSBAR 1
|
||||
#define wxUSE_NATIVE_STATUSBAR 0
|
||||
#define wxUSE_TEXTCTRL 1
|
||||
#define wxUSE_ABOUTDLG 1
|
||||
#define wxUSE_STATTEXT 1
|
||||
#define wxUSE_STATLINE 1
|
||||
#define wxUSE_COLLPANE 1
|
||||
#define wxUSE_STATBMP 1
|
||||
#define wxUSE_STATBOX 1
|
||||
#define wxUSE_CHECKBOX 1
|
||||
#define wxUSE_RADIOBTN 1
|
||||
#define wxUSE_RADIOBOX 1
|
||||
#define wxUSE_TOGGLEBTN 1
|
||||
|
||||
#define wxUSE_TOOLBAR 0
|
||||
#define wxUSE_HTML 0
|
||||
|
||||
#define wxUSE_RICHTEXT 0
|
||||
|
||||
#define wxUSE_ANIMATIONCTRL 0
|
||||
#define wxUSE_CALENDARCTRL 0
|
||||
#define wxUSE_COMBOBOX 0
|
||||
#define wxUSE_COMBOCTRL 0
|
||||
#define wxUSE_ODCOMBOBOX 0
|
||||
#define wxUSE_BITMAPCOMBOBOX 0
|
||||
#define wxUSE_BMPBUTTON 0
|
||||
#define wxUSE_CHECKLISTBOX 0
|
||||
#define wxUSE_GAUGE 0
|
||||
#define wxUSE_GRID 0
|
||||
#define wxUSE_LISTBOX 0
|
||||
#define wxUSE_LISTCTRL 0
|
||||
#define wxUSE_NOTEBOOK 0
|
||||
#define wxUSE_SLIDER 0
|
||||
#define wxUSE_SPINBTN 0
|
||||
#define wxUSE_SPINCTRL 0
|
||||
#define wxUSE_TREECTRL 0
|
||||
#define wxUSE_DATEPICKCTRL 0
|
||||
#define wxUSE_DATAVIEWCTRL 0
|
||||
#define wxUSE_EDITABLELISTBOX 0
|
||||
#define wxUSE_FILEPICKERCTRL 0
|
||||
#define wxUSE_DIRPICKERCTRL 0
|
||||
#define wxUSE_FILECTRL 0
|
||||
#define wxUSE_COLOURPICKERCTRL 0
|
||||
#define wxUSE_FONTPICKERCTRL 0
|
||||
#define wxUSE_DEBUGREPORT 0
|
||||
#define wxUSE_HYPERLINKCTRL 0
|
||||
#define wxUSE_STC 0
|
||||
#define wxUSE_AUI 0
|
||||
#define wxUSE_BUSYINFO 0
|
||||
#define wxUSE_SEARCHCTRL 0
|
||||
|
||||
#define wxUSE_LOGWINDOW 0
|
||||
#define wxUSE_LOG_DIALOG 0
|
||||
#define wxUSE_LISTBOOK 0
|
||||
#define wxUSE_CHOICEBOOK 0
|
||||
#define wxUSE_TREEBOOK 0
|
||||
#define wxUSE_TOOLBOOK 0
|
||||
#define wxUSE_CHOICEDLG 0
|
||||
#define wxUSE_HELP 0
|
||||
#define wxUSE_PROGRESSDLG 0
|
||||
#define wxUSE_FONTDLG 0
|
||||
#define wxUSE_FILEDLG 0
|
||||
#define wxUSE_CHOICEDLG 0
|
||||
#define wxUSE_NUMBERDLG 0
|
||||
#define wxUSE_TEXTDLG 0
|
||||
#define wxUSE_DIRDLG 0
|
||||
#define wxUSE_STARTUP_TIPS 0
|
||||
#define wxUSE_WIZARDDLG 0
|
||||
#define wxUSE_TOOLBAR_NATIVE 0
|
||||
#define wxUSE_FINDREPLDLG 0
|
||||
#define wxUSE_TAB_DIALOG 0
|
||||
#define wxUSE_TASKBARICON 0
|
||||
|
||||
|
||||
/*
|
||||
#if wxUSE_POPUPWIN
|
||||
#undef wxUSE_POPUPWIN
|
||||
|
@ -1,5 +1,5 @@
|
||||
#ifdef __WXMAC_CLASSIC__
|
||||
#include "wx/osx/classic/mimetype.h"
|
||||
#else
|
||||
#include "wx/osx/carbon/mimetype.h"
|
||||
#include "wx/osx/core/mimetype.h"
|
||||
#endif
|
||||
|
@ -4,6 +4,9 @@
|
||||
#error "this files should only be included after platform.h was included
|
||||
#endif
|
||||
|
||||
#ifndef _WX_PRIVATE_OSX_H_
|
||||
#define _WX_PRIVATE_OSX_H_
|
||||
|
||||
#if wxOSX_USE_IPHONE
|
||||
#include "wx/osx/iphone/private.h"
|
||||
#elif wxOSX_USE_CARBON
|
||||
@ -11,3 +14,5 @@
|
||||
#elif wxOSX_USE_COCOA
|
||||
#include "wx/osx/cocoa/private.h"
|
||||
#endif
|
||||
|
||||
#endif
|
@ -1,5 +1,6 @@
|
||||
#ifdef __WXMAC_CLASSIC__
|
||||
#include "wx/osx/classic/statbmp.h"
|
||||
#else
|
||||
#if wxOSX_USE_CARBON
|
||||
#include "wx/osx/carbon/statbmp.h"
|
||||
#else
|
||||
#define wxGenericStaticBitmap wxStaticBitmap
|
||||
#include "wx/generic/statbmpg.h"
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
#ifdef __WXMAC_CLASSIC__
|
||||
#include "wx/osx/classic/statline.h"
|
||||
#if wxOSX_USE_CARBON
|
||||
#include "wx/osx/carbon/statline.h"
|
||||
#else
|
||||
#include "wx/osx/carbon/statline.h"
|
||||
#endif
|
||||
|
@ -23,7 +23,7 @@
|
||||
#include "wx/image.h"
|
||||
#endif
|
||||
|
||||
#if !defined(__WXUNIVERSAL__)
|
||||
#if !defined(__WXUNIVERSAL__) && wxOSX_USE_CARBON
|
||||
|
||||
#include "wx/artprov.h"
|
||||
#include "wx/image.h"
|
||||
|
@ -92,22 +92,7 @@ bool wxDisclosureTriangle::Create(wxWindow *parent, wxWindowID id, const wxStrin
|
||||
if ( !wxControl::Create(parent, id, pos, size, style, validator, name) )
|
||||
return false;
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
Rect bounds = wxMacGetBoundsForControl( this , pos , size ) ;
|
||||
m_peer = new wxMacControl(this) ;
|
||||
|
||||
OSStatus err = CreateDisclosureTriangleControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()) , &bounds,
|
||||
kControlDisclosureTrianglePointDefault,
|
||||
wxCFStringRef( label ),
|
||||
0, // closed
|
||||
TRUE, // draw title
|
||||
TRUE, // auto toggle back and forth
|
||||
m_peer->GetControlRefAddr() );
|
||||
|
||||
verify_noerr( err );
|
||||
#endif
|
||||
wxASSERT_MSG( m_peer != NULL && m_peer->IsOk() , wxT("No valid Mac control") ) ;
|
||||
m_peer = wxWidgetImpl::CreateDisclosureTriangle(this, parent, id, label, pos, size, style, GetExtraStyle() );
|
||||
|
||||
MacPostControlCreate( pos, size );
|
||||
// passing the text in the param doesn't seem to work, so lets do if again
|
||||
@ -118,16 +103,12 @@ bool wxDisclosureTriangle::Create(wxWindow *parent, wxWindowID id, const wxStrin
|
||||
|
||||
void wxDisclosureTriangle::SetOpen( bool open )
|
||||
{
|
||||
#if wxOSX_USE_CARBON
|
||||
m_peer->SetValue( open ? 1 : 0 );
|
||||
#endif
|
||||
}
|
||||
|
||||
bool wxDisclosureTriangle::IsOpen() const
|
||||
{
|
||||
#if wxOSX_USE_CARBON
|
||||
return m_peer->GetValue() == 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool wxDisclosureTriangle::HandleClicked( double timestampsec )
|
||||
|
@ -8,6 +8,13 @@
|
||||
<string>org.wxwindows.IDENTIFIER</string>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleLocalizations</key>
|
||||
<array>
|
||||
<string>de</string>
|
||||
<string>en</string>
|
||||
<string>fr</string>
|
||||
<string>it</string>
|
||||
</array>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>EXECUTABLE</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
@ -23,11 +30,11 @@
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>VERSION</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>EXECUTABLE version VERSION, (c) 2002-2006 wxWidgets</string>
|
||||
<string>EXECUTABLE version VERSION, (c) 2002-2008 wxWidgets</string>
|
||||
<key>CFBundleLongVersionString</key>
|
||||
<string>VERSION, (c) 2002-2006 wxWidgets</string>
|
||||
<string>VERSION, (c) 2002-2008 wxWidgets</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright 2002-2006 wxWidgets</string>
|
||||
<string>Copyright 2002-2008 wxWidgets</string>
|
||||
<key>LSRequiresCarbon</key>
|
||||
<true/>
|
||||
<key>CSResourcesFileMapped</key>
|
||||
|
@ -61,7 +61,7 @@ void wxAboutBox(const wxAboutDialogInfo& info)
|
||||
// Mac native about box currently can show only name, version, copyright
|
||||
// and description fields and we also shoehorn the credits text into the
|
||||
// description but if we have anything else we must use the generic version
|
||||
#if wxOSX_USE_CARBON
|
||||
|
||||
if ( info.IsSimple() )
|
||||
{
|
||||
AboutBoxOptions opts;
|
||||
@ -82,7 +82,6 @@ void wxAboutBox(const wxAboutDialogInfo& info)
|
||||
HIAboutBox(opts);
|
||||
}
|
||||
else // simple "native" version is not enough
|
||||
#endif
|
||||
{
|
||||
// we need to use the full-blown generic version
|
||||
wxGenericAboutBox(info);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/app.cpp
|
||||
// Name: src/osx/carbon/app.cpp
|
||||
// Purpose: wxApp
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -40,6 +40,7 @@
|
||||
#include "wx/filename.h"
|
||||
#include "wx/link.h"
|
||||
#include "wx/thread.h"
|
||||
#include "wx/evtloop.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
@ -57,13 +58,6 @@
|
||||
// Keep linker from discarding wxStockGDIMac
|
||||
wxFORCE_LINK_MODULE(gdiobj)
|
||||
|
||||
// statics for implementation
|
||||
static bool s_inYield = false;
|
||||
static bool s_inReceiveEvent = false ;
|
||||
#if wxOSX_USE_COCOA_OR_CARBON
|
||||
static EventTime sleepTime = kEventDurationNoWait ;
|
||||
#endif
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxApp, wxEvtHandler)
|
||||
BEGIN_EVENT_TABLE(wxApp, wxEvtHandler)
|
||||
EVT_IDLE(wxApp::OnIdle)
|
||||
@ -514,12 +508,12 @@ wxMenu* wxFindMenuFromMacCommand( const HICommand &command , wxMenuItem* &item )
|
||||
}
|
||||
else
|
||||
{
|
||||
URefCon refCon ;
|
||||
URefCon refCon = NULL ;
|
||||
|
||||
GetMenuItemRefCon( command.menu.menuRef , command.menu.menuItemIndex , &refCon ) ;
|
||||
itemMenu = wxFindMenuFromMacMenu( command.menu.menuRef ) ;
|
||||
if ( itemMenu != NULL )
|
||||
item = (wxMenuItem*) refCon ;
|
||||
if ( itemMenu != NULL && refCon != 0)
|
||||
item = ((wxMenuItemImpl*) refCon)->GetWXPeer() ;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -569,22 +563,31 @@ wxMacAppMenuEventHandler( EventHandlerCallRef WXUNUSED(handler),
|
||||
|
||||
if ( menu )
|
||||
{
|
||||
wxEventType type=0;
|
||||
MenuCommand cmd=0;
|
||||
switch (GetEventKind(event))
|
||||
{
|
||||
case kEventMenuOpening:
|
||||
type = wxEVT_MENU_OPEN;
|
||||
menu->HandleMenuOpened();
|
||||
break;
|
||||
|
||||
case kEventMenuClosed:
|
||||
type = wxEVT_MENU_CLOSE;
|
||||
menu->HandleMenuClosed();
|
||||
break;
|
||||
|
||||
case kEventMenuTargetItem:
|
||||
cmd = cEvent.GetParameter<MenuCommand>(kEventParamMenuCommand,typeMenuCommand) ;
|
||||
if (cmd != 0)
|
||||
type = wxEVT_MENU_HIGHLIGHT;
|
||||
{
|
||||
HICommand command ;
|
||||
|
||||
command.menu.menuRef = menuRef;
|
||||
command.menu.menuItemIndex = cEvent.GetParameter<MenuItemIndex>(kEventParamMenuItemIndex,typeMenuItemIndex) ;
|
||||
command.commandID = cEvent.GetParameter<MenuCommand>(kEventParamMenuCommand,typeMenuCommand) ;
|
||||
if (command.commandID != 0)
|
||||
{
|
||||
wxMenuItem* item = NULL ;
|
||||
wxMenu* itemMenu = wxFindMenuFromMacCommand( command , item ) ;
|
||||
if ( itemMenu && item )
|
||||
itemMenu->HandleMenuItemHighlighted( item );
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -592,23 +595,6 @@ wxMacAppMenuEventHandler( EventHandlerCallRef WXUNUSED(handler),
|
||||
break;
|
||||
}
|
||||
|
||||
if ( type )
|
||||
{
|
||||
wxMenuEvent wxevent(type, cmd, menu);
|
||||
wxevent.SetEventObject(menu);
|
||||
|
||||
wxEvtHandler* handler = menu->GetEventHandler();
|
||||
if (handler && handler->ProcessEvent(wxevent))
|
||||
{
|
||||
// handled
|
||||
}
|
||||
else
|
||||
{
|
||||
wxWindow *win = menu->GetInvokingWindow();
|
||||
if (win)
|
||||
win->HandleWindowEvent(wxevent);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return eventNotHandledErr;
|
||||
@ -628,7 +614,6 @@ wxMacAppCommandEventHandler( EventHandlerCallRef WXUNUSED(handler) ,
|
||||
|
||||
wxMenuItem* item = NULL ;
|
||||
wxMenu* itemMenu = wxFindMenuFromMacCommand( command , item ) ;
|
||||
int id = wxMacCommandToId( command.commandID ) ;
|
||||
|
||||
if ( item )
|
||||
{
|
||||
@ -637,11 +622,13 @@ wxMacAppCommandEventHandler( EventHandlerCallRef WXUNUSED(handler) ,
|
||||
switch ( cEvent.GetKind() )
|
||||
{
|
||||
case kEventProcessCommand :
|
||||
result = itemMenu->MacHandleCommandProcess( item, id );
|
||||
if ( itemMenu->HandleCommandProcess( item ) )
|
||||
result = noErr;
|
||||
break ;
|
||||
|
||||
case kEventCommandUpdateStatus:
|
||||
result = itemMenu->MacHandleCommandUpdateStatus( item, id );
|
||||
if ( itemMenu->HandleCommandUpdateStatus( item ) )
|
||||
result = noErr;
|
||||
break ;
|
||||
|
||||
default :
|
||||
@ -843,21 +830,43 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
|
||||
|
||||
/* connect posted events to common-mode run loop so that wxPostEvent events
|
||||
are handled even while we're in the menu or on a scrollbar */
|
||||
/*
|
||||
CFRunLoopSourceContext event_posted_context = {0};
|
||||
event_posted_context.perform = macPostedEventCallback;
|
||||
m_macEventPosted = CFRunLoopSourceCreate(NULL,0,&event_posted_context);
|
||||
CFRunLoopAddSource(CFRunLoopGetCurrent(), m_macEventPosted, kCFRunLoopCommonModes);
|
||||
// run loop takes ownership
|
||||
CFRelease(m_macEventPosted);
|
||||
|
||||
*/
|
||||
return true;
|
||||
}
|
||||
|
||||
bool wxApp::CallOnInit()
|
||||
{
|
||||
wxMacAutoreleasePool autoreleasepool;
|
||||
return OnInit();
|
||||
}
|
||||
|
||||
bool wxApp::OnInitGui()
|
||||
{
|
||||
if ( !wxAppBase::OnInitGui() )
|
||||
return false ;
|
||||
|
||||
if ( !DoInitGui() )
|
||||
return false;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
bool wxApp::ProcessIdle()
|
||||
{
|
||||
wxMacAutoreleasePool autoreleasepool;
|
||||
return wxAppBase::ProcessIdle();
|
||||
}
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
bool wxApp::DoInitGui()
|
||||
{
|
||||
InstallStandardEventHandler( GetApplicationEventTarget() ) ;
|
||||
if (!sm_isEmbedded)
|
||||
{
|
||||
@ -865,9 +874,7 @@ bool wxApp::OnInitGui()
|
||||
GetwxMacAppEventHandlerUPP(),
|
||||
GetEventTypeCount(eventList), eventList, wxTheApp, (EventHandlerRef *)&(wxTheApp->m_macEventHandler));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if wxOSX_USE_COCOA_OR_CARBON
|
||||
if (!sm_isEmbedded)
|
||||
{
|
||||
sODocHandler = NewAEEventHandlerUPP(AEHandleODoc) ;
|
||||
@ -890,32 +897,15 @@ bool wxApp::OnInitGui()
|
||||
AEInstallEventHandler( kCoreEventClass , kAEQuitApplication ,
|
||||
sQuitHandler , 0 , FALSE ) ;
|
||||
}
|
||||
#endif
|
||||
#if wxOSX_USE_CARBON
|
||||
|
||||
if ( !wxMacInitCocoa() )
|
||||
return false;
|
||||
#endif
|
||||
|
||||
return true ;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void wxApp::CleanUp()
|
||||
void wxApp::DoCleanUp()
|
||||
{
|
||||
#if wxUSE_TOOLTIPS
|
||||
wxToolTip::RemoveToolTips() ;
|
||||
#endif
|
||||
|
||||
if (m_macEventPosted)
|
||||
{
|
||||
CFRunLoopRemoveSource(CFRunLoopGetCurrent(), m_macEventPosted, kCFRunLoopCommonModes);
|
||||
m_macEventPosted = NULL;
|
||||
}
|
||||
|
||||
// One last chance for pending objects to be cleaned up
|
||||
wxTheApp->DeletePendingObjects();
|
||||
|
||||
#if wxOSX_USE_COCOA_OR_CARBON
|
||||
|
||||
if (!sm_isEmbedded)
|
||||
RemoveEventHandler( (EventHandlerRef)(wxTheApp->m_macEventHandler) );
|
||||
|
||||
@ -941,9 +931,24 @@ void wxApp::CleanUp()
|
||||
DisposeAEEventHandlerUPP( sRAppHandler ) ;
|
||||
DisposeAEEventHandlerUPP( sQuitHandler ) ;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void wxApp::CleanUp()
|
||||
{
|
||||
#if wxUSE_TOOLTIPS
|
||||
wxToolTip::RemoveToolTips() ;
|
||||
#endif
|
||||
|
||||
if (m_macEventPosted)
|
||||
{
|
||||
CFRunLoopRemoveSource(CFRunLoopGetCurrent(), m_macEventPosted, kCFRunLoopCommonModes);
|
||||
m_macEventPosted = NULL;
|
||||
}
|
||||
|
||||
DoCleanUp();
|
||||
|
||||
wxAppBase::CleanUp();
|
||||
}
|
||||
|
||||
@ -1052,15 +1057,31 @@ wxApp::wxApp()
|
||||
m_macEventPosted = NULL ;
|
||||
}
|
||||
|
||||
CFMutableArrayRef GetAutoReleaseArray()
|
||||
{
|
||||
static CFMutableArrayRef array = 0;
|
||||
if ( array == 0)
|
||||
array= CFArrayCreateMutable(kCFAllocatorDefault,0,&kCFTypeArrayCallBacks);
|
||||
return array;
|
||||
}
|
||||
|
||||
void wxApp::MacAddToAutorelease( void* cfrefobj )
|
||||
{
|
||||
CFArrayAppendValue( GetAutoReleaseArray(), cfrefobj );
|
||||
}
|
||||
|
||||
void wxApp::OnIdle(wxIdleEvent& WXUNUSED(event))
|
||||
{
|
||||
// If they are pending events, we must process them: pending events are
|
||||
// either events to the threads other than main or events posted with
|
||||
// wxPostEvent() functions
|
||||
#ifndef __WXUNIVERSAL__
|
||||
#if wxUSE_MENU
|
||||
if (!wxMenuBar::MacGetInstalledMenuBar() && wxMenuBar::MacGetCommonMenuBar())
|
||||
wxMenuBar::MacGetCommonMenuBar()->MacInstallMenuBar();
|
||||
#endif
|
||||
#endif
|
||||
CFArrayRemoveAllValues( GetAutoReleaseArray() );
|
||||
}
|
||||
|
||||
void wxApp::WakeUpIdle()
|
||||
@ -1100,6 +1121,17 @@ void wxCYield()
|
||||
|
||||
bool wxApp::Yield(bool onlyIfNeeded)
|
||||
{
|
||||
#if wxUSE_THREADS
|
||||
// Yielding from a non-gui thread needs to bail out, otherwise we end up
|
||||
// possibly sending events in the thread too.
|
||||
if ( !wxThread::IsMain() )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#endif // wxUSE_THREADS
|
||||
|
||||
static bool s_inYield = false;
|
||||
|
||||
if (s_inYield)
|
||||
{
|
||||
if ( !onlyIfNeeded )
|
||||
@ -1110,147 +1142,43 @@ bool wxApp::Yield(bool onlyIfNeeded)
|
||||
return false;
|
||||
}
|
||||
|
||||
#if wxUSE_THREADS
|
||||
// Yielding from a non-gui thread needs to bail out, otherwise we end up
|
||||
// possibly sending events in the thread too.
|
||||
if ( !wxThread::IsMain() )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#endif // wxUSE_THREADS
|
||||
|
||||
s_inYield = true;
|
||||
|
||||
// by definition yield should handle all non-processed events
|
||||
#if wxUSE_LOG
|
||||
// disable log flushing from here because a call to wxYield() shouldn't
|
||||
// normally result in message boxes popping up &c
|
||||
wxLog::Suspend();
|
||||
#endif // wxUSE_LOG
|
||||
|
||||
#if wxOSX_USE_COCOA_OR_CARBON
|
||||
|
||||
EventRef theEvent;
|
||||
|
||||
OSStatus status = noErr ;
|
||||
|
||||
while ( status == noErr )
|
||||
wxEventLoop * const
|
||||
loop = wx_static_cast(wxEventLoop *, wxEventLoop::GetActive());
|
||||
if ( loop )
|
||||
{
|
||||
s_inReceiveEvent = true ;
|
||||
status = ReceiveNextEvent(0, NULL,kEventDurationNoWait,true,&theEvent) ;
|
||||
s_inReceiveEvent = false ;
|
||||
|
||||
if ( status == eventLoopTimedOutErr )
|
||||
{
|
||||
// make sure next time the event loop will trigger idle events
|
||||
sleepTime = kEventDurationNoWait ;
|
||||
}
|
||||
else if ( status == eventLoopQuitErr )
|
||||
{
|
||||
// according to QA1061 this may also occur when a WakeUp Process
|
||||
// is executed
|
||||
}
|
||||
else
|
||||
{
|
||||
MacHandleOneEvent( theEvent ) ;
|
||||
ReleaseEvent(theEvent);
|
||||
}
|
||||
// process all pending events:
|
||||
while ( loop->Pending() )
|
||||
loop->Dispatch();
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#endif
|
||||
|
||||
// it's necessary to call ProcessIdle() to update the frames sizes which
|
||||
// might have been changed (it also will update other things set from
|
||||
// OnUpdateUI() which is a nice (and desired) side effect)
|
||||
while ( ProcessIdle() ) {}
|
||||
|
||||
#if wxUSE_LOG
|
||||
wxLog::Resume();
|
||||
#endif // wxUSE_LOG
|
||||
s_inYield = false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void wxApp::MacDoOneEvent()
|
||||
{
|
||||
#if wxOSX_USE_COCOA_OR_CARBON
|
||||
wxMacAutoreleasePool autoreleasepool;
|
||||
EventRef theEvent;
|
||||
|
||||
s_inReceiveEvent = true ;
|
||||
OSStatus status = ReceiveNextEvent(0, NULL, sleepTime, true, &theEvent) ;
|
||||
s_inReceiveEvent = false ;
|
||||
|
||||
switch (status)
|
||||
{
|
||||
case eventLoopTimedOutErr :
|
||||
if ( wxTheApp->ProcessIdle() )
|
||||
sleepTime = kEventDurationNoWait ;
|
||||
else
|
||||
{
|
||||
sleepTime = kEventDurationSecond;
|
||||
#if wxUSE_THREADS
|
||||
wxMutexGuiLeave();
|
||||
wxMilliSleep(20);
|
||||
wxMutexGuiEnter();
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
||||
case eventLoopQuitErr :
|
||||
// according to QA1061 this may also occur
|
||||
// when a WakeUp Process is executed
|
||||
break;
|
||||
|
||||
default:
|
||||
MacHandleOneEvent( theEvent ) ;
|
||||
ReleaseEvent( theEvent );
|
||||
sleepTime = kEventDurationNoWait ;
|
||||
break;
|
||||
}
|
||||
// repeaters
|
||||
#else
|
||||
#endif
|
||||
DeletePendingObjects() ;
|
||||
}
|
||||
|
||||
// virtual
|
||||
void wxApp::MacHandleUnhandledEvent( WXEVENTREF WXUNUSED(evr) )
|
||||
{
|
||||
// Override to process unhandled events as you please
|
||||
}
|
||||
|
||||
CFMutableArrayRef GetAutoReleaseArray()
|
||||
{
|
||||
static CFMutableArrayRef array = 0;
|
||||
if ( array == 0)
|
||||
array= CFArrayCreateMutable(kCFAllocatorDefault,0,&kCFTypeArrayCallBacks);
|
||||
return array;
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
void wxApp::MacHandleOneEvent( WXEVENTREF evr )
|
||||
{
|
||||
#if wxOSX_USE_COCOA_OR_CARBON
|
||||
EventTargetRef theTarget;
|
||||
theTarget = GetEventDispatcherTarget();
|
||||
m_macCurrentEvent = evr ;
|
||||
|
||||
OSStatus status = SendEventToEventTarget((EventRef) evr , theTarget);
|
||||
if (status == eventNotHandledErr)
|
||||
MacHandleUnhandledEvent(evr);
|
||||
#else
|
||||
// TODO Threads
|
||||
#endif
|
||||
|
||||
|
||||
CFArrayRemoveAllValues( GetAutoReleaseArray() );
|
||||
}
|
||||
|
||||
void wxApp::MacAddToAutorelease( void* cfrefobj )
|
||||
{
|
||||
CFArrayAppendValue( GetAutoReleaseArray(), cfrefobj );
|
||||
}
|
||||
|
||||
#if wxOSX_USE_COCOA_OR_CARBON
|
||||
#if wxOSX_USE_CARBON
|
||||
|
||||
long wxMacTranslateKey(unsigned char key, unsigned char code)
|
||||
{
|
||||
@ -1422,12 +1350,12 @@ int wxMacKeyCodeToModifier(wxKeyCode key)
|
||||
wxMouseState wxGetMouseState()
|
||||
{
|
||||
wxMouseState ms;
|
||||
#if wxOSX_USE_COCOA_OR_CARBON
|
||||
|
||||
wxPoint pt = wxGetMousePosition();
|
||||
ms.SetX(pt.x);
|
||||
ms.SetY(pt.y);
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
UInt32 buttons = GetCurrentButtonState();
|
||||
ms.SetLeftDown( (buttons & 0x01) != 0 );
|
||||
ms.SetMiddleDown( (buttons & 0x04) != 0 );
|
||||
@ -1438,7 +1366,8 @@ wxMouseState wxGetMouseState()
|
||||
ms.SetShiftDown(modifiers & shiftKey);
|
||||
ms.SetAltDown(modifiers & optionKey);
|
||||
ms.SetMetaDown(modifiers & cmdKey);
|
||||
|
||||
#else
|
||||
// TODO
|
||||
#endif
|
||||
return ms;
|
||||
}
|
||||
@ -1598,7 +1527,7 @@ bool wxApp::MacSendCharEvent( wxWindow* focus , long keymessage , long modifiers
|
||||
// This method handles common code for SendKeyDown, SendKeyUp, and SendChar events.
|
||||
void wxApp::MacCreateKeyEvent( wxKeyEvent& event, wxWindow* focus , long keymessage , long modifiers , long when , short wherex , short wherey , wxChar uniChar )
|
||||
{
|
||||
#if wxOSX_USE_COCOA_OR_CARBON
|
||||
#if wxOSX_USE_CARBON
|
||||
short keycode, keychar ;
|
||||
|
||||
keychar = short(keymessage & charCodeMask);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/bmpbuttn.cpp
|
||||
// Name: src/osx/carbon/bmpbuttn.cpp
|
||||
// Purpose: wxBitmapButton
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -20,9 +20,7 @@
|
||||
#include "wx/dcmemory.h"
|
||||
#endif
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxBitmapButton, wxButton)
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Helper functions
|
||||
@ -79,111 +77,88 @@ static wxBitmap wxMakeStdSizeBitmap(const wxBitmap& bitmap)
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool wxBitmapButton::Create( wxWindow *parent,
|
||||
wxWindowID id, const wxBitmap& bitmap,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxValidator& validator,
|
||||
const wxString& name )
|
||||
class wxMacBitmapButton : public wxMacControl
|
||||
{
|
||||
m_macIsUserPane = false;
|
||||
|
||||
// since bitmapbuttonbase is subclass of button calling wxBitmapButtonBase::Create
|
||||
// essentially creates an additional button
|
||||
if ( !wxControl::Create( parent, id, pos, size, style, validator, name ) )
|
||||
return false;
|
||||
|
||||
if ( style & wxBU_AUTODRAW )
|
||||
public:
|
||||
wxMacBitmapButton( wxWindowMac* peer ) : wxMacControl(peer)
|
||||
{
|
||||
m_marginX =
|
||||
m_marginY = wxDEFAULT_BUTTON_MARGIN;
|
||||
}
|
||||
else
|
||||
|
||||
void SetBitmap(const wxBitmap& bitmap)
|
||||
{
|
||||
m_marginX =
|
||||
m_marginY = 0;
|
||||
}
|
||||
wxBitmap bmp;
|
||||
if ( GetWXPeer()->HasFlag( wxBORDER_NONE ) )
|
||||
{
|
||||
bmp = wxMakeStdSizeBitmap(bitmap);
|
||||
// TODO set bitmap in peer as well
|
||||
}
|
||||
else
|
||||
bmp = bitmap;
|
||||
|
||||
ControlButtonContentInfo info;
|
||||
|
||||
if ( GetWXPeer()->HasFlag( wxBORDER_NONE ) )
|
||||
{
|
||||
wxMacCreateBitmapButton( &info, bmp, kControlContentIconRef );
|
||||
if ( info.contentType != kControlNoContent )
|
||||
SetData( kControlIconPart, kControlIconContentTag, info );
|
||||
}
|
||||
else
|
||||
{
|
||||
wxMacCreateBitmapButton( &info, bmp );
|
||||
if ( info.contentType != kControlNoContent )
|
||||
SetData( kControlButtonPart, kControlBevelButtonContentTag, info );
|
||||
}
|
||||
|
||||
wxMacReleaseBitmapButton( &info );
|
||||
}
|
||||
};
|
||||
|
||||
wxWidgetImplType* wxWidgetImpl::CreateBitmapButton( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxBitmap& bitmap,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle)
|
||||
{
|
||||
OSStatus err = noErr;
|
||||
ControlButtonContentInfo info;
|
||||
|
||||
Rect bounds = wxMacGetBoundsForControl( this, pos, size );
|
||||
m_peer = new wxMacControl( this );
|
||||
Rect bounds = wxMacGetBoundsForControl( wxpeer, pos, size );
|
||||
wxMacControl* peer = new wxMacBitmapButton( wxpeer );
|
||||
wxBitmap bmp;
|
||||
|
||||
if ( bitmap.Ok() && HasFlag(wxBORDER_NONE) )
|
||||
m_bmpNormal = wxMakeStdSizeBitmap(bitmap);
|
||||
if ( bitmap.Ok() && (style & wxBORDER_NONE) )
|
||||
{
|
||||
bmp = wxMakeStdSizeBitmap(bitmap);
|
||||
// TODO set bitmap in peer as well
|
||||
}
|
||||
else
|
||||
m_bmpNormal = bitmap;
|
||||
bmp = bitmap;
|
||||
|
||||
|
||||
if ( HasFlag( wxBORDER_NONE ) )
|
||||
if ( style & wxBORDER_NONE )
|
||||
{
|
||||
// contrary to the docs this control only works with iconrefs
|
||||
wxMacCreateBitmapButton( &info, m_bmpNormal, kControlContentIconRef );
|
||||
wxMacCreateBitmapButton( &info, bmp, kControlContentIconRef );
|
||||
err = CreateIconControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()),
|
||||
&bounds, &info, false, m_peer->GetControlRefAddr() );
|
||||
&bounds, &info, false, peer->GetControlRefAddr() );
|
||||
}
|
||||
else
|
||||
{
|
||||
wxMacCreateBitmapButton( &info, m_bmpNormal );
|
||||
wxMacCreateBitmapButton( &info, bmp );
|
||||
err = CreateBevelButtonControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds, CFSTR(""),
|
||||
((style & wxBU_AUTODRAW) ? kControlBevelButtonSmallBevel : kControlBevelButtonNormalBevel ),
|
||||
kControlBehaviorOffsetContents, &info, 0, 0, 0, m_peer->GetControlRefAddr() );
|
||||
kControlBehaviorOffsetContents, &info, 0, 0, 0, peer->GetControlRefAddr() );
|
||||
}
|
||||
|
||||
verify_noerr( err );
|
||||
|
||||
wxMacReleaseBitmapButton( &info );
|
||||
wxASSERT_MSG( m_peer != NULL && m_peer->IsOk(), wxT("No valid native Mac control") );
|
||||
|
||||
MacPostControlCreate( pos, size );
|
||||
|
||||
return true;
|
||||
return peer;
|
||||
}
|
||||
|
||||
void wxBitmapButton::SetBitmapLabel( const wxBitmap& bitmap )
|
||||
{
|
||||
if ( HasFlag( wxBORDER_NONE ) )
|
||||
m_bmpNormal = wxMakeStdSizeBitmap(bitmap);
|
||||
else
|
||||
m_bmpNormal = bitmap;
|
||||
|
||||
InvalidateBestSize();
|
||||
|
||||
ControlButtonContentInfo info;
|
||||
|
||||
if ( HasFlag( wxBORDER_NONE ) )
|
||||
{
|
||||
wxMacCreateBitmapButton( &info, m_bmpNormal, kControlContentIconRef );
|
||||
if ( info.contentType != kControlNoContent )
|
||||
m_peer->SetData( kControlIconPart, kControlIconContentTag, info );
|
||||
}
|
||||
else
|
||||
{
|
||||
wxMacCreateBitmapButton( &info, m_bmpNormal );
|
||||
if ( info.contentType != kControlNoContent )
|
||||
m_peer->SetData( kControlButtonPart, kControlBevelButtonContentTag, info );
|
||||
}
|
||||
|
||||
wxMacReleaseBitmapButton( &info );
|
||||
}
|
||||
|
||||
wxSize wxBitmapButton::DoGetBestSize() const
|
||||
{
|
||||
wxSize best;
|
||||
|
||||
best.x = 2 * m_marginX;
|
||||
best.y = 2 * m_marginY;
|
||||
if ( m_bmpNormal.Ok() )
|
||||
{
|
||||
best.x += m_bmpNormal.GetWidth();
|
||||
best.y += m_bmpNormal.GetHeight();
|
||||
}
|
||||
|
||||
return best;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/button.cpp
|
||||
// Name: src/osx/carbon/button.cpp
|
||||
// Purpose: wxButton
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -21,98 +21,11 @@
|
||||
|
||||
#include "wx/stockitem.h"
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxButton, wxControl)
|
||||
|
||||
|
||||
bool wxButton::Create(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxString& lbl,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxValidator& validator,
|
||||
const wxString& name)
|
||||
{
|
||||
wxString label(lbl);
|
||||
if (label.empty() && wxIsStockID(id))
|
||||
label = wxGetStockLabel(id);
|
||||
|
||||
m_macIsUserPane = false ;
|
||||
|
||||
if ( !wxButtonBase::Create(parent, id, pos, size, style, validator, name) )
|
||||
return false;
|
||||
|
||||
m_labelOrig = m_label = label ;
|
||||
|
||||
OSStatus err;
|
||||
Rect bounds = wxMacGetBoundsForControl( this , pos , size ) ;
|
||||
m_peer = new wxMacControl(this) ;
|
||||
if ( id == wxID_HELP )
|
||||
{
|
||||
ControlButtonContentInfo info ;
|
||||
info.contentType = kControlContentIconRef ;
|
||||
GetIconRef(kOnSystemDisk, kSystemIconsCreator, kHelpIcon, &info.u.iconRef);
|
||||
err = CreateRoundButtonControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()),
|
||||
&bounds, kControlRoundButtonNormalSize,
|
||||
&info, m_peer->GetControlRefAddr() );
|
||||
}
|
||||
else if ( label.Find('\n' ) == wxNOT_FOUND && label.Find('\r' ) == wxNOT_FOUND)
|
||||
{
|
||||
// Button height is static in Mac, can't be changed, so we need to force it here
|
||||
if ( GetWindowVariant() == wxWINDOW_VARIANT_NORMAL || GetWindowVariant() == wxWINDOW_VARIANT_LARGE )
|
||||
{
|
||||
bounds.bottom = bounds.top + 20 ;
|
||||
m_maxHeight = 20 ;
|
||||
}
|
||||
else if ( GetWindowVariant() == wxWINDOW_VARIANT_SMALL )
|
||||
{
|
||||
bounds.bottom = bounds.top + 17 ;
|
||||
m_maxHeight = 17 ;
|
||||
}
|
||||
else if ( GetWindowVariant() == wxWINDOW_VARIANT_MINI )
|
||||
{
|
||||
bounds.bottom = bounds.top + 15 ;
|
||||
m_maxHeight = 15 ;
|
||||
}
|
||||
err = CreatePushButtonControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()),
|
||||
&bounds, CFSTR(""), m_peer->GetControlRefAddr() );
|
||||
}
|
||||
else
|
||||
{
|
||||
ControlButtonContentInfo info ;
|
||||
info.contentType = kControlNoContent ;
|
||||
err = CreateBevelButtonControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()) , &bounds, CFSTR(""),
|
||||
kControlBevelButtonLargeBevel, kControlBehaviorPushbutton,
|
||||
&info, 0, 0, 0, m_peer->GetControlRefAddr() );
|
||||
}
|
||||
|
||||
verify_noerr( err );
|
||||
wxASSERT_MSG( m_peer != NULL && m_peer->IsOk() , wxT("No valid Mac control") ) ;
|
||||
|
||||
MacPostControlCreate( pos, size );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
wxWindow *wxButton::SetDefault()
|
||||
{
|
||||
wxWindow *btnOldDefault = wxButtonBase::SetDefault();
|
||||
|
||||
if ( btnOldDefault )
|
||||
{
|
||||
// cast needed to access the protected member
|
||||
btnOldDefault->GetPeer()->SetData(kControlButtonPart , kControlPushButtonDefaultTag , (Boolean) 0 ) ;
|
||||
}
|
||||
|
||||
m_peer->SetData(kControlButtonPart , kControlPushButtonDefaultTag , (Boolean) 1 ) ;
|
||||
|
||||
return btnOldDefault;
|
||||
}
|
||||
//
|
||||
//
|
||||
//
|
||||
|
||||
wxSize wxButton::DoGetBestSize() const
|
||||
{
|
||||
@ -140,6 +53,7 @@ wxSize wxButton::DoGetBestSize() const
|
||||
break;
|
||||
}
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
Rect bestsize = { 0 , 0 , 0 , 0 } ;
|
||||
m_peer->GetBestRect( &bestsize ) ;
|
||||
|
||||
@ -181,9 +95,9 @@ wxSize wxButton::DoGetBestSize() const
|
||||
// non 'normal' window variants don't return the correct height
|
||||
// sz.y = bestsize.bottom - bestsize.top ;
|
||||
}
|
||||
|
||||
if ((wBtn > sz.x) || ( GetWindowStyle() & wxBU_EXACTFIT))
|
||||
sz.x = wBtn;
|
||||
#endif
|
||||
|
||||
return sz ;
|
||||
}
|
||||
@ -196,35 +110,80 @@ wxSize wxButton::GetDefaultSize()
|
||||
return wxSize(wBtn, hBtn);
|
||||
}
|
||||
|
||||
void wxButton::Command (wxCommandEvent & event)
|
||||
wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle)
|
||||
{
|
||||
m_peer->Flash(kControlButtonPart) ;
|
||||
ProcessCommand(event);
|
||||
OSStatus err;
|
||||
Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size ) ;
|
||||
wxMacControl* peer = new wxMacControl(wxpeer) ;
|
||||
if ( id == wxID_HELP )
|
||||
{
|
||||
ControlButtonContentInfo info ;
|
||||
info.contentType = kControlContentIconRef ;
|
||||
GetIconRef(kOnSystemDisk, kSystemIconsCreator, kHelpIcon, &info.u.iconRef);
|
||||
err = CreateRoundButtonControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()),
|
||||
&bounds, kControlRoundButtonNormalSize,
|
||||
&info, peer->GetControlRefAddr() );
|
||||
}
|
||||
else if ( label.Find('\n' ) == wxNOT_FOUND && label.Find('\r' ) == wxNOT_FOUND)
|
||||
{
|
||||
// Button height is static in Mac, can't be changed, so we need to force it here
|
||||
int maxHeight;
|
||||
switch (wxpeer->GetWindowVariant() )
|
||||
{
|
||||
case wxWINDOW_VARIANT_NORMAL:
|
||||
case wxWINDOW_VARIANT_LARGE:
|
||||
maxHeight = 20 ;
|
||||
break;
|
||||
case wxWINDOW_VARIANT_SMALL:
|
||||
maxHeight = 17;
|
||||
case wxWINDOW_VARIANT_MINI:
|
||||
maxHeight = 15;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
bounds.bottom = bounds.top + maxHeight ;
|
||||
wxpeer->SetMaxSize( wxSize( wxpeer->GetMaxWidth() , maxHeight ));
|
||||
err = CreatePushButtonControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()),
|
||||
&bounds, CFSTR(""), peer->GetControlRefAddr() );
|
||||
}
|
||||
else
|
||||
{
|
||||
ControlButtonContentInfo info ;
|
||||
info.contentType = kControlNoContent ;
|
||||
err = CreateBevelButtonControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()) , &bounds, CFSTR(""),
|
||||
kControlBevelButtonLargeBevel, kControlBehaviorPushbutton,
|
||||
&info, 0, 0, 0, peer->GetControlRefAddr() );
|
||||
}
|
||||
verify_noerr( err );
|
||||
return peer;
|
||||
}
|
||||
|
||||
wxInt32 wxButton::MacControlHit(WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTREF WXUNUSED(event) )
|
||||
{
|
||||
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, m_windowId);
|
||||
event.SetEventObject(this);
|
||||
ProcessCommand(event);
|
||||
|
||||
return noErr;
|
||||
void wxMacControl::SetDefaultButton( bool isDefault )
|
||||
{
|
||||
SetData(kControlButtonPart , kControlPushButtonDefaultTag , (Boolean) isDefault ) ;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------
|
||||
// wxDisclosureTriangle
|
||||
//-------------------------------------------------------
|
||||
|
||||
bool wxDisclosureTriangle::Create(wxWindow *parent, wxWindowID id, const wxString& label,
|
||||
const wxPoint& pos, const wxSize& size, long style,const wxValidator& validator, const wxString& name )
|
||||
wxWidgetImplType* wxWidgetImpl::CreateDisclosureTriangle( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle)
|
||||
{
|
||||
m_macIsUserPane = false ;
|
||||
|
||||
if ( !wxControl::Create(parent, id, pos, size, style, validator, name) )
|
||||
return false;
|
||||
|
||||
Rect bounds = wxMacGetBoundsForControl( this , pos , size ) ;
|
||||
m_peer = new wxMacControl(this) ;
|
||||
Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size ) ;
|
||||
wxMacControl* peer = new wxMacControl(wxpeer) ;
|
||||
|
||||
OSStatus err = CreateDisclosureTriangleControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()) , &bounds,
|
||||
@ -233,41 +192,10 @@ bool wxDisclosureTriangle::Create(wxWindow *parent, wxWindowID id, const wxStrin
|
||||
0, // closed
|
||||
TRUE, // draw title
|
||||
TRUE, // auto toggle back and forth
|
||||
m_peer->GetControlRefAddr() );
|
||||
peer->GetControlRefAddr() );
|
||||
|
||||
verify_noerr( err );
|
||||
wxASSERT_MSG( m_peer != NULL && m_peer->IsOk() , wxT("No valid Mac control") ) ;
|
||||
|
||||
MacPostControlCreate( pos, size );
|
||||
// passing the text in the param doesn't seem to work, so lets do if again
|
||||
SetLabel( label );
|
||||
|
||||
return true;
|
||||
return peer;
|
||||
}
|
||||
|
||||
void wxDisclosureTriangle::SetOpen( bool open )
|
||||
{
|
||||
m_peer->SetValue( open ? 1 : 0 );
|
||||
}
|
||||
|
||||
bool wxDisclosureTriangle::IsOpen() const
|
||||
{
|
||||
return m_peer->GetValue() == 1;
|
||||
}
|
||||
|
||||
wxInt32 wxDisclosureTriangle::MacControlHit( WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTREF WXUNUSED(event) )
|
||||
{
|
||||
// Just emit button event for now
|
||||
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, m_windowId);
|
||||
event.SetEventObject(this);
|
||||
ProcessCommand(event);
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
wxSize wxDisclosureTriangle::DoGetBestSize() const
|
||||
{
|
||||
return wxSize(16,16);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/checkbox.cpp
|
||||
// Name: src/osx/carbon/checkbox.cpp
|
||||
// Purpose: wxCheckBox
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -16,171 +16,27 @@
|
||||
#include "wx/checkbox.h"
|
||||
#include "wx/osx/uma.h"
|
||||
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxCheckBox, wxControl)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxBitmapCheckBox, wxCheckBox)
|
||||
|
||||
|
||||
// Single check box item
|
||||
bool wxCheckBox::Create(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxValidator& validator,
|
||||
const wxString& name)
|
||||
wxWidgetImplType* wxWidgetImpl::CreateCheckBox( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle)
|
||||
{
|
||||
m_macIsUserPane = false ;
|
||||
|
||||
if ( !wxCheckBoxBase::Create(parent, id, pos, size, style, validator, name) )
|
||||
return false;
|
||||
|
||||
m_labelOrig = m_label = label ;
|
||||
Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size ) ;
|
||||
wxMacControl* peer = new wxMacControl(wxpeer) ;
|
||||
|
||||
verify_noerr( CreateCheckBoxControl(MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds ,
|
||||
CFSTR("") , 0 , false , peer->GetControlRefAddr() ) );
|
||||
SInt32 maxValue = 1 /* kControlCheckboxCheckedValue */;
|
||||
if (style & wxCHK_3STATE)
|
||||
maxValue = 2 /* kControlCheckboxMixedValue */;
|
||||
|
||||
Rect bounds = wxMacGetBoundsForControl( this , pos , size ) ;
|
||||
m_peer = new wxMacControl( this ) ;
|
||||
verify_noerr( CreateCheckBoxControl(MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds ,
|
||||
CFSTR("") , 0 , false , m_peer->GetControlRefAddr() ) );
|
||||
peer->SetMaximum( maxValue ) ;
|
||||
|
||||
m_peer->SetMaximum( maxValue ) ;
|
||||
|
||||
MacPostControlCreate(pos, size) ;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void wxCheckBox::SetValue(bool val)
|
||||
{
|
||||
if (val)
|
||||
Set3StateValue(wxCHK_CHECKED);
|
||||
else
|
||||
Set3StateValue(wxCHK_UNCHECKED);
|
||||
}
|
||||
|
||||
bool wxCheckBox::GetValue() const
|
||||
{
|
||||
return (DoGet3StateValue() != 0);
|
||||
}
|
||||
|
||||
void wxCheckBox::Command(wxCommandEvent & event)
|
||||
{
|
||||
int state = event.GetInt();
|
||||
|
||||
wxCHECK_RET( (state == wxCHK_UNCHECKED) || (state == wxCHK_CHECKED)
|
||||
|| (state == wxCHK_UNDETERMINED),
|
||||
wxT("event.GetInt() returned an invalid checkbox state") );
|
||||
|
||||
Set3StateValue((wxCheckBoxState)state);
|
||||
|
||||
ProcessCommand(event);
|
||||
}
|
||||
|
||||
wxCheckBoxState wxCheckBox::DoGet3StateValue() const
|
||||
{
|
||||
return (wxCheckBoxState)m_peer->GetValue() ;
|
||||
}
|
||||
|
||||
void wxCheckBox::DoSet3StateValue(wxCheckBoxState val)
|
||||
{
|
||||
m_peer->SetValue( val ) ;
|
||||
}
|
||||
|
||||
wxInt32 wxCheckBox::MacControlHit( WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTREF WXUNUSED(event) )
|
||||
{
|
||||
wxCheckBoxState origState, newState;
|
||||
|
||||
newState = origState = Get3StateValue();
|
||||
|
||||
switch (origState)
|
||||
{
|
||||
case wxCHK_UNCHECKED:
|
||||
newState = wxCHK_CHECKED;
|
||||
break;
|
||||
|
||||
case wxCHK_CHECKED:
|
||||
// If the style flag to allow the user setting the undetermined state is set,
|
||||
// then set the state to undetermined; otherwise set state to unchecked.
|
||||
newState = Is3rdStateAllowedForUser() ? wxCHK_UNDETERMINED : wxCHK_UNCHECKED;
|
||||
break;
|
||||
|
||||
case wxCHK_UNDETERMINED:
|
||||
newState = wxCHK_UNCHECKED;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (newState != origState)
|
||||
{
|
||||
Set3StateValue( newState );
|
||||
|
||||
wxCommandEvent event( wxEVT_COMMAND_CHECKBOX_CLICKED, m_windowId );
|
||||
event.SetInt( newState );
|
||||
event.SetEventObject( this );
|
||||
ProcessCommand( event );
|
||||
}
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
// Bitmap checkbox
|
||||
bool wxBitmapCheckBox::Create(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxBitmap *WXUNUSED(label),
|
||||
const wxPoint& WXUNUSED(pos),
|
||||
const wxSize& WXUNUSED(size),
|
||||
long style,
|
||||
const wxValidator& wxVALIDATOR_PARAM(validator),
|
||||
const wxString& name)
|
||||
{
|
||||
SetName(name);
|
||||
#if wxUSE_VALIDATORS
|
||||
SetValidator(validator);
|
||||
#endif
|
||||
m_windowStyle = style;
|
||||
|
||||
if (parent)
|
||||
parent->AddChild(this);
|
||||
|
||||
if ( id == -1 )
|
||||
m_windowId = NewControlId();
|
||||
else
|
||||
m_windowId = id;
|
||||
|
||||
// TODO: Create the bitmap checkbox
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void wxBitmapCheckBox::SetLabel(const wxBitmap *WXUNUSED(bitmap))
|
||||
{
|
||||
// TODO
|
||||
wxFAIL_MSG(wxT("wxBitmapCheckBox::SetLabel() not yet implemented"));
|
||||
}
|
||||
|
||||
void wxBitmapCheckBox::SetSize(int x, int y, int width, int height, int sizeFlags)
|
||||
{
|
||||
wxControl::SetSize( x , y , width , height , sizeFlags ) ;
|
||||
}
|
||||
|
||||
void wxBitmapCheckBox::SetValue(bool WXUNUSED(val))
|
||||
{
|
||||
// TODO
|
||||
wxFAIL_MSG(wxT("wxBitmapCheckBox::SetValue() not yet implemented"));
|
||||
}
|
||||
|
||||
bool wxBitmapCheckBox::GetValue() const
|
||||
{
|
||||
// TODO
|
||||
wxFAIL_MSG(wxT("wxBitmapCheckBox::GetValue() not yet implemented"));
|
||||
|
||||
return false;
|
||||
return peer;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -1,273 +0,0 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/checklst.cpp
|
||||
// Purpose: implementation of wxCheckListBox class
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
// Created: 1998-01-01
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Stefan Csomor
|
||||
// Licence: wxWindows licence
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// new DataBrowser-based version
|
||||
|
||||
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#if wxUSE_CHECKLISTBOX
|
||||
|
||||
#include "wx/checklst.h"
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/arrstr.h"
|
||||
#endif
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxCheckListBox, wxListBox)
|
||||
|
||||
BEGIN_EVENT_TABLE(wxCheckListBox, wxListBox)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
class wxMacDataBrowserCheckListControl : public wxMacDataBrowserListControl , public wxMacCheckListControl
|
||||
{
|
||||
public:
|
||||
wxMacDataBrowserCheckListControl( wxListBox *peer, const wxPoint& pos, const wxSize& size, long style );
|
||||
wxMacDataBrowserCheckListControl() {}
|
||||
virtual ~wxMacDataBrowserCheckListControl();
|
||||
|
||||
virtual wxMacDataItem* CreateItem();
|
||||
|
||||
virtual bool MacIsChecked(unsigned int n) const;
|
||||
virtual void MacCheck(unsigned int n, bool bCheck = true);
|
||||
DECLARE_DYNAMIC_CLASS_NO_COPY(wxMacDataBrowserCheckListControl)
|
||||
};
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS( wxMacDataBrowserCheckListControl , wxMacDataBrowserListControl )
|
||||
|
||||
void wxCheckListBox::Init()
|
||||
{
|
||||
}
|
||||
|
||||
bool wxCheckListBox::Create(
|
||||
wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint &pos,
|
||||
const wxSize &size,
|
||||
const wxArrayString& choices,
|
||||
long style,
|
||||
const wxValidator& validator,
|
||||
const wxString &name )
|
||||
{
|
||||
wxCArrayString chs( choices );
|
||||
|
||||
return Create( parent, id, pos, size, chs.GetCount(), chs.GetStrings(), style, validator, name );
|
||||
}
|
||||
|
||||
bool wxCheckListBox::Create(
|
||||
wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
int n,
|
||||
const wxString choices[],
|
||||
long style,
|
||||
const wxValidator& validator,
|
||||
const wxString& name )
|
||||
{
|
||||
m_macIsUserPane = false;
|
||||
|
||||
wxASSERT_MSG( !(style & wxLB_MULTIPLE) || !(style & wxLB_EXTENDED),
|
||||
wxT("only one of listbox selection modes can be specified") );
|
||||
|
||||
if ( !wxListBoxBase::Create( parent, id, pos, size, style & ~(wxHSCROLL | wxVSCROLL), validator, name ) )
|
||||
return false;
|
||||
|
||||
// this will be increased by our Append command
|
||||
wxMacDataBrowserCheckListControl* control = new wxMacDataBrowserCheckListControl( this, pos, size, style );
|
||||
// TODO CHECK control->SetClientDataType( m_clientDataItemsType );
|
||||
m_peer = control;
|
||||
|
||||
MacPostControlCreate(pos,size);
|
||||
|
||||
InsertItems( n , choices , 0 );
|
||||
|
||||
// Needed because it is a wxControlWithItems
|
||||
SetInitialSize( size );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxCheckListBox functions
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
bool wxCheckListBox::IsChecked(unsigned int item) const
|
||||
{
|
||||
wxCHECK_MSG( IsValid(item), false,
|
||||
wxT("invalid index in wxCheckListBox::IsChecked") );
|
||||
|
||||
return GetPeer()->MacIsChecked( item );
|
||||
}
|
||||
|
||||
void wxCheckListBox::Check(unsigned int item, bool check)
|
||||
{
|
||||
wxCHECK_RET( IsValid(item),
|
||||
wxT("invalid index in wxCheckListBox::Check") );
|
||||
|
||||
bool isChecked = GetPeer()->MacIsChecked( item );
|
||||
if ( check != isChecked )
|
||||
{
|
||||
GetPeer()->MacCheck( item , check );
|
||||
}
|
||||
}
|
||||
|
||||
wxMacCheckListControl* wxCheckListBox::GetPeer() const
|
||||
{
|
||||
wxMacDataBrowserCheckListControl *lb = wxDynamicCast(m_peer,wxMacDataBrowserCheckListControl);
|
||||
return lb ? wx_static_cast(wxMacCheckListControl*,lb) : 0 ;
|
||||
}
|
||||
|
||||
const short kCheckboxColumnId = 1026;
|
||||
|
||||
wxMacDataBrowserCheckListControl::wxMacDataBrowserCheckListControl( wxListBox *peer, const wxPoint& pos, const wxSize& size, long style)
|
||||
: wxMacDataBrowserListControl( peer, pos, size, style )
|
||||
{
|
||||
OSStatus err = noErr;
|
||||
|
||||
DataBrowserListViewColumnDesc columnDesc;
|
||||
columnDesc.headerBtnDesc.titleOffset = 0;
|
||||
columnDesc.headerBtnDesc.version = kDataBrowserListViewLatestHeaderDesc;
|
||||
|
||||
columnDesc.headerBtnDesc.btnFontStyle.flags =
|
||||
kControlUseFontMask | kControlUseJustMask;
|
||||
|
||||
columnDesc.headerBtnDesc.btnContentInfo.contentType = kControlNoContent;
|
||||
columnDesc.headerBtnDesc.btnFontStyle.just = teFlushDefault;
|
||||
columnDesc.headerBtnDesc.btnFontStyle.font = kControlFontViewSystemFont;
|
||||
columnDesc.headerBtnDesc.btnFontStyle.style = normal;
|
||||
columnDesc.headerBtnDesc.titleString = NULL;
|
||||
|
||||
columnDesc.headerBtnDesc.minimumWidth = 30;
|
||||
columnDesc.headerBtnDesc.maximumWidth = 30;
|
||||
|
||||
columnDesc.propertyDesc.propertyID = kCheckboxColumnId;
|
||||
columnDesc.propertyDesc.propertyType = kDataBrowserCheckboxType;
|
||||
columnDesc.propertyDesc.propertyFlags =
|
||||
kDataBrowserPropertyIsMutable
|
||||
| kDataBrowserTableViewSelectionColumn
|
||||
| kDataBrowserDefaultPropertyFlags;
|
||||
|
||||
err = AddColumn( &columnDesc, 0 );
|
||||
verify_noerr( err );
|
||||
}
|
||||
|
||||
wxMacDataBrowserCheckListControl::~wxMacDataBrowserCheckListControl()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
class wxMacCheckListBoxItem : public wxMacListBoxItem
|
||||
{
|
||||
public :
|
||||
wxMacCheckListBoxItem()
|
||||
{
|
||||
m_isChecked = false;
|
||||
}
|
||||
|
||||
virtual ~wxMacCheckListBoxItem()
|
||||
{
|
||||
}
|
||||
|
||||
virtual OSStatus GetSetData( wxMacDataItemBrowserControl *owner ,
|
||||
DataBrowserPropertyID property,
|
||||
DataBrowserItemDataRef itemData,
|
||||
bool changeValue )
|
||||
{
|
||||
OSStatus err = errDataBrowserPropertyNotSupported;
|
||||
|
||||
wxCheckListBox *checklist = wxDynamicCast( owner->GetWXPeer() , wxCheckListBox );
|
||||
wxCHECK_MSG( checklist != NULL , errDataBrowserPropertyNotSupported , wxT("wxCheckListBox expected"));
|
||||
|
||||
if ( !changeValue )
|
||||
{
|
||||
switch (property)
|
||||
{
|
||||
case kCheckboxColumnId:
|
||||
verify_noerr(SetDataBrowserItemDataButtonValue( itemData, m_isChecked ? kThemeButtonOn : kThemeButtonOff ));
|
||||
err = noErr;
|
||||
break;
|
||||
|
||||
case kDataBrowserItemIsEditableProperty:
|
||||
verify_noerr(SetDataBrowserItemDataBooleanValue( itemData, true ));
|
||||
err = noErr;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (property)
|
||||
{
|
||||
case kCheckboxColumnId:
|
||||
{
|
||||
// we have to change this behind the back, since Check() would be triggering another update round
|
||||
bool newVal = !m_isChecked;
|
||||
verify_noerr(SetDataBrowserItemDataButtonValue( itemData, newVal ? kThemeButtonOn : kThemeButtonOff ));
|
||||
m_isChecked = newVal;
|
||||
err = noErr;
|
||||
|
||||
wxCommandEvent event( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, checklist->GetId() );
|
||||
event.SetInt( owner->GetLineFromItem( this ) );
|
||||
event.SetEventObject( checklist );
|
||||
checklist->HandleWindowEvent( event );
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( err == errDataBrowserPropertyNotSupported )
|
||||
err = wxMacListBoxItem::GetSetData( owner , property, itemData , changeValue);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
void Check( bool check )
|
||||
{
|
||||
m_isChecked = check;
|
||||
}
|
||||
bool IsChecked() const
|
||||
{
|
||||
return m_isChecked;
|
||||
}
|
||||
|
||||
protected :
|
||||
bool m_isChecked;
|
||||
};
|
||||
|
||||
wxMacDataItem* wxMacDataBrowserCheckListControl::CreateItem()
|
||||
{
|
||||
return new wxMacCheckListBoxItem();
|
||||
}
|
||||
|
||||
void wxMacDataBrowserCheckListControl::MacCheck( unsigned int n, bool bCheck)
|
||||
{
|
||||
wxMacCheckListBoxItem* item = wx_static_cast(wxMacCheckListBoxItem*, GetItemFromLine( n) );
|
||||
item->Check( bCheck);
|
||||
UpdateItem(wxMacDataBrowserRootContainer, item , kCheckboxColumnId);
|
||||
}
|
||||
|
||||
bool wxMacDataBrowserCheckListControl::MacIsChecked( unsigned int n) const
|
||||
{
|
||||
wxMacCheckListBoxItem * item = wx_static_cast( wxMacCheckListBoxItem*, GetItemFromLine( n ) );
|
||||
return item->IsChecked();
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif // wxUSE_CHECKLISTBOX
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/choice.cpp
|
||||
// Name: src/osx/carbon/choice.cpp
|
||||
// Purpose: wxChoice
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -20,289 +20,47 @@
|
||||
#include "wx/dcclient.h"
|
||||
#endif
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
extern MenuHandle NewUniqueMenu() ;
|
||||
// adapt the number offset (mac menu are 1 based)
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxChoice, wxControlWithItems)
|
||||
|
||||
|
||||
wxChoice::~wxChoice()
|
||||
class wxMacChoiceCarbonControl : public wxMacControl
|
||||
{
|
||||
if ( HasClientObjectData() )
|
||||
public :
|
||||
wxMacChoiceCarbonControl( wxWindowMac* peer ) : wxMacControl( peer )
|
||||
{
|
||||
unsigned int i, max = GetCount();
|
||||
|
||||
for ( i = 0; i < max; ++i )
|
||||
delete GetClientObject( i );
|
||||
}
|
||||
|
||||
void SetValue(wxInt32 v)
|
||||
{
|
||||
wxMacControl::SetValue( v + 1 );
|
||||
}
|
||||
|
||||
wxInt32 GetValue()
|
||||
{
|
||||
return wxMacControl::GetValue() - 1;
|
||||
}
|
||||
};
|
||||
|
||||
// DeleteMenu( m_macPopUpMenuId ) ;
|
||||
// DisposeMenu( m_macPopUpMenuHandle ) ;
|
||||
}
|
||||
|
||||
bool wxChoice::Create(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
const wxArrayString& choices,
|
||||
long style,
|
||||
const wxValidator& validator,
|
||||
const wxString& name )
|
||||
wxWidgetImplType* wxWidgetImpl::CreateChoice( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
wxMenu* menu,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStylew)
|
||||
{
|
||||
if ( !Create( parent, id, pos, size, 0, NULL, style, validator, name ) )
|
||||
return false;
|
||||
Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size );
|
||||
|
||||
Append( choices );
|
||||
|
||||
if ( !choices.empty() )
|
||||
SetSelection( 0 );
|
||||
|
||||
SetInitialSize( size );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool wxChoice::Create(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
int n,
|
||||
const wxString choices[],
|
||||
long style,
|
||||
const wxValidator& validator,
|
||||
const wxString& name )
|
||||
{
|
||||
m_macIsUserPane = false;
|
||||
|
||||
if ( !wxChoiceBase::Create( parent, id, pos, size, style, validator, name ) )
|
||||
return false;
|
||||
|
||||
Rect bounds = wxMacGetBoundsForControl( this , pos , size );
|
||||
|
||||
m_peer = new wxMacControl( this ) ;
|
||||
wxMacControl* peer = new wxMacChoiceCarbonControl( wxpeer ) ;
|
||||
OSStatus err = CreatePopupButtonControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()) , &bounds , CFSTR("") ,
|
||||
-12345 , false /* no variable width */ , 0 , 0 , 0 , m_peer->GetControlRefAddr() );
|
||||
-12345 , false /* no variable width */ , 0 , 0 , 0 , peer->GetControlRefAddr() );
|
||||
verify_noerr( err );
|
||||
|
||||
m_macPopUpMenuHandle = NewUniqueMenu() ;
|
||||
m_peer->SetData<MenuHandle>( kControlNoPart , kControlPopupButtonMenuHandleTag , (MenuHandle) m_macPopUpMenuHandle ) ;
|
||||
m_peer->SetValueAndRange( n > 0 ? 1 : 0 , 0 , 0 );
|
||||
MacPostControlCreate( pos, size );
|
||||
|
||||
#if !wxUSE_STL
|
||||
if ( style & wxCB_SORT )
|
||||
// autosort
|
||||
m_strings = wxArrayString( 1 );
|
||||
#endif
|
||||
|
||||
Append(n, choices);
|
||||
|
||||
// Set the first item as being selected
|
||||
if (n > 0)
|
||||
SetSelection( 0 );
|
||||
|
||||
// Needed because it is a wxControlWithItems
|
||||
SetInitialSize( size );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// adding/deleting items to/from the list
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
int wxChoice::DoInsertItems(const wxArrayStringsAdapter & items,
|
||||
unsigned int pos,
|
||||
void **clientData, wxClientDataType type)
|
||||
{
|
||||
const unsigned int numItems = items.GetCount();
|
||||
for( unsigned int i = 0; i < numItems; ++i, ++pos )
|
||||
{
|
||||
unsigned int idx;
|
||||
|
||||
#if wxUSE_STL
|
||||
if ( IsSorted() )
|
||||
{
|
||||
wxArrayString::iterator
|
||||
insertPoint = std::lower_bound( m_strings.begin(), m_strings.end(), items[i] );
|
||||
idx = insertPoint - m_strings.begin();
|
||||
m_strings.insert( insertPoint, items[i] );
|
||||
}
|
||||
else
|
||||
#endif // wxUSE_STL
|
||||
{
|
||||
idx = pos;
|
||||
m_strings.Insert( items[i], idx );
|
||||
}
|
||||
|
||||
UMAInsertMenuItem(MAC_WXHMENU( m_macPopUpMenuHandle ),
|
||||
items[i],
|
||||
GetFont().GetEncoding(),
|
||||
idx);
|
||||
m_datas.Insert( NULL, idx );
|
||||
AssignNewItemClientData(idx, clientData, i, type);
|
||||
}
|
||||
|
||||
m_peer->SetMaximum( GetCount() );
|
||||
|
||||
return pos - 1;
|
||||
}
|
||||
|
||||
void wxChoice::DoDeleteOneItem(unsigned int n)
|
||||
{
|
||||
wxCHECK_RET( IsValid(n) , wxT("wxChoice::Delete: invalid index") );
|
||||
|
||||
if ( HasClientObjectData() )
|
||||
delete GetClientObject( n );
|
||||
|
||||
::DeleteMenuItem( MAC_WXHMENU(m_macPopUpMenuHandle) , n + 1 ) ;
|
||||
m_strings.RemoveAt( n ) ;
|
||||
m_datas.RemoveAt( n ) ;
|
||||
m_peer->SetMaximum( GetCount() ) ;
|
||||
}
|
||||
|
||||
void wxChoice::DoClear()
|
||||
{
|
||||
for ( unsigned int i = 0 ; i < GetCount() ; i++ )
|
||||
{
|
||||
::DeleteMenuItem( MAC_WXHMENU(m_macPopUpMenuHandle) , 1 ) ;
|
||||
}
|
||||
|
||||
m_strings.Empty() ;
|
||||
m_datas.Empty() ;
|
||||
m_peer->SetMaximum( 0 ) ;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// selection
|
||||
// ----------------------------------------------------------------------------
|
||||
int wxChoice::GetSelection() const
|
||||
{
|
||||
return m_peer->GetValue() - 1 ;
|
||||
}
|
||||
|
||||
void wxChoice::SetSelection( int n )
|
||||
{
|
||||
m_peer->SetValue( n + 1 ) ;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// string list functions
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
unsigned int wxChoice::GetCount() const
|
||||
{
|
||||
return m_strings.GetCount() ;
|
||||
}
|
||||
|
||||
int wxChoice::FindString( const wxString& s, bool bCase ) const
|
||||
{
|
||||
#if !wxUSE_STL
|
||||
// Avoid assert for non-default args passed to sorted array Index
|
||||
if ( IsSorted() )
|
||||
bCase = true;
|
||||
#endif
|
||||
|
||||
return m_strings.Index( s , bCase ) ;
|
||||
}
|
||||
|
||||
void wxChoice::SetString(unsigned int n, const wxString& s)
|
||||
{
|
||||
wxCHECK_RET( IsValid(n), wxT("wxChoice::SetString(): invalid index") );
|
||||
|
||||
m_strings[n] = s ;
|
||||
|
||||
// apple menu pos is 1-based
|
||||
UMASetMenuItemText( MAC_WXHMENU(m_macPopUpMenuHandle) , n + 1 , s , wxFont::GetDefaultEncoding() ) ;
|
||||
}
|
||||
|
||||
wxString wxChoice::GetString(unsigned int n) const
|
||||
{
|
||||
wxCHECK_MSG( IsValid(n), wxEmptyString, wxT("wxChoice::GetString(): invalid index") );
|
||||
|
||||
return m_strings[n] ;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// client data
|
||||
// ----------------------------------------------------------------------------
|
||||
void wxChoice::DoSetItemClientData(unsigned int n, void* clientData)
|
||||
{
|
||||
wxCHECK_RET( IsValid(n), wxT("wxChoice::DoSetItemClientData: invalid index") );
|
||||
|
||||
m_datas[n] = (char*)clientData ;
|
||||
}
|
||||
|
||||
void * wxChoice::DoGetItemClientData(unsigned int n) const
|
||||
{
|
||||
wxCHECK_MSG( IsValid(n), NULL, wxT("wxChoice::DoGetClientData: invalid index") );
|
||||
|
||||
return (void *)m_datas[n];
|
||||
}
|
||||
|
||||
wxInt32 wxChoice::MacControlHit( WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTREF WXUNUSED(event) )
|
||||
{
|
||||
wxCommandEvent event( wxEVT_COMMAND_CHOICE_SELECTED, m_windowId );
|
||||
|
||||
// actually n should be made sure by the os to be a valid selection, but ...
|
||||
int n = GetSelection();
|
||||
if ( n > -1 )
|
||||
{
|
||||
event.SetInt( n );
|
||||
event.SetString( GetStringSelection() );
|
||||
event.SetEventObject( this );
|
||||
|
||||
if ( HasClientObjectData() )
|
||||
event.SetClientObject( GetClientObject( n ) );
|
||||
else if ( HasClientUntypedData() )
|
||||
event.SetClientData( GetClientData( n ) );
|
||||
|
||||
ProcessCommand( event );
|
||||
}
|
||||
|
||||
return noErr ;
|
||||
}
|
||||
|
||||
wxSize wxChoice::DoGetBestSize() const
|
||||
{
|
||||
int lbWidth = GetCount() > 0 ? 20 : 100; // some defaults
|
||||
int lbHeight = 20;
|
||||
int wLine;
|
||||
|
||||
SInt32 metric ;
|
||||
|
||||
GetThemeMetric( kThemeMetricPopupButtonHeight , &metric );
|
||||
lbHeight = metric ;
|
||||
|
||||
{
|
||||
wxClientDC dc(const_cast<wxChoice*>(this));
|
||||
|
||||
// Find the widest line
|
||||
for(unsigned int i = 0; i < GetCount(); i++)
|
||||
{
|
||||
wxString str(GetString(i));
|
||||
|
||||
wxCoord width, height ;
|
||||
dc.GetTextExtent( str , &width, &height);
|
||||
wLine = width ;
|
||||
|
||||
lbWidth = wxMax( lbWidth, wLine ) ;
|
||||
}
|
||||
|
||||
// Add room for the popup arrow
|
||||
lbWidth += 2 * lbHeight ;
|
||||
|
||||
wxCoord width, height ;
|
||||
dc.GetTextExtent( wxT("X"), &width, &height);
|
||||
int cx = width ;
|
||||
lbHeight += 4;
|
||||
|
||||
lbWidth += cx ;
|
||||
}
|
||||
|
||||
return wxSize( lbWidth, lbHeight );
|
||||
peer->SetData<MenuHandle>( kControlNoPart , kControlPopupButtonMenuHandleTag , (MenuHandle) menu->GetHMenu() ) ;
|
||||
return peer;
|
||||
}
|
||||
|
||||
#endif // wxUSE_CHOICE
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/clipbrd.cpp
|
||||
// Name: src/osx/carbon/clipbrd.cpp
|
||||
// Purpose: Clipboard functionality
|
||||
// Author: Stefan Csomor;
|
||||
// Generalized clipboard implementation by Matthew Flatt
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/colordlg.mm
|
||||
// Name: src/osx/carbon/colordlg.mm
|
||||
// Purpose: wxColourDialog class. NOTE: you can use the generic class
|
||||
// if you wish, instead of implementing this.
|
||||
// Author: Ryan Norton
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/combobox.cpp
|
||||
// Name: src/osx/carbon/combobox.cpp
|
||||
// Purpose: wxComboBox class
|
||||
// Author: Stefan Csomor, Dan "Bud" Keith (composite combobox)
|
||||
// Modified by:
|
||||
@ -23,7 +23,7 @@
|
||||
#include "wx/textctrl.h"
|
||||
#endif
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxComboBox, wxControl)
|
||||
|
||||
@ -34,17 +34,6 @@ BEGIN_EVENT_TABLE(wxComboBox, wxControl)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
|
||||
static int nextPopUpMenuId = 1000 ;
|
||||
|
||||
MenuHandle NewUniqueMenu()
|
||||
{
|
||||
MenuHandle handle = UMANewMenu(nextPopUpMenuId, wxString(wxT("Menu")), wxFont::GetDefaultEncoding() );
|
||||
nextPopUpMenuId++ ;
|
||||
|
||||
return handle ;
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// constants
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -651,7 +640,7 @@ bool wxComboBox::CanRedo() const
|
||||
return false;
|
||||
}
|
||||
|
||||
wxInt32 wxComboBox::MacControlHit( WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTREF WXUNUSED(event) )
|
||||
bool wxComboBox::HandleClicked( double timestampsec )
|
||||
{
|
||||
/*
|
||||
For consistency with other platforms, clicking in the text area does not constitute a selection
|
||||
@ -662,7 +651,7 @@ wxInt32 wxComboBox::MacControlHit( WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENT
|
||||
ProcessCommand(event);
|
||||
*/
|
||||
|
||||
return noErr ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
#endif // wxUSE_COMBOBOX
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/combobxc.cpp
|
||||
// Name: src/osx/carbon/combobxc.cpp
|
||||
// Purpose: wxComboBox class using HIView ComboBox
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -219,14 +219,8 @@ wxComboBox::~wxComboBox()
|
||||
// delete the controls now, don't leave them alive even though they would
|
||||
// still be eventually deleted by our parent - but it will be too late, the
|
||||
// user code expects them to be gone now
|
||||
if (m_text != NULL) {
|
||||
delete m_text;
|
||||
m_text = NULL;
|
||||
}
|
||||
if (m_choice != NULL) {
|
||||
delete m_choice;
|
||||
m_choice = NULL;
|
||||
}
|
||||
wxDELETE( m_text );
|
||||
wxDELETE( m_choice );
|
||||
}
|
||||
|
||||
|
||||
@ -782,12 +776,12 @@ bool wxComboBox::CanRedo() const
|
||||
#endif
|
||||
}
|
||||
|
||||
wxInt32 wxComboBox::MacControlHit(WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTREF WXUNUSED(event) )
|
||||
bool wxComboBox::HandleClicked( double timestampsec )
|
||||
{
|
||||
wxCommandEvent event(wxEVT_COMMAND_COMBOBOX_SELECTED, m_windowId );
|
||||
event.SetInt(GetSelection());
|
||||
event.SetEventObject(this);
|
||||
event.SetString(GetStringSelection());
|
||||
ProcessCommand(event);
|
||||
return noErr;
|
||||
return true;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/control.cpp
|
||||
// Name: src/osx/carbon/control.cpp
|
||||
// Purpose: wxControl class
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -31,7 +31,6 @@
|
||||
#include "wx/tabctrl.h"
|
||||
#include "wx/spinbutt.h"
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
IMPLEMENT_ABSTRACT_CLASS(wxControl, wxWindow)
|
||||
@ -86,6 +85,7 @@ void wxControl::OnKeyDown( wxKeyEvent &WXUNUSED(event) )
|
||||
if ( m_peer == NULL || !m_peer->IsOk() )
|
||||
return;
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
UInt32 keyCode, modifiers;
|
||||
char charCode;
|
||||
|
||||
@ -94,4 +94,7 @@ void wxControl::OnKeyDown( wxKeyEvent &WXUNUSED(event) )
|
||||
GetEventParameter( (EventRef)wxTheApp->MacGetCurrentEvent(), kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modifiers );
|
||||
|
||||
m_peer->HandleKey( keyCode, charCode, modifiers );
|
||||
#else
|
||||
// TODO
|
||||
#endif
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/cursor.cpp
|
||||
// Name: src/osx/carbon/cursor.cpp
|
||||
// Purpose: wxCursor class
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/databrow.cpp
|
||||
// Name: src/osx/carbon/databrow.cpp
|
||||
// Purpose: Classes and functions for the Carbon data browser
|
||||
// Author:
|
||||
// Modified by:
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/dataobj.cpp
|
||||
// Name: src/osx/carbon/dataobj.cpp
|
||||
// Purpose: implementation of wxDataObject class
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -27,7 +27,7 @@
|
||||
#include "wx/metafile.h"
|
||||
#include "wx/tokenzr.h"
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
#ifdef __DARWIN__
|
||||
#include <QuickTime/QuickTime.h>
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/datavgen.cpp
|
||||
// Name: src/osx/carbon/datavgen.cpp
|
||||
// Purpose: wxDataViewCtrl native mac implementation
|
||||
// Author:
|
||||
// Id: $Id$
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/dcclient.cpp
|
||||
// Name: src/osx/carbon/dcclient.cpp
|
||||
// Purpose: wxClientDCImpl class
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -96,7 +96,6 @@ void wxWindowDCImpl::DoGetSize( int* width, int* height ) const
|
||||
*height = m_height;
|
||||
}
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
wxBitmap wxWindowDCImpl::DoGetAsBitmap(const wxRect *subrect) const
|
||||
{
|
||||
// wxScreenDC is derived from wxWindowDC, so a screen dc will
|
||||
@ -104,6 +103,7 @@ wxBitmap wxWindowDCImpl::DoGetAsBitmap(const wxRect *subrect) const
|
||||
if (!m_window)
|
||||
return wxNullBitmap;
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
ControlRef handle = (ControlRef) m_window->GetHandle();
|
||||
if ( !handle )
|
||||
return wxNullBitmap;
|
||||
@ -135,10 +135,11 @@ wxBitmap wxWindowDCImpl::DoGetAsBitmap(const wxRect *subrect) const
|
||||
CGContextDrawImage( context, rect, image );
|
||||
|
||||
CGContextRestoreGState(context);
|
||||
|
||||
return bmp;
|
||||
}
|
||||
#else
|
||||
return wxNullBitmap;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* wxClientDCImpl
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/dcprint.cpp
|
||||
// Name: src/osx/carbon/dcprint.cpp
|
||||
// Purpose: wxPrinterDC class
|
||||
// Author: Julian Smart
|
||||
// Modified by:
|
||||
@ -25,7 +25,7 @@
|
||||
#include "wx/math.h"
|
||||
#endif
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
#include "wx/osx/private/print.h"
|
||||
#include "wx/osx/carbon/dcprint.h"
|
||||
#include "wx/graphics.h"
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/dcscreen.cpp
|
||||
// Name: src/osx/carbon/dcscreen.cpp
|
||||
// Purpose: wxScreenDC class
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/dialog.cpp
|
||||
// Name: src/osx/carbon/dialog.cpp
|
||||
// Purpose: wxDialog class
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -20,112 +20,10 @@
|
||||
#include "wx/settings.h"
|
||||
#endif // WX_PRECOMP
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
#include "wx/evtloop.h"
|
||||
|
||||
|
||||
// Lists to keep track of windows, so we can disable/enable them
|
||||
// for modal dialogs
|
||||
wxList wxModalDialogs;
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxDialog, wxTopLevelWindow)
|
||||
|
||||
void wxDialog::Init()
|
||||
{
|
||||
m_isModalStyle = false;
|
||||
}
|
||||
|
||||
bool wxDialog::Create( wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxString& title,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxString& name )
|
||||
{
|
||||
SetExtraStyle( GetExtraStyle() | wxTOPLEVEL_EX_DIALOG );
|
||||
|
||||
// All dialogs should really have this style...
|
||||
style |= wxTAB_TRAVERSAL;
|
||||
|
||||
// ...but not these styles
|
||||
style &= ~(wxYES | wxOK | wxNO); // | wxCANCEL
|
||||
|
||||
if ( !wxTopLevelWindow::Create( parent, id, title, pos, size, style, name ) )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void wxDialog::SetModal( bool flag )
|
||||
{
|
||||
if ( flag )
|
||||
{
|
||||
m_isModalStyle = true;
|
||||
|
||||
SetWindowModality( (WindowRef)GetWXWindow(), kWindowModalityAppModal, NULL ) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_isModalStyle = false;
|
||||
}
|
||||
}
|
||||
|
||||
wxDialog::~wxDialog()
|
||||
{
|
||||
m_isBeingDeleted = true;
|
||||
|
||||
// if the dialog is modal, this will end its event loop
|
||||
Show(false);
|
||||
}
|
||||
|
||||
// On mac command-stop does the same thing as Esc, let the base class know
|
||||
// about it
|
||||
bool wxDialog::IsEscapeKey(const wxKeyEvent& event)
|
||||
{
|
||||
if ( event.GetKeyCode() == '.' && event.GetModifiers() == wxMOD_CMD )
|
||||
return true;
|
||||
|
||||
return wxDialogBase::IsEscapeKey(event);
|
||||
}
|
||||
|
||||
bool wxDialog::IsModal() const
|
||||
{
|
||||
return wxModalDialogs.Find((wxDialog *)this) != NULL; // const_cast
|
||||
// return m_isModalStyle;
|
||||
}
|
||||
|
||||
|
||||
bool wxDialog::Show(bool show)
|
||||
{
|
||||
if ( !wxDialogBase::Show(show) )
|
||||
// nothing to do
|
||||
return false;
|
||||
|
||||
if (show && CanDoLayoutAdaptation())
|
||||
DoLayoutAdaptation();
|
||||
|
||||
if ( show )
|
||||
// usually will result in TransferDataToWindow() being called
|
||||
InitDialog();
|
||||
|
||||
HiliteMenu(0);
|
||||
|
||||
if ( m_isModalStyle )
|
||||
{
|
||||
if ( show )
|
||||
{
|
||||
DoShowModal();
|
||||
}
|
||||
else // end of modal dialog
|
||||
{
|
||||
// this will cause IsModalShowing() return false and our local
|
||||
// message loop will terminate
|
||||
wxModalDialogs.DeleteObject(this);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
extern wxList wxModalDialogs;
|
||||
|
||||
void wxDialog::DoShowModal()
|
||||
{
|
||||
@ -149,10 +47,16 @@ void wxDialog::DoShowModal()
|
||||
}
|
||||
BeginAppModalStateForWindow(windowRef) ;
|
||||
|
||||
while ( IsModal() )
|
||||
wxEventLoop * const
|
||||
loop = wx_static_cast(wxEventLoop *, wxEventLoop::GetActive());
|
||||
|
||||
|
||||
wxASSERT_MSG( loop , wxT("No Event Loop in place") );
|
||||
|
||||
if ( loop )
|
||||
{
|
||||
wxTheApp->MacDoOneEvent() ;
|
||||
// calls process idle itself
|
||||
while ( IsModal() )
|
||||
loop->Dispatch();
|
||||
}
|
||||
|
||||
EndAppModalStateForWindow(windowRef) ;
|
||||
@ -160,29 +64,4 @@ void wxDialog::DoShowModal()
|
||||
{
|
||||
SetWindowGroupParent( windowGroup , formerParentGroup );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Replacement for Show(true) for modal dialogs - returns return code
|
||||
int wxDialog::ShowModal()
|
||||
{
|
||||
if ( !m_isModalStyle )
|
||||
SetModal(true);
|
||||
|
||||
if ( IsShown() )
|
||||
DoShowModal();
|
||||
else
|
||||
Show(true);
|
||||
|
||||
return GetReturnCode();
|
||||
}
|
||||
|
||||
// NB: this function (surprizingly) may be called for both modal and modeless
|
||||
// dialogs and should work for both of them
|
||||
void wxDialog::EndModal(int retCode)
|
||||
{
|
||||
SetReturnCode(retCode);
|
||||
Show(false);
|
||||
SetModal(false);
|
||||
}
|
||||
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/dirdlg.cpp
|
||||
// Name: src/osx/carbon/dirdlg.cpp
|
||||
// Purpose: wxDirDialog
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -25,12 +25,6 @@
|
||||
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
#ifdef __DARWIN__
|
||||
#include <Carbon/Carbon.h>
|
||||
#else
|
||||
#include <Navigation.h>
|
||||
#endif
|
||||
|
||||
IMPLEMENT_CLASS(wxDirDialog, wxDialog)
|
||||
|
||||
static pascal void NavEventProc(
|
||||
@ -64,15 +58,17 @@ static pascal void NavEventProc(
|
||||
wxDirDialog::wxDirDialog(wxWindow *parent,
|
||||
const wxString& message,
|
||||
const wxString& defaultPath,
|
||||
long WXUNUSED(style),
|
||||
long style,
|
||||
const wxPoint& WXUNUSED(pos),
|
||||
const wxSize& WXUNUSED(size),
|
||||
const wxString& WXUNUSED(name))
|
||||
{
|
||||
wxASSERT_MSG( NavServicesAvailable() , wxT("Navigation Services are not running") ) ;
|
||||
m_message = message;
|
||||
m_parent = parent;
|
||||
m_path = defaultPath;
|
||||
|
||||
SetMessage( message );
|
||||
SetWindowStyle(style);
|
||||
SetPath(defaultPath);
|
||||
}
|
||||
|
||||
int wxDirDialog::ShowModal()
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/dnd.cpp
|
||||
// Name: src/osx/carbon/dnd.cpp
|
||||
// Purpose: wxDropTarget, wxDropSource implementations
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/evtloop.cpp
|
||||
// Name: src/osx/carbon/evtloop.cpp
|
||||
// Purpose: implementation of wxEventLoop for wxMac
|
||||
// Author: Vadim Zeitlin
|
||||
// Modified by:
|
||||
@ -30,47 +30,17 @@
|
||||
#include "wx/app.h"
|
||||
#endif // WX_PRECOMP
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
#include <Carbon/Carbon.h>
|
||||
#else
|
||||
#include <CoreFoundation/CoreFoundation.h>
|
||||
#endif
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
// ============================================================================
|
||||
// wxEventLoop implementation
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// high level functions for RunApplicationEventLoop() case
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
#if wxOSX_USE_RUN_APP_EVENT_LOOP
|
||||
|
||||
int wxGUIEventLoop::Run()
|
||||
wxGUIEventLoop::wxGUIEventLoop()
|
||||
{
|
||||
wxEventLoopActivator activate(this);
|
||||
|
||||
RunApplicationEventLoop();
|
||||
|
||||
return m_exitcode;
|
||||
m_sleepTime = kEventDurationNoWait;
|
||||
}
|
||||
|
||||
void wxGUIEventLoop::Exit(int rc)
|
||||
{
|
||||
m_exitcode = rc;
|
||||
|
||||
QuitApplicationEventLoop();
|
||||
|
||||
OnExit();
|
||||
}
|
||||
|
||||
#else // manual event loop
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// functions only used by wxEventLoopManual-based implementation
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void wxGUIEventLoop::WakeUp()
|
||||
{
|
||||
extern void wxMacWakeUp();
|
||||
@ -78,15 +48,8 @@ void wxGUIEventLoop::WakeUp()
|
||||
wxMacWakeUp();
|
||||
}
|
||||
|
||||
#endif // high/low-level event loop
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// low level functions used in both cases
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
bool wxGUIEventLoop::Pending() const
|
||||
{
|
||||
#if wxOSX_USE_CARBON
|
||||
EventRef theEvent;
|
||||
|
||||
return ReceiveNextEvent
|
||||
@ -97,9 +60,6 @@ bool wxGUIEventLoop::Pending() const
|
||||
false, // don't remove the event from queue
|
||||
&theEvent
|
||||
) == noErr;
|
||||
#else
|
||||
return true; // TODO
|
||||
#endif
|
||||
}
|
||||
|
||||
bool wxGUIEventLoop::Dispatch()
|
||||
@ -107,13 +67,45 @@ bool wxGUIEventLoop::Dispatch()
|
||||
if ( !wxTheApp )
|
||||
return false;
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
// TODO: we probably should do the dispatching directly from here but for
|
||||
// now it's easier to forward to wxApp which has all the code to do
|
||||
// it
|
||||
wxTheApp->MacDoOneEvent();
|
||||
#else
|
||||
CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, 0);
|
||||
wxMacAutoreleasePool autoreleasepool;
|
||||
|
||||
EventRef theEvent;
|
||||
|
||||
OSStatus status = ReceiveNextEvent(0, NULL, m_sleepTime, true, &theEvent) ;
|
||||
|
||||
switch (status)
|
||||
{
|
||||
case eventLoopTimedOutErr :
|
||||
if ( wxTheApp->ProcessIdle() )
|
||||
m_sleepTime = kEventDurationNoWait ;
|
||||
else
|
||||
{
|
||||
m_sleepTime = kEventDurationSecond;
|
||||
#if wxUSE_THREADS
|
||||
wxMutexGuiLeave();
|
||||
wxMilliSleep(20);
|
||||
wxMutexGuiEnter();
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
||||
case eventLoopQuitErr :
|
||||
// according to QA1061 this may also occur
|
||||
// when a WakeUp Process is executed
|
||||
break;
|
||||
|
||||
default:
|
||||
if ( wxTheApp )
|
||||
wxTheApp->MacSetCurrentEvent( theEvent, NULL );
|
||||
|
||||
OSStatus status = SendEventToEventTarget(theEvent, GetEventDispatcherTarget());
|
||||
if (status == eventNotHandledErr && wxTheApp)
|
||||
wxTheApp->MacHandleUnhandledEvent(theEvent);
|
||||
|
||||
ReleaseEvent( theEvent );
|
||||
m_sleepTime = kEventDurationNoWait ;
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/filedlg.cpp
|
||||
// Name: src/osx/carbon/filedlg.cpp
|
||||
// Purpose: wxFileDialog
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/font.cpp
|
||||
// Name: src/osx/carbon/font.cpp
|
||||
// Purpose: wxFont class
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -31,10 +31,6 @@
|
||||
#include "wx/osx/private.h"
|
||||
#endif
|
||||
|
||||
#ifndef __DARWIN__
|
||||
#include <ATSUnicode.h>
|
||||
#endif
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
@ -739,6 +735,7 @@ bool wxFont::MacCreateFromCTFontDescriptor( const void * ctFontDescriptor , int
|
||||
|
||||
#endif
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
bool wxFont::MacCreateFromThemeFont(wxUint16 themeFontID)
|
||||
{
|
||||
#if wxOSX_USE_CORE_TEXT
|
||||
@ -762,6 +759,7 @@ bool wxFont::MacCreateFromThemeFont(wxUint16 themeFontID)
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
wxFont::~wxFont()
|
||||
{
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/fontdlg.cpp
|
||||
// Name: src/osx/carbon/fontdlg.cpp
|
||||
// Purpose: wxFontDialog class for carbon 10.2+.
|
||||
// Author: Ryan Norton
|
||||
// Modified by:
|
||||
@ -46,12 +46,14 @@
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxFontDialog, wxDialog)
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// wxFontDialog
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
|
||||
static const EventTypeSpec eventList[] =
|
||||
{
|
||||
{ kEventClassFont, kEventFontSelection } ,
|
||||
@ -191,6 +193,7 @@ wxMacCarbonFontPanelHandler(EventHandlerCallRef WXUNUSED(nextHandler),
|
||||
}
|
||||
|
||||
DEFINE_ONE_SHOT_HANDLER_GETTER( wxMacCarbonFontPanelHandler )
|
||||
#endif
|
||||
|
||||
wxFontDialog::wxFontDialog()
|
||||
{
|
||||
@ -213,6 +216,8 @@ bool wxFontDialog::Create(wxWindow *WXUNUSED(parent), const wxFontData& data)
|
||||
|
||||
int wxFontDialog::ShowModal()
|
||||
{
|
||||
#if wxOSX_USE_CARBON
|
||||
|
||||
OSStatus err ;
|
||||
wxFont font = *wxNORMAL_FONT ;
|
||||
if ( m_fontData.m_initialFont.Ok() )
|
||||
@ -247,10 +252,12 @@ int wxFontDialog::ShowModal()
|
||||
|
||||
if ( !FPIsFontPanelVisible() )
|
||||
FPShowHideFontPanel();
|
||||
|
||||
#endif
|
||||
int retval = RunMixedFontDialog(this);
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
::RemoveEventHandler(handler);
|
||||
#endif
|
||||
|
||||
return retval ;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/fontdlgosx.cpp
|
||||
// Name: src/osx/carbon/fontdlgosx.cpp
|
||||
// Purpose: wxFontDialog class.
|
||||
// Author: Ryan Norton
|
||||
// Modified by:
|
||||
@ -42,7 +42,7 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <AppKit/AppKit.h>
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
@interface wxMacFontPanelAccView : NSView
|
||||
{
|
||||
@ -152,9 +152,11 @@ int RunMixedFontDialog(wxFontDialog* WXUNUSED(dialog))
|
||||
NSFontPanel* fontPanel = [NSFontPanel sharedFontPanel] ;
|
||||
|
||||
// adjust modality for carbon environment
|
||||
#if wxOSX_USE_CARBON
|
||||
WindowRef carbonWindowRef = (WindowRef)[fontPanel windowRef] ;
|
||||
SetWindowModality(carbonWindowRef, kWindowModalityAppModal , 0) ;
|
||||
SetWindowGroup(carbonWindowRef , GetWindowGroupOfClass(kMovableModalWindowClass));
|
||||
#endif
|
||||
|
||||
[fontPanel setFloatingPanel:NO] ;
|
||||
[[fontPanel standardWindowButton:NSWindowCloseButton] setEnabled:NO] ;
|
||||
@ -179,8 +181,10 @@ int RunMixedFontDialog(wxFontDialog* WXUNUSED(dialog))
|
||||
|
||||
// if we don't reenable it, FPShowHideFontPanel does not work
|
||||
[[fontPanel standardWindowButton:NSWindowCloseButton] setEnabled:YES] ;
|
||||
#if wxOSX_USE_CARBON
|
||||
if( FPIsFontPanelVisible())
|
||||
FPShowHideFontPanel() ;
|
||||
#endif
|
||||
|
||||
if ( [accessoryView closedWithOk])
|
||||
{
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/frame.cpp
|
||||
// Name: src/osx/carbon/frame.cpp
|
||||
// Purpose: wxFrame
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -24,14 +24,11 @@
|
||||
#include "wx/menuitem.h"
|
||||
#endif // WX_PRECOMP
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
BEGIN_EVENT_TABLE(wxFrame, wxFrameBase)
|
||||
EVT_ACTIVATE(wxFrame::OnActivate)
|
||||
// EVT_MENU_HIGHLIGHT_ALL(wxFrame::OnMenuHighlight)
|
||||
EVT_SYS_COLOUR_CHANGED(wxFrame::OnSysColourChanged)
|
||||
// EVT_IDLE(wxFrame::OnIdle)
|
||||
// EVT_CLOSE(wxFrame::OnCloseWindow)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxTopLevelWindow)
|
||||
@ -101,6 +98,7 @@ bool wxFrame::Enable(bool enable)
|
||||
if ( !wxWindow::Enable(enable) )
|
||||
return false;
|
||||
|
||||
#if wxUSE_MENUS
|
||||
if ( m_frameMenuBar && m_frameMenuBar == wxMenuBar::MacGetInstalledMenuBar() )
|
||||
{
|
||||
int iMaxMenu = m_frameMenuBar->GetMenuCount();
|
||||
@ -109,7 +107,7 @@ bool wxFrame::Enable(bool enable)
|
||||
m_frameMenuBar->EnableTop( i , enable ) ;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -198,6 +196,7 @@ void wxFrame::OnActivate(wxActivateEvent& event)
|
||||
|
||||
wxSetFocusToChild(parent, &m_winLastFocused);
|
||||
|
||||
#if wxUSE_MENUS
|
||||
if (m_frameMenuBar != NULL)
|
||||
{
|
||||
m_frameMenuBar->MacInstallMenuBar();
|
||||
@ -212,9 +211,21 @@ void wxFrame::OnActivate(wxActivateEvent& event)
|
||||
tlf->GetMenuBar()->MacInstallMenuBar();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void wxFrame::HandleResized( long timestamp )
|
||||
{
|
||||
// according to the other ports we handle this within the OS level
|
||||
// resize event, not within a wxSizeEvent
|
||||
|
||||
PositionBars();
|
||||
|
||||
wxNonOwnedWindow::HandleResized( timestamp );
|
||||
}
|
||||
|
||||
#if wxUSE_MENUS
|
||||
void wxFrame::DetachMenuBar()
|
||||
{
|
||||
if ( m_frameMenuBar )
|
||||
@ -225,7 +236,11 @@ void wxFrame::DetachMenuBar()
|
||||
|
||||
void wxFrame::AttachMenuBar( wxMenuBar *menuBar )
|
||||
{
|
||||
#if wxOSX_USE_CARBON
|
||||
wxFrame* tlf = wxDynamicCast( wxNonOwnedWindow::GetFromWXWindow( (WXWindow) FrontNonFloatingWindow() ) , wxFrame );
|
||||
#else
|
||||
wxFrame* tlf = (wxFrame*) wxTheApp->GetTopWindow();
|
||||
#endif
|
||||
bool makeCurrent = false;
|
||||
|
||||
// if this is already the current menubar or we are the frontmost window
|
||||
@ -244,6 +259,7 @@ void wxFrame::AttachMenuBar( wxMenuBar *menuBar )
|
||||
m_frameMenuBar->MacInstallMenuBar();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void wxFrame::DoGetClientSize(int *x, int *y) const
|
||||
{
|
||||
|
@ -15,113 +15,81 @@
|
||||
|
||||
#include "wx/gauge.h"
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxGauge, wxControl)
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
|
||||
bool wxGauge::Create( wxWindow *parent,
|
||||
wxWindowID id,
|
||||
int range,
|
||||
const wxPoint& pos,
|
||||
const wxSize& s,
|
||||
long style,
|
||||
const wxValidator& validator,
|
||||
const wxString& name )
|
||||
class wxMacGaugeCarbonControl : public wxMacControl
|
||||
{
|
||||
m_macIsUserPane = false;
|
||||
|
||||
if ( !wxGaugeBase::Create( parent, id, range, pos, s, style & 0xE0FFFFFF, validator, name ) )
|
||||
return false;
|
||||
|
||||
wxSize size = s;
|
||||
|
||||
#if 0
|
||||
if (size.x == wxDefaultCoord && size.y == wxDefaultCoord)
|
||||
size = wxSize( 200 , 16 );
|
||||
#endif
|
||||
|
||||
Rect bounds = wxMacGetBoundsForControl( this, pos, size );
|
||||
m_peer = new wxMacControl( this );
|
||||
OSStatus err = CreateProgressBarControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds,
|
||||
GetValue(), 0, GetRange(), false /* not indeterminate */, m_peer->GetControlRefAddr() );
|
||||
verify_noerr( err );
|
||||
|
||||
if ( GetValue() == 0 )
|
||||
m_peer->SetData<Boolean>( kControlEntireControl, kControlProgressBarAnimatingTag, (Boolean)false );
|
||||
|
||||
MacPostControlCreate( pos, size );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void wxGauge::SetRange(int r)
|
||||
{
|
||||
// we are going via the base class in case there is
|
||||
// some change behind the values by it
|
||||
wxGaugeBase::SetRange( r ) ;
|
||||
if ( m_peer && m_peer->IsOk() ){
|
||||
// switch back to determinate mode if not there already
|
||||
if ( m_peer->GetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag ) != false )
|
||||
{
|
||||
m_peer->SetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag, (Boolean)false );
|
||||
}
|
||||
|
||||
m_peer->SetMaximum( GetRange() ) ;
|
||||
public :
|
||||
wxMacGaugeCarbonControl( wxWindowMac* peer ) : wxMacControl( peer )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
void wxGauge::SetValue(int pos)
|
||||
{
|
||||
// we are going via the base class in case there is
|
||||
// some change behind the values by it
|
||||
wxGaugeBase::SetValue( pos ) ;
|
||||
|
||||
if ( m_peer && m_peer->IsOk() )
|
||||
|
||||
void SetMaximum(wxInt32 v)
|
||||
{
|
||||
// switch back to determinate mode if not there already
|
||||
if ( m_peer->GetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag ) != false )
|
||||
if ( GetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag ) != false )
|
||||
{
|
||||
m_peer->SetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag, (Boolean)false );
|
||||
SetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag, (Boolean)false );
|
||||
}
|
||||
|
||||
m_peer->SetValue( GetValue() ) ;
|
||||
wxMacControl::SetMaximum( v ) ;
|
||||
}
|
||||
|
||||
void SetValue(wxInt32 v)
|
||||
{
|
||||
// switch back to determinate mode if not there already
|
||||
if ( GetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag ) != false )
|
||||
{
|
||||
SetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag, (Boolean)false );
|
||||
}
|
||||
|
||||
wxMacControl::SetValue( v ) ;
|
||||
|
||||
// turn off animation in the unnecessary situations as this is consuming a lot of CPU otherwise
|
||||
Boolean shouldAnimate = ( GetValue() > 0 && GetValue() < GetRange() ) ;
|
||||
if ( m_peer->GetData<Boolean>( kControlEntireControl, kControlProgressBarAnimatingTag ) != shouldAnimate )
|
||||
Boolean shouldAnimate = ( v > 0 && v < GetMaximum() ) ;
|
||||
if ( GetData<Boolean>( kControlEntireControl, kControlProgressBarAnimatingTag ) != shouldAnimate )
|
||||
{
|
||||
m_peer->SetData<Boolean>( kControlEntireControl, kControlProgressBarAnimatingTag, shouldAnimate ) ;
|
||||
SetData<Boolean>( kControlEntireControl, kControlProgressBarAnimatingTag, shouldAnimate ) ;
|
||||
if ( !shouldAnimate )
|
||||
Refresh() ;
|
||||
SetNeedsDisplay(NULL) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int wxGauge::GetValue() const
|
||||
{
|
||||
#if 0
|
||||
if ( m_peer && m_peer->Ok() )
|
||||
return m_peer->GetValue() ;
|
||||
#endif
|
||||
|
||||
return m_gaugePos ;
|
||||
}
|
||||
|
||||
void wxGauge::Pulse()
|
||||
{
|
||||
if ( m_peer && m_peer->IsOk() )
|
||||
|
||||
void PulseGauge()
|
||||
{
|
||||
if ( m_peer->GetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag ) != true )
|
||||
if ( GetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag ) != true )
|
||||
{
|
||||
m_peer->SetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag, true);
|
||||
SetData<Boolean>( kControlNoPart, kControlProgressBarIndeterminateTag, true);
|
||||
}
|
||||
|
||||
if ( m_peer->GetData<Boolean>( kControlEntireControl, kControlProgressBarAnimatingTag ) != true )
|
||||
if ( GetData<Boolean>( kControlEntireControl, kControlProgressBarAnimatingTag ) != true )
|
||||
{
|
||||
m_peer->SetData<Boolean>( kControlEntireControl, kControlProgressBarAnimatingTag, true ) ;
|
||||
SetData<Boolean>( kControlEntireControl, kControlProgressBarAnimatingTag, true ) ;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
wxWidgetImplType* wxWidgetImpl::CreateGauge( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
wxInt32 value,
|
||||
wxInt32 minimum,
|
||||
wxInt32 maximum,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle)
|
||||
{
|
||||
Rect bounds = wxMacGetBoundsForControl( wxpeer, pos, size );
|
||||
wxMacGaugeCarbonControl* peer = new wxMacGaugeCarbonControl( wxpeer );
|
||||
OSStatus err = CreateProgressBarControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds,
|
||||
value, minimum, maximum, false /* not indeterminate */, peer->GetControlRefAddr() );
|
||||
verify_noerr( err );
|
||||
if ( value == 0 )
|
||||
peer->SetData<Boolean>( kControlEntireControl, kControlProgressBarAnimatingTag, (Boolean)false );
|
||||
return peer;
|
||||
}
|
||||
|
||||
#endif // wxUSE_GAUGE
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/gdiobj.cpp
|
||||
// Name: src/osx/carbon/gdiobj.cpp
|
||||
// Purpose: wxGDIObject class
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -64,11 +64,19 @@ const wxFont* wxStockGDIMac::GetFont(Item item)
|
||||
#if wxOSX_USE_COCOA_OR_CARBON
|
||||
case FONT_NORMAL:
|
||||
font = new wxFont;
|
||||
#if wxOSX_USE_CARBON
|
||||
font->MacCreateFromThemeFont(kThemeSystemFont);
|
||||
#else
|
||||
font->MacCreateFromUIFont(kCTFontSystemFontType);
|
||||
#endif
|
||||
break;
|
||||
case FONT_SMALL:
|
||||
font = new wxFont;
|
||||
#if wxOSX_USE_CARBON
|
||||
font->MacCreateFromThemeFont(kThemeSmallSystemFont);
|
||||
#else
|
||||
font->MacCreateFromUIFont(kCTFontSmallSystemFontType);
|
||||
#endif
|
||||
break;
|
||||
#else
|
||||
case FONT_NORMAL:
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include "wx/osx/uma.h"
|
||||
|
||||
#include "wx/osx/private.h"
|
||||
#include <AGL/agl.h>
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// helper functions
|
||||
@ -54,146 +55,47 @@ static void wxLogAGLError(const char *func)
|
||||
// ============================================================================
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxGLContext
|
||||
// low level implementation routines
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxGLContext::wxGLContext(wxGLCanvas *win, const wxGLContext *other)
|
||||
WXGLContext WXGLCreateContext( WXGLPixelFormat pixelFormat, WXGLContext shareContext )
|
||||
{
|
||||
m_aglContext = aglCreateContext(win->GetAGLPixelFormat(),
|
||||
other ? other->m_aglContext : NULL);
|
||||
if ( !m_aglContext )
|
||||
WXGLContext context = aglCreateContext(pixelFormat, shareContext);
|
||||
if ( !context )
|
||||
wxLogAGLError("aglCreateContext");
|
||||
return context ;
|
||||
}
|
||||
|
||||
wxGLContext::~wxGLContext()
|
||||
void WXGLDestroyContext( WXGLContext context )
|
||||
{
|
||||
if ( m_aglContext )
|
||||
if ( context )
|
||||
{
|
||||
// it's ok to pass the current context to this function
|
||||
if ( !aglDestroyContext(m_aglContext) )
|
||||
if ( !aglDestroyContext(context) )
|
||||
{
|
||||
wxLogAGLError("aglDestroyContext");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool wxGLContext::SetCurrent(const wxGLCanvas& win) const
|
||||
void WXGLSwapBuffers( WXGLContext context )
|
||||
{
|
||||
if ( !m_aglContext )
|
||||
return false;
|
||||
aglSwapBuffers(context);
|
||||
}
|
||||
|
||||
AGLDrawable drawable = (AGLDrawable)GetWindowPort(
|
||||
MAC_WXHWND(win.MacGetTopLevelWindowRef()));
|
||||
if ( !aglSetDrawable(m_aglContext, drawable) )
|
||||
WXGLContext WXGLGetCurrentContext()
|
||||
{
|
||||
return aglGetCurrentContext();
|
||||
}
|
||||
|
||||
void WXGLDestroyPixelFormat( WXGLPixelFormat pixelFormat )
|
||||
{
|
||||
if ( pixelFormat )
|
||||
{
|
||||
wxLogAGLError("aglSetDrawable");
|
||||
return false;
|
||||
aglDestroyPixelFormat(pixelFormat);
|
||||
}
|
||||
|
||||
if ( !aglSetCurrentContext(m_aglContext) )
|
||||
{
|
||||
wxLogAGLError("aglSetCurrentContext");
|
||||
return false;
|
||||
}
|
||||
|
||||
wx_const_cast(wxGLCanvas&, win).SetViewport();
|
||||
return true;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxGLCanvas
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
IMPLEMENT_CLASS(wxGLCanvas, wxWindow)
|
||||
|
||||
BEGIN_EVENT_TABLE(wxGLCanvas, wxWindow)
|
||||
EVT_SIZE(wxGLCanvas::OnSize)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
wxGLCanvas::wxGLCanvas(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const int *attribList,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxString& name,
|
||||
const wxPalette& palette)
|
||||
{
|
||||
Create(parent, id, pos, size, style, name, attribList, palette);
|
||||
}
|
||||
|
||||
#if WXWIN_COMPATIBILITY_2_8
|
||||
|
||||
wxGLCanvas::wxGLCanvas(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxString& name,
|
||||
const int *attribList,
|
||||
const wxPalette& palette)
|
||||
{
|
||||
if ( Create(parent, id, pos, size, style, name, attribList, palette) )
|
||||
m_glContext = new wxGLContext(this);
|
||||
}
|
||||
|
||||
wxGLCanvas::wxGLCanvas(wxWindow *parent,
|
||||
const wxGLContext *shared,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxString& name,
|
||||
const int *attribList,
|
||||
const wxPalette& palette)
|
||||
{
|
||||
if ( Create(parent, id, pos, size, style, name, attribList, palette) )
|
||||
m_glContext = new wxGLContext(this, shared);
|
||||
}
|
||||
|
||||
wxGLCanvas::wxGLCanvas(wxWindow *parent,
|
||||
const wxGLCanvas *shared,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxString& name,
|
||||
const int *attribList,
|
||||
const wxPalette& palette)
|
||||
{
|
||||
if ( Create(parent, id, pos, size, style, name, attribList, palette) )
|
||||
m_glContext = new wxGLContext(this, shared ? shared->m_glContext : NULL);
|
||||
}
|
||||
|
||||
#endif // WXWIN_COMPATIBILITY_2_8
|
||||
|
||||
/* static */
|
||||
bool wxGLCanvasBase::IsExtensionSupported(const char *extension)
|
||||
{
|
||||
// we need a valid context to query for extensions.
|
||||
const GLint defaultAttribs[] = { AGL_RGBA, AGL_DOUBLEBUFFER, AGL_NONE };
|
||||
AGLPixelFormat fmt = aglChoosePixelFormat(NULL, 0, defaultAttribs);
|
||||
AGLContext ctx = aglCreateContext(fmt, NULL);
|
||||
if ( !ctx )
|
||||
return false;
|
||||
|
||||
wxString extensions = wxString::FromAscii(glGetString(GL_EXTENSIONS));
|
||||
|
||||
aglDestroyPixelFormat(fmt);
|
||||
aglDestroyContext(ctx);
|
||||
|
||||
return IsExtensionInList(extensions, extension);
|
||||
}
|
||||
|
||||
/* static */
|
||||
bool wxGLCanvas::IsAGLMultiSampleAvailable()
|
||||
{
|
||||
static int s_isMultiSampleAvailable = -1;
|
||||
if ( s_isMultiSampleAvailable == -1 )
|
||||
s_isMultiSampleAvailable = IsExtensionSupported("GL_ARB_multisample");
|
||||
|
||||
return s_isMultiSampleAvailable != 0;
|
||||
}
|
||||
|
||||
static AGLPixelFormat ChoosePixelFormat(const int *attribList)
|
||||
WXGLPixelFormat WXGLChoosePixelFormat(const int *attribList)
|
||||
{
|
||||
GLint data[512];
|
||||
const GLint defaultAttribs[] =
|
||||
@ -340,6 +242,83 @@ static AGLPixelFormat ChoosePixelFormat(const int *attribList)
|
||||
return aglChoosePixelFormat(NULL, 0, attribs);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxGLContext
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
bool wxGLContext::SetCurrent(const wxGLCanvas& win) const
|
||||
{
|
||||
if ( !m_glContext )
|
||||
return false;
|
||||
|
||||
AGLDrawable drawable = (AGLDrawable)GetWindowPort(
|
||||
MAC_WXHWND(win.MacGetTopLevelWindowRef()));
|
||||
|
||||
GLint bufnummer = win.GetAglBufferName();
|
||||
aglSetInteger(m_glContext, AGL_BUFFER_NAME, &bufnummer);
|
||||
//win.SetLastContext(m_glContext);
|
||||
|
||||
wx_const_cast(wxGLCanvas&, win).SetViewport();
|
||||
|
||||
if ( !aglSetDrawable(m_glContext, drawable) )
|
||||
{
|
||||
wxLogAGLError("aglSetDrawable");
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( !aglSetCurrentContext(m_glContext) )
|
||||
{
|
||||
wxLogAGLError("aglSetCurrentContext");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxGLCanvas
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
|
||||
sharing contexts under AGL is not straightforward, to quote from
|
||||
|
||||
http://lists.apple.com/archives/mac-opengl/2003/Jan/msg00402.html :
|
||||
|
||||
In Carbon OpenGL (AGL) you would use call aglSetInteger to setup a
|
||||
buffer name and attached each context to that same name. From AGL
|
||||
you can do:
|
||||
|
||||
GLint id = 1;
|
||||
|
||||
ctx1 = aglCreateContext...
|
||||
aglSetInteger(ctx1, AGL_BUFFER_NAME, &id); // create name
|
||||
aglAttachDrawable (ctx1,...); // create surface with associated with
|
||||
name (first time)
|
||||
ctx2 = aglCreateContext...
|
||||
aglSetInteger(ctx2, AGL_BUFFER_NAME, &id); // uses previously created name
|
||||
aglAttachDrawable (ctx2, ...); // uses existing surface with existing name
|
||||
|
||||
AGL Docs say:
|
||||
AGL_BUFFER_NAME
|
||||
params contains one value: a non-negative integer name of the surface to be
|
||||
associated to be with the current context. If this value is non-zero, and a
|
||||
surface of this name is not associated to this drawable, a new surface with
|
||||
this name is created and associated with the context when
|
||||
aglSetDrawable is called subsequently. If this is a previously allocated
|
||||
buffer name within the namespace of the current window (e.g., drawable),
|
||||
that previously allocated surface is associated with the context (e.g., no
|
||||
new surface is created) and the subsequent call to aglSetDrawable will
|
||||
attach that surface. This allows multiple contexts to be attached to a single
|
||||
surface. Using the default buffer name zero, returns to one surface per
|
||||
context behavior.
|
||||
*/
|
||||
|
||||
/*
|
||||
so what I'm doing is to have a dummy aglContext attached to a wxGLCanvas,
|
||||
assign it a buffer number
|
||||
*/
|
||||
|
||||
|
||||
bool wxGLCanvas::Create(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
@ -352,13 +331,22 @@ bool wxGLCanvas::Create(wxWindow *parent,
|
||||
m_needsUpdate = false;
|
||||
m_macCanvasIsShown = false;
|
||||
|
||||
m_aglFormat = ChoosePixelFormat(attribList);
|
||||
if ( !m_aglFormat )
|
||||
m_glFormat = WXGLChoosePixelFormat(attribList);
|
||||
if ( !m_glFormat )
|
||||
return false;
|
||||
|
||||
if ( !wxWindow::Create(parent, id, pos, size, style, name) )
|
||||
return false;
|
||||
|
||||
m_dummyContext = WXGLCreateContext(m_glFormat, NULL);
|
||||
|
||||
static GLint gCurrentBufferName = 1;
|
||||
m_bufferName = gCurrentBufferName++;
|
||||
aglSetInteger (m_dummyContext, AGL_BUFFER_NAME, &m_bufferName);
|
||||
|
||||
AGLDrawable drawable = (AGLDrawable)GetWindowPort(MAC_WXHWND(MacGetTopLevelWindowRef()));
|
||||
aglSetDrawable(m_dummyContext, drawable);
|
||||
|
||||
m_macCanvasIsShown = true;
|
||||
|
||||
return true;
|
||||
@ -366,30 +354,11 @@ bool wxGLCanvas::Create(wxWindow *parent,
|
||||
|
||||
wxGLCanvas::~wxGLCanvas()
|
||||
{
|
||||
if ( m_aglFormat )
|
||||
aglDestroyPixelFormat(m_aglFormat);
|
||||
}
|
||||
|
||||
/* static */
|
||||
bool wxGLCanvasBase::IsDisplaySupported(const int *attribList)
|
||||
{
|
||||
AGLPixelFormat aglFormat = ChoosePixelFormat(attribList);
|
||||
|
||||
if ( !aglFormat )
|
||||
return false;
|
||||
|
||||
aglDestroyPixelFormat(aglFormat);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool wxGLCanvas::SwapBuffers()
|
||||
{
|
||||
AGLContext context = aglGetCurrentContext();
|
||||
wxCHECK_MSG(context, false, _T("should have current context"));
|
||||
|
||||
aglSwapBuffers(context);
|
||||
return true;
|
||||
if ( m_glFormat )
|
||||
WXGLDestroyPixelFormat(m_glFormat);
|
||||
|
||||
if ( m_dummyContext )
|
||||
WXGLDestroyContext(m_dummyContext);
|
||||
}
|
||||
|
||||
void wxGLCanvas::SetViewport()
|
||||
@ -399,9 +368,9 @@ void wxGLCanvas::SetViewport()
|
||||
|
||||
m_needsUpdate = false;
|
||||
|
||||
AGLContext context = aglGetCurrentContext();
|
||||
if ( !context )
|
||||
return;
|
||||
// AGLContext context = aglGetCurrentContext();
|
||||
// if ( !context )
|
||||
// return;
|
||||
|
||||
// viewport is initially set to entire port, adjust it to just this window
|
||||
int x = 0,
|
||||
@ -414,36 +383,23 @@ void wxGLCanvas::SetViewport()
|
||||
Rect bounds;
|
||||
GetWindowPortBounds(MAC_WXHWND(MacGetTopLevelWindowRef()) , &bounds);
|
||||
|
||||
#if 0
|
||||
// TODO in case we adopt point vs pixel coordinates, this will make the conversion
|
||||
HIRect hiRect = CGRectMake( x, y, width, height );
|
||||
HIRectConvert( &hiRect, kHICoordSpace72DPIGlobal, NULL, kHICoordSpaceScreenPixel, NULL);
|
||||
HIRect hiBounds = CGRectMake( 0, 0, bounds.right - bounds.left , bounds.bottom - bounds.top );
|
||||
HIRectConvert( &hiBounds, kHICoordSpace72DPIGlobal, NULL, kHICoordSpaceScreenPixel, NULL);
|
||||
GLint parms[4];
|
||||
parms[0] = hiRect.origin.x;
|
||||
parms[1] = hiBounds.size.height - (hiRect.origin.y + hiRect.size.height);
|
||||
parms[2] = hiRect.size.width;
|
||||
parms[3] = hiRect.size.height;
|
||||
#else
|
||||
GLint parms[4];
|
||||
parms[0] = x;
|
||||
parms[1] = bounds.bottom - bounds.top - ( y + height );
|
||||
parms[2] = width;
|
||||
parms[3] = height;
|
||||
#endif
|
||||
|
||||
// move the buffer rect out of sight if we're hidden
|
||||
if ( !m_macCanvasIsShown )
|
||||
parms[0] += 20000;
|
||||
|
||||
if ( !aglSetInteger(context, AGL_BUFFER_RECT, parms) )
|
||||
if ( !aglSetInteger(m_dummyContext, AGL_BUFFER_RECT, parms) )
|
||||
wxLogAGLError("aglSetInteger(AGL_BUFFER_RECT)");
|
||||
|
||||
if ( !aglEnable(context, AGL_BUFFER_RECT) )
|
||||
if ( !aglEnable(m_dummyContext, AGL_BUFFER_RECT) )
|
||||
wxLogAGLError("aglEnable(AGL_BUFFER_RECT)");
|
||||
|
||||
if ( !aglUpdateContext(context) )
|
||||
if ( !aglUpdateContext(m_dummyContext) )
|
||||
wxLogAGLError("aglUpdateContext");
|
||||
}
|
||||
|
||||
@ -462,6 +418,7 @@ void wxGLCanvas::MacUpdateView()
|
||||
void wxGLCanvas::MacSuperChangedPosition()
|
||||
{
|
||||
MacUpdateView();
|
||||
SetViewport();
|
||||
wxWindow::MacSuperChangedPosition();
|
||||
}
|
||||
|
||||
@ -482,18 +439,4 @@ void wxGLCanvas::MacVisibilityChanged()
|
||||
wxWindowMac::MacVisibilityChanged();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxGLApp
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
bool wxGLApp::InitGLVisual(const int *attribList)
|
||||
{
|
||||
AGLPixelFormat fmt = ChoosePixelFormat(attribList);
|
||||
if ( !fmt )
|
||||
return false;
|
||||
|
||||
aglDestroyPixelFormat(fmt);
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif // wxUSE_GLCANVAS
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/dccg.cpp
|
||||
// Name: src/osx/carbon/dccg.cpp
|
||||
// Purpose: wxDC class
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/icon.cpp
|
||||
// Name: src/osx/carbon/icon.cpp
|
||||
// Purpose: wxIcon class
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -53,7 +53,7 @@ private:
|
||||
|
||||
wxIconRefData::wxIconRefData( WXHICON icon, int desiredWidth, int desiredHeight )
|
||||
{
|
||||
m_iconRef = MAC_WXHICON( icon ) ;
|
||||
m_iconRef = (IconRef)( icon ) ;
|
||||
|
||||
// Standard sizes
|
||||
SetWidth( desiredWidth == -1 ? 32 : desiredWidth ) ;
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/listbox.cpp
|
||||
// Name: src/osx/carbon/listbox.cpp
|
||||
// Purpose: wxListBox
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -24,271 +24,23 @@
|
||||
#include "wx/dcclient.h"
|
||||
#endif
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxListBox, wxControlWithItems)
|
||||
|
||||
BEGIN_EVENT_TABLE(wxListBox, wxControl)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
// ============================================================================
|
||||
// list box control implementation
|
||||
// ============================================================================
|
||||
|
||||
wxListBox::wxListBox()
|
||||
wxWidgetImplType* wxWidgetImpl::CreateListBox( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle)
|
||||
{
|
||||
}
|
||||
|
||||
bool wxListBox::Create(
|
||||
wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
const wxArrayString& choices,
|
||||
long style,
|
||||
const wxValidator& validator,
|
||||
const wxString& name )
|
||||
{
|
||||
wxCArrayString chs(choices);
|
||||
|
||||
return Create(
|
||||
parent, id, pos, size, chs.GetCount(), chs.GetStrings(),
|
||||
style, validator, name );
|
||||
}
|
||||
|
||||
wxMacListControl* wxListBox::GetPeer() const
|
||||
{
|
||||
wxMacDataBrowserListControl *lb = wxDynamicCast(m_peer,wxMacDataBrowserListControl);
|
||||
return lb ? wx_static_cast(wxMacListControl*,lb) : 0 ;
|
||||
}
|
||||
|
||||
bool wxListBox::Create(
|
||||
wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
int n,
|
||||
const wxString choices[],
|
||||
long style,
|
||||
const wxValidator& validator,
|
||||
const wxString& name )
|
||||
{
|
||||
m_blockEvents = false;
|
||||
m_macIsUserPane = false;
|
||||
|
||||
wxASSERT_MSG( !(style & wxLB_MULTIPLE) || !(style & wxLB_EXTENDED),
|
||||
wxT("only a single listbox selection mode can be specified") );
|
||||
|
||||
if ( !wxListBoxBase::Create( parent, id, pos, size, style & ~(wxHSCROLL | wxVSCROLL), validator, name ) )
|
||||
return false;
|
||||
|
||||
wxMacDataBrowserListControl* control = new wxMacDataBrowserListControl( this, pos, size, style );
|
||||
wxMacDataBrowserListControl* control = new wxMacDataBrowserListControl( wxpeer, pos, size, style );
|
||||
// TODO CHECK control->SetClientDataType( m_clientDataItemsType );
|
||||
m_peer = control;
|
||||
|
||||
MacPostControlCreate( pos, size );
|
||||
|
||||
Append(n, choices);
|
||||
|
||||
// Needed because it is a wxControlWithItems
|
||||
SetInitialSize( size );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
wxListBox::~wxListBox()
|
||||
{
|
||||
FreeData();
|
||||
m_peer->SetReference( 0 );
|
||||
}
|
||||
|
||||
void wxListBox::FreeData()
|
||||
{
|
||||
GetPeer()->MacClear();
|
||||
}
|
||||
|
||||
void wxListBox::DoSetFirstItem(int n)
|
||||
{
|
||||
GetPeer()->MacScrollTo( n );
|
||||
}
|
||||
|
||||
void wxListBox::EnsureVisible(int n)
|
||||
{
|
||||
GetPeer()->MacScrollTo( n );
|
||||
}
|
||||
|
||||
void wxListBox::DoDeleteOneItem(unsigned int n)
|
||||
{
|
||||
wxCHECK_RET( IsValid(n), wxT("invalid index in wxListBox::Delete") );
|
||||
|
||||
m_blockEvents = true;
|
||||
GetPeer()->MacDelete( n );
|
||||
m_blockEvents = false;
|
||||
|
||||
UpdateOldSelections();
|
||||
}
|
||||
|
||||
int wxListBox::DoInsertItems(const wxArrayStringsAdapter& items,
|
||||
unsigned int pos,
|
||||
void **clientData,
|
||||
wxClientDataType type)
|
||||
{
|
||||
InvalidateBestSize();
|
||||
|
||||
GetPeer()->MacInsert( pos, items );
|
||||
const unsigned int count = items.GetCount();
|
||||
if ( clientData )
|
||||
{
|
||||
for (unsigned int i = 0; i < count; ++i)
|
||||
AssignNewItemClientData( pos + i, clientData, i, type );
|
||||
}
|
||||
|
||||
return pos + count - 1;
|
||||
|
||||
UpdateOldSelections();
|
||||
}
|
||||
|
||||
int wxListBox::FindString(const wxString& s, bool bCase) const
|
||||
{
|
||||
for ( size_t i = 0; i < GetCount(); ++ i )
|
||||
{
|
||||
if (s.IsSameAs( GetString( i ), bCase) )
|
||||
return (int)i;
|
||||
}
|
||||
|
||||
return wxNOT_FOUND;
|
||||
}
|
||||
|
||||
void wxListBox::DoClear()
|
||||
{
|
||||
m_blockEvents = true;
|
||||
FreeData();
|
||||
m_blockEvents = false;
|
||||
|
||||
UpdateOldSelections();
|
||||
}
|
||||
|
||||
void wxListBox::DoSetSelection(int n, bool select)
|
||||
{
|
||||
wxCHECK_RET( n == wxNOT_FOUND || IsValid(n),
|
||||
wxT("invalid index in wxListBox::SetSelection") );
|
||||
|
||||
m_blockEvents = true;
|
||||
|
||||
if ( n == wxNOT_FOUND )
|
||||
GetPeer()->MacDeselectAll();
|
||||
else
|
||||
GetPeer()->MacSetSelection( n, select, HasMultipleSelection() );
|
||||
|
||||
m_blockEvents = false;
|
||||
|
||||
UpdateOldSelections();
|
||||
}
|
||||
|
||||
bool wxListBox::IsSelected(int n) const
|
||||
{
|
||||
wxCHECK_MSG( IsValid(n), false, wxT("invalid index in wxListBox::Selected") );
|
||||
|
||||
return GetPeer()->MacIsSelected( n );
|
||||
}
|
||||
|
||||
void *wxListBox::DoGetItemClientData(unsigned int n) const
|
||||
{
|
||||
wxCHECK_MSG( IsValid(n), NULL, wxT("invalid index in wxListBox::GetClientData"));
|
||||
return GetPeer()->MacGetClientData( n );
|
||||
}
|
||||
|
||||
void wxListBox::DoSetItemClientData(unsigned int n, void *clientData)
|
||||
{
|
||||
wxCHECK_RET( IsValid(n), wxT("invalid index in wxListBox::SetClientData") );
|
||||
GetPeer()->MacSetClientData( n , clientData);
|
||||
}
|
||||
|
||||
// Return number of selections and an array of selected integers
|
||||
int wxListBox::GetSelections(wxArrayInt& aSelections) const
|
||||
{
|
||||
return GetPeer()->MacGetSelections( aSelections );
|
||||
}
|
||||
|
||||
// Get single selection, for single choice list items
|
||||
int wxListBox::GetSelection() const
|
||||
{
|
||||
return GetPeer()->MacGetSelection();
|
||||
}
|
||||
|
||||
// Find string for position
|
||||
wxString wxListBox::GetString(unsigned int n) const
|
||||
{
|
||||
wxCHECK_MSG( IsValid(n), wxEmptyString, wxT("invalid index in wxListBox::GetString") );
|
||||
return GetPeer()->MacGetString(n);
|
||||
}
|
||||
|
||||
void wxListBox::SetString(unsigned int n, const wxString& s)
|
||||
{
|
||||
GetPeer()->MacSetString( n, s );
|
||||
}
|
||||
|
||||
wxSize wxListBox::DoGetBestSize() const
|
||||
{
|
||||
int lbWidth = 100; // some defaults
|
||||
int lbHeight = 110;
|
||||
int wLine;
|
||||
|
||||
{
|
||||
wxClientDC dc(const_cast<wxListBox*>(this));
|
||||
dc.SetFont(GetFont());
|
||||
|
||||
// Find the widest line
|
||||
for (unsigned int i = 0; i < GetCount(); i++)
|
||||
{
|
||||
wxString str( GetString( i ) );
|
||||
|
||||
wxCoord width, height ;
|
||||
dc.GetTextExtent( str , &width, &height);
|
||||
wLine = width ;
|
||||
lbWidth = wxMax( lbWidth, wLine );
|
||||
}
|
||||
|
||||
// Add room for the scrollbar
|
||||
lbWidth += wxSystemSettings::GetMetric( wxSYS_VSCROLL_X );
|
||||
|
||||
// And just a bit more
|
||||
int cy = 12;
|
||||
|
||||
wxCoord width, height ;
|
||||
dc.GetTextExtent( wxT("XX") , &width, &height);
|
||||
int cx = width ;
|
||||
lbWidth += cx;
|
||||
|
||||
// don't make the listbox too tall (limit height to around 10 items)
|
||||
// but don't make it too small neither
|
||||
lbHeight = wxMax( (cy + 4) * wxMin( wxMax( GetCount(), 3 ), 10 ), 70 );
|
||||
}
|
||||
|
||||
return wxSize( lbWidth, lbHeight );
|
||||
}
|
||||
|
||||
unsigned int wxListBox::GetCount() const
|
||||
{
|
||||
return GetPeer()->MacGetCount();
|
||||
}
|
||||
|
||||
void wxListBox::Refresh(bool eraseBack, const wxRect *rect)
|
||||
{
|
||||
wxControl::Refresh( eraseBack, rect );
|
||||
}
|
||||
|
||||
// Some custom controls depend on this
|
||||
/* static */ wxVisualAttributes
|
||||
wxListBox::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant))
|
||||
{
|
||||
wxVisualAttributes attr;
|
||||
|
||||
attr.colFg = wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOWTEXT );
|
||||
attr.colBg = wxSystemSettings::GetColour( wxSYS_COLOUR_LISTBOX );
|
||||
attr.font.MacCreateFromThemeFont(kThemeViewsFont);
|
||||
|
||||
return attr;
|
||||
return control;
|
||||
}
|
||||
|
||||
int wxListBox::DoListHitTest(const wxPoint& inpoint) const
|
||||
@ -407,6 +159,77 @@ wxMacListBoxItem::~wxMacListBoxItem()
|
||||
{
|
||||
}
|
||||
|
||||
OSStatus wxMacListBoxItem::GetSetData(wxMacDataItemBrowserControl *owner ,
|
||||
DataBrowserPropertyID property,
|
||||
DataBrowserItemDataRef itemData,
|
||||
bool changeValue )
|
||||
{
|
||||
wxMacDataBrowserListControl *lb = wxDynamicCast(owner,wxMacDataBrowserListControl);
|
||||
OSStatus err = errDataBrowserPropertyNotSupported;
|
||||
if ( !changeValue )
|
||||
{
|
||||
if ( property >= kMinColumnId )
|
||||
{
|
||||
wxMacDataBrowserColumn* col = lb->GetColumnFromProperty( property );
|
||||
unsigned int n = owner->GetLineFromItem( this );
|
||||
wxListBox *list = wxDynamicCast( owner->GetWXPeer() , wxListBox );
|
||||
wxMacDataBrowserCellValue valueholder(itemData);
|
||||
list->GetValueCallback( n , col, valueholder );
|
||||
|
||||
err = noErr;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( property == kDataBrowserItemIsEditableProperty )
|
||||
{
|
||||
DataBrowserPropertyID propertyToEdit ;
|
||||
GetDataBrowserItemDataProperty( itemData, &propertyToEdit );
|
||||
wxMacDataBrowserColumn* col = lb->GetColumnFromProperty( propertyToEdit );
|
||||
|
||||
verify_noerr(SetDataBrowserItemDataBooleanValue( itemData, col->IsEditable() ));
|
||||
err = noErr;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( property >= kMinColumnId )
|
||||
{
|
||||
wxMacDataBrowserColumn* col = lb->GetColumnFromProperty( property );
|
||||
|
||||
unsigned int n = owner->GetLineFromItem( this );
|
||||
wxListBox *list = wxDynamicCast( owner->GetWXPeer() , wxListBox );
|
||||
wxMacDataBrowserCellValue valueholder(itemData);
|
||||
list->SetValueCallback( n , col, valueholder );
|
||||
|
||||
/*
|
||||
// we have to change this behind the back, since Check() would be triggering another update round
|
||||
bool newVal = !m_isChecked;
|
||||
verify_noerr(SetDataBrowserItemDataButtonValue( itemData, newVal ? kThemeButtonOn : kThemeButtonOff ));
|
||||
m_isChecked = newVal;
|
||||
err = noErr;
|
||||
|
||||
wxCommandEvent event( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, checklist->GetId() );
|
||||
event.SetInt( owner->GetLineFromItem( this ) );
|
||||
event.SetEventObject( checklist );
|
||||
checklist->HandleWindowEvent( event );
|
||||
|
||||
*/
|
||||
err = noErr;
|
||||
}
|
||||
}
|
||||
|
||||
// call inherited if not ours
|
||||
if ( err == errDataBrowserPropertyNotSupported )
|
||||
{
|
||||
err = wxMacDataItem::GetSetData(owner, property, itemData, changeValue);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
void wxMacListBoxItem::Notification(wxMacDataItemBrowserControl *owner ,
|
||||
DataBrowserItemNotification message,
|
||||
DataBrowserItemDataRef WXUNUSED(itemData) ) const
|
||||
@ -417,28 +240,24 @@ void wxMacListBoxItem::Notification(wxMacDataItemBrowserControl *owner ,
|
||||
|
||||
if ( message == kDataBrowserItemRemoved)
|
||||
{
|
||||
if ( lb != NULL && lb->GetClientDataType() == wxClientData_Object )
|
||||
{
|
||||
delete (wxClientData*) (m_data);
|
||||
}
|
||||
|
||||
delete this;
|
||||
return;
|
||||
}
|
||||
|
||||
wxListBox *list = wxDynamicCast( owner->GetWXPeer() , wxListBox );
|
||||
wxListBox *list = wxDynamicCast( lb->GetWXPeer() , wxListBox );
|
||||
wxCHECK_RET( list != NULL , wxT("Listbox expected"));
|
||||
|
||||
if (message == kDataBrowserItemDoubleClicked)
|
||||
{
|
||||
unsigned int n = owner->GetLineFromItem( this );
|
||||
wxCommandEvent event( wxEVT_COMMAND_LISTBOX_DOUBLECLICKED, list->GetId() );
|
||||
event.SetEventObject( list );
|
||||
if ( list->HasClientObjectData() )
|
||||
event.SetClientObject( (wxClientData*) m_data );
|
||||
event.SetClientObject( list->GetClientObject(n) );
|
||||
else if ( list->HasClientUntypedData() )
|
||||
event.SetClientData( m_data );
|
||||
event.SetString( m_label );
|
||||
event.SetInt( owner->GetLineFromItem( this ) );
|
||||
event.SetClientData( list->GetClientData(n) );
|
||||
event.SetString( list->GetString(n) );
|
||||
event.SetInt( n );
|
||||
event.SetExtraLong( 1 );
|
||||
list->HandleWindowEvent(event);
|
||||
return;
|
||||
@ -450,6 +269,8 @@ IMPLEMENT_DYNAMIC_CLASS( wxMacDataBrowserListControl , wxMacDataItemBrowserContr
|
||||
wxMacDataBrowserListControl::wxMacDataBrowserListControl( wxWindow *peer, const wxPoint& pos, const wxSize& size, long style)
|
||||
: wxMacDataItemBrowserControl( peer, pos, size, style )
|
||||
{
|
||||
m_nextColumnId = 0 ;
|
||||
|
||||
OSStatus err = noErr;
|
||||
m_clientDataItemsType = wxClientData_None;
|
||||
if ( style & wxLB_SORT )
|
||||
@ -483,7 +304,7 @@ wxMacDataBrowserListControl::wxMacDataBrowserListControl( wxWindow *peer, const
|
||||
columnDesc.headerBtnDesc.btnFontStyle.font = kControlFontViewSystemFont;
|
||||
columnDesc.headerBtnDesc.btnFontStyle.style = normal;
|
||||
columnDesc.headerBtnDesc.titleString = NULL;
|
||||
|
||||
/*
|
||||
columnDesc.headerBtnDesc.minimumWidth = 0;
|
||||
columnDesc.headerBtnDesc.maximumWidth = 10000;
|
||||
|
||||
@ -493,7 +314,7 @@ wxMacDataBrowserListControl::wxMacDataBrowserListControl( wxWindow *peer, const
|
||||
columnDesc.propertyDesc.propertyFlags |= kDataBrowserListViewTypeSelectColumn;
|
||||
|
||||
verify_noerr( AddColumn( &columnDesc, kDataBrowserListViewAppendColumn ) );
|
||||
|
||||
*/
|
||||
columnDesc.headerBtnDesc.minimumWidth = 0;
|
||||
columnDesc.headerBtnDesc.maximumWidth = 0;
|
||||
columnDesc.propertyDesc.propertyID = kNumericOrderColumnId;
|
||||
@ -503,6 +324,7 @@ wxMacDataBrowserListControl::wxMacDataBrowserListControl( wxWindow *peer, const
|
||||
|
||||
verify_noerr( AddColumn( &columnDesc, kDataBrowserListViewAppendColumn ) );
|
||||
|
||||
/*
|
||||
SetDataBrowserSortProperty( m_controlRef , kTextColumnId);
|
||||
if ( m_sortOrder == SortOrder_Text_Ascending )
|
||||
{
|
||||
@ -510,6 +332,7 @@ wxMacDataBrowserListControl::wxMacDataBrowserListControl( wxWindow *peer, const
|
||||
SetDataBrowserSortOrder( m_controlRef , kDataBrowserOrderIncreasing);
|
||||
}
|
||||
else
|
||||
*/
|
||||
{
|
||||
SetDataBrowserSortProperty( m_controlRef , kNumericOrderColumnId);
|
||||
SetDataBrowserSortOrder( m_controlRef , kDataBrowserOrderIncreasing);
|
||||
@ -566,15 +389,260 @@ void wxMacDataBrowserListControl::ItemNotification(
|
||||
// call super for item level(wxMacDataItem->Notification) callback processing
|
||||
wxMacDataItemBrowserControl::ItemNotification( itemID, message, itemData);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
wxWindow * wxMacDataBrowserListControl::GetPeer() const
|
||||
{
|
||||
return wxDynamicCast( wxMacControl::GetWX() , wxWindow );
|
||||
}
|
||||
*/
|
||||
wxMacDataItem* wxMacDataBrowserListControl::CreateItem()
|
||||
|
||||
//
|
||||
// List Methods
|
||||
//
|
||||
|
||||
wxMacDataBrowserColumn* wxMacDataBrowserListControl::DoInsertColumn( unsigned int pos, DataBrowserPropertyID property,
|
||||
const wxString& title, bool editable,
|
||||
DataBrowserPropertyType colType, SInt16 just, int width )
|
||||
{
|
||||
return new wxMacListBoxItem();
|
||||
DataBrowserListViewColumnDesc columnDesc;
|
||||
columnDesc.headerBtnDesc.titleOffset = 0;
|
||||
columnDesc.headerBtnDesc.version = kDataBrowserListViewLatestHeaderDesc;
|
||||
|
||||
columnDesc.headerBtnDesc.btnFontStyle.flags =
|
||||
kControlUseFontMask | kControlUseJustMask;
|
||||
|
||||
columnDesc.headerBtnDesc.btnContentInfo.contentType = kControlContentTextOnly;
|
||||
columnDesc.headerBtnDesc.btnFontStyle.just = just;
|
||||
columnDesc.headerBtnDesc.btnFontStyle.font = kControlFontViewSystemFont;
|
||||
columnDesc.headerBtnDesc.btnFontStyle.style = normal;
|
||||
|
||||
// TODO: Why is m_font not defined when we enter wxLC_LIST mode, but is
|
||||
// defined for other modes?
|
||||
wxFontEncoding enc;
|
||||
if ( m_font.Ok() )
|
||||
enc = m_font.GetEncoding();
|
||||
else
|
||||
enc = wxLocale::GetSystemEncoding();
|
||||
wxCFStringRef cfTitle( title, enc );
|
||||
columnDesc.headerBtnDesc.titleString = cfTitle;
|
||||
|
||||
columnDesc.headerBtnDesc.minimumWidth = 0;
|
||||
columnDesc.headerBtnDesc.maximumWidth = 30000;
|
||||
|
||||
columnDesc.propertyDesc.propertyID = property;
|
||||
columnDesc.propertyDesc.propertyType = colType;
|
||||
columnDesc.propertyDesc.propertyFlags = kDataBrowserListViewSortableColumn;
|
||||
columnDesc.propertyDesc.propertyFlags |= kDataBrowserListViewTypeSelectColumn;
|
||||
columnDesc.propertyDesc.propertyFlags |= kDataBrowserListViewNoGapForIconInHeaderButton;
|
||||
|
||||
if ( editable )
|
||||
columnDesc.propertyDesc.propertyFlags |= kDataBrowserPropertyIsMutable;
|
||||
|
||||
verify_noerr( AddColumn( &columnDesc, pos ) );
|
||||
|
||||
if (width > 0)
|
||||
{
|
||||
wxMacDataBrowserControl::SetColumnWidth(property, width);
|
||||
}
|
||||
|
||||
wxMacDataBrowserColumn *col = new wxMacDataBrowserColumn( property, colType, editable );
|
||||
|
||||
m_columns.Insert( col, pos );
|
||||
|
||||
return col;
|
||||
}
|
||||
|
||||
wxListWidgetColumn* wxMacDataBrowserListControl::InsertTextColumn( unsigned pos, const wxString& title, bool editable,
|
||||
wxAlignment just, int defaultWidth)
|
||||
{
|
||||
DataBrowserPropertyID property = kMinColumnId + m_nextColumnId++;
|
||||
|
||||
SInt16 j = teFlushLeft;
|
||||
if ( just & wxALIGN_RIGHT )
|
||||
j = teFlushRight;
|
||||
else if ( just & wxALIGN_CENTER_HORIZONTAL )
|
||||
j = teCenter;
|
||||
|
||||
return DoInsertColumn( pos, property, title, editable, kDataBrowserTextType, just, defaultWidth );
|
||||
}
|
||||
|
||||
wxListWidgetColumn* wxMacDataBrowserListControl::InsertCheckColumn( unsigned pos , const wxString& title, bool editable,
|
||||
wxAlignment just, int defaultWidth )
|
||||
{
|
||||
DataBrowserPropertyID property = kMinColumnId + m_nextColumnId++;
|
||||
|
||||
SInt16 j = teFlushLeft;
|
||||
if ( just & wxALIGN_RIGHT )
|
||||
j = teFlushRight;
|
||||
else if ( just & wxALIGN_CENTER_HORIZONTAL )
|
||||
j = teCenter;
|
||||
|
||||
return DoInsertColumn( pos, property, title, editable, kDataBrowserCheckboxType, just, defaultWidth );
|
||||
}
|
||||
|
||||
wxMacDataBrowserColumn* wxMacDataBrowserListControl::GetColumnFromProperty( DataBrowserPropertyID property)
|
||||
{
|
||||
for ( unsigned int i = 0; i < m_columns.size() ; ++ i )
|
||||
if ( m_columns[i]->GetProperty() == property )
|
||||
return m_columns[i];
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
wxMacDataItem* wxMacDataBrowserListControl::ListGetLineItem( unsigned int n )
|
||||
{
|
||||
return (wxMacDataItem*) GetItemFromLine(n);
|
||||
}
|
||||
*/
|
||||
|
||||
unsigned int wxMacDataBrowserListControl::ListGetCount() const
|
||||
{
|
||||
return MacGetCount();
|
||||
}
|
||||
|
||||
void wxMacDataBrowserListControl::ListDelete( unsigned int n )
|
||||
{
|
||||
MacDelete( n );
|
||||
}
|
||||
|
||||
void wxMacDataBrowserListControl::ListInsert( unsigned int n )
|
||||
{
|
||||
MacInsert( n , new wxMacListBoxItem() );
|
||||
}
|
||||
|
||||
void wxMacDataBrowserListControl::ListClear()
|
||||
{
|
||||
MacClear();
|
||||
}
|
||||
|
||||
void wxMacDataBrowserListControl::ListDeselectAll()
|
||||
{
|
||||
wxMacDataItemBrowserSelectionSuppressor suppressor(this);
|
||||
SetSelectedAllItems( kDataBrowserItemsRemove );
|
||||
}
|
||||
|
||||
void wxMacDataBrowserListControl::ListSetSelection( unsigned int n, bool select, bool multi )
|
||||
{
|
||||
wxMacDataItem* item = (wxMacDataItem*) GetItemFromLine(n);
|
||||
wxMacDataItemBrowserSelectionSuppressor suppressor(this);
|
||||
|
||||
if ( IsItemSelected( item ) != select )
|
||||
{
|
||||
if ( select )
|
||||
SetSelectedItem( item, multi ? kDataBrowserItemsAdd : kDataBrowserItemsAssign );
|
||||
else
|
||||
SetSelectedItem( item, kDataBrowserItemsRemove );
|
||||
}
|
||||
|
||||
ListScrollTo( n );
|
||||
}
|
||||
|
||||
bool wxMacDataBrowserListControl::ListIsSelected( unsigned int n ) const
|
||||
{
|
||||
wxMacDataItem* item = (wxMacDataItem*) GetItemFromLine(n);
|
||||
return IsItemSelected( item );
|
||||
}
|
||||
|
||||
int wxMacDataBrowserListControl::ListGetSelection() const
|
||||
{
|
||||
wxMacDataItemPtr first, last;
|
||||
GetSelectionAnchor( &first, &last );
|
||||
|
||||
if ( first != NULL )
|
||||
{
|
||||
return GetLineFromItem( first );
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int wxMacDataBrowserListControl::ListGetSelections( wxArrayInt& aSelections ) const
|
||||
{
|
||||
aSelections.Empty();
|
||||
wxArrayMacDataItemPtr selectedItems;
|
||||
GetItems( wxMacDataBrowserRootContainer, false , kDataBrowserItemIsSelected, selectedItems);
|
||||
|
||||
int count = selectedItems.GetCount();
|
||||
|
||||
for ( int i = 0; i < count; ++i)
|
||||
{
|
||||
aSelections.Add(GetLineFromItem(selectedItems[i]));
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
void wxMacDataBrowserListControl::ListScrollTo( unsigned int n )
|
||||
{
|
||||
UInt32 top , left ;
|
||||
GetScrollPosition( &top , &left ) ;
|
||||
wxMacDataItem * item = (wxMacDataItem*) GetItemFromLine( n );
|
||||
|
||||
// there is a bug in RevealItem that leads to situations
|
||||
// in large lists, where the item does not get scrolled
|
||||
// into sight, so we do a pre-scroll if necessary
|
||||
UInt16 height ;
|
||||
GetRowHeight( (DataBrowserItemID) item , &height ) ;
|
||||
UInt32 linetop = n * ((UInt32) height );
|
||||
UInt32 linebottom = linetop + height;
|
||||
Rect rect ;
|
||||
GetControlBounds( m_controlRef, &rect );
|
||||
|
||||
if ( linetop < top || linebottom > (top + rect.bottom - rect.top ) )
|
||||
SetScrollPosition( wxMax( n-2, 0 ) * ((UInt32)height) , left ) ;
|
||||
|
||||
RevealItem( item , kDataBrowserRevealWithoutSelecting );
|
||||
}
|
||||
|
||||
void wxMacDataBrowserListControl::UpdateLine( unsigned int n, wxListWidgetColumn* col )
|
||||
{
|
||||
wxMacDataBrowserColumn* dbcol = dynamic_cast<wxMacDataBrowserColumn*> (col);
|
||||
wxMacDataItem * item = (wxMacDataItem*) GetItemFromLine( n );
|
||||
UpdateItem(wxMacDataBrowserRootContainer, item, dbcol ? dbcol->GetProperty() : kDataBrowserNoItem );
|
||||
}
|
||||
|
||||
void wxMacDataBrowserListControl::UpdateLineToEnd( unsigned int n)
|
||||
{
|
||||
// with databrowser inserting does not need updating the entire model, it's done by databrowser itself
|
||||
wxMacDataItem * item = (wxMacDataItem*) GetItemFromLine( n );
|
||||
UpdateItem(wxMacDataBrowserRootContainer, item, kDataBrowserNoItem );
|
||||
}
|
||||
|
||||
// value setters
|
||||
|
||||
void wxMacDataBrowserCellValue::Set( CFStringRef value )
|
||||
{
|
||||
SetDataBrowserItemDataText( m_data, value );
|
||||
}
|
||||
|
||||
void wxMacDataBrowserCellValue::Set( const wxString& value )
|
||||
{
|
||||
wxCFStringRef cf(value);
|
||||
SetDataBrowserItemDataText( m_data, (CFStringRef) cf);
|
||||
}
|
||||
|
||||
void wxMacDataBrowserCellValue::Set( int value )
|
||||
{
|
||||
SetDataBrowserItemDataValue( m_data, value );
|
||||
// SetDataBrowserItemDataButtonValue( m_data, value ? kThemeButtonOn : kThemeButtonOff);
|
||||
}
|
||||
|
||||
int wxMacDataBrowserCellValue::GetIntValue() const
|
||||
{
|
||||
SInt32 value;
|
||||
GetDataBrowserItemDataValue( m_data, &value );
|
||||
return value;
|
||||
}
|
||||
|
||||
wxString wxMacDataBrowserCellValue::GetStringValue() const
|
||||
{
|
||||
CFStringRef value;
|
||||
GetDataBrowserItemDataText ( m_data, &value );
|
||||
wxCFStringRef cf(value);
|
||||
return cf.AsString();
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/listctrl_mac.cpp
|
||||
// Name: src/osx/listctrl_mac.cpp
|
||||
// Purpose: wxListCtrl
|
||||
// Author: Julian Smart
|
||||
// Modified by: Agron Selimaj
|
||||
@ -176,7 +176,7 @@ static pascal OSStatus wxMacListCtrlEventHandler( EventHandlerCallRef handler ,
|
||||
|
||||
DEFINE_ONE_SHOT_HANDLER_GETTER( wxMacListCtrlEventHandler )
|
||||
|
||||
class wxMacListCtrlItem : public wxMacListBoxItem
|
||||
class wxMacListCtrlItem : public wxMacDataItem
|
||||
{
|
||||
public:
|
||||
wxMacListCtrlItem();
|
||||
@ -214,8 +214,6 @@ public:
|
||||
|
||||
// create a list item (can be a subclass of wxMacListBoxItem)
|
||||
|
||||
virtual wxMacDataItem* CreateItem();
|
||||
|
||||
virtual void MacInsertItem( unsigned int n, wxListItem* item );
|
||||
virtual void MacSetColumnInfo( unsigned int row, unsigned int column, wxListItem* item );
|
||||
virtual void MacGetColumnInfo( unsigned int row, unsigned int column, wxListItem& item );
|
||||
@ -517,10 +515,9 @@ END_EVENT_TABLE()
|
||||
// implementation
|
||||
// ============================================================================
|
||||
|
||||
wxMacListControl* wxListCtrl::GetPeer() const
|
||||
wxMacDataBrowserListCtrlControl* wxListCtrl::GetListPeer() const
|
||||
{
|
||||
wxMacDataBrowserListCtrlControl *lb = wxDynamicCast(m_peer,wxMacDataBrowserListCtrlControl);
|
||||
return lb ? wx_static_cast(wxMacListControl*,lb) : 0 ;
|
||||
return dynamic_cast<wxMacDataBrowserListCtrlControl*> ( GetPeer() );
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -2433,11 +2430,6 @@ void wxMacListCtrlItem::Notification(wxMacDataItemBrowserControl *owner ,
|
||||
// we want to depend on as little as possible to make sure tear-down of controls is safe
|
||||
if ( message == kDataBrowserItemRemoved)
|
||||
{
|
||||
if ( lb != NULL && lb->GetClientDataType() == wxClientData_Object )
|
||||
{
|
||||
delete (wxClientData*) (m_data);
|
||||
}
|
||||
|
||||
delete this;
|
||||
return;
|
||||
}
|
||||
@ -3245,18 +3237,14 @@ void wxMacDataBrowserListCtrlControl::MacGetColumnInfo( unsigned int row, unsign
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void wxMacDataBrowserListCtrlControl::MacInsertItem( unsigned int n, wxListItem* item )
|
||||
{
|
||||
wxMacDataItemBrowserControl::MacInsert(n, item->GetText());
|
||||
|
||||
wxMacDataItemBrowserControl::MacInsert(n, new wxMacListCtrlItem() );
|
||||
MacSetColumnInfo(n, 0, item);
|
||||
}
|
||||
|
||||
wxMacDataItem* wxMacDataBrowserListCtrlControl::CreateItem()
|
||||
{
|
||||
return new wxMacListCtrlItem();
|
||||
}
|
||||
|
||||
wxMacListCtrlItem::wxMacListCtrlItem()
|
||||
{
|
||||
m_rowItems = wxListItemList();
|
||||
@ -3278,9 +3266,10 @@ void wxMacListCtrlItem::SetColumnImageValue( unsigned int column, int imageIndex
|
||||
|
||||
wxString wxMacListCtrlItem::GetColumnTextValue( unsigned int column )
|
||||
{
|
||||
/* TODO CHECK REMOVE
|
||||
if ( column == 0 )
|
||||
return GetLabel();
|
||||
|
||||
*/
|
||||
if ( HasColumnInfo(column) )
|
||||
return GetColumnInfo(column)->GetText();
|
||||
|
||||
@ -3292,9 +3281,11 @@ void wxMacListCtrlItem::SetColumnTextValue( unsigned int column, const wxString&
|
||||
if ( HasColumnInfo(column) )
|
||||
GetColumnInfo(column)->SetText(text);
|
||||
|
||||
/* TODO CHECK REMOVE
|
||||
// for compatibility with superclass APIs
|
||||
if ( column == 0 )
|
||||
SetLabel(text);
|
||||
*/
|
||||
}
|
||||
|
||||
wxListItem* wxMacListCtrlItem::GetColumnInfo( unsigned int column )
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/mdi.cpp
|
||||
// Name: src/osx/carbon/mdi.cpp
|
||||
// Purpose: MDI classes
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/mediactrl.cpp
|
||||
// Name: src/osx/carbon/mediactrl.cpp
|
||||
// Purpose: Built-in Media Backends for Mac
|
||||
// Author: Ryan Norton <wxprojects@comcast.net>
|
||||
// Modified by:
|
||||
@ -45,18 +45,6 @@
|
||||
#include "wx/timer.h"
|
||||
#endif
|
||||
|
||||
// uma is for wxMacFSSpec
|
||||
#include "wx/osx/uma.h"
|
||||
|
||||
// standard QT stuff
|
||||
#ifndef __DARWIN__
|
||||
#include <Movies.h>
|
||||
#include <Gestalt.h>
|
||||
#include <QuickTimeComponents.h>
|
||||
#else
|
||||
#include <QuickTime/QuickTimeComponents.h>
|
||||
#endif
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
#define USE_QUICKTIME 1
|
||||
#else
|
||||
@ -65,6 +53,9 @@
|
||||
|
||||
#if USE_QUICKTIME
|
||||
|
||||
#include "wx/osx/private.h"
|
||||
#include <QuickTime/QuickTimeComponents.h>
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Height and Width of movie controller in the movie control (apple samples)
|
||||
//---------------------------------------------------------------------------
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/menuitem.cpp
|
||||
// Name: src/osx/carbon/menuitem.cpp
|
||||
// Purpose: wxMenuItem implementation
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -19,271 +19,7 @@
|
||||
#include "wx/menu.h"
|
||||
#endif // WX_PRECOMP
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxMenuItem, wxObject)
|
||||
|
||||
|
||||
wxMenuItem::wxMenuItem(wxMenu *pParentMenu,
|
||||
int id,
|
||||
const wxString& text,
|
||||
const wxString& strHelp,
|
||||
wxItemKind kind,
|
||||
wxMenu *pSubMenu)
|
||||
:wxMenuItemBase(pParentMenu, id, text, strHelp, kind, pSubMenu)
|
||||
{
|
||||
wxASSERT_MSG( id != 0 || pSubMenu != NULL , wxT("A MenuItem ID of Zero does not work under Mac") ) ;
|
||||
|
||||
// In other languages there is no difference in naming the Exit/Quit menu item between MacOS and Windows guidelines
|
||||
// therefore these item must not be translated
|
||||
if ( wxStripMenuCodes(m_text).Upper() == wxT("EXIT") )
|
||||
m_text = wxT("Quit\tCtrl+Q") ;
|
||||
|
||||
m_radioGroup.start = -1;
|
||||
m_isRadioGroupStart = false;
|
||||
}
|
||||
|
||||
wxMenuItem::~wxMenuItem()
|
||||
{
|
||||
}
|
||||
|
||||
// change item state
|
||||
// -----------------
|
||||
|
||||
void wxMenuItem::SetBitmap(const wxBitmap& bitmap)
|
||||
{
|
||||
m_bitmap = bitmap;
|
||||
UpdateItemBitmap();
|
||||
}
|
||||
|
||||
void wxMenuItem::UpdateItemBitmap()
|
||||
{
|
||||
if ( !m_parentMenu )
|
||||
return ;
|
||||
|
||||
MenuHandle mhandle = MAC_WXHMENU(m_parentMenu->GetHMenu()) ;
|
||||
MenuItemIndex index = m_parentMenu->MacGetIndexFromItem( this ) ;
|
||||
DoUpdateItemBitmap( mhandle, index );
|
||||
}
|
||||
|
||||
void wxMenuItem::DoUpdateItemBitmap( WXHMENU menu, wxUint16 index)
|
||||
{
|
||||
MenuHandle mhandle = (MenuHandle) menu;
|
||||
|
||||
if ( mhandle == NULL || index == 0)
|
||||
return ;
|
||||
|
||||
if ( m_bitmap.Ok() )
|
||||
{
|
||||
#if wxUSE_BMPBUTTON
|
||||
ControlButtonContentInfo info ;
|
||||
wxMacCreateBitmapButton( &info , m_bitmap ) ;
|
||||
if ( info.contentType != kControlNoContent )
|
||||
{
|
||||
if ( info.contentType == kControlContentIconRef )
|
||||
SetMenuItemIconHandle( mhandle , index ,
|
||||
kMenuIconRefType , (Handle) info.u.iconRef ) ;
|
||||
else if ( info.contentType == kControlContentCGImageRef )
|
||||
SetMenuItemIconHandle( mhandle , index ,
|
||||
kMenuCGImageRefType , (Handle) info.u.imageRef ) ;
|
||||
}
|
||||
wxMacReleaseBitmapButton( &info ) ;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
void wxMenuItem::UpdateItemStatus()
|
||||
{
|
||||
if ( !m_parentMenu )
|
||||
return ;
|
||||
|
||||
if ( IsSeparator() )
|
||||
return ;
|
||||
|
||||
if ( GetId() == wxApp::s_macPreferencesMenuItemId)
|
||||
{
|
||||
if ( !IsEnabled() )
|
||||
DisableMenuCommand( NULL , kHICommandPreferences ) ;
|
||||
else
|
||||
EnableMenuCommand( NULL , kHICommandPreferences ) ;
|
||||
}
|
||||
|
||||
if ( GetId() == wxApp::s_macExitMenuItemId)
|
||||
{
|
||||
if ( !IsEnabled() )
|
||||
DisableMenuCommand( NULL , kHICommandQuit ) ;
|
||||
else
|
||||
EnableMenuCommand( NULL , kHICommandQuit ) ;
|
||||
}
|
||||
|
||||
{
|
||||
MenuHandle mhandle = MAC_WXHMENU(m_parentMenu->GetHMenu()) ;
|
||||
MenuItemIndex index = m_parentMenu->MacGetIndexFromItem( this ) ;
|
||||
if ( mhandle == NULL || index == 0)
|
||||
return ;
|
||||
|
||||
UMAEnableMenuItem( mhandle , index , m_isEnabled ) ;
|
||||
if ( IsCheckable() && IsChecked() )
|
||||
::SetItemMark( mhandle , index , 0x12 ) ; // checkmark
|
||||
else
|
||||
::SetItemMark( mhandle , index , 0 ) ; // no mark
|
||||
|
||||
UMASetMenuItemText( mhandle , index , wxStripMenuCodes(m_text) , wxFont::GetDefaultEncoding() ) ;
|
||||
wxAcceleratorEntry *entry = wxAcceleratorEntry::Create( m_text ) ;
|
||||
UMASetMenuItemShortcut( mhandle , index , entry ) ;
|
||||
delete entry ;
|
||||
}
|
||||
}
|
||||
|
||||
void wxMenuItem::UpdateItemText()
|
||||
{
|
||||
if ( !m_parentMenu )
|
||||
return ;
|
||||
|
||||
MenuHandle mhandle = MAC_WXHMENU(m_parentMenu->GetHMenu()) ;
|
||||
MenuItemIndex index = m_parentMenu->MacGetIndexFromItem( this ) ;
|
||||
if (mhandle == NULL || index == 0)
|
||||
return ;
|
||||
|
||||
wxString text = m_text;
|
||||
if (text.IsEmpty() && !IsSeparator())
|
||||
{
|
||||
wxASSERT_MSG(wxIsStockID(GetId()), wxT("A non-stock menu item with an empty label?"));
|
||||
text = wxGetStockLabel(GetId(), wxSTOCK_WITH_ACCELERATOR|wxSTOCK_WITH_MNEMONIC);
|
||||
}
|
||||
|
||||
UMASetMenuItemText( mhandle , index , wxStripMenuCodes(text) , wxFont::GetDefaultEncoding() ) ;
|
||||
wxAcceleratorEntry *entry = wxAcceleratorEntry::Create( text ) ;
|
||||
UMASetMenuItemShortcut( mhandle , index , entry ) ;
|
||||
delete entry ;
|
||||
}
|
||||
|
||||
void wxMenuItem::Enable(bool bDoEnable)
|
||||
{
|
||||
if (( m_isEnabled != bDoEnable
|
||||
// avoid changing menuitem state when menu is disabled
|
||||
// eg. BeginAppModalStateForWindow() will disable menus and ignore this change
|
||||
// which in turn causes m_isEnabled to become out of sync with real menuitem state
|
||||
&& !(m_parentMenu && !IsMenuItemEnabled(MAC_WXHMENU(m_parentMenu->GetHMenu()), 0)) )
|
||||
// always update builtin menuitems
|
||||
|| ( GetId() == wxApp::s_macPreferencesMenuItemId
|
||||
|| GetId() == wxApp::s_macExitMenuItemId
|
||||
|| GetId() == wxApp::s_macAboutMenuItemId
|
||||
))
|
||||
{
|
||||
wxMenuItemBase::Enable( bDoEnable ) ;
|
||||
UpdateItemStatus() ;
|
||||
}
|
||||
}
|
||||
|
||||
void wxMenuItem::UncheckRadio()
|
||||
{
|
||||
if ( m_isChecked )
|
||||
{
|
||||
wxMenuItemBase::Check( false ) ;
|
||||
UpdateItemStatus() ;
|
||||
}
|
||||
}
|
||||
|
||||
void wxMenuItem::Check(bool bDoCheck)
|
||||
{
|
||||
wxCHECK_RET( IsCheckable() && !IsSeparator(), wxT("only checkable items may be checked") );
|
||||
|
||||
if ( m_isChecked != bDoCheck )
|
||||
{
|
||||
if ( GetKind() == wxITEM_RADIO )
|
||||
{
|
||||
if ( bDoCheck )
|
||||
{
|
||||
wxMenuItemBase::Check( bDoCheck ) ;
|
||||
UpdateItemStatus() ;
|
||||
|
||||
// get the index of this item in the menu
|
||||
const wxMenuItemList& items = m_parentMenu->GetMenuItems();
|
||||
int pos = items.IndexOf(this);
|
||||
wxCHECK_RET( pos != wxNOT_FOUND,
|
||||
_T("menuitem not found in the menu items list?") );
|
||||
|
||||
// get the radio group range
|
||||
int start, end;
|
||||
|
||||
if ( m_isRadioGroupStart )
|
||||
{
|
||||
// we already have all information we need
|
||||
start = pos;
|
||||
end = m_radioGroup.end;
|
||||
}
|
||||
else // next radio group item
|
||||
{
|
||||
// get the radio group end from the start item
|
||||
start = m_radioGroup.start;
|
||||
end = items.Item(start)->GetData()->m_radioGroup.end;
|
||||
}
|
||||
|
||||
// also uncheck all the other items in this radio group
|
||||
wxMenuItemList::compatibility_iterator node = items.Item(start);
|
||||
for ( int n = start; n <= end && node; n++ )
|
||||
{
|
||||
if ( n != pos )
|
||||
((wxMenuItem*)node->GetData())->UncheckRadio();
|
||||
|
||||
node = node->GetNext();
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wxMenuItemBase::Check( bDoCheck ) ;
|
||||
UpdateItemStatus() ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void wxMenuItem::SetItemLabel(const wxString& text)
|
||||
{
|
||||
// don't do anything if label didn't change
|
||||
if ( m_text == text )
|
||||
return;
|
||||
|
||||
wxMenuItemBase::SetItemLabel(text);
|
||||
|
||||
UpdateItemText() ;
|
||||
}
|
||||
|
||||
// radio group stuff
|
||||
// -----------------
|
||||
|
||||
void wxMenuItem::SetAsRadioGroupStart()
|
||||
{
|
||||
m_isRadioGroupStart = true;
|
||||
}
|
||||
|
||||
void wxMenuItem::SetRadioGroupStart(int start)
|
||||
{
|
||||
wxASSERT_MSG( !m_isRadioGroupStart,
|
||||
wxT("should only be called for the next radio items") );
|
||||
|
||||
m_radioGroup.start = start;
|
||||
}
|
||||
|
||||
void wxMenuItem::SetRadioGroupEnd(int end)
|
||||
{
|
||||
wxASSERT_MSG( m_isRadioGroupStart,
|
||||
wxT("should only be called for the first radio item") );
|
||||
|
||||
m_radioGroup.end = end;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxMenuItemBase
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxMenuItem *wxMenuItemBase::New(wxMenu *parentMenu,
|
||||
int id,
|
||||
const wxString& name,
|
||||
const wxString& help,
|
||||
wxItemKind kind,
|
||||
wxMenu *subMenu)
|
||||
{
|
||||
return new wxMenuItem(parentMenu, id, name, help, kind, subMenu);
|
||||
}
|
||||
// because on mac carbon everything is done through MenuRef APIs both implementation
|
||||
// classes are in menu.cpp
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/metafile.cpp
|
||||
// Name: src/osx/carbon/metafile.cpp
|
||||
// Purpose: wxMetaFile, wxMetaFileDC etc. These classes are optional.
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -24,7 +24,7 @@
|
||||
|
||||
#include "wx/metafile.h"
|
||||
#include "wx/clipbrd.h"
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
#include "wx/graphics.h"
|
||||
#include "wx/osx/carbon/metafile.h"
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/mimetype.cpp
|
||||
// Name: src/osx/carbon/mimetype.cpp
|
||||
// Purpose: Mac Carbon implementation for wx MIME-related classes
|
||||
// Author: Ryan Norton
|
||||
// Modified by:
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/msgdlg.cpp
|
||||
// Name: src/osx/carbon/msgdlg.cpp
|
||||
// Purpose: wxMessageDialog
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/nonownedwnd.cpp
|
||||
// Name: src/osx/carbon/nonownedwnd.cpp
|
||||
// Purpose: implementation of wxNonOwnedWindow
|
||||
// Author: Stefan Csomor
|
||||
// Created: 2008-03-24
|
||||
@ -28,374 +28,15 @@
|
||||
#include "wx/sysopt.h"
|
||||
#endif
|
||||
|
||||
//
|
||||
// TODO BEGIN move to nonowned_osx.cpp
|
||||
//
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// constants
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// trace mask for activation tracing messages
|
||||
#define TRACE_ACTIVATE "activation"
|
||||
|
||||
wxWindow* g_MacLastWindow = NULL ;
|
||||
// ============================================================================
|
||||
// wxNonOwnedWindow implementation
|
||||
// ============================================================================
|
||||
|
||||
// unified title and toolbar constant - not in Tiger headers, so we duplicate it here
|
||||
#define kWindowUnifiedTitleAndToolbarAttribute (1 << 7)
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// wxWindowMac utility functions
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// Find an item given the Macintosh Window Reference
|
||||
|
||||
WX_DECLARE_HASH_MAP(WXWindow, wxNonOwnedWindow*, wxPointerHash, wxPointerEqual, MacWindowMap);
|
||||
|
||||
static MacWindowMap wxWinMacWindowList;
|
||||
|
||||
wxNonOwnedWindow *wxFindWindowFromWXWindow(WXWindow inWindowRef)
|
||||
{
|
||||
MacWindowMap::iterator node = wxWinMacWindowList.find(inWindowRef);
|
||||
|
||||
return (node == wxWinMacWindowList.end()) ? NULL : node->second;
|
||||
}
|
||||
|
||||
void wxAssociateWindowWithWXWindow(WXWindow inWindowRef, wxNonOwnedWindow *win) ;
|
||||
void wxAssociateWindowWithWXWindow(WXWindow inWindowRef, wxNonOwnedWindow *win)
|
||||
{
|
||||
// adding NULL WindowRef is (first) surely a result of an error and
|
||||
// nothing else :-)
|
||||
wxCHECK_RET( inWindowRef != (WXWindow) NULL, wxT("attempt to add a NULL WindowRef to window list") );
|
||||
|
||||
wxWinMacWindowList[inWindowRef] = win;
|
||||
}
|
||||
|
||||
void wxRemoveWXWindowAssociation(wxNonOwnedWindow *win) ;
|
||||
void wxRemoveWXWindowAssociation(wxNonOwnedWindow *win)
|
||||
{
|
||||
MacWindowMap::iterator it;
|
||||
for ( it = wxWinMacWindowList.begin(); it != wxWinMacWindowList.end(); ++it )
|
||||
{
|
||||
if ( it->second == win )
|
||||
{
|
||||
wxWinMacWindowList.erase(it);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wxNonOwnedWindow* wxNonOwnedWindow::GetFromWXWindow( WXWindow win )
|
||||
{
|
||||
return wxFindWindowFromWXWindow( win );
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxNonOwnedWindow creation
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
IMPLEMENT_ABSTRACT_CLASS( wxNonOwnedWindowImpl , wxObject )
|
||||
|
||||
wxNonOwnedWindow *wxNonOwnedWindow::s_macDeactivateWindow = NULL;
|
||||
|
||||
void wxNonOwnedWindow::Init()
|
||||
{
|
||||
m_nowpeer = NULL;
|
||||
}
|
||||
|
||||
bool wxNonOwnedWindow::Create(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxString& name)
|
||||
{
|
||||
// init our fields
|
||||
Init();
|
||||
|
||||
m_windowStyle = style;
|
||||
|
||||
SetName( name );
|
||||
|
||||
m_windowId = id == -1 ? NewControlId() : id;
|
||||
m_windowStyle = style;
|
||||
m_isShown = false;
|
||||
|
||||
// create frame.
|
||||
int x = (int)pos.x;
|
||||
int y = (int)pos.y;
|
||||
|
||||
wxRect display = wxGetClientDisplayRect() ;
|
||||
|
||||
if ( x == wxDefaultPosition.x )
|
||||
x = display.x ;
|
||||
|
||||
if ( y == wxDefaultPosition.y )
|
||||
y = display.y ;
|
||||
|
||||
int w = WidthDefault(size.x);
|
||||
int h = HeightDefault(size.y);
|
||||
|
||||
// temporary define, TODO
|
||||
#if wxOSX_USE_CARBON
|
||||
m_nowpeer = new wxNonOwnedWindowCarbonImpl( this );
|
||||
#elif wxOSX_USE_COCOA
|
||||
m_nowpeer = new wxNonOwnedWindowCocoaImpl( this );
|
||||
#elif wxOSX_USE_IPHONE
|
||||
m_nowpeer = new wxNonOwnedWindowIPhoneImpl( this );
|
||||
#endif
|
||||
|
||||
m_nowpeer->Create( parent, wxPoint(x,y) , wxSize(w,h) , style , GetExtraStyle(), name ) ;
|
||||
wxAssociateWindowWithWXWindow( m_nowpeer->GetWXWindow() , this ) ;
|
||||
#if wxOSX_USE_CARBON
|
||||
// temporary cast, TODO
|
||||
m_peer = (wxMacControl*) wxWidgetImpl::CreateContentView(this);
|
||||
#else
|
||||
m_peer = wxWidgetImpl::CreateContentView(this);
|
||||
#endif
|
||||
|
||||
DoSetWindowVariant( m_windowVariant ) ;
|
||||
|
||||
wxWindowCreateEvent event(this);
|
||||
HandleWindowEvent(event);
|
||||
|
||||
SetBackgroundColour(wxSystemSettings::GetColour( wxSYS_COLOUR_3DFACE ));
|
||||
|
||||
if ( parent )
|
||||
parent->AddChild(this);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
wxNonOwnedWindow::~wxNonOwnedWindow()
|
||||
{
|
||||
wxRemoveWXWindowAssociation( this ) ;
|
||||
if ( m_nowpeer )
|
||||
m_nowpeer->Destroy();
|
||||
|
||||
// avoid dangling refs
|
||||
if ( s_macDeactivateWindow == this )
|
||||
s_macDeactivateWindow = NULL;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxNonOwnedWindow misc
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
bool wxNonOwnedWindow::ShowWithEffect(wxShowEffect effect,
|
||||
unsigned timeout )
|
||||
{
|
||||
if ( !wxWindow::Show(true) )
|
||||
return false;
|
||||
|
||||
// because apps expect a size event to occur at this moment
|
||||
wxSizeEvent event(GetSize() , m_windowId);
|
||||
event.SetEventObject(this);
|
||||
HandleWindowEvent(event);
|
||||
|
||||
|
||||
return m_nowpeer->ShowWithEffect(true, effect, timeout);
|
||||
}
|
||||
|
||||
bool wxNonOwnedWindow::HideWithEffect(wxShowEffect effect,
|
||||
unsigned timeout )
|
||||
{
|
||||
if ( !wxWindow::Show(false) )
|
||||
return false;
|
||||
|
||||
return m_nowpeer->ShowWithEffect(false, effect, timeout);
|
||||
}
|
||||
|
||||
wxPoint wxNonOwnedWindow::GetClientAreaOrigin() const
|
||||
{
|
||||
int left, top, width, height;
|
||||
m_nowpeer->GetContentArea(left, top, width, height);
|
||||
return wxPoint(left, top);
|
||||
}
|
||||
|
||||
bool wxNonOwnedWindow::SetBackgroundColour(const wxColour& c )
|
||||
{
|
||||
if ( !wxWindow::SetBackgroundColour(c) && m_hasBgCol )
|
||||
return false ;
|
||||
|
||||
if ( GetBackgroundStyle() != wxBG_STYLE_CUSTOM )
|
||||
{
|
||||
return m_nowpeer->SetBackgroundColour(c);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Raise the window to the top of the Z order
|
||||
void wxNonOwnedWindow::Raise()
|
||||
{
|
||||
m_nowpeer->Raise();
|
||||
}
|
||||
|
||||
// Lower the window to the bottom of the Z order
|
||||
void wxNonOwnedWindow::Lower()
|
||||
{
|
||||
m_nowpeer->Lower();
|
||||
}
|
||||
|
||||
void wxNonOwnedWindow::MacDelayedDeactivation(long timestamp)
|
||||
{
|
||||
if (s_macDeactivateWindow)
|
||||
{
|
||||
wxLogTrace(TRACE_ACTIVATE,
|
||||
wxT("Doing delayed deactivation of %p"),
|
||||
s_macDeactivateWindow);
|
||||
|
||||
s_macDeactivateWindow->MacActivate(timestamp, false);
|
||||
}
|
||||
}
|
||||
|
||||
void wxNonOwnedWindow::MacActivate( long timestamp , bool WXUNUSED(inIsActivating) )
|
||||
{
|
||||
wxLogTrace(TRACE_ACTIVATE, wxT("TopLevel=%p::MacActivate"), this);
|
||||
|
||||
if (s_macDeactivateWindow == this)
|
||||
s_macDeactivateWindow = NULL;
|
||||
|
||||
MacDelayedDeactivation(timestamp);
|
||||
}
|
||||
|
||||
bool wxNonOwnedWindow::Show(bool show)
|
||||
{
|
||||
if ( !wxWindow::Show(show) )
|
||||
return false;
|
||||
|
||||
if ( m_nowpeer )
|
||||
m_nowpeer->Show(show);
|
||||
|
||||
if ( show )
|
||||
{
|
||||
// because apps expect a size event to occur at this moment
|
||||
wxSizeEvent event(GetSize() , m_windowId);
|
||||
event.SetEventObject(this);
|
||||
HandleWindowEvent(event);
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
||||
bool wxNonOwnedWindow::SetTransparent(wxByte alpha)
|
||||
{
|
||||
return m_nowpeer->SetTransparent(alpha);
|
||||
}
|
||||
|
||||
|
||||
bool wxNonOwnedWindow::CanSetTransparent()
|
||||
{
|
||||
return m_nowpeer->CanSetTransparent();
|
||||
}
|
||||
|
||||
|
||||
void wxNonOwnedWindow::SetExtraStyle(long exStyle)
|
||||
{
|
||||
if ( GetExtraStyle() == exStyle )
|
||||
return ;
|
||||
|
||||
wxWindow::SetExtraStyle( exStyle ) ;
|
||||
|
||||
if ( m_nowpeer )
|
||||
m_nowpeer->SetExtraStyle(exStyle);
|
||||
}
|
||||
|
||||
bool wxNonOwnedWindow::SetBackgroundStyle(wxBackgroundStyle style)
|
||||
{
|
||||
if ( !wxWindow::SetBackgroundStyle(style) )
|
||||
return false ;
|
||||
|
||||
return m_nowpeer->SetBackgroundStyle(style);
|
||||
}
|
||||
|
||||
void wxNonOwnedWindow::DoMoveWindow(int x, int y, int width, int height)
|
||||
{
|
||||
m_cachedClippedRectValid = false ;
|
||||
|
||||
m_nowpeer->MoveWindow(x, y, width, height);
|
||||
wxWindowMac::MacSuperChangedPosition() ; // like this only children will be notified
|
||||
}
|
||||
|
||||
void wxNonOwnedWindow::DoGetPosition( int *x, int *y ) const
|
||||
{
|
||||
int x1,y1 ;
|
||||
m_nowpeer->GetPosition(x1, y1);
|
||||
|
||||
if (x)
|
||||
*x = x1 ;
|
||||
if (y)
|
||||
*y = y1 ;
|
||||
}
|
||||
|
||||
void wxNonOwnedWindow::DoGetSize( int *width, int *height ) const
|
||||
{
|
||||
int w,h;
|
||||
|
||||
m_nowpeer->GetSize(w, h);
|
||||
|
||||
if (width)
|
||||
*width = w ;
|
||||
if (height)
|
||||
*height = h ;
|
||||
}
|
||||
|
||||
void wxNonOwnedWindow::DoGetClientSize( int *width, int *height ) const
|
||||
{
|
||||
int left, top, w, h;
|
||||
m_nowpeer->GetContentArea(left, top, w, h);
|
||||
|
||||
if (width)
|
||||
*width = w ;
|
||||
if (height)
|
||||
*height = h ;
|
||||
}
|
||||
|
||||
|
||||
void wxNonOwnedWindow::Update()
|
||||
{
|
||||
m_nowpeer->Update();
|
||||
}
|
||||
|
||||
WXWindow wxNonOwnedWindow::GetWXWindow() const
|
||||
{
|
||||
return m_nowpeer ? m_nowpeer->GetWXWindow() : NULL;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Shape implementation
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
bool wxNonOwnedWindow::SetShape(const wxRegion& region)
|
||||
{
|
||||
wxCHECK_MSG( HasFlag(wxFRAME_SHAPED), false,
|
||||
_T("Shaped windows must be created with the wxFRAME_SHAPED style."));
|
||||
|
||||
// The empty region signifies that the shape
|
||||
// should be removed from the window.
|
||||
if ( region.IsEmpty() )
|
||||
{
|
||||
wxSize sz = GetClientSize();
|
||||
wxRegion rgn(0, 0, sz.x, sz.y);
|
||||
if ( rgn.IsEmpty() )
|
||||
return false ;
|
||||
else
|
||||
return SetShape(rgn);
|
||||
}
|
||||
|
||||
return m_nowpeer->SetShape(region);
|
||||
}
|
||||
|
||||
//
|
||||
// TODO END move to nonowned_osx.cpp
|
||||
//
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS( wxNonOwnedWindowCarbonImpl , wxNonOwnedWindowImpl )
|
||||
|
||||
|
||||
WXWindow wxNonOwnedWindowCarbonImpl::GetWXWindow() const
|
||||
{
|
||||
return (WXWindow) m_macWindow;
|
||||
@ -585,7 +226,10 @@ void wxNonOwnedWindowCarbonImpl::MacSetUnifiedAppearance( bool set )
|
||||
// for wx.
|
||||
// TODO: Determine if we need this on Leopard as well. (should be harmless either way,
|
||||
// though)
|
||||
// since when creating the peering is not yet completely set-up we call both setters
|
||||
// explicitely
|
||||
m_wxPeer->SetBackgroundColour( wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW) ) ;
|
||||
SetBackgroundColour( wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW) ) ;
|
||||
}
|
||||
|
||||
|
||||
@ -595,12 +239,6 @@ void wxNonOwnedWindowCarbonImpl::MacSetUnifiedAppearance( bool set )
|
||||
|
||||
static pascal long wxShapedMacWindowDef(short varCode, WindowRef window, SInt16 message, SInt32 param);
|
||||
|
||||
// ============================================================================
|
||||
// wxNonOwnedWindow implementation
|
||||
// ============================================================================
|
||||
|
||||
// unified title and toolbar constant - not in Tiger headers, so we duplicate it here
|
||||
#define kWindowUnifiedTitleAndToolbarAttribute (1 << 7)
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Carbon Events
|
||||
@ -1036,6 +674,18 @@ wxMacTopLevelMouseEventHandler(EventHandlerCallRef WXUNUSED(handler),
|
||||
::HiliteMenu(0);
|
||||
result = noErr ;
|
||||
}
|
||||
}
|
||||
else if ( window && windowPart == inProxyIcon )
|
||||
{
|
||||
// special case proxy icon bar, as we are having a low-level runloop we must do it ourselves
|
||||
if ( cEvent.GetKind() == kEventMouseDown )
|
||||
{
|
||||
if ( ::TrackWindowProxyDrag( window, screenMouseLocation ) != errUserWantsToDragWindow )
|
||||
{
|
||||
// TODO Track change of file path and report back
|
||||
result = noErr ;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( currentMouseWindow )
|
||||
{
|
||||
@ -1138,22 +788,14 @@ wxNonOwnedWindowEventHandler(EventHandlerCallRef WXUNUSED(handler),
|
||||
{
|
||||
case kEventWindowActivated :
|
||||
{
|
||||
toplevelWindow->MacActivate( cEvent.GetTicks() , true) ;
|
||||
wxActivateEvent wxevent(wxEVT_ACTIVATE, true , toplevelWindow->GetId());
|
||||
wxevent.SetTimestamp( cEvent.GetTicks() ) ;
|
||||
wxevent.SetEventObject(toplevelWindow);
|
||||
toplevelWindow->HandleWindowEvent(wxevent);
|
||||
toplevelWindow->HandleActivated( cEvent.GetTicks() , true) ;
|
||||
// we still sending an eventNotHandledErr in order to allow for default processing
|
||||
}
|
||||
break ;
|
||||
|
||||
case kEventWindowDeactivated :
|
||||
{
|
||||
toplevelWindow->MacActivate(cEvent.GetTicks() , false) ;
|
||||
wxActivateEvent wxevent(wxEVT_ACTIVATE, false , toplevelWindow->GetId());
|
||||
wxevent.SetTimestamp( cEvent.GetTicks() ) ;
|
||||
wxevent.SetEventObject(toplevelWindow);
|
||||
toplevelWindow->HandleWindowEvent(wxevent);
|
||||
toplevelWindow->HandleActivated( cEvent.GetTicks() , false) ;
|
||||
// we still sending an eventNotHandledErr in order to allow for default processing
|
||||
}
|
||||
break ;
|
||||
@ -1175,27 +817,12 @@ wxNonOwnedWindowEventHandler(EventHandlerCallRef WXUNUSED(handler),
|
||||
wxRect r( newRect.left , newRect.top , newRect.right - newRect.left , newRect.bottom - newRect.top ) ;
|
||||
if ( attributes & kWindowBoundsChangeSizeChanged )
|
||||
{
|
||||
#ifndef __WXUNIVERSAL__
|
||||
// according to the other ports we handle this within the OS level
|
||||
// resize event, not within a wxSizeEvent
|
||||
wxFrame *frame = wxDynamicCast( toplevelWindow , wxFrame ) ;
|
||||
if ( frame )
|
||||
{
|
||||
frame->PositionBars();
|
||||
}
|
||||
#endif
|
||||
wxSizeEvent event( r.GetSize() , toplevelWindow->GetId() ) ;
|
||||
event.SetEventObject( toplevelWindow ) ;
|
||||
|
||||
toplevelWindow->HandleWindowEvent(event) ;
|
||||
toplevelWindow->wxWindowMac::MacSuperChangedPosition() ; // like this only children will be notified
|
||||
toplevelWindow->HandleResized(cEvent.GetTicks() ) ;
|
||||
}
|
||||
|
||||
if ( attributes & kWindowBoundsChangeOriginChanged )
|
||||
{
|
||||
wxMoveEvent event( r.GetLeftTop() , toplevelWindow->GetId() ) ;
|
||||
event.SetEventObject( toplevelWindow ) ;
|
||||
toplevelWindow->HandleWindowEvent(event) ;
|
||||
toplevelWindow->HandleMoved(cEvent.GetTicks() ) ;
|
||||
}
|
||||
|
||||
result = noErr ;
|
||||
@ -1214,31 +841,17 @@ wxNonOwnedWindowEventHandler(EventHandlerCallRef WXUNUSED(handler),
|
||||
|
||||
toplevelWindow->GetNonOwnedPeer()->GetContentArea(left, top, right, bottom);
|
||||
|
||||
wxRect r(
|
||||
wxRect adjustR(
|
||||
newRect.left - left,
|
||||
newRect.top - top,
|
||||
newRect.right - newRect.left + left + right,
|
||||
newRect.bottom - newRect.top + top + bottom ) ;
|
||||
|
||||
// this is a EVT_SIZING not a EVT_SIZE type !
|
||||
wxSizeEvent wxevent( r , toplevelWindow->GetId() ) ;
|
||||
wxevent.SetEventObject( toplevelWindow ) ;
|
||||
wxRect adjustR = r ;
|
||||
if ( toplevelWindow->HandleWindowEvent(wxevent) )
|
||||
adjustR = wxevent.GetRect() ;
|
||||
|
||||
if ( toplevelWindow->GetMaxWidth() != -1 && adjustR.GetWidth() > toplevelWindow->GetMaxWidth() )
|
||||
adjustR.SetWidth( toplevelWindow->GetMaxWidth() ) ;
|
||||
if ( toplevelWindow->GetMaxHeight() != -1 && adjustR.GetHeight() > toplevelWindow->GetMaxHeight() )
|
||||
adjustR.SetHeight( toplevelWindow->GetMaxHeight() ) ;
|
||||
if ( toplevelWindow->GetMinWidth() != -1 && adjustR.GetWidth() < toplevelWindow->GetMinWidth() )
|
||||
adjustR.SetWidth( toplevelWindow->GetMinWidth() ) ;
|
||||
if ( toplevelWindow->GetMinHeight() != -1 && adjustR.GetHeight() < toplevelWindow->GetMinHeight() )
|
||||
adjustR.SetHeight( toplevelWindow->GetMinHeight() ) ;
|
||||
toplevelWindow->HandleResizing( cEvent.GetTicks(), &adjustR );
|
||||
|
||||
const Rect adjustedRect = { adjustR.y + top , adjustR.x + left , adjustR.y + adjustR.height - bottom , adjustR.x + adjustR.width - right } ;
|
||||
if ( !EqualRect( &newRect , &adjustedRect ) )
|
||||
cEvent.SetParameter<Rect>( kEventParamCurrentBounds , &adjustedRect ) ;
|
||||
toplevelWindow->wxWindowMac::MacSuperChangedPosition() ; // like this only children will be notified
|
||||
}
|
||||
|
||||
result = noErr ;
|
||||
@ -1292,7 +905,12 @@ pascal OSStatus wxNonOwnedEventHandler( EventHandlerCallRef handler , EventRef e
|
||||
switch ( GetEventClass( event ) )
|
||||
{
|
||||
case kEventClassTextInput :
|
||||
result = wxMacUnicodeTextEventHandler( handler, event , data ) ;
|
||||
{
|
||||
// TODO remove as soon as all events are on implementation classes only
|
||||
wxNonOwnedWindow* toplevelWindow = data ? ((wxNonOwnedWindowImpl*) data)->GetWXPeer() : NULL;
|
||||
|
||||
result = wxMacUnicodeTextEventHandler( handler, event , toplevelWindow ) ;
|
||||
}
|
||||
break ;
|
||||
|
||||
case kEventClassKeyboard :
|
||||
@ -1498,6 +1116,12 @@ wxNonOwnedWindowCarbonImpl::~wxNonOwnedWindowCarbonImpl()
|
||||
|
||||
void wxNonOwnedWindowCarbonImpl::Destroy()
|
||||
{
|
||||
if ( m_macEventHandler )
|
||||
{
|
||||
::RemoveEventHandler((EventHandlerRef) m_macEventHandler);
|
||||
m_macEventHandler = NULL ;
|
||||
}
|
||||
|
||||
wxPendingDelete.Append( new wxDeferredObjectDeleter( this ) ) ;
|
||||
}
|
||||
|
||||
@ -2014,4 +1638,11 @@ void wxNonOwnedWindowCarbonImpl::WindowToScreen( int *x, int *y )
|
||||
if ( y )
|
||||
*y = p.y;
|
||||
}
|
||||
#endif // wxOSX_USE_CARBON
|
||||
|
||||
wxNonOwnedWindowImpl* wxNonOwnedWindowImpl::CreateNonOwnedWindow( wxNonOwnedWindow* wxpeer, wxWindow* parent, const wxPoint& pos, const wxSize& size,
|
||||
long style, long extraStyle, const wxString& name )
|
||||
{
|
||||
wxNonOwnedWindowImpl* now = new wxNonOwnedWindowCarbonImpl( wxpeer );
|
||||
now->Create( parent, pos, size, style , extraStyle, name );
|
||||
return now;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/notebmac.cpp
|
||||
// Name: src/osx/carbon/notebmac.cpp
|
||||
// Purpose: implementation of wxNotebook
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -24,64 +24,21 @@
|
||||
|
||||
#include "wx/string.h"
|
||||
#include "wx/imaglist.h"
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
|
||||
// check that the page index is valid
|
||||
#define IS_VALID_PAGE(nPage) ((nPage) < GetPageCount())
|
||||
|
||||
BEGIN_EVENT_TABLE(wxNotebook, wxBookCtrlBase)
|
||||
EVT_NOTEBOOK_PAGE_CHANGED(wxID_ANY, wxNotebook::OnSelChange)
|
||||
|
||||
EVT_SIZE(wxNotebook::OnSize)
|
||||
EVT_SET_FOCUS(wxNotebook::OnSetFocus)
|
||||
EVT_NAVIGATION_KEY(wxNotebook::OnNavigationKey)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxNotebook, wxBookCtrlBase)
|
||||
|
||||
|
||||
// common part of all ctors
|
||||
void wxNotebook::Init()
|
||||
wxWidgetImplType* wxWidgetImpl::CreateTabView( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle)
|
||||
{
|
||||
m_nSelection = -1;
|
||||
}
|
||||
|
||||
// default for dynamic class
|
||||
wxNotebook::wxNotebook()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
// the same arguments as for wxControl
|
||||
wxNotebook::wxNotebook( wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxString& name )
|
||||
{
|
||||
Init();
|
||||
|
||||
Create( parent, id, pos, size, style, name );
|
||||
}
|
||||
|
||||
bool wxNotebook::Create( wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxString& name )
|
||||
{
|
||||
m_macIsUserPane = false ;
|
||||
|
||||
if (! (style & wxBK_ALIGN_MASK))
|
||||
style |= wxBK_TOP;
|
||||
|
||||
if ( !wxNotebookBase::Create( parent, id, pos, size, style, name ) )
|
||||
return false;
|
||||
|
||||
Rect bounds = wxMacGetBoundsForControl( this, pos, size );
|
||||
Rect bounds = wxMacGetBoundsForControl( wxpeer, pos, size );
|
||||
|
||||
if ( bounds.right <= bounds.left )
|
||||
bounds.right = bounds.left + 100;
|
||||
@ -89,15 +46,15 @@ bool wxNotebook::Create( wxWindow *parent,
|
||||
bounds.bottom = bounds.top + 100;
|
||||
|
||||
UInt16 tabstyle = kControlTabDirectionNorth;
|
||||
if ( HasFlag(wxBK_LEFT) )
|
||||
if ( style & wxBK_LEFT )
|
||||
tabstyle = kControlTabDirectionWest;
|
||||
else if ( HasFlag( wxBK_RIGHT ) )
|
||||
else if ( style & wxBK_RIGHT )
|
||||
tabstyle = kControlTabDirectionEast;
|
||||
else if ( HasFlag( wxBK_BOTTOM ) )
|
||||
else if ( style & wxBK_BOTTOM )
|
||||
tabstyle = kControlTabDirectionSouth;
|
||||
|
||||
ControlTabSize tabsize;
|
||||
switch (GetWindowVariant())
|
||||
switch (wxpeer->GetWindowVariant())
|
||||
{
|
||||
case wxWINDOW_VARIANT_MINI:
|
||||
tabsize = 3 ;
|
||||
@ -112,211 +69,20 @@ bool wxNotebook::Create( wxWindow *parent,
|
||||
break;
|
||||
}
|
||||
|
||||
m_peer = new wxMacControl( this );
|
||||
wxMacControl* peer = new wxMacControl( wxpeer );
|
||||
OSStatus err = CreateTabsControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds,
|
||||
tabsize, tabstyle, 0, NULL, m_peer->GetControlRefAddr() );
|
||||
tabsize, tabstyle, 0, NULL, peer->GetControlRefAddr() );
|
||||
verify_noerr( err );
|
||||
|
||||
MacPostControlCreate( pos, size );
|
||||
|
||||
return true ;
|
||||
return peer;
|
||||
}
|
||||
|
||||
// dtor
|
||||
wxNotebook::~wxNotebook()
|
||||
{
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxNotebook accessors
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void wxNotebook::SetPadding(const wxSize& WXUNUSED(padding))
|
||||
{
|
||||
// unsupported by OS
|
||||
}
|
||||
|
||||
void wxNotebook::SetTabSize(const wxSize& WXUNUSED(sz))
|
||||
{
|
||||
// unsupported by OS
|
||||
}
|
||||
|
||||
void wxNotebook::SetPageSize(const wxSize& size)
|
||||
{
|
||||
SetSize( CalcSizeFromPage( size ) );
|
||||
}
|
||||
|
||||
wxSize wxNotebook::CalcSizeFromPage(const wxSize& sizePage) const
|
||||
{
|
||||
return DoGetSizeFromClientSize( sizePage );
|
||||
}
|
||||
|
||||
int wxNotebook::DoSetSelection(size_t nPage, int flags)
|
||||
{
|
||||
wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("DoSetSelection: invalid notebook page") );
|
||||
|
||||
if ( m_nSelection == wxNOT_FOUND || nPage != (size_t)m_nSelection )
|
||||
{
|
||||
if ( flags & SetSelection_SendEvent )
|
||||
{
|
||||
if ( !SendPageChangingEvent(nPage) )
|
||||
{
|
||||
// vetoed by program
|
||||
return m_nSelection;
|
||||
}
|
||||
//else: program allows the page change
|
||||
|
||||
SendPageChangedEvent(m_nSelection, nPage);
|
||||
}
|
||||
|
||||
ChangePage(m_nSelection, nPage);
|
||||
}
|
||||
//else: no change
|
||||
|
||||
return m_nSelection;
|
||||
}
|
||||
|
||||
bool wxNotebook::SetPageText(size_t nPage, const wxString& strText)
|
||||
{
|
||||
wxCHECK_MSG( IS_VALID_PAGE(nPage), false, wxT("SetPageText: invalid notebook page") );
|
||||
|
||||
wxNotebookPage *page = m_pages[nPage];
|
||||
page->SetLabel(wxStripMenuCodes(strText));
|
||||
MacSetupTabs();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
wxString wxNotebook::GetPageText(size_t nPage) const
|
||||
{
|
||||
wxCHECK_MSG( IS_VALID_PAGE(nPage), wxEmptyString, wxT("GetPageText: invalid notebook page") );
|
||||
|
||||
wxNotebookPage *page = m_pages[nPage];
|
||||
|
||||
return page->GetLabel();
|
||||
}
|
||||
|
||||
int wxNotebook::GetPageImage(size_t nPage) const
|
||||
{
|
||||
wxCHECK_MSG( IS_VALID_PAGE(nPage), wxNOT_FOUND, wxT("GetPageImage: invalid notebook page") );
|
||||
|
||||
return m_images[nPage];
|
||||
}
|
||||
|
||||
bool wxNotebook::SetPageImage(size_t nPage, int nImage)
|
||||
{
|
||||
wxCHECK_MSG( IS_VALID_PAGE(nPage), false,
|
||||
wxT("SetPageImage: invalid notebook page") );
|
||||
wxCHECK_MSG( m_imageList && nImage < m_imageList->GetImageCount(), false,
|
||||
wxT("SetPageImage: invalid image index") );
|
||||
|
||||
if ( nImage != m_images[nPage] )
|
||||
{
|
||||
// if the item didn't have an icon before or, on the contrary, did have
|
||||
// it but has lost it now, its size will change - but if the icon just
|
||||
// changes, it won't
|
||||
m_images[nPage] = nImage;
|
||||
|
||||
MacSetupTabs() ;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxNotebook operations
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// remove one page from the notebook, without deleting the window
|
||||
wxNotebookPage* wxNotebook::DoRemovePage(size_t nPage)
|
||||
{
|
||||
wxCHECK_MSG( IS_VALID_PAGE(nPage), NULL,
|
||||
wxT("DoRemovePage: invalid notebook page") );
|
||||
|
||||
wxNotebookPage* page = m_pages[nPage] ;
|
||||
m_pages.RemoveAt(nPage);
|
||||
|
||||
MacSetupTabs();
|
||||
|
||||
if (m_nSelection >= (int)GetPageCount())
|
||||
m_nSelection = GetPageCount() - 1;
|
||||
|
||||
if (m_nSelection >= 0)
|
||||
m_pages[m_nSelection]->Show(true);
|
||||
|
||||
InvalidateBestSize();
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
// remove all pages
|
||||
bool wxNotebook::DeleteAllPages()
|
||||
{
|
||||
WX_CLEAR_ARRAY(m_pages) ;
|
||||
MacSetupTabs();
|
||||
m_nSelection = -1 ;
|
||||
InvalidateBestSize();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// same as AddPage() but does it at given position
|
||||
bool wxNotebook::InsertPage(size_t nPage,
|
||||
wxNotebookPage *pPage,
|
||||
const wxString& strText,
|
||||
bool bSelect,
|
||||
int imageId )
|
||||
{
|
||||
if ( !wxNotebookBase::InsertPage( nPage, pPage, strText, bSelect, imageId ) )
|
||||
return false;
|
||||
|
||||
wxASSERT_MSG( pPage->GetParent() == this, wxT("notebook pages must have notebook as parent") );
|
||||
|
||||
// don't show pages by default (we'll need to adjust their size first)
|
||||
pPage->Show( false ) ;
|
||||
|
||||
pPage->SetLabel( wxStripMenuCodes(strText) );
|
||||
|
||||
m_images.Insert( imageId, nPage );
|
||||
|
||||
MacSetupTabs();
|
||||
|
||||
wxRect rect = GetPageRect() ;
|
||||
pPage->SetSize( rect );
|
||||
if ( pPage->GetAutoLayout() )
|
||||
pPage->Layout();
|
||||
|
||||
// now deal with the selection
|
||||
// ---------------------------
|
||||
|
||||
// if the inserted page is before the selected one, we must update the
|
||||
// index of the selected page
|
||||
|
||||
if ( int(nPage) <= m_nSelection )
|
||||
{
|
||||
m_nSelection++;
|
||||
|
||||
// while this still is the same page showing, we need to update the tabs
|
||||
m_peer->SetValue( m_nSelection + 1 ) ;
|
||||
}
|
||||
|
||||
// some page should be selected: either this one or the first one if there
|
||||
// is still no selection
|
||||
int selNew = -1;
|
||||
if ( bSelect )
|
||||
selNew = nPage;
|
||||
else if ( m_nSelection == -1 )
|
||||
selNew = 0;
|
||||
|
||||
if ( selNew != -1 )
|
||||
SetSelection( selNew );
|
||||
|
||||
InvalidateBestSize();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
int wxNotebook::HitTest(const wxPoint& pt, long * flags) const
|
||||
{
|
||||
int resultV = wxNOT_FOUND;
|
||||
@ -375,39 +141,41 @@ int wxNotebook::HitTest(const wxPoint& pt, long * flags) const
|
||||
|
||||
return resultV;
|
||||
}
|
||||
*/
|
||||
|
||||
// Added by Mark Newsam
|
||||
// When a page is added or deleted to the notebook this function updates
|
||||
// information held in the control so that it matches the order
|
||||
// the user would expect.
|
||||
//
|
||||
void wxNotebook::MacSetupTabs()
|
||||
|
||||
void wxMacControl::SetupTabs( const wxNotebook& notebook)
|
||||
{
|
||||
m_peer->SetMaximum( GetPageCount() ) ;
|
||||
const size_t countPages = notebook.GetPageCount();
|
||||
SetMaximum( countPages ) ;
|
||||
|
||||
wxNotebookPage *page;
|
||||
ControlTabInfoRecV1 info;
|
||||
|
||||
const size_t countPages = GetPageCount();
|
||||
for (size_t ii = 0; ii < countPages; ii++)
|
||||
{
|
||||
page = m_pages[ii];
|
||||
page = (wxNotebookPage*) notebook.GetPage(ii);
|
||||
info.version = kControlTabInfoVersionOne;
|
||||
info.iconSuiteID = 0;
|
||||
wxCFStringRef cflabel( page->GetLabel(), GetFont().GetEncoding() ) ;
|
||||
wxCFStringRef cflabel( page->GetLabel(), page->GetFont().GetEncoding() ) ;
|
||||
info.name = cflabel ;
|
||||
m_peer->SetData<ControlTabInfoRecV1>( ii + 1, kControlTabInfoTag, &info ) ;
|
||||
SetData<ControlTabInfoRecV1>( ii + 1, kControlTabInfoTag, &info ) ;
|
||||
|
||||
if ( GetImageList() && GetPageImage(ii) >= 0 )
|
||||
if ( notebook.GetImageList() && notebook.GetPageImage(ii) >= 0 )
|
||||
{
|
||||
const wxBitmap bmap = GetImageList()->GetBitmap( GetPageImage( ii ) ) ;
|
||||
const wxBitmap bmap = notebook.GetImageList()->GetBitmap( notebook.GetPageImage( ii ) ) ;
|
||||
if ( bmap.Ok() )
|
||||
{
|
||||
ControlButtonContentInfo info ;
|
||||
|
||||
wxMacCreateBitmapButton( &info, bmap ) ;
|
||||
|
||||
OSStatus err = m_peer->SetData<ControlButtonContentInfo>( ii + 1, kControlTabImageContentTag, &info );
|
||||
OSStatus err = SetData<ControlButtonContentInfo>( ii + 1, kControlTabImageContentTag, &info );
|
||||
if ( err != noErr )
|
||||
{
|
||||
wxFAIL_MSG("Error when setting icon on tab");
|
||||
@ -416,201 +184,8 @@ void wxNotebook::MacSetupTabs()
|
||||
wxMacReleaseBitmapButton( &info ) ;
|
||||
}
|
||||
}
|
||||
|
||||
m_peer->SetTabEnabled( ii + 1, true ) ;
|
||||
SetTabEnabled( ii + 1, true ) ;
|
||||
}
|
||||
|
||||
Refresh();
|
||||
}
|
||||
|
||||
wxRect wxNotebook::GetPageRect() const
|
||||
{
|
||||
wxSize size = GetClientSize() ;
|
||||
|
||||
return wxRect( 0 , 0 , size.x , size.y ) ;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxNotebook callbacks
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// @@@ OnSize() is used for setting the font when it's called for the first
|
||||
// time because doing it in ::Create() doesn't work (for unknown reasons)
|
||||
void wxNotebook::OnSize(wxSizeEvent& event)
|
||||
{
|
||||
unsigned int nCount = m_pages.Count();
|
||||
wxRect rect = GetPageRect() ;
|
||||
|
||||
for ( unsigned int nPage = 0; nPage < nCount; nPage++ )
|
||||
{
|
||||
wxNotebookPage *pPage = m_pages[nPage];
|
||||
pPage->SetSize(rect);
|
||||
if ( pPage->GetAutoLayout() )
|
||||
pPage->Layout();
|
||||
}
|
||||
|
||||
// Processing continues to next OnSize
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void wxNotebook::OnSelChange(wxBookCtrlEvent& event)
|
||||
{
|
||||
// is it our tab control?
|
||||
if ( event.GetEventObject() == this )
|
||||
ChangePage(event.GetOldSelection(), event.GetSelection());
|
||||
|
||||
// we want to give others a chance to process this message as well
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void wxNotebook::OnSetFocus(wxFocusEvent& event)
|
||||
{
|
||||
// set focus to the currently selected page if any
|
||||
if ( m_nSelection != -1 )
|
||||
m_pages[m_nSelection]->SetFocus();
|
||||
|
||||
event.Skip();
|
||||
}
|
||||
|
||||
void wxNotebook::OnNavigationKey(wxNavigationKeyEvent& event)
|
||||
{
|
||||
if ( event.IsWindowChange() )
|
||||
{
|
||||
// change pages
|
||||
AdvanceSelection( event.GetDirection() );
|
||||
}
|
||||
else
|
||||
{
|
||||
// we get this event in 2 cases
|
||||
//
|
||||
// a) one of our pages might have generated it because the user TABbed
|
||||
// out from it in which case we should propagate the event upwards and
|
||||
// our parent will take care of setting the focus to prev/next sibling
|
||||
//
|
||||
// or
|
||||
//
|
||||
// b) the parent panel wants to give the focus to us so that we
|
||||
// forward it to our selected page. We can't deal with this in
|
||||
// OnSetFocus() because we don't know which direction the focus came
|
||||
// from in this case and so can't choose between setting the focus to
|
||||
// first or last panel child
|
||||
wxWindow *parent = GetParent();
|
||||
|
||||
// the cast is here to fix a GCC ICE
|
||||
if ( ((wxWindow*)event.GetEventObject()) == parent )
|
||||
{
|
||||
// no, it doesn't come from child, case (b): forward to a page
|
||||
if ( m_nSelection != -1 )
|
||||
{
|
||||
// so that the page knows that the event comes from it's parent
|
||||
// and is being propagated downwards
|
||||
event.SetEventObject( this );
|
||||
|
||||
wxWindow *page = m_pages[m_nSelection];
|
||||
if ( !page->HandleWindowEvent( event ) )
|
||||
{
|
||||
page->SetFocus();
|
||||
}
|
||||
//else: page manages focus inside it itself
|
||||
}
|
||||
else
|
||||
{
|
||||
// we have no pages - still have to give focus to _something_
|
||||
SetFocus();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// it comes from our child, case (a), pass to the parent
|
||||
if ( parent )
|
||||
{
|
||||
event.SetCurrentFocus( this );
|
||||
parent->HandleWindowEvent( event );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxNotebook base class virtuals
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#if wxUSE_CONSTRAINTS
|
||||
|
||||
// override these 2 functions to do nothing: everything is done in OnSize
|
||||
|
||||
void wxNotebook::SetConstraintSizes(bool WXUNUSED(recurse))
|
||||
{
|
||||
// don't set the sizes of the pages - their correct size is not yet known
|
||||
wxControl::SetConstraintSizes( false );
|
||||
}
|
||||
|
||||
bool wxNotebook::DoPhase(int WXUNUSED(nPhase))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif // wxUSE_CONSTRAINTS
|
||||
|
||||
void wxNotebook::Command(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
wxFAIL_MSG(wxT("wxNotebook::Command not implemented"));
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxNotebook helper functions
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
// hide the currently active panel and show the new one
|
||||
void wxNotebook::ChangePage(int nOldSel, int nSel)
|
||||
{
|
||||
if (nOldSel == nSel)
|
||||
return;
|
||||
|
||||
if ( nOldSel != -1 )
|
||||
m_pages[nOldSel]->Show( false );
|
||||
|
||||
if ( nSel != -1 )
|
||||
{
|
||||
wxNotebookPage *pPage = m_pages[nSel];
|
||||
pPage->Show( true );
|
||||
pPage->SetFocus();
|
||||
}
|
||||
|
||||
m_nSelection = nSel;
|
||||
m_peer->SetValue( m_nSelection + 1 ) ;
|
||||
}
|
||||
|
||||
wxInt32 wxNotebook::MacControlHit(WXEVENTHANDLERREF WXUNUSED(handler) , WXEVENTREF WXUNUSED(event) )
|
||||
{
|
||||
OSStatus status = eventNotHandledErr ;
|
||||
|
||||
SInt32 newSel = m_peer->GetValue() - 1 ;
|
||||
if ( newSel != m_nSelection )
|
||||
{
|
||||
wxBookCtrlEvent changing(
|
||||
wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, m_windowId,
|
||||
newSel , m_nSelection );
|
||||
changing.SetEventObject( this );
|
||||
HandleWindowEvent( changing );
|
||||
|
||||
if ( changing.IsAllowed() )
|
||||
{
|
||||
wxBookCtrlEvent event(
|
||||
wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, m_windowId,
|
||||
newSel, m_nSelection );
|
||||
event.SetEventObject( this );
|
||||
HandleWindowEvent( event );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_peer->SetValue( m_nSelection + 1 ) ;
|
||||
}
|
||||
|
||||
status = noErr ;
|
||||
}
|
||||
|
||||
return (wxInt32)status ;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/overlay.cpp
|
||||
// Name: src/osx/carbon/overlay.cpp
|
||||
// Purpose: common wxOverlay code
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/popupwin.cpp
|
||||
// Name: src/osx/popupwin.cpp
|
||||
// Purpose: implements wxPopupWindow for wxMac
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/printdlg.cpp
|
||||
// Name: src/osx/carbon/printdlg.cpp
|
||||
// Purpose: wxPrintDialog, wxPageSetupDialog
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -84,9 +84,7 @@ int wxMacPrintDialog::ShowModal()
|
||||
|
||||
int result = wxID_CANCEL;
|
||||
|
||||
#ifdef __LP64__
|
||||
// TODO use NSPrintPanel
|
||||
#else
|
||||
#if wxOSX_USE_CARBON
|
||||
OSErr err = noErr;
|
||||
Boolean accepted;
|
||||
err = PMSessionPrintDialog(
|
||||
@ -120,6 +118,8 @@ int wxMacPrintDialog::ShowModal()
|
||||
m_printDialogData.GetPrintData().ConvertFromNative();
|
||||
((wxMacCarbonPrintData*)m_printDialogData.GetPrintData().GetNativeData())->TransferTo( &m_printDialogData );
|
||||
}
|
||||
#else
|
||||
// TODO use NSPrintPanel
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
@ -162,8 +162,7 @@ int wxMacPageSetupDialog::ShowModal()
|
||||
((wxMacCarbonPrintData*)m_pageSetupData.GetPrintData().GetNativeData())->TransferFrom( &m_pageSetupData );
|
||||
|
||||
int result = wxID_CANCEL;
|
||||
#ifdef __LP64__
|
||||
#else
|
||||
#if wxOSX_USE_CARBON
|
||||
OSErr err = noErr;
|
||||
Boolean accepted;
|
||||
|
||||
@ -200,6 +199,8 @@ int wxMacPageSetupDialog::ShowModal()
|
||||
m_pageSetupData.SetPaperSize( m_pageSetupData.GetPrintData().GetPaperSize() );
|
||||
((wxMacCarbonPrintData*)m_pageSetupData.GetPrintData().GetNativeData())->TransferTo( &m_pageSetupData );
|
||||
}
|
||||
#else
|
||||
// TODO
|
||||
#endif
|
||||
return result;
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: radiobut.cpp
|
||||
// Name: src/osx/carbon/radiobut.cpp
|
||||
// Purpose: wxRadioButton
|
||||
// Author: AUTHOR
|
||||
// Author: Stefan Csomor
|
||||
// Modified by: JS Lair (99/11/15) adding the cyclic group notion for radiobox
|
||||
// Created: ??/??/98
|
||||
// Created: 01/01/98
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) AUTHOR
|
||||
// Copyright: (c) Stefan Csomor
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@ -14,165 +14,25 @@
|
||||
#if wxUSE_RADIOBTN
|
||||
|
||||
#include "wx/radiobut.h"
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxRadioButton, wxControl)
|
||||
|
||||
|
||||
bool wxRadioButton::Create( wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxValidator& validator,
|
||||
const wxString& name )
|
||||
wxWidgetImplType* wxWidgetImpl::CreateRadioButton( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle)
|
||||
{
|
||||
m_macIsUserPane = false;
|
||||
|
||||
if ( !wxControl::Create( parent, id, pos, size, style, validator, name ) )
|
||||
return false;
|
||||
|
||||
m_labelOrig = m_label = label;
|
||||
|
||||
Rect bounds = wxMacGetBoundsForControl( this, pos, size );
|
||||
|
||||
m_peer = new wxMacControl( this );
|
||||
Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size ) ;
|
||||
wxMacControl* peer = new wxMacControl(wxpeer) ;
|
||||
OSStatus err = CreateRadioButtonControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds, CFSTR(""),
|
||||
0, false /* no autotoggle */, m_peer->GetControlRefAddr() );
|
||||
0, false /* no autotoggle */, peer->GetControlRefAddr() );
|
||||
verify_noerr( err );
|
||||
|
||||
MacPostControlCreate( pos, size );
|
||||
|
||||
m_cycle = this;
|
||||
|
||||
if (HasFlag( wxRB_GROUP ))
|
||||
{
|
||||
AddInCycle( NULL );
|
||||
}
|
||||
else
|
||||
{
|
||||
// search backward for last group start
|
||||
wxRadioButton *chief = NULL;
|
||||
wxWindowList::compatibility_iterator node = parent->GetChildren().GetLast();
|
||||
while (node)
|
||||
{
|
||||
wxWindow *child = node->GetData();
|
||||
if (child->IsKindOf( CLASSINFO( wxRadioButton ) ))
|
||||
{
|
||||
chief = (wxRadioButton*)child;
|
||||
if (child->HasFlag( wxRB_GROUP ))
|
||||
break;
|
||||
}
|
||||
|
||||
node = node->GetPrevious();
|
||||
}
|
||||
|
||||
AddInCycle( chief );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
wxRadioButton::~wxRadioButton()
|
||||
{
|
||||
RemoveFromCycle();
|
||||
}
|
||||
|
||||
void wxRadioButton::SetValue(bool val)
|
||||
{
|
||||
wxRadioButton *cycle;
|
||||
if (m_peer->GetValue() == val)
|
||||
return;
|
||||
|
||||
m_peer->SetValue( val );
|
||||
if (val)
|
||||
{
|
||||
cycle = this->NextInCycle();
|
||||
if (cycle != NULL)
|
||||
{
|
||||
while (cycle != this)
|
||||
{
|
||||
cycle->SetValue( false );
|
||||
cycle = cycle->NextInCycle();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool wxRadioButton::GetValue() const
|
||||
{
|
||||
return m_peer->GetValue();
|
||||
}
|
||||
|
||||
void wxRadioButton::Command(wxCommandEvent& event)
|
||||
{
|
||||
SetValue( (event.GetInt() != 0) );
|
||||
ProcessCommand( event );
|
||||
}
|
||||
|
||||
wxInt32 wxRadioButton::MacControlHit( WXEVENTHANDLERREF WXUNUSED(handler), WXEVENTREF WXUNUSED(event) )
|
||||
{
|
||||
// if already set -> no action
|
||||
if (GetValue())
|
||||
return noErr;
|
||||
|
||||
wxRadioButton *cycle;
|
||||
cycle = this->NextInCycle();
|
||||
if (cycle != NULL)
|
||||
{
|
||||
while (cycle != this)
|
||||
{
|
||||
if (cycle->GetValue())
|
||||
cycle->SetValue( false );
|
||||
|
||||
cycle = cycle->NextInCycle();
|
||||
}
|
||||
}
|
||||
|
||||
SetValue( true );
|
||||
|
||||
wxCommandEvent event2( wxEVT_COMMAND_RADIOBUTTON_SELECTED, m_windowId );
|
||||
event2.SetEventObject( this );
|
||||
event2.SetInt( true );
|
||||
ProcessCommand( event2 );
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
wxRadioButton *wxRadioButton::AddInCycle(wxRadioButton *cycle)
|
||||
{
|
||||
wxRadioButton *current;
|
||||
|
||||
if (cycle == NULL)
|
||||
{
|
||||
m_cycle = this;
|
||||
}
|
||||
else
|
||||
{
|
||||
current = cycle;
|
||||
while (current->m_cycle != cycle)
|
||||
current = current->m_cycle;
|
||||
|
||||
m_cycle = cycle;
|
||||
current->m_cycle = this;
|
||||
}
|
||||
|
||||
return m_cycle;
|
||||
}
|
||||
|
||||
void wxRadioButton::RemoveFromCycle()
|
||||
{
|
||||
if ((m_cycle == NULL) || (m_cycle == this))
|
||||
return;
|
||||
|
||||
// Find the previous one and make it point to the next one
|
||||
wxRadioButton* prev = this;
|
||||
while (prev->m_cycle != this)
|
||||
prev = prev->m_cycle;
|
||||
|
||||
prev->m_cycle = m_cycle;
|
||||
return peer;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/renderer.cpp
|
||||
// Name: src/osx/carbon/renderer.cpp
|
||||
// Purpose: implementation of wxRendererNative for Mac
|
||||
// Author: Vadim Zeitlin
|
||||
// Modified by:
|
||||
@ -27,8 +27,13 @@
|
||||
|
||||
#include "wx/renderer.h"
|
||||
#include "wx/graphics.h"
|
||||
#include "wx/dcgraph.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
#if wxOSX_USE_COCOA
|
||||
// bring in the theme headers
|
||||
#include <Carbon/Carbon.h>
|
||||
#endif
|
||||
|
||||
class WXDLLEXPORT wxRendererMac : public wxDelegateRendererNative
|
||||
{
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/scrolbar.cpp
|
||||
// Name: src/osx/carbon/scrolbar.cpp
|
||||
// Purpose: wxScrollBar
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -19,84 +19,49 @@
|
||||
#include "wx/settings.h"
|
||||
#endif
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxScrollBar, wxControl)
|
||||
|
||||
BEGIN_EVENT_TABLE(wxScrollBar, wxControl)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
|
||||
bool wxScrollBar::Create( wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxValidator& validator,
|
||||
const wxString& name )
|
||||
class wxOSXScrollBarCarbonImpl : public wxMacControl
|
||||
{
|
||||
m_macIsUserPane = false;
|
||||
public :
|
||||
wxOSXScrollBarCarbonImpl( wxWindowMac* peer) : wxMacControl( peer )
|
||||
{
|
||||
}
|
||||
|
||||
void SetScrollThumb( wxInt32 value, wxInt32 thumbSize )
|
||||
{
|
||||
SetValue( value );
|
||||
SetControlViewSize(m_controlRef , thumbSize );
|
||||
}
|
||||
protected:
|
||||
};
|
||||
|
||||
if ( !wxControl::Create( parent, id, pos, size, style, validator, name ) )
|
||||
return false;
|
||||
wxWidgetImplType* wxWidgetImpl::CreateScrollBar( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle)
|
||||
{
|
||||
Rect bounds = wxMacGetBoundsForControl( wxpeer, pos, size );
|
||||
|
||||
Rect bounds = wxMacGetBoundsForControl( this, pos, size );
|
||||
|
||||
m_peer = new wxMacControl( this );
|
||||
wxMacControl* peer = new wxOSXScrollBarCarbonImpl( wxpeer );
|
||||
OSStatus err = CreateScrollBarControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds,
|
||||
0, 0, 100, 1, true /* liveTracking */,
|
||||
GetwxMacLiveScrollbarActionProc(),
|
||||
m_peer->GetControlRefAddr() );
|
||||
peer->GetControlRefAddr() );
|
||||
verify_noerr( err );
|
||||
|
||||
MacPostControlCreate( pos, size );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
wxScrollBar::~wxScrollBar()
|
||||
{
|
||||
}
|
||||
|
||||
void wxScrollBar::SetThumbPosition( int viewStart )
|
||||
{
|
||||
m_peer->SetValue( viewStart );
|
||||
}
|
||||
|
||||
int wxScrollBar::GetThumbPosition() const
|
||||
{
|
||||
return m_peer->GetValue();
|
||||
}
|
||||
|
||||
void wxScrollBar::SetScrollbar( int position,
|
||||
int thumbSize,
|
||||
int range,
|
||||
int pageSize,
|
||||
bool WXUNUSED(refresh) )
|
||||
{
|
||||
m_pageSize = pageSize;
|
||||
m_viewSize = thumbSize;
|
||||
m_objectSize = range;
|
||||
|
||||
int range1 = wxMax( (m_objectSize - m_viewSize), 0 );
|
||||
|
||||
m_peer->SetMinimum( 0 );
|
||||
m_peer->SetMaximum( range1 );
|
||||
m_peer->SetValue( position );
|
||||
m_peer->SetViewSize( m_viewSize );
|
||||
}
|
||||
|
||||
void wxScrollBar::Command( wxCommandEvent& event )
|
||||
{
|
||||
SetThumbPosition( event.GetInt() );
|
||||
ProcessCommand( event );
|
||||
return peer;
|
||||
}
|
||||
|
||||
void wxScrollBar::MacHandleControlClick( WXWidget WXUNUSED(control), wxInt16 controlpart, bool mouseStillDown )
|
||||
{
|
||||
#if wxOSX_USE_CARBON
|
||||
|
||||
int position = m_peer->GetValue();
|
||||
int minPos = m_peer->GetMinimum();
|
||||
int minPos = 0 ;
|
||||
int maxPos = m_peer->GetMaximum();
|
||||
|
||||
wxEventType scrollEvent = wxEVT_NULL;
|
||||
@ -166,82 +131,5 @@ void wxScrollBar::MacHandleControlClick( WXWidget WXUNUSED(control), wxInt16 con
|
||||
window->MacOnScroll( event );
|
||||
else
|
||||
HandleWindowEvent( event );
|
||||
}
|
||||
|
||||
wxInt32 wxScrollBar::MacControlHit( WXEVENTHANDLERREF WXUNUSED(handler), WXEVENTREF mevent )
|
||||
{
|
||||
int position = m_peer->GetValue();
|
||||
int minPos = m_peer->GetMinimum();
|
||||
int maxPos = m_peer->GetMaximum();
|
||||
|
||||
wxEventType scrollEvent = wxEVT_NULL;
|
||||
int nScrollInc = 0;
|
||||
|
||||
wxMacCarbonEvent cEvent( (EventRef)mevent );
|
||||
ControlPartCode controlpart = cEvent.GetParameter<ControlPartCode>(kEventParamControlPart, typeControlPartCode);
|
||||
|
||||
// all events have already been reported during mouse down, except for THUMBRELEASE
|
||||
// NB: this may need to be reviewed in light of the fact that scroll wheel events
|
||||
// aren't being handled properly
|
||||
if ( controlpart != kControlIndicatorPart )
|
||||
return eventNotHandledErr;
|
||||
|
||||
switch ( controlpart )
|
||||
{
|
||||
case kControlIndicatorPart:
|
||||
nScrollInc = 0;
|
||||
scrollEvent = wxEVT_SCROLL_THUMBRELEASE;
|
||||
break;
|
||||
|
||||
default:
|
||||
wxFAIL_MSG(wxT("unknown scrollbar selector"));
|
||||
break;
|
||||
}
|
||||
|
||||
int new_pos = position + nScrollInc;
|
||||
|
||||
if (new_pos < minPos)
|
||||
new_pos = minPos;
|
||||
else if (new_pos > maxPos)
|
||||
new_pos = maxPos;
|
||||
|
||||
if ( nScrollInc )
|
||||
SetThumbPosition( new_pos );
|
||||
|
||||
wxScrollEvent event( scrollEvent, m_windowId );
|
||||
if ( m_windowStyle & wxHORIZONTAL )
|
||||
event.SetOrientation( wxHORIZONTAL );
|
||||
else
|
||||
event.SetOrientation( wxVERTICAL );
|
||||
|
||||
event.SetPosition( new_pos );
|
||||
event.SetEventObject( this );
|
||||
wxWindow* window = GetParent();
|
||||
if (window && window->MacIsWindowScrollbar( this ))
|
||||
// this is hardcoded
|
||||
window->MacOnScroll( event );
|
||||
else
|
||||
HandleWindowEvent( event );
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
|
||||
wxSize wxScrollBar::DoGetBestSize() const
|
||||
{
|
||||
int w = 100;
|
||||
int h = 100;
|
||||
|
||||
if ( IsVertical() )
|
||||
{
|
||||
w = wxSystemSettings::GetMetric(wxSYS_VSCROLL_X);
|
||||
}
|
||||
else
|
||||
{
|
||||
h = wxSystemSettings::GetMetric(wxSYS_HSCROLL_Y);
|
||||
}
|
||||
|
||||
wxSize best(w, h);
|
||||
CacheBestSize(best);
|
||||
return best;
|
||||
}
|
||||
#endif
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/settings.cpp
|
||||
// Name: src/osx/carbon/settings.cpp
|
||||
// Purpose: wxSettings
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -39,7 +39,7 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
|
||||
{
|
||||
case wxSYS_COLOUR_WINDOW:
|
||||
#if wxOSX_USE_COCOA_OR_CARBON
|
||||
resultColor = wxColour(wxMacCreateCGColorFromHITheme( kThemeBrushDocumentWindowBackground )) ;
|
||||
resultColor = wxColour(wxMacCreateCGColorFromHITheme( 15 /* kThemeBrushDocumentWindowBackground */ )) ;
|
||||
#else
|
||||
resultColor = *wxWHITE;
|
||||
#endif
|
||||
@ -55,7 +55,7 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
|
||||
case wxSYS_COLOUR_BTNFACE:
|
||||
case wxSYS_COLOUR_MENUBAR:
|
||||
#if wxOSX_USE_COCOA_OR_CARBON
|
||||
resultColor = wxColour(wxMacCreateCGColorFromHITheme(kThemeBrushDialogBackgroundActive));
|
||||
resultColor = wxColour(wxMacCreateCGColorFromHITheme( 3 /* kThemeBrushDialogBackgroundActive */));
|
||||
#else
|
||||
resultColor = wxColour( 0xBE, 0xBE, 0xBE ) ;
|
||||
#endif
|
||||
@ -85,7 +85,7 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
|
||||
// NB: enable this case as desired
|
||||
colorBrushID = kThemeBrushAlternatePrimaryHighlightColor;
|
||||
#else
|
||||
colorBrushID = kThemeBrushPrimaryHighlightColor;
|
||||
colorBrushID = -3 /* kThemeBrushPrimaryHighlightColor */;
|
||||
#endif
|
||||
resultColor = wxColour( wxMacCreateCGColorFromHITheme(colorBrushID) );
|
||||
#else
|
||||
@ -110,7 +110,7 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
|
||||
case wxSYS_COLOUR_HIGHLIGHTTEXT :
|
||||
#if wxOSX_USE_COCOA_OR_CARBON
|
||||
{
|
||||
wxColour highlightcolor( wxMacCreateCGColorFromHITheme(kThemeBrushPrimaryHighlightColor) );
|
||||
wxColour highlightcolor( wxMacCreateCGColorFromHITheme(-3 /* kThemeBrushPrimaryHighlightColor */) );
|
||||
if ((highlightcolor.Red() + highlightcolor.Green() + highlightcolor.Blue() ) == 0)
|
||||
resultColor = *wxWHITE ;
|
||||
else
|
||||
|
@ -14,544 +14,41 @@
|
||||
#if wxUSE_SLIDER
|
||||
|
||||
#include "wx/slider.h"
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxSlider, wxControl)
|
||||
|
||||
BEGIN_EVENT_TABLE(wxSlider, wxControl)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
// The dimensions of the different styles of sliders (from Aqua document)
|
||||
#define wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS 24
|
||||
#define wxSLIDER_DIMENSIONACROSS_ARROW 18
|
||||
|
||||
// Distance between slider and text
|
||||
#define wxSLIDER_BORDERTEXT 5
|
||||
|
||||
// NB: The default orientation for a slider is horizontal; however, if the user specifies
|
||||
// some slider styles but doesn't specify the orientation we have to assume he wants a
|
||||
// horizontal one. Therefore in this file when testing for the slider's orientation
|
||||
// vertical is tested for if this is not set then we use the horizontal one
|
||||
// e.g., if (GetWindowStyle() & wxSL_VERTICAL) {} else { horizontal case }.
|
||||
|
||||
wxSlider::wxSlider()
|
||||
wxWidgetImplType* wxWidgetImpl::CreateSlider( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
wxInt32 value,
|
||||
wxInt32 minimum,
|
||||
wxInt32 maximum,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle)
|
||||
{
|
||||
m_pageSize = 1;
|
||||
m_lineSize = 1;
|
||||
m_rangeMax = 0;
|
||||
m_rangeMin = 0;
|
||||
m_tickFreq = 0;
|
||||
|
||||
m_macMinimumStatic = NULL;
|
||||
m_macMaximumStatic = NULL;
|
||||
m_macValueStatic = NULL;
|
||||
}
|
||||
|
||||
bool wxSlider::Create(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
int value, int minValue, int maxValue,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size, long style,
|
||||
const wxValidator& validator,
|
||||
const wxString& name)
|
||||
{
|
||||
m_macIsUserPane = false;
|
||||
|
||||
m_macMinimumStatic = NULL;
|
||||
m_macMaximumStatic = NULL;
|
||||
m_macValueStatic = NULL;
|
||||
|
||||
m_lineSize = 1;
|
||||
m_tickFreq = 0;
|
||||
|
||||
m_rangeMax = maxValue;
|
||||
m_rangeMin = minValue;
|
||||
|
||||
m_pageSize = (int)((maxValue - minValue) / 10);
|
||||
|
||||
// our styles are redundant: wxSL_LEFT/RIGHT imply wxSL_VERTICAL and
|
||||
// wxSL_TOP/BOTTOM imply wxSL_HORIZONTAL, but for backwards compatibility
|
||||
// reasons we can't really change it, instead try to infer the orientation
|
||||
// from the flags given to us here
|
||||
switch ( style & (wxSL_LEFT | wxSL_RIGHT | wxSL_TOP | wxSL_BOTTOM) )
|
||||
{
|
||||
case wxSL_LEFT:
|
||||
case wxSL_RIGHT:
|
||||
style |= wxSL_VERTICAL;
|
||||
break;
|
||||
|
||||
case wxSL_TOP:
|
||||
case wxSL_BOTTOM:
|
||||
style |= wxSL_HORIZONTAL;
|
||||
break;
|
||||
|
||||
case 0:
|
||||
default:
|
||||
// no specific direction, do we have at least the orientation?
|
||||
if ( !(style & (wxSL_HORIZONTAL | wxSL_VERTICAL)) )
|
||||
// no: choose default
|
||||
style |= wxSL_BOTTOM | wxSL_HORIZONTAL;
|
||||
break;
|
||||
}
|
||||
|
||||
wxASSERT_MSG( !(style & wxSL_VERTICAL) || !(style & wxSL_HORIZONTAL),
|
||||
wxT("incompatible slider direction and orientation") );
|
||||
|
||||
if ( !wxControl::Create(parent, id, pos, size, style, validator, name) )
|
||||
return false;
|
||||
|
||||
Rect bounds = wxMacGetBoundsForControl( this , pos , size );
|
||||
|
||||
// NB: (RN) Ticks here are sometimes off in the GUI if there
|
||||
// are not as many tick marks as there are values
|
||||
//
|
||||
Rect bounds = wxMacGetBoundsForControl( wxpeer, pos, size );
|
||||
int tickMarks = 0;
|
||||
if ( style & wxSL_AUTOTICKS )
|
||||
tickMarks = (maxValue - minValue) + 1; // +1 for the 0 value
|
||||
tickMarks = (maximum - minimum) + 1; // +1 for the 0 value
|
||||
|
||||
// keep the number of tickmarks from becoming unwieldly, therefore below it is ok to cast
|
||||
// it to a UInt16
|
||||
while (tickMarks > 20)
|
||||
tickMarks /= 5;
|
||||
|
||||
m_peer = new wxMacControl( this );
|
||||
|
||||
wxMacControl* peer = new wxMacControl( wxpeer );
|
||||
OSStatus err = CreateSliderControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds,
|
||||
value, minValue, maxValue,
|
||||
value, minimum, maximum,
|
||||
kControlSliderPointsDownOrRight,
|
||||
(UInt16) tickMarks, true /* liveTracking */,
|
||||
GetwxMacLiveScrollbarActionProc(),
|
||||
m_peer->GetControlRefAddr() );
|
||||
peer->GetControlRefAddr() );
|
||||
verify_noerr( err );
|
||||
|
||||
if (style & wxSL_VERTICAL)
|
||||
// Forces SetSize to use the proper width
|
||||
SetSizeHints(10, -1, 10, -1);
|
||||
else
|
||||
// Forces SetSize to use the proper height
|
||||
SetSizeHints(-1, 10, -1, 10);
|
||||
|
||||
// NB: SetSizeHints is overloaded by wxSlider and will substitute 10 with the
|
||||
// proper dimensions, it also means other people cannot bugger the slider with
|
||||
// other values
|
||||
|
||||
if (style & wxSL_LABELS)
|
||||
{
|
||||
m_macMinimumStatic = new wxStaticText( parent, wxID_ANY, wxEmptyString );
|
||||
m_macMaximumStatic = new wxStaticText( parent, wxID_ANY, wxEmptyString );
|
||||
m_macValueStatic = new wxStaticText( parent, wxID_ANY, wxEmptyString );
|
||||
}
|
||||
|
||||
SetRange(minValue, maxValue);
|
||||
SetValue(value);
|
||||
|
||||
MacPostControlCreate(pos, size);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
wxSlider::~wxSlider()
|
||||
{
|
||||
// this is a special case, as we had to add windows as siblings we are
|
||||
// responsible for their disposal, but only if we are not part of a DestroyAllChildren
|
||||
if ( m_parent && !m_parent->IsBeingDeleted() )
|
||||
{
|
||||
delete m_macMinimumStatic;
|
||||
delete m_macMaximumStatic;
|
||||
delete m_macValueStatic;
|
||||
}
|
||||
}
|
||||
|
||||
int wxSlider::GetValue() const
|
||||
{
|
||||
// We may need to invert the value returned by the widget
|
||||
return ValueInvertOrNot( m_peer->GetValue() ) ;
|
||||
}
|
||||
|
||||
void wxSlider::SetValue(int value)
|
||||
{
|
||||
if ( m_macValueStatic )
|
||||
{
|
||||
wxString valuestring;
|
||||
valuestring.Printf( wxT("%d"), value );
|
||||
m_macValueStatic->SetLabel( valuestring );
|
||||
}
|
||||
|
||||
// We only invert for the setting of the actual native widget
|
||||
m_peer->SetValue( ValueInvertOrNot( value ) );
|
||||
}
|
||||
|
||||
void wxSlider::SetRange(int minValue, int maxValue)
|
||||
{
|
||||
wxString value;
|
||||
|
||||
m_rangeMin = minValue;
|
||||
m_rangeMax = maxValue;
|
||||
|
||||
m_peer->SetMinimum( m_rangeMin );
|
||||
m_peer->SetMaximum( m_rangeMax );
|
||||
|
||||
if (m_macMinimumStatic)
|
||||
{
|
||||
value.Printf( wxT("%d"), ValueInvertOrNot( m_rangeMin ) );
|
||||
m_macMinimumStatic->SetLabel( value );
|
||||
}
|
||||
|
||||
if (m_macMaximumStatic)
|
||||
{
|
||||
value.Printf( wxT("%d"), ValueInvertOrNot( m_rangeMax ) );
|
||||
m_macMaximumStatic->SetLabel( value );
|
||||
}
|
||||
|
||||
// If the range is out of bounds, set it to a
|
||||
// value that is within bounds
|
||||
// RN: Testing reveals OSX does its own
|
||||
// bounding, perhaps this isn't needed?
|
||||
int currentValue = GetValue();
|
||||
|
||||
if(currentValue < m_rangeMin)
|
||||
SetValue(m_rangeMin);
|
||||
else if(currentValue > m_rangeMax)
|
||||
SetValue(m_rangeMax);
|
||||
}
|
||||
|
||||
// For trackbars only
|
||||
void wxSlider::SetTickFreq(int n, int WXUNUSED(pos))
|
||||
{
|
||||
// TODO
|
||||
m_tickFreq = n;
|
||||
}
|
||||
|
||||
void wxSlider::SetPageSize(int pageSize)
|
||||
{
|
||||
// TODO
|
||||
m_pageSize = pageSize;
|
||||
}
|
||||
|
||||
int wxSlider::GetPageSize() const
|
||||
{
|
||||
return m_pageSize;
|
||||
}
|
||||
|
||||
void wxSlider::ClearSel()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void wxSlider::ClearTicks()
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void wxSlider::SetLineSize(int lineSize)
|
||||
{
|
||||
m_lineSize = lineSize;
|
||||
// TODO
|
||||
}
|
||||
|
||||
int wxSlider::GetLineSize() const
|
||||
{
|
||||
// TODO
|
||||
return m_lineSize;
|
||||
}
|
||||
|
||||
int wxSlider::GetSelEnd() const
|
||||
{
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
||||
int wxSlider::GetSelStart() const
|
||||
{
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
||||
void wxSlider::SetSelection(int WXUNUSED(minPos), int WXUNUSED(maxPos))
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void wxSlider::SetThumbLength(int WXUNUSED(len))
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
int wxSlider::GetThumbLength() const
|
||||
{
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
||||
void wxSlider::SetTick(int WXUNUSED(tickPos))
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
|
||||
void wxSlider::Command(wxCommandEvent &event)
|
||||
{
|
||||
SetValue(event.GetInt());
|
||||
ProcessCommand(event);
|
||||
}
|
||||
|
||||
void wxSlider::MacHandleControlClick(WXWidget WXUNUSED(control),
|
||||
wxInt16 WXUNUSED(controlpart),
|
||||
bool WXUNUSED(mouseStillDown))
|
||||
{
|
||||
// Whatever the native value is, we may need to invert it for calling
|
||||
// SetValue and putting the possibly inverted value in the event
|
||||
int value = ValueInvertOrNot( m_peer->GetValue() );
|
||||
|
||||
SetValue( value );
|
||||
|
||||
wxScrollEvent event( wxEVT_SCROLL_THUMBTRACK, m_windowId );
|
||||
event.SetPosition( value );
|
||||
event.SetEventObject( this );
|
||||
HandleWindowEvent( event );
|
||||
|
||||
wxCommandEvent cevent( wxEVT_COMMAND_SLIDER_UPDATED, m_windowId );
|
||||
cevent.SetInt( value );
|
||||
cevent.SetEventObject( this );
|
||||
HandleWindowEvent( cevent );
|
||||
}
|
||||
|
||||
wxInt32 wxSlider::MacControlHit(WXEVENTHANDLERREF WXUNUSED(handler),
|
||||
WXEVENTREF WXUNUSED(mevent))
|
||||
{
|
||||
// Whatever the native value is, we may need to invert it for calling
|
||||
// SetValue and putting the possibly inverted value in the event
|
||||
int value = ValueInvertOrNot( m_peer->GetValue() ) ;
|
||||
|
||||
SetValue( value ) ;
|
||||
|
||||
wxScrollEvent event( wxEVT_SCROLL_THUMBRELEASE, m_windowId );
|
||||
event.SetPosition( value );
|
||||
event.SetEventObject( this );
|
||||
HandleWindowEvent( event );
|
||||
|
||||
wxCommandEvent cevent( wxEVT_COMMAND_SLIDER_UPDATED, m_windowId );
|
||||
cevent.SetInt( value );
|
||||
cevent.SetEventObject( this );
|
||||
|
||||
HandleWindowEvent( cevent );
|
||||
|
||||
return noErr;
|
||||
}
|
||||
|
||||
// This is overloaded in wxSlider so that the proper width/height will always be used
|
||||
// for the slider different values would cause redrawing and mouse detection problems
|
||||
//
|
||||
void wxSlider::DoSetSizeHints( int minW, int minH,
|
||||
int maxW, int maxH,
|
||||
int WXUNUSED(incW), int WXUNUSED(incH) )
|
||||
{
|
||||
wxSize size = GetBestSize();
|
||||
|
||||
if (GetWindowStyle() & wxSL_VERTICAL)
|
||||
{
|
||||
SetMinSize( wxSize(size.x,minH) );
|
||||
SetMaxSize( wxSize(size.x,maxH) );
|
||||
}
|
||||
else
|
||||
{
|
||||
SetMinSize( wxSize(minW,size.y) );
|
||||
SetMaxSize( wxSize(maxW,size.y) );
|
||||
}
|
||||
}
|
||||
|
||||
wxSize wxSlider::DoGetBestSize() const
|
||||
{
|
||||
wxSize size;
|
||||
int textwidth, textheight;
|
||||
int mintwidth, mintheight;
|
||||
int maxtwidth, maxtheight;
|
||||
|
||||
textwidth = textheight = 0;
|
||||
mintwidth = mintheight = 0;
|
||||
maxtwidth = maxtheight = 0;
|
||||
|
||||
if (GetWindowStyle() & wxSL_LABELS)
|
||||
{
|
||||
wxString text;
|
||||
|
||||
// Get maximum text label width and height
|
||||
text.Printf( wxT("%d"), ValueInvertOrNot( m_rangeMin ) );
|
||||
GetTextExtent(text, &mintwidth, &mintheight);
|
||||
text.Printf( wxT("%d"), ValueInvertOrNot( m_rangeMax ) );
|
||||
GetTextExtent(text, &maxtwidth, &maxtheight);
|
||||
|
||||
if (maxtheight > mintheight)
|
||||
textheight = maxtheight;
|
||||
else
|
||||
textheight = mintheight;
|
||||
|
||||
if (maxtwidth > mintwidth)
|
||||
textwidth = maxtwidth;
|
||||
else
|
||||
textwidth = mintwidth;
|
||||
}
|
||||
|
||||
if (GetWindowStyle() & wxSL_VERTICAL)
|
||||
{
|
||||
size.y = 150;
|
||||
|
||||
if (GetWindowStyle() & wxSL_AUTOTICKS)
|
||||
size.x = wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS;
|
||||
else
|
||||
size.x = wxSLIDER_DIMENSIONACROSS_ARROW;
|
||||
|
||||
if (GetWindowStyle() & wxSL_LABELS)
|
||||
size.x += textwidth + wxSLIDER_BORDERTEXT;
|
||||
}
|
||||
else
|
||||
{
|
||||
size.x = 150;
|
||||
|
||||
if (GetWindowStyle() & wxSL_AUTOTICKS)
|
||||
size.y = wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS;
|
||||
else
|
||||
size.y = wxSLIDER_DIMENSIONACROSS_ARROW;
|
||||
|
||||
if (GetWindowStyle() & wxSL_LABELS)
|
||||
{
|
||||
size.y += textheight + wxSLIDER_BORDERTEXT;
|
||||
size.x += (mintwidth / 2) + (maxtwidth / 2);
|
||||
}
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
void wxSlider::DoSetSize(int x, int y, int w, int h, int sizeFlags)
|
||||
{
|
||||
int yborder = 0;
|
||||
int minValWidth, maxValWidth, textheight;
|
||||
int sliderBreadth;
|
||||
int width = w;
|
||||
|
||||
if (GetWindowStyle() & wxSL_LABELS)
|
||||
{
|
||||
wxString text;
|
||||
int ht, valValWidth;
|
||||
|
||||
// Get maximum text label width and height
|
||||
text.Printf(wxT("%d"), ValueInvertOrNot( m_rangeMin ) );
|
||||
GetTextExtent(text, &minValWidth, &textheight);
|
||||
text.Printf(wxT("%d"), ValueInvertOrNot( m_rangeMax ) );
|
||||
GetTextExtent(text, &maxValWidth, &ht);
|
||||
|
||||
if (ht > textheight)
|
||||
textheight = ht;
|
||||
|
||||
if (GetWindowStyle() & wxSL_HORIZONTAL)
|
||||
{
|
||||
if ( m_macMinimumStatic )
|
||||
{
|
||||
w -= minValWidth / 2;
|
||||
x += minValWidth / 2;
|
||||
}
|
||||
|
||||
if ( m_macMaximumStatic )
|
||||
w -= maxValWidth / 2;
|
||||
}
|
||||
|
||||
// Labels have this control's parent as their parent
|
||||
// so if this control is not at 0,0 relative to the parent
|
||||
// the labels need to know the position of this control
|
||||
// relative to its parent in order to size properly, so
|
||||
// move the control first so we can use GetPosition()
|
||||
wxControl::DoSetSize( x, y, w, h, sizeFlags );
|
||||
|
||||
if (GetWindowStyle() & wxSL_VERTICAL)
|
||||
// If vertical, use current value
|
||||
text.Printf(wxT("%d"), (int)m_peer->GetValue());
|
||||
else
|
||||
// Use max so that the current value doesn't drift as centering would need to change
|
||||
text.Printf(wxT("%d"), m_rangeMax);
|
||||
|
||||
GetTextExtent(text, &valValWidth, &ht);
|
||||
|
||||
yborder = textheight + wxSLIDER_BORDERTEXT;
|
||||
|
||||
// Get slider breadth
|
||||
if (GetWindowStyle() & wxSL_AUTOTICKS)
|
||||
sliderBreadth = wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS;
|
||||
else
|
||||
sliderBreadth = wxSLIDER_DIMENSIONACROSS_ARROW;
|
||||
|
||||
if (GetWindowStyle() & wxSL_VERTICAL)
|
||||
{
|
||||
h = h - yborder;
|
||||
|
||||
if ( m_macMinimumStatic )
|
||||
m_macMinimumStatic->Move(GetPosition().x + sliderBreadth + wxSLIDER_BORDERTEXT, GetPosition().y + h - yborder);
|
||||
if ( m_macMaximumStatic )
|
||||
m_macMaximumStatic->Move(GetPosition().x + sliderBreadth + wxSLIDER_BORDERTEXT, GetPosition().y + 0);
|
||||
if ( m_macValueStatic )
|
||||
m_macValueStatic->Move(GetPosition().x + sliderBreadth + wxSLIDER_BORDERTEXT, GetPosition().y + (h / 2) - (ht / 2));
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( m_macMinimumStatic )
|
||||
m_macMinimumStatic->Move(GetPosition().x, GetPosition().y + sliderBreadth + wxSLIDER_BORDERTEXT);
|
||||
if ( m_macMaximumStatic )
|
||||
m_macMaximumStatic->Move(GetPosition().x + w - maxValWidth, GetPosition().y + sliderBreadth + wxSLIDER_BORDERTEXT);
|
||||
if ( m_macValueStatic )
|
||||
m_macValueStatic->Move(GetPosition().x + (w / 2) - (valValWidth / 2), GetPosition().y + sliderBreadth + wxSLIDER_BORDERTEXT);
|
||||
}
|
||||
}
|
||||
|
||||
// yet another hack since this is a composite control
|
||||
// when wxSlider has it's size hardcoded, we're not allowed to
|
||||
// change the size. But when the control has labels, we DO need
|
||||
// to resize the internal Mac control to accommodate the text labels.
|
||||
// We need to trick the wxWidgets resize mechanism so that we can
|
||||
// resize the slider part of the control ONLY.
|
||||
|
||||
// TODO: Can all of this code go in the conditional wxSL_LABELS block?
|
||||
|
||||
int minWidth = m_minWidth;
|
||||
|
||||
if (GetWindowStyle() & wxSL_LABELS)
|
||||
{
|
||||
// make sure we don't allow the entire control to be resized accidently
|
||||
if (width == GetSize().x)
|
||||
m_minWidth = -1;
|
||||
}
|
||||
|
||||
// If the control has labels, we still need to call this again because
|
||||
// the labels alter the control's w and h values.
|
||||
wxControl::DoSetSize( x, y, w, h, sizeFlags );
|
||||
|
||||
m_minWidth = minWidth;
|
||||
}
|
||||
|
||||
void wxSlider::DoMoveWindow(int x, int y, int width, int height)
|
||||
{
|
||||
wxControl::DoMoveWindow( x, y, width, height );
|
||||
}
|
||||
|
||||
// Common processing to invert slider values based on wxSL_INVERSE
|
||||
int wxSlider::ValueInvertOrNot(int value) const
|
||||
{
|
||||
int result = 0;
|
||||
|
||||
if (m_windowStyle & wxSL_VERTICAL)
|
||||
{
|
||||
// The reason for the backwards logic is that Mac's vertical sliders are
|
||||
// inverted compared to Windows and GTK, hence we want inversion to be the
|
||||
// default, and if wxSL_INVERSE is set, then we do not invert (use native)
|
||||
if (m_windowStyle & wxSL_INVERSE)
|
||||
result = value;
|
||||
else
|
||||
result = (m_rangeMax + m_rangeMin) - value;
|
||||
}
|
||||
else // normal logic applies to HORIZONTAL sliders
|
||||
{
|
||||
result = wxSliderBase::ValueInvertOrNot(value);
|
||||
}
|
||||
|
||||
return result;
|
||||
return peer;
|
||||
}
|
||||
|
||||
#endif // wxUSE_SLIDER
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/sound.cpp
|
||||
// Name: src/osx/carbon/sound.cpp
|
||||
// Purpose: wxSound class implementation: optional
|
||||
// Author: Ryan Norton
|
||||
// Modified by: Stefan Csomor
|
||||
|
@ -14,195 +14,101 @@
|
||||
#if wxUSE_SPINBTN
|
||||
|
||||
#include "wx/spinbutt.h"
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxSpinButton, wxControl)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxSpinEvent, wxScrollEvent)
|
||||
|
||||
|
||||
wxSpinButton::wxSpinButton()
|
||||
: wxSpinButtonBase()
|
||||
wxWidgetImplType* wxWidgetImpl::CreateSpinButton( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
wxInt32 value,
|
||||
wxInt32 minimum,
|
||||
wxInt32 maximum,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle)
|
||||
{
|
||||
}
|
||||
Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size );
|
||||
|
||||
bool wxSpinButton::Create( wxWindow *parent,
|
||||
wxWindowID id, const wxPoint& pos, const wxSize& size,
|
||||
long style, const wxString& name )
|
||||
{
|
||||
m_macIsUserPane = false;
|
||||
|
||||
if ( !wxSpinButtonBase::Create( parent, id, pos, size, style, wxDefaultValidator, name ) )
|
||||
return false;
|
||||
|
||||
m_min = 0;
|
||||
m_max = 100;
|
||||
|
||||
if (!parent)
|
||||
return false;
|
||||
|
||||
Rect bounds = wxMacGetBoundsForControl( this , pos , size );
|
||||
|
||||
m_peer = new wxMacControl( this );
|
||||
wxMacControl* peer = new wxMacControl( wxpeer );
|
||||
OSStatus err = CreateLittleArrowsControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds, 0, m_min, m_max, 1,
|
||||
m_peer->GetControlRefAddr() );
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds, value,
|
||||
minimum, maximum, 1, peer->GetControlRefAddr() );
|
||||
verify_noerr( err );
|
||||
|
||||
m_peer->SetActionProc( GetwxMacLiveScrollbarActionProc() );
|
||||
MacPostControlCreate( pos, size );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
wxSpinButton::~wxSpinButton()
|
||||
{
|
||||
}
|
||||
|
||||
int wxSpinButton::GetMin() const
|
||||
{
|
||||
return m_min;
|
||||
}
|
||||
|
||||
int wxSpinButton::GetMax() const
|
||||
{
|
||||
return m_max;
|
||||
}
|
||||
|
||||
int wxSpinButton::GetValue() const
|
||||
{
|
||||
int n = m_value;
|
||||
|
||||
if (n < m_min)
|
||||
n = m_min;
|
||||
else if (n > m_max)
|
||||
n = m_max;
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
void wxSpinButton::SetValue(int val)
|
||||
{
|
||||
m_value = val;
|
||||
}
|
||||
|
||||
void wxSpinButton::SetRange(int minVal, int maxVal)
|
||||
{
|
||||
m_min = minVal;
|
||||
m_max = maxVal;
|
||||
m_peer->SetMaximum( maxVal );
|
||||
m_peer->SetMinimum( minVal );
|
||||
}
|
||||
|
||||
void wxSpinButton::MacHandleValueChanged( int inc )
|
||||
{
|
||||
wxEventType scrollEvent = wxEVT_NULL;
|
||||
int oldValue = m_value;
|
||||
|
||||
m_value = oldValue + inc;
|
||||
|
||||
if (m_value < m_min)
|
||||
{
|
||||
if ( m_windowStyle & wxSP_WRAP )
|
||||
m_value = m_max;
|
||||
else
|
||||
m_value = m_min;
|
||||
}
|
||||
|
||||
if (m_value > m_max)
|
||||
{
|
||||
if ( m_windowStyle & wxSP_WRAP )
|
||||
m_value = m_min;
|
||||
else
|
||||
m_value = m_max;
|
||||
}
|
||||
|
||||
if ( m_value - oldValue == -1 )
|
||||
scrollEvent = wxEVT_SCROLL_LINEDOWN;
|
||||
else if ( m_value - oldValue == 1 )
|
||||
scrollEvent = wxEVT_SCROLL_LINEUP;
|
||||
else
|
||||
scrollEvent = wxEVT_SCROLL_THUMBTRACK;
|
||||
|
||||
// Do not send an event if the value has not actually changed
|
||||
// (Also works for wxSpinCtrl)
|
||||
if ( m_value == oldValue )
|
||||
return;
|
||||
|
||||
wxSpinEvent event( scrollEvent, m_windowId );
|
||||
|
||||
event.SetPosition( m_value );
|
||||
event.SetEventObject( this );
|
||||
if ((HandleWindowEvent( event )) && !event.IsAllowed())
|
||||
m_value = oldValue;
|
||||
|
||||
m_peer->SetValue( m_value );
|
||||
|
||||
// always send a thumbtrack event
|
||||
if (scrollEvent != wxEVT_SCROLL_THUMBTRACK)
|
||||
{
|
||||
scrollEvent = wxEVT_SCROLL_THUMBTRACK;
|
||||
wxSpinEvent event2( scrollEvent, GetId() );
|
||||
event2.SetPosition( m_value );
|
||||
event2.SetEventObject( this );
|
||||
HandleWindowEvent( event2 );
|
||||
}
|
||||
peer->SetActionProc( GetwxMacLiveScrollbarActionProc() );
|
||||
return peer ;
|
||||
}
|
||||
|
||||
void wxSpinButton::MacHandleControlClick(WXWidget WXUNUSED(control),
|
||||
wxInt16 controlpart,
|
||||
bool WXUNUSED(mouseStillDown))
|
||||
{
|
||||
int nScrollInc = 0;
|
||||
int inc = 0;
|
||||
|
||||
switch ( controlpart )
|
||||
{
|
||||
case kControlUpButtonPart :
|
||||
nScrollInc = 1;
|
||||
inc = 1;
|
||||
break;
|
||||
|
||||
case kControlDownButtonPart :
|
||||
nScrollInc = -1;
|
||||
inc = -1;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// trigger scroll events
|
||||
|
||||
wxEventType scrollEvent = wxEVT_NULL;
|
||||
int oldValue = GetValue() ;
|
||||
|
||||
MacHandleValueChanged( nScrollInc ) ;
|
||||
}
|
||||
int newValue = oldValue + inc;
|
||||
|
||||
wxInt32 wxSpinButton::MacControlHit(WXEVENTHANDLERREF WXUNUSED(handler),
|
||||
WXEVENTREF WXUNUSED(event))
|
||||
{
|
||||
#if 0
|
||||
// these have been handled by the live action proc already
|
||||
int nScrollInc = 0;
|
||||
wxMacCarbonEvent cEvent( (EventRef)event );
|
||||
|
||||
switch ( cEvent.GetParameter<ControlPartCode>(kEventParamControlPart, typeControlPartCode) )
|
||||
if (newValue < m_min)
|
||||
{
|
||||
case kControlUpButtonPart :
|
||||
nScrollInc = 1;
|
||||
break;
|
||||
|
||||
case kControlDownButtonPart :
|
||||
nScrollInc = -1;
|
||||
break;
|
||||
|
||||
default :
|
||||
break;
|
||||
if ( m_windowStyle & wxSP_WRAP )
|
||||
newValue = m_max;
|
||||
else
|
||||
newValue = m_min;
|
||||
}
|
||||
|
||||
MacHandleValueChanged( nScrollInc ) ;
|
||||
#endif
|
||||
if (newValue > m_max)
|
||||
{
|
||||
if ( m_windowStyle & wxSP_WRAP )
|
||||
newValue = m_min;
|
||||
else
|
||||
newValue = m_max;
|
||||
}
|
||||
|
||||
return noErr;
|
||||
}
|
||||
if ( newValue - oldValue == -1 )
|
||||
scrollEvent = wxEVT_SCROLL_LINEDOWN;
|
||||
else if ( newValue - oldValue == 1 )
|
||||
scrollEvent = wxEVT_SCROLL_LINEUP;
|
||||
else
|
||||
scrollEvent = wxEVT_SCROLL_THUMBTRACK;
|
||||
|
||||
wxSize wxSpinButton::DoGetBestSize() const
|
||||
{
|
||||
return wxSize( 16, 24 );
|
||||
// Do not send an event if the value has not actually changed
|
||||
// (Also works for wxSpinCtrl)
|
||||
if ( newValue == oldValue )
|
||||
return;
|
||||
|
||||
if ( scrollEvent != wxEVT_SCROLL_THUMBTRACK )
|
||||
{
|
||||
wxSpinEvent event( scrollEvent, m_windowId );
|
||||
|
||||
event.SetPosition( newValue );
|
||||
event.SetEventObject( this );
|
||||
if ((HandleWindowEvent( event )) && !event.IsAllowed())
|
||||
newValue = oldValue;
|
||||
}
|
||||
|
||||
m_peer->SetValue( newValue );
|
||||
|
||||
// always send a thumbtrack event
|
||||
SendThumbTrackEvent() ;
|
||||
}
|
||||
|
||||
#endif // wxUSE_SPINBTN
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/srchctrl.cpp
|
||||
// Name: src/osx/carbon/srchctrl.cpp
|
||||
// Purpose: implements mac carbon wxSearchCtrl
|
||||
// Author: Vince Harron
|
||||
// Created: 2006-02-19
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/statbmp.cpp
|
||||
// Name: src/osx/carbon/statbmp.cpp
|
||||
// Purpose: wxStaticBitmap
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: statbox.cpp
|
||||
// Name: src/osx/carbon/statbox.cpp
|
||||
// Purpose: wxStaticBox
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -14,63 +14,25 @@
|
||||
#if wxUSE_STATBOX
|
||||
|
||||
#include "wx/statbox.h"
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxStaticBox, wxControl)
|
||||
|
||||
|
||||
bool wxStaticBox::Create( wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxString& name )
|
||||
wxWidgetImplType* wxWidgetImpl::CreateGroupBox( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle)
|
||||
{
|
||||
m_macIsUserPane = false;
|
||||
Rect bounds = wxMacGetBoundsForControl( wxpeer, pos, size );
|
||||
|
||||
if ( !wxControl::Create( parent, id, pos, size, style, wxDefaultValidator, name ) )
|
||||
return false;
|
||||
|
||||
m_labelOrig = m_label = label;
|
||||
|
||||
Rect bounds = wxMacGetBoundsForControl( this, pos, size );
|
||||
|
||||
m_peer = new wxMacControl( this );
|
||||
wxMacControl* peer = new wxMacControl( wxpeer );
|
||||
OSStatus err = CreateGroupBoxControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds, CFSTR(""),
|
||||
true /*primary*/, m_peer->GetControlRefAddr() );
|
||||
true /*primary*/, peer->GetControlRefAddr() );
|
||||
verify_noerr( err );
|
||||
|
||||
MacPostControlCreate( pos, size );
|
||||
|
||||
return true;
|
||||
return peer;
|
||||
}
|
||||
|
||||
void wxStaticBox::GetBordersForSizer(int *borderTop, int *borderOther) const
|
||||
{
|
||||
static int extraTop = -1; // Uninitted
|
||||
static int other = 5;
|
||||
|
||||
if ( extraTop == -1 )
|
||||
{
|
||||
// The minimal border used for the top.
|
||||
// Later on, the staticbox's font height is added to this.
|
||||
extraTop = 0;
|
||||
|
||||
// As indicated by the HIG, Panther needs an extra border of 11
|
||||
// pixels (otherwise overlapping occurs at the top). The "other"
|
||||
// border has to be 11.
|
||||
extraTop = 11;
|
||||
other = 11;
|
||||
}
|
||||
|
||||
*borderTop = extraTop;
|
||||
if ( !m_label.empty() )
|
||||
*borderTop += GetCharHeight();
|
||||
|
||||
*borderOther = other;
|
||||
}
|
||||
|
||||
#endif // wxUSE_STATBOX
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/statbarma.cpp
|
||||
// Name: src/osx/carbon/statbarma.cpp
|
||||
// Purpose: native implementation of wxStatusBar (optional)
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/statlmac.cpp
|
||||
// Name: src/osx/carbon/statlmac.cpp
|
||||
// Purpose: a generic wxStaticLine class
|
||||
// Author: Vadim Zeitlin
|
||||
// Created: 28.06.99
|
||||
@ -31,38 +31,24 @@
|
||||
#include "wx/statbox.h"
|
||||
#endif
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
// ============================================================================
|
||||
// implementation
|
||||
// ============================================================================
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxStaticLine, wxControl)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxStaticLine
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
bool wxStaticLine::Create( wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxPoint &pos,
|
||||
const wxSize &size,
|
||||
long style,
|
||||
const wxString &name)
|
||||
wxWidgetImplType* wxWidgetImpl::CreateStaticLine( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle)
|
||||
{
|
||||
m_macIsUserPane = false ;
|
||||
|
||||
if ( !wxStaticLineBase::Create(parent, id, pos, size,
|
||||
style, wxDefaultValidator, name) )
|
||||
return false;
|
||||
|
||||
Rect bounds = wxMacGetBoundsForControl( this , pos , size ) ;
|
||||
m_peer = new wxMacControl(this) ;
|
||||
verify_noerr(CreateSeparatorControl(MAC_WXHWND(parent->MacGetTopLevelWindowRef()),&bounds, m_peer->GetControlRefAddr() ) ) ;
|
||||
|
||||
MacPostControlCreate(pos,size) ;
|
||||
|
||||
return true;
|
||||
Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size ) ;
|
||||
wxMacControl* peer = new wxMacControl(wxpeer) ;
|
||||
verify_noerr(CreateSeparatorControl(MAC_WXHWND(parent->MacGetTopLevelWindowRef()),&bounds, peer->GetControlRefAddr() ) ) ;
|
||||
return peer;
|
||||
}
|
||||
|
||||
#endif //wxUSE_STATLINE
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/stattext.cpp
|
||||
// Name: src/osx/carbon/stattext.cpp
|
||||
// Purpose: wxStaticText
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -26,55 +26,29 @@
|
||||
#include "wx/notebook.h"
|
||||
#include "wx/tabctrl.h"
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
#include "wx/osx/private.h"
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxStaticText, wxControl)
|
||||
|
||||
|
||||
bool wxStaticText::Create( wxWindow *parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
const wxString& name )
|
||||
class wxMacStaticText : public wxMacControl
|
||||
{
|
||||
m_macIsUserPane = false;
|
||||
|
||||
if ( !wxControl::Create( parent, id, pos, size, style, wxDefaultValidator, name ) )
|
||||
return false;
|
||||
|
||||
Rect bounds = wxMacGetBoundsForControl( this, pos, size );
|
||||
|
||||
m_peer = new wxMacControl( this );
|
||||
OSStatus err = CreateStaticTextControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()),
|
||||
&bounds, NULL, NULL, m_peer->GetControlRefAddr() );
|
||||
verify_noerr( err );
|
||||
|
||||
if ( ( style & wxST_ELLIPSIZE_END ) || ( style & wxST_ELLIPSIZE_MIDDLE ) )
|
||||
public:
|
||||
wxMacStaticText( wxWindowMac* peer ) : wxMacControl(peer)
|
||||
{
|
||||
TruncCode tCode = truncEnd;
|
||||
if ( style & wxST_ELLIPSIZE_MIDDLE )
|
||||
tCode = truncMiddle;
|
||||
|
||||
err = m_peer->SetData( kControlStaticTextTruncTag, tCode );
|
||||
err = m_peer->SetData( kControlStaticTextIsMultilineTag, (Boolean)0 );
|
||||
}
|
||||
|
||||
MacPostControlCreate( pos, size );
|
||||
|
||||
SetLabel(label);
|
||||
|
||||
return true;
|
||||
}
|
||||
void SetLabel(const wxString& title, wxFontEncoding encoding)
|
||||
{
|
||||
wxCFStringRef str( title, encoding );
|
||||
OSStatus err = SetData<CFStringRef>(kControlEntireControl, kControlStaticTextCFStringTag, str);
|
||||
verify_noerr( err );
|
||||
}
|
||||
};
|
||||
|
||||
wxSize wxStaticText::DoGetBestSize() const
|
||||
{
|
||||
Rect bestsize = { 0 , 0 , 0 , 0 } ;
|
||||
Point bounds;
|
||||
#if wxOSX_USE_CARBON
|
||||
Rect bestsize = { 0 , 0 , 0 , 0 } ;
|
||||
|
||||
// try the built-in best size if available
|
||||
Boolean former = m_peer->GetData<Boolean>( kControlStaticTextIsMultilineTag);
|
||||
@ -87,7 +61,9 @@ wxSize wxStaticText::DoGetBestSize() const
|
||||
bounds.v = bestsize.bottom - bestsize.top ;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
#if wxOSX_USE_CARBON
|
||||
ControlFontStyleRec controlFont;
|
||||
OSStatus err = m_peer->GetData<ControlFontStyleRec>( kControlEntireControl, kControlFontStyleTag, &controlFont );
|
||||
verify_noerr( err );
|
||||
@ -104,6 +80,7 @@ wxSize wxStaticText::DoGetBestSize() const
|
||||
verify_noerr( err );
|
||||
}
|
||||
else
|
||||
#endif
|
||||
#endif
|
||||
{
|
||||
wxClientDC dc(const_cast<wxStaticText*>(this));
|
||||
@ -122,76 +99,38 @@ wxSize wxStaticText::DoGetBestSize() const
|
||||
return wxSize( bounds.h, bounds.v );
|
||||
}
|
||||
|
||||
void wxStaticText::SetLabel(const wxString& label)
|
||||
{
|
||||
m_labelOrig = label;
|
||||
|
||||
// middle/end ellipsization is handled by the OS:
|
||||
if ( HasFlag(wxST_ELLIPSIZE_END) || HasFlag(wxST_ELLIPSIZE_MIDDLE) )
|
||||
{
|
||||
// remove markup
|
||||
wxString str(label);
|
||||
if (HasFlag(wxST_MARKUP))
|
||||
str = RemoveMarkup(label);
|
||||
|
||||
// and leave ellipsization to the OS
|
||||
DoSetLabel(str);
|
||||
}
|
||||
else // not supported natively
|
||||
{
|
||||
DoSetLabel(GetEllipsizedLabelWithoutMarkup());
|
||||
}
|
||||
|
||||
if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) &&
|
||||
!IsEllipsized() ) // don't resize if we adjust to current size
|
||||
{
|
||||
InvalidateBestSize();
|
||||
SetSize( GetBestSize() );
|
||||
}
|
||||
|
||||
Refresh();
|
||||
|
||||
// we shouldn't need forced updates
|
||||
// Update();
|
||||
}
|
||||
|
||||
bool wxStaticText::SetFont(const wxFont& font)
|
||||
{
|
||||
bool ret = wxControl::SetFont( font );
|
||||
|
||||
if ( ret )
|
||||
{
|
||||
if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) )
|
||||
{
|
||||
InvalidateBestSize();
|
||||
SetSize( GetBestSize() );
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
// for wxST_ELLIPSIZE_* support:
|
||||
|
||||
void wxStaticText::DoSetLabel(const wxString& label)
|
||||
{
|
||||
m_labelOrig = label;
|
||||
m_label = RemoveMnemonics(label);
|
||||
|
||||
wxCFStringRef str( m_label, GetFont().GetEncoding() );
|
||||
OSStatus err = m_peer->SetData<CFStringRef>(kControlEntireControl, kControlStaticTextCFStringTag, str);
|
||||
verify_noerr( err );
|
||||
}
|
||||
|
||||
wxString wxStaticText::DoGetLabel() const
|
||||
{
|
||||
return m_label;
|
||||
}
|
||||
|
||||
/*
|
||||
FIXME: UpdateLabel() should be called on size events when wxST_ELLIPSIZE_START is set
|
||||
to allow correct dynamic ellipsizing of the label
|
||||
*/
|
||||
|
||||
wxWidgetImplType* wxWidgetImpl::CreateStaticText( wxWindowMac* wxpeer,
|
||||
wxWindowMac* parent,
|
||||
wxWindowID id,
|
||||
const wxString& label,
|
||||
const wxPoint& pos,
|
||||
const wxSize& size,
|
||||
long style,
|
||||
long extraStyle)
|
||||
{
|
||||
Rect bounds = wxMacGetBoundsForControl( wxpeer, pos, size );
|
||||
|
||||
wxMacControl* peer = new wxMacStaticText( wxpeer );
|
||||
OSStatus err = CreateStaticTextControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()),
|
||||
&bounds, NULL, NULL, peer->GetControlRefAddr() );
|
||||
verify_noerr( err );
|
||||
|
||||
if ( ( style & wxST_ELLIPSIZE_END ) || ( style & wxST_ELLIPSIZE_MIDDLE ) )
|
||||
{
|
||||
TruncCode tCode = truncEnd;
|
||||
if ( style & wxST_ELLIPSIZE_MIDDLE )
|
||||
tCode = truncMiddle;
|
||||
|
||||
err = peer->SetData( kControlStaticTextTruncTag, tCode );
|
||||
err = peer->SetData( kControlStaticTextIsMultilineTag, (Boolean)0 );
|
||||
}
|
||||
return peer;
|
||||
}
|
||||
|
||||
#endif //if wxUSE_STATTEXT
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: src/mac/carbon/tabctrl.cpp
|
||||
// Name: src/osx/carbon/tabctrl.cpp
|
||||
// Purpose: wxTabCtrl
|
||||
// Author: Stefan Csomor
|
||||
// Modified by:
|
||||
@ -13,190 +13,6 @@
|
||||
|
||||
#if wxUSE_TAB_DIALOG
|
||||
|
||||
#include "wx/tabctrl.h"
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/control.h"
|
||||
#endif
|
||||
|
||||
#include "wx/osx/uma.h"
|
||||
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxTabCtrl, wxControl)
|
||||
IMPLEMENT_DYNAMIC_CLASS(wxTabEvent, wxNotifyEvent)
|
||||
|
||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_TAB_SEL_CHANGED)
|
||||
DEFINE_EVENT_TYPE(wxEVT_COMMAND_TAB_SEL_CHANGING)
|
||||
|
||||
|
||||
BEGIN_EVENT_TABLE(wxTabCtrl, wxControl)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
|
||||
wxTabCtrl::wxTabCtrl()
|
||||
{
|
||||
m_macIsUserPane = false;
|
||||
m_imageList = NULL;
|
||||
}
|
||||
|
||||
bool wxTabCtrl::Create( wxWindow *parent,
|
||||
wxWindowID id, const wxPoint& pos, const wxSize& size,
|
||||
long style, const wxString& name )
|
||||
{
|
||||
m_macIsUserPane = false;
|
||||
m_imageList = NULL;
|
||||
|
||||
if ( !wxControl::Create( parent, id, pos, size, style, wxDefaultValidator, name ) )
|
||||
return false;
|
||||
|
||||
Rect bounds = wxMacGetBoundsForControl( this, pos, size );
|
||||
|
||||
UInt16 tabstyle = kControlTabDirectionNorth;
|
||||
ControlTabSize tabsize = kControlTabSizeLarge;
|
||||
if ( GetWindowVariant() == wxWINDOW_VARIANT_SMALL )
|
||||
tabsize = kControlTabSizeSmall ;
|
||||
else if ( GetWindowVariant() == wxWINDOW_VARIANT_MINI )
|
||||
{
|
||||
tabsize = 3 ;
|
||||
}
|
||||
|
||||
m_peer = new wxMacControl( this );
|
||||
OSStatus err = CreateTabsControl(
|
||||
MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds,
|
||||
tabsize, tabstyle, 0, NULL, m_peer->GetControlRefAddr() );
|
||||
verify_noerr( err );
|
||||
|
||||
MacPostControlCreate( pos, size );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
wxTabCtrl::~wxTabCtrl()
|
||||
{
|
||||
}
|
||||
|
||||
void wxTabCtrl::Command(wxCommandEvent& event)
|
||||
{
|
||||
}
|
||||
|
||||
bool wxTabCtrl::DeleteAllItems()
|
||||
{
|
||||
// TODO:
|
||||
return false;
|
||||
}
|
||||
|
||||
bool wxTabCtrl::DeleteItem(int item)
|
||||
{
|
||||
// TODO:
|
||||
return false;
|
||||
}
|
||||
|
||||
int wxTabCtrl::GetSelection() const
|
||||
{
|
||||
// TODO:
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Get the tab with the current keyboard focus
|
||||
//
|
||||
int wxTabCtrl::GetCurFocus() const
|
||||
{
|
||||
// TODO:
|
||||
return 0;
|
||||
}
|
||||
|
||||
wxImageList * wxTabCtrl::GetImageList() const
|
||||
{
|
||||
return m_imageList;
|
||||
}
|
||||
|
||||
int wxTabCtrl::GetItemCount() const
|
||||
{
|
||||
// TODO:
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Get the rect corresponding to the tab
|
||||
bool wxTabCtrl::GetItemRect(int item, wxRect& wxrect) const
|
||||
{
|
||||
// TODO:
|
||||
return false;
|
||||
}
|
||||
|
||||
int wxTabCtrl::GetRowCount() const
|
||||
{
|
||||
// TODO:
|
||||
return 0;
|
||||
}
|
||||
|
||||
wxString wxTabCtrl::GetItemText(int item) const
|
||||
{
|
||||
// TODO:
|
||||
return wxEmptyString;
|
||||
}
|
||||
|
||||
int wxTabCtrl::GetItemImage(int item) const
|
||||
{
|
||||
// TODO:
|
||||
return 0;
|
||||
}
|
||||
|
||||
void* wxTabCtrl::GetItemData(int item) const
|
||||
{
|
||||
// TODO:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int wxTabCtrl::HitTest(const wxPoint& pt, long& flags)
|
||||
{
|
||||
// TODO:
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool wxTabCtrl::InsertItem(int item, const wxString& text, int imageId, void* data)
|
||||
{
|
||||
// TODO:
|
||||
return false;
|
||||
}
|
||||
|
||||
int wxTabCtrl::SetSelection(int item)
|
||||
{
|
||||
// TODO:
|
||||
return 0;
|
||||
}
|
||||
|
||||
void wxTabCtrl::SetImageList(wxImageList* imageList)
|
||||
{
|
||||
// TODO:
|
||||
}
|
||||
|
||||
bool wxTabCtrl::SetItemText(int item, const wxString& text)
|
||||
{
|
||||
// TODO:
|
||||
return false;
|
||||
}
|
||||
|
||||
bool wxTabCtrl::SetItemImage(int item, int image)
|
||||
{
|
||||
// TODO:
|
||||
return false;
|
||||
}
|
||||
|
||||
bool wxTabCtrl::SetItemData(int item, void* data)
|
||||
{
|
||||
// TODO:
|
||||
return false;
|
||||
}
|
||||
|
||||
// Set the size for a fixed-width tab control
|
||||
void wxTabCtrl::SetItemSize(const wxSize& size)
|
||||
{
|
||||
// TODO:
|
||||
}
|
||||
|
||||
// Set the padding between tabs
|
||||
void wxTabCtrl::SetPadding(const wxSize& padding)
|
||||
{
|
||||
// TODO:
|
||||
}
|
||||
// superseeded by wxNotebook implementation, skeleton moved to src/osx/
|
||||
|
||||
#endif // wxUSE_TAB_DIALOG
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user