1///////////////////////////////////////////////////////////////////////////////
2// Name:        wx/cocoa/toplevel.h
3// Purpose:     wxTopLevelWindowCocoa is the Cocoa implementation of wxTLW
4// Author:      David Elliott
5// Modified by:
6// Created:     2002/12/08
7// RCS-ID:      $Id: toplevel.h 47995 2007-08-10 04:47:49Z DE $
8// Copyright:   (c) 2002 David Elliott
9// Licence:     wxWindows licence
10///////////////////////////////////////////////////////////////////////////////
11
12#ifndef __WX_COCOA_TOPLEVEL_H__
13#define __WX_COCOA_TOPLEVEL_H__
14
15#include "wx/hashmap.h"
16#include "wx/cocoa/NSWindow.h"
17
18class WXDLLEXPORT wxMenuBar;
19
20// ========================================================================
21// wxTopLevelWindowCocoa
22// ========================================================================
23class WXDLLEXPORT wxTopLevelWindowCocoa : public wxTopLevelWindowBase, protected wxCocoaNSWindow
24{
25    DECLARE_EVENT_TABLE();
26    DECLARE_NO_COPY_CLASS(wxTopLevelWindowCocoa);
27// ------------------------------------------------------------------------
28// initialization
29// ------------------------------------------------------------------------
30public:
31    inline wxTopLevelWindowCocoa()
32    :   wxCocoaNSWindow(this)
33    {   Init(); }
34
35    inline wxTopLevelWindowCocoa(wxWindow *parent,
36                        wxWindowID winid,
37                        const wxString& title,
38                        const wxPoint& pos = wxDefaultPosition,
39                        const wxSize& size = wxDefaultSize,
40                        long style = wxDEFAULT_FRAME_STYLE,
41                        const wxString& name = wxFrameNameStr)
42    :   wxCocoaNSWindow(this)
43    {
44        Init();
45        Create(parent, winid, title, pos, size, style, name);
46    }
47
48    bool Create(wxWindow *parent,
49                wxWindowID winid,
50                const wxString& title,
51                const wxPoint& pos = wxDefaultPosition,
52                const wxSize& size = wxDefaultSize,
53                long style = wxDEFAULT_FRAME_STYLE,
54                const wxString& name = wxFrameNameStr);
55
56    virtual ~wxTopLevelWindowCocoa();
57
58protected:
59    // common part of all ctors
60    void Init();
61
62// ------------------------------------------------------------------------
63// Cocoa specifics
64// ------------------------------------------------------------------------
65public:
66    inline WX_NSWindow GetNSWindow() { return m_cocoaNSWindow; }
67    virtual void CocoaDelegate_windowWillClose(void);
68    virtual bool CocoaDelegate_windowShouldClose(void);
69    virtual void CocoaDelegate_windowDidBecomeKey(void);
70    virtual void CocoaDelegate_windowDidResignKey(void);
71    virtual void CocoaDelegate_windowDidBecomeMain(void);
72    virtual void CocoaDelegate_windowDidResignMain(void);
73    virtual void CocoaDelegate_wxMenuItemAction(WX_NSMenuItem sender);
74    virtual bool CocoaDelegate_validateMenuItem(WX_NSMenuItem sender);
75    virtual wxMenuBar* GetAppMenuBar(wxCocoaNSWindow *win);
76    static void DeactivatePendingWindow();
77protected:
78    void SetNSWindow(WX_NSWindow cocoaNSWindow);
79    WX_NSWindow m_cocoaNSWindow;
80    static wxCocoaNSWindowHash sm_cocoaHash;
81    virtual void CocoaReplaceView(WX_NSView oldView, WX_NSView newView);
82    static unsigned int NSWindowStyleForWxStyle(long style);
83    static NSRect MakeInitialNSWindowContentRect(const wxPoint& pos, const wxSize& size, unsigned int cocoaStyleMask);
84
85    static wxTopLevelWindowCocoa *sm_cocoaDeactivateWindow;
86// ------------------------------------------------------------------------
87// Implementation
88// ------------------------------------------------------------------------
89public:
90    virtual bool Destroy();
91    // Pure virtuals
92    virtual void Maximize(bool maximize = true);
93    virtual bool IsMaximized() const;
94    virtual void Iconize(bool iconize = true);
95    virtual bool IsIconized() const;
96    virtual void Restore();
97    virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL);
98    virtual bool IsFullScreen() const;
99    // other
100    virtual bool Show( bool show = true );
101    virtual bool Close( bool force = false );
102    virtual void OnCloseWindow(wxCloseEvent& event);
103    virtual void CocoaSetWxWindowSize(int width, int height);
104    virtual void DoMoveWindow(int x, int y, int width, int height);
105    virtual void DoGetSize(int *width, int *height) const;
106    virtual void DoGetPosition(int *x, int *y) const;
107    virtual void SetTitle( const wxString& title);
108    virtual wxString GetTitle() const;
109
110    // Default button (item)
111    wxWindow *SetDefaultItem(wxWindow *win);
112
113// Things I may/may not do
114//    virtual void SetIcon(const wxIcon& icon);
115//    virtual void SetIcons(const wxIconBundle& icons) { SetIcon( icons.GetIcon( -1 ) ); }
116//    virtual void Clear() ;
117//    virtual void Raise();
118//    virtual void Lower();
119protected:
120    // is the frame currently iconized?
121    bool m_iconized;
122    // has the frame been closed
123    bool m_closed;
124    // should the frame be maximized when it will be shown? set by Maximize()
125    // when it is called while the frame is hidden
126    bool m_maximizeOnShow;
127};
128
129// list of all frames and modeless dialogs
130extern WXDLLEXPORT_DATA(wxWindowList) wxModelessWindows;
131
132#endif // __WX_COCOA_TOPLEVEL_H__
133