mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 12:12:32 +02:00
Merge pull request #11793 from ElderOrb/FB9032
9032 - Current display mode can be deselected in the toolbar/tablet menu
This commit is contained in:
commit
e070033ce4
5 changed files with 33 additions and 57 deletions
|
@ -51,19 +51,23 @@ FocusScope {
|
||||||
|
|
||||||
// The VR version of the primary menu
|
// The VR version of the primary menu
|
||||||
property var rootMenu: Menu {
|
property var rootMenu: Menu {
|
||||||
|
id: rootMenuId
|
||||||
objectName: "rootMenu"
|
objectName: "rootMenu"
|
||||||
|
|
||||||
// for some reasons it is not possible to use just '({})' here as it gets empty when passed to TableRoot/DesktopRoot
|
property var exclusionGroups: ({});
|
||||||
property var exclusionGroupsByMenuItem : ListModel {}
|
property Component exclusiveGroupMaker: Component {
|
||||||
|
ExclusiveGroup {
|
||||||
function addExclusionGroup(menuItem, exclusionGroup)
|
|
||||||
{
|
|
||||||
exclusionGroupsByMenuItem.append(
|
|
||||||
{
|
|
||||||
'menuItem' : menuItem.toString(),
|
|
||||||
'exclusionGroup' : exclusionGroup.toString()
|
|
||||||
}
|
}
|
||||||
);
|
}
|
||||||
|
|
||||||
|
function addExclusionGroup(qmlAction, exclusionGroup) {
|
||||||
|
|
||||||
|
var exclusionGroupId = exclusionGroup.toString();
|
||||||
|
if(!exclusionGroups[exclusionGroupId]) {
|
||||||
|
exclusionGroups[exclusionGroupId] = exclusiveGroupMaker.createObject(rootMenuId);
|
||||||
|
}
|
||||||
|
|
||||||
|
qmlAction.exclusiveGroup = exclusionGroups[exclusionGroupId]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,37 +40,29 @@ Item {
|
||||||
|
|
||||||
CheckBox {
|
CheckBox {
|
||||||
id: checkbox
|
id: checkbox
|
||||||
// FIXME: Should use radio buttons if source.exclusiveGroup.
|
|
||||||
width: 20
|
width: 20
|
||||||
visible: source !== null ?
|
visible: source !== null ?
|
||||||
source.visible && source.type === 1 && source.checkable && !source.exclusiveGroup :
|
source.visible && source.type === 1 && source.checkable && !source.exclusiveGroup :
|
||||||
false
|
false
|
||||||
checked: setChecked()
|
|
||||||
function setChecked() {
|
Binding on checked {
|
||||||
if (!source || source.type !== 1 || !source.checkable) {
|
value: source.checked;
|
||||||
return false;
|
when: source && source.type === 1 && source.checkable && !source.exclusiveGroup;
|
||||||
}
|
|
||||||
// FIXME this works for native QML menus but I don't think it will
|
|
||||||
// for proxied QML menus
|
|
||||||
return source.checked;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RadioButton {
|
RadioButton {
|
||||||
id: radiobutton
|
id: radiobutton
|
||||||
// FIXME: Should use radio buttons if source.exclusiveGroup.
|
|
||||||
width: 20
|
width: 20
|
||||||
visible: source !== null ?
|
visible: source !== null ?
|
||||||
source.visible && source.type === 1 && source.checkable && source.exclusiveGroup :
|
source.visible && source.type === 1 && source.checkable && source.exclusiveGroup :
|
||||||
false
|
false
|
||||||
checked: setChecked()
|
|
||||||
function setChecked() {
|
Binding on checked {
|
||||||
if (!source || source.type !== 1 || !source.checkable) {
|
value: source.checked;
|
||||||
return false;
|
when: source && source.type === 1 && source.checkable && source.exclusiveGroup;
|
||||||
}
|
|
||||||
// FIXME this works for native QML menus but I don't think it will
|
|
||||||
// for proxied QML menus
|
|
||||||
return source.checked;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,7 +66,6 @@ Item {
|
||||||
|
|
||||||
function toModel(items, newMenu) {
|
function toModel(items, newMenu) {
|
||||||
var result = modelMaker.createObject(tabletMenu);
|
var result = modelMaker.createObject(tabletMenu);
|
||||||
var exclusionGroups = {};
|
|
||||||
|
|
||||||
for (var i = 0; i < items.length; ++i) {
|
for (var i = 0; i < items.length; ++i) {
|
||||||
var item = items[i];
|
var item = items[i];
|
||||||
|
@ -78,28 +77,6 @@ Item {
|
||||||
if (item.text !== "Users Online") {
|
if (item.text !== "Users Online") {
|
||||||
result.append({"name": item.text, "item": item})
|
result.append({"name": item.text, "item": item})
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var j = 0; j < tabletMenu.rootMenu.exclusionGroupsByMenuItem.count; ++j)
|
|
||||||
{
|
|
||||||
var entry = tabletMenu.rootMenu.exclusionGroupsByMenuItem.get(j);
|
|
||||||
if(entry.menuItem == item.toString())
|
|
||||||
{
|
|
||||||
var exclusionGroupId = entry.exclusionGroup;
|
|
||||||
console.debug('item exclusionGroupId: ', exclusionGroupId)
|
|
||||||
|
|
||||||
if(!exclusionGroups[exclusionGroupId])
|
|
||||||
{
|
|
||||||
exclusionGroups[exclusionGroupId] = exclusiveGroupMaker.createObject(newMenu);
|
|
||||||
console.debug('new exclusion group created: ', exclusionGroups[exclusionGroupId])
|
|
||||||
}
|
|
||||||
|
|
||||||
var exclusionGroup = exclusionGroups[exclusionGroupId];
|
|
||||||
|
|
||||||
item.exclusiveGroup = exclusionGroup
|
|
||||||
console.debug('item.exclusiveGroup: ', item.exclusiveGroup)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case MenuItemType.Separator:
|
case MenuItemType.Separator:
|
||||||
result.append({"name": "", "item": item})
|
result.append({"name": "", "item": item})
|
||||||
|
|
|
@ -7089,6 +7089,7 @@ DisplayPluginPointer Application::getActiveDisplayPlugin() const {
|
||||||
return _displayPlugin;
|
return _displayPlugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char* EXCLUSION_GROUP_KEY = "exclusionGroup";
|
||||||
|
|
||||||
static void addDisplayPluginToMenu(DisplayPluginPointer displayPlugin, bool active = false) {
|
static void addDisplayPluginToMenu(DisplayPluginPointer displayPlugin, bool active = false) {
|
||||||
auto menu = Menu::getInstance();
|
auto menu = Menu::getInstance();
|
||||||
|
@ -7124,6 +7125,8 @@ static void addDisplayPluginToMenu(DisplayPluginPointer displayPlugin, bool acti
|
||||||
action->setCheckable(true);
|
action->setCheckable(true);
|
||||||
action->setChecked(active);
|
action->setChecked(active);
|
||||||
displayPluginGroup->addAction(action);
|
displayPluginGroup->addAction(action);
|
||||||
|
|
||||||
|
action->setProperty(EXCLUSION_GROUP_KEY, QVariant::fromValue(displayPluginGroup));
|
||||||
Q_ASSERT(menu->menuItemExists(MenuOption::OutputMenu, name));
|
Q_ASSERT(menu->menuItemExists(MenuOption::OutputMenu, name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ Menu* Menu::getInstance() {
|
||||||
return dynamic_cast<Menu*>(qApp->getWindow()->menuBar());
|
return dynamic_cast<Menu*>(qApp->getWindow()->menuBar());
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* exclusionGroupKey = "exclusionGroup";
|
const char* EXCLUSION_GROUP_KEY = "exclusionGroup";
|
||||||
|
|
||||||
Menu::Menu() {
|
Menu::Menu() {
|
||||||
auto dialogsManager = DependencyManager::get<DialogsManager>();
|
auto dialogsManager = DependencyManager::get<DialogsManager>();
|
||||||
|
@ -228,21 +228,21 @@ Menu::Menu() {
|
||||||
viewMenu, MenuOption::FirstPerson, Qt::CTRL | Qt::Key_F,
|
viewMenu, MenuOption::FirstPerson, Qt::CTRL | Qt::Key_F,
|
||||||
true, qApp, SLOT(cameraMenuChanged())));
|
true, qApp, SLOT(cameraMenuChanged())));
|
||||||
|
|
||||||
firstPersonAction->setProperty(exclusionGroupKey, QVariant::fromValue(cameraModeGroup));
|
firstPersonAction->setProperty(EXCLUSION_GROUP_KEY, QVariant::fromValue(cameraModeGroup));
|
||||||
|
|
||||||
// View > Third Person
|
// View > Third Person
|
||||||
auto thirdPersonAction = cameraModeGroup->addAction(addCheckableActionToQMenuAndActionHash(
|
auto thirdPersonAction = cameraModeGroup->addAction(addCheckableActionToQMenuAndActionHash(
|
||||||
viewMenu, MenuOption::ThirdPerson, Qt::CTRL | Qt::Key_G,
|
viewMenu, MenuOption::ThirdPerson, Qt::CTRL | Qt::Key_G,
|
||||||
false, qApp, SLOT(cameraMenuChanged())));
|
false, qApp, SLOT(cameraMenuChanged())));
|
||||||
|
|
||||||
thirdPersonAction->setProperty(exclusionGroupKey, QVariant::fromValue(cameraModeGroup));
|
thirdPersonAction->setProperty(EXCLUSION_GROUP_KEY, QVariant::fromValue(cameraModeGroup));
|
||||||
|
|
||||||
// View > Mirror
|
// View > Mirror
|
||||||
auto viewMirrorAction = cameraModeGroup->addAction(addCheckableActionToQMenuAndActionHash(
|
auto viewMirrorAction = cameraModeGroup->addAction(addCheckableActionToQMenuAndActionHash(
|
||||||
viewMenu, MenuOption::FullscreenMirror, Qt::CTRL | Qt::Key_H,
|
viewMenu, MenuOption::FullscreenMirror, Qt::CTRL | Qt::Key_H,
|
||||||
false, qApp, SLOT(cameraMenuChanged())));
|
false, qApp, SLOT(cameraMenuChanged())));
|
||||||
|
|
||||||
viewMirrorAction->setProperty(exclusionGroupKey, QVariant::fromValue(cameraModeGroup));
|
viewMirrorAction->setProperty(EXCLUSION_GROUP_KEY, QVariant::fromValue(cameraModeGroup));
|
||||||
|
|
||||||
// View > Independent [advanced]
|
// View > Independent [advanced]
|
||||||
auto viewIndependentAction = cameraModeGroup->addAction(addCheckableActionToQMenuAndActionHash(viewMenu,
|
auto viewIndependentAction = cameraModeGroup->addAction(addCheckableActionToQMenuAndActionHash(viewMenu,
|
||||||
|
@ -250,7 +250,7 @@ Menu::Menu() {
|
||||||
false, qApp, SLOT(cameraMenuChanged()),
|
false, qApp, SLOT(cameraMenuChanged()),
|
||||||
UNSPECIFIED_POSITION, "Advanced"));
|
UNSPECIFIED_POSITION, "Advanced"));
|
||||||
|
|
||||||
viewIndependentAction->setProperty(exclusionGroupKey, QVariant::fromValue(cameraModeGroup));
|
viewIndependentAction->setProperty(EXCLUSION_GROUP_KEY, QVariant::fromValue(cameraModeGroup));
|
||||||
|
|
||||||
// View > Entity Camera [advanced]
|
// View > Entity Camera [advanced]
|
||||||
auto viewEntityCameraAction = cameraModeGroup->addAction(addCheckableActionToQMenuAndActionHash(viewMenu,
|
auto viewEntityCameraAction = cameraModeGroup->addAction(addCheckableActionToQMenuAndActionHash(viewMenu,
|
||||||
|
@ -258,7 +258,7 @@ Menu::Menu() {
|
||||||
false, qApp, SLOT(cameraMenuChanged()),
|
false, qApp, SLOT(cameraMenuChanged()),
|
||||||
UNSPECIFIED_POSITION, "Advanced"));
|
UNSPECIFIED_POSITION, "Advanced"));
|
||||||
|
|
||||||
viewEntityCameraAction->setProperty(exclusionGroupKey, QVariant::fromValue(cameraModeGroup));
|
viewEntityCameraAction->setProperty(EXCLUSION_GROUP_KEY, QVariant::fromValue(cameraModeGroup));
|
||||||
|
|
||||||
viewMenu->addSeparator();
|
viewMenu->addSeparator();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue