diff --git a/biotracker/View/BioTracker3MainWindow.cpp b/biotracker/View/BioTracker3MainWindow.cpp new file mode 100644 index 0000000..84aee44 --- /dev/null +++ b/biotracker/View/BioTracker3MainWindow.cpp @@ -0,0 +1,51 @@ +#include "BioTracker3MainWindow.h" +#include "ui_BioTracker3MainWindow.h" + +#include "Controller/ControllerMainWindow.h" +#include "BioTracker3VideoControllWidget.h" +#include "qfiledialog.h" +#include "QLayout" + +#include "View/GraphicsView.h" + +BioTracker3MainWindow::BioTracker3MainWindow(QWidget *parent, IController *controller, IModel *model) : + IViewMainWindow(parent, controller, model), + ui(new Ui::BioTracker3MainWindow) +{ + ui->setupUi(this); +} + +BioTracker3MainWindow::~BioTracker3MainWindow() +{ + delete ui; +} + +void BioTracker3MainWindow::addVideoControllWidget(IView *widget) +{ + QLayout *layout = new QGridLayout(this); + layout->addWidget(dynamic_cast(widget)); + ui->videoControls->setLayout(layout); +} + +void BioTracker3MainWindow::addVideoView(IView *videoView) +{ + GraphicsView *graphView = dynamic_cast(videoView); + graphView->setParent(ui->trackingArea); + ui->videoViewLayout->addWidget(graphView); + // gl widget + //dynamic_cast(videoView)->setParent(ui->trackingArea); + //ui->videoViewLayout->addWidget(dynamic_cast(videoView)); +} + +void BioTracker3MainWindow::on_actionOpen_Video_triggered() +{ + static const QString videoFilter("Video files (*.avi *.wmv *.mp4 *.mkv *.mov)"); + std::vector files; + + QString filename = QFileDialog::getOpenFileName(this, + "Open video", "", videoFilter); + + if (!filename.isEmpty()) { + dynamic_cast (getController())->loadVideo(filename); + } +} diff --git a/biotracker/View/BioTracker3MainWindow.h b/biotracker/View/BioTracker3MainWindow.h new file mode 100644 index 0000000..2518f8a --- /dev/null +++ b/biotracker/View/BioTracker3MainWindow.h @@ -0,0 +1,33 @@ +#ifndef BIOTRACKER3MAINWINDOW_H +#define BIOTRACKER3MAINWINDOW_H + +#include +#include "Interfaces/IView/IViewMainWindow.h" + +// delete +#include "BioTracker3VideoView.h" + +namespace Ui { +class BioTracker3MainWindow; +} + +class IController; +class BioTracker3MainWindow : public IViewMainWindow +{ + Q_OBJECT + +public: + explicit BioTracker3MainWindow(QWidget *parent = 0, IController *controller = 0, IModel *model = 0); + ~BioTracker3MainWindow(); + + void addVideoControllWidget(IView *widget); + void addVideoView(IView *videoView); + +private Q_SLOTS: + void on_actionOpen_Video_triggered(); + +private: + Ui::BioTracker3MainWindow *ui; +}; + +#endif // BIOTRACKER3MAINWINDOW_H diff --git a/biotracker/View/BioTracker3MainWindow.ui b/biotracker/View/BioTracker3MainWindow.ui new file mode 100644 index 0000000..69ba964 --- /dev/null +++ b/biotracker/View/BioTracker3MainWindow.ui @@ -0,0 +1,375 @@ + + + BioTracker3MainWindow + + + + 0 + 0 + 982 + 818 + + + + BioTracker + + + true + + + false + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + 0 + 150 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + true + + + + 0 + 0 + + + + + 0 + 0 + + + + + + + + + + + + + + + + 0 + 0 + 982 + 23 + + + + + &File + + + + + + + + + + + + + + + + + + 0 + 0 + + + + + 200 + 207 + + + + + 0 + 0 + + + + + 0 + 0 + + + + A&lgorithm + + + 2 + + + + + 0 + 0 + + + + + 2 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + Tools + + + false + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 0 + 0 + + + + QFrame::Plain + + + 0 + + + Qt::ScrollBarAsNeeded + + + Qt::ScrollBarAlwaysOff + + + true + + + + + 0 + 0 + 178 + 594 + + + + + 0 + 0 + + + + + + + + + + + + + + false + + + &Notifications + + + 2 + + + + + 0 + 0 + + + + + + + Open &Video... + + + + + Open &Picture... + + + + + &Load tracking data... + + + + + &Save tracking data... + + + + + E&xit + + + + + L&oad Tracker... + + + + + Open &Camera... + + + + + + + diff --git a/biotracker/View/BioTracker3VideoControllWidget.cpp b/biotracker/View/BioTracker3VideoControllWidget.cpp new file mode 100644 index 0000000..ad75e6c --- /dev/null +++ b/biotracker/View/BioTracker3VideoControllWidget.cpp @@ -0,0 +1,132 @@ +#include "BioTracker3VideoControllWidget.h" +#include "ui_BioTracker3VideoControllWidget.h" +#include "Controller/ControllerPlayer.h" + +#include "Interfaces/IStates/IPlayerState.h" + +BioTracker3VideoControllWidget::BioTracker3VideoControllWidget(QWidget *parent, IController *controller, IModel *model) : + IViewWidget(parent, controller, model), + ui(new Ui::BioTracker3VideoControllWidget) +{ + ui->setupUi(this); + + m_iconPause.addFile(QStringLiteral(":/BioTracker/resources/pause-sign.png"), + QSize(), QIcon::Normal, QIcon::Off); + m_iconPlay.addFile(QStringLiteral(":/BioTracker/resources/arrow-forward1.png"), + QSize(), QIcon::Normal, QIcon::Off); +} + +BioTracker3VideoControllWidget::~BioTracker3VideoControllWidget() +{ + delete ui; +} + +void BioTracker3VideoControllWidget::setSelectedView(QString str) +{ + if (!ui->comboBoxSelectedView->findText(str)) { + ui->comboBoxSelectedView->addItem(str); + } + ui->comboBoxSelectedView->setCurrentText(str); +} + +void BioTracker3VideoControllWidget::setVideoViewComboboxModel(QStringListModel *comboboxModel) +{ + ui->comboBoxSelectedView->setModel(comboboxModel); +} + +void BioTracker3VideoControllWidget::getNotified() +{ + ui->button_nextFrame->setEnabled(m_Forw); + ui->button_playPause->setEnabled(m_Play); + ui->button_previousFrame->setEnabled(m_Back); + ui->button_stop->setEnabled(m_Stop); + + + if (m_Paus) { + ui->button_playPause->setIcon(m_iconPause); + } + else { + ui->button_playPause->setIcon(m_iconPlay); + } +} + +void BioTracker3VideoControllWidget::setTotalNumbFrames(size_t numb) +{ + m_TotalNumbFrames = numb; +} + +void BioTracker3VideoControllWidget::setCurrentFrameNumber(size_t numb) +{ + m_CurrentFrameNumber = numb; + ui->frame_num_edit->setText(QString::number(m_CurrentFrameNumber)); +} + +void BioTracker3VideoControllWidget::setFPS(double fps) +{ + ui->fps_label->setText(QString::number(fps)); +} + +void BioTracker3VideoControllWidget::setVideoControllsStates(QVector states) +{ + + m_Back = states.at(0); + m_Forw = states.at(1); + m_Paus = states.at(2); + m_Play = states.at(3); + m_Stop = states.at(4); + +} + +void BioTracker3VideoControllWidget::on_button_nextFrame_clicked() +{ + ControllerPlayer *controller = dynamic_cast(getController()); + controller->nextFrame(); +} + +void BioTracker3VideoControllWidget::on_button_playPause_clicked() +{ + ControllerPlayer *controller = dynamic_cast(getController()); + + if (m_Paus) { + controller->pause(); + } + else { + controller->play(); + } +} + +void BioTracker3VideoControllWidget::on_button_stop_clicked() +{ + ControllerPlayer *controller = dynamic_cast(getController()); + controller->stop(); +} + +void BioTracker3VideoControllWidget::on_button_previousFrame_clicked() +{ + ControllerPlayer *controller = dynamic_cast(getController()); + controller->prevFrame(); +} + +void BioTracker3VideoControllWidget::on_sld_video_sliderMoved(int position) +{ + +} + +void BioTracker3VideoControllWidget::on_DurationChanged(int position) +{ + +} + +void BioTracker3VideoControllWidget::on_PositionChanged(int position) +{ + +} + + +void BioTracker3VideoControllWidget::on_comboBoxSelectedView_currentTextChanged(const QString &arg1) +{ + QString name = arg1; + ControllerPlayer *controller = dynamic_cast(getController()); + + controller->changeImageView(name); +} diff --git a/biotracker/View/BioTracker3VideoControllWidget.h b/biotracker/View/BioTracker3VideoControllWidget.h new file mode 100644 index 0000000..f5586c5 --- /dev/null +++ b/biotracker/View/BioTracker3VideoControllWidget.h @@ -0,0 +1,69 @@ +#ifndef BIOTRACKER3VIDEOCONTROLLWIDGET_H +#define BIOTRACKER3VIDEOCONTROLLWIDGET_H + +#include +#include "QIcon" +#include "Interfaces/IView/IViewWidget.h" +#include "QMap" +#include "QMetaEnum" +#include "QStringListModel" + + +namespace Ui { +class BioTracker3VideoControllWidget; +} + +class BioTracker3VideoControllWidget : public IViewWidget +{ + Q_OBJECT + +public: + explicit BioTracker3VideoControllWidget(QWidget *parent = 0, IController *controller = 0, IModel *model = 0); + ~BioTracker3VideoControllWidget(); + + void setSelectedView(QString str); + + void setVideoViewComboboxModel(QStringListModel *comboboxModel); + + void setTotalNumbFrames(size_t numb); + void setCurrentFrameNumber(size_t numb); + void setFPS(double fps); + void setVideoControllsStates(QVector states); + + +public Q_SLOTS: + void getNotified(); + +private Q_SLOTS: + void on_sld_video_sliderMoved(int position); + void on_DurationChanged(int position); + void on_PositionChanged(int position); + void on_button_nextFrame_clicked(); + void on_button_playPause_clicked(); + + void on_button_stop_clicked(); + + void on_button_previousFrame_clicked(); + + + void on_comboBoxSelectedView_currentTextChanged(const QString &arg1); + + +private: + Ui::BioTracker3VideoControllWidget *ui; + + QIcon m_iconPause; + QIcon m_iconPlay; + + bool m_Play; + bool m_Forw; + bool m_Back; + bool m_Stop; + bool m_Paus; + + size_t m_TotalNumbFrames; + size_t m_CurrentFrameNumber; + double m_fps; +}; + +#endif // BIOTRACKER3VIDEOCONTROLLWIDGET_H diff --git a/biotracker/View/BioTracker3VideoControllWidget.ui b/biotracker/View/BioTracker3VideoControllWidget.ui new file mode 100644 index 0000000..5f4f4a6 --- /dev/null +++ b/biotracker/View/BioTracker3VideoControllWidget.ui @@ -0,0 +1,511 @@ + + + BioTracker3VideoControllWidget + + + + 0 + 0 + 775 + 193 + + + + + 0 + 0 + + + + Form + + + + + + false + + + + 0 + 0 + + + + false + + + 2500 + + + 25 + + + Qt::Horizontal + + + false + + + false + + + QSlider::TicksAbove + + + 25 + + + + + + + + 0 + 0 + + + + Video Controls + + + false + + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + false + + + Previous Frame + + + + + + + + + + :/BioTracker/resources/arrows-skip-back.png:/BioTracker/resources/arrows-skip-back.png + + + + 32 + 32 + + + + + + + + false + + + Play + + + + + + + + + + :/BioTracker/resources/arrow-forward1.png:/BioTracker/resources/arrow-forward1.png + + + + 32 + 32 + + + + + + + + false + + + Stop + + + + + + + + + + + + + :/BioTracker/resources/stop.png:/BioTracker/resources/stop.png + + + + 32 + 32 + + + + + + + + false + + + Next Frame + + + + + + + + + + + + + :/BioTracker/resources/arrows-skip-forward.png:/BioTracker/resources/arrows-skip-forward.png + + + + 32 + 32 + + + + + + + + true + + + + 16 + 75 + false + true + + + + Screenshot + + + + + + + + + + :/BioTracker/resources/screenshot.png:/BioTracker/resources/screenshot.png + + + + 30 + 30 + + + + + + + + Current frame: + + + + + + + false + + + + 0 + 0 + + + + + 60 + 30 + + + + 0 + + + + + + + Qt::Horizontal + + + QSizePolicy::MinimumExpanding + + + + 40 + 20 + + + + + + + + View: + + + + + + + + 0 + 0 + + + + + 100 + 0 + + + + + 0 + 0 + + + + + Original + + + + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 40 + 20 + + + + + + + + + 16 + 75 + false + true + + + + Pan/Zoom Mode + + + + + + + :/BioTracker/resources/panZoom.png:/BioTracker/resources/panZoom.png + + + + 30 + 30 + + + + true + + + + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Playback Speed + + + + + + 5 + + + + + true + + + slow + + + + + + + + 0 + 0 + + + + 1 + + + 61 + + + 30 + + + 30 + + + Qt::Horizontal + + + + + + + fast + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + target fps: + + + + + + + 30 + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + measured fps: + + + + + + + + 60 + 0 + + + + + + + + + + + + + + + + + diff --git a/biotracker/View/BioTracker3VideoView.cpp b/biotracker/View/BioTracker3VideoView.cpp new file mode 100644 index 0000000..198e9e0 --- /dev/null +++ b/biotracker/View/BioTracker3VideoView.cpp @@ -0,0 +1,58 @@ +#include "BioTracker3VideoView.h" + +#include +#include "Interfaces/IController/icontroller.h" + +#include "Model/BioTracker3TextureObject.h" + + +BioTracker3VideoView::BioTracker3VideoView(QWidget *parent, IController *controller, IModel *model): + IViewOpenGLWidget(parent, controller, model) +{ +} + +BioTracker3VideoView::~BioTracker3VideoView() +{ + +} + +void BioTracker3VideoView::paintGL() +{ + BioTracker3TextureObject *textureObject = dynamic_cast(getModel()); + QImage img = textureObject->get(); + + + QPainter painter(this); + + painter.setBrush(QColor(0, 0, 0)); + painter.drawRect(QRect(0, 0, this->width(), this->height())); + painter.setBrush(QColor(0, 0, 0, 0)); + + QRect window; + QRect viewport; + const float viewport_skew = BioTracker::Core::ScreenHelper::calculate_viewport( + textureObject->width(), + textureObject->height(), + this->width(), + this->height(), + window, + viewport + ); + + painter.setWindow(window); + painter.setViewport(viewport); + + QRectF target(0, 0 , textureObject->width(), textureObject->height()); + QRectF source(0, 0, textureObject->width(), textureObject->height()); + + + + painter.drawImage(target, img, source); + QPainter p(this); + +} + +void BioTracker3VideoView::getNotified() +{ + this->update(); +} diff --git a/biotracker/View/BioTracker3VideoView.h b/biotracker/View/BioTracker3VideoView.h new file mode 100644 index 0000000..518b23f --- /dev/null +++ b/biotracker/View/BioTracker3VideoView.h @@ -0,0 +1,28 @@ +#ifndef BIOTRACKER3VIDEOVIEW_H +#define BIOTRACKER3VIDEOVIEW_H + +#include "Interfaces/IView/IViewOpenGLWidget.h" + +#include "QPainter" +#include "Interfaces/IView/IViewWidget.h" +#include "TextureObject.h" + + + +class BioTracker3VideoView: public IViewOpenGLWidget +{ +public: + BioTracker3VideoView(QWidget *parent, IController *controller = 0, IModel *model = 0); + ~BioTracker3VideoView(); + +private: + void paintGL() override; + + +public Q_SLOTS: + void getNotified(); + + +}; + +#endif // BIOTRACKER3VIDEOVIEW_H diff --git a/biotracker/View/GraphicsView.cpp b/biotracker/View/GraphicsView.cpp new file mode 100644 index 0000000..b9820c0 --- /dev/null +++ b/biotracker/View/GraphicsView.cpp @@ -0,0 +1,53 @@ +#include "GraphicsView.h" +#include "QTimeLine" +#include "QWheelEvent" + +GraphicsView::GraphicsView(QWidget *parent, IController *controller, IModel *model) : + IGraphicsView(parent, controller, model) +{ + m_GraphicsScene = new QGraphicsScene(); + this->setScene(m_GraphicsScene); + + this->show(); + +} + +void GraphicsView::addGraphicsItem(QGraphicsItem *item) +{ + m_GraphicsScene->addItem(item); + + update(); +} + +void GraphicsView::addPixmapItem(QGraphicsItem *item) +{ + m_GraphicsScene->addItem(item); + + update(); +} + +void GraphicsView::getNotified() +{ + +} + +void GraphicsView::wheelEvent(QWheelEvent *event) +{ + //if ctrl pressed, use original functionality + if(event->modifiers() & Qt::ControlModifier) + { + QGraphicsView::wheelEvent(event); + } + //otherwise, do yours + else + { + if(event->delta() > 0) + { + scale(1.1,1.1); + } + else + { + scale(0.9,0.9); + } + } +} diff --git a/biotracker/View/GraphicsView.h b/biotracker/View/GraphicsView.h new file mode 100644 index 0000000..ab0bb69 --- /dev/null +++ b/biotracker/View/GraphicsView.h @@ -0,0 +1,27 @@ +#ifndef GRAPHICSVIEW_H +#define GRAPHICSVIEW_H + +#include "Interfaces/IView/IGraphicsView.h" +#include "QGraphicsScene" + +class GraphicsView : public IGraphicsView +{ +public: + GraphicsView(QWidget *parent = 0, IController *controller = 0, IModel *model = 0); + + void addGraphicsItem(QGraphicsItem *item); + void addPixmapItem(QGraphicsItem *item); + + // IGraphicsView interface +public Q_SLOTS: + void getNotified() override; + +private: + QGraphicsScene *m_GraphicsScene; + + // QWidget interface +protected: + void wheelEvent(QWheelEvent *event) override; +}; + +#endif // GRAPHICSVIEW_H diff --git a/biotracker/View/TextureObjectView.cpp b/biotracker/View/TextureObjectView.cpp new file mode 100644 index 0000000..70e7678 --- /dev/null +++ b/biotracker/View/TextureObjectView.cpp @@ -0,0 +1,26 @@ +#include "TextureObjectView.h" +#include "Model/BioTracker3TextureObject.h" + + +TextureObjectView::TextureObjectView(QObject *parent, IController *controller, IModel *model) : + IGraphicsPixmapItem(parent, controller, model) +{ + setZValue(-1); +} + +void TextureObjectView::getNotified() +{ + BioTracker3TextureObject *texture = dynamic_cast(getModel()); + QPixmap *pmap = new QPixmap; + pmap->convertFromImage(texture->get()); + setPixmap(*pmap); + + update(); +} + +void TextureObjectView::connectModelView() +{ + QObject::connect(getModel(), &IModel::notifyView, this, &TextureObjectView::getNotified); + + getNotified(); +} diff --git a/biotracker/View/TextureObjectView.h b/biotracker/View/TextureObjectView.h new file mode 100644 index 0000000..b652466 --- /dev/null +++ b/biotracker/View/TextureObjectView.h @@ -0,0 +1,21 @@ +#ifndef TEXTUREOBJECTVIEW_H +#define TEXTUREOBJECTVIEW_H + +#include "Interfaces/IView/IGraphicsPixmapItem.h" + +class TextureObjectView : public IGraphicsPixmapItem +{ + Q_OBJECT +public: + TextureObjectView(QObject *parent = 0, IController *controller = 0, IModel *model = 0); + + // IGraphicsPixmapItem interface +public Q_SLOTS: + void getNotified() override; + + // IView interface +protected: + void connectModelView() override; +}; + +#endif // TEXTUREOBJECTVIEW_H diff --git a/biotracker/View/TrackedElementView.cpp b/biotracker/View/TrackedElementView.cpp new file mode 100644 index 0000000..f4e74c3 --- /dev/null +++ b/biotracker/View/TrackedElementView.cpp @@ -0,0 +1,66 @@ +#include "TrackedElementView.h" +#include "Model/TrackedComponents/TrackedElement.h" +#include "QBrush" +#include "QPainter" + +TrackedElementView::TrackedElementView(QGraphicsItem *parent, IController *controller, IModel *model) : + IViewTrackedComponent(parent, controller, model) +{ + TrackedElement *elem = dynamic_cast(getModel()); + m_boundingRect = QRectF(0,0, 100, 100); + + setAcceptHoverEvents(true); +} + +QRectF TrackedElementView::boundingRect() const +{ + + return m_boundingRect; +} + +void TrackedElementView::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + TrackedElement *elem = dynamic_cast(getModel()); + + QRectF rec = boundingRect(); + + QBrush brush(Qt::blue); + + if(elem->getPressedStatus()) + { + brush.setColor(Qt::red); + } + else + { + brush.setColor(Qt::green); + } + + painter->fillRect(rec,brush); + painter->drawRect(rec); + +} + +void TrackedElementView::getNotified() +{ + update(); +} + +void TrackedElementView::hoverEnterEvent(QGraphicsSceneHoverEvent *event) +{ + TrackedElement *elem = dynamic_cast(getModel()); + + elem->pressed(); + update(); + + QGraphicsObject::hoverEnterEvent(event); +} + +void TrackedElementView::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) +{ + TrackedElement *elem = dynamic_cast(getModel()); + + elem->notPressed(); + update(); + + QGraphicsObject::hoverLeaveEvent(event); +} diff --git a/biotracker/View/TrackedElementView.h b/biotracker/View/TrackedElementView.h new file mode 100644 index 0000000..b2ca1ea --- /dev/null +++ b/biotracker/View/TrackedElementView.h @@ -0,0 +1,32 @@ +#ifndef TRACKEDELEMENTVIEW_H +#define TRACKEDELEMENTVIEW_H + +#include "../biotracker/Interfaces/IView/IViewTrackedComponent.h" + +class TrackedElementView : public IViewTrackedComponent +{ + Q_OBJECT +public: + TrackedElementView(QGraphicsItem *parent = 0, IController *controller = 0, IModel *model = 0); + + // QGraphicsItem interface +public: + QRectF boundingRect() const override; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; + + // IViewTrackedComponent interface +public Q_SLOTS: + void getNotified() override; + +private: + QRectF m_boundingRect; + + + + // QGraphicsItem interface +protected: + void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; +}; + +#endif // TRACKEDELEMENTVIEW_H diff --git a/biotracker/View/TrackedImageView.cpp b/biotracker/View/TrackedImageView.cpp new file mode 100644 index 0000000..9dbadff --- /dev/null +++ b/biotracker/View/TrackedImageView.cpp @@ -0,0 +1,57 @@ +#include "TrackedImageView.h" + +#include +#include "Interfaces/IController/icontroller.h" + +#include "Model/BioTracker3TextureObject.h" + +TrackedImageView::TrackedImageView(QWidget *parent, IController *controller, IModel *model): + IViewOpenGLWidget(parent, controller, model) +{ + +} + +TrackedImageView::~TrackedImageView() +{ + +} + +void TrackedImageView::paintGL() +{ + BioTracker3TextureObject *textureObject = dynamic_cast(getModel()); + QImage img = textureObject->get(); + + + QPainter painter(this); + + painter.setBrush(QColor(0, 0, 0)); + painter.drawRect(QRect(0, 0, this->width(), this->height())); + painter.setBrush(QColor(0, 0, 0, 0)); + + QRect window; + QRect viewport; + const float viewport_skew = BioTracker::Core::ScreenHelper::calculate_viewport( + textureObject->width(), + textureObject->height(), + this->width(), + this->height(), + window, + viewport + ); + + painter.setWindow(window); + painter.setViewport(viewport); + + QRectF target(0, 0 , textureObject->width(), textureObject->height()); + QRectF source(0, 0, textureObject->width(), textureObject->height()); + + + + painter.drawImage(target, img, source); + QPainter p(this); +} + +void TrackedImageView::getNotified() +{ + this->update(); +} diff --git a/biotracker/View/TrackedImageView.h b/biotracker/View/TrackedImageView.h new file mode 100644 index 0000000..e64dfcb --- /dev/null +++ b/biotracker/View/TrackedImageView.h @@ -0,0 +1,25 @@ +#ifndef TRACKEDIMAGEVIEW_H +#define TRACKEDIMAGEVIEW_H + +#include "Interfaces/IView/IViewOpenGLWidget.h" + +#include "QPainter" +#include "Interfaces/IView/IViewWidget.h" +#include "TextureObject.h" + +class TrackedImageView : public IViewOpenGLWidget +{ +public: + TrackedImageView(QWidget *parent, IController *controller, IModel *model); + ~TrackedImageView(); + + // QOpenGLWidget interface +protected: + void paintGL() override; + + // IViewOpenGLWidget interface +public Q_SLOTS: + void getNotified() override; +}; + +#endif // TRACKEDIMAGEVIEW_H diff --git a/biotracker/src/Gui.cpp b/biotracker/src/Gui.cpp index f39c9cc..9b833a0 100644 --- a/biotracker/src/Gui.cpp +++ b/biotracker/src/Gui.cpp @@ -59,6 +59,8 @@ void Gui::initConnects() { m_mainWindow.getVideoControl(), &VideoControlWidget::fileOpened); } + +// NOTE andi this part is in new MainWindow void Gui::browseVideo() { static const QString videoFilter("Video files (*.avi *.wmv *.mp4 *.mkv *.mov)"); std::vector files; diff --git a/biotracker/src/VideoControlWidget.cpp b/biotracker/src/VideoControlWidget.cpp index 821ca15..4ce5285 100644 --- a/biotracker/src/VideoControlWidget.cpp +++ b/biotracker/src/VideoControlWidget.cpp @@ -172,8 +172,8 @@ void VideoControlWidget::nextFrame() { void VideoControlWidget::fileOpened(const std::string filename, const size_t totalFrames, const double targetFps) { - (void)filename; // "un-use" filename. FileOpen is a generic event, but we dont - // need the filename at this place + (void)filename; /* @bug "un-used" filename. FileOpen is a generic event, but we dont + // need the filename at this place */ assert(totalFrames > 0); m_ui.sld_video->setMaximum(static_cast(totalFrames - 1)); m_ui.fps_label->setText(QString::number(targetFps)); @@ -239,6 +239,7 @@ void VideoControlWidget::onRequestRepaint() { } void VideoControlWidget::registerViews(const std::vector views) { + /** @bug What is the sense this fuction?? VideoControlWidget::registerViews() */ m_ui.comboBoxSelectedView->clear(); m_ui.comboBoxSelectedView->addItem("Original"); for (auto view : views) { diff --git a/biotracker/src/main.cpp b/biotracker/src/main.cpp index b1ceab6..cf5f72f 100644 --- a/biotracker/src/main.cpp +++ b/biotracker/src/main.cpp @@ -9,34 +9,56 @@ #include "../Gui.h" #include "biotracker/util/stdext.h" +/// NOTE edit by Andi +#include "BioTracker3App.h" +#include "biotracker/Controller/ControllerStrategies/GuiContext.h" + int main(int argc, char *argv[]) { QApplication app(argc, argv); - // workaround for cereal issue 144 - // see: https://github.com/USCiLab/cereal/issues/144 - std::setlocale(LC_NUMERIC, "C"); + /// NOTE edit by Andi - // meta types qRegisterMetaType("cv::Mat"); - qRegisterMetaType("BioTracker::Core::Messages::MessageType"); - qRegisterMetaType("MessageType"); - qRegisterMetaType("std::string"); qRegisterMetaType("std::size_t"); qRegisterMetaType("size_t"); - qRegisterMetaType("TrackerType"); - - if (SystemCompatibilityCheck::checkOpenGLSupport()) { - app.setOrganizationName("Biorobotics Lab / FU Berlin"); - app.setApplicationName("BioTracker"); - - BioTracker::Gui::Gui w; - return app.exec(); - } else { - static const std::string title = BioTracker::Core::Messages::System::APPLICATION_CANNOT_START; - static const std::string msg = BioTracker::Core::Messages::System::NO_OPENGL; - QMessageBox::critical(nullptr, - QString::fromStdString(title), - QString::fromStdString(msg)); - } - return EXIT_FAILURE; + + + + //BioTrackerController mController; + + BioTracker3App bioTracker3(&app); + GuiContext context(&bioTracker3); + bioTracker3.setBioTrackerContext(&context); + bioTracker3.runBioTracker(); + + app.exec(); + /// till here. + +// // workaround for cereal issue 144 +// // see: https://github.com/USCiLab/cereal/issues/144 +// std::setlocale(LC_NUMERIC, "C"); + +// // meta types +// qRegisterMetaType("cv::Mat"); +// qRegisterMetaType("BioTracker::Core::Messages::MessageType"); +// qRegisterMetaType("MessageType"); +// qRegisterMetaType("std::string"); +// qRegisterMetaType("std::size_t"); +// qRegisterMetaType("size_t"); +// qRegisterMetaType("TrackerType"); + +// if (SystemCompatibilityCheck::checkOpenGLSupport()) { +// app.setOrganizationName("Biorobotics Lab / FU Berlin"); +// app.setApplicationName("BioTracker"); + +// BioTracker::Gui::Gui w; +// return app.exec(); +// } else { +// static const std::string title = BioTracker::Core::Messages::System::APPLICATION_CANNOT_START; +// static const std::string msg = BioTracker::Core::Messages::System::NO_OPENGL; +// QMessageBox::critical(nullptr, +// QString::fromStdString(title), +// QString::fromStdString(msg)); +// } +// return EXIT_FAILURE; }