From 1cdd461023d59890fc989263b42512fbf3d05a2e Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Mon, 7 Oct 2013 17:42:09 -0700 Subject: [PATCH] Separate UI state info from functional ASS info headers a bit Prefix script info entries that are just storing Aegisub UI state with "Aegisub ", and use a separate AssFile method to get/set them. --- aegisub/src/ass_file.cpp | 15 +++++++++++++++ aegisub/src/ass_file.h | 3 +++ aegisub/src/base_grid.cpp | 8 ++++---- aegisub/src/frame_main.cpp | 6 +++--- aegisub/src/video_context.cpp | 8 ++++---- aegisub/src/video_display.cpp | 2 +- 6 files changed, 30 insertions(+), 12 deletions(-) diff --git a/aegisub/src/ass_file.cpp b/aegisub/src/ass_file.cpp index 0cefd15e5..59605822f 100644 --- a/aegisub/src/ass_file.cpp +++ b/aegisub/src/ass_file.cpp @@ -136,6 +136,21 @@ int AssFile::GetScriptInfoAsInt(std::string const& key) const { return atoi(GetScriptInfo(key).c_str()); } +std::string AssFile::GetUIState(std::string const& key) const { + auto value = GetScriptInfo("Aegisub " + key); + if (value.empty()) + value = GetScriptInfo(key); + return value; +} + +int AssFile::GetUIStateAsInt(std::string const& key) const { + return atoi(GetUIState(key).c_str()); +} + +void AssFile::SaveUIState(std::string const& key, std::string const& value) { + SetScriptInfo("Aegisub " + key, value); +} + void AssFile::SetScriptInfo(std::string const& key, std::string const& value) { for (auto info : Line | agi::of_type()) { if (boost::iequals(key, info->Key())) { diff --git a/aegisub/src/ass_file.h b/aegisub/src/ass_file.h index 932daf0d7..c00a6695c 100644 --- a/aegisub/src/ass_file.h +++ b/aegisub/src/ass_file.h @@ -95,6 +95,9 @@ public: std::string GetScriptInfo(std::string const& key) const; /// Set the value of a [Script Info] key. Adds it if it doesn't exist. void SetScriptInfo(std::string const& key, std::string const& value); + std::string GetUIState(std::string const& key) const; + int GetUIStateAsInt(std::string const& key) const; + void SaveUIState(std::string const& key, std::string const& value); /// Type of changes made in a commit enum CommitType { diff --git a/aegisub/src/base_grid.cpp b/aegisub/src/base_grid.cpp index 82ef55122..4b4d37fff 100644 --- a/aegisub/src/base_grid.cpp +++ b/aegisub/src/base_grid.cpp @@ -187,7 +187,7 @@ void BaseGrid::OnSubtitlesOpen() { UpdateMaps(); if (GetRows()) { - int row = context->ass->GetScriptInfoAsInt("Active Line"); + int row = context->ass->GetUIStateAsInt("Active Line"); if (row < 0 || row >= GetRows()) row = 0; @@ -195,15 +195,15 @@ void BaseGrid::OnSubtitlesOpen() { SelectRow(row); } - ScrollTo(context->ass->GetScriptInfoAsInt("Scroll Position")); + ScrollTo(context->ass->GetUIStateAsInt("Scroll Position")); EndBatch(); SetColumnWidths(); } void BaseGrid::OnSubtitlesSave() { - context->ass->SetScriptInfo("Scroll Position", std::to_string(yPos)); - context->ass->SetScriptInfo("Active Line", std::to_string(GetDialogueIndex(active_line))); + context->ass->SaveUIState("Scroll Position", std::to_string(yPos)); + context->ass->SaveUIState("Active Line", std::to_string(GetDialogueIndex(active_line))); } void BaseGrid::OnShowColMenu(wxCommandEvent &event) { diff --git a/aegisub/src/frame_main.cpp b/aegisub/src/frame_main.cpp index 1747288af..b79a4201b 100644 --- a/aegisub/src/frame_main.cpp +++ b/aegisub/src/frame_main.cpp @@ -616,9 +616,9 @@ void FrameMain::OnSubtitlesOpen() { if (videoChanged) { context->videoController->SetVideo(video); if (context->videoController->IsLoaded()) { - context->videoController->JumpToFrame(context->ass->GetScriptInfoAsInt("Video Position")); + context->videoController->JumpToFrame(context->ass->GetUIStateAsInt("Video Position")); - std::string arString = context->ass->GetScriptInfo("Video Aspect Ratio"); + std::string arString = context->ass->GetUIState("Video Aspect Ratio"); if (boost::starts_with(arString, "c")) { double ar = 0.; agi::util::try_parse(arString.substr(1), &ar); @@ -631,7 +631,7 @@ void FrameMain::OnSubtitlesOpen() { } double videoZoom = 0.; - if (agi::util::try_parse(context->ass->GetScriptInfo("Video Zoom Percent"), &videoZoom)) + if (agi::util::try_parse(context->ass->GetUIState("Video Zoom Percent"), &videoZoom)) context->videoDisplay->SetZoom(videoZoom); } } diff --git a/aegisub/src/video_context.cpp b/aegisub/src/video_context.cpp index 9935a80fe..ff3e8896f 100644 --- a/aegisub/src/video_context.cpp +++ b/aegisub/src/video_context.cpp @@ -248,8 +248,8 @@ void VideoContext::OnSubtitlesSave() { if (!IsLoaded()) { context->ass->SetScriptInfo("Video File", ""); - context->ass->SetScriptInfo("Video Aspect Ratio", ""); - context->ass->SetScriptInfo("Video Position", ""); + context->ass->SaveUIState("Video Aspect Ratio", ""); + context->ass->SaveUIState("Video Position", ""); return; } @@ -261,8 +261,8 @@ void VideoContext::OnSubtitlesSave() { context->ass->SetScriptInfo("Video File", config::path->MakeRelative(video_filename, "?script").generic_string()); context->ass->SetScriptInfo("YCbCr Matrix", video_provider->GetColorSpace()); - context->ass->SetScriptInfo("Video Aspect Ratio", ar); - context->ass->SetScriptInfo("Video Position", std::to_string(frame_n)); + context->ass->SaveUIState("Video Aspect Ratio", ar); + context->ass->SaveUIState("Video Position", std::to_string(frame_n)); } void VideoContext::JumpToFrame(int n) { diff --git a/aegisub/src/video_display.cpp b/aegisub/src/video_display.cpp index 40bbd4e98..70e0c174d 100644 --- a/aegisub/src/video_display.cpp +++ b/aegisub/src/video_display.cpp @@ -435,5 +435,5 @@ void VideoDisplay::Unload() { } void VideoDisplay::OnSubtitlesSave() { - con->ass->SetScriptInfo("Video Zoom Percent", std::to_string(zoomValue)); + con->ass->SaveUIState("Video Zoom Percent", std::to_string(zoomValue)); }