[ 1573855 ] Improved appearance of wxComboCtrl's wxTextCtrl

More work needs to be done for the version with
 images.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41835 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling 2006-10-09 20:12:19 +00:00
parent fba93835f5
commit 8e9ec7239f
3 changed files with 102 additions and 14 deletions

View File

@ -65,6 +65,8 @@ public:
virtual ~wxGenericComboCtrl();
void SetCustomPaintWidth( int width );
virtual bool IsKeyPopupToggle(const wxKeyEvent& event) const;
static int GetFeatures() { return wxComboCtrlFeatures::All; }

View File

@ -697,6 +697,9 @@ wxComboCtrlBase::CreateTextCtrl(int style, const wxValidator& validator)
{
if ( !(m_windowStyle & wxCB_READONLY) )
{
if ( m_text )
m_text->Destroy();
// wxTE_PROCESS_TAB is needed because on Windows, wxTAB_TRAVERSAL is
// not used by the wxPropertyGrid and therefore the tab is processed by
// looking at ancestors to see if they have wxTAB_TRAVERSAL. The
@ -906,9 +909,10 @@ void wxComboCtrlBase::PositionTextCtrl( int textCtrlXAdjust, int textCtrlYAdjust
}
else
{
// If it has border, have textctrl will the entire text field.
m_text->SetSize( m_tcArea.x,
0,
sz.x - m_btnArea.x - m_widthCustomPaint - customBorder,
sz.x - m_btnArea.width - m_widthCustomPaint - customBorder,
sz.y );
}
}

View File

@ -110,15 +110,16 @@ bool wxGenericComboCtrl::Create(wxWindow *parent,
const wxValidator& validator,
const wxString& name)
{
// Set border
//
// Note that technically we only support 'default' border and wxNO_BORDER.
long border = style & wxBORDER_MASK;
int tcBorder = wxNO_BORDER;
if ( !border )
{
#if defined(__WXUNIVERSAL__)
if ( !border )
border = wxBORDER_SIMPLE;
#elif defined(__WXMSW__)
if ( !border )
// For XP, have 1-width custom border, for older version use sunken
/*if ( wxUxThemeEngine::GetIfActive() )
{
@ -127,22 +128,42 @@ bool wxGenericComboCtrl::Create(wxWindow *parent,
}
else*/
border = wxBORDER_SUNKEN;
#elif defined(__WXGTK__)
border = wxBORDER_NONE;
//m_widthCustomBorder = 2;
m_widthCustomBorder = 1;
#else
border = wxBORDER_SIMPLE;
#endif
style = (style & ~(wxBORDER_MASK)) | border;
//
// Generic version is optimized for wxGTK
//
#define UNRELIABLE_TEXTCTRL_BORDER
if ( !border )
{
if ( style & wxCB_READONLY )
{
m_widthCustomBorder = 1;
}
else
{
m_widthCustomBorder = 0;
tcBorder = 0;
}
}
else
{
// Have textctrl instead use the border given.
tcBorder = border;
}
#if defined(__WXGTK__)
// Because we are going to have button outside the border,
// let's use wxBORDER_NONE for the whole control.
border = wxBORDER_NONE;
Customize( wxCC_BUTTON_OUTSIDE_BORDER |
wxCC_NO_TEXT_AUTO_SELECT );
#endif
style = (style & ~(wxBORDER_MASK)) | border;
if ( style & wxCC_STD_BUTTON )
m_iFlags |= wxCC_POPUP_ON_MOUSE_UP;
@ -158,7 +179,7 @@ bool wxGenericComboCtrl::Create(wxWindow *parent,
return false;
// Create textctrl, if necessary
CreateTextCtrl( wxNO_BORDER, validator );
CreateTextCtrl( tcBorder, validator );
// Add keyboard input handlers for main control and textctrl
InstallInputHandlers();
@ -323,6 +344,67 @@ void wxGenericComboCtrl::OnMouseEvent( wxMouseEvent& event )
}
void wxGenericComboCtrl::SetCustomPaintWidth( int width )
{
#ifdef UNRELIABLE_TEXTCTRL_BORDER
//
// If starting/stopping to show an image in front
// of a writable text-field, then re-create textctrl
// with different kind of border (because we can't
// assume that textctrl fully supports wxNO_BORDER).
//
wxTextCtrl* tc = GetTextCtrl();
if ( tc && (m_iFlags & wxCC_BUTTON_OUTSIDE_BORDER) )
{
int borderType = tc->GetWindowStyle() & wxBORDER_MASK;
int tcCreateStyle = -1;
if ( width > 0 )
{
// Re-create textctrl with no border
if ( borderType != wxNO_BORDER )
{
m_widthCustomBorder = 1;
tcCreateStyle = wxNO_BORDER;
}
}
else if ( width == 0 )
{
// Re-create textctrl with normal border
if ( borderType == wxNO_BORDER )
{
m_widthCustomBorder = 0;
tcCreateStyle = 0;
}
}
// Common textctrl re-creation code
if ( tcCreateStyle != -1 )
{
tc->RemoveEventHandler(m_textEvtHandler);
delete m_textEvtHandler;
wxValidator* pValidator = tc->GetValidator();
if ( pValidator )
{
pValidator = (wxValidator*) pValidator->Clone();
CreateTextCtrl( tcCreateStyle, *pValidator );
delete pValidator;
}
else
{
CreateTextCtrl( tcCreateStyle, wxDefaultValidator );
}
InstallInputHandlers();
}
}
#endif // UNRELIABLE_TEXTCTRL_BORDER
wxComboCtrlBase::SetCustomPaintWidth( width );
}
bool wxGenericComboCtrl::IsKeyPopupToggle(const wxKeyEvent& event) const
{
int keycode = event.GetKeyCode();