From 8d5bfc8598ca01117c449efdf41f01093736502a Mon Sep 17 00:00:00 2001 From: dfighter1985 Date: Fri, 22 Jun 2012 23:17:55 +0200 Subject: [PATCH] CHANGED: #1471 CGroupEditBox no longer depends on CGroupContainer, and CInputHandlerManager. --- .../include/nel/gui/group_container_base.h | 3 ++ .../client/src/interface_v3/group_editbox.cpp | 51 +++++-------------- .../client/src/interface_v3/group_editbox.h | 16 +++++- .../interface_v3/input_handler_manager.cpp | 2 + .../src/interface_v3/input_handler_manager.h | 3 +- 5 files changed, 36 insertions(+), 39 deletions(-) diff --git a/code/nel/include/nel/gui/group_container_base.h b/code/nel/include/nel/gui/group_container_base.h index 1e5313e1b..b961f5da3 100644 --- a/code/nel/include/nel/gui/group_container_base.h +++ b/code/nel/include/nel/gui/group_container_base.h @@ -86,6 +86,9 @@ namespace NLGUI uint8 getCurrentContentAlpha() const{ return _CurrentContentAlpha; } virtual bool isGrayed() const{ return false; } + virtual bool getTouchFlag(bool clearFlag) const{ return false; } + virtual void backupPosition(){} + virtual void restorePosition(){} protected: void triggerAlphaSettingsChangedAH(); diff --git a/code/ryzom/client/src/interface_v3/group_editbox.cpp b/code/ryzom/client/src/interface_v3/group_editbox.cpp index 529642288..1fd5c37cf 100644 --- a/code/ryzom/client/src/interface_v3/group_editbox.cpp +++ b/code/ryzom/client/src/interface_v3/group_editbox.cpp @@ -14,21 +14,17 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . - - -#include "stdpch.h" - #include "group_editbox.h" -#include "interface_manager.h" -#include "input_handler_manager.h" #include "nel/misc/command.h" #include "nel/gui/view_text.h" #include "nel/misc/xml_auto_ptr.h" #include "nel/gui/interface_options.h" -#include "dbctrl_sheet.h" -#include "group_container.h" -#include "../time_client.h" +#include "nel/gui/ctrl_draggable.h" +#include "nel/gui/group_container_base.h" #include "nel/gui/lua_ihm.h" +#include "nel/gui/widget_manager.h" +#include "nel/gui/view_renderer.h" +#include "nel/gui/db_manager.h" using namespace std; using namespace NLMISC; @@ -41,6 +37,7 @@ using namespace NL3D; sint32 CGroupEditBox::_SelectCursorPos = 0; CGroupEditBox *CGroupEditBox::_MenuFather = NULL; +CGroupEditBox::IComboKeyHandler* CGroupEditBox::comboKeyHandler = NULL; // ---------------------------------------------------------------------------- @@ -93,7 +90,6 @@ CGroupEditBox::CGroupEditBox(const TCtorParam ¶m) : CGroupEditBox::~CGroupEditBox() { if (this == _CurrSelection) _CurrSelection = NULL; - CInterfaceManager *im = CInterfaceManager::getInstance(); if (CWidgetManager::getInstance()->getCaptureKeyboard() == this || CWidgetManager::getInstance()->getOldCaptureKeyboard() == this) { CWidgetManager::getInstance()->resetCaptureKeyboard(); @@ -106,8 +102,6 @@ bool CGroupEditBox::parse(xmlNodePtr cur, CInterfaceGroup * parentGroup) if(!CInterfaceGroup::parse(cur, parentGroup)) return false; CXMLAutoPtr prop; -// CInterfaceManager *pIM = CInterfaceManager::getInstance(); -// CViewRenderer &rVR = *CViewRenderer::getInstance(); if (! CInterfaceGroup::parse(cur,parentGroup) ) { @@ -216,7 +210,6 @@ bool CGroupEditBox::parse(xmlNodePtr cur, CInterfaceGroup * parentGroup) void CGroupEditBox::draw () { // - CInterfaceManager *pIM = CInterfaceManager::getInstance(); CViewRenderer &rVR = *CViewRenderer::getInstance(); // /*CRGBA col; @@ -296,7 +289,7 @@ void CGroupEditBox::draw () // Display the cursor if needed if (CWidgetManager::getInstance()->getCaptureKeyboard () == this) { - _BlinkTime += DT; + _BlinkTime += 0.0025f; if (_BlinkTime > 0.25f) { _BlinkTime = fmodf(_BlinkTime, 0.25f); @@ -566,7 +559,6 @@ void CGroupEditBox::handleEventChar(const NLGUI::CEventDescriptorKey &rEDK) break; // OTHER default: - CInterfaceManager *pIM = CInterfaceManager::getInstance(); if ((rEDK.getChar() == KeyRETURN) && !_WantReturn) { // update historic. @@ -583,7 +575,6 @@ void CGroupEditBox::handleEventChar(const NLGUI::CEventDescriptorKey &rEDK) _CursorPos = 0; // loose the keyboard focus - CInterfaceManager *im = CInterfaceManager::getInstance(); if (NLGUI::CDBManager::getInstance()->getDbProp("UI:SAVE:CHAT:ENTER_DONT_QUIT_CB")->getValue32() == 0) { if(_LooseFocusOnEnter) @@ -717,7 +708,6 @@ void CGroupEditBox::handleEventString(const NLGUI::CEventDescriptorKey &rEDK) // ---------------------------------------------------------------------------- bool CGroupEditBox::undo() { - CInterfaceManager *im = CInterfaceManager::getInstance(); if (CWidgetManager::getInstance()->getCaptureKeyboard() != this) return false; if (!_CanUndo) return false; _ModifiedInputString = _InputString; @@ -732,7 +722,6 @@ bool CGroupEditBox::undo() // ---------------------------------------------------------------------------- bool CGroupEditBox::redo() { - CInterfaceManager *im = CInterfaceManager::getInstance(); if (CWidgetManager::getInstance()->getCaptureKeyboard() != this) return false; if (!_CanRedo) return false; setInputString(_ModifiedInputString); @@ -748,11 +737,10 @@ void CGroupEditBox::triggerOnChangeAH() { _CanUndo = true; _CanRedo = false; + if (!_AHOnChange.empty()) - { - CInterfaceManager *pIM = CInterfaceManager::getInstance(); CAHManager::getInstance()->runActionHandler(_AHOnChange, this, _ParamsOnChange); - } + } // ---------------------------------------------------------------------------- @@ -856,8 +844,7 @@ bool CGroupEditBox::handleEvent (const NLGUI::CEventDescriptor& event) else { // Look into the input handler Manager if the key combo has to be considered as handled - CInputHandlerManager *pIH= CInputHandlerManager::getInstance(); - if( pIH->isComboKeyChat(rEDK) ) + if( ( CGroupEditBox::comboKeyHandler != NULL ) && comboKeyHandler->isComboKeyChat(rEDK) ) return true; else return false; @@ -871,8 +858,6 @@ bool CGroupEditBox::handleEvent (const NLGUI::CEventDescriptor& event) ///////////////// const NLGUI::CEventDescriptorMouse &eventDesc = (const NLGUI::CEventDescriptorMouse &)event; - CInterfaceManager *pIM = CInterfaceManager::getInstance(); - if (eventDesc.getEventTypeExtended() == NLGUI::CEventDescriptorMouse::mouserightup) { if (CWidgetManager::getInstance()->getCapturePointerRight() == this) @@ -880,7 +865,7 @@ bool CGroupEditBox::handleEvent (const NLGUI::CEventDescriptor& event) CWidgetManager::getInstance()->setCapturePointerRight(NULL); if (!_ListMenuRight.empty()) { - if (CDBCtrlSheet::getDraggedSheet() == NULL) + if (CCtrlDraggable::getDraggedSheet() == NULL) { _MenuFather = this; CWidgetManager::getInstance()->enableModalWindow (this, _ListMenuRight); @@ -1069,7 +1054,7 @@ void CGroupEditBox::updateCoords() if (_BackupFatherContainerPos) { - CGroupContainer *gc = static_cast< CGroupContainer* >( getEnclosingContainer() ); + CGroupContainerBase *gc = static_cast< CGroupContainerBase* >( getEnclosingContainer() ); if (gc && !gc->getTouchFlag(true)) { @@ -1301,12 +1286,9 @@ void CGroupEditBox::setCommand(const ucstring &command, bool execute) // *************************************************************************** void CGroupEditBox::makeTopWindow() { - CInterfaceManager *im = CInterfaceManager::getInstance(); CInterfaceGroup *root = getRootWindow(); - if (root) - { + if(root) CWidgetManager::getInstance()->setTopWindow(root); - } } // *************************************************************************** @@ -1405,10 +1387,8 @@ void CGroupEditBox::elementCaptured(CCtrlBase *capturedElement) void CGroupEditBox::onKeyboardCaptureLost() { if (!_AHOnFocusLost.empty()) - { - CInterfaceManager *im = CInterfaceManager::getInstance(); CAHManager::getInstance()->runActionHandler(_AHOnFocusLost, this, _AHOnFocusLostParams); - } + } // *************************************************************************** @@ -1428,7 +1408,6 @@ void CGroupEditBox::setFocusOnText() return; // else set the focus - CInterfaceManager *pIM = CInterfaceManager::getInstance(); CWidgetManager::getInstance()->setCaptureKeyboard (this); _CurrSelection = this; @@ -1454,7 +1433,6 @@ int CGroupEditBox::luaCancelFocusOnText(CLuaState &ls) const char *funcName = "cancelFocusOnText"; CLuaIHM::checkArgCount(ls, funcName, 0); - CInterfaceManager *pIM = CInterfaceManager::getInstance(); if (CWidgetManager::getInstance()->getCaptureKeyboard()==this || CWidgetManager::getInstance()->getOldCaptureKeyboard()==this) CWidgetManager::getInstance()->resetCaptureKeyboard(); @@ -1490,7 +1468,6 @@ void CGroupEditBox::setFrozen (bool state) // if frozen, loose the focus if(_Frozen) { - CInterfaceManager *pIM= CInterfaceManager::getInstance(); // stop capture and selection CWidgetManager::getInstance()->setCaptureKeyboard (NULL); if(_CurrSelection==this) _CurrSelection = NULL; diff --git a/code/ryzom/client/src/interface_v3/group_editbox.h b/code/ryzom/client/src/interface_v3/group_editbox.h index 1c0a02e68..2df561ff8 100644 --- a/code/ryzom/client/src/interface_v3/group_editbox.h +++ b/code/ryzom/client/src/interface_v3/group_editbox.h @@ -33,8 +33,16 @@ namespace NLGUI class CGroupEditBox : public CGroupEditBoxBase { public: + + class IComboKeyHandler + { + public: + virtual ~IComboKeyHandler(){} + virtual bool isComboKeyChat( const NLGUI::CEventDescriptorKey &edk ) const = 0; + }; + enum TEntryType { Text, Integer, PositiveInteger, Float, PositiveFloat, Alpha, AlphaNum, AlphaNumSpace, Password, Filename, PlayerName }; // the type of entry this edit bot can deal with -public: + DECLARE_UI_CLASS( CGroupEditBox ) /// Constructor CGroupEditBox(const TCtorParam ¶m); @@ -341,6 +349,12 @@ private: } return false; } + + static IComboKeyHandler *comboKeyHandler; + +public: + static void setComboKeyHandler( IComboKeyHandler *handler ){ comboKeyHandler = handler; } + }; diff --git a/code/ryzom/client/src/interface_v3/input_handler_manager.cpp b/code/ryzom/client/src/interface_v3/input_handler_manager.cpp index da2fddea9..7622cc737 100644 --- a/code/ryzom/client/src/interface_v3/input_handler_manager.cpp +++ b/code/ryzom/client/src/interface_v3/input_handler_manager.cpp @@ -67,11 +67,13 @@ CInputHandlerManager::CInputHandlerManager() _RecoverFocusLost = false; inputHandler.setListener( CInterfaceManager::getInstance() ); + CGroupEditBox::setComboKeyHandler( this ); } // *************************************************************************** CInputHandlerManager::~CInputHandlerManager() { + CGroupEditBox::setComboKeyHandler( NULL ); } // ******************************************************************************************** diff --git a/code/ryzom/client/src/interface_v3/input_handler_manager.h b/code/ryzom/client/src/interface_v3/input_handler_manager.h index 085806122..aa5903b72 100644 --- a/code/ryzom/client/src/interface_v3/input_handler_manager.h +++ b/code/ryzom/client/src/interface_v3/input_handler_manager.h @@ -26,6 +26,7 @@ #include #include "nel/gui/event_descriptor.h" #include "nel/gui/input_handler.h" +#include "group_editbox.h" /** @@ -40,7 +41,7 @@ */ -class CInputHandlerManager : public NLMISC::IEventListener +class CInputHandlerManager : public NLMISC::IEventListener, public CGroupEditBox::IComboKeyHandler { public: /// The EventServer Filled with Filtered Messages the InterfaceManager didn't cactch