diff options
Diffstat (limited to 'saltoqd/cardmanager.h')
-rw-r--r-- | saltoqd/cardmanager.h | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/saltoqd/cardmanager.h b/saltoqd/cardmanager.h new file mode 100644 index 0000000..863c4a6 --- /dev/null +++ b/saltoqd/cardmanager.h @@ -0,0 +1,150 @@ +#ifndef CARDMANAGER_H +#define CARDMANAGER_H + +#include "fmsmanager.h" + +class CardManager; +class CardDeck; +class Card; + +class Card : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString id READ id CONSTANT) + Q_PROPERTY(QString header READ header WRITE setHeader NOTIFY headerChanged) + Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged) + Q_PROPERTY(QString info READ info WRITE setInfo NOTIFY infoChanged) + Q_PROPERTY(QDateTime dateTime READ dateTime WRITE setDateTime NOTIFY dateTimeChanged) + // TODO card events, divider, icon, picture + Q_PROPERTY(bool vibrate READ isVibrate WRITE setVibrate NOTIFY vibrateChanged) + Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged) + Q_PROPERTY(QStringList menuOptions READ menuOptions WRITE setMenuOptions NOTIFY menuOptionsChanged) + Q_PROPERTY(bool open READ isOpen NOTIFY openChanged) + Q_PROPERTY(bool visible READ isVisible NOTIFY visibleChanged) + +public: + explicit Card(const QString &id, QObject *parent = 0); + + QString id() const; + + QString header() const; + void setHeader(const QString &header); + + QString title() const; + void setTitle(const QString &title); + + QString info() const; + void setInfo(const QString &info); + + QDateTime dateTime() const; + void setDateTime(const QDateTime &dt); + + bool isVibrate() const; + void setVibrate(bool vibrate); + + QString text() const; + void setText(const QString &text); + + QStringList menuOptions() const; + void setMenuOptions(const QStringList &options); + + bool isOpen() const; + void setOpen(bool open); + + bool isVisible() const; + void setVisible(bool visible); + +signals: + void headerChanged(); + void titleChanged(); + void infoChanged(); + void dateTimeChanged(); + void vibrateChanged(); + void textChanged(); + void menuOptionsChanged(); + void openChanged(); + void visibleChanged(); + + void optionSelected(const QString &option); + +private: + QString _id; + QString _header; + QString _title; + QString _info; + QDateTime _dateTime; + bool _vibrate; + QString _text; + QStringList _options; + bool _open; + bool _visible; +}; + +class CardDeck : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString package READ package CONSTANT) + Q_PROPERTY(QString application READ application CONSTANT) + Q_PROPERTY(QList<Card*> cards READ cards) + +public: + explicit CardDeck(const QString &package, const QString &application, QObject *parent = 0); + + QString package() const; + QString application() const; + + QList<Card*> cards() const; + Card * cardAt(int position) const; + + void appendCard(Card * card); + void insertCard(int position, Card * card); + void removeCard(int position); + void removeCard(Card * card); + +signals: + void messageReceived(const QString &message); + void needsRefresh(); + void cardAdded(Card * card); + void cardRemoved(Card * card); + +private slots: + void scheduleRefresh(); + +private: + QString _package; + QString _application; + QList<Card*> _deck; + QHash<QString, Card*> _ids; + QTimer *_refreshTimer; +}; + +class CardManager : public QObject, public ToqManager::EndpointHandler +{ + Q_OBJECT +public: + explicit CardManager(FmsManager *fms, ToqManager *toq); + + void handleMessage(const ToqConnection::Message &msg) Q_DECL_OVERRIDE; + +public slots: + void installDeck(CardDeck *deck); + void uninstallDeck(CardDeck *deck); + +private: + QString generateCardDescription(const QString &verb, Card * card) const; + +private slots: + void refreshDeck(CardDeck *deck); + void handleToqConnected(); + void handleDeckNeedsRefresh(); + void handleCardAdded(Card * card); + void handleCardRemoved(Card * card); + +private: + ToqManager *_toq; + FmsManager *_fms; + QHash<QString, CardDeck*> _decks; + QSet<QString> _pending; +}; + +#endif // CARDMANAGER_H |