You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

162 lines
3.9 KiB

//------------------------------------------------------------------------------
//
// Project: Anonymizer
//
// Brno University of Technology
// Faculty of Information Technology
//
//------------------------------------------------------------------------------
//
// This project was financially supported by project VG20102015006 funds
// provided by Ministry of the Interior of the Czech republic.
//
//------------------------------------------------------------------------------
/*!
@file anchoritem.cpp
@brief Implementation of methods ...
@details Details
@authors Martin Borek (mborekcz@gmail.com)
@authors Filip Orsag (orsag@fit.vutbr.cz)
@date 2014-2015
@note This project was supported by MV CR project VG20102015006.
@copyright BUT OPEN SOURCE LICENCE (see License.txt)
*/
#include "anchoritem.h"
#include <QDebug>
#include <QMouseEvent>
AnchorItem::AnchorItem(ItemType type, int64_t timestamp, unsigned long timePosition, unsigned long totalTime,
unsigned long frameNumber, unsigned long frameCount, QWidget *parent, bool isSet, bool displayTime) :
QWidget(parent),
type(type),
timestamp(timestamp),
timePosition(timePosition),
frameNumber(frameNumber),
isSet(isSet)
{
currentBackgroundColor = backgroundColorInactive;
QString nameString;
switch (type)
{
case ItemType::END:
{
nameString = tr("End");
break;
}
case ItemType::BEGINNING:
{
nameString = tr("Beginning");
break;
}
case ItemType::CHANGE:
nameString = tr("Trajectory change");
break;
default:
qDebug() << "ERROR - AnchorItem: Wrong ItemType";
return;
}
name = new QLabel(nameString, this);
hLayout = new QHBoxLayout(this);
hLayout->setMargin(0);
hLayout->setSpacing(0);
hLayout->addWidget(name);
setLayout(hLayout);
if (type == ItemType::END && !isSet)
{
QLabel *time = new QLabel(tr("Not set"), this);
time->setAlignment(Qt::AlignRight);
hLayout->addWidget(time);
}
else
{
timeLabel = new TimeLabel(this);
timeLabel->set_total_time(totalTime);
timeLabel->set_frame_count(frameCount);
if (displayTime)
timeLabel->display_time(timePosition, false);
else
timeLabel->display_frame_num(frameNumber, false);
timeLabel->setAlignment(Qt::AlignRight);
hLayout->addWidget(timeLabel);
}
installEventFilter(this);
}
bool AnchorItem::eventFilter(QObject *object, QEvent *event)
{
if (isEnabled() && object == this)
{
if (event->type() == QEvent::Enter)
{
setStyleSheet(backgroundColorActive);
}
else if(event->type() == QEvent::Leave)
{
setStyleSheet(currentBackgroundColor);
}
return false; // propagates the event even when processed
}
return false; // propagates the event further since was not processed
}
void AnchorItem::set_highlight(bool set)
{
if (set)
currentBackgroundColor = backgroundColorActive;
else
currentBackgroundColor = backgroundColorInactive;
setStyleSheet(currentBackgroundColor);
}
AnchorItem::~AnchorItem()
{
// All objects get deleted automatically as they are set to be children
}
ItemType AnchorItem::get_type()
{
return type;
}
bool AnchorItem::is_set()
{
return isSet;
}
int64_t AnchorItem::get_timestamp() const
{
return timestamp;
}
void AnchorItem::display_time()
{
if (type == ItemType::END && !isSet)
{ // End is not set so the time cannot be displayed
return;
}
timeLabel->display_time(timePosition, false);
}
void AnchorItem::display_frame_num()
{
if (type == ItemType::END && !isSet)
{ // End is not set so the frame number cannot be displayed
return;
}
timeLabel->display_frame_num(frameNumber, false);
}