summaryrefslogtreecommitdiff
path: root/kodereviewer/qml/ProjectListPage.qml
blob: 2846db14b8aabf4de0662c8cb728b1b24ae5f427 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
pragma ComponentBehavior: Bound
import QtQuick 2.15 // Removing version break onCurrentItemChanged
import QtQuick.Layouts
import QtQuick.Controls as QQC2

import org.kde.kirigamiaddons.delegates as Delegates
import org.kde.kitemmodels 1 as KItemModels
import org.kde.kirigami as Kirigami

import org.deprecated.kodereviewer

Kirigami.Page {
    id: root

    required property NetworkManager connection
    required property Project project
    signal pullRequestSelected(int pullRequest)

    readonly property int currentWidth: _private.currentWidth + 1

    onCurrentWidthChanged: pageStack.defaultColumnWidth = root.currentWidth
    Component.onCompleted: {
        pageStack.defaultColumnWidth = root.currentWidth
        connection.getPullRequests()
    }

    Kirigami.Theme.colorSet: Kirigami.Theme.View
    Kirigami.Theme.inherit: false

    PullRequestModel {
        id: pullRequestModel
        project: root.project
    }

    KItemModels.KSortFilterProxyModel {
        id: pullRequestFilterModel
        sourceModel: pullRequestModel
        filterRoleName: "title"
    }

    title: "Pull Requests"

    actions: [
        Kirigami.Action {
            id: searchAction
            icon.name: "search"
            shortcut: Shortcut {
                sequence: "Ctrl+F"
                onActivated: {
                    print("Shortcut triggered")
                    searchAction.trigger()
                }
            }

            onTriggered: print("search triggered")
        }
    ]

    contentItem: QQC2.StackView {
        id: stackView
        anchors.fill: parent

        initialItem: pullRequestListView

        Component {
            id: pullRequestListView
            QQC2.ScrollView {
                ListView {
                    id: view
                    model: pullRequestModel
                    clip: true
                    delegate: Delegates.RoundedItemDelegate {
                        required property int number
                        required property string title
                        required property bool draft
                        required property int index

                        highlighted: ListView.isCurrentItem

                        text: `${number} - ${title}`
                        icon {
                            name: "vcs-merge-request"
                            color: draft ? Kirigami.Theme.disabledTextColor : Kirigami.Theme.positiveTextColor
                        }

                        onClicked: {
                            view.currentIndex = index
                            root.pullRequestSelected(number)
                        }
                    }
                }
            }
        }
    }

    MouseArea {
        anchors.top: parent.top
        anchors.bottom: parent.bottom
        parent: applicationWindow().overlay.parent

        x: root.currentWidth - width / 2
        width: Kirigami.Units.smallSpacing * 2
        z: root.z + 1
        enabled: true
        visible: enabled
        cursorShape: Qt.SplitHCursor

        property int _lastX

        onPressed: mouse => {
            _lastX = mouse.x;
        }
        onPositionChanged: mouse => {
            if (_lastX == -1) {
                return;
            }
            if (mouse.x > _lastX) {
                // _private.currentWidth = _private.currentWidth + (_lastX + mouse.x);
                _private.currentWidth = Math.min(_private.maxWidth, _private.currentWidth + (mouse.x - _lastX))
            } else if (mouse.x < _lastX) {
                const tmpWidth = _private.currentWidth - (_lastX - mouse.x);
                if (tmpWidth > _private.minWidth)
                    _private.currentWidth = tmpWidth;

            }
        }
    }

    /*
     * Hold the modifiable currentWidth in a private object so that only internal
     * members can modify it.
     */
    QtObject {
        id: _private
        property int currentWidth: defaultWidth
        readonly property int defaultWidth: Kirigami.Units.gridUnit * 17
        readonly property int minWidth: Kirigami.Units.gridUnit * 2
        readonly property int maxWidth: Kirigami.Units.gridUnit * 25
    }

}