Migration of QtMvvm from github
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

294 lines
6.1 KiB

import QtQuick 2.10
7 years ago
import QtQuick.Controls 2.3
import QtQuick.Controls.Material 2.3
import QtQuick.Controls.Universal 2.3
import QtQuick.Layouts 1.3
import de.skycoder42.QtDataSync 4.0
import de.skycoder42.QtMvvm.Core 1.0
import de.skycoder42.QtMvvm.Quick 1.0
import de.skycoder42.QtMvvm.DataSync.Core 1.0
7 years ago
Page {
id: _dataSyncView
property DataSyncViewModel viewModel: null
7 years ago
header: ContrastToolBar {
7 years ago
id: _toolBar
RowLayout {
id: _toolLayout
anchors.fill: parent
spacing: 0
ToolBarLabel {
7 years ago
id: _titleLabel
Layout.fillWidth: true
text: qsTr("Synchronization")
}
ActionButton {
id: _syncButton
7 years ago
icon.name: "view-refresh"
icon.source: "qrc:/de/skycoder42/qtmvvm/quick/icons/ic_sync.svg"
7 years ago
text: qsTr("Synchronize")
7 years ago
onClicked: viewModel.syncOrConnect()
}
ActionButton {
id: _idButton
icon.name: "fingerprint-gui"
icon.source: "qrc:/de/skycoder42/qtmvvm/quick/icons/ic_fingerprint.svg"
7 years ago
text: qsTr("Edit Identity")
7 years ago
onClicked: viewModel.showDeviceInfo()
}
MenuButton {
7 years ago
id: _moreButton
MenuItem {
text: qsTr("Update exchange key")
onClicked: viewModel.accountManager.updateExchangeKey()
}
7 years ago
MenuSeparator {}
7 years ago
MenuItem {
text: qsTr("Reload devices list")
onClicked: viewModel.accountManager.listDevices()
}
7 years ago
MenuSeparator {}
7 years ago
MenuItem {
text: qsTr("Change remote server")
onClicked: viewModel.changeRemote()
7 years ago
}
MenuItem {
text: qsTr("Reset Identity")
onClicked: viewModel.performReset()
7 years ago
}
}
}
}
Pane {
anchors.fill: parent
ColumnLayout {
id: _layout
anchors.fill: parent
7 years ago
spacing: 16
7 years ago
Switch {
id: _syncSwitch
text: qsTr("Synchronization enabled")
Layout.fillWidth: true
MvvmBinding {
viewModel: _dataSyncView.viewModel.syncManager
viewModelProperty: "syncEnabled"
view: _syncSwitch
viewProperty: "checked"
}
}
Label {
id: _statusLabel
Layout.fillWidth: true
text: viewModel.statusString
font.bold: true
font.pointSize: 16
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
ProgressBar {
id: _syncProgress
Layout.fillWidth: true
from: 0
to: 1
value: viewModel.syncManager.syncProgress
visible: !_errorLabel.visible
}
Label {
id: _errorLabel
Layout.fillWidth: true
wrapMode: Text.WordWrap
text: viewModel.syncManager.lastError
visible: text != ""
color: "#aa0000"
font.bold: true
}
Rectangle {
Layout.fillWidth: true
Layout.minimumHeight: 1
Layout.maximumHeight: 1
color: {
if(QuickPresenter.currentStyle === "Material")
return Material.foreground;
else if(QuickPresenter.currentStyle === "Universal")
return Universal.foreground;
else
return "black";
}
}
Label {
Layout.fillWidth: true
text: qsTr("Other Devices:")
}
ListView {
id: _devicesList
Layout.fillWidth: true
Layout.fillHeight: true
clip: true
model: viewModel.sortedModel
7 years ago
ScrollBar.vertical: ScrollBar {}
delegate: SwipeDelegate {
id: _swipeDelegate
width: parent.width
contentItem: ColumnLayout {
id: _delegateLayout
7 years ago
spacing: 8
7 years ago
Label {
id: _nameLabel
Layout.fillWidth: true
text: name
}
Label {
id: _fpLabel
font.pointSize: _nameLabel.font.pointSize * 0.8
Layout.fillWidth: true
Layout.leftMargin: 8
7 years ago
text: fingerPrint
elide: Text.ElideMiddle
opacity: 0.75
7 years ago
}
}
ListView.onRemove: SequentialAnimation {
PropertyAction {
target: _swipeDelegate
property: "ListView.delayRemove"
value: true
}
NumberAnimation {
target: _swipeDelegate
property: "height"
to: 0
easing.type: Easing.InOutQuad
}
PropertyAction {
target: _swipeDelegate
property: "ListView.delayRemove"
value: false
}
}
swipe.right: Rectangle {
height: parent.height
width: height
anchors.right: parent.right
color: {
if(QuickPresenter.currentStyle === "Material")
return Material.color(Material.Red);
else if(QuickPresenter.currentStyle === "Universal")
return Universal.color(Universal.Red);
else
return "#FF0000";
}
ActionButton {
anchors.centerIn: parent
implicitHeight: parent.height
implicitWidth: parent.width
icon.name: "user-trash"
icon.source: "qrc:/de/skycoder42/qtmvvm/quick/icons/ic_delete_forever.svg"
7 years ago
text: qsTr("Remove Device")
7 years ago
Material.foreground: "white"
Universal.foreground: "white"
onClicked: {
_swipeDelegate.swipe.close();
viewModel.removeDevice(index)
}
7 years ago
}
}
}
}
}
}
RoundActionButton {
id: _addButton
z: 7
anchors.right: parent.right
anchors.bottom: parent.bottom
anchors.margins: 16
checkable: true
text: qsTr("Add new devices")
icon.name: checked ? "tab-close" : "list-add"
icon.source: checked ?
"qrc:/de/skycoder42/qtmvvm/quick/icons/ic_close.svg" :
"qrc:/de/skycoder42/qtmvvm/quick/icons/ic_add.svg"
}
SubButton {
id: _exchangeButton
z: 3
reference: _addButton
expanded: _addButton.checked
text: qsTr("Network Exchange")
icon.name: "network-connect"
icon.source: "qrc:/de/skycoder42/qtmvvm/quick/icons/ic_exchange.svg"
onClicked: {
viewModel.startNetworkExchange();
_addButton.checked = false;
}
}
SubButton {
id: _exportButton
z: 3
reference: _exchangeButton
expanded: _addButton.checked
text: qsTr("Export to file")
icon.name: "document-export"
icon.source: "qrc:/de/skycoder42/qtmvvm/quick/icons/ic_export.svg"
onClicked: {
viewModel.startExport();
_addButton.checked = false;
}
}
SubButton {
id: _importButton
z: 3
reference: _exportButton
expanded: _addButton.checked
text: qsTr("Import from file")
icon.name: "document-import"
icon.source: "qrc:/de/skycoder42/qtmvvm/quick/icons/ic_import.svg"
onClicked: {
viewModel.startImport();
_addButton.checked = false;
}
}
}