1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-04-01 07:06:43 +00:00

some unfinished work on quick keys window

This commit is contained in:
scrawl 2012-08-26 10:52:06 +02:00
parent f7d537cb28
commit fab4cfecb1
23 changed files with 655 additions and 59 deletions

View file

@ -28,7 +28,8 @@ add_openmw_dir (mwgui
dialogue_history window_base stats_window messagebox journalwindow charactercreation dialogue_history window_base stats_window messagebox journalwindow charactercreation
map_window window_pinnable_base cursorreplace tooltips scrollwindow bookwindow list map_window window_pinnable_base cursorreplace tooltips scrollwindow bookwindow list
formatting inventorywindow container hud countdialog tradewindow settingswindow formatting inventorywindow container hud countdialog tradewindow settingswindow
confirmationdialog alchemywindow referenceinterface spellwindow mainmenu confirmationdialog alchemywindow referenceinterface spellwindow mainmenu quickkeysmenu
itemselection
) )
add_openmw_dir (mwdialogue add_openmw_dir (mwdialogue

View file

@ -695,7 +695,7 @@ void CreateClassDialog::onBackClicked(MyGUI::Widget* _sender)
/* SelectSpecializationDialog */ /* SelectSpecializationDialog */
SelectSpecializationDialog::SelectSpecializationDialog(MWBase::WindowManager& parWindowManager) SelectSpecializationDialog::SelectSpecializationDialog(MWBase::WindowManager& parWindowManager)
: WindowBase("openmw_chargen_select_specialization.layout", parWindowManager) : WindowModal("openmw_chargen_select_specialization.layout", parWindowManager)
{ {
// Centre dialog // Centre dialog
center(); center();
@ -727,13 +727,10 @@ SelectSpecializationDialog::SelectSpecializationDialog(MWBase::WindowManager& pa
cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onCancelClicked); cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onCancelClicked);
int buttonWidth = cancelButton->getTextSize().width + 24; int buttonWidth = cancelButton->getTextSize().width + 24;
cancelButton->setCoord(216 - buttonWidth, 90, buttonWidth, 21); cancelButton->setCoord(216 - buttonWidth, 90, buttonWidth, 21);
MyGUI::InputManager::getInstance().addWidgetModal(mMainWidget);
} }
SelectSpecializationDialog::~SelectSpecializationDialog() SelectSpecializationDialog::~SelectSpecializationDialog()
{ {
MyGUI::InputManager::getInstance().removeWidgetModal(mMainWidget);
} }
// widget controls // widget controls
@ -760,7 +757,7 @@ void SelectSpecializationDialog::onCancelClicked(MyGUI::Widget* _sender)
/* SelectAttributeDialog */ /* SelectAttributeDialog */
SelectAttributeDialog::SelectAttributeDialog(MWBase::WindowManager& parWindowManager) SelectAttributeDialog::SelectAttributeDialog(MWBase::WindowManager& parWindowManager)
: WindowBase("openmw_chargen_select_attribute.layout", parWindowManager) : WindowModal("openmw_chargen_select_attribute.layout", parWindowManager)
{ {
// Centre dialog // Centre dialog
center(); center();
@ -785,13 +782,10 @@ SelectAttributeDialog::SelectAttributeDialog(MWBase::WindowManager& parWindowMan
cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectAttributeDialog::onCancelClicked); cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectAttributeDialog::onCancelClicked);
int buttonWidth = cancelButton->getTextSize().width + 24; int buttonWidth = cancelButton->getTextSize().width + 24;
cancelButton->setCoord(186 - buttonWidth, 180, buttonWidth, 21); cancelButton->setCoord(186 - buttonWidth, 180, buttonWidth, 21);
MyGUI::InputManager::getInstance().addWidgetModal(mMainWidget);
} }
SelectAttributeDialog::~SelectAttributeDialog() SelectAttributeDialog::~SelectAttributeDialog()
{ {
MyGUI::InputManager::getInstance().removeWidgetModal(mMainWidget);
} }
// widget controls // widget controls
@ -812,7 +806,7 @@ void SelectAttributeDialog::onCancelClicked(MyGUI::Widget* _sender)
/* SelectSkillDialog */ /* SelectSkillDialog */
SelectSkillDialog::SelectSkillDialog(MWBase::WindowManager& parWindowManager) SelectSkillDialog::SelectSkillDialog(MWBase::WindowManager& parWindowManager)
: WindowBase("openmw_chargen_select_skill.layout", parWindowManager) : WindowModal("openmw_chargen_select_skill.layout", parWindowManager)
{ {
// Centre dialog // Centre dialog
center(); center();
@ -884,12 +878,10 @@ SelectSkillDialog::SelectSkillDialog(MWBase::WindowManager& parWindowManager)
int buttonWidth = cancelButton->getTextSize().width + 24; int buttonWidth = cancelButton->getTextSize().width + 24;
cancelButton->setCoord(447 - buttonWidth, 218, buttonWidth, 21); cancelButton->setCoord(447 - buttonWidth, 218, buttonWidth, 21);
MyGUI::InputManager::getInstance().addWidgetModal(mMainWidget);
} }
SelectSkillDialog::~SelectSkillDialog() SelectSkillDialog::~SelectSkillDialog()
{ {
MyGUI::InputManager::getInstance().removeWidgetModal(mMainWidget);
} }
// widget controls // widget controls
@ -908,7 +900,7 @@ void SelectSkillDialog::onCancelClicked(MyGUI::Widget* _sender)
/* DescriptionDialog */ /* DescriptionDialog */
DescriptionDialog::DescriptionDialog(MWBase::WindowManager& parWindowManager) DescriptionDialog::DescriptionDialog(MWBase::WindowManager& parWindowManager)
: WindowBase("openmw_chargen_class_description.layout", parWindowManager) : WindowModal("openmw_chargen_class_description.layout", parWindowManager)
{ {
// Centre dialog // Centre dialog
center(); center();
@ -924,13 +916,10 @@ DescriptionDialog::DescriptionDialog(MWBase::WindowManager& parWindowManager)
// Make sure the edit box has focus // Make sure the edit box has focus
MyGUI::InputManager::getInstance().setKeyFocusWidget(mTextEdit); MyGUI::InputManager::getInstance().setKeyFocusWidget(mTextEdit);
MyGUI::InputManager::getInstance().addWidgetModal(mMainWidget);
} }
DescriptionDialog::~DescriptionDialog() DescriptionDialog::~DescriptionDialog()
{ {
MyGUI::InputManager::getInstance().removeWidgetModal(mMainWidget);
} }
// widget controls // widget controls

View file

@ -134,7 +134,7 @@ namespace MWGui
std::string mCurrentClassId; std::string mCurrentClassId;
}; };
class SelectSpecializationDialog : public WindowBase class SelectSpecializationDialog : public WindowModal
{ {
public: public:
SelectSpecializationDialog(MWBase::WindowManager& parWindowManager); SelectSpecializationDialog(MWBase::WindowManager& parWindowManager);
@ -165,7 +165,7 @@ namespace MWGui
ESM::Class::Specialization mSpecializationId; ESM::Class::Specialization mSpecializationId;
}; };
class SelectAttributeDialog : public WindowBase class SelectAttributeDialog : public WindowModal
{ {
public: public:
SelectAttributeDialog(MWBase::WindowManager& parWindowManager); SelectAttributeDialog(MWBase::WindowManager& parWindowManager);
@ -198,7 +198,7 @@ namespace MWGui
ESM::Attribute::AttributeID mAttributeId; ESM::Attribute::AttributeID mAttributeId;
}; };
class SelectSkillDialog : public WindowBase class SelectSkillDialog : public WindowModal
{ {
public: public:
SelectSkillDialog(MWBase::WindowManager& parWindowManager); SelectSkillDialog(MWBase::WindowManager& parWindowManager);
@ -234,7 +234,7 @@ namespace MWGui
ESM::Skill::SkillEnum mSkillId; ESM::Skill::SkillEnum mSkillId;
}; };
class DescriptionDialog : public WindowBase class DescriptionDialog : public WindowModal
{ {
public: public:
DescriptionDialog(MWBase::WindowManager& parWindowManager); DescriptionDialog(MWBase::WindowManager& parWindowManager);

View file

@ -8,7 +8,7 @@
namespace MWGui namespace MWGui
{ {
ConfirmationDialog::ConfirmationDialog(MWBase::WindowManager& parWindowManager) : ConfirmationDialog::ConfirmationDialog(MWBase::WindowManager& parWindowManager) :
WindowBase("openmw_confirmation_dialog.layout", parWindowManager) WindowModal("openmw_confirmation_dialog.layout", parWindowManager)
{ {
getWidget(mMessage, "Message"); getWidget(mMessage, "Message");
getWidget(mOkButton, "OkButton"); getWidget(mOkButton, "OkButton");
@ -32,9 +32,6 @@ namespace MWGui
center(); center();
// make other gui elements inaccessible while this dialog is open
MyGUI::InputManager::getInstance().addWidgetModal(mMainWidget);
int okButtonWidth = mOkButton->getTextSize().width + 24; int okButtonWidth = mOkButton->getTextSize().width + 24;
mOkButton->setCoord(mMainWidget->getWidth() - 30 - okButtonWidth, mOkButton->setCoord(mMainWidget->getWidth() - 30 - okButtonWidth,
mOkButton->getTop(), mOkButton->getTop(),
@ -52,19 +49,13 @@ namespace MWGui
{ {
eventCancelClicked(); eventCancelClicked();
close(); setVisible(false);
} }
void ConfirmationDialog::onOkButtonClicked(MyGUI::Widget* _sender) void ConfirmationDialog::onOkButtonClicked(MyGUI::Widget* _sender)
{ {
eventOkClicked(); eventOkClicked();
close();
}
void ConfirmationDialog::close()
{
setVisible(false); setVisible(false);
MyGUI::InputManager::getInstance().removeWidgetModal(mMainWidget);
} }
} }

View file

@ -5,7 +5,7 @@
namespace MWGui namespace MWGui
{ {
class ConfirmationDialog : public WindowBase class ConfirmationDialog : public WindowModal
{ {
public: public:
ConfirmationDialog(MWBase::WindowManager& parWindowManager); ConfirmationDialog(MWBase::WindowManager& parWindowManager);
@ -26,8 +26,6 @@ namespace MWGui
void onCancelButtonClicked(MyGUI::Widget* _sender); void onCancelButtonClicked(MyGUI::Widget* _sender);
void onOkButtonClicked(MyGUI::Widget* _sender); void onOkButtonClicked(MyGUI::Widget* _sender);
void close();
}; };
} }

View file

@ -8,7 +8,7 @@
namespace MWGui namespace MWGui
{ {
CountDialog::CountDialog(MWBase::WindowManager& parWindowManager) : CountDialog::CountDialog(MWBase::WindowManager& parWindowManager) :
WindowBase("openmw_count_window.layout", parWindowManager) WindowModal("openmw_count_window.layout", parWindowManager)
{ {
getWidget(mSlider, "CountSlider"); getWidget(mSlider, "CountSlider");
getWidget(mItemEdit, "ItemEdit"); getWidget(mItemEdit, "ItemEdit");
@ -40,9 +40,6 @@ namespace MWGui
width, width,
mMainWidget->getHeight()); mMainWidget->getHeight());
// make other gui elements inaccessible while this dialog is open
MyGUI::InputManager::getInstance().addWidgetModal(mMainWidget);
MyGUI::InputManager::getInstance().setKeyFocusWidget(mItemEdit); MyGUI::InputManager::getInstance().setKeyFocusWidget(mItemEdit);
mSlider->setScrollPosition(maxCount-1); mSlider->setScrollPosition(maxCount-1);
@ -63,14 +60,14 @@ namespace MWGui
void CountDialog::onCancelButtonClicked(MyGUI::Widget* _sender) void CountDialog::onCancelButtonClicked(MyGUI::Widget* _sender)
{ {
close(); setVisible(false);
} }
void CountDialog::onOkButtonClicked(MyGUI::Widget* _sender) void CountDialog::onOkButtonClicked(MyGUI::Widget* _sender)
{ {
eventOkClicked(NULL, mSlider->getScrollPosition()+1); eventOkClicked(NULL, mSlider->getScrollPosition()+1);
close(); setVisible(false);
} }
void CountDialog::onEditTextChange(MyGUI::EditBox* _sender) void CountDialog::onEditTextChange(MyGUI::EditBox* _sender)
@ -99,10 +96,4 @@ namespace MWGui
{ {
mItemEdit->setCaption(boost::lexical_cast<std::string>(_position+1)); mItemEdit->setCaption(boost::lexical_cast<std::string>(_position+1));
} }
void CountDialog::close()
{
setVisible(false);
MyGUI::InputManager::getInstance().removeWidgetModal(mMainWidget);
}
} }

View file

@ -5,7 +5,7 @@
namespace MWGui namespace MWGui
{ {
class CountDialog : public WindowBase class CountDialog : public WindowModal
{ {
public: public:
CountDialog(MWBase::WindowManager& parWindowManager); CountDialog(MWBase::WindowManager& parWindowManager);
@ -30,8 +30,6 @@ namespace MWGui
void onOkButtonClicked(MyGUI::Widget* _sender); void onOkButtonClicked(MyGUI::Widget* _sender);
void onEditTextChange(MyGUI::EditBox* _sender); void onEditTextChange(MyGUI::EditBox* _sender);
void onSliderMoved(MyGUI::ScrollBar* _sender, size_t _position); void onSliderMoved(MyGUI::ScrollBar* _sender, size_t _position);
void close();
}; };
} }

View file

@ -0,0 +1,39 @@
#include "itemselection.hpp"
namespace MWGui
{
ItemSelectionDialog::ItemSelectionDialog(const std::string &label, ContainerBase::Filter filter, MWBase::WindowManager& parWindowManager)
: ContainerBase(NULL)
, WindowModal("openmw_itemselection_dialog.layout", parWindowManager)
{
mFilter = filter;
MyGUI::ScrollView* itemView;
MyGUI::Widget* containerWidget;
getWidget(containerWidget, "Items");
getWidget(itemView, "ItemView");
setWidgets(containerWidget, itemView);
MyGUI::TextBox* l;
getWidget(l, "Label");
l->setCaptionWithReplacing (label);
MyGUI::Button* cancelButton;
getWidget(cancelButton, "CancelButton");
cancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &ItemSelectionDialog::onCancelButtonClicked);
center();
}
void ItemSelectionDialog::onSelectedItemImpl(MWWorld::Ptr item)
{
eventItemSelected(item);
}
void ItemSelectionDialog::onCancelButtonClicked(MyGUI::Widget* sender)
{
eventDialogCanceled();
}
}

View file

@ -0,0 +1,28 @@
#include "container.hpp"
#include "../mwworld/ptr.hpp"
namespace MWGui
{
class ItemSelectionDialog : public ContainerBase, public WindowModal
{
public:
ItemSelectionDialog(const std::string& label, ContainerBase::Filter filter, MWBase::WindowManager& parWindowManager);
typedef MyGUI::delegates::CMultiDelegate0 EventHandle_Void;
typedef MyGUI::delegates::CMultiDelegate1<MWWorld::Ptr> EventHandle_Item;
EventHandle_Item eventItemSelected;
EventHandle_Void eventDialogCanceled;
private:
virtual void onReferenceUnavailable() { ; }
virtual void onSelectedItemImpl(MWWorld::Ptr item);
void onCancelButtonClicked(MyGUI::Widget* sender);
};
}

View file

@ -32,7 +32,9 @@ namespace MWGui
GM_Review, GM_Review,
// interactive MessageBox // interactive MessageBox
GM_InterMessageBox GM_InterMessageBox,
GM_QuickKeysMenu
}; };
// Windows shown in inventory mode // Windows shown in inventory mode

View file

@ -0,0 +1,237 @@
#include "quickkeysmenu.hpp"
#include <boost/lexical_cast.hpp>
#include "../mwbase/environment.hpp"
#include "../mwbase/world.hpp"
#include "../mwworld/player.hpp"
#include "windowmanagerimp.hpp"
#include "itemselection.hpp"
namespace MWGui
{
QuickKeysMenu::QuickKeysMenu(MWBase::WindowManager& parWindowManager)
: WindowBase("openmw_quickkeys_menu.layout", parWindowManager)
, mAssignDialog(0)
, mItemSelectionDialog(0)
, mMagicSelectionDialog(0)
{
getWidget(mOkButton, "OKButton");
getWidget(mInstructionLabel, "InstructionLabel");
mMainWidget->setSize(mMainWidget->getWidth(),
mMainWidget->getHeight() + (mInstructionLabel->getTextSize().height - mInstructionLabel->getHeight()));
int okButtonWidth = mOkButton->getTextSize ().width + 24;
mOkButton->setCoord(mOkButton->getLeft() - (okButtonWidth - mOkButton->getWidth()),
mOkButton->getTop(),
okButtonWidth,
mOkButton->getHeight());
mOkButton->eventMouseButtonClick += MyGUI::newDelegate(this, &QuickKeysMenu::onOkButtonClicked);
center();
for (int i = 0; i < 10; ++i)
{
MyGUI::Button* button;
getWidget(button, "QuickKey" + boost::lexical_cast<std::string>(i+1));
if (i != 9) // 10th quick key is always set to hand-to-hand
button->eventMouseButtonClick += MyGUI::newDelegate(this, &QuickKeysMenu::onQuickKeyButtonClicked);
unassign(button, i);
mQuickKeyButtons.push_back(button);
}
}
QuickKeysMenu::~QuickKeysMenu()
{
delete mAssignDialog;
}
void QuickKeysMenu::unassign(MyGUI::Widget* key, int index)
{
while (key->getChildCount ())
MyGUI::Gui::getInstance ().destroyWidget (key->getChildAt(0));
MyGUI::TextBox* textBox = key->createWidgetReal<MyGUI::TextBox>("SandText", MyGUI::FloatCoord(0,0,1,1), MyGUI::Align::Default);
textBox->setTextAlign (MyGUI::Align::Center);
textBox->setCaption (boost::lexical_cast<std::string>(index+1));
textBox->setNeedMouseFocus (false);
}
void QuickKeysMenu::onQuickKeyButtonClicked(MyGUI::Widget* sender)
{
int index = -1;
for (int i = 0; i < 10; ++i)
{
if (sender == mQuickKeyButtons[i] || sender->getParent () == mQuickKeyButtons[i])
{
index = i;
break;
}
}
assert(index != -1);
mSelectedIndex = index;
{
// open assign dialog
if (!mAssignDialog)
mAssignDialog = new QuickKeysMenuAssign(mWindowManager, this);
mAssignDialog->setVisible (true);
}
}
void QuickKeysMenu::onOkButtonClicked (MyGUI::Widget *sender)
{
mWindowManager.removeGuiMode(GM_QuickKeysMenu);
}
void QuickKeysMenu::onItemButtonClicked(MyGUI::Widget* sender)
{
if (!mItemSelectionDialog )
{
mItemSelectionDialog = new ItemSelectionDialog("#{sQuickMenu6}", ContainerBase::Filter_All, mWindowManager);
mItemSelectionDialog->eventItemSelected += MyGUI::newDelegate(this, &QuickKeysMenu::onAssignItem);
mItemSelectionDialog->eventDialogCanceled += MyGUI::newDelegate(this, &QuickKeysMenu::onAssignItemCancel);
}
mItemSelectionDialog->setVisible(true);
mItemSelectionDialog->openContainer(MWBase::Environment::get().getWorld()->getPlayer().getPlayer());
mItemSelectionDialog->drawItems ();
mAssignDialog->setVisible (false);
}
void QuickKeysMenu::onMagicButtonClicked(MyGUI::Widget* sender)
{
if (!mMagicSelectionDialog )
{
mMagicSelectionDialog = new MagicSelectionDialog(mWindowManager, this);
}
mMagicSelectionDialog->setVisible(true);
mAssignDialog->setVisible (false);
}
void QuickKeysMenu::onUnassignButtonClicked(MyGUI::Widget* sender)
{
unassign(mQuickKeyButtons[mSelectedIndex], mSelectedIndex);
mAssignDialog->setVisible (false);
}
void QuickKeysMenu::onCancelButtonClicked(MyGUI::Widget* sender)
{
mAssignDialog->setVisible (false);
}
void QuickKeysMenu::onAssignItem(MWWorld::Ptr item)
{
MyGUI::Button* button = mQuickKeyButtons[mSelectedIndex];
while (button->getChildCount ())
MyGUI::Gui::getInstance ().destroyWidget (button->getChildAt(0));
MyGUI::ImageBox* image = button->createWidget<MyGUI::ImageBox>("ImageBox", MyGUI::IntCoord(9, 8, 42, 42), MyGUI::Align::Default);
image->setUserString ("ToolTipType", "ItemPtr");
image->setUserData(item);
std::string path = std::string("icons\\");
path += MWWorld::Class::get(item).getInventoryIcon(item);
int pos = path.rfind(".");
path.erase(pos);
path.append(".dds");
image->setImageTexture (path);
image->eventMouseButtonClick += MyGUI::newDelegate(this, &QuickKeysMenu::onQuickKeyButtonClicked);
mItemSelectionDialog->setVisible(false);
}
void QuickKeysMenu::onAssignItemCancel()
{
mItemSelectionDialog->setVisible(false);
}
void QuickKeysMenu::onAssignMagicItem (MWWorld::Ptr item)
{
}
void QuickKeysMenu::onAssignMagic (const std::string& spellId)
{
}
void QuickKeysMenu::onAssignMagicCancel ()
{
mMagicSelectionDialog->setVisible(false);
}
// ---------------------------------------------------------------------------------------------------------
QuickKeysMenuAssign::QuickKeysMenuAssign (MWBase::WindowManager &parWindowManager, QuickKeysMenu* parent)
: WindowModal("openmw_quickkeys_menu_assign.layout", parWindowManager)
, mParent(parent)
{
getWidget(mLabel, "Label");
getWidget(mItemButton, "ItemButton");
getWidget(mMagicButton, "MagicButton");
getWidget(mUnassignButton, "UnassignButton");
getWidget(mCancelButton, "CancelButton");
mItemButton->eventMouseButtonClick += MyGUI::newDelegate(mParent, &QuickKeysMenu::onItemButtonClicked);
mMagicButton->eventMouseButtonClick += MyGUI::newDelegate(mParent, &QuickKeysMenu::onMagicButtonClicked);
mUnassignButton->eventMouseButtonClick += MyGUI::newDelegate(mParent, &QuickKeysMenu::onUnassignButtonClicked);
mCancelButton->eventMouseButtonClick += MyGUI::newDelegate(mParent, &QuickKeysMenu::onCancelButtonClicked);
int maxWidth = mItemButton->getTextSize ().width + 24;
maxWidth = std::max(maxWidth, mMagicButton->getTextSize ().width + 24);
maxWidth = std::max(maxWidth, mUnassignButton->getTextSize ().width + 24);
maxWidth = std::max(maxWidth, mCancelButton->getTextSize ().width + 24);
mMainWidget->setSize(maxWidth + 24, mMainWidget->getHeight());
mLabel->setSize(maxWidth, mLabel->getHeight());
mItemButton->setCoord((maxWidth - mItemButton->getTextSize().width-24)/2 + 8,
mItemButton->getTop(),
mItemButton->getTextSize().width + 24,
mItemButton->getHeight());
mMagicButton->setCoord((maxWidth - mMagicButton->getTextSize().width-24)/2 + 8,
mMagicButton->getTop(),
mMagicButton->getTextSize().width + 24,
mMagicButton->getHeight());
mUnassignButton->setCoord((maxWidth - mUnassignButton->getTextSize().width-24)/2 + 8,
mUnassignButton->getTop(),
mUnassignButton->getTextSize().width + 24,
mUnassignButton->getHeight());
mCancelButton->setCoord((maxWidth - mCancelButton->getTextSize().width-24)/2 + 8,
mCancelButton->getTop(),
mCancelButton->getTextSize().width + 24,
mCancelButton->getHeight());
center();
}
// ---------------------------------------------------------------------------------------------------------
MagicSelectionDialog::MagicSelectionDialog(MWBase::WindowManager &parWindowManager, QuickKeysMenu* parent)
: WindowModal("openmw_magicselection_dialog.layout", parWindowManager)
, mParent(parent)
{
getWidget(mCancelButton, "CancelButton");
mCancelButton->eventMouseButtonClick += MyGUI::newDelegate(this, &MagicSelectionDialog::onCancelButtonClicked);
center();
}
void MagicSelectionDialog::onCancelButtonClicked (MyGUI::Widget *sender)
{
mParent->onAssignMagicCancel ();
}
}

View file

@ -0,0 +1,84 @@
#ifndef MWGUI_QUICKKEYS_H
#define MWGUI_QUICKKEYS_H
#include "../mwworld/ptr.hpp"
#include "window_base.hpp"
namespace MWGui
{
class QuickKeysMenuAssign;
class ItemSelectionDialog;
class MagicSelectionDialog;
class QuickKeysMenu : public WindowBase
{
public:
QuickKeysMenu(MWBase::WindowManager& parWindowManager);
~QuickKeysMenu();
void onItemButtonClicked(MyGUI::Widget* sender);
void onMagicButtonClicked(MyGUI::Widget* sender);
void onUnassignButtonClicked(MyGUI::Widget* sender);
void onCancelButtonClicked(MyGUI::Widget* sender);
void onAssignItem (MWWorld::Ptr item);
void onAssignItemCancel ();
void onAssignMagicItem (MWWorld::Ptr item);
void onAssignMagic (const std::string& spellId);
void onAssignMagicCancel ();
private:
MyGUI::EditBox* mInstructionLabel;
MyGUI::Button* mOkButton;
std::vector<MyGUI::Button*> mQuickKeyButtons;
QuickKeysMenuAssign* mAssignDialog;
ItemSelectionDialog* mItemSelectionDialog;
MagicSelectionDialog* mMagicSelectionDialog;
int mSelectedIndex;
void onQuickKeyButtonClicked(MyGUI::Widget* sender);
void onOkButtonClicked(MyGUI::Widget* sender);
void unassign(MyGUI::Widget* key, int index);
};
class QuickKeysMenuAssign : public WindowModal
{
public:
QuickKeysMenuAssign(MWBase::WindowManager& parWindowManager, QuickKeysMenu* parent);
private:
MyGUI::TextBox* mLabel;
MyGUI::Button* mItemButton;
MyGUI::Button* mMagicButton;
MyGUI::Button* mUnassignButton;
MyGUI::Button* mCancelButton;
QuickKeysMenu* mParent;
};
class MagicSelectionDialog : public WindowModal
{
public:
MagicSelectionDialog(MWBase::WindowManager& parWindowManager, QuickKeysMenu* parent);
private:
MyGUI::Button* mCancelButton;
QuickKeysMenu* mParent;
void onCancelButtonClicked (MyGUI::Widget* sender);
};
}
#endif

View file

@ -12,17 +12,15 @@ WindowBase::WindowBase(const std::string& parLayout, MWBase::WindowManager& parW
{ {
} }
void WindowBase::open()
{
}
void WindowBase::setVisible(bool visible) void WindowBase::setVisible(bool visible)
{ {
bool wasVisible = mMainWidget->getVisible(); bool wasVisible = mMainWidget->getVisible();
mMainWidget->setVisible(visible); mMainWidget->setVisible(visible);
if (!wasVisible && visible) if (visible)
open(); open();
else if (wasVisible && !visible)
close();
} }
void WindowBase::center() void WindowBase::center()
@ -40,3 +38,18 @@ void WindowBase::center()
coord.top = (gameWindowSize.height - coord.height)/2; coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord); mMainWidget->setCoord(coord);
} }
WindowModal::WindowModal(const std::string& parLayout, MWBase::WindowManager& parWindowManager)
: WindowBase(parLayout, parWindowManager)
{
}
void WindowModal::open()
{
MyGUI::InputManager::getInstance ().addWidgetModal (mMainWidget);
}
void WindowModal::close()
{
MyGUI::InputManager::getInstance ().removeWidgetModal (mMainWidget);
}

View file

@ -20,8 +20,9 @@ namespace MWGui
// Events // Events
typedef MyGUI::delegates::CMultiDelegate1<WindowBase*> EventHandle_WindowBase; typedef MyGUI::delegates::CMultiDelegate1<WindowBase*> EventHandle_WindowBase;
virtual void open(); virtual void open() {}
virtual void setVisible(bool visible); // calls open() if visible is true and was false before virtual void close () {}
virtual void setVisible(bool visible);
void center(); void center();
/** Event : Dialog finished, OK button clicked.\n /** Event : Dialog finished, OK button clicked.\n
@ -33,6 +34,18 @@ namespace MWGui
/// \todo remove /// \todo remove
MWBase::WindowManager& mWindowManager; MWBase::WindowManager& mWindowManager;
}; };
/*
* "Modal" windows cause the rest of the interface to be unaccessible while they are visible
*/
class WindowModal : public WindowBase
{
public:
WindowModal(const std::string& parLayout, MWBase::WindowManager& parWindowManager);
virtual void open();
virtual void close();
};
} }
#endif #endif

View file

@ -41,6 +41,7 @@
#include "confirmationdialog.hpp" #include "confirmationdialog.hpp"
#include "alchemywindow.hpp" #include "alchemywindow.hpp"
#include "spellwindow.hpp" #include "spellwindow.hpp"
#include "quickkeysmenu.hpp"
using namespace MWGui; using namespace MWGui;
@ -133,6 +134,7 @@ WindowManager::WindowManager(
mConfirmationDialog = new ConfirmationDialog(*this); mConfirmationDialog = new ConfirmationDialog(*this);
mAlchemyWindow = new AlchemyWindow(*this); mAlchemyWindow = new AlchemyWindow(*this);
mSpellWindow = new SpellWindow(*this); mSpellWindow = new SpellWindow(*this);
mQuickKeysMenu = new QuickKeysMenu(*this);
mInputBlocker = mGui->createWidget<MyGUI::Widget>("",0,0,w,h,MyGUI::Align::Default,"Windows",""); mInputBlocker = mGui->createWidget<MyGUI::Widget>("",0,0,w,h,MyGUI::Align::Default,"Windows","");
@ -226,6 +228,7 @@ void WindowManager::updateVisible()
mSettingsWindow->setVisible(false); mSettingsWindow->setVisible(false);
mAlchemyWindow->setVisible(false); mAlchemyWindow->setVisible(false);
mSpellWindow->setVisible(false); mSpellWindow->setVisible(false);
mQuickKeysMenu->setVisible(false);
// Mouse is visible whenever we're not in game mode // Mouse is visible whenever we're not in game mode
MyGUI::PointerManager::getInstance().setVisible(isGuiMode()); MyGUI::PointerManager::getInstance().setVisible(isGuiMode());
@ -254,6 +257,9 @@ void WindowManager::updateVisible()
GuiMode mode = mGuiModes.back(); GuiMode mode = mGuiModes.back();
switch(mode) { switch(mode) {
case GM_QuickKeysMenu:
mQuickKeysMenu->setVisible (true);
break;
case GM_MainMenu: case GM_MainMenu:
mMenu->setVisible(true); mMenu->setVisible(true);
break; break;
@ -652,6 +658,7 @@ void WindowManager::processChangedSettings(const Settings::CategorySettingVector
mAlchemyWindow->center(); mAlchemyWindow->center();
mScrollWindow->center(); mScrollWindow->center();
mBookWindow->center(); mBookWindow->center();
mQuickKeysMenu->center();
mDragAndDrop->mDragAndDropWidget->setSize(MyGUI::IntSize(x, y)); mDragAndDrop->mDragAndDropWidget->setSize(MyGUI::IntSize(x, y));
mInputBlocker->setSize(MyGUI::IntSize(x,y)); mInputBlocker->setSize(MyGUI::IntSize(x,y));
} }

View file

@ -60,6 +60,7 @@ namespace MWGui
class MessageBoxManager; class MessageBoxManager;
class SettingsWindow; class SettingsWindow;
class AlchemyWindow; class AlchemyWindow;
class QuickKeysMenu;
class WindowManager : public MWBase::WindowManager class WindowManager : public MWBase::WindowManager
{ {
@ -209,6 +210,7 @@ namespace MWGui
ConfirmationDialog* mConfirmationDialog; ConfirmationDialog* mConfirmationDialog;
AlchemyWindow* mAlchemyWindow; AlchemyWindow* mAlchemyWindow;
SpellWindow* mSpellWindow; SpellWindow* mSpellWindow;
QuickKeysMenu* mQuickKeysMenu;
CharacterCreation* mCharGen; CharacterCreation* mCharGen;

View file

@ -188,7 +188,40 @@ namespace MWInput
case A_ToggleSpell: case A_ToggleSpell:
toggleSpell (); toggleSpell ();
break; break;
} case A_QuickKey1:
quickKey(1);
break;
case A_QuickKey2:
quickKey(2);
break;
case A_QuickKey3:
quickKey(3);
break;
case A_QuickKey4:
quickKey(4);
break;
case A_QuickKey5:
quickKey(5);
break;
case A_QuickKey6:
quickKey(6);
break;
case A_QuickKey7:
quickKey(7);
break;
case A_QuickKey8:
quickKey(8);
break;
case A_QuickKey9:
quickKey(9);
break;
case A_QuickKey10:
quickKey(10);
break;
case A_QuickKeysMenu:
showQuickKeysMenu();
break;
}
} }
} }
@ -545,6 +578,17 @@ namespace MWInput
// .. but don't touch any other mode. // .. but don't touch any other mode.
} }
void InputManager::quickKey (int index)
{
std::cout << "quick key " << index << std::endl;
}
void InputManager::showQuickKeysMenu()
{
if (!mWindows.isGuiMode ())
mWindows.pushGuiMode (MWGui::GM_QuickKeysMenu);
}
void InputManager::activate() void InputManager::activate()
{ {
mEngine.activate(); mEngine.activate();
@ -587,7 +631,8 @@ namespace MWInput
defaultKeyBindings[A_MoveRight] = OIS::KC_D; defaultKeyBindings[A_MoveRight] = OIS::KC_D;
defaultKeyBindings[A_ToggleWeapon] = OIS::KC_F; defaultKeyBindings[A_ToggleWeapon] = OIS::KC_F;
defaultKeyBindings[A_ToggleSpell] = OIS::KC_R; defaultKeyBindings[A_ToggleSpell] = OIS::KC_R;
defaultKeyBindings[A_Console] = OIS::KC_F1; defaultKeyBindings[A_QuickKeysMenu] = OIS::KC_F1;
defaultKeyBindings[A_Console] = OIS::KC_F2;
defaultKeyBindings[A_Crouch] = OIS::KC_LCONTROL; defaultKeyBindings[A_Crouch] = OIS::KC_LCONTROL;
defaultKeyBindings[A_AutoMove] = OIS::KC_Q; defaultKeyBindings[A_AutoMove] = OIS::KC_Q;
defaultKeyBindings[A_Jump] = OIS::KC_E; defaultKeyBindings[A_Jump] = OIS::KC_E;
@ -595,9 +640,20 @@ namespace MWInput
defaultKeyBindings[A_Rest] = OIS::KC_T; defaultKeyBindings[A_Rest] = OIS::KC_T;
defaultKeyBindings[A_GameMenu] = OIS::KC_ESCAPE; defaultKeyBindings[A_GameMenu] = OIS::KC_ESCAPE;
defaultKeyBindings[A_TogglePOV] = OIS::KC_TAB; defaultKeyBindings[A_TogglePOV] = OIS::KC_TAB;
defaultKeyBindings[A_QuickKey1] = OIS::KC_1;
defaultKeyBindings[A_QuickKey2] = OIS::KC_2;
defaultKeyBindings[A_QuickKey3] = OIS::KC_3;
defaultKeyBindings[A_QuickKey4] = OIS::KC_4;
defaultKeyBindings[A_QuickKey5] = OIS::KC_5;
defaultKeyBindings[A_QuickKey6] = OIS::KC_6;
defaultKeyBindings[A_QuickKey7] = OIS::KC_7;
defaultKeyBindings[A_QuickKey8] = OIS::KC_8;
defaultKeyBindings[A_QuickKey9] = OIS::KC_9;
defaultKeyBindings[A_QuickKey10] = OIS::KC_0;
std::map<int, int> defaultMouseButtonBindings; std::map<int, int> defaultMouseButtonBindings;
defaultMouseButtonBindings[A_Inventory] = OIS::MB_Right; defaultMouseButtonBindings[A_Inventory] = OIS::MB_Right;
defaultMouseButtonBindings[A_Use] = OIS::MB_Left;
for (int i = 0; i < A_Last; ++i) for (int i = 0; i < A_Last; ++i)
{ {
@ -645,6 +701,17 @@ namespace MWInput
descriptions[A_Rest] = "sRestKey"; descriptions[A_Rest] = "sRestKey";
descriptions[A_Inventory] = "sInventory"; descriptions[A_Inventory] = "sInventory";
descriptions[A_TogglePOV] = "sTogglePOVCmd"; descriptions[A_TogglePOV] = "sTogglePOVCmd";
descriptions[A_QuickKeysMenu] = "sQuickMenu";
descriptions[A_QuickKey1] = "sQuick1Cmd";
descriptions[A_QuickKey2] = "sQuick2Cmd";
descriptions[A_QuickKey3] = "sQuick3Cmd";
descriptions[A_QuickKey4] = "sQuick4Cmd";
descriptions[A_QuickKey5] = "sQuick5Cmd";
descriptions[A_QuickKey6] = "sQuick6Cmd";
descriptions[A_QuickKey7] = "sQuick7Cmd";
descriptions[A_QuickKey8] = "sQuick8Cmd";
descriptions[A_QuickKey9] = "sQuick9Cmd";
descriptions[A_QuickKey10] = "sQuick10Cmd";
if (descriptions[action] == "") if (descriptions[action] == "")
return ""; // not configurable return ""; // not configurable
@ -685,6 +752,17 @@ namespace MWInput
ret.push_back(A_Journal); ret.push_back(A_Journal);
ret.push_back(A_Rest); ret.push_back(A_Rest);
ret.push_back(A_Console); ret.push_back(A_Console);
ret.push_back(A_QuickKeysMenu);
ret.push_back(A_QuickKey1);
ret.push_back(A_QuickKey2);
ret.push_back(A_QuickKey3);
ret.push_back(A_QuickKey4);
ret.push_back(A_QuickKey5);
ret.push_back(A_QuickKey6);
ret.push_back(A_QuickKey7);
ret.push_back(A_QuickKey8);
ret.push_back(A_QuickKey9);
ret.push_back(A_QuickKey10);
return ret; return ret;
} }

View file

@ -168,6 +168,9 @@ namespace MWInput
void toggleAutoMove(); void toggleAutoMove();
void exitNow(); void exitNow();
void quickKey (int index);
void showQuickKeysMenu();
bool actionIsActive (int id); bool actionIsActive (int id);
void loadKeyDefaults(bool force = false); void loadKeyDefaults(bool force = false);
@ -220,6 +223,19 @@ namespace MWInput
A_TogglePOV, A_TogglePOV,
A_QuickKey1,
A_QuickKey2,
A_QuickKey3,
A_QuickKey4,
A_QuickKey5,
A_QuickKey6,
A_QuickKey7,
A_QuickKey8,
A_QuickKey9,
A_QuickKey10,
A_QuickKeysMenu,
A_Last // Marker for the last item A_Last // Marker for the last item
}; };
}; };

View file

@ -65,6 +65,10 @@ set(MYGUI_FILES
openmw_tooltips.layout openmw_tooltips.layout
openmw_trade_window.layout openmw_trade_window.layout
openmw_windows.skin.xml openmw_windows.skin.xml
openmw_quickkeys_menu.layout
openmw_quickkeys_menu_assign.layout
openmw_itemselection_dialog.layout
openmw_magicselection_dialog.layout
smallbars.png smallbars.png
VeraMono.ttf VeraMono.ttf
) )

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout">
<Widget type="Window" skin="MW_Dialog" position="0 0 380 155" layer="Windows" name="_Main">
<Widget type="TextBox" skin="SandText" position="8 8 300 18" name="Label"/>
<Widget type="Widget" skin="MW_Box" position="8 34 340 70" name="box" align="Left Top Stretch">
<Widget type="ScrollView" skin="MW_ScrollViewH" position="4 4 332 62" name="ItemView" align="Left Top Stretch">
<Property key="CanvasAlign" value="Left Top"/>
<Widget type="Button" skin="" name="Items" position="0 0 332 62" name="Items" align="Left Top Stretch"/>
</Widget>
</Widget>
<Widget type="Button" skin="MW_Button" position="350 110 24 24" name="CancelButton">
<Property key="Caption" value="#{sCancel}"/>
</Widget>
</Widget>
</MyGUI>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout">
<Widget type="Window" skin="MW_Dialog" position="0 0 330 370" layer="Windows" name="_Main">
<Widget type="TextBox" skin="SandText" position="8 8 300 24">
<Property key="Caption" value="Select a magic to quick key."/>
</Widget>
<Widget type="Widget" skin="MW_Box" position="8 38 314 285" name="box" align="Left Top Stretch">
<Widget type="ScrollView" skin="MW_ScrollViewH" position="4 4 306 277" name="MagicList" align="Left Top Stretch">
</Widget>
</Widget>
<Widget type="Button" skin="MW_Button" name="CancelButton" position="288 340 32 24" align="Right Bottom">
<Property key="Caption" value="#{sCancel}"/>
</Widget>
</Widget>
</MyGUI>

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout">
<Widget type="Window" skin="MW_Dialog" position="0 0 370 230" layer="Windows" name="_Main">
<Widget type="TextBox" skin="SandText" position="8 8 354 18">
<Property key="Caption" value="#{sQuickMenuTitle}"/>
<Property key="TextAlign" value="Center"/>
</Widget>
<Widget type="EditBox" skin="SandText" position="8 26 354 18" name="InstructionLabel" align="Left Top VStretch">
<Property key="Caption" value="#{sQuickMenuInstruc}"/>
<Property key="MultiLine" value="true"/>
<Property key="WordWrap" value="true"/>
<Property key="Static" value="true"/>
<Property key="TextAlign" value="Center"/>
</Widget>
<Widget type="Widget" skin="" position="15 55 332 128" align="Left Bottom HCenter">
<Widget type="Button" skin="MW_Box" position="0 0 60 59" name="QuickKey1"/>
<Widget type="Button" skin="MW_Box" position="68 0 60 59" name="QuickKey2"/>
<Widget type="Button" skin="MW_Box" position="136 0 60 59" name="QuickKey3"/>
<Widget type="Button" skin="MW_Box" position="204 0 60 59" name="QuickKey4"/>
<Widget type="Button" skin="MW_Box" position="272 0 60 59" name="QuickKey5"/>
<Widget type="Button" skin="MW_Box" position="0 67 60 59" name="QuickKey6"/>
<Widget type="Button" skin="MW_Box" position="68 67 60 59" name="QuickKey7"/>
<Widget type="Button" skin="MW_Box" position="136 67 60 59" name="QuickKey8"/>
<Widget type="Button" skin="MW_Box" position="204 67 60 59" name="QuickKey9"/>
<Widget type="Button" skin="MW_Box" position="272 67 60 59" name="QuickKey10"/>
</Widget>
<Widget type="Button" skin="MW_Button" name="OKButton" position="315 190 32 24" align="Right Bottom">
<Property key="Caption" value="#{sOK}"/>
</Widget>
</Widget>
</MyGUI>

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout">
<Widget type="Window" skin="MW_Dialog" position="0 0 16 154" layer="Windows" name="_Main">
<Widget type="TextBox" skin="SandText" position="8 8 0 18" name="Label">
<Property key="Caption" value="#{sQuickMenu1}"/>
<Property key="TextAlign" value="Center"/>
</Widget>
<Widget type="Button" skin="MW_Button" position="8 28 0 24" name="ItemButton">
<Property key="Caption" value="#{sQuickMenu2}"/>
</Widget>
<Widget type="Button" skin="MW_Button" position="8 56 0 24" name="MagicButton">
<Property key="Caption" value="#{sQuickMenu3}"/>
</Widget>
<Widget type="Button" skin="MW_Button" position="8 84 0 24" name="UnassignButton">
<Property key="Caption" value="#{sQuickMenu4}"/>
</Widget>
<Widget type="Button" skin="MW_Button" position="8 112 0 24" name="CancelButton">
<Property key="Caption" value="#{sCancel}"/>
</Widget>
</Widget>
</MyGUI>