adaaa68635
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55912 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
413 lines
14 KiB
Objective-C
413 lines
14 KiB
Objective-C
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: laywin.h
|
|
// Purpose: interface of wxLayoutAlgorithm
|
|
// Author: wxWidgets team
|
|
// RCS-ID: $Id$
|
|
// Licence: wxWindows license
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
/**
|
|
@class wxLayoutAlgorithm
|
|
|
|
wxLayoutAlgorithm implements layout of subwindows in MDI or SDI frames.
|
|
It sends a wxCalculateLayoutEvent event
|
|
to children of the frame, asking them for information about
|
|
their size. For MDI parent frames, the algorithm allocates
|
|
the remaining space to the MDI client window (which contains the MDI child
|
|
frames).
|
|
For SDI (normal) frames, a 'main' window is specified as taking up the
|
|
remaining space.
|
|
|
|
Because the event system is used, this technique can be applied to any windows,
|
|
which are not necessarily 'aware' of the layout classes (no virtual functions
|
|
in wxWindow refer to wxLayoutAlgorithm or its events). However, you
|
|
may wish to use wxSashLayoutWindow for your subwindows
|
|
since this class provides handlers for the required events, and accessors
|
|
to specify the desired size of the window. The sash behaviour in the base class
|
|
can be used, optionally, to make the windows user-resizable.
|
|
|
|
wxLayoutAlgorithm is typically used in IDE (integrated development environment)
|
|
applications,
|
|
where there are several resizable windows in addition to the MDI client window,
|
|
or
|
|
other primary editing window. Resizable windows might include toolbars, a
|
|
project
|
|
window, and a window for displaying error and warning messages.
|
|
|
|
When a window receives an OnCalculateLayout event, it should call SetRect in
|
|
the given event object, to be the old supplied rectangle minus whatever space
|
|
the
|
|
window takes up. It should also set its own size accordingly.
|
|
wxSashLayoutWindow::OnCalculateLayout generates an OnQueryLayoutInfo event
|
|
which it sends to itself to determine the orientation, alignment and size of
|
|
the window,
|
|
which it gets from internal member variables set by the application.
|
|
|
|
The algorithm works by starting off with a rectangle equal to the whole frame
|
|
client area.
|
|
It iterates through the frame children, generating OnCalculateLayout events
|
|
which subtract
|
|
the window size and return the remaining rectangle for the next window to
|
|
process. It
|
|
is assumed (by wxSashLayoutWindow::OnCalculateLayout) that a window stretches
|
|
the full dimension
|
|
of the frame client, according to the orientation it specifies. For example, a
|
|
horizontal window
|
|
will stretch the full width of the remaining portion of the frame client area.
|
|
In the other orientation, the window will be fixed to whatever size was
|
|
specified by
|
|
OnQueryLayoutInfo. An alignment setting will make the window 'stick' to the
|
|
left, top, right or
|
|
bottom of the remaining client area. This scheme implies that order of window
|
|
creation is important.
|
|
Say you wish to have an extra toolbar at the top of the frame, a project window
|
|
to the left of
|
|
the MDI client window, and an output window above the status bar. You should
|
|
therefore create
|
|
the windows in this order: toolbar, output window, project window. This ensures
|
|
that the toolbar and
|
|
output window take up space at the top and bottom, and then the remaining
|
|
height in-between is used for
|
|
the project window.
|
|
|
|
wxLayoutAlgorithm is quite independent of the way in which
|
|
OnCalculateLayout chooses to interpret a window's size and alignment. Therefore
|
|
you
|
|
could implement a different window class with a new OnCalculateLayout event
|
|
handler,
|
|
that has a more sophisticated way of laying out the windows. It might allow
|
|
specification of whether stretching occurs in the specified orientation, for
|
|
example,
|
|
rather than always assuming stretching. (This could, and probably should, be
|
|
added to the existing
|
|
implementation).
|
|
|
|
@e Note: wxLayoutAlgorithm has nothing to do with wxLayoutConstraints. It is an
|
|
alternative
|
|
way of specifying layouts for which the normal constraint system is unsuitable.
|
|
|
|
@library{wxadv}
|
|
@category{winlayout}
|
|
|
|
@see wxSashEvent, wxSashLayoutWindow, @ref overview_eventhandlingoverview
|
|
*/
|
|
class wxLayoutAlgorithm : public wxObject
|
|
{
|
|
public:
|
|
/**
|
|
Default constructor.
|
|
*/
|
|
wxLayoutAlgorithm();
|
|
|
|
/**
|
|
Destructor.
|
|
*/
|
|
virtual ~wxLayoutAlgorithm();
|
|
|
|
/**
|
|
Lays out the children of a normal frame. @a mainWindow is set to occupy the
|
|
remaining space.
|
|
This function simply calls LayoutWindow().
|
|
*/
|
|
bool LayoutFrame(wxFrame* frame, wxWindow* mainWindow = NULL);
|
|
|
|
/**
|
|
Lays out the children of an MDI parent frame. If @a rect is non-@NULL, the
|
|
given rectangle will be used as a starting point instead of the frame's client
|
|
area.
|
|
The MDI client window is set to occupy the remaining space.
|
|
*/
|
|
bool LayoutMDIFrame(wxMDIParentFrame* frame, wxRect* rect = NULL);
|
|
|
|
/**
|
|
Lays out the children of a normal frame or other window.
|
|
@a mainWindow is set to occupy the remaining space. If this is not specified,
|
|
then
|
|
the last window that responds to a calculate layout event in query mode will
|
|
get the remaining space
|
|
(that is, a non-query OnCalculateLayout event will not be sent to this window
|
|
and the window will be set
|
|
to the remaining size).
|
|
*/
|
|
bool LayoutWindow(wxWindow* parent, wxWindow* mainWindow = NULL);
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
@class wxSashLayoutWindow
|
|
|
|
wxSashLayoutWindow responds to OnCalculateLayout events generated
|
|
by wxLayoutAlgorithm. It allows the
|
|
application to use simple accessors to specify how the window should be
|
|
laid out, rather than having to respond to events. The fact that
|
|
the class derives from wxSashWindow allows sashes to be used if required,
|
|
to allow the windows to be user-resizable.
|
|
|
|
The documentation for wxLayoutAlgorithm explains
|
|
the purpose of this class in more detail.
|
|
|
|
@library{wxadv}
|
|
@category{miscwnd}
|
|
|
|
@see wxLayoutAlgorithm, wxSashWindow, @ref overview_eventhandlingoverview
|
|
*/
|
|
class wxSashLayoutWindow : public wxSashWindow
|
|
{
|
|
public:
|
|
//@{
|
|
/**
|
|
Constructs a sash layout window, which can be a child of a frame, dialog or any
|
|
other non-control window.
|
|
|
|
@param parent
|
|
Pointer to a parent window.
|
|
@param id
|
|
Window identifier. If -1, will automatically create an identifier.
|
|
@param pos
|
|
Window position. wxDefaultPosition is (-1, -1) which indicates that
|
|
wxSashLayoutWindows
|
|
should generate a default position for the window. If using the
|
|
wxSashLayoutWindow class directly, supply
|
|
an actual position.
|
|
@param size
|
|
Window size. wxDefaultSize is (-1, -1) which indicates that
|
|
wxSashLayoutWindows
|
|
should generate a default size for the window.
|
|
@param style
|
|
Window style. For window styles, please see wxSashLayoutWindow.
|
|
@param name
|
|
Window name.
|
|
*/
|
|
wxSashLayoutWindow();
|
|
wxSashLayoutWindow(wxSashLayoutWindow* parent, wxWindowID id,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& size = wxDefaultSize,
|
|
long style = wxCLIP_CHILDREN | wxSW_3D,
|
|
const wxString& name = "layoutWindow");
|
|
//@}
|
|
|
|
/**
|
|
Initializes a sash layout window, which can be a child of a frame, dialog or
|
|
any other non-control window.
|
|
|
|
@param parent
|
|
Pointer to a parent window.
|
|
@param id
|
|
Window identifier. If -1, will automatically create an identifier.
|
|
@param pos
|
|
Window position. wxDefaultPosition is (-1, -1) which indicates that
|
|
wxSashLayoutWindows
|
|
should generate a default position for the window. If using the
|
|
wxSashLayoutWindow class directly, supply
|
|
an actual position.
|
|
@param size
|
|
Window size. wxDefaultSize is (-1, -1) which indicates that
|
|
wxSashLayoutWindows
|
|
should generate a default size for the window.
|
|
@param style
|
|
Window style. For window styles, please see wxSashLayoutWindow.
|
|
@param name
|
|
Window name.
|
|
*/
|
|
bool Create(wxSashLayoutWindow* parent, wxWindowID id,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& size = wxDefaultSize,
|
|
long style = wxCLIP_CHILDREN | wxSW_3D,
|
|
const wxString& name = "layoutWindow");
|
|
|
|
/**
|
|
Returns the alignment of the window: one of wxLAYOUT_TOP, wxLAYOUT_LEFT,
|
|
wxLAYOUT_RIGHT, wxLAYOUT_BOTTOM.
|
|
*/
|
|
wxLayoutAlignment GetAlignment() const;
|
|
|
|
/**
|
|
Returns the orientation of the window: one of wxLAYOUT_HORIZONTAL,
|
|
wxLAYOUT_VERTICAL.
|
|
*/
|
|
wxLayoutOrientation GetOrientation() const;
|
|
|
|
/**
|
|
The default handler for the event that is generated by wxLayoutAlgorithm. The
|
|
implementation
|
|
of this function calls wxCalculateLayoutEvent::SetRect to shrink the provided
|
|
size according to
|
|
how much space this window takes up. For further details,
|
|
see wxLayoutAlgorithm and wxCalculateLayoutEvent.
|
|
*/
|
|
void OnCalculateLayout(wxCalculateLayoutEvent& event);
|
|
|
|
/**
|
|
The default handler for the event that is generated by OnCalculateLayout to get
|
|
size, alignment and orientation information for the window. The implementation
|
|
of this function uses member variables as set by accessors called by the
|
|
application.
|
|
For further details, see wxLayoutAlgorithm and wxQueryLayoutInfoEvent.
|
|
*/
|
|
void OnQueryLayoutInfo(wxQueryLayoutInfoEvent& event);
|
|
|
|
/**
|
|
Sets the alignment of the window (which edge of the available parent client
|
|
area the window
|
|
is attached to). @a alignment is one of wxLAYOUT_TOP, wxLAYOUT_LEFT,
|
|
wxLAYOUT_RIGHT, wxLAYOUT_BOTTOM.
|
|
*/
|
|
void SetAlignment(wxLayoutAlignment alignment);
|
|
|
|
/**
|
|
Sets the default dimensions of the window. The dimension other than the
|
|
orientation will be fixed to this
|
|
value, and the orientation dimension will be ignored and the window stretched
|
|
to fit the available space.
|
|
*/
|
|
void SetDefaultSize(const wxSize& size);
|
|
|
|
/**
|
|
Sets the orientation of the window (the direction the window will stretch in,
|
|
to fill the available
|
|
parent client area). @a orientation is one of wxLAYOUT_HORIZONTAL,
|
|
wxLAYOUT_VERTICAL.
|
|
*/
|
|
void SetOrientation(wxLayoutOrientation orientation);
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
@class wxQueryLayoutInfoEvent
|
|
|
|
This event is sent when wxLayoutAlgorithm wishes to get
|
|
the size, orientation and alignment of a window. More precisely, the event is
|
|
sent
|
|
by the OnCalculateLayout handler which is itself invoked by wxLayoutAlgorithm.
|
|
|
|
@library{wxadv}
|
|
@category{events}
|
|
|
|
@see wxCalculateLayoutEvent, wxSashLayoutWindow, wxLayoutAlgorithm.
|
|
*/
|
|
class wxQueryLayoutInfoEvent : public wxEvent
|
|
{
|
|
public:
|
|
/**
|
|
Constructor.
|
|
*/
|
|
wxQueryLayoutInfoEvent(wxWindowID id = 0);
|
|
|
|
/**
|
|
Specifies the alignment of the window (which side of the remaining parent
|
|
client area
|
|
the window sticks to). One of wxLAYOUT_TOP, wxLAYOUT_LEFT, wxLAYOUT_RIGHT,
|
|
wxLAYOUT_BOTTOM.
|
|
*/
|
|
void GetAlignment() const;
|
|
|
|
/**
|
|
Returns the flags associated with this event. Not currently used.
|
|
*/
|
|
int GetFlags() const;
|
|
|
|
/**
|
|
Returns the orientation that the event handler specified to the event object.
|
|
May be one of wxLAYOUT_HORIZONTAL,
|
|
wxLAYOUT_VERTICAL.
|
|
*/
|
|
wxLayoutOrientation GetOrientation() const;
|
|
|
|
/**
|
|
Returns the requested length of the window in the direction of the window
|
|
orientation. This information
|
|
is not yet used.
|
|
*/
|
|
int GetRequestedLength() const;
|
|
|
|
/**
|
|
Returns the size that the event handler specified to the event object as being
|
|
the requested size of the window.
|
|
*/
|
|
wxSize GetSize() const;
|
|
|
|
/**
|
|
Call this to specify the alignment of the window (which side of the remaining
|
|
parent client area
|
|
the window sticks to). May be one of wxLAYOUT_TOP, wxLAYOUT_LEFT,
|
|
wxLAYOUT_RIGHT, wxLAYOUT_BOTTOM.
|
|
*/
|
|
void SetAlignment(wxLayoutAlignment alignment);
|
|
|
|
/**
|
|
Sets the flags associated with this event. Not currently used.
|
|
*/
|
|
void SetFlags(int flags);
|
|
|
|
/**
|
|
Call this to specify the orientation of the window. May be one of
|
|
wxLAYOUT_HORIZONTAL,
|
|
wxLAYOUT_VERTICAL.
|
|
*/
|
|
void SetOrientation(wxLayoutOrientation orientation);
|
|
|
|
/**
|
|
Sets the requested length of the window in the direction of the window
|
|
orientation. This information
|
|
is not yet used.
|
|
*/
|
|
void SetRequestedLength(int length);
|
|
|
|
/**
|
|
Call this to let the calling code know what the size of the window is.
|
|
*/
|
|
void SetSize(const wxSize& size);
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
@class wxCalculateLayoutEvent
|
|
|
|
This event is sent by wxLayoutAlgorithm to
|
|
calculate the amount of the remaining client area that the window should
|
|
occupy.
|
|
|
|
@library{wxadv}
|
|
@category{events}
|
|
|
|
@see wxQueryLayoutInfoEvent, wxSashLayoutWindow, wxLayoutAlgorithm.
|
|
*/
|
|
class wxCalculateLayoutEvent : public wxEvent
|
|
{
|
|
public:
|
|
/**
|
|
Constructor.
|
|
*/
|
|
wxCalculateLayoutEvent(wxWindowID id = 0);
|
|
|
|
/**
|
|
Returns the flags associated with this event. Not currently used.
|
|
*/
|
|
int GetFlags() const;
|
|
|
|
/**
|
|
Before the event handler is entered, returns the remaining parent client area
|
|
that the window
|
|
could occupy. When the event handler returns, this should contain the remaining
|
|
parent client rectangle,
|
|
after the event handler has subtracted the area that its window occupies.
|
|
*/
|
|
wxRect GetRect() const;
|
|
|
|
/**
|
|
Sets the flags associated with this event. Not currently used.
|
|
*/
|
|
void SetFlags(int flags);
|
|
|
|
/**
|
|
Call this to specify the new remaining parent client area, after the space
|
|
occupied by the
|
|
window has been subtracted.
|
|
*/
|
|
void SetRect(const wxRect& rect);
|
|
};
|
|
|