Add support for wxGenericHyperlinkCtrl to XRC too

Allow to create the generic version of wxHyperlinkCtrl in addition to
the native one.
This commit is contained in:
Vadim Zeitlin
2025-06-14 23:36:20 +02:00
parent e934d8117c
commit 8713b52a2f
3 changed files with 55 additions and 12 deletions
+8
View File
@@ -1378,6 +1378,14 @@ page.
@endTable
@subsubsection xrc_wxgenerichyperlinkctrl wxGenericHyperlinkCtrl
This handler is identical to the one for @ref xrc_wxhyperlinkctrl
"wxHyperlinkCtrl", please see it for more information. The only difference is
that, for the platforms with a native wxHyperlinkCtrl implementation, using
this handler creates a generic control rather than a native one.
@subsubsection xrc_wxinfobar wxInfoBar
@beginTable
+10
View File
@@ -191,6 +191,7 @@ builtinWindowClasses =
| wxGauge
| wxGenericAnimationCtrl
| wxGenericDirCtrl
| wxGenericHyperlinkCtrl
| wxGrid
| wxHtmlWindow
| wxHyperlinkCtrl
@@ -297,6 +298,7 @@ builtinClassesNames =
| "wxGauge"
| "wxGenericAnimationCtrl"
| "wxGenericDirCtrl"
| "wxGenericHyperlinkCtrl"
| "wxGrid"
| "wxHtmlWindow"
| "wxHyperlinkCtrl"
@@ -1043,6 +1045,14 @@ wxGenericDirCtrl =
[xrc:p="o"] element defaultfilter {_, t_integer }*
}
wxGenericHyperlinkCtrl =
element object {
attribute class { "wxGenericHyperlinkCtrl" } &
stdObjectNodeAttributes &
stdWindowProperties &
[xrc:p="important"] element label {_, t_text }* &
[xrc:p="important"] element url {_, t_url }*
}
wxGrid =
element object {
+37 -12
View File
@@ -57,18 +57,42 @@ wxHyperlinkCtrlXmlHandler::wxHyperlinkCtrlXmlHandler()
wxObject *wxHyperlinkCtrlXmlHandler::DoCreateResource()
{
XRC_MAKE_INSTANCE(control, wxHyperlinkCtrl)
wxHyperlinkCtrlBase* control = nullptr;
if ( m_instance )
control = wxStaticCast(m_instance, wxHyperlinkCtrlBase);
control->Create
(
m_parentAsWindow,
GetID(),
GetText(wxT("label")),
GetParamValue(wxT("url")),
GetPosition(), GetSize(),
GetStyle(wxT("style"), wxHL_DEFAULT_STYLE),
GetName()
);
if ( !control )
{
if ( m_class == "wxHyperlinkCtrl" )
{
control = new wxHyperlinkCtrl
(
m_parentAsWindow,
GetID(),
GetText(wxT("label")),
GetParamValue(wxT("url")),
GetPosition(), GetSize(),
GetStyle(wxT("style"), wxHL_DEFAULT_STYLE),
GetName()
);
}
else // m_class must be "wxGenericHyperlinkCtrl"
{
control = new wxGenericHyperlinkCtrl
(
m_parentAsWindow,
GetID(),
GetText(wxT("label")),
GetParamValue(wxT("url")),
GetPosition(), GetSize(),
GetStyle(wxT("style"), wxHL_DEFAULT_STYLE),
GetName()
);
}
}
if ( GetBool("hidden", 0) == 1 )
control->Hide();
SetupWindow(control);
@@ -77,7 +101,8 @@ wxObject *wxHyperlinkCtrlXmlHandler::DoCreateResource()
bool wxHyperlinkCtrlXmlHandler::CanHandle(wxXmlNode *node)
{
return IsOfClass(node, wxT("wxHyperlinkCtrl"));
return IsOfClass(node, wxT("wxHyperlinkCtrl")) ||
IsOfClass(node, wxT("wxGenericHyperlinkCtrl"));
}
#endif // wxUSE_XRC && wxUSE_HYPERLINKCTRL