[ 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:
parent
fba93835f5
commit
8e9ec7239f
@ -65,6 +65,8 @@ public:
|
||||
|
||||
virtual ~wxGenericComboCtrl();
|
||||
|
||||
void SetCustomPaintWidth( int width );
|
||||
|
||||
virtual bool IsKeyPopupToggle(const wxKeyEvent& event) const;
|
||||
|
||||
static int GetFeatures() { return wxComboCtrlFeatures::All; }
|
||||
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user