Show all selected lines in the audio display in dialogue mode
Originally committed to SVN as r6572.
This commit is contained in:
parent
a48190871b
commit
dcffc3fd38
2 changed files with 45 additions and 2 deletions
|
@ -966,6 +966,9 @@ void AudioDisplay::SetDraggedObject(AudioDisplayInteractionObject *new_obj)
|
|||
CaptureMouse();
|
||||
else if (!dragged_object && HasCapture())
|
||||
ReleaseMouse();
|
||||
|
||||
if (!dragged_object)
|
||||
audio_marker.reset();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -295,6 +295,12 @@ class AudioTimingControllerDialogue : public AudioTimingController, private Sele
|
|||
/// Inactive lines which are currently modifiable
|
||||
std::list<TimeableLine> inactive_lines;
|
||||
|
||||
/// The current set of selected dialogue lines
|
||||
Selection sel;
|
||||
|
||||
/// Selected lines which are currently modifiable
|
||||
std::list<TimeableLine> selected_lines;
|
||||
|
||||
/// All audio markers for active and inactive lines, sorted by position
|
||||
std::vector<DialogueTimingMarker*> markers;
|
||||
|
||||
|
@ -330,6 +336,9 @@ class AudioTimingControllerDialogue : public AudioTimingController, private Sele
|
|||
/// Regenerate the list of timeable inactive lines
|
||||
void RegenerateInactiveLines();
|
||||
|
||||
/// Regenerate the list of timeable selected lines
|
||||
void RegenerateSelectedLines();
|
||||
|
||||
/// Add a line to the list of timeable inactive lines
|
||||
void AddInactiveLine(AssDialogue *diag);
|
||||
|
||||
|
@ -411,6 +420,7 @@ AudioTimingControllerDialogue::AudioTimingControllerDialogue(agi::Context *c)
|
|||
keyframes_provider.AddMarkerMovedListener(std::tr1::bind(std::tr1::ref(AnnounceMarkerMoved)));
|
||||
video_position_provider.AddMarkerMovedListener(std::tr1::bind(std::tr1::ref(AnnounceMarkerMoved)));
|
||||
|
||||
sel = context->selectionController->GetSelectedSet();
|
||||
Revert();
|
||||
}
|
||||
|
||||
|
@ -440,9 +450,11 @@ void AudioTimingControllerDialogue::OnActiveLineChanged(AssDialogue *new_line)
|
|||
Revert();
|
||||
}
|
||||
|
||||
void AudioTimingControllerDialogue::OnSelectedSetChanged(const Selection &lines_added, const Selection &lines_removed)
|
||||
void AudioTimingControllerDialogue::OnSelectedSetChanged(Selection const&, Selection const&)
|
||||
{
|
||||
/// @todo Create new passive markers, perhaps
|
||||
sel = context->selectionController->GetSelectedSet();
|
||||
RegenerateSelectedLines();
|
||||
RegenerateInactiveLines();
|
||||
}
|
||||
|
||||
void AudioTimingControllerDialogue::OnFileChanged(int type) {
|
||||
|
@ -471,6 +483,8 @@ TimeRange AudioTimingControllerDialogue::GetPrimaryPlaybackRange() const
|
|||
void AudioTimingControllerDialogue::GetRenderingStyles(AudioRenderingStyleRanges &ranges) const
|
||||
{
|
||||
active_line.GetStyleRange(&ranges);
|
||||
for_each(selected_lines.begin(), selected_lines.end(),
|
||||
bind(&TimeableLine::GetStyleRange, std::tr1::placeholders::_1, &ranges));
|
||||
for_each(inactive_lines.begin(), inactive_lines.end(),
|
||||
bind(&TimeableLine::GetStyleRange, std::tr1::placeholders::_1, &ranges));
|
||||
}
|
||||
|
@ -545,6 +559,7 @@ void AudioTimingControllerDialogue::Revert()
|
|||
}
|
||||
|
||||
RegenerateInactiveLines();
|
||||
RegenerateSelectedLines();
|
||||
}
|
||||
|
||||
void AudioTimingControllerDialogue::AddLeadIn()
|
||||
|
@ -731,15 +746,40 @@ void AudioTimingControllerDialogue::RegenerateInactiveLines()
|
|||
|
||||
void AudioTimingControllerDialogue::AddInactiveLine(AssDialogue *diag)
|
||||
{
|
||||
if (sel.count(diag)) return;
|
||||
|
||||
inactive_lines.push_back(TimeableLine(AudioStyle_Inactive, &style_inactive, &style_inactive));
|
||||
inactive_lines.back().SetLine(diag);
|
||||
}
|
||||
|
||||
void AudioTimingControllerDialogue::RegenerateSelectedLines()
|
||||
{
|
||||
bool was_empty = selected_lines.empty();
|
||||
selected_lines.clear();
|
||||
|
||||
AssDialogue *active = context->selectionController->GetActiveLine();
|
||||
for (Selection::iterator it = sel.begin(); it != sel.end(); ++it)
|
||||
{
|
||||
if (*it == active) continue;
|
||||
|
||||
selected_lines.push_back(TimeableLine(AudioStyle_Selected, &style_inactive, &style_inactive));
|
||||
selected_lines.back().SetLine(*it);
|
||||
}
|
||||
|
||||
if (!selected_lines.empty() || !was_empty)
|
||||
{
|
||||
AnnounceUpdatedStyleRanges();
|
||||
RegenerateMarkers();
|
||||
}
|
||||
}
|
||||
|
||||
void AudioTimingControllerDialogue::RegenerateMarkers()
|
||||
{
|
||||
markers.clear();
|
||||
|
||||
active_line.GetMarkers(&markers);
|
||||
for_each(selected_lines.begin(), selected_lines.end(),
|
||||
bind(&TimeableLine::GetMarkers, std::tr1::placeholders::_1, &markers));
|
||||
for_each(inactive_lines.begin(), inactive_lines.end(),
|
||||
bind(&TimeableLine::GetMarkers, std::tr1::placeholders::_1, &markers));
|
||||
sort(markers.begin(), markers.end(), marker_ptr_cmp());
|
||||
|
|
Loading…
Reference in a new issue