diff --git a/aegisub/src/ass_file.h b/aegisub/src/ass_file.h index a0bb9589f..1d638567b 100644 --- a/aegisub/src/ass_file.h +++ b/aegisub/src/ass_file.h @@ -152,7 +152,7 @@ public: /// @param[out] w Width /// @param[in] h Height void GetResolution(int &w,int &h); - /// Get the value in a [Script Info] key as int. + /// Get the value in a [Script Info] key as int, or 0 if it is not present int GetScriptInfoAsInt(const wxString key); /// Get the value in a [Script Info] key as string. wxString GetScriptInfo(wxString key); diff --git a/aegisub/src/base_grid.cpp b/aegisub/src/base_grid.cpp index cf0347ff2..5108b01d9 100644 --- a/aegisub/src/base_grid.cpp +++ b/aegisub/src/base_grid.cpp @@ -118,6 +118,7 @@ BaseGrid::BaseGrid(wxWindow* parent, agi::Context *context, const wxSize& size, OPT_SUB("Subtitle/Grid/Highlight Subtitles in Frame", &BaseGrid::OnHighlightVisibleChange, this); context->ass->AddCommitListener(&BaseGrid::OnSubtitlesCommit, this); context->ass->AddFileOpenListener(&BaseGrid::OnSubtitlesOpen, this); + context->ass->AddFileSaveListener(&BaseGrid::OnSubtitlesSave, this); std::tr1::function Refresh(std::tr1::bind(&BaseGrid::Refresh, this, false, (wxRect*)NULL)); OPT_SUB("Colour/Subtitle Grid/Active Border", Refresh); @@ -175,13 +176,25 @@ void BaseGrid::OnSubtitlesOpen() { UpdateMaps(); if (GetRows()) { - SetActiveLine(GetDialogue(0)); - SelectRow(0); + int row = context->ass->GetScriptInfoAsInt("Active Line"); + if (row < 0 || row >= GetRows()) + row = 0; + + SetActiveLine(GetDialogue(row)); + SelectRow(row); } + + ScrollTo(context->ass->GetScriptInfoAsInt("Scroll Position")); + EndBatch(); SetColumnWidths(); } +void BaseGrid::OnSubtitlesSave() { + context->ass->SetScriptInfo("Scroll Position", wxString::Format("%d", yPos)); + context->ass->SetScriptInfo("Active Line", wxString::Format("%d", GetDialogueIndex(active_line))); +} + void BaseGrid::OnShowColMenu(wxCommandEvent &event) { int item = event.GetId() - MENU_SHOW_COL; showCol[item] = !showCol[item]; diff --git a/aegisub/src/base_grid.h b/aegisub/src/base_grid.h index e5ef34295..4e24309a8 100644 --- a/aegisub/src/base_grid.h +++ b/aegisub/src/base_grid.h @@ -110,6 +110,7 @@ class BaseGrid : public wxWindow, public BaseSelectionController { void OnSize(wxSizeEvent &event); void OnSubtitlesCommit(int type); void OnSubtitlesOpen(); + void OnSubtitlesSave(); void DrawImage(wxDC &dc, bool paint_columns[]); void GetRowStrings(int row, AssDialogue *line, bool *paint_columns, wxString *strings) const;