public bool 選択されている(編集レーン種別 laneType) { // First() で要素が見つからなかったらバグなので、そのまま System.InvalidOperationException を放出させる。 var key = this.dic行と編集レーン対応表.First((kvp) => (kvp.Value == laneType)).Key; return(this.checkedListBoxレーン選択リスト.GetItemCheckState(key) == CheckState.Checked); }
public int 編集レーンのX座標pxを返す(編集レーン種別 lane) { if (lane == 編集レーン種別.Unknown) { return(-1); } return(this.dicレーン番号[lane] * this.チップサイズpx.Width); }
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を設定する(); } }
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; } }