From 59cb3d09164478eec2b095e444b4df0f896ef137 Mon Sep 17 00:00:00 2001 From: EndrII Date: Tue, 30 Sep 2025 19:50:29 +0200 Subject: [PATCH 01/29] added image effects instance --- ViewSolutions/ViewSolutions/ImageView.qml | 1 + ViewSolutions/src/basehashmodel.h | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ViewSolutions/ViewSolutions/ImageView.qml b/ViewSolutions/ViewSolutions/ImageView.qml index 0c01aec..c6975af 100644 --- a/ViewSolutions/ViewSolutions/ImageView.qml +++ b/ViewSolutions/ViewSolutions/ImageView.qml @@ -16,6 +16,7 @@ AbstractButton { id: root property string source: "" property alias imagesource: sourceImg + property alias imagEffect: imgEffect property int radius: 16 property real power: 1.0 diff --git a/ViewSolutions/src/basehashmodel.h b/ViewSolutions/src/basehashmodel.h index 9f7cdd8..432c86e 100644 --- a/ViewSolutions/src/basehashmodel.h +++ b/ViewSolutions/src/basehashmodel.h @@ -43,11 +43,12 @@ class BaseHashModel: public QAbstractListModel { public: + BaseHashModel(QObject* parent = nullptr): QAbstractListModel(parent) { } - int rowCount(const QModelIndex &parent) const override { + int rowCount(const QModelIndex &) const override { return m_data.size(); } @@ -114,6 +115,10 @@ class BaseHashModel: public QAbstractListModel return {}; } + DATA get(const KEY& key) { + return m_data.value(key); + } + const QHash& dateList() const { return m_data; } From 17d1bc295632e431601d9388b75760e4597944eb Mon Sep 17 00:00:00 2001 From: EndrII Date: Wed, 8 Oct 2025 22:09:58 +0200 Subject: [PATCH 02/29] added extendable widget --- ViewSolutions/ViewSolutions/Extendable.qml | 78 ++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 ViewSolutions/ViewSolutions/Extendable.qml diff --git a/ViewSolutions/ViewSolutions/Extendable.qml b/ViewSolutions/ViewSolutions/Extendable.qml new file mode 100644 index 0000000..c70e96f --- /dev/null +++ b/ViewSolutions/ViewSolutions/Extendable.qml @@ -0,0 +1,78 @@ +//# +//# Copyright (C) 2025-2025 QuasarApp. +//# Distributed under the GPLv3 software license, see the accompanying +//# Everyone is permitted to copy and distribute verbatim copies +//# of this license document, but changing it is not allowed. +//# + +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts + +Control { + + id: root + + property alias extendableWidget: extendetArea.contentItem + property alias mainWidget: mainButton.contentItem + // see GridLayout + property alias layoutDirection: columnLayout.layoutDirection + property alias flow: columnLayout.flow + + property alias extended: extendetArea.visible + property int animationDuration: 600 + + contentItem: GridLayout { + id: columnLayout + columnSpacing: 0 + rowSpacing: 0 + + Control { + id: extendetArea + clip: true + padding: 0 + Layout.alignment: Qt.AlignCenter + + Behavior on implicitHeight { + + NumberAnimation { + easing.type: Easing.OutExpo + duration: root.animationDuration + } + } + + Behavior on implicitWidth { + enabled: root.flow === GridLayout.LeftToRight + NumberAnimation { + easing.type: Easing.OutExpo + duration: root.animationDuration + } + } + + } + + Control { + Layout.alignment: Qt.AlignCenter + padding: 0 + id: mainButton + + Behavior on implicitHeight { + + NumberAnimation { + easing.type: Easing.OutExpo + duration: root.animationDuration + + } + } + + Behavior on implicitWidth { + enabled: root.flow === GridLayout.LeftToRight + NumberAnimation { + easing.type: Easing.OutExpo + duration: root.animationDuration + + } + } + } + } +} From 00e8365340df27aa79ef795a8665a11809fb29c8 Mon Sep 17 00:00:00 2001 From: EndrII Date: Wed, 15 Oct 2025 19:25:38 +0200 Subject: [PATCH 03/29] added custom message type --- ViewSolutions/src/notificationdata.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ViewSolutions/src/notificationdata.h b/ViewSolutions/src/notificationdata.h index 7b2f07b..c5ad70c 100644 --- a/ViewSolutions/src/notificationdata.h +++ b/ViewSolutions/src/notificationdata.h @@ -31,6 +31,9 @@ class VIEWSOLUTION_EXPORT NotificationData Warning = 1, /// This is critical error notifications. Error = 2, + + /// This is user defined type of message. + Custom = 3, }; explicit NotificationData(const QString& title = "", From 5e56566f3aa4a74a0387025c7cdfe575ea6095d2 Mon Sep 17 00:00:00 2001 From: EndrII Date: Thu, 16 Oct 2025 01:11:29 +0200 Subject: [PATCH 04/29] update notifications --- ViewSolutions/ViewSolutions/Metrix.qml | 32 ------------------- .../ViewSolutions/NotificationServiceView.qml | 32 ++++++++----------- ViewSolutions/src/notificationservice.h | 3 +- 3 files changed, 16 insertions(+), 51 deletions(-) delete mode 100644 ViewSolutions/ViewSolutions/Metrix.qml diff --git a/ViewSolutions/ViewSolutions/Metrix.qml b/ViewSolutions/ViewSolutions/Metrix.qml deleted file mode 100644 index b3d2adc..0000000 --- a/ViewSolutions/ViewSolutions/Metrix.qml +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2018-2024 QuasarApp. - * Distributed under the GPLv3 software license, see the accompanying - * Everyone is permitted to copy and distribute verbatim copies - * of this license document, but changing it is not allowed. -*/ - -import QtQuick -import QtQuick.Window -import QtQuick.Controls.Material -import QtQuick.Controls - -Item { - readonly property int pointCount: 100; - readonly property real mm: Screen.pixelDensity - readonly property real sm: 10 * mm - readonly property real dsm: Math.sqrt(Math.pow(Screen.desktopAvailableWidth, 2) + Math.pow(Screen.desktopAvailableHeight, 2)) / sm - readonly property real pt: getfactor(dsm) * sm - readonly property real controlPtMaterial: Material.buttonHeight - readonly property real gamePt: (width < height) ? width / pointCount : height / pointCount; - - function getfactor(dsm) { - if ( dsm < 70) { - return 1 - } else if (dsm < 140) { - return 2; - } else - return 4; - } - - anchors.fill: parent; -} diff --git a/ViewSolutions/ViewSolutions/NotificationServiceView.qml b/ViewSolutions/ViewSolutions/NotificationServiceView.qml index 1fc37a4..b0f9885 100644 --- a/ViewSolutions/ViewSolutions/NotificationServiceView.qml +++ b/ViewSolutions/ViewSolutions/NotificationServiceView.qml @@ -18,45 +18,41 @@ Item { readonly property var history: model.history - Metrix { - id: metrix - } - NotificationForm { id: notyfyView - titleText : msg.title(); - text: (msg)? msg.text(): ""; - img: (msg && msg.img().length)? msg.img(): getDefaultImage((msg)? msg.type(): 0); - type: (msg)? msg.type(): 0; + titleText : root.msg.title(); + text: (root.msg)? root.msg.text(): ""; + img: (root.msg && root.msg.img().length)? root.msg.img(): getDefaultImage((root.msg)? root.msg.type(): 0); + type: (root.msg)? root.msg.type(): 0; x: parent.width - width - margin; y: margin; - width: Math.min(6 * metrix.pt, root.width); + width: Math.min(440, root.width); } YesNoQuestion { id: questionMsgBox - titleText : qst.title(); - text: (qst)? qst.text(): ""; - img: (qst && qst.img().length)? qst.img(): defImg; + titleText : root.qst.title(); + text: (root.qst)? root.qst.text(): ""; + img: (root.qst && root.qst.img().length)? root.qst.img(): defImg; type: 0; x: parent.width / 2 - width / 2; y: parent.height / 2 - height / 2; - width: Math.min(6 * metrix.pt, root.width); + width: Math.min(440, root.width); onAccepted: { - if (model) { - model.questionComplete(true, qst.type()) + if (root.model) { + root.model.questionComplete(true, root.qst.type()) } } onRejected: { - if (model) { - model.questionComplete(false, qst.type()) + if (root.model) { + root.model.questionComplete(false, root.qst.type()) } } } @@ -83,7 +79,7 @@ Item { } Connections { - target: model + target: root.model function onSigShowHistory() { history.open() } diff --git a/ViewSolutions/src/notificationservice.h b/ViewSolutions/src/notificationservice.h index d954141..9f6488c 100644 --- a/ViewSolutions/src/notificationservice.h +++ b/ViewSolutions/src/notificationservice.h @@ -38,6 +38,8 @@ class VIEWSOLUTION_EXPORT NotificationService: public QObject, public iModel Q_PROPERTY(int notificationsCount READ notificationsCount NOTIFY countNotificationsChanged) public: + explicit NotificationService(QObject *ptr = nullptr); + /** * @brief Notify This method return data of the last notify message. * @return return data of the last notify message. @@ -170,7 +172,6 @@ class VIEWSOLUTION_EXPORT NotificationService: public QObject, public iModel private: - explicit NotificationService(QObject *ptr = nullptr); QHash _listners; From 6249fd3781d190695aaca4acfe75cfdde7934181 Mon Sep 17 00:00:00 2001 From: EndrII Date: Mon, 20 Oct 2025 12:57:38 +0200 Subject: [PATCH 05/29] update notification service --- ViewSolutions/src/notificationservice.cpp | 5 ++++- ViewSolutions/src/notificationservice.h | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ViewSolutions/src/notificationservice.cpp b/ViewSolutions/src/notificationservice.cpp index 29fe707..0c136ea 100644 --- a/ViewSolutions/src/notificationservice.cpp +++ b/ViewSolutions/src/notificationservice.cpp @@ -117,11 +117,14 @@ void NotificationService::showHistory() { emit sigShowHistory(); } +void NotificationService::notificationHiden() { + _notify = NotificationData{}; +} + int NotificationService::notificationsCount() const { return _history->rowCount({}); } - QString ViewSolutions::NotificationService::modelId() const { return "NotificationService"; } diff --git a/ViewSolutions/src/notificationservice.h b/ViewSolutions/src/notificationservice.h index 9f6488c..722d3d8 100644 --- a/ViewSolutions/src/notificationservice.h +++ b/ViewSolutions/src/notificationservice.h @@ -133,6 +133,11 @@ class VIEWSOLUTION_EXPORT NotificationService: public QObject, public iModel Q_INVOKABLE void showHistory(); + /** + * @brief notificationHiden this method should invoked every time when the current notification is hiden, automaticaly or by user. + */ + Q_INVOKABLE void notificationHiden(); + /** * @brief notificationsCount - This method used for return count of history notifications. * @return count of history notifications. From 00e9db6bc31f1818800b9bf80e459be60f61459c Mon Sep 17 00:00:00 2001 From: EndrII Date: Tue, 21 Oct 2025 16:57:44 +0200 Subject: [PATCH 06/29] update extandable behavior --- ViewSolutions/ViewSolutions/Extendable.qml | 48 ++++++++-------------- 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/ViewSolutions/ViewSolutions/Extendable.qml b/ViewSolutions/ViewSolutions/Extendable.qml index c70e96f..3423056 100644 --- a/ViewSolutions/ViewSolutions/Extendable.qml +++ b/ViewSolutions/ViewSolutions/Extendable.qml @@ -22,6 +22,22 @@ Control { property alias extended: extendetArea.visible property int animationDuration: 600 + Behavior on height { + + NumberAnimation { + easing.type: Easing.OutExpo + duration: root.animationDuration + } + } + + Behavior on width { + enabled: root.flow === GridLayout.LeftToRight + NumberAnimation { + easing.type: Easing.OutExpo + duration: root.animationDuration + } + } + contentItem: GridLayout { id: columnLayout columnSpacing: 0 @@ -33,21 +49,6 @@ Control { padding: 0 Layout.alignment: Qt.AlignCenter - Behavior on implicitHeight { - - NumberAnimation { - easing.type: Easing.OutExpo - duration: root.animationDuration - } - } - - Behavior on implicitWidth { - enabled: root.flow === GridLayout.LeftToRight - NumberAnimation { - easing.type: Easing.OutExpo - duration: root.animationDuration - } - } } @@ -56,23 +57,6 @@ Control { padding: 0 id: mainButton - Behavior on implicitHeight { - - NumberAnimation { - easing.type: Easing.OutExpo - duration: root.animationDuration - - } - } - - Behavior on implicitWidth { - enabled: root.flow === GridLayout.LeftToRight - NumberAnimation { - easing.type: Easing.OutExpo - duration: root.animationDuration - - } - } } } } From fac8e2b30632f8b177cdb4854d266ad78b2c0d24 Mon Sep 17 00:00:00 2001 From: EndrII Date: Wed, 22 Oct 2025 15:38:49 +0200 Subject: [PATCH 07/29] update simple errors --- ViewSolutions/ViewSolutions/Extendable.qml | 63 ++++++++++++++-------- ViewSolutions/ViewSolutions/ImageView.qml | 1 + 2 files changed, 43 insertions(+), 21 deletions(-) diff --git a/ViewSolutions/ViewSolutions/Extendable.qml b/ViewSolutions/ViewSolutions/Extendable.qml index 3423056..d6c90d4 100644 --- a/ViewSolutions/ViewSolutions/Extendable.qml +++ b/ViewSolutions/ViewSolutions/Extendable.qml @@ -22,40 +22,61 @@ Control { property alias extended: extendetArea.visible property int animationDuration: 600 - Behavior on height { - - NumberAnimation { - easing.type: Easing.OutExpo - duration: root.animationDuration - } - } - - Behavior on width { - enabled: root.flow === GridLayout.LeftToRight - NumberAnimation { - easing.type: Easing.OutExpo - duration: root.animationDuration - } - } - contentItem: GridLayout { id: columnLayout columnSpacing: 0 rowSpacing: 0 Control { - id: extendetArea - clip: true - padding: 0 Layout.alignment: Qt.AlignCenter + Layout.maximumWidth: root.implicitWidth - root.rightPadding - root.leftPadding + padding: 0 + id: mainButton + Behavior on implicitHeight { + enabled: root.flow !== GridLayout.LeftToRight + + NumberAnimation { + easing.type: Easing.OutExpo + duration: root.animationDuration + } + } + + Behavior on implicitWidth { + enabled: root.flow === GridLayout.LeftToRight + NumberAnimation { + easing.type: Easing.OutExpo + duration: root.animationDuration + } + } } + Control { - Layout.alignment: Qt.AlignCenter + id: extendetArea + clip: true + visible: false padding: 0 - id: mainButton + Layout.alignment: Qt.AlignCenter + Layout.maximumWidth: root.implicitWidth - root.rightPadding - root.leftPadding + + Behavior on implicitHeight { + enabled: root.flow !== GridLayout.LeftToRight + + NumberAnimation { + easing.type: Easing.OutExpo + duration: root.animationDuration + } + } + + Behavior on implicitWidth { + enabled: root.flow === GridLayout.LeftToRight + NumberAnimation { + easing.type: Easing.OutExpo + duration: root.animationDuration + } + } } } diff --git a/ViewSolutions/ViewSolutions/ImageView.qml b/ViewSolutions/ViewSolutions/ImageView.qml index c6975af..6b99a23 100644 --- a/ViewSolutions/ViewSolutions/ImageView.qml +++ b/ViewSolutions/ViewSolutions/ImageView.qml @@ -122,6 +122,7 @@ AbstractButton { source: Image { id: sourceImg source: root.source + mipmap: true clip: true fillMode: Image.PreserveAspectCrop From 1f751d55afcfcb9003999346892679c861eb45dd Mon Sep 17 00:00:00 2001 From: EndrII Date: Fri, 24 Oct 2025 23:56:02 +0200 Subject: [PATCH 08/29] fix normal type of message --- ViewSolutions/src/notificationdata.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ViewSolutions/src/notificationdata.h b/ViewSolutions/src/notificationdata.h index c5ad70c..3fa5070 100644 --- a/ViewSolutions/src/notificationdata.h +++ b/ViewSolutions/src/notificationdata.h @@ -26,7 +26,7 @@ class VIEWSOLUTION_EXPORT NotificationData */ enum Type { /// This is message for general notification. - Normal, + Normal = 0, /// This is warning notification. Warning = 1, /// This is critical error notifications. From 7c83776e6b3a7f373fbd9f888bde59a327ffe310 Mon Sep 17 00:00:00 2001 From: EndrII Date: Wed, 26 Nov 2025 15:19:45 +0100 Subject: [PATCH 09/29] stacktextview --- ViewSolutions/ViewSolutions/StackText.qml | 80 +++++++++++++++++++++++ ViewSolutions/src/stacktextmodel.cpp | 47 +++++++++++++ ViewSolutions/src/stacktextmodel.h | 72 ++++++++++++++++++++ ViewSolutions/src/viewsolutions.cpp | 5 +- 4 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 ViewSolutions/ViewSolutions/StackText.qml create mode 100644 ViewSolutions/src/stacktextmodel.cpp create mode 100644 ViewSolutions/src/stacktextmodel.h diff --git a/ViewSolutions/ViewSolutions/StackText.qml b/ViewSolutions/ViewSolutions/StackText.qml new file mode 100644 index 0000000..339551b --- /dev/null +++ b/ViewSolutions/ViewSolutions/StackText.qml @@ -0,0 +1,80 @@ +//# +//# Copyright (C) 2025-2025 QuasarApp. +//# Distributed under the GPLv3 software license, see the accompanying +//# Everyone is permitted to copy and distribute verbatim copies +//# of this license document, but changing it is not allowed. +//# + +pragma ComponentBehavior: Bound + +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import ViewSolutions +import QtQuick.Effects + +Control { + id: root + padding: 24 + + required property var guiTokens + property alias text: model.fullText; + property alias delimiter: model.delimiter + property alias delegate: contentList.delegate + + + contentItem: ColumnLayout { + ListView { + id: contentList + + interactive: false + // snapMode: ListView.SnapOneItem + boundsBehavior:Flickable.StopAtBounds + Layout.fillWidth: true + Layout.fillHeight: true + + model: StackTextModel { + id: model; + } + + + } + + ToolButton { + Layout.alignment: Qt.AlignHCenter + + + id: nextButton + text: qsTr("Next") + visible: contentList.count > 1 && contentList.currentIndex < contentList.count - 1 + opacity: visible + + Behavior on opacity { + NumberAnimation { + easing.type: Easing.InOutQuad + duration: 300 + } + } + + font: root.font + + onClicked: { + if (contentList.currentIndex + 1 >= contentList.count) { + contentList.currentIndex = 0; + return; + } + contentList.currentIndex = contentList.currentIndex + 1; + } + + layer.enabled: true + layer.effect: MultiEffect { + shadowBlur: 1.0 + shadowEnabled: true + shadowColor: root.guiTokens.color_accent_primary + shadowScale: 1.0 + } + + } + } + +} diff --git a/ViewSolutions/src/stacktextmodel.cpp b/ViewSolutions/src/stacktextmodel.cpp new file mode 100644 index 0000000..d4a10e0 --- /dev/null +++ b/ViewSolutions/src/stacktextmodel.cpp @@ -0,0 +1,47 @@ +//# +//# Copyright (C) 2025-2025 QuasarApp. +//# Distributed under the GPLv3 software license, see the accompanying +//# Everyone is permitted to copy and distribute verbatim copies +//# of this license document, but changing it is not allowed. +//# + +#include "stacktextmodel.h" + +StackTextModel::StackTextModel() {} + +QString StackTextModel::fullText() const { + return _fullText; +} + +void StackTextModel::setFullText(const QString &newFullText) { + if (_fullText == newFullText) + return; + _fullText = newFullText; + updateText(); + emit fullTextChanged(); +} + +QString StackTextModel::delimiter() const { + return _delimiter; +} + +void StackTextModel::setDelimiter(const QString &newDelimiter) { + if (_delimiter == newDelimiter) + return; + _delimiter = newDelimiter; + updateText(); + emit delimiterChanged(); +} + +void StackTextModel::updateText() { + QStringList lines = _fullText.split(_delimiter, Qt::SkipEmptyParts); + setStringList(lines); +} + + + +QHash StackTextModel::roleNames() const { + QHash roles; + roles[Qt::DisplayRole] = "display"; + return roles; +} diff --git a/ViewSolutions/src/stacktextmodel.h b/ViewSolutions/src/stacktextmodel.h new file mode 100644 index 0000000..a31eeef --- /dev/null +++ b/ViewSolutions/src/stacktextmodel.h @@ -0,0 +1,72 @@ +//# +//# Copyright (C) 2025-2025 QuasarApp. +//# Distributed under the GPLv3 software license, see the accompanying +//# Everyone is permitted to copy and distribute verbatim copies +//# of this license document, but changing it is not allowed. +//# + + +#ifndef STACKTEXTMODEL_H +#define STACKTEXTMODEL_H + +#include +#include "viewsolutions_global.h" + +/** + * @brief The StackTextModel class is model that contains stack text lines. + * This model split full text into lines by delimiter. + */ +class VIEWSOLUTION_EXPORT StackTextModel: public QStringListModel +{ + Q_OBJECT + + Q_PROPERTY(QString fullText READ fullText WRITE setFullText NOTIFY fullTextChanged FINAL) + Q_PROPERTY(QString delimiter READ delimiter WRITE setDelimiter NOTIFY delimiterChanged FINAL) + +public: + StackTextModel(); + + // QAbstractItemModel interface + + /** + * @brief fullText returns full text from all lines. + * @return full text from all lines. + */ + QString fullText() const; + void setFullText(const QString &newFullText); + + /** + * @brief delimiter returns delimiter that used to split fullText into lines. + * @return delimiter that used to split fullText into lines. + * @default is "\n" + */ + QString delimiter() const; + + /** + * @brief setDelimiter sets new delimiter for split fullText into lines. + * @param newDelimiter new delimiter for split fullText into lines. + */ + void setDelimiter(const QString &newDelimiter); + QHash roleNames() const override; + +protected: + + /** + * @brief updateText updates internal model data from fullText and delimiter. + */ + virtual void updateText(); + +signals: + void fullTextChanged(); + void delimiterChanged(); + +private: + + QString _fullText; + QString _delimiter = "\n"; + + // QAbstractItemModel interface +public: +}; + +#endif // STACKTEXTMODEL_H diff --git a/ViewSolutions/src/viewsolutions.cpp b/ViewSolutions/src/viewsolutions.cpp index 3eb58c8..0173615 100644 --- a/ViewSolutions/src/viewsolutions.cpp +++ b/ViewSolutions/src/viewsolutions.cpp @@ -13,6 +13,7 @@ #include #include #include +#include namespace ViewSolutions { QSharedPointer init(QQmlEngine *engine) { @@ -37,7 +38,9 @@ QSharedPointer init(QQmlEngine *engine) { // to-do - remove root->setContextProperty("colorPicker", picker.get()); - qRegisterMetaType("VariantListModel"); + qmlRegisterType("ViewSolutions", 1, 0, "VariantListModel"); + qmlRegisterType("ViewSolutions", 1, 0, "StackTextModel"); + return storage; } From 5519ddbf07c9cd19379417e350594e9b9d11c9cd Mon Sep 17 00:00:00 2001 From: EndrII Date: Thu, 27 Nov 2025 15:50:45 +0100 Subject: [PATCH 10/29] added readonly properrty to stak text --- ViewSolutions/ViewSolutions/StackText.qml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ViewSolutions/ViewSolutions/StackText.qml b/ViewSolutions/ViewSolutions/StackText.qml index 339551b..91badd1 100644 --- a/ViewSolutions/ViewSolutions/StackText.qml +++ b/ViewSolutions/ViewSolutions/StackText.qml @@ -21,7 +21,7 @@ Control { property alias text: model.fullText; property alias delimiter: model.delimiter property alias delegate: contentList.delegate - + readonly property bool isFinished: contentList.currentIndex >= contentList.count - 1 contentItem: ColumnLayout { ListView { @@ -36,8 +36,6 @@ Control { model: StackTextModel { id: model; } - - } ToolButton { From 65597d80011154cdf1aa081ff019644d49276f0b Mon Sep 17 00:00:00 2001 From: EndrII Date: Tue, 2 Dec 2025 16:33:54 +0100 Subject: [PATCH 11/29] fix start status of TextStack --- ViewSolutions/ViewSolutions/StackText.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ViewSolutions/ViewSolutions/StackText.qml b/ViewSolutions/ViewSolutions/StackText.qml index 91badd1..755fbd0 100644 --- a/ViewSolutions/ViewSolutions/StackText.qml +++ b/ViewSolutions/ViewSolutions/StackText.qml @@ -26,7 +26,7 @@ Control { contentItem: ColumnLayout { ListView { id: contentList - + currentIndex: 0 interactive: false // snapMode: ListView.SnapOneItem boundsBehavior:Flickable.StopAtBounds From 9b7578264d9c89fb93f7193eb49b8c599adab82b Mon Sep 17 00:00:00 2001 From: EndrII Date: Sun, 7 Dec 2025 11:34:49 +0100 Subject: [PATCH 12/29] fix text stack view --- ViewSolutions/ViewSolutions/StackText.qml | 4 +++ ViewSolutions/src/stacktextmodel.cpp | 31 ++++++++++++++++++----- ViewSolutions/src/stacktextmodel.h | 3 ++- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/ViewSolutions/ViewSolutions/StackText.qml b/ViewSolutions/ViewSolutions/StackText.qml index 755fbd0..b42de71 100644 --- a/ViewSolutions/ViewSolutions/StackText.qml +++ b/ViewSolutions/ViewSolutions/StackText.qml @@ -35,6 +35,10 @@ Control { model: StackTextModel { id: model; + + onFullTextChanged: { + contentList.currentIndex = 0; + } } } diff --git a/ViewSolutions/src/stacktextmodel.cpp b/ViewSolutions/src/stacktextmodel.cpp index d4a10e0..65e2cd5 100644 --- a/ViewSolutions/src/stacktextmodel.cpp +++ b/ViewSolutions/src/stacktextmodel.cpp @@ -22,23 +22,42 @@ void StackTextModel::setFullText(const QString &newFullText) { } QString StackTextModel::delimiter() const { - return _delimiter; + return _delimiter.pattern(); } void StackTextModel::setDelimiter(const QString &newDelimiter) { - if (_delimiter == newDelimiter) + if (_delimiter.pattern() == newDelimiter) return; - _delimiter = newDelimiter; + _delimiter.setPattern(newDelimiter); updateText(); emit delimiterChanged(); } void StackTextModel::updateText() { - QStringList lines = _fullText.split(_delimiter, Qt::SkipEmptyParts); - setStringList(lines); -} + QStringList lines; + QString line; + + int delimeterIdx = _fullText.indexOf(_delimiter); + int lastIdx = -1; + while (delimeterIdx >= 0) { + line = _fullText.mid(lastIdx + 1, delimeterIdx - lastIdx); + lastIdx = delimeterIdx; + delimeterIdx = _fullText.indexOf(_delimiter, lastIdx + 1); + + if (line.size()) { + lines += line; + } + } + // take last string. + line = _fullText.mid(lastIdx + 1, delimeterIdx); + if (line.size()) { + lines += line; + } + + setStringList(lines); +} QHash StackTextModel::roleNames() const { QHash roles; diff --git a/ViewSolutions/src/stacktextmodel.h b/ViewSolutions/src/stacktextmodel.h index a31eeef..ffca14d 100644 --- a/ViewSolutions/src/stacktextmodel.h +++ b/ViewSolutions/src/stacktextmodel.h @@ -10,6 +10,7 @@ #define STACKTEXTMODEL_H #include +#include #include "viewsolutions_global.h" /** @@ -63,7 +64,7 @@ class VIEWSOLUTION_EXPORT StackTextModel: public QStringListModel private: QString _fullText; - QString _delimiter = "\n"; + QRegularExpression _delimiter = QRegularExpression("([.?!;]+)"); // QAbstractItemModel interface public: From 47be920ee14f3a8c3622f2a6a2667738de48dd96 Mon Sep 17 00:00:00 2001 From: EndrII Date: Thu, 11 Dec 2025 14:13:03 +0100 Subject: [PATCH 13/29] next function added into stackText --- ViewSolutions/ViewSolutions/StackText.qml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ViewSolutions/ViewSolutions/StackText.qml b/ViewSolutions/ViewSolutions/StackText.qml index b42de71..e75fabb 100644 --- a/ViewSolutions/ViewSolutions/StackText.qml +++ b/ViewSolutions/ViewSolutions/StackText.qml @@ -23,6 +23,12 @@ Control { property alias delegate: contentList.delegate readonly property bool isFinished: contentList.currentIndex >= contentList.count - 1 + function next() { + if (nextButton.visible) { + nextButton.click() + } + } + contentItem: ColumnLayout { ListView { id: contentList From 07558daa6a2d7c55cd6cca6dff1d9cb775b08a51 Mon Sep 17 00:00:00 2001 From: EndrII Date: Sun, 14 Dec 2025 23:12:54 +0100 Subject: [PATCH 14/29] added timeout of notifications --- ViewSolutions/src/notificationservice.cpp | 28 +++++++++++++++++++++-- ViewSolutions/src/notificationservice.h | 19 ++++++++++++++- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/ViewSolutions/src/notificationservice.cpp b/ViewSolutions/src/notificationservice.cpp index 0c136ea..fb19932 100644 --- a/ViewSolutions/src/notificationservice.cpp +++ b/ViewSolutions/src/notificationservice.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2024 QuasarApp. + * Copyright (C) 2018-2025 QuasarApp. * Distributed under the GPLv3 software license, see the accompanying * Everyone is permitted to copy and distribute verbatim copies * of this license document, but changing it is not allowed. @@ -118,7 +118,7 @@ void NotificationService::showHistory() { } void NotificationService::notificationHiden() { - _notify = NotificationData{}; + setUiIsDisplay(false); } int NotificationService::notificationsCount() const { @@ -129,5 +129,29 @@ QString ViewSolutions::NotificationService::modelId() const { return "NotificationService"; } +bool NotificationService::uiIsDisplay() const { + return _uiIsDisplay && time(0) - _lastDisplayTime < _uiTimeOut; +} + +void NotificationService::setUiIsDisplay(bool newUiIsDisplay) { + if (_uiIsDisplay == newUiIsDisplay) + return; + + if (_uiIsDisplay) { + _lastDisplayTime = time(0); + } + + _uiIsDisplay = newUiIsDisplay; + emit uiIsDisplayChanged(); +} + +int NotificationService::uiTimeOut() const { + return _uiTimeOut; +} + +void NotificationService::setUiTimeOut(int newUiTimeOut) { + _uiTimeOut = newUiTimeOut; +} + } diff --git a/ViewSolutions/src/notificationservice.h b/ViewSolutions/src/notificationservice.h index 722d3d8..d9cf892 100644 --- a/ViewSolutions/src/notificationservice.h +++ b/ViewSolutions/src/notificationservice.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2024 QuasarApp. + * Copyright (C) 2018-2025 QuasarApp. * Distributed under the GPLv3 software license, see the accompanying * Everyone is permitted to copy and distribute verbatim copies * of this license document, but changing it is not allowed. @@ -32,6 +32,7 @@ class VIEWSOLUTION_EXPORT NotificationService: public QObject, public iModel Q_PROPERTY(NotificationData notify READ notify NOTIFY notifyChanged) Q_PROPERTY(NotificationData question READ question NOTIFY questionChanged) + Q_PROPERTY(bool uiIsDisplay READ uiIsDisplay WRITE setUiIsDisplay NOTIFY uiIsDisplayChanged FINAL) Q_PROPERTY(QObject* history READ history NOTIFY notifyChanged) @@ -150,6 +151,16 @@ class VIEWSOLUTION_EXPORT NotificationService: public QObject, public iModel public: QString modelId() const override; + bool uiIsDisplay() const; + void setUiIsDisplay(bool newUiIsDisplay); + + /** + * @brief uiTimeOut this is maximu time that notify service can be loked fo display. + * @return + */ + int uiTimeOut() const; + void setUiTimeOut(int newUiTimeOut); + signals: /** * @brief notifyChanged This signal emited whet the notificator (Ths object) received a new notification message. @@ -175,6 +186,8 @@ class VIEWSOLUTION_EXPORT NotificationService: public QObject, public iModel void countNotificationsChanged(); + void uiIsDisplayChanged(); + private: @@ -182,6 +195,10 @@ class VIEWSOLUTION_EXPORT NotificationService: public QObject, public iModel QHash _listners; NotificationData _question; NotificationData _notify; + bool _uiIsDisplay = false; + int _uiTimeOut = 60; + int _lastDisplayTime = 0; + HistoryNotificationsModel* _history = nullptr; From 8b46a9c16769aa3d6ff141cf3007b29672b20903 Mon Sep 17 00:00:00 2001 From: EndrII Date: Mon, 22 Dec 2025 14:26:27 +0100 Subject: [PATCH 15/29] remove . from delimeters of StackTextModel --- ViewSolutions/src/stacktextmodel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ViewSolutions/src/stacktextmodel.h b/ViewSolutions/src/stacktextmodel.h index ffca14d..2055471 100644 --- a/ViewSolutions/src/stacktextmodel.h +++ b/ViewSolutions/src/stacktextmodel.h @@ -64,7 +64,7 @@ class VIEWSOLUTION_EXPORT StackTextModel: public QStringListModel private: QString _fullText; - QRegularExpression _delimiter = QRegularExpression("([.?!;]+)"); + QRegularExpression _delimiter = QRegularExpression("([?!;]+)"); // QAbstractItemModel interface public: From 3ed10753dee30f76d5138df50fb773e6179ef592 Mon Sep 17 00:00:00 2001 From: EndrII Date: Mon, 22 Dec 2025 15:54:41 +0100 Subject: [PATCH 16/29] Revert "remove . from delimeters of StackTextModel" This reverts commit 8b46a9c16769aa3d6ff141cf3007b29672b20903. --- ViewSolutions/src/stacktextmodel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ViewSolutions/src/stacktextmodel.h b/ViewSolutions/src/stacktextmodel.h index 2055471..ffca14d 100644 --- a/ViewSolutions/src/stacktextmodel.h +++ b/ViewSolutions/src/stacktextmodel.h @@ -64,7 +64,7 @@ class VIEWSOLUTION_EXPORT StackTextModel: public QStringListModel private: QString _fullText; - QRegularExpression _delimiter = QRegularExpression("([?!;]+)"); + QRegularExpression _delimiter = QRegularExpression("([.?!;]+)"); // QAbstractItemModel interface public: From 57751d04b1a68da20cb24ff8fea4719cee76965e Mon Sep 17 00:00:00 2001 From: Andrei Yankovich Date: Thu, 1 Jan 2026 15:24:15 +0100 Subject: [PATCH 17/29] upate copyright (#13) --- CMakeLists.txt | 2 +- ViewSolutions/CMakeLists.txt | 2 +- ViewSolutions/ViewSolutions/ActivityPage.qml | 2 +- ViewSolutions/ViewSolutions/ActivityProcessor.qml | 2 +- ViewSolutions/ViewSolutions/ActivityProcessorHeader.qml | 2 +- ViewSolutions/ViewSolutions/BasePopUp.qml | 2 +- ViewSolutions/ViewSolutions/DragDelegate.qml | 2 +- ViewSolutions/ViewSolutions/Extendable.qml | 2 +- ViewSolutions/ViewSolutions/FlickablePane.qml | 2 +- ViewSolutions/ViewSolutions/IconOverlay.qml | 2 +- ViewSolutions/ViewSolutions/ImageView.qml | 2 +- ViewSolutions/ViewSolutions/NotificationForm.qml | 2 +- ViewSolutions/ViewSolutions/NotificationServiceView.qml | 2 +- ViewSolutions/ViewSolutions/SlideShow.qml | 2 +- ViewSolutions/ViewSolutions/StackText.qml | 2 +- ViewSolutions/ViewSolutions/ViewPortDelegatBase.qml | 2 +- ViewSolutions/ViewSolutions/ViewPortGradientPage.qml | 2 +- ViewSolutions/ViewSolutions/ViewPortPage.qml | 2 +- ViewSolutions/ViewSolutions/ViewPortStaticGradientPage.qml | 2 +- ViewSolutions/ViewSolutions/ViewPortStaticPage.qml | 2 +- ViewSolutions/ViewSolutions/ViewSolutionsControl.qml | 2 +- ViewSolutions/ViewSolutions/YesNoQuestion.qml | 2 +- ViewSolutions/src/avatargenerator.cpp | 2 +- ViewSolutions/src/avatargenerator.h | 2 +- ViewSolutions/src/basehashmodel.h | 2 +- ViewSolutions/src/baselistmodel.h | 2 +- ViewSolutions/src/colorpicker.cpp | 2 +- ViewSolutions/src/colorpicker.h | 2 +- ViewSolutions/src/historynotificationsmodel.cpp | 2 +- ViewSolutions/src/historynotificationsmodel.h | 2 +- ViewSolutions/src/iguitokensmodel.cpp | 2 +- ViewSolutions/src/iguitokensmodel.h | 2 +- ViewSolutions/src/imodel.cpp | 2 +- ViewSolutions/src/imodel.h | 2 +- ViewSolutions/src/listviewmodel.cpp | 2 +- ViewSolutions/src/listviewmodel.h | 2 +- ViewSolutions/src/modelstorage.cpp | 2 +- ViewSolutions/src/modelstorage.h | 2 +- ViewSolutions/src/notificationdata.cpp | 2 +- ViewSolutions/src/notificationdata.h | 2 +- ViewSolutions/src/notificationservice.cpp | 2 +- ViewSolutions/src/notificationservice.h | 2 +- ViewSolutions/src/qmlcolorpicker.cpp | 2 +- ViewSolutions/src/qmlcolorpicker.h | 2 +- ViewSolutions/src/stacktextmodel.cpp | 2 +- ViewSolutions/src/stacktextmodel.h | 2 +- ViewSolutions/src/viewsolutions.cpp | 2 +- ViewSolutions/src/viewsolutions.h | 2 +- 48 files changed, 48 insertions(+), 48 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 211efa7..633461e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2018-2025 QuasarApp. +# Copyright (C) 2018-2026 QuasarApp. # Distributed under the lgplv3 software license, see the accompanying # Everyone is permitted to copy and distribute verbatim copies # of this license document, but changing it is not allowed. diff --git a/ViewSolutions/CMakeLists.txt b/ViewSolutions/CMakeLists.txt index 6b52190..4574ae8 100644 --- a/ViewSolutions/CMakeLists.txt +++ b/ViewSolutions/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2018-2025 QuasarApp. +# Copyright (C) 2018-2026 QuasarApp. # Distributed under the lgplv3 software license, see the accompanying # Everyone is permitted to copy and distribute verbatim copies # of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/ActivityPage.qml b/ViewSolutions/ViewSolutions/ActivityPage.qml index 225b465..d122f30 100644 --- a/ViewSolutions/ViewSolutions/ActivityPage.qml +++ b/ViewSolutions/ViewSolutions/ActivityPage.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/ActivityProcessor.qml b/ViewSolutions/ViewSolutions/ActivityProcessor.qml index 8630fa6..8ce5c18 100644 --- a/ViewSolutions/ViewSolutions/ActivityProcessor.qml +++ b/ViewSolutions/ViewSolutions/ActivityProcessor.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/ActivityProcessorHeader.qml b/ViewSolutions/ViewSolutions/ActivityProcessorHeader.qml index c7b3aca..a32be45 100644 --- a/ViewSolutions/ViewSolutions/ActivityProcessorHeader.qml +++ b/ViewSolutions/ViewSolutions/ActivityProcessorHeader.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/BasePopUp.qml b/ViewSolutions/ViewSolutions/BasePopUp.qml index 8e4c950..be8dc16 100644 --- a/ViewSolutions/ViewSolutions/BasePopUp.qml +++ b/ViewSolutions/ViewSolutions/BasePopUp.qml @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2024 QuasarApp. + * Copyright (C) 2018-2026 QuasarApp. * Distributed under the GPLv3 software license, see the accompanying * Everyone is permitted to copy and distribute verbatim copies * of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/DragDelegate.qml b/ViewSolutions/ViewSolutions/DragDelegate.qml index 062b14d..c6fa6f0 100644 --- a/ViewSolutions/ViewSolutions/DragDelegate.qml +++ b/ViewSolutions/ViewSolutions/DragDelegate.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2025-2025 QuasarApp. +//# Copyright (C) 2025-2026 QuasarApp. //# Distributed under the lgplv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/Extendable.qml b/ViewSolutions/ViewSolutions/Extendable.qml index d6c90d4..342358c 100644 --- a/ViewSolutions/ViewSolutions/Extendable.qml +++ b/ViewSolutions/ViewSolutions/Extendable.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2025-2025 QuasarApp. +//# Copyright (C) 2025-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/FlickablePane.qml b/ViewSolutions/ViewSolutions/FlickablePane.qml index e465ab4..89a13e8 100644 --- a/ViewSolutions/ViewSolutions/FlickablePane.qml +++ b/ViewSolutions/ViewSolutions/FlickablePane.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2025-2025 QuasarApp. +//# Copyright (C) 2025-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/IconOverlay.qml b/ViewSolutions/ViewSolutions/IconOverlay.qml index 75f8a2c..989d766 100644 --- a/ViewSolutions/ViewSolutions/IconOverlay.qml +++ b/ViewSolutions/ViewSolutions/IconOverlay.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2025-2025 QuasarApp. +//# Copyright (C) 2025-2026 QuasarApp. //# Distributed under the lgplv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/ImageView.qml b/ViewSolutions/ViewSolutions/ImageView.qml index 6b99a23..64f96a9 100644 --- a/ViewSolutions/ViewSolutions/ImageView.qml +++ b/ViewSolutions/ViewSolutions/ImageView.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/NotificationForm.qml b/ViewSolutions/ViewSolutions/NotificationForm.qml index 26f60b9..e132579 100644 --- a/ViewSolutions/ViewSolutions/NotificationForm.qml +++ b/ViewSolutions/ViewSolutions/NotificationForm.qml @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2024 QuasarApp. + * Copyright (C) 2018-2026 QuasarApp. * Distributed under the GPLv3 software license, see the accompanying * Everyone is permitted to copy and distribute verbatim copies * of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/NotificationServiceView.qml b/ViewSolutions/ViewSolutions/NotificationServiceView.qml index b0f9885..2aac1f0 100644 --- a/ViewSolutions/ViewSolutions/NotificationServiceView.qml +++ b/ViewSolutions/ViewSolutions/NotificationServiceView.qml @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2024 QuasarApp. + * Copyright (C) 2018-2026 QuasarApp. * Distributed under the GPLv3 software license, see the accompanying * Everyone is permitted to copy and distribute verbatim copies * of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/SlideShow.qml b/ViewSolutions/ViewSolutions/SlideShow.qml index 2ced886..ebd1dd2 100644 --- a/ViewSolutions/ViewSolutions/SlideShow.qml +++ b/ViewSolutions/ViewSolutions/SlideShow.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2025-2025 QuasarApp. +//# Copyright (C) 2025-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/StackText.qml b/ViewSolutions/ViewSolutions/StackText.qml index e75fabb..ce300f8 100644 --- a/ViewSolutions/ViewSolutions/StackText.qml +++ b/ViewSolutions/ViewSolutions/StackText.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2025-2025 QuasarApp. +//# Copyright (C) 2025-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/ViewPortDelegatBase.qml b/ViewSolutions/ViewSolutions/ViewPortDelegatBase.qml index 50a9ddf..94a2482 100644 --- a/ViewSolutions/ViewSolutions/ViewPortDelegatBase.qml +++ b/ViewSolutions/ViewSolutions/ViewPortDelegatBase.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/ViewPortGradientPage.qml b/ViewSolutions/ViewSolutions/ViewPortGradientPage.qml index 7e11a0b..bcad04b 100644 --- a/ViewSolutions/ViewSolutions/ViewPortGradientPage.qml +++ b/ViewSolutions/ViewSolutions/ViewPortGradientPage.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/ViewPortPage.qml b/ViewSolutions/ViewSolutions/ViewPortPage.qml index ed33051..0fb27e2 100644 --- a/ViewSolutions/ViewSolutions/ViewPortPage.qml +++ b/ViewSolutions/ViewSolutions/ViewPortPage.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/ViewPortStaticGradientPage.qml b/ViewSolutions/ViewSolutions/ViewPortStaticGradientPage.qml index 9856f04..cd321e4 100644 --- a/ViewSolutions/ViewSolutions/ViewPortStaticGradientPage.qml +++ b/ViewSolutions/ViewSolutions/ViewPortStaticGradientPage.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/ViewPortStaticPage.qml b/ViewSolutions/ViewSolutions/ViewPortStaticPage.qml index 919e077..689a707 100644 --- a/ViewSolutions/ViewSolutions/ViewPortStaticPage.qml +++ b/ViewSolutions/ViewSolutions/ViewPortStaticPage.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/ViewSolutionsControl.qml b/ViewSolutions/ViewSolutions/ViewSolutionsControl.qml index 0cc0080..89d12ef 100644 --- a/ViewSolutions/ViewSolutions/ViewSolutionsControl.qml +++ b/ViewSolutions/ViewSolutions/ViewSolutionsControl.qml @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/ViewSolutions/YesNoQuestion.qml b/ViewSolutions/ViewSolutions/YesNoQuestion.qml index 2439bed..36fe76c 100644 --- a/ViewSolutions/ViewSolutions/YesNoQuestion.qml +++ b/ViewSolutions/ViewSolutions/YesNoQuestion.qml @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2024 QuasarApp. + * Copyright (C) 2018-2026 QuasarApp. * Distributed under the GPLv3 software license, see the accompanying * Everyone is permitted to copy and distribute verbatim copies * of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/avatargenerator.cpp b/ViewSolutions/src/avatargenerator.cpp index 21c8680..07e78ee 100644 --- a/ViewSolutions/src/avatargenerator.cpp +++ b/ViewSolutions/src/avatargenerator.cpp @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2025-2025 QuasarApp. +//# Copyright (C) 2025-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/avatargenerator.h b/ViewSolutions/src/avatargenerator.h index 846fbc7..1af6875 100644 --- a/ViewSolutions/src/avatargenerator.h +++ b/ViewSolutions/src/avatargenerator.h @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2025-2025 QuasarApp. +//# Copyright (C) 2025-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/basehashmodel.h b/ViewSolutions/src/basehashmodel.h index 432c86e..79bd6e6 100644 --- a/ViewSolutions/src/basehashmodel.h +++ b/ViewSolutions/src/basehashmodel.h @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/baselistmodel.h b/ViewSolutions/src/baselistmodel.h index 9ea68af..b16b519 100644 --- a/ViewSolutions/src/baselistmodel.h +++ b/ViewSolutions/src/baselistmodel.h @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/colorpicker.cpp b/ViewSolutions/src/colorpicker.cpp index cf61f75..65d4083 100644 --- a/ViewSolutions/src/colorpicker.cpp +++ b/ViewSolutions/src/colorpicker.cpp @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/colorpicker.h b/ViewSolutions/src/colorpicker.h index cc05f2e..b20dc06 100644 --- a/ViewSolutions/src/colorpicker.h +++ b/ViewSolutions/src/colorpicker.h @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/historynotificationsmodel.cpp b/ViewSolutions/src/historynotificationsmodel.cpp index 4718007..fee5bcf 100644 --- a/ViewSolutions/src/historynotificationsmodel.cpp +++ b/ViewSolutions/src/historynotificationsmodel.cpp @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/historynotificationsmodel.h b/ViewSolutions/src/historynotificationsmodel.h index 12315a8..471458b 100644 --- a/ViewSolutions/src/historynotificationsmodel.h +++ b/ViewSolutions/src/historynotificationsmodel.h @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/iguitokensmodel.cpp b/ViewSolutions/src/iguitokensmodel.cpp index 2f8cbd6..eed19d4 100644 --- a/ViewSolutions/src/iguitokensmodel.cpp +++ b/ViewSolutions/src/iguitokensmodel.cpp @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2024-2025 QuasarApp. +//# Copyright (C) 2024-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/iguitokensmodel.h b/ViewSolutions/src/iguitokensmodel.h index d7da1b5..b8cc061 100644 --- a/ViewSolutions/src/iguitokensmodel.h +++ b/ViewSolutions/src/iguitokensmodel.h @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2024-2025 QuasarApp. +//# Copyright (C) 2024-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/imodel.cpp b/ViewSolutions/src/imodel.cpp index da45be7..3c506b2 100644 --- a/ViewSolutions/src/imodel.cpp +++ b/ViewSolutions/src/imodel.cpp @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/imodel.h b/ViewSolutions/src/imodel.h index 92b1a7c..c4710c9 100644 --- a/ViewSolutions/src/imodel.h +++ b/ViewSolutions/src/imodel.h @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/listviewmodel.cpp b/ViewSolutions/src/listviewmodel.cpp index e4cfbf5..26c3195 100644 --- a/ViewSolutions/src/listviewmodel.cpp +++ b/ViewSolutions/src/listviewmodel.cpp @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/listviewmodel.h b/ViewSolutions/src/listviewmodel.h index e5653b6..6e88bdd 100644 --- a/ViewSolutions/src/listviewmodel.h +++ b/ViewSolutions/src/listviewmodel.h @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/modelstorage.cpp b/ViewSolutions/src/modelstorage.cpp index 8f3e95a..6059790 100644 --- a/ViewSolutions/src/modelstorage.cpp +++ b/ViewSolutions/src/modelstorage.cpp @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/modelstorage.h b/ViewSolutions/src/modelstorage.h index 305a27d..4197fa7 100644 --- a/ViewSolutions/src/modelstorage.h +++ b/ViewSolutions/src/modelstorage.h @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/notificationdata.cpp b/ViewSolutions/src/notificationdata.cpp index 68443c6..9d2f53e 100644 --- a/ViewSolutions/src/notificationdata.cpp +++ b/ViewSolutions/src/notificationdata.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2025 QuasarApp. + * Copyright (C) 2018-2026 QuasarApp. * Distributed under the GPLv3 software license, see the accompanying * Everyone is permitted to copy and distribute verbatim copies * of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/notificationdata.h b/ViewSolutions/src/notificationdata.h index 3fa5070..3ddfa5d 100644 --- a/ViewSolutions/src/notificationdata.h +++ b/ViewSolutions/src/notificationdata.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2024 QuasarApp. + * Copyright (C) 2018-2026 QuasarApp. * Distributed under the GPLv3 software license, see the accompanying * Everyone is permitted to copy and distribute verbatim copies * of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/notificationservice.cpp b/ViewSolutions/src/notificationservice.cpp index fb19932..245c3a3 100644 --- a/ViewSolutions/src/notificationservice.cpp +++ b/ViewSolutions/src/notificationservice.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2025 QuasarApp. + * Copyright (C) 2018-2026 QuasarApp. * Distributed under the GPLv3 software license, see the accompanying * Everyone is permitted to copy and distribute verbatim copies * of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/notificationservice.h b/ViewSolutions/src/notificationservice.h index d9cf892..c1beeeb 100644 --- a/ViewSolutions/src/notificationservice.h +++ b/ViewSolutions/src/notificationservice.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2025 QuasarApp. + * Copyright (C) 2018-2026 QuasarApp. * Distributed under the GPLv3 software license, see the accompanying * Everyone is permitted to copy and distribute verbatim copies * of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/qmlcolorpicker.cpp b/ViewSolutions/src/qmlcolorpicker.cpp index 06bbe5b..7351488 100644 --- a/ViewSolutions/src/qmlcolorpicker.cpp +++ b/ViewSolutions/src/qmlcolorpicker.cpp @@ -1,6 +1,6 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/qmlcolorpicker.h b/ViewSolutions/src/qmlcolorpicker.h index 3cf8c4d..2ef014b 100644 --- a/ViewSolutions/src/qmlcolorpicker.h +++ b/ViewSolutions/src/qmlcolorpicker.h @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/stacktextmodel.cpp b/ViewSolutions/src/stacktextmodel.cpp index 65e2cd5..27a258d 100644 --- a/ViewSolutions/src/stacktextmodel.cpp +++ b/ViewSolutions/src/stacktextmodel.cpp @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2025-2025 QuasarApp. +//# Copyright (C) 2025-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/stacktextmodel.h b/ViewSolutions/src/stacktextmodel.h index ffca14d..9f8c403 100644 --- a/ViewSolutions/src/stacktextmodel.h +++ b/ViewSolutions/src/stacktextmodel.h @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2025-2025 QuasarApp. +//# Copyright (C) 2025-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/viewsolutions.cpp b/ViewSolutions/src/viewsolutions.cpp index 0173615..6991d08 100644 --- a/ViewSolutions/src/viewsolutions.cpp +++ b/ViewSolutions/src/viewsolutions.cpp @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. diff --git a/ViewSolutions/src/viewsolutions.h b/ViewSolutions/src/viewsolutions.h index acb0f65..dde5500 100644 --- a/ViewSolutions/src/viewsolutions.h +++ b/ViewSolutions/src/viewsolutions.h @@ -1,5 +1,5 @@ //# -//# Copyright (C) 2020-2025 QuasarApp. +//# Copyright (C) 2020-2026 QuasarApp. //# Distributed under the GPLv3 software license, see the accompanying //# Everyone is permitted to copy and distribute verbatim copies //# of this license document, but changing it is not allowed. From a0f27b656a968c1b8366270dd132f1c2bb092f9c Mon Sep 17 00:00:00 2001 From: EndrII Date: Fri, 2 Jan 2026 20:06:51 +0100 Subject: [PATCH 18/29] update cmake --- CMake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMake b/CMake index 1f7811c..ca5cd26 160000 --- a/CMake +++ b/CMake @@ -1 +1 @@ -Subproject commit 1f7811cfb9bf9fa8de4fcbd26f356cf5df07ef36 +Subproject commit ca5cd26e5b765d8fb2a0f5bddec72dcc247ce036 From b67823316b6ddb4fd21dddc20667349c526f63a3 Mon Sep 17 00:00:00 2001 From: EndrII Date: Thu, 8 Jan 2026 22:31:14 +0100 Subject: [PATCH 19/29] fix imageview (remove mipmap) --- ViewSolutions/ViewSolutions/ImageView.qml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ViewSolutions/ViewSolutions/ImageView.qml b/ViewSolutions/ViewSolutions/ImageView.qml index 64f96a9..00da57b 100644 --- a/ViewSolutions/ViewSolutions/ImageView.qml +++ b/ViewSolutions/ViewSolutions/ImageView.qml @@ -29,6 +29,8 @@ AbstractButton { property color selectedColor: Material.accent property color hoverColor: Material.accent property alias contentData: content.contentItem + property alias contentPadding: content.padding + Connections { target: sourceImg @@ -122,7 +124,8 @@ AbstractButton { source: Image { id: sourceImg source: root.source - mipmap: true + mipmap: false + sourceSize: Qt.size(imgEffect.width, imgEffect.height) clip: true fillMode: Image.PreserveAspectCrop From b26e10e3fdfc17b904d2f26d056bf861961a2bd1 Mon Sep 17 00:00:00 2001 From: EndrII Date: Wed, 14 Jan 2026 22:33:53 +0100 Subject: [PATCH 20/29] disable mouse area if it is not needed --- ViewSolutions/ViewSolutions/ImageView.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ViewSolutions/ViewSolutions/ImageView.qml b/ViewSolutions/ViewSolutions/ImageView.qml index 00da57b..f16b046 100644 --- a/ViewSolutions/ViewSolutions/ImageView.qml +++ b/ViewSolutions/ViewSolutions/ImageView.qml @@ -202,7 +202,8 @@ AbstractButton { MouseArea { acceptedButtons: Qt.NoButton - hoverEnabled: true; + hoverEnabled: root.power > 0; + enabled: root.power > 0; onExited: { privateData.ry = 0 From 72fac5097c95d58d628e83a4fd894b525f48bced Mon Sep 17 00:00:00 2001 From: EndrII Date: Sat, 17 Jan 2026 18:24:53 +0100 Subject: [PATCH 21/29] added alpha option for collor picker --- ViewSolutions/src/colorpicker.cpp | 41 +++++++++++++++++++++------- ViewSolutions/src/colorpicker.h | 4 +-- ViewSolutions/src/qmlcolorpicker.cpp | 23 ++++++++++++---- ViewSolutions/src/qmlcolorpicker.h | 21 ++++++++++++++ ViewSolutions/src/viewsolutions.cpp | 1 + 5 files changed, 73 insertions(+), 17 deletions(-) diff --git a/ViewSolutions/src/colorpicker.cpp b/ViewSolutions/src/colorpicker.cpp index 65d4083..b099d0b 100644 --- a/ViewSolutions/src/colorpicker.cpp +++ b/ViewSolutions/src/colorpicker.cpp @@ -20,7 +20,7 @@ QColor ColorPicker::pick(int x, int y, const QImage &img) const { return img.pixelColor(x, y); } -QColor ColorPicker::pick(const QImage &img, int density) const { +QColor ColorPicker::pick(const QImage &img, int density, bool alpha) const { int stepX = img.width() / density; int stepY = img.height() / density; @@ -33,33 +33,54 @@ QColor ColorPicker::pick(const QImage &img, int density) const { G = 0, B = 0; + int count = 0; + for (int x = stepX - 1; x < img.width(); x += stepX) { for (int y = stepY - 1; y < img.height(); y += stepY) { int pixel = img.pixel(x, y); - A += (pixel & 0xFF000000) >> 24; - R += (pixel & 0x00FF0000) >> 16; - G += (pixel & 0x0000FF00) >> 8; - B += pixel & 0x000000FF; + int Atmp = (pixel & 0xFF000000) >> 24; + + if (Atmp > 0) { + A += Atmp; + + R += (pixel & 0x00FF0000) >> 16; + G += (pixel & 0x0000FF00) >> 8; + B += pixel & 0x000000FF; + + count++; + } + + } } - int count = density * density; + if (count <= 0) { + return QColor::fromRgb(0); + } + + if (!alpha) { + return QColor::fromRgba((255 << 24) | + ((R / count) << 16) | + ((G / count) << 8) | + B / count); + } + return QColor::fromRgba(((A / count) << 24) | ((R / count) << 16) | ((G / count) << 8) | B / count); } -QColor ColorPicker::pick(const QString &img) const { +QColor ColorPicker::pick(const QString &img, bool alpha) const { if (img.left(3).compare("qrc") == 0) { - return pick(QImage(img.right(img.size() - 3))); + return pick(QImage(img.right(img.size() - 3)), 5, alpha); } if (img.left(5).compare("file:") == 0) { - return pick(QImage(img.right(img.size() - 5))); + return pick(QImage(img.right(img.size() - 5)), 5, alpha); } - return pick(QImage(img)); + return pick(QImage(img), 5, alpha); } } diff --git a/ViewSolutions/src/colorpicker.h b/ViewSolutions/src/colorpicker.h index b20dc06..cd58f6f 100644 --- a/ViewSolutions/src/colorpicker.h +++ b/ViewSolutions/src/colorpicker.h @@ -36,14 +36,14 @@ class VIEWSOLUTION_EXPORT ColorPicker * @param density Count of checked pixels on one plane and planes count, default 5. * @return General color of image. */ - QColor pick(const QImage &img, int density = 5) const; + QColor pick(const QImage &img, int density = 5, bool alpha = true) const; /** * @brief pick This is override function for qml. * @param img Path to image. * @return General color of image. */ - QColor pick(const QString &img) const; + QColor pick(const QString &img, bool alpha = true) const; }; } diff --git a/ViewSolutions/src/qmlcolorpicker.cpp b/ViewSolutions/src/qmlcolorpicker.cpp index 7351488..03ebe11 100644 --- a/ViewSolutions/src/qmlcolorpicker.cpp +++ b/ViewSolutions/src/qmlcolorpicker.cpp @@ -40,7 +40,7 @@ QColor QMLColorPicker::pick(const QString &img) const { return {}; } - QColor responce = ColorPicker::pick(textureFacrory->image()); + QColor responce = ColorPicker::pick(textureFacrory->image(), 5, _alpha); delete textureFacrory; @@ -48,15 +48,15 @@ QColor QMLColorPicker::pick(const QString &img) const { } if (provider->imageType() == QQmlImageProviderBase::Texture) { - return ColorPicker::pick(provider->requestTexture(url, nullptr, {})->image()); + return ColorPicker::pick(provider->requestTexture(url, nullptr, {})->image(), 5, _alpha); } if (provider->imageType() == QQmlImageProviderBase::Pixmap) { - return ColorPicker::pick(provider->requestPixmap(url, nullptr, {}).toImage()); + return ColorPicker::pick(provider->requestPixmap(url, nullptr, {}).toImage(), 5, _alpha); } if (provider->imageType() == QQmlImageProviderBase::Image) { - return ColorPicker::pick(provider->requestImage(url, nullptr, {})); + return ColorPicker::pick(provider->requestImage(url, nullptr, {}), 5, _alpha); } return {}; @@ -64,11 +64,24 @@ QColor QMLColorPicker::pick(const QString &img) const { } - return ColorPicker::pick(img); + return ColorPicker::pick(img, _alpha); } QString QMLColorPicker::modelId() const { return "ColorPicker"; } +bool QMLColorPicker::alpha() const +{ + return _alpha; +} + +void QMLColorPicker::setAlpha(bool newAlpha) +{ + if (_alpha == newAlpha) + return; + _alpha = newAlpha; + emit alphaChanged(); +} + } diff --git a/ViewSolutions/src/qmlcolorpicker.h b/ViewSolutions/src/qmlcolorpicker.h index 2ef014b..e518d20 100644 --- a/ViewSolutions/src/qmlcolorpicker.h +++ b/ViewSolutions/src/qmlcolorpicker.h @@ -20,6 +20,8 @@ namespace ViewSolutions { class VIEWSOLUTION_EXPORT QMLColorPicker : public QObject, public iModel, private ColorPicker { Q_OBJECT + Q_PROPERTY(bool alpha READ alpha WRITE setAlpha NOTIFY alphaChanged FINAL) + public: explicit QMLColorPicker(QObject *parent = nullptr); @@ -37,6 +39,25 @@ class VIEWSOLUTION_EXPORT QMLColorPicker : public QObject, public iModel, privat */ QString modelId() const override; + /** + * @brief alpha the alpha swith display color picer mod to alpha mode. in this mode picker will calculate alpha channel also with RGB hannels. + * set to false to disable calculate alpha hannel. + * @return + */ + bool alpha() const; + + /** + * @brief setAlpha set new value of alpha mode. + * @param newAlpha new value + */ + void setAlpha(bool newAlpha); + +signals: + void alphaChanged(); + +private: + bool _alpha = true; + }; } diff --git a/ViewSolutions/src/viewsolutions.cpp b/ViewSolutions/src/viewsolutions.cpp index 6991d08..eec0101 100644 --- a/ViewSolutions/src/viewsolutions.cpp +++ b/ViewSolutions/src/viewsolutions.cpp @@ -33,6 +33,7 @@ QSharedPointer init(QQmlEngine *engine) { root->setContextProperty("modelsStorage", storage.get()); auto&& picker = QSharedPointer::create(); + picker->setAlpha(false); storage->addModel(picker); // to-do - remove From c0dbaab904576d5518cb32a56e4f7657301a8c36 Mon Sep 17 00:00:00 2001 From: EndrII Date: Sun, 18 Jan 2026 18:47:59 +0100 Subject: [PATCH 22/29] added shaders --- CMakeLists.txt | 2 ++ ViewSolutions/CMakeLists.txt | 15 ++++++++++++++ ViewSolutions/ViewSolutions/FadeEffect.qml | 19 ++++++++++++++++++ ViewSolutions/shaders/fade.frag | 23 ++++++++++++++++++++++ ViewSolutions/shaders/fade.vert | 14 +++++++++++++ 5 files changed, 73 insertions(+) create mode 100644 ViewSolutions/ViewSolutions/FadeEffect.qml create mode 100644 ViewSolutions/shaders/fade.frag create mode 100644 ViewSolutions/shaders/fade.vert diff --git a/CMakeLists.txt b/CMakeLists.txt index 633461e..685b368 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,8 @@ qt_standard_project_setup() qt_policy(SET QTP0001 NEW) qt_policy(SET QTP0004 NEW) + + add_subdirectory(ViewSolutions) if (VIEWSOLUTIONS_EXAMPLES ) diff --git a/ViewSolutions/CMakeLists.txt b/ViewSolutions/CMakeLists.txt index 4574ae8..390b722 100644 --- a/ViewSolutions/CMakeLists.txt +++ b/ViewSolutions/CMakeLists.txt @@ -21,6 +21,14 @@ file(GLOB SOURCE_CPP ) +file(GLOB SHADERS_CPP + RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" + + "shaders/*.frag" + "shaders/*.vert" + +) + file(GLOB_RECURSE SOURCE_ASSETS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "assets/*" @@ -34,6 +42,13 @@ file(GLOB_RECURSE MODULE_QML_FILES qt_add_library(${CURRENT_PROJECT} ${SOURCE_CPP}) +# available under qrc:/uieffects/shaders/shaderName.frag.qsb +qt6_add_shaders(${CURRENT_PROJECT} "uieffects" + PREFIX + "/uieffects" + FILES + ${SHADERS_CPP} +) qt_add_qml_module(${CURRENT_PROJECT} URI ViewSolutions diff --git a/ViewSolutions/ViewSolutions/FadeEffect.qml b/ViewSolutions/ViewSolutions/FadeEffect.qml new file mode 100644 index 0000000..369e9d4 --- /dev/null +++ b/ViewSolutions/ViewSolutions/FadeEffect.qml @@ -0,0 +1,19 @@ +//# +//# Copyright (C) 2025-2026 QuasarApp. +//# Distributed under the GPLv3 software license, see the accompanying +//# Everyone is permitted to copy and distribute verbatim copies +//# of this license document, but changing it is not allowed. +//# + + +import QtQuick + +// this effect make fade effect for left and right side of the item +// +ShaderEffect { + property point leftRightFadeStart: Qt.vector2d(0.25, 0.75); + property point leftRightFadeEnd: Qt.vector2d(0.0, 1.0); + + fragmentShader: "qrc:/uieffects/shaders/fade.frag.qsb" + vertexShader: "qrc:/uieffects/shaders/fade.vert.qsb" +} diff --git a/ViewSolutions/shaders/fade.frag b/ViewSolutions/shaders/fade.frag new file mode 100644 index 0000000..eb87adc --- /dev/null +++ b/ViewSolutions/shaders/fade.frag @@ -0,0 +1,23 @@ +#version 440 +layout(location = 0) in vec2 coord; +layout(location = 0) out vec4 fragColor; +layout(std140, binding = 0) uniform buf { + mat4 qt_Matrix; + float qt_Opacity; + + vec2 leftRightFadeStart; + vec2 leftRightFadeEnd; +}; +layout(binding = 1) uniform sampler2D src; + +void main() { + vec4 tex = texture(src, coord); + + float leftFade = smoothstep(leftRightFadeEnd.x, leftRightFadeStart.x, coord.x); + + float rightFade = smoothstep(leftRightFadeEnd.y, leftRightFadeStart.y, 1.0 - coord.x); + + float alpha = leftFade * rightFade; + + fragColor = tex * qt_Opacity * alpha; +} diff --git a/ViewSolutions/shaders/fade.vert b/ViewSolutions/shaders/fade.vert new file mode 100644 index 0000000..9e9ae3f --- /dev/null +++ b/ViewSolutions/shaders/fade.vert @@ -0,0 +1,14 @@ +#version 440 +layout(location = 0) in vec4 qt_Vertex; +layout(location = 1) in vec2 qt_MultiTexCoord0; +layout(location = 0) out vec2 coord; +layout(std140, binding = 0) uniform buf { + mat4 qt_Matrix; + float qt_Opacity; +}; + + +void main() { + coord = qt_MultiTexCoord0; + gl_Position = qt_Matrix * qt_Vertex; +} From 27c03f544bd06709b3adb3a0d4e6bdf4c0af5ef2 Mon Sep 17 00:00:00 2001 From: EndrII Date: Tue, 20 Jan 2026 16:49:20 +0100 Subject: [PATCH 23/29] fix fade effect --- ViewSolutions/ViewSolutions/FadeEffect.qml | 8 ++++++-- ViewSolutions/shaders/fade.frag | 19 ++++++++++++------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/ViewSolutions/ViewSolutions/FadeEffect.qml b/ViewSolutions/ViewSolutions/FadeEffect.qml index 369e9d4..2a2f1b3 100644 --- a/ViewSolutions/ViewSolutions/FadeEffect.qml +++ b/ViewSolutions/ViewSolutions/FadeEffect.qml @@ -11,8 +11,12 @@ import QtQuick // this effect make fade effect for left and right side of the item // ShaderEffect { - property point leftRightFadeStart: Qt.vector2d(0.25, 0.75); - property point leftRightFadeEnd: Qt.vector2d(0.0, 1.0); + property real leftFadePx: 25; + property real rightFadePx: 25; + property real leftFadePaddingPx: 2; + property real rightFadePaddingPx: 2; + + required property real widthSource; fragmentShader: "qrc:/uieffects/shaders/fade.frag.qsb" vertexShader: "qrc:/uieffects/shaders/fade.vert.qsb" diff --git a/ViewSolutions/shaders/fade.frag b/ViewSolutions/shaders/fade.frag index eb87adc..65acc40 100644 --- a/ViewSolutions/shaders/fade.frag +++ b/ViewSolutions/shaders/fade.frag @@ -5,19 +5,24 @@ layout(std140, binding = 0) uniform buf { mat4 qt_Matrix; float qt_Opacity; - vec2 leftRightFadeStart; - vec2 leftRightFadeEnd; + float leftFadePx; + float rightFadePx; + + float leftFadePaddingPx; + float rightFadePaddingPx; + + float widthSource; }; -layout(binding = 1) uniform sampler2D src; +layout(binding = 1) uniform sampler2D source; void main() { - vec4 tex = texture(src, coord); + vec4 tex = texture(source, coord); - float leftFade = smoothstep(leftRightFadeEnd.x, leftRightFadeStart.x, coord.x); + float leftFade = max(0.0, min(1.0, (widthSource * coord.x - leftFadePaddingPx) / leftFadePx)); - float rightFade = smoothstep(leftRightFadeEnd.y, leftRightFadeStart.y, 1.0 - coord.x); + float rightFade = max(0.0, min(1.0, (widthSource * (1 - coord.x) - rightFadePaddingPx) / rightFadePx)); float alpha = leftFade * rightFade; - fragColor = tex * qt_Opacity * alpha; + fragColor = tex * alpha; } From 3af0e7807282409f2bdd05fa5241b1c62ff7acac Mon Sep 17 00:00:00 2001 From: EndrII Date: Wed, 21 Jan 2026 10:14:23 +0100 Subject: [PATCH 24/29] fix fade shaders --- ViewSolutions/shaders/fade.frag | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ViewSolutions/shaders/fade.frag b/ViewSolutions/shaders/fade.frag index 65acc40..d913d8f 100644 --- a/ViewSolutions/shaders/fade.frag +++ b/ViewSolutions/shaders/fade.frag @@ -24,5 +24,5 @@ void main() { float alpha = leftFade * rightFade; - fragColor = tex * alpha; + fragColor = tex * alpha * qt_Opacity ; } From b7bf6e45d2258004ac8fbfeab89da6a64aa8271f Mon Sep 17 00:00:00 2001 From: EndrII Date: Thu, 22 Jan 2026 00:01:44 +0100 Subject: [PATCH 25/29] added time into notification history --- ViewSolutions/src/historynotificationsmodel.cpp | 3 +++ ViewSolutions/src/historynotificationsmodel.h | 3 ++- ViewSolutions/src/notificationdata.cpp | 16 ++++++++++++++-- ViewSolutions/src/notificationdata.h | 4 ++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/ViewSolutions/src/historynotificationsmodel.cpp b/ViewSolutions/src/historynotificationsmodel.cpp index fee5bcf..032a8a9 100644 --- a/ViewSolutions/src/historynotificationsmodel.cpp +++ b/ViewSolutions/src/historynotificationsmodel.cpp @@ -32,6 +32,8 @@ QVariant HistoryNotificationsModel::data(const QModelIndex &index, int role) con return notificationsList.at(index.row()).text(); case Type: return notificationsList.at(index.row()).type(); + case Time: + return notificationsList.at(index.row()).getTime(); default: break; } @@ -44,6 +46,7 @@ QHash HistoryNotificationsModel::roleNames() const { roles[Title] = "title"; roles[Message] = "text"; roles[Type] = "type"; + roles[Time] = "msgTime"; return roles; } diff --git a/ViewSolutions/src/historynotificationsmodel.h b/ViewSolutions/src/historynotificationsmodel.h index 471458b..737986e 100644 --- a/ViewSolutions/src/historynotificationsmodel.h +++ b/ViewSolutions/src/historynotificationsmodel.h @@ -20,7 +20,8 @@ class VIEWSOLUTION_EXPORT HistoryNotificationsModel : public QAbstractListModel Icon = Qt::UserRole + 1, Title, Message, - Type + Type, + Time }; public: diff --git a/ViewSolutions/src/notificationdata.cpp b/ViewSolutions/src/notificationdata.cpp index 9d2f53e..416cafe 100644 --- a/ViewSolutions/src/notificationdata.cpp +++ b/ViewSolutions/src/notificationdata.cpp @@ -10,12 +10,14 @@ namespace ViewSolutions { NotificationData::NotificationData(const QString &title, const QString &text, - const QString &img, int type) { + const QString &img, + int type) { _text = text; _title = title; _img = img; _type = type; + _time = time(0); } QString NotificationData::text() const { @@ -42,7 +44,8 @@ bool NotificationData::operator ==(const NotificationData &righ) { return _title == righ._title && _text == righ._text && _img == righ._img && - _type == righ._type; + _type == righ._type && + _time == righ._time; } bool NotificationData::operator !=(const NotificationData &righ) { @@ -65,6 +68,15 @@ QString NotificationData::getDefaultImage(const int code) const { } } +int NotificationData::getTime() const +{ + return _time; +} + +void NotificationData::setTime(int newTime) { + _time = newTime; +} + int NotificationData::type() const { return _type; } diff --git a/ViewSolutions/src/notificationdata.h b/ViewSolutions/src/notificationdata.h index 3ddfa5d..fd6f173 100644 --- a/ViewSolutions/src/notificationdata.h +++ b/ViewSolutions/src/notificationdata.h @@ -87,6 +87,9 @@ class VIEWSOLUTION_EXPORT NotificationData bool operator ==(const NotificationData &righ); bool operator !=(const NotificationData &righ); + int getTime() const; + void setTime(int newTime); + private: QString getDefaultImage(const int code) const; @@ -94,6 +97,7 @@ class VIEWSOLUTION_EXPORT NotificationData QString _img; QString _title; int _type; + int _time = 0; }; } From c4f8b8f746eb8525ab89fb90a7746b48db22bae9 Mon Sep 17 00:00:00 2001 From: EndrII Date: Thu, 22 Jan 2026 14:27:31 +0100 Subject: [PATCH 26/29] added filter slots for notifications models --- .../src/historynotificationsmodel.cpp | 7 +++++++ ViewSolutions/src/historynotificationsmodel.h | 4 +++- ViewSolutions/src/notificationdata.h | 8 ++++++++ ViewSolutions/src/notificationservice.cpp | 4 ++++ ViewSolutions/src/notificationservice.h | 18 +++++++++++++++++- 5 files changed, 39 insertions(+), 2 deletions(-) diff --git a/ViewSolutions/src/historynotificationsmodel.cpp b/ViewSolutions/src/historynotificationsmodel.cpp index 032a8a9..637708c 100644 --- a/ViewSolutions/src/historynotificationsmodel.cpp +++ b/ViewSolutions/src/historynotificationsmodel.cpp @@ -34,6 +34,10 @@ QVariant HistoryNotificationsModel::data(const QModelIndex &index, int role) con return notificationsList.at(index.row()).type(); case Time: return notificationsList.at(index.row()).getTime(); + case FilterHuck0: + return notificationsList.at(index.row()).filterHuck0(); + case FilterHuck1: + return notificationsList.at(index.row()).filterHuck1(); default: break; } @@ -47,6 +51,9 @@ QHash HistoryNotificationsModel::roleNames() const { roles[Message] = "text"; roles[Type] = "type"; roles[Time] = "msgTime"; + roles[FilterHuck0] = "filterHuck0"; + roles[FilterHuck1] = "filterHuck1"; + return roles; } diff --git a/ViewSolutions/src/historynotificationsmodel.h b/ViewSolutions/src/historynotificationsmodel.h index 737986e..b104488 100644 --- a/ViewSolutions/src/historynotificationsmodel.h +++ b/ViewSolutions/src/historynotificationsmodel.h @@ -21,7 +21,9 @@ class VIEWSOLUTION_EXPORT HistoryNotificationsModel : public QAbstractListModel Title, Message, Type, - Time + Time, + FilterHuck0, + FilterHuck1 }; public: diff --git a/ViewSolutions/src/notificationdata.h b/ViewSolutions/src/notificationdata.h index fd6f173..48b070d 100644 --- a/ViewSolutions/src/notificationdata.h +++ b/ViewSolutions/src/notificationdata.h @@ -90,6 +90,12 @@ class VIEWSOLUTION_EXPORT NotificationData int getTime() const; void setTime(int newTime); + int filterHuck0() const; + void setFilterHuck0(int newFilterHuck0); + + int filterHuck1() const; + void setFilterHuck1(int newFilterHuck1); + private: QString getDefaultImage(const int code) const; @@ -98,6 +104,8 @@ class VIEWSOLUTION_EXPORT NotificationData QString _title; int _type; int _time = 0; + int _filterHuck0 = 0; + int _filterHuck1 = 0; }; } diff --git a/ViewSolutions/src/notificationservice.cpp b/ViewSolutions/src/notificationservice.cpp index 245c3a3..803b94b 100644 --- a/ViewSolutions/src/notificationservice.cpp +++ b/ViewSolutions/src/notificationservice.cpp @@ -145,6 +145,10 @@ void NotificationService::setUiIsDisplay(bool newUiIsDisplay) { emit uiIsDisplayChanged(); } +void NotificationService::setHistory(const QList &historyList) { + _history->setHistory(historyList); +} + int NotificationService::uiTimeOut() const { return _uiTimeOut; } diff --git a/ViewSolutions/src/notificationservice.h b/ViewSolutions/src/notificationservice.h index c1beeeb..39c94d9 100644 --- a/ViewSolutions/src/notificationservice.h +++ b/ViewSolutions/src/notificationservice.h @@ -40,6 +40,7 @@ class VIEWSOLUTION_EXPORT NotificationService: public QObject, public iModel public: explicit NotificationService(QObject *ptr = nullptr); + ~NotificationService(); /** * @brief Notify This method return data of the last notify message. @@ -145,15 +146,30 @@ class VIEWSOLUTION_EXPORT NotificationService: public QObject, public iModel */ Q_INVOKABLE int notificationsCount() const; - ~NotificationService(); // iModel interface public: QString modelId() const override; + /** + * @brief uiIsDisplay this method return true if notify service is display now. + * @return true if notify service is display now. + */ bool uiIsDisplay() const; + + /** + * @brief setUiIsDisplay this method used for set notify service display state. + * @param newUiIsDisplay - new display state. + */ void setUiIsDisplay(bool newUiIsDisplay); + /** + * @brief setHistory this method used for set history list. + * @param historyList - list of history notifications. + */ + void setHistory(const QList &historyList); + + /** * @brief uiTimeOut this is maximu time that notify service can be loked fo display. * @return From e8b1ae4dab474479277dbd5f2639b7fe677b7f2c Mon Sep 17 00:00:00 2001 From: EndrII Date: Thu, 22 Jan 2026 20:06:46 +0100 Subject: [PATCH 27/29] added missed method into notificationdata --- ViewSolutions/src/notificationdata.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ViewSolutions/src/notificationdata.cpp b/ViewSolutions/src/notificationdata.cpp index 416cafe..2b3ba71 100644 --- a/ViewSolutions/src/notificationdata.cpp +++ b/ViewSolutions/src/notificationdata.cpp @@ -77,6 +77,22 @@ void NotificationData::setTime(int newTime) { _time = newTime; } +int NotificationData::filterHuck0() const { + return _filterHuck0; +} + +void NotificationData::setFilterHuck0(int newFilterHuck0) { + _filterHuck0 = newFilterHuck0; +} + +int NotificationData::filterHuck1() const { + return _filterHuck1; +} + +void NotificationData::setFilterHuck1(int newFilterHuck1) { + _filterHuck1 = newFilterHuck1; +} + int NotificationData::type() const { return _type; } From 4991b1296f1db22f432a061002bdefc35cdc5603 Mon Sep 17 00:00:00 2001 From: EndrII Date: Mon, 26 Jan 2026 17:14:29 +0100 Subject: [PATCH 28/29] simple update --- ViewSolutions/src/historynotificationsmodel.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/ViewSolutions/src/historynotificationsmodel.cpp b/ViewSolutions/src/historynotificationsmodel.cpp index 637708c..a799c26 100644 --- a/ViewSolutions/src/historynotificationsmodel.cpp +++ b/ViewSolutions/src/historynotificationsmodel.cpp @@ -23,21 +23,23 @@ QVariant HistoryNotificationsModel::data(const QModelIndex &index, int role) con if(index.row() < 0 || index.row() >= notificationsList.count()) return QVariant(); + auto& value = notificationsList.at(index.row()); + switch (role) { case Icon: - return notificationsList.at(index.row()).img(); + return value.img(); case Title: - return notificationsList.at(index.row()).title(); + return value.title(); case Message: - return notificationsList.at(index.row()).text(); + return value.text(); case Type: - return notificationsList.at(index.row()).type(); + return value.type(); case Time: - return notificationsList.at(index.row()).getTime(); + return value.getTime(); case FilterHuck0: - return notificationsList.at(index.row()).filterHuck0(); + return value.filterHuck0(); case FilterHuck1: - return notificationsList.at(index.row()).filterHuck1(); + return value.filterHuck1(); default: break; } From 546551ea2757baadc83a51a908b54f2e68f769c9 Mon Sep 17 00:00:00 2001 From: EndrII Date: Tue, 10 Feb 2026 21:32:33 +0100 Subject: [PATCH 29/29] fix logs --- ViewSolutions/ViewSolutions/ActivityProcessor.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ViewSolutions/ViewSolutions/ActivityProcessor.qml b/ViewSolutions/ViewSolutions/ActivityProcessor.qml index 8ce5c18..0d2ce56 100644 --- a/ViewSolutions/ViewSolutions/ActivityProcessor.qml +++ b/ViewSolutions/ViewSolutions/ActivityProcessor.qml @@ -203,7 +203,7 @@ Page { } else if (component.status === Component.Error) { // Error Handling - console.log("Error loading component:", component.errorString()); + console.error("Error loading component:", component.errorString()); } } @@ -237,7 +237,7 @@ Page { } else if (component.status === Component.Error) { // Error Handling - console.log("Error loading component:", component.errorString()); + console.error("Error loading component:", component.errorString()); } }