/* * This file is part of wxSmith plugin for Code::Blocks Studio * Copyright (C) 2006-2007 Bartlomiej Swiecki * * wxSmith is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * wxSmith is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with wxSmith. If not, see . * * $Revision: 8251 $ * $Id: wxsevents.h 8251 2012-08-28 02:31:00Z ollydbg $ * $HeadURL: http://svn.code.sf.net/p/codeblocks/code/branches/release-16.xx/src/plugins/contrib/wxSmith/wxwidgets/wxsevents.h $ */ #ifndef WXSEVENTS_H #define WXSEVENTS_H #include #include #include #include "wxscodercontext.h" // Forward declarations class wxsItem; /** \brief Structure describing one event */ struct wxsEventDesc { enum EntryType { Id, ///< \brief Event using one identifier IdRange, ///< \brief Event using range of identifiers NoId, ///< \brief Event without id (can be used for root element only) Category, ///< \brief Not really entry, but starts new category EndOfList ///< \brief End of list of events }; EntryType ET; ///< \brief Type of entry wxString Entry; ///< \brief Name of entry inside event table wxString Type; ///< \brief Macro of event type used inside event table wxString ArgType; ///< \brief Name of type of argument passed to event-processing function wxString NewFuncNameBase; ///< \brief Base for new function name, it will be created as "On" + VarName + NewFuncName }; /** \brief Beginning definition of events array (source file) */ #define WXS_EV_BEGIN(name) \ static wxsEventDesc name[] = { /** \brief Adding new event into list (entry without id, will be connected to widget using wxsEvtHandler::Connect function) */ #define WXS_EV(entry,type,arg,funcbase) \ { wxsEventDesc::NoId, _T(#entry), _T(#type), _T(#arg), _T(#funcbase) } , /** \brief Adding new event into list (entry with id, standard one) */ #define WXS_EVI(entry,type,arg,funcbase) \ { wxsEventDesc::Id, _T(#entry), _T(#type), _T(#arg), _T(#funcbase) } , /** \brief Adding new event into list (entry using range of ids, currently not supported by wxSmith, but may be in future) */ #define WXS_EV2I(entry,type,arg,funcbase) \ { wxsEventDesc::IdRange, _T(#entry), _T(#type), _T(#arg), _T(#funcbase) } , /** \brief Beginning new category */ #define WXS_EV_CATEGORY(name) \ { wxsEventDesc::Category, name, _T(""), _T(""), _T("") }, /** \brief Ending creation of list */ #define WXS_EV_END() \ { wxsEventDesc::EndOfList, _T(""), _T(""), _T(""), _T("") } }; /** \brief Adding all default paint events */ #define WXS_EV_PAINT() \ WXS_EV_CATEGORY(_("Paint events")) \ WXS_EV(EVT_PAINT,wxEVT_PAINT,wxPaintEvent,Paint) \ WXS_EV(EVT_ERASE_BACKGROUND,wxEVT_ERASE_BACKGROUND,wxEraseEvent,EraseBackground) \ /** \brief Adding all keyboard events */ #define WXS_EV_KEYBOARD() \ WXS_EV_CATEGORY(_("Keyboard events")) \ WXS_EV(EVT_KEY_DOWN,wxEVT_KEY_DOWN,wxKeyEvent,KeyDown) \ WXS_EV(EVT_KEY_UP,wxEVT_KEY_UP,wxKeyEvent,KeyUp) \ WXS_EV(EVT_CHAR,wxEVT_CHAR,wxKeyEvent,Char) \ WXS_EV(EVT_SET_FOCUS,wxEVT_SET_FOCUS,wxFocusEvent,SetFocus) \ WXS_EV(EVT_KILL_FOCUS,wxEVT_KILL_FOCUS,wxFocusEvent,KillFocus) #define WXS_EV_MOUSE() \ WXS_EV_CATEGORY(_T("Mouse events")) \ WXS_EV(EVT_LEFT_DOWN,wxEVT_LEFT_DOWN,wxMouseEvent,LeftDown) \ WXS_EV(EVT_LEFT_UP,wxEVT_LEFT_UP,wxMouseEvent,LeftUp) \ WXS_EV(EVT_LEFT_DCLICK,wxEVT_LEFT_DCLICK,wxMouseEvent,LeftDClick) \ WXS_EV(EVT_MIDDLE_DOWN,wxEVT_MIDDLE_DOWN,wxMouseEvent,MiddleDown) \ WXS_EV(EVT_MIDDLE_UP,wxEVT_MIDDLE_UP,wxMouseEvent,MiddleUp) \ WXS_EV(EVT_MIDDLE_DCLICK,wxEVT_MIDDLE_DCLICK,wxMouseEvent,MiddleDClick) \ WXS_EV(EVT_RIGHT_DOWN,wxEVT_RIGHT_DOWN,wxMouseEvent,RightDown) \ WXS_EV(EVT_RIGHT_UP,wxEVT_RIGHT_UP,wxMouseEvent,RightUp) \ WXS_EV(EVT_RIGHT_DCLICK,wxEVT_RIGHT_DCLICK,wxMouseEvent,RightDClick) \ WXS_EV(EVT_MOTION,wxEVT_MOTION,wxMouseEvent,MouseMove) \ WXS_EV(EVT_ENTER_WINDOW,wxEVT_ENTER_WINDOW,wxMouseEvent,MouseEnter) \ WXS_EV(EVT_LEAVE_WINDOW,wxEVT_LEAVE_WINDOW,wxMouseEvent,MouseLeave) \ WXS_EV(EVT_MOUSEWHEEL,wxEVT_MOUSEWHEEL,wxMouseEvent,MouseWheel) \ WXS_EV(EVT_SET_CURSOR,wxEVT_SET_CURSOR,wxSetCursorEvent,SetCursor) \ /** \brief Adding all size-related events */ #define WXS_EV_SIZE() \ WXS_EV(EVT_SIZE,wxEVT_SIZE,wxSizeEvent,Resize) /** \brief Adding all default events */ #define WXS_EV_DEFAULTS() \ WXS_EV_PAINT() \ WXS_EV_KEYBOARD() \ WXS_EV_MOUSE() \ WXS_EV_SIZE() /** \brief Class managing events used by item * * This class manages event used by widget (but it's not responsible for editing * them). * * After building new wxsEvents class, SetEventArray() should be called to * connect class with specified set of events * */ class wxsEvents { public: /** \brief Ctor */ wxsEvents(const wxsEventDesc* Events,wxsItem* Item); /** \brief Getting number of events */ inline int GetCount() { return m_Count; } /** \brief Getting event description */ inline const wxsEventDesc* GetDesc(int Index) { return &m_EventArray[Index]; } /** \brief Getting event handler name */ inline const wxString& GetHandler(int Index) { return m_Functions[Index]; } /** \brief Setting event handler name */ inline void SetHandler(int Index,const wxString& Name) { m_Functions[Index] = Name; } /** \brief Function generating code which binds events with main resource class * * Connecting events is done through wxsEvtHandler::Connect function. * Event table is not used because not all events could be processed. */ void GenerateBindingCode(wxsCoderContext* Context,const wxString& IdString,const wxString& VarNameString); /** \brief Function loading associated function names from Xml node. */ void XmlLoadFunctions(TiXmlElement* Element); /** \brief Function adding handlers to given Xml element */ void XmlSaveFunctions(TiXmlElement* Element); private: wxsItem* m_Item; ///< Item whose events are managed const wxsEventDesc* m_EventArray; ///< Array of events fetched from item wxArrayString m_Functions; ///< Array of function names used for each entry item int m_Count; ///< Number of events }; #endif