Warning, file /graphics/glaxnimate/src/gui/item_models/document_model_base.hpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #pragma once
0008 
0009 
0010 #include <QAbstractItemModel>
0011 
0012 #include "model/document.hpp"
0013 #include "model/shapes/shape.hpp"
0014 
0015 namespace glaxnimate::gui::item_models {
0016 
0017 class ProxyBase;
0018 
0019 class DocumentModelBase : public QAbstractItemModel
0020 {
0021 public:
0022     using QAbstractItemModel::QAbstractItemModel;
0023 
0024     QStringList mimeTypes() const override;
0025     QMimeData *mimeData(const QModelIndexList &indexes) const override;
0026     Qt::DropActions supportedDropActions() const override;
0027     bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
0028     bool canDropMimeData(const QMimeData * data, Qt::DropAction action, int row, int column, const QModelIndex & parent) const override;
0029 
0030     virtual model::DocumentNode* node(const QModelIndex& index) const = 0;
0031     virtual model::VisualNode* visual_node(const QModelIndex& index) const = 0;
0032     virtual QModelIndex node_index(model::DocumentNode* node) const = 0;
0033     virtual model::Document* document() const = 0;
0034 
0035 protected:
0036     /**
0037      * \brief Returns the document node corresponding to \p parent and the insertion point for drop data
0038      */
0039     virtual std::pair<model::VisualNode*, int> drop_position(const QModelIndex &parent, int row, int column) const;
0040 
0041     /**
0042      * \brief Returns drop_position() if the data is well formed
0043      */
0044     std::tuple<model::VisualNode *, int, model::ShapeListProperty*>
0045         cleaned_drop_position(const QMimeData *data, Qt::DropAction action, const QModelIndex &parent, int row, int column) const;
0046 
0047 private:
0048     friend class ProxyBase;
0049 };
0050 
0051 
0052 } // namespace glaxnimate::gui::item_models
0053