From 93e6b14ed45baa79f1e5b5ffdbe504ec33711f83 Mon Sep 17 00:00:00 2001 From: Bardia Daneshvar Date: Wed, 27 Jul 2016 16:50:33 +0430 Subject: [PATCH 4/4] Add SharedPointer Qml component to use TelegramSharedPointer features from Qml... (cherry picked from commit 4bc16efe61afab19a77e3b4e2f9dfe0e7a8d53ff) --- documents/sharedpointer.md | 30 ++++++++++++++++++++++++ documents/start.md | 1 + plugins.qmltypes | 54 ++++++++++++++++++++++++++++++++------------ telegrampeerdetails.cpp | 2 +- telegramqml.pri | 6 +++-- telegramqmlinitializer.cpp | 2 ++ telegramqmlsharedpointer.cpp | 40 ++++++++++++++++++++++++++++++++ telegramqmlsharedpointer.h | 32 ++++++++++++++++++++++++++ 8 files changed, 149 insertions(+), 18 deletions(-) create mode 100644 documents/sharedpointer.md create mode 100644 telegramqmlsharedpointer.cpp create mode 100644 telegramqmlsharedpointer.h diff --git a/documents/sharedpointer.md b/documents/sharedpointer.md new file mode 100644 index 0000000..5f7a0c8 --- /dev/null +++ b/documents/sharedpointer.md @@ -0,0 +1,30 @@ +# SharedPointer + + * [Component details](#component-details) + * [Required Properties](#required-properties) + * [Methods](#methods) + + +### Component details: + +|Detail|Value| +|------|-----| +|Import|TelegramQml 2.0| +|Component|SharedPointer| +|C++ class|TelegramQmlSharedPointer| +|Inherits|object| +|Model|No| + + +### Required Properties + +* object: object + + + +### Methods + + * void clean() + + + diff --git a/documents/start.md b/documents/start.md index abc4313..c65a85e 100644 --- a/documents/start.md +++ b/documents/start.md @@ -62,4 +62,5 @@ Here are all components of the TelegramQml: * [TqObject](tqobject.md) * [AbstractListModel](abstractlistmodel.md) * [AbstractEngineListModel](abstractenginelistmodel.md) + * [SharedPointer](sharedpointer.md) * [Enums](enums.md) diff --git a/plugins.qmltypes b/plugins.qmltypes index b33753b..1476705 100644 --- a/plugins.qmltypes +++ b/plugins.qmltypes @@ -3186,21 +3186,32 @@ Module { "RoleTopMessageItem": 259, "RolePeerItem": 260, "RolePeerHex": 261, - "RoleName": 262, - "RoleMessageDate": 263, - "RoleMessageUnread": 264, - "RoleMessage": 265, - "RoleMessageOut": 266, - "RoleMessageType": 267, - "RoleMessageUser": 268, - "RoleLastOnline": 269, - "RoleIsOnline": 270, - "RoleStatus": 271, - "RoleStatusText": 272, - "RoleTyping": 273, - "RoleUnreadCount": 274, - "RoleMute": 275, - "RoleCategory": 276 + "RoleIsSecretChat": 262, + "RoleSecretChatState": 263, + "RoleName": 264, + "RoleMessageDate": 265, + "RoleMessageUnread": 266, + "RoleMessage": 267, + "RoleMessageOut": 268, + "RoleMessageType": 269, + "RoleMessageUser": 270, + "RoleLastOnline": 271, + "RoleIsOnline": 272, + "RoleStatus": 273, + "RoleStatusText": 274, + "RoleTyping": 275, + "RoleUnreadCount": 276, + "RoleMute": 277, + "RoleCategory": 278 + } + } + Enum { + name: "SecretChatState" + values: { + "SecretChatStateInit": 0, + "SecretChatStateRequested": 1, + "SecretChatStateAccepted": 2, + "SecretChatStateCancelled": 3 } } Property { name: "visibility"; type: "int" } @@ -3726,6 +3737,14 @@ Module { } } Component { + name: "TelegramQmlSharedPointer" + prototype: "QObject" + exports: ["TelegramQml/SharedPointer 2.0"] + exportMetaObjectRevisions: [0] + Property { name: "object"; type: "QObject"; isPointer: true } + Method { name: "clean" } + } + Component { name: "TelegramStatus" defaultProperty: "items" prototype: "TqObject" @@ -3779,6 +3798,11 @@ Module { Property { name: "stickerSet"; type: "InputStickerSetObject"; isPointer: true } Property { name: "documents"; type: "QVariantList" } Signal { name: "engineChanged" } + Method { name: "showRecents" } + Method { + name: "addToRecents" + Parameter { name: "doc"; type: "DocumentObject"; isPointer: true } + } } Component { name: "TelegramTestTools" diff --git a/telegrampeerdetails.cpp b/telegrampeerdetails.cpp index e805dd5..dca302c 100644 --- a/telegrampeerdetails.cpp +++ b/telegrampeerdetails.cpp @@ -472,6 +472,7 @@ void TelegramPeerDetails::refresh() connectUserSignals(p->user, true); connectChatSignals(p->chat, true); + p->peerRoot = TelegramTools::objectRoot(p->peer); if(!p->engine || !p->peer || !p->engine->telegram() || !p->engine->sharedData()) { if(!p->username.isEmpty()) @@ -505,7 +506,6 @@ void TelegramPeerDetails::refresh() const Peer &peer = TelegramTools::inputPeerPeer(p->peer->core()); const QByteArray &key = TelegramTools::identifier(peer); - p->peerRoot = TelegramTools::objectRoot(p->peer); p->dialog = tsdm->getDialog(key); p->user = tsdm->getUser(key); p->chat = tsdm->getChat(key); diff --git a/telegramqml.pri b/telegramqml.pri index b85c365..b3deebb 100644 --- a/telegramqml.pri +++ b/telegramqml.pri @@ -64,7 +64,8 @@ SOURCES += \ $$PWD/telegramcache.cpp \ $$PWD/telegrammemberslistmodel.cpp \ $$PWD/telegrammedialistmodel.cpp \ - $$PWD/telegramauthstore.cpp + $$PWD/telegramauthstore.cpp \ + $$PWD/telegramqmlsharedpointer.cpp HEADERS += \ $$PWD/telegramqml_macros.h \ @@ -106,7 +107,8 @@ HEADERS += \ $$PWD/telegramcache.h \ $$PWD/telegrammemberslistmodel.h \ $$PWD/telegrammedialistmodel.h \ - $$PWD/telegramauthstore.h + $$PWD/telegramauthstore.h \ + $$PWD/telegramqmlsharedpointer.h RESOURCES += \ $$PWD/tqmlresource.qrc diff --git a/telegramqmlinitializer.cpp b/telegramqmlinitializer.cpp index c8ce4a5..e2235f4 100644 --- a/telegramqmlinitializer.cpp +++ b/telegramqmlinitializer.cpp @@ -23,6 +23,7 @@ #include "telegramcache.h" #include "telegrammedialistmodel.h" #include "telegramauthstore.h" +#include "telegramqmlsharedpointer.h" #include "private/telegramdownloadhandler.h" #include @@ -88,6 +89,7 @@ void TelegramQmlInitializer::init(const char *uri, bool exportMode) exportItem("TelegramQml", 2, 0, "AbstractEngineListModel"); } + registerType("TelegramQml", 2, 0, "SharedPointer", exportMode); registerUncreatableType(uri, 2, 0, "Enums", "It's just enums", exportMode); qmlRegisterType(uri, 2, 0, "DocumentExporter"); diff --git a/telegramqmlsharedpointer.cpp b/telegramqmlsharedpointer.cpp new file mode 100644 index 0000000..72413db --- /dev/null +++ b/telegramqmlsharedpointer.cpp @@ -0,0 +1,40 @@ +#include "telegramqmlsharedpointer.h" +#include "tqbaseobject.h" + +TelegramQmlSharedPointer::TelegramQmlSharedPointer(QObject *parent) : + QObject(parent) +{ + +} + +void TelegramQmlSharedPointer::setObject(QObject *object) +{ + if(object == mObject) + return; + + if(mObject) disconnect(mObject.data(), &QObject::destroyed, this, &TelegramQmlSharedPointer::clean); + mObject = object; + if(mObject) connect(mObject.data(), &QObject::destroyed, this, &TelegramQmlSharedPointer::clean); + + Q_EMIT objectChanged(); +} + +QObject *TelegramQmlSharedPointer::object() const +{ + return mObject; +} + +QStringList TelegramQmlSharedPointer::requiredProperties() +{ + return QStringList() << FUNCTION_NAME(object); +} + +void TelegramQmlSharedPointer::clean() +{ + mObject = 0; +} + +TelegramQmlSharedPointer::~TelegramQmlSharedPointer() +{ + +} diff --git a/telegramqmlsharedpointer.h b/telegramqmlsharedpointer.h new file mode 100644 index 0000000..02e72e2 --- /dev/null +++ b/telegramqmlsharedpointer.h @@ -0,0 +1,32 @@ +#ifndef TELEGRAMQMLSHAREDPOINTER_H +#define TELEGRAMQMLSHAREDPOINTER_H + +#include + +#include "telegramsharedpointer.h" + +class TelegramQmlSharedPointer : public QObject +{ + Q_OBJECT + Q_PROPERTY(QObject* object READ object WRITE setObject NOTIFY objectChanged) + +public: + TelegramQmlSharedPointer(QObject *parent = 0); + ~TelegramQmlSharedPointer(); + + void setObject(QObject *object); + QObject *object() const; + + static QStringList requiredProperties(); + +public Q_SLOTS: + void clean(); + +Q_SIGNALS: + void objectChanged(); + +private: + TelegramSharedPointer mObject; +}; + +#endif // TELEGRAMQMLSHAREDPOINTER_H -- 2.9.2