Files
wxWidgets/src/xrc/xh_odcombo.cpp
Vadim Zeitlin 52635cfc10 Reuse the same XRC function for all translations
Translate all strings in the new GetNodeText() function replacing the
old GetText() which was mostly used for translatable strings before --
except that <item> tag contents didn't use it because it also performed
string unescaping, not wanted for the control items, in addition to
translation.

Replace the old GetText() (while still keeping it for compatibility,
i.e. to avoid breaking any custom XRC handlers using it) with the new
function which is more flexible and can be used for all tags.

No real changes, this is just a refactoring.
2018-01-11 01:19:16 +01:00

116 lines
3.4 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: src/xrc/xh_odcombo.cpp
// Purpose: XRC resource for wxRadioBox
// Author: Alex Bligh - Based on src/xrc/xh_combo.cpp
// Created: 2006/06/19
// Copyright: (c) 2006 Alex Bligh
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#if wxUSE_XRC && wxUSE_ODCOMBOBOX
#include "wx/xrc/xh_odcombo.h"
#ifndef WX_PRECOMP
#include "wx/intl.h"
#include "wx/textctrl.h"
#endif
#include "wx/odcombo.h"
#include "wx/xml/xml.h"
wxIMPLEMENT_DYNAMIC_CLASS(wxOwnerDrawnComboBoxXmlHandler, wxXmlResourceHandler);
wxOwnerDrawnComboBoxXmlHandler::wxOwnerDrawnComboBoxXmlHandler()
:wxXmlResourceHandler()
,m_insideBox(false)
{
XRC_ADD_STYLE(wxCB_SIMPLE);
XRC_ADD_STYLE(wxCB_SORT);
XRC_ADD_STYLE(wxCB_READONLY);
XRC_ADD_STYLE(wxCB_DROPDOWN);
XRC_ADD_STYLE(wxODCB_STD_CONTROL_PAINT);
XRC_ADD_STYLE(wxODCB_DCLICK_CYCLES);
XRC_ADD_STYLE(wxTE_PROCESS_ENTER);
AddWindowStyles();
}
wxObject *wxOwnerDrawnComboBoxXmlHandler::DoCreateResource()
{
if( m_class == wxT("wxOwnerDrawnComboBox"))
{
// find the selection
long selection = GetLong( wxT("selection"), -1 );
// need to build the list of strings from children
m_insideBox = true;
CreateChildrenPrivately(NULL, GetParamNode(wxT("content")));
XRC_MAKE_INSTANCE(control, wxOwnerDrawnComboBox)
control->Create(m_parentAsWindow,
GetID(),
GetText(wxT("value")),
GetPosition(), GetSize(),
strList,
GetStyle(),
wxDefaultValidator,
GetName());
wxSize sizeBtn=GetSize(wxT("buttonsize"));
if (sizeBtn != wxDefaultSize)
control->SetButtonPosition(sizeBtn.GetWidth(), sizeBtn.GetHeight());
if (selection != -1)
control->SetSelection(selection);
SetupWindow(control);
strList.Clear(); // dump the strings
return control;
}
else
{
// on the inside now.
// handle <item>Label</item>
// add to the list
strList.Add(GetNodeText(m_node, wxXRC_TEXT_NO_ESCAPE));
return NULL;
}
}
bool wxOwnerDrawnComboBoxXmlHandler::CanHandle(wxXmlNode *node)
{
#if wxCHECK_VERSION(2,7,0)
return (IsOfClass(node, wxT("wxOwnerDrawnComboBox")) ||
(m_insideBox && node->GetName() == wxT("item")));
#else
// Avoid GCC bug - this fails on certain GCC 3.3 and 3.4 builds for an unknown reason
// it is believed to be related to the fact IsOfClass is inline, and node->GetAttribute
// gets passed an invalid "this" pointer. On 2.7, the function is out of line, so the
// above should work fine. This code is left in here so this file can easily be used
// in a version backported to 2.6. All we are doing here is expanding the macro
bool fOurClass = node->GetAttribute(wxT("class"), wxEmptyString) == wxT("wxOwnerDrawnComboBox");
return (fOurClass ||
(m_insideBox && node->GetName() == wxT("item")));
#endif
}
#endif // wxUSE_XRC && wxUSE_ODCOMBOBOX