From f57205a2e696cb003f54fa3b8b8aac37d7bdc11d Mon Sep 17 00:00:00 2001 From: Nathan Hourt Date: Tue, 14 Jul 2015 13:06:32 -0400 Subject: [PATCH] [GUI] Fix CMake error, add README.md --- programs/light_client/CMakeLists.txt | 4 +- programs/light_client/ClientDataModel.cpp | 4 +- programs/light_client/ClientDataModel.hpp | 46 ++++++++++++----------- programs/light_client/README.md | 11 ++++++ programs/light_client/main.cpp | 2 - programs/light_client/qml/main.qml | 3 +- 6 files changed, 42 insertions(+), 28 deletions(-) create mode 100644 programs/light_client/README.md diff --git a/programs/light_client/CMakeLists.txt b/programs/light_client/CMakeLists.txt index 7fc1bad1..54e8dfc9 100644 --- a/programs/light_client/CMakeLists.txt +++ b/programs/light_client/CMakeLists.txt @@ -16,6 +16,8 @@ file(GLOB QML qml/*) qt5_add_resources(QML_QRC qml/qml.qrc) add_executable(light_client ClientDataModel.cpp ClientDataModel.hpp main.cpp ${QML_QRC} ${QML}) -add_dependencies(light_client gen_qrc) +if (CMAKE_VERSION VERSION_LESS 3.0) + add_dependencies(light_client gen_qrc) +endif() target_link_libraries(light_client PRIVATE Qt5::Core Qt5::Widgets Qt5::Quick graphene_chain graphene_utilities fc graphene_app ) diff --git a/programs/light_client/ClientDataModel.cpp b/programs/light_client/ClientDataModel.cpp index 22a085df..3c48fee4 100644 --- a/programs/light_client/ClientDataModel.cpp +++ b/programs/light_client/ClientDataModel.cpp @@ -10,7 +10,7 @@ using namespace graphene::app; ChainDataModel::ChainDataModel( fc::thread& t, QObject* parent ) :QObject(parent),m_thread(&t){} -Account* ChainDataModel::getAccount(qint64 id) +Account* ChainDataModel::getAccount(ObjectId id) { auto& by_id_idx = m_accounts.get<::by_id>(); auto itr = by_id_idx.find(id); @@ -94,7 +94,7 @@ Account* ChainDataModel::getAccount(QString name) { by_name_idx.modify( itr, [=]( Account* a ){ - a->setProperty("id", qint64(result.front()->id.instance())); + a->setProperty("id", ObjectId(result.front()->id.instance())); } ); } diff --git a/programs/light_client/ClientDataModel.hpp b/programs/light_client/ClientDataModel.hpp index dd258e4c..d3ae8d1d 100644 --- a/programs/light_client/ClientDataModel.hpp +++ b/programs/light_client/ClientDataModel.hpp @@ -11,24 +11,36 @@ #include #include +#include #include #include using boost::multi_index_container; using namespace boost::multi_index; +using ObjectId = qint64; + Q_DECLARE_METATYPE(std::function) +class Crypto { + Q_GADGET + +public: + Q_INVOKABLE QString sha256(QByteArray data) { + return QCryptographicHash::hash(data, QCryptographicHash::Sha256).toHex(); + } +}; +QML_DECLARE_TYPE(Crypto) class Asset : public QObject { Q_OBJECT Q_PROPERTY(QString symbol MEMBER symbol) - Q_PROPERTY(qint64 id MEMBER id) + Q_PROPERTY(ObjectId id MEMBER id) Q_PROPERTY(quint8 precision MEMBER precision) QString symbol; - qint64 id; + ObjectId id; quint8 precision; }; @@ -37,33 +49,30 @@ class Balance : public QObject { Q_PROPERTY(Asset* type MEMBER type) Q_PROPERTY(qint64 amount MEMBER amount) - Q_PROPERTY(qint64 id MEMBER id) + Q_PROPERTY(ObjectId id MEMBER id) Asset* type; qint64 amount; - qint64 id; + ObjectId id; }; class Account : public QObject { Q_OBJECT Q_PROPERTY(QString name MEMBER name NOTIFY nameChanged) - Q_PROPERTY(qint64 id MEMBER id NOTIFY idChanged) + Q_PROPERTY(ObjectId id MEMBER id NOTIFY idChanged) Q_PROPERTY(QQmlListProperty balances READ balances) QList m_balances; public: - // Account(QObject* parent = nullptr) - // : QObject(parent){} - const QString& getName()const { return name; } - qint64 getId()const { return id; } + ObjectId getId()const { return id; } QQmlListProperty balances(); QString name; - qint64 id; + ObjectId id; signals: void nameChanged(); @@ -75,22 +84,19 @@ struct by_account_name; /** * @ingroup object_index */ -typedef multi_index_container< +using account_multi_index_type = multi_index_container< Account*, indexed_by< - hashed_unique< tag, const_mem_fun >, + hashed_unique< tag, const_mem_fun >, ordered_unique< tag, const_mem_fun > > -> account_multi_index_type; - - - +>; class ChainDataModel : public QObject { Q_OBJECT public: - Q_INVOKABLE Account* getAccount(qint64 id); + Q_INVOKABLE Account* getAccount(ObjectId id); Q_INVOKABLE Account* getAccount(QString name); ChainDataModel(){} @@ -107,14 +113,10 @@ private: std::string m_api_url; fc::api m_db_api; - qint64 m_account_query_num = -1; + ObjectId m_account_query_num = -1; account_multi_index_type m_accounts; }; - - - - class GrapheneApplication : public QObject { Q_OBJECT diff --git a/programs/light_client/README.md b/programs/light_client/README.md new file mode 100644 index 00000000..7eb2d2ab --- /dev/null +++ b/programs/light_client/README.md @@ -0,0 +1,11 @@ +== Graphene Client GUI == + +This is a Qt-based native GUI client for Graphene blockchains. + +To build this GUI, run cmake with -DBUILD_QT_GUI=ON + +This GUI depends on Qt 5.5 or later. If you do not have Qt 5.5 installed +in the canonical location on your OS (or if your OS does not have a +canonical location for libraries), you can specify the Qt path by running +cmake with -DCMAKE_PREFIX_PATH=/path/to/Qt/5.5/gcc_64 as appropriate for +your environment. diff --git a/programs/light_client/main.cpp b/programs/light_client/main.cpp index a761fbea..2c733daa 100644 --- a/programs/light_client/main.cpp +++ b/programs/light_client/main.cpp @@ -21,11 +21,9 @@ int main(int argc, char *argv[]) qmlRegisterType("Graphene.Client", 0, 1, "GrapheneApplication"); QQmlApplicationEngine engine; - /* QVariant crypto; crypto.setValue(Crypto()); engine.rootContext()->setContextProperty("Crypto", crypto); - */ #ifdef NDEBUG engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); #else diff --git a/programs/light_client/qml/main.qml b/programs/light_client/qml/main.qml index ef5f0c84..5ddf1bd0 100644 --- a/programs/light_client/qml/main.qml +++ b/programs/light_client/qml/main.qml @@ -28,6 +28,7 @@ ApplicationWindow { MenuItem { text: qsTr("Exit") onTriggered: Qt.quit(); + shortcut: "Ctrl+Q" } } } @@ -112,7 +113,7 @@ ApplicationWindow { } } } - + }