added middle-click close to wxAuiNotebook

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@46981 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Benjamin Williams
2007-06-27 16:46:41 +00:00
parent 667d0fb4a6
commit b34b4a9be7
2 changed files with 164 additions and 2 deletions

View File

@@ -45,13 +45,14 @@ enum wxAuiNotebookOption
wxAUI_NB_CLOSE_BUTTON = 1 << 10,
wxAUI_NB_CLOSE_ON_ACTIVE_TAB = 1 << 11,
wxAUI_NB_CLOSE_ON_ALL_TABS = 1 << 12,
wxAUI_NB_MIDDLE_CLICK_CLOSE = 1 << 13,
wxAUI_NB_DEFAULT_STYLE = wxAUI_NB_TOP |
wxAUI_NB_TAB_SPLIT |
wxAUI_NB_TAB_MOVE |
wxAUI_NB_SCROLL_BUTTONS |
wxAUI_NB_CLOSE_ON_ACTIVE_TAB
wxAUI_NB_CLOSE_ON_ACTIVE_TAB |
wxAUI_NB_MIDDLE_CLICK_CLOSE
};
@@ -452,6 +453,12 @@ protected:
void OnSize(wxSizeEvent& evt);
void OnLeftDown(wxMouseEvent& evt);
void OnLeftUp(wxMouseEvent& evt);
#if wxABI_VERSION >= 20805
void OnMiddleDown(wxMouseEvent& evt);
void OnMiddleUp(wxMouseEvent& evt);
void OnRightDown(wxMouseEvent& evt);
void OnRightUp(wxMouseEvent& evt);
#endif
void OnMotion(wxMouseEvent& evt);
void OnLeaveWindow(wxMouseEvent& evt);
void OnButton(wxAuiNotebookEvent& evt);
@@ -583,6 +590,12 @@ protected:
void OnTabDragMotion(wxCommandEvent& evt);
void OnTabEndDrag(wxCommandEvent& evt);
void OnTabButton(wxCommandEvent& evt);
#if wxABI_VERSION >= 20805
void OnTabMiddleDown(wxCommandEvent& evt);
void OnTabMiddleUp(wxCommandEvent& evt);
void OnTabRightDown(wxCommandEvent& evt);
void OnTabRightUp(wxCommandEvent& evt);
#endif
protected:
@@ -623,6 +636,12 @@ BEGIN_DECLARE_EVENT_TYPES()
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, 0)
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, 0)
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND, 0)
#if wxABI_VERSION >= 20805
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN, 0)
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP, 0)
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN, 0)
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_AUI, wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP, 0)
#endif
END_DECLARE_EVENT_TYPES()
typedef void (wxEvtHandler::*wxAuiNotebookEventFunction)(wxAuiNotebookEvent&);
@@ -646,6 +665,17 @@ typedef void (wxEvtHandler::*wxAuiNotebookEventFunction)(wxAuiNotebookEvent&);
wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, winid, wxAuiNotebookEventHandler(fn))
#define EVT_AUINOTEBOOK_ALLOW_DND(winid, fn) \
wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND, winid, wxAuiNotebookEventHandler(fn))
#if wxABI_VERSION >= 20805
#define EVT_AUINOTEBOOK_TAB_MIDDLE_DOWN(winid, fn) \
wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN, winid, wxAuiNotebookEventHandler(fn))
#define EVT_AUINOTEBOOK_TAB_MIDDLE_UP(winid, fn) \
wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP, winid, wxAuiNotebookEventHandler(fn))
#define EVT_AUINOTEBOOK_TAB_RIGHT_DOWN(winid, fn) \
wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN, winid, wxAuiNotebookEventHandler(fn))
#define EVT_AUINOTEBOOK_TAB_RIGHT_UP(winid, fn) \
wx__DECLARE_EVT1(wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP, winid, wxAuiNotebookEventHandler(fn))
#endif
#else

View File

@@ -47,6 +47,10 @@ DEFINE_EVENT_TYPE(wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_AUINOTEBOOK_END_DRAG)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP)
DEFINE_EVENT_TYPE(wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN)
IMPLEMENT_CLASS(wxAuiNotebook, wxControl)
@@ -1968,6 +1972,10 @@ BEGIN_EVENT_TABLE(wxAuiTabCtrl, wxControl)
EVT_LEFT_DOWN(wxAuiTabCtrl::OnLeftDown)
EVT_LEFT_DCLICK(wxAuiTabCtrl::OnLeftDown)
EVT_LEFT_UP(wxAuiTabCtrl::OnLeftUp)
EVT_MIDDLE_DOWN(wxAuiTabCtrl::OnMiddleDown)
EVT_MIDDLE_UP(wxAuiTabCtrl::OnMiddleUp)
EVT_RIGHT_DOWN(wxAuiTabCtrl::OnRightDown)
EVT_RIGHT_UP(wxAuiTabCtrl::OnRightUp)
EVT_MOTION(wxAuiTabCtrl::OnMotion)
EVT_LEAVE_WINDOW(wxAuiTabCtrl::OnLeaveWindow)
EVT_AUINOTEBOOK_BUTTON(wxID_ANY, wxAuiTabCtrl::OnButton)
@@ -2099,6 +2107,54 @@ void wxAuiTabCtrl::OnLeftUp(wxMouseEvent& evt)
m_click_tab = NULL;
}
void wxAuiTabCtrl::OnMiddleUp(wxMouseEvent& evt)
{
wxWindow* wnd = NULL;
if (!TabHitTest(evt.m_x, evt.m_y, &wnd))
return;
wxAuiNotebookEvent e(wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP, m_windowId);
e.SetEventObject(this);
e.SetSelection(GetIdxFromWindow(wnd));
GetEventHandler()->ProcessEvent(e);
}
void wxAuiTabCtrl::OnMiddleDown(wxMouseEvent& evt)
{
wxWindow* wnd = NULL;
if (!TabHitTest(evt.m_x, evt.m_y, &wnd))
return;
wxAuiNotebookEvent e(wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN, m_windowId);
e.SetEventObject(this);
e.SetSelection(GetIdxFromWindow(wnd));
GetEventHandler()->ProcessEvent(e);
}
void wxAuiTabCtrl::OnRightUp(wxMouseEvent& evt)
{
wxWindow* wnd = NULL;
if (!TabHitTest(evt.m_x, evt.m_y, &wnd))
return;
wxAuiNotebookEvent e(wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP, m_windowId);
e.SetEventObject(this);
e.SetSelection(GetIdxFromWindow(wnd));
GetEventHandler()->ProcessEvent(e);
}
void wxAuiTabCtrl::OnRightDown(wxMouseEvent& evt)
{
wxWindow* wnd = NULL;
if (!TabHitTest(evt.m_x, evt.m_y, &wnd))
return;
wxAuiNotebookEvent e(wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN, m_windowId);
e.SetEventObject(this);
e.SetSelection(GetIdxFromWindow(wnd));
GetEventHandler()->ProcessEvent(e);
}
void wxAuiTabCtrl::OnMotion(wxMouseEvent& evt)
{
wxPoint pos = evt.GetPosition();
@@ -2336,6 +2392,18 @@ BEGIN_EVENT_TABLE(wxAuiNotebook, wxControl)
EVT_COMMAND_RANGE(wxAuiBaseTabCtrlId, wxAuiBaseTabCtrlId+500,
wxEVT_COMMAND_AUINOTEBOOK_BUTTON,
wxAuiNotebook::OnTabButton)
EVT_COMMAND_RANGE(wxAuiBaseTabCtrlId, wxAuiBaseTabCtrlId+500,
wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN,
wxAuiNotebook::OnTabMiddleDown)
EVT_COMMAND_RANGE(wxAuiBaseTabCtrlId, wxAuiBaseTabCtrlId+500,
wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP,
wxAuiNotebook::OnTabMiddleUp)
EVT_COMMAND_RANGE(wxAuiBaseTabCtrlId, wxAuiBaseTabCtrlId+500,
wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN,
wxAuiNotebook::OnTabRightDown)
EVT_COMMAND_RANGE(wxAuiBaseTabCtrlId, wxAuiBaseTabCtrlId+500,
wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP,
wxAuiNotebook::OnTabRightUp)
END_EVENT_TABLE()
wxAuiNotebook::wxAuiNotebook()
@@ -3626,6 +3694,70 @@ void wxAuiNotebook::OnTabButton(wxCommandEvent& command_evt)
}
}
void wxAuiNotebook::OnTabMiddleDown(wxCommandEvent& evt)
{
// patch event through to owner
wxAuiTabCtrl* tabs = (wxAuiTabCtrl*)evt.GetEventObject();
wxWindow* wnd = tabs->GetWindowFromIdx(evt.GetSelection());
wxAuiNotebookEvent e(wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN, m_windowId);
e.SetSelection(m_tabs.GetIdxFromWindow(wnd));
e.SetEventObject(this);
GetEventHandler()->ProcessEvent(e);
}
void wxAuiNotebook::OnTabMiddleUp(wxCommandEvent& evt)
{
// if the wxAUI_NB_MIDDLE_CLICK_CLOSE is specified, middle
// click should act like a tab close action. However, first
// give the owner an opportunity to handle the middle up event
// for custom action
wxAuiTabCtrl* tabs = (wxAuiTabCtrl*)evt.GetEventObject();
wxWindow* wnd = tabs->GetWindowFromIdx(evt.GetSelection());
wxAuiNotebookEvent e(wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP, m_windowId);
e.SetSelection(m_tabs.GetIdxFromWindow(wnd));
e.SetEventObject(this);
if (GetEventHandler()->ProcessEvent(e))
return;
if (!e.IsAllowed())
return;
// check if we are supposed to close on middle-up
if ((m_flags & wxAUI_NB_MIDDLE_CLICK_CLOSE) == 0)
return;
// simulate the user pressing the close button on the tab
evt.SetInt(wxAUI_BUTTON_CLOSE);
OnTabButton(evt);
}
void wxAuiNotebook::OnTabRightDown(wxCommandEvent& evt)
{
// patch event through to owner
wxAuiTabCtrl* tabs = (wxAuiTabCtrl*)evt.GetEventObject();
wxWindow* wnd = tabs->GetWindowFromIdx(evt.GetSelection());
wxAuiNotebookEvent e(wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN, m_windowId);
e.SetSelection(m_tabs.GetIdxFromWindow(wnd));
e.SetEventObject(this);
GetEventHandler()->ProcessEvent(e);
}
void wxAuiNotebook::OnTabRightUp(wxCommandEvent& evt)
{
// patch event through to owner
wxAuiTabCtrl* tabs = (wxAuiTabCtrl*)evt.GetEventObject();
wxWindow* wnd = tabs->GetWindowFromIdx(evt.GetSelection());
wxAuiNotebookEvent e(wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP, m_windowId);
e.SetSelection(m_tabs.GetIdxFromWindow(wnd));
e.SetEventObject(this);
GetEventHandler()->ProcessEvent(e);
}
// Sets the normal font
void wxAuiNotebook::SetNormalFont(const wxFont& font)