Warning, /utilities/kalk/src/qml/HistoryView.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * SPDX-FileCopyrightText: 2020-2021 Han Young <hanyoung@protonmail.com>
0003 * SPDX-FileCopyrightText: 2020 cahfofpai
0004 *
0005 * SPDX-License-Identifier: GPL-3.0-or-later
0006 */
0007 import QtQuick
0008 import QtQuick.Controls
0009 import QtQuick.Layouts
0010 import org.kde.kirigami as Kirigami
0011 import org.kde.kirigamiaddons.delegates as Delegates
0012
0013 Kirigami.ScrollablePage {
0014 id: page
0015 title: i18n("History")
0016
0017 property int historyIndex
0018
0019 Connections {
0020 target: pageStack
0021 function onCurrentItemChanged () {
0022 const index = listView.atYEnd ? 0 : listView.indexAt(listView.contentX, listView.contentY)
0023 inputManager.setHistoryIndex(index);
0024 }
0025 }
0026
0027 actions: Kirigami.Action {
0028 icon.name: "edit-clear-history"
0029 text: i18n("Clear history")
0030 onTriggered: promptDialog.open()
0031 }
0032
0033 ListView {
0034 id: listView
0035
0036 property int flexPointSize: Math.min(Kirigami.Theme.defaultFont.pointSize * 2, Math.max(width / 30, 7))
0037
0038 Component.onCompleted: {
0039 if (page.historyIndex && page.historyIndex < listView.count) {
0040 positionViewAtIndex(page.historyIndex, ListView.Beginning)
0041 } else {
0042 positionViewAtEnd()
0043 }
0044 }
0045
0046 currentIndex: -1
0047 model: historyManager
0048 delegate: Delegates.RoundedItemDelegate {
0049 id: historyDelegate
0050
0051 required property int index
0052 required property var model
0053
0054 highlighted: false
0055
0056 contentItem: RowLayout {
0057 id: item
0058 spacing: Kirigami.Units.smallSpacing
0059
0060 property var parts: model.display.split("=")
0061
0062 Button {
0063 Layout.maximumWidth: listView.width / 2.5
0064 Layout.alignment: Qt.AlignLeft
0065 focusPolicy: Qt.NoFocus
0066 flat: true
0067 onClicked: {
0068 inputManager.fromHistory(item.parts[0].trim());
0069 if (applicationWindow().pageStack.visibleItems.length === 1) {
0070 applicationWindow().pageStack.pop();
0071 }
0072 }
0073 contentItem: Label {
0074 font {
0075 pointSize: listView.flexPointSize
0076 weight: Font.Light
0077 }
0078 text: item.parts[0].trim()
0079 elide: Text.ElideRight
0080 }
0081
0082 ToolTip.visible: contentItem.truncated && hovered
0083 ToolTip.delay: Qt.styleHints.mousePressAndHoldInterval
0084 ToolTip.text: contentItem.text
0085 }
0086
0087 Label {
0088 Layout.alignment: Qt.AlignLeft
0089 font {
0090 pointSize: listView.flexPointSize
0091 weight: Font.Light
0092 }
0093 text: "="
0094 }
0095
0096 Button {
0097 Layout.fillWidth: true
0098 Layout.alignment: Qt.AlignLeft
0099 focusPolicy: Qt.NoFocus
0100 flat: true
0101 onClicked: {
0102 inputManager.fromHistory(item.parts[1].trim());
0103 if (applicationWindow().pageStack.visibleItems.length === 1) {
0104 applicationWindow().pageStack.pop();
0105 }
0106 }
0107 contentItem: Label {
0108 font {
0109 pointSize: listView.flexPointSize
0110 weight: Font.Light
0111 }
0112 text: item.parts[1].trim()
0113 elide: Text.ElideRight
0114 }
0115
0116 ToolTip.visible: contentItem.truncated && hovered
0117 ToolTip.delay: Qt.styleHints.mousePressAndHoldInterval
0118 ToolTip.text: contentItem.text
0119 }
0120
0121 Button {
0122 Layout.alignment: Qt.AlignRight
0123 icon.name: "delete"
0124 onClicked: historyManager.deleteFromHistory(model.index);
0125 focusPolicy: Qt.NoFocus
0126 flat: true
0127 }
0128 }
0129 }
0130
0131 Kirigami.PlaceholderMessage {
0132 anchors.centerIn: parent
0133 text: i18n("History is empty")
0134 visible: listView.count === 0
0135 width: parent.width - Kirigami.Units.gridUnit * 4
0136 }
0137 }
0138
0139 Kirigami.PromptDialog {
0140 id: promptDialog
0141 title: i18nc("Delete all items from a list", "Clear All History?")
0142 subtitle: i18nc("Deleted items cannot be recovered", "This is permanent and cannot be undone")
0143 standardButtons: Kirigami.Dialog.Ok | Kirigami.Dialog.Cancel
0144 onAccepted: historyManager.clearHistory();
0145 onRejected: close()
0146 }
0147 }