Warning, /utilities/kalk/src/qml/main.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 2.7 0008 import QtQuick.Layouts 1.1 0009 import QtQuick.Controls 2.15 as Controls 0010 import Qt.labs.platform 1.0 0011 import Qt.labs.settings 1.0 0012 import org.kde.kirigami 2.13 as Kirigami 0013 0014 Kirigami.ApplicationWindow { 0015 id: root 0016 title: 'Kalk' 0017 visible: true 0018 minimumWidth: 150 0019 minimumHeight: 200 0020 width: 300 0021 height: 450 0022 readonly property int columnWidth: Kirigami.Units.gridUnit * 13 0023 wideScreen: width > columnWidth * 3 0024 0025 pageStack.globalToolBar.canContainHandles: true 0026 pageStack.globalToolBar.style: Kirigami.ApplicationHeaderStyle.ToolBar 0027 pageStack.globalToolBar.showNavigationButtons: Kirigami.ApplicationHeaderStyle.ShowBackButton; 0028 pageStack.popHiddenPages: true 0029 0030 Kirigami.PagePool { 0031 id: mainPagePool 0032 } 0033 0034 // page switch animation 0035 NumberAnimation { 0036 id: anim 0037 from: 0 0038 to: 1 0039 duration: Kirigami.Units.longDuration * 2 0040 easing.type: Easing.InOutQuad 0041 } 0042 NumberAnimation { 0043 id: yAnim 0044 from: Kirigami.Units.gridUnit * 3 0045 to: 0 0046 duration: Kirigami.Units.longDuration * 3 0047 easing.type: Easing.OutQuint 0048 } 0049 0050 function pageAnimation(page) { 0051 // page switch animation 0052 yAnim.target = page; 0053 yAnim.properties = "yTranslate"; 0054 anim.target = page; 0055 anim.properties = "mainOpacity"; 0056 yAnim.restart(); 0057 anim.restart(); 0058 } 0059 0060 globalDrawer: Kirigami.OverlayDrawer { 0061 id: drawer 0062 width: 300 0063 height: root.height 0064 enabled: Kirigami.Settings.isMobile 0065 0066 // for desktop menu 0067 property bool isMenu: true 0068 property list<QtObject> actions: [ 0069 Kirigami.PagePoolAction { 0070 text: i18n("Calculator") 0071 icon.name: "accessories-calculator" 0072 pagePool: mainPagePool 0073 page: "qrc:/qml/CalculationPage.qml" 0074 onTriggered: pageAnimation(pageItem()) 0075 }, 0076 Kirigami.PagePoolAction { 0077 text: i18n("Converter") 0078 icon.name: "gtk-convert" 0079 page: "qrc:/qml/UnitConverter.qml" 0080 pagePool: mainPagePool 0081 onTriggered: pageAnimation(pageItem()) 0082 }, 0083 Kirigami.PagePoolAction { 0084 text: i18n("Programmer") 0085 icon.name: "format-text-code" 0086 pagePool: mainPagePool 0087 page: "qrc:/qml/BinaryCalculator.qml" 0088 onTriggered: pageAnimation(pageItem()) 0089 }, 0090 Kirigami.PagePoolAction { 0091 text: i18n("Settings") 0092 icon.name: "settings-configure" 0093 pagePool: mainPagePool 0094 page: "qrc:/qml/SettingsPage.qml" 0095 onTriggered: pageAnimation(pageItem()) 0096 }, 0097 Kirigami.PagePoolAction { 0098 text: i18n("About") 0099 icon.name: "help-about" 0100 page: "qrc:/qml/AboutPage.qml" 0101 pagePool: mainPagePool 0102 } 0103 ] 0104 0105 // for mobile sidebar 0106 handleClosedIcon.source: null 0107 handleOpenIcon.source: null 0108 0109 Kirigami.Theme.colorSet: Kirigami.Theme.Window 0110 Kirigami.Theme.inherit: false 0111 0112 contentItem: ColumnLayout { 0113 id: column 0114 spacing: 0 0115 0116 // allows for lazy loading of pages compared to using a binding 0117 property string currentlyChecked: i18n("Calculator") 0118 0119 Kirigami.Heading { 0120 text: i18n("Calculator") 0121 type: Kirigami.Heading.Secondary 0122 Layout.margins: Kirigami.Units.gridUnit 0123 } 0124 0125 SidebarButton { 0126 text: i18n("Calculator") 0127 icon.name: "accessories-calculator" 0128 Layout.fillWidth: true 0129 Layout.minimumHeight: Kirigami.Units.gridUnit * 2 0130 Layout.bottomMargin: Kirigami.Units.smallSpacing 0131 checked: column.currentlyChecked === text 0132 onClicked: { 0133 column.currentlyChecked = text; 0134 0135 let page = mainPagePool.loadPage("qrc:/qml/CalculationPage.qml"); 0136 while (pageStack.depth > 0) pageStack.pop(); 0137 pageStack.push(page); 0138 pageAnimation(page); 0139 drawer.close(); 0140 } 0141 } 0142 0143 SidebarButton { 0144 text: i18n("Converter") 0145 icon.name: "gtk-convert" 0146 Layout.fillWidth: true 0147 Layout.minimumHeight: Kirigami.Units.gridUnit * 2 0148 Layout.bottomMargin: Kirigami.Units.smallSpacing 0149 checked: column.currentlyChecked === text 0150 onClicked: { 0151 column.currentlyChecked = text; 0152 0153 let page = mainPagePool.loadPage("qrc:/qml/UnitConverter.qml"); 0154 while (pageStack.depth > 0) pageStack.pop(); 0155 pageStack.push(page); 0156 pageAnimation(page); 0157 drawer.close(); 0158 } 0159 } 0160 0161 SidebarButton { 0162 text: i18n("Binary Calculator") 0163 icon.name: "format-text-code" 0164 Layout.fillWidth: true 0165 Layout.minimumHeight: Kirigami.Units.gridUnit * 2 0166 Layout.bottomMargin: Kirigami.Units.smallSpacing 0167 checked: column.currentlyChecked === text 0168 onClicked: { 0169 column.currentlyChecked = text; 0170 0171 let page = mainPagePool.loadPage("qrc:/qml/BinaryCalculator.qml"); 0172 while (pageStack.depth > 0) pageStack.pop(); 0173 pageStack.push(page); 0174 pageAnimation(page); 0175 drawer.close(); 0176 } 0177 } 0178 0179 Item { Layout.fillHeight: true } 0180 Kirigami.Separator { 0181 Layout.fillWidth: true 0182 Layout.margins: Kirigami.Units.smallSpacing 0183 } 0184 0185 SidebarButton { 0186 text: i18n("Settings") 0187 icon.name: "settings-configure" 0188 Layout.fillWidth: true 0189 Layout.minimumHeight: Kirigami.Units.gridUnit * 2 0190 Layout.bottomMargin: Kirigami.Units.smallSpacing 0191 checked: column.currentlyChecked === text 0192 onClicked: { 0193 column.currentlyChecked = text; 0194 0195 let page = mainPagePool.loadPage("qrc:/qml/SettingsPage.qml"); 0196 while (pageStack.depth > 0) pageStack.pop(); 0197 pageStack.push(page); 0198 pageAnimation(page); 0199 drawer.close(); 0200 } 0201 } 0202 0203 SidebarButton { 0204 text: i18n("About") 0205 icon.name: "help-about" 0206 Layout.fillWidth: true 0207 Layout.minimumHeight: Kirigami.Units.gridUnit * 2 0208 Layout.bottomMargin: Kirigami.Units.smallSpacing 0209 checked: column.currentlyChecked === text 0210 onClicked: { 0211 column.currentlyChecked = text; 0212 0213 let page = mainPagePool.loadPage("qrc:/qml/AboutPage.qml") 0214 while (pageStack.depth > 0) pageStack.pop(); 0215 pageStack.push(page); 0216 pageAnimation(page); 0217 drawer.close(); 0218 } 0219 } 0220 } 0221 } 0222 0223 pageStack.initialPage: mainPagePool.loadPage("qrc:/qml/CalculationPage.qml") 0224 }