forked from teamnwah/openmw-tes3coop
Add custom page for key bindings.
This commit is contained in:
parent
b685c0ce6c
commit
65201badf6
6 changed files with 174 additions and 33 deletions
|
@ -108,7 +108,7 @@ opencs_units_noqt (view/tools
|
||||||
)
|
)
|
||||||
|
|
||||||
opencs_units (view/prefs
|
opencs_units (view/prefs
|
||||||
dialogue pagebase page
|
dialogue pagebase page keybindingpage
|
||||||
)
|
)
|
||||||
|
|
||||||
opencs_units (model/prefs
|
opencs_units (model/prefs
|
||||||
|
|
|
@ -217,6 +217,7 @@ void CSMPrefs::State::declare()
|
||||||
|
|
||||||
declareCategory ("Key Bindings");
|
declareCategory ("Key Bindings");
|
||||||
|
|
||||||
|
declareSubcategory ("Document");
|
||||||
declareShortcut ("document-file-newgame", "Create new game", QKeySequence());
|
declareShortcut ("document-file-newgame", "Create new game", QKeySequence());
|
||||||
declareShortcut ("document-file-newaddon", "Create new addon", QKeySequence());
|
declareShortcut ("document-file-newaddon", "Create new addon", QKeySequence());
|
||||||
declareShortcut ("document-file-open", "Open", QKeySequence());
|
declareShortcut ("document-file-open", "Open", QKeySequence());
|
||||||
|
@ -269,12 +270,12 @@ void CSMPrefs::State::declare()
|
||||||
declareShortcut ("document-debug-shutdown", "Stop Debug", QKeySequence());
|
declareShortcut ("document-debug-shutdown", "Stop Debug", QKeySequence());
|
||||||
declareShortcut ("document-debug-runlog", "Run Log", QKeySequence());
|
declareShortcut ("document-debug-runlog", "Run Log", QKeySequence());
|
||||||
|
|
||||||
declareSeparator ();
|
declareSubcategory ("Table");
|
||||||
declareShortcut ("table-edit", "Edit record", QKeySequence());
|
declareShortcut ("table-edit", "Edit record", QKeySequence());
|
||||||
declareShortcut ("table-add", "Add row/record", QKeySequence(Qt::ControlModifier | Qt::Key_N));
|
declareShortcut ("table-add", "Add row/record", QKeySequence(Qt::ControlModifier | Qt::Key_N));
|
||||||
declareShortcut ("table-clone", "Clone record", QKeySequence());
|
declareShortcut ("table-clone", "Clone record", QKeySequence());
|
||||||
declareShortcut ("table-revert", "Revert record", QKeySequence());
|
declareShortcut ("table-revert", "Revert record", QKeySequence());
|
||||||
declareShortcut ("table-remove", "Remove record", QKeySequence(Qt::Key_Delete));
|
declareShortcut ("table-remove", "Remove row/record", QKeySequence(Qt::Key_Delete));
|
||||||
declareShortcut ("table-moveup", "Move record up", QKeySequence());
|
declareShortcut ("table-moveup", "Move record up", QKeySequence());
|
||||||
declareShortcut ("table-movedown", "Move record down", QKeySequence());
|
declareShortcut ("table-movedown", "Move record down", QKeySequence());
|
||||||
declareShortcut ("table-view", "View record", QKeySequence());
|
declareShortcut ("table-view", "View record", QKeySequence());
|
||||||
|
@ -282,46 +283,46 @@ void CSMPrefs::State::declare()
|
||||||
declareShortcut ("table-extendeddelete", "Extended record deletion", QKeySequence());
|
declareShortcut ("table-extendeddelete", "Extended record deletion", QKeySequence());
|
||||||
declareShortcut ("table-extendedrevert", "Extended record revertion", QKeySequence());
|
declareShortcut ("table-extendedrevert", "Extended record revertion", QKeySequence());
|
||||||
|
|
||||||
declareSeparator ();
|
declareSubcategory ("Report Table");
|
||||||
declareShortcut ("reporttable-show", "Show report", QKeySequence());
|
declareShortcut ("reporttable-show", "Show report", QKeySequence());
|
||||||
declareShortcut ("reporttable-remove", "Remove report", QKeySequence(Qt::Key_Delete));
|
declareShortcut ("reporttable-remove", "Remove report", QKeySequence(Qt::Key_Delete));
|
||||||
declareShortcut ("reporttable-replace", "Replace report", QKeySequence());
|
declareShortcut ("reporttable-replace", "Replace report", QKeySequence());
|
||||||
declareShortcut ("reporttable-refresh", "Refresh report", QKeySequence());
|
declareShortcut ("reporttable-refresh", "Refresh report", QKeySequence());
|
||||||
|
|
||||||
declareSeparator ();
|
declareSubcategory ("1st/Free Camera");
|
||||||
declareShortcut ("free-forward", "Free camera forward", QKeySequence(Qt::Key_W), Qt::Key_Shift);
|
declareShortcut ("free-forward", "Forward", QKeySequence(Qt::Key_W), Qt::Key_Shift);
|
||||||
declareShortcut ("free-backward", "Free camera backward", QKeySequence(Qt::Key_S));
|
declareShortcut ("free-backward", "Backward", QKeySequence(Qt::Key_S));
|
||||||
declareShortcut ("free-left", "Free camera left", QKeySequence(Qt::Key_A));
|
declareShortcut ("free-left", "Left", QKeySequence(Qt::Key_A));
|
||||||
declareShortcut ("free-right", "Free camera right", QKeySequence(Qt::Key_D));
|
declareShortcut ("free-right", "Right", QKeySequence(Qt::Key_D));
|
||||||
declareModifier ("free-forward", "Free camera speed modifier");
|
declareModifier ("free-forward", "Speed modifier");
|
||||||
declareShortcut ("free-roll-left", "Free camera roll left", QKeySequence(Qt::Key_Q));
|
declareShortcut ("free-roll-left", "Roll left", QKeySequence(Qt::Key_Q));
|
||||||
declareShortcut ("free-roll-right", "Free camera roll right", QKeySequence(Qt::Key_E));
|
declareShortcut ("free-roll-right", "Roll right", QKeySequence(Qt::Key_E));
|
||||||
declareShortcut ("free-speed-mode", "Free camera speed mode toggle", QKeySequence(Qt::Key_F));
|
declareShortcut ("free-speed-mode", "Speed mode toggle", QKeySequence(Qt::Key_F));
|
||||||
|
|
||||||
declareSeparator ();
|
declareSubcategory ("Orbit Camera");
|
||||||
declareShortcut ("orbit-up", "Orbit camera up", QKeySequence(Qt::Key_W), Qt::Key_Shift);
|
declareShortcut ("orbit-up", "Up", QKeySequence(Qt::Key_W), Qt::Key_Shift);
|
||||||
declareShortcut ("orbit-down", "Orbit camera down", QKeySequence(Qt::Key_S));
|
declareShortcut ("orbit-down", "Down", QKeySequence(Qt::Key_S));
|
||||||
declareShortcut ("orbit-left", "Orbit camera left", QKeySequence(Qt::Key_A));
|
declareShortcut ("orbit-left", "Left", QKeySequence(Qt::Key_A));
|
||||||
declareShortcut ("orbit-right", "Orbit camera right", QKeySequence(Qt::Key_D));
|
declareShortcut ("orbit-right", "Right", QKeySequence(Qt::Key_D));
|
||||||
declareModifier ("orbit-up", "Orbit camera speed modifier");
|
declareModifier ("orbit-up", "Speed modifier");
|
||||||
declareShortcut ("orbit-roll-left", "Orbit camera roll left", QKeySequence(Qt::Key_Q));
|
declareShortcut ("orbit-roll-left", "Roll left", QKeySequence(Qt::Key_Q));
|
||||||
declareShortcut ("orbit-roll-right", "Orbit camera roll right", QKeySequence(Qt::Key_E));
|
declareShortcut ("orbit-roll-right", "Roll right", QKeySequence(Qt::Key_E));
|
||||||
declareShortcut ("orbit-speed-mode", "Orbit camera speed mode toggle", QKeySequence(Qt::Key_F));
|
declareShortcut ("orbit-speed-mode", "Speed mode toggle", QKeySequence(Qt::Key_F));
|
||||||
declareShortcut ("orbit-center-selection", "Centers the camera on the selected item", QKeySequence(Qt::Key_C));
|
declareShortcut ("orbit-center-selection", "Center on selected", QKeySequence(Qt::Key_C));
|
||||||
|
|
||||||
declareSeparator ();
|
declareSubcategory ("Scene");
|
||||||
declareShortcut ("scene-navi-primary", "Camera rotation from mouse movement", QKeySequence(Qt::LeftButton));
|
declareShortcut ("scene-navi-primary", "Camera rotation from mouse movement", QKeySequence(Qt::LeftButton));
|
||||||
declareShortcut ("scene-navi-secondary", "Camera translation from mouse movement",
|
declareShortcut ("scene-navi-secondary", "Camera translation from mouse movement",
|
||||||
QKeySequence(Qt::ControlModifier | (int)Qt::LeftButton));
|
QKeySequence(Qt::ControlModifier | (int)Qt::LeftButton));
|
||||||
declareShortcut ("scene-edit-primary", "Scene primary edit button", QKeySequence(Qt::RightButton));
|
declareShortcut ("scene-edit-primary", "Primary edit", QKeySequence(Qt::RightButton));
|
||||||
declareShortcut ("scene-edit-secondary", "Scene secondary edit button",
|
declareShortcut ("scene-edit-secondary", "Secondary edit",
|
||||||
QKeySequence(Qt::ControlModifier | (int)Qt::RightButton));
|
QKeySequence(Qt::ControlModifier | (int)Qt::RightButton));
|
||||||
declareShortcut ("scene-select-primary", "Scene primary select button", QKeySequence(Qt::MiddleButton));
|
declareShortcut ("scene-select-primary", "Primary select", QKeySequence(Qt::MiddleButton));
|
||||||
declareShortcut ("scene-select-secondary", "Scene secondary select button",
|
declareShortcut ("scene-select-secondary", "Secondary select",
|
||||||
QKeySequence(Qt::ControlModifier | (int)Qt::MiddleButton));
|
QKeySequence(Qt::ControlModifier | (int)Qt::MiddleButton));
|
||||||
declareShortcut ("scene-edit-abort", "Scene editor abort key", QKeySequence(Qt::Key_Escape));
|
declareShortcut ("scene-edit-abort", "Abort", QKeySequence(Qt::Key_Escape));
|
||||||
declareShortcut ("scene-focus-toolbar", "Change focus in scene editor", QKeySequence(Qt::Key_T));
|
declareShortcut ("scene-focus-toolbar", "Toggle toolbar focus", QKeySequence(Qt::Key_T));
|
||||||
declareShortcut ("scene-render-stats", "Displays debug rendering stats", QKeySequence(Qt::Key_F3));
|
declareShortcut ("scene-render-stats", "Debug rendering stats", QKeySequence(Qt::Key_F3));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSMPrefs::State::declareCategory (const std::string& key)
|
void CSMPrefs::State::declareCategory (const std::string& key)
|
||||||
|
@ -484,6 +485,17 @@ void CSMPrefs::State::declareSeparator()
|
||||||
mCurrentCategory->second.addSetting (setting);
|
mCurrentCategory->second.addSetting (setting);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSMPrefs::State::declareSubcategory(const std::string& label)
|
||||||
|
{
|
||||||
|
if (mCurrentCategory==mCategories.end())
|
||||||
|
throw std::logic_error ("no category for setting");
|
||||||
|
|
||||||
|
CSMPrefs::Setting *setting =
|
||||||
|
new CSMPrefs::Setting (&mCurrentCategory->second, &mSettings, &mMutex, "", label);
|
||||||
|
|
||||||
|
mCurrentCategory->second.addSetting (setting);
|
||||||
|
}
|
||||||
|
|
||||||
void CSMPrefs::State::setDefault (const std::string& key, const std::string& default_)
|
void CSMPrefs::State::setDefault (const std::string& key, const std::string& default_)
|
||||||
{
|
{
|
||||||
Settings::CategorySetting fullKey (mCurrentCategory->second.getKey(), key);
|
Settings::CategorySetting fullKey (mCurrentCategory->second.getKey(), key);
|
||||||
|
|
|
@ -82,6 +82,8 @@ namespace CSMPrefs
|
||||||
|
|
||||||
void declareSeparator();
|
void declareSeparator();
|
||||||
|
|
||||||
|
void declareSubcategory(const std::string& label);
|
||||||
|
|
||||||
void setDefault (const std::string& key, const std::string& default_);
|
void setDefault (const std::string& key, const std::string& default_);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "../../model/prefs/state.hpp"
|
#include "../../model/prefs/state.hpp"
|
||||||
|
|
||||||
#include "page.hpp"
|
#include "page.hpp"
|
||||||
|
#include "keybindingpage.hpp"
|
||||||
|
|
||||||
void CSVPrefs::Dialogue::buildCategorySelector (QSplitter *main)
|
void CSVPrefs::Dialogue::buildCategorySelector (QSplitter *main)
|
||||||
{
|
{
|
||||||
|
@ -52,7 +53,9 @@ void CSVPrefs::Dialogue::buildContentArea (QSplitter *main)
|
||||||
CSVPrefs::PageBase *CSVPrefs::Dialogue::makePage (const std::string& key)
|
CSVPrefs::PageBase *CSVPrefs::Dialogue::makePage (const std::string& key)
|
||||||
{
|
{
|
||||||
// special case page code goes here
|
// special case page code goes here
|
||||||
|
if (key == "Key Bindings")
|
||||||
|
return new KeyBindingPage(CSMPrefs::get()[key], mContent);
|
||||||
|
else
|
||||||
return new Page (CSMPrefs::get()[key], mContent);
|
return new Page (CSMPrefs::get()[key], mContent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
89
apps/opencs/view/prefs/keybindingpage.cpp
Normal file
89
apps/opencs/view/prefs/keybindingpage.cpp
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
#include "keybindingpage.hpp"
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
#include <QComboBox>
|
||||||
|
#include <QGridLayout>
|
||||||
|
#include <QSpacerItem>
|
||||||
|
#include <QStackedLayout>
|
||||||
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
|
#include "../../model/prefs/setting.hpp"
|
||||||
|
#include "../../model/prefs/category.hpp"
|
||||||
|
|
||||||
|
namespace CSVPrefs
|
||||||
|
{
|
||||||
|
KeyBindingPage::KeyBindingPage(CSMPrefs::Category& category, QWidget* parent)
|
||||||
|
: PageBase(category, parent)
|
||||||
|
, mStackedLayout(0)
|
||||||
|
, mPageLayout(0)
|
||||||
|
, mPageSelector(0)
|
||||||
|
{
|
||||||
|
// Need one widget for scroll area
|
||||||
|
QWidget* topWidget = new QWidget();
|
||||||
|
QVBoxLayout* topLayout = new QVBoxLayout(topWidget);
|
||||||
|
|
||||||
|
// Allows switching between "pages"
|
||||||
|
QWidget* stackedWidget = new QWidget();
|
||||||
|
mStackedLayout = new QStackedLayout(stackedWidget);
|
||||||
|
|
||||||
|
mPageSelector = new QComboBox();
|
||||||
|
connect(mPageSelector, SIGNAL(currentIndexChanged(int)), mStackedLayout, SLOT(setCurrentIndex(int)));
|
||||||
|
|
||||||
|
topLayout->addWidget(mPageSelector);
|
||||||
|
topLayout->addWidget(stackedWidget);
|
||||||
|
topLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
|
||||||
|
|
||||||
|
// Add each option
|
||||||
|
for (CSMPrefs::Category::Iterator iter = category.begin(); iter!=category.end(); ++iter)
|
||||||
|
addSetting (*iter);
|
||||||
|
|
||||||
|
setWidgetResizable(true);
|
||||||
|
setWidget(topWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
void KeyBindingPage::addSetting(CSMPrefs::Setting *setting)
|
||||||
|
{
|
||||||
|
std::pair<QWidget*, QWidget*> widgets = setting->makeWidgets (this);
|
||||||
|
|
||||||
|
if (widgets.first)
|
||||||
|
{
|
||||||
|
// Label, Option widgets
|
||||||
|
assert(mPageLayout);
|
||||||
|
|
||||||
|
int next = mPageLayout->rowCount();
|
||||||
|
mPageLayout->addWidget(widgets.first, next, 0);
|
||||||
|
mPageLayout->addWidget(widgets.second, next, 1);
|
||||||
|
}
|
||||||
|
else if (widgets.second)
|
||||||
|
{
|
||||||
|
// Wide single widget
|
||||||
|
assert(mPageLayout);
|
||||||
|
|
||||||
|
int next = mPageLayout->rowCount();
|
||||||
|
mPageLayout->addWidget(widgets.second, next, 0, 1, 2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (setting->getLabel().empty())
|
||||||
|
{
|
||||||
|
// Insert empty space
|
||||||
|
assert(mPageLayout);
|
||||||
|
|
||||||
|
int next = mPageLayout->rowCount();
|
||||||
|
mPageLayout->addWidget(new QWidget(), next, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Create new page
|
||||||
|
QWidget* pageWidget = new QWidget();
|
||||||
|
mPageLayout = new QGridLayout(pageWidget);
|
||||||
|
mPageLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
|
||||||
|
|
||||||
|
mStackedLayout->addWidget(pageWidget);
|
||||||
|
|
||||||
|
mPageSelector->addItem(QString::fromUtf8(setting->getLabel().c_str()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
35
apps/opencs/view/prefs/keybindingpage.hpp
Normal file
35
apps/opencs/view/prefs/keybindingpage.hpp
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#ifndef CSV_PREFS_KEYBINDINGPAGE_H
|
||||||
|
#define CSV_PREFS_KEYBINDINGPAGE_H
|
||||||
|
|
||||||
|
#include "pagebase.hpp"
|
||||||
|
|
||||||
|
class QComboBox;
|
||||||
|
class QGridLayout;
|
||||||
|
class QStackedLayout;
|
||||||
|
|
||||||
|
namespace CSMPrefs
|
||||||
|
{
|
||||||
|
class Setting;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace CSVPrefs
|
||||||
|
{
|
||||||
|
class KeyBindingPage : public PageBase
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
KeyBindingPage(CSMPrefs::Category& category, QWidget* parent);
|
||||||
|
|
||||||
|
void addSetting(CSMPrefs::Setting* setting);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
QStackedLayout* mStackedLayout;
|
||||||
|
QGridLayout* mPageLayout;
|
||||||
|
QComboBox* mPageSelector;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue