summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/Launcher.qml4
-rw-r--r--popups/launcher/components/Date.qml86
-rw-r--r--popups/launcher/components/ISmartCalc.qml88
-rw-r--r--popups/launcher/components/Unit.qml7
-rw-r--r--qml_plugin/build.rs2
-rw-r--r--qml_plugin/src/launcher.rs2
-rw-r--r--qml_plugin/src/launcher/smartcalc.rs (renamed from qml_plugin/src/launcher/calc.rs)0
7 files changed, 104 insertions, 85 deletions
diff --git a/config/Launcher.qml b/config/Launcher.qml
index cb29c05..a1cb193 100644
--- a/config/Launcher.qml
+++ b/config/Launcher.qml
@@ -49,6 +49,8 @@ Singleton {
Component {
Date {}
},
-
+ Component {
+ Unit {}
+ },
]
}
diff --git a/popups/launcher/components/Date.qml b/popups/launcher/components/Date.qml
index a23c0b0..0929b75 100644
--- a/popups/launcher/components/Date.qml
+++ b/popups/launcher/components/Date.qml
@@ -1,85 +1,7 @@
-import Quickshell
-import QtQuick
-import QtQuick.Layouts
-
-import qs.components
-import qs.services
-import qs.config
-
import core
-IComponent {
- property int cursorPosition: SelectionState.cursorPosition
- property string answer: active && valid ? SmartCalc.result : ""
-
- name: "Date"
- preview: Component {
- Icon {
- text: "๐Ÿ“…"
- }
- }
-
- process: function () {
- SmartCalc.query(input);
- const isValid = active && SmartCalc.result && SmartCalc.result.length > 0 && (SmartCalc.result_type == SmartCalc.Time || SmartCalc.result_type == SmartCalc.Date);
- const answer = isValid ? SmartCalc.result : "";
- return {
- valid: isValid,
- priority: isValid,
- answer: answer,
- predictiveCompletion: isValid ? ' is ' + answer : ''
- };
- }
- exec: function () {
- Clip.copy(answer);
- }
-
- IInnerComponent {
- RowLayout {
- spacing: 0
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.preferredHeight: parent.height
-
- Item {
- Layout.fillWidth: true
- IText {
- anchors.centerIn: parent
- elide: cursorPosition > input.length / 2 ? Text.ElideLeft : Text.ElideRight
- width: Math.min(implicitWidth, parent.width - Launcher.innerMargin * 2)
- clip: true
- renderType: Text.CurveRendering
- visible: valid
- text: input.replace(/ /g, "").replace(/\+/g, " + ").replace(/-/g, " - ").replace(/\*/g, " ร— ").replace(/\//g, " รท ").replace(/%/g, " % ").replace(/\(/g, " ( ").replace(/\)/g, " ) ")
- font {
- pixelSize: Launcher.widgetFontSize
- bold: true
- }
- }
- }
-
- IText {
- visible: valid
- text: "โ†’"
- font.pixelSize: Launcher.widgetFontSize
- font.bold: true
- }
-
- Item {
- Layout.fillWidth: true
- IText {
- animate: true
- anchors.centerIn: parent
- width: Math.min(implicitWidth, parent.width - Launcher.innerMargin * 2)
- renderType: Text.CurveRendering
- visible: valid
- text: valid ? answer : ''
- font {
- pixelSize: Launcher.widgetFontSize
- bold: true
- }
- }
- }
- }
- }
+ISmartCalc {
+ symbol: "๐Ÿ“…"
+ category: SmartCalc.result_type == SmartCalc.Time || SmartCalc.result_type == SmartCalc.Date
+ predictiveText: 'is'
}
diff --git a/popups/launcher/components/ISmartCalc.qml b/popups/launcher/components/ISmartCalc.qml
new file mode 100644
index 0000000..6e6381c
--- /dev/null
+++ b/popups/launcher/components/ISmartCalc.qml
@@ -0,0 +1,88 @@
+import Quickshell
+import QtQuick
+import QtQuick.Layouts
+
+import qs.components
+import qs.services
+import qs.config
+
+import core
+
+IComponent {
+ property string symbol
+ required property bool category
+ required property string predictiveText
+
+ property int cursorPosition: SelectionState.cursorPosition
+ property string answer: active && valid ? SmartCalc.result : ""
+
+ preview: Component {
+ Icon {
+ text: symbol
+ }
+ }
+
+ process: function () {
+ SmartCalc.query(input);
+ const isValid = active && SmartCalc.result && SmartCalc.result.length > 0 && category;
+ const answer = isValid ? SmartCalc.result : "";
+ return {
+ valid: isValid,
+ priority: isValid,
+ answer: answer,
+ predictiveCompletion: isValid ? ` ${predictiveText} ` + answer : ''
+ };
+ }
+ exec: function () {
+ Clip.copy(answer);
+ }
+
+ IInnerComponent {
+ RowLayout {
+ spacing: 0
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ Layout.preferredHeight: parent.height
+
+ Item {
+ Layout.fillWidth: true
+ IText {
+ anchors.centerIn: parent
+ elide: cursorPosition > input.length / 2 ? Text.ElideLeft : Text.ElideRight
+ width: Math.min(implicitWidth, parent.width - Launcher.innerMargin * 2)
+ clip: true
+ renderType: Text.CurveRendering
+ visible: valid
+ text: input.replace(/ /g, "").replace(/\+/g, " + ").replace(/-/g, " - ").replace(/\*/g, " ร— ").replace(/\//g, " รท ").replace(/%/g, " % ").replace(/\(/g, " ( ").replace(/\)/g, " ) ")
+ font {
+ pixelSize: Launcher.widgetFontSize
+ bold: true
+ }
+ }
+ }
+
+ IText {
+ visible: valid
+ text: "โ†’"
+ font.pixelSize: Launcher.widgetFontSize
+ font.bold: true
+ }
+
+ Item {
+ Layout.fillWidth: true
+ IText {
+ animate: true
+ anchors.centerIn: parent
+ width: Math.min(implicitWidth, parent.width - Launcher.innerMargin * 2)
+ renderType: Text.CurveRendering
+ visible: valid
+ text: valid ? answer : ''
+ font {
+ pixelSize: Launcher.widgetFontSize
+ bold: true
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/popups/launcher/components/Unit.qml b/popups/launcher/components/Unit.qml
new file mode 100644
index 0000000..f03f69c
--- /dev/null
+++ b/popups/launcher/components/Unit.qml
@@ -0,0 +1,7 @@
+import core
+
+ISmartCalc {
+ symbol: "โ‡„"
+ category: SmartCalc.result_type == SmartCalc.Unit
+ predictiveText: 'โ†’'
+}
diff --git a/qml_plugin/build.rs b/qml_plugin/build.rs
index 2adb19c..8a02b92 100644
--- a/qml_plugin/build.rs
+++ b/qml_plugin/build.rs
@@ -13,6 +13,6 @@ fn main() {
CxxQtBuilder::new_qml_module(QmlModule::new(NAME).plugin_type(PluginType::Dynamic))
.qt_module("Qml")
- .files(["src/launcher/calc.rs"])
+ .files(["src/launcher/smartcalc.rs"])
.build();
}
diff --git a/qml_plugin/src/launcher.rs b/qml_plugin/src/launcher.rs
index 5632eea..8cb8676 100644
--- a/qml_plugin/src/launcher.rs
+++ b/qml_plugin/src/launcher.rs
@@ -1 +1 @@
-pub mod calc;
+pub mod smartcalc;
diff --git a/qml_plugin/src/launcher/calc.rs b/qml_plugin/src/launcher/smartcalc.rs
index 7b1b066..7b1b066 100644
--- a/qml_plugin/src/launcher/calc.rs
+++ b/qml_plugin/src/launcher/smartcalc.rs