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