Warning, /frameworks/kirigami/examples/simpleexamples/simpleChatApp.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * SPDX-FileCopyrightText: 2017 Marco Martin <mart@kde.org>
0003 *
0004 * SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006
0007 import QtQuick
0008 import QtQuick.Layouts
0009 import QtQuick.Controls as QQC2
0010 import org.kde.kirigami as Kirigami
0011
0012 Kirigami.ApplicationWindow {
0013 id: root
0014
0015 //FIXME: perhaps the default logic for going widescreen should be refined upstream
0016 wideScreen: width > columnWidth * 3
0017 property int columnWidth: Kirigami.Units.gridUnit * 13
0018 property int footerHeight: Math.round(Kirigami.Units.gridUnit * 2.5)
0019
0020 globalDrawer: Kirigami.GlobalDrawer {
0021 contentItem.implicitWidth: columnWidth
0022 modal: true
0023 drawerOpen: false
0024 isMenu: true
0025
0026 actions: [
0027 Kirigami.Action {
0028 text: "Rooms"
0029 icon.name: "view-list-icons"
0030 },
0031 Kirigami.Action {
0032 text: "Contacts"
0033 icon.name: "tag-people"
0034 },
0035 Kirigami.Action {
0036 text: "Search"
0037 icon.name: "search"
0038 }
0039 ]
0040 }
0041 contextDrawer: Kirigami.OverlayDrawer {
0042 id: contextDrawer
0043 //they can depend on the page like that or be defined directly here
0044 edge: Qt.application.layoutDirection === Qt.RightToLeft ? Qt.LeftEdge : Qt.RightEdge
0045 modal: !root.wideScreen
0046 onModalChanged: drawerOpen = !modal
0047 handleVisible: root.controlsVisible
0048
0049 //here padding 0 as listitems look better without as opposed to any other control
0050 topPadding: 0
0051 bottomPadding: 0
0052 leftPadding: 0
0053 rightPadding: 0
0054
0055 contentItem: ColumnLayout {
0056 readonly property int implicitWidth: root.columnWidth
0057 spacing: 0
0058 QQC2.Control {
0059 Layout.fillWidth: true
0060 background: Rectangle {
0061 anchors.fill: parent
0062 color: Kirigami.Theme.highlightColor
0063 opacity: 0.8
0064 }
0065
0066 padding: Kirigami.Units.gridUnit
0067
0068 contentItem: ColumnLayout {
0069 id: titleLayout
0070 spacing: Kirigami.Units.gridUnit
0071
0072 RowLayout {
0073 spacing: Kirigami.Units.gridUnit
0074 Rectangle {
0075 color: Kirigami.Theme.highlightedTextColor
0076 radius: width
0077 implicitWidth: Kirigami.Units.iconSizes.medium
0078 implicitHeight: implicitWidth
0079 }
0080 ColumnLayout {
0081 QQC2.Label {
0082 Layout.fillWidth: true
0083 color: Kirigami.Theme.highlightedTextColor
0084 text: "KDE"
0085 }
0086 QQC2.Label {
0087 Layout.fillWidth: true
0088 color: Kirigami.Theme.highlightedTextColor
0089 font: Kirigami.Theme.smallFont
0090 text: "#kde: kde.org"
0091 }
0092 }
0093 }
0094 QQC2.Label {
0095 Layout.fillWidth: true
0096 color: Kirigami.Theme.highlightedTextColor
0097 text: "Main room for KDE community, other rooms are listed at kde.org/rooms"
0098 wrapMode: Text.WordWrap
0099 }
0100 }
0101 }
0102
0103 Kirigami.Separator {
0104 Layout.fillWidth: true
0105 }
0106
0107 QQC2.ScrollView {
0108 Layout.fillWidth: true
0109 Layout.fillHeight: true
0110 ListView {
0111 reuseItems: true
0112 model: 50
0113 delegate: QQC2.ItemDelegate {
0114 text: "Person " + modelData
0115 width: parent.width
0116 }
0117 }
0118 }
0119
0120 Kirigami.Separator {
0121 Layout.fillWidth: true
0122 Layout.maximumHeight: 1//implicitHeight
0123 }
0124 QQC2.ItemDelegate {
0125 text: "Group call"
0126 icon.name: "call-start"
0127 width: parent.width
0128 }
0129 QQC2.ItemDelegate {
0130 text: "Send Attachment"
0131 icon.name: "mail-attachment"
0132 width: parent.width
0133 }
0134 }
0135 }
0136
0137 pageStack.defaultColumnWidth: columnWidth
0138 pageStack.initialPage: [channelsComponent, chatComponent]
0139
0140 Component {
0141 id: channelsComponent
0142 Kirigami.ScrollablePage {
0143 title: "Channels"
0144 actions: Kirigami.Action {
0145 icon.name: "search"
0146 text: "Search"
0147 }
0148 background: Rectangle {
0149 anchors.fill: parent
0150 color: Kirigami.Theme.backgroundColor
0151 }
0152 footer: QQC2.ToolBar {
0153 height: root.footerHeight
0154 padding: Kirigami.Units.smallSpacing
0155 RowLayout {
0156 anchors.fill: parent
0157 spacing: Kirigami.Units.smallSpacing
0158 QQC2.ToolButton {
0159 Layout.fillHeight: true
0160 //make it square
0161 implicitWidth: height
0162 icon.name: "configure"
0163 onClicked: root.pageStack.layers.push(secondLayerComponent);
0164 }
0165 QQC2.ComboBox {
0166 Layout.fillWidth: true
0167 Layout.fillHeight: true
0168 model: ["First", "Second", "Third"]
0169 }
0170 }
0171 }
0172 ListView {
0173 id: channelsList
0174 currentIndex: 2
0175 model: 30
0176 reuseItems: true
0177 delegate: QQC2.ItemDelegate {
0178 text: "#Channel " + modelData
0179 checkable: true
0180 checked: channelsList.currentIndex === index
0181 width: parent.width
0182 }
0183 }
0184 }
0185 }
0186
0187 Component {
0188 id: chatComponent
0189 Kirigami.ScrollablePage {
0190 title: "#KDE"
0191 actions: [
0192 Kirigami.Action {
0193 icon.name: "documentinfo"
0194 text: "Channel info"
0195 },
0196 Kirigami.Action {
0197 icon.name: "search"
0198 text: "Search"
0199 },
0200 Kirigami.Action {
0201 text: "Room Settings"
0202 icon.name: "configure"
0203 Kirigami.Action {
0204 text: "Setting 1"
0205 }
0206 Kirigami.Action {
0207 text: "Setting 2"
0208 }
0209 },
0210 Kirigami.Action {
0211 text: "Shared Media"
0212 icon.name: "document-share"
0213 Kirigami.Action {
0214 text: "Media 1"
0215 }
0216 Kirigami.Action {
0217 text: "Media 2"
0218 }
0219 Kirigami.Action {
0220 text: "Media 3"
0221 }
0222 }
0223 ]
0224 background: Rectangle {
0225 anchors.fill: parent
0226 color: Kirigami.Theme.backgroundColor
0227 }
0228 footer: QQC2.Control {
0229 height: footerHeight
0230 padding: Kirigami.Units.smallSpacing
0231 background: Rectangle {
0232 color: Kirigami.Theme.backgroundColor
0233 Kirigami.Separator {
0234 Rectangle {
0235 anchors.fill: parent
0236 color: Kirigami.Theme.focusColor
0237 visible: chatTextInput.activeFocus
0238 }
0239 anchors {
0240 left: parent.left
0241 right: parent.right
0242 top: parent.top
0243 }
0244 }
0245 }
0246 contentItem: RowLayout {
0247 QQC2.TextField {
0248 Layout.fillWidth: true
0249 id: chatTextInput
0250 background: Item {}
0251 }
0252 QQC2.ToolButton {
0253 Layout.fillHeight: true
0254 //make it square
0255 implicitWidth: height
0256 icon.name: "go-next"
0257 }
0258 }
0259 }
0260
0261 ListView {
0262 id: channelsList
0263 verticalLayoutDirection: ListView.BottomToTop
0264 currentIndex: 2
0265 model: 30
0266 reuseItems: true
0267 delegate: Item {
0268 height: Kirigami.Units.gridUnit * 4
0269 ColumnLayout {
0270 x: Kirigami.Units.gridUnit
0271 anchors.verticalCenter: parent.verticalCenter
0272 QQC2.Label {
0273 text: modelData % 2 ? "John Doe" : "John Applebaum"
0274 }
0275 QQC2.Label {
0276 text: "Message " + modelData
0277 }
0278 }
0279 }
0280 }
0281 }
0282 }
0283
0284 Component {
0285 id: secondLayerComponent
0286 Kirigami.Page {
0287 title: "Settings"
0288 background: Rectangle {
0289 color: Kirigami.Theme.backgroundColor
0290 }
0291 footer: QQC2.ToolBar {
0292 height: root.footerHeight
0293 QQC2.ToolButton {
0294 Layout.fillHeight: true
0295 //make it square
0296 implicitWidth: height
0297 icon.name: "configure"
0298 onClicked: root.pageStack.layers.pop();
0299 }
0300 }
0301 }
0302 }
0303 }