diff --git a/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Editors/Multimedia/Audio/Synthesized/PianoRoll/PianoRollEditor.Designer.cs b/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Editors/Multimedia/Audio/Synthesized/PianoRoll/PianoRollEditor.Designer.cs index f814af56..f05c675c 100644 --- a/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Editors/Multimedia/Audio/Synthesized/PianoRoll/PianoRollEditor.Designer.cs +++ b/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Editors/Multimedia/Audio/Synthesized/PianoRoll/PianoRollEditor.Designer.cs @@ -56,13 +56,6 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll private PianoRollView PianoRoll = null; - protected override void OnObjectModelChanged(EventArgs e) - { - base.OnObjectModelChanged(e); - - - } - private void InitializeComponent() { this.Layout = new BoxLayout(Orientation.Vertical); diff --git a/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Editors/Multimedia/Audio/Synthesized/PianoRoll/PianoRollEditor.cs b/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Editors/Multimedia/Audio/Synthesized/PianoRoll/PianoRollEditor.cs index 92566348..23556cf4 100644 --- a/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Editors/Multimedia/Audio/Synthesized/PianoRoll/PianoRollEditor.cs +++ b/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Editors/Multimedia/Audio/Synthesized/PianoRoll/PianoRollEditor.cs @@ -19,6 +19,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . using System; +using UniversalEditor.ObjectModels.Multimedia.Audio.Synthesized; using UniversalEditor.UserInterface; namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll @@ -35,6 +36,19 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll throw new NotImplementedException(); } + protected override void OnObjectModelChanged(EventArgs e) + { + base.OnObjectModelChanged(e); + + SynthesizedAudioObjectModel om = (ObjectModel as SynthesizedAudioObjectModel); + if (om == null) return; + + if (om.Tracks.Count > 0) + PianoRoll.SelectedTrack = om.Tracks[0]; + + PianoRoll.Refresh(); + } + protected override void OnToolboxItemSelected(ToolboxItemEventArgs e) { base.OnToolboxItemSelected(e); diff --git a/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Editors/Multimedia/Audio/Synthesized/PianoRoll/Views/PianoRollView.cs b/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Editors/Multimedia/Audio/Synthesized/PianoRoll/Views/PianoRollView.cs index d8cbc97e..62158232 100644 --- a/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Editors/Multimedia/Audio/Synthesized/PianoRoll/Views/PianoRollView.cs +++ b/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.Multimedia.UserInterface/Editors/Multimedia/Audio/Synthesized/PianoRoll/Views/PianoRollView.cs @@ -213,9 +213,6 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll.Control } } - private SynthesizedAudioCommand.SynthesizedAudioCommandCollection mvarCommands = new SynthesizedAudioCommand.SynthesizedAudioCommandCollection(); - public SynthesizedAudioCommand.SynthesizedAudioCommandCollection Commands { get { return mvarCommands; } } - private SynthesizedAudioCommand.SynthesizedAudioCommandCollection mvarSelectedCommands = new SynthesizedAudioCommand.SynthesizedAudioCommandCollection(); public SynthesizedAudioCommand.SynthesizedAudioCommandCollection SelectedCommands { get { return mvarSelectedCommands; } } @@ -225,7 +222,8 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll.Control } public SynthesizedAudioCommand HitTest(int x, int y) { - foreach (SynthesizedAudioCommand cmd in mvarCommands) + if (SelectedTrack == null) return null; + foreach (SynthesizedAudioCommand cmd in SelectedTrack.Commands) { Rectangle rect = GetCommandRect(cmd); if (rect.Contains(x, y)) return cmd; @@ -234,8 +232,9 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll.Control } public SynthesizedAudioCommand[] HitTest(Rectangle rect) { + if (SelectedTrack == null) return new SynthesizedAudioCommand[0]; List list = new List(); - foreach (SynthesizedAudioCommand cmd in mvarCommands) + foreach (SynthesizedAudioCommand cmd in SelectedTrack.Commands) { Rectangle rect1 = GetCommandRect(cmd); if (rect.Normalize().IntersectsWith(rect1)) list.Add(cmd); @@ -292,6 +291,8 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll.Control { base.OnMouseDown(e); + if (SelectedTrack == null) return; + SynthesizedAudioCommand cmd = HitTest(e.Location); if ((e.ModifierKeys == KeyboardModifierKey.None && (cmd != null && !mvarSelectedCommands.Contains(cmd))) || cmd == null) { @@ -304,13 +305,13 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll.Control { if (mvarSelectedCommands.Count > 0) { - int startIndex = mvarCommands.IndexOf(mvarSelectedCommands[mvarSelectedCommands.Count - 1]); - int endIndex = mvarCommands.IndexOf(cmd); + int startIndex = SelectedTrack.Commands.IndexOf(mvarSelectedCommands[mvarSelectedCommands.Count - 1]); + int endIndex = SelectedTrack.Commands.IndexOf(cmd); mvarSelectedCommands.Clear(); for (int i = startIndex; i < endIndex; i++) { - mvarSelectedCommands.Add(mvarCommands[i]); + mvarSelectedCommands.Add(SelectedTrack.Commands[i]); } } } @@ -398,6 +399,8 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll.Control { base.OnMouseUp(e); + if (SelectedTrack == null) return; + if (e.Buttons == MouseButtons.Primary) { SynthesizedAudioCommand cmd = HitTest(e.Location); @@ -446,7 +449,7 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll.Control note.Frequency = ValueToFrequency((int)drag_OriginalLocation.Y); Editor.BeginEdit(); - mvarCommands.Add(note); + SelectedTrack.Commands.Add(note); Editor.EndEdit(); mvarSelectedCommands.Clear(); @@ -634,26 +637,29 @@ namespace UniversalEditor.Editors.Multimedia.Audio.Synthesized.PianoRoll.Control e.Graphics.DrawLine(gridPen, gridRect.X + i, gridRect.Y, gridRect.X + i, gridRect.Bottom); } - foreach (SynthesizedAudioCommand cmd in mvarCommands) + if (SelectedTrack != null) { - if (cmd is SynthesizedAudioCommandNote) + foreach (SynthesizedAudioCommand cmd in SelectedTrack.Commands) { - SynthesizedAudioCommandNote note = (cmd as SynthesizedAudioCommandNote); - - Rectangle rect = GetNoteRect(note); - - if (mvarSelectedCommands.Contains(cmd)) + if (cmd is SynthesizedAudioCommandNote) { - e.Graphics.FillRectangle(new SolidBrush(Color.FromRGBAByte(0xCC, 0xCC, 0xFF)), rect); - } - else - { - e.Graphics.FillRectangle(new SolidBrush(Color.FromRGBAByte(0xCC, 0xFF, 0xCC)), rect); - } - e.Graphics.DrawRectangle(new Pen(Colors.DarkGray), rect); + SynthesizedAudioCommandNote note = (cmd as SynthesizedAudioCommandNote); - Rectangle textRect = new Rectangle(rect.X + 2, rect.Y + 1, rect.Width - 4, rect.Height - 2); - e.Graphics.DrawText(note.Lyric, Font, textRect, new SolidBrush(Colors.Black)); + Rectangle rect = GetNoteRect(note); + + if (mvarSelectedCommands.Contains(cmd)) + { + e.Graphics.FillRectangle(new SolidBrush(Color.FromRGBAByte(0xCC, 0xCC, 0xFF)), rect); + } + else + { + e.Graphics.FillRectangle(new SolidBrush(Color.FromRGBAByte(0xCC, 0xFF, 0xCC)), rect); + } + e.Graphics.DrawRectangle(new Pen(Colors.DarkGray), rect); + + Rectangle textRect = new Rectangle(rect.X + 2, rect.Y + 1, rect.Width - 4, rect.Height - 2); + e.Graphics.DrawText(note.Lyric, Font, textRect, new SolidBrush(Colors.Black)); + } } } diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Synthesized/SynthesizedAudioObjectModel.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Synthesized/SynthesizedAudioObjectModel.cs index 932774f6..cfd4e85e 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Synthesized/SynthesizedAudioObjectModel.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Synthesized/SynthesizedAudioObjectModel.cs @@ -16,6 +16,13 @@ namespace UniversalEditor.ObjectModels.Multimedia.Audio.Synthesized return _omr; } + public SynthesizedAudioObjectModel() + { + // HACK: since we don't have a good way to specify defaults for blank templates. + // FIXME: THIS MAY NOT GET CLEARED WHEN OPENING A NEW FILE SINCE WE ASSUME THAT A NEW OBJECT MODEL IS EMPTY!!! + Tracks.Add(new SynthesizedAudioTrack()); + } + private short mvarChannelCount = 2; public short ChannelCount { get { return mvarChannelCount; } set { mvarChannelCount = value; } } diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Synthesized/SynthesizedAudioTrack.cs b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Synthesized/SynthesizedAudioTrack.cs index 861b54b2..065f5d77 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Synthesized/SynthesizedAudioTrack.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Multimedia/ObjectModels/Multimedia/Audio/Synthesized/SynthesizedAudioTrack.cs @@ -30,7 +30,7 @@ namespace UniversalEditor.ObjectModels.Multimedia.Audio.Synthesized { if (!string.IsNullOrEmpty(item.Name)) { - this.tracksByID.Add(item.Name, item); + this.tracksByID[item.Name] = item; } base.Add(item); }