Browse Source

added very basic datasync sample

pull/2/head
Skycoder42 7 years ago
parent
commit
78a08feb71
  1. 7
      examples/examples.pro
  2. 2
      examples/mvvmcore/SampleCore/sampleviewmodel.cpp
  3. 19
      examples/mvvmdatasynccore/DataSyncSampleCore/DataSyncSampleCore.pro
  4. 36
      examples/mvvmdatasynccore/DataSyncSampleCore/samplecoreapp.cpp
  5. 21
      examples/mvvmdatasynccore/DataSyncSampleCore/samplecoreapp.h
  6. 1
      examples/mvvmdatasynccore/DataSyncSampleCore/sampledata.cpp
  7. 18
      examples/mvvmdatasynccore/DataSyncSampleCore/sampledata.h
  8. 32
      examples/mvvmdatasynccore/DataSyncSampleCore/sampleviewmodel.cpp
  9. 33
      examples/mvvmdatasynccore/DataSyncSampleCore/sampleviewmodel.h
  10. 5
      examples/mvvmdatasynccore/mvvmdatasynccore.pro
  11. 43
      examples/mvvmdatasyncwidgets/DataSyncSampleWidgets/DataSyncSampleWidgets.pro
  12. 18
      examples/mvvmdatasyncwidgets/DataSyncSampleWidgets/main.cpp
  13. 29
      examples/mvvmdatasyncwidgets/DataSyncSampleWidgets/samplewindow.cpp
  14. 28
      examples/mvvmdatasyncwidgets/DataSyncSampleWidgets/samplewindow.h
  15. 73
      examples/mvvmdatasyncwidgets/DataSyncSampleWidgets/samplewindow.ui
  16. 5
      examples/mvvmdatasyncwidgets/mvvmdatasyncwidgets.pro
  17. 2
      examples/mvvmwidgets/SampleWidgets/main.cpp
  18. 20
      src/mvvmdatasyncwidgets/datasyncwindow.cpp
  19. 29
      src/mvvmdatasyncwidgets/datasyncwindow.h
  20. 21
      src/mvvmdatasyncwidgets/datasyncwindow.ui
  21. 24
      src/mvvmdatasyncwidgets/datasyncwindow_p.h
  22. 41
      src/mvvmdatasyncwidgets/mvvmdatasyncwidgets.pro
  23. 14
      src/mvvmdatasyncwidgets/qpmx.json
  24. 9
      src/mvvmdatasyncwidgets/qtmvvmdatasyncwidgets_global.cpp
  25. 18
      src/mvvmdatasyncwidgets/qtmvvmdatasyncwidgets_global.h
  26. 3
      src/src.pro
  27. 3
      sync.profile

7
examples/examples.pro

@ -2,6 +2,11 @@ TEMPLATE = subdirs
SUBDIRS = mvvmcore \
mvvmwidgets \
mvvmquick
mvvmquick
qtHaveModule(datasync) {
SUBDIRS += mvvmdatasynccore \
mvvmdatasyncwidgets
}
CONFIG += ordered

2
examples/mvvmcore/SampleCore/sampleviewmodel.cpp

@ -1,5 +1,5 @@
#include "sampleviewmodel.h"
#include <QDebug>
#include <QtCore/QDebug>
#include <QtMvvmCore/Messages>
#include <QtMvvmCore/SettingsViewModel>
#include "resultviewmodel.h"

19
examples/mvvmdatasynccore/DataSyncSampleCore/DataSyncSampleCore.pro

@ -0,0 +1,19 @@
TEMPLATE = lib
QT = core gui mvvmcore mvvmdatasynccore
CONFIG += static
TARGET = DataSyncSampleCore
HEADERS += \
samplecoreapp.h \
sampleviewmodel.h \
sampledata.h
SOURCES += \
samplecoreapp.cpp \
sampleviewmodel.cpp \
sampledata.cpp
target.path = $$[QT_INSTALL_EXAMPLES]/mvvmdatasynccore/$$TARGET
INSTALLS += target

36
examples/mvvmdatasynccore/DataSyncSampleCore/samplecoreapp.cpp

@ -0,0 +1,36 @@
#include "samplecoreapp.h"
#include "sampleviewmodel.h"
#include <QtCore/QDebug>
#include <QtCore/QLoggingCategory>
#include <QtMvvmCore/QtMvvmCoreVersion>
#include <QtDataSync/Setup>
SampleCoreApp::SampleCoreApp(QObject *parent) :
CoreApp(parent)
{
QCoreApplication::setApplicationName(QStringLiteral("QtMvvmDataSyncSample"));
QCoreApplication::setApplicationVersion(QStringLiteral(QTMVVMCORE_VERSION_STR));
QCoreApplication::setOrganizationName(QStringLiteral("Skycoder42"));
}
void SampleCoreApp::performRegistrations()
{
qRegisterMetaType<SampleData>();
QLoggingCategory::setFilterRules(QStringLiteral("qtmvvm.debug=true"));
}
int SampleCoreApp::startApp(const QStringList &arguments)
{
auto setup = QtDataSync::DefaultSetup;
if(arguments.size() > 1)
setup = arguments.value(1);
try {
QtDataSync::Setup().create(setup);
show<SampleViewModel>();
return EXIT_SUCCESS;
} catch (QException &e) {
qCritical() << e.what();
return EXIT_FAILURE;
}
}

21
examples/mvvmdatasynccore/DataSyncSampleCore/samplecoreapp.h

@ -0,0 +1,21 @@
#ifndef SAMPLECOREAPP_H
#define SAMPLECOREAPP_H
#include <QtMvvmCore/CoreApp>
class SampleCoreApp : public QtMvvm::CoreApp
{
Q_OBJECT
public:
SampleCoreApp(QObject *parent = nullptr);
protected:
void performRegistrations() override;
int startApp(const QStringList &arguments) override;
};
#undef coreApp
#define coreApp static_cast<SampleCoreApp*>(QtMvvm::CoreApp::instance())
#endif // SAMPLECOREAPP_H

1
examples/mvvmdatasynccore/DataSyncSampleCore/sampledata.cpp

@ -0,0 +1 @@
#include "sampledata.h"

18
examples/mvvmdatasynccore/DataSyncSampleCore/sampledata.h

@ -0,0 +1,18 @@
#ifndef SAMPLEDATA_H
#define SAMPLEDATA_H
#include <QtCore/QObject>
class SampleData
{
Q_GADGET
Q_PROPERTY(QString key MEMBER key USER true)
public:
QString key;
};
Q_DECLARE_METATYPE(SampleData)
#endif // SAMPLEDATA_H

32
examples/mvvmdatasynccore/DataSyncSampleCore/sampleviewmodel.cpp

@ -0,0 +1,32 @@
#include "sampleviewmodel.h"
#include <QtCore/QDebug>
#include <QtMvvmDataSyncCore/DataSyncViewModel>
SampleViewModel::SampleViewModel(QObject *parent) :
ViewModel(parent),
_model(new QtDataSync::DataStoreModel(this))
{
_model->setTypeId<SampleData>();
}
QtDataSync::DataStoreModel *SampleViewModel::model() const
{
return _model;
}
void SampleViewModel::addData(const QString &key)
{
_model->store()->save<SampleData>({key});
}
void SampleViewModel::removeAt(int index)
{
auto mIndex = _model->index(index);
if(mIndex.isValid())
_model->store()->remove<SampleData>(_model->object<SampleData>(mIndex).key);
}
void SampleViewModel::showSyncInfo()
{
show<QtMvvm::DataSyncViewModel>();
}

33
examples/mvvmdatasynccore/DataSyncSampleCore/sampleviewmodel.h

@ -0,0 +1,33 @@
#ifndef SAMPLEVIEWMODEL_H
#define SAMPLEVIEWMODEL_H
#include <QtCore/QStringListModel>
#include <QtMvvmCore/ViewModel>
#include <QtDataSync/DataStoreModel>
#include "sampledata.h"
class SampleViewModel : public QtMvvm::ViewModel
{
Q_OBJECT
Q_PROPERTY(QtDataSync::DataStoreModel* model READ model CONSTANT)
public:
Q_INVOKABLE explicit SampleViewModel(QObject *parent = nullptr);
QtDataSync::DataStoreModel* model() const;
public Q_SLOTS:
void addData(const QString &key);
void removeAt(int index);
void showSyncInfo();
private:
QtDataSync::DataStoreModel *_model;
};
#endif // SAMPLEVIEWMODEL_H

5
examples/mvvmdatasynccore/mvvmdatasynccore.pro

@ -0,0 +1,5 @@
TEMPLATE = subdirs
QT_FOR_CONFIG += core
SUBDIRS += \
DataSyncSampleCore

43
examples/mvvmdatasyncwidgets/DataSyncSampleWidgets/DataSyncSampleWidgets.pro

@ -0,0 +1,43 @@
TEMPLATE = app
QT += core gui widgets mvvmwidgets mvvmdatasyncwidgets
TARGET = DataSyncSampleWidgets
HEADERS += \
samplewindow.h
SOURCES += \
main.cpp \
samplewindow.cpp
FORMS += \
samplewindow.ui
target.path = $$[QT_INSTALL_EXAMPLES]/mvvmdatasyncwidgets/$$TARGET
INSTALLS += target
#not found by linker?
linux:!android {
LIBS += -L$$OUT_PWD/../../../lib #required to make this the first place to search
LIBS += -L$$[QT_INSTALL_LIBS] -licudata
LIBS += -L$$[QT_INSTALL_LIBS] -licui18n
LIBS += -L$$[QT_INSTALL_LIBS] -licuuc
}
#add lib dir to rpath
mac: QMAKE_LFLAGS += '-Wl,-rpath,\'$$OUT_PWD/../../../lib\''
#link to core lib
win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../../mvvmdatasynccore/DataSyncSampleCore/release/ -lDataSyncSampleCore
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../../mvvmdatasynccore/DataSyncSampleCore/debug/ -lDataSyncSampleCore
else:unix: LIBS += -L$$OUT_PWD/../../mvvmdatasynccore/DataSyncSampleCore/ -lDataSyncSampleCore
INCLUDEPATH += $$PWD/../../mvvmdatasynccore/DataSyncSampleCore
DEPENDPATH += $$PWD/../../mvvmdatasynccore/DataSyncSampleCore
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../../mvvmdatasynccore/DataSyncSampleCore/release/libDataSyncSampleCore.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../../mvvmdatasynccore/DataSyncSampleCore/debug/libDataSyncSampleCore.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../../mvvmdatasynccore/DataSyncSampleCore/release/DataSyncSampleCore.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../../mvvmdatasynccore/DataSyncSampleCore/debug/DataSyncSampleCore.lib
else:unix: PRE_TARGETDEPS += $$OUT_PWD/../../mvvmdatasynccore/DataSyncSampleCore/libDataSyncSampleCore.a

18
examples/mvvmdatasyncwidgets/DataSyncSampleWidgets/main.cpp

@ -0,0 +1,18 @@
#include <QtWidgets/QApplication>
#include <QtMvvmWidgets/WidgetsPresenter>
#include <samplecoreapp.h>
#include <QtMvvmDataSyncWidgets/qtmvvmdatasyncwidgets_global.h>
#include "samplewindow.h"
QTMVVM_REGISTER_CORE_APP(SampleCoreApp)
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QtMvvm::registerDataSyncWidgets();
QtMvvm::WidgetsPresenter::registerView<SampleWindow>();
return a.exec();
}

29
examples/mvvmdatasyncwidgets/DataSyncSampleWidgets/samplewindow.cpp

@ -0,0 +1,29 @@
#include "samplewindow.h"
#include "ui_samplewindow.h"
SampleWindow::SampleWindow(QtMvvm::ViewModel *viewModel, QWidget *parent) :
QMainWindow(parent),
_viewModel(static_cast<SampleViewModel*>(viewModel)),
ui(new Ui::SampleWindow)
{
ui->setupUi(this);
ui->listView->setModel(_viewModel->model());
connect(ui->syncButton, &QPushButton::clicked,
_viewModel, &SampleViewModel::showSyncInfo);
}
SampleWindow::~SampleWindow()
{
delete ui;
}
void SampleWindow::on_addButton_clicked()
{
_viewModel->addData(ui->keyEdit->text());
}
void SampleWindow::on_removeButton_clicked()
{
_viewModel->removeAt(ui->listView->currentIndex().row());
}

28
examples/mvvmdatasyncwidgets/DataSyncSampleWidgets/samplewindow.h

@ -0,0 +1,28 @@
#ifndef SAMPLEWINDOW_H
#define SAMPLEWINDOW_H
#include <QtWidgets/QMainWindow>
#include <sampleviewmodel.h>
namespace Ui {
class SampleWindow;
}
class SampleWindow : public QMainWindow
{
Q_OBJECT
public:
Q_INVOKABLE explicit SampleWindow(QtMvvm::ViewModel *viewModel, QWidget *parent = nullptr);
~SampleWindow();
private Q_SLOTS:
void on_addButton_clicked();
void on_removeButton_clicked();
private:
SampleViewModel *_viewModel;
Ui::SampleWindow *ui;
};
#endif // SAMPLEWINDOW_H

73
examples/mvvmdatasyncwidgets/DataSyncSampleWidgets/samplewindow.ui

@ -0,0 +1,73 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>SampleWindow</class>
<widget class="QMainWindow" name="SampleWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>479</width>
<height>329</height>
</rect>
</property>
<property name="windowTitle">
<string>SampleWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QListView" name="listView"/>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="keyEdit">
<property name="placeholderText">
<string>Key</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="addButton">
<property name="text">
<string>Add</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="removeButton">
<property name="text">
<string>Remove</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="syncButton">
<property name="text">
<string>Sync Status</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>

5
examples/mvvmdatasyncwidgets/mvvmdatasyncwidgets.pro

@ -0,0 +1,5 @@
TEMPLATE = subdirs
QT_FOR_CONFIG += widgets
SUBDIRS += \
DataSyncSampleWidgets

2
examples/mvvmwidgets/SampleWidgets/main.cpp

@ -1,4 +1,4 @@
#include <QApplication>
#include <QtWidgets/QApplication>
#include <QtMvvmCore/ServiceRegistry>
#include <QtMvvmWidgets/WidgetsPresenter>
#include <samplecoreapp.h>

20
src/mvvmdatasyncwidgets/datasyncwindow.cpp

@ -0,0 +1,20 @@
#include "datasyncwindow.h"
#include "datasyncwindow_p.h"
#include "ui_datasyncwindow.h"
using namespace QtMvvm;
DataSyncWindow::DataSyncWindow(QtMvvm::ViewModel *viewModel, QWidget *parent) :
QWidget(parent, Qt::Window),
d(new DataSyncWindowPrivate(this, viewModel))
{
d->ui->setupUi(this);
}
DataSyncWindow::~DataSyncWindow() {}
// ------------- Private Implementation -------------
DataSyncWindowPrivate::DataSyncWindowPrivate(DataSyncWindow *q_ptr, ViewModel *viewModel) :
viewModel(static_cast<DataSyncViewModel*>(viewModel)),
ui(new Ui::DataSyncWindow())
{}

29
src/mvvmdatasyncwidgets/datasyncwindow.h

@ -0,0 +1,29 @@
#ifndef QTMVVM_DATASYNCWINDOW_H
#define QTMVVM_DATASYNCWINDOW_H
#include <QtCore/QScopedPointer>
#include <QtWidgets/QWidget>
#include <QtMvvmDataSyncCore/DataSyncViewModel>
#include "QtMvvmDataSyncWidgets/qtmvvmdatasyncwidgets_global.h"
namespace QtMvvm {
class DataSyncWindowPrivate;
class Q_MVVMDATASYNCWIDGETS_EXPORT DataSyncWindow : public QWidget
{
Q_OBJECT
public:
Q_INVOKABLE explicit DataSyncWindow(QtMvvm::ViewModel *viewModel, QWidget *parent = nullptr);
~DataSyncWindow();
private:
QScopedPointer<DataSyncWindowPrivate> d;
};
}
#endif // QTMVVM_DATASYNCWINDOW_H

21
src/mvvmdatasyncwidgets/datasyncwindow.ui

@ -0,0 +1,21 @@
<ui version="4.0">
<author/>
<comment/>
<exportmacro/>
<class>DataSyncWindow</class>
<widget name="DataSyncWindow" class="QWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
</widget>
<pixmapfunction/>
<connections/>
</ui>

24
src/mvvmdatasyncwidgets/datasyncwindow_p.h

@ -0,0 +1,24 @@
#ifndef QTMVVM_DATASYNCWINDOW_P_H
#define QTMVVM_DATASYNCWINDOW_P_H
#include "qtmvvmdatasyncwidgets_global.h"
#include "datasyncwindow.h"
namespace Ui {
class DataSyncWindow;
}
namespace QtMvvm {
class DataSyncWindowPrivate
{
public:
DataSyncWindowPrivate(DataSyncWindow *q_ptr, ViewModel *viewModel);
DataSyncViewModel *viewModel;
QScopedPointer<Ui::DataSyncWindow> ui;
};
}
#endif // QTMVVM_DATASYNCWINDOW_P_H

41
src/mvvmdatasyncwidgets/mvvmdatasyncwidgets.pro

@ -0,0 +1,41 @@
TARGET = QtMvvmDataSyncWidgets
QT = core gui mvvmdatasynccore mvvmwidgets
HEADERS += \
qtmvvmdatasyncwidgets_global.h \
datasyncwindow.h \
datasyncwindow_p.h
SOURCES += \
datasyncwindow.cpp \
qtmvvmdatasyncwidgets_global.cpp
TRANSLATIONS += \
translations/qtmvvmdatasyncwidgets_de.ts \
translations/qtmvvmdatasyncwidgets_template.ts
DISTFILES += $$TRANSLATIONS
qpmx_ts_target.path = $$[QT_INSTALL_TRANSLATIONS]
qpmx_ts_target.depends += lrelease
load(qt_module)
win32 {
QMAKE_TARGET_PRODUCT = "$$TARGET"
QMAKE_TARGET_COMPANY = "Skycoder42"
QMAKE_TARGET_COPYRIGHT = "Felix Barz"
} else:mac {
QMAKE_TARGET_BUNDLE_PREFIX = "com.skycoder42."
}
!ReleaseBuild:!DebugBuild:!system(qpmx -d $$shell_quote($$_PRO_FILE_PWD_) --qmake-run init $$QPMX_EXTRA_OPTIONS $$shell_quote($$QMAKE_QMAKE) $$shell_quote($$OUT_PWD)): error(qpmx initialization failed. Check the compilation log for details.)
else: include($$OUT_PWD/qpmx_generated.pri)
qpmx_ts_target.files -= $$OUT_PWD/$$QPMX_WORKINGDIR/qtmvvmdatasyncwidgets_template.qm
qpmx_ts_target.files += translations/qtmvvmdatasyncwidgets_template.ts
FORMS += \
datasyncwindow.ui

14
src/mvvmdatasyncwidgets/qpmx.json

@ -0,0 +1,14 @@
{
"dependencies": [],
"license": {
"file": "",
"name": ""
},
"prcFile": "",
"priFile": "",
"priIncludes": [
],
"publishers": {
},
"source": false
}

9
src/mvvmdatasyncwidgets/qtmvvmdatasyncwidgets_global.cpp

@ -0,0 +1,9 @@
#include "qtmvvmdatasyncwidgets_global.h"
#include <QtMvvmWidgets/WidgetsPresenter>
#include "datasyncwindow.h"
void QtMvvm::registerDataSyncWidgets()
{
QtMvvm::WidgetsPresenter::registerView<DataSyncWindow>();
}

18
src/mvvmdatasyncwidgets/qtmvvmdatasyncwidgets_global.h

@ -0,0 +1,18 @@
#ifndef MVVMDATASYNCWIDGETS_GLOBAL_H
#define MVVMDATASYNCWIDGETS_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(QT_BUILD_MVVMDATASYNCWIDGETS_LIB)
# define Q_MVVMDATASYNCWIDGETS_EXPORT Q_DECL_EXPORT
#else
# define Q_MVVMDATASYNCWIDGETS_EXPORT Q_DECL_IMPORT
#endif
namespace QtMvvm {
Q_MVVMDATASYNCWIDGETS_EXPORT void registerDataSyncWidgets();
}
#endif // MVVMDATASYNCWIDGETS_GLOBAL_H

3
src/src.pro

@ -7,7 +7,8 @@ SUBDIRS += mvvmcore \
imports
qtHaveModule(datasync) {
SUBDIRS += mvvmdatasynccore
SUBDIRS += mvvmdatasynccore \
mvvmdatasyncwidgets
}
prepareRecursiveTarget(lrelease)

3
sync.profile

@ -2,7 +2,8 @@
"QtMvvmCore" => "$basedir/src/mvvmcore",
"QtMvvmWidgets" => "$basedir/src/mvvmwidgets",
"QtMvvmQuick" => "$basedir/src/mvvmquick",
"QtMvvmDataSyncCore" => "$basedir/src/mvvmdatasynccore"
"QtMvvmDataSyncCore" => "$basedir/src/mvvmdatasynccore",
"QtMvvmDataSyncWidgets" => "$basedir/src/mvvmdatasyncwidgets"
);
# Force generation of camel case headers for classes inside QtDataSync namespaces

Loading…
Cancel
Save