diff --git a/code/ryzom/client/src/interface_v3/ctrl_draggable.h b/code/ryzom/client/src/interface_v3/ctrl_draggable.h index 6b59af553..120fabde6 100644 --- a/code/ryzom/client/src/interface_v3/ctrl_draggable.h +++ b/code/ryzom/client/src/interface_v3/ctrl_draggable.h @@ -6,6 +6,8 @@ class CCtrlDraggable : public CCtrlBase { public: + DECLARE_UI_CLASS( CCtrlDraggable ) + CCtrlDraggable( const TCtorParam ¶m ); virtual ~CCtrlDraggable(){}; @@ -21,6 +23,8 @@ public: _LastDraggedSheet = NULL; } + // Necessary because of reflection, no other purpose + void draw(){} REFLECT_EXPORT_START(CCtrlDraggable, CCtrlBase) REFLECT_BOOL("dragable", isDraggable, setDraggable); diff --git a/code/ryzom/client/src/interface_v3/ctrl_scroll.cpp b/code/ryzom/client/src/interface_v3/ctrl_scroll.cpp index da37c6764..dd25f3e28 100644 --- a/code/ryzom/client/src/interface_v3/ctrl_scroll.cpp +++ b/code/ryzom/client/src/interface_v3/ctrl_scroll.cpp @@ -15,8 +15,6 @@ // along with this program. If not, see . -/* -#include "stdpch.h"*/ #include "interface_manager.h" #include "widget_manager.h" #include "ctrl_scroll.h" @@ -33,7 +31,7 @@ NLMISC_REGISTER_OBJECT(CViewBase, CCtrlScroll, std::string, "scroll"); // ------------------------------------------------------------------------------------------------ CCtrlScroll::CCtrlScroll(const TCtorParam ¶m) -: CCtrlBase(param) +: CCtrlScrollBase(param) { _Vertical = true; _Aligned = 1; diff --git a/code/ryzom/client/src/interface_v3/ctrl_scroll.h b/code/ryzom/client/src/interface_v3/ctrl_scroll.h index f7aa19b72..e4f1b4db3 100644 --- a/code/ryzom/client/src/interface_v3/ctrl_scroll.h +++ b/code/ryzom/client/src/interface_v3/ctrl_scroll.h @@ -20,7 +20,7 @@ #define RZ_CTRL_SCROLL_H #include "nel/misc/types_nl.h" -#include "ctrl_base.h" +#include "ctrl_scroll_base.h" /** * Class handling scollbar function @@ -28,11 +28,11 @@ * \author Nevrax France * \date 2002 */ -class CCtrlScroll : public CCtrlBase, public NLMISC::ICDBNode::IPropertyObserver +class CCtrlScroll : public CCtrlScrollBase, public NLMISC::ICDBNode::IPropertyObserver { public: - + DECLARE_UI_CLASS( CCtrlScroll ) CCtrlScroll(const TCtorParam ¶m); ~CCtrlScroll(); @@ -43,9 +43,7 @@ public: virtual void draw(); virtual bool handleEvent (const NLGUI::CEventDescriptor &event); - void setTarget (CInterfaceGroup *pIG); - CInterfaceGroup *getTarget () { return _Target; } // Return the delta value the track has moved sint32 moveTrackX (sint32 dx); sint32 moveTrackY (sint32 dy); @@ -97,7 +95,7 @@ public: void setMax(sint32 max) {_Max = max;} sint32 getMax() const {return _Max;} - REFLECT_EXPORT_START(CCtrlScroll, CCtrlBase) + REFLECT_EXPORT_START(CCtrlScroll, CCtrlScrollBase) REFLECT_LUA_METHOD("setTarget", luaSetTarget) REFLECT_LUA_METHOD("ensureVisible", luaEnsureVisible); REFLECT_SINT32("value", getValue, setValue); @@ -159,8 +157,6 @@ protected: sint32 _LastTargetMaxWReal; sint32 _LastTargetOfsX; - CInterfaceGroup *_Target; // If NULL the scroller is a value scroller - bool _Vertical : 1; // true if vertical track bar bool _IsDBLink : 1; bool _ObserverOn : 1; diff --git a/code/ryzom/client/src/interface_v3/ctrl_scroll_base.cpp b/code/ryzom/client/src/interface_v3/ctrl_scroll_base.cpp new file mode 100644 index 000000000..b0cff5373 --- /dev/null +++ b/code/ryzom/client/src/interface_v3/ctrl_scroll_base.cpp @@ -0,0 +1,66 @@ +// Ryzom - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +#include "ctrl_scroll_base.h" + +CCtrlScrollBase::CCtrlScrollBase( const TCtorParam ¶m ) : +CCtrlBase( param ) +{ + _Target = NULL; +} + +CCtrlScrollBase::~CCtrlScrollBase() +{ +} + +void CCtrlScrollBase::setTarget( CInterfaceGroup *pIG ) +{ + // Necessary because it's supposed to be an abstract class, + // however reflection requires the class to be instantiated. + nlassert( false ); +} + +sint32 CCtrlScrollBase::moveTrackX( sint32 dx ) +{ + // Necessary because it's supposed to be an abstract class, + // however reflection requires the class to be instantiated. + nlassert( false ); + + return 0; +} + +sint32 CCtrlScrollBase::moveTrackY( sint32 dy ) +{ + // Necessary because it's supposed to be an abstract class, + // however reflection requires the class to be instantiated. + nlassert( false ); + + return 0; +} + +void CCtrlScrollBase::moveTargetX( sint32 dx ) +{ + // Necessary because it's supposed to be an abstract class, + // however reflection requires the class to be instantiated. + nlassert( false ); +} + +void CCtrlScrollBase::moveTargetY( sint32 dy ) +{ + // Necessary because it's supposed to be an abstract class, + // however reflection requires the class to be instantiated. + nlassert( false ); +} \ No newline at end of file diff --git a/code/ryzom/client/src/interface_v3/ctrl_scroll_base.h b/code/ryzom/client/src/interface_v3/ctrl_scroll_base.h new file mode 100644 index 000000000..43b82c05a --- /dev/null +++ b/code/ryzom/client/src/interface_v3/ctrl_scroll_base.h @@ -0,0 +1,55 @@ +// Ryzom - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +#ifndef CTRL_SCROLL_BASE_H +#define CTRL_SCROLL_BASE_H + +#include "ctrl_base.h" + +class CInterfaceGroup; + +class CCtrlScrollBase : public CCtrlBase +{ +public: + DECLARE_UI_CLASS( CCtrlScrollBase ) + + CCtrlScrollBase( const TCtorParam ¶m ); + virtual ~CCtrlScrollBase(); + + virtual void setTarget( CInterfaceGroup *pIG ); + CInterfaceGroup* getTarget(){ return _Target; } + virtual sint32 moveTrackX( sint32 dx ); + virtual sint32 moveTrackY( sint32 dy ); + + /** Move the Target Ofs with a Delta, and recompute TrackPos from this Ofs. + * Useful for finer controled group scrolling when the list is very big (with mouseWheel or scroll buttons) + */ + virtual void moveTargetX( sint32 dx ); + virtual void moveTargetY( sint32 dy ); + + + // Necessary because of reflection, no other purpose + void draw(){} + +protected: + CInterfaceGroup *_Target; // If NULL the scroller is a value scroller + +private: + +}; + +#endif + diff --git a/code/ryzom/client/src/interface_v3/interface_group.cpp b/code/ryzom/client/src/interface_v3/interface_group.cpp index ba59626ed..8050e3872 100644 --- a/code/ryzom/client/src/interface_v3/interface_group.cpp +++ b/code/ryzom/client/src/interface_v3/interface_group.cpp @@ -24,7 +24,7 @@ #include "interface_link.h" #include "widget_manager.h" -#include "ctrl_scroll.h" +#include "ctrl_scroll_base.h" #include "group_editbox.h" #include "group_scrolltext.h" #include "lua_ihm_ryzom.h" @@ -203,7 +203,7 @@ bool CInterfaceGroup::moveSBTrackY (CInterfaceGroup *target, sint32 dy) for (itc = _Controls.begin(); itc != _Controls.end(); itc++) { CCtrlBase *pCB = *itc; - CCtrlScroll *pSB = dynamic_cast(pCB); + CCtrlScrollBase *pSB = dynamic_cast(pCB); if (pSB != NULL) { if (pSB->getTarget() == target) @@ -224,7 +224,7 @@ bool CInterfaceGroup::moveSBTargetY(CInterfaceGroup *target,sint32 dy) for (itc = _Controls.begin(); itc != _Controls.end(); itc++) { CCtrlBase *pCB = *itc; - CCtrlScroll *pSB = dynamic_cast(pCB); + CCtrlScrollBase *pSB = dynamic_cast(pCB); if (pSB != NULL) { if (pSB->getTarget() == target) diff --git a/code/ryzom/client/src/interface_v3/register_interface_elements.cpp b/code/ryzom/client/src/interface_v3/register_interface_elements.cpp index e763f40ee..8848f5c41 100644 --- a/code/ryzom/client/src/interface_v3/register_interface_elements.cpp +++ b/code/ryzom/client/src/interface_v3/register_interface_elements.cpp @@ -34,6 +34,7 @@ #include "ctrl_button.h" #include "ctrl_text_button.h" #include "ctrl_col_pick.h" +#include "ctrl_draggable.h" #include "dbctrl_sheet.h" #include "dbgroup_list_sheet.h" #include "group_editbox.h" @@ -42,9 +43,9 @@ #include "dbview_bar.h" #include "dbview_bar3.h" #include "group_list.h" +#include "ctrl_scroll_base.h" #include "ctrl_scroll.h" #include "dbgroup_combo_box.h" -#include "ctrl_scroll.h" #include "group_tab.h" #include "group_html.h" #include "group_header.h" @@ -75,7 +76,8 @@ void registerInterfaceElements() REGISTER_REFLECTABLE_CLASS(CCtrlButton, CCtrlBaseButton); REGISTER_REFLECTABLE_CLASS(CCtrlTextButton, CCtrlBaseButton); REGISTER_REFLECTABLE_CLASS(CCtrlColPick, CCtrlBase); - REGISTER_REFLECTABLE_CLASS(CDBCtrlSheet, CCtrlBase); + REGISTER_REFLECTABLE_CLASS(CCtrlDraggable, CCtrlBase); + REGISTER_REFLECTABLE_CLASS(CDBCtrlSheet, CCtrlDraggable); REGISTER_REFLECTABLE_CLASS(CInterfaceGroup, CCtrlBase); REGISTER_REFLECTABLE_CLASS(CGroupFrame, CInterfaceGroup); REGISTER_REFLECTABLE_CLASS(CGroupModal, CGroupFrame); @@ -84,8 +86,9 @@ void registerInterfaceElements() REGISTER_REFLECTABLE_CLASS(IListSheetBase, CInterfaceGroup); REGISTER_REFLECTABLE_CLASS(CGroupEditBox, CInterfaceGroup); REGISTER_REFLECTABLE_CLASS(CGroupTree, CInterfaceGroup); - REGISTER_REFLECTABLE_CLASS(CDBGroupComboBox, CInterfaceGroup) - REGISTER_REFLECTABLE_CLASS(CCtrlScroll, CCtrlBase); + REGISTER_REFLECTABLE_CLASS(CDBGroupComboBox, CInterfaceGroup); + REGISTER_REFLECTABLE_CLASS(CCtrlScrollBase, CCtrlBase); + REGISTER_REFLECTABLE_CLASS(CCtrlScroll, CCtrlScrollBase); REGISTER_REFLECTABLE_CLASS(CGroupMenu, CGroupModal) REGISTER_REFLECTABLE_CLASS(CGroupSubMenu, CGroupFrame) REGISTER_REFLECTABLE_CLASS(CGroupTab, CInterfaceGroup)