Files
qt5-legatus-legacy/Lts/Common/LtsTimelineClassic/TimelineHeaderView.h
T
2026-08-13 18:33:10 +02:00

87 lines
2.3 KiB
C++
Executable File

/**
* @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 <QHeaderView>
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();
};
}