summary refs log tree commit diff
path: root/resources
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2022-08-10 00:20:44 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2022-08-10 00:20:44 +0200
commit376612e4eb39b1a5260745b901a3366d393511ee (patch)
treee86bed96026080c0cd7298a2a69f8daedb68e2db /resources
parentChange preview title for spaces (diff)
downloadnheko-376612e4eb39b1a5260745b901a3366d393511ee.tar.xz
Support editing space children
Diffstat (limited to 'resources')
-rw-r--r--resources/qml/RoomList.qml72
-rw-r--r--resources/qml/components/SpaceMenuLevel.qml84
-rw-r--r--resources/res.qrc13
3 files changed, 137 insertions, 32 deletions
diff --git a/resources/qml/RoomList.qml b/resources/qml/RoomList.qml

index 1e61b68b..fe61b8d5 100644 --- a/resources/qml/RoomList.qml +++ b/resources/qml/RoomList.qml
@@ -110,6 +110,17 @@ Page { } + + Component { + id: nestedSpaceMenuLevel + + SpaceMenuLevel { + roomid: roomContextMenu.roomid + childMenu: rootSpaceMenu.childMenu + } + } + + Platform.Menu { id: roomContextMenu @@ -154,42 +165,51 @@ Page { onTriggered: Rooms.copyLink(roomContextMenu.roomid) } - Platform.MenuSeparator { - text: qsTr("Tag room as:") - } + Platform.Menu { + id: tagsMenu + title: qsTr("Tag room as:") - Instantiator { - model: Communities.tagsWithDefault - onObjectAdded: roomContextMenu.insertItem(index + 4, object) - onObjectRemoved: roomContextMenu.removeItem(object) + Instantiator { + model: Communities.tagsWithDefault + onObjectAdded: tagsMenu.insertItem(index, object) + onObjectRemoved: tagsMenu.removeItem(object) - delegate: Platform.MenuItem { - property string t: modelData + delegate: Platform.MenuItem { + property string t: modelData - text: { - switch (t) { - case "m.favourite": - return qsTr("Favourite"); - case "m.lowpriority": - return qsTr("Low priority"); - case "m.server_notice": - return qsTr("Server notice"); - default: - return t.substring(2); + text: { + switch (t) { + case "m.favourite": + return qsTr("Favourite"); + case "m.lowpriority": + return qsTr("Low priority"); + case "m.server_notice": + return qsTr("Server notice"); + default: + return t.substring(2); + } } + checkable: true + checked: roomContextMenu.tags !== undefined && roomContextMenu.tags.includes(t) + onTriggered: Rooms.toggleTag(roomContextMenu.roomid, t, checked) } - checkable: true - checked: roomContextMenu.tags !== undefined && roomContextMenu.tags.includes(t) - onTriggered: Rooms.toggleTag(roomContextMenu.roomid, t, checked) + } + Platform.MenuItem { + text: qsTr("Create new tag...") + onTriggered: newTag.show() + } } - Platform.MenuItem { - text: qsTr("Create new tag...") - onTriggered: newTag.show() - } + SpaceMenuLevel { + id: rootSpaceMenu + roomid: roomContextMenu.roomid + position: -1 + title: qsTr("Add or remove from space") + childMenu: nestedSpaceMenuLevel + } } delegate: ItemDelegate { diff --git a/resources/qml/components/SpaceMenuLevel.qml b/resources/qml/components/SpaceMenuLevel.qml new file mode 100644
index 00000000..419b0f6e --- /dev/null +++ b/resources/qml/components/SpaceMenuLevel.qml
@@ -0,0 +1,84 @@ +// SPDX-FileCopyrightText: 2022 Nheko Contributors +// +// SPDX-License-Identifier: GPL-3.0-or-later + +import QtQuick 2.15 +import Qt.labs.platform 1.1 as Platform +import im.nheko 1.0 + +Platform.Menu { + id: spacesMenu + + property string roomid + property Component childMenu + + property int position: modelData == undefined ? -2 : modelData.treeIndex + title: modelData != undefined ? modelData.name : qsTr("Add or remove from space") + property bool loadChildren: false + + onAboutToShow: loadChildren = true + //onAboutToHide: loadChildren = false + + Platform.MenuItemGroup { + id: modificationGroup + visible: position != -1 + } + + Platform.MenuItem { + text: qsTr("Official community for this room") + group: modificationGroup + checkable: true + checked: spacesMenu.position >= 0 && (modelData.childValid && modelData.parentValid && modelData.canonical) + enabled: spacesMenu.position >= 0 && (modelData.canEditChild && modelData.canEditParent) + onTriggered: if (checked) Communities.updateSpaceStatus(modelData.roomid, spacesMenu.roomid, true, true, true) + } + Platform.MenuItem { + text: qsTr("Affiliated community for this room") + group: modificationGroup + checkable: true + checked: spacesMenu.position >= 0 && (modelData.childValid && modelData.parentValid && !modelData.canonical) + enabled: spacesMenu.position >= 0 && (modelData.canEditChild && modelData.canEditParent) + onTriggered: if (checked) Communities.updateSpaceStatus(modelData.roomid, spacesMenu.roomid, true, true, false) + } + Platform.MenuItem { + text: qsTr("Listed only for community members") + group: modificationGroup + checkable: true + checked: spacesMenu.position >= 0 && (modelData.childValid && !modelData.parentValid) + enabled: spacesMenu.position >= 0 && ((modelData.canEditChild || modelData.childValid) && (!modelData.parentValid || modelData.canEditParent)) + onTriggered: if (checked) Communities.updateSpaceStatus(modelData.roomid, spacesMenu.roomid, false, true, false) + } + Platform.MenuItem { + text: qsTr("Listed only for room members") + group: modificationGroup + checkable: true + checked: spacesMenu.position >= 0 && (!modelData.childValid && modelData.parentValid) + enabled: spacesMenu.position >= 0 && ((modelData.canEditChild) && (modelData.parentValid || modelData.canEditParent)) + onTriggered: if (checked) Communities.updateSpaceStatus(modelData.roomid, spacesMenu.roomid, true, false, false) + } + Platform.MenuItem { + text: qsTr("Not related") + group: modificationGroup + checkable: true + checked: spacesMenu.position >= 0 && (!modelData.childValid && !modelData.parentValid) + enabled: spacesMenu.position >= 0 && ((modelData.canEditChild || !modelData.childValid) && (!modelData.parentValid || modelData.canEditParent)) + onTriggered: if (checked) Communities.updateSpaceStatus(modelData.roomid, spacesMenu.roomid, false, false, false) + } + + Platform.MenuSeparator { + text: qsTr("Subcommunities") + group: modificationGroup + visible: modificationGroup.visible && inst.model != undefined + } + + Instantiator { + id: inst + model: spacesMenu.loadChildren ? Communities.spaceChildrenListFromIndex(spacesMenu.roomid, spacesMenu.position) : undefined + onObjectAdded: (idx, o) => { + spacesMenu.insertMenu(idx + (spacesMenu.position != -1 ? 6 : 0), o) + } + //onObjectRemoved: spacesMenu.removeMenu(object) + + delegate: childMenu + } +} diff --git a/resources/res.qrc b/resources/res.qrc
index 4bdb3cb8..c14ebd5f 100644 --- a/resources/res.qrc +++ b/resources/res.qrc
@@ -120,16 +120,14 @@ <file>qml/SelfVerificationCheck.qml</file> <file>qml/TypingIndicator.qml</file> <file>qml/NotificationWarning.qml</file> - <file>qml/pages/UserSettingsPage.qml</file> - <file>qml/pages/WelcomePage.qml</file> - <file>qml/pages/LoginPage.qml</file> - <file>qml/pages/RegisterPage.qml</file> <file>qml/components/AdaptiveLayout.qml</file> <file>qml/components/AdaptiveLayoutElement.qml</file> <file>qml/components/AvatarListTile.qml</file> <file>qml/components/FlatButton.qml</file> <file>qml/components/MainWindowDialog.qml</file> + <file>qml/components/NotificationBubble.qml</file> <file>qml/components/ReorderableListview.qml</file> + <file>qml/components/SpaceMenuLevel.qml</file> <file>qml/components/TextButton.qml</file> <file>qml/delegates/Encrypted.qml</file> <file>qml/delegates/FileMessage.qml</file> @@ -172,10 +170,14 @@ <file>qml/dialogs/UserProfile.qml</file> <file>qml/emoji/EmojiPicker.qml</file> <file>qml/emoji/StickerPicker.qml</file> + <file>qml/pages/LoginPage.qml</file> + <file>qml/pages/RegisterPage.qml</file> + <file>qml/pages/UserSettingsPage.qml</file> + <file>qml/pages/WelcomePage.qml</file> <file>qml/ui/NhekoSlider.qml</file> <file>qml/ui/Ripple.qml</file> - <file>qml/ui/Spinner.qml</file> <file>qml/ui/Snackbar.qml</file> + <file>qml/ui/Spinner.qml</file> <file>qml/ui/animations/BlinkAnimation.qml</file> <file>qml/ui/media/MediaControls.qml</file> <file>qml/voip/ActiveCallBar.qml</file> @@ -186,7 +188,6 @@ <file>qml/voip/PlaceCall.qml</file> <file>qml/voip/ScreenShare.qml</file> <file>qml/voip/VideoCall.qml</file> - <file>qml/components/NotificationBubble.qml</file> </qresource> <qresource prefix="/media"> <file>media/ring.ogg</file>