diff --git a/src/qml/Component/ExploreComponent.qml b/src/qml/Component/ExploreComponent.qml new file mode 100644 index 000000000..40a661847 --- /dev/null +++ b/src/qml/Component/ExploreComponent.qml @@ -0,0 +1,129 @@ +// SPDX-FileCopyrightText: 2023 James Graham +// SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL + +import QtQuick 2.15 +import QtQuick.Controls 2.15 as QQC2 +import QtQuick.Layouts 1.15 + +import org.kde.kirigami 2.15 as Kirigami + +import org.kde.neochat 1.0 + +QQC2.ToolBar { + id: root + + property var desiredWidth + property bool collapsed: false + + property Kirigami.Action exploreAction: Kirigami.Action { + text: i18n("Explore rooms") + icon.name: "compass" + onTriggered: { + applicationWindow().pushReplaceLayer("qrc:/JoinRoomPage.qml", {connection: Controller.activeConnection}) + } + } + property Kirigami.Action chatAction: Kirigami.Action { + text: i18n("Start a Chat") + icon.name: "irc-join-channel" + onTriggered: applicationWindow().pushReplaceLayer("qrc:/StartChatPage.qml", {connection: Controller.activeConnection}) + } + property Kirigami.Action roomAction: Kirigami.Action { + text: i18n("Create a Room") + icon.name: "irc-join-channel" + onTriggered: { + let dialog = createRoomDialog.createObject(root.overlay); + dialog.open(); + } + shortcut: StandardKey.New + } + + padding: 0 + + RowLayout { + id: row + Kirigami.SearchField { + Layout.topMargin: Kirigami.Units.smallSpacing + Layout.bottomMargin: Kirigami.Units.smallSpacing + Layout.fillWidth: true + Layout.preferredWidth: root.desiredWidth ? root.desiredWidth - menuButton.width - row.spacing : -1 + visible: !root.collapsed + onTextChanged: sortFilterRoomListModel.filterText = text + KeyNavigation.tab: listView + } + QQC2.ToolButton { + id: menuButton + display: QQC2.AbstractButton.IconOnly + checkable: true + action: Kirigami.Action { + text: i18n("Create rooms and chats") + icon.name: "irc-join-channel" + onTriggered: { + if (Kirigami.isMobile) { + let menu = mobileMenu.createObject(); + menu.open(); + } else { + let menu = desktopMenu.createObject(menuButton, {y: menuButton.height}); + menu.closed.connect(menuButton.toggle) + menu.open(); + } + } + } + QQC2.ToolTip { + text: parent.text + } + } + } + + Component { + id: desktopMenu + QQC2.Menu { + QQC2.MenuItem { + action: exploreAction + } + QQC2.MenuItem { + action: chatAction + } + QQC2.MenuItem { + action: roomAction + } + } + } + Component { + id: mobileMenu + + Kirigami.OverlayDrawer { + id: menuRoot + edge: Qt.BottomEdge + leftPadding: 0 + rightPadding: 0 + bottomPadding: 0 + topPadding: 0 + + parent: applicationWindow().overlay + + ColumnLayout { + width: parent.width + spacing: 0 + + Kirigami.ListSectionHeader { + label: i18n("Create rooms and chats") + } + Kirigami.BasicListItem { + implicitHeight: Kirigami.Units.gridUnit * 3 + action: exploreAction + onClicked: menuRoot.close() + } + Kirigami.BasicListItem { + implicitHeight: Kirigami.Units.gridUnit * 3 + action: chatAction + onClicked: menuRoot.close() + } + Kirigami.BasicListItem { + implicitHeight: Kirigami.Units.gridUnit * 3 + action: roomAction + onClicked: menuRoot.close() + } + } + } + } +} diff --git a/src/qml/Page/RoomListPage.qml b/src/qml/Page/RoomListPage.qml index 2c5ccee1b..1dcd4196d 100644 --- a/src/qml/Page/RoomListPage.qml +++ b/src/qml/Page/RoomListPage.qml @@ -115,8 +115,6 @@ Kirigami.ScrollablePage { } } - title: i18n("Rooms") - property var enteredRoom property bool collapsedMode: Config.roomListPageWidth < applicationWindow().minPageWidth && applicationWindow().shouldUseSidebars @@ -169,23 +167,10 @@ Kirigami.ScrollablePage { goToPreviousRoomFiltered((item) => (item.visible && item.hasUnread)); } - titleDelegate: collapsedMode ? empty : searchField - - Component { - id: empty - Item {} - } - - Component { - id: searchField - Kirigami.SearchField { - Layout.topMargin: Kirigami.Units.smallSpacing - Layout.bottomMargin: Kirigami.Units.smallSpacing - Layout.fillHeight: true - Layout.fillWidth: true - onTextChanged: sortFilterRoomListModel.filterText = text - KeyNavigation.tab: listView - } + titleDelegate: ExploreComponent { + Layout.fillWidth: true + desiredWidth: page.width - Kirigami.Units.largeSpacing + collapsed: collapsedMode } ListView { diff --git a/src/qml/main.qml b/src/qml/main.qml index 9975dab72..e740e0952 100644 --- a/src/qml/main.qml +++ b/src/qml/main.qml @@ -229,58 +229,6 @@ Kirigami.ApplicationWindow { } } - - globalDrawer: Kirigami.GlobalDrawer { - property bool hasLayer - contentItem.implicitWidth: columnWidth - isMenu: true - actions: [ - Kirigami.Action { - text: i18n("Explore rooms") - icon.name: "compass" - onTriggered: pushReplaceLayer("qrc:/JoinRoomPage.qml", {connection: Controller.activeConnection}) - enabled: pageStack.layers.depth === 1 && Controller.accountCount > 0 - }, - Kirigami.Action { - text: i18n("Start a Chat") - icon.name: "irc-join-channel" - onTriggered: pushReplaceLayer("qrc:/StartChatPage.qml", {connection: Controller.activeConnection}) - enabled: pageStack.layers.depth === 1 && Controller.accountCount > 0 - }, - Kirigami.Action { - text: i18n("Create a Room") - icon.name: "irc-join-channel" - onTriggered: { - let dialog = createRoomDialog.createObject(root.overlay); - dialog.open(); - } - shortcut: StandardKey.New - enabled: pageStack.layers.currentItem.title !== i18n("Start a Chat") && Controller.accountCount > 0 - }, - Kirigami.Action { - text: i18n("Configure NeoChat...") - icon.name: "settings-configure" - onTriggered: pageStack.pushDialogLayer("qrc:/SettingsPage.qml", {}, { - title: i18n("Configure") - }) - enabled: pageStack.layers.depth === 1 - shortcut: StandardKey.Preferences - }, - Kirigami.Action { - text: i18n("Logout") - icon.name: "list-remove-user" - enabled: Controller.accountCount > 0 - onTriggered: confirmLogoutDialog.open() - }, - Kirigami.Action { - text: i18n("Quit") - icon.name: "gtk-quit" - shortcut: StandardKey.Quit - onTriggered: Qt.quit() - } - ] - } - ConfirmLogoutDialog { id: confirmLogoutDialog } diff --git a/src/res.qrc b/src/res.qrc index fd28cae4a..96adb1d48 100644 --- a/src/res.qrc +++ b/src/res.qrc @@ -23,6 +23,7 @@ qml/Component/TypingPane.qml qml/Component/ShimmerGradient.qml qml/Component/QuickSwitcher.qml + qml/Component/ExploreComponent.qml qml/Component/ChatBox/ChatBox.qml qml/Component/ChatBox/ChatBar.qml qml/Component/ChatBox/AttachmentPane.qml