Skip the current line when searching for the next matching line in the kanji timer

This commit is contained in:
Thomas Goyne 2012-11-24 11:35:51 -08:00
parent 0483c1cfbe
commit 30ceced39f

View file

@ -625,8 +625,8 @@ bool KaraokeLineMatchDisplay::UndoMatch()
DialogKanjiTimer::DialogKanjiTimer(agi::Context *c) DialogKanjiTimer::DialogKanjiTimer(agi::Context *c)
: wxDialog(c->parent, -1, _("Kanji timing")) : wxDialog(c->parent, -1, _("Kanji timing"))
, subs(c->ass) , subs(c->ass)
, currentSourceLine(0) , currentSourceLine(nullptr)
, currentDestinationLine(0) , currentDestinationLine(nullptr)
{ {
SetIcon(GETICON(kara_timing_copier_16)); SetIcon(GETICON(kara_timing_copier_16));
@ -822,17 +822,17 @@ void DialogKanjiTimer::OnKeyDown(wxKeyEvent &event) {
void DialogKanjiTimer::ResetForNewLine() void DialogKanjiTimer::ResetForNewLine()
{ {
AssDialogue *src = 0; AssDialogue *src = nullptr;
AssDialogue *dst = 0; AssDialogue *dst = nullptr;
if (currentSourceLine) if (currentSourceLine)
src = dynamic_cast<AssDialogue*>(currentSourceLine); src = dynamic_cast<AssDialogue*>(currentSourceLine);
if (currentDestinationLine) if (currentDestinationLine)
dst = dynamic_cast<AssDialogue*>(currentDestinationLine); dst = dynamic_cast<AssDialogue*>(currentDestinationLine);
if (src == 0 || dst == 0) if (!src || !dst)
{ {
src = dst = 0; src = dst = nullptr;
wxBell(); wxBell();
} }
@ -849,30 +849,26 @@ void DialogKanjiTimer::TryAutoMatch()
display->AutoMatchJapanese(); display->AutoMatchJapanese();
} }
AssEntry *DialogKanjiTimer::FindNextStyleMatch(AssEntry *search_from, const wxString &search_style) template<typename Iterator>
{ static AssEntry *find_next(Iterator from, Iterator to, wxString const& style_name) {
if (!search_from) return search_from; for (++from; from != to; ++from)
for (entryIter it = subs->Line.iterator_to(*search_from); it != subs->Line.end(); ++it)
{ {
AssDialogue *dlg = dynamic_cast<AssDialogue*>(&*it); AssDialogue *dlg = dynamic_cast<AssDialogue*>(&*from);
if (dlg && dlg->Style == search_style) if (dlg && dlg->Style == style_name)
return dlg; return dlg;
} }
return 0; return nullptr;
}
AssEntry *DialogKanjiTimer::FindNextStyleMatch(AssEntry *search_from, const wxString &search_style)
{
if (!search_from) return search_from;
return find_next(subs->Line.iterator_to(*search_from), subs->Line.end(), search_style);
} }
AssEntry *DialogKanjiTimer::FindPrevStyleMatch(AssEntry *search_from, const wxString &search_style) AssEntry *DialogKanjiTimer::FindPrevStyleMatch(AssEntry *search_from, const wxString &search_style)
{ {
if (!search_from) return search_from; if (!search_from) return search_from;
return find_next(EntryList::reverse_iterator(subs->Line.iterator_to(*search_from)), subs->Line.rend(), search_style);
for (EntryList::reverse_iterator it = EntryList::reverse_iterator(subs->Line.iterator_to(*search_from)); it != subs->Line.rend(); ++it)
{
AssDialogue *dlg = dynamic_cast<AssDialogue*>(&*it);
if (dlg && dlg->Style == search_style)
return dlg;
}
return 0;
} }