]>
git.saurik.com Git - wxWidgets.git/blob - src/univ/control.cpp
   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 licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 // ============================================================================ 
  14 // ============================================================================ 
  16 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) 
  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     if ( !wxControlBase::Create(parent
, id
, pos
, size
, style
, validator
, name
) ) 
  75         // underlying window creation failed? 
  82 // ---------------------------------------------------------------------------- 
  84 // ---------------------------------------------------------------------------- 
  87 int wxControl::FindAccelIndex(const wxString
& label
, wxString 
*labelOnly
) 
  89     // the character following MNEMONIC_PREFIX is the accelerator for this 
  90     // control unless it is MNEMONIC_PREFIX too - this allows to insert 
  91     // literal MNEMONIC_PREFIX chars into the label 
  92     static const wxChar MNEMONIC_PREFIX 
= _T('&'); 
  97         labelOnly
->Alloc(label
.length()); 
 101     for ( const wxChar 
*pc 
= label
; *pc 
!= wxT('\0'); pc
++ ) 
 103         if ( *pc 
== MNEMONIC_PREFIX 
) 
 106             if ( *pc 
!= MNEMONIC_PREFIX 
) 
 108                 if ( indexAccel 
== -1 ) 
 110                     // remember it (-1 is for MNEMONIC_PREFIX itself 
 111                     indexAccel 
= pc 
- label
.c_str() - 1; 
 115                     wxFAIL_MSG(_T("duplicate accel char in control label")); 
 129 void wxControl::SetLabel(const wxString
& label
) 
 131     wxString labelOld 
= m_label
; 
 132     m_indexAccel 
= FindAccelIndex(label
, &m_label
); 
 134     if ( m_label 
!= labelOld 
) 
 140 wxString 
wxControl::GetLabel() const 
 145 #endif // wxUSE_CONTROLS