Browse Source

implemented export view and fixed import/export

pull/2/head
Skycoder42 7 years ago
parent
commit
1613a01c01
  1. 12
      examples/mvvmdatasynccore/DataSyncSampleCore/samplecoreapp.cpp
  2. 2
      src/mvvmcore/message.cpp
  3. 4
      src/mvvmcore/translations/qtmvvmcore_de.ts
  4. 4
      src/mvvmcore/translations/qtmvvmcore_template.ts
  5. 53
      src/mvvmdatasynccore/accountmodel.cpp
  6. 5
      src/mvvmdatasynccore/accountmodel.h
  7. 3
      src/mvvmdatasynccore/accountmodel_p.h
  8. 2
      src/mvvmdatasynccore/datasyncviewmodel.cpp
  9. 169
      src/mvvmdatasynccore/translations/qtmvvmdatasynccore_de.ts
  10. 169
      src/mvvmdatasynccore/translations/qtmvvmdatasynccore_template.ts
  11. 3
      src/mvvmdatasyncwidgets/datasyncwindow.cpp
  12. 21
      src/mvvmdatasyncwidgets/datasyncwindow.ui
  13. 30
      src/mvvmdatasyncwidgets/exportsetupdialog.cpp
  14. 154
      src/mvvmdatasyncwidgets/exportsetupdialog.ui
  15. 36
      src/mvvmdatasyncwidgets/exportsetupdialog_p.h
  16. 15
      src/mvvmdatasyncwidgets/mvvmdatasyncwidgets.pro
  17. 2
      src/mvvmdatasyncwidgets/qtmvvmdatasyncwidgets_global.cpp
  18. 125
      src/mvvmdatasyncwidgets/translations/qtmvvmdatasyncwidgets_de.ts
  19. 125
      src/mvvmdatasyncwidgets/translations/qtmvvmdatasyncwidgets_template.ts
  20. 2
      src/mvvmwidgets/translations/qtmvvmwidgets_de.ts
  21. 2
      src/mvvmwidgets/translations/qtmvvmwidgets_template.ts
  22. 3
      src/mvvmwidgets/widgetspresenter.cpp

12
examples/mvvmdatasynccore/DataSyncSampleCore/samplecoreapp.cpp

@ -21,14 +21,12 @@ void SampleCoreApp::performRegistrations()
int SampleCoreApp::startApp(const QStringList &arguments) int SampleCoreApp::startApp(const QStringList &arguments)
{ {
auto setup = QtDataSync::DefaultSetup;
if(arguments.size() > 1)
setup = arguments.value(1);
try { try {
QtDataSync::Setup() QtDataSync::Setup setup;
.setRemoteConfiguration(QUrl(QStringLiteral("ws://localhost:4242"))) if(arguments.size() > 1)
.create(setup); setup.setLocalDir(arguments.value(1));
setup.setRemoteConfiguration(QUrl(QStringLiteral("ws://localhost:4242")))
.create();
show<SampleViewModel>(); show<SampleViewModel>();
return EXIT_SUCCESS; return EXIT_SUCCESS;
} catch (QException &e) { } catch (QException &e) {

2
src/mvvmcore/message.cpp

@ -575,7 +575,7 @@ void QtMvvm::getOpenFiles(const std::function<void (QList<QUrl>)> &onResult, con
MessageResult *QtMvvm::getSaveFile(const QString &title, const QStringList &supportedMimeTypes, const QUrl &dir) MessageResult *QtMvvm::getSaveFile(const QString &title, const QStringList &supportedMimeTypes, const QUrl &dir)
{ {
MessageConfig config(MessageConfig::TypeFileDialog, MessageConfig::SubTypeOpenFile); MessageConfig config(MessageConfig::TypeFileDialog, MessageConfig::SubTypeSaveFile);
config.setTitle(title); config.setTitle(title);
config.setDefaultValue(dir); config.setDefaultValue(dir);
config.setViewProperty(QStringLiteral("mimeTypes"), supportedMimeTypes); config.setViewProperty(QStringLiteral("mimeTypes"), supportedMimeTypes);

4
src/mvvmcore/translations/qtmvvmcore_de.ts

@ -4,7 +4,7 @@
<context> <context>
<name>MessageConfig</name> <name>MessageConfig</name>
<message> <message>
<location filename="../message.cpp" line="+402"/> <location filename="../message.cpp" line="+414"/>
<source>%1 Version %2</source> <source>%1 Version %2</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -73,7 +73,7 @@
<context> <context>
<name>QtMvvm::SettingsViewModel</name> <name>QtMvvm::SettingsViewModel</name>
<message> <message>
<location filename="../settingsviewmodel.cpp" line="+37"/> <location filename="../settingsviewmodel.cpp" line="+35"/>
<source>Restore Defaults?</source> <source>Restore Defaults?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

4
src/mvvmcore/translations/qtmvvmcore_template.ts

@ -4,7 +4,7 @@
<context> <context>
<name>MessageConfig</name> <name>MessageConfig</name>
<message> <message>
<location filename="../message.cpp" line="+402"/> <location filename="../message.cpp" line="+414"/>
<source>%1 Version %2</source> <source>%1 Version %2</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -73,7 +73,7 @@
<context> <context>
<name>QtMvvm::SettingsViewModel</name> <name>QtMvvm::SettingsViewModel</name>
<message> <message>
<location filename="../settingsviewmodel.cpp" line="+37"/> <location filename="../settingsviewmodel.cpp" line="+35"/>
<source>Restore Defaults?</source> <source>Restore Defaults?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

53
src/mvvmdatasynccore/accountmodel.cpp

@ -1,5 +1,6 @@
#include "accountmodel.h" #include "accountmodel.h"
#include "accountmodel_p.h" #include "accountmodel_p.h"
#include "datasyncviewmodel.h"
#include <QRemoteObjectReplica> #include <QRemoteObjectReplica>
@ -13,29 +14,34 @@ AccountModel::AccountModel(QObject *parent) :
AccountModel::~AccountModel() {} AccountModel::~AccountModel() {}
void AccountModel::setup(AccountManager *manager) void AccountModel::setup(AccountManager *accountManager, SyncManager *syncManager)
{ {
beginResetModel(); beginResetModel();
d->devices.clear(); d->devices.clear();
if(d->manager) if(d->accountManager)
d->manager->disconnect(this); d->accountManager->disconnect(this);
d->manager = manager; d->accountManager = accountManager;
if(d->syncManager)
d->syncManager->disconnect(this);
d->syncManager = syncManager;
endResetModel(); endResetModel();
connect(d->manager, &AccountManager::accountDevices, connect(d->accountManager, &AccountManager::accountDevices,
this, &AccountModel::accountDevices); this, &AccountModel::accountDevices);
connect(d->manager, &AccountManager::importAccepted, connect(d->accountManager, &AccountManager::importAccepted,
this, &AccountModel::reload); this, &AccountModel::reload);
connect(d->manager, &AccountManager::accountAccessGranted, connect(d->accountManager, &AccountManager::accountAccessGranted,
this, &AccountModel::reload); this, &AccountModel::reload);
if(d->manager->replica()->isInitialized()) if(d->accountManager->replica()->isInitialized())
d->manager->listDevices(); d->accountManager->listDevices();
else { else {
connect(d->manager->replica(), &QRemoteObjectReplica::initialized, connect(d->accountManager->replica(), &QRemoteObjectReplica::initialized,
d->manager, &AccountManager::listDevices); d->accountManager, &AccountManager::listDevices);
} }
connect(d->syncManager, &SyncManager::syncStateChanged,
this, &AccountModel::update);
} }
QVariant AccountModel::headerData(int section, Qt::Orientation orientation, int role) const QVariant AccountModel::headerData(int section, Qt::Orientation orientation, int role) const
@ -92,14 +98,14 @@ QVariant AccountModel::data(const QModelIndex &index, int role) const
case NameRole: case NameRole:
return d->devices.value(index.row()).name(); return d->devices.value(index.row()).name();
case FingerPrintRole: case FingerPrintRole:
return d->devices.value(index.row()).fingerprint(); return DataSyncViewModel::formatFingerPrint(d->devices.value(index.row()).fingerprint());
default: default:
break; break;
} }
break; break;
case 1: case 1:
if(role == Qt::DisplayRole) if(role == Qt::DisplayRole)
return d->devices.value(index.row()).fingerprint(); return DataSyncViewModel::formatFingerPrint(d->devices.value(index.row()).fingerprint());
break; break;
default: default:
break; break;
@ -113,15 +119,19 @@ bool AccountModel::removeDevice(const QModelIndex &index)
if (!index.isValid()) if (!index.isValid())
return false; return false;
else { else {
d->manager->removeDevice(d->devices.value(index.row())); d->accountManager->removeDevice(d->devices.value(index.row()));
return true; return true;
} }
} }
void AccountModel::reload() void AccountModel::reload()
{ {
if(d->manager) beginResetModel();
d->manager->listDevices(); d->devices.clear();
endResetModel();
if(d->accountManager)
d->accountManager->listDevices();
} }
void AccountModel::accountDevices(const QList<DeviceInfo> &devices) void AccountModel::accountDevices(const QList<DeviceInfo> &devices)
@ -131,9 +141,18 @@ void AccountModel::accountDevices(const QList<DeviceInfo> &devices)
endResetModel(); endResetModel();
} }
void AccountModel::update(SyncManager::SyncState state)
{
if(state == SyncManager::Disconnected ||
state == SyncManager::Error ||
state == SyncManager::Initializing)
reload();
}
// ------------- Private Implementation ------------- // ------------- Private Implementation -------------
AccountModelPrivate::AccountModelPrivate() : AccountModelPrivate::AccountModelPrivate() :
manager(nullptr), accountManager(nullptr),
syncManager(nullptr),
devices() devices()
{} {}

5
src/mvvmdatasynccore/accountmodel.h

@ -5,6 +5,7 @@
#include <QtCore/qscopedpointer.h> #include <QtCore/qscopedpointer.h>
#include <QtDataSync/accountmanager.h> #include <QtDataSync/accountmanager.h>
#include <QtDataSync/syncmanager.h>
#include "QtMvvmDataSyncCore/qtmvvmdatasynccore_global.h" #include "QtMvvmDataSyncCore/qtmvvmdatasynccore_global.h"
@ -25,7 +26,8 @@ public:
explicit AccountModel(QObject *parent = nullptr); explicit AccountModel(QObject *parent = nullptr);
~AccountModel(); ~AccountModel();
Q_INVOKABLE void setup(QtDataSync::AccountManager *manager); Q_INVOKABLE void setup(QtDataSync::AccountManager *accountManager,
QtDataSync::SyncManager *syncManager);
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override;
@ -42,6 +44,7 @@ public Q_SLOTS:
private Q_SLOTS: private Q_SLOTS:
void accountDevices(const QList<QtDataSync::DeviceInfo> &devices); void accountDevices(const QList<QtDataSync::DeviceInfo> &devices);
void update(QtDataSync::SyncManager::SyncState state);
private: private:
QScopedPointer<AccountModelPrivate> d; QScopedPointer<AccountModelPrivate> d;

3
src/mvvmdatasynccore/accountmodel_p.h

@ -11,7 +11,8 @@ class AccountModelPrivate
public: public:
AccountModelPrivate(); AccountModelPrivate();
QtDataSync::AccountManager *manager; QtDataSync::AccountManager *accountManager;
QtDataSync::SyncManager *syncManager;
QList<QtDataSync::DeviceInfo> devices; QList<QtDataSync::DeviceInfo> devices;
}; };

2
src/mvvmdatasynccore/datasyncviewmodel.cpp

@ -329,7 +329,7 @@ void DataSyncViewModel::onInit(const QVariantHash &params)
this, &DataSyncViewModel::showAccessGranted); this, &DataSyncViewModel::showAccessGranted);
connect(d->accountManager, &AccountManager::accountDevices, connect(d->accountManager, &AccountManager::accountDevices,
this, &DataSyncViewModel::triggerGranted); this, &DataSyncViewModel::triggerGranted);
d->accountModel->setup(d->accountManager); d->accountModel->setup(d->accountManager, d->syncManager);
emit syncManagerChanged(d->syncManager); emit syncManagerChanged(d->syncManager);
emit accountManagerChanged(d->accountManager); emit accountManagerChanged(d->accountManager);

169
src/mvvmdatasynccore/translations/qtmvvmdatasynccore_de.ts

@ -1,4 +1,173 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1" language="de_DE"> <TS version="2.1" language="de_DE">
<context>
<name>QtMvvm::AccountModel</name>
<message>
<location filename="../accountmodel.cpp" line="+50"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<location line="+7"/>
<source>Fingerprint</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtMvvm::DataSyncViewModel</name>
<message>
<location filename="../datasyncviewmodel.cpp" line="+75"/>
<source>Connecting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>Downloading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>Uploading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>Synchronized</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>Error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>Disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+49"/>
<location line="+5"/>
<location line="+286"/>
<source>Import failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-291"/>
<location line="+244"/>
<source>Unsupported URL Scheme: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-238"/>
<location line="+244"/>
<source>Failed to open URL &quot;%1&quot; with error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-234"/>
<location line="+24"/>
<location line="+20"/>
<source>Import account data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-43"/>
<source>Enter the password to decrypt the account data. Then choose whether you want to keep you local data or not:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
<location line="+23"/>
<location line="+31"/>
<source>Reset data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-53"/>
<location line="+23"/>
<location line="+31"/>
<source>Keep data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-34"/>
<source>Keep the local data after changing the account?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+27"/>
<source>Reset Account?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>Do you want to reset your account? You will loose the connection to all other devices and get a new identity. You can either keep your data or reset it as well. This cannot be undone!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+57"/>
<source>Login requested!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>&lt;p&gt;A device wants to log into your account:&lt;/p&gt;&lt;p&gt;Name: %1&lt;br/&gt;Fingerprint: %2&lt;/p&gt;&lt;p&gt;Do you want accept the request?&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+19"/>
<source>Import accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>The partner has accepted the import. You are now logged in.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+13"/>
<source>Account access granted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>&lt;p&gt;Account access has been granted to device:&lt;/p&gt;&lt;p&gt;Name: %1&lt;br/&gt;Fingerprint: %2&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+82"/>
<location line="+6"/>
<location line="+19"/>
<source>Export failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-6"/>
<source>Export completed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>Data was successfully exported.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+13"/>
<source>Export account data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+12"/>
<source>Import completed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>Data was successfully imported.</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS> </TS>

169
src/mvvmdatasynccore/translations/qtmvvmdatasynccore_template.ts

@ -1,4 +1,173 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS> <!DOCTYPE TS>
<TS version="2.1"> <TS version="2.1">
<context>
<name>QtMvvm::AccountModel</name>
<message>
<location filename="../accountmodel.cpp" line="+50"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<location line="+7"/>
<source>Fingerprint</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QtMvvm::DataSyncViewModel</name>
<message>
<location filename="../datasyncviewmodel.cpp" line="+75"/>
<source>Connecting</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>Downloading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>Uploading</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>Synchronized</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>Error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+2"/>
<source>Disconnected</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+49"/>
<location line="+5"/>
<location line="+286"/>
<source>Import failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-291"/>
<location line="+244"/>
<source>Unsupported URL Scheme: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-238"/>
<location line="+244"/>
<source>Failed to open URL &quot;%1&quot; with error: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-234"/>
<location line="+24"/>
<location line="+20"/>
<source>Import account data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-43"/>
<source>Enter the password to decrypt the account data. Then choose whether you want to keep you local data or not:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
<location line="+23"/>
<location line="+31"/>
<source>Reset data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-53"/>
<location line="+23"/>
<location line="+31"/>
<source>Keep data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-34"/>
<source>Keep the local data after changing the account?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+27"/>
<source>Reset Account?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>Do you want to reset your account? You will loose the connection to all other devices and get a new identity. You can either keep your data or reset it as well. This cannot be undone!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+57"/>
<source>Login requested!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>&lt;p&gt;A device wants to log into your account:&lt;/p&gt;&lt;p&gt;Name: %1&lt;br/&gt;Fingerprint: %2&lt;/p&gt;&lt;p&gt;Do you want accept the request?&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+19"/>
<source>Import accepted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>The partner has accepted the import. You are now logged in.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+13"/>
<source>Account access granted</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>&lt;p&gt;Account access has been granted to device:&lt;/p&gt;&lt;p&gt;Name: %1&lt;br/&gt;Fingerprint: %2&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+82"/>
<location line="+6"/>
<location line="+19"/>
<source>Export failed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="-6"/>
<source>Export completed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>Data was successfully exported.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+13"/>
<source>Export account data</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+12"/>
<source>Import completed</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+1"/>
<source>Data was successfully imported.</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS> </TS>

3
src/mvvmdatasyncwidgets/datasyncwindow.cpp

@ -111,6 +111,9 @@ void DataSyncWindow::viewModelReady()
d->ui->actionUpdate_Exchange_Key, [this](){ d->ui->actionUpdate_Exchange_Key, [this](){
d->ui->actionUpdate_Exchange_Key->setEnabled(false); d->ui->actionUpdate_Exchange_Key->setEnabled(false);
}); });
//update header
d->ui->treeView->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
} }
void DataSyncWindow::removeCurrentDevice() void DataSyncWindow::removeCurrentDevice()

21
src/mvvmdatasyncwidgets/datasyncwindow.ui

@ -172,6 +172,27 @@
<property name="contextMenuPolicy"> <property name="contextMenuPolicy">
<enum>Qt::ActionsContextMenu</enum> <enum>Qt::ActionsContextMenu</enum>
</property> </property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="showDropIndicator" stdset="0">
<bool>false</bool>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="rootIsDecorated">
<bool>false</bool>
</property>
<property name="itemsExpandable">
<bool>false</bool>
</property>
<property name="animated">
<bool>true</bool>
</property>
<property name="expandsOnDoubleClick">
<bool>false</bool>
</property>
</widget> </widget>
</item> </item>
<item> <item>

30
src/mvvmdatasyncwidgets/exportsetupdialog.cpp

@ -0,0 +1,30 @@
#include "exportsetupdialog_p.h"
#include "ui_exportsetupdialog.h"
#include <QtMvvmCore/Binding>
using namespace QtMvvm;
ExportSetupDialog::ExportSetupDialog(ViewModel *viewModel, QWidget *parent) :
QDialog(parent),
_viewModel(static_cast<ExportSetupViewModel*>(viewModel)),
ui(new Ui::ExportSetupDialog)
{
ui->setupUi(this);
bind(_viewModel, "trusted",
ui->trustedCheckBox, "checked");
bind(_viewModel, "includeServer",
ui->includeServerCheckBox, "checked");
bind(_viewModel, "password",
ui->passwordLineEdit, "text");
bind(_viewModel, "valid",
ui->buttonBox->button(QDialogButtonBox::Ok), "enabled",
Binding::OneWayToView);
}
ExportSetupDialog::~ExportSetupDialog() {}
void ExportSetupDialog::accept()
{
if(_viewModel->completeSetup())
QDialog::accept();
}

154
src/mvvmdatasyncwidgets/exportsetupdialog.ui

@ -0,0 +1,154 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ExportSetupDialog</class>
<widget class="QDialog" name="ExportSetupDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>296</width>
<height>124</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<property name="sizeGripEnabled">
<bool>true</bool>
</property>
<property name="modal">
<bool>true</bool>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="trustedLabel">
<property name="text">
<string>&amp;Trusted:</string>
</property>
<property name="buddy">
<cstring>trustedCheckBox</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="trustedCheckBox"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="includeServerLabel">
<property name="text">
<string>Include &amp;Server:</string>
</property>
<property name="buddy">
<cstring>includeServerCheckBox</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="includeServerCheckBox"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="passwordLabel">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>&amp;Password</string>
</property>
<property name="buddy">
<cstring>passwordLineEdit</cstring>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="passwordLineEdit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
<property name="clearButtonEnabled">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>ExportSetupDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>227</x>
<y>103</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>123</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>ExportSetupDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>286</x>
<y>109</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>123</y>
</hint>
</hints>
</connection>
<connection>
<sender>trustedCheckBox</sender>
<signal>toggled(bool)</signal>
<receiver>passwordLabel</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>112</x>
<y>20</y>
</hint>
<hint type="destinationlabel">
<x>39</x>
<y>73</y>
</hint>
</hints>
</connection>
<connection>
<sender>trustedCheckBox</sender>
<signal>toggled(bool)</signal>
<receiver>passwordLineEdit</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>176</x>
<y>20</y>
</hint>
<hint type="destinationlabel">
<x>190</x>
<y>68</y>
</hint>
</hints>
</connection>
</connections>
</ui>

36
src/mvvmdatasyncwidgets/exportsetupdialog_p.h

@ -0,0 +1,36 @@
#ifndef QTMVVM_EXPORTSETUPDIALOG_P_H
#define QTMVVM_EXPORTSETUPDIALOG_P_H
#include <QtCore/QScopedPointer>
#include <QtWidgets/QDialog>
#include <QtMvvmDataSyncCore/private/exportsetupviewmodel_p.h>
#include "qtmvvmdatasyncwidgets_global.h"
namespace Ui {
class ExportSetupDialog;
}
namespace QtMvvm {
class Q_MVVMDATASYNCWIDGETS_EXPORT ExportSetupDialog : public QDialog
{
Q_OBJECT
public:
Q_INVOKABLE explicit ExportSetupDialog(QtMvvm::ViewModel *viewModel, QWidget *parent = nullptr);
~ExportSetupDialog();
public Q_SLOTS:
void accept() override;
private:
ExportSetupViewModel *_viewModel;
QScopedPointer<Ui::ExportSetupDialog> ui;
};
}
#endif // EXPORTSETUPDIALOG_P_H

15
src/mvvmdatasyncwidgets/mvvmdatasyncwidgets.pro

@ -1,15 +1,17 @@
TARGET = QtMvvmDataSyncWidgets TARGET = QtMvvmDataSyncWidgets
QT = core gui mvvmdatasynccore mvvmwidgets QT = core gui mvvmdatasynccore mvvmwidgets mvvmdatasynccore-private
HEADERS += \ HEADERS += \
qtmvvmdatasyncwidgets_global.h \ qtmvvmdatasyncwidgets_global.h \
datasyncwindow.h \ datasyncwindow.h \
datasyncwindow_p.h datasyncwindow_p.h \
exportsetupdialog_p.h
SOURCES += \ SOURCES += \
datasyncwindow.cpp \ datasyncwindow.cpp \
qtmvvmdatasyncwidgets_global.cpp qtmvvmdatasyncwidgets_global.cpp \
exportsetupdialog.cpp
TRANSLATIONS += \ TRANSLATIONS += \
translations/qtmvvmdatasyncwidgets_de.ts \ translations/qtmvvmdatasyncwidgets_de.ts \
@ -37,5 +39,6 @@ qpmx_ts_target.files -= $$OUT_PWD/$$QPMX_WORKINGDIR/qtmvvmdatasyncwidgets_templa
qpmx_ts_target.files += translations/qtmvvmdatasyncwidgets_template.ts qpmx_ts_target.files += translations/qtmvvmdatasyncwidgets_template.ts
FORMS += \ FORMS += \
datasyncwindow.ui datasyncwindow.ui \
exportsetupdialog.ui

2
src/mvvmdatasyncwidgets/qtmvvmdatasyncwidgets_global.cpp

@ -2,8 +2,10 @@
#include <QtMvvmWidgets/WidgetsPresenter> #include <QtMvvmWidgets/WidgetsPresenter>
#include "datasyncwindow.h" #include "datasyncwindow.h"
#include "exportsetupdialog_p.h"
void QtMvvm::registerDataSyncWidgets() void QtMvvm::registerDataSyncWidgets()
{ {
QtMvvm::WidgetsPresenter::registerView<DataSyncWindow>(); QtMvvm::WidgetsPresenter::registerView<DataSyncWindow>();
QtMvvm::WidgetsPresenter::registerView<ExportSetupDialog>();
} }

125
src/mvvmdatasyncwidgets/translations/qtmvvmdatasyncwidgets_de.ts

@ -0,0 +1,125 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="de_DE">
<context>
<name>DataSyncWindow</name>
<message>
<location filename="../datasyncwindow.ui" line="+14"/>
<source>Synchronization</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+6"/>
<source>Synchronization &amp;enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+29"/>
<source>&amp;Synchronize</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+153"/>
<source>Account &amp;actions</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+23"/>
<source>&amp;Import from file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
<source>Ctrl+I</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>&amp;Export to file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
<source>Ctrl+E</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>&amp;Network exchange</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
<source>Ctrl+N</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>Rese&amp;t identity</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>&amp;Change remote server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>&amp;Remove selected device</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
<source>Del</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>&amp;Identity</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
<source>Ctrl+U</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>Update exchange &amp;key</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>Re&amp;load device list</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
<source>Ctrl+R</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ExportSetupDialog</name>
<message>
<location filename="../exportsetupdialog.ui" line="+14"/>
<source>Dialog</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+12"/>
<source>&amp;Trusted:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+13"/>
<source>Include &amp;Server:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<source>&amp;Password</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

125
src/mvvmdatasyncwidgets/translations/qtmvvmdatasyncwidgets_template.ts

@ -0,0 +1,125 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>DataSyncWindow</name>
<message>
<location filename="../datasyncwindow.ui" line="+14"/>
<source>Synchronization</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+6"/>
<source>Synchronization &amp;enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+29"/>
<source>&amp;Synchronize</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+153"/>
<source>Account &amp;actions</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+23"/>
<source>&amp;Import from file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
<source>Ctrl+I</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>&amp;Export to file</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
<source>Ctrl+E</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>&amp;Network exchange</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
<source>Ctrl+N</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>Rese&amp;t identity</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>&amp;Change remote server</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>&amp;Remove selected device</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
<source>Del</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>&amp;Identity</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
<source>Ctrl+U</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>Update exchange &amp;key</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+9"/>
<source>Re&amp;load device list</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+3"/>
<source>Ctrl+R</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ExportSetupDialog</name>
<message>
<location filename="../exportsetupdialog.ui" line="+14"/>
<source>Dialog</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+12"/>
<source>&amp;Trusted:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+13"/>
<source>Include &amp;Server:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location line="+16"/>
<source>&amp;Password</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

2
src/mvvmwidgets/translations/qtmvvmwidgets_de.ts

@ -12,7 +12,7 @@
<context> <context>
<name>QtMvvm::WidgetsPresenter</name> <name>QtMvvm::WidgetsPresenter</name>
<message> <message>
<location filename="../widgetspresenter.cpp" line="+234"/> <location filename="../widgetspresenter.cpp" line="+246"/>
<source>About</source> <source>About</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

2
src/mvvmwidgets/translations/qtmvvmwidgets_template.ts

@ -12,7 +12,7 @@
<context> <context>
<name>QtMvvm::WidgetsPresenter</name> <name>QtMvvm::WidgetsPresenter</name>
<message> <message>
<location filename="../widgetspresenter.cpp" line="+234"/> <location filename="../widgetspresenter.cpp" line="+246"/>
<source>About</source> <source>About</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

3
src/mvvmwidgets/widgetspresenter.cpp

@ -336,7 +336,8 @@ void WidgetsPresenter::presentInputDialog(const MessageConfig &config, QPointer<
auto btns = config.buttonTexts(); auto btns = config.buttonTexts();
for(auto it = btns.constBegin(); it != btns.constEnd(); it++){ for(auto it = btns.constBegin(); it != btns.constEnd(); it++){
auto sBtn = static_cast<QDialogButtonBox::StandardButton>(it.key()); auto sBtn = static_cast<QDialogButtonBox::StandardButton>(it.key());
btnBox->addButton(sBtn); if(!btnBox->standardButtons().testFlag(sBtn))
btnBox->addButton(sBtn);
btnBox->button(sBtn)->setText(it.value()); btnBox->button(sBtn)->setText(it.value());
} }
layout->addWidget(btnBox); layout->addWidget(btnBox);

Loading…
Cancel
Save