From ed6ff0a94ac090d3357ee6885c2f4fb309530db6 Mon Sep 17 00:00:00 2001 From: scrawl Date: Sat, 12 May 2012 13:12:37 +0200 Subject: [PATCH] cleanup 3 --- apps/openmw/mwgui/container.cpp | 304 ++++++++---------- apps/openmw/mwgui/container.hpp | 40 ++- apps/openmw/mwgui/inventorywindow.cpp | 2 +- apps/openmw/mwgui/inventorywindow.hpp | 2 +- .../mygui/openmw_container_window_layout.xml | 9 +- .../mygui/openmw_inventory_window_layout.xml | 9 +- files/mygui/openmw_scroll_skin.xml | 1 - 7 files changed, 173 insertions(+), 194 deletions(-) diff --git a/apps/openmw/mwgui/container.cpp b/apps/openmw/mwgui/container.cpp index b46dfdf530..b4d3698061 100644 --- a/apps/openmw/mwgui/container.cpp +++ b/apps/openmw/mwgui/container.cpp @@ -25,177 +25,23 @@ using namespace MWGui; using namespace Widgets; -ContainerWindow::ContainerWindow(WindowManager& parWindowManager,DragAndDrop* dragAndDrop) - : WindowBase("openmw_container_window_layout.xml", parWindowManager), - mDragAndDrop(dragAndDrop), - mContainer() -{ - setText("_Main", "Name of Container"); - - getWidget(mContainerWidget, "Items"); - getWidget(mTakeButton, "TakeButton"); - getWidget(mCloseButton, "CloseButton"); - - mCloseButton->eventMouseButtonClick += MyGUI::newDelegate(this, &ContainerWindow::onCloseButtonClicked); - mTakeButton->eventMouseButtonClick += MyGUI::newDelegate(this, &ContainerWindow::onTakeAllButtonClicked); - mContainerWidget->eventMouseButtonClick += MyGUI::newDelegate(this, &ContainerWindow::onContainerClicked); - - setText("CloseButton", MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sClose")->str); - setText("TakeButton", MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sTakeAll")->str); - - // adjust buttons size to fit text - int closeButtonWidth = mCloseButton->getTextSize().width+24; - int takeButtonWidth = mTakeButton->getTextSize().width+24; - mCloseButton->setCoord(600-20-closeButtonWidth, mCloseButton->getCoord().top, closeButtonWidth, mCloseButton->getCoord().height); - mTakeButton->setCoord(600-20-closeButtonWidth-takeButtonWidth-8, mTakeButton->getCoord().top, takeButtonWidth, mTakeButton->getCoord().height); - - int w = MyGUI::RenderManager::getInstance().getViewSize().width; - int h = MyGUI::RenderManager::getInstance().getViewSize().height; - setCoord(w-600,h-300,600,300); -} - -ContainerWindow::ContainerWindow(WindowManager& parWindowManager,DragAndDrop* dragAndDrop,std::string guiFile) +ContainerBase::ContainerBase(WindowManager& parWindowManager,DragAndDrop* dragAndDrop,std::string guiFile) : WindowBase(guiFile, parWindowManager), mDragAndDrop(dragAndDrop), mContainer() { - setText("_Main", "Name of Container"); - adjustWindowCaption(); getWidget(mContainerWidget, "Items"); - mContainerWidget->eventMouseButtonClick += MyGUI::newDelegate(this, &ContainerWindow::onContainerClicked); + getWidget(mItemView, "ItemView"); + + mContainerWidget->eventMouseButtonClick += MyGUI::newDelegate(this, &ContainerBase::onContainerClicked); + static_cast(mMainWidget)->eventWindowChangeCoord += MyGUI::newDelegate(this, &ContainerBase::onWindowResize); } -ContainerWindow::~ContainerWindow() + +ContainerBase::~ContainerBase() { } -void ContainerWindow::setName(std::string contName) -{ - setText("_Main", contName); - adjustWindowCaption(); -} - - - -void ContainerWindow::open(MWWorld::Ptr container) -{ - mContainer = container; - setName(MWWorld::Class::get(container).getName(container)); - //MWWorld::ContainerStore* containerStore = container.getContainerStore(); - drawItems(); - setVisible(true); -} - -void ContainerWindow::drawItems() -{ - while (mContainerWidget->getChildCount()) - { - MyGUI::Gui::getInstance().destroyWidget(mContainerWidget->getChildAt(0)); - } - MWWorld::ContainerStore& containerStore = MWWorld::Class::get(mContainer).getContainerStore(mContainer); - //mContainerWidget-> - - /*MWWorld::ManualRef furRef (mWindowManager.getStore(), "fur_cuirass"); - furRef.getPtr().getRefData().setCount (5); - MWWorld::ManualRef bukkitRef (mWindowManager.getStore(), "misc_com_bucket_01"); - MWWorld::ManualRef broomRef (mWindowManager.getStore(), "misc_com_broom_01"); - MWWorld::ManualRef goldRef (mWindowManager.getStore(), "gold_100"); - - containerStore.add(furRef.getPtr()); - containerStore.add(furRef.getPtr()); - containerStore.add(furRef.getPtr()); - containerStore.add(broomRef.getPtr()); - containerStore.add(broomRef.getPtr()); - containerStore.add(broomRef.getPtr()); - containerStore.add(broomRef.getPtr()); - containerStore.add(broomRef.getPtr()); - containerStore.add(broomRef.getPtr()); - containerStore.add(broomRef.getPtr()); - containerStore.add(broomRef.getPtr()); - containerStore.add(broomRef.getPtr()); - containerStore.add(broomRef.getPtr()); - containerStore.add(bukkitRef.getPtr()); - containerStore.add(bukkitRef.getPtr()); - containerStore.add(bukkitRef.getPtr()); - containerStore.add(bukkitRef.getPtr()); - containerStore.add(bukkitRef.getPtr()); - containerStore.add(bukkitRef.getPtr()); - containerStore.add(bukkitRef.getPtr()); - containerStore.add(bukkitRef.getPtr()); - containerStore.add(bukkitRef.getPtr()); - containerStore.add(bukkitRef.getPtr()); - containerStore.add(goldRef.getPtr());*/ - - - // ESMS::LiveCellRef *ref = iter->get(); - - int x = 4; - int y = 4; - int count = 0; - int index = 0; - - for (MWWorld::ContainerStoreIterator iter (containerStore.begin()); iter!=containerStore.end(); ++iter) - { - 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->mPos = index; - image->mPtr = *iter; - //image->eventMouseMove += MyGUI::newDelegate(this,&ContainerWindow::onMouseMove); - 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())); - - int pos = path.rfind("."); - path.erase(pos); - path.append(".dds"); - image->setImageTexture(path); - } - } -} - -void ContainerWindow::Update() -{ - if(mDragAndDrop->mIsOnDragAndDrop) - { - if(mDragAndDrop->mDraggedWidget) - mDragAndDrop->mDraggedWidget->setPosition(MyGUI::InputManager::getInstance().getMousePosition()); - else mDragAndDrop->mIsOnDragAndDrop = false; //If this happens, there is a bug. - } -} - -void ContainerWindow::onCloseButtonClicked(MyGUI::Widget* _sender) -{ - if(!mDragAndDrop->mIsOnDragAndDrop) - { - MWBase::Environment::get().getWindowManager()->setGuiMode(GM_Game); - setVisible(false); - } -} - -void ContainerWindow::onTakeAllButtonClicked(MyGUI::Widget* _sender) -{ - if(!mDragAndDrop->mIsOnDragAndDrop) - { - /// \todo - MWBase::Environment::get().getWindowManager()->setGuiMode(GM_Game); - setVisible(false); - } -} - -void ContainerWindow::onSelectedItem(MyGUI::Widget* _sender) +void ContainerBase::onSelectedItem(MyGUI::Widget* _sender) { if(!mDragAndDrop->mIsOnDragAndDrop) { @@ -221,22 +67,13 @@ void ContainerWindow::onSelectedItem(MyGUI::Widget* _sender) //std::cout << mContainerWidget->getParent()->getParent()->getName(); _sender->setUserString("drag","on"); mDragAndDrop->mDraggedWidget = _sender; - mDragAndDrop->mContainerWindow = const_cast(this); + mDragAndDrop->mContainerWindow = const_cast(this); drawItems(); std::cout << "selected!"; } } -void ContainerWindow::onMouseMove(MyGUI::Widget* _sender, int _left, int _top) -{ - /*if(_sender->getUserString("drag") == "on") - { - _sender->setPosition(_left,_top); - - }*/ -} - -void ContainerWindow::onContainerClicked(MyGUI::Widget* _sender) +void ContainerBase::onContainerClicked(MyGUI::Widget* _sender) { std::cout << "container clicked"; if(mDragAndDrop->mIsOnDragAndDrop) //drop widget here @@ -255,3 +92,124 @@ void ContainerWindow::onContainerClicked(MyGUI::Widget* _sender) drawItems(); } } + +void ContainerBase::onWindowResize(MyGUI::Window* window) +{ +} + +void ContainerBase::setName(std::string contName) +{ + setText("_Main", contName); + adjustWindowCaption(); +} + +void ContainerBase::open(MWWorld::Ptr container) +{ + mContainer = container; + setName(MWWorld::Class::get(container).getName(container)); + drawItems(); + setVisible(true); +} + +void ContainerBase::drawItems() +{ + while (mContainerWidget->getChildCount()) + { + MyGUI::Gui::getInstance().destroyWidget(mContainerWidget->getChildAt(0)); + } + MWWorld::ContainerStore& containerStore = MWWorld::Class::get(mContainer).getContainerStore(mContainer); + + int x = 4; + int y = 4; + int count = 0; + int index = 0; + + for (MWWorld::ContainerStoreIterator iter (containerStore.begin()); iter!=containerStore.end(); ++iter) + { + 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,&ContainerBase::onSelectedItem); + image->mPos = index; + image->mPtr = *iter; + 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())); + + int pos = path.rfind("."); + path.erase(pos); + path.append(".dds"); + image->setImageTexture(path); + } + } +} + +void ContainerBase::Update() +{ + if(mDragAndDrop->mIsOnDragAndDrop) + { + if(mDragAndDrop->mDraggedWidget) + mDragAndDrop->mDraggedWidget->setPosition(MyGUI::InputManager::getInstance().getMousePosition()); + else mDragAndDrop->mIsOnDragAndDrop = false; //If this happens, there is a bug. + } +} + +// ------------------------------------------------------------------------------------------------ + +ContainerWindow::ContainerWindow(WindowManager& parWindowManager,DragAndDrop* dragAndDrop) + : ContainerBase(parWindowManager, dragAndDrop, "openmw_container_window_layout.xml") +{ + getWidget(mTakeButton, "TakeButton"); + getWidget(mCloseButton, "CloseButton"); + + mCloseButton->eventMouseButtonClick += MyGUI::newDelegate(this, &ContainerWindow::onCloseButtonClicked); + mTakeButton->eventMouseButtonClick += MyGUI::newDelegate(this, &ContainerWindow::onTakeAllButtonClicked); + + setText("CloseButton", MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sClose")->str); + setText("TakeButton", MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sTakeAll")->str); + + // adjust buttons size to fit text + int closeButtonWidth = mCloseButton->getTextSize().width+24; + int takeButtonWidth = mTakeButton->getTextSize().width+24; + mCloseButton->setCoord(600-20-closeButtonWidth, mCloseButton->getCoord().top, closeButtonWidth, mCloseButton->getCoord().height); + mTakeButton->setCoord(600-20-closeButtonWidth-takeButtonWidth-8, mTakeButton->getCoord().top, takeButtonWidth, mTakeButton->getCoord().height); + + int w = MyGUI::RenderManager::getInstance().getViewSize().width; + int h = MyGUI::RenderManager::getInstance().getViewSize().height; + setCoord(w-600,h-300,600,300); +} + +ContainerWindow::~ContainerWindow() +{ +} + +void ContainerWindow::onCloseButtonClicked(MyGUI::Widget* _sender) +{ + if(!mDragAndDrop->mIsOnDragAndDrop) + { + MWBase::Environment::get().getWindowManager()->setGuiMode(GM_Game); + setVisible(false); + } +} + +void ContainerWindow::onTakeAllButtonClicked(MyGUI::Widget* _sender) +{ + if(!mDragAndDrop->mIsOnDragAndDrop) + { + /// \todo + MWBase::Environment::get().getWindowManager()->setGuiMode(GM_Game); + setVisible(false); + } +} diff --git a/apps/openmw/mwgui/container.hpp b/apps/openmw/mwgui/container.hpp index ad029ae805..84b63abc8e 100644 --- a/apps/openmw/mwgui/container.hpp +++ b/apps/openmw/mwgui/container.hpp @@ -27,6 +27,7 @@ namespace MWGui { class WindowManager; class ContainerWindow; + class ContainerBase; } @@ -36,44 +37,55 @@ namespace MWGui { public: bool mIsOnDragAndDrop; - ContainerWindow* mContainerWindow; + ContainerBase* mContainerWindow; MyGUI::Widget* mDraggedWidget; MyGUI::Widget* mDragAndDropWidget; MWWorld::ContainerStore mStore; MWWorld::Ptr mItem; }; - class ContainerWindow : public WindowBase + class ContainerBase : public WindowBase { public: - ContainerWindow(WindowManager& parWindowManager,DragAndDrop* dragAndDrop); - ContainerWindow(WindowManager& parWindowManager,DragAndDrop* dragAndDrop, - std::string guiFile); + ContainerBase(WindowManager& parWindowManager, DragAndDrop* dragAndDrop, std::string guiFile); + virtual ~ContainerBase(); void open(MWWorld::Ptr container); void setName(std::string contName); void Update(); + protected: + MyGUI::ScrollView* mItemView; + MyGUI::Widget* mContainerWidget; + + DragAndDrop* mDragAndDrop; + MWWorld::Ptr mContainer; + + void onSelectedItem(MyGUI::Widget* _sender); + void onContainerClicked(MyGUI::Widget* _sender); + void onWindowResize(MyGUI::Window* window); + + void drawItems(); + }; + + class ContainerWindow : public ContainerBase + { + public: + ContainerWindow(WindowManager& parWindowManager,DragAndDrop* dragAndDrop); + virtual ~ContainerWindow(); protected: std::vector mContainerWidgets; - MyGUI::ItemBoxPtr mContainerWidget; - MyGUI::ButtonPtr mTakeButton; - MyGUI::ButtonPtr mCloseButton; - DragAndDrop* mDragAndDrop; + MyGUI::Button* mTakeButton; + MyGUI::Button* mCloseButton; - MWWorld::Ptr mContainer; bool mIsValid;//is in the right GUI Mode - void drawItems(); void onCloseButtonClicked(MyGUI::Widget* _sender); void onTakeAllButtonClicked(MyGUI::Widget* _sender); - void onSelectedItem(MyGUI::Widget* _sender); - void onContainerClicked(MyGUI::Widget* _sender); - void onMouseMove(MyGUI::Widget* _sender, int _left, int _top); }; } #endif // CONTAINER_H diff --git a/apps/openmw/mwgui/inventorywindow.cpp b/apps/openmw/mwgui/inventorywindow.cpp index cb628ba4a7..416be53677 100644 --- a/apps/openmw/mwgui/inventorywindow.cpp +++ b/apps/openmw/mwgui/inventorywindow.cpp @@ -22,7 +22,7 @@ namespace MWGui { InventoryWindow::InventoryWindow(WindowManager& parWindowManager,DragAndDrop* dragAndDrop) - :ContainerWindow(parWindowManager,dragAndDrop,"openmw_inventory_window_layout.xml") + : ContainerBase(parWindowManager,dragAndDrop,"openmw_inventory_window_layout.xml") { } diff --git a/apps/openmw/mwgui/inventorywindow.hpp b/apps/openmw/mwgui/inventorywindow.hpp index 21f27b12fb..152f8b0d0f 100644 --- a/apps/openmw/mwgui/inventorywindow.hpp +++ b/apps/openmw/mwgui/inventorywindow.hpp @@ -21,7 +21,7 @@ namespace MWGui namespace MWGui { - class InventoryWindow : public MWGui::ContainerWindow + class InventoryWindow : public MWGui::ContainerBase { public: InventoryWindow(WindowManager& parWindowManager,DragAndDrop* dragAndDrop); diff --git a/files/mygui/openmw_container_window_layout.xml b/files/mygui/openmw_container_window_layout.xml index 25156c5a2a..9679519d4a 100644 --- a/files/mygui/openmw_container_window_layout.xml +++ b/files/mygui/openmw_container_window_layout.xml @@ -3,8 +3,13 @@ - - + + + + + + + diff --git a/files/mygui/openmw_inventory_window_layout.xml b/files/mygui/openmw_inventory_window_layout.xml index 766cacdb1e..40d89f2213 100644 --- a/files/mygui/openmw_inventory_window_layout.xml +++ b/files/mygui/openmw_inventory_window_layout.xml @@ -3,7 +3,7 @@ - + @@ -14,7 +14,12 @@ - + + + + + + diff --git a/files/mygui/openmw_scroll_skin.xml b/files/mygui/openmw_scroll_skin.xml index 39437d54e7..64e4676615 100644 --- a/files/mygui/openmw_scroll_skin.xml +++ b/files/mygui/openmw_scroll_skin.xml @@ -4,7 +4,6 @@ -