1/////////////////////////////////////////////////////////////////////////////
2// Name:        wx/cocoa/mdi.h
3// Purpose:     wxMDIParentFrame, wxMDIChildFrame, wxMDIClientWindow
4// Author:      David Elliott
5// Modified by:
6// Created:     2003/09/08
7// RCS-ID:      $Id: mdi.h 41020 2006-09-05 20:47:48Z VZ $
8// Copyright:   (c) 2003 David Elliott
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef __WX_COCOA_MDI_H__
13#define __WX_COCOA_MDI_H__
14
15#include "wx/frame.h"
16
17DECLARE_WXCOCOA_OBJC_CLASS(wxMDIParentFrameObserver);
18
19class WXDLLEXPORT wxMDIChildFrame;
20class WXDLLEXPORT wxMDIClientWindow;
21
22WX_DECLARE_LIST(wxMDIChildFrame, wxCocoaMDIChildFrameList);
23
24// ========================================================================
25// wxMDIParentFrame
26// ========================================================================
27class WXDLLEXPORT wxMDIParentFrame: public wxFrame
28{
29    friend class WXDLLEXPORT wxMDIChildFrame;
30    DECLARE_EVENT_TABLE()
31    DECLARE_DYNAMIC_CLASS(wxMDIParentFrame)
32// ------------------------------------------------------------------------
33// initialization
34// ------------------------------------------------------------------------
35public:
36    wxMDIParentFrame() { Init(); }
37    wxMDIParentFrame(wxWindow *parent,
38            wxWindowID winid,
39            const wxString& title,
40            const wxPoint& pos = wxDefaultPosition,
41            const wxSize& size = wxDefaultSize,
42            long style = wxDEFAULT_FRAME_STYLE,
43            const wxString& name = wxFrameNameStr)
44    {
45        Init();
46        Create(parent, winid, title, pos, size, style, name);
47    }
48
49    virtual ~wxMDIParentFrame();
50
51    bool Create(wxWindow *parent,
52                wxWindowID winid,
53                const wxString& title,
54                const wxPoint& pos = wxDefaultPosition,
55                const wxSize& size = wxDefaultSize,
56                long style = wxDEFAULT_FRAME_STYLE,
57                const wxString& name = wxFrameNameStr);
58protected:
59    void Init();
60// ------------------------------------------------------------------------
61// Cocoa specifics
62// ------------------------------------------------------------------------
63public:
64    void WindowDidBecomeMain(NSNotification *notification);
65protected:
66    virtual void CocoaDelegate_windowDidBecomeKey(void);
67    virtual void CocoaDelegate_windowDidResignKey(void);
68    virtual bool Cocoa_canBecomeMainWindow(bool &canBecome);
69    virtual wxMenuBar* GetAppMenuBar(wxCocoaNSWindow *win);
70
71    void AddMDIChild(wxMDIChildFrame *child);
72    void RemoveMDIChild(wxMDIChildFrame *child);
73
74    wxMDIParentFrameObserver *m_observer;
75// ------------------------------------------------------------------------
76// Implementation
77// ------------------------------------------------------------------------
78public:
79    wxMDIChildFrame *GetActiveChild() const;
80    void SetActiveChild(wxMDIChildFrame *child);
81
82    wxMDIClientWindow *GetClientWindow() const;
83    virtual wxMDIClientWindow *OnCreateClient();
84
85    virtual void Cascade() {}
86    virtual void Tile(wxOrientation WXUNUSED(orient) = wxHORIZONTAL) {}
87    virtual void ArrangeIcons() {}
88    virtual void ActivateNext();
89    virtual void ActivatePrevious();
90protected:
91    wxMDIClientWindow *m_clientWindow;
92    wxMDIChildFrame *m_currentChild;
93    wxCocoaMDIChildFrameList m_mdiChildren;
94};
95
96// ========================================================================
97// wxMDIChildFrame
98// ========================================================================
99class WXDLLEXPORT wxMDIChildFrame: public wxFrame
100{
101    friend class WXDLLEXPORT wxMDIParentFrame;
102    DECLARE_EVENT_TABLE()
103    DECLARE_DYNAMIC_CLASS(wxMDIChildFrame)
104// ------------------------------------------------------------------------
105// initialization
106// ------------------------------------------------------------------------
107public:
108    wxMDIChildFrame() { Init(); }
109    wxMDIChildFrame(wxMDIParentFrame *parent,
110            wxWindowID winid,
111            const wxString& title,
112            const wxPoint& pos = wxDefaultPosition,
113            const wxSize& size = wxDefaultSize,
114            long style = wxDEFAULT_FRAME_STYLE,
115            const wxString& name = wxFrameNameStr)
116    {
117        Init();
118        Create(parent, winid, title, pos, size, style, name);
119    }
120
121    virtual ~wxMDIChildFrame();
122
123    bool Create(wxMDIParentFrame *parent,
124                wxWindowID winid,
125                const wxString& title,
126                const wxPoint& pos = wxDefaultPosition,
127                const wxSize& size = wxDefaultSize,
128                long style = wxDEFAULT_FRAME_STYLE,
129                const wxString& name = wxFrameNameStr);
130protected:
131    void Init();
132// ------------------------------------------------------------------------
133// Cocoa specifics
134// ------------------------------------------------------------------------
135public:
136protected:
137    virtual void CocoaDelegate_windowDidBecomeKey(void);
138    virtual void CocoaDelegate_windowDidBecomeMain(void);
139    virtual void CocoaDelegate_windowDidResignKey(void);
140// ------------------------------------------------------------------------
141// Implementation
142// ------------------------------------------------------------------------
143public:
144    virtual void Activate();
145    virtual bool Destroy();
146protected:
147    wxMDIParentFrame *m_mdiParent;
148};
149
150// ========================================================================
151// wxMDIClientWindow
152// ========================================================================
153class wxMDIClientWindow: public wxWindow
154{
155    DECLARE_DYNAMIC_CLASS(wxMDIClientWindow)
156public:
157    wxMDIClientWindow();
158    wxMDIClientWindow( wxMDIParentFrame *parent, long style = 0 );
159    virtual ~wxMDIClientWindow();
160    virtual bool CreateClient( wxMDIParentFrame *parent, long style = 0 );
161};
162
163#endif // __WX_COCOA_MDI_H__
164