X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0e2d29867082dec183b9363e913fa7a7dd29862a..fcdd53359135f790b85728c4254b97095a56dad8:/src/common/ctrlcmn.cpp diff --git a/src/common/ctrlcmn.cpp b/src/common/ctrlcmn.cpp index 7265096e4a..1ded2306b5 100644 --- a/src/common/ctrlcmn.cpp +++ b/src/common/ctrlcmn.cpp @@ -26,16 +26,17 @@ #if wxUSE_CONTROLS +#include "wx/control.h" + #ifndef WX_PRECOMP - #include "wx/control.h" #include "wx/log.h" #include "wx/radiobut.h" + #include "wx/statbmp.h" + #include "wx/bitmap.h" + #include "wx/utils.h" // for wxStripMenuCodes() #endif -#if wxUSE_STATBMP - #include "wx/bitmap.h" - #include "wx/statbmp.h" -#endif // wxUSE_STATBMP +const char wxControlNameStr[] = "control"; // ============================================================================ // implementation @@ -85,6 +86,13 @@ bool wxControlBase::CreateControl(wxWindowBase *parent, return true; } +/* static */ +wxString wxControlBase::GetLabelText(const wxString& label) +{ + // we don't want strip the TABs here, just the mnemonics + return wxStripMenuCodes(label, wxStrip_Mnemonics); +} + void wxControlBase::Command(wxCommandEvent& event) { (void)GetEventHandler()->ProcessEvent(event); @@ -112,13 +120,6 @@ void wxControlBase::InitCommandEvent(wxCommandEvent& event) const } } - -void wxControlBase::SetLabel( const wxString &label ) -{ - InvalidateBestSize(); - wxWindow::SetLabel(label); -} - bool wxControlBase::SetFont(const wxFont& font) { InvalidateBestSize(); @@ -151,6 +152,63 @@ void wxControlBase::DoUpdateWindowUI(wxUpdateUIEvent& event) #endif // wxUSE_RADIOBTN } +/* static */ +wxString wxControlBase::RemoveMnemonics(const wxString& str) +{ + return wxStripMenuCodes(str, wxStrip_Mnemonics); +} + +/* static */ +int wxControlBase::FindAccelIndex(const wxString& label, wxString *labelOnly) +{ + // the character following MNEMONIC_PREFIX is the accelerator for this + // control unless it is MNEMONIC_PREFIX too - this allows to insert + // literal MNEMONIC_PREFIX chars into the label + static const wxChar MNEMONIC_PREFIX = _T('&'); + + if ( labelOnly ) + { + labelOnly->Empty(); + labelOnly->Alloc(label.length()); + } + + int indexAccel = -1; + for ( wxString::const_iterator pc = label.begin(); pc != label.end(); ++pc ) + { + if ( *pc == MNEMONIC_PREFIX ) + { + ++pc; // skip it + if ( pc == label.end() ) + break; + else if ( *pc != MNEMONIC_PREFIX ) + { + if ( indexAccel == -1 ) + { + // remember it (-1 is for MNEMONIC_PREFIX itself + indexAccel = pc - label.begin() - 1; + } + else + { + wxFAIL_MSG(_T("duplicate accel char in control label")); + } + } + } + + if ( labelOnly ) + { + *labelOnly += *pc; + } + } + + return indexAccel; +} + +wxBorder wxControlBase::GetDefaultBorder() const +{ + return wxBORDER_THEME; +} + + // ---------------------------------------------------------------------------- // wxStaticBitmap // ----------------------------------------------------------------------------