Accelerated Computation Engine
ace_metadatamodel.h
1 #ifndef ACE_METADATAMODEL_H
2 #define ACE_METADATAMODEL_H
3 #include <memory>
4 #include <QAbstractItemModel>
5 #include "emetadata.h"
6 //
7 
8 
9 
10 namespace Ace
11 {
21  class MetadataModel : public QAbstractItemModel
22  {
23  Q_OBJECT
24  public:
25  virtual QStringList mimeTypes() const override final;
26  virtual Qt::DropActions supportedDropActions() const override final;
27  virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override final;
28  virtual QModelIndex index(int row, int column, const QModelIndex& parent) const override final;
29  virtual QModelIndex parent(const QModelIndex& child) const override final;
30  virtual Qt::ItemFlags flags(const QModelIndex& index) const override final;
31  virtual int rowCount(const QModelIndex& parent) const override final;
32  virtual int columnCount(const QModelIndex& parent) const override final;
33  virtual QMimeData* mimeData(const QModelIndexList& indexes) const override final;
34  virtual QVariant data(const QModelIndex& index, int role) const override final;
35  virtual bool setData(const QModelIndex& index, const QVariant& value, int role) override final;
36  virtual bool dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) override final;
37  public:
41  enum Roles
42  {
47  RawImageData = 10000
48  };
49  explicit MetadataModel(QObject* parent = nullptr);
50  bool isImage(const QModelIndex& index) const;
51  bool isContainer(const QModelIndex& index) const;
52  bool readOnly() const;
53  EMetadata meta() const;
54  bool insert(const QModelIndex& parent, EMetadata::Type type);
55  bool remove(const QModelIndex& index);
56  void setMeta(const EMetadata& newRoot);
57  void setReadOnly(bool state);
58  private:
59  class Node;
60  private:
61  MetadataModel::Node* pointer(const QModelIndex& index) const;
62  bool setKey(const QModelIndex& index, const QString& newKey);
63  std::unique_ptr<MetadataModel::Node> take(Node* node);
64  bool insert(const QModelIndex& parent, int row, std::unique_ptr<Node>&& node);
65  EMetadata buildMeta(const Node* node) const;
66  std::unique_ptr<MetadataModel::Node> buildNode(const EMetadata& meta);
71  static const char* _mimeType;
76  Node* _root;
80  bool _readOnly {false};
81  };
82 }
83 
84 
85 
86 #endif
Definition: ace_metadatamodel.h:47
EMetadata meta() const
Definition: ace_metadatamodel.cpp:591
virtual QModelIndex index(int row, int column, const QModelIndex &parent) const override final
Definition: ace_metadatamodel.cpp:120
Definition: ace_metadatamodel.h:21
Definition: ace.h:6
bool insert(const QModelIndex &parent, EMetadata::Type type)
Definition: ace_metadatamodel.cpp:614
MetadataModel(QObject *parent=nullptr)
Definition: ace_metadatamodel.cpp:517
virtual Qt::ItemFlags flags(const QModelIndex &index) const override final
Definition: ace_metadatamodel.cpp:198
bool isImage(const QModelIndex &index) const
Definition: ace_metadatamodel.cpp:536
Definition: ace_metadatamodel_node.h:24
virtual QVariant data(const QModelIndex &index, int role) const override final
Definition: ace_metadatamodel.cpp:347
virtual bool setData(const QModelIndex &index, const QVariant &value, int role) override final
Definition: ace_metadatamodel.cpp:401
virtual int rowCount(const QModelIndex &parent) const override final
Definition: ace_metadatamodel.cpp:259
virtual Qt::DropActions supportedDropActions() const override final
Definition: ace_metadatamodel.cpp:53
virtual QModelIndex parent(const QModelIndex &child) const override final
Definition: ace_metadatamodel.cpp:161
virtual int columnCount(const QModelIndex &parent) const override final
Definition: ace_metadatamodel.cpp:280
virtual QMimeData * mimeData(const QModelIndexList &indexes) const override final
Definition: ace_metadatamodel.cpp:305
Definition: emetadata.h:22
void setMeta(const EMetadata &newRoot)
Definition: ace_metadatamodel.cpp:669
bool readOnly() const
Definition: ace_metadatamodel.cpp:572
bool isContainer(const QModelIndex &index) const
Definition: ace_metadatamodel.cpp:555
Type
Definition: emetadata.h:33
void setReadOnly(bool state)
Definition: ace_metadatamodel.cpp:704
virtual QStringList mimeTypes() const override final
Definition: ace_metadatamodel.cpp:34
virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override final
Definition: ace_metadatamodel.cpp:81
Roles
Definition: ace_metadatamodel.h:41
virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override final
Definition: ace_metadatamodel.cpp:459