| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- ///////////////////////////////////////////////////////////////////////////////
- // Name: wx/toplevel.h
- // Purpose: declares wxTopLevelWindow class, the base class for all
- // top level windows (such as frames and dialogs)
- // Author: Vadim Zeitlin, Vaclav Slavik
- // Modified by:
- // Created: 06.08.01
- // Copyright: (c) 2001 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
- // Vaclav Slavik <vaclav@wxwidgets.org>
- // Licence: wxWindows licence
- ///////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_TOPLEVEL_BASE_H_
- #define _WX_TOPLEVEL_BASE_H_
- // ----------------------------------------------------------------------------
- // headers
- // ----------------------------------------------------------------------------
- #include "wx/nonownedwnd.h"
- #include "wx/iconbndl.h"
- #include "wx/weakref.h"
- // the default names for various classes
- extern WXDLLIMPEXP_DATA_CORE(const char) wxFrameNameStr[];
- class WXDLLIMPEXP_FWD_CORE wxTopLevelWindowBase;
- // ----------------------------------------------------------------------------
- // constants
- // ----------------------------------------------------------------------------
- /*
- Summary of the bits used (some of them are defined in wx/frame.h and
- wx/dialog.h and not here):
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- |15|14|13|12|11|10| 9| 8| 7| 6| 5| 4| 3| 2| 1| 0|
- +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
- | | | | | | | | | | | | | | | |
- | | | | | | | | | | | | | | | \_ wxCENTRE
- | | | | | | | | | | | | | | \____ wxFRAME_NO_TASKBAR
- | | | | | | | | | | | | | \_______ wxFRAME_TOOL_WINDOW
- | | | | | | | | | | | | \__________ wxFRAME_FLOAT_ON_PARENT
- | | | | | | | | | | | \_____________ wxFRAME_SHAPED
- | | | | | | | | | | \________________ wxDIALOG_NO_PARENT
- | | | | | | | | | \___________________ wxRESIZE_BORDER
- | | | | | | | | \______________________ wxTINY_CAPTION_VERT
- | | | | | | | \_________________________
- | | | | | | \____________________________ wxMAXIMIZE_BOX
- | | | | | \_______________________________ wxMINIMIZE_BOX
- | | | | \__________________________________ wxSYSTEM_MENU
- | | | \_____________________________________ wxCLOSE_BOX
- | | \________________________________________ wxMAXIMIZE
- | \___________________________________________ wxMINIMIZE
- \______________________________________________ wxSTAY_ON_TOP
- Notice that the 8 lower bits overlap with wxCENTRE and the button selection
- bits (wxYES, wxOK wxNO, wxCANCEL, wxAPPLY, wxCLOSE and wxNO_DEFAULT) which
- can be combined with the dialog style for several standard dialogs and
- hence shouldn't overlap with any styles which can be used for the dialogs.
- Additionally, wxCENTRE can be used with frames also.
- */
- // style common to both wxFrame and wxDialog
- #define wxSTAY_ON_TOP 0x8000
- #define wxICONIZE 0x4000
- #define wxMINIMIZE wxICONIZE
- #define wxMAXIMIZE 0x2000
- #define wxCLOSE_BOX 0x1000 // == wxHELP so can't be used with it
- #define wxSYSTEM_MENU 0x0800
- #define wxMINIMIZE_BOX 0x0400
- #define wxMAXIMIZE_BOX 0x0200
- #define wxTINY_CAPTION 0x0080 // clashes with wxNO_DEFAULT
- #define wxRESIZE_BORDER 0x0040 // == wxCLOSE
- #if WXWIN_COMPATIBILITY_2_8
- // HORIZ and VERT styles are equivalent anyhow so don't use different names
- // for them
- #define wxTINY_CAPTION_HORIZ wxTINY_CAPTION
- #define wxTINY_CAPTION_VERT wxTINY_CAPTION
- #endif
- #if WXWIN_COMPATIBILITY_2_6
- // deprecated versions defined for compatibility reasons
- #define wxRESIZE_BOX wxMAXIMIZE_BOX
- #define wxTHICK_FRAME wxRESIZE_BORDER
- // obsolete styles, unused any more
- #define wxDIALOG_MODAL 0
- #define wxDIALOG_MODELESS 0
- #define wxNO_3D 0
- #define wxUSER_COLOURS 0
- #endif // WXWIN_COMPATIBILITY_2_6
- // default style
- //
- // under Windows CE (at least when compiling with eVC 4) we should create
- // top level windows without any styles at all for them to appear
- // "correctly", i.e. as full screen windows with a "hide" button (same as
- // "close" but round instead of squared and just hides the applications
- // instead of closing it) in the title bar
- #if defined(__WXWINCE__)
- #if defined(__SMARTPHONE__)
- #define wxDEFAULT_FRAME_STYLE (wxMAXIMIZE)
- #elif defined(__WINCE_STANDARDSDK__)
- #define wxDEFAULT_FRAME_STYLE (wxMAXIMIZE|wxCLOSE_BOX)
- #else
- #define wxDEFAULT_FRAME_STYLE (wxNO_BORDER)
- #endif
- #else // !__WXWINCE__
- #define wxDEFAULT_FRAME_STYLE \
- (wxSYSTEM_MENU | \
- wxRESIZE_BORDER | \
- wxMINIMIZE_BOX | \
- wxMAXIMIZE_BOX | \
- wxCLOSE_BOX | \
- wxCAPTION | \
- wxCLIP_CHILDREN)
- #endif
- // Dialogs are created in a special way
- #define wxTOPLEVEL_EX_DIALOG 0x00000008
- // Styles for ShowFullScreen
- // (note that wxTopLevelWindow only handles wxFULLSCREEN_NOBORDER and
- // wxFULLSCREEN_NOCAPTION; the rest is handled by wxTopLevelWindow)
- enum
- {
- wxFULLSCREEN_NOMENUBAR = 0x0001,
- wxFULLSCREEN_NOTOOLBAR = 0x0002,
- wxFULLSCREEN_NOSTATUSBAR = 0x0004,
- wxFULLSCREEN_NOBORDER = 0x0008,
- wxFULLSCREEN_NOCAPTION = 0x0010,
- wxFULLSCREEN_ALL = wxFULLSCREEN_NOMENUBAR | wxFULLSCREEN_NOTOOLBAR |
- wxFULLSCREEN_NOSTATUSBAR | wxFULLSCREEN_NOBORDER |
- wxFULLSCREEN_NOCAPTION
- };
- // Styles for RequestUserAttention
- enum
- {
- wxUSER_ATTENTION_INFO = 1,
- wxUSER_ATTENTION_ERROR = 2
- };
- // ----------------------------------------------------------------------------
- // wxTopLevelWindow: a top level (as opposed to child) window
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxTopLevelWindowBase : public wxNonOwnedWindow
- {
- public:
- // construction
- wxTopLevelWindowBase();
- virtual ~wxTopLevelWindowBase();
- // top level wnd state
- // --------------------
- // maximize = true => maximize, otherwise - restore
- virtual void Maximize(bool maximize = true) = 0;
- // undo Maximize() or Iconize()
- virtual void Restore() = 0;
- // iconize = true => iconize, otherwise - restore
- virtual void Iconize(bool iconize = true) = 0;
- // return true if the frame is maximized
- virtual bool IsMaximized() const = 0;
- // return true if the frame is always maximized
- // due to native guidelines or current policy
- virtual bool IsAlwaysMaximized() const;
- // return true if the frame is iconized
- virtual bool IsIconized() const = 0;
- // get the frame icon
- wxIcon GetIcon() const;
- // get the frame icons
- const wxIconBundle& GetIcons() const { return m_icons; }
- // set the frame icon: implemented in terms of SetIcons()
- void SetIcon(const wxIcon& icon);
- // set the frame icons
- virtual void SetIcons(const wxIconBundle& icons) { m_icons = icons; }
- // maximize the window to cover entire screen
- virtual bool ShowFullScreen(bool show, long style = wxFULLSCREEN_ALL) = 0;
- // shows the window, but doesn't activate it. If the base code is being run,
- // it means the port doesn't implement this method yet and so alert the user.
- virtual void ShowWithoutActivating() {
- wxFAIL_MSG("ShowWithoutActivating not implemented on this platform.");
- }
- // return true if the frame is in fullscreen mode
- virtual bool IsFullScreen() const = 0;
- // the title of the top level window: the text which the
- // window shows usually at the top of the frame/dialog in dedicated bar
- virtual void SetTitle(const wxString& title) = 0;
- virtual wxString GetTitle() const = 0;
- // enable/disable close button [x]
- virtual bool EnableCloseButton(bool WXUNUSED(enable) ) { return false; }
- // Attracts the users attention to this window if the application is
- // inactive (should be called when a background event occurs)
- virtual void RequestUserAttention(int flags = wxUSER_ATTENTION_INFO);
- // Is this the active frame (highlighted in the taskbar)?
- //
- // A TLW is active only if it contains the currently focused window.
- virtual bool IsActive() { return IsDescendant(FindFocus()); }
- // this function may be overridden to return false to allow closing the
- // application even when this top level window is still open
- //
- // notice that the window is still closed prior to the application exit and
- // so it can still veto it even if it returns false from here
- virtual bool ShouldPreventAppExit() const { return true; }
- #if defined(__SMARTPHONE__)
- virtual void SetLeftMenu(int id = wxID_ANY, const wxString& label = wxEmptyString, wxMenu *subMenu = NULL) = 0;
- virtual void SetRightMenu(int id = wxID_ANY, const wxString& label = wxEmptyString, wxMenu *subMenu = NULL) = 0;
- #endif // __SMARTPHONE__
- // centre the window on screen: this is just a shortcut
- void CentreOnScreen(int dir = wxBOTH) { DoCentre(dir | wxCENTRE_ON_SCREEN); }
- void CenterOnScreen(int dir = wxBOTH) { CentreOnScreen(dir); }
- // Get the default size for a new top level window. This is used when
- // creating a wxTLW under some platforms if no explicit size given.
- static wxSize GetDefaultSize();
- // default item access: we have a permanent default item which is the one
- // set by the user code but we may also have a temporary default item which
- // would be chosen if the user pressed "Enter" now but the default action
- // reverts to the "permanent" default as soon as this temporary default
- // item loses focus
- // get the default item, temporary or permanent
- wxWindow *GetDefaultItem() const
- { return m_winTmpDefault ? m_winTmpDefault : m_winDefault; }
- // set the permanent default item, return the old default
- wxWindow *SetDefaultItem(wxWindow *win)
- { wxWindow *old = GetDefaultItem(); m_winDefault = win; return old; }
- // return the temporary default item, can be NULL
- wxWindow *GetTmpDefaultItem() const { return m_winTmpDefault; }
- // set a temporary default item, SetTmpDefaultItem(NULL) should be called
- // soon after a call to SetTmpDefaultItem(window), return the old default
- wxWindow *SetTmpDefaultItem(wxWindow *win)
- { wxWindow *old = GetDefaultItem(); m_winTmpDefault = win; return old; }
- // implementation only from now on
- // -------------------------------
- // override some base class virtuals
- virtual bool Destroy();
- virtual bool IsTopLevel() const { return true; }
- virtual bool IsTopNavigationDomain() const { return true; }
- virtual bool IsVisible() const { return IsShown(); }
- // event handlers
- void OnCloseWindow(wxCloseEvent& event);
- void OnSize(wxSizeEvent& WXUNUSED(event)) { DoLayout(); }
- // Get rect to be used to center top-level children
- virtual void GetRectForTopLevelChildren(int *x, int *y, int *w, int *h);
- // this should go away, but for now it's called from docview.cpp,
- // so should be there for all platforms
- void OnActivate(wxActivateEvent &WXUNUSED(event)) { }
- // do the window-specific processing after processing the update event
- virtual void DoUpdateWindowUI(wxUpdateUIEvent& event) ;
- // a different API for SetSizeHints
- virtual void SetMinSize(const wxSize& minSize);
- virtual void SetMaxSize(const wxSize& maxSize);
- virtual void OSXSetModified(bool modified) { m_modified = modified; }
- virtual bool OSXIsModified() const { return m_modified; }
- virtual void SetRepresentedFilename(const wxString& WXUNUSED(filename)) { }
- #if wxUSE_MENUS || wxUSE_TOOLBAR
- // show help text for the currently selected menu or toolbar item
- // (typically in the status bar) or hide it and restore the status bar text
- // originally shown before the menu was opened if show == false
- virtual void DoGiveHelp(const wxString& WXUNUSED(text), bool WXUNUSED(show)) {}
- #endif
- protected:
- // the frame client to screen translation should take account of the
- // toolbar which may shift the origin of the client area
- virtual void DoClientToScreen(int *x, int *y) const;
- virtual void DoScreenToClient(int *x, int *y) const;
- // add support for wxCENTRE_ON_SCREEN
- virtual void DoCentre(int dir);
- // no need to do client to screen translation to get our position in screen
- // coordinates: this is already the case
- virtual void DoGetScreenPosition(int *x, int *y) const
- {
- DoGetPosition(x, y);
- }
- // test whether this window makes part of the frame
- // (menubar, toolbar and statusbar are excluded from automatic layout)
- virtual bool IsOneOfBars(const wxWindow *WXUNUSED(win)) const
- { return false; }
- // check if we should exit the program after deleting this window
- bool IsLastBeforeExit() const;
- // send the iconize event, return true if processed
- bool SendIconizeEvent(bool iconized = true);
- // do TLW-specific layout: we resize our unique child to fill the entire
- // client area
- void DoLayout();
- static int WidthDefault(int w) { return w == wxDefaultCoord ? GetDefaultSize().x : w; }
- static int HeightDefault(int h) { return h == wxDefaultCoord ? GetDefaultSize().y : h; }
- // the frame icon
- wxIconBundle m_icons;
- // a default window (usually a button) or NULL
- wxWindowRef m_winDefault;
- // a temporary override of m_winDefault, use the latter if NULL
- wxWindowRef m_winTmpDefault;
- bool m_modified;
- wxDECLARE_NO_COPY_CLASS(wxTopLevelWindowBase);
- DECLARE_EVENT_TABLE()
- };
- // include the real class declaration
- #if defined(__WXMSW__)
- #include "wx/msw/toplevel.h"
- #define wxTopLevelWindowNative wxTopLevelWindowMSW
- #elif defined(__WXGTK20__)
- #include "wx/gtk/toplevel.h"
- #define wxTopLevelWindowNative wxTopLevelWindowGTK
- #elif defined(__WXGTK__)
- #include "wx/gtk1/toplevel.h"
- #define wxTopLevelWindowNative wxTopLevelWindowGTK
- #elif defined(__WXX11__)
- #include "wx/x11/toplevel.h"
- #define wxTopLevelWindowNative wxTopLevelWindowX11
- #elif defined(__WXDFB__)
- #include "wx/dfb/toplevel.h"
- #define wxTopLevelWindowNative wxTopLevelWindowDFB
- #elif defined(__WXMAC__)
- #include "wx/osx/toplevel.h"
- #define wxTopLevelWindowNative wxTopLevelWindowMac
- #elif defined(__WXCOCOA__)
- #include "wx/cocoa/toplevel.h"
- #define wxTopLevelWindowNative wxTopLevelWindowCocoa
- #elif defined(__WXPM__)
- #include "wx/os2/toplevel.h"
- #define wxTopLevelWindowNative wxTopLevelWindowOS2
- #elif defined(__WXMOTIF__)
- #include "wx/motif/toplevel.h"
- #define wxTopLevelWindowNative wxTopLevelWindowMotif
- #endif
- #ifdef __WXUNIVERSAL__
- #include "wx/univ/toplevel.h"
- #else // !__WXUNIVERSAL__
- class WXDLLIMPEXP_CORE wxTopLevelWindow : public wxTopLevelWindowNative
- {
- public:
- // construction
- wxTopLevelWindow() { }
- wxTopLevelWindow(wxWindow *parent,
- wxWindowID winid,
- const wxString& title,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxDEFAULT_FRAME_STYLE,
- const wxString& name = wxFrameNameStr)
- : wxTopLevelWindowNative(parent, winid, title,
- pos, size, style, name)
- {
- }
- DECLARE_DYNAMIC_CLASS_NO_COPY(wxTopLevelWindow)
- };
- #endif // __WXUNIVERSAL__/!__WXUNIVERSAL__
- #endif // _WX_TOPLEVEL_BASE_H_
|