Many changes for wxInputHandler creation mainly related to:
1. Allow the theme to create only the input handlers it customizes instead of forcing it to always create a handler even if the standard one is used: wxTheme::GetInputHandler() now takes wxInputConsumer to make this possible 2. Prefer delegation to inheritance when creating customized input handlers, almost all (except for wxStdScrollbarInputHandler) standard handler classes are now private, use wxClassName::GetStdInputHandler() to retrieve the standard handler for any class or polymorphic DoGetStdInputHandler() git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41227 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -62,6 +62,7 @@
|
||||
|
||||
#include "wx/univ/scrtimer.h"
|
||||
#include "wx/univ/renderer.h"
|
||||
#include "wx/univ/inpcons.h"
|
||||
#include "wx/univ/inphand.h"
|
||||
#include "wx/univ/colschem.h"
|
||||
#include "wx/univ/theme.h"
|
||||
@@ -553,34 +554,31 @@ private:
|
||||
class wxWin32InputHandler : public wxInputHandler
|
||||
{
|
||||
public:
|
||||
wxWin32InputHandler(wxWin32Renderer *renderer);
|
||||
wxWin32InputHandler() { }
|
||||
|
||||
virtual bool HandleKey(wxInputConsumer *control,
|
||||
const wxKeyEvent& event,
|
||||
bool pressed);
|
||||
virtual bool HandleMouse(wxInputConsumer *control,
|
||||
const wxMouseEvent& event);
|
||||
|
||||
protected:
|
||||
wxWin32Renderer *m_renderer;
|
||||
};
|
||||
|
||||
#if wxUSE_SCROLLBAR
|
||||
class wxWin32ScrollBarInputHandler : public wxStdScrollBarInputHandler
|
||||
{
|
||||
public:
|
||||
wxWin32ScrollBarInputHandler(wxWin32Renderer *renderer,
|
||||
wxWin32ScrollBarInputHandler(wxRenderer *renderer,
|
||||
wxInputHandler *handler);
|
||||
|
||||
virtual bool HandleMouse(wxInputConsumer *control, const wxMouseEvent& event);
|
||||
virtual bool HandleMouseMove(wxInputConsumer *control, const wxMouseEvent& event);
|
||||
virtual bool HandleMouse(wxInputConsumer *control,
|
||||
const wxMouseEvent& event);
|
||||
virtual bool HandleMouseMove(wxInputConsumer *control,
|
||||
const wxMouseEvent& event);
|
||||
|
||||
virtual bool OnScrollTimer(wxScrollBar *scrollbar,
|
||||
const wxControlAction& action);
|
||||
|
||||
protected:
|
||||
virtual bool IsAllowedButton(int button) { return button == 1; }
|
||||
|
||||
virtual void Highlight(wxScrollBar * WXUNUSED(scrollbar),
|
||||
bool WXUNUSED(doIt))
|
||||
{
|
||||
@@ -600,11 +598,11 @@ protected:
|
||||
#endif // wxUSE_SCROLLBAR
|
||||
|
||||
#if wxUSE_CHECKBOX
|
||||
class wxWin32CheckboxInputHandler : public wxStdCheckboxInputHandler
|
||||
class wxWin32CheckboxInputHandler : public wxStdInputHandler
|
||||
{
|
||||
public:
|
||||
wxWin32CheckboxInputHandler(wxInputHandler *handler)
|
||||
: wxStdCheckboxInputHandler(handler) { }
|
||||
: wxStdInputHandler(handler) { }
|
||||
|
||||
virtual bool HandleKey(wxInputConsumer *control,
|
||||
const wxKeyEvent& event,
|
||||
@@ -613,11 +611,11 @@ public:
|
||||
#endif // wxUSE_CHECKBOX
|
||||
|
||||
#if wxUSE_TEXTCTRL
|
||||
class wxWin32TextCtrlInputHandler : public wxStdTextCtrlInputHandler
|
||||
class wxWin32TextCtrlInputHandler : public wxStdInputHandler
|
||||
{
|
||||
public:
|
||||
wxWin32TextCtrlInputHandler(wxInputHandler *handler)
|
||||
: wxStdTextCtrlInputHandler(handler) { }
|
||||
: wxStdInputHandler(handler) { }
|
||||
|
||||
virtual bool HandleKey(wxInputConsumer *control,
|
||||
const wxKeyEvent& event,
|
||||
@@ -650,7 +648,7 @@ private:
|
||||
|
||||
class wxWin32SystemMenuEvtHandler;
|
||||
|
||||
class wxWin32FrameInputHandler : public wxStdFrameInputHandler
|
||||
class wxWin32FrameInputHandler : public wxStdInputHandler
|
||||
{
|
||||
public:
|
||||
wxWin32FrameInputHandler(wxInputHandler *handler);
|
||||
@@ -707,13 +705,11 @@ public:
|
||||
|
||||
virtual wxRenderer *GetRenderer();
|
||||
virtual wxArtProvider *GetArtProvider();
|
||||
virtual wxInputHandler *GetInputHandler(const wxString& control);
|
||||
virtual wxInputHandler *GetInputHandler(const wxString& control,
|
||||
wxInputConsumer *consumer);
|
||||
virtual wxColourScheme *GetColourScheme();
|
||||
|
||||
private:
|
||||
// get the default input handler
|
||||
wxInputHandler *GetDefaultInputHandler();
|
||||
|
||||
wxWin32Renderer *m_renderer;
|
||||
|
||||
wxWin32ArtProvider *m_artProvider;
|
||||
@@ -723,8 +719,6 @@ private:
|
||||
wxSortedArrayString m_handlerNames;
|
||||
wxArrayHandlers m_handlers;
|
||||
|
||||
wxWin32InputHandler *m_handlerDefault;
|
||||
|
||||
wxWin32ColourScheme *m_scheme;
|
||||
|
||||
WX_DECLARE_THEME(win32)
|
||||
@@ -1275,21 +1269,11 @@ wxWin32Theme::wxWin32Theme()
|
||||
{
|
||||
m_scheme = NULL;
|
||||
m_renderer = NULL;
|
||||
m_handlerDefault = NULL;
|
||||
m_artProvider = NULL;
|
||||
}
|
||||
|
||||
wxWin32Theme::~wxWin32Theme()
|
||||
{
|
||||
size_t count = m_handlers.GetCount();
|
||||
for ( size_t n = 0; n < count; n++ )
|
||||
{
|
||||
if ( m_handlers[n] != m_handlerDefault )
|
||||
delete m_handlers[n];
|
||||
}
|
||||
|
||||
delete m_handlerDefault;
|
||||
|
||||
delete m_renderer;
|
||||
delete m_scheme;
|
||||
wxArtProvider::RemoveProvider(m_artProvider);
|
||||
@@ -1315,79 +1299,63 @@ wxArtProvider *wxWin32Theme::GetArtProvider()
|
||||
return m_artProvider;
|
||||
}
|
||||
|
||||
wxInputHandler *wxWin32Theme::GetDefaultInputHandler()
|
||||
{
|
||||
if ( !m_handlerDefault )
|
||||
{
|
||||
m_handlerDefault = new wxWin32InputHandler(m_renderer);
|
||||
}
|
||||
|
||||
return m_handlerDefault;
|
||||
}
|
||||
|
||||
wxInputHandler *wxWin32Theme::GetInputHandler(const wxString& control)
|
||||
wxInputHandler *
|
||||
wxWin32Theme::GetInputHandler(const wxString& control,
|
||||
wxInputConsumer *consumer)
|
||||
{
|
||||
wxInputHandler *handler = NULL;
|
||||
int n = m_handlerNames.Index(control);
|
||||
if ( n == wxNOT_FOUND )
|
||||
{
|
||||
static wxWin32InputHandler s_handlerDef;
|
||||
|
||||
wxInputHandler * const
|
||||
handlerStd = consumer->DoGetStdInputHandler(&s_handlerDef);
|
||||
|
||||
// create a new handler
|
||||
if ( control == wxINP_HANDLER_SCROLLBAR )
|
||||
if ( control == wxINP_HANDLER_TOPLEVEL )
|
||||
{
|
||||
#if wxUSE_SCROLLBAR
|
||||
handler = new wxWin32ScrollBarInputHandler(m_renderer,
|
||||
GetDefaultInputHandler());
|
||||
#endif // wxUSE_SCROLLBAR
|
||||
static wxWin32FrameInputHandler s_handler(handlerStd);
|
||||
|
||||
handler = &s_handler;
|
||||
}
|
||||
#if wxUSE_BUTTON
|
||||
else if ( control == wxINP_HANDLER_BUTTON )
|
||||
handler = new wxStdButtonInputHandler(GetDefaultInputHandler());
|
||||
#endif // wxUSE_BUTTON
|
||||
#if wxUSE_CHECKBOX
|
||||
else if ( control == wxINP_HANDLER_CHECKBOX )
|
||||
handler = new wxWin32CheckboxInputHandler(GetDefaultInputHandler());
|
||||
{
|
||||
static wxWin32CheckboxInputHandler s_handler(handlerStd);
|
||||
|
||||
handler = &s_handler;
|
||||
}
|
||||
#endif // wxUSE_CHECKBOX
|
||||
#if wxUSE_COMBOBOX
|
||||
else if ( control == wxINP_HANDLER_COMBOBOX )
|
||||
handler = new wxStdComboBoxInputHandler(GetDefaultInputHandler());
|
||||
#endif // wxUSE_COMBOBOX
|
||||
#if wxUSE_LISTBOX
|
||||
else if ( control == wxINP_HANDLER_LISTBOX )
|
||||
handler = new wxStdListboxInputHandler(GetDefaultInputHandler());
|
||||
#endif // wxUSE_LISTBOX
|
||||
#if wxUSE_CHECKLISTBOX
|
||||
else if ( control == wxINP_HANDLER_CHECKLISTBOX )
|
||||
handler = new wxStdCheckListboxInputHandler(GetDefaultInputHandler());
|
||||
#endif // wxUSE_CHECKLISTBOX
|
||||
#if wxUSE_TEXTCTRL
|
||||
else if ( control == wxINP_HANDLER_TEXTCTRL )
|
||||
handler = new wxWin32TextCtrlInputHandler(GetDefaultInputHandler());
|
||||
#endif // wxUSE_TEXTCTRL
|
||||
#if wxUSE_SLIDER
|
||||
else if ( control == wxINP_HANDLER_SLIDER )
|
||||
handler = new wxStdSliderButtonInputHandler(GetDefaultInputHandler());
|
||||
#endif // wxUSE_SLIDER
|
||||
#if wxUSE_SPINBTN
|
||||
else if ( control == wxINP_HANDLER_SPINBTN )
|
||||
handler = new wxStdSpinButtonInputHandler(GetDefaultInputHandler());
|
||||
#endif // wxUSE_SPINBTN
|
||||
#if wxUSE_NOTEBOOK
|
||||
else if ( control == wxINP_HANDLER_NOTEBOOK )
|
||||
handler = new wxStdNotebookInputHandler(GetDefaultInputHandler());
|
||||
#endif // wxUSE_NOTEBOOK
|
||||
#if wxUSE_SCROLLBAR
|
||||
else if ( control == wxINP_HANDLER_SCROLLBAR )
|
||||
{
|
||||
static wxWin32ScrollBarInputHandler
|
||||
s_handler(GetRenderer(), handlerStd);
|
||||
|
||||
handler = &s_handler;
|
||||
}
|
||||
#endif // wxUSE_SCROLLBAR
|
||||
#if wxUSE_STATUSBAR
|
||||
else if ( control == wxINP_HANDLER_STATUSBAR )
|
||||
handler = new wxWin32StatusBarInputHandler(GetDefaultInputHandler());
|
||||
#endif // wxUSE_STATUSBAR
|
||||
#if wxUSE_TOOLBAR
|
||||
else if ( control == wxINP_HANDLER_TOOLBAR )
|
||||
handler = new wxStdToolbarInputHandler(GetDefaultInputHandler());
|
||||
#endif // wxUSE_TOOLBAR
|
||||
else if ( control == wxINP_HANDLER_TOPLEVEL )
|
||||
handler = new wxWin32FrameInputHandler(GetDefaultInputHandler());
|
||||
{
|
||||
static wxWin32StatusBarInputHandler s_handler(handlerStd);
|
||||
|
||||
if(!handler)
|
||||
handler = GetDefaultInputHandler();
|
||||
handler = &s_handler;
|
||||
}
|
||||
#endif // wxUSE_STATUSBAR
|
||||
#if wxUSE_TEXTCTRL
|
||||
else if ( control == wxINP_HANDLER_TEXTCTRL )
|
||||
{
|
||||
static wxWin32TextCtrlInputHandler s_handler(handlerStd);
|
||||
|
||||
handler = &s_handler;
|
||||
}
|
||||
#endif // wxUSE_TEXTCTRL
|
||||
else // no special handler for this control
|
||||
{
|
||||
handler = handlerStd;
|
||||
}
|
||||
|
||||
n = m_handlerNames.Add(control);
|
||||
m_handlers.Insert(handler, n);
|
||||
@@ -4425,7 +4393,7 @@ void wxWin32Renderer::AdjustSize(wxSize *size, const wxWindow *window)
|
||||
// skip border width adjustments, they don't make sense for us
|
||||
return;
|
||||
}
|
||||
#endif // wxUSE_SCROLLBAR/!wxUSE_SCROLLBAR
|
||||
#endif // wxUSE_SCROLLBAR
|
||||
|
||||
#if wxUSE_BMPBUTTON
|
||||
if ( wxDynamicCast(window, wxBitmapButton) )
|
||||
@@ -4486,11 +4454,6 @@ void wxWin32Renderer::AdjustSize(wxSize *size, const wxWindow *window)
|
||||
// wxWin32InputHandler
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxWin32InputHandler::wxWin32InputHandler(wxWin32Renderer *renderer)
|
||||
{
|
||||
m_renderer = renderer;
|
||||
}
|
||||
|
||||
bool wxWin32InputHandler::HandleKey(wxInputConsumer * WXUNUSED(control),
|
||||
const wxKeyEvent& WXUNUSED(event),
|
||||
bool WXUNUSED(pressed))
|
||||
@@ -4506,8 +4469,8 @@ bool wxWin32InputHandler::HandleMouse(wxInputConsumer *control,
|
||||
{
|
||||
wxWindow *win = control->GetInputWindow();
|
||||
|
||||
if (( wxWindow::FindFocus() != control->GetInputWindow() ) &&
|
||||
( win->AcceptsFocus() ) )
|
||||
if ( (wxWindow::FindFocus() != control->GetInputWindow()) &&
|
||||
win->AcceptsFocus() )
|
||||
{
|
||||
win->SetFocus();
|
||||
|
||||
@@ -4525,8 +4488,7 @@ bool wxWin32InputHandler::HandleMouse(wxInputConsumer *control,
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
wxWin32ScrollBarInputHandler::
|
||||
wxWin32ScrollBarInputHandler(wxWin32Renderer *renderer,
|
||||
wxInputHandler *handler)
|
||||
wxWin32ScrollBarInputHandler(wxRenderer *renderer, wxInputHandler *handler)
|
||||
: wxStdScrollBarInputHandler(renderer, handler)
|
||||
{
|
||||
m_scrollPaused = false;
|
||||
@@ -4699,7 +4661,7 @@ bool wxWin32ScrollBarInputHandler::HandleMouseMove(wxInputConsumer *control,
|
||||
}
|
||||
}
|
||||
|
||||
return wxStdScrollBarInputHandler::HandleMouseMove(control, event);
|
||||
return wxStdInputHandler::HandleMouseMove(control, event);
|
||||
}
|
||||
|
||||
#endif // wxUSE_SCROLLBAR
|
||||
@@ -4786,7 +4748,7 @@ bool wxWin32TextCtrlInputHandler::HandleKey(wxInputConsumer *control,
|
||||
}
|
||||
}
|
||||
|
||||
return wxStdTextCtrlInputHandler::HandleKey(control, event, pressed);
|
||||
return wxStdInputHandler::HandleKey(control, event, pressed);
|
||||
}
|
||||
|
||||
#endif // wxUSE_TEXTCTRL
|
||||
@@ -4913,8 +4875,8 @@ private:
|
||||
#endif
|
||||
};
|
||||
|
||||
wxWin32SystemMenuEvtHandler::wxWin32SystemMenuEvtHandler(
|
||||
wxWin32FrameInputHandler *handler)
|
||||
wxWin32SystemMenuEvtHandler::
|
||||
wxWin32SystemMenuEvtHandler(wxWin32FrameInputHandler *handler)
|
||||
{
|
||||
m_inputHnd = handler;
|
||||
m_wnd = NULL;
|
||||
@@ -4994,7 +4956,7 @@ void wxWin32SystemMenuEvtHandler::OnClose(wxCloseEvent &event)
|
||||
|
||||
|
||||
wxWin32FrameInputHandler::wxWin32FrameInputHandler(wxInputHandler *handler)
|
||||
: wxStdFrameInputHandler(handler)
|
||||
: wxStdInputHandler(handler)
|
||||
{
|
||||
m_menuHandler = new wxWin32SystemMenuEvtHandler(this);
|
||||
}
|
||||
@@ -5040,7 +5002,7 @@ bool wxWin32FrameInputHandler::HandleMouse(wxInputConsumer *consumer,
|
||||
}
|
||||
}
|
||||
|
||||
return wxStdFrameInputHandler::HandleMouse(consumer, event);
|
||||
return wxStdInputHandler::HandleMouse(consumer, event);
|
||||
}
|
||||
|
||||
#if wxUSE_MENUS
|
||||
@@ -5095,5 +5057,5 @@ bool wxWin32FrameInputHandler::HandleActivation(wxInputConsumer *consumer,
|
||||
}
|
||||
}
|
||||
|
||||
return wxStdFrameInputHandler::HandleActivation(consumer, activated);
|
||||
return wxStdInputHandler::HandleActivation(consumer, activated);
|
||||
}
|
||||
|
Reference in New Issue
Block a user