From 5ed401d23d8cdbe9c8edfd9e0262a074e2065abe Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Tue, 22 Jun 2010 00:03:22 +0000 Subject: [PATCH] Use vector instead of vector for tracking which rows are selected. Makes undo roughly twice as fast. Originally committed to SVN as r4563. --- aegisub/src/base_grid.cpp | 33 +++++++++++++-------------------- aegisub/src/base_grid.h | 5 +++-- aegisub/src/subs_grid.cpp | 39 +++++++++++++++++---------------------- 3 files changed, 33 insertions(+), 44 deletions(-) diff --git a/aegisub/src/base_grid.cpp b/aegisub/src/base_grid.cpp index 7375557d4..bebad4b8d 100644 --- a/aegisub/src/base_grid.cpp +++ b/aegisub/src/base_grid.cpp @@ -128,7 +128,8 @@ void BaseGrid::UpdateStyle() { // Set column widths std::vector column_array; OPT_GET("Subtitle/Grid/Column")->GetListBool(column_array); - for (int i=0;i<10;i++) showCol[i] = column_array.at(i); + assert(column_array.size() == columns); + for (int i=0;i= selMap.size()) return; if (!addToSelected) ClearSelection(); - if (select != selMap[row]) { + if (select != !!selMap[row]) { selMap[row] = select; if (!addToSelected) { @@ -269,7 +270,7 @@ void BaseGrid::ClearSelection() { /// bool BaseGrid::IsInSelection(int row, int) const { if ((size_t)row >= selMap.size() || row < 0) return false; - return selMap[row]; + return !!selMap[row]; } @@ -278,7 +279,7 @@ bool BaseGrid::IsInSelection(int row, int) const { /// @return /// int BaseGrid::GetNumberSelection() const { - return std::count(selMap.begin(), selMap.end(), true); + return std::count(selMap.begin(), selMap.end(), 1); } @@ -287,7 +288,7 @@ int BaseGrid::GetNumberSelection() const { /// @return /// int BaseGrid::GetFirstSelRow() const { - std::vector::const_iterator first = std::find(selMap.begin(), selMap.end(), true); + std::vector::const_iterator first = std::find(selMap.begin(), selMap.end(), 1); if (first == selMap.end()) return -1; return std::distance(selMap.begin(), first); } @@ -941,8 +942,8 @@ void BaseGrid::SetColumnWidths() { for (int i=0;i<3;i++) colWidth[i+7] = showMargin[i] ? marginLen : 0; // Hide columns - for (int i=0;i<10;i++) { - if (showCol[i] == false) colWidth[i] = 0; + for (int i=0;i tmpDiagPtrMap; - std::vector tmpSelMap; - for (int i=0;i tmpDiagPtrMap(diagPtrMap); + std::vector tmpSelMap(selMap); // Clear old diagPtrMap.clear(); @@ -1002,13 +999,11 @@ void BaseGrid::UpdateMaps() { selMap.clear(); // Re-generate lines - int n = 0; - AssDialogue *curdiag; for (entryIter cur=AssFile::top->Line.begin();cur != AssFile::top->Line.end();cur++) { - curdiag = dynamic_cast(*cur); + AssDialogue *curdiag = dynamic_cast(*cur); if (curdiag) { // Find old pos - bool sel = false; + int sel = 0; for (int i=0;i selMap; + std::vector selMap; public: diff --git a/aegisub/src/subs_grid.cpp b/aegisub/src/subs_grid.cpp index e2e4b86a9..95b95462d 100644 --- a/aegisub/src/subs_grid.cpp +++ b/aegisub/src/subs_grid.cpp @@ -132,22 +132,22 @@ SubtitlesGrid::~SubtitlesGrid() { void SubtitlesGrid::OnPopupMenu(bool alternate) { // Alternate if (alternate) { - // Prepare strings - wxArrayString strings; - strings.Add(_("Line Number")); - strings.Add(_("Layer")); - strings.Add(_("Start")); - strings.Add(_("End")); - strings.Add(_("Style")); - strings.Add(_("Actor")); - strings.Add(_("Effect")); - strings.Add(_("Left")); - strings.Add(_("Right")); - strings.Add(_("Vert")); + const wxString strings[] = { + _("Line Number"), + _("Layer"), + _("Start"), + _("End"), + _("Style"), + _("Actor"), + _("Effect"), + _("Left"), + _("Right"), + _("Vert"), + }; // Create Menu wxMenu menu; - for (size_t i=0;iCheck(showCol[i]); } PopupMenu(&menu); @@ -227,7 +227,7 @@ void SubtitlesGrid::OnShowColMenu(wxCommandEvent &event) { int item = event.GetId()-MENU_SHOW_COL; showCol[item] = !showCol[item]; - std::vector map(showCol, showCol + sizeof(showCol) / sizeof(bool)); + std::vector map(showCol, showCol + columns); OPT_SET("Subtitle/Grid/Column")->SetListBool(map); // Update @@ -810,14 +810,9 @@ void SubtitlesGrid::LoadDefault (AssFile *_ass) { /// void SubtitlesGrid::LoadFromAss (AssFile *_ass,bool keepSelection,bool dontModify) { // Store selected rows - std::vector srows; + wxArrayInt srows; if (keepSelection) { - int nrows = GetRows(); - for (int i=0;i