///////////////////////////////////////////////////////////////////////////// // Name: src/common/ctrlcmn.cpp // Purpose: wxControl common interface // Author: Vadim Zeitlin // Modified by: // Created: 26.07.99 // RCS-ID: $Id: ctrlcmn.cpp 40329 2006-07-25 18:40:04Z VZ $ // Copyright: (c) wxWidgets team // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ // declarations // ============================================================================ // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #if wxUSE_CONTROLS #include "wx/control.h" #ifndef WX_PRECOMP #include "wx/log.h" #include "wx/radiobut.h" #include "wx/statbmp.h" #include "wx/bitmap.h" #include "wx/utils.h" // for wxStripMenuCodes() #endif const wxChar wxControlNameStr[] = wxT("control"); // ============================================================================ // implementation // ============================================================================ wxControlBase::~wxControlBase() { // this destructor is required for Darwin } bool wxControlBase::Create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, long style, const wxValidator& wxVALIDATOR_PARAM(validator), const wxString &name) { bool ret = wxWindow::Create(parent, id, pos, size, style, name); #if wxUSE_VALIDATORS if ( ret ) SetValidator(validator); #endif // wxUSE_VALIDATORS return ret; } bool wxControlBase::CreateControl(wxWindowBase *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { // even if it's possible to create controls without parents in some port, // it should surely be discouraged because it doesn't work at all under // Windows wxCHECK_MSG( parent, false, wxT("all controls must have parents") ); if ( !CreateBase(parent, id, pos, size, style, validator, name) ) return false; parent->AddChild(this); 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); } void wxControlBase::InitCommandEvent(wxCommandEvent& event) const { event.SetEventObject((wxControlBase *)this); // const_cast // event.SetId(GetId()); -- this is usuall done in the event ctor switch ( m_clientDataType ) { case wxClientData_Void: event.SetClientData(GetClientData()); break; case wxClientData_Object: event.SetClientObject(GetClientObject()); break; case wxClientData_None: // nothing to do ; } } void wxControlBase::SetLabel( const wxString &label ) { InvalidateBestSize(); wxWindow::SetLabel(label); } bool wxControlBase::SetFont(const wxFont& font) { InvalidateBestSize(); return wxWindow::SetFont(font); } // wxControl-specific processing after processing the update event void wxControlBase::DoUpdateWindowUI(wxUpdateUIEvent& event) { // call inherited wxWindowBase::DoUpdateWindowUI(event); // update label if ( event.GetSetText() ) { if ( event.GetText() != GetLabel() ) SetLabel(event.GetText()); } // Unfortunately we don't yet have common base class for // wxRadioButton, so we handle updates of radiobuttons here. // TODO: If once wxRadioButtonBase will exist, move this code there. #if wxUSE_RADIOBTN if ( event.GetSetChecked() ) { wxRadioButton *radiobtn = wxDynamicCastThis(wxRadioButton); if ( radiobtn ) radiobtn->SetValue(event.GetChecked()); } #endif // wxUSE_RADIOBTN } // ---------------------------------------------------------------------------- // wxStaticBitmap // ---------------------------------------------------------------------------- #if wxUSE_STATBMP wxStaticBitmapBase::~wxStaticBitmapBase() { // this destructor is required for Darwin } wxSize wxStaticBitmapBase::DoGetBestSize() const { wxSize best; wxBitmap bmp = GetBitmap(); if ( bmp.Ok() ) best = wxSize(bmp.GetWidth(), bmp.GetHeight()); else // this is completely arbitrary best = wxSize(16, 16); CacheBestSize(best); return best; } #endif // wxUSE_STATBMP #endif // wxUSE_CONTROLS