From b309d245c5db4fa12832292572033fc092d98b1c Mon Sep 17 00:00:00 2001 From: gugus Date: Sun, 15 Apr 2012 17:52:39 +0200 Subject: [PATCH] cleaning up hircine work --- apps/openmw/CMakeLists.txt | 4 +- apps/openmw/mwclass/apparatus.cpp | 10 + apps/openmw/mwclass/apparatus.hpp | 3 + apps/openmw/mwclass/armor.cpp | 8 + apps/openmw/mwclass/armor.hpp | 3 + apps/openmw/mwclass/book.cpp | 8 + apps/openmw/mwclass/book.hpp | 3 + apps/openmw/mwclass/clothing.cpp | 8 + apps/openmw/mwclass/clothing.hpp | 3 + apps/openmw/mwclass/container.cpp | 7 +- apps/openmw/mwclass/ingredient.cpp | 8 + apps/openmw/mwclass/ingredient.hpp | 3 + apps/openmw/mwclass/light.cpp | 8 + apps/openmw/mwclass/light.hpp | 3 + apps/openmw/mwclass/lockpick.cpp | 8 + apps/openmw/mwclass/lockpick.hpp | 3 + apps/openmw/mwclass/misc.cpp | 8 + apps/openmw/mwclass/misc.hpp | 3 + apps/openmw/mwclass/potion.cpp | 9 + apps/openmw/mwclass/potion.hpp | 3 + apps/openmw/mwclass/probe.cpp | 8 + apps/openmw/mwclass/probe.hpp | 3 + apps/openmw/mwclass/repair.cpp | 8 + apps/openmw/mwclass/repair.hpp | 3 + apps/openmw/mwclass/weapon.cpp | 9 + apps/openmw/mwclass/weapon.hpp | 5 + apps/openmw/mwgui/container.cpp | 191 ++++++++++++++++++ apps/openmw/mwgui/container.hpp | 62 ++++++ apps/openmw/mwgui/window_manager.cpp | 4 +- apps/openmw/mwgui/window_manager.hpp | 6 +- apps/openmw/mwworld/actionopen.cpp | 21 ++ apps/openmw/mwworld/actionopen.hpp | 22 ++ apps/openmw/mwworld/containerstore.cpp | 30 +++ apps/openmw/mwworld/containerstore.hpp | 2 + files/mygui/CMakeLists.txt | 1 + .../mygui/openmw_container_window_layout.xml | 24 +++ 36 files changed, 506 insertions(+), 6 deletions(-) create mode 100644 apps/openmw/mwgui/container.cpp create mode 100644 apps/openmw/mwgui/container.hpp create mode 100644 apps/openmw/mwworld/actionopen.cpp create mode 100644 apps/openmw/mwworld/actionopen.hpp create mode 100644 files/mygui/openmw_container_window_layout.xml diff --git a/apps/openmw/CMakeLists.txt b/apps/openmw/CMakeLists.txt index 2630098f5..6fb8a24c3 100644 --- a/apps/openmw/CMakeLists.txt +++ b/apps/openmw/CMakeLists.txt @@ -24,7 +24,7 @@ add_openmw_dir (mwinput add_openmw_dir (mwgui layouts text_input widgets race class birth review window_manager console dialogue - dialogue_history window_base stats_window messagebox journalwindow charactercreation + dialogue_history window_base stats_window messagebox journalwindow charactercreation container ) add_openmw_dir (mwdialogue @@ -45,7 +45,7 @@ add_openmw_dir (mwsound add_openmw_dir (mwworld refdata world physicssystem scene environment globals class action nullaction actionteleport containerstore actiontalk actiontake manualref player cellfunctors - cells localscripts customdata weather inventorystore ptr + cells localscripts customdata weather inventorystore ptr actionopen ) add_openmw_dir (mwclass diff --git a/apps/openmw/mwclass/apparatus.cpp b/apps/openmw/mwclass/apparatus.cpp index e95fb572f..8ac589db6 100644 --- a/apps/openmw/mwclass/apparatus.cpp +++ b/apps/openmw/mwclass/apparatus.cpp @@ -86,4 +86,14 @@ namespace MWClass { return std::string("Item Apparatus Down"); } + + + std::string Apparatus::getInventoryIcon (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->icon; + } + } diff --git a/apps/openmw/mwclass/apparatus.hpp b/apps/openmw/mwclass/apparatus.hpp index c0849e1fe..2d1175951 100644 --- a/apps/openmw/mwclass/apparatus.hpp +++ b/apps/openmw/mwclass/apparatus.hpp @@ -32,6 +32,9 @@ namespace MWClass virtual std::string getDownSoundId (const MWWorld::Ptr& ptr) const; ///< Return the put down sound Id + + virtual std::string getInventoryIcon (const MWWorld::Ptr& ptr) const; + ///< Return name of inventory icon. }; } diff --git a/apps/openmw/mwclass/armor.cpp b/apps/openmw/mwclass/armor.cpp index e1c2734f0..597094a45 100644 --- a/apps/openmw/mwclass/armor.cpp +++ b/apps/openmw/mwclass/armor.cpp @@ -188,4 +188,12 @@ namespace MWClass else return std::string("Item Armor Heavy Down"); } + + std::string Armor::getInventoryIcon (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->icon; + } } diff --git a/apps/openmw/mwclass/armor.hpp b/apps/openmw/mwclass/armor.hpp index 2b66ff828..aada97eec 100644 --- a/apps/openmw/mwclass/armor.hpp +++ b/apps/openmw/mwclass/armor.hpp @@ -47,6 +47,9 @@ namespace MWClass virtual std::string getDownSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; ///< Return the put down sound Id + + virtual std::string getInventoryIcon (const MWWorld::Ptr& ptr) const; + ///< Return name of inventory icon. }; } diff --git a/apps/openmw/mwclass/book.cpp b/apps/openmw/mwclass/book.cpp index 0a81ebafb..f22191f26 100644 --- a/apps/openmw/mwclass/book.cpp +++ b/apps/openmw/mwclass/book.cpp @@ -88,4 +88,12 @@ namespace MWClass { return std::string("Item Book Down"); } + std::string Book::getInventoryIcon (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->icon; + } + } diff --git a/apps/openmw/mwclass/book.hpp b/apps/openmw/mwclass/book.hpp index ccbbfb4b2..2d37bffea 100644 --- a/apps/openmw/mwclass/book.hpp +++ b/apps/openmw/mwclass/book.hpp @@ -32,6 +32,9 @@ namespace MWClass virtual std::string getDownSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; ///< Return the put down sound Id + + virtual std::string getInventoryIcon (const MWWorld::Ptr& ptr) const; + ///< Return name of inventory icon. }; } diff --git a/apps/openmw/mwclass/clothing.cpp b/apps/openmw/mwclass/clothing.cpp index 4fe19ada4..176ab26dc 100644 --- a/apps/openmw/mwclass/clothing.cpp +++ b/apps/openmw/mwclass/clothing.cpp @@ -153,4 +153,12 @@ namespace MWClass } return std::string("Item Clothes Down"); } + + std::string Clothing::getInventoryIcon (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->icon; + } } diff --git a/apps/openmw/mwclass/clothing.hpp b/apps/openmw/mwclass/clothing.hpp index 171b06246..b7084a4d5 100644 --- a/apps/openmw/mwclass/clothing.hpp +++ b/apps/openmw/mwclass/clothing.hpp @@ -41,6 +41,9 @@ namespace MWClass virtual std::string getDownSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; ///< Return the put down sound Id + + virtual std::string getInventoryIcon (const MWWorld::Ptr& ptr) const; + ///< Return name of inventory icon. }; } diff --git a/apps/openmw/mwclass/container.cpp b/apps/openmw/mwclass/container.cpp index c58a25c03..dd5f3add3 100644 --- a/apps/openmw/mwclass/container.cpp +++ b/apps/openmw/mwclass/container.cpp @@ -12,6 +12,7 @@ #include "../mwworld/environment.hpp" #include "../mwrender/objects.hpp" +#include "../mwworld/actionopen.hpp" #include "../mwsound/soundmanager.hpp" @@ -81,6 +82,7 @@ namespace MWClass const std::string lockedSound = "LockedChest"; const std::string trapActivationSound = "Disarm Trap Fail"; + if (ptr.getCellRef().lockLevel>0) { // TODO check for key @@ -94,7 +96,8 @@ namespace MWClass if(ptr.getCellRef().trap.empty()) { // Not trapped, Inventory GUI goes here - return boost::shared_ptr (new MWWorld::NullAction); + //return boost::shared_ptr (new MWWorld::NullAction); + return boost::shared_ptr (new MWWorld::ActionOpen(ptr)); } else { @@ -137,4 +140,6 @@ namespace MWClass registerClass (typeid (ESM::Container).name(), instance); } + + } diff --git a/apps/openmw/mwclass/ingredient.cpp b/apps/openmw/mwclass/ingredient.cpp index 1a7edf632..7b96817e9 100644 --- a/apps/openmw/mwclass/ingredient.cpp +++ b/apps/openmw/mwclass/ingredient.cpp @@ -84,4 +84,12 @@ namespace MWClass { return std::string("Item Ingredient Down"); } + + std::string Ingredient::getInventoryIcon (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->icon; + } } diff --git a/apps/openmw/mwclass/ingredient.hpp b/apps/openmw/mwclass/ingredient.hpp index 9463dcf8d..f79534868 100644 --- a/apps/openmw/mwclass/ingredient.hpp +++ b/apps/openmw/mwclass/ingredient.hpp @@ -32,6 +32,9 @@ namespace MWClass virtual std::string getDownSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; ///< Return the put down sound Id + + virtual std::string getInventoryIcon (const MWWorld::Ptr& ptr) const; + ///< Return name of inventory icon. }; } diff --git a/apps/openmw/mwclass/light.cpp b/apps/openmw/mwclass/light.cpp index e2e63a89b..50fc39023 100644 --- a/apps/openmw/mwclass/light.cpp +++ b/apps/openmw/mwclass/light.cpp @@ -126,4 +126,12 @@ namespace MWClass { return std::string("Item Misc Down"); } + + std::string Light::getInventoryIcon (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->icon; + } } diff --git a/apps/openmw/mwclass/light.hpp b/apps/openmw/mwclass/light.hpp index 46a4d60ba..bd04401ce 100644 --- a/apps/openmw/mwclass/light.hpp +++ b/apps/openmw/mwclass/light.hpp @@ -41,6 +41,9 @@ namespace MWClass virtual std::string getDownSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; ///< Return the put down sound Id + + virtual std::string getInventoryIcon (const MWWorld::Ptr& ptr) const; + ///< Return name of inventory icon. }; } diff --git a/apps/openmw/mwclass/lockpick.cpp b/apps/openmw/mwclass/lockpick.cpp index 3dda2f4af..49300eb09 100644 --- a/apps/openmw/mwclass/lockpick.cpp +++ b/apps/openmw/mwclass/lockpick.cpp @@ -97,4 +97,12 @@ namespace MWClass { return std::string("Item Lockpick Down"); } + + std::string Lockpick::getInventoryIcon (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->icon; + } } diff --git a/apps/openmw/mwclass/lockpick.hpp b/apps/openmw/mwclass/lockpick.hpp index 0c9189c54..4d5938a69 100644 --- a/apps/openmw/mwclass/lockpick.hpp +++ b/apps/openmw/mwclass/lockpick.hpp @@ -36,6 +36,9 @@ namespace MWClass virtual std::string getDownSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; ///< Return the put down sound Id + + virtual std::string getInventoryIcon (const MWWorld::Ptr& ptr) const; + ///< Return name of inventory icon. }; } diff --git a/apps/openmw/mwclass/misc.cpp b/apps/openmw/mwclass/misc.cpp index 864fc1e38..cd06d1073 100644 --- a/apps/openmw/mwclass/misc.cpp +++ b/apps/openmw/mwclass/misc.cpp @@ -100,4 +100,12 @@ namespace MWClass } return std::string("Item Misc Down"); } + + std::string Miscellaneous::getInventoryIcon (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->icon; + } } diff --git a/apps/openmw/mwclass/misc.hpp b/apps/openmw/mwclass/misc.hpp index b07964f99..39d771dc9 100644 --- a/apps/openmw/mwclass/misc.hpp +++ b/apps/openmw/mwclass/misc.hpp @@ -32,6 +32,9 @@ namespace MWClass virtual std::string getDownSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; ///< Return the put down sound Id + + virtual std::string getInventoryIcon (const MWWorld::Ptr& ptr) const; + ///< Return name of inventory icon. }; } diff --git a/apps/openmw/mwclass/potion.cpp b/apps/openmw/mwclass/potion.cpp index 4ab374590..a50d19736 100644 --- a/apps/openmw/mwclass/potion.cpp +++ b/apps/openmw/mwclass/potion.cpp @@ -86,4 +86,13 @@ namespace MWClass { return std::string("Item Potion Down"); } + + + std::string Potion::getInventoryIcon (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->icon; + } } diff --git a/apps/openmw/mwclass/potion.hpp b/apps/openmw/mwclass/potion.hpp index be9e713fb..5eb9a3e46 100644 --- a/apps/openmw/mwclass/potion.hpp +++ b/apps/openmw/mwclass/potion.hpp @@ -32,6 +32,9 @@ namespace MWClass virtual std::string getDownSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; ///< Return the put down sound Id + + virtual std::string getInventoryIcon (const MWWorld::Ptr& ptr) const; + ///< Return name of inventory icon. }; } diff --git a/apps/openmw/mwclass/probe.cpp b/apps/openmw/mwclass/probe.cpp index 4b4d79a73..3f8dc2a44 100644 --- a/apps/openmw/mwclass/probe.cpp +++ b/apps/openmw/mwclass/probe.cpp @@ -96,4 +96,12 @@ namespace MWClass { return std::string("Item Probe Down"); } + + std::string Probe::getInventoryIcon (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->icon; + } } diff --git a/apps/openmw/mwclass/probe.hpp b/apps/openmw/mwclass/probe.hpp index 1507d65aa..1d9ce7d86 100644 --- a/apps/openmw/mwclass/probe.hpp +++ b/apps/openmw/mwclass/probe.hpp @@ -36,6 +36,9 @@ namespace MWClass virtual std::string getDownSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; ///< Return the put down sound Id + + virtual std::string getInventoryIcon (const MWWorld::Ptr& ptr) const; + ///< Return name of inventory icon. }; } diff --git a/apps/openmw/mwclass/repair.cpp b/apps/openmw/mwclass/repair.cpp index 758bf4079..bafb84bca 100644 --- a/apps/openmw/mwclass/repair.cpp +++ b/apps/openmw/mwclass/repair.cpp @@ -86,4 +86,12 @@ namespace MWClass { return std::string("Item Repair Down"); } + + std::string Repair::getInventoryIcon (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->icon; + } } diff --git a/apps/openmw/mwclass/repair.hpp b/apps/openmw/mwclass/repair.hpp index 17b606f4c..3b8260f9d 100644 --- a/apps/openmw/mwclass/repair.hpp +++ b/apps/openmw/mwclass/repair.hpp @@ -32,6 +32,9 @@ namespace MWClass virtual std::string getDownSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; ///< Return the put down sound Id + + virtual std::string getInventoryIcon (const MWWorld::Ptr& ptr) const; + ///< Return name of inventory icon. }; } diff --git a/apps/openmw/mwclass/weapon.cpp b/apps/openmw/mwclass/weapon.cpp index 20db0cf38..9d3d40646 100644 --- a/apps/openmw/mwclass/weapon.cpp +++ b/apps/openmw/mwclass/weapon.cpp @@ -237,4 +237,13 @@ namespace MWClass return std::string("Item Misc Down"); } + + + std::string Weapon::getInventoryIcon (const MWWorld::Ptr& ptr) const + { + ESMS::LiveCellRef *ref = + ptr.get(); + + return ref->base->icon; + } } diff --git a/apps/openmw/mwclass/weapon.hpp b/apps/openmw/mwclass/weapon.hpp index f863c0bfe..31fee9b4b 100644 --- a/apps/openmw/mwclass/weapon.hpp +++ b/apps/openmw/mwclass/weapon.hpp @@ -47,6 +47,11 @@ namespace MWClass virtual std::string getDownSoundId (const MWWorld::Ptr& ptr, const MWWorld::Environment& environment) const; ///< Return the put down sound Id + + virtual std::string getInventoryIcon (const MWWorld::Ptr& ptr) const; + ///< Return name of inventory icon. + + }; } diff --git a/apps/openmw/mwgui/container.cpp b/apps/openmw/mwgui/container.cpp new file mode 100644 index 000000000..c09a1bf58 --- /dev/null +++ b/apps/openmw/mwgui/container.cpp @@ -0,0 +1,191 @@ +#include "container.hpp" + +#include +#include +#include "window_manager.hpp" +#include "widgets.hpp" + +#include "../mwworld/environment.hpp" +#include "../mwworld/manualref.hpp" +#include +#include +#include + +#include +#include +#include "../mwclass/container.hpp" +#include "../mwworld/containerstore.hpp" +#include + + +using namespace MWGui; +using namespace Widgets; + + +ContainerWindow::ContainerWindow(WindowManager& parWindowManager,MWWorld::Environment& environment) + : WindowBase("openmw_container_window_layout.xml", parWindowManager), + mEnvironment(environment) +{ + setText("_Main", "Name of Container"); + setVisible(false); + + getWidget(containerWidget, "Items"); + getWidget(takeButton, "TakeButton"); + getWidget(closeButton, "CloseButton"); + + setText("CloseButton","Close"); + setText("TakeButton","Take All"); + + //ctor +} + +ContainerWindow::~ContainerWindow() +{ + //dtor + + + + +} + +void ContainerWindow::setName(std::string contName) +{ + setText("_Main", contName); +} + + + +void ContainerWindow::open(MWWorld::Ptr& container) +{ + setName(MWWorld::Class::get(container).getName(container)); + //MWWorld::ContainerStore* containerStore = container.getContainerStore(); + + MWWorld::ContainerStore& containerStore = MWWorld::Class::get(container).getContainerStore(container); + + + 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; + + for (MWWorld::ContainerStoreIterator iter (containerStore.begin()); iter!=containerStore.end(); ++iter) + { + std::string path = std::string("icons\\"); + + + path += iter.getInventoryIcon(); +// switch (iter.getType()) +// { +// +// case MWWorld::ContainerStore::Type_Potion: +// path += iter->get()->base->icon; +// break; +// case MWWorld::ContainerStore::Type_Apparatus: +// path += iter->get()->base->icon; +// break; +// case MWWorld::ContainerStore::Type_Armor: +// path += iter->get()->base->icon; +// break; +// case MWWorld::ContainerStore::Type_Book: +// path += iter->get()->base->icon; +// break; +// case MWWorld::ContainerStore::Type_Clothing: +// path += iter->get()->base->icon; +// break; +// case MWWorld::ContainerStore::Type_Ingredient: +// path += iter->get()->base->icon; +// break; +// case MWWorld::ContainerStore::Type_Light: +// path += iter->get()->base->icon; +// break; +// case MWWorld::ContainerStore::Type_Lockpick: +// path += iter->get()->base->icon; +// break; +// case MWWorld::ContainerStore::Type_Miscellaneous: +// path += iter->get()->base->icon; +// break; +// case MWWorld::ContainerStore::Type_Probe: +// path += iter->get()->base->icon; +// break; +// case MWWorld::ContainerStore::Type_Repair: +// path += iter->get()->base->icon; +// break; +// case MWWorld::ContainerStore::Type_Weapon: +// path += iter->get()->base->icon; +// break; +// +// +// } + count++; + + if(count % 8 == 0) + { + y += 36; + x = 4; + count = 0; + } + x += 36; + + + MyGUI::ImageBox* image = containerWidget->createWidget("ImageBox", MyGUI::IntCoord(x, y, 32, 32), MyGUI::Align::Default); + MyGUI::TextBox* text = containerWidget->createWidget("SandBrightText", MyGUI::IntCoord(x, y, 18, 18), MyGUI::Align::Default, std::string("Label")); + + if(iter->getRefData().getCount() > 1) + text->setCaption(boost::lexical_cast(iter->getRefData().getCount())); + + + containerWidgets.push_back(image); + + + int pos = path.rfind("."); + path.erase(pos); + path.append(".dds"); + + //std::cout << path << std::endl; + image->setImageTexture(path); + } + + + setVisible(true); +} + +void Update() +{ + +} + diff --git a/apps/openmw/mwgui/container.hpp b/apps/openmw/mwgui/container.hpp new file mode 100644 index 000000000..e027f48fe --- /dev/null +++ b/apps/openmw/mwgui/container.hpp @@ -0,0 +1,62 @@ +#ifndef MGUI_CONTAINER_H +#define MGUI_CONTAINER_H + +#include +#include "../mwclass/container.hpp" +#include +#include +#include +#include +#include "window_base.hpp" +#include "../mwworld/ptr.hpp" +#include "../mwworld/containerstore.hpp" + +namespace MWWorld +{ + class Environment; +} + +namespace MyGUI +{ + class Gui; + class Widget; +} + +namespace MWGui +{ + class WindowManager; +} + + +namespace MWGui +{ + + + class ContainerWindow : public WindowBase + { + public: + ContainerWindow(WindowManager& parWindowManager,MWWorld::Environment& environment); + + + void open(MWWorld::Ptr& container); + void setName(std::string contName); + void Update(); + + virtual ~ContainerWindow(); + protected: + private: + MWWorld::Environment& mEnvironment; + std::vector containerWidgets; + MyGUI::WidgetPtr containerWidget; + + MyGUI::ButtonPtr takeButton; + MyGUI::ButtonPtr closeButton; + + + + + + //MWWorld::Ptr& mContainer; + }; +} +#endif // CONTAINER_H diff --git a/apps/openmw/mwgui/window_manager.cpp b/apps/openmw/mwgui/window_manager.cpp index fa6dedc77..741066896 100644 --- a/apps/openmw/mwgui/window_manager.cpp +++ b/apps/openmw/mwgui/window_manager.cpp @@ -6,6 +6,7 @@ #include "dialogue_history.hpp" #include "stats_window.hpp" #include "messagebox.hpp" +#include "container.hpp" #include "../mwmechanics/mechanicsmanager.hpp" #include "../mwinput/inputmanager.hpp" @@ -52,6 +53,7 @@ WindowManager::WindowManager(MWWorld::Environment& environment, mJournal = new JournalWindow(*this); mMessageBoxManager = new MessageBoxManager(this); dialogueWindow = new DialogueWindow(*this,environment); + containerWindow = new ContainerWindow(*this,environment); // The HUD is always on hud->setVisible(true); @@ -90,7 +92,7 @@ WindowManager::~WindowManager() delete stats; delete mJournal; delete dialogueWindow; - + delete containerWindow; delete mCharGen; cleanupGarbage(); diff --git a/apps/openmw/mwgui/window_manager.hpp b/apps/openmw/mwgui/window_manager.hpp index 582f438e8..cbe0edad9 100644 --- a/apps/openmw/mwgui/window_manager.hpp +++ b/apps/openmw/mwgui/window_manager.hpp @@ -62,7 +62,7 @@ namespace MWGui class Console; class JournalWindow; class CharacterCreation; - + class ContainerWindow; class TextInputDialog; class InfoBoxDialog; class DialogueWindow; @@ -127,6 +127,8 @@ namespace MWGui MWGui::DialogueWindow* getDialogueWindow() {return dialogueWindow;} + MWGui::ContainerWindow* getContainerWindow() {return containerWindow;} + MyGUI::Gui* getGui() const { return gui; } void wmUpdateFps(float fps, size_t triangleCount, size_t batchCount) @@ -191,7 +193,7 @@ namespace MWGui Console *console; JournalWindow* mJournal; DialogueWindow *dialogueWindow; - + ContainerWindow *containerWindow; CharacterCreation* mCharGen; // Various stats about player as needed by window manager diff --git a/apps/openmw/mwworld/actionopen.cpp b/apps/openmw/mwworld/actionopen.cpp new file mode 100644 index 000000000..c7b066d8e --- /dev/null +++ b/apps/openmw/mwworld/actionopen.cpp @@ -0,0 +1,21 @@ +#include "actionopen.hpp" + +#include "environment.hpp" +#include "class.hpp" +#include "world.hpp" +#include "containerstore.hpp" +#include "../mwclass/container.hpp" +#include "../mwgui/window_manager.hpp" +#include "../mwgui/container.hpp" + +namespace MWWorld +{ + ActionOpen::ActionOpen (const MWWorld::Ptr& container) : mContainer (container) { + mContainer = container; + } + + void ActionOpen::execute (Environment& environment) + { + environment.mWindowManager->getContainerWindow()->open(mContainer); + } +} diff --git a/apps/openmw/mwworld/actionopen.hpp b/apps/openmw/mwworld/actionopen.hpp new file mode 100644 index 000000000..7c660e4c9 --- /dev/null +++ b/apps/openmw/mwworld/actionopen.hpp @@ -0,0 +1,22 @@ + +#ifndef GAME_MWWORLD_ACTIONOPEN_H +#define GAME_MWWORLD_ACTIONOPEN_H + +#include "action.hpp" +#include "ptr.hpp" + + +namespace MWWorld +{ + class ActionOpen : public Action + { + Ptr mContainer; + + public: + ActionOpen (const Ptr& container); + ///< \param The Container the Player has activated. + virtual void execute (Environment& environment); + }; +} + +#endif // ACTIONOPEN_H diff --git a/apps/openmw/mwworld/containerstore.cpp b/apps/openmw/mwworld/containerstore.cpp index 2800b6f3c..16de93332 100644 --- a/apps/openmw/mwworld/containerstore.cpp +++ b/apps/openmw/mwworld/containerstore.cpp @@ -457,3 +457,33 @@ bool MWWorld::operator!= (const ContainerStoreIterator& left, const ContainerSto { return !(left==right); } + + +std::string MWWorld::ContainerStoreIterator::getInventoryIcon() +{ + Ptr ptr; + + switch (mType) + { + case ContainerStore::Type_Potion: ptr = MWWorld::Ptr (&*mPotion, 0); break; + case ContainerStore::Type_Apparatus: ptr = MWWorld::Ptr (&*mApparatus, 0); break; + case ContainerStore::Type_Armor: ptr = MWWorld::Ptr (&*mArmor, 0); break; + case ContainerStore::Type_Book: ptr = MWWorld::Ptr (&*mBook, 0); break; + case ContainerStore::Type_Clothing: ptr = MWWorld::Ptr (&*mClothing, 0); break; + case ContainerStore::Type_Ingredient: ptr = MWWorld::Ptr (&*mIngredient, 0); break; + case ContainerStore::Type_Light: ptr = MWWorld::Ptr (&*mLight, 0); break; + case ContainerStore::Type_Lockpick: ptr = MWWorld::Ptr (&*mLockpick, 0); break; + case ContainerStore::Type_Miscellaneous: ptr = MWWorld::Ptr (&*mMiscellaneous, 0); break; + case ContainerStore::Type_Probe: ptr = MWWorld::Ptr (&*mProbe, 0); break; + case ContainerStore::Type_Repair: ptr = MWWorld::Ptr (&*mRepair, 0); break; + case ContainerStore::Type_Weapon: ptr = MWWorld::Ptr (&*mWeapon, 0); break; + } + + if (ptr.isEmpty()) + throw std::runtime_error ("invalid iterator"); + + + std::string s = ptr.getInventoryIcon(); + + return s; +} diff --git a/apps/openmw/mwworld/containerstore.hpp b/apps/openmw/mwworld/containerstore.hpp index da5424fe0..fc6283442 100644 --- a/apps/openmw/mwworld/containerstore.hpp +++ b/apps/openmw/mwworld/containerstore.hpp @@ -161,6 +161,8 @@ namespace MWWorld const ContainerStore *getContainerStore() const; + std::string getInventoryIcon(); + friend class ContainerStore; }; diff --git a/files/mygui/CMakeLists.txt b/files/mygui/CMakeLists.txt index 9a6cde7ba..c24bd59f4 100644 --- a/files/mygui/CMakeLists.txt +++ b/files/mygui/CMakeLists.txt @@ -38,6 +38,7 @@ configure_file("${SDIR}/openmw_chargen_review_layout.xml" "${DDIR}/openmw_charge configure_file("${SDIR}/openmw_dialogue_window_layout.xml" "${DDIR}/openmw_dialogue_window_layout.xml" COPYONLY) configure_file("${SDIR}/openmw_dialogue_window_skin.xml" "${DDIR}/openmw_dialogue_window_skin.xml" COPYONLY) configure_file("${SDIR}/openmw_inventory_window_layout.xml" "${DDIR}/openmw_inventory_window_layout.xml" COPYONLY) +configure_file("${SDIR}/openmw_container_window_layout.xml" "${DDIR}/openmw_container_window_layout.xml" COPYONLY) configure_file("${SDIR}/openmw_layers.xml" "${DDIR}/openmw_layers.xml" COPYONLY) configure_file("${SDIR}/openmw_mainmenu_layout.xml" "${DDIR}/openmw_mainmenu_layout.xml" COPYONLY) configure_file("${SDIR}/openmw_mainmenu_skin.xml" "${DDIR}/openmw_mainmenu_skin.xml" COPYONLY) diff --git a/files/mygui/openmw_container_window_layout.xml b/files/mygui/openmw_container_window_layout.xml new file mode 100644 index 000000000..a9de14880 --- /dev/null +++ b/files/mygui/openmw_container_window_layout.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + +