~renatofilho/messaging-app/fix-1489330

« back to all changes in this revision

Viewing changes to src/qml/Stickers/StickersPicker.qml

  • Committer: Renato Araujo Oliveira Filho
  • Date: 2016-05-16 15:53:28 UTC
  • mfrom: (458.1.101 messaging-app)
  • Revision ID: renato.filho@canonical.com-20160516155328-3lkc6f6cob6jgi8k
Trunk merged.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright 2015 Canonical Ltd.
 
3
 *
 
4
 * This file is part of messaging-app.
 
5
 *
 
6
 * messaging-app is free software; you can redistribute it and/or modify
 
7
 * it under the terms of the GNU General Public License as published by
 
8
 * the Free Software Foundation; version 3.
 
9
 *
 
10
 * messaging-app is distributed in the hope that it will be useful,
 
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
 * GNU General Public License for more details.
 
14
 *
 
15
 * You should have received a copy of the GNU General Public License
 
16
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
17
 */
 
18
 
 
19
import QtQuick 2.3
 
20
import Ubuntu.Components 1.3
 
21
import messagingapp.private 0.1
 
22
 
 
23
FocusScope {
 
24
    id: pickerRoot
 
25
    signal stickerSelected(string path)
 
26
 
 
27
    Component.onCompleted: {
 
28
        StickersHistoryModel.databasePath = dataLocation + "/stickers/stickers.sqlite"
 
29
        StickersHistoryModel.limit = 10
 
30
    }
 
31
 
 
32
    property bool expanded: false
 
33
    readonly property int packCount: stickerPacksModel.count
 
34
 
 
35
    // FIXME: try to get something similar to the keyboard height
 
36
    // FIXME: animate the displaying
 
37
    height: expanded ? units.gu(30) : 0
 
38
    opacity: expanded ? 1 : 0
 
39
    visible: opacity > 0
 
40
 
 
41
    Connections {
 
42
        target: Qt.inputMethod
 
43
        onVisibleChanged: {
 
44
            if (Qt.inputMethod.visible && oskEnabled) {
 
45
                pickerRoot.expanded = false
 
46
            }
 
47
        }
 
48
    }
 
49
 
 
50
    Behavior on height {
 
51
        UbuntuNumberAnimation { }
 
52
    }
 
53
 
 
54
    Behavior on opacity {
 
55
        UbuntuNumberAnimation { }
 
56
    }
 
57
 
 
58
    ListView {
 
59
        id: setsList
 
60
        model: stickerPacksModel
 
61
        orientation: ListView.Horizontal
 
62
        anchors.left: parent.left
 
63
        anchors.right: parent.right
 
64
        anchors.top: parent.top
 
65
        height: units.gu(6)
 
66
 
 
67
        header: HistoryButton {
 
68
            height: units.gu(6)
 
69
            width: height
 
70
 
 
71
            onTriggered: stickersGrid.model.packName = ""
 
72
            selected: stickersGrid.model.packName === ""
 
73
        }
 
74
        delegate: StickerPackDelegate {
 
75
            anchors.top: parent.top
 
76
            anchors.bottom: parent.bottom
 
77
            width: units.gu(6)
 
78
 
 
79
            path: filePath
 
80
            onTriggered: stickersGrid.model.packName = fileName
 
81
            selected: stickersGrid.model.packName === fileName
 
82
        }
 
83
    }
 
84
 
 
85
    Rectangle {
 
86
        anchors.fill: stickersGrid
 
87
        color: "#f5f5f5"
 
88
    }
 
89
 
 
90
    GridView {
 
91
        id: stickersGrid
 
92
        anchors.left: parent.left
 
93
        anchors.right: parent.right
 
94
        anchors.top: setsList.bottom
 
95
        anchors.bottom: parent.bottom
 
96
        clip: true
 
97
        cellWidth: units.gu(10)
 
98
        cellHeight: units.gu(10)
 
99
        visible: stickersGrid.model.packName.length > 0
 
100
 
 
101
        model: stickersModel
 
102
        delegate: StickerDelegate {
 
103
            stickerSource: filePath
 
104
            width: stickersGrid.cellWidth
 
105
            height: stickersGrid.cellHeight
 
106
 
 
107
            onTriggered: {
 
108
                StickersHistoryModel.add("%1/%2".arg(stickersGrid.model.packName).arg(fileName))
 
109
                pickerRoot.stickerSelected(stickerSource)
 
110
            }
 
111
        }
 
112
    }
 
113
 
 
114
    GridView {
 
115
        id: historyGrid
 
116
        anchors.left: parent.left
 
117
        anchors.right: parent.right
 
118
        anchors.top: setsList.bottom
 
119
        anchors.bottom: parent.bottom
 
120
        clip: true
 
121
        cellWidth: units.gu(10)
 
122
        cellHeight: units.gu(10)
 
123
        visible: stickersGrid.model.packName.length === 0
 
124
 
 
125
        model: StickersHistoryModel
 
126
 
 
127
        delegate: StickerDelegate {
 
128
            stickerSource: "%1/stickers/%2".arg(dataLocation).arg(sticker)
 
129
            width: stickersGrid.cellWidth
 
130
            height: stickersGrid.cellHeight
 
131
 
 
132
            onTriggered: {
 
133
                StickersHistoryModel.add(sticker)
 
134
                pickerRoot.stickerSelected(stickerSource)
 
135
            }
 
136
        }
 
137
    }
 
138
}