Use new wxTextEntry implementation on OS/2.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50067 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Neis 2007-11-18 22:55:54 +00:00
parent 591a3be426
commit 72cb72bf82
4 changed files with 41 additions and 187 deletions

View File

@ -13,11 +13,13 @@
#define _WX_COMBOBOX_H_
#include "wx/choice.h"
#include "wx/textentry.h"
#if wxUSE_COMBOBOX
// Combobox item
class WXDLLEXPORT wxComboBox : public wxChoice
class WXDLLEXPORT wxComboBox : public wxChoice,
public wxTextEntry
{
public:
@ -94,35 +96,22 @@ class WXDLLEXPORT wxComboBox : public wxChoice
,const wxString& rsName = wxComboBoxNameStr
);
//
// List functions: see wxChoice
//
virtual wxString GetValue(void) const;
virtual void SetValue(const wxString& rsValue);
// resolve ambiguities among virtual functions inherited from both base
// classes
virtual void Clear();
virtual wxString GetValue() const;
virtual void SetValue(const wxString& value);
virtual wxString GetStringSelection() const
{ return wxChoice::GetStringSelection(); }
//
// Clipboard operations
//
virtual void Copy();
virtual void Cut();
virtual void Paste();
virtual void SetInsertionPoint(long lPos);
virtual void SetInsertionPointEnd(void);
virtual long GetInsertionPoint(void) const;
virtual wxTextPos GetLastPosition(void) const;
virtual void Replace( long lFrom
,long lTo
,const wxString& rsValue
);
virtual void Remove( long lFrom
,long lTo
);
inline virtual void SetSelection(int n) { wxChoice::SetSelection(n); }
virtual void SetSelection( long lFrom
,long lTo
);
virtual void SetEditable(bool bEditable);
virtual void SetSelection(long from, long to)
{ wxTextEntry::SetSelection(from, to); }
virtual int GetSelection() const { return wxChoice::GetSelection(); }
virtual void GetSelection(long *from, long *to) const
{ wxTextEntry::GetSelection(from, to); }
virtual bool IsEditable() const;
virtual bool OS2Command( WXUINT uParam
,WXWORD wId
@ -133,6 +122,10 @@ class WXDLLEXPORT wxComboBox : public wxChoice
);
private:
// implement wxTextEntry pure virtual: it implements all the operations for
// the simple EDIT controls
virtual WXHWND GetEditHWND() const { return m_hWnd; }
DECLARE_DYNAMIC_CLASS(wxComboBox)
}; // end of CLASS wxComboBox

View File

@ -185,6 +185,10 @@ protected:
bool m_bSkipUpdate;
private:
// implement wxTextEntry pure virtual: it implements all the operations for
// the simple EDIT controls
virtual WXHWND GetEditHWND() const { return m_hWnd; }
bool m_bIsMLE;
DECLARE_EVENT_TABLE()
DECLARE_DYNAMIC_CLASS(wxTextCtrl)

View File

@ -209,6 +209,8 @@ private:
#include "wx/msw/textentry.h"
#elif defined(__WXMOTIF__)
#include "wx/motif/textentry.h"
#elif defined(__WXPM__)
#include "wx/os2/textentry.h"
#else
// no platform-specific implementation of wxTextEntry yet
class WXDLLIMPEXP_CORE wxTextEntry : public wxTextEntryBase

View File

@ -183,174 +183,29 @@ bool wxComboBox::Create(
wxString wxComboBox::GetValue() const
{
return wxGetWindowText(GetHwnd());
return HasFlag(wxCB_READONLY) ? GetStringSelection()
: wxTextEntry::GetValue();
}
void wxComboBox::SetValue(
const wxString& rsValue
)
void wxComboBox::SetValue(const wxString& value)
{
if ( HasFlag(wxCB_READONLY) )
SetStringSelection(rsValue);
SetStringSelection(value);
else
::WinSetWindowText(GetHwnd(), rsValue.c_str());
} // end of wxComboBox::SetValue
wxTextEntry::SetValue(value);
}
//
// Clipboard operations
//
void wxComboBox::Copy()
void wxComboBox::Clear()
{
HWND hWnd = GetHwnd();
wxChoice::Clear();
if ( !HasFlag(wxCB_READONLY) )
wxTextEntry::Clear();
}
::WinSendMsg(hWnd, EM_COPY, (MPARAM)0, (MPARAM)0);
} // end of wxComboBox::Copy
void wxComboBox::Cut()
bool wxComboBox::IsEditable() const
{
HWND hWnd = GetHwnd();
::WinSendMsg(hWnd, EM_CUT, (MPARAM)0, (MPARAM)0);
} // end of wxComboBox::Cut
void wxComboBox::Paste()
{
HWND hWnd = GetHwnd();
::WinSendMsg(hWnd, EM_PASTE, (MPARAM)0, (MPARAM)0);
} // end of wxComboBox::Paste
void wxComboBox::SetEditable(
bool bEditable
)
{
HWND hWnd = GetHwnd();
::WinSendMsg(hWnd, EM_SETREADONLY, (MPARAM)!bEditable, (MPARAM)0L);
} // end of wxComboBox::SetEditable
void wxComboBox::SetInsertionPoint(
long lPos
)
{
HWND hWnd = GetHwnd();
::WinSendMsg(hWnd, EM_SETFIRSTCHAR, MPFROMLONG(lPos), (MPARAM)0);
} // end of wxComboBox::SetInsertionPoint
void wxComboBox::SetInsertionPointEnd()
{
wxTextPos lPos = GetLastPosition();
SetInsertionPoint(lPos);
} // end of wxComboBox::SetInsertionPointEnd
long wxComboBox::GetInsertionPoint() const
{
long lPos = LONGFROMMR(::WinSendMsg( GetHwnd()
,LM_QUERYSELECTION
,(MPARAM)0
,(MPARAM)0
));
if (lPos == LIT_NONE)
return wxNOT_FOUND;
return lPos;
} // end of wxComboBox::GetInsertionPoint
wxTextPos wxComboBox::GetLastPosition() const
{
long lLineLength = 0L;
WNDPARAMS vParams;
//
// Get number of characters in the last (only) line. We'll add this to the character
// index for the last line, 1st position.
//
vParams.fsStatus = WPM_CCHTEXT;
if (::WinSendMsg( GetHwnd()
,WM_QUERYWINDOWPARAMS
,&vParams
,0
))
{
lLineLength = (long)vParams.cchText;
}
else
lLineLength = 0L;
return lLineLength;
} // end of wxComboBox::GetLastPosition
void wxComboBox::Replace( long lFrom,
long lTo,
const wxString& rsValue )
{
#if wxUSE_CLIPBOARD
HWND hWnd = GetHwnd();
//
// Set selection and remove it
//
::WinSendMsg(hWnd, EM_SETSEL, MPFROM2SHORT((USHORT)lFrom, (USHORT)lTo), 0);
::WinSendMsg(hWnd, EM_CUT, (MPARAM)0, (MPARAM)0);
//
// Now replace with 'value', by pasting.
//
wxSetClipboardData( wxDF_TEXT
,rsValue.c_str()
,0
,0
);
//
// Paste into edit control
//
::WinSendMsg(hWnd, EM_PASTE, (MPARAM)0, (MPARAM)0L);
#else
wxUnusedVar(lFrom);
wxUnusedVar(lTo);
wxUnusedVar(rsValue);
#endif
} // end of wxComboBox::Replace
void wxComboBox::Remove( long lFrom, long lTo)
{
#if wxUSE_CLIPBOARD
HWND hWnd = GetHwnd();
::WinSendMsg(hWnd, EM_SETSEL, MPFROM2SHORT((USHORT)lFrom, (USHORT)lTo), 0);
::WinSendMsg(hWnd, EM_CUT, (MPARAM)0, (MPARAM)0);
#else
wxUnusedVar(lFrom);
wxUnusedVar(lTo);
#endif
} // end of wxComboBox::Remove
void wxComboBox::SetSelection( long lFrom, long lTo )
{
HWND hWnd = GetHwnd();
long lFromChar = 0;
long lToChar = 0;
//
// If from and to are both -1, it means
// (in wxWidgets) that all text should be selected.
// This translates into Windows convention
//
if ((lFrom == -1L) && (lTo == -1L))
{
lFromChar = 0;
lToChar = -1;
}
::WinSendMsg( hWnd
,EM_SETSEL
,MPFROM2SHORT((USHORT)lFromChar, (USHORT)lToChar)
,(MPARAM)0
);
} // end of wxComboBox::SetSelection
return !HasFlag(wxCB_READONLY) && wxTextEntry::IsEditable();
}
bool wxComboBox::ProcessEditMsg(
WXUINT uMsg