File indexing completed on 2025-02-02 04:11:34
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 <memory> 0010 0011 #include <QGraphicsView> 0012 0013 #include "model/document.hpp" 0014 #include "item_models/property_model_full.hpp" 0015 #include "item_models/comp_filter_model.hpp" 0016 0017 0018 class QTreeView; 0019 class QItemSelection; 0020 0021 namespace glaxnimate::gui { 0022 0023 class TimelineWidget : public QGraphicsView 0024 { 0025 Q_OBJECT 0026 0027 public: 0028 TimelineWidget(QWidget* parent = nullptr); 0029 ~TimelineWidget(); 0030 0031 // void clear(); 0032 0033 void set_model(item_models::CompFilterModel* model, item_models::PropertyModelFull* base_model, QTreeView* expander); 0034 0035 int row_height() const; 0036 void set_row_height(int w); 0037 int header_height() const; 0038 0039 qreal highlighted_time() const; 0040 void set_highlighted_time(int time); 0041 void keep_highlight(); 0042 0043 void select(const QItemSelection &selected, const QItemSelection &deselected); 0044 0045 item_models::PropertyModelBase::Item item_at(const QPoint& viewport_pos); 0046 std::pair<model::KeyframeBase*, model::KeyframeBase*> keyframe_at(const QPoint& viewport_pos); 0047 0048 void expand(const QModelIndex& obj); 0049 void collapse(const QModelIndex& obj); 0050 void set_document(model::Document* document); 0051 0052 /** 0053 * \brief Toggles debug prints for the line items 0054 */ 0055 void toggle_debug(bool debug); 0056 0057 /** 0058 * \brief Prints debugging info about the line items 0059 */ 0060 void debug_lines() const; 0061 0062 public Q_SLOTS: 0063 void update_timeline_start(model::FrameTime start); 0064 void update_timeline_end(model::FrameTime end); 0065 void reset_view(); 0066 0067 private Q_SLOTS: 0068 void update_comp(model::Composition* comp); 0069 0070 private: 0071 void model_rows_added(const QModelIndex& parent, int first, int last); 0072 void model_rows_removed(const QModelIndex& parent, int first, int last); 0073 void model_rows_moved(const QModelIndex &parent, int start, int end, const QModelIndex &destination, int row); 0074 void model_reset(); 0075 void on_item_removed(quintptr id); 0076 void emit_clicked(); 0077 0078 protected: 0079 void mousePressEvent(QMouseEvent * event) override; 0080 void mouseReleaseEvent(QMouseEvent * event) override; 0081 void wheelEvent(QWheelEvent * event) override; 0082 void paintEvent(QPaintEvent * event) override; 0083 void resizeEvent(QResizeEvent * event) override; 0084 void scrollContentsBy(int dx, int dy) override; 0085 void mouseMoveEvent(QMouseEvent * event) override; 0086 void leaveEvent(QEvent * event) override; 0087 #if QT_VERSION_MAJOR < 6 0088 void enterEvent(QEvent * event) override; 0089 #else 0090 void enterEvent(QEnterEvent * event) override; 0091 #endif 0092 void keyPressEvent(QKeyEvent * event) override; 0093 0094 Q_SIGNALS: 0095 void frame_clicked(int frame); 0096 void line_clicked(quintptr id, bool selected, bool replace_selection); 0097 void scrolled(int line); 0098 0099 private: 0100 class Private; 0101 0102 std::unique_ptr<Private> d; 0103 }; 0104 0105 } // namespace glaxnimate::gui