Motiv
Marvelous OTF2 Traces Interactive Visualizer
Loading...
Searching...
No Matches
InformationDock.cpp
1/*
2 * Marvelous OTF2 Traces Interactive Visualizer (MOTIV)
3 * Copyright (C) 2023 Florian Gallrein, Björn Gehrke
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18#include "TimeUnitLabel.hpp"
19#include "src/utils.hpp"
20#include <QPushButton>
21#include <QFormLayout>
22#include "InformationDock.hpp"
23
24
25
26InformationDock::InformationDock(QWidget *parent) : QDockWidget(parent) {
27 setWindowTitle(tr("Details"));
28}
29
30InformationDock::~InformationDock() {
31 delete this->element_;
32 for(auto &item : this->strategies_) {
33 delete item.first;
34 delete item.second;
35 }
36}
37
39 if(!element_) return;
40
41 for (auto &item: strategies_) {
42 auto widget = item.first;
43 auto strategy = item.second;
44 if(strategy->update(static_cast<QFormLayout *>(widget->layout()), element_)) {
45 setWidget(widget);
46 setWindowTitle("Details - " + QString::fromStdString(strategy->title()));
47 break;
48 }
49 }
50}
51
52void InformationDock::zoomIntoViewPressed() {
53 if(!element_) return;
54
55 auto padding = element_->getDuration() / 10;
56
57 Q_EMIT zoomToWindow(element_->getStartTime() - padding, element_->getEndTime() + padding);
58}
59
61 element_ = element;
62
63 updateView();
64}
65
67 auto widget = new QWidget();
68 auto layout = new QFormLayout(widget);
69 layout->setAlignment(Qt::AlignLeading | Qt::AlignTop);
70
71 s->setup(layout);
72
73 auto zoomIntoViewButton = new QPushButton(tr("Zoom into &view"));
74 connect(zoomIntoViewButton, SIGNAL(clicked()), this, SLOT(zoomIntoViewPressed()));
75 layout->addWidget(zoomIntoViewButton);
76
77 widget->setLayout(layout);
78
79 strategies_.emplace_back(widget, s);
80}
A base class for strategies for the InformationDock to show information about a TimedElement.
virtual void setup(QFormLayout *)
Sets up the QFormLayout.
InformationDock(QWidget *parent=nullptr)
Creates a new instance of the InformationDock class.
void zoomToWindow(types::TraceTime from, types::TraceTime to)
Signal indicating to zoom to a specific time window.
void addElementStrategy(InformationDockElementStrategy *s)
Add a strategy to display information for specific items.
virtual void updateView()
Updates the view.
void setElement(TimedElement *element)
Sets the current element.
A base class for all elements with a start and end time.
virtual types::TraceTime getDuration() const
Returns the duration of the current object.
virtual types::TraceTime getEndTime() const =0
Returns the end time of the current object.
virtual types::TraceTime getStartTime() const =0
Returns the start time of the current object.