diff --git a/app/node/output/track/track.cpp b/app/node/output/track/track.cpp index 1467ef046..3f3beaab2 100644 --- a/app/node/output/track/track.cpp +++ b/app/node/output/track/track.cpp @@ -328,11 +328,21 @@ bool TrackOutput::IsTrack() const return true; } +int TrackOutput::GetTrackHeightIncrement() +{ + return qApp->fontMetrics().height() / 2; +} + int TrackOutput::GetDefaultTrackHeight() { return qApp->fontMetrics().height() * 3; } +int TrackOutput::GetTrackHeightMinimum() +{ + return qApp->fontMetrics().height() * 3 / 2; +} + QString TrackOutput::GetDefaultTrackName(TrackType type, int index) { // Starts tracks at 1 rather than 0 diff --git a/app/node/output/track/track.h b/app/node/output/track/track.h index cd65ce3c2..a2e724059 100644 --- a/app/node/output/track/track.h +++ b/app/node/output/track/track.h @@ -120,8 +120,12 @@ public: virtual bool IsTrack() const override; + static int GetTrackHeightIncrement(); + static int GetDefaultTrackHeight(); + static int GetTrackHeightMinimum(); + static QString GetDefaultTrackName(TrackType type, int index); bool IsMuted() const; diff --git a/app/panel/curve/curve.cpp b/app/panel/curve/curve.cpp index 31cea1c17..6e586462a 100644 --- a/app/panel/curve/curve.cpp +++ b/app/panel/curve/curve.cpp @@ -41,6 +41,16 @@ void CurvePanel::ZoomOut() widget_->SetScale(widget_->GetScale() * 0.5); } +void CurvePanel::IncreaseTrackHeight() +{ + widget_->SetVerticalScale(widget_->GetVerticalScale() * 2); +} + +void CurvePanel::DecreaseTrackHeight() +{ + widget_->SetVerticalScale(widget_->GetVerticalScale() * 0.5); +} + void CurvePanel::changeEvent(QEvent *e) { if (e->type() == QEvent::LanguageChange) { diff --git a/app/panel/curve/curve.h b/app/panel/curve/curve.h index 36b2170a4..6a0134b14 100644 --- a/app/panel/curve/curve.h +++ b/app/panel/curve/curve.h @@ -21,6 +21,10 @@ public slots: virtual void ZoomOut() override; + virtual void IncreaseTrackHeight() override; + + virtual void DecreaseTrackHeight() override; + signals: void TimeChanged(const int64_t& timestamp); diff --git a/app/panel/timeline/timeline.cpp b/app/panel/timeline/timeline.cpp index d3f4041df..6dd820079 100644 --- a/app/panel/timeline/timeline.cpp +++ b/app/panel/timeline/timeline.cpp @@ -119,6 +119,16 @@ void TimelinePanel::DeleteSelected() timeline_widget_->DeleteSelected(); } +void TimelinePanel::IncreaseTrackHeight() +{ + timeline_widget_->IncreaseTrackHeight(); +} + +void TimelinePanel::DecreaseTrackHeight() +{ + timeline_widget_->DecreaseTrackHeight(); +} + void TimelinePanel::changeEvent(QEvent *e) { if (e->type() == QEvent::LanguageChange) { diff --git a/app/panel/timeline/timeline.h b/app/panel/timeline/timeline.h index d4c107bde..30c681492 100644 --- a/app/panel/timeline/timeline.h +++ b/app/panel/timeline/timeline.h @@ -64,6 +64,10 @@ public: virtual void DeleteSelected() override; + virtual void IncreaseTrackHeight() override; + + virtual void DecreaseTrackHeight() override; + public slots: void SetTimebase(const rational& timebase); diff --git a/app/widget/curvewidget/curveview.cpp b/app/widget/curvewidget/curveview.cpp index b3984321b..9cca7c9c7 100644 --- a/app/widget/curvewidget/curveview.cpp +++ b/app/widget/curvewidget/curveview.cpp @@ -8,7 +8,7 @@ CurveView::CurveView(QWidget *parent) : KeyframeViewBase(parent) { - setAlignment(Qt::AlignLeft | Qt::AlignBottom); + setAlignment(Qt::AlignLeft | Qt::AlignVCenter); setDragMode(RubberBandDrag); setViewportUpdateMode(FullViewportUpdate); SetYAxisEnabled(true); @@ -181,6 +181,7 @@ void CurveView::drawBackground(QPainter *painter, const QRectF &rect) void CurveView::KeyframeAboutToBeRemoved(NodeKeyframe *key) { disconnect(key, &NodeKeyframe::ValueChanged, this, &CurveView::KeyframeValueChanged); + disconnect(key, &NodeKeyframe::TypeChanged, this, &CurveView::KeyframeTypeChanged); } void CurveView::ScaleChangedEvent(double scale) @@ -192,6 +193,15 @@ void CurveView::ScaleChangedEvent(double scale) } } +void CurveView::VerticalScaleChangedEvent(double scale) +{ + QMap::const_iterator iterator; + + for (iterator=item_map().begin();iterator!=item_map().end();iterator++) { + SetItemYFromKeyframeValue(iterator.value()->key().get(), iterator.value()); + } +} + QList CurveView::GetKeyframesSortedByTime() { QList sorted; @@ -234,6 +244,19 @@ QPointF CurveView::ScalePoint(const QPointF &point) return QPointF(point.x() * scale_, - point.y() * y_scale_); } +void CurveView::CreateBezierControlPoints(KeyframeViewItem* item) +{ + BezierControlPointItem* bezier_in_pt = new BezierControlPointItem(item->key(), NodeKeyframe::kInHandle, item); + bezier_in_pt->SetXScale(scale_); + bezier_control_points_.append(bezier_in_pt); + connect(bezier_in_pt, &QObject::destroyed, this, &CurveView::BezierControlPointDestroyed, Qt::DirectConnection); + + BezierControlPointItem* bezier_out_pt = new BezierControlPointItem(item->key(), NodeKeyframe::kOutHandle, item); + bezier_out_pt->SetXScale(scale_); + bezier_control_points_.append(bezier_out_pt); + connect(bezier_out_pt, &QObject::destroyed, this, &CurveView::BezierControlPointDestroyed, Qt::DirectConnection); +} + void CurveView::KeyframeValueChanged() { NodeKeyframe* key = static_cast(sender()); @@ -242,6 +265,17 @@ void CurveView::KeyframeValueChanged() SetItemYFromKeyframeValue(key, item); } +void CurveView::KeyframeTypeChanged() +{ + NodeKeyframe* key = static_cast(sender()); + KeyframeViewItem* item = item_map().value(key); + + if (item->isSelected()) { + item->setSelected(false); + item->setSelected(true); + } +} + void CurveView::SelectionChanged() { // Clear current bezier handles @@ -255,15 +289,9 @@ void CurveView::SelectionChanged() foreach (QGraphicsItem* item, selected) { KeyframeViewItem* this_item = static_cast(item); - BezierControlPointItem* bezier_in_pt = new BezierControlPointItem(this_item->key(), NodeKeyframe::kInHandle, item); - bezier_in_pt->SetXScale(scale_); - bezier_control_points_.append(bezier_in_pt); - connect(bezier_in_pt, &QObject::destroyed, this, &CurveView::BezierControlPointDestroyed, Qt::DirectConnection); - - BezierControlPointItem* bezier_out_pt = new BezierControlPointItem(this_item->key(), NodeKeyframe::kOutHandle, item); - bezier_out_pt->SetXScale(scale_); - bezier_control_points_.append(bezier_out_pt); - connect(bezier_out_pt, &QObject::destroyed, this, &CurveView::BezierControlPointDestroyed, Qt::DirectConnection); + if (this_item->key()->type() == NodeKeyframe::kBezier) { + CreateBezierControlPoints(this_item); + } } } @@ -279,4 +307,5 @@ void CurveView::AddKeyframe(NodeKeyframePtr key) SetItemYFromKeyframeValue(key.get(), item); connect(key.get(), &NodeKeyframe::ValueChanged, this, &CurveView::KeyframeValueChanged); + connect(key.get(), &NodeKeyframe::TypeChanged, this, &CurveView::KeyframeTypeChanged); } diff --git a/app/widget/curvewidget/curveview.h b/app/widget/curvewidget/curveview.h index d3508858a..974003f7c 100644 --- a/app/widget/curvewidget/curveview.h +++ b/app/widget/curvewidget/curveview.h @@ -25,6 +25,8 @@ protected: virtual void ScaleChangedEvent(double scale) override; + virtual void VerticalScaleChangedEvent(double scale) override; + private: QList GetKeyframesSortedByTime(); @@ -36,6 +38,8 @@ private: void AdjustLines(); + void CreateBezierControlPoints(KeyframeViewItem *item); + int text_padding_; int minimum_grid_space_; @@ -47,6 +51,8 @@ private: private slots: void KeyframeValueChanged(); + void KeyframeTypeChanged(); + void SelectionChanged(); void BezierControlPointDestroyed(); diff --git a/app/widget/curvewidget/curvewidget.cpp b/app/widget/curvewidget/curvewidget.cpp index df1e7ec39..a48d34be8 100644 --- a/app/widget/curvewidget/curvewidget.cpp +++ b/app/widget/curvewidget/curvewidget.cpp @@ -148,6 +148,16 @@ void CurveWidget::SetScale(const double &scale) view_->SetScale(scale); } +const double &CurveWidget::GetVerticalScale() +{ + return view_->GetYScale(); +} + +void CurveWidget::SetVerticalScale(const double &vscale) +{ + view_->SetYScale(vscale); +} + void CurveWidget::changeEvent(QEvent *e) { if (e->type() == QEvent::LanguageChange) { diff --git a/app/widget/curvewidget/curvewidget.h b/app/widget/curvewidget/curvewidget.h index c9e3db4f1..6b95fae51 100644 --- a/app/widget/curvewidget/curvewidget.h +++ b/app/widget/curvewidget/curvewidget.h @@ -28,6 +28,9 @@ public: const double& GetScale(); void SetScale(const double& scale); + const double& GetVerticalScale(); + void SetVerticalScale(const double& vscale); + signals: void TimeChanged(const int64_t& timestamp); diff --git a/app/widget/keyframeview/keyframeviewbase.cpp b/app/widget/keyframeview/keyframeviewbase.cpp index fb5b4c823..660549d8c 100644 --- a/app/widget/keyframeview/keyframeviewbase.cpp +++ b/app/widget/keyframeview/keyframeviewbase.cpp @@ -33,10 +33,20 @@ void KeyframeViewBase::Clear() item_map_.clear(); } +const double &KeyframeViewBase::GetYScale() const +{ + return y_scale_; +} + void KeyframeViewBase::SetYScale(const double &y_scale) { y_scale_ = y_scale; - viewport()->update(); + + if (y_axis_enabled_) { + VerticalScaleChangedEvent(y_scale_); + + viewport()->update(); + } } void KeyframeViewBase::RemoveKeyframe(NodeKeyframePtr key) @@ -188,6 +198,10 @@ void KeyframeViewBase::ScaleChangedEvent(double scale) } } +void KeyframeViewBase::VerticalScaleChangedEvent(double scale) +{ +} + const QMap &KeyframeViewBase::item_map() const { return item_map_; diff --git a/app/widget/keyframeview/keyframeviewbase.h b/app/widget/keyframeview/keyframeviewbase.h index 5d49f547e..28431250c 100644 --- a/app/widget/keyframeview/keyframeviewbase.h +++ b/app/widget/keyframeview/keyframeviewbase.h @@ -15,6 +15,7 @@ public: virtual void Clear(); + const double& GetYScale() const; void SetYScale(const double& y_scale); public slots: @@ -29,6 +30,8 @@ protected: virtual void ScaleChangedEvent(double scale) override; + virtual void VerticalScaleChangedEvent(double scale); + const QMap& item_map() const; virtual void KeyframeAboutToBeRemoved(NodeKeyframe* key); diff --git a/app/widget/nodeview/nodeview.cpp b/app/widget/nodeview/nodeview.cpp index aea3e0513..077bc37ed 100644 --- a/app/widget/nodeview/nodeview.cpp +++ b/app/widget/nodeview/nodeview.cpp @@ -32,9 +32,9 @@ NodeView::NodeView(QWidget *parent) : setDragMode(RubberBandDrag); setContextMenuPolicy(Qt::CustomContextMenu); - connect(&scene_, SIGNAL(changed(const QList&)), this, SLOT(ItemsChanged())); - connect(&scene_, SIGNAL(selectionChanged()), this, SLOT(SceneSelectionChangedSlot())); - connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(ShowContextMenu(const QPoint &))); + connect(&scene_, &QGraphicsScene::changed, this, &NodeView::ItemsChanged); + connect(&scene_, &QGraphicsScene::selectionChanged, this, &NodeView::SceneSelectionChangedSlot); + connect(this, &NodeView::customContextMenuRequested, this, &NodeView::ShowContextMenu); } NodeView::~NodeView() @@ -50,10 +50,10 @@ void NodeView::SetGraph(NodeGraph *graph) } if (graph_ != nullptr) { - disconnect(graph_, SIGNAL(NodeAdded(Node*)), this, SLOT(AddNode(Node*))); - disconnect(graph_, SIGNAL(NodeRemoved(Node*)), this, SLOT(RemoveNode(Node*))); - disconnect(graph_, SIGNAL(EdgeAdded(NodeEdgePtr)), this, SLOT(AddEdge(NodeEdgePtr))); - disconnect(graph_, SIGNAL(EdgeRemoved(NodeEdgePtr)), this, SLOT(RemoveEdge(NodeEdgePtr))); + disconnect(graph_, &NodeGraph::NodeAdded, this, &NodeView::AddNode); + disconnect(graph_, &NodeGraph::NodeRemoved, this, &NodeView::RemoveNode); + disconnect(graph_, &NodeGraph::EdgeAdded, this, &NodeView::AddEdge); + disconnect(graph_, &NodeGraph::EdgeRemoved, this, &NodeView::RemoveEdge); } // Clear the scene of all UI objects @@ -64,10 +64,10 @@ void NodeView::SetGraph(NodeGraph *graph) // If the graph is valid, add UI objects for each of its Nodes if (graph_ != nullptr) { - connect(graph_, SIGNAL(NodeAdded(Node*)), this, SLOT(AddNode(Node*))); - connect(graph_, SIGNAL(NodeRemoved(Node*)), this, SLOT(RemoveNode(Node*))); - connect(graph_, SIGNAL(EdgeAdded(NodeEdgePtr)), this, SLOT(AddEdge(NodeEdgePtr))); - connect(graph_, SIGNAL(EdgeRemoved(NodeEdgePtr)), this, SLOT(RemoveEdge(NodeEdgePtr))); + connect(graph_, &NodeGraph::NodeAdded, this, &NodeView::AddNode); + connect(graph_, &NodeGraph::NodeRemoved, this, &NodeView::RemoveNode); + connect(graph_, &NodeGraph::EdgeAdded, this, &NodeView::AddEdge); + connect(graph_, &NodeGraph::EdgeRemoved, this, &NodeView::RemoveEdge); QList graph_nodes = graph_->nodes(); @@ -233,7 +233,7 @@ void NodeView::ShowContextMenu(const QPoint &pos) Menu* add_menu = NodeFactory::CreateMenu(); add_menu->setTitle(tr("Add")); - connect(add_menu, SIGNAL(triggered(QAction*)), this, SLOT(CreateNodeSlot(QAction*))); + connect(add_menu, &Menu::triggered, this, &NodeView::CreateNodeSlot); m->addMenu(add_menu); m->exec(mapToGlobal(pos)); diff --git a/app/widget/panel/panel.h b/app/widget/panel/panel.h index 231cdc79d..36cd13a35 100644 --- a/app/widget/panel/panel.h +++ b/app/widget/panel/panel.h @@ -108,6 +108,10 @@ public: virtual void DeleteSelected(){} + virtual void IncreaseTrackHeight(){} + + virtual void DecreaseTrackHeight(){} + protected: /** * @brief Set panel's title diff --git a/app/widget/timelinewidget/timelinewidget.cpp b/app/widget/timelinewidget/timelinewidget.cpp index 773dc550d..336462b96 100644 --- a/app/widget/timelinewidget/timelinewidget.cpp +++ b/app/widget/timelinewidget/timelinewidget.cpp @@ -473,6 +473,34 @@ void TimelineWidget::DeleteSelected() Core::instance()->undo_stack()->pushIfHasChildren(command); } +void TimelineWidget::IncreaseTrackHeight() +{ + if (!timeline_node_) { + return; + } + + QVector all_tracks = timeline_node_->Tracks(); + + // Increase the height of each track by one "unit" + foreach (TrackOutput* t, all_tracks) { + t->SetTrackHeight(t->GetTrackHeight() + t->GetTrackHeightIncrement()); + } +} + +void TimelineWidget::DecreaseTrackHeight() +{ + if (!timeline_node_) { + return; + } + + QVector all_tracks = timeline_node_->Tracks(); + + // Decrease the height of each track by one "unit" + foreach (TrackOutput* t, all_tracks) { + t->SetTrackHeight(qMax(t->GetTrackHeight() - t->GetTrackHeightIncrement(), t->GetTrackHeightMinimum())); + } +} + QList TimelineWidget::GetSelectedBlocks() { QList list; diff --git a/app/widget/timelinewidget/timelinewidget.h b/app/widget/timelinewidget/timelinewidget.h index 82718eafa..da41c3c7c 100644 --- a/app/widget/timelinewidget/timelinewidget.h +++ b/app/widget/timelinewidget/timelinewidget.h @@ -54,6 +54,10 @@ public: void DeleteSelected(); + void IncreaseTrackHeight(); + + void DecreaseTrackHeight(); + QList GetSelectedBlocks(); public slots: diff --git a/app/widget/timelinewidget/trackview/trackviewsplitter.cpp b/app/widget/timelinewidget/trackview/trackviewsplitter.cpp index 5883a07c9..36a974c06 100644 --- a/app/widget/timelinewidget/trackview/trackviewsplitter.cpp +++ b/app/widget/timelinewidget/trackview/trackviewsplitter.cpp @@ -61,8 +61,14 @@ void TrackViewSplitter::SetTrackHeight(int index, int h) { QList element_sizes = sizes(); + if (alignment_ == Qt::AlignBottom) { + index = count() - index - 1; + } + int old_ele_sz = element_sizes.at(index); + qDebug() << "Old ele sz" << old_ele_sz << "vs h" << h; + int diff = h - old_ele_sz; // Set new size on element diff --git a/app/widget/timelinewidget/view/timelineview.cpp b/app/widget/timelinewidget/view/timelineview.cpp index 1a87b608c..6f045bc5a 100644 --- a/app/widget/timelinewidget/view/timelineview.cpp +++ b/app/widget/timelinewidget/view/timelineview.cpp @@ -45,6 +45,7 @@ TimelineView::TimelineView(const TrackType &type, Qt::Alignment vertical_alignme setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); setBackgroundRole(QPalette::Window); setContextMenuPolicy(Qt::CustomContextMenu); + SetLimitYAxis(true); } void TimelineView::SelectAll() diff --git a/app/widget/timelinewidget/view/timelineviewbase.cpp b/app/widget/timelinewidget/view/timelineviewbase.cpp index 96c2a86d4..5d7de42a0 100644 --- a/app/widget/timelinewidget/view/timelineviewbase.cpp +++ b/app/widget/timelinewidget/view/timelineviewbase.cpp @@ -10,7 +10,8 @@ TimelineViewBase::TimelineViewBase(QWidget *parent) : QGraphicsView(parent), playhead_(0), playhead_scene_left_(-1), - playhead_scene_right_(-1) + playhead_scene_right_(-1), + limit_y_axis_(false) { setScene(&scene_); @@ -111,28 +112,33 @@ void TimelineViewBase::UpdateSceneRect() { QRectF bounding_rect = scene_.itemsBoundingRect(); - // Ensure the scene height is always AT LEAST the height of the view - // The scrollbar appears to have a 1px margin on the top and bottom, hence the -2 - int minimum_height = height() - horizontalScrollBar()->height() - 2; + if (limit_y_axis_) { + // Ensure the scene height is always AT LEAST the height of the view + // The scrollbar appears to have a 1px margin on the top and bottom, hence the -2 + int minimum_height = height() - horizontalScrollBar()->height() - 2; - if (alignment() & Qt::AlignBottom) { - // Ensure the scene left and bottom are always 0 - bounding_rect.setBottomLeft(QPointF(0, 0)); + if (alignment() & Qt::AlignBottom) { + // Ensure the scene left and bottom are always 0 + bounding_rect.setBottomLeft(QPointF(0, 0)); - if (bounding_rect.top() > minimum_height) { - bounding_rect.setTop(-minimum_height); + if (bounding_rect.top() > minimum_height) { + bounding_rect.setTop(-minimum_height); + } + } else { + // Ensure the scene left and top are always 0 + bounding_rect.setTopLeft(QPointF(0, 0)); + + if (bounding_rect.height() < minimum_height) { + bounding_rect.setHeight(minimum_height); + } } } else { - // Ensure the scene left and top are always 0 - bounding_rect.setTopLeft(QPointF(0, 0)); - - if (bounding_rect.height() < minimum_height) { - bounding_rect.setHeight(minimum_height); - } + // We'll still limit the X to 0 since that behavior is desired by all TimelineViewBase derivatives + bounding_rect.setLeft(0); } // Ensure the scene is always the full length of the timeline with a gap at the end to work with - end_item_->SetEndPadding(width()/4); + end_item_->SetEndPadding(width()/2); // If the scene is already this rect, do nothing if (scene_.sceneRect() == bounding_rect) { @@ -153,3 +159,9 @@ void TimelineViewBase::ScaleChangedEvent(double scale) { Q_UNUSED(scale) } + +void TimelineViewBase::SetLimitYAxis(bool e) +{ + limit_y_axis_ = true; + UpdateSceneRect(); +} diff --git a/app/widget/timelinewidget/view/timelineviewbase.h b/app/widget/timelinewidget/view/timelineviewbase.h index 25c6ed539..d9f68afb1 100644 --- a/app/widget/timelinewidget/view/timelineviewbase.h +++ b/app/widget/timelinewidget/view/timelineviewbase.h @@ -34,6 +34,8 @@ protected: virtual void ScaleChangedEvent(double scale); + void SetLimitYAxis(bool e); + rational GetPlayheadTime(); bool PlayheadPress(QMouseEvent* event); @@ -54,6 +56,8 @@ private: QGraphicsScene scene_; + bool limit_y_axis_; + private slots: /** * @brief Slot called whenever the view resizes or the scene contents change to enforce minimum scene sizes diff --git a/app/window/mainwindow/mainmenu.cpp b/app/window/mainwindow/mainmenu.cpp index b6f0692a1..65ef4ad77 100644 --- a/app/window/mainwindow/mainmenu.cpp +++ b/app/window/mainwindow/mainmenu.cpp @@ -92,8 +92,8 @@ MainMenu::MainMenu(QMainWindow *parent) : view_menu_ = new Menu(this, this, SLOT(ViewMenuAboutToShow())); view_zoom_in_item_ = view_menu_->AddItem("zoomin", this, SLOT(ZoomInTriggered()), "="); view_zoom_out_item_ = view_menu_->AddItem("zoomout", this, SLOT(ZoomOutTriggered()), "-"); - view_increase_track_height_item_ = view_menu_->AddItem("vzoomin", nullptr, nullptr, "Ctrl+="); - view_decrease_track_height_item_ = view_menu_->AddItem("vzoomout", nullptr, nullptr, "Ctrl+-"); + view_increase_track_height_item_ = view_menu_->AddItem("vzoomin", this, SLOT(IncreaseTrackHeightTriggered()), "Ctrl+="); + view_decrease_track_height_item_ = view_menu_->AddItem("vzoomout", this, SLOT(DecreaseTrackHeightTriggered()), "Ctrl+-"); view_show_all_item_ = view_menu_->AddItem("showall", nullptr, nullptr, "\\"); view_show_all_item_->setCheckable(true); view_menu_->addSeparator(); @@ -416,6 +416,16 @@ void MainMenu::ZoomOutTriggered() PanelManager::instance()->CurrentlyFocused()->ZoomOut(); } +void MainMenu::IncreaseTrackHeightTriggered() +{ + PanelManager::instance()->CurrentlyFocused()->IncreaseTrackHeight(); +} + +void MainMenu::DecreaseTrackHeightTriggered() +{ + PanelManager::instance()->CurrentlyFocused()->DecreaseTrackHeight(); +} + void MainMenu::GoToStartTriggered() { PanelManager::instance()->CurrentlyFocused()->GoToStart(); diff --git a/app/window/mainwindow/mainmenu.h b/app/window/mainwindow/mainmenu.h index 8e9a4e2ba..27ac06932 100644 --- a/app/window/mainwindow/mainmenu.h +++ b/app/window/mainwindow/mainmenu.h @@ -104,6 +104,9 @@ private slots: */ void ZoomOutTriggered(); + void IncreaseTrackHeightTriggered(); + void DecreaseTrackHeightTriggered(); + void GoToStartTriggered(); void PrevFrameTriggered();