Skip to content

Commit

Permalink
Add more settings
Browse files Browse the repository at this point in the history
  • Loading branch information
darbyjohnston committed Mar 6, 2025
1 parent f32887a commit 328fb7c
Show file tree
Hide file tree
Showing 19 changed files with 193 additions and 101 deletions.
73 changes: 39 additions & 34 deletions lib/tlPlayApp/Actions/TimelineActions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
#include <tlPlayApp/Actions/TimelineActions.h>

#include <tlPlayApp/App.h>
#include <tlPlayApp/MainWindow.h>

#include <tlTimelineUI/TimelineWidget.h>

Expand All @@ -25,85 +24,91 @@ namespace tl
{
DTK_P();

auto mainWindowWeak = std::weak_ptr<MainWindow>(mainWindow);
auto appWeak = std::weak_ptr<App>(app);
p.actions["FrameView"] = std::make_shared<dtk::Action>(
"Frame Timeline View",
[mainWindowWeak](bool value)
[appWeak](bool value)
{
if (auto mainWindow = mainWindowWeak.lock())
if (auto app = appWeak.lock())
{
mainWindow->getTimelineWidget()->setFrameView(value);
auto settings = app->getSettingsModel()->getTimeline();
settings.frameView = value;
app->getSettingsModel()->setTimeline(settings);
}
});

p.actions["ScrollToCurrentFrame"] = std::make_shared<dtk::Action>(
"Scroll To Current Frame",
[mainWindowWeak](bool value)
[appWeak](bool value)
{
if (auto mainWindow = mainWindowWeak.lock())
if (auto app = appWeak.lock())
{
mainWindow->getTimelineWidget()->setScrollToCurrentFrame(value);
auto settings = app->getSettingsModel()->getTimeline();
settings.scroll = value;
app->getSettingsModel()->setTimeline(settings);
}
});

p.actions["StopOnScrub"] = std::make_shared<dtk::Action>(
"Stop Playback When Scrubbing",
[mainWindowWeak](bool value)
[appWeak](bool value)
{
if (auto mainWindow = mainWindowWeak.lock())
if (auto app = appWeak.lock())
{
mainWindow->getTimelineWidget()->setStopOnScrub(value);
auto settings = app->getSettingsModel()->getTimeline();
settings.stopOnScrub = value;
app->getSettingsModel()->setTimeline(settings);
}
});

p.actions["Thumbnails"] = std::make_shared<dtk::Action>(
"Thumbnails",
[mainWindowWeak](bool value)
[appWeak](bool value)
{
if (auto mainWindow = mainWindowWeak.lock())
if (auto app = appWeak.lock())
{
auto options = mainWindow->getTimelineWidget()->getDisplayOptions();
options.thumbnails = value;
mainWindow->getTimelineWidget()->setDisplayOptions(options);
auto settings = app->getSettingsModel()->getTimeline();
settings.display.thumbnails = value;
app->getSettingsModel()->setTimeline(settings);
}
});

p.actions["Thumbnails100"] = std::make_shared<dtk::Action>(
"Small",
[mainWindowWeak]
[appWeak]
{
if (auto mainWindow = mainWindowWeak.lock())
if (auto app = appWeak.lock())
{
auto options = mainWindow->getTimelineWidget()->getDisplayOptions();
options.thumbnailHeight = 100;
options.waveformHeight = options.thumbnailHeight / 2;
mainWindow->getTimelineWidget()->setDisplayOptions(options);
auto settings = app->getSettingsModel()->getTimeline();
settings.display.thumbnailHeight = 100;
settings.display.waveformHeight = settings.display.thumbnailHeight / 2;
app->getSettingsModel()->setTimeline(settings);
}
});

p.actions["Thumbnails200"] = std::make_shared<dtk::Action>(
"Medium",
[mainWindowWeak]
[appWeak]
{
if (auto mainWindow = mainWindowWeak.lock())
if (auto app = appWeak.lock())
{
auto options = mainWindow->getTimelineWidget()->getDisplayOptions();
options.thumbnailHeight = 200;
options.waveformHeight = options.thumbnailHeight / 2;
mainWindow->getTimelineWidget()->setDisplayOptions(options);
auto settings = app->getSettingsModel()->getTimeline();
settings.display.thumbnailHeight = 200;
settings.display.waveformHeight = settings.display.thumbnailHeight / 2;
app->getSettingsModel()->setTimeline(settings);
}
});

p.actions["Thumbnails300"] = std::make_shared<dtk::Action>(
"Large",
[mainWindowWeak]
[appWeak]
{
if (auto mainWindow = mainWindowWeak.lock())
if (auto app = appWeak.lock())
{
auto options = mainWindow->getTimelineWidget()->getDisplayOptions();
options.thumbnailHeight = 300;
options.waveformHeight = options.thumbnailHeight / 2;
mainWindow->getTimelineWidget()->setDisplayOptions(options);
auto settings = app->getSettingsModel()->getTimeline();
settings.display.thumbnailHeight = 300;
settings.display.waveformHeight = settings.display.thumbnailHeight / 2;
app->getSettingsModel()->setTimeline(settings);
}
});
}
Expand Down
2 changes: 1 addition & 1 deletion lib/tlPlayApp/Actions/ToolsActions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

#include <tlPlayApp/Actions/ToolsActions.h>

#include <tlPlayApp/Tools/Tools.h>
#include <tlPlayApp/Models/ToolsModel.h>
#include <tlPlayApp/App.h>

#include <dtk/core/Format.h>
Expand Down
11 changes: 8 additions & 3 deletions lib/tlPlayApp/App.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@
#include <tlPlayApp/Models/FilesModel.h>
#include <tlPlayApp/Models/RecentFilesModel.h>
#include <tlPlayApp/Models/TimeUnitsModel.h>
#include <tlPlayApp/Models/ToolsModel.h>
#include <tlPlayApp/Models/ViewportModel.h>
#if defined(TLRENDER_BMD)
#include <tlPlayApp/Models/BMDDevicesModel.h>
#endif // TLRENDER_BMD
#include <tlPlayApp/Tools/Tools.h>
#include <tlPlayApp/Widgets/SeparateAudioDialog.h>
#include <tlPlayApp/Widgets/Viewport.h>
#include <tlPlayApp/MainWindow.h>
Expand Down Expand Up @@ -216,6 +216,11 @@ namespace tl
}
}

const std::shared_ptr<dtk::Settings>& App::getSettings() const
{
return _p->settings;
}

const std::shared_ptr<SettingsModel>& App::getSettingsModel() const
{
return _p->settingsModel;
Expand Down Expand Up @@ -417,7 +422,7 @@ namespace tl

p.timeUnitsModel = TimeUnitsModel::create(_context, p.settings);

p.filesModel = FilesModel::create(_context, p.settings);
p.filesModel = FilesModel::create(p.settings);

p.recentFilesModel = RecentFilesModel::create(_context, p.settings);

Expand All @@ -429,7 +434,7 @@ namespace tl

p.audioModel = AudioModel::create(_context, p.settings);

p.toolsModel = ToolsModel::create();
p.toolsModel = ToolsModel::create(p.settings);
}

void App::_devicesInit()
Expand Down
3 changes: 3 additions & 0 deletions lib/tlPlayApp/App.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ namespace tl
//! Open a file and separate audio dialog.
void openSeparateAudioDialog();

//! Get the settings.
const std::shared_ptr<dtk::Settings>& getSettings() const;

//! Get the settings model.
const std::shared_ptr<SettingsModel>& getSettingsModel() const;

Expand Down
8 changes: 4 additions & 4 deletions lib/tlPlayApp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ set(HEADERS_MODELS
Models/RecentFilesModel.h
Models/SettingsModel.h
Models/TimeUnitsModel.h
Models/ToolsModel.h
Models/ViewportModel.h)
if(TLRENDER_BMD)
list(APPEND HEADERS_MODELS Models/BMDDevicesModel.h)
Expand All @@ -37,18 +38,17 @@ set(HEADERS_TOOLS
Tools/DevicesTool.h
Tools/ExportTool.h
Tools/FilesTool.h
Tools/IToolWidget.h
Tools/InfoTool.h
Tools/MessagesTool.h
Tools/SettingsTool.h
Tools/SystemLogTool.h
Tools/ToolsWidget.h
Tools/ViewTool.h)
set(HEADERS_PRIVATE_TOOLS
Tools/ColorControlsPrivate.h
Tools/FilesToolPrivate.h
Tools/IToolWidget.h
Tools/SettingsToolPrivate.h
Tools/Tools.h
Tools/ToolsWidget.h
Tools/ViewToolPrivate.h)
set(HEADERS_WIDGETS
Widgets/AudioPopup.h
Expand Down Expand Up @@ -104,6 +104,7 @@ set(SOURCE_MODELS
Models/RecentFilesModel.cpp
Models/SettingsModel.cpp
Models/TimeUnitsModel.cpp
Models/ToolsModel.cpp
Models/ViewportModel.cpp)
if(TLRENDER_BMD)
list(APPEND SOURCE_MODELS Models/BMDDevicesModel.cpp)
Expand All @@ -121,7 +122,6 @@ set(SOURCE_TOOLS
Tools/MessagesTool.cpp
Tools/SettingsTool.cpp
Tools/SystemLogTool.cpp
Tools/Tools.cpp
Tools/ToolsWidget.cpp
Tools/ViewTool.cpp)
set(SOURCE_WIDGETS
Expand Down
44 changes: 28 additions & 16 deletions lib/tlPlayApp/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,8 @@ namespace tl
std::shared_ptr<dtk::ValueObserver<timeline::LUTOptions> > lutOptionsObserver;
std::shared_ptr<dtk::ValueObserver<dtk::ImageType> > colorBufferObserver;
std::shared_ptr<dtk::ValueObserver<bool> > muteObserver;
std::shared_ptr<dtk::ValueObserver<WindowSettings> > settingsObserver;
std::shared_ptr<dtk::ValueObserver<TimelineSettings> > timelineSettingsObserver;
std::shared_ptr<dtk::ValueObserver<WindowSettings> > windowSettingsObserver;
};

void MainWindow::_init(
Expand All @@ -153,20 +154,7 @@ namespace tl

auto timeUnitsModel = app->getTimeUnitsModel();
p.timelineWidget = timelineui::TimelineWidget::create(context, timeUnitsModel);
const TimelineSettings timelineSettings = p.settingsModel->getTimeline();
p.timelineWidget->setEditable(timelineSettings.editable);
p.timelineWidget->setFrameView(timelineSettings.frameView);
p.timelineWidget->setScrollBarsVisible(false);
p.timelineWidget->setScrollToCurrentFrame(timelineSettings.scroll);
p.timelineWidget->setStopOnScrub(timelineSettings.stopOnScrub);
p.timelineWidget->setItemOptions(timelineSettings.item);
timelineui::DisplayOptions timeineDisplayOptions = timelineSettings.display;
if (timelineSettings.firstTrack)
{
timeineDisplayOptions.tracks = { 0 };
}
timeineDisplayOptions.waveformHeight = timeineDisplayOptions.thumbnailHeight / 2;
p.timelineWidget->setDisplayOptions(timeineDisplayOptions);

p.fileActions = FileActions::create(context, app);
p.compareActions = CompareActions::create(context, app);
Expand Down Expand Up @@ -316,7 +304,6 @@ namespace tl
context,
app,
std::dynamic_pointer_cast<MainWindow>(shared_from_this()));
p.toolsWidget->hide();

p.layout = dtk::VerticalLayout::create(context, shared_from_this());
p.layout->setSpacingRole(dtk::SizeRole::None);
Expand Down Expand Up @@ -501,12 +488,19 @@ namespace tl
_p->muteButton->setChecked(value);
});

p.settingsObserver = dtk::ValueObserver<WindowSettings>::create(
p.windowSettingsObserver = dtk::ValueObserver<WindowSettings>::create(
p.settingsModel->observeWindow(),
[this](const WindowSettings& value)
{
_settingsUpdate(value);
});

p.timelineSettingsObserver = dtk::ValueObserver<TimelineSettings>::create(
p.settingsModel->observeTimeline(),
[this](const TimelineSettings& value)
{
_settingsUpdate(value);
});
}

MainWindow::MainWindow() :
Expand Down Expand Up @@ -714,6 +708,7 @@ namespace tl
void MainWindow::_settingsUpdate(const WindowSettings& settings)
{
DTK_P();

p.fileToolBar->setVisible(settings.fileToolBar);
p.dividers["File"]->setVisible(settings.fileToolBar);

Expand All @@ -739,5 +734,22 @@ namespace tl
p.splitter->setSplit(settings.splitter);
p.splitter2->setSplit(settings.splitter2);
}

void MainWindow::_settingsUpdate(const TimelineSettings& settings)
{
DTK_P();
p.timelineWidget->setEditable(settings.editable);
p.timelineWidget->setFrameView(settings.frameView);
p.timelineWidget->setScrollToCurrentFrame(settings.scroll);
p.timelineWidget->setStopOnScrub(settings.stopOnScrub);
p.timelineWidget->setItemOptions(settings.item);
timelineui::DisplayOptions display = settings.display;
if (settings.firstTrack)
{
display.tracks = { 0 };
}
display.waveformHeight = display.thumbnailHeight / 2;
p.timelineWidget->setDisplayOptions(display);
}
}
}
1 change: 1 addition & 0 deletions lib/tlPlayApp/MainWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ namespace tl
void _showSpeedPopup();
void _showAudioPopup();
void _settingsUpdate(const WindowSettings&);
void _settingsUpdate(const TimelineSettings&);

DTK_PRIVATE();
};
Expand Down
2 changes: 1 addition & 1 deletion lib/tlPlayApp/Menus/ToolsMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include <tlPlayApp/Menus/ToolsMenu.h>

#include <tlPlayApp/Actions/ToolsActions.h>
#include <tlPlayApp/Tools/Tools.h>
#include <tlPlayApp/Models/ToolsModel.h>
#include <tlPlayApp/App.h>

namespace tl
Expand Down
Loading

0 comments on commit 328fb7c

Please sign in to comment.