1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-15 00:40:02 +00:00

fix a bug, some cleanup

This commit is contained in:
scrawl 2012-05-18 17:58:33 +02:00
parent 342a244e31
commit fb47681fbd
9 changed files with 30 additions and 40 deletions

View File

@ -109,8 +109,9 @@ void ContainerBase::onSelectedItem(MyGUI::Widget* _sender)
} }
else else
{ {
std::string message = MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sTake")->str;
CountDialog* dialog = MWBase::Environment::get().getWindowManager()->getCountDialog(); CountDialog* dialog = MWBase::Environment::get().getWindowManager()->getCountDialog();
dialog->open(MWWorld::Class::get(object).getName(object), count); dialog->open(MWWorld::Class::get(object).getName(object), message, count);
dialog->eventOkClicked.clear(); dialog->eventOkClicked.clear();
dialog->eventOkClicked += MyGUI::newDelegate(this, &ContainerBase::startDragItem); dialog->eventOkClicked += MyGUI::newDelegate(this, &ContainerBase::startDragItem);
} }
@ -135,6 +136,10 @@ void ContainerBase::onSelectedItem(MyGUI::Widget* _sender)
} }
} }
bool buying = isTradeWindow(); // buying or selling?
std::string message = buying ? MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sQuanityMenuMessage02")->str
: MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sQuanityMenuMessage01")->str;
if (std::find(mBoughtItems.begin(), mBoughtItems.end(), object) != mBoughtItems.end()) if (std::find(mBoughtItems.begin(), mBoughtItems.end(), object) != mBoughtItems.end())
{ {
if (MyGUI::InputManager::getInstance().isShiftPressed() || count == 1) if (MyGUI::InputManager::getInstance().isShiftPressed() || count == 1)
@ -148,7 +153,7 @@ void ContainerBase::onSelectedItem(MyGUI::Widget* _sender)
else else
{ {
CountDialog* dialog = MWBase::Environment::get().getWindowManager()->getCountDialog(); CountDialog* dialog = MWBase::Environment::get().getWindowManager()->getCountDialog();
dialog->open(MWWorld::Class::get(object).getName(object), count); dialog->open(MWWorld::Class::get(object).getName(object), message, count);
dialog->eventOkClicked.clear(); dialog->eventOkClicked.clear();
dialog->eventOkClicked += MyGUI::newDelegate(this, &ContainerBase::sellAlreadyBoughtItem); dialog->eventOkClicked += MyGUI::newDelegate(this, &ContainerBase::sellAlreadyBoughtItem);
} }
@ -166,7 +171,7 @@ void ContainerBase::onSelectedItem(MyGUI::Widget* _sender)
else else
{ {
CountDialog* dialog = MWBase::Environment::get().getWindowManager()->getCountDialog(); CountDialog* dialog = MWBase::Environment::get().getWindowManager()->getCountDialog();
dialog->open(MWWorld::Class::get(object).getName(object), count); dialog->open(MWWorld::Class::get(object).getName(object), message, count);
dialog->eventOkClicked.clear(); dialog->eventOkClicked.clear();
dialog->eventOkClicked += MyGUI::newDelegate(this, &ContainerBase::sellItem); dialog->eventOkClicked += MyGUI::newDelegate(this, &ContainerBase::sellItem);
} }
@ -202,13 +207,15 @@ void ContainerBase::sellItem(MyGUI::Widget* _sender, int count)
if (isInventory()) if (isInventory())
{ {
newPtr = MWBase::Environment::get().getWindowManager()->getTradeWindow()->addBarteredItem(*mSelectedItem->getUserData<MWWorld::Ptr>(), count); newPtr = MWBase::Environment::get().getWindowManager()->getTradeWindow()->addBarteredItem(*mSelectedItem->getUserData<MWWorld::Ptr>(), count);
mSoldItems.push_back(newPtr); if (std::find(mSoldItems.begin(), mSoldItems.end(), newPtr) == mSoldItems.end())
mSoldItems.push_back(newPtr);
MWBase::Environment::get().getWindowManager()->getTradeWindow()->drawItems(); MWBase::Environment::get().getWindowManager()->getTradeWindow()->drawItems();
} }
else else
{ {
newPtr = MWBase::Environment::get().getWindowManager()->getInventoryWindow()->addBarteredItem(*mSelectedItem->getUserData<MWWorld::Ptr>(), count); newPtr = MWBase::Environment::get().getWindowManager()->getInventoryWindow()->addBarteredItem(*mSelectedItem->getUserData<MWWorld::Ptr>(), count);
mSoldItems.push_back(newPtr); if (std::find(mSoldItems.begin(), mSoldItems.end(), newPtr) == mSoldItems.end())
mSoldItems.push_back(newPtr);
MWBase::Environment::get().getWindowManager()->getInventoryWindow()->drawItems(); MWBase::Environment::get().getWindowManager()->getInventoryWindow()->drawItems();
} }
@ -510,8 +517,6 @@ void ContainerBase::drawItems()
MyGUI::IntSize size = MyGUI::IntSize(std::max(mItemView->getSize().width, x+42), mItemView->getSize().height); MyGUI::IntSize size = MyGUI::IntSize(std::max(mItemView->getSize().width, x+42), mItemView->getSize().height);
mItemView->setCanvasSize(size); mItemView->setCanvasSize(size);
mContainerWidget->setSize(size); mContainerWidget->setSize(size);
notifyContentChanged();
} }
std::string ContainerBase::getCountString(const int count) std::string ContainerBase::getCountString(const int count)
@ -524,16 +529,6 @@ std::string ContainerBase::getCountString(const int count)
return boost::lexical_cast<std::string>(count); return boost::lexical_cast<std::string>(count);
} }
void ContainerBase::Update()
{
if(mDragAndDrop != NULL && mDragAndDrop->mIsOnDragAndDrop)
{
if(mDragAndDrop->mDraggedWidget)
mDragAndDrop->mDraggedWidget->setPosition(MyGUI::InputManager::getInstance().getMousePosition());
else mDragAndDrop->mIsOnDragAndDrop = false; //If this happens, there is a bug.
}
}
MWWorld::Ptr ContainerBase::readdBarteredItem(MWWorld::Ptr item, int count) MWWorld::Ptr ContainerBase::readdBarteredItem(MWWorld::Ptr item, int count)
{ {
MWWorld::ContainerStore& containerStore = MWWorld::Class::get(mContainer).getContainerStore(mContainer); MWWorld::ContainerStore& containerStore = MWWorld::Class::get(mContainer).getContainerStore(mContainer);
@ -558,7 +553,9 @@ MWWorld::Ptr ContainerBase::addBarteredItem(MWWorld::Ptr item, int count)
MWWorld::ContainerStoreIterator it = containerStore.add(item); MWWorld::ContainerStoreIterator it = containerStore.add(item);
item.getRefData().setCount(origCount - count); item.getRefData().setCount(origCount - count);
mBoughtItems.push_back(*it); if (std::find(mBoughtItems.begin(), mBoughtItems.end(), *it) == mBoughtItems.end())
mBoughtItems.push_back(*it);
return *it; return *it;
} }

View File

@ -73,11 +73,8 @@ namespace MWGui
void openContainer(MWWorld::Ptr container); void openContainer(MWWorld::Ptr container);
void setFilter(Filter filter); ///< set category filter void setFilter(Filter filter); ///< set category filter
virtual void Update();
void drawItems(); void drawItems();
virtual void notifyContentChanged() { }
protected: protected:
MyGUI::ScrollView* mItemView; MyGUI::ScrollView* mItemView;
MyGUI::Widget* mContainerWidget; MyGUI::Widget* mContainerWidget;

View File

@ -19,7 +19,6 @@ namespace MWGui
mOkButton->setCaption(MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sOk")->str); mOkButton->setCaption(MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sOk")->str);
mCancelButton->setCaption(MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sCancel")->str); mCancelButton->setCaption(MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sCancel")->str);
mLabelText->setCaption(MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sTake")->str);
mCancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &CountDialog::onCancelButtonClicked); mCancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &CountDialog::onCancelButtonClicked);
mOkButton->eventMouseButtonClick += MyGUI::newDelegate(this, &CountDialog::onOkButtonClicked); mOkButton->eventMouseButtonClick += MyGUI::newDelegate(this, &CountDialog::onOkButtonClicked);
@ -27,10 +26,12 @@ namespace MWGui
mSlider->eventScrollChangePosition += MyGUI::newDelegate(this, &CountDialog::onSliderMoved); mSlider->eventScrollChangePosition += MyGUI::newDelegate(this, &CountDialog::onSliderMoved);
} }
void CountDialog::open(const std::string& item, const int maxCount) void CountDialog::open(const std::string& item, const std::string& message, const int maxCount)
{ {
setVisible(true); setVisible(true);
mLabelText->setCaption(message);
MyGUI::IntSize viewSize = MyGUI::RenderManager::getInstance().getViewSize(); MyGUI::IntSize viewSize = MyGUI::RenderManager::getInstance().getViewSize();
mSlider->setScrollRange(maxCount); mSlider->setScrollRange(maxCount);

View File

@ -9,7 +9,7 @@ namespace MWGui
{ {
public: public:
CountDialog(WindowManager& parWindowManager); CountDialog(WindowManager& parWindowManager);
void open(const std::string& item, const int maxCount); void open(const std::string& item, const std::string& message, const int maxCount);
typedef MyGUI::delegates::CMultiDelegate2<MyGUI::Widget*, int> EventHandle_WidgetInt; typedef MyGUI::delegates::CMultiDelegate2<MyGUI::Widget*, int> EventHandle_WidgetInt;

View File

@ -285,7 +285,6 @@ void HUD::onWorldClicked(MyGUI::Widget* _sender)
// remove object from the container it was coming from // remove object from the container it was coming from
object.getRefData().setCount(origCount - mDragAndDrop->mDraggedCount); object.getRefData().setCount(origCount - mDragAndDrop->mDraggedCount);
mDragAndDrop->mDraggedFrom->notifyContentChanged();
mDragAndDrop->mIsOnDragAndDrop = false; mDragAndDrop->mIsOnDragAndDrop = false;
MyGUI::Gui::getInstance().destroyWidget(mDragAndDrop->mDraggedWidget); MyGUI::Gui::getInstance().destroyWidget(mDragAndDrop->mDraggedWidget);

View File

@ -228,15 +228,9 @@ namespace MWGui
mEncumbranceText->setCaption( boost::lexical_cast<std::string>(int(encumbrance)) + "/" + boost::lexical_cast<std::string>(int(capacity)) ); mEncumbranceText->setCaption( boost::lexical_cast<std::string>(int(encumbrance)) + "/" + boost::lexical_cast<std::string>(int(capacity)) );
} }
void InventoryWindow::notifyContentChanged() void InventoryWindow::update()
{
}
void InventoryWindow::Update()
{ {
updateEncumbranceBar(); updateEncumbranceBar();
ContainerBase::Update();
} }
int InventoryWindow::getPlayerGold() int InventoryWindow::getPlayerGold()

View File

@ -16,8 +16,7 @@ namespace MWGui
/// start trading, disables item drag&drop /// start trading, disables item drag&drop
void startTrade(); void startTrade();
virtual void Update(); void update();
virtual void notifyContentChanged();
int getPlayerGold(); int getPlayerGold();

View File

@ -27,9 +27,6 @@ namespace MWGui
void startTrade(MWWorld::Ptr actor); void startTrade(MWWorld::Ptr actor);
//virtual void Update();
//virtual void notifyContentChanged();
bool npcAcceptsItem(MWWorld::Ptr item); bool npcAcceptsItem(MWWorld::Ptr item);
protected: protected:

View File

@ -97,7 +97,7 @@ WindowManager::WindowManager(
MyGUI::Widget* dragAndDropWidget = gui->createWidgetT("Widget","",0,0,w,h,MyGUI::Align::Default,"DragAndDrop","DragAndDropWidget"); MyGUI::Widget* dragAndDropWidget = gui->createWidgetT("Widget","",0,0,w,h,MyGUI::Align::Default,"DragAndDrop","DragAndDropWidget");
dragAndDropWidget->setVisible(false); dragAndDropWidget->setVisible(false);
DragAndDrop* mDragAndDrop = new DragAndDrop(); mDragAndDrop = new DragAndDrop();
mDragAndDrop->mIsOnDragAndDrop = false; mDragAndDrop->mIsOnDragAndDrop = false;
mDragAndDrop->mDraggedWidget = 0; mDragAndDrop->mDraggedWidget = 0;
mDragAndDrop->mDragAndDropWidget = dragAndDropWidget; mDragAndDrop->mDragAndDropWidget = dragAndDropWidget;
@ -468,9 +468,15 @@ void WindowManager::onDialogueWindowBye()
void WindowManager::onFrame (float frameDuration) void WindowManager::onFrame (float frameDuration)
{ {
mMessageBoxManager->onFrame(frameDuration); mMessageBoxManager->onFrame(frameDuration);
mInventoryWindow->Update();
mContainerWindow->Update();
mToolTips->onFrame(frameDuration); mToolTips->onFrame(frameDuration);
if (mDragAndDrop->mIsOnDragAndDrop)
{
assert(mDragAndDrop->mDraggedWidget);
mDragAndDrop->mDraggedWidget->setPosition(MyGUI::InputManager::getInstance().getMousePosition());
}
mInventoryWindow->update();
} }
const ESMS::ESMStore& WindowManager::getStore() const const ESMS::ESMStore& WindowManager::getStore() const