[-]
[+]
|
Changed |
_service:tar_git:valuelogger.spec
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -2,6 +2,6 @@
<service name="tar_git">
<param name="url">https://github.com/monich/valuelogger.git</param>
<param name="branch">master</param>
- <param name="revision">25d1584</param>
+ <param name="revision">32893bf</param>
</service>
</services>
\ No newline at end of file
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-valuelogger2-1.0.20.tar.bz2/qml/components/SettingsView.qml
^
|
@@ -136,4 +136,6 @@
}
}
}
+
+ VerticalScrollDecorator { }
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-valuelogger2-1.0.20.tar.bz2/qml/cover/CoverItem2.qml
^
|
@@ -17,10 +17,20 @@
height: width
anchors.horizontalCenter: parent.horizontalCenter
active: showGraph
+ onItemChanged: {
+ if (item) {
+ thisItem.repaintGraph.connect(item.repaintGraph)
+ }
+ }
+
sourceComponent: Component {
Item {
anchors.fill: parent
+ function repaintGraph() {
+ graph.update()
+ }
+
Graph {
id: graph
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-valuelogger2-1.0.20.tar.bz2/qml/cover/CoverItem3.qml
^
|
@@ -18,10 +18,20 @@
height: width
anchors.horizontalCenter: parent.horizontalCenter
active: showGraph
+ onItemChanged: {
+ if (item) {
+ thisItem.repaintGraph.connect(item.repaintGraph)
+ }
+ }
+
sourceComponent: Component {
Item {
anchors.fill: parent
+ function repaintGraph() {
+ graph.update()
+ }
+
Rectangle {
id: background
@@ -43,11 +53,6 @@
visible: false
}
- Connections {
- target: thisItem
- onUpdateGraph: graph.update()
- }
-
Graph {
id: graph
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-valuelogger2-1.0.20.tar.bz2/qml/cover/CoverItemBase.qml
^
|
@@ -12,7 +12,7 @@
property var graphModel
property alias title: label.text
- signal updateGraph()
+ signal repaintGraph()
/* Internal API */
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-valuelogger2-1.0.20.tar.bz2/qml/cover/CoverPage.qml
^
|
@@ -19,24 +19,18 @@
property alias coverItem: coverItemLoader.item
- Connections {
- target: Logger
- onTableUpdated: {
- if (table == defaultParameterData.dataTable) {
- defaultParameterData.reset()
- }
- }
- }
-
DataTableModel {
id: defaultParameterData
dataTable: Logger.defaultParameterTable
- onModelReset: {
- if (coverItem) {
- coverItem.updateGraph()
- }
- }
+ onModelReset: repaintTimer.start()
+ }
+
+ Timer {
+ id: repaintTimer
+
+ interval: 500
+ onTriggered: coverItem.repaintGraph()
}
Loader {
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-valuelogger2-1.0.20.tar.bz2/qml/pages/MainPage.qml
^
|
@@ -284,11 +284,14 @@
HighlightIcon {
id: pairIcon
+
source: "image://theme/icon-m-link"
anchors.verticalCenter: parent.verticalCenter
sourceSize: Qt.size(Theme.iconSizeMedium, Theme.iconSizeMedium)
highlightColor: Theme.primaryColor
visible: model.pairedtable !== ""
+ layer.enabled: parameterItem.highlighted
+ layer.effect: PressEffect { source: pairIcon }
}
IconButton {
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-valuelogger2-1.0.20.tar.bz2/qml/pages/ShowData.qml
^
|
@@ -7,13 +7,21 @@
Page {
id: showDataPage
- property string parName : "Name goes here"
- property string parDescription : "Description goes here"
+ property string parName
+ property string parDescription
property alias dataTable: dataModel.dataTable
+ Component.onCompleted: {
+ dataListView.positionViewAtEnd()
+ scrollDecorator.showDecorator()
+ }
+
SilicaFlickable {
anchors.fill: parent
+ visible: placeholder.opacity !== 0
ViewPlaceholder {
+ id: placeholder
+
enabled: dataListView.count === 0
text: qsTr("No data.")
}
@@ -33,7 +41,11 @@
SilicaListView {
id: dataListView
- VerticalScrollDecorator { flickable: dataListView }
+ VerticalScrollDecorator {
+ id: scrollDecorator
+
+ flickable: dataListView
+ }
model: dataModel
@@ -83,7 +95,7 @@
"nowTime": Qt.formatDateTime(model.timestamp, "hh:mm:ss")
})
- editDialog.accepted.connect( function() {
+ editDialog.accepted.connect(function() {
Debug.log("dialog accepted")
var timestamp = editDialog.nowDate + " " + editDialog.nowTime
@@ -92,7 +104,6 @@
Debug.log(" time", timestamp)
dataModel.updateRow(model.index, editDialog.value, editDialog.annotation, timestamp)
- Logger.tableUpdated(dataTable)
})
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-valuelogger2-1.0.20.tar.bz2/src/database.cpp
^
|
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2021 Slava Monich <slava@monich.com>
+Copyright (c) 2021-2022 Slava Monich <slava@monich.com>
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
@@ -56,8 +56,10 @@
const QString FORMAT_DATE("yyyy-MM-dd");
}
-class Database::Private
+class Database::Private : public QObject
{
+ Q_OBJECT
+
public:
Private();
~Private();
@@ -67,6 +69,9 @@
void createDataTable(QString table);
void dropDataTable(QString table);
+signals:
+ void dataChanged(QString table);
+
public:
QSqlDatabase db;
};
@@ -283,6 +288,7 @@
if (query.exec()) {
DBG("data" << (key.isEmpty() ? "added" : "edited") << timestamp << "=" << value << "+" << annotation);
+ emit p->dataChanged(table);
return objHash;
} else {
WARN("failed" << timestamp << "=" << value << ":" << query.lastError());
@@ -333,6 +339,7 @@
if (query.exec()) {
DBG("deleted" << key << "from" << datatable);
+ emit p->dataChanged(table);
} else {
WARN("Failed to delete" << key << "from" << datatable << ":" << query.lastError());
}
@@ -363,7 +370,7 @@
}
}
-Database::Database()
+Database::Database(QObject* parent) : QObject(parent)
{
static QWeakPointer<Private> shared;
p = shared;
@@ -371,23 +378,13 @@
p = QSharedPointer<Private>::create();
shared = p;
}
-}
-
-Database::Database(const Database& that) :
- p(that.p)
-{
+ connect(p.data(), SIGNAL(dataChanged(QString)), SIGNAL(dataChanged(QString)));
}
Database::~Database()
{
}
-Database& Database::operator=(const Database& that)
-{
- p = that.p;
- return *this;
-}
-
QDateTime Database::toDateTime(const QVariant& value)
{
const QString s(value.toString().trimmed());
@@ -409,3 +406,5 @@
{
return value.toString(FORMAT_DATE_TIME);
}
+
+#include "database.moc"
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-valuelogger2-1.0.20.tar.bz2/src/database.h
^
|
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2021 Slava Monich <slava@monich.com>
+Copyright (c) 2021-2022 Slava Monich <slava@monich.com>
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
@@ -26,7 +26,9 @@
#include <QSharedPointer>
#include <QVariantList>
+#include <QDateTime>
#include <QString>
+#include <QObject>
/* Parameter table */
#define PARAMETER_COL "parameter" /* TEXT */
@@ -55,17 +57,16 @@
#define DATA_VALUE_ROLE DATA_VALUE_COL
#define DATA_ANNOTATION_ROLE DATA_ANNOTATION_COL
-class Database
+class Database : public QObject
{
+ Q_OBJECT
+ Q_DISABLE_COPY(Database)
class Private;
public:
- Database();
- Database(const Database& db);
+ Database(QObject* parent);
~Database();
- Database& operator=(const Database& db);
-
static QDateTime toDateTime(const QVariant& value);
static QString toString(const QDateTime& value);
@@ -78,6 +79,9 @@
void deleteData(QString table, QString key);
void deleteParameter(QString datatable);
+signals:
+ void dataChanged(QString datatable);
+
private:
QSharedPointer<Private> p;
};
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-valuelogger2-1.0.20.tar.bz2/src/datamodel.cpp
^
|
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2021 Slava Monich <slava@monich.com>
+Copyright (c) 2021-2022 Slava Monich <slava@monich.com>
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
@@ -268,7 +268,7 @@
}
if (!roles.isEmpty() &&
- !updateRowStorage(data->key, value, annotation, timestamp)) {
+ updateRowStorage(data->key, value, annotation, timestamp)) {
const QModelIndex idx(index(row));
emit dataChanged(idx, idx, roles);
updateRanges();
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-valuelogger2-1.0.20.tar.bz2/src/datatablemodel.cpp
^
|
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2021 Slava Monich <slava@monich.com>
+Copyright (c) 2021-2022 Slava Monich <slava@monich.com>
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
@@ -25,8 +25,11 @@
#include "debuglog.h"
DataTableModel::DataTableModel(QObject* parent) :
- DataModel(parent)
+ DataModel(parent),
+ m_internalUpdate(0),
+ m_db(new Database(this))
{
+ connect(m_db, SIGNAL(dataChanged(QString)), SLOT(onDataChanged(QString)));
}
DataTableModel::~DataTableModel()
@@ -45,17 +48,34 @@
void DataTableModel::deleteRowStorage(QString key)
{
if (!m_dataTable.isEmpty()) {
- m_db.deleteData(m_dataTable, key);
+ m_internalUpdate++;
+ m_db->deleteData(m_dataTable, key);
+ m_internalUpdate--;
}
}
bool DataTableModel::updateRowStorage(QString key, QString value, QString annotation, QString timestamp)
{
- return !m_dataTable.isEmpty() &&
- !m_db.addData(m_dataTable, key, value, annotation, timestamp).isEmpty();
+ bool ok = false;
+ if (!m_dataTable.isEmpty()) {
+ m_internalUpdate++;
+ ok = !m_db->addData(m_dataTable, key, value, annotation, timestamp).isEmpty();
+ m_internalUpdate--;
+ }
+ return ok;
}
void DataTableModel::reset()
{
- setRawData(m_dataTable.isEmpty() ? QVariantList() : m_db.readData(m_dataTable));
+ m_internalUpdate++;
+ setRawData(m_dataTable.isEmpty() ? QVariantList() : m_db->readData(m_dataTable));
+ m_internalUpdate--;
+}
+
+void DataTableModel::onDataChanged(QString table)
+{
+ if (!m_internalUpdate && table == m_dataTable) {
+ DBG(table << "has changed, resetting the model");
+ reset();
+ }
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-valuelogger2-1.0.20.tar.bz2/src/datatablemodel.h
^
|
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2021 Slava Monich <slava@monich.com>
+Copyright (c) 2021-2022 Slava Monich <slava@monich.com>
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
@@ -45,12 +45,16 @@
void deleteRowStorage(QString key) Q_DECL_OVERRIDE;
bool updateRowStorage(QString key, QString value, QString annotation, QString timestamp) Q_DECL_OVERRIDE;
+private slots:
+ void onDataChanged(QString table);
+
signals:
void dataTableChanged();
private:
- Database m_db;
+ int m_internalUpdate;
QString m_dataTable;
+ Database* m_db;
};
#endif // DATATABLEMODEL_H
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-valuelogger2-1.0.20.tar.bz2/src/logger.cpp
^
|
@@ -75,7 +75,8 @@
Logger::Logger(QObject* parent) :
QAbstractListModel(parent),
- queuedSignals(0)
+ queuedSignals(0),
+ m_db(new Database(this))
{
m_shareCSV.setFileTemplate(QDir::tempPath() + "/valuelogger.XXXXXX.csv");
m_parameters = readParameters();
@@ -230,7 +231,7 @@
QString Logger::addData(QString table, QString value, QString annotation, QString timestamp)
{
- const QString key(m_db.addData(table, QString(), value, annotation, timestamp));
+ const QString key(m_db->addData(table, QString(), value, annotation, timestamp));
if (!key.isEmpty()) {
tableUpdated(table);
}
@@ -253,7 +254,7 @@
QVariantList Logger::readParameters()
{
- return m_db.readParameters();
+ return m_db->readParameters();
}
QString Logger::addParameter(QString name, QString description, bool visualize, QColor plotcolor)
@@ -261,7 +262,7 @@
DBG("Adding entry:" << name << "-" << description << "color" << plotcolor);
const QString colorName(plotcolor.name());
- const QString datatable(m_db.addParameter(name, description, visualize, colorName));
+ const QString datatable(m_db->addParameter(name, description, visualize, colorName));
if (!datatable.isEmpty()) {
DBG("parameter added:" << name);
@@ -332,7 +333,7 @@
}
if (!roles.isEmpty()) {
- if (m_db.insertOrReplace(par.value(DATATABLE).toString(), name, description, visualize, colorName, pairedtable)) {
+ if (m_db->insertOrReplace(par.value(DATATABLE).toString(), name, description, visualize, colorName, pairedtable)) {
m_parameters.replace(row, par);
const QModelIndex idx(index(row));
emit dataChanged(idx, idx, roles);
@@ -372,7 +373,7 @@
const QString dataTable(deleted.value(DATATABLE).toString());
DBG("Deleting entry at" << row << ":" << deleted.value(NAME).toString());
- m_db.deleteParameter(dataTable);
+ m_db->deleteParameter(dataTable);
beginRemoveRows(QModelIndex(), row, row);
m_parameters.removeAt(row);
@@ -381,7 +382,7 @@
for (int i = m_parameters.count() - 1; i >= 0; i--) {
const QVariantMap par(m_parameters.at(i).toMap());
if (par.value(PAIREDTABLE).toString() == dataTable) {
- if (m_db.setPairedTable(par.value(DATATABLE).toString(), QString())) {
+ if (m_db->setPairedTable(par.value(DATATABLE).toString(), QString())) {
QVector<int> roles;
roles.append(PairedTableRole);
const QModelIndex idx(index(i));
@@ -442,7 +443,7 @@
out << QUOTE << esc(par.value(NAME).toString()) << SEP
<< esc(par.value(DESCRIPTION).toString()) << EOL;
- const QVariantList dataList(m_db.readData(par.value(DATATABLE).toString()));
+ const QVariantList dataList(m_db->readData(par.value(DATATABLE).toString()));
QListIterator<QVariant> n(dataList);
while (n.hasNext()) {
const QVariantMap data(n.next().toMap());
@@ -610,7 +611,7 @@
par.insert(VISUALIZE, bval);
QVector<int> roles;
roles.append(role);
- if (m_db.insertOrReplace(par.value(DATATABLE).toString(),
+ if (m_db->insertOrReplace(par.value(DATATABLE).toString(),
par.value(NAME).toString(), par.value(DESCRIPTION).toString(),
bval, par.value(PLOTCOLOR).toString(),
par.value(PAIREDTABLE).toString())) {
@@ -630,7 +631,7 @@
DBG("Paired table at" << row << "=>" << sval);
QVector<int> roles;
roles.append(role);
- if (m_db.setPairedTable(par.value(DATATABLE).toString(), sval)) {
+ if (m_db->setPairedTable(par.value(DATATABLE).toString(), sval)) {
par.insert(PAIREDTABLE, sval);
m_parameters.replace(row, par);
emit dataChanged(idx, idx, roles);
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-valuelogger2-1.0.20.tar.bz2/src/logger.h
^
|
@@ -111,7 +111,7 @@
static int compareParsedVersions(const QVector<uint> v1, const QVector<uint> v2);
private:
- Database m_db;
+ uint queuedSignals;
QVariantList m_parameters;
QString m_transferEngineVersion;
QTemporaryFile m_shareCSV;
@@ -120,7 +120,7 @@
QString m_defaultParameterName;
QString m_defaultParameterTable;
QColor m_defaultParameterColor;
- uint queuedSignals;
+ Database* m_db;
};
#endif // LOGGER_H
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-valuelogger2-1.0.20.tar.bz2/valuelogger.pro
^
|
@@ -11,7 +11,7 @@
QMAKE_CXXFLAGS += -Wno-unused-parameter -Wno-psabi
isEmpty(SPECVERSION) {
- SPECVERSION=1.0.18
+ SPECVERSION=1.0.20
}
DEFINES += "APPVERSION=\\\"$${SPECVERSION}\\\""
|