diff --git a/ViewSolutions/ViewSolutions/Extendable.qml b/ViewSolutions/ViewSolutions/Extendable.qml new file mode 100644 index 0000000..d6c90d4 --- /dev/null +++ b/ViewSolutions/ViewSolutions/Extendable.qml @@ -0,0 +1,83 @@ +//# +//# 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 { + 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 { + id: extendetArea + clip: true + visible: false + padding: 0 + 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 0c01aec..6b99a23 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 @@ -121,6 +122,7 @@ AbstractButton { source: Image { id: sourceImg source: root.source + mipmap: true clip: true fillMode: Image.PreserveAspectCrop 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/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; } diff --git a/ViewSolutions/src/notificationdata.h b/ViewSolutions/src/notificationdata.h index 7b2f07b..3fa5070 100644 --- a/ViewSolutions/src/notificationdata.h +++ b/ViewSolutions/src/notificationdata.h @@ -26,11 +26,14 @@ 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. Error = 2, + + /// This is user defined type of message. + Custom = 3, }; explicit NotificationData(const QString& title = "", 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 d954141..722d3d8 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. @@ -131,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. @@ -170,7 +177,6 @@ class VIEWSOLUTION_EXPORT NotificationService: public QObject, public iModel private: - explicit NotificationService(QObject *ptr = nullptr); QHash _listners;