Fixed GetSelection to behave the same as for the other ports, added
GetCurrentSelection. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38687 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
43563ef2dd
commit
0934d91c7b
@ -12,14 +12,18 @@
|
||||
#ifndef _WX_CHOICE_H_
|
||||
#define _WX_CHOICE_H_
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Choice item
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLEXPORT wxChoice: public wxChoiceBase
|
||||
{
|
||||
DECLARE_DYNAMIC_CLASS(wxChoice)
|
||||
|
||||
public:
|
||||
// ctors
|
||||
inline wxChoice() { }
|
||||
inline wxChoice() { Init(); }
|
||||
virtual ~wxChoice();
|
||||
|
||||
inline wxChoice( wxWindow* pParent
|
||||
,wxWindowID vId
|
||||
@ -32,6 +36,7 @@ public:
|
||||
,const wxString& rsName = wxChoiceNameStr
|
||||
)
|
||||
{
|
||||
Init();
|
||||
Create( pParent
|
||||
,vId
|
||||
,rPos
|
||||
@ -54,6 +59,7 @@ public:
|
||||
,const wxString& rsName = wxChoiceNameStr
|
||||
)
|
||||
{
|
||||
Init();
|
||||
Create( pParent
|
||||
,vId
|
||||
,rPos
|
||||
@ -89,13 +95,12 @@ public:
|
||||
//
|
||||
// Implement base class virtuals
|
||||
//
|
||||
virtual int DoAppend(const wxString& rsItem);
|
||||
virtual int DoInsert(const wxString& rsItem, unsigned int pos);
|
||||
virtual void Delete(unsigned int n);
|
||||
virtual void Clear(void);
|
||||
|
||||
virtual unsigned int GetCount() const;
|
||||
virtual int GetSelection(void) const;
|
||||
virtual int GetCurrentSelection(void) const;
|
||||
virtual void SetSelection(int n);
|
||||
|
||||
virtual wxString GetString(unsigned int n) const;
|
||||
@ -113,7 +118,12 @@ public:
|
||||
);
|
||||
|
||||
protected:
|
||||
virtual void DoSetItemClientData(unsigned int n, void* pClientData);
|
||||
// common part of all ctors
|
||||
void Init() { m_lastAcceptedSelection = wxID_NONE; }
|
||||
|
||||
virtual int DoAppend(const wxString& rsItem);
|
||||
virtual int DoInsert(const wxString& rsItem, unsigned int pos);
|
||||
virtual void DoSetItemClientData(unsigned int n, void* pClientData);
|
||||
virtual void* DoGetItemClientData(unsigned int n) const;
|
||||
virtual void DoSetItemClientObject(unsigned int n, wxClientData* pClientData);
|
||||
virtual wxClientData* DoGetItemClientObject(unsigned int n) const;
|
||||
@ -125,6 +135,11 @@ protected:
|
||||
,int nsizeFlags = wxSIZE_AUTO
|
||||
);
|
||||
void Free(void);
|
||||
|
||||
// last "completed" selection, i.e. not the transient one while the user is
|
||||
// browsing the popup list: this is only used when != wxID_NONE which is
|
||||
// the case while the drop down is opened
|
||||
int m_lastAcceptedSelection;
|
||||
}; // end of CLASS wxChoice
|
||||
|
||||
#endif // _WX_CHOICE_H_
|
||||
|
@ -88,6 +88,8 @@ bool wxChoice::Create(
|
||||
// on global settings) rather than inheriting the parent's background colour.
|
||||
//
|
||||
SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW));
|
||||
|
||||
// initialize the controls contents
|
||||
for (int i = 0; i < n; i++)
|
||||
{
|
||||
Append(asChoices[i]);
|
||||
@ -100,6 +102,11 @@ bool wxChoice::Create(
|
||||
return true;
|
||||
} // end of wxChoice::Create
|
||||
|
||||
wxChoice::~wxChoice()
|
||||
{
|
||||
Free();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// adding/deleting items to/from the list
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -149,6 +156,12 @@ int wxChoice::DoInsert( const wxString& rsItem, unsigned int pos )
|
||||
void wxChoice::Delete(unsigned int n)
|
||||
{
|
||||
wxCHECK_RET( IsValid(n), wxT("invalid item index in wxChoice::Delete") );
|
||||
|
||||
if ( HasClientObjectData() )
|
||||
{
|
||||
delete GetClientObject(n);
|
||||
}
|
||||
|
||||
::WinSendMsg(GetHwnd(), LM_DELETEITEM, (MPARAM)n, (MPARAM)0);
|
||||
} // end of wxChoice::Delete
|
||||
|
||||
@ -163,6 +176,17 @@ void wxChoice::Clear()
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
int wxChoice::GetSelection() const
|
||||
{
|
||||
// if m_lastAcceptedSelection is set, it means that the dropdown is
|
||||
// currently shown and that we want to use the last "permanent" selection
|
||||
// instead of whatever is under the mouse pointer currently
|
||||
//
|
||||
// otherwise, get the selection from the control
|
||||
return m_lastAcceptedSelection == wxID_NONE ? GetCurrentSelection()
|
||||
: m_lastAcceptedSelection;
|
||||
}
|
||||
|
||||
int wxChoice::GetCurrentSelection() const
|
||||
{
|
||||
return((int)LONGFROMMR(::WinSendMsg(GetHwnd(), LM_QUERYSELECTION, (MPARAM)LIT_FIRST, (MPARAM)0)));
|
||||
} // end of wxChoice::GetSelection
|
||||
|
Loading…
Reference in New Issue
Block a user