Ejemplo n.º 1
0
        public NoteEditCMenu(ScorePanel scorePanel, Position clickPosition)
        {
            var b = Status.IsCopyAvailable;

            stripItems = new ToolStripMenuItem[]
            {
                new ToolStripMenuItem("切り取り", null, (s, e) => scorePanel.CutNotes())
                {
                    Enabled = b
                },
                new ToolStripMenuItem("コピー", null, (s, e) => scorePanel.CopyNotes())
                {
                    Enabled = b
                },
                new ToolStripMenuItem("削除", null, (s, e) => scorePanel.ClearAreaNotes())
                {
                    Enabled = b
                },
                new ToolStripMenuItem("左右反転", null, (s, e) => scorePanel.ReverseNotes())
                {
                    Enabled = b
                }
            };
            Items.AddRange(stripItems);
        }
Ejemplo n.º 2
0
        public MainForm()
        {
            InitializeComponent();
            #region 譜面パネルの初期化
            tabScore.TabPages.Clear();
            tabScore.Font      = new Font("Yu Gothic UI", 9);
            tabNoteButton.Font = tabScore.Font;
            for (int i = 0; i < tabPageCount; ++i)
            {
                TabPageEx tabPageEx = new TabPageEx("NewScore" + (i + 1));
                tabScore.TabPages.Add(tabPageEx);
                // PictureBoxの追加と初期化
                PictureBox pBox = new PictureBox
                {
                    Size = tabScore.TabPages[i].Size
                };
                // TabPageに初期化したPictureBoxを入れる
                tabScore.TabPages[i].Controls.Add(pBox);
                // ScrollBarの追加と初期化
                HScrollBar hScroll = new HScrollBar
                {
                    Size    = new Size(pBox.Width, 17),
                    Value   = 0,
                    Minimum = 0,
                    Dock    = DockStyle.Bottom
                };
                VScrollBar vScroll = new VScrollBar
                {
                    Size    = new Size(17, pBox.Height),
                    Value   = 0,
                    Minimum = 0,
                    Maximum = 0,
                    Dock    = DockStyle.Right,
                    Visible = false
                };
                // HScrollBarをPictureBoxに入れる
                pBox.Controls.Add(hScroll);
                pBox.Controls.Add(vScroll);
                // 初期化したPictureBoxとHScrollBarを使用してScorePanelを追加
                ScorePanel sPanel = new ScorePanel(pBox, hScroll, vScroll);
                sPanel.OperationManager.StatusChanged += (undo, redo) =>
                {
                    tsbUndo.Enabled = tsmiUndo.Enabled = undo;
                    tsbRedo.Enabled = tsmiRedo.Enabled = redo;
                };
                sPanel.OperationManager.Edited += () =>
                {
                    UpdateTextOfTabAndForm(true);
                    sPanel.IsEdited = true;
                };
                Status.CopyChanged  += (b) => tsbCopy.Enabled = tsbCut.Enabled = b;
                Status.PasteChanged += (b) => tsbPaste.Enabled = b;
                tsbCut.Enabled       = tsbCopy.Enabled = tsbPaste.Enabled = false;
                sPanel.SetScore(4, 4, 200);
                tabPageEx.ScorePanel = sPanel;
                // PictureBoxとHScrollBarの各種デリゲートの設定
                pBox.MouseWheel       += Score_MouseWheel;
                pBox.Paint            += Score_Paint;
                pBox.MouseClick       += Score_MouseClick;
                pBox.MouseDoubleClick += Score_MouseDoubleClick;
                pBox.MouseEnter       += Score_MouseEnter;
                pBox.MouseDown        += Score_MouseDown;
                pBox.MouseMove        += Score_MouseMove;
                pBox.MouseUp          += Score_MouseUp;
                hScroll.Scroll        += Score_Scroll;
                vScroll.Scroll        += Score_Scroll;
            }
            #endregion
            InitializeToolStrip();
            #region ノーツボタン追加
            NoteButtonManager noteButtonManager = new NoteButtonManager();
            noteButtonManager.ButtonClicked += (s, e) => SetMode(Mode.Add);
            flpNotePanel.Size     = tabNoteButton.TabPages[0].Size;
            flpNotePanel.Location = new Point();
            foreach (NoteButton noteButton in noteButtonManager)
            {
                flpNotePanel.Controls.Add(noteButton);
            }
            #endregion
            #region 各種ボタンに対するイベント紐づけ
            tabScore.SelectedIndexChanged += (s, e) =>
            {
                Text  = tabScore.SelectedTab.Text;
                Text += " - M4ple Editor";
                ScorePanel selectedPanel = (tabScore.SelectedTab as TabPageEx).ScorePanel;
                selectedPanel.OperationManager.OnStatusChanged();
            };
            #region ToolStripButton
            tsbAdd.Click                  += (s, e) => SetMode(Mode.Add);
            tsbEdit.Click                 += (s, e) => SetMode(Mode.Edit);
            tsbDelete.Click               += (s, e) => SetMode(Mode.Delete);
            tsbInvisibleSlideTap.Click    += TbsInvisibleSlideTap_Click;
            tscbBeat.SelectedIndexChanged += (s, e) => { Status.Beat = int.Parse(tscbBeat.Text); };
            tscbGrid.SelectedIndexChanged += (s, e) => { Status.Grid = int.Parse(tscbGrid.Text); };
            tsbNew.Click                  += New_Click;
            tsbOpen.Click                 += Open_Click;
            tsbSave.Click                 += Save_Click;
            tsbImport.Click               += Import_Click;
            tsbExport.Click               += (s, e) =>
            {
                ScorePanel selectedPanel = (tabScore.SelectedTab as TabPageEx).ScorePanel;
                selectedPanel.Export();
            };
            tsbCopy.Click    += Copy_Click;
            tsbCut.Click     += Cut_Click;
            tsbPaste.Click   += Paste_Click;
            tsbUndo.Click    += Undo_Click;
            tsbRedo.Click    += Redo_Click;
            tsbUndo.Enabled   = tsbRedo.Enabled = false;
            tsbZoomIn.Click  += ZoomIn_Click;
            tsbZoomOut.Click += ZoomOut_Click;
            #endregion
            #region ToolStripMenuItem(表示)
            tsmiIsShortNote.Click += (s, e) =>
            {
                ToolStripMenuItem menuItem = (ToolStripMenuItem)s;
                Status.IsShortNoteVisible = menuItem.Checked = !menuItem.Checked;
                Refresh();
            };
            tsmiIsHold.Click += (s, e) =>
            {
                ToolStripMenuItem menuItem = (ToolStripMenuItem)s;
                Status.IsHoldVisible = menuItem.Checked = !menuItem.Checked;
                Refresh();
            };
            tsmiIsSlide.Click += (s, e) =>
            {
                ToolStripMenuItem menuItem = (ToolStripMenuItem)s;
                Status.IsSlideVisible = menuItem.Checked = !menuItem.Checked;
                Refresh();
            };
            tsmiIsSlideRelay.Click += (s, e) =>
            {
                ToolStripMenuItem menuItem = (ToolStripMenuItem)s;
                Status.IsSlideRelayVisible = menuItem.Checked = !menuItem.Checked;
                Refresh();
            };
            tsmiIsSlideCurve.Click += (s, e) =>
            {
                ToolStripMenuItem menuItem = (ToolStripMenuItem)s;
                Status.IsSlideCurveVisible = menuItem.Checked = !menuItem.Checked;
                Refresh();
            };
            tsmiIsAirHold.Click += (s, e) =>
            {
                ToolStripMenuItem menuItem = (ToolStripMenuItem)s;
                Status.IsAirHoldVisible = menuItem.Checked = !menuItem.Checked;
                Refresh();
            };
            tsmiIsAir.Click += (s, e) =>
            {
                ToolStripMenuItem menuItem = (ToolStripMenuItem)s;
                Status.IsAirVisible = menuItem.Checked = !menuItem.Checked;
                Refresh();
            };
            tsmiIsExTapDistinct.Click += (s, e) =>
            {
                ToolStripMenuItem menuItem = (ToolStripMenuItem)s;
                Status.IsExTapDistinct = menuItem.Checked = !menuItem.Checked;
                Refresh();
            };
            tsmiIsEconomyMode.Click += (s, e) =>
            {
                ToolStripMenuItem menuItem = (ToolStripMenuItem)s;
                Status.IsEconomyMode = menuItem.Checked = !menuItem.Checked;
                Refresh();
            };
            #endregion
            #region ToolStlipMenuItem(ファイル)
            tsmiNew.Click    += New_Click;
            tsmiOpen.Click   += Open_Click;
            tsmiSave.Click   += Save_Click;
            tsmiSaveAs.Click += (s, e) =>
            {
                ScorePanel selectedPanel = (tabScore.SelectedTab as TabPageEx).ScorePanel;
                bool       isSaved       = selectedPanel.SaveAs();
                UpdateTextOfTabAndForm(!isSaved);
            };
            tsmiImport.Click += Import_Click;
            tsmiExport.Click += (s, e) =>
            {
                ScorePanel selectedPanel = (tabScore.SelectedTab as TabPageEx).ScorePanel;
                selectedPanel.ExportAs();
            };
            tsmiQuit.Click += (s, e) =>
            {
                Close();
            };
            FormClosing += (s, e) =>
            {
                e.Cancel = !IsExit();
                Properties.Settings.Default.Save();
            };
            #endregion
            #region ToolStripMenuItem(編集)
            tsmiUndo.Click         += Undo_Click;
            tsmiRedo.Click         += Redo_Click;
            tsmiUndo.Enabled        = tsmiRedo.Enabled = false;
            tsmiCopy.Click         += Copy_Click;
            tsmiCut.Click          += Cut_Click;
            tsmiPaste.Click        += Paste_Click;
            tsmiPasteReverse.Click += (s, e) =>
            {
                ScorePanel selectedPanel = (tabScore.SelectedTab as TabPageEx).ScorePanel;
                selectedPanel.PasteNotes();
                selectedPanel.ReverseNotes();
                Refresh();
            };
            tsmiDelete.Click += (s, e) =>
            {
                ScorePanel selectedPanel = (tabScore.SelectedTab as TabPageEx).ScorePanel;
                selectedPanel.ClearAreaNotes();
                Refresh();
            };
            tsmiReverse.Click += (s, e) =>
            {
                ScorePanel selectedPanel = (tabScore.SelectedTab as TabPageEx).ScorePanel;
                selectedPanel.ReverseNotes();
                Refresh();
            };
            #endregion
            #region ToolStripMenuItem(ウィンドウ)
            tsmiSizeSmall.Click    += (s, e) => SetPanelSize(PanelSize.Small);
            tsmiSizeMiddle.Click   += (s, e) => SetPanelSize(PanelSize.Middle);
            tsmiSizeBig.Click      += (s, e) => SetPanelSize(PanelSize.Big);
            tsmiScaleHalf.Click    += (s, e) => SetScoreScale(ScoreScale.Half);
            tsmiScaleDefault.Click += (s, e) => SetScoreScale(ScoreScale.Default);
            tsmiScaleDouble.Click  += (s, e) => SetScoreScale(ScoreScale.Double);
            tsmiScaleQuad.Click    += (s, e) => SetScoreScale(ScoreScale.Quad);
            #endregion
            #region ToolStripMenuItem(ヘルプ)
            tsmiShowHelp.Click += (s, e) =>
            {
                System.Diagnostics.Process.Start("https://github.com/TinyTany/M4ple/wiki");
            };
            tsmiVersion.Click += (s, e) =>
            {
                new VersionInfoForm().ShowDialog();
            };
            #endregion
            #endregion
            #region ショートカットキー
            KeyDown += (s, e) =>
            {
                if (ModifierKeys == Keys.Alt)
                {
                    return;
                }
                switch (e.KeyCode)
                {
                case Keys.A:
                    tsbAdd.PerformClick();
                    break;

                case Keys.E:
                    tsbEdit.PerformClick();
                    break;

                case Keys.D:
                    tsbDelete.PerformClick();
                    break;

                case Keys.S:
                    tsbInvisibleSlideTap.PerformClick();
                    break;

                case Keys.B:
                    if (ModifierKeys == Keys.Shift)
                    {
                        tscbBeat.SelectedIndex =
                            tscbBeat.SelectedIndex == 0 ? tscbBeat.Items.Count - 1 : --tscbBeat.SelectedIndex;
                    }
                    else
                    {
                        tscbBeat.SelectedIndex = (tscbBeat.SelectedIndex + 1) % tscbBeat.Items.Count;
                    }
                    break;

                case Keys.G:
                    if (ModifierKeys == Keys.Shift)
                    {
                        tscbGrid.SelectedIndex =
                            tscbGrid.SelectedIndex == 0 ? tscbGrid.Items.Count - 1 : --tscbGrid.SelectedIndex;
                    }
                    else
                    {
                        tscbGrid.SelectedIndex = (tscbGrid.SelectedIndex + 1) % tscbGrid.Items.Count;
                    }
                    break;

                case Keys.OemPeriod:
                    noteButtonManager.SelectedButtonIncrease();
                    break;

                case Keys.Oemcomma:
                    noteButtonManager.SelectedButtonDecrease();
                    break;
                }
            };
            #endregion
            Resize += (s, e) =>
            {
                // HACK: 16と42はマジックナンバー的なもの(なぜかこの値で調整しないと大きさが合わない)
                tabScore.Size = new Size(
                    Width - tabScore.Location.X - tabScore.Margin.Right - 16,
                    Height - tabScore.Location.Y - tabScore.Margin.Bottom - 42);
                foreach (TabPageEx tabPageEx in tabScore.TabPages)
                {
                    tabPageEx.ScorePanel.ReSizePanel(tabScore.SelectedTab.Size);
                }
                tabNoteButton.Height = tabScore.Height;
                flpNotePanel.Height  = tabNoteButton.TabPages[0].Height;
            };

            #region tscbBeatの初期化
            beatItemList = new List <ToolStripValueItem>()
            {
                new ToolStripValueItem(4),
                new ToolStripValueItem(8),
                new ToolStripValueItem(12),
                new ToolStripValueItem(16),
                new ToolStripValueItem(24),
                new ToolStripValueItem(32),
                new ToolStripValueItem(48),
                new ToolStripValueItem(64),
                new ToolStripValueItem(96),
                new ToolStripValueItem(128),
                new ToolStripValueItem(192),
                new ToolStripValueItem(256),
                new ToolStripValueItem(384),
                new ToolStripValueItem(512),
                new ToolStripValueItem(768),
            };

            tscbBeat.Items.Clear();
            beatItemList.ForEach(x => tscbBeat.Items.Add(x));
            // NOTE: StatusでのBeatの初期値が16なのでそれに対応したインデックスにしておく
            var index = beatItemList.FindIndex(x => x.Value == Status.Beat);
            System.Diagnostics.Debug.Assert(index >= 0, "tscbBeatの初期インデックスが正しく設定されていません");
            tscbBeat.SelectedIndex = index;
            #endregion

            SetPanelSize(PanelSize.Big);
            SetScoreScale(ScoreScale.Default);
        }