|  |  |  | @ -13,6 +13,15 @@ | 
			
		
	
		
			
				
					|  |  |  |  | #include <QVBoxLayout> | 
			
		
	
		
			
				
					|  |  |  |  | #include <QtConcurrent> | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | static const QColor timeline_colors[] = { | 
			
		
	
		
			
				
					|  |  |  |  |   [(int)TimelineType::None] = QColor(111, 143, 175), | 
			
		
	
		
			
				
					|  |  |  |  |   [(int)TimelineType::Engaged] = QColor(0, 163, 108), | 
			
		
	
		
			
				
					|  |  |  |  |   [(int)TimelineType::UserFlag] = Qt::magenta, | 
			
		
	
		
			
				
					|  |  |  |  |   [(int)TimelineType::AlertInfo] = Qt::green, | 
			
		
	
		
			
				
					|  |  |  |  |   [(int)TimelineType::AlertWarning] = QColor(255, 195, 0), | 
			
		
	
		
			
				
					|  |  |  |  |   [(int)TimelineType::AlertCritical] = QColor(199, 0, 57), | 
			
		
	
		
			
				
					|  |  |  |  | }; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | inline QString formatTime(int seconds) { | 
			
		
	
		
			
				
					|  |  |  |  |   return QDateTime::fromTime_t(seconds).toString(seconds > 60 * 60 ? "hh:mm:ss" : "mm:ss"); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | @ -57,9 +66,23 @@ VideoWidget::VideoWidget(QWidget *parent) : QWidget(parent) { | 
			
		
	
		
			
				
					|  |  |  |  |   setWhatsThis(tr(R"( | 
			
		
	
		
			
				
					|  |  |  |  |     <b>Video</b><br /> | 
			
		
	
		
			
				
					|  |  |  |  |     <!-- TODO: add descprition here --> | 
			
		
	
		
			
				
					|  |  |  |  |     Shortcuts:<br /> | 
			
		
	
		
			
				
					|  |  |  |  |     Pause/Resume: <span style="background-color:lightGray;color:gray"> space </span></br> | 
			
		
	
		
			
				
					|  |  |  |  |   )")); | 
			
		
	
		
			
				
					|  |  |  |  |     <span style="color:gray">Timeline color</span> | 
			
		
	
		
			
				
					|  |  |  |  |     <table> | 
			
		
	
		
			
				
					|  |  |  |  |     <tr><td><span style="color:%1;">■ </span>Disengaged </td> | 
			
		
	
		
			
				
					|  |  |  |  |         <td><span style="color:%2;">■ </span>Engaged</td></tr> | 
			
		
	
		
			
				
					|  |  |  |  |     <tr><td><span style="color:%3;">■ </span>User Flag </td> | 
			
		
	
		
			
				
					|  |  |  |  |         <td><span style="color:%4;">■ </span>Info</td></tr> | 
			
		
	
		
			
				
					|  |  |  |  |     <tr><td><span style="color:%5;">■ </span>Warning </td> | 
			
		
	
		
			
				
					|  |  |  |  |         <td><span style="color:%6;">■ </span>Critical</td></tr> | 
			
		
	
		
			
				
					|  |  |  |  |     </table> | 
			
		
	
		
			
				
					|  |  |  |  |     <span style="color:gray">Shortcuts</span><br/> | 
			
		
	
		
			
				
					|  |  |  |  |     Pause/Resume: <span style="background-color:lightGray;color:gray"> space </span> | 
			
		
	
		
			
				
					|  |  |  |  |   )").arg(timeline_colors[(int)TimelineType::None].name(), | 
			
		
	
		
			
				
					|  |  |  |  |           timeline_colors[(int)TimelineType::Engaged].name(), | 
			
		
	
		
			
				
					|  |  |  |  |           timeline_colors[(int)TimelineType::UserFlag].name(), | 
			
		
	
		
			
				
					|  |  |  |  |           timeline_colors[(int)TimelineType::AlertInfo].name(), | 
			
		
	
		
			
				
					|  |  |  |  |           timeline_colors[(int)TimelineType::AlertWarning].name(), | 
			
		
	
		
			
				
					|  |  |  |  |           timeline_colors[(int)TimelineType::AlertCritical].name())); | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | QWidget *VideoWidget::createCameraWidget() { | 
			
		
	
	
		
			
				
					|  |  |  | @ -212,17 +235,9 @@ void Slider::sliderChange(QAbstractSlider::SliderChange change) { | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | void Slider::paintEvent(QPaintEvent *ev) { | 
			
		
	
		
			
				
					|  |  |  |  |   static const QColor colors[] = { | 
			
		
	
		
			
				
					|  |  |  |  |     [(int)TimelineType::None] = QColor(111, 143, 175), | 
			
		
	
		
			
				
					|  |  |  |  |     [(int)TimelineType::Engaged] = QColor(0, 163, 108), | 
			
		
	
		
			
				
					|  |  |  |  |     [(int)TimelineType::UserFlag] = Qt::white, | 
			
		
	
		
			
				
					|  |  |  |  |     [(int)TimelineType::AlertInfo] = Qt::green, | 
			
		
	
		
			
				
					|  |  |  |  |     [(int)TimelineType::AlertWarning] = QColor(255, 195, 0), | 
			
		
	
		
			
				
					|  |  |  |  |     [(int)TimelineType::AlertCritical] = QColor(199, 0, 57)}; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   QPainter p(this); | 
			
		
	
		
			
				
					|  |  |  |  |   QRect r = rect().adjusted(0, 4, 0, -4); | 
			
		
	
		
			
				
					|  |  |  |  |   p.fillRect(r, colors[(int)TimelineType::None]); | 
			
		
	
		
			
				
					|  |  |  |  |   p.fillRect(r, timeline_colors[(int)TimelineType::None]); | 
			
		
	
		
			
				
					|  |  |  |  |   double min = minimum() / 1000.0; | 
			
		
	
		
			
				
					|  |  |  |  |   double max = maximum() / 1000.0; | 
			
		
	
		
			
				
					|  |  |  |  |   for (auto [begin, end, type] : timeline) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -230,7 +245,7 @@ void Slider::paintEvent(QPaintEvent *ev) { | 
			
		
	
		
			
				
					|  |  |  |  |       continue; | 
			
		
	
		
			
				
					|  |  |  |  |     r.setLeft(((std::max(min, (double)begin) - min) / (max - min)) * width()); | 
			
		
	
		
			
				
					|  |  |  |  |     r.setRight(((std::min(max, (double)end) - min) / (max - min)) * width()); | 
			
		
	
		
			
				
					|  |  |  |  |     p.fillRect(r, colors[(int)type]); | 
			
		
	
		
			
				
					|  |  |  |  |     p.fillRect(r, timeline_colors[(int)type]); | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   QStyleOptionSlider opt; | 
			
		
	
	
		
			
				
					|  |  |  | 
 |