Skip to content

Commit

Permalink
Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
darbyjohnston committed Mar 9, 2025
1 parent 889c3f8 commit 648b8a7
Show file tree
Hide file tree
Showing 7 changed files with 355 additions and 125 deletions.
15 changes: 11 additions & 4 deletions lib/tlPlayApp/Actions/IActions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,18 @@ namespace tl
{
for (const auto& i : _actions)
{
auto j = value.shortcuts.find(dtk::Format("{0}/{1}").arg(_name).arg(i.first));
const std::string name = dtk::Format("{0}/{1}").arg(_name).arg(i.first);
const auto j = std::find_if(
value.shortcuts.begin(),
value.shortcuts.end(),
[name](const KeyShortcut& value)
{
return name == value.name;
});
if (j != value.shortcuts.end())
{
i.second->setShortcut(j->second.key);
i.second->setShortcutModifiers(j->second.modifiers);
i.second->setShortcut(j->key);
i.second->setShortcutModifiers(j->modifiers);
const auto k = _tooltips.find(i.first);
if (k != _tooltips.end())
{
Expand All @@ -63,7 +70,7 @@ namespace tl
"\n"
"Shortcut: {1}").
arg(k->second).
arg(dtk::getShortcutLabel(j->second.key, j->second.modifiers)));
arg(dtk::getShortcutLabel(j->key, j->modifiers)));
}
}
}
Expand Down
9 changes: 8 additions & 1 deletion lib/tlPlayApp/KeyShortcuts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,19 @@ namespace tl
{
namespace play
{
KeyShortcut::KeyShortcut(dtk::Key key, int modifiers) :
KeyShortcut::KeyShortcut(
const std::string& name,
dtk::Key key,
int modifiers) :
name(name),
key(key),
modifiers(modifiers)
{}

bool KeyShortcut::operator == (const KeyShortcut& other) const
{
return
name == other.name &&
key == other.key &&
modifiers == other.modifiers;
}
Expand All @@ -27,12 +32,14 @@ namespace tl

void to_json(nlohmann::json& json, const KeyShortcut& in)
{
json["Name"] = in.name;
json["Key"] = to_string(in.key);
json["Modifiers"] = in.modifiers;
}

void from_json(const nlohmann::json& json, KeyShortcut& out)
{
json.at("Name").get_to(out.name);
from_string(json.at("Key").get<std::string>(), out.key);
json.at("Modifiers").get_to(out.modifiers);
}
Expand Down
12 changes: 8 additions & 4 deletions lib/tlPlayApp/KeyShortcuts.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,14 @@ namespace tl
struct KeyShortcut
{
KeyShortcut() = default;
explicit KeyShortcut(dtk::Key, int modifiers = 0);

dtk::Key key = dtk::Key::Unknown;
int modifiers = 0;
explicit KeyShortcut(
const std::string&,
dtk::Key = dtk::Key::Unknown,
int modifiers = 0);

std::string name;
dtk::Key key = dtk::Key::Unknown;
int modifiers = 0;

bool operator == (const KeyShortcut&) const;
bool operator != (const KeyShortcut&) const;
Expand Down
226 changes: 113 additions & 113 deletions lib/tlPlayApp/Models/SettingsModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -92,119 +92,119 @@ namespace tl
{
shortcuts =
{
{ "Audio/VolumeUp", KeyShortcut(dtk::Key::Period) },
{ "Audio/VolumeDown", KeyShortcut(dtk::Key::Comma) },
{ "Audio/Mute", KeyShortcut(dtk::Key::M) },

{ "Compare/Next", KeyShortcut(dtk::Key::PageDown, static_cast<int>(dtk::KeyModifier::Shift)) },
{ "Compare/Prev", KeyShortcut(dtk::Key::PageUp, static_cast<int>(dtk::KeyModifier::Shift)) },
{ "Compare/A", KeyShortcut(dtk::Key::A, static_cast<int>(dtk::KeyModifier::Control)) },
{ "Compare/B", KeyShortcut(dtk::Key::B, static_cast<int>(dtk::KeyModifier::Control)) },
{ "Compare/Wipe", KeyShortcut(dtk::Key::W, static_cast<int>(dtk::KeyModifier::Control)) },
{ "Compare/Overlay", KeyShortcut() },
{ "Compare/Difference", KeyShortcut() },
{ "Compare/Horizontal", KeyShortcut() },
{ "Compare/Vertical", KeyShortcut() },
{ "Compare/Tile", KeyShortcut(dtk::Key::T, static_cast<int>(dtk::KeyModifier::Control)) },
{ "Compare/Relative", KeyShortcut() },
{ "Compare/Absolute", KeyShortcut() },

{"File/Open", KeyShortcut(dtk::Key::O, static_cast<int>(dtk::commandKeyModifier))},
{ "File/OpenSeparateAudio", KeyShortcut(
KeyShortcut("Audio/VolumeUp", dtk::Key::Period),
KeyShortcut("Audio/VolumeDown", dtk::Key::Comma),
KeyShortcut("Audio/Mute", dtk::Key::M),

KeyShortcut("Compare/Next", dtk::Key::PageDown, static_cast<int>(dtk::KeyModifier::Shift)),
KeyShortcut("Compare/Prev", dtk::Key::PageUp, static_cast<int>(dtk::KeyModifier::Shift)),
KeyShortcut("Compare/A", dtk::Key::A, static_cast<int>(dtk::KeyModifier::Control)),
KeyShortcut("Compare/B", dtk::Key::B, static_cast<int>(dtk::KeyModifier::Control)),
KeyShortcut("Compare/Wipe", dtk::Key::W, static_cast<int>(dtk::KeyModifier::Control)),
KeyShortcut("Compare/Overlay"),
KeyShortcut("Compare/Difference"),
KeyShortcut("Compare/Horizontal"),
KeyShortcut("Compare/Vertical"),
KeyShortcut("Compare/Tile", dtk::Key::T, static_cast<int>(dtk::KeyModifier::Control)),
KeyShortcut("Compare/Relative"),
KeyShortcut("Compare/Absolute"),

KeyShortcut("File/Open", dtk::Key::O, static_cast<int>(dtk::commandKeyModifier)),
KeyShortcut("File/OpenSeparateAudio",
dtk::Key::O,
static_cast<int>(dtk::KeyModifier::Shift) | static_cast<int>(dtk::commandKeyModifier)) },
{ "File/Close", KeyShortcut(dtk::Key::E, static_cast<int>(dtk::commandKeyModifier)) },
{ "File/CloseAll", KeyShortcut(
static_cast<int>(dtk::KeyModifier::Shift) | static_cast<int>(dtk::commandKeyModifier)),
KeyShortcut("File/Close", dtk::Key::E, static_cast<int>(dtk::commandKeyModifier)),
KeyShortcut("File/CloseAll",
dtk::Key::E,
static_cast<int>(dtk::KeyModifier::Shift) | static_cast<int>(dtk::commandKeyModifier)) },
{ "File/Reload", KeyShortcut(
static_cast<int>(dtk::KeyModifier::Shift) | static_cast<int>(dtk::commandKeyModifier)),
KeyShortcut("File/Reload",
dtk::Key::R,
static_cast<int>(dtk::KeyModifier::Shift) | static_cast<int>(dtk::commandKeyModifier)) },
{ "File/Next", KeyShortcut(dtk::Key::PageDown, static_cast<int>(dtk::KeyModifier::Control)) },
{ "File/Prev", KeyShortcut(dtk::Key::PageUp, static_cast<int>(dtk::KeyModifier::Control)) },
{ "File/NextLayer", KeyShortcut(dtk::Key::Equal, static_cast<int>(dtk::KeyModifier::Control)) },
{ "File/PrevLayer", KeyShortcut(dtk::Key::Minus, static_cast<int>(dtk::KeyModifier::Control)) },
{ "File/Exit", KeyShortcut(dtk::Key::Q, static_cast<int>(dtk::commandKeyModifier)) },

{ "Frame/Start", KeyShortcut(dtk::Key::Home) },
{ "Frame/End", KeyShortcut(dtk::Key::End) },
{ "Frame/Prev", KeyShortcut(dtk::Key::Left) },
{ "Frame/PrevX10", KeyShortcut(dtk::Key::Left, static_cast<int>(dtk::KeyModifier::Shift)) },
{ "Frame/PrevX100", KeyShortcut(dtk::Key::Left, static_cast<int>(dtk::KeyModifier::Control)) },
{ "Frame/Next", KeyShortcut(dtk::Key::Right) },
{ "Frame/NextX10", KeyShortcut(dtk::Key::Right, static_cast<int>(dtk::KeyModifier::Shift)) },
{ "Frame/NextX100", KeyShortcut(dtk::Key::Right, static_cast<int>(dtk::KeyModifier::Control)) },
{ "Frame/FocusCurrent", KeyShortcut(dtk::Key::F, static_cast<int>(dtk::KeyModifier::Control)) },

{ "Playback/Stop", KeyShortcut(dtk::Key::K) },
{ "Playback/Forward", KeyShortcut(dtk::Key::L) },
{ "Playback/Reverse", KeyShortcut(dtk::Key::J) },
{ "Playback/Toggle", KeyShortcut(dtk::Key::Space) },
{ "Playback/JumpBack1s", KeyShortcut(dtk::Key::J, static_cast<int>(dtk::KeyModifier::Shift)) },
{ "Playback/JumpBack10s", KeyShortcut(dtk::Key::J, static_cast<int>(dtk::KeyModifier::Control)) },
{ "Playback/JumpForward1s", KeyShortcut(dtk::Key::L, static_cast<int>(dtk::KeyModifier::Shift)) },
{ "Playback/JumpForward10s", KeyShortcut(dtk::Key::L, static_cast<int>(dtk::KeyModifier::Control)) },
{ "Playback/Loop", KeyShortcut() },
{ "Playback/Once", KeyShortcut() },
{ "Playback/PingPong", KeyShortcut() },
{ "Playback/SetInPoint", KeyShortcut(dtk::Key::I) },
{ "Playback/ResetInPoint", KeyShortcut(dtk::Key::I, static_cast<int>(dtk::KeyModifier::Shift)) },
{ "Playback/SetOutPoint", KeyShortcut(dtk::Key::O) },
{ "Playback/ResetOutPoint", KeyShortcut(dtk::Key::O, static_cast<int>(dtk::KeyModifier::Shift)) },

{ "Timeline/FrameView", KeyShortcut() },
{ "Timeline/Scroll", KeyShortcut() },
{ "Timeline/StopOnScrub", KeyShortcut() },
{ "Timeline/Thumbnails", KeyShortcut() },
{ "Timeline/ThumbnailsSmall", KeyShortcut() },
{ "Timeline/ThumbnailsMedium", KeyShortcut() },
{ "Timeline/ThumbnailsLarge", KeyShortcut() },

{ "Tools/Files", KeyShortcut(dtk::Key::F1) },
{ "Tools/Export", KeyShortcut(dtk::Key::F2) },
{ "Tools/View", KeyShortcut(dtk::Key::F3) },
{ "Tools/ColorPicker", KeyShortcut(dtk::Key::F4) },
{ "Tools/ColorControls", KeyShortcut(dtk::Key::F5) },
{ "Tools/Info", KeyShortcut(dtk::Key::F6) },
{ "Tools/Audio", KeyShortcut(dtk::Key::F7) },
{ "Tools/Devices", KeyShortcut(dtk::Key::F8) },
{ "Tools/Settings", KeyShortcut(dtk::Key::F9) },
{ "Tools/Messages", KeyShortcut(dtk::Key::F10) },
{ "Tools/SystemLog", KeyShortcut(dtk::Key::F11) },

{ "View/Frame", KeyShortcut(dtk::Key::Backspace) },
{ "View/ZoomReset", KeyShortcut(dtk::Key::_0) },
{ "View/ZoomIn", KeyShortcut(dtk::Key::Equal) },
{ "View/ZoomOut", KeyShortcut(dtk::Key::Minus) },
{ "View/Red", KeyShortcut(dtk::Key::R) },
{ "View/Green", KeyShortcut(dtk::Key::G) },
{ "View/Blue", KeyShortcut(dtk::Key::B) },
{ "View/Alpha", KeyShortcut(dtk::Key::A) },
{ "View/MirrorHorizontal", KeyShortcut(dtk::Key::H) },
{ "View/MirrorVertical", KeyShortcut(dtk::Key::V) },
{ "View/MinifyNearest", KeyShortcut() },
{ "View/MinifyLinear", KeyShortcut() },
{ "View/MagnifyNearest", KeyShortcut() },
{ "View/MagnifyLinear", KeyShortcut() },
{ "View/FromFile", KeyShortcut() },
{ "View/FullRange", KeyShortcut() },
{ "View/LegalRange", KeyShortcut() },
{ "View/AlphaBlendNone", KeyShortcut() },
{ "View/AlphaBlendStraight", KeyShortcut() },
{ "View/AlphaBlendPremultiplied", KeyShortcut() },
{ "View/HUD", KeyShortcut(dtk::Key::H, static_cast<int>(dtk::KeyModifier::Control)) },

{ "Window/FullScreen", KeyShortcut(dtk::Key::U) },
{ "Window/FloatOnTop", KeyShortcut() },
{ "Window/Secondary", KeyShortcut(dtk::Key::Y) },
{ "Window/FileToolBar", KeyShortcut() },
{ "Window/CompareToolBar", KeyShortcut() },
{ "Window/WindowToolBar", KeyShortcut() },
{ "Window/ViewToolBar", KeyShortcut() },
{ "Window/ToolsToolBar", KeyShortcut() },
{ "Window/Timeline", KeyShortcut() },
{ "Window/BottomToolBar", KeyShortcut() },
{ "Window/StatusToolBar", KeyShortcut() }
static_cast<int>(dtk::KeyModifier::Shift) | static_cast<int>(dtk::commandKeyModifier)),
KeyShortcut("File/Next", dtk::Key::PageDown, static_cast<int>(dtk::KeyModifier::Control)),
KeyShortcut("File/Prev", dtk::Key::PageUp, static_cast<int>(dtk::KeyModifier::Control)),
KeyShortcut("File/NextLayer", dtk::Key::Equal, static_cast<int>(dtk::KeyModifier::Control)),
KeyShortcut("File/PrevLayer", dtk::Key::Minus, static_cast<int>(dtk::KeyModifier::Control)),
KeyShortcut("File/Exit", dtk::Key::Q, static_cast<int>(dtk::commandKeyModifier)),

KeyShortcut("Frame/Start", dtk::Key::Home),
KeyShortcut("Frame/End", dtk::Key::End),
KeyShortcut("Frame/Prev", dtk::Key::Left),
KeyShortcut("Frame/PrevX10", dtk::Key::Left, static_cast<int>(dtk::KeyModifier::Shift)),
KeyShortcut("Frame/PrevX100", dtk::Key::Left, static_cast<int>(dtk::KeyModifier::Control)),
KeyShortcut("Frame/Next", dtk::Key::Right),
KeyShortcut("Frame/NextX10", dtk::Key::Right, static_cast<int>(dtk::KeyModifier::Shift)),
KeyShortcut("Frame/NextX100", dtk::Key::Right, static_cast<int>(dtk::KeyModifier::Control)),
KeyShortcut("Frame/FocusCurrent", dtk::Key::F, static_cast<int>(dtk::KeyModifier::Control)),

KeyShortcut("Playback/Stop", dtk::Key::K),
KeyShortcut("Playback/Forward", dtk::Key::L),
KeyShortcut("Playback/Reverse", dtk::Key::J),
KeyShortcut("Playback/Toggle", dtk::Key::Space),
KeyShortcut("Playback/JumpBack1s", dtk::Key::J, static_cast<int>(dtk::KeyModifier::Shift)),
KeyShortcut("Playback/JumpBack10s", dtk::Key::J, static_cast<int>(dtk::KeyModifier::Control)),
KeyShortcut("Playback/JumpForward1s", dtk::Key::L, static_cast<int>(dtk::KeyModifier::Shift)),
KeyShortcut("Playback/JumpForward10s", dtk::Key::L, static_cast<int>(dtk::KeyModifier::Control)),
KeyShortcut("Playback/Loop"),
KeyShortcut("Playback/Once"),
KeyShortcut("Playback/PingPong"),
KeyShortcut("Playback/SetInPoint", dtk::Key::I),
KeyShortcut("Playback/ResetInPoint", dtk::Key::I, static_cast<int>(dtk::KeyModifier::Shift)),
KeyShortcut("Playback/SetOutPoint", dtk::Key::O),
KeyShortcut("Playback/ResetOutPoint", dtk::Key::O, static_cast<int>(dtk::KeyModifier::Shift)),

KeyShortcut("Timeline/FrameView"),
KeyShortcut("Timeline/Scroll"),
KeyShortcut("Timeline/StopOnScrub"),
KeyShortcut("Timeline/Thumbnails"),
KeyShortcut("Timeline/ThumbnailsSmall"),
KeyShortcut("Timeline/ThumbnailsMedium"),
KeyShortcut("Timeline/ThumbnailsLarge"),

KeyShortcut("Tools/Files", dtk::Key::F1),
KeyShortcut("Tools/Export", dtk::Key::F2),
KeyShortcut("Tools/View", dtk::Key::F3),
KeyShortcut("Tools/ColorPicker", dtk::Key::F4),
KeyShortcut("Tools/ColorControls", dtk::Key::F5),
KeyShortcut("Tools/Info", dtk::Key::F6),
KeyShortcut("Tools/Audio", dtk::Key::F7),
KeyShortcut("Tools/Devices", dtk::Key::F8),
KeyShortcut("Tools/Settings", dtk::Key::F9),
KeyShortcut("Tools/Messages", dtk::Key::F10),
KeyShortcut("Tools/SystemLog", dtk::Key::F11),

KeyShortcut("View/Frame", dtk::Key::Backspace),
KeyShortcut("View/ZoomReset", dtk::Key::_0),
KeyShortcut("View/ZoomIn", dtk::Key::Equal),
KeyShortcut("View/ZoomOut", dtk::Key::Minus),
KeyShortcut("View/Red", dtk::Key::R),
KeyShortcut("View/Green", dtk::Key::G),
KeyShortcut("View/Blue", dtk::Key::B),
KeyShortcut("View/Alpha", dtk::Key::A),
KeyShortcut("View/MirrorHorizontal", dtk::Key::H),
KeyShortcut("View/MirrorVertical", dtk::Key::V),
KeyShortcut("View/MinifyNearest"),
KeyShortcut("View/MinifyLinear"),
KeyShortcut("View/MagnifyNearest"),
KeyShortcut("View/MagnifyLinear"),
KeyShortcut("View/FromFile"),
KeyShortcut("View/FullRange"),
KeyShortcut("View/LegalRange"),
KeyShortcut("View/AlphaBlendNone"),
KeyShortcut("View/AlphaBlendStraight"),
KeyShortcut("View/AlphaBlendPremultiplied"),
KeyShortcut("View/HUD", dtk::Key::H, static_cast<int>(dtk::KeyModifier::Control)),

KeyShortcut("Window/FullScreen", dtk::Key::U),
KeyShortcut("Window/FloatOnTop"),
KeyShortcut("Window/Secondary", dtk::Key::Y),
KeyShortcut("Window/FileToolBar"),
KeyShortcut("Window/CompareToolBar"),
KeyShortcut("Window/WindowToolBar"),
KeyShortcut("Window/ViewToolBar"),
KeyShortcut("Window/ToolsToolBar"),
KeyShortcut("Window/Timeline"),
KeyShortcut("Window/BottomToolBar"),
KeyShortcut("Window/StatusToolBar")
};
}

Expand Down Expand Up @@ -723,9 +723,9 @@ namespace tl

void to_json(nlohmann::json& json, const KeyShortcutsSettings& value)
{
for (const auto& i : value.shortcuts)
for (const auto& shortcut : value.shortcuts)
{
json["Shortcuts"][i.first] = i.second;
json["Shortcuts"].push_back(shortcut);
}
}

Expand Down Expand Up @@ -840,7 +840,7 @@ namespace tl
{
for (auto i = json.find("Shortcuts"); i != json.end(); ++i)
{
i->at(i.key()).get_to(value.shortcuts[i.key()]);
value.shortcuts.push_back(i->get<KeyShortcut>());
}
}

Expand Down
2 changes: 1 addition & 1 deletion lib/tlPlayApp/Models/SettingsModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ namespace tl
{
KeyShortcutsSettings();

std::map<std::string, KeyShortcut> shortcuts;
std::vector<KeyShortcut> shortcuts;

bool operator == (const KeyShortcutsSettings&) const;
bool operator != (const KeyShortcutsSettings&) const;
Expand Down
Loading

0 comments on commit 648b8a7

Please sign in to comment.