Exemplo n.º 1
0
        protected override void OnMouseDoubleClick(MouseEventArgs e)
        {
            base.OnMouseDoubleClick(e);

            bool left          = (e.Button & MouseButtons.Left) != 0;
            bool inPatternZone = GetPatternForCoord(e.X, e.Y, out int channelIdx, out int barIdx);

            if (left && inPatternZone)
            {
                var channel = Song.Channels[channelIdx];
                var pattern = channel.PatternInstances[barIdx];

                if (pattern != null)
                {
                    bool multiplePatternSelected = (maxSelectedChannelIdx != minSelectedChannelIdx) || (minSelectedPatternIdx != maxSelectedPatternIdx);

                    var dlg = new RenameColorDialog(pattern.Name, pattern.Color, !multiplePatternSelected)
                    {
                        StartPosition = FormStartPosition.Manual,
                        Location      = PointToScreen(new System.Drawing.Point(e.X, e.Y))
                    };

                    if (dlg.ShowDialog() == DialogResult.OK)
                    {
                        App.UndoRedoManager.BeginTransaction(TransactionScope.Song, Song.Id);

                        if (multiplePatternSelected)
                        {
                            for (int i = minSelectedChannelIdx; i <= maxSelectedChannelIdx; i++)
                            {
                                for (int j = minSelectedPatternIdx; j <= maxSelectedPatternIdx; j++)
                                {
                                    Song.Channels[i].PatternInstances[j].Color = dlg.NewColor;
                                }
                            }
                        }
                        else if (Song.Channels[selectedChannel].RenamePattern(pattern, dlg.NewName))
                        {
                            pattern.Color = dlg.NewColor;
                        }

                        ConditionalInvalidate();
                        App.UndoRedoManager.EndTransaction();
                    }
                }
            }
        }
Exemplo n.º 2
0
        protected override void OnMouseDoubleClick(MouseEventArgs e)
        {
            base.OnMouseDoubleClick(e);

            var buttonIndex     = (e.Y + scrollY) / ButtonSizeY;
            var songIndex       = buttonIndex - 1;
            var instrumentIndex = buttonIndex - (App.Project.Songs.Count + 2);

            if (songIndex >= 0 && songIndex < App.Project.Songs.Count)
            {
                var song = App.Project.Songs[songIndex];
                var dlg  = new SongEditDialog(song)
                {
                    StartPosition = FormStartPosition.Manual,
                    Location      = PointToScreen(new System.Drawing.Point(e.X - 210, e.Y))
                };

                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    App.UndoRedoManager.BeginTransaction(TransactionScope.Project);

                    App.Stop();
                    App.Seek(0);

                    if (App.Project.RenameSong(song, dlg.NewName))
                    {
                        song.Color         = dlg.NewColor;
                        song.Tempo         = dlg.NewTempo;
                        song.Speed         = dlg.NewSpeed;
                        song.Length        = dlg.NewSongLength;
                        song.PatternLength = dlg.NewPatternLength;
                        song.BarLength     = dlg.NewBarLength;
                        ConditionalInvalidate();
                        SongModified?.Invoke(song);
                    }

                    App.UndoRedoManager.EndTransaction();
                }
            }
            else if (instrumentIndex > 0 && instrumentIndex <= App.Project.Instruments.Count)
            {
                var instrument = App.Project.Instruments[instrumentIndex - 1];
                var shiftY     = (buttonIndex * ButtonSizeY - scrollY);
                var volRect    = GetButtonRect(4, shiftY);

                if (e.X < volRect.Left)
                {
                    var dlg = new RenameColorDialog(instrument.Name, instrument.Color)
                    {
                        StartPosition = FormStartPosition.Manual,
                        Location      = PointToScreen(new System.Drawing.Point(e.X - 160, e.Y))
                    };

                    if (dlg.ShowDialog() == DialogResult.OK)
                    {
                        App.UndoRedoManager.BeginTransaction(TransactionScope.Project);

                        if (App.Project.RenameInstrument(instrument, dlg.NewName))
                        {
                            instrument.Color = dlg.NewColor;
                            InstrumentColorChanged?.Invoke(instrument);
                            ConditionalInvalidate();
                        }

                        App.UndoRedoManager.EndTransaction();
                    }
                }
            }
        }