Skip to content

Commit

Permalink
Add options for showing specific tracks and track information
Browse files Browse the repository at this point in the history
  • Loading branch information
darbyjohnston committed Apr 6, 2024
1 parent dad9c28 commit 954ee60
Show file tree
Hide file tree
Showing 12 changed files with 334 additions and 215 deletions.
25 changes: 19 additions & 6 deletions lib/tlPlayApp/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -184,14 +184,18 @@ namespace tl
timelineui::ItemOptions().editAssociatedClips);
p.settings->setDefaultValue("Timeline/FrameView", true);
p.settings->setDefaultValue("Timeline/StopOnScrub", true);
p.settings->setDefaultValue("Timeline/FirstTrack",
!timelineui::ItemOptions().tracks.empty());
p.settings->setDefaultValue("Timeline/TrackInfo",
timelineui::ItemOptions().trackInfo);
p.settings->setDefaultValue("Timeline/Thumbnails",
timelineui::ItemOptions().thumbnails);
p.settings->setDefaultValue("Timeline/ThumbnailsSize",
timelineui::ItemOptions().thumbnailHeight);
p.settings->setDefaultValue("Timeline/Transitions",
timelineui::ItemOptions().showTransitions);
timelineui::ItemOptions().transitions);
p.settings->setDefaultValue("Timeline/Markers",
timelineui::ItemOptions().showMarkers);
timelineui::ItemOptions().markers);

p.windowOptions = observer::Value<WindowOptions>::create(
p.settings->getValue<WindowOptions>("Window/Options"));
Expand All @@ -212,10 +216,15 @@ namespace tl
p.timelineWidget->setStopOnScrub(p.settings->getValue<bool>("Timeline/StopOnScrub"));
timelineui::ItemOptions itemOptions;
itemOptions.editAssociatedClips = p.settings->getValue<bool>("Timeline/EditAssociatedClips");
if (p.settings->getValue<bool>("Timeline/FirstTrack"))
{
itemOptions.tracks = { 0 };
}
itemOptions.trackInfo = p.settings->getValue<bool>("Timeline/TrackInfo");
itemOptions.thumbnails = p.settings->getValue<bool>("Timeline/Thumbnails");
itemOptions.thumbnailHeight = p.settings->getValue<int>("Timeline/ThumbnailsSize");
itemOptions.showTransitions = p.settings->getValue<bool>("Timeline/Transitions");
itemOptions.showMarkers = p.settings->getValue<bool>("Timeline/Markers");
itemOptions.transitions = p.settings->getValue<bool>("Timeline/Transitions");
itemOptions.markers = p.settings->getValue<bool>("Timeline/Markers");
p.timelineWidget->setItemOptions(itemOptions);

p.fileActions = FileActions::create(app, context);
Expand Down Expand Up @@ -630,14 +639,18 @@ namespace tl
p.timelineWidget->hasFrameView());
p.settings->setValue("Timeline/StopOnScrub",
p.timelineWidget->hasStopOnScrub());
p.settings->setValue("Timeline/FirstTrack",
!timelineItemOptions.tracks.empty());
p.settings->setValue("Timeline/TrackInfo",
timelineItemOptions.trackInfo);
p.settings->setValue("Timeline/Thumbnails",
timelineItemOptions.thumbnails);
p.settings->setValue("Timeline/ThumbnailsSize",
timelineItemOptions.thumbnailHeight);
p.settings->setValue("Timeline/Transitions",
timelineItemOptions.showTransitions);
timelineItemOptions.transitions);
p.settings->setValue("Timeline/Markers",
timelineItemOptions.showMarkers);
timelineItemOptions.markers);
_makeCurrent();
p.timelineViewport->setParent(nullptr);
p.timelineWidget->setParent(nullptr);
Expand Down
32 changes: 30 additions & 2 deletions lib/tlPlayApp/TimelineActions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,34 @@ namespace tl
}
});

p.actions["FirstTrack"] = std::make_shared<ui::Action>(
"First Track Only",
[mainWindowWeak](bool value)
{
if (auto mainWindow = mainWindowWeak.lock())
{
auto options = mainWindow->getTimelineWidget()->getItemOptions();
options.tracks.clear();
if (value)
{
options.tracks.push_back(0);
}
mainWindow->getTimelineWidget()->setItemOptions(options);
}
});

p.actions["TrackInfo"] = std::make_shared<ui::Action>(
"Track Information",
[mainWindowWeak](bool value)
{
if (auto mainWindow = mainWindowWeak.lock())
{
auto options = mainWindow->getTimelineWidget()->getItemOptions();
options.trackInfo = value;
mainWindow->getTimelineWidget()->setItemOptions(options);
}
});

p.actions["Thumbnails"] = std::make_shared<ui::Action>(
"Thumbnails",
[mainWindowWeak](bool value)
Expand Down Expand Up @@ -128,7 +156,7 @@ namespace tl
if (auto mainWindow = mainWindowWeak.lock())
{
auto options = mainWindow->getTimelineWidget()->getItemOptions();
options.showTransitions = value;
options.transitions = value;
mainWindow->getTimelineWidget()->setItemOptions(options);
}
});
Expand All @@ -140,7 +168,7 @@ namespace tl
if (auto mainWindow = mainWindowWeak.lock())
{
auto options = mainWindow->getTimelineWidget()->getItemOptions();
options.showMarkers = value;
options.markers = value;
mainWindow->getTimelineWidget()->setItemOptions(options);
}
});
Expand Down
9 changes: 6 additions & 3 deletions lib/tlPlayApp/TimelineMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,13 @@ namespace tl
addItem(p.actions["FrameView"]);
addItem(p.actions["StopOnScrub"]);
addDivider();
addItem(p.actions["FirstTrack"]);
addItem(p.actions["TrackInfo"]);
addItem(p.actions["Thumbnails"]);
p.thumbnailsSizeMenu = addSubMenu("Thumbnails Size");
p.thumbnailsSizeMenu->addItem(p.actions["Thumbnails100"]);
p.thumbnailsSizeMenu->addItem(p.actions["Thumbnails200"]);
p.thumbnailsSizeMenu->addItem(p.actions["Thumbnails300"]);
addDivider();
addItem(p.actions["Transitions"]);
addItem(p.actions["Markers"]);

Expand Down Expand Up @@ -87,10 +88,12 @@ namespace tl
[this](const timelineui::ItemOptions& value)
{
setItemChecked(_p->actions["EditAssociatedClips"], value.editAssociatedClips);
setItemChecked(_p->actions["FirstTrack"], !value.tracks.empty());
setItemChecked(_p->actions["TrackInfo"], value.trackInfo);
setItemChecked(_p->actions["Thumbnails"], value.thumbnails);
_thumbnailsSizeUpdate();
setItemChecked(_p->actions["Transitions"], value.showTransitions);
setItemChecked(_p->actions["Markers"], value.showMarkers);
setItemChecked(_p->actions["Transitions"], value.transitions);
setItemChecked(_p->actions["Markers"], value.markers);
});
}

Expand Down
25 changes: 19 additions & 6 deletions lib/tlPlayQtApp/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -143,14 +143,18 @@ namespace tl
timelineui::ItemOptions().editAssociatedClips);
settings->setDefaultValue("Timeline/FrameView", true);
settings->setDefaultValue("Timeline/StopOnScrub", true);
settings->setDefaultValue("Timeline/FirstTrack",
!timelineui::ItemOptions().tracks.empty());
settings->setDefaultValue("Timeline/TrackInfo",
timelineui::ItemOptions().trackInfo);
settings->setDefaultValue("Timeline/Thumbnails",
timelineui::ItemOptions().thumbnails);
settings->setDefaultValue("Timeline/ThumbnailsSize",
timelineui::ItemOptions().thumbnailHeight);
settings->setDefaultValue("Timeline/Transitions",
timelineui::ItemOptions().showTransitions);
timelineui::ItemOptions().transitions);
settings->setDefaultValue("Timeline/Markers",
timelineui::ItemOptions().showMarkers);
timelineui::ItemOptions().markers);

setAttribute(Qt::WA_DeleteOnClose);
setFocusPolicy(Qt::StrongFocus);
Expand All @@ -171,10 +175,15 @@ namespace tl
p.timelineWidget->setStopOnScrub(settings->getValue<bool>("Timeline/StopOnScrub"));
timelineui::ItemOptions itemOptions;
itemOptions.editAssociatedClips = settings->getValue<bool>("Timeline/EditAssociatedClips");
if (settings->getValue<bool>("Timeline/FirstTrack"))
{
itemOptions.tracks = { 0 };
}
itemOptions.trackInfo = settings->getValue<bool>("Timeline/TrackInfo");
itemOptions.thumbnails = settings->getValue<bool>("Timeline/Thumbnails");
itemOptions.thumbnailHeight = settings->getValue<int>("Timeline/ThumbnailsSize");
itemOptions.showTransitions = settings->getValue<bool>("Timeline/Transitions");
itemOptions.showMarkers = settings->getValue<bool>("Timeline/Markers");
itemOptions.transitions = settings->getValue<bool>("Timeline/Transitions");
itemOptions.markers = settings->getValue<bool>("Timeline/Markers");
p.timelineWidget->setItemOptions(itemOptions);

p.fileActions = new FileActions(app, this);
Expand Down Expand Up @@ -657,14 +666,18 @@ namespace tl
p.timelineWidget->hasFrameView());
settings->setValue("Timeline/StopOnScrub",
p.timelineWidget->hasStopOnScrub());
settings->setValue("Timeline/FirstTrack",
!timelineItemOptions.tracks.empty());
settings->setValue("Timeline/TrackInfo",
timelineItemOptions.trackInfo);
settings->setValue("Timeline/Thumbnails",
timelineItemOptions.thumbnails);
settings->setValue("Timeline/ThumbnailsSize",
timelineItemOptions.thumbnailHeight);
settings->setValue("Timeline/Transitions",
timelineItemOptions.showTransitions);
timelineItemOptions.transitions);
settings->setValue("Timeline/Markers",
timelineItemOptions.showMarkers);
timelineItemOptions.markers);
}

qtwidget::TimelineWidget* MainWindow::timelineWidget() const
Expand Down
55 changes: 50 additions & 5 deletions lib/tlPlayQtApp/TimelineActions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,14 @@ namespace tl
p.actions["StopOnScrub"]->setCheckable(true);
p.actions["StopOnScrub"]->setText(tr("Stop Playback When Scrubbing"));

p.actions["FirstTrack"] = new QAction(parent);
p.actions["FirstTrack"]->setCheckable(true);
p.actions["FirstTrack"]->setText(tr("First Track Only"));

p.actions["TrackInfo"] = new QAction(parent);
p.actions["TrackInfo"]->setCheckable(true);
p.actions["TrackInfo"]->setText(tr("Track Information"));

p.actions["Thumbnails"] = new QAction(parent);
p.actions["Thumbnails"]->setCheckable(true);
p.actions["Thumbnails"]->setText(tr("Thumbnails"));
Expand Down Expand Up @@ -87,12 +95,13 @@ namespace tl
p.menu->addAction(p.actions["FrameView"]);
p.menu->addAction(p.actions["StopOnScrub"]);
p.menu->addSeparator();
p.menu->addAction(p.actions["FirstTrack"]);
p.menu->addAction(p.actions["TrackInfo"]);
p.menu->addAction(p.actions["Thumbnails"]);
auto thumbnailsSizeMenu = p.menu->addMenu(tr("Thumbnails Size"));
thumbnailsSizeMenu->addAction(p.actions["ThumbnailsSize/Small"]);
thumbnailsSizeMenu->addAction(p.actions["ThumbnailsSize/Medium"]);
thumbnailsSizeMenu->addAction(p.actions["ThumbnailsSize/Large"]);
p.menu->addSeparator();
p.menu->addAction(p.actions["Transitions"]);
p.menu->addAction(p.actions["Markers"]);

Expand Down Expand Up @@ -133,6 +142,32 @@ namespace tl
mainWindow->timelineWidget()->setStopOnScrub(value);
});

connect(
p.actions["FirstTrack"],
&QAction::toggled,
[mainWindow](bool value)
{
auto timelineWidget = mainWindow->timelineWidget();
auto itemOptions = timelineWidget->itemOptions();
itemOptions.tracks.clear();
if (value)
{
itemOptions.tracks.push_back(0);
}
timelineWidget->setItemOptions(itemOptions);
});

connect(
p.actions["TrackInfo"],
&QAction::toggled,
[mainWindow](bool value)
{
auto timelineWidget = mainWindow->timelineWidget();
auto itemOptions = timelineWidget->itemOptions();
itemOptions.trackInfo = value;
timelineWidget->setItemOptions(itemOptions);
});

connect(
p.actions["Thumbnails"],
&QAction::toggled,
Expand Down Expand Up @@ -163,7 +198,7 @@ namespace tl
{
auto timelineWidget = mainWindow->timelineWidget();
auto itemOptions = timelineWidget->itemOptions();
itemOptions.showTransitions = value;
itemOptions.transitions = value;
timelineWidget->setItemOptions(itemOptions);
});

Expand All @@ -174,7 +209,7 @@ namespace tl
{
auto timelineWidget = mainWindow->timelineWidget();
auto itemOptions = timelineWidget->itemOptions();
itemOptions.showMarkers = value;
itemOptions.markers = value;
timelineWidget->setItemOptions(itemOptions);
});
}
Expand Down Expand Up @@ -215,6 +250,16 @@ namespace tl
p.actions["StopOnScrub"]->setChecked(
p.mainWindow->timelineWidget()->hasStopOnScrub());
}
{
QSignalBlocker blocker(p.actions["FirstTrack"]);
const auto itemOptions = p.mainWindow->timelineWidget()->itemOptions();
p.actions["FirstTrack"]->setChecked(!itemOptions.tracks.empty());
}
{
QSignalBlocker blocker(p.actions["TrackInfo"]);
const auto itemOptions = p.mainWindow->timelineWidget()->itemOptions();
p.actions["TrackInfo"]->setChecked(itemOptions.trackInfo);
}
{
QSignalBlocker blocker(p.actions["Thumbnails"]);
const auto itemOptions = p.mainWindow->timelineWidget()->itemOptions();
Expand All @@ -238,12 +283,12 @@ namespace tl
{
QSignalBlocker blocker(p.actions["Transitions"]);
const auto itemOptions = p.mainWindow->timelineWidget()->itemOptions();
p.actions["Transitions"]->setChecked(itemOptions.showTransitions);
p.actions["Transitions"]->setChecked(itemOptions.transitions);
}
{
QSignalBlocker blocker(p.actions["Markers"]);
const auto itemOptions = p.mainWindow->timelineWidget()->itemOptions();
p.actions["Markers"]->setChecked(itemOptions.showMarkers);
p.actions["Markers"]->setChecked(itemOptions.markers);
}
}
}
Expand Down
3 changes: 2 additions & 1 deletion lib/tlTimelineUI/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ set(HEADERS
TimelineWidget.h
TransitionItem.h
VideoClipItem.h)
set(HEADERS_PRIVATE)
set(HEADERS_PRIVATE
TimelineItemPrivate.h)

set(SOURCE
AudioClipItem.cpp
Expand Down
60 changes: 0 additions & 60 deletions lib/tlTimelineUI/IBasicItem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,13 +134,6 @@ namespace tl
p.size.fontMetrics.lineHeight +
p.size.margin * 2 +
p.size.border * 4);
if (_options.showMarkers)
{
_sizeHint.h += p.markers.size() *
(p.size.fontMetrics.lineHeight +
p.size.margin * 2 +
p.size.border * 2);
}
}

void IBasicItem::clipEvent(const math::Box2i& clipRect, bool clipped)
Expand Down Expand Up @@ -224,59 +217,6 @@ namespace tl
p.size.fontMetrics.ascender),
event.style->getColorRole(ui::ColorRole::Text));
}

if (_options.showMarkers)
{
if (p.draw.markerGlyphs.empty())
{
p.draw.markerGlyphs.resize(p.markers.size());
}
float y = g2.max.y + 1 -
(p.size.fontMetrics.lineHeight +
p.size.margin * 2 +
p.size.border * 2) *
p.markers.size();
for (size_t i = 0; i < p.markers.size(); ++i)
{
const int x0 =
_geometry.min.x +
p.markers[i].range.start_time().rescaled_to(1.0).value() * _scale;
const int x1 =
_geometry.min.x +
p.markers[i].range.end_time_exclusive().rescaled_to(1.0).value() * _scale - 1;
math::Box2i g2;
g2.min.x = std::max(x0, g2.min.x);
g2.min.y = y;
g2.max.x = std::min(x1, g2.max.x);
g2.max.y = y + p.size.border * 2 - 1;
event.render->drawRect(g2, p.markers[i].color);

y += p.size.border * 2;

labelGeometry = math::Box2i(
g2.min.x + p.size.margin,
y + p.size.margin,
p.size.markerSizes[i].w,
p.size.fontMetrics.lineHeight);
if (drawRect.intersects(labelGeometry))
{
if (!p.markers[i].name.empty() && p.draw.markerGlyphs[i].empty())
{
p.draw.markerGlyphs[i] = event.fontSystem->getGlyphs(p.markers[i].name, p.size.fontInfo);
}
event.render->drawText(
p.draw.markerGlyphs[i],
math::Vector2i(
labelGeometry.min.x,
labelGeometry.min.y +
p.size.fontMetrics.ascender),
event.style->getColorRole(ui::ColorRole::Text));
}

y += p.size.fontMetrics.lineHeight +
p.size.margin * 2;
}
}
}

int IBasicItem::_getMargin() const
Expand Down
Loading

0 comments on commit 954ee60

Please sign in to comment.