203 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
| /////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        statbox.h
 | |
| // Purpose:     interface of wxStaticBox
 | |
| // Author:      wxWidgets team
 | |
| // Licence:     wxWindows licence
 | |
| /////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| /**
 | |
|     @class wxStaticBox
 | |
| 
 | |
|     A static box is a rectangle drawn around other windows to denote
 | |
|     a logical grouping of items.
 | |
| 
 | |
|     Note that while the previous versions required that windows appearing
 | |
|     inside a static box be created as its siblings (i.e. use the same parent as
 | |
|     the static box itself), since wxWidgets 2.9.1 it is also possible to create
 | |
|     them as children of wxStaticBox itself and you are actually encouraged to
 | |
|     do it like this if compatibility with the previous versions is not
 | |
|     important.
 | |
| 
 | |
|     So the new recommended way to create static box is:
 | |
|     @code
 | |
|         void MyFrame::CreateControls()
 | |
|         {
 | |
|             wxPanel *panel = new wxPanel(this);
 | |
|             wxStaticBox *box = new wxStaticBox(panel, wxID_ANY, "StaticBox");
 | |
| 
 | |
|             new wxStaticText(box, wxID_ANY, "This window is a child of the staticbox");
 | |
|             ...
 | |
|         }
 | |
|     @endcode
 | |
| 
 | |
|     While the compatible -- and now deprecated -- way is
 | |
|     @code
 | |
|             wxStaticBox *box = new wxStaticBox(panel, wxID_ANY, "StaticBox");
 | |
| 
 | |
|             new wxStaticText(panel, wxID_ANY, "This window is a child of the panel");
 | |
|             ...
 | |
|     @endcode
 | |
| 
 | |
|     Also note that there is a specialized wxSizer class (wxStaticBoxSizer) which can
 | |
|     be used as an easier way to pack items into a static box.
 | |
| 
 | |
|     @library{wxcore}
 | |
|     @category{ctrl}
 | |
|     @appearance{staticbox}
 | |
| 
 | |
|     @see wxStaticText, wxStaticBoxSizer
 | |
| */
 | |
| class wxStaticBox : public wxControl
 | |
| {
 | |
| public:
 | |
|     /**
 | |
|       Default constructor
 | |
|     */
 | |
|     wxStaticBox();
 | |
| 
 | |
|     /**
 | |
|         Constructor, creating and showing a static box.
 | |
| 
 | |
|         @param parent
 | |
|             Parent window. Must not be @NULL.
 | |
|         @param id
 | |
|             Window identifier. The value wxID_ANY indicates a default value.
 | |
|         @param label
 | |
|             Text to be displayed in the static box, the empty string for no label.
 | |
|         @param pos
 | |
|             Window position.
 | |
|             If ::wxDefaultPosition is specified then a default position is chosen.
 | |
|         @param size
 | |
|             Checkbox size.
 | |
|             If ::wxDefaultSize is specified then a default size is chosen.
 | |
|         @param style
 | |
|             Window style. There are no wxStaticBox-specific styles, but generic
 | |
|             ::wxALIGN_LEFT, ::wxALIGN_CENTRE_HORIZONTAL and ::wxALIGN_RIGHT can
 | |
|             be used here to change the position of the static box label when
 | |
|             using wxGTK (these styles are ignored under the other platforms
 | |
|             currently).
 | |
|         @param name
 | |
|             Window name.
 | |
| 
 | |
|         @see Create()
 | |
|     */
 | |
|     wxStaticBox(wxWindow* parent, wxWindowID id,
 | |
|                 const wxString& label,
 | |
|                 const wxPoint& pos = wxDefaultPosition,
 | |
|                 const wxSize& size = wxDefaultSize,
 | |
|                 long style = 0,
 | |
|                 const wxString& name = wxStaticBoxNameStr);
 | |
| 
 | |
|     /**
 | |
|         Constructor for a static box using the given window as label.
 | |
| 
 | |
|         This constructor takes a pointer to an arbitrary window (although
 | |
|         usually a wxCheckBox or a wxRadioButton) instead of just the usual text
 | |
|         label and puts this window at the top of the box at the place where the
 | |
|         label would be shown.
 | |
| 
 | |
|         The @a label window must be a non-null, fully created window and will
 | |
|         become a child of this wxStaticBox, i.e. it will be owned by this
 | |
|         control and will be deleted when the wxStaticBox itself is deleted.
 | |
| 
 | |
|         An example of creating a wxStaticBox with window as a label:
 | |
|         @code
 | |
|         void MyFrame::CreateControls()
 | |
|         {
 | |
|             wxPanel* panel = new wxPanel(this);
 | |
|             wxCheckBox* checkbox = new wxCheckBox(panel, wxID_ANY, "Box checkbox");
 | |
|             wxStaticBox* box = new wxStaticBox(panel, wxID_ANY, checkbox);
 | |
|             ...
 | |
|         }
 | |
|         @endcode
 | |
| 
 | |
|         Currently this constructor is only available in wxGTK and wxMSW, use
 | |
|         @c wxHAS_WINDOW_LABEL_IN_STATIC_BOX to check whether it can be used at
 | |
|         compile-time.
 | |
| 
 | |
|         @since 3.1.1
 | |
|      */
 | |
|     wxStaticBox(wxWindow* parent, wxWindowID id,
 | |
|                 wxWindow* label,
 | |
|                 const wxPoint& pos = wxDefaultPosition,
 | |
|                 const wxSize& size = wxDefaultSize,
 | |
|                 long style = 0,
 | |
|                 const wxString& name = wxStaticBoxNameStr);
 | |
| 
 | |
|     /**
 | |
|         Destructor, destroying the group box.
 | |
|     */
 | |
|     virtual ~wxStaticBox();
 | |
| 
 | |
|     /**
 | |
|         Creates the static box for two-step construction.
 | |
|         See wxStaticBox() for further details.
 | |
|     */
 | |
|     bool Create(wxWindow* parent, wxWindowID id, const wxString& label,
 | |
|                 const wxPoint& pos = wxDefaultPosition,
 | |
|                 const wxSize& size = wxDefaultSize, long style = 0,
 | |
|                 const wxString& name = wxStaticBoxNameStr);
 | |
| 
 | |
|     /**
 | |
|         Creates the static box with the window as a label.
 | |
| 
 | |
|         This method can only be called for an object created using its default
 | |
|         constructor.
 | |
| 
 | |
|         See the constructor documentation for more details.
 | |
| 
 | |
|         Currently this overload is only available in wxGTK and wxMSW, use
 | |
|         @c wxHAS_WINDOW_LABEL_IN_STATIC_BOX to check whether it can be used at
 | |
|         compile-time.
 | |
| 
 | |
|         @since 3.1.1
 | |
|      */
 | |
|     bool Create(wxWindow* parent, wxWindowID id,
 | |
|                 wxWindow* label,
 | |
|                 const wxPoint& pos = wxDefaultPosition,
 | |
|                 const wxSize& size = wxDefaultSize,
 | |
|                 long style = 0,
 | |
|                 const wxString& name = wxStaticBoxNameStr);
 | |
| 
 | |
|     /**
 | |
|         Enables or disables the box without affecting its label window, if any.
 | |
| 
 | |
|         wxStaticBox overrides wxWindow::Enable() in order to avoid disabling
 | |
|         the control used as a label, if this box is using one. This is done in
 | |
|         order to allow using a wxCheckBox, for example, label and enable or
 | |
|         disable the box according to the state of the checkbox: if disabling
 | |
|         the box also disabled the checkbox in this situation, it would make it
 | |
|         impossible for the user to re-enable the box after disabling it, so the
 | |
|         checkbox stays enabled even if @c box->Enable(false) is called.
 | |
| 
 | |
|         However with the actual behaviour, implemented in this overridden
 | |
|         method, the following code (shown using C++11 only for convenience,
 | |
|         this behaviour is not C++11-specific):
 | |
|         @code
 | |
|             auto check = new wxCheckBox(parent, wxID_ANY, "Use the box");
 | |
|             auto box = new wxStaticBox(parent, wxID_ANY, check);
 | |
|             check->Bind(wxEVT_CHECKBOX,
 | |
|                         [box](wxCommandEvent& event) {
 | |
|                             box->Enable(event.IsChecked());
 | |
|                         });
 | |
|         @endcode
 | |
|         does work as expected.
 | |
| 
 | |
|         Please note that overriding Enable() to not actually disable this
 | |
|         window itself has two possibly unexpected consequences:
 | |
| 
 | |
|         - The box retains its enabled status, i.e. IsEnabled() still returns
 | |
|           @true, after calling @c Enable(false).
 | |
|         - The box children are enabled or disabled when the box is, which can
 | |
|           result in the loss of their original state. E.g. if a box child is
 | |
|           initially disabled, then the box itself is disabled and, finally, the
 | |
|           box is enabled again, this child will end up being enabled too (this
 | |
|           wouldn't happen with any other parent window as its children would
 | |
|           inherit the disabled state from the parent instead of being really
 | |
|           disabled themselves when it is disabled). To avoid this problem,
 | |
|           consider using ::wxEVT_UPDATE_UI to ensure that the child state is
 | |
|           always correct or restoring it manually after re-enabling the box.
 | |
|      */
 | |
|     virtual bool Enable(bool enable = true);
 | |
| };
 |