From e9134717d62c95b6d16c2c8e515516a5a372c136 Mon Sep 17 00:00:00 2001 From: gugus Date: Tue, 8 May 2012 12:59:47 +0200 Subject: [PATCH] the GUI part of drag and drop is working --- apps/openmw/mwgui/container.cpp | 42 ++++++++++------------------ apps/openmw/mwgui/itemwidget.hpp | 18 ++++++++++++ apps/openmw/mwgui/window_manager.cpp | 2 ++ 3 files changed, 35 insertions(+), 27 deletions(-) create mode 100644 apps/openmw/mwgui/itemwidget.hpp diff --git a/apps/openmw/mwgui/container.cpp b/apps/openmw/mwgui/container.cpp index 083ce2f646..454dd05c37 100644 --- a/apps/openmw/mwgui/container.cpp +++ b/apps/openmw/mwgui/container.cpp @@ -18,26 +18,11 @@ #include #include "../mwworld/class.hpp" #include "../mwinput/inputmanager.hpp" +#include "itemwidget.hpp" using namespace MWGui; using namespace Widgets; -class ItemWidget: public MyGUI::ImageBox -{ -public: - ItemWidget() - :ImageBox() - { - } - virtual ~ItemWidget() - { - } - - void setPtr(MWWorld::Ptr &ptr,int pos){mPtr = ptr;mPos = pos;} - - MWWorld::Ptr mPtr; - int mPos; -}; ContainerWindow::ContainerWindow(WindowManager& parWindowManager,MWWorld::Environment& environment,DragAndDrop* dragAndDrop) @@ -149,39 +134,36 @@ void ContainerWindow::drawItems() int x = 4; int y = 4; int count = 0; - + int index = 0; for (MWWorld::ContainerStoreIterator iter (containerStore.begin()); iter!=containerStore.end(); ++iter) { - count++; + index++; if(iter->getRefData().getCount() > 0) { + count++; std::string path = std::string("icons\\"); path+=MWWorld::Class::get(*iter).getInventoryIcon(*iter); ItemWidget* image = mContainerWidget->createWidget("ImageBox", MyGUI::IntCoord(x, y, 32, 32), MyGUI::Align::Default); MyGUI::TextBox* text = image->createWidget("SandBrightText", MyGUI::IntCoord(x, y, 18, 18), MyGUI::Align::Default, std::string("Label")); image->eventMouseButtonClick += MyGUI::newDelegate(this,&ContainerWindow::onSelectedItem); - //image->setPtr(*iter,count); - image->mPos = count; - - //image->mPtr = *iter; + image->mPos = index; + image->mPtr = *iter; //image->eventMouseMove += MyGUI::newDelegate(this,&ContainerWindow::onMouseMove); - /*x += 36; + x += 36; if(count % 20 == 0) { y += 36; x = 4; count = 0; - }*/ + } if(iter->getRefData().getCount() > 1) text->setCaption(boost::lexical_cast(iter->getRefData().getCount())); - //mContainerWidgets int pos = path.rfind("."); path.erase(pos); path.append(".dds"); - //std::cout << path << std::endl; image->setImageTexture(path); } } @@ -251,7 +233,13 @@ void ContainerWindow::onContainerClicked(MyGUI::Widget* _sender) std::cout << "container clicked"; if(mDragAndDrop->mIsOnDragAndDrop) //drop widget here { - //mContainer.getContainerStore()->add(mDragAndDrop->mDraggedWidget-> + ItemWidget* item = static_cast(mDragAndDrop->mDraggedWidget); + std::cout << item->mPos << item->mPtr.getTypeName(); + if(item->mPtr.getContainerStore() == 0) std::cout << "nocontainer!"; + std::cout << item->mPtr.getContainerStore()->getType(item->mPtr); + MWWorld::Ptr ptr = item->mPtr; + //MWWorld::World + //mContainer.getContainerStore()->add(item->mPtr); mDragAndDrop->mIsOnDragAndDrop = false; mDragAndDrop->mDraggedWidget->detachFromWidget(); mDragAndDrop->mDraggedWidget->attachToWidget(mContainerWidget); diff --git a/apps/openmw/mwgui/itemwidget.hpp b/apps/openmw/mwgui/itemwidget.hpp new file mode 100644 index 0000000000..ff65bfd4d0 --- /dev/null +++ b/apps/openmw/mwgui/itemwidget.hpp @@ -0,0 +1,18 @@ +#ifndef MWGUI_ITEM_WIDGET_H +#define MWGUI_ITEM_WIDGET_H +#include +#include "../mwworld/ptr.hpp" + +namespace MWGui +{ + class ItemWidget: public MyGUI::ImageBox + { + MYGUI_RTTI_DERIVED( ItemWidget ) + public: + + MWWorld::Ptr mPtr; + int mPos; + }; +} + +#endif \ No newline at end of file diff --git a/apps/openmw/mwgui/window_manager.cpp b/apps/openmw/mwgui/window_manager.cpp index 9db7892e26..e72f635bf0 100644 --- a/apps/openmw/mwgui/window_manager.cpp +++ b/apps/openmw/mwgui/window_manager.cpp @@ -9,6 +9,7 @@ #include "messagebox.hpp" #include "container.hpp" #include "inventorywindow.hpp" +#include "itemwidget.hpp" #include "../mwmechanics/mechanicsmanager.hpp" #include "../mwinput/inputmanager.hpp" @@ -68,6 +69,7 @@ WindowManager::WindowManager(MWWorld::Environment& environment, //Register own widgets with MyGUI MyGUI::FactoryManager::getInstance().registerFactory("Widget"); + MyGUI::FactoryManager::getInstance().registerFactory("Widget"); // Get size info from the Gui object assert(gui);