File indexing completed on 2025-02-02 04:11:26

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 #include <QAbstractProxyModel>
0010 
0011 #include "model/document_node.hpp"
0012 #include "item_models/document_model_base.hpp"
0013 #include "custom_treeview.hpp"
0014 
0015 
0016 namespace glaxnimate::gui {
0017 
0018 class LayerView : public CustomTreeView
0019 {
0020     Q_OBJECT
0021 
0022 public:
0023     LayerView(QWidget* parent = nullptr);
0024     ~LayerView();
0025 
0026     void set_base_model(item_models::DocumentModelBase* base_model);
0027     item_models::DocumentModelBase* base_model() const;
0028     void set_current_node(model::DocumentNode* node);
0029     model::VisualNode* node(const QModelIndex& index) const;
0030     model::VisualNode* current_node() const;
0031 
0032     void set_composition(model::Composition* comp);
0033 
0034     void replace_selection(model::VisualNode* node);
0035     void update_selection(const std::vector<model::VisualNode*>& selected, const std::vector<model::VisualNode*>& deselected);
0036 
0037 Q_SIGNALS:
0038     void selection_changed(const std::vector<model::VisualNode*>& selected, const std::vector<model::VisualNode*>& deselected);
0039     void current_node_changed(model::VisualNode* node);
0040 
0041 private:
0042     void on_selection_changed(const QItemSelection &selected, const QItemSelection &deselected);
0043     void on_current_node_changed(const QModelIndex& index);
0044 
0045 protected:
0046     void mouseReleaseEvent(QMouseEvent * event) override;
0047 
0048 private:
0049     class Private;
0050     std::unique_ptr<Private> d;
0051 };
0052 
0053 } // namespace glaxnimate::gui