Compare commits

...

3 Commits

4 changed files with 124 additions and 18 deletions

View File

@ -11,6 +11,7 @@ Item {
required property string info
required property int amount
required property real factor
required property string type
property real detailsOpacity: 0
width: ListView.view.width
@ -66,7 +67,7 @@ Item {
}
Text {
text: qsTr("Details")
text: qsTr("Description")
font.bold: true
font.pointSize: 9
opacity: item.detailsOpacity
@ -108,6 +109,7 @@ Item {
anchors {
top: moreInfoTitle.bottom
bottom: parent.bottom
topMargin: 5
}
contentHeight: infoText.height
clip: true
@ -119,11 +121,18 @@ Item {
wrapMode: Text.WordWrap
width: details.width
}
Text {
id: amountText
text: "Amount: " + item.amount
wrapMode: Text.WordWrap
width: details.width
}
SpinBox {
value: item.amount
width: 80
height: 25
onValueModified: item.amount = value
}
Text {
id: factorText
@ -131,6 +140,59 @@ Item {
wrapMode: Text.WordWrap
width: details.width
}
SpinBox {
id: spinBox
from: 0
value: decimalToInt(item.factor)
to: decimalToInt(100)
stepSize: decimalFactor
editable: true
property int decimals: 2
property real realValue: value / decimalFactor
readonly property int decimalFactor: Math.pow(10, decimals)
function decimalToInt(decimal) {
return decimal * decimalFactor
}
onValueModified: item.factor = value / decimalFactor
validator: DoubleValidator {
bottom: Math.min(spinBox.from, spinBox.to)
top: Math.max(spinBox.from, spinBox.to)
decimals: spinBox.decimals
notation: DoubleValidator.StandardNotation
}
textFromValue: function (value, locale) {
return Number(value / decimalFactor).toLocaleString(
locale, 'f', spinBox.decimals)
}
valueFromText: function (text, locale) {
return Math.round(Number.fromLocaleString(
locale, text) * decimalFactor)
}
}
Text {
id: typeText
text: "Type: " + item.type
wrapMode: Text.WordWrap
}
ComboBox {
// TODO use model from metadata.h (in some way)
model: ["A", "B", "C", ""]
// BUG type will probably not been updated due to undo/redo step
currentIndex: find(item.type)
Component.onCompleted: currentIndex = find(item.type)
onCurrentTextChanged: {
item.type = currentText
}
width: 80
height: 25
}
}
}

View File

@ -5,24 +5,45 @@ import QtQuick.Controls.Material
Page {
id: page
ListView {
id: listView
ColumnLayout {
anchors.fill: parent
focus: true
clip: true
model: mainModel
delegateModelAccess: DelegateModel.ReadWrite
ListView {
id: listView
Layout.fillWidth: true
Layout.fillHeight: true
focus: true
clip: true
// delegate: ListItemDelegate {}
// delegate: ExpandableItemDelegate {}
delegate: EditableItemDelegate {}
model: mainModel
header: bannercomponent
footer: Rectangle {
width: parent.width
height: 30
gradient: mainGradient
// delegate: ListItemDelegate {}
delegate: ExpandableItemDelegate {}
// delegate: EditableItemDelegate {}
delegateModelAccess: DelegateModel.ReadWrite
header: bannercomponent
footer: Rectangle {
width: parent.width
height: 30
gradient: mainGradient
}
}
Button {
Layout.fillWidth: true
text: "Undo: " + appUndoStack.undoText
enabled: appUndoStack.canUndo
onClicked: {
appUndoStack.undo()
}
}
Button {
Layout.fillWidth: true
text: "Redo: " + appUndoStack.redoText
enabled: appUndoStack.canRedo
onClicked: {
appUndoStack.redo()
}
}
}

View File

@ -1,13 +1,19 @@
import QtQuick
import QtQuick.Controls.Material
import QtQuick.Layouts
import QtQml.Models
Window {
property bool isDataModified: !appUndoStack.isClean
property string titleClean: `${Application.name}`
property string titleDirty: `${Application.name}` + " *"
id: window
width: 480
height: 800
visible: true
title: `${Application.name}`
title: appUndoStack.clean ? titleClean : titleDirty
property int fontSize: 16
@ -29,4 +35,18 @@ Window {
id: listPage
anchors.fill: parent
}
Component.onCompleted: {
// core.displayStatusMessage.connect(displayStatusMessage)
appUndoStack.cleanChanged.connect(cleanChanged)
// core.userConfigChanged.connect(onUserConfigChanged)
}
function cleanChanged() {
let clean = appUndoStack.clean
console.debug("Clean state changed to: " + clean)
// if (!clean) {
// footerText.text = ""
// }
}
}

View File

@ -1,8 +1,9 @@
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QUndoCommand>
#include <model/generalsortfiltermodel.h>
#include "model/generalsortfiltermodel.h"
#include "genericcore.h"
@ -18,6 +19,7 @@ int main(int argc, char* argv[]) {
QGuiApplication app(argc, argv);
std::unique_ptr<GenericCore> core = std::make_unique<GenericCore>();
std::shared_ptr<GeneralSortFilterModel> mainModel = core->getSortFilterModel();
QUndoStack* undoStack = core->getModelUndoStack();
// qInfo() << "QMLApp Version:" << QMLAPP_VERSION;
qInfo() << "core->getString():" << core->toString();
@ -25,6 +27,7 @@ int main(int argc, char* argv[]) {
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty(QStringLiteral("core"), core.get());
engine.rootContext()->setContextProperty(QStringLiteral("mainModel"), mainModel.get());
engine.rootContext()->setContextProperty(QStringLiteral("appUndoStack"), undoStack);
QObject::connect(
&engine, &QQmlApplicationEngine::objectCreationFailed, &app,