| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: mdi.h
- // Purpose: interface of wxMDIClientWindow
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- @class wxMDIClientWindow
- An MDI client window is a child of wxMDIParentFrame, and manages zero or
- more wxMDIChildFrame objects.
- @remarks
- The client window is the area where MDI child windows exist. It doesn't have to
- cover the whole parent frame; other windows such as toolbars and a help window
- might coexist with it. There can be scrollbars on a client window, which are
- controlled by the parent window style.
- The wxMDIClientWindow class is usually adequate without further derivation, and
- it is created automatically when the MDI parent frame is created. If the application
- needs to derive a new class, the function wxMDIParentFrame::OnCreateClient() must
- be overridden in order to give an opportunity to use a different class of client
- window.
- Under wxMSW, the client window will automatically have a sunken border style
- when the active child is not maximized, and no border style when a child is maximized.
- @library{wxcore}
- @category{managedwnd}
- @see wxMDIChildFrame, wxMDIParentFrame, wxFrame
- */
- class wxMDIClientWindow : public wxWindow
- {
- public:
- /**
- Default constructor.
- Objects of this class are only created by wxMDIParentFrame which uses
- the default constructor and calls CreateClient() immediately
- afterwards.
- */
- wxMDIClientWindow();
- /**
- Called by wxMDIParentFrame immediately after creating the client
- window.
- This function may be overridden in the derived class but the base class
- version must usually be called first to really create the window.
- @param parent
- The window parent.
- @param style
- The window style. Only wxHSCROLL and wxVSCROLL bits are meaningful
- here.
- */
- virtual bool CreateClient(wxMDIParentFrame* parent, long style = 0);
- };
- /**
- @class wxMDIParentFrame
- An MDI (Multiple Document Interface) parent frame is a window which can
- contain MDI child frames in its client area which emulates the full
- desktop.
- MDI is a user-interface model in which all the window reside inside the
- single parent window as opposed to being separate from each other. It
- remains popular despite dire warnings from Microsoft itself (which
- popularized this model in the first model) that MDI is obsolete.
- An MDI parent frame always has a wxMDIClientWindow associated with it,
- which is the parent for MDI child frames. In the simplest case, the client
- window takes up the entire parent frame area but it is also possible to
- resize it to be smaller in order to have other windows in the frame, a
- typical example is using a sidebar along one of the window edges.
- The appearance of MDI applications differs between different ports. The
- classic MDI model, with child windows which can be independently moved,
- resized etc, is only available under MSW, which provides native support for
- it. In Mac ports, multiple top level windows are used for the MDI children
- too and the MDI parent frame itself is invisible, to accommodate the native
- look and feel requirements. In all the other ports, a tab-based MDI
- implementation (sometimes called TDI) is used and so at most one MDI child
- is visible at any moment (child frames are always maximized).
- @remarks
- Although it is possible to have multiple MDI parent frames, a typical MDI
- application has a single MDI parent frame window inside which multiple MDI
- child frames, i.e. objects of class wxMDIChildFrame, can be created.
- @beginStyleTable
- There are no special styles for this class, all wxFrame styles apply to it
- in the usual way. The only exception is that wxHSCROLL and wxVSCROLL styles
- apply not to the frame itself but to the client window, so that using them
- enables horizontal and vertical scrollbars for this window and not the
- frame.
- @endStyleTable
- @library{wxcore}
- @category{managedwnd}
- @see wxMDIChildFrame, wxMDIClientWindow, wxFrame, wxDialog
- */
- class wxMDIParentFrame : public wxFrame
- {
- public:
- /**
- Default constructor.
- Use Create() for the objects created using this constructor.
- */
- wxMDIParentFrame();
- /**
- Constructor, creating the window.
- Notice that if you override virtual OnCreateClient() method you
- shouldn't be using this constructor but the default constructor and
- Create() as otherwise your overridden method is never going to be
- called because of the usual C++ virtual call resolution rules.
- @param parent
- The window parent. Usually is @NULL.
- @param id
- The window identifier. It may take a value of @c wxID_ANY to
- indicate a default value.
- @param title
- The caption to be displayed on the frame's title bar.
- @param pos
- The window position. The value ::wxDefaultPosition indicates a
- default position, chosen by either the windowing system or
- wxWidgets, depending on platform.
- @param size
- The window size. The value ::wxDefaultSize indicates a default
- size, chosen by either the windowing system or wxWidgets, depending
- on platform.
- @param style
- The window style. Default value includes wxHSCROLL and wxVSCROLL
- styles.
- @param name
- The name of the window. This parameter is used to associate a name
- with the item, allowing the application user to set Motif resource
- values for individual windows.
- @remarks
- Under wxMSW, the client window will automatically have a sunken
- border style when the active child is not maximized, and no border
- style when a child is maximized.
- @see Create(), OnCreateClient()
- */
- wxMDIParentFrame(wxWindow* parent, wxWindowID id,
- const wxString& title,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
- const wxString& name = wxFrameNameStr);
- /**
- Destructor.
- Destroys all child windows and menu bar if present.
- */
- virtual ~wxMDIParentFrame();
- /**
- Activates the MDI child following the currently active one.
- The MDI children are maintained in an ordered list and this function
- switches to the next element in this list, wrapping around the end of
- it if the currently active child is the last one.
- @see ActivatePrevious()
- */
- virtual void ActivateNext();
- /**
- Activates the MDI child preceding the currently active one.
- @see ActivateNext()
- */
- virtual void ActivatePrevious();
- /**
- Arranges any iconized (minimized) MDI child windows.
- This method is only implemented in MSW MDI implementation and does
- nothing under the other platforms.
- @see Cascade(), Tile()
- */
- virtual void ArrangeIcons();
- /**
- Arranges the MDI child windows in a cascade.
- This method is only implemented in MSW MDI implementation and does
- nothing under the other platforms.
- @see Tile(), ArrangeIcons()
- */
- virtual void Cascade();
- /**
- Used in two-step frame construction.
- See wxMDIParentFrame() for further details.
- */
- bool Create(wxWindow* parent,
- wxWindowID id,
- const wxString& title,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
- const wxString& name = wxFrameNameStr);
- /**
- Returns a pointer to the active MDI child, if there is one.
- If there are any children at all this function returns a non-@NULL
- pointer.
- */
- virtual wxMDIChildFrame* GetActiveChild() const;
- /**
- Returns a pointer to the client window.
- @see OnCreateClient()
- */
- wxMDIClientWindowBase* GetClientWindow() const;
- /**
- Returns the current MDI Window menu.
- Unless wxFRAME_NO_WINDOW_MENU style was used, a default menu listing
- all the currently active children and providing the usual operations
- (tile, cascade, ...) on them is created automatically by the library
- and this function can be used to retrieve it. Notice that the default
- menu can be replaced by calling SetWindowMenu().
- This function is currently not available under OS X.
- @return The current Window menu or @NULL.
- */
- wxMenu *GetWindowMenu() const;
- /**
- Returns whether the MDI implementation is tab-based.
- Currently only the MSW port uses the real MDI. In Mac ports the usual
- SDI is used, as common under this platforms, and all the other ports
- use TDI implementation.
- TDI-based MDI applications have different appearance and functionality
- (e.g. child frames can't be minimized and only one of them is visible
- at any given time) so the application may need to adapt its interface
- somewhat depending on the return value of this function.
- */
- static bool IsTDI();
- /**
- Override this to return a different kind of client window.
- If you override this function, you must create your parent frame in two
- stages, or your function will never be called, due to the way C++
- treats virtual functions called from constructors. For example:
- @code
- frame = new MyParentFrame;
- frame->Create(parent, myParentFrameId, "My Parent Frame");
- @endcode
- @remarks
- You might wish to derive from wxMDIClientWindow in order to implement
- different erase behaviour, for example, such as painting a bitmap on
- the background.
- Note that it is probably impossible to have a client window that scrolls
- as well as painting a bitmap or pattern, since in @b OnScroll, the scrollbar
- positions always return zero.
- @see GetClientWindow(), wxMDIClientWindow
- */
- virtual wxMDIClientWindow* OnCreateClient();
- /**
- Replace the current MDI Window menu.
- Ownership of the menu object passes to the frame when you call this
- function, i.e. the menu will be deleted by it when it's no longer
- needed (usually when the frame itself is deleted or when
- SetWindowMenu() is called again).
- To remove the window completely, you can use the wxFRAME_NO_WINDOW_MENU
- window style but this function also allows to do it by passing @NULL
- pointer as @a menu.
- The menu may include the items with the following standard identifiers
- (but may use arbitrary text and help strings and bitmaps for them):
- - @c wxID_MDI_WINDOW_CASCADE
- - @c wxID_MDI_WINDOW_TILE_HORZ
- - @c wxID_MDI_WINDOW_TILE_VERT
- - @c wxID_MDI_WINDOW_ARRANGE_ICONS
- - @c wxID_MDI_WINDOW_PREV
- - @c wxID_MDI_WINDOW_NEXT
- All of which are handled by wxMDIParentFrame itself. If any other
- commands are used in the menu, the derived frame should handle them.
- This function is currently not available under OS X.
- @param menu
- The menu to be used instead of the standard MDI Window menu or @NULL.
- */
- virtual void SetWindowMenu(wxMenu* menu);
- /**
- Tiles the MDI child windows either horizontally or vertically depending
- on whether @a orient is @c wxHORIZONTAL or @c wxVERTICAL.
- This method is only implemented in MSW MDI implementation and does
- nothing under the other platforms.
- */
- virtual void Tile(wxOrientation orient = wxHORIZONTAL);
- };
- /**
- @class wxMDIChildFrame
- An MDI child frame is a frame that can only exist inside a
- wxMDIClientWindow, which is itself a child of wxMDIParentFrame.
- @beginStyleTable
- All of the standard wxFrame styles can be used but most of them are ignored
- by TDI-based MDI implementations.
- @endStyleTable
- @remarks
- Although internally an MDI child frame is a child of the MDI client window,
- in wxWidgets you create it as a child of wxMDIParentFrame. In fact, you can
- usually forget that the client window exists. MDI child frames are clipped
- to the area of the MDI client window, and may be iconized on the client
- window. You can associate a menubar with a child frame as usual, although
- an MDI child doesn't display its menubar under its own title bar. The MDI
- parent frame's menubar will be changed to reflect the currently active
- child frame. If there are currently no children, the parent frame's own
- menubar will be displayed.
- @library{wxcore}
- @category{managedwnd}
- @see wxMDIClientWindow, wxMDIParentFrame, wxFrame
- */
- class wxMDIChildFrame : public wxFrame
- {
- public:
- /**
- Default constructor.
- */
- wxMDIChildFrame();
- /**
- Constructor, creating the window.
- @param parent
- The window parent. This should not be @NULL.
- @param id
- The window identifier. It may take a value of -1 to indicate a default
- value.
- @param title
- The caption to be displayed on the frame's title bar.
- @param pos
- The window position. The value ::wxDefaultPosition indicates a default position,
- chosen by either the windowing system or wxWidgets, depending on platform.
- @param size
- The window size. The value ::wxDefaultSize indicates a default size, chosen by
- either the windowing system or wxWidgets, depending on platform.
- @param style
- The window style. See wxMDIChildFrame.
- @param name
- The name of the window. This parameter is used to associate a name with the
- item, allowing the application user to set Motif resource values for individual
- windows.
- @see Create()
- */
- wxMDIChildFrame(wxMDIParentFrame* parent, wxWindowID id,
- const wxString& title,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxDEFAULT_FRAME_STYLE,
- const wxString& name = wxFrameNameStr);
- /**
- Destructor. Destroys all child windows and menu bar if present.
- */
- virtual ~wxMDIChildFrame();
- /**
- Activates this MDI child frame.
- @see Maximize(), Restore()
- */
- virtual void Activate();
- /**
- Used in two-step frame construction.
- See wxMDIChildFrame() for further details.
- */
- bool Create(wxMDIParentFrame* parent, wxWindowID id, const wxString& title,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxDEFAULT_FRAME_STYLE,
- const wxString& name = wxFrameNameStr);
- /**
- Returns the MDI parent frame containing this child.
- Notice that this may return a different object than GetParent() as the
- child frames may be created as children of the client window
- internally.
- */
- wxMDIParentFrame *GetMDIParent() const;
- /**
- Returns true for MDI children in TDI implementations.
- TDI-based implementations represent MDI children as pages in a
- wxNotebook and so they are always maximized and can't be restored or
- iconized.
- @see wxMDIParentFrame::IsTDI().
- */
- virtual bool IsAlwaysMaximized() const;
- /**
- Maximizes this MDI child frame.
- This function doesn't do anything if IsAlwaysMaximized() returns @true.
- @see Activate(), Restore()
- */
- virtual void Maximize(bool maximize = true);
- /**
- Restores this MDI child frame (unmaximizes).
- This function doesn't do anything if IsAlwaysMaximized() returns @true.
- @see Activate(), Maximize()
- */
- virtual void Restore();
- };
|