diff --git a/src/mvvmdatasynccore/datasyncviewmodel.cpp b/src/mvvmdatasynccore/datasyncviewmodel.cpp index c8e2840..b350e58 100644 --- a/src/mvvmdatasynccore/datasyncviewmodel.cpp +++ b/src/mvvmdatasynccore/datasyncviewmodel.cpp @@ -2,6 +2,7 @@ #include "datasyncviewmodel_p.h" #include "exportsetupviewmodel_p.h" #include "changeremoteviewmodel_p.h" +#include "identityeditviewmodel_p.h" #include #include @@ -114,7 +115,9 @@ void DataSyncViewModel::syncOrConnect() void DataSyncViewModel::showDeviceInfo() { - Q_UNIMPLEMENTED(); + if(!d->accountManager) + return; + show(IdentityEditViewModel::params(d->accountManager)); } void DataSyncViewModel::startExport() diff --git a/src/mvvmdatasynccore/identityeditviewmodel.cpp b/src/mvvmdatasynccore/identityeditviewmodel.cpp new file mode 100644 index 0000000..77abd08 --- /dev/null +++ b/src/mvvmdatasynccore/identityeditviewmodel.cpp @@ -0,0 +1,55 @@ +#include "identityeditviewmodel_p.h" +#include "datasyncviewmodel.h" +using namespace QtMvvm; +using namespace QtDataSync; + +IdentityEditViewModel::IdentityEditViewModel(QObject *parent) : + ViewModel(parent), + _manager(nullptr) +{} + +QVariantHash IdentityEditViewModel::params(AccountManager *manager) +{ + return { + {QStringLiteral("manager"), QVariant::fromValue(manager)} + }; +} + +QString IdentityEditViewModel::name() const +{ + return _nameBuffer; +} + +QString IdentityEditViewModel::fingerPrint() const +{ + return _manager ? + DataSyncViewModel::formatFingerPrint(_manager->deviceFingerprint()) : + QString(); +} + +void IdentityEditViewModel::save() +{ + if(_manager) + _manager->setDeviceName(_nameBuffer); +} + +void IdentityEditViewModel::setName(const QString &name) +{ + if (_nameBuffer == name) + return; + + _nameBuffer = name; + emit nameChanged(_nameBuffer); +} + +void IdentityEditViewModel::onInit(const QVariantHash ¶ms) +{ + _manager = params.value(QStringLiteral("manager")).value(); + + connect(_manager, &AccountManager::deviceFingerprintChanged, + this, &IdentityEditViewModel::fingerPrintChanged); + connect(_manager, &AccountManager::deviceNameChanged, + this, &IdentityEditViewModel::setName); + setName(_manager->deviceName()); + emit fingerPrintChanged(); +} diff --git a/src/mvvmdatasynccore/identityeditviewmodel_p.h b/src/mvvmdatasynccore/identityeditviewmodel_p.h new file mode 100644 index 0000000..036f399 --- /dev/null +++ b/src/mvvmdatasynccore/identityeditviewmodel_p.h @@ -0,0 +1,46 @@ +#ifndef QTMVVM_IDENTITYEDITVIEWMODEL_P_H +#define QTMVVM_IDENTITYEDITVIEWMODEL_P_H + +#include + +#include + +#include "qtmvvmdatasynccore_global.h" + +namespace QtMvvm { + +class Q_MVVMDATASYNCCORE_EXPORT IdentityEditViewModel : public ViewModel +{ + Q_OBJECT + + Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) + Q_PROPERTY(QString fingerPrint READ fingerPrint NOTIFY fingerPrintChanged) + +public: + Q_INVOKABLE explicit IdentityEditViewModel(QObject *parent = nullptr); + + static QVariantHash params(QtDataSync::AccountManager *manager); + + QString name() const; + QString fingerPrint() const; + +public Q_SLOTS: + void save(); + + void setName(const QString &name); + +Q_SIGNALS: + void nameChanged(const QString &name); + void fingerPrintChanged(); + +protected: + void onInit(const QVariantHash ¶ms) override; + +private: + QtDataSync::AccountManager *_manager; + QString _nameBuffer; +}; + +} + +#endif // QTMVVM_IDENTITYEDITVIEWMODEL_P_H diff --git a/src/mvvmdatasynccore/mvvmdatasynccore.pro b/src/mvvmdatasynccore/mvvmdatasynccore.pro index ce57e49..a86fc1c 100644 --- a/src/mvvmdatasynccore/mvvmdatasynccore.pro +++ b/src/mvvmdatasynccore/mvvmdatasynccore.pro @@ -9,13 +9,15 @@ HEADERS += \ accountmodel.h \ accountmodel_p.h \ exportsetupviewmodel_p.h \ - changeremoteviewmodel_p.h + changeremoteviewmodel_p.h \ + identityeditviewmodel_p.h SOURCES += \ datasyncviewmodel.cpp \ accountmodel.cpp \ exportsetupviewmodel.cpp \ - changeremoteviewmodel.cpp + changeremoteviewmodel.cpp \ + identityeditviewmodel.cpp TRANSLATIONS += \ translations/qtmvvmdatasynccore_de.ts \ diff --git a/src/mvvmdatasyncwidgets/identityeditdialog.cpp b/src/mvvmdatasyncwidgets/identityeditdialog.cpp new file mode 100644 index 0000000..9bdac7c --- /dev/null +++ b/src/mvvmdatasyncwidgets/identityeditdialog.cpp @@ -0,0 +1,35 @@ +#include "identityeditdialog_p.h" +#include "ui_identityeditdialog.h" +#include +using namespace QtMvvm; + +IdentityEditDialog::IdentityEditDialog(ViewModel *viewModel, QWidget *parent) : + QDialog(parent), + _viewModel(static_cast(viewModel)), + ui(new Ui::IdentityEditDialog) +{ + ui->setupUi(this); + if(parentWidget()) { + setWindowModality(Qt::WindowModal); + setWindowFlags(Qt::Sheet | Qt::WindowCloseButtonHint | Qt::WindowMinimizeButtonHint); + } else { + setWindowModality(Qt::ApplicationModal); + setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint | Qt::WindowMinimizeButtonHint); + } + + bind(_viewModel, "name", + ui->deviceNameLineEdit, "text", + Binding::TwoWay, + nullptr, "editingFinished()"); + bind(_viewModel, "fingerPrint", + ui->fingerPrintDisplayLabel, "text", + Binding::OneWayToView); +} + +IdentityEditDialog::~IdentityEditDialog() {} + +void IdentityEditDialog::accept() +{ + _viewModel->save(); + QDialog::accept(); +} diff --git a/src/mvvmdatasyncwidgets/identityeditdialog.ui b/src/mvvmdatasyncwidgets/identityeditdialog.ui new file mode 100644 index 0000000..428f6e0 --- /dev/null +++ b/src/mvvmdatasyncwidgets/identityeditdialog.ui @@ -0,0 +1,109 @@ + + + IdentityEditDialog + + + + 0 + 0 + 397 + 172 + + + + Dialog + + + true + + + true + + + + + + Device &Name: + + + deviceNameLineEdit + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Save + + + + + + + <fingerprint> + + + Qt::PlainText + + + Qt::AlignCenter + + + true + + + Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Device Fingerprint: + + + + + + + + + buttonBox + accepted() + IdentityEditDialog + accept() + + + 227 + 279 + + + 157 + 274 + + + + + buttonBox + rejected() + IdentityEditDialog + reject() + + + 295 + 285 + + + 286 + 274 + + + + + diff --git a/src/mvvmdatasyncwidgets/identityeditdialog_p.h b/src/mvvmdatasyncwidgets/identityeditdialog_p.h new file mode 100644 index 0000000..060414e --- /dev/null +++ b/src/mvvmdatasyncwidgets/identityeditdialog_p.h @@ -0,0 +1,36 @@ +#ifndef QTMVVM_IDENTITYEDITDIALOG_P_H +#define QTMVVM_IDENTITYEDITDIALOG_P_H + +#include + +#include + +#include + +#include "qtmvvmdatasyncwidgets_global.h" + +namespace Ui { +class IdentityEditDialog; +} + +namespace QtMvvm { + +class Q_MVVMDATASYNCWIDGETS_EXPORT IdentityEditDialog : public QDialog +{ + Q_OBJECT + +public: + Q_INVOKABLE explicit IdentityEditDialog(QtMvvm::ViewModel *viewModel, QWidget *parent = nullptr); + ~IdentityEditDialog(); + +public Q_SLOTS: + void accept() override; + +private: + IdentityEditViewModel *_viewModel; + QScopedPointer ui; +}; + +} + +#endif // QTMVVM_IDENTITYEDITDIALOG_P_H diff --git a/src/mvvmdatasyncwidgets/mvvmdatasyncwidgets.pro b/src/mvvmdatasyncwidgets/mvvmdatasyncwidgets.pro index adf1d55..c5df4c8 100644 --- a/src/mvvmdatasyncwidgets/mvvmdatasyncwidgets.pro +++ b/src/mvvmdatasyncwidgets/mvvmdatasyncwidgets.pro @@ -7,13 +7,15 @@ HEADERS += \ datasyncwindow.h \ datasyncwindow_p.h \ exportsetupdialog_p.h \ - changeremotedialog_p.h + changeremotedialog_p.h \ + identityeditdialog_p.h SOURCES += \ datasyncwindow.cpp \ qtmvvmdatasyncwidgets_global.cpp \ exportsetupdialog.cpp \ - changeremotedialog.cpp + changeremotedialog.cpp \ + identityeditdialog.cpp TRANSLATIONS += \ translations/qtmvvmdatasyncwidgets_de.ts \ @@ -43,5 +45,6 @@ qpmx_ts_target.files += translations/qtmvvmdatasyncwidgets_template.ts FORMS += \ datasyncwindow.ui \ exportsetupdialog.ui \ - changeremotedialog.ui + changeremotedialog.ui \ + identityeditdialog.ui diff --git a/src/mvvmdatasyncwidgets/qtmvvmdatasyncwidgets_global.cpp b/src/mvvmdatasyncwidgets/qtmvvmdatasyncwidgets_global.cpp index 92af415..978d3b2 100644 --- a/src/mvvmdatasyncwidgets/qtmvvmdatasyncwidgets_global.cpp +++ b/src/mvvmdatasyncwidgets/qtmvvmdatasyncwidgets_global.cpp @@ -4,10 +4,12 @@ #include "datasyncwindow.h" #include "exportsetupdialog_p.h" #include "changeremotedialog_p.h" +#include "identityeditdialog_p.h" void QtMvvm::registerDataSyncWidgets() { QtMvvm::WidgetsPresenter::registerView(); QtMvvm::WidgetsPresenter::registerView(); QtMvvm::WidgetsPresenter::registerView(); + QtMvvm::WidgetsPresenter::registerView(); }