Add possibility to create "Close" bitmap button from XRC

This requires refactoring NewCloseButton() in order to extract
CreateCloseButton() from it, as XRC relies on being able to use two-step
creation which was previously impossible for this kind of buttons.

CreateCloseButton() is rather unusual, as it has to be declared in the
derived, platform-specific class, in order to be able to call its
Create(), but is defined only once in common, platform-independent,
code. However the only alternative seems to be to have a static
function, e.g. InitCloseButton(), which wouldn't be very pretty neither.

Closes https://github.com/wxWidgets/wxWidgets/pull/2118
This commit is contained in:
Vadim Zeitlin
2020-11-16 19:33:57 +01:00
parent b4338a30e1
commit 712c2d4004
13 changed files with 112 additions and 26 deletions

View File

@@ -65,11 +65,25 @@ public:
validator, name);
}
/*
Derived classes also need to declare, but not define, as it's done in
common code in bmpbtncmn.cpp, the following function:
bool CreateCloseButton(wxWindow* parent,
wxWindowID winid,
const wxString& name = wxString());
which is used used by NewCloseButton(), and, as Create(), must be
called on default-constructed wxBitmapButton object.
*/
// Special creation function for a standard "Close" bitmap. It allows to
// simply create a close button with the image appropriate for the current
// platform.
static wxBitmapButton* NewCloseButton(wxWindow* parent, wxWindowID winid);
static wxBitmapButton*
NewCloseButton(wxWindow* parent,
wxWindowID winid,
const wxString& name = wxString());
// set/get the margins around the button
virtual void SetMargins(int x, int y)

View File

@@ -39,6 +39,9 @@ public:
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxASCII_STR(wxButtonNameStr));
bool CreateCloseButton(wxWindow* parent,
wxWindowID winid,
const wxString& name = wxString());
private:
wxDECLARE_DYNAMIC_CLASS(wxBitmapButton);
};

View File

@@ -42,6 +42,10 @@ public:
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxASCII_STR(wxButtonNameStr));
bool CreateCloseButton(wxWindow* parent,
wxWindowID winid,
const wxString& name = wxString());
void SetLabel( const wxString &label );
virtual void SetLabel( const wxBitmap& bitmap ) { SetBitmapLabel(bitmap); }

View File

@@ -35,6 +35,9 @@ public:
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxASCII_STR(wxButtonNameStr));
bool CreateCloseButton(wxWindow* parent,
wxWindowID winid,
const wxString& name = wxString());
// Implementation
virtual void ChangeBackgroundColour();

View File

@@ -41,6 +41,9 @@ public:
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxASCII_STR(wxButtonNameStr));
bool CreateCloseButton(wxWindow* parent,
wxWindowID winid,
const wxString& name = wxString());
protected:
wxDECLARE_EVENT_TABLE();
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxBitmapButton);

View File

@@ -37,6 +37,9 @@ public:
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxASCII_STR(wxButtonNameStr));
bool CreateCloseButton(wxWindow* parent,
wxWindowID winid,
const wxString& name = wxString());
protected:
virtual wxSize DoGetBestSize() const wxOVERRIDE;

View File

@@ -30,6 +30,11 @@ public:
long style = 0,
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxASCII_STR(wxButtonNameStr));
bool CreateCloseButton(wxWindow* parent,
wxWindowID winid,
const wxString& name = wxString());
protected:
wxDECLARE_DYNAMIC_CLASS(wxBitmapButton);

View File

@@ -37,6 +37,11 @@ public:
const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxASCII_STR(wxButtonNameStr));
bool CreateCloseButton(wxWindow* parent,
wxWindowID winid,
const wxString& name = wxString());
virtual void SetMargins(int x, int y) wxOVERRIDE
{
SetBitmapMargins(x, y);