keysmith/src/app/keysmith.h

87 lines
2.4 KiB
C++

/*
* SPDX-License-Identifier: GPL-3.0-or-later
* SPDX-FileCopyrightText: 2020-2021 Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
*/
#ifndef APP_KEYSMITH_H
#define APP_KEYSMITH_H
#include "../account/account.h"
#include "../model/accounts.h"
#include "../model/password.h"
#include <QMetaEnum>
#include <QObject>
#include <QQmlEngine>
#include <QSharedPointer>
namespace app
{
class Navigation: public QObject
{
Q_OBJECT
public:
enum Page
{
Error,
AddAccount,
RenameAccount,
AccountsOverview,
SetupPassword,
UnlockAccounts
};
Q_ENUM(Page)
public:
explicit Navigation(QQmlEngine * const engine);
Q_INVOKABLE QString name(app::Navigation::Page page) const;
public Q_SLOTS:
void push(app::Navigation::Page page, QObject *modelToTransfer);
void navigate(app::Navigation::Page page, QObject *modelToTransfer);
Q_SIGNALS:
void routed(const QString &route, QObject *transferred);
void pushed(const QString &route, QObject *transferred);
private:
QQmlEngine * const m_engine;
};
class OverviewState;
class FlowState;
class Store
{
public:
explicit Store(void);
accounts::AccountStorage * accounts(void) const;
model::SimpleAccountListModel * accountList(void) const;
OverviewState * overview(void) const;
FlowState * flows(void) const;
private:
QSharedPointer<FlowState> m_flows;
QSharedPointer<OverviewState> m_overview;
QSharedPointer<accounts::AccountStorage> m_accounts;
QSharedPointer<model::SimpleAccountListModel> m_accountList;
};
class Keysmith: public QObject
{
Q_OBJECT
Q_PROPERTY(app::Navigation * navigation READ navigation CONSTANT)
public:
explicit Keysmith(Navigation * const navigation, QObject *parent = nullptr);
virtual ~Keysmith();
const Store & store(void) const;
Navigation * navigation(void) const;
Q_INVOKABLE void copyToClipboard(const QString &text);
Q_INVOKABLE model::SimpleAccountListModel * accountListModel(void);
Q_INVOKABLE model::PasswordRequest * passwordRequest(void);
private:
accounts::AccountStorage * storage(void);
private:
Store m_store;
Navigation * const m_navigation;
};
}
Q_DECLARE_METATYPE(app::Navigation *);
#endif