There were added historynotificationsmodel and historynotificationsview

This commit is contained in:
master 2023-04-05 15:23:46 +03:00
parent b50d78111c
commit 1c6e7f06bc
8 changed files with 298 additions and 12 deletions

View File

@ -16,6 +16,7 @@
<file>qmlNotify_languages/fr.qm</file> <file>qmlNotify_languages/fr.qm</file>
<file>qmlNotify_languages/de.qm</file> <file>qmlNotify_languages/de.qm</file>
<file>qmlNotify_languages/zh.qm</file> <file>qmlNotify_languages/zh.qm</file>
<file>NotifyModule/NotificationHistoryView.qml</file>
</qresource> </qresource>
<qresource prefix="/icons"> <qresource prefix="/icons">
<file alias="warning">icons/Warning.png</file> <file alias="warning">icons/Warning.png</file>

View File

@ -61,6 +61,15 @@ BasePopUp {
Layout.fillWidth: true Layout.fillWidth: true
} }
ToolButton {
text: "History"
font.pointSize: 10
onClicked: {
history.open()
popup.close()
}
}
ToolButton { ToolButton {
text: "X" text: "X"
onClicked: { onClicked: {
@ -151,10 +160,9 @@ BasePopUp {
} }
} }
} }
title: titleText title: titleText
} }

View File

@ -0,0 +1,171 @@
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Controls.Material 2.15
Popup {
id: root
readonly property var historyModel: historyNotificationsModel
ToolBar {
id: toolbar
width: parent.width
height: parent.height * 0.1
anchors {
top: parent.top
left: parent.left
right: parent.right
}
ToolButton {
id: clearAllButton
text: qsTr("Clear All")
height: parent.height
font.pointSize: 10
anchors {
left: parent.left
verticalCenter: parent.verticalCenter
}
onClicked: historyModel.clearAllHistory()
}
Label {
id: toolbarTitle
text: qsTr("Notification history")
font.pointSize: 12
anchors {
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.verticalCenter
}
}
ToolButton {
id: closePopupButton
text: "X"
font.pointSize: 12
anchors {
right: parent.right
verticalCenter: parent.verticalCenter
}
onClicked: root.close()
}
}
ListView {
id: notificationLV
width: parent.width
height: parent.height * 0.9
clip: true
model: historyModel
anchors {
top: toolbar.bottom
horizontalCenter: parent.horizontalCenter
}
ScrollBar.vertical: ScrollBar {
hoverEnabled: true
active: hovered || pressed
anchors {
top: notificationLV.top
right: notificationLV.right
bottom: notificationLV.bottom
}
}
delegate: SwipeDelegate {
id: swipeDelegate
text: model.notificationValue
width: notificationLV.width
height: notificationLV.height * 0.15
ListView.onRemove: SequentialAnimation {
PropertyAction {
target: swipeDelegate
property: "ListView.delayRemove"
value: true
}
NumberAnimation {
target: swipeDelegate
property: "height"
to: 0
duration: 20
easing.type: Easing.InOutQuad
}
PropertyAction {
target: swipeDelegate;
property: "ListView.delayRemove"
value: false
}
}
Image {
id: notificationIcon
width: notificationIcon.sourceSize.width * 0.25
height: notificationIcon.sourceSize.height * 0.25
source: model.icon
fillMode: Image.PreserveAspectFit
anchors {
left: parent.left
leftMargin: parent.width * 0.1
verticalCenter: parent.verticalCenter
}
}
Column {
id: column
width: parent.width * 0.25
anchors {
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.verticalCenter
}
Label {
id: notificationTitle
text: qsTr(model.title)
font.pointSize: 12
clip: true
}
Label {
id: notificationText
text: qsTr(model.text)
font.pointSize: 12
wrapMode: Text.WordWrap
clip: true
linkColor: Material.accent
}
}
swipe.right: Label {
id: deleteLabel
text: qsTr("Delete")
color: "white"
verticalAlignment: Label.AlignVCenter
padding: 12
height: parent.height
anchors.right: parent.right
SwipeDelegate.onClicked: notificationLV.model.removeNotificationItemAtIndex(index)
background: Rectangle {
color: deleteLabel.SwipeDelegate.pressed? "red" : "gray"
}
}
}
}
Connections {
target: historyModel
function onDataInserted() {
console.log(Object.keys(historyModel))
}
}
}

View File

@ -73,4 +73,11 @@ Item {
questionMsgBox._show(); questionMsgBox._show();
} }
} }
NotificationHistoryView {
id: history
width: parent.width * 0.6
height: parent.height * 0.5
anchors.centerIn: parent
}
} }

View File

@ -0,0 +1,59 @@
#include "historynotificationsmodel.h"
#include <QDebug>
HistoryNotificationsModel::HistoryNotificationsModel(QObject *parent)
: QAbstractListModel{parent} {
}
int HistoryNotificationsModel::rowCount(const QModelIndex &parent) const {
Q_UNUSED(parent);
return notificationsList.count();
}
QVariant HistoryNotificationsModel::data(const QModelIndex &index, int role) const {
if(index.row() < 0 || index.row() >= notificationsList.count())
return QVariant();
switch (role) {
case Icon:
return notificationsList.at(index.row()).img();
case Title:
return notificationsList.at(index.row()).title();
case Message:
return notificationsList.at(index.row()).text();
case Type:
return notificationsList.at(index.row()).type();
default:
break;
}
return QVariant();
}
QHash<int, QByteArray> HistoryNotificationsModel::roleNames() const {
QHash<int, QByteArray> roles;
roles[Icon] = "icon";
roles[Title] = "title";
roles[Message] = "text";
roles[Type] = "type";
return roles;
}
void HistoryNotificationsModel::setHistory(const QmlNotificationService::NotificationData &notificationData) {
beginResetModel();
notificationsList.push_back(notificationData);
endResetModel();
emit dataInserted();
}
void HistoryNotificationsModel::clearAllHistory() {
beginResetModel();
notificationsList.clear();
endResetModel();
}
void HistoryNotificationsModel::removeNotificationItemAtIndex(const int elementIndex) {
beginResetModel();
notificationsList.removeAt(elementIndex);
endResetModel();
}

View File

@ -0,0 +1,40 @@
#ifndef HISTORYNOTIFICATIONMODEL_H
#define HISTORYNOTIFICATIONMODEL_H
#include <QAbstractListModel>
#include "notificationdata.h"
class HistoryNotificationsModel : public QAbstractListModel
{
Q_OBJECT
enum Roles {
Icon = Qt::UserRole + 1,
Title,
Message,
Type
};
Q_PROPERTY(int notificationsCount READ getNotificationsCount WRITE setNotificationsCount NOTIFY notificationsCountChanged)
public:
explicit HistoryNotificationsModel(QObject *parent = nullptr);
int rowCount(const QModelIndex &parent) const override;
QVariant data(const QModelIndex &index, int role) const override;
QHash<int, QByteArray> roleNames() const override;
void setHistory(const QmlNotificationService::NotificationData &notificationData);
Q_INVOKABLE void clearAllHistory();
Q_INVOKABLE void removeNotificationItemAtIndex(const int index);
signals:
void dataInserted();
private:
QList<QmlNotificationService::NotificationData> notificationsList;
int m_notificationsCount;
};
#endif // HISTORYNOTIFICATIONMODEL_H

View File

@ -13,7 +13,6 @@ namespace QmlNotificationService {
NotificationService::NotificationService(QObject * ptr): QObject (ptr) { NotificationService::NotificationService(QObject * ptr): QObject (ptr) {
qRegisterMetaType<NotificationData>("NotificationData"); qRegisterMetaType<NotificationData>("NotificationData");
qRegisterMetaType<QList<NotificationData>> ("QList<NotificationData>"); qRegisterMetaType<QList<NotificationData>> ("QList<NotificationData>");
} }
NotificationData NotificationService::notify() const { NotificationData NotificationService::notify() const {
@ -25,9 +24,9 @@ NotificationData NotificationService::question() const {
} }
void NotificationService::setNotify(const NotificationData& notify) { void NotificationService::setNotify(const NotificationData& notify) {
if (_notify != notify) if (_notify != notify) {
_history.push_back(_notify); _history.setHistory(notify);
}
_notify = notify; _notify = notify;
emit notifyChanged(); emit notifyChanged();
@ -104,8 +103,8 @@ NotificationService *NotificationService::getService() {
return service; return service;
} }
const QList<NotificationData> &NotificationService::history() const { //const QList<NotificationData> &NotificationService::history() const {
return _history; // return _history;
} //}
} }

View File

@ -2,6 +2,7 @@
#define NOTIFICATIONSERVICE_H #define NOTIFICATIONSERVICE_H
#include "notificationdata.h" #include "notificationdata.h"
#include "historynotificationsmodel.h"
#include <QHash> #include <QHash>
#include <QObject> #include <QObject>
@ -23,7 +24,7 @@ class NOTIFYSERVICESHARED_EXPORT NotificationService: public QObject
Q_PROPERTY(NotificationData notify READ notify NOTIFY notifyChanged) Q_PROPERTY(NotificationData notify READ notify NOTIFY notifyChanged)
Q_PROPERTY(NotificationData question READ question NOTIFY questionChanged) Q_PROPERTY(NotificationData question READ question NOTIFY questionChanged)
Q_PROPERTY(QList<NotificationData> history READ history NOTIFY notifyChanged) //Q_PROPERTY(HistoryNotificationModel history READ history NOTIFY notifyChanged)
public: public:
/** /**
@ -117,7 +118,7 @@ public:
* @brief history - This method used for return notify list. * @brief history - This method used for return notify list.
* @return list of all notify. * @return list of all notify.
*/ */
const QList<NotificationData> & history() const; // const HistoryNotificationModel & history() const;
signals: signals:
/** /**
@ -145,7 +146,7 @@ private:
QHash<int, Listner> _listners; QHash<int, Listner> _listners;
NotificationData _question; NotificationData _question;
NotificationData _notify; NotificationData _notify;
QList<NotificationData> _history; HistoryNotificationsModel _history;
}; };
} }