/// <summary> /// タブページの内容からプリセットを作成する。 /// </summary> /// <returns>プリセット。プリセット名が不正な場合は null 。</returns> private Preset MakePresetFromTabPages() { // プリセット名を取得 var name = textPresetName.Text; if (!Preset.IsValidName(name)) { return null; } // モーフ情報テーブルを作成 var infoTable = new Dictionary<LipId, MorphInfo>(); foreach (var idCtrl in this.MorphCtrlTable) { // タブページからモーフウェイトデータリストを作成 var weights = new List<MorphWeightData>(); foreach (var ctrl in idCtrl.Value) { if (!string.IsNullOrEmpty(ctrl.NameTextBox.Text)) { weights.Add( new MorphWeightData { MorphName = ctrl.NameTextBox.Text, Weight = (float)ctrl.WeightUpDown.Value, }); } } // モーフ情報を追加 infoTable.Add(idCtrl.Key, new MorphInfo(weights)); } // プリセットを作成 var preset = new Preset(name, new LipMorphSet(infoTable)); return preset; }
/// <summary> /// 指定したプリセットでタブページを更新する。 /// </summary> /// <param name="preset">プリセット。</param> private void UpdateTabPages(Preset preset) { try { tabLip.SuspendLayout(); // プリセット名設定 textPresetName.Text = preset.Name; // タブページ更新 foreach (var idCtrl in this.MorphCtrlTable) { var weights = preset.Value[idCtrl.Key].MorphWeights; var ctrls = idCtrl.Value.Select((ctrl, index) => new { ctrl, index }); foreach (var c in ctrls) { if (c.index < weights.Count) { // モーフ名とウェイト値を設定 var w = weights[c.index]; c.ctrl.NameTextBox.Text = w.MorphName; c.ctrl.WeightUpDown.Value = (decimal)w.Weight; } else { // データが無いので既定値にしておく c.ctrl.NameTextBox.Text = string.Empty; c.ctrl.WeightUpDown.Value = 1; } } } } finally { tabLip.ResumeLayout(true); } }