Exemplo n.º 1
0
        protected void mcs_chgMenuOpening(MenuItem menu)
        {
            if (menu.IsEnabled == false)
            {
                return;
            }

            var listr = dataList.OfType <IRecSetttingData>().Where(data => data.RecSettingInfo != null).ToList();
            List <RecSettingData> recSettings = listr.RecSettingList();

            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>())
            {
                subMenu.Visibility = Visibility.Visible;
                if (subMenu.Tag == EpgCmds.ShowDialog)
                {
                    subMenu.Header = "ダイアログ表示(_X)...";
                }
                else if (subMenu.Tag == EpgCmdsEx.ChgKeyEnabledMenu)
                {
                    if (typeof(T).IsSubclassOf(typeof(AutoAddData)) == false)
                    {
                        subMenu.Visibility = Visibility.Collapsed;
                        continue;
                    }
                    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("自動登録有効(_A) : {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("プリセット(_P) : {0}", value == null ? "*" : value.DisplayName);
                    SetCheckmarkSubMenus(subMenu, value == null ? int.MinValue : value.ID);
                }
                else if (subMenu.Tag == EpgCmdsEx.ChgResModeMenu)
                {
                    //メニュークリアもあるので先に実行
                    mm.CtxmGenerateChgResModeAutoAddItems(subMenu, dataList.Count == 1 ? dataList[0] as ReserveData : null);

                    if (typeof(T) != typeof(ReserveData))
                    {
                        subMenu.Visibility = Visibility.Collapsed;
                        continue;
                    }
                    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("予約モード(_M) : {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)
                {
                    if (recSettings.Count < 2)
                    {
                        subMenu.Visibility = Visibility.Collapsed;
                    }
                    subMenu.Header = "まとめて録画設定を変更(_O)...";
                }
                else if (subMenu.Tag == EpgCmds.ChgGenre)
                {
                    if (recSettings.Count < 2 || typeof(T) != typeof(EpgAutoAddData))
                    {
                        subMenu.Visibility = Visibility.Collapsed;
                    }
                    subMenu.Header = "まとめてジャンル絞り込みを変更(_J)...";
                }
                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("録画モード(_R) : {0}", value == byte.MaxValue ? "*" : CommonManager.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("優先度(_Y) : {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 = "イベントリレー追従(_Z) : {0}";
                    }
                    else
                    {
                        value  = recSettings.All(info => info.PittariFlag == recSettings[0].PittariFlag) ? recSettings[0].PittariFlag : byte.MaxValue;
                        format = "ぴったり(?)録画(_F) : {0}";
                    }
                    subMenu.Header = string.Format(format, value == byte.MaxValue ? "*" : CommonManager.ConvertYesNoText(value));
                    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("チューナー(_T) : {0}", tunerID == uint.MaxValue ? "*" : CommonManager.ConvertTunerText(tunerID));
                    SetCheckmarkSubMenus(subMenu, (int)tunerID);
                }
                else if (subMenu.Tag == EpgCmdsEx.ChgMarginStartMenu)
                {
                    int value = recSettings.All(info => info.StartMarginActual == recSettings[0].StartMarginActual) ? recSettings[0].StartMarginActual : int.MaxValue;
                    subMenu.Header = string.Format("開始マージン(_S) : {0} 秒", value == int.MaxValue ? "*" : value.ToString());
                }
                else if (subMenu.Tag == EpgCmdsEx.ChgMarginEndMenu)
                {
                    int value = recSettings.All(info => info.EndMarginActual == recSettings[0].EndMarginActual) ? recSettings[0].EndMarginActual : int.MaxValue;
                    subMenu.Header = string.Format("終了マージン(_E) : {0} 秒", value == int.MaxValue ? "*" : value.ToString());
                }
            }
        }