passwordmanager/model/fieldmodel.h

150 lines
4.5 KiB
C
Raw Normal View History

2015-04-22 19:30:09 +02:00
#ifndef FIELDMODEL_H
#define FIELDMODEL_H
#if defined(PASSWORD_MANAGER_GUI_QTWIDGETS) || defined(PASSWORD_MANAGER_ENABLE_UNDO_SUPPORT_FOR_QUICK_GUI)
#include "../gui/stacksupport.h"
2015-04-22 19:30:09 +02:00
#endif
2016-04-08 00:04:23 +02:00
#include <passwordfile/io/entry.h>
2015-04-22 19:30:09 +02:00
#include <QAbstractTableModel>
#include <vector>
namespace Io {
class Field;
}
namespace QtGui {
/*!
* \brief The FieldModelRoles enum defines custom roles for the FieldModel class.
*/
2017-05-01 03:26:04 +02:00
enum FieldModelRoles {
FieldTypeRole = Qt::UserRole + 1, /**< the field type */
Key,
Value,
IsPassword,
2018-06-13 00:41:24 +02:00
AlwaysActualValue,
2018-11-22 21:58:05 +01:00
IsLastRow,
2015-04-22 19:30:09 +02:00
};
/*!
* \brief The PasswordVisibility enum defines when passwords will be visible.
*/
2017-05-01 03:26:04 +02:00
enum PasswordVisibility {
Always, /**< passwords are always visible */
OnlyWhenEditing, /**< passwords are only visible when editing */
Never /**< passwords are never visible */
};
2015-04-22 19:30:09 +02:00
class FieldModel : public QAbstractTableModel
#ifdef PASSWORD_MANAGER_UNDO_SUPPORT
2017-09-29 17:17:12 +02:00
,
2017-05-01 03:26:04 +02:00
public StackSupport
2015-04-22 19:30:09 +02:00
#endif
{
Q_OBJECT
Q_PROPERTY(Io::AccountEntry *accountEntry READ accountEntry WRITE setAccountEntry)
Q_PROPERTY(PasswordVisibility passwordVisibility READ passwordVisibility WRITE setPasswordVisibility)
2017-05-01 03:26:04 +02:00
public:
2015-04-22 19:30:09 +02:00
explicit FieldModel(QObject *parent = nullptr);
#ifdef PASSWORD_MANAGER_UNDO_SUPPORT
2015-04-22 19:30:09 +02:00
explicit FieldModel(QUndoStack *undoStack, QObject *parent = nullptr);
#endif
QHash<int, QByteArray> roleNames() const override;
2015-04-22 19:30:09 +02:00
Io::AccountEntry *accountEntry();
const Io::AccountEntry *accountEntry() const;
void setAccountEntry(Io::AccountEntry *entry);
std::vector<Io::Field> *fields();
PasswordVisibility passwordVisibility() const;
QVariant data(const QModelIndex &index, int role) const override;
QMap<int, QVariant> itemData(const QModelIndex &index) const override;
bool setData(const QModelIndex &index, const QVariant &value, int role) override;
Qt::ItemFlags flags(const QModelIndex &index) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
Q_INVOKABLE int rowCount(const QModelIndex &parent = QModelIndex()) const override;
Q_INVOKABLE int columnCount(const QModelIndex &parent = QModelIndex()) const override;
Q_INVOKABLE bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
Q_INVOKABLE bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
Q_INVOKABLE bool moveRows(
const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild) override;
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
QStringList mimeTypes() const override;
QMimeData *mimeData(const QModelIndexList &indices) const override;
Q_INVOKABLE const Io::Field *field(std::size_t row) const;
2015-04-22 19:30:09 +02:00
public Q_SLOTS:
void setPasswordVisibility(PasswordVisibility passwordVisibility);
2015-04-22 19:30:09 +02:00
void reset();
private:
2018-12-08 19:55:41 +01:00
QVariant passwordValue(const QModelIndex &index, int role) const;
2015-04-22 19:30:09 +02:00
Io::AccountEntry *m_accountEntry;
std::vector<Io::Field> *m_fields;
PasswordVisibility m_passwordVisibility;
2015-04-22 19:30:09 +02:00
};
/*!
* \brief Returns the account entry. Might be nullptr if no account entry has been set.
*
* The ownership remains unaltered.
*/
inline Io::AccountEntry *FieldModel::accountEntry()
{
return m_accountEntry;
}
/*!
* \brief Returns the account entry. Might be nullptr if no account entry has been set.
*
* The ownership remains unaltered.
*/
inline const Io::AccountEntry *FieldModel::accountEntry() const
{
return m_accountEntry;
}
/*!
* \brief Returns the fields of the account entry. Might be nullptr if no account entry is assigned.
*
* The ownership remains unaltered.
*/
inline std::vector<Io::Field> *FieldModel::fields()
{
return m_fields;
}
/*!
* \brief Resets the model. The account entry will be unset.
*/
inline void FieldModel::reset()
{
setAccountEntry(nullptr);
}
/*!
* \brief Returns the password visibility.
*/
inline PasswordVisibility FieldModel::passwordVisibility() const
2015-04-22 19:30:09 +02:00
{
return m_passwordVisibility;
2015-04-22 19:30:09 +02:00
}
/*!
* \brief Sets the password visibility.
*/
inline void FieldModel::setPasswordVisibility(PasswordVisibility passwordVisibility)
2015-04-22 19:30:09 +02:00
{
m_passwordVisibility = passwordVisibility;
2017-05-01 03:26:04 +02:00
if (m_fields) {
2021-03-20 21:57:47 +01:00
emit dataChanged(index(0, 1), index(static_cast<int>(m_fields->size() - 1), 1), QVector<int>({ Qt::DisplayRole, Qt::EditRole }));
2015-04-22 19:30:09 +02:00
}
}
2017-09-29 17:17:12 +02:00
} // namespace QtGui
2015-04-22 19:30:09 +02:00
#endif // FIELDMODEL_H