The use of wxPopupWindow fo rhte autocomplete and calltip windows is

now a little better integrated.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15544 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2002-05-13 20:33:54 +00:00
parent 63ebec23f2
commit 267484bc4f
4 changed files with 40 additions and 26 deletions

View File

@@ -652,6 +652,11 @@ void Window::SetTitle(const char *s) {
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// Helper classes for ListBox // Helper classes for ListBox
// #undef wxSTC_USE_POPUP
// #define wxSTC_USE_POPUP 0
// A wxListBox that gives focus back to its parent if it gets it. // A wxListBox that gives focus back to its parent if it gets it.
class wxSTCListBox : public wxListBox { class wxSTCListBox : public wxListBox {
public: public:
@@ -660,9 +665,10 @@ public:
0, NULL, wxLB_SINGLE | wxSIMPLE_BORDER) 0, NULL, wxLB_SINGLE | wxSIMPLE_BORDER)
{} {}
void OnFocus(wxFocusEvent& event) { void OnKeyDown(wxKeyEvent& event) {
GetParent()->SetFocus(); // Give the key events to the STC. It will then update
event.Skip(); // the listbox as needed.
GetGrandParent()->GetEventHandler()->ProcessEvent(event);
} }
private: private:
@@ -670,11 +676,10 @@ private:
}; };
BEGIN_EVENT_TABLE(wxSTCListBox, wxListBox) BEGIN_EVENT_TABLE(wxSTCListBox, wxListBox)
EVT_SET_FOCUS(wxSTCListBox::OnFocus) EVT_KEY_DOWN(wxSTCListBox::OnKeyDown)
EVT_CHAR(wxSTCListBox::OnKeyDown)
END_EVENT_TABLE() END_EVENT_TABLE()
#undef wxSTC_USE_POPUP
#define wxSTC_USE_POPUP 0 // Leave it off for this one...
// A window to place the listbox upon. If wxPopupWindow is supported then // A window to place the listbox upon. If wxPopupWindow is supported then
@@ -695,17 +700,14 @@ public:
: wxSTCListBoxWinBase(parent, param2) { : wxSTCListBoxWinBase(parent, param2) {
lb = new wxSTCListBox(this, id); lb = new wxSTCListBox(this, id);
lb->SetCursor(wxCursor(wxCURSOR_ARROW)); lb->SetCursor(wxCursor(wxCURSOR_ARROW));
lb->SetFocus();
} }
void OnSize(wxSizeEvent& event) { void OnSize(wxSizeEvent& event) {
lb->SetSize(GetSize()); lb->SetSize(GetSize());
} }
void OnFocus(wxFocusEvent& event) {
GetParent()->SetFocus();
event.Skip();
}
wxListBox* GetLB() { return lb; } wxListBox* GetLB() { return lb; }
#if wxUSE_POPUPWIN && wxSTC_USE_POPUP #if wxUSE_POPUPWIN && wxSTC_USE_POPUP
virtual void DoSetSize(int x, int y, virtual void DoSetSize(int x, int y,
@@ -725,8 +727,7 @@ private:
}; };
BEGIN_EVENT_TABLE(wxSTCListBoxWin, wxSTCListBoxWinBase) BEGIN_EVENT_TABLE(wxSTCListBoxWin, wxSTCListBoxWinBase)
EVT_SIZE (wxSTCListBoxWin::OnSize) EVT_SIZE(wxSTCListBoxWin::OnSize)
EVT_SET_FOCUS (wxSTCListBoxWin::OnFocus)
END_EVENT_TABLE() END_EVENT_TABLE()

View File

@@ -88,6 +88,11 @@ public:
delete surfaceWindow; delete surfaceWindow;
} }
void OnFocus(wxFocusEvent& event) {
GetParent()->SetFocus();
event.Skip();
}
#if wxUSE_POPUPWIN && wxSTC_USE_POPUP #if wxUSE_POPUPWIN && wxSTC_USE_POPUP
virtual void DoSetSize(int x, int y, virtual void DoSetSize(int x, int y,
int width, int height, int width, int height,
@@ -122,6 +127,7 @@ private:
BEGIN_EVENT_TABLE(wxSTCCallTip, wxSTCCallTipBase) BEGIN_EVENT_TABLE(wxSTCCallTip, wxSTCCallTipBase)
EVT_PAINT(wxSTCCallTip::OnPaint) EVT_PAINT(wxSTCCallTip::OnPaint)
EVT_SET_FOCUS(wxSTCCallTip::OnFocus)
#if wxUSE_POPUPWIN && wxSTC_USE_POPUP #if wxUSE_POPUPWIN && wxSTC_USE_POPUP
EVT_LEFT_DOWN(wxSTCCallTip::OnLeftDown) EVT_LEFT_DOWN(wxSTCCallTip::OnLeftDown)
#endif #endif

View File

@@ -652,6 +652,11 @@ void Window::SetTitle(const char *s) {
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// Helper classes for ListBox // Helper classes for ListBox
// #undef wxSTC_USE_POPUP
// #define wxSTC_USE_POPUP 0
// A wxListBox that gives focus back to its parent if it gets it. // A wxListBox that gives focus back to its parent if it gets it.
class wxSTCListBox : public wxListBox { class wxSTCListBox : public wxListBox {
public: public:
@@ -660,9 +665,10 @@ public:
0, NULL, wxLB_SINGLE | wxSIMPLE_BORDER) 0, NULL, wxLB_SINGLE | wxSIMPLE_BORDER)
{} {}
void OnFocus(wxFocusEvent& event) { void OnKeyDown(wxKeyEvent& event) {
GetParent()->SetFocus(); // Give the key events to the STC. It will then update
event.Skip(); // the listbox as needed.
GetGrandParent()->GetEventHandler()->ProcessEvent(event);
} }
private: private:
@@ -670,11 +676,10 @@ private:
}; };
BEGIN_EVENT_TABLE(wxSTCListBox, wxListBox) BEGIN_EVENT_TABLE(wxSTCListBox, wxListBox)
EVT_SET_FOCUS(wxSTCListBox::OnFocus) EVT_KEY_DOWN(wxSTCListBox::OnKeyDown)
EVT_CHAR(wxSTCListBox::OnKeyDown)
END_EVENT_TABLE() END_EVENT_TABLE()
#undef wxSTC_USE_POPUP
#define wxSTC_USE_POPUP 0 // Leave it off for this one...
// A window to place the listbox upon. If wxPopupWindow is supported then // A window to place the listbox upon. If wxPopupWindow is supported then
@@ -695,17 +700,14 @@ public:
: wxSTCListBoxWinBase(parent, param2) { : wxSTCListBoxWinBase(parent, param2) {
lb = new wxSTCListBox(this, id); lb = new wxSTCListBox(this, id);
lb->SetCursor(wxCursor(wxCURSOR_ARROW)); lb->SetCursor(wxCursor(wxCURSOR_ARROW));
lb->SetFocus();
} }
void OnSize(wxSizeEvent& event) { void OnSize(wxSizeEvent& event) {
lb->SetSize(GetSize()); lb->SetSize(GetSize());
} }
void OnFocus(wxFocusEvent& event) {
GetParent()->SetFocus();
event.Skip();
}
wxListBox* GetLB() { return lb; } wxListBox* GetLB() { return lb; }
#if wxUSE_POPUPWIN && wxSTC_USE_POPUP #if wxUSE_POPUPWIN && wxSTC_USE_POPUP
virtual void DoSetSize(int x, int y, virtual void DoSetSize(int x, int y,
@@ -725,8 +727,7 @@ private:
}; };
BEGIN_EVENT_TABLE(wxSTCListBoxWin, wxSTCListBoxWinBase) BEGIN_EVENT_TABLE(wxSTCListBoxWin, wxSTCListBoxWinBase)
EVT_SIZE (wxSTCListBoxWin::OnSize) EVT_SIZE(wxSTCListBoxWin::OnSize)
EVT_SET_FOCUS (wxSTCListBoxWin::OnFocus)
END_EVENT_TABLE() END_EVENT_TABLE()

View File

@@ -88,6 +88,11 @@ public:
delete surfaceWindow; delete surfaceWindow;
} }
void OnFocus(wxFocusEvent& event) {
GetParent()->SetFocus();
event.Skip();
}
#if wxUSE_POPUPWIN && wxSTC_USE_POPUP #if wxUSE_POPUPWIN && wxSTC_USE_POPUP
virtual void DoSetSize(int x, int y, virtual void DoSetSize(int x, int y,
int width, int height, int width, int height,
@@ -122,6 +127,7 @@ private:
BEGIN_EVENT_TABLE(wxSTCCallTip, wxSTCCallTipBase) BEGIN_EVENT_TABLE(wxSTCCallTip, wxSTCCallTipBase)
EVT_PAINT(wxSTCCallTip::OnPaint) EVT_PAINT(wxSTCCallTip::OnPaint)
EVT_SET_FOCUS(wxSTCCallTip::OnFocus)
#if wxUSE_POPUPWIN && wxSTC_USE_POPUP #if wxUSE_POPUPWIN && wxSTC_USE_POPUP
EVT_LEFT_DOWN(wxSTCCallTip::OnLeftDown) EVT_LEFT_DOWN(wxSTCCallTip::OnLeftDown)
#endif #endif