Add simple demo GUI

This commit is contained in:
Nathan Hourt 2015-07-10 17:37:22 -04:00
parent e8d2b45d67
commit 81dd83226b
8 changed files with 226 additions and 0 deletions

View file

@ -2,3 +2,9 @@ add_subdirectory( cli_wallet )
add_subdirectory( witness_node )
add_subdirectory( js_operation_serializer )
add_subdirectory( size_checker )
set(BUILD_QT_GUI FALSE CACHE BOOL "Build the Qt-based light client GUI")
if(BUILD_QT_GUI)
add_subdirectory(light_client)
endif()

View file

@ -0,0 +1,19 @@
cmake_minimum_required(VERSION 2.8.11)
project(light_client)
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)
# Instruct CMake to run rcc automatically when needed.
set(CMAKE_AUTORCC ON)
find_package(Qt5Core)
find_package(Qt5Widgets)
find_package(Qt5Quick)
file(GLOB QML qml/*)
add_executable(light_client ClientDataModel.cpp ClientDataModel.hpp main.cpp ${QML})
target_link_libraries(light_client PRIVATE Qt5::Core Qt5::Widgets Qt5::Quick graphene_chain graphene_utilities fc)

View file

@ -0,0 +1,23 @@
#include "ClientDataModel.hpp"
Account* ClientDataModel::getAccount(quint64 id) const
{
auto acct = new Account;
acct->setProperty("id", id);
acct->setProperty("name", "joe");
return acct;
}
Account*ClientDataModel::getAccount(QString name) const
{
auto acct = new Account;
acct->setProperty("id", 800);
acct->setProperty("name", name);
return acct;
}
QQmlListProperty<Balance> Account::balances()
{
return QQmlListProperty<Balance>(this, m_balances);
}

View file

@ -0,0 +1,54 @@
#pragma once
#include <QObject>
#include <QQmlListProperty>
class Asset : public QObject {
Q_OBJECT
Q_PROPERTY(QString symbol MEMBER symbol)
Q_PROPERTY(quint64 id MEMBER id)
Q_PROPERTY(quint8 precision MEMBER precision)
QString symbol;
quint64 id;
quint8 precision;
};
class Balance : public QObject {
Q_OBJECT
Q_PROPERTY(Asset* type MEMBER type)
Q_PROPERTY(qint64 amount MEMBER amount)
Q_PROPERTY(quint64 id MEMBER id)
Asset* type;
qint64 amount;
quint64 id;
};
class Account : public QObject {
Q_OBJECT
Q_PROPERTY(QString name MEMBER name)
Q_PROPERTY(quint64 id MEMBER id)
Q_PROPERTY(QQmlListProperty<Balance> balances READ balances)
QString name;
quint64 id;
QList<Balance*> m_balances;
public:
Account(QObject* parent = nullptr)
: QObject(parent){}
QQmlListProperty<Balance> balances();
};
class ClientDataModel : public QObject {
Q_OBJECT
public:
Q_INVOKABLE Account* getAccount(quint64 id)const;
Q_INVOKABLE Account* getAccount(QString name)const;
};

View file

@ -0,0 +1,21 @@
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QtQml>
#include "ClientDataModel.hpp"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
qmlRegisterType<Asset>("Graphene.Client", 0, 1, "Asset");
qmlRegisterType<Balance>("Graphene.Client", 0, 1, "Balance");
qmlRegisterType<Account>("Graphene.Client", 0, 1, "Account");
qmlRegisterType<ClientDataModel>("Graphene.Client", 0, 1, "DataModel");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}

View file

@ -0,0 +1,45 @@
import QtQuick 2.5
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.2
Item {
id: item1
width: 640
height: 480
property alias button1: button1
property alias button2: button2
ColumnLayout {
id: columnLayout1
width: parent.width / 2
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
RowLayout {
id: buttonRow
Layout.fillWidth: true
Button {
id: button1
text: qsTr("Press Me 1")
}
Item { Layout.fillWidth: true }
Button {
id: button2
text: qsTr("Press Me 2")
}
}
Slider {
id: slider
Layout.fillWidth: true
}
ProgressBar {
id: progressBar1
value: Math.sin(Math.PI * slider.value)
Layout.fillWidth: true
}
}
}

View file

@ -0,0 +1,51 @@
import QtQuick 2.5
import QtQuick.Controls 1.4
import QtQuick.Dialogs 1.2
import Graphene.Client 0.1
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
menuBar: MenuBar {
Menu {
title: qsTr("File")
MenuItem {
text: qsTr("&Open")
onTriggered: console.log("Open action triggered");
}
MenuItem {
text: qsTr("Exit")
onTriggered: Qt.quit();
}
}
}
DataModel {
id: model
objectName: "model"
}
MainForm {
id: form
anchors.fill: parent
button1.onClicked: {
console.log(JSON.stringify(model.getAccount(3)))
messageDialog.show(qsTr("Account name is %1").arg(model.getAccount(3).name))
}
button2.onClicked: messageDialog.show(qsTr("Account name is %1").arg(model.getAccount("steve").name))
}
MessageDialog {
id: messageDialog
title: qsTr("May I have your attention, please?")
function show(caption) {
messageDialog.text = caption;
messageDialog.open();
}
}
}

View file

@ -0,0 +1,7 @@
<RCC>
<qresource prefix="/">
<file>main.qml</file>
<file>MainForm.qml</file>
</qresource>
</RCC>