Added original works and stubs to CVS repository
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19676 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
34
include/wx/cocoa/NSButton.h
Normal file
34
include/wx/cocoa/NSButton.h
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/NSButton.h
|
||||||
|
// Purpose: wxCocoaNSButton class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/09
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_NSBUTTON_H__
|
||||||
|
#define __WX_COCOA_NSBUTTON_H__
|
||||||
|
|
||||||
|
#include "wx/hashmap.h"
|
||||||
|
#include "wx/cocoa/ObjcPose.h"
|
||||||
|
|
||||||
|
WX_DECLARE_OBJC_HASHMAP(NSButton);
|
||||||
|
|
||||||
|
class wxCocoaNSButton
|
||||||
|
{
|
||||||
|
WX_DECLARE_OBJC_INTERFACE_HASHMAP(NSButton);
|
||||||
|
public:
|
||||||
|
void AssociateNSButton(WX_NSButton cocoaNSButton);
|
||||||
|
inline void DisassociateNSButton(WX_NSButton cocoaNSButton)
|
||||||
|
{
|
||||||
|
sm_cocoaHash.erase(cocoaNSButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual void Cocoa_wxNSButtonAction(void) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _WX_COCOA_NSBUTTON_H_
|
26
include/wx/cocoa/NSControl.h
Normal file
26
include/wx/cocoa/NSControl.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/NSControl.h
|
||||||
|
// Purpose: wxCocoaNSControl class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/02/15
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_NSCONTROL_H__
|
||||||
|
#define __WX_COCOA_NSCONTROL_H__
|
||||||
|
|
||||||
|
#include "wx/hashmap.h"
|
||||||
|
#include "wx/cocoa/ObjcPose.h"
|
||||||
|
|
||||||
|
WX_DECLARE_OBJC_HASHMAP(NSControl);
|
||||||
|
class wxCocoaNSControl
|
||||||
|
{
|
||||||
|
WX_DECLARE_OBJC_INTERFACE(NSControl)
|
||||||
|
protected:
|
||||||
|
// virtual void Cocoa_didChangeText(void) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _WX_COCOA_NSCONTROL_H_
|
50
include/wx/cocoa/NSMenu.h
Normal file
50
include/wx/cocoa/NSMenu.h
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/NSMenu.h
|
||||||
|
// Purpose: wxCocoaNSMenu class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/09
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_NSMENU_H__
|
||||||
|
#define __WX_COCOA_NSMENU_H__
|
||||||
|
|
||||||
|
#include "wx/hashmap.h"
|
||||||
|
#include "wx/cocoa/ObjcPose.h"
|
||||||
|
|
||||||
|
WX_DECLARE_OBJC_HASHMAP(NSMenu);
|
||||||
|
|
||||||
|
// ========================================================================
|
||||||
|
// wxCocoaNSMenu
|
||||||
|
// ========================================================================
|
||||||
|
|
||||||
|
class wxCocoaNSMenu
|
||||||
|
{
|
||||||
|
WX_DECLARE_OBJC_INTERFACE(NSMenu)
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// initialization
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
inline wxCocoaNSMenu()
|
||||||
|
{
|
||||||
|
m_cocoaNSMenu = NULL;
|
||||||
|
}
|
||||||
|
~wxCocoaNSMenu();
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Cocoa specifics
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
bool CocoaCreate(const wxString &title);
|
||||||
|
inline WX_NSMenu GetNSMenu() { return m_cocoaNSMenu; }
|
||||||
|
protected:
|
||||||
|
WX_NSMenu m_cocoaNSMenu;
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Implementation
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
protected:
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _WX_COCOA_NSMENU_H_
|
26
include/wx/cocoa/NSTextField.h
Normal file
26
include/wx/cocoa/NSTextField.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/NSTextField.h
|
||||||
|
// Purpose: wxCocoaNSTextField class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/09
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_NSTEXTFIELD_H__
|
||||||
|
#define __WX_COCOA_NSTEXTFIELD_H__
|
||||||
|
|
||||||
|
#include "wx/hashmap.h"
|
||||||
|
#include "wx/cocoa/ObjcPose.h"
|
||||||
|
|
||||||
|
WX_DECLARE_OBJC_HASHMAP(NSTextField);
|
||||||
|
class wxCocoaNSTextField
|
||||||
|
{
|
||||||
|
WX_DECLARE_OBJC_INTERFACE(NSTextField)
|
||||||
|
protected:
|
||||||
|
virtual void Cocoa_didChangeText(void) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _WX_COCOA_NSTEXTFIELD_H_
|
32
include/wx/cocoa/NSView.h
Normal file
32
include/wx/cocoa/NSView.h
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/NSView.h
|
||||||
|
// Purpose: wxCocoaNSView class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/02/15
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_NSVIEW_H__
|
||||||
|
#define __WX_COCOA_NSVIEW_H__
|
||||||
|
|
||||||
|
#include "wx/hashmap.h"
|
||||||
|
#include "wx/cocoa/ObjcPose.h"
|
||||||
|
|
||||||
|
WX_DECLARE_OBJC_HASHMAP(NSView);
|
||||||
|
class wxCocoaNSView
|
||||||
|
{
|
||||||
|
/* NSView is a rather special case and requires some extra attention */
|
||||||
|
WX_DECLARE_OBJC_INTERFACE_HASHMAP(NSView)
|
||||||
|
public:
|
||||||
|
void AssociateNSView(WX_NSView cocoaNSView);
|
||||||
|
void DisassociateNSView(WX_NSView cocoaNSView);
|
||||||
|
protected:
|
||||||
|
static void *sm_cocoaObserver;
|
||||||
|
public:
|
||||||
|
virtual void Cocoa_FrameChanged(void) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _WX_COCOA_NSVIEW_H_
|
35
include/wx/cocoa/NSWindow.h
Normal file
35
include/wx/cocoa/NSWindow.h
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/NSWindow.h
|
||||||
|
// Purpose: wxCocoaNSWindow class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/03/16
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_NSWINDOW_H__
|
||||||
|
#define __WX_COCOA_NSWINDOW_H__
|
||||||
|
|
||||||
|
#include "wx/hashmap.h"
|
||||||
|
#include "wx/cocoa/ObjcPose.h"
|
||||||
|
|
||||||
|
WX_DECLARE_OBJC_HASHMAP(NSWindow);
|
||||||
|
|
||||||
|
class wxCocoaNSWindow
|
||||||
|
{
|
||||||
|
/* NSWindow is a rather special case and requires some extra attention */
|
||||||
|
WX_DECLARE_OBJC_INTERFACE_HASHMAP(NSWindow)
|
||||||
|
public:
|
||||||
|
void AssociateNSWindow(WX_NSWindow cocoaNSWindow);
|
||||||
|
inline void DisassociateNSWindow(WX_NSWindow cocoaNSWindow)
|
||||||
|
{
|
||||||
|
sm_cocoaHash.erase(cocoaNSWindow);
|
||||||
|
}
|
||||||
|
virtual void Cocoa_close(void) = 0;
|
||||||
|
virtual bool Cocoa_windowShouldClose(void) = 0;
|
||||||
|
virtual void Cocoa_wxMenuItemAction(wxMenuItem& item) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _WX_COCOA_NSWINDOW_H_
|
123
include/wx/cocoa/ObjcPose.h
Normal file
123
include/wx/cocoa/ObjcPose.h
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/ObjcPose.h
|
||||||
|
// Purpose: Macros for initializing poseAs, among other things
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/03
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott <dfe@cox.net>
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_PRIVATE_POSER_H__
|
||||||
|
#define __WX_COCOA_PRIVATE_POSER_H__
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
Objective-C Poser class initialization
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#ifdef __OBJC__
|
||||||
|
#import <objc/objc-class.h>
|
||||||
|
|
||||||
|
class wxPoseAsInitializer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxPoseAsInitializer(Class poser)
|
||||||
|
: m_poser(poser)
|
||||||
|
, m_next(sm_first)
|
||||||
|
{
|
||||||
|
sm_first = this;
|
||||||
|
}
|
||||||
|
~wxPoseAsInitializer()
|
||||||
|
{
|
||||||
|
class_poseAs(m_poser,m_poser->super_class);
|
||||||
|
sm_first = m_next;
|
||||||
|
}
|
||||||
|
static void InitializePosers()
|
||||||
|
{
|
||||||
|
while(sm_first)
|
||||||
|
{
|
||||||
|
delete sm_first;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
protected:
|
||||||
|
Class m_poser;
|
||||||
|
wxPoseAsInitializer *m_next;
|
||||||
|
static wxPoseAsInitializer *sm_first;
|
||||||
|
};
|
||||||
|
|
||||||
|
class wxDummyForPoseAsInitializer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
wxDummyForPoseAsInitializer(void*) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
#define WX_IMPLEMENT_POSER(poser) \
|
||||||
|
wxDummyForPoseAsInitializer wxDummyPoseAsInitializerFor##poser(new wxPoseAsInitializer([poser class]))
|
||||||
|
|
||||||
|
#endif // __OBJC__
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
Basic hashmap stuff, used by everything
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#define WX_DECLARE_OBJC_HASHMAP(ObjcClass) \
|
||||||
|
class wxCocoa##ObjcClass; \
|
||||||
|
WX_DECLARE_HASH_MAP(WX_##ObjcClass,wxCocoa##ObjcClass*,wxPointerHash,wxPointerEqual,wxCocoa##ObjcClass##Hash)
|
||||||
|
|
||||||
|
#define WX_DECLARE_OBJC_INTERFACE_HASHMAP(ObjcClass) \
|
||||||
|
public: \
|
||||||
|
static inline wxCocoa##ObjcClass* GetFromCocoa(WX_##ObjcClass cocoaObjcClass) \
|
||||||
|
{ \
|
||||||
|
wxCocoa##ObjcClass##Hash::iterator iter = sm_cocoaHash.find(cocoaObjcClass); \
|
||||||
|
if(iter!=sm_cocoaHash.end()) \
|
||||||
|
{ \
|
||||||
|
return iter->second; \
|
||||||
|
} \
|
||||||
|
return NULL; \
|
||||||
|
} \
|
||||||
|
protected: \
|
||||||
|
static wxCocoa##ObjcClass##Hash sm_cocoaHash;
|
||||||
|
|
||||||
|
#define WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(ObjcClass) \
|
||||||
|
wxCocoa##ObjcClass##Hash wxCocoa##ObjcClass::sm_cocoaHash;
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
The entire interface, including some boilerplate stuff
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#define WX_DECLARE_OBJC_INTERFACE(ObjcClass) \
|
||||||
|
WX_DECLARE_OBJC_INTERFACE_HASHMAP(ObjcClass) \
|
||||||
|
public: \
|
||||||
|
inline void Associate##ObjcClass(WX_##ObjcClass cocoaObjcClass) \
|
||||||
|
{ \
|
||||||
|
sm_cocoaHash.insert(wxCocoa##ObjcClass##Hash::value_type(cocoaObjcClass,this)); \
|
||||||
|
} \
|
||||||
|
inline void Disassociate##ObjcClass(WX_##ObjcClass cocoaObjcClass) \
|
||||||
|
{ \
|
||||||
|
sm_cocoaHash.erase(cocoaObjcClass); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define WX_IMPLEMENT_OBJC_INTERFACE(ObjcClass) \
|
||||||
|
WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(ObjcClass)
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
Stuff to be used by the wxWindows class (not the Cocoa interface)
|
||||||
|
-------------------------------------------------------------------------*/
|
||||||
|
#define WX_DECLARE_COCOA_OWNER(ObjcClass,ObjcBase,ObjcRoot) \
|
||||||
|
public: \
|
||||||
|
inline WX_##ObjcClass Get##ObjcClass() { return (WX_##ObjcClass)m_cocoa##ObjcRoot; } \
|
||||||
|
inline const WX_##ObjcClass Get##ObjcClass() const { return (WX_##ObjcClass)m_cocoa##ObjcRoot; } \
|
||||||
|
protected: \
|
||||||
|
void Set##ObjcClass(WX_##ObjcClass cocoaObjcClass);
|
||||||
|
|
||||||
|
#define WX_IMPLEMENT_COCOA_OWNER(wxClass,ObjcClass,ObjcBase,ObjcRoot) \
|
||||||
|
void wxClass::Set##ObjcClass(WX_##ObjcClass cocoaObjcClass) \
|
||||||
|
{ \
|
||||||
|
if(m_cocoa##ObjcRoot) \
|
||||||
|
Disassociate##ObjcClass((WX_##ObjcClass)m_cocoa##ObjcRoot); \
|
||||||
|
Set##ObjcBase(cocoaObjcClass); \
|
||||||
|
if(m_cocoa##ObjcRoot) \
|
||||||
|
Associate##ObjcClass((WX_##ObjcClass)m_cocoa##ObjcRoot); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __WX_COCOA_PRIVATE_POSER_H__
|
||||||
|
|
73
include/wx/cocoa/app.h
Normal file
73
include/wx/cocoa/app.h
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/app.h
|
||||||
|
// Purpose: wxApp class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/11/27
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef _WX_COCOA_APP_H_
|
||||||
|
#define _WX_COCOA_APP_H_
|
||||||
|
|
||||||
|
// entrypoint
|
||||||
|
int WXDLLEXPORT wxEntry( int argc, char *argv[] );
|
||||||
|
|
||||||
|
// Represents the application. Derive OnInit and declare
|
||||||
|
// a new App object to start application
|
||||||
|
class WXDLLEXPORT wxApp: public wxAppBase
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxApp)
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// initialization
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
wxApp();
|
||||||
|
virtual ~wxApp() {}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Cocoa specifics
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
inline WX_NSApplication GetNSApplication() { return m_cocoaApp; }
|
||||||
|
void CocoaInstallRequestedIdleHandler() { if(m_isIdle) CocoaInstallIdleHandler(); }
|
||||||
|
inline void CocoaRequestIdle() { m_isIdle = true; }
|
||||||
|
protected:
|
||||||
|
WX_NSApplication m_cocoaApp;
|
||||||
|
void CocoaInstallIdleHandler();
|
||||||
|
bool m_isIdle;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Implementation
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
// Implement wxAppBase pure virtuals
|
||||||
|
virtual int MainLoop();
|
||||||
|
virtual void ExitMainLoop();
|
||||||
|
virtual bool Initialized();
|
||||||
|
virtual bool Pending();
|
||||||
|
virtual void Dispatch();
|
||||||
|
virtual bool Yield(bool onlyIfNeeded = FALSE);
|
||||||
|
virtual bool ProcessIdle();
|
||||||
|
|
||||||
|
/* Idle Processing */
|
||||||
|
void OnIdle(wxIdleEvent& event);
|
||||||
|
// Send idle event to all top-level windows.
|
||||||
|
// Returns TRUE if more idle time is requested.
|
||||||
|
bool SendIdleEvents();
|
||||||
|
// Send idle event to window and all subwindows
|
||||||
|
// Returns TRUE if more idle time is requested.
|
||||||
|
bool SendIdleEvents(wxWindowCocoa* win);
|
||||||
|
|
||||||
|
static bool Initialize();
|
||||||
|
static void CleanUp();
|
||||||
|
|
||||||
|
virtual bool OnInit();
|
||||||
|
virtual bool OnInitGui();
|
||||||
|
void DeletePendingObjects();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _WX_COCOA_APP_H_
|
59
include/wx/cocoa/button.h
Normal file
59
include/wx/cocoa/button.h
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/button.h
|
||||||
|
// Purpose: wxButton class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/29
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_BUTTON_H__
|
||||||
|
#define __WX_COCOA_BUTTON_H__
|
||||||
|
|
||||||
|
#include "wx/cocoa/NSButton.h"
|
||||||
|
|
||||||
|
// ========================================================================
|
||||||
|
// wxButton
|
||||||
|
// ========================================================================
|
||||||
|
class WXDLLEXPORT wxButton : public wxButtonBase, protected wxCocoaNSButton
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxButton)
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
WX_DECLARE_COCOA_OWNER(NSButton,NSControl,NSView)
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// initialization
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
wxButton() { }
|
||||||
|
wxButton(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxString& label,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize, long style = 0,
|
||||||
|
const wxValidator& validator = wxDefaultValidator,
|
||||||
|
const wxString& name = wxButtonNameStr)
|
||||||
|
{
|
||||||
|
Create(parent, winid, label, pos, size, style, validator, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Create(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxString& label,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize, long style = 0,
|
||||||
|
const wxValidator& validator = wxDefaultValidator,
|
||||||
|
const wxString& name = wxButtonNameStr);
|
||||||
|
virtual ~wxButton();
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Cocoa callbacks
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
protected:
|
||||||
|
virtual void Cocoa_wxNSButtonAction(void);
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Implementation
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __WX_COCOA_BUTTON_H__
|
63
include/wx/cocoa/checklst.h
Normal file
63
include/wx/cocoa/checklst.h
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/checklst.h
|
||||||
|
// Purpose: wxCheckListBox class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/03/16
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_CHECKLST_H__
|
||||||
|
#define __WX_COCOA_CHECKLST_H__
|
||||||
|
|
||||||
|
//#include "wx/cocoa/NSTableView.h"
|
||||||
|
|
||||||
|
// ========================================================================
|
||||||
|
// wxCheckListBox
|
||||||
|
// ========================================================================
|
||||||
|
class WXDLLEXPORT wxCheckListBox: public wxCheckListBoxBase //, protected wxCocoaNSTableView
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxCheckListBox)
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
WX_DECLARE_COCOA_OWNER(NSTableView,NSControl,NSView)
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// initialization
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
wxCheckListBox() { }
|
||||||
|
wxCheckListBox(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
int n = 0, const wxString choices[] = NULL,
|
||||||
|
long style = 0,
|
||||||
|
const wxValidator& validator = wxDefaultValidator,
|
||||||
|
const wxString& name = wxListBoxNameStr)
|
||||||
|
{
|
||||||
|
Create(parent, winid, pos, size, n, choices, style, validator, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Create(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
int n = 0, const wxString choices[] = NULL,
|
||||||
|
long style = 0,
|
||||||
|
const wxValidator& validator = wxDefaultValidator,
|
||||||
|
const wxString& name = wxListBoxNameStr);
|
||||||
|
virtual ~wxCheckListBox();
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Cocoa callbacks
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
protected:
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Implementation
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
// check list box specific methods
|
||||||
|
virtual bool IsChecked(size_t item) const;
|
||||||
|
virtual void Check(size_t item, bool check = TRUE);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __WX_COCOA_CHECKLST_H__
|
93
include/wx/cocoa/control.h
Normal file
93
include/wx/cocoa/control.h
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/control.h
|
||||||
|
// Purpose: wxControl class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/02/15
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_CONTROL_H__
|
||||||
|
#define __WX_COCOA_CONTROL_H__
|
||||||
|
|
||||||
|
#include "wx/cocoa/NSControl.h"
|
||||||
|
|
||||||
|
// ========================================================================
|
||||||
|
// wxControl
|
||||||
|
// ========================================================================
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxControl : public wxControlBase, public wxCocoaNSControl
|
||||||
|
{
|
||||||
|
DECLARE_ABSTRACT_CLASS(wxControl)
|
||||||
|
WX_DECLARE_COCOA_OWNER(NSControl,NSView,NSView)
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// initialization
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
wxControl() {}
|
||||||
|
wxControl(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize, long style = 0,
|
||||||
|
const wxValidator& validator = wxDefaultValidator,
|
||||||
|
const wxString& name = wxControlNameStr)
|
||||||
|
{
|
||||||
|
Create(parent, winid, pos, size, style, validator, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Create(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize, long style = 0,
|
||||||
|
const wxValidator& validator = wxDefaultValidator,
|
||||||
|
const wxString& name = wxControlNameStr);
|
||||||
|
virtual ~wxControl();
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Implementation
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
|
||||||
|
// implementation from now on
|
||||||
|
// --------------------------
|
||||||
|
|
||||||
|
void OnEraseBackground(wxEraseEvent& event);
|
||||||
|
|
||||||
|
virtual void Command(wxCommandEvent& event) { ProcessCommand(event); }
|
||||||
|
|
||||||
|
// Calls the callback and appropriate event handlers
|
||||||
|
bool ProcessCommand(wxCommandEvent& event);
|
||||||
|
|
||||||
|
#if WXWIN_COMPATIBILITY
|
||||||
|
virtual void SetButtonColour(const wxColour& WXUNUSED(col)) { }
|
||||||
|
wxColour* GetButtonColour() const { return NULL; }
|
||||||
|
|
||||||
|
inline virtual void SetLabelFont(const wxFont& font);
|
||||||
|
inline virtual void SetButtonFont(const wxFont& font);
|
||||||
|
inline wxFont& GetLabelFont() const;
|
||||||
|
inline wxFont& GetButtonFont() const;
|
||||||
|
|
||||||
|
// Adds callback
|
||||||
|
inline void Callback(const wxFunction function);
|
||||||
|
|
||||||
|
wxFunction GetCallback() { return m_callback; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
wxFunction m_callback; // Callback associated with the window
|
||||||
|
#endif // WXWIN_COMPATIBILITY
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual wxSize DoGetBestSize() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#if WXWIN_COMPATIBILITY
|
||||||
|
inline void wxControl::Callback(const wxFunction f) { m_callback = f; };
|
||||||
|
inline wxFont& wxControl::GetLabelFont() const { return GetFont(); }
|
||||||
|
inline wxFont& wxControl::GetButtonFont() const { return GetFont(); }
|
||||||
|
inline void wxControl::SetLabelFont(const wxFont& font) { SetFont(font); }
|
||||||
|
inline void wxControl::SetButtonFont(const wxFont& font) { SetFont(font); }
|
||||||
|
#endif // WXWIN_COMPATIBILITY
|
||||||
|
|
||||||
|
#endif // __WX_COCOA_CONTROL_H__
|
28
include/wx/cocoa/dcmemory.h
Normal file
28
include/wx/cocoa/dcmemory.h
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/dcmemory.h
|
||||||
|
// Purpose: wxMemoryDC class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/03/16
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_DCMEMORY_H__
|
||||||
|
#define __WX_COCOA_DCMEMORY_H__
|
||||||
|
|
||||||
|
#include "wx/dcclient.h"
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxMemoryDC: public wxDC
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxMemoryDC)
|
||||||
|
public:
|
||||||
|
wxMemoryDC(void);
|
||||||
|
wxMemoryDC( wxDC *dc ); // Create compatible DC
|
||||||
|
~wxMemoryDC(void);
|
||||||
|
virtual void SelectObject(const wxBitmap& bitmap);
|
||||||
|
virtual void DoGetSize(int *width, int *height) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __WX_COCOA_DCMEMORY_H__
|
26
include/wx/cocoa/dcscreen.h
Normal file
26
include/wx/cocoa/dcscreen.h
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/dcscreen.h
|
||||||
|
// Purpose: wxScreenDC class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/03/16
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_DCSCREEN_H__
|
||||||
|
#define __WX_COCOA_DCSCREEN_H__
|
||||||
|
|
||||||
|
#include "wx/dcclient.h"
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxScreenDC: public wxDC
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxScreenDC)
|
||||||
|
public:
|
||||||
|
wxScreenDC(void);
|
||||||
|
wxScreenDC( wxDC *dc ); // Create compatible DC
|
||||||
|
~wxScreenDC(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __WX_COCOA_DCSCREEN_H__
|
104
include/wx/cocoa/dialog.h
Normal file
104
include/wx/cocoa/dialog.h
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/dialog.h
|
||||||
|
// Purpose: wxDialog class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/15
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef _WX_COCOA_DIALOG_H_
|
||||||
|
#define _WX_COCOA_DIALOG_H_
|
||||||
|
|
||||||
|
#include "wx/defs.h"
|
||||||
|
// NOTE: we don't need panel.h, but other things expect it to be included
|
||||||
|
#include "wx/panel.h"
|
||||||
|
#include "wx/cocoa/NSPanel.h"
|
||||||
|
|
||||||
|
WXDLLEXPORT_DATA(extern const wxChar*) wxDialogNameStr;
|
||||||
|
|
||||||
|
// ========================================================================
|
||||||
|
// wxDialog
|
||||||
|
// ========================================================================
|
||||||
|
class WXDLLEXPORT wxDialog : public wxDialogBase, protected wxCocoaNSPanel
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxDialog)
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
WX_DECLARE_COCOA_OWNER(NSPanel,NSWindow,NSWindow)
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// initialization
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
wxDialog() { Init(); }
|
||||||
|
|
||||||
|
// Constructor with a modal flag, but no window id - the old convention
|
||||||
|
wxDialog(wxWindow *parent,
|
||||||
|
const wxString& title, bool modal,
|
||||||
|
int x = -1, int y= -1, int width = 500, int height = 500,
|
||||||
|
long style = wxDEFAULT_DIALOG_STYLE,
|
||||||
|
const wxString& name = wxDialogNameStr)
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
long modalStyle = modal ? wxDIALOG_MODAL : wxDIALOG_MODELESS ;
|
||||||
|
Create(parent, -1, title, wxPoint(x, y), wxSize(width, height),
|
||||||
|
style | modalStyle, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constructor with no modal flag - the new convention.
|
||||||
|
wxDialog(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxString& title,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
long style = wxDEFAULT_DIALOG_STYLE,
|
||||||
|
const wxString& name = wxDialogNameStr)
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
Create(parent, winid, title, pos, size, style, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Create(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxString& title,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
long style = wxDEFAULT_DIALOG_STYLE,
|
||||||
|
const wxString& name = wxDialogNameStr);
|
||||||
|
|
||||||
|
~wxDialog();
|
||||||
|
protected:
|
||||||
|
void Init();
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Cocoa specifics
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
protected:
|
||||||
|
virtual void Cocoa_close(void);
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Implementation
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
bool Show(bool show);
|
||||||
|
|
||||||
|
void SetModal(bool flag);
|
||||||
|
virtual bool IsModal() const;
|
||||||
|
|
||||||
|
// For now, same as Show(TRUE) but returns return code
|
||||||
|
virtual int ShowModal();
|
||||||
|
|
||||||
|
// may be called to terminate the dialog with the given return code
|
||||||
|
virtual void EndModal(int retCode);
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Event handlers
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
protected:
|
||||||
|
void OnCloseWindow(wxCloseEvent& event);
|
||||||
|
// Standard buttons
|
||||||
|
void OnOK(wxCommandEvent& event);
|
||||||
|
void OnApply(wxCommandEvent& event);
|
||||||
|
void OnCancel(wxCommandEvent& event);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _WX_COCOA_DIALOG_H_
|
73
include/wx/cocoa/frame.h
Normal file
73
include/wx/cocoa/frame.h
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/frame.h
|
||||||
|
// Purpose: wxFrame class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/03/16
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef _WX_COCOA_FRAME_H_
|
||||||
|
#define _WX_COCOA_FRAME_H_
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxMenuBar;
|
||||||
|
class WXDLLEXPORT wxMenuItem;
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxFrame: public wxFrameBase
|
||||||
|
{
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxFrame)
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// initialization
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
wxFrame() { Init(); }
|
||||||
|
wxFrame(wxWindow *parent,
|
||||||
|
wxWindowID winid,
|
||||||
|
const wxString& title,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
long style = wxDEFAULT_FRAME_STYLE,
|
||||||
|
const wxString& name = wxFrameNameStr)
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
Create(parent, winid, title, pos, size, style, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~wxFrame();
|
||||||
|
|
||||||
|
bool Create(wxWindow *parent,
|
||||||
|
wxWindowID winid,
|
||||||
|
const wxString& title,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
long style = wxDEFAULT_FRAME_STYLE,
|
||||||
|
const wxString& name = wxFrameNameStr);
|
||||||
|
protected:
|
||||||
|
void Init();
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Cocoa specifics
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
protected:
|
||||||
|
virtual void Cocoa_wxMenuItemAction(wxMenuItem& item);
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Implementation
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
void AttachMenuBar(wxMenuBar *mbar);
|
||||||
|
void DetachMenuBar();
|
||||||
|
|
||||||
|
// implementation only from now on
|
||||||
|
// -------------------------------
|
||||||
|
|
||||||
|
// override some more virtuals
|
||||||
|
virtual bool Show( bool show = true );
|
||||||
|
|
||||||
|
// get the origin of the client area (which may be different from (0, 0)
|
||||||
|
// if the frame has a toolbar) in client coordinates
|
||||||
|
virtual wxPoint GetClientAreaOrigin() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _WX_COCOA_FRAME_H_
|
88
include/wx/cocoa/listbox.h
Normal file
88
include/wx/cocoa/listbox.h
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/listbox.h
|
||||||
|
// Purpose: wxListBox class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/03/16
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_LISTBOX_H__
|
||||||
|
#define __WX_COCOA_LISTBOX_H__
|
||||||
|
|
||||||
|
//#include "wx/cocoa/NSTableView.h"
|
||||||
|
|
||||||
|
// ========================================================================
|
||||||
|
// wxListBox
|
||||||
|
// ========================================================================
|
||||||
|
class WXDLLEXPORT wxListBox: public wxListBoxBase //, protected wxCocoaNSTableView
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxListBox)
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
WX_DECLARE_COCOA_OWNER(NSTableView,NSControl,NSView)
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// initialization
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
wxListBox() { }
|
||||||
|
wxListBox(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
int n = 0, const wxString choices[] = NULL,
|
||||||
|
long style = 0,
|
||||||
|
const wxValidator& validator = wxDefaultValidator,
|
||||||
|
const wxString& name = wxListBoxNameStr)
|
||||||
|
{
|
||||||
|
Create(parent, winid, pos, size, n, choices, style, validator, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Create(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
int n = 0, const wxString choices[] = NULL,
|
||||||
|
long style = 0,
|
||||||
|
const wxValidator& validator = wxDefaultValidator,
|
||||||
|
const wxString& name = wxListBoxNameStr);
|
||||||
|
virtual ~wxListBox();
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Cocoa callbacks
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
protected:
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Implementation
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
// pure virtuals from wxListBoxBase
|
||||||
|
virtual bool IsSelected(int n) const;
|
||||||
|
virtual void SetSelection(int n, bool select = TRUE);
|
||||||
|
virtual int GetSelections(wxArrayInt& aSelections) const;
|
||||||
|
protected:
|
||||||
|
virtual void DoInsertItems(const wxArrayString& items, int pos);
|
||||||
|
virtual void DoSetItems(const wxArrayString& items, void **clientData);
|
||||||
|
virtual void DoSetFirstItem(int n);
|
||||||
|
|
||||||
|
// pure virtuals from wxItemContainer
|
||||||
|
public:
|
||||||
|
// deleting items
|
||||||
|
virtual void Clear();
|
||||||
|
virtual void Delete(int n);
|
||||||
|
// accessing strings
|
||||||
|
virtual int GetCount() const;
|
||||||
|
virtual wxString GetString(int n) const;
|
||||||
|
virtual void SetString(int n, const wxString& s);
|
||||||
|
virtual int FindString(const wxString& s) const;
|
||||||
|
// selection
|
||||||
|
virtual void Select(int n);
|
||||||
|
virtual int GetSelection() const;
|
||||||
|
protected:
|
||||||
|
virtual int DoAppend(const wxString& item);
|
||||||
|
virtual void DoSetItemClientData(int n, void* clientData);
|
||||||
|
virtual void* DoGetItemClientData(int n) const;
|
||||||
|
virtual void DoSetItemClientObject(int n, wxClientData* clientData);
|
||||||
|
virtual wxClientData* DoGetItemClientObject(int n) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __WX_COCOA_LISTBOX_H__
|
161
include/wx/cocoa/menu.h
Normal file
161
include/wx/cocoa/menu.h
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/menu.h
|
||||||
|
// Purpose: wxMenu and wxMenuBar classes
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/09
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_MENU_H__
|
||||||
|
#define __WX_COCOA_MENU_H__
|
||||||
|
|
||||||
|
#include "wx/cocoa/NSMenu.h"
|
||||||
|
|
||||||
|
#if wxUSE_ACCEL
|
||||||
|
#include "wx/accel.h"
|
||||||
|
#endif // wxUSE_ACCEL
|
||||||
|
|
||||||
|
// ========================================================================
|
||||||
|
// wxMenu
|
||||||
|
// ========================================================================
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxMenu : public wxMenuBase, public wxCocoaNSMenu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// ctors and dtor
|
||||||
|
wxMenu(const wxString& title, long style = 0)
|
||||||
|
: wxMenuBase(title, style) { Create(title,style); }
|
||||||
|
bool Create(const wxString& title, long style = 0);
|
||||||
|
|
||||||
|
wxMenu(long style = 0) : wxMenuBase(style) { Create(wxEmptyString, style); }
|
||||||
|
|
||||||
|
virtual ~wxMenu();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// implement base class virtuals
|
||||||
|
virtual bool DoAppend(wxMenuItem *item);
|
||||||
|
virtual bool DoInsert(size_t pos, wxMenuItem *item);
|
||||||
|
virtual wxMenuItem *DoRemove(wxMenuItem *item);
|
||||||
|
|
||||||
|
#if wxUSE_ACCEL
|
||||||
|
// add/remove accel for the given menu item
|
||||||
|
void AddAccelFor(wxMenuItem *item);
|
||||||
|
void RemoveAccelFor(wxMenuItem *item);
|
||||||
|
#endif // wxUSE_ACCEL
|
||||||
|
|
||||||
|
private:
|
||||||
|
#if wxUSE_ACCEL
|
||||||
|
// the accel table for this menu
|
||||||
|
wxAcceleratorTable m_accelTable;
|
||||||
|
#endif // wxUSE_ACCEL
|
||||||
|
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxMenu)
|
||||||
|
};
|
||||||
|
|
||||||
|
// ========================================================================
|
||||||
|
// wxMenuBar
|
||||||
|
// ========================================================================
|
||||||
|
class WXDLLEXPORT wxMenuBar : public wxMenuBarBase, public wxCocoaNSMenu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// ctors and dtor
|
||||||
|
wxMenuBar(long style = 0) { Create(style); }
|
||||||
|
bool Create(long style = 0);
|
||||||
|
virtual ~wxMenuBar();
|
||||||
|
|
||||||
|
wxMenuItemList m_items; // the list of menu items
|
||||||
|
|
||||||
|
// implement base class virtuals
|
||||||
|
virtual bool Append(wxMenu *menu, const wxString &title);
|
||||||
|
virtual bool Insert(size_t pos, wxMenu *menu, const wxString& title);
|
||||||
|
virtual wxMenu *Replace(size_t pos, wxMenu *menu, const wxString& title);
|
||||||
|
virtual wxMenu *Remove(size_t pos);
|
||||||
|
|
||||||
|
virtual void EnableTop(size_t pos, bool enable);
|
||||||
|
virtual bool IsEnabledTop(size_t pos) const;
|
||||||
|
|
||||||
|
virtual void SetLabelTop(size_t pos, const wxString& label);
|
||||||
|
virtual wxString GetLabelTop(size_t pos) const;
|
||||||
|
|
||||||
|
virtual void Attach(wxFrame *frame);
|
||||||
|
virtual void Detach();
|
||||||
|
|
||||||
|
// get the next item for the givan accel letter (used by wxFrame), return
|
||||||
|
// -1 if none
|
||||||
|
//
|
||||||
|
// if unique is not NULL, filled with TRUE if there is only one item with
|
||||||
|
// this accel, FALSE if two or more
|
||||||
|
int FindNextItemForAccel(int idxStart,
|
||||||
|
int keycode,
|
||||||
|
bool *unique = NULL) const;
|
||||||
|
|
||||||
|
// called by wxFrame to set focus to or open the given menu
|
||||||
|
void SelectMenu(size_t pos);
|
||||||
|
|
||||||
|
#if wxUSE_ACCEL
|
||||||
|
// find the item for the given accel and generate an event if found
|
||||||
|
bool ProcessAccelEvent(const wxKeyEvent& event);
|
||||||
|
#endif // wxUSE_ACCEL
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// event handlers
|
||||||
|
void OnLeftDown(wxMouseEvent& event);
|
||||||
|
void OnMouseMove(wxMouseEvent& event);
|
||||||
|
void OnKeyDown(wxKeyEvent& event);
|
||||||
|
void OnKillFocus(wxFocusEvent& event);
|
||||||
|
|
||||||
|
// process the mouse move event, return TRUE if we did, FALSE to continue
|
||||||
|
// processing as usual
|
||||||
|
//
|
||||||
|
// the coordinates are client coordinates of menubar, convert if necessary
|
||||||
|
bool ProcessMouseEvent(const wxPoint& pt);
|
||||||
|
|
||||||
|
// menubar geometry
|
||||||
|
virtual wxSize DoGetBestClientSize() const;
|
||||||
|
|
||||||
|
// has the menubar been created already?
|
||||||
|
bool IsCreated() const { return m_frameLast != NULL; }
|
||||||
|
|
||||||
|
// get the (total) width of the specified menu
|
||||||
|
wxCoord GetItemWidth(size_t pos) const;
|
||||||
|
|
||||||
|
// get the rect of the item
|
||||||
|
wxRect GetItemRect(size_t pos) const;
|
||||||
|
|
||||||
|
// get the menu from the given point or -1 if none
|
||||||
|
int GetMenuFromPoint(const wxPoint& pos) const;
|
||||||
|
|
||||||
|
// refresh the given item
|
||||||
|
void RefreshItem(size_t pos);
|
||||||
|
|
||||||
|
// refresh all items after this one (including it)
|
||||||
|
void RefreshAllItemsAfter(size_t pos);
|
||||||
|
|
||||||
|
// do we show a menu currently?
|
||||||
|
bool IsShowingMenu() const { return m_menuShown != 0; }
|
||||||
|
|
||||||
|
// we don't want to have focus except while selecting from menu
|
||||||
|
void GiveAwayFocus();
|
||||||
|
|
||||||
|
// the current item (only used when menubar has focus)
|
||||||
|
int m_current;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// the last frame to which we were attached, NULL initially
|
||||||
|
wxFrame *m_frameLast;
|
||||||
|
|
||||||
|
// the currently shown menu or NULL
|
||||||
|
wxMenu *m_menuShown;
|
||||||
|
|
||||||
|
// should be showing the menu? this is subtly different from m_menuShown !=
|
||||||
|
// NULL as the menu which should be shown may be disabled in which case we
|
||||||
|
// don't show it - but will do as soon as the focus shifts to another menu
|
||||||
|
bool m_shouldShowMenu;
|
||||||
|
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxMenuBar)
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _WX_COCOA_MENU_H_
|
94
include/wx/cocoa/menuitem.h
Normal file
94
include/wx/cocoa/menuitem.h
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/menuitem.h
|
||||||
|
// Purpose: wxMenuItem class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/13
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef _WX_COCOA_MENUITEM_H_
|
||||||
|
#define _WX_COCOA_MENUITEM_H_
|
||||||
|
|
||||||
|
#include "wx/hashmap.h"
|
||||||
|
#include "wx/bitmap.h"
|
||||||
|
|
||||||
|
// ========================================================================
|
||||||
|
// wxMenuItem
|
||||||
|
// ========================================================================
|
||||||
|
|
||||||
|
#define wxMenuItemCocoa wxMenuItem
|
||||||
|
class wxMenuItemCocoa;
|
||||||
|
WX_DECLARE_HASH_MAP(WX_NSMenuItem,wxMenuItem*,wxPointerHash,wxPointerEqual,wxMenuItemCocoaHash);
|
||||||
|
|
||||||
|
class WXDLLEXPORT wxMenuItemCocoa : public wxMenuItemBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// initialization
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
wxMenuItemCocoa(wxMenu *parentMenu = (wxMenu *)NULL,
|
||||||
|
int id = wxID_SEPARATOR,
|
||||||
|
const wxString& name = wxEmptyString,
|
||||||
|
const wxString& help = wxEmptyString,
|
||||||
|
wxItemKind kind = wxITEM_NORMAL,
|
||||||
|
wxMenu *subMenu = (wxMenu *)NULL);
|
||||||
|
virtual ~wxMenuItemCocoa();
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Cocoa specifics
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
inline WX_NSMenuItem GetNSMenuItem() { return m_cocoaNSMenuItem; }
|
||||||
|
static inline wxMenuItem* GetFromCocoa(WX_NSMenuItem cocoaNSMenuItem)
|
||||||
|
{
|
||||||
|
wxMenuItemCocoaHash::iterator iter=sm_cocoaHash.find(cocoaNSMenuItem);
|
||||||
|
if(iter!=sm_cocoaHash.end())
|
||||||
|
return iter->second;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
WX_NSMenuItem m_cocoaNSMenuItem;
|
||||||
|
static wxMenuItemCocoaHash sm_cocoaHash;
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Implementation
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
// override base class virtuals to update the item appearance on screen
|
||||||
|
virtual void SetText(const wxString& text);
|
||||||
|
virtual void SetCheckable(bool checkable);
|
||||||
|
|
||||||
|
virtual void Enable(bool enable = TRUE);
|
||||||
|
virtual void Check(bool check = TRUE);
|
||||||
|
|
||||||
|
// we add some extra functions which are also available under MSW from
|
||||||
|
// wxOwnerDrawn class - they will be moved to wxMenuItemBase later
|
||||||
|
// hopefully
|
||||||
|
void SetBitmaps(const wxBitmap& bmpChecked,
|
||||||
|
const wxBitmap& bmpUnchecked = wxNullBitmap);
|
||||||
|
void SetBitmap(const wxBitmap& bmp) { SetBitmaps(bmp); }
|
||||||
|
const wxBitmap& GetBitmap(bool checked = TRUE) const
|
||||||
|
{ return checked ? m_bmpChecked : m_bmpUnchecked; }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// notify the menu about the change in this item
|
||||||
|
inline void NotifyMenu();
|
||||||
|
|
||||||
|
// set the accel index and string from text
|
||||||
|
void UpdateAccelInfo();
|
||||||
|
|
||||||
|
// the bitmaps (may be invalid, then they're not used)
|
||||||
|
wxBitmap m_bmpChecked,
|
||||||
|
m_bmpUnchecked;
|
||||||
|
|
||||||
|
// the accel string (i.e. "Ctrl-Q" or "Alt-F1")
|
||||||
|
wxString m_strAccel;
|
||||||
|
|
||||||
|
private:
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxMenuItem)
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _WX_COCOA_MENUITEM_H_
|
||||||
|
|
58
include/wx/cocoa/stattext.h
Normal file
58
include/wx/cocoa/stattext.h
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/stattext.h
|
||||||
|
// Purpose: wxStaticText class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/02/15
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_STATTEXT_H__
|
||||||
|
#define __WX_COCOA_STATTEXT_H__
|
||||||
|
|
||||||
|
#include "wx/cocoa/NSTextField.h"
|
||||||
|
|
||||||
|
// ========================================================================
|
||||||
|
// wxStaticText
|
||||||
|
// ========================================================================
|
||||||
|
class WXDLLEXPORT wxStaticText : public wxStaticTextBase, protected wxCocoaNSTextField
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxStaticText)
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
WX_DECLARE_COCOA_OWNER(NSTextField,NSControl,NSView)
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// initialization
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
wxStaticText() {}
|
||||||
|
wxStaticText(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxString& label,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize, long style = 0,
|
||||||
|
const wxString& name = wxStaticTextNameStr)
|
||||||
|
{
|
||||||
|
Create(parent, winid, label, pos, size, style, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Create(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxString& label,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize, long style = 0,
|
||||||
|
const wxString& name = wxStaticTextNameStr);
|
||||||
|
virtual ~wxStaticText();
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Cocoa specifics
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
protected:
|
||||||
|
virtual void Cocoa_didChangeText(void);
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Implementation
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
void SetLabel(const wxString& label);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __WX_COCOA_STATTEXT_H__
|
118
include/wx/cocoa/textctrl.h
Normal file
118
include/wx/cocoa/textctrl.h
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/textctrl.h
|
||||||
|
// Purpose: wxTextCtrl class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/03/16
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_TEXTCTRL_H__
|
||||||
|
#define __WX_COCOA_TEXTCTRL_H__
|
||||||
|
|
||||||
|
#include "wx/cocoa/NSTextField.h"
|
||||||
|
|
||||||
|
// ========================================================================
|
||||||
|
// wxTextCtrl
|
||||||
|
// ========================================================================
|
||||||
|
class WXDLLEXPORT wxTextCtrl : public wxTextCtrlBase, protected wxCocoaNSTextField
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxTextCtrl)
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
WX_DECLARE_COCOA_OWNER(NSTextField,NSControl,NSView)
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// initialization
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
wxTextCtrl() {}
|
||||||
|
wxTextCtrl(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxString& value = wxEmptyString,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize, long style = 0,
|
||||||
|
const wxValidator& validator = wxDefaultValidator,
|
||||||
|
const wxString& name = wxTextCtrlNameStr)
|
||||||
|
{
|
||||||
|
Create(parent, winid, value, pos, size, style, validator, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Create(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxString& value = wxEmptyString,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize, long style = 0,
|
||||||
|
const wxValidator& validator = wxDefaultValidator,
|
||||||
|
const wxString& name = wxTextCtrlNameStr);
|
||||||
|
virtual ~wxTextCtrl();
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Cocoa specifics
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
protected:
|
||||||
|
virtual void Cocoa_didChangeText(void);
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Implementation
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
virtual wxString GetValue() const;
|
||||||
|
virtual void SetValue(const wxString& value);
|
||||||
|
|
||||||
|
virtual int GetLineLength(long lineNo) const;
|
||||||
|
virtual wxString GetLineText(long lineNo) const;
|
||||||
|
virtual int GetNumberOfLines() const;
|
||||||
|
|
||||||
|
virtual bool IsModified() const;
|
||||||
|
virtual bool IsEditable() const;
|
||||||
|
|
||||||
|
// If the return values from and to are the same, there is no selection.
|
||||||
|
virtual void GetSelection(long* from, long* to) const;
|
||||||
|
|
||||||
|
// operations
|
||||||
|
// ----------
|
||||||
|
|
||||||
|
// editing
|
||||||
|
virtual void Clear();
|
||||||
|
virtual void Replace(long from, long to, const wxString& value);
|
||||||
|
virtual void Remove(long from, long to);
|
||||||
|
|
||||||
|
// clears the dirty flag
|
||||||
|
virtual void DiscardEdits();
|
||||||
|
|
||||||
|
// writing text inserts it at the current position, appending always
|
||||||
|
// inserts it at the end
|
||||||
|
virtual void WriteText(const wxString& text);
|
||||||
|
virtual void AppendText(const wxString& text);
|
||||||
|
|
||||||
|
// translate between the position (which is just an index in the text ctrl
|
||||||
|
// considering all its contents as a single strings) and (x, y) coordinates
|
||||||
|
// which represent column and line.
|
||||||
|
virtual long XYToPosition(long x, long y) const;
|
||||||
|
virtual bool PositionToXY(long pos, long *x, long *y) const;
|
||||||
|
|
||||||
|
virtual void ShowPosition(long pos);
|
||||||
|
|
||||||
|
// Clipboard operations
|
||||||
|
virtual void Copy();
|
||||||
|
virtual void Cut();
|
||||||
|
virtual void Paste();
|
||||||
|
|
||||||
|
// Undo/redo
|
||||||
|
virtual void Undo();
|
||||||
|
virtual void Redo();
|
||||||
|
|
||||||
|
virtual bool CanUndo() const;
|
||||||
|
virtual bool CanRedo() const;
|
||||||
|
|
||||||
|
// Insertion point
|
||||||
|
virtual void SetInsertionPoint(long pos);
|
||||||
|
virtual void SetInsertionPointEnd();
|
||||||
|
virtual long GetInsertionPoint() const;
|
||||||
|
virtual long GetLastPosition() const;
|
||||||
|
|
||||||
|
virtual void SetSelection(long from, long to);
|
||||||
|
// virtual void SelectAll();
|
||||||
|
virtual void SetEditable(bool editable);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __WX_COCOA_TEXTCTRL_H__
|
111
include/wx/cocoa/toplevel.h
Normal file
111
include/wx/cocoa/toplevel.h
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/toplevel.h
|
||||||
|
// Purpose: wxTopLevelWindowCocoa is the Cocoa implementation of wxTLW
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/08
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_TOPLEVEL_H__
|
||||||
|
#define __WX_COCOA_TOPLEVEL_H__
|
||||||
|
|
||||||
|
#include "wx/hashmap.h"
|
||||||
|
#include "wx/cocoa/NSWindow.h"
|
||||||
|
|
||||||
|
// ========================================================================
|
||||||
|
// wxTopLevelWindowCocoa
|
||||||
|
// ========================================================================
|
||||||
|
class WXDLLEXPORT wxTopLevelWindowCocoa : public wxTopLevelWindowBase, protected wxCocoaNSWindow
|
||||||
|
{
|
||||||
|
DECLARE_CLASS(wxTopLevelWindowCocoa);
|
||||||
|
DECLARE_EVENT_TABLE();
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// initialization
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
inline wxTopLevelWindowCocoa() { Init(); }
|
||||||
|
|
||||||
|
inline wxTopLevelWindowCocoa(wxWindow *parent,
|
||||||
|
wxWindowID winid,
|
||||||
|
const wxString& title,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
long style = wxDEFAULT_FRAME_STYLE,
|
||||||
|
const wxString& name = wxFrameNameStr)
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
Create(parent, winid, title, pos, size, style, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Create(wxWindow *parent,
|
||||||
|
wxWindowID winid,
|
||||||
|
const wxString& title,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
long style = wxDEFAULT_FRAME_STYLE,
|
||||||
|
const wxString& name = wxFrameNameStr);
|
||||||
|
|
||||||
|
virtual ~wxTopLevelWindowCocoa();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// common part of all ctors
|
||||||
|
void Init();
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Cocoa specifics
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
inline WX_NSWindow GetNSWindow() { return m_cocoaNSWindow; }
|
||||||
|
virtual void Cocoa_close(void);
|
||||||
|
virtual bool Cocoa_windowShouldClose(void);
|
||||||
|
virtual void Cocoa_wxMenuItemAction(wxMenuItem& item);
|
||||||
|
protected:
|
||||||
|
void SetNSWindow(WX_NSWindow cocoaNSWindow);
|
||||||
|
WX_NSWindow m_cocoaNSWindow;
|
||||||
|
static wxCocoaNSWindowHash sm_cocoaHash;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Implementation
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
// Pure virtuals
|
||||||
|
virtual void Maximize(bool maximize = true);
|
||||||
|
virtual bool IsMaximized() const;
|
||||||
|
virtual void Iconize(bool iconize = true);
|
||||||
|
virtual bool IsIconized() const;
|
||||||
|
virtual void Restore();
|
||||||
|
virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL);
|
||||||
|
virtual bool IsFullScreen() const;
|
||||||
|
// other
|
||||||
|
virtual bool Show( bool show = true );
|
||||||
|
virtual bool Close( bool force = false );
|
||||||
|
virtual void OnCloseWindow(wxCloseEvent& event);
|
||||||
|
virtual void DoMoveWindow(int x, int y, int width, int height);
|
||||||
|
virtual void DoGetSize(int *width, int *height) const;
|
||||||
|
virtual void DoGetPosition(int *x, int *y) const;
|
||||||
|
|
||||||
|
|
||||||
|
// Things I may/may not do
|
||||||
|
// virtual void SetIcon(const wxIcon& icon);
|
||||||
|
// virtual void SetIcons(const wxIconBundle& icons) { SetIcon( icons.GetIcon( -1 ) ); }
|
||||||
|
// virtual void Clear() ;
|
||||||
|
// virtual void Raise();
|
||||||
|
// virtual void Lower();
|
||||||
|
// virtual void SetTitle( const wxString& title);
|
||||||
|
protected:
|
||||||
|
// is the frame currently iconized?
|
||||||
|
bool m_iconized;
|
||||||
|
// has the frame been closed
|
||||||
|
bool m_closed;
|
||||||
|
// should the frame be maximized when it will be shown? set by Maximize()
|
||||||
|
// when it is called while the frame is hidden
|
||||||
|
bool m_maximizeOnShow;
|
||||||
|
};
|
||||||
|
|
||||||
|
// list of all frames and modeless dialogs
|
||||||
|
extern WXDLLEXPORT_DATA(wxWindowList) wxModelessWindows;
|
||||||
|
|
||||||
|
#endif // __WX_COCOA_TOPLEVEL_H__
|
125
include/wx/cocoa/window.h
Normal file
125
include/wx/cocoa/window.h
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: wx/cocoa/window.h
|
||||||
|
// Purpose: wxWindowCocoa
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/26
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef __WX_COCOA_WINDOW_H__
|
||||||
|
#define __WX_COCOA_WINDOW_H__
|
||||||
|
|
||||||
|
#include "wx/cocoa/NSView.h"
|
||||||
|
|
||||||
|
// ========================================================================
|
||||||
|
// wxWindowCocoa
|
||||||
|
// ========================================================================
|
||||||
|
class WXDLLEXPORT wxWindowCocoa: public wxWindowBase, protected wxCocoaNSView
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxWindowCocoa)
|
||||||
|
DECLARE_NO_COPY_CLASS(wxWindowCocoa)
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// initialization
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
wxWindowCocoa() { Init(); }
|
||||||
|
inline wxWindowCocoa(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
long style = 0,
|
||||||
|
const wxString& name = wxPanelNameStr)
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
Create(parent, winid, pos, size, style, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~wxWindowCocoa();
|
||||||
|
|
||||||
|
bool Create(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
|
const wxSize& size = wxDefaultSize,
|
||||||
|
long style = 0,
|
||||||
|
const wxString& name = wxPanelNameStr);
|
||||||
|
protected:
|
||||||
|
void Init();
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Cocoa specifics
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
inline WX_NSView GetNSView() { return m_cocoaNSView; }
|
||||||
|
void CocoaAddChild(wxWindowCocoa *child);
|
||||||
|
void CocoaRemoveFromParent(void);
|
||||||
|
virtual void Cocoa_FrameChanged(void);
|
||||||
|
protected:
|
||||||
|
void SetNSView(WX_NSView cocoaNSView);
|
||||||
|
WX_NSView m_cocoaNSView;
|
||||||
|
WX_NSView m_dummyNSView;
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
// Implementation
|
||||||
|
// ------------------------------------------------------------------------
|
||||||
|
public:
|
||||||
|
/* Pure Virtuals */
|
||||||
|
// Raise the window to the top of the Z order
|
||||||
|
virtual void Raise();
|
||||||
|
// Lower the window to the bottom of the Z order
|
||||||
|
virtual void Lower();
|
||||||
|
// Set the focus to this window
|
||||||
|
virtual void SetFocus();
|
||||||
|
// Warp the pointer the given position
|
||||||
|
virtual void WarpPointer(int x_pos, int y_pos) ;
|
||||||
|
// Send the window a refresh event
|
||||||
|
virtual void Refresh(bool eraseBack = TRUE, const wxRect *rect = NULL);
|
||||||
|
// Clear the window
|
||||||
|
virtual void Clear();
|
||||||
|
// Set/get the window's font
|
||||||
|
virtual bool SetFont(const wxFont& f);
|
||||||
|
// inline virtual wxFont& GetFont() const;
|
||||||
|
// Get character size
|
||||||
|
virtual int GetCharHeight() const;
|
||||||
|
virtual int GetCharWidth() const;
|
||||||
|
virtual void GetTextExtent(const wxString& string, int *x, int *y,
|
||||||
|
int *descent = NULL,
|
||||||
|
int *externalLeading = NULL,
|
||||||
|
const wxFont *theFont = NULL) const;
|
||||||
|
// Scroll stuff
|
||||||
|
virtual void SetScrollbar(int orient, int pos, int thumbVisible,
|
||||||
|
int range, bool refresh = TRUE);
|
||||||
|
virtual void SetScrollPos(int orient, int pos, bool refresh = TRUE);
|
||||||
|
virtual int GetScrollPos(int orient) const;
|
||||||
|
virtual int GetScrollThumb(int orient) const;
|
||||||
|
virtual int GetScrollRange(int orient) const;
|
||||||
|
virtual void ScrollWindow(int dx, int dy, const wxRect *rect = NULL);
|
||||||
|
// Get the private handle (platform-dependent)
|
||||||
|
virtual WXWidget GetHandle() const;
|
||||||
|
// Convert client to screen coordinates
|
||||||
|
virtual void DoClientToScreen(int *x, int *y) const;
|
||||||
|
// Convert screen to client coordinates
|
||||||
|
virtual void DoScreenToClient(int *x, int *y) const;
|
||||||
|
// Capture/release mouse
|
||||||
|
virtual void DoCaptureMouse();
|
||||||
|
virtual void DoReleaseMouse();
|
||||||
|
// Get window position, relative to parent (or screen if no parent)
|
||||||
|
virtual void DoGetPosition(int *x, int *y) const;
|
||||||
|
// Get overall window size
|
||||||
|
virtual void DoGetSize(int *width, int *height) const;
|
||||||
|
// Get/set client (application-useable) size
|
||||||
|
virtual void DoGetClientSize(int *width, int *height) const;
|
||||||
|
virtual void DoSetClientSize(int width, int size);
|
||||||
|
// Set overall size and position
|
||||||
|
virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO);
|
||||||
|
virtual void DoMoveWindow(int x, int y, int width, int height);
|
||||||
|
// Popup a menu
|
||||||
|
virtual bool DoPopupMenu(wxMenu *menu, int x, int y);
|
||||||
|
|
||||||
|
/* Other implementation */
|
||||||
|
|
||||||
|
// NOTE: typically Close() is not virtual, but we want this for Cocoa
|
||||||
|
virtual bool Close( bool force = false );
|
||||||
|
virtual bool Show( bool show = true );
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // __WX_COCOA_WINDOW_H__
|
62
src/cocoa/NSButton.mm
Normal file
62
src/cocoa/NSButton.mm
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/NSButton.cpp
|
||||||
|
// Purpose: wxCocoaNSButton
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/01/31
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/log.h"
|
||||||
|
#endif // WX_PRECOMP
|
||||||
|
|
||||||
|
#include "wx/cocoa/NSButton.h"
|
||||||
|
#import <AppKit/NSButton.h>
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// globals
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSButton)
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// @class wxPoserNSButton
|
||||||
|
// ============================================================================
|
||||||
|
@interface wxPoserNSButton : NSButton
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)wxNSButtonAction: (id)sender;
|
||||||
|
@end // wxPoserNSButton
|
||||||
|
|
||||||
|
WX_IMPLEMENT_POSER(wxPoserNSButton);
|
||||||
|
|
||||||
|
@implementation wxPoserNSButton : NSButton
|
||||||
|
- (void)wxNSButtonAction: (id)sender
|
||||||
|
{
|
||||||
|
wxASSERT_MSG(self==sender,"Received wxNSButtonAction from another object");
|
||||||
|
wxCocoaNSButton *button = wxCocoaNSButton::GetFromCocoa(self);
|
||||||
|
wxCHECK_RET(button,"wxNSButtonAction received without associated wx object");
|
||||||
|
button->Cocoa_wxNSButtonAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
@end // implementation wxPoserNSButton
|
||||||
|
|
||||||
|
void wxCocoaNSButton::AssociateNSButton(WX_NSButton cocoaNSButton)
|
||||||
|
{
|
||||||
|
sm_cocoaHash.insert(wxCocoaNSButtonHash::value_type(cocoaNSButton,this));
|
||||||
|
[cocoaNSButton setTarget: cocoaNSButton];
|
||||||
|
[cocoaNSButton setAction: @selector(wxNSButtonAction:)];
|
||||||
|
}
|
||||||
|
|
30
src/cocoa/NSControl.mm
Normal file
30
src/cocoa/NSControl.mm
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/NSControl.cpp
|
||||||
|
// Purpose: wxCocoaNSControl
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/02/15
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#endif // WX_PRECOMP
|
||||||
|
|
||||||
|
#include "wx/cocoa/NSControl.h"
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// globals
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
WX_IMPLEMENT_OBJC_INTERFACE(NSControl)
|
||||||
|
|
66
src/cocoa/NSMenu.mm
Normal file
66
src/cocoa/NSMenu.mm
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/NSMenu.mm
|
||||||
|
// Purpose: wxCocoaNSMenu implementation
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/09
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/log.h"
|
||||||
|
#endif // WX_PRECOMP
|
||||||
|
|
||||||
|
#include "wx/cocoa/NSMenu.h"
|
||||||
|
#include "wx/cocoa/ObjcPose.h"
|
||||||
|
|
||||||
|
#import <Foundation/NSString.h>
|
||||||
|
#import <AppKit/NSMenu.h>
|
||||||
|
|
||||||
|
#if wxUSE_MENUS
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// globals
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// @class wxPoserNSMenu
|
||||||
|
// ============================================================================
|
||||||
|
@interface wxPoserNSMenu : NSMenu
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@end // wxPoserNSMenu
|
||||||
|
|
||||||
|
WX_IMPLEMENT_POSER(wxPoserNSMenu);
|
||||||
|
@implementation wxPoserNSMenu : NSMenu
|
||||||
|
|
||||||
|
@end // wxPoserNSMenu
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// wxCocoaNSMenu implementation
|
||||||
|
// ============================================================================
|
||||||
|
bool wxCocoaNSMenu::CocoaCreate(const wxString &title)
|
||||||
|
{
|
||||||
|
wxLogDebug("CocoaCreate: "+title);
|
||||||
|
m_cocoaNSMenu = [[NSMenu alloc] initWithTitle: [NSString stringWithCString: title.c_str()]];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxCocoaNSMenu::~wxCocoaNSMenu()
|
||||||
|
{
|
||||||
|
[m_cocoaNSMenu release];
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // wxUSE_MENUS
|
27
src/cocoa/NSTextField.mm
Normal file
27
src/cocoa/NSTextField.mm
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/NSTextField.mm
|
||||||
|
// Purpose: wxCocoaNSTextField
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/01/31
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#endif // WX_PRECOMP
|
||||||
|
|
||||||
|
#include "wx/cocoa/NSTextField.h"
|
||||||
|
|
||||||
|
WX_IMPLEMENT_OBJC_INTERFACE(NSTextField)
|
||||||
|
|
86
src/cocoa/NSView.mm
Normal file
86
src/cocoa/NSView.mm
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/NSView.mm
|
||||||
|
// Purpose: wxCocoaNSView
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/02/15
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/window.h"
|
||||||
|
#endif // WX_PRECOMP
|
||||||
|
|
||||||
|
#include "wx/cocoa/NSView.h"
|
||||||
|
|
||||||
|
#import <Appkit/NSView.h>
|
||||||
|
#import <Foundation/NSNotification.h>
|
||||||
|
#import <Foundation/NSString.h>
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// globals
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSView)
|
||||||
|
|
||||||
|
void wxCocoaNSView::AssociateNSView(WX_NSView cocoaNSView)
|
||||||
|
{
|
||||||
|
sm_cocoaHash.insert(wxCocoaNSViewHash::value_type(cocoaNSView,this));
|
||||||
|
[[NSNotificationCenter defaultCenter] addObserver:(id)sm_cocoaObserver selector:@selector(notificationFrameChanged:) name:@"NSViewFrameDidChangeNotification" object:cocoaNSView];
|
||||||
|
[cocoaNSView setPostsFrameChangedNotifications: YES];
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxCocoaNSView::DisassociateNSView(WX_NSView cocoaNSView)
|
||||||
|
{
|
||||||
|
sm_cocoaHash.erase(cocoaNSView);
|
||||||
|
[[NSNotificationCenter defaultCenter] removeObserver:(id)sm_cocoaObserver name:@"NSViewFrameDidChangeNotification" object:cocoaNSView];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// @class wxPoserNSView
|
||||||
|
// ============================================================================
|
||||||
|
@interface wxPoserNSView : NSView
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@end // wxPoserNSView
|
||||||
|
|
||||||
|
WX_IMPLEMENT_POSER(wxPoserNSView);
|
||||||
|
@implementation wxPoserNSView : NSView
|
||||||
|
|
||||||
|
@end // implementation wxPoserNSView
|
||||||
|
|
||||||
|
@interface wxNSViewNotificationObserver : NSObject
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME: Initializing like this is a really bad idea. If for some reason
|
||||||
|
// we ever require posing as an NSObject we won't be able to since an instance
|
||||||
|
// will have already been created here. Of course, catching messages for
|
||||||
|
// NSObject seems like a LOT of overkill, so I doubt we ever will anyway!
|
||||||
|
void *wxCocoaNSView::sm_cocoaObserver = [[wxNSViewNotificationObserver alloc] init];
|
||||||
|
|
||||||
|
- (void)notificationFrameChanged: (NSNotification *)notification;
|
||||||
|
@end // interface wxNSViewNotificationObserver
|
||||||
|
|
||||||
|
@implementation wxNSViewNotificationObserver : NSObject
|
||||||
|
|
||||||
|
- (void)notificationFrameChanged: (NSNotification *)notification;
|
||||||
|
{
|
||||||
|
wxCocoaNSView *win = wxCocoaNSView::GetFromCocoa([notification object]);
|
||||||
|
wxCHECK_RET(win,"notificationFrameChanged received but no wxWindow exists");
|
||||||
|
win->Cocoa_FrameChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@end // implementation wxNSViewNotificationObserver
|
||||||
|
|
91
src/cocoa/NSWindow.mm
Normal file
91
src/cocoa/NSWindow.mm
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/NSWindow.mm
|
||||||
|
// Purpose: wxCocoaNSWindow
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/03/16
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/log.h"
|
||||||
|
#include "wx/menuitem.h"
|
||||||
|
#endif // WX_PRECOMP
|
||||||
|
|
||||||
|
#include "wx/cocoa/NSWindow.h"
|
||||||
|
|
||||||
|
#import <Appkit/NSWindow.h>
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// globals
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSWindow)
|
||||||
|
|
||||||
|
void wxCocoaNSWindow::AssociateNSWindow(WX_NSWindow cocoaNSWindow)
|
||||||
|
{
|
||||||
|
[cocoaNSWindow setReleasedWhenClosed: NO];
|
||||||
|
sm_cocoaHash.insert(wxCocoaNSWindowHash::value_type(cocoaNSWindow,this));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// @class wxPoserNSWindow
|
||||||
|
// ============================================================================
|
||||||
|
@interface wxPoserNSWindow : NSWindow
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)close;
|
||||||
|
- (BOOL)windowShouldClose: (id)sender;
|
||||||
|
|
||||||
|
- (BOOL)wxMenuItemAction: (id)sender;
|
||||||
|
@end // wxPoserNSwindow
|
||||||
|
|
||||||
|
WX_IMPLEMENT_POSER(wxPoserNSWindow);
|
||||||
|
@implementation wxPoserNSWindow : NSWindow
|
||||||
|
|
||||||
|
- (void)close
|
||||||
|
{
|
||||||
|
wxLogDebug("close");
|
||||||
|
wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(self);
|
||||||
|
if(tlw)
|
||||||
|
tlw->Cocoa_close();
|
||||||
|
[super close];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)windowShouldClose: (id)sender
|
||||||
|
{
|
||||||
|
wxLogDebug("windowShouldClose");
|
||||||
|
wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(sender);
|
||||||
|
if(tlw && !tlw->Cocoa_windowShouldClose())
|
||||||
|
return NO;
|
||||||
|
wxLogDebug("Window will most likely be CLOSED");
|
||||||
|
if([[wxPoserNSWindow superclass] instancesRespondToSelector:@selector(windowShouldClose:)])
|
||||||
|
return [super windowShouldClose: sender];
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)wxMenuItemAction: (id)sender
|
||||||
|
{
|
||||||
|
wxLogDebug("wxMenuItemAction");
|
||||||
|
wxMenuItem *item = wxMenuItem::GetFromCocoa(sender);
|
||||||
|
if(!item)
|
||||||
|
return NO;
|
||||||
|
|
||||||
|
wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(self);
|
||||||
|
wxASSERT(tlw);
|
||||||
|
tlw->Cocoa_wxMenuItemAction(*item);
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
@end // implementation wxPoserNSWindow
|
||||||
|
|
546
src/cocoa/app.mm
Normal file
546
src/cocoa/app.mm
Normal file
@@ -0,0 +1,546 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/app.mm
|
||||||
|
// Purpose: wxApp
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/11/27
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/defs.h"
|
||||||
|
#include "wx/app.h"
|
||||||
|
#include "wx/frame.h"
|
||||||
|
#include "wx/dialog.h"
|
||||||
|
#include "wx/intl.h"
|
||||||
|
#include "wx/log.h"
|
||||||
|
#include "wx/cocoa/ObjcPose.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if wxUSE_WX_RESOURCES
|
||||||
|
# include "wx/resource.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#import <AppKit/NSApplication.h>
|
||||||
|
#import <Foundation/NSRunLoop.h>
|
||||||
|
#import <Foundation/NSArray.h>
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// globals
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxApp *wxTheApp = NULL;
|
||||||
|
wxPoseAsInitializer *wxPoseAsInitializer::sm_first = NULL;
|
||||||
|
|
||||||
|
@interface wxPoserNSApplication : NSApplication
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)doIdle: (id)data;
|
||||||
|
- (void)finishLaunching;
|
||||||
|
- (void)sendEvent: (NSEvent*)anEvent;
|
||||||
|
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication;
|
||||||
|
@end // wxPoserNSApplication
|
||||||
|
|
||||||
|
@implementation wxPoserNSApplication : NSApplication
|
||||||
|
|
||||||
|
- (void)doIdle: (id)data
|
||||||
|
{
|
||||||
|
wxASSERT(wxTheApp);
|
||||||
|
wxLogDebug("doIdle called");
|
||||||
|
NSRunLoop *rl = [NSRunLoop currentRunLoop];
|
||||||
|
// runMode: beforeDate returns YES if something was done
|
||||||
|
while(wxTheApp->ProcessIdle()) // FIXME: AND NO EVENTS ARE PENDING
|
||||||
|
{
|
||||||
|
wxLogDebug("Looping for idle events");
|
||||||
|
#if 1
|
||||||
|
if( [rl runMode:[rl currentMode] beforeDate:[NSDate distantPast]])
|
||||||
|
{
|
||||||
|
wxLogDebug("Found actual work to do");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
wxLogDebug("Idle processing complete, requesting next idle event");
|
||||||
|
// Add ourself back into the run loop (on next event) if necessary
|
||||||
|
wxTheApp->CocoaRequestIdle();
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)finishLaunching
|
||||||
|
{
|
||||||
|
wxLogDebug("finishLaunching");
|
||||||
|
bool initsuccess = wxTheApp->OnInit();
|
||||||
|
if(!initsuccess)
|
||||||
|
[super stop: NULL];
|
||||||
|
|
||||||
|
[super finishLaunching];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)sendEvent: (NSEvent*)anEvent
|
||||||
|
{
|
||||||
|
wxLogDebug("SendEvent");
|
||||||
|
wxTheApp->CocoaInstallRequestedIdleHandler();
|
||||||
|
[super sendEvent: anEvent];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication
|
||||||
|
{
|
||||||
|
BOOL ret = wxTheApp->GetExitOnFrameDelete();
|
||||||
|
wxLogDebug("applicationShouldTermintaeAfterLastWindowClosed=%d",ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end // wxPoserNSApplication
|
||||||
|
WX_IMPLEMENT_POSER(wxPoserNSApplication);
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// functions
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
// wxEntry
|
||||||
|
//----------------------------------------------------------------------
|
||||||
|
|
||||||
|
int WXDLLEXPORT wxEntryStart( int WXUNUSED(argc), char *WXUNUSED(argv)[] )
|
||||||
|
{
|
||||||
|
return wxApp::Initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
int WXDLLEXPORT wxEntryInitGui()
|
||||||
|
{
|
||||||
|
return wxTheApp->OnInitGui();
|
||||||
|
}
|
||||||
|
|
||||||
|
void WXDLLEXPORT wxEntryCleanup()
|
||||||
|
{
|
||||||
|
wxApp::CleanUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxEntry( int argc, char *argv[])
|
||||||
|
{
|
||||||
|
if (!wxEntryStart(argc, argv)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
wxLogDebug("Creating application");
|
||||||
|
// create the application object or ensure that one already exists
|
||||||
|
if (!wxTheApp)
|
||||||
|
{
|
||||||
|
// The app may have declared a global application object, but we recommend
|
||||||
|
// the IMPLEMENT_APP macro is used instead, which sets an initializer
|
||||||
|
// function for delayed, dynamic app object construction.
|
||||||
|
wxCHECK_MSG( wxApp::GetInitializerFunction(), 0,
|
||||||
|
wxT("No initializer - use IMPLEMENT_APP macro.") );
|
||||||
|
|
||||||
|
wxTheApp = (wxApp*) (*wxApp::GetInitializerFunction()) ();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxCHECK_MSG( wxTheApp, 0, wxT("You have to define an instance of wxApp!") );
|
||||||
|
|
||||||
|
// Mac OS X passes a process serial number command line argument when
|
||||||
|
// the application is launched from the Finder. This argument must be
|
||||||
|
// removed from the command line arguments before being handled by the
|
||||||
|
// application (otherwise applications would need to handle it)
|
||||||
|
|
||||||
|
if (argc > 1) {
|
||||||
|
char theArg[6] = "";
|
||||||
|
strncpy(theArg, argv[1], 5);
|
||||||
|
|
||||||
|
if (strcmp(theArg, "-psn_") == 0) {
|
||||||
|
// assume the argument is always the only one and remove it
|
||||||
|
--argc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
wxTheApp->argc = argc;
|
||||||
|
wxTheApp->argv = argv;
|
||||||
|
|
||||||
|
wxLogDebug("initializing gui");
|
||||||
|
// GUI-specific initialization, such as creating an app context.
|
||||||
|
wxEntryInitGui();
|
||||||
|
|
||||||
|
// Here frames insert themselves automatically
|
||||||
|
// into wxTopLevelWindows by getting created
|
||||||
|
// in OnInit().
|
||||||
|
|
||||||
|
int retValue = 0;
|
||||||
|
|
||||||
|
wxLogDebug("Time to run");
|
||||||
|
retValue = wxTheApp->OnRun();
|
||||||
|
|
||||||
|
wxWindow *topWindow = wxTheApp->GetTopWindow();
|
||||||
|
if ( topWindow )
|
||||||
|
{
|
||||||
|
// Forcibly delete the window.
|
||||||
|
if ( topWindow->IsKindOf(CLASSINFO(wxFrame)) ||
|
||||||
|
topWindow->IsKindOf(CLASSINFO(wxDialog)) )
|
||||||
|
{
|
||||||
|
topWindow->Close(TRUE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delete topWindow;
|
||||||
|
wxTheApp->SetTopWindow(NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
wxTheApp->OnExit();
|
||||||
|
|
||||||
|
wxEntryCleanup();
|
||||||
|
|
||||||
|
return retValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// other functions
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
void wxWakeUpIdle()
|
||||||
|
{
|
||||||
|
wxTheApp->CocoaRequestIdle();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxExit()
|
||||||
|
{
|
||||||
|
wxLogError(_("Fatal error: exiting"));
|
||||||
|
|
||||||
|
wxApp::CleanUp();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// wxApp implementation
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxApp Static member initialization
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
wxAppInitializerFunction wxAppBase::m_appInitFn = (wxAppInitializerFunction) NULL;
|
||||||
|
|
||||||
|
#if !USE_SHARED_LIBRARY
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxApp, wxEvtHandler)
|
||||||
|
BEGIN_EVENT_TABLE(wxApp, wxEvtHandler)
|
||||||
|
EVT_IDLE(wxApp::OnIdle)
|
||||||
|
// EVT_END_SESSION(wxApp::OnEndSession)
|
||||||
|
// EVT_QUERY_END_SESSION(wxApp::OnQueryEndSession)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxApp static functions
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
/*static*/ bool wxApp::Initialize()
|
||||||
|
{
|
||||||
|
wxPoseAsInitializer::InitializePosers();
|
||||||
|
wxClassInfo::InitializeClasses();
|
||||||
|
|
||||||
|
#if wxUSE_THREADS
|
||||||
|
wxPendingEventsLocker = new wxCriticalSection;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
wxTheColourDatabase = new wxColourDatabase(wxKEY_STRING);
|
||||||
|
wxTheColourDatabase->Initialize();
|
||||||
|
|
||||||
|
wxInitializeStockLists();
|
||||||
|
wxInitializeStockObjects();
|
||||||
|
|
||||||
|
#if wxUSE_WX_RESOURCES
|
||||||
|
wxInitializeResourceSystem();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
wxBitmap::InitStandardHandlers();
|
||||||
|
|
||||||
|
wxModule::RegisterModules();
|
||||||
|
if (!wxModule::InitializeModules()) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*static*/ void wxApp::CleanUp()
|
||||||
|
{
|
||||||
|
wxModule::CleanUpModules();
|
||||||
|
|
||||||
|
#if wxUSE_WX_RESOURCES
|
||||||
|
wxCleanUpResourceSystem();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
wxDeleteStockObjects() ;
|
||||||
|
|
||||||
|
// Destroy all GDI lists, etc.
|
||||||
|
wxDeleteStockLists();
|
||||||
|
|
||||||
|
delete wxTheColourDatabase;
|
||||||
|
wxTheColourDatabase = NULL;
|
||||||
|
|
||||||
|
wxBitmap::CleanUpHandlers();
|
||||||
|
|
||||||
|
delete wxPendingEvents;
|
||||||
|
|
||||||
|
#if wxUSE_THREADS
|
||||||
|
delete wxPendingEventsLocker;
|
||||||
|
// If we don't do the following, we get an apparent memory leak.
|
||||||
|
((wxEvtHandler&) wxDefaultValidator).ClearEventLocker();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
wxClassInfo::CleanUpClasses();
|
||||||
|
|
||||||
|
delete wxTheApp;
|
||||||
|
wxTheApp = NULL;
|
||||||
|
|
||||||
|
#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
|
||||||
|
// At this point we want to check if there are any memory
|
||||||
|
// blocks that aren't part of the wxDebugContext itself,
|
||||||
|
// as a special case. Then when dumping we need to ignore
|
||||||
|
// wxDebugContext, too.
|
||||||
|
if (wxDebugContext::CountObjectsLeft(TRUE) > 0)
|
||||||
|
{
|
||||||
|
wxLogDebug(wxT("There were memory leaks."));
|
||||||
|
wxDebugContext::Dump();
|
||||||
|
wxDebugContext::PrintStatistics();
|
||||||
|
}
|
||||||
|
// wxDebugContext::SetStream(NULL, NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if wxUSE_LOG
|
||||||
|
// do it as the very last thing because everything else can log messages
|
||||||
|
delete wxLog::SetActiveTarget(NULL);
|
||||||
|
#endif // wxUSE_LOG
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxApp creation
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxApp::wxApp()
|
||||||
|
{
|
||||||
|
m_topWindow = NULL;
|
||||||
|
wxTheApp = this;
|
||||||
|
|
||||||
|
m_isIdle = true;
|
||||||
|
#if WXWIN_COMPATIBILITY_2_2
|
||||||
|
m_wantDebugOutput = TRUE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
argc = 0;
|
||||||
|
argv = NULL;
|
||||||
|
m_cocoaApp = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxApp::CocoaInstallIdleHandler()
|
||||||
|
{
|
||||||
|
wxLogDebug("wxApp::CocoaInstallIdleHandler");
|
||||||
|
m_isIdle = false;
|
||||||
|
// Call doIdle for EVERYTHING dammit
|
||||||
|
// We'd need Foundation/NSConnection.h for this next constant, do we need it?
|
||||||
|
[[ NSRunLoop currentRunLoop ] performSelector:@selector(doIdle:) target:m_cocoaApp argument:NULL order:0 modes:[NSArray arrayWithObjects:NSDefaultRunLoopMode, /* NSConnectionReplyRunLoopMode,*/ NSModalPanelRunLoopMode, /**/NSEventTrackingRunLoopMode,/**/ nil] ];
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxApp::OnInitGui()
|
||||||
|
{
|
||||||
|
if(!wxAppBase::OnInitGui())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
// Create the app using the sharedApplication method
|
||||||
|
m_cocoaApp = [NSApplication sharedApplication];
|
||||||
|
// [ m_cocoaApp setDelegate:m_cocoaApp ];
|
||||||
|
#if 0
|
||||||
|
wxLogDebug("Just for kicks");
|
||||||
|
[ m_cocoaApp performSelector:@selector(doIdle:) withObject:NULL ];
|
||||||
|
wxLogDebug("okay.. done now");
|
||||||
|
#endif
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxApp::OnInit()
|
||||||
|
{
|
||||||
|
if(!wxAppBase::OnInit())
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxApp::Initialized()
|
||||||
|
{
|
||||||
|
if (GetTopWindow())
|
||||||
|
return TRUE;
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxApp::MainLoop()
|
||||||
|
{
|
||||||
|
[m_cocoaApp run];
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns TRUE if more time is needed.
|
||||||
|
bool wxApp::ProcessIdle()
|
||||||
|
{
|
||||||
|
wxIdleEvent event;
|
||||||
|
event.SetEventObject(this);
|
||||||
|
ProcessEvent(event);
|
||||||
|
|
||||||
|
return event.MoreRequested();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxApp::ExitMainLoop()
|
||||||
|
{
|
||||||
|
wxLogDebug("wxApp::ExitMailLoop m_isIdle=%d, isRunning=%d",(int)m_isIdle,(int)[m_cocoaApp isRunning]);
|
||||||
|
// CocoaInstallRequestedIdleHandler();
|
||||||
|
// if(m_isIdle)
|
||||||
|
// [[ NSRunLoop currentRunLoop ] performSelector:@selector(doIdle:) target:m_cocoaApp argument:NULL order:0 modes:[NSArray arrayWithObjects:NSDefaultRunLoopMode, /* NSConnectionReplyRunLoopMode, NSModalPanelRunLoopMode, NSEventTrackingRunLoopMode,*/ nil] ];
|
||||||
|
// actually.. we WANT the idle event
|
||||||
|
// or not
|
||||||
|
#if 0
|
||||||
|
if(!m_isIdle)
|
||||||
|
[[ NSRunLoop currentRunLoop ] cancelPerformSelector:@selector(doIdle:) target:m_cocoaApp argument:NULL];
|
||||||
|
#endif
|
||||||
|
[m_cocoaApp terminate: m_cocoaApp];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Is a message/event pending?
|
||||||
|
bool wxApp::Pending()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dispatch a message.
|
||||||
|
void wxApp::Dispatch()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxApp::OnIdle(wxIdleEvent& event)
|
||||||
|
{
|
||||||
|
wxLogDebug("wxApp::OnIdle");
|
||||||
|
static bool s_inOnIdle = FALSE;
|
||||||
|
|
||||||
|
// Avoid recursion (via ProcessEvent default case)
|
||||||
|
if ( s_inOnIdle )
|
||||||
|
return;
|
||||||
|
s_inOnIdle = TRUE;
|
||||||
|
|
||||||
|
|
||||||
|
DeletePendingObjects();
|
||||||
|
|
||||||
|
// flush the logged messages if any
|
||||||
|
wxLog *pLog = wxLog::GetActiveTarget();
|
||||||
|
if ( pLog != NULL && pLog->HasPendingMessages() )
|
||||||
|
pLog->Flush();
|
||||||
|
|
||||||
|
// Send OnIdle events to all windows
|
||||||
|
bool needMore = SendIdleEvents();
|
||||||
|
|
||||||
|
if (needMore)
|
||||||
|
event.RequestMore(TRUE);
|
||||||
|
|
||||||
|
s_inOnIdle = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send idle event to all top-level windows
|
||||||
|
bool wxApp::SendIdleEvents()
|
||||||
|
{
|
||||||
|
bool needMore = FALSE;
|
||||||
|
wxWindowList::Node* node = wxTopLevelWindows.GetFirst();
|
||||||
|
while (node)
|
||||||
|
{
|
||||||
|
wxWindow* win = node->GetData();
|
||||||
|
if (SendIdleEvents(win))
|
||||||
|
needMore = TRUE;
|
||||||
|
|
||||||
|
node = node->GetNext();
|
||||||
|
}
|
||||||
|
return needMore;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send idle event to window and all subwindows
|
||||||
|
bool wxApp::SendIdleEvents(wxWindow* win)
|
||||||
|
{
|
||||||
|
// wxLogDebug("SendIdleEvents win=%p",win);
|
||||||
|
bool needMore = FALSE;
|
||||||
|
|
||||||
|
wxIdleEvent event;
|
||||||
|
event.SetEventObject(win);
|
||||||
|
win->ProcessEvent(event);
|
||||||
|
|
||||||
|
if (event.MoreRequested())
|
||||||
|
needMore = TRUE;
|
||||||
|
|
||||||
|
wxWindowList::Node* node = win->GetChildren().GetFirst();
|
||||||
|
while (node)
|
||||||
|
{
|
||||||
|
// wxLogDebug("child=%p",node->Data());
|
||||||
|
wxWindow* win = node->GetData();
|
||||||
|
if (SendIdleEvents(win))
|
||||||
|
needMore = TRUE;
|
||||||
|
|
||||||
|
node = node->GetNext();
|
||||||
|
}
|
||||||
|
return needMore;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Yield to other processes
|
||||||
|
|
||||||
|
bool wxApp::Yield(bool onlyIfNeeded)
|
||||||
|
{
|
||||||
|
// MT-FIXME
|
||||||
|
static bool s_inYield = false;
|
||||||
|
|
||||||
|
#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 (s_inYield)
|
||||||
|
{
|
||||||
|
if ( !onlyIfNeeded )
|
||||||
|
{
|
||||||
|
wxFAIL_MSG( wxT("wxYield called recursively" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
s_inYield = true;
|
||||||
|
|
||||||
|
wxLogDebug("WARNING: SUPPOSED to have yielded!");
|
||||||
|
// FIXME: Do something!
|
||||||
|
|
||||||
|
#if wxUSE_LOG
|
||||||
|
// let the logs be flashed again
|
||||||
|
wxLog::Resume();
|
||||||
|
#endif // wxUSE_LOG
|
||||||
|
|
||||||
|
s_inYield = false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxApp::DeletePendingObjects()
|
||||||
|
{
|
||||||
|
wxNode *node = wxPendingDelete.GetFirst();
|
||||||
|
while (node)
|
||||||
|
{
|
||||||
|
wxObject *obj = (wxObject *)node->GetData();
|
||||||
|
|
||||||
|
delete obj;
|
||||||
|
|
||||||
|
if (wxPendingDelete.Find(obj))
|
||||||
|
delete node;
|
||||||
|
|
||||||
|
node = wxPendingDelete.GetFirst();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// platform specifics
|
||||||
|
|
66
src/cocoa/button.mm
Normal file
66
src/cocoa/button.mm
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/button.mm
|
||||||
|
// Purpose: wxButton
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/30
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/defs.h"
|
||||||
|
#include "wx/button.h"
|
||||||
|
#include "wx/log.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#import <AppKit/NSButton.h>
|
||||||
|
#import <Foundation/NSString.h>
|
||||||
|
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxButton, wxControl)
|
||||||
|
BEGIN_EVENT_TABLE(wxButton, wxButtonBase)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
WX_IMPLEMENT_COCOA_OWNER(wxButton,NSButton,NSControl,NSView)
|
||||||
|
|
||||||
|
bool wxButton::Create(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxString& label, const wxPoint& pos,
|
||||||
|
const wxSize& size, long style,
|
||||||
|
const wxValidator& validator, const wxString& name)
|
||||||
|
{
|
||||||
|
wxLogDebug("Creating control with id=%d",winid);
|
||||||
|
if(!CreateControl(parent,winid,pos,size,style,validator,name))
|
||||||
|
return false;
|
||||||
|
wxLogDebug("Created control with id=%d",GetId());
|
||||||
|
NSRect cocoaRect = NSMakeRect(10,10,20,20);
|
||||||
|
m_cocoaNSView = NULL;
|
||||||
|
SetNSButton([[NSButton alloc] initWithFrame: cocoaRect]);
|
||||||
|
// NOTE: YES we want to release this (to match the alloc).
|
||||||
|
// DoAddChild(this) will retain us again since addSubView doesn't.
|
||||||
|
[m_cocoaNSView release];
|
||||||
|
|
||||||
|
[GetNSButton() setBezelStyle:NSRoundedBezelStyle];
|
||||||
|
[GetNSButton() setTitle:[NSString stringWithCString: label.c_str()]];
|
||||||
|
[GetNSControl() sizeToFit];
|
||||||
|
|
||||||
|
if(m_parent)
|
||||||
|
m_parent->CocoaAddChild(this);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxButton::~wxButton()
|
||||||
|
{
|
||||||
|
CocoaRemoveFromParent();
|
||||||
|
SetNSButton(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxButton::Cocoa_wxNSButtonAction(void)
|
||||||
|
{
|
||||||
|
wxLogDebug("YAY!");
|
||||||
|
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, GetId());
|
||||||
|
InitCommandEvent(event); // event.SetEventObject(this);
|
||||||
|
Command(event);
|
||||||
|
}
|
||||||
|
|
81
src/cocoa/control.mm
Normal file
81
src/cocoa/control.mm
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/control.mm
|
||||||
|
// Purpose: wxControl class
|
||||||
|
// Author: David Elliiott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/02/15
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/defs.h"
|
||||||
|
#include "wx/control.h"
|
||||||
|
#include "wx/log.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#import <AppKit/NSControl.h>
|
||||||
|
|
||||||
|
IMPLEMENT_ABSTRACT_CLASS(wxControl, wxWindow)
|
||||||
|
BEGIN_EVENT_TABLE(wxControl, wxControlBase)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
WX_IMPLEMENT_COCOA_OWNER(wxControl,NSControl,NSView,NSView)
|
||||||
|
|
||||||
|
bool wxControl::Create(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxPoint& pos, const wxSize& size, long style,
|
||||||
|
const wxValidator& validator, const wxString& name)
|
||||||
|
{
|
||||||
|
wxLogDebug("Creating control with id=%d",winid);
|
||||||
|
if(!CreateControl(parent,winid,pos,size,style,validator,name))
|
||||||
|
return false;
|
||||||
|
wxLogDebug("Created control with id=%d",GetId());
|
||||||
|
NSRect cocoaRect = NSMakeRect(10,10,20,20);
|
||||||
|
m_cocoaNSView = NULL;
|
||||||
|
SetNSControl([[NSControl alloc] initWithFrame: cocoaRect]);
|
||||||
|
// NOTE: YES we want to release this (to match the alloc).
|
||||||
|
// DoAddChild(this) will retain us again since addSubView doesn't.
|
||||||
|
[m_cocoaNSView release];
|
||||||
|
|
||||||
|
[GetNSControl() sizeToFit];
|
||||||
|
|
||||||
|
if(m_parent)
|
||||||
|
m_parent->CocoaAddChild(this);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxControl::~wxControl()
|
||||||
|
{
|
||||||
|
CocoaRemoveFromParent();
|
||||||
|
SetNSControl(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxSize wxControl::DoGetBestSize() const
|
||||||
|
{
|
||||||
|
wxASSERT(m_cocoaNSView);
|
||||||
|
NSRect storedRect = [m_cocoaNSView frame];
|
||||||
|
[GetNSControl() sizeToFit];
|
||||||
|
NSRect cocoaRect = [m_cocoaNSView frame];
|
||||||
|
wxSize size((int)cocoaRect.size.width+10,(int)cocoaRect.size.height);
|
||||||
|
[m_cocoaNSView setFrame: storedRect];
|
||||||
|
wxLogDebug("wxControl=%p::DoGetBestSize()==(%d,%d)",this,size.x,size.y);
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxControl::ProcessCommand(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
#if WXWIN_COMPATIBILITY
|
||||||
|
if ( m_callback )
|
||||||
|
{
|
||||||
|
(void)(*m_callback)(*this, event);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif // WXWIN_COMPATIBILITY
|
||||||
|
|
||||||
|
return GetEventHandler()->ProcessEvent(event);
|
||||||
|
}
|
||||||
|
|
204
src/cocoa/dialog.mm
Normal file
204
src/cocoa/dialog.mm
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: src/cocoa/dialog.mm
|
||||||
|
// Purpose: wxDialog class
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/15
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: 2002 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "wx/dialog.h"
|
||||||
|
#include "wx/app.h"
|
||||||
|
#include "wx/settings.h"
|
||||||
|
#include "wx/log.h"
|
||||||
|
|
||||||
|
#import <AppKit/NSPanel.h>
|
||||||
|
#import <AppKit/NSApplication.h>
|
||||||
|
|
||||||
|
// Lists to keep track of windows, so we can disable/enable them
|
||||||
|
// for modal dialogs
|
||||||
|
static wxWindowList wxModalDialogs;
|
||||||
|
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxDialog, wxTopLevelWindow)
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(wxDialog, wxDialogBase)
|
||||||
|
EVT_BUTTON(wxID_OK, wxDialog::OnOK)
|
||||||
|
EVT_BUTTON(wxID_APPLY, wxDialog::OnApply)
|
||||||
|
EVT_BUTTON(wxID_CANCEL, wxDialog::OnCancel)
|
||||||
|
EVT_CLOSE(wxDialog::OnCloseWindow)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
WX_IMPLEMENT_COCOA_OWNER(wxDialog,NSPanel,NSWindow,NSWindow)
|
||||||
|
|
||||||
|
void wxDialog::Init()
|
||||||
|
{
|
||||||
|
SetBackgroundColour(wxSystemSettings::GetSystemColour(wxSYS_COLOUR_3DFACE));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxDialog::Create(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxString& title,
|
||||||
|
const wxPoint& pos,
|
||||||
|
const wxSize& size,
|
||||||
|
long style,
|
||||||
|
const wxString& name)
|
||||||
|
{
|
||||||
|
wxTopLevelWindows.Append(this);
|
||||||
|
|
||||||
|
if(!CreateBase(parent,winid,pos,size,style,wxDefaultValidator,name))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (parent)
|
||||||
|
parent->AddChild(this);
|
||||||
|
|
||||||
|
NSRect cocoaRect = NSMakeRect(300,300,200,200);
|
||||||
|
|
||||||
|
unsigned int cocoaStyle = 0;
|
||||||
|
cocoaStyle |= NSTitledWindowMask;
|
||||||
|
cocoaStyle |= NSClosableWindowMask;
|
||||||
|
cocoaStyle |= NSMiniaturizableWindowMask;
|
||||||
|
cocoaStyle |= NSResizableWindowMask;
|
||||||
|
|
||||||
|
m_cocoaNSWindow = NULL;
|
||||||
|
SetNSPanel([[NSPanel alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO]);
|
||||||
|
// NOTE: SetNSWindow has retained the Cocoa object for this object.
|
||||||
|
// Because we do not release on close, the following release matches the
|
||||||
|
// above alloc and thus the retain count will be 1.
|
||||||
|
[m_cocoaNSWindow release];
|
||||||
|
wxLogDebug("wxDialog m_cocoaNSWindow retainCount=%d",[m_cocoaNSWindow retainCount]);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDialog::~wxDialog()
|
||||||
|
{
|
||||||
|
wxLogDebug("Destroying");
|
||||||
|
// setReleasedWhenClosed: NO
|
||||||
|
[m_cocoaNSWindow close];
|
||||||
|
SetNSPanel(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDialog::Cocoa_close(void)
|
||||||
|
{
|
||||||
|
m_closed = true;
|
||||||
|
/* Actually, this isn't true anymore */
|
||||||
|
wxLogDebug("Woah: Dialogs are not generally closed");
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDialog::SetModal(bool flag)
|
||||||
|
{
|
||||||
|
if ( flag )
|
||||||
|
{
|
||||||
|
wxModelessWindows.DeleteObject(this);
|
||||||
|
m_windowStyle |= wxDIALOG_MODAL ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_windowStyle &= ~wxDIALOG_MODAL ;
|
||||||
|
wxModelessWindows.Append(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxDialog::Show(bool show)
|
||||||
|
{
|
||||||
|
if(show)
|
||||||
|
InitDialog();
|
||||||
|
if(IsModal())
|
||||||
|
{
|
||||||
|
if(show)
|
||||||
|
{
|
||||||
|
wxModalDialogs.Append(this);
|
||||||
|
wxLogDebug("runModal");
|
||||||
|
[wxTheApp->GetNSApplication() runModalForWindow:m_cocoaNSWindow];
|
||||||
|
wxLogDebug("runModal END");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wxLogDebug("abortModal");
|
||||||
|
[wxTheApp->GetNSApplication() abortModal];
|
||||||
|
wxModalDialogs.DeleteObject(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Replacement for Show(TRUE) for modal dialogs - returns return code
|
||||||
|
int wxDialog::ShowModal()
|
||||||
|
{
|
||||||
|
if(!IsModal())
|
||||||
|
SetModal(true);
|
||||||
|
Show(true);
|
||||||
|
return GetReturnCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
// EndModal will work for any dialog
|
||||||
|
void wxDialog::EndModal(int retCode)
|
||||||
|
{
|
||||||
|
SetReturnCode(retCode);
|
||||||
|
Show(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxDialog::IsModal() const
|
||||||
|
{
|
||||||
|
return (GetWindowStyleFlag() & wxDIALOG_MODAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDialog::OnCloseWindow(wxCloseEvent& event)
|
||||||
|
{
|
||||||
|
// We'll send a Cancel message by default,
|
||||||
|
// which may close the dialog.
|
||||||
|
// Check for looping if the Cancel event handler calls Close().
|
||||||
|
|
||||||
|
// Note that if a cancel button and handler aren't present in the dialog,
|
||||||
|
// nothing will happen when you close the dialog via the window manager, or
|
||||||
|
// via Close().
|
||||||
|
// We wouldn't want to destroy the dialog by default, since the dialog may have been
|
||||||
|
// created on the stack.
|
||||||
|
// However, this does mean that calling dialog->Close() won't delete the dialog
|
||||||
|
// unless the handler for wxID_CANCEL does so. So use Destroy() if you want to be
|
||||||
|
// sure to destroy the dialog.
|
||||||
|
// The default OnCancel (above) simply ends a modal dialog, and hides a modeless dialog.
|
||||||
|
// ALWAYS VETO THIS EVENT!!!!
|
||||||
|
event.Veto();
|
||||||
|
|
||||||
|
static wxList closing;
|
||||||
|
|
||||||
|
if ( closing.Member(this) )
|
||||||
|
{
|
||||||
|
wxLogDebug("WARNING: Attempting to recursively call Close for dialog");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
closing.Append(this);
|
||||||
|
|
||||||
|
wxLogDebug("Sending Cancel Event");
|
||||||
|
wxCommandEvent cancelEvent(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
|
||||||
|
cancelEvent.SetEventObject( this );
|
||||||
|
GetEventHandler()->ProcessEvent(cancelEvent); // This may close the dialog
|
||||||
|
|
||||||
|
closing.DeleteObject(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Standard buttons
|
||||||
|
void wxDialog::OnOK(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
if ( Validate() && TransferDataFromWindow() )
|
||||||
|
{
|
||||||
|
EndModal(wxID_OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDialog::OnApply(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
if (Validate())
|
||||||
|
TransferDataFromWindow();
|
||||||
|
// TODO probably need to disable the Apply button until things change again
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxDialog::OnCancel(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
wxLogDebug("Cancelled!");
|
||||||
|
EndModal(wxID_CANCEL);
|
||||||
|
}
|
||||||
|
|
85
src/cocoa/frame.mm
Normal file
85
src/cocoa/frame.mm
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/frame.mm
|
||||||
|
// Purpose: wxFrame
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/03/16
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "wx/frame.h"
|
||||||
|
#include "wx/menu.h"
|
||||||
|
#include "wx/menuitem.h"
|
||||||
|
#include "wx/app.h"
|
||||||
|
#include "wx/log.h"
|
||||||
|
|
||||||
|
#import <AppKit/NSWindow.h>
|
||||||
|
#import <AppKit/NSApplication.h>
|
||||||
|
|
||||||
|
// wxFrame
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(wxFrame, wxFrameBase)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxTopLevelWindow)
|
||||||
|
|
||||||
|
void wxFrame::Init()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxFrame::Create(wxWindow *parent,
|
||||||
|
wxWindowID winid,
|
||||||
|
const wxString& title,
|
||||||
|
const wxPoint& pos,
|
||||||
|
const wxSize& size,
|
||||||
|
long style,
|
||||||
|
const wxString& name)
|
||||||
|
{
|
||||||
|
bool rt = wxTopLevelWindow::Create(parent,winid,title,pos,size,style,name);
|
||||||
|
|
||||||
|
return rt;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxFrame::~wxFrame()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFrame::Cocoa_wxMenuItemAction(wxMenuItem& item)
|
||||||
|
{
|
||||||
|
Command(item.GetId());
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFrame::AttachMenuBar(wxMenuBar *mbar)
|
||||||
|
{
|
||||||
|
wxFrameBase::AttachMenuBar(mbar);
|
||||||
|
if(m_frameMenuBar)
|
||||||
|
{
|
||||||
|
wxLogDebug("Attached menu");
|
||||||
|
[m_cocoaNSWindow setMenu:m_frameMenuBar->GetNSMenu()];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFrame::DetachMenuBar()
|
||||||
|
{
|
||||||
|
if(m_frameMenuBar)
|
||||||
|
{
|
||||||
|
[m_cocoaNSWindow setMenu:nil];
|
||||||
|
}
|
||||||
|
wxFrameBase::DetachMenuBar();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxFrame::Show(bool show)
|
||||||
|
{
|
||||||
|
bool ret = wxFrameBase::Show(show);
|
||||||
|
if(show && GetMenuBar())
|
||||||
|
[wxTheApp->GetNSApplication() setMenu:GetMenuBar()->GetNSMenu() ];
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxPoint wxFrame::GetClientAreaOrigin() const
|
||||||
|
{
|
||||||
|
return wxPoint(0,0);
|
||||||
|
}
|
||||||
|
|
19
src/cocoa/main.cpp
Normal file
19
src/cocoa/main.cpp
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/main.cpp
|
||||||
|
// Purpose: Entry point
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/11/11
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
/* DFE: ^^^^^ Was that really necessary :-) */
|
||||||
|
|
||||||
|
#include "wx/app.h"
|
||||||
|
|
||||||
|
WXDLLEXPORT int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
return wxEntry(argc, argv);
|
||||||
|
}
|
||||||
|
|
174
src/cocoa/menu.mm
Normal file
174
src/cocoa/menu.mm
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/menu.cpp
|
||||||
|
// Purpose: wxMenu and wxMenuBar implementation
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/09
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/menu.h"
|
||||||
|
#include "wx/log.h"
|
||||||
|
#endif // WX_PRECOMP
|
||||||
|
|
||||||
|
#import <Foundation/NSString.h>
|
||||||
|
#import <AppKit/NSMenu.h>
|
||||||
|
|
||||||
|
#if wxUSE_MENUS
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// globals
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// wxMenu implementation
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxMenu,wxEvtHandler)
|
||||||
|
|
||||||
|
bool wxMenu::Create(const wxString& title, long style)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
if(!title)
|
||||||
|
return CocoaCreate("wxMenu");
|
||||||
|
#endif
|
||||||
|
return CocoaCreate(title);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxMenu::~wxMenu()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxMenu::DoAppend(wxMenuItem *item)
|
||||||
|
{
|
||||||
|
if(!wxMenuBase::DoAppend(item))
|
||||||
|
return false;
|
||||||
|
[m_cocoaNSMenu addItem: item->GetNSMenuItem()];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxMenu::DoInsert(unsigned long pos, wxMenuItem *item)
|
||||||
|
{
|
||||||
|
if(!wxMenuBase::DoInsert(pos,item))
|
||||||
|
return false;
|
||||||
|
[m_cocoaNSMenu insertItem:item->GetNSMenuItem() atIndex:pos];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxMenuItem* wxMenu::DoRemove(wxMenuItem *item)
|
||||||
|
{
|
||||||
|
wxMenuItem *retitem = wxMenuBase::DoRemove(item);
|
||||||
|
wxASSERT(retitem->GetNSMenuItem());
|
||||||
|
[m_cocoaNSMenu removeItem:retitem->GetNSMenuItem()];
|
||||||
|
return retitem;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// wxMenuBar implementation
|
||||||
|
// ============================================================================
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxMenuBar,wxWindow)
|
||||||
|
|
||||||
|
bool wxMenuBar::Create(long style)
|
||||||
|
{
|
||||||
|
if(!CocoaCreate("wxMenuBar"))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxMenuBar::~wxMenuBar()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxMenuBar::Append( wxMenu *menu, const wxString &title )
|
||||||
|
{
|
||||||
|
wxLogDebug("append menu=%p, title=%s",menu,title.c_str());
|
||||||
|
if(!wxMenuBarBase::Append(menu,title))
|
||||||
|
return false;
|
||||||
|
wxASSERT(menu);
|
||||||
|
wxASSERT(menu->GetNSMenu());
|
||||||
|
NSString *menuTitle = [[NSString alloc] initWithCString: wxStripMenuCodes(title).c_str()];
|
||||||
|
NSMenuItem *newItem = [[NSMenuItem alloc] initWithTitle:menuTitle action:NULL keyEquivalent:@""];
|
||||||
|
[menu->GetNSMenu() setTitle:menuTitle];
|
||||||
|
[newItem setSubmenu:menu->GetNSMenu()];
|
||||||
|
|
||||||
|
[m_cocoaNSMenu addItem:newItem];
|
||||||
|
|
||||||
|
[menuTitle release];
|
||||||
|
[newItem release];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title)
|
||||||
|
{
|
||||||
|
wxLogDebug("insert pos=%lu, menu=%p, title=%s",pos,menu,title.c_str());
|
||||||
|
if(!wxMenuBarBase::Insert(pos,menu,title))
|
||||||
|
return false;
|
||||||
|
wxASSERT(menu);
|
||||||
|
wxASSERT(menu->GetNSMenu());
|
||||||
|
NSString *menuTitle = [[NSString alloc] initWithCString: title.c_str()];
|
||||||
|
NSMenuItem *newItem = [[NSMenuItem alloc] initWithTitle:menuTitle action:NULL keyEquivalent:@""];
|
||||||
|
[menu->GetNSMenu() setTitle:menuTitle];
|
||||||
|
[newItem setSubmenu:menu->GetNSMenu()];
|
||||||
|
|
||||||
|
[m_cocoaNSMenu insertItem:newItem atIndex:pos];
|
||||||
|
|
||||||
|
[menuTitle release];
|
||||||
|
[newItem release];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxMenu *wxMenuBar::Replace(size_t pos, wxMenu *menu, const wxString& title)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxMenu *wxMenuBar::Remove(size_t pos)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void wxMenuBar::EnableTop(size_t pos, bool enable)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxMenuBar::IsEnabledTop(size_t pos) const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxMenuBar::SetLabelTop(size_t pos, const wxString& label)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString wxMenuBar::GetLabelTop(size_t pos) const
|
||||||
|
{
|
||||||
|
return wxEmptyString;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxMenuBar::Attach(wxFrame *frame)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxMenuBar::Detach()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
wxSize wxMenuBar::DoGetBestClientSize() const
|
||||||
|
{
|
||||||
|
return wxDefaultSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // wxUSE_MENUS
|
141
src/cocoa/menuitem.mm
Normal file
141
src/cocoa/menuitem.mm
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: menuitem.cpp
|
||||||
|
// Purpose: wxMenuItem implementation
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/15
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: 2002 David Elliott
|
||||||
|
// Licence: wxWindows licence
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/menu.h"
|
||||||
|
#include "wx/menuitem.h"
|
||||||
|
#include "wx/utils.h"
|
||||||
|
#include "wx/frame.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "wx/cocoa/ObjcPose.h"
|
||||||
|
|
||||||
|
#import <AppKit/NSMenuItem.h>
|
||||||
|
#import <AppKit/NSMenu.h>
|
||||||
|
#import <Foundation/NSString.h>
|
||||||
|
|
||||||
|
#if wxUSE_MENUS
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// globals
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
wxMenuItemCocoaHash wxMenuItemCocoa::sm_cocoaHash;
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// functions prototypes
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// @class wxPoserNSMenuItem
|
||||||
|
// ============================================================================
|
||||||
|
@interface wxPoserNSMenuItem : NSMenuItem
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@end // wxPoserNSMenuItem
|
||||||
|
|
||||||
|
WX_IMPLEMENT_POSER(wxPoserNSMenuItem);
|
||||||
|
@implementation wxPoserNSMenuItem : NSMenuItem
|
||||||
|
|
||||||
|
@end // wxPoseRNSMenuItem
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// wxMenuItemCocoa implementation
|
||||||
|
// ============================================================================
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxMenuItem, wxObject)
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxMenuItemBase
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
wxMenuItem *wxMenuItemBase::New(wxMenu *parentMenu,
|
||||||
|
int itemid,
|
||||||
|
const wxString& name,
|
||||||
|
const wxString& help,
|
||||||
|
wxItemKind kind,
|
||||||
|
wxMenu *subMenu)
|
||||||
|
{
|
||||||
|
return new wxMenuItem(parentMenu, itemid, name, help, kind, subMenu);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* static */
|
||||||
|
wxString wxMenuItemBase::GetLabelFromText(const wxString& text)
|
||||||
|
{
|
||||||
|
return wxStripMenuCodes(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// ctor & dtor
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
wxMenuItemCocoa::wxMenuItemCocoa(wxMenu *pParentMenu,
|
||||||
|
int itemid,
|
||||||
|
const wxString& strName,
|
||||||
|
const wxString& strHelp,
|
||||||
|
wxItemKind kind,
|
||||||
|
wxMenu *pSubMenu)
|
||||||
|
: wxMenuItemBase(pParentMenu, itemid, strName, strHelp, kind, pSubMenu)
|
||||||
|
{
|
||||||
|
NSString *menuTitle = [[NSString alloc] initWithCString: wxStripMenuCodes(strName).c_str()];
|
||||||
|
m_cocoaNSMenuItem = [[NSMenuItem alloc] initWithTitle:menuTitle action:@selector(wxMenuItemAction:) keyEquivalent:@""];
|
||||||
|
sm_cocoaHash.insert(wxMenuItemCocoaHash::value_type(m_cocoaNSMenuItem,this));
|
||||||
|
if(pSubMenu)
|
||||||
|
{
|
||||||
|
wxASSERT(pSubMenu->GetNSMenu());
|
||||||
|
[pSubMenu->GetNSMenu() setTitle:menuTitle];
|
||||||
|
[m_cocoaNSMenuItem setSubmenu:pSubMenu->GetNSMenu()];
|
||||||
|
}
|
||||||
|
[menuTitle release];
|
||||||
|
}
|
||||||
|
|
||||||
|
wxMenuItem::~wxMenuItem()
|
||||||
|
{
|
||||||
|
sm_cocoaHash.erase(m_cocoaNSMenuItem);
|
||||||
|
[m_cocoaNSMenuItem release];
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// misc
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// change item state
|
||||||
|
// -----------------
|
||||||
|
|
||||||
|
void wxMenuItem::Enable(bool bDoEnable)
|
||||||
|
{
|
||||||
|
wxMenuItemBase::Enable(bDoEnable);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxMenuItem::Check(bool bDoCheck)
|
||||||
|
{
|
||||||
|
wxCHECK_RET( IsCheckable(), "only checkable items may be checked" );
|
||||||
|
wxMenuItemBase::Check(bDoCheck);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxMenuItem::SetText(const wxString& label)
|
||||||
|
{
|
||||||
|
wxMenuItemBase::SetText(label);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxMenuItem::SetCheckable(bool checkable)
|
||||||
|
{
|
||||||
|
wxMenuItemBase::SetCheckable(checkable);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // wxUSE_MENUS
|
60
src/cocoa/stattext.mm
Normal file
60
src/cocoa/stattext.mm
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/stattext.mm
|
||||||
|
// Purpose: wxStaticText
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/02/15
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "wx/app.h"
|
||||||
|
#include "wx/stattext.h"
|
||||||
|
|
||||||
|
#import <Foundation/NSString.h>
|
||||||
|
#import <AppKit/NSTextField.h>
|
||||||
|
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxStaticText, wxControl)
|
||||||
|
BEGIN_EVENT_TABLE(wxStaticText, wxControl)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
WX_IMPLEMENT_COCOA_OWNER(wxStaticText,NSTextField,NSControl,NSView)
|
||||||
|
|
||||||
|
bool wxStaticText::Create(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxString& label,
|
||||||
|
const wxPoint& pos,
|
||||||
|
const wxSize& size,
|
||||||
|
long style,
|
||||||
|
const wxString& name)
|
||||||
|
{
|
||||||
|
if(!CreateControl(parent,winid,pos,size,style,wxDefaultValidator,name))
|
||||||
|
return false;
|
||||||
|
m_cocoaNSView = NULL;
|
||||||
|
SetNSTextField([[NSTextField alloc] initWithFrame:NSMakeRect(0,0,30,30)]);
|
||||||
|
[m_cocoaNSView release];
|
||||||
|
[GetNSTextField() setStringValue:[NSString stringWithCString:label.c_str()]];
|
||||||
|
// [GetNSTextField() setBordered: NO];
|
||||||
|
[GetNSTextField() setBezeled: NO];
|
||||||
|
[GetNSTextField() setEditable: NO];
|
||||||
|
[GetNSTextField() setDrawsBackground: NO];
|
||||||
|
[GetNSControl() sizeToFit];
|
||||||
|
if(m_parent)
|
||||||
|
m_parent->CocoaAddChild(this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxStaticText::~wxStaticText()
|
||||||
|
{
|
||||||
|
CocoaRemoveFromParent();
|
||||||
|
SetNSTextField(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxStaticText::SetLabel(const wxString& label)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxStaticText::Cocoa_didChangeText(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
184
src/cocoa/textctrl.mm
Normal file
184
src/cocoa/textctrl.mm
Normal file
@@ -0,0 +1,184 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/textctrl.mm
|
||||||
|
// Purpose: wxTextCtrl
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2003/03/16
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2003 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "wx/app.h"
|
||||||
|
#include "wx/textctrl.h"
|
||||||
|
|
||||||
|
#import <Foundation/NSString.h>
|
||||||
|
#import <AppKit/NSTextField.h>
|
||||||
|
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxTextCtrl, wxControl)
|
||||||
|
BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
WX_IMPLEMENT_COCOA_OWNER(wxTextCtrl,NSTextField,NSControl,NSView)
|
||||||
|
|
||||||
|
bool wxTextCtrl::Create(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxString& value,
|
||||||
|
const wxPoint& pos,
|
||||||
|
const wxSize& size,
|
||||||
|
long style,
|
||||||
|
const wxValidator& validator,
|
||||||
|
const wxString& name)
|
||||||
|
{
|
||||||
|
if(!CreateControl(parent,winid,pos,size,style,validator,name))
|
||||||
|
return false;
|
||||||
|
m_cocoaNSView = NULL;
|
||||||
|
SetNSTextField([[NSTextField alloc] initWithFrame:NSMakeRect(0,0,30,30)]);
|
||||||
|
[m_cocoaNSView release];
|
||||||
|
[GetNSTextField() setStringValue:[NSString stringWithCString:value.c_str()]];
|
||||||
|
[GetNSControl() sizeToFit];
|
||||||
|
if(m_parent)
|
||||||
|
m_parent->CocoaAddChild(this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxTextCtrl::~wxTextCtrl()
|
||||||
|
{
|
||||||
|
CocoaRemoveFromParent();
|
||||||
|
SetNSTextField(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::Cocoa_didChangeText(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::AppendText(wxString const&)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::SetEditable(bool)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::DiscardEdits()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::SetSelection(long, long)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::ShowPosition(long)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::SetInsertionPoint(long)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::SetInsertionPointEnd()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::Cut()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::Copy()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::Redo()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::Undo()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::Clear()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::Paste()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::Remove(long, long)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::Replace(long, long, wxString const&)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::SetValue(wxString const&)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::WriteText(wxString const&)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTextCtrl::IsEditable() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTextCtrl::IsModified() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString wxTextCtrl::GetLineText(long) const
|
||||||
|
{
|
||||||
|
return wxEmptyString;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTextCtrl::GetSelection(long*, long*) const
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTextCtrl::PositionToXY(long, long*, long*) const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
long wxTextCtrl::XYToPosition(long, long) const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxTextCtrl::GetLineLength(long) const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
long wxTextCtrl::GetLastPosition() const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxTextCtrl::GetNumberOfLines() const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
long wxTextCtrl::GetInsertionPoint() const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTextCtrl::CanRedo() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTextCtrl::CanUndo() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString wxTextCtrl::GetValue() const
|
||||||
|
{
|
||||||
|
return wxEmptyString;
|
||||||
|
}
|
||||||
|
|
241
src/cocoa/toplevel.mm
Normal file
241
src/cocoa/toplevel.mm
Normal file
@@ -0,0 +1,241 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: cocoa/toplevel.mm
|
||||||
|
// Purpose: implements wxTopLevelWindow for Cocoa
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/11/27
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott
|
||||||
|
// License: wxWindows license
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// declarations
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// headers
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// For compilers that support precompilation, includes "wx.h".
|
||||||
|
#include "wx/wxprec.h"
|
||||||
|
#ifndef WX_PRECOMP
|
||||||
|
#include "wx/window.h"
|
||||||
|
#include "wx/toplevel.h"
|
||||||
|
#include "wx/menuitem.h"
|
||||||
|
#include "wx/frame.h"
|
||||||
|
#include "wx/log.h"
|
||||||
|
#include "wx/app.h"
|
||||||
|
#endif //WX_PRECOMP
|
||||||
|
|
||||||
|
#import <AppKit/NSWindow.h>
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// globals
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// list of all frames and modeless dialogs
|
||||||
|
wxWindowList wxModelessWindows;
|
||||||
|
|
||||||
|
// ============================================================================
|
||||||
|
// wxTopLevelWindowCocoa implementation
|
||||||
|
// ============================================================================
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxTopLevelWindowCocoa creation
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
IMPLEMENT_CLASS(wxTopLevelWindowCocoa,wxWindowCocoa)
|
||||||
|
BEGIN_EVENT_TABLE(wxTopLevelWindowCocoa,wxTopLevelWindowBase)
|
||||||
|
EVT_CLOSE(wxTopLevelWindowCocoa::OnCloseWindow)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
void wxTopLevelWindowCocoa::Init()
|
||||||
|
{
|
||||||
|
m_iconized =
|
||||||
|
m_maximizeOnShow =
|
||||||
|
m_closed = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTopLevelWindowCocoa::Create(wxWindow *parent,
|
||||||
|
wxWindowID winid,
|
||||||
|
const wxString& title,
|
||||||
|
const wxPoint& pos,
|
||||||
|
const wxSize& size,
|
||||||
|
long style,
|
||||||
|
const wxString& name)
|
||||||
|
{
|
||||||
|
wxTopLevelWindows.Append(this);
|
||||||
|
|
||||||
|
if(!CreateBase(parent,winid,pos,size,style,wxDefaultValidator,name))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if ( parent )
|
||||||
|
parent->AddChild(this);
|
||||||
|
|
||||||
|
// TODO: get rect from given position/size
|
||||||
|
NSRect cocoaRect = NSMakeRect(100,100,200,200);
|
||||||
|
|
||||||
|
// TODO: Set flags given wxWindows style
|
||||||
|
unsigned int cocoaStyle = 0;
|
||||||
|
cocoaStyle |= NSTitledWindowMask;
|
||||||
|
cocoaStyle |= NSClosableWindowMask;
|
||||||
|
cocoaStyle |= NSMiniaturizableWindowMask;
|
||||||
|
cocoaStyle |= NSResizableWindowMask;
|
||||||
|
|
||||||
|
m_cocoaNSWindow = NULL;
|
||||||
|
m_cocoaNSView = NULL;
|
||||||
|
SetNSWindow([[NSWindow alloc] initWithContentRect:cocoaRect styleMask:cocoaStyle backing:NSBackingStoreBuffered defer:NO]);
|
||||||
|
// NOTE: SetNSWindow has retained the Cocoa object for this object.
|
||||||
|
// Because we do not release on close, the following release matches the
|
||||||
|
// above alloc and thus the retain count will be 1.
|
||||||
|
[m_cocoaNSWindow release];
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxTopLevelWindowCocoa::~wxTopLevelWindowCocoa()
|
||||||
|
{
|
||||||
|
SetNSWindow(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxTopLevelWindowCocoa Cocoa Specifics
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void wxTopLevelWindowCocoa::SetNSWindow(WX_NSWindow cocoaNSWindow)
|
||||||
|
{
|
||||||
|
bool need_debug = cocoaNSWindow || m_cocoaNSWindow;
|
||||||
|
if(need_debug) wxLogDebug("wxTopLevelWindowCocoa=%p::SetNSWindow [m_cocoaNSWindow=%p retainCount]=%d",this,m_cocoaNSWindow,[m_cocoaNSWindow retainCount]);
|
||||||
|
if(m_cocoaNSWindow)
|
||||||
|
DisassociateNSWindow(m_cocoaNSWindow);
|
||||||
|
[cocoaNSWindow retain];
|
||||||
|
[m_cocoaNSWindow release];
|
||||||
|
m_cocoaNSWindow = cocoaNSWindow;
|
||||||
|
if(m_cocoaNSWindow)
|
||||||
|
SetNSView([m_cocoaNSWindow contentView]);
|
||||||
|
else
|
||||||
|
SetNSView(NULL);
|
||||||
|
if(m_cocoaNSWindow)
|
||||||
|
AssociateNSWindow(m_cocoaNSWindow);
|
||||||
|
if(need_debug) wxLogDebug("wxTopLevelWindowCocoa=%p::SetNSWindow [cocoaNSWindow=%p retainCount]=%d",this,cocoaNSWindow,[cocoaNSWindow retainCount]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTopLevelWindowCocoa::Cocoa_wxMenuItemAction(wxMenuItem& item)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTopLevelWindowCocoa::Cocoa_close(void)
|
||||||
|
{
|
||||||
|
m_closed = true;
|
||||||
|
Destroy();
|
||||||
|
/* Be SURE that idle events get ran. If the window was not active when
|
||||||
|
it was closed, then there will be no more events to trigger this and
|
||||||
|
therefore it must be done here */
|
||||||
|
wxTheApp->CocoaInstallRequestedIdleHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTopLevelWindowCocoa::Cocoa_windowShouldClose()
|
||||||
|
{
|
||||||
|
return wxWindowBase::Close(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxTopLevelWindowCocoa maximize/minimize
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void wxTopLevelWindowCocoa::Maximize(bool maximize)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTopLevelWindowCocoa::IsMaximized() const
|
||||||
|
{
|
||||||
|
return false ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTopLevelWindowCocoa::Iconize(bool iconize)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTopLevelWindowCocoa::IsIconized() const
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTopLevelWindowCocoa::Restore()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTopLevelWindowCocoa::Show(bool show)
|
||||||
|
{
|
||||||
|
if(show)
|
||||||
|
[m_cocoaNSWindow makeKeyAndOrderFront:m_cocoaNSWindow];
|
||||||
|
else
|
||||||
|
[m_cocoaNSWindow orderOut:m_cocoaNSWindow];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTopLevelWindowCocoa::Close(bool force)
|
||||||
|
{
|
||||||
|
if(force)
|
||||||
|
return wxWindowBase::Close(force);
|
||||||
|
// performClose will fake the user clicking the close button which
|
||||||
|
// will invoke windowShouldClose which will call the base class version
|
||||||
|
// of Close() which will NOT Destroy() the window (see below) but
|
||||||
|
// if closing is not stopped, then performClose will go ahead and
|
||||||
|
// close the window which will invoke Cocoa_close() setting m_closed
|
||||||
|
// to true and Destroy()ing the window.
|
||||||
|
[m_cocoaNSWindow performClose:m_cocoaNSWindow];
|
||||||
|
return m_closed;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTopLevelWindowCocoa::OnCloseWindow(wxCloseEvent& event)
|
||||||
|
{
|
||||||
|
// If the event was forced, close the window which will Destroy() it
|
||||||
|
if(!event.CanVeto())
|
||||||
|
[m_cocoaNSWindow close];
|
||||||
|
// if the event was not forced, it's probably because the user clicked
|
||||||
|
// the close button, or Close(false) was called which (see above) is
|
||||||
|
// redirected to performClose and thus Cocoa itself will close the window
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxTopLevelWindowCocoa misc
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxTopLevelWindowCocoa::ShowFullScreen(bool show, long style)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxTopLevelWindowCocoa::IsFullScreen() const
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTopLevelWindowCocoa::DoMoveWindow(int x, int y, int width, int height)
|
||||||
|
{
|
||||||
|
wxLogDebug("wxTopLevelWindow=%p::DoMoveWindow(%d,%d,%d,%d)",this,x,y,width,height);
|
||||||
|
|
||||||
|
NSRect cocoaRect = NSMakeRect(x,y,width,height);
|
||||||
|
[m_cocoaNSWindow setFrame: cocoaRect display:NO];
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTopLevelWindowCocoa::DoGetSize(int *w, int *h) const
|
||||||
|
{
|
||||||
|
NSRect cocoaRect = [m_cocoaNSWindow frame];
|
||||||
|
if(w)
|
||||||
|
*w=(int)cocoaRect.size.width;
|
||||||
|
if(h)
|
||||||
|
*h=(int)cocoaRect.size.height;
|
||||||
|
wxLogDebug("wxTopLevelWindow=%p::DoGetSize = (%d,%d)",this,(int)cocoaRect.size.width,(int)cocoaRect.size.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxTopLevelWindowCocoa::DoGetPosition(int *x, int *y) const
|
||||||
|
{
|
||||||
|
NSRect cocoaRect = [m_cocoaNSWindow frame];
|
||||||
|
if(x)
|
||||||
|
*x=(int)cocoaRect.origin.x;
|
||||||
|
if(y)
|
||||||
|
*y=(int)cocoaRect.origin.y;
|
||||||
|
wxLogDebug("wxTopLevelWindow=%p::DoGetPosition = (%d,%d)",this,(int)cocoaRect.origin.x,(int)cocoaRect.origin.y);
|
||||||
|
}
|
||||||
|
|
401
src/cocoa/window.mm
Normal file
401
src/cocoa/window.mm
Normal file
@@ -0,0 +1,401 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Name: src/cocoa/window.mm
|
||||||
|
// Purpose: wxWindowCocoa
|
||||||
|
// Author: David Elliott
|
||||||
|
// Modified by:
|
||||||
|
// Created: 2002/12/26
|
||||||
|
// RCS-ID: $Id:
|
||||||
|
// Copyright: (c) 2002 David Elliott
|
||||||
|
// Licence: wxWindows license
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "wx/window.h"
|
||||||
|
#include "wx/log.h"
|
||||||
|
|
||||||
|
#import <Appkit/NSView.h>
|
||||||
|
|
||||||
|
// normally the base classes aren't included, but wxWindow is special
|
||||||
|
#ifdef __WXUNIVERSAL__
|
||||||
|
IMPLEMENT_ABSTRACT_CLASS(wxWindowCocoa, wxWindowBase)
|
||||||
|
#else
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowBase)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(wxWindowCocoa, wxWindowBase)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
void wxWindowCocoa::Init()
|
||||||
|
{
|
||||||
|
InitBase();
|
||||||
|
|
||||||
|
m_cocoaNSView = NULL;
|
||||||
|
m_dummyNSView = NULL;
|
||||||
|
m_isBeingDeleted = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
bool wxWindow::Create(wxWindow *parent, wxWindowID winid,
|
||||||
|
const wxPoint& pos,
|
||||||
|
const wxSize& size,
|
||||||
|
long style,
|
||||||
|
const wxString& name)
|
||||||
|
{
|
||||||
|
if(!CreateBase(parent,winid,pos,size,style,wxDefaultValidator,name))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// TODO: create the window
|
||||||
|
NSRect cocoaRect = NSMakeRect(10,10,20,20);
|
||||||
|
m_cocoaNSView = NULL;
|
||||||
|
SetNSView([[NSView alloc] initWithFrame: cocoaRect]);
|
||||||
|
[m_cocoaNSView release];
|
||||||
|
|
||||||
|
if (m_parent)
|
||||||
|
{
|
||||||
|
m_parent->AddChild(this);
|
||||||
|
m_parent->CocoaAddChild(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
wxWindow::~wxWindow()
|
||||||
|
{
|
||||||
|
DestroyChildren();
|
||||||
|
|
||||||
|
if(m_parent)
|
||||||
|
m_parent->RemoveChild(this);
|
||||||
|
|
||||||
|
CocoaRemoveFromParent();
|
||||||
|
SetNSView(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindowCocoa::CocoaAddChild(wxWindowCocoa *child)
|
||||||
|
{
|
||||||
|
[child->m_cocoaNSView retain];
|
||||||
|
// NOTE: addSubView takes ownership of, but does not retain the subview
|
||||||
|
// Upon a removeFromView or closing the super view, the child WILL be
|
||||||
|
// released!!! I think the idea here is that normally you would alloc
|
||||||
|
// the subview and add it to the superview and this way you don't have
|
||||||
|
// to release what you just alloced. Unfortunately, that doesn't
|
||||||
|
// make sense for wxCocoa, so we do this instead.
|
||||||
|
[m_cocoaNSView addSubview: child->m_cocoaNSView];
|
||||||
|
wxASSERT(!child->m_dummyNSView);
|
||||||
|
child->m_isShown = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindowCocoa::CocoaRemoveFromParent(void)
|
||||||
|
{
|
||||||
|
wxASSERT(m_cocoaNSView);
|
||||||
|
if(m_dummyNSView)
|
||||||
|
{
|
||||||
|
// balances the alloc
|
||||||
|
[m_dummyNSView removeFromSuperview];
|
||||||
|
// But since we also retained it ourselves
|
||||||
|
[m_dummyNSView release];
|
||||||
|
m_dummyNSView = nil;
|
||||||
|
// m_cocoaNSView has of course already been removed by virtue of
|
||||||
|
// replaceSubview: m_cocoaNSView with: m_dummyNSView
|
||||||
|
}
|
||||||
|
else
|
||||||
|
[m_cocoaNSView removeFromSuperview];
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindowCocoa::SetNSView(WX_NSView cocoaNSView)
|
||||||
|
{
|
||||||
|
bool need_debug = cocoaNSView || m_cocoaNSView;
|
||||||
|
if(need_debug) wxLogDebug("wxWindowCocoa=%p::SetNSView [m_cocoaNSView=%p retainCount]=%d",this,m_cocoaNSView,[m_cocoaNSView retainCount]);
|
||||||
|
if(m_cocoaNSView)
|
||||||
|
DisassociateNSView(m_cocoaNSView);
|
||||||
|
[cocoaNSView retain];
|
||||||
|
[m_cocoaNSView release];
|
||||||
|
m_cocoaNSView = cocoaNSView;
|
||||||
|
if(m_cocoaNSView)
|
||||||
|
AssociateNSView(m_cocoaNSView);
|
||||||
|
if(need_debug) wxLogDebug("wxWindowCocoa=%p::SetNSView [cocoaNSView=%p retainCount]=%d",this,cocoaNSView,[cocoaNSView retainCount]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindowCocoa::Cocoa_FrameChanged(void)
|
||||||
|
{
|
||||||
|
wxLogDebug("Cocoa_FrameChanged");
|
||||||
|
wxSizeEvent event(GetSize(), m_windowId);
|
||||||
|
event.SetEventObject(this);
|
||||||
|
GetEventHandler()->ProcessEvent(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxWindow::Close(bool force)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxWindow::Show(bool show)
|
||||||
|
{
|
||||||
|
// If the window is marked as visible, then it shouldn't have a dummy view
|
||||||
|
// If the window is marked hidden, then it should have a dummy view
|
||||||
|
wxASSERT_MSG( (m_isShown && !m_dummyNSView) || (!m_isShown && m_dummyNSView),"wxWindow: m_isShown does not agree with m_dummyNSView");
|
||||||
|
// Return false if there isn't a window to show or hide
|
||||||
|
if(!m_cocoaNSView)
|
||||||
|
return false;
|
||||||
|
// Return false if the state isn't changing
|
||||||
|
if( show == m_isShown )
|
||||||
|
return false;
|
||||||
|
if(show)
|
||||||
|
{
|
||||||
|
// replaceSubView releases m_dummyNSView, balancing the alloc
|
||||||
|
[m_cocoaNSView retain];
|
||||||
|
[[m_dummyNSView superview] replaceSubview:m_dummyNSView with:m_cocoaNSView];
|
||||||
|
// But since we also retained it ourselves
|
||||||
|
[m_dummyNSView release];
|
||||||
|
m_dummyNSView = nil;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_dummyNSView = [[NSView alloc] initWithFrame: [m_cocoaNSView frame]];
|
||||||
|
[m_dummyNSView retain];
|
||||||
|
// NOTE: replaceSubView will cause m_cocaNSView to be released
|
||||||
|
[[m_cocoaNSView superview] replaceSubview:m_cocoaNSView with:m_dummyNSView];
|
||||||
|
// m_coocaNSView is now only retained by us
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindowCocoa::DoSetSize(int x, int y, int width, int height, int sizeFlags)
|
||||||
|
{
|
||||||
|
wxLogDebug("wxWindow=%p::DoSetSizeWindow(%d,%d,%d,%d,Auto: %s%s)",this,x,y,width,height,(sizeFlags&wxSIZE_AUTO_WIDTH)?"W":".",sizeFlags&wxSIZE_AUTO_HEIGHT?"H":".");
|
||||||
|
int currentX, currentY;
|
||||||
|
int currentW, currentH;
|
||||||
|
DoGetPosition(¤tX, ¤tY);
|
||||||
|
DoGetSize(¤tW, ¤tH);
|
||||||
|
if((x==-1) && !(sizeFlags&wxSIZE_ALLOW_MINUS_ONE))
|
||||||
|
x=currentX;
|
||||||
|
if((y==-1) && !(sizeFlags&wxSIZE_ALLOW_MINUS_ONE))
|
||||||
|
y=currentY;
|
||||||
|
|
||||||
|
AdjustForParentClientOrigin(x,y,sizeFlags);
|
||||||
|
|
||||||
|
wxSize size(-1,-1);
|
||||||
|
|
||||||
|
if((width==-1)&&!(sizeFlags&wxSIZE_ALLOW_MINUS_ONE))
|
||||||
|
{
|
||||||
|
if(sizeFlags&wxSIZE_AUTO_WIDTH)
|
||||||
|
{
|
||||||
|
size=DoGetBestSize();
|
||||||
|
width=size.x;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
width=currentW;
|
||||||
|
}
|
||||||
|
if((height==-1)&&!(sizeFlags&wxSIZE_ALLOW_MINUS_ONE))
|
||||||
|
{
|
||||||
|
if(sizeFlags&wxSIZE_AUTO_HEIGHT)
|
||||||
|
{
|
||||||
|
if(size.x==-1)
|
||||||
|
size=DoGetBestSize();
|
||||||
|
height=size.y;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
height=currentH;
|
||||||
|
}
|
||||||
|
DoMoveWindow(x,y,width,height);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindowCocoa::DoMoveWindow(int x, int y, int width, int height)
|
||||||
|
{
|
||||||
|
wxLogDebug("wxWindow=%p::DoMoveWindow(%d,%d,%d,%d)",this,x,y,width,height);
|
||||||
|
|
||||||
|
NSView *superview = [m_cocoaNSView superview];
|
||||||
|
wxCHECK_RET(superview,"NSView does not have a superview");
|
||||||
|
NSRect parentRect = [superview frame];
|
||||||
|
|
||||||
|
NSRect cocoaRect = NSMakeRect(x,parentRect.size.height-(y+height),width,height);
|
||||||
|
[m_cocoaNSView setFrame: cocoaRect];
|
||||||
|
// Also change the dummy's size
|
||||||
|
if(m_dummyNSView)
|
||||||
|
[m_dummyNSView setFrame: cocoaRect];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get total size
|
||||||
|
void wxWindow::DoGetSize(int *w, int *h) const
|
||||||
|
{
|
||||||
|
NSRect cocoaRect = [m_cocoaNSView frame];
|
||||||
|
if(w)
|
||||||
|
*w=(int)cocoaRect.size.width;
|
||||||
|
if(h)
|
||||||
|
*h=(int)cocoaRect.size.height;
|
||||||
|
wxLogDebug("wxWindow=%p::DoGetSize = (%d,%d)",this,(int)cocoaRect.size.width,(int)cocoaRect.size.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindow::DoGetPosition(int *x, int *y) const
|
||||||
|
{
|
||||||
|
NSView *superview = [m_cocoaNSView superview];
|
||||||
|
wxCHECK_RET(superview,"NSView does not have a superview");
|
||||||
|
NSRect parentRect = [superview frame];
|
||||||
|
|
||||||
|
NSRect cocoaRect = [m_cocoaNSView frame];
|
||||||
|
if(x)
|
||||||
|
*x=(int)cocoaRect.origin.x;
|
||||||
|
if(y)
|
||||||
|
*y=(int)(parentRect.size.height-(cocoaRect.origin.y+cocoaRect.size.height));
|
||||||
|
wxLogDebug("wxWindow=%p::DoGetPosition = (%d,%d)",this,(int)cocoaRect.origin.x,(int)cocoaRect.origin.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
WXWidget wxWindow::GetHandle() const
|
||||||
|
{
|
||||||
|
return m_cocoaNSView;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindow::SetFocus()
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindow::DoCaptureMouse()
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindow::DoReleaseMouse()
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindow::DoScreenToClient(int *x, int *y) const
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindow::DoClientToScreen(int *x, int *y) const
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get size *available for subwindows* i.e. excluding menu bar etc.
|
||||||
|
void wxWindow::DoGetClientSize(int *x, int *y) const
|
||||||
|
{
|
||||||
|
wxLogDebug("DoGetClientSize:");
|
||||||
|
wxWindowCocoa::DoGetSize(x,y);
|
||||||
|
// TODO: Actually account for menubar, borders, etc...
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindow::DoSetClientSize(int width, int height)
|
||||||
|
{
|
||||||
|
wxLogDebug("DoSetClientSize=(%d,%d)",width,height);
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxWindow::GetCharHeight() const
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxWindow::GetCharWidth() const
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindow::GetTextExtent(const wxString& string, int *x, int *y,
|
||||||
|
int *descent, int *externalLeading, const wxFont *theFont) const
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindow::Refresh(bool eraseBack, const wxRect *rect)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
// Coordinates relative to the window
|
||||||
|
void wxWindow::WarpPointer (int x_pos, int y_pos)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxWindow::GetScrollPos(int orient) const
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This now returns the whole range, not just the number
|
||||||
|
// of positions that we can scroll.
|
||||||
|
int wxWindow::GetScrollRange(int orient) const
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxWindow::GetScrollThumb(int orient) const
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindow::SetScrollPos(int orient, int pos, bool refresh)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
// New function that will replace some of the above.
|
||||||
|
void wxWindow::SetScrollbar(int orient, int pos, int thumbVisible,
|
||||||
|
int range, bool refresh)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
// Does a physical scroll
|
||||||
|
void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxWindow::SetFont(const wxFont& font)
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxWindow::Clear()
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
// Raise the window to the top of the Z order
|
||||||
|
void wxWindow::Raise()
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lower the window to the bottom of the Z order
|
||||||
|
void wxWindow::Lower()
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y)
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the window with the focus
|
||||||
|
wxWindow *wxWindowBase::FindFocus()
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* static */ wxWindow *wxWindowBase::GetCapture()
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxWindow *wxGetActiveWindow()
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user