From d266b4fe87a5a7377d5846076562339b18415539 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sun, 13 May 2012 10:18:17 +0200 Subject: [PATCH] hide the cursor during drag&drop and don't allow hotkeys that change guimode --- apps/openmw/mwgui/container.cpp | 11 +++++++++-- apps/openmw/mwgui/window_manager.cpp | 5 +++++ apps/openmw/mwgui/window_manager.hpp | 2 ++ apps/openmw/mwinput/inputmanager.cpp | 21 ++++++++++++++++++++- apps/openmw/mwinput/inputmanager.hpp | 2 ++ 5 files changed, 38 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwgui/container.cpp b/apps/openmw/mwgui/container.cpp index fd83bddfc..0236e17c2 100644 --- a/apps/openmw/mwgui/container.cpp +++ b/apps/openmw/mwgui/container.cpp @@ -60,12 +60,14 @@ void ContainerBase::onSelectedItem(MyGUI::Widget* _sender) std::string sound = MWWorld::Class::get(object).getUpSoundId(object); MWBase::Environment::get().getSoundManager()->playSound (sound, 1.0, 1.0); - _sender->setUserString("drag","on"); mDragAndDrop->mDraggedWidget = _sender; mDragAndDrop->mContainerWindow = const_cast(this); // hide the count text _sender->getChildAt(0)->getChildAt(0)->setVisible(false); drawItems(); + + MWBase::Environment::get().getInputManager()->setDragDrop(true); + MWBase::Environment::get().getWindowManager()->setMouseVisible(false); } else onContainerClicked(mContainerWidget); @@ -90,6 +92,9 @@ void ContainerBase::onContainerClicked(MyGUI::Widget* _sender) mDragAndDrop->mDraggedWidget = 0; mDragAndDrop->mContainerWindow = 0; drawItems(); + + MWBase::Environment::get().getInputManager()->setDragDrop(false); + MWBase::Environment::get().getWindowManager()->setMouseVisible(true); } } @@ -146,7 +151,9 @@ void ContainerBase::drawItems() else if (mFilter == Filter_Misc) { categories = MWWorld::ContainerStore::Type_Miscellaneous + MWWorld::ContainerStore::Type_Book - + MWWorld::ContainerStore::Type_Ingredient; + + MWWorld::ContainerStore::Type_Ingredient + MWWorld::ContainerStore::Type_Repair + + MWWorld::ContainerStore::Type_Lockpick + MWWorld::ContainerStore::Type_Light + + MWWorld::ContainerStore::Type_Apparatus; } for (MWWorld::ContainerStoreIterator iter (containerStore.begin(categories)); iter!=containerStore.end(); ++iter) diff --git a/apps/openmw/mwgui/window_manager.cpp b/apps/openmw/mwgui/window_manager.cpp index 249f1fcfd..067d67ca4 100644 --- a/apps/openmw/mwgui/window_manager.cpp +++ b/apps/openmw/mwgui/window_manager.cpp @@ -558,3 +558,8 @@ void WindowManager::setSpellVisibility(bool visible) { hud->spellBox->setVisible(visible); } + +void WindowManager::setMouseVisible(bool visible) +{ + MyGUI::PointerManager::getInstance().setVisible(visible); +} diff --git a/apps/openmw/mwgui/window_manager.hpp b/apps/openmw/mwgui/window_manager.hpp index 1ea4f267f..b55b425a8 100644 --- a/apps/openmw/mwgui/window_manager.hpp +++ b/apps/openmw/mwgui/window_manager.hpp @@ -166,6 +166,8 @@ namespace MWGui void setFocusObject(const MWWorld::Ptr& focus); + void setMouseVisible(bool visible); + void toggleFogOfWar(); void toggleFullHelp(); ///< show extra info in item tooltips (owner, script) bool getFullHelp() const; diff --git a/apps/openmw/mwinput/inputmanager.cpp b/apps/openmw/mwinput/inputmanager.cpp index 9026cdf64..4d79eb321 100644 --- a/apps/openmw/mwinput/inputmanager.cpp +++ b/apps/openmw/mwinput/inputmanager.cpp @@ -88,6 +88,8 @@ namespace MWInput MWGui::WindowManager &windows; OMW::Engine& mEngine; + bool mDragDrop; + /* InputImpl Methods */ @@ -143,6 +145,9 @@ namespace MWInput { using namespace MWGui; + if (mDragDrop) + return; + GuiMode mode = windows.getMode(); // Toggle between game mode and inventory mode @@ -159,6 +164,9 @@ namespace MWInput { using namespace MWGui; + if (mDragDrop) + return; + GuiMode mode = windows.getMode(); // Switch to console mode no matter what mode we are currently @@ -219,7 +227,8 @@ namespace MWInput poller(input), player(_player), windows(_windows), - mEngine (engine) + mEngine (engine), + mDragDrop(false) { using namespace OEngine::Input; using namespace OEngine::Render; @@ -319,6 +328,11 @@ namespace MWInput poller.bind(A_Crouch, KC_LCONTROL); } + void setDragDrop(bool dragDrop) + { + mDragDrop = dragDrop; + } + //NOTE: Used to check for movement keys void update () { @@ -426,4 +440,9 @@ namespace MWInput { impl->update(); } + + void MWInputManager::setDragDrop(bool dragDrop) + { + impl->setDragDrop(dragDrop); + } } diff --git a/apps/openmw/mwinput/inputmanager.hpp b/apps/openmw/mwinput/inputmanager.hpp index 721c77d9f..158d05f0e 100644 --- a/apps/openmw/mwinput/inputmanager.hpp +++ b/apps/openmw/mwinput/inputmanager.hpp @@ -50,6 +50,8 @@ namespace MWInput void update(); + void setDragDrop(bool dragDrop); + void setGuiMode(MWGui::GuiMode mode); }; }