protected void mcs_chgMenuOpening(MenuItem menu) { if (menu.IsEnabled == false) { return; } var listr = dataList.OfType <IRecSetttingData>().ToList(); List <RecSettingData> recSettings = listr.RecSettingList(); var view = (menu.CommandParameter as EpgCmdParam).Code; Action <MenuItem, int> SetCheckmarkSubMenus = (subMenu, value) => { foreach (var item in subMenu.Items.OfType <MenuItem>()) { item.IsChecked = ((item.CommandParameter as EpgCmdParam).ID == value); } }; //選択アイテムが全て同じ設定の場合だけチェックを表示する foreach (var subMenu in menu.Items.OfType <MenuItem>()) { if (subMenu.Tag == EpgCmdsEx.ChgKeyEnabledMenu) { if (typeof(T).IsSubclassOf(typeof(AutoAddData)) == false) { subMenu.Visibility = Visibility.Collapsed; continue; } subMenu.Visibility = Visibility.Visible; var list = dataList.OfType <AutoAddData>().ToList(); bool?value = list.All(info => info.IsEnabled == list[0].IsEnabled) ? (bool?)list[0].IsEnabled : null; subMenu.Header = string.Format("自動登録有効 : {0}", value == null ? "*" : (value == true ? "有効" : "無効")); SetCheckmarkSubMenus(subMenu, value == true ? 0 : value == false ? 1 : int.MinValue); } else if (subMenu.Tag == EpgCmdsEx.ChgOnPresetMenu) { mm.CtxmGenerateChgOnPresetItems(subMenu); RecPresetItem pre_0 = listr[0].RecSettingInfo.LookUpPreset(listr[0].IsManual); RecPresetItem value = listr.All(data => data.RecSettingInfo.LookUpPreset(data.IsManual).ID == pre_0.ID) ? pre_0 : null; subMenu.Header = string.Format("プリセット : {0}", value == null ? "*" : value.DisplayName); SetCheckmarkSubMenus(subMenu, value == null ? int.MinValue : (int)value.ID); } else if (subMenu.Tag == EpgCmdsEx.ChgResModeMenu) { mm.CtxmGenerateChgResModeAutoAddItems(subMenu, itemCount == 1 ? dataList[0] as ReserveData : null); if (typeof(T) != typeof(ReserveData)) { subMenu.Visibility = Visibility.Collapsed; continue; } subMenu.Visibility = Visibility.Visible; var list = dataList.OfType <ReserveData>().ToList(); ReserveMode?resMode_0 = list[0].ReserveMode; ReserveMode?value = list.All(info => info.ReserveMode == resMode_0) ? resMode_0 : null; subMenu.Header = string.Format("予約モード : {0}", value == null ? "*" : CommonManager.ConvertResModeText(value)); SetCheckmarkSubMenus(subMenu, value == ReserveMode.EPG ? 0 : value == ReserveMode.Program ? 1 : int.MinValue); if (list[0].IsAutoAdded == false) { continue; } foreach (var item in subMenu.Items.OfType <MenuItem>()) { Type type = (item.CommandParameter as EpgCmdParam).Data as Type; int id = (item.CommandParameter as EpgCmdParam).ID; AutoAddData autoAdd = AutoAddData.AutoAddList(type, (uint)id); if (autoAdd != null) { item.IsChecked = autoAdd.GetReserveList().Any(info => info.ReserveID == list[0].ReserveID); } } } else if (subMenu.Tag == EpgCmds.ChgBulkRecSet) { subMenu.Visibility = (recSettings.Count < 2 ? Visibility.Collapsed : Visibility.Visible); } else if (subMenu.Tag == EpgCmds.ChgGenre) { if (typeof(T) != typeof(EpgAutoAddData)) { subMenu.Visibility = Visibility.Collapsed; continue; } subMenu.Visibility = (recSettings.Count < 2 ? Visibility.Collapsed : Visibility.Visible); } else if (subMenu.Tag == EpgCmdsEx.ChgRecmodeMenu) { byte value = recSettings.All(info => info.RecMode == recSettings[0].RecMode) ? recSettings[0].RecMode : byte.MaxValue; subMenu.Header = string.Format("録画モード : {0}", value == byte.MaxValue ? "*" : CommonManager.Instance.ConvertRecModeText(value)); SetCheckmarkSubMenus(subMenu, value); } else if (subMenu.Tag == EpgCmdsEx.ChgPriorityMenu) { byte value = recSettings.All(info => info.Priority == recSettings[0].Priority) ? recSettings[0].Priority : byte.MaxValue; subMenu.Header = string.Format("優先度 : {0}", value == byte.MaxValue ? "*" : value.ToString()); SetCheckmarkSubMenus(subMenu, value); } else if (subMenu.Tag == EpgCmdsEx.ChgRelayMenu || subMenu.Tag == EpgCmdsEx.ChgPittariMenu) { if (typeof(T) != typeof(ReserveData) && typeof(T) != typeof(EpgAutoAddData)) { subMenu.Visibility = Visibility.Collapsed; continue; } byte value; string format; if (subMenu.Tag == EpgCmdsEx.ChgRelayMenu) { value = recSettings.All(info => info.TuijyuuFlag == recSettings[0].TuijyuuFlag) ? recSettings[0].TuijyuuFlag : byte.MaxValue; format = "イベントリレー追従 : {0}"; } else { value = recSettings.All(info => info.PittariFlag == recSettings[0].PittariFlag) ? recSettings[0].PittariFlag : byte.MaxValue; format = "ぴったり(?)録画 : {0}"; } subMenu.Header = string.Format(format, value == byte.MaxValue ? "*" : CommonManager.Instance.YesNoDictionary[value].DisplayName); SetCheckmarkSubMenus(subMenu, value); subMenu.IsEnabled = listr.Any(info => info.IsManual == false); subMenu.ToolTip = (subMenu.IsEnabled != true ? "プログラム予約は対象外" : null); } else if (subMenu.Tag == EpgCmdsEx.ChgTunerMenu) { uint tunerID = recSettings.All(info => info.TunerID == recSettings[0].TunerID) ? recSettings[0].TunerID : uint.MaxValue; mm.CtxmGenerateTunerMenuItems(subMenu); subMenu.Header = string.Format("チューナー : {0}", tunerID == uint.MaxValue ? "*" : CommonManager.Instance.ConvertTunerText(tunerID)); SetCheckmarkSubMenus(subMenu, (int)tunerID); } else if (subMenu.Tag == EpgCmdsEx.ChgMarginStartMenu) { int value = recSettings.All(info => info.GetTrueMargin(true) == recSettings[0].GetTrueMargin(true)) ? recSettings[0].GetTrueMargin(true) : int.MaxValue; subMenu.Header = string.Format("開始マージン : {0} 秒", value == int.MaxValue ? "*" : value.ToString()); } else if (subMenu.Tag == EpgCmdsEx.ChgMarginEndMenu) { int value = recSettings.All(info => info.GetTrueMargin(false) == recSettings[0].GetTrueMargin(false)) ? recSettings[0].GetTrueMargin(false) : int.MaxValue; subMenu.Header = string.Format("終了マージン : {0} 秒", value == int.MaxValue ? "*" : value.ToString()); } } }