예제 #1
0
        public bool 選択されている(編集レーン種別 laneType)
        {
            // First() で要素が見つからなかったらバグなので、そのまま System.InvalidOperationException を放出させる。
            var key = this.dic行と編集レーン対応表.First((kvp) => (kvp.Value == laneType)).Key;

            return(this.checkedListBoxレーン選択リスト.GetItemCheckState(key) == CheckState.Checked);
        }
예제 #2
0
        public int 編集レーンのX座標pxを返す(編集レーン種別 lane)
        {
            if (lane == 編集レーン種別.Unknown)
            {
                return(-1);
            }

            return(this.dicレーン番号[lane] * this.チップサイズpx.Width);
        }
예제 #3
0
        public void チップを削除する(編集レーン種別 e編集レーン, int 譜面内絶対位置grid)
        {
            var 削除チップ = (描画用チップ)
                        (from chip in this.SSTFormatScore.チップリスト
                         where ((this.dicチップ編集レーン対応表[chip.チップ種別] == e編集レーン) && (((描画用チップ)chip).譜面内絶対位置grid == 譜面内絶対位置grid))
                         select chip).FirstOrDefault(); // チップが重なってたとしても、削除するのはひとつだけ。

            if (null != 削除チップ)
            {
                // UndoRedo セルを登録。
                var 更前チップ = new 描画用チップ(削除チップ);
                var cell  = new UndoRedo.セル <描画用チップ>(
                    所有者ID: null,
                    Undoアクション: (更対象, 更前, 更後, 任意1, 任意2) => {
                    更対象.CopyFrom(更前);
                    this.SSTFormatScore.チップリスト.Add(更対象);
                    this.SSTFormatScore.チップリスト.Sort();
                    this.Form.未保存である = true;
                },
                    Redoアクション: (更対象, 更前, 更後, 任意1, 任意2) => {
                    this.SSTFormatScore.チップリスト.Remove(更対象);
                    this.Form.未保存である = true;
                },
                    更対象: 削除チップ,
                    更前の値:  更前チップ,
                    更後の値: null);

                this.Form.UndoRedo管理.セルを追加する(cell);

                // 削除する。
                cell.Redoを実行する();

                // 削除完了。
                this.Form.UndoRedo用GUIのEnabledを設定する();
            }
        }
예제 #4
0
        public void チップを配置または置換する(編集レーン種別 e編集レーン, チップ種別 eチップ, int 譜面内絶対位置grid, string チップ文字列, int 音量, double BPM, bool 選択確定中)
        {
            try
            {
                this.Form.UndoRedo管理.トランザクション記録を開始する();

                // 配置位置にチップがあれば削除する。
                this.チップを削除する(e編集レーン, 譜面内絶対位置grid);     // そこにチップがなければ何もしない。

                // 新しいチップを作成し配置する。
                var 小節情報      = this.譜面内絶対位置gridに位置する小節の情報を返す(譜面内絶対位置grid);
                int 小節の長さgrid = this.小節長をグリッドで返す(小節情報.小節番号);

                var chip = new 描画用チップ()
                {
                    選択が確定している   = 選択確定中,
                    BPM         = BPM,
                    発声時刻sec     = 0, // SSTFEditorでは使わない
                    チップ種別       = eチップ,
                    音量          = 音量,
                    小節解像度       = 小節の長さgrid,
                    小節内位置       = 譜面内絶対位置grid - 小節情報.小節の先頭位置grid,
                    小節番号        = 小節情報.小節番号,
                    譜面内絶対位置grid = 譜面内絶対位置grid,
                    チップ内文字列     = チップ文字列,
                };

                // チップを譜面に追加。
                var 更前チップ = new 描画用チップ(chip);
                var cell  = new UndoRedo.セル <描画用チップ>(
                    所有者ID: null,
                    Undoアクション: (更対象, 更前, 更後, 任意1, 任意2) => {
                    this.SSTFormatScore.チップリスト.Remove(更対象);
                    this.Form.未保存である = true;
                },
                    Redoアクション: (更対象, 更前, 更後, 任意1, 任意2) => {
                    更対象.CopyFrom(更前);
                    this.SSTFormatScore.チップリスト.Add(更対象);
                    this.SSTFormatScore.チップリスト.Sort();
                    this.Form.未保存である = true;
                },
                    更対象: chip,
                    更前の値:  更前チップ,
                    更後の値: null);

                this.Form.UndoRedo管理.セルを追加する(cell);
                cell.Redoを実行する();

                // 配置した小節が現状最後の小節だったら、後ろに小節を4つ追加する。
                if (chip.小節番号 == this.SSTFormatScore.最大小節番号を返す())
                {
                    this.最後の小節の後ろに小節を4つ追加する();
                }
            }
            finally
            {
                this.Form.UndoRedo管理.トランザクション記録を終了する();

                this.Form.UndoRedo用GUIのEnabledを設定する();
                this.Form.未保存である = true;
            }
        }