/** * @RDE_HEADER@ * replaces the original header of the view - offers a user-movable position mark * $Id$ * $HeadURL$ * $Author$ * Created by Mike Wille, SLSE, 2014-10-01 */ #pragma once #include "EventTools.h" #include class QPainter; namespace LtsTimelineClassic { /** * @brief replaces the original header of the view - offers a user-movable position mark * since Qt does NOT provide delegates for QHeaderViews (although it inherits from QAbstractItemView), * we must reimplement this class and use paintSection(..) instead */ class TimelineHeaderView : public QHeaderView { Q_OBJECT public: explicit TimelineHeaderView(QWidget *parent = nullptr); /** * @brief refreshes the header view data, which triggers all views to refresh also */ void refreshData(); void setLiveTime(qint64 time); private: qint64 m_posMarkTime; // posMarkTime is set exactly ONE time when clicked on the header > then the time will be et'd so that posMarkPos can vary QRect m_paintingRange; // seen from the widget itself (so y is 0!) // double posMark; DO NOT USE POSMARK INSTEAD OF POSMARKTIME ! qint64 m_liveTime; protected: /** * @brief paints the coherant section with a position mark (if set) * @param painter painter which draws on the coherant section * @param rect boundaries to draw in * @param logicalIndex which section to draw on */ void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const; signals: /** * @brief gives new position mark pixel position to the view * @param pos pixel position of new position mark */ void signalSetPosMarkPos(int pos); // header clicked -> new position mark position public slots: /** * @brief sets new values to this class * @param index affected column * @param oldSize old width of column * @param newSize new width of column */ void slotSectionResized(int logicalIndex, int oldSize, int newSize); /** * @brief setPosMarkTime sets m_posMarkTime - should be called if posMarker was set manually, not with mouse in header! * @param time time to set the posMarker's position to */ void setPosMarkTime(qint64 time); private: /** * @brief sets new position of the position mark in all necessary classes */ void setPosMarkPos(); }; }