bool SetTrackStatusCommand::ApplyInner(const CommandContext & context, Track * t ) { //auto wt = dynamic_cast<WaveTrack *>(t); //auto pt = dynamic_cast<PlayableTrack *>(t); // You can get some intriguing effects by setting R and L channels to // different values. if( bHasTrackName ) t->SetName(mTrackName); // In stereo tracks, both channels need selecting/deselecting. if( bHasSelected ) t->SetSelected(bSelected); // These ones don't make sense on the second channel of a stereo track. if( !bIsSecondChannel ){ if( bHasFocused ) { TrackPanel *panel = context.GetProject()->GetTrackPanel(); if( bFocused) panel->SetFocusedTrack( t ); else if( t== panel->GetFocusedTrack() ) panel->SetFocusedTrack( nullptr ); } } return true; }
int GetProjectInfoCommand::SendFocusedTrackIndex(CommandExecutionContext context) { int returnVal=0; int focusTrackIndex=0; TrackPanel *panel = context.GetProject()->GetTrackPanel(); Track* focusedTrack = panel->GetFocusedTrack(); TrackListIterator iter(context.GetProject()->GetTracks()); Track *t = iter.First(); while (t) { if(t == focusedTrack) // when we've found the focused track, we know the trackIndex { returnVal = focusTrackIndex; break; } focusTrackIndex++; t = iter.Next(); } wxString trackIndexStr; trackIndexStr << returnVal; // convert to a string to send over named pipe Status(trackIndexStr); return returnVal; }
bool GetTrackInfoCommand::Apply(CommandExecutionContext context) { wxString mode = GetString(wxT("Type")); long trackIndex = GetLong(wxT("TrackIndex")); // Get the track indicated by the TrackIndex parameter // (Note: this ought to be somewhere else) long i = 0; TrackListIterator iter(context.proj->GetTracks()); Track *t = iter.First(); while (t && i != trackIndex) { t = iter.Next(); ++i; } if (i != trackIndex || !t) { Error(wxT("TrackIndex was invalid.")); return false; } // Now get the particular desired item about the track of interest if (mode.IsSameAs(wxT("Name"))) { Status(t->GetName()); } else if (mode.IsSameAs(wxT("StartTime"))) { Status(wxString::Format(wxT("%f"), t->GetStartTime())); } else if (mode.IsSameAs(wxT("EndTime"))) { Status(wxString::Format(wxT("%f"), t->GetEndTime())); } else if (mode.IsSameAs(wxT("Pan"))) { if(t->GetKind() == Track::Wave) Status(wxString::Format(wxT("%f"), static_cast<WaveTrack*>(t)->GetPan())); } else if (mode.IsSameAs(wxT("Gain"))) { if(t->GetKind() == Track::Wave) Status(wxString::Format(wxT("%f"), static_cast<WaveTrack*>(t)->GetGain())); } else if (mode.IsSameAs(wxT("Focused"))) { TrackPanel *panel = context.proj->GetTrackPanel(); SendBooleanStatus(panel->GetFocusedTrack() == t); } else if (mode.IsSameAs(wxT("Selected"))) { SendBooleanStatus(t->GetSelected()); } else if (mode.IsSameAs(wxT("Linked"))) { SendBooleanStatus(t->GetLinked()); } else if (mode.IsSameAs(wxT("Solo"))) { if (t->GetKind() == Track::Wave) SendBooleanStatus(t->GetSolo()); else SendBooleanStatus(false); } else if (mode.IsSameAs(wxT("Mute"))) { if (t->GetKind() == Track::Wave) SendBooleanStatus(t->GetMute()); else SendBooleanStatus(false); } else { Error(wxT("Invalid info type!")); return false; } return true; }