1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        src/univ/control.cpp 
   3 // Purpose:     universal wxControl: adds handling of mnemonics 
   4 // Author:      Vadim Zeitlin 
   8 // Copyright:   (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) 
   9 // Licence:     wxWindows license 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 // ============================================================================ 
  14 // ============================================================================ 
  17     #pragma implementation "control.h" 
  20 // ---------------------------------------------------------------------------- 
  22 // ---------------------------------------------------------------------------- 
  24 #include "wx/wxprec.h" 
  34     #include "wx/control.h" 
  35     #include "wx/dcclient.h" 
  38 #include "wx/univ/renderer.h" 
  39 #include "wx/univ/inphand.h" 
  40 #include "wx/univ/theme.h" 
  42 // ============================================================================ 
  44 // ============================================================================ 
  46 IMPLEMENT_DYNAMIC_CLASS(wxControl
, wxWindow
) 
  48 BEGIN_EVENT_TABLE(wxControl
, wxControlBase
) 
  49     WX_EVENT_TABLE_INPUT_CONSUMER(wxControl
) 
  52 WX_FORWARD_TO_INPUT_CONSUMER(wxControl
) 
  54 // ---------------------------------------------------------------------------- 
  56 // ---------------------------------------------------------------------------- 
  58 void wxControl::Init() 
  62     m_inputHandler 
= (wxInputHandler 
*)NULL
; 
  65 bool wxControl::Create(wxWindow 
*parent
, 
  70                        const wxValidator
& validator
, 
  73     // we use wxNO_FULL_REPAINT_ON_RESIZE by default as it results in much 
  74     // less flicker and none of the standard controls needs to be entirely 
  75     // repainted after resize anyhow 
  76     if ( !wxControlBase::Create(parent
, id
, pos
, size
, 
  77                                 style 
| wxNO_FULL_REPAINT_ON_RESIZE
, 
  80         // underlying window creation failed? 
  87 // ---------------------------------------------------------------------------- 
  89 // ---------------------------------------------------------------------------- 
  92 int wxControl::FindAccelIndex(const wxString
& label
, wxString 
*labelOnly
) 
  94     // the character following MNEMONIC_PREFIX is the accelerator for this 
  95     // control unless it is MNEMONIC_PREFIX too - this allows to insert 
  96     // literal MNEMONIC_PREFIX chars into the label 
  97     static const wxChar MNEMONIC_PREFIX 
= _T('&'); 
 102         labelOnly
->Alloc(label
.length()); 
 106     for ( const wxChar 
*pc 
= label
; *pc 
!= wxT('\0'); pc
++ ) 
 108         if ( *pc 
== MNEMONIC_PREFIX 
) 
 111             if ( *pc 
!= MNEMONIC_PREFIX 
) 
 113                 if ( indexAccel 
== -1 ) 
 115                     // remember it (-1 is for MNEMONIC_PREFIX itself 
 116                     indexAccel 
= pc 
- label
.c_str() - 1; 
 120                     wxFAIL_MSG(_T("duplicate accel char in control label")); 
 134 void wxControl::SetLabel(const wxString
& label
) 
 136     wxString labelOld 
= m_label
; 
 137     m_indexAccel 
= FindAccelIndex(label
, &m_label
); 
 139     if ( m_label 
!= labelOld 
) 
 145 wxString 
wxControl::GetLabel() const 
 150 #endif // wxUSE_CONTROLS