private void button_chg_reserve_Click(object sender, RoutedEventArgs e) { if (checkBox_program.IsChecked == true) { reserveInfo.Title = textBox_title.Text; ChSet5Item ch = comboBox_service.SelectedItem as ChSet5Item; reserveInfo.StationName = ch.ServiceName; reserveInfo.OriginalNetworkID = ch.ONID; reserveInfo.TransportStreamID = ch.TSID; reserveInfo.ServiceID = ch.SID; reserveInfo.EventID = 0xFFFF; reserveInfo.StartTime = new DateTime(datePicker_start.SelectedDate.Value.Year, datePicker_start.SelectedDate.Value.Month, datePicker_start.SelectedDate.Value.Day, comboBox_sh.SelectedIndex, comboBox_sm.SelectedIndex, comboBox_ss.SelectedIndex, 0, DateTimeKind.Utc ); DateTime endTime = new DateTime(datePicker_end.SelectedDate.Value.Year, datePicker_end.SelectedDate.Value.Month, datePicker_end.SelectedDate.Value.Day, comboBox_eh.SelectedIndex, comboBox_em.SelectedIndex, comboBox_es.SelectedIndex, 0, DateTimeKind.Utc ); if (reserveInfo.StartTime > endTime) { MessageBox.Show("終了日時が開始日時より前です"); return; } TimeSpan duration = endTime - reserveInfo.StartTime; reserveInfo.DurationSecond = (uint)duration.TotalSeconds; reserveInfo.RecSetting = recSettingView.GetRecSetting(); reserveInfo.RecSetting.TuijyuuFlag = 0; reserveInfo.RecSetting.PittariFlag = 0; } else { reserveInfo.RecSetting = recSettingView.GetRecSetting(); } List <ReserveData> list = new List <ReserveData>(); list.Add(reserveInfo); if (manualAddMode == false) { ErrCode err = CommonManager.CreateSrvCtrl().SendChgReserve(list); if (err != ErrCode.CMD_SUCCESS) { MessageBox.Show(CommonManager.GetErrCodeText(err) ?? "予約変更でエラーが発生しました。"); } } else { reserveInfo.StartTimeEpg = reserveInfo.StartTime; ErrCode err = CommonManager.CreateSrvCtrl().SendAddReserve(list); if (err != ErrCode.CMD_SUCCESS) { MessageBox.Show(CommonManager.GetErrCodeText(err) ?? "予約追加でエラーが発生しました。"); } } if (this.Visibility == System.Windows.Visibility.Visible) { DialogResult = true; } }
//コンテキストメニューの定義 private void SetDefCtxmData() { //各画面のコンテキストメニュー。空にならないようとりあえず全部作っておく。 DefCtxmData = new Dictionary <CtxmCode, CtxmData>(); foreach (CtxmCode code in Enum.GetValues(typeof(CtxmCode))) { DefCtxmData.Add(code, new CtxmData(code)); } //サブメニューなど設定のあるものは、情報固定のためいったん定義する。 var cm_Separator = new CtxmItemData(EpgCmdsEx.SeparatorString, EpgCmdsEx.Separator); //予約追加サブメニュー 実行時、セパレータ以降にプリセットを展開する。 var cm_AddMenu = new CtxmItemData("予約追加(仮)", EpgCmdsEx.AddMenu); cm_AddMenu.Items.Add(new CtxmItemData("ダイアログ表示(_X)...", EpgCmds.ShowDialog, 1)); cm_AddMenu.Items.Add(new CtxmItemData(cm_Separator)); cm_AddMenu.Items.Add(new CtxmItemData("デフォルト", EpgCmds.AddOnPreset, 0));//仮 //予約変更サブメニューの各サブメニュー ////自動登録の有効/無効 var cm_ChgKeyEnabledMenu = new CtxmItemData("自動登録有効(仮)", EpgCmdsEx.ChgKeyEnabledMenu); cm_ChgKeyEnabledMenu.Items.Add(new CtxmItemData(CommonManager.ConvertIsEnableText(true) + "(_0)", EpgCmds.ChgKeyEnabled, 0)); cm_ChgKeyEnabledMenu.Items.Add(new CtxmItemData(CommonManager.ConvertIsEnableText(false) + "(_1)", EpgCmds.ChgKeyEnabled, 1)); ////プリセット変更 実行時、サブメニューにプリセットを展開する。 var cm_ChgOnPresetMenu = new CtxmItemData("プリセットへ変更(仮)", EpgCmdsEx.ChgOnPresetMenu); cm_ChgOnPresetMenu.Items.Add(new CtxmItemData("デフォルト(_0)", EpgCmds.ChgOnPreset, 0));//仮 ////予約モード変更 var cm_ChgResModeMenu = new CtxmItemData("予約モード変更(仮)", EpgCmdsEx.ChgResModeMenu); cm_ChgResModeMenu.Items.Add(new CtxmItemData("EPG予約(_E)", EpgCmds.ChgResMode, 0)); cm_ChgResModeMenu.Items.Add(new CtxmItemData("プログラム予約(_P)", EpgCmds.ChgResMode, 1)); cm_ChgResModeMenu.Items.Add(new CtxmItemData(cm_Separator)); ////録画有効 var cm_ChgRecEnableMenu = new CtxmItemData("録画有効(仮)", EpgCmdsEx.ChgRecEnableMenu); cm_ChgRecEnableMenu.Items.Add(new CtxmItemData(CommonManager.ConvertIsEnableText(true) + "(_0)", EpgCmds.ChgRecEnabled, 0)); cm_ChgRecEnableMenu.Items.Add(new CtxmItemData(CommonManager.ConvertIsEnableText(false) + "(_1)", EpgCmds.ChgRecEnabled, 1)); ////録画モード var cm_ChgRecmodeMenu = new CtxmItemData("録画モード(仮)", EpgCmdsEx.ChgRecmodeMenu); for (int i = 0; i <= 4; i++) { cm_ChgRecmodeMenu.Items.Add(new CtxmItemData(string.Format("{0}(_{1})" , CommonManager.ConvertRecModeText(i), i), EpgCmds.ChgRecmode, i)); } ////優先度 var cm_ChgPriorityMenu = new CtxmItemData("優先度(仮)", EpgCmdsEx.ChgPriorityMenu); for (int i = 1; i <= 5; i++) { cm_ChgPriorityMenu.Items.Add(new CtxmItemData( CommonManager.ConvertPriorityText(i).Insert(1, string.Format("(_{0})", i)), EpgCmds.ChgPriority, i)); } ////イベントリレー変更 var cm_ChgRelayMenu = new CtxmItemData("イベントリレー追従(仮)", EpgCmdsEx.ChgRelayMenu); for (int i = 0; i <= 1; i++) { cm_ChgRelayMenu.Items.Add(new CtxmItemData(string.Format("{0}(_{1})" , CommonManager.ConvertYesNoText(i), i), EpgCmds.ChgRelay, i)); } ////ぴったり変更 var cm_ChgPittariMenu = new CtxmItemData("ぴったり録画(仮)", EpgCmdsEx.ChgPittariMenu); for (int i = 0; i <= 1; i++) { cm_ChgPittariMenu.Items.Add(new CtxmItemData(string.Format("{0}(_{1})" , CommonManager.ConvertYesNoText(i), i), EpgCmds.ChgPittari, i)); } ////チューナー変更、実行時、セパレータ以降に一覧を展開する。 var cm_ChgTunerMenu = new CtxmItemData("チューナー(仮)", EpgCmdsEx.ChgTunerMenu); cm_ChgTunerMenu.Items.Add(new CtxmItemData("自動(_0)", EpgCmds.ChgTuner, 0)); cm_ChgTunerMenu.Items.Add(new CtxmItemData(cm_Separator)); ////開始マージン var cm_ChgMarginStartMenu = new CtxmItemData("開始マージン(仮)", EpgCmdsEx.ChgMarginStartMenu); cm_ChgMarginStartMenu.Items.Add(new CtxmItemData("デフォルトに変更(_I)", EpgCmds.ChgMarginStart, 0)); cm_ChgMarginStartMenu.Items.Add(new CtxmItemData("指定値へ変更(_S)...", EpgCmds.ChgMarginValue, 1)); cm_ChgMarginStartMenu.Items.Add(new CtxmItemData(cm_Separator)); int idx = 0; var vals = new int[] { 1, 5, 30, 60 }; foreach (int val in vals.Concat(vals.Select(val => - val))) { cm_ChgMarginStartMenu.Items.Add(new CtxmItemData(string.Format( "{0:増やす;減らす}(_{1}) : {0:+0;-0} 秒", val, idx++), EpgCmds.ChgMarginStart, val)); } cm_ChgMarginStartMenu.Items.Insert(cm_ChgMarginStartMenu.Items.Count - vals.Length, new CtxmItemData(cm_Separator)); ////終了マージン、複製してコマンドだけ差し替える。 var cm_ChgMarginEndMenu = new CtxmItemData("終了マージン(仮)", cm_ChgMarginStartMenu); cm_ChgMarginEndMenu.Command = EpgCmdsEx.ChgMarginEndMenu; cm_ChgMarginEndMenu.Items = cm_ChgMarginStartMenu.Items.DeepClone(); cm_ChgMarginEndMenu.Items.ForEach(menu => { if (menu.Command == EpgCmds.ChgMarginStart) { menu.Command = EpgCmds.ChgMarginEnd; } }); cm_ChgMarginEndMenu.Items.ForEach(menu => { if (menu.Command == EpgCmds.ChgMarginValue) { menu.ID = 2; } }); ////録画後動作 var cm_ChgRecEndMenu = new CtxmItemData("録画後動作(仮)", EpgCmdsEx.ChgRecEndMenu); cm_ChgRecEndMenu.Items.Add(new CtxmItemData("デフォルトに変更(_I)", EpgCmds.ChgRecEndMode, -1)); cm_ChgRecEndMenu.Items.Add(new CtxmItemData(cm_Separator)); for (int i = 0; i <= 3; i++) { cm_ChgRecEndMenu.Items.Add(new CtxmItemData(string.Format("{0}(_{1})" , CommonManager.ConvertRecEndModeText(i), i), EpgCmds.ChgRecEndMode, i)); } cm_ChgRecEndMenu.Items.Add(new CtxmItemData(cm_Separator)); for (int i = 0; i <= 1; i++) { cm_ChgRecEndMenu.Items.Add(new CtxmItemData(string.Format("復帰後再起動{0}(_{1})" , CommonManager.ConvertYesNoText(i), i + 4), EpgCmds.ChgRecEndReboot, i)); } //予約変更サブメニュー登録 var cm_ChangeMenu = new CtxmItemData("変更(仮)", EpgCmdsEx.ChgMenu); cm_ChangeMenu.Items.Add(new CtxmItemData("ダイアログ表示...", EpgCmds.ShowDialog)); cm_ChangeMenu.Items.Add(new CtxmItemData(cm_Separator)); cm_ChangeMenu.Items.Add(new CtxmItemData("自動登録有効", cm_ChgKeyEnabledMenu)); cm_ChangeMenu.Items.Add(new CtxmItemData("プリセットへ変更", cm_ChgOnPresetMenu)); cm_ChangeMenu.Items.Add(new CtxmItemData("予約モード変更", cm_ChgResModeMenu)); cm_ChangeMenu.Items.Add(new CtxmItemData("まとめて録画設定を変更...", EpgCmds.ChgBulkRecSet)); cm_ChangeMenu.Items.Add(new CtxmItemData("まとめてジャンル絞り込みを変更...", EpgCmds.ChgGenre)); cm_ChangeMenu.Items.Add(new CtxmItemData(cm_Separator)); cm_ChangeMenu.Items.Add(new CtxmItemData("録画有効", cm_ChgRecEnableMenu)); cm_ChangeMenu.Items.Add(new CtxmItemData("録画モード", cm_ChgRecmodeMenu)); cm_ChangeMenu.Items.Add(new CtxmItemData("優先度", cm_ChgPriorityMenu)); cm_ChangeMenu.Items.Add(new CtxmItemData("イベントリレー追従", cm_ChgRelayMenu)); cm_ChangeMenu.Items.Add(new CtxmItemData("ぴったり(?)録画", cm_ChgPittariMenu)); cm_ChangeMenu.Items.Add(new CtxmItemData("チューナー", cm_ChgTunerMenu)); cm_ChangeMenu.Items.Add(new CtxmItemData("開始マージン", cm_ChgMarginStartMenu)); cm_ChangeMenu.Items.Add(new CtxmItemData("終了マージン", cm_ChgMarginEndMenu)); cm_ChangeMenu.Items.Add(new CtxmItemData("録画後動作", cm_ChgRecEndMenu)); CtxmData ctmd = DefCtxmData[CtxmCode.EditChgMenu]; ctmd.Items = cm_ChangeMenu.Items; //アイテムの復元サブメニュー var cm_RestoreMenu = new CtxmItemData("アイテムの復元(仮)", EpgCmdsEx.RestoreMenu); cm_RestoreMenu.Items.Add(new CtxmItemData("履歴をクリア(_R)", EpgCmds.RestoreClear)); //フォルダを開くサブメニュー登録 var cm_OpenFolderMenu = new CtxmItemData("録画フォルダを開く(仮)", EpgCmdsEx.OpenFolderMenu); cm_OpenFolderMenu.Items.Add(new CtxmItemData("録画フォルダを開く(仮)", EpgCmds.OpenFolder)); //ビューモードサブメニュー var cm_ViewMenu = new CtxmItemData("表示モード(仮)", EpgCmdsEx.ViewMenu); for (int i = 0; i <= 2; i++) { cm_ViewMenu.Items.Add(new CtxmItemData(CommonManager.ConvertViewModeText(i) + string.Format("(_{0})", i + 1), EpgCmds.ViewChgMode, i)); } cm_ViewMenu.Items.Add(new CtxmItemData(cm_Separator)); cm_ViewMenu.Items.Add(new CtxmItemData("表示設定(_S)...", EpgCmds.ViewChgSet)); cm_ViewMenu.Items.Add(new CtxmItemData("一時的な変更をクリア(_R)", EpgCmds.ViewChgReSet)); //共通メニューの追加用リスト var AddAppendTagMenus = new List <CtxmItemData>(); AddAppendTagMenus.Add(new CtxmItemData("録画タグで予約情報検索", EpgCmds.InfoSearchRecTag)); AddAppendTagMenus.Add(new CtxmItemData("録画タグをネットで検索", EpgCmds.SearchRecTag)); AddAppendTagMenus.Add(new CtxmItemData("録画タグをコピー", EpgCmds.CopyRecTag)); AddAppendTagMenus.Add(new CtxmItemData("録画タグに貼り付け", EpgCmds.SetRecTag)); var AddAppendMenus = new List <CtxmItemData>(); AddAppendMenus.Add(new CtxmItemData(cm_Separator)); AddAppendMenus.Add(new CtxmItemData("番組名をコピー", EpgCmds.CopyTitle)); AddAppendMenus.Add(new CtxmItemData("番組情報をコピー", EpgCmds.CopyContent)); AddAppendMenus.Add(new CtxmItemData("番組名で予約情報検索", EpgCmds.InfoSearchTitle)); AddAppendMenus.Add(new CtxmItemData("番組名をネットで検索", EpgCmds.SearchTitle)); var AddMenuSetting = new List <CtxmItemData>(); AddMenuSetting.Add(new CtxmItemData(cm_Separator)); AddMenuSetting.Add(new CtxmItemData("右クリックメニューの設定...", EpgCmds.MenuSetting)); //メニューアイテム:予約一覧 ctmd = DefCtxmData[CtxmCode.ReserveView]; ctmd.Items.Add(new CtxmItemData("予約←→無効", EpgCmds.ChgOnOff)); ctmd.Items.Add(new CtxmItemData("変更(_C)", cm_ChangeMenu)); ctmd.Items.Add(new CtxmItemData("コピーを追加", EpgCmds.CopyItem)); ctmd.Items.Add(new CtxmItemData("削除", EpgCmds.Delete)); ctmd.Items.Add(new CtxmItemData("アイテムの復元", cm_RestoreMenu)); ctmd.Items.Add(new CtxmItemData("新規プログラム予約...", EpgCmds.ShowAddDialog)); ctmd.Items.Add(new CtxmItemData("チューナー画面へジャンプ", EpgCmds.JumpTuner)); ctmd.Items.Add(new CtxmItemData("番組表へジャンプ", EpgCmds.JumpTable)); ctmd.Items.Add(new CtxmItemData("自動予約登録変更", EpgCmdsEx.ShowAutoAddDialogMenu)); ctmd.Items.Add(new CtxmItemData("番組名でキーワード予約作成...", EpgCmds.ToAutoadd)); ctmd.Items.Add(new CtxmItemData("追っかけ再生", EpgCmds.Play)); ctmd.Items.Add(new CtxmItemData("録画フォルダを開く", cm_OpenFolderMenu)); ctmd.Items.AddRange(AddAppendMenus.DeepClone()); ctmd.Items.AddRange(AddAppendTagMenus.DeepClone()); ctmd.Items.AddRange(AddMenuSetting.DeepClone()); //メニューアイテム:使用予定チューナー ctmd = DefCtxmData[CtxmCode.TunerReserveView]; ctmd.Items.Add(new CtxmItemData("予約←→無効", EpgCmds.ChgOnOff)); ctmd.Items.Add(new CtxmItemData("変更(_C)", cm_ChangeMenu)); ctmd.Items.Add(new CtxmItemData("コピーを追加", EpgCmds.CopyItem)); ctmd.Items.Add(new CtxmItemData("削除", EpgCmds.Delete)); ctmd.Items.Add(new CtxmItemData("アイテムの復元", cm_RestoreMenu)); ctmd.Items.Add(new CtxmItemData("新規プログラム予約...", EpgCmds.ShowAddDialog)); ctmd.Items.Add(new CtxmItemData("予約一覧へジャンプ", EpgCmds.JumpReserve)); ctmd.Items.Add(new CtxmItemData("番組表へジャンプ", EpgCmds.JumpTable)); ctmd.Items.Add(new CtxmItemData("自動予約登録変更", EpgCmdsEx.ShowAutoAddDialogMenu)); ctmd.Items.Add(new CtxmItemData("番組名でキーワード予約作成...", EpgCmds.ToAutoadd)); ctmd.Items.Add(new CtxmItemData("追っかけ再生", EpgCmds.Play)); ctmd.Items.Add(new CtxmItemData("録画フォルダを開く", cm_OpenFolderMenu)); ctmd.Items.AddRange(AddAppendMenus.DeepClone()); ctmd.Items.AddRange(AddAppendTagMenus.DeepClone()); ctmd.Items.AddRange(AddMenuSetting.DeepClone()); //メニューアイテム:録画済み一覧 ctmd = DefCtxmData[CtxmCode.RecInfoView]; ctmd.Items.Add(new CtxmItemData("録画情報...", EpgCmds.ShowDialog)); ctmd.Items.Add(new CtxmItemData("削除", EpgCmds.Delete)); ctmd.Items.Add(new CtxmItemData("プロテクト←→解除", EpgCmds.ProtectChange)); ctmd.Items.Add(new CtxmItemData("番組表へジャンプ", EpgCmds.JumpTable)); ctmd.Items.Add(new CtxmItemData("自動予約登録変更", EpgCmdsEx.ShowAutoAddDialogMenu)); ctmd.Items.Add(new CtxmItemData("番組名でキーワード予約作成...", EpgCmds.ToAutoadd)); ctmd.Items.Add(new CtxmItemData("再生", EpgCmds.Play)); ctmd.Items.Add(new CtxmItemData("録画フォルダを開く", EpgCmds.OpenFolder));//他の画面と違う ctmd.Items.AddRange(AddAppendMenus.DeepClone()); ctmd.Items.AddRange(AddMenuSetting.DeepClone()); //メニューアイテム:キーワード自動予約登録 ctmd = DefCtxmData[CtxmCode.EpgAutoAddView]; ctmd.Items.Add(new CtxmItemData("予約一覧(_L)", EpgCmdsEx.ShowReserveDialogMenu)); ctmd.Items.Add(new CtxmItemData("変更(_C)", cm_ChangeMenu)); ctmd.Items.Add(new CtxmItemData("コピーを追加", EpgCmds.CopyItem)); ctmd.Items.Add(new CtxmItemData("削除", EpgCmds.Delete)); ctmd.Items.Add(new CtxmItemData("予約ごと削除", EpgCmds.Delete2)); ctmd.Items.Add(new CtxmItemData("予約を自動登録に合わせる", EpgCmds.AdjustReserve)); ctmd.Items.Add(new CtxmItemData("アイテムの復元", cm_RestoreMenu)); ctmd.Items.Add(new CtxmItemData("次の予約(予約一覧)へジャンプ", EpgCmds.JumpReserve)); ctmd.Items.Add(new CtxmItemData("次の予約(チューナー画面)へジャンプ", EpgCmds.JumpTuner)); ctmd.Items.Add(new CtxmItemData("次の予約(番組表)へジャンプ", EpgCmds.JumpTable)); ctmd.Items.Add(new CtxmItemData("新規自動予約登録...", EpgCmds.ShowAddDialog)); ctmd.Items.Add(new CtxmItemData("録画フォルダを開く", cm_OpenFolderMenu)); ctmd.Items.Add(new CtxmItemData(cm_Separator)); ctmd.Items.Add(new CtxmItemData("Andキーワードをコピー", EpgCmds.CopyTitle)); ctmd.Items.Add(new CtxmItemData("Andキーワードで予約情報検索", EpgCmds.InfoSearchTitle)); ctmd.Items.Add(new CtxmItemData("Andキーワードをネットで検索", EpgCmds.SearchTitle)); ctmd.Items.Add(new CtxmItemData("Notキーワードをコピー", EpgCmds.CopyNotKey)); ctmd.Items.Add(new CtxmItemData("Notキーワードに貼り付け", EpgCmds.SetNotKey)); ctmd.Items.AddRange(AddAppendTagMenus.DeepClone()); ctmd.Items.AddRange(AddMenuSetting.DeepClone()); //メニューアイテム:プログラム自動予約登録 ctmd = DefCtxmData[CtxmCode.ManualAutoAddView]; ctmd.Items.Add(new CtxmItemData("予約一覧(_L)", EpgCmdsEx.ShowReserveDialogMenu)); ctmd.Items.Add(new CtxmItemData("変更(_C)", cm_ChangeMenu)); ctmd.Items.Add(new CtxmItemData("コピーを追加", EpgCmds.CopyItem)); ctmd.Items.Add(new CtxmItemData("削除", EpgCmds.Delete)); ctmd.Items.Add(new CtxmItemData("予約ごと削除", EpgCmds.Delete2)); ctmd.Items.Add(new CtxmItemData("予約を自動登録に合わせる", EpgCmds.AdjustReserve)); ctmd.Items.Add(new CtxmItemData("アイテムの復元", cm_RestoreMenu)); ctmd.Items.Add(new CtxmItemData("次の予約(予約一覧)へジャンプ", EpgCmds.JumpReserve)); ctmd.Items.Add(new CtxmItemData("次の予約(チューナー画面)へジャンプ", EpgCmds.JumpTuner)); ctmd.Items.Add(new CtxmItemData("次の予約(番組表)へジャンプ", EpgCmds.JumpTable)); ctmd.Items.Add(new CtxmItemData("番組名でキーワード予約作成...", EpgCmds.ToAutoadd)); ctmd.Items.Add(new CtxmItemData("新規自動予約登録...", EpgCmds.ShowAddDialog)); ctmd.Items.Add(new CtxmItemData("録画フォルダを開く", cm_OpenFolderMenu)); ctmd.Items.Add(new CtxmItemData(cm_Separator)); ctmd.Items.Add(new CtxmItemData("番組名をコピー", EpgCmds.CopyTitle)); ctmd.Items.Add(new CtxmItemData("番組名で予約情報検索", EpgCmds.InfoSearchTitle)); ctmd.Items.Add(new CtxmItemData("番組名をネットで検索", EpgCmds.SearchTitle)); ctmd.Items.AddRange(AddAppendTagMenus.DeepClone()); ctmd.Items.AddRange(AddMenuSetting.DeepClone()); //メニューアイテム:番組表 ctmd = DefCtxmData[CtxmCode.EpgView]; ctmd.Items.Add(new CtxmItemData("簡易予約/予約←→無効", EpgCmds.ChgOnOff)); ctmd.Items.Add(new CtxmItemData("予約追加(_A)", cm_AddMenu)); ctmd.Items.Add(new CtxmItemData("変更(_C)", cm_ChangeMenu)); ctmd.Items.Add(new CtxmItemData("コピーを追加", EpgCmds.CopyItem)); ctmd.Items.Add(new CtxmItemData("削除", EpgCmds.Delete)); ctmd.Items.Add(new CtxmItemData("アイテムの復元", cm_RestoreMenu)); ctmd.Items.Add(new CtxmItemData("予約一覧へジャンプ", EpgCmds.JumpReserve)); ctmd.Items.Add(new CtxmItemData("録画済み一覧へジャンプ", EpgCmds.JumpRecInfo)); ctmd.Items.Add(new CtxmItemData("チューナー画面へジャンプ", EpgCmds.JumpTuner)); ctmd.Items.Add(new CtxmItemData("番組表(標準モード)へジャンプ", EpgCmds.JumpTable)); ctmd.Items.Add(new CtxmItemData("自動予約登録変更", EpgCmdsEx.ShowAutoAddDialogMenu)); ctmd.Items.Add(new CtxmItemData("番組名でキーワード予約作成...", EpgCmds.ToAutoadd)); ctmd.Items.Add(new CtxmItemData("追っかけ再生", EpgCmds.Play, 0)); ctmd.Items.Add(new CtxmItemData("録画済み再生", EpgCmds.Play, 1)); ctmd.Items.Add(new CtxmItemData("録画フォルダを開く", cm_OpenFolderMenu)); ctmd.Items.AddRange(AddAppendMenus.DeepClone()); ctmd.Items.AddRange(AddAppendTagMenus.DeepClone()); ctmd.Items.Add(new CtxmItemData(cm_Separator)); ctmd.Items.Add(new CtxmItemData("表示モード(_V)", cm_ViewMenu)); ctmd.Items.AddRange(AddMenuSetting.DeepClone()); //メニューアイテム:検索ダイアログ、キーワード予約ダイアログ ctmd = DefCtxmData[CtxmCode.SearchWindow]; ctmd.Items.Add(new CtxmItemData("簡易予約/予約←→無効", EpgCmds.ChgOnOff)); ctmd.Items.Add(new CtxmItemData("予約追加(_A)", cm_AddMenu)); ctmd.Items.Add(new CtxmItemData("変更(_C)", cm_ChangeMenu)); ctmd.Items.Add(new CtxmItemData("コピーを追加", EpgCmds.CopyItem)); ctmd.Items.Add(new CtxmItemData("削除", EpgCmds.Delete)); ctmd.Items.Add(new CtxmItemData("アイテムの復元", cm_RestoreMenu)); ctmd.Items.Add(new CtxmItemData("予約一覧へジャンプ", EpgCmds.JumpReserve)); ctmd.Items.Add(new CtxmItemData("録画済み一覧へジャンプ", EpgCmds.JumpRecInfo)); ctmd.Items.Add(new CtxmItemData("チューナー画面へジャンプ", EpgCmds.JumpTuner)); ctmd.Items.Add(new CtxmItemData("番組表へジャンプ", EpgCmds.JumpTable)); ctmd.Items.Add(new CtxmItemData("自動予約登録変更", EpgCmdsEx.ShowAutoAddDialogMenu)); ctmd.Items.Add(new CtxmItemData("番組名で再検索", EpgCmds.ReSearch)); ctmd.Items.Add(new CtxmItemData("番組名で再検索(別ウィンドウ)", EpgCmds.ReSearch2)); ctmd.Items.Add(new CtxmItemData("追っかけ再生", EpgCmds.Play, 0)); ctmd.Items.Add(new CtxmItemData("録画済み再生", EpgCmds.Play, 1)); ctmd.Items.Add(new CtxmItemData("録画フォルダを開く", cm_OpenFolderMenu)); ctmd.Items.AddRange(AddAppendMenus.DeepClone()); ctmd.Items.AddRange(AddAppendTagMenus.DeepClone()); ctmd.Items.AddRange(AddMenuSetting.DeepClone()); //メニューアイテム:予約情報検索(デフォルト・複数選択) ctmd = DefCtxmData[CtxmCode.InfoSearchWindow]; ctmd.Items.Add(new CtxmItemData("一覧へジャンプ", EpgCmds.JumpListView)); ctmd.Items.Add(new CtxmItemData("番組名/ANDキーワードで再検索", EpgCmds.ReSearch)); ctmd.Items.Add(new CtxmItemData("番組名/ANDキーワードで再検索(別ウィンドウ)", EpgCmds.ReSearch2)); ctmd.Items.Add(new CtxmItemData(cm_Separator)); ctmd.Items.Add(new CtxmItemData("ダイアログ表示...", EpgCmds.ShowDialog)); ctmd.Items.Add(new CtxmItemData("有効・無効/プロテクト切替え", EpgCmds.ChgOnOff)); ctmd.Items.Add(new CtxmItemData("削除", EpgCmds.Delete)); ctmd.Items.Add(new CtxmItemData("アイテムの復元", cm_RestoreMenu)); ctmd.Items.Add(new CtxmItemData(cm_Separator)); ctmd.Items.Add(new CtxmItemData("番組名/ANDキーワードをコピー", EpgCmds.CopyTitle)); ctmd.Items.Add(new CtxmItemData("番組名/ANDキーワードをネットで検索", EpgCmds.SearchTitle)); ctmd.Items.AddRange(AddAppendTagMenus.DeepClone()); ctmd.Items.AddRange(AddMenuSetting.DeepClone()); //メニューアイテム:予約情報検索(個別選択の追加メニュー) AddInfoSearchMenu = new CtxmData(CtxmCode.InfoSearchWindow); AddInfoSearchMenu.Items.AddRange(ctmd.Items.Take(3)); }
private void SearchPg() { try { ICollectionView dataView = CollectionViewSource.GetDefaultView(listView_result.DataContext); if (dataView != null) { dataView.SortDescriptions.Clear(); dataView.Refresh(); } listView_result.DataContext = null; resultList.Clear(); EpgSearchKeyInfo key = new EpgSearchKeyInfo(); searchKeyView.GetSearchKey(ref key); List <EpgSearchKeyInfo> keyList = new List <EpgSearchKeyInfo>(); keyList.Add(key); List <EpgEventInfo> list = new List <EpgEventInfo>(); cmd.SendSearchPg(keyList, ref list); foreach (EpgEventInfo info in list) { SearchItem item = new SearchItem(); item.EventInfo = info; if (item.EventInfo.start_time.AddSeconds(item.EventInfo.durationSec) > DateTime.Now) { foreach (ReserveData info2 in CommonManager.Instance.DB.ReserveList.Values) { if (info.original_network_id == info2.OriginalNetworkID && info.transport_stream_id == info2.TransportStreamID && info.service_id == info2.ServiceID && info.event_id == info2.EventID) { item.ReserveInfo = info2; break; } } UInt64 serviceKey = CommonManager.Create64Key(info.original_network_id, info.transport_stream_id, info.service_id); if (ChSet5.Instance.ChList.ContainsKey(serviceKey) == true) { item.ServiceName = ChSet5.Instance.ChList[serviceKey].ServiceName; } if (Settings.Instance.FixSearchResult) { item.EventInfo.ShortInfo.text_char = "省略"; } resultList.Add(item); } } listView_result.DataContext = resultList; //if (_lastHeaderClicked != null) { // Sort(_lastHeaderClicked, _lastDirection); //} else { // string header = ((Binding)gridView_result.Columns[1].DisplayMemberBinding).Path.Path; // Sort(header, _lastDirection); // _lastHeaderClicked = header; //} if (this.gridViewSorter.isExistSortParams) { this.gridViewSorter.SortByMultiHeader(this.resultList); } else { this.gridViewSorter.resetSortParams(); this.gridViewSorter.SortByMultiHeader( this.resultList, gridView_result.Columns[1].Header as GridViewColumnHeader); } searchKeyView.SaveSearchLog(); } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }
public virtual UInt64 CurrentPgUID() { return(CommonManager.CurrentPgUID(Create64PgKey(), PgStartTime)); }
public static RoutedEventHandler OpenFileNameDialog(TextBox box, bool isNameOnly, string Title = "", string DefaultExt = "", bool checkNWPath = false, string defaultPath = "") { return((sender, e) => CommonManager.GetFileNameByDialog(box, isNameOnly, Title, DefaultExt, checkNWPath, defaultPath)); }
public bool SetLiveCh(UInt16 ONID, UInt16 TSID, UInt16 SID) { try { if (Settings.Instance.TvTestExe.Length == 0) { MessageBox.Show("TVTest.exeのパスが設定されていません"); return(false); } // TVTestのパスが録画用アプリと一致する場合はViewアプリとして扱う bool isView = CommonManager.Instance.NWMode == false && Settings.Instance.NwTvMode == false && string.Compare(IniFileHandler.GetPrivateProfileString("SET", "RecExePath", "", SettingPath.CommonIniPath), Settings.Instance.TvTestExe, true) == 0; OpenTVTest(Settings.Instance.TvTestOpenWait, isView ? "View" : "TvTest"); var cmdTvTest = new CtrlCmdUtil(); cmdTvTest.SetPipeSetting("Global\\" + processType + "_Ctrl_BonConnect_" + process.Id, processType + "_Ctrl_BonPipe_" + process.Id); cmdTvTest.SetConnectTimeOut(1000); if (Settings.Instance.NwTvMode == true) { SetChInfo chInfo = new SetChInfo(); chInfo.useSID = 1; chInfo.useBonCh = 0; chInfo.ONID = ONID; chInfo.TSID = TSID; chInfo.SID = SID; UInt32 nwMode = 0; String nwBonDriver = "BonDriver_UDP.dll"; if (Settings.Instance.NwTvModeUDP == true) { nwMode += 1; } if (Settings.Instance.NwTvModeTCP == true) { nwMode += 2; nwBonDriver = "BonDriver_TCP.dll"; } if (CommonManager.CreateSrvCtrl().SendNwTVMode(nwMode) == ErrCode.CMD_SUCCESS) { if (CommonManager.CreateSrvCtrl().SendNwTVSetCh(chInfo) == ErrCode.CMD_SUCCESS) { String val = ""; for (int i = 0; i < 10; i++) { if (cmdTvTest.SendViewGetBonDrivere(ref val) != ErrCode.CMD_SUCCESS) { System.Threading.Thread.Sleep(1000); continue; } if (String.Compare(val, nwBonDriver, true) != 0) { cmdTvTest.SendViewSetBonDrivere(nwBonDriver); } break; } } } } else { UInt64 key = CommonManager.Create64Key(ONID, TSID, SID); TvTestChChgInfo chInfo = new TvTestChChgInfo(); ErrCode err = CommonManager.CreateSrvCtrl().SendGetChgChTVTest(key, ref chInfo); if (err == ErrCode.CMD_SUCCESS) { String val = ""; for (int i = 0; i < 10; i++) { if (cmdTvTest.SendViewGetBonDrivere(ref val) != ErrCode.CMD_SUCCESS) { System.Threading.Thread.Sleep(1000); continue; } // 識別用IDが設定されたViewアプリは弄らない if (processType == "View") { int id = -1; if (cmdTvTest.SendViewGetID(ref id) != ErrCode.CMD_SUCCESS || id >= 0) { break; } } if (String.Compare(val, chInfo.bonDriver, true) != 0) { if (cmdTvTest.SendViewSetBonDrivere(chInfo.bonDriver) == ErrCode.CMD_SUCCESS) { System.Threading.Thread.Sleep(Settings.Instance.TvTestChgBonWait); cmdTvTest.SendViewSetCh(chInfo.chInfo); } } else { cmdTvTest.SendViewSetCh(chInfo.chInfo); } break; } } else { MessageBox.Show(CommonManager.GetErrCodeText(err) ?? "指定サービスを受信できるBonDriverが設定されていません。"); return(false); } } WakeupWindow(process.MainWindowHandle); } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } return(true); }
public EpgEventInfo GetReserveEventList(ReserveData master, bool isSrv = true) { if (master == null || master.ReserveID == 0) { return(null); } if (reserveEventList == null) { if (IsEpgLoaded || Settings.Instance.NoReserveEventList == true) { reserveEventList = ReserveList.Values.ToDictionary(rs => rs.ReserveID, rs => rs.IsEpgReserve ? MenuUtil.GetPgInfoUid(rs.CurrentPgUID()) : MenuUtil.GetPgInfoLikeThat(rs)); } else { reserveEventList = new Dictionary <uint, EpgEventInfo>(); reserveEventListCache = reserveEventListCache ?? new Dictionary <ulong, EpgEventInfo>(); //要求はしないが、有効なデータが既に存在していればキーワード予約の追加データを参照する。 bool useAppend = epgAutoAddAppendList != null && updateEpgAutoAddAppend == false && updateEpgAutoAddAppendReserveInfo == false; //プログラム予約はここで探しても精度低いので諦める var trgList = new List <ReserveData>(); foreach (ReserveData data in ReserveList.Values.Where(r => r.IsEpgReserve)) { EpgEventInfo info = null; ulong key = data.Create64PgKey(); if (useAppend == true) { List <EpgAutoAddData> epgAutoList = data.GetEpgAutoAddList(); if (epgAutoList.Count != 0) { SearchItem item = epgAutoList[0].GetSearchList() .Find(sI => sI.IsReserved == true && sI.ReserveInfo.ReserveID == data.ReserveID); if (item != null) { info = item.EventInfo; reserveEventListCache[key] = info; } } } if (info != null || reserveEventListCache.TryGetValue(key, out info)) { reserveEventList[data.ReserveID] = info; } else { trgList.Add(data); } } if (isSrv == true && trgList.Any()) { var pgIDset = trgList.ToLookup(data => data.Create64PgKey(), data => data.ReserveID); var keys = pgIDset.Select(lu => lu.Key).ToList(); var list = new List <EpgEventInfo>(); try { CommonManager.CreateSrvCtrl().SendGetPgInfoList(keys, ref list); } catch { } foreach (EpgEventInfo info in list) { ulong key = info.Create64PgKey(); if (pgIDset.Contains(key) == true) { foreach (uint rID in pgIDset[key]) { reserveEventList[rID] = info; } reserveEventListCache[key] = info; } } } } } EpgEventInfo retv; reserveEventList.TryGetValue(master.ReserveID, out retv); return(retv); }
/// <summary> /// 予約情報更新通知 /// </summary> public void RefreshReserve() { var programList = listView_event.ItemsSource as List <SearchItem>; if (programList != null) { List <decimal> list = CommonManager.Instance.DB.ReserveList.Values.Select(a => CommonManager.Create64PgKey( a.OriginalNetworkID, a.TransportStreamID, a.ServiceID, a.EventID) * ((decimal)uint.MaxValue + 1) + a.ReserveID).ToList(); list.Sort(); for (int i = 0; i < programList.Count; i++) { SearchItem item = programList[i]; if (item.Duplicate) { programList.RemoveAt(i--); } else if (item.Past == false) { item.ReserveInfo = null; decimal key = CommonManager.Create64PgKey(item.EventInfo.original_network_id, item.EventInfo.transport_stream_id, item.EventInfo.service_id, item.EventInfo.event_id) * ((decimal)uint.MaxValue + 1); int index = list.BinarySearch(key); index = index < 0 ? ~index : index; for (; index < list.Count && list[index] <= key + uint.MaxValue; index++) { //予約情報が見つかった if (item.ReserveInfo != null) { //さらに見つかった item = new SearchItem(item.EventInfo, false, item.Filtered, true) { ServiceName = item.ServiceName }; programList.Insert(++i, item); } item.ReserveInfo = CommonManager.Instance.DB.ReserveList[(uint)(list[index] % ((decimal)uint.MaxValue + 1))]; } } } CollectionViewSource.GetDefaultView(listView_event.ItemsSource).Refresh(); } }
private void ReloadProgramViewItem(bool enablePrev, bool enableNext) { try { if (listBox_service.ItemsSource != null) { foreach (ServiceItem info in listBox_service.ItemsSource) { lastChkSID[info.ID] = info.IsSelected; } } listBox_service.ItemsSource = null; var serviceList = new List <ServiceItem>(); //特殊なサービス指定の展開と重複除去 var viewIDList = new List <ulong>(); foreach (ulong id in setViewInfo.ViewServiceList) { IEnumerable <EpgServiceAllEventInfo> sel = id == (ulong)CustomEpgTabInfo.SpecialViewServices.ViewServiceDttv ? serviceEventList.Values.Where(info => ChSet5.IsDttv(info.serviceInfo.ONID)) : id == (ulong)CustomEpgTabInfo.SpecialViewServices.ViewServiceBS ? serviceEventList.Values.Where(info => ChSet5.IsBS(info.serviceInfo.ONID)) : id == (ulong)CustomEpgTabInfo.SpecialViewServices.ViewServiceCS ? serviceEventList.Values.Where(info => ChSet5.IsCS(info.serviceInfo.ONID)) : id == (ulong)CustomEpgTabInfo.SpecialViewServices.ViewServiceCS3 ? serviceEventList.Values.Where(info => ChSet5.IsCS3(info.serviceInfo.ONID)) : id == (ulong)CustomEpgTabInfo.SpecialViewServices.ViewServiceOther ? serviceEventList.Values.Where(info => ChSet5.IsOther(info.serviceInfo.ONID)) : null; if (sel == null) { if (viewIDList.Contains(id) == false) { viewIDList.Add(id); } continue; } foreach (EpgServiceInfo info in DBManager.SelectServiceEventList(sel).Select(allInfo => allInfo.serviceInfo)) { if (viewIDList.Contains(CommonManager.Create64Key(info.ONID, info.TSID, info.SID)) == false) { viewIDList.Add(CommonManager.Create64Key(info.ONID, info.TSID, info.SID)); } } } for (int i = 0; i < viewIDList.Count;) { //TSIDが同じでSIDが逆順のときは正順にする int skip = i + 1; while (viewIDList.Count > skip && viewIDList[skip] >> 16 == viewIDList[skip - 1] >> 16 && (viewIDList[skip] & 0xFFFF) < (viewIDList[skip - 1] & 0xFFFF)) { skip++; } for (int j = skip - 1; j >= i; j--) { ulong id = viewIDList[j]; if (serviceEventList.ContainsKey(id)) { var item = new ServiceItem(serviceEventList[id].serviceInfo); item.IsSelected = lastChkSID.ContainsKey(id) == false || lastChkSID[id]; serviceList.Add(item); } } i = skip; } listBox_service.ItemsSource = serviceList; button_prev.IsEnabled = enablePrev; button_next.IsEnabled = enableNext; UpdateEventList(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
public override UInt64 Create64PgKey() { return(CommonManager.Create64PgKey(OriginalNetworkID, TransportStreamID, ServiceID, EventID)); }
public override string ConvertInfoText(object param = null) { return(CommonManager.ConvertProgramText(this, EventInfoTextMode.All).TrimEnd('\r', '\n')); }
private void button_add_Click(object sender, RoutedEventArgs e) { if (defKey == null) { defKey = new ManualAutoAddData(); } defKey.dayOfWeekFlag = 0; if (checkBox_week0.IsChecked == true) { defKey.dayOfWeekFlag |= 0x01; } if (checkBox_week1.IsChecked == true) { defKey.dayOfWeekFlag |= 0x02; } if (checkBox_week2.IsChecked == true) { defKey.dayOfWeekFlag |= 0x04; } if (checkBox_week3.IsChecked == true) { defKey.dayOfWeekFlag |= 0x08; } if (checkBox_week4.IsChecked == true) { defKey.dayOfWeekFlag |= 0x10; } if (checkBox_week5.IsChecked == true) { defKey.dayOfWeekFlag |= 0x20; } if (checkBox_week6.IsChecked == true) { defKey.dayOfWeekFlag |= 0x40; } defKey.startTime = ((UInt32)comboBox_startHH.SelectedIndex * 60 * 60) + ((UInt32)comboBox_startMM.SelectedIndex * 60) + (UInt32)comboBox_startSS.SelectedIndex; UInt32 endTime = ((UInt32)comboBox_endHH.SelectedIndex * 60 * 60) + ((UInt32)comboBox_endMM.SelectedIndex * 60) + (UInt32)comboBox_endSS.SelectedIndex; if (endTime < defKey.startTime) { defKey.durationSecond = (24 * 60 * 60 + endTime) - defKey.startTime; } else { defKey.durationSecond = endTime - defKey.startTime; } defKey.title = textBox_title.Text; ChSet5Item chItem = comboBox_service.SelectedItem as ChSet5Item; defKey.stationName = chItem.ServiceName; defKey.originalNetworkID = chItem.ONID; defKey.transportStreamID = chItem.TSID; defKey.serviceID = chItem.SID; defKey.recSetting = recSettingView.GetRecSetting(); List <ManualAutoAddData> val = new List <ManualAutoAddData>(); val.Add(defKey); if (changeModeFlag == true) { CommonManager.CreateSrvCtrl().SendChgManualAdd(val); } else { CommonManager.CreateSrvCtrl().SendAddManualAdd(val); } DialogResult = true; }
public SearchKeyDescView() { InitializeComponent(); try { if (Settings.Instance.NoStyle == 1) { button_content_add.Style = null; button_content_del.Style = null; button_all_on.Style = null; button_video_on.Style = null; button_bs_on.Style = null; button_cs_on.Style = null; button_tere_on.Style = null; button_1seg_on.Style = null; button_other_on.Style = null; button_all_off.Style = null; button_bs_on2.Style = null; button_cs_on2.Style = null; button_tere_on2.Style = null; button_1seg_on2.Style = null; button_other_on2.Style = null; button_date_del.Style = null; button_timeAdd.Style = null; button_weekAdd.Style = null; } foreach (ChSet5Item info in ChSet5.Instance.ChList.Values) { ServiceItem item = new ServiceItem(); item.ServiceInfo = CommonManager.ConvertChSet5To(info); serviceList.Add(item); serviceDict.Add((Int64)item.ID, item); } listView_service.ItemsSource = serviceList; comboBox_content.DataContext = CommonManager.Instance.ContentKindDictionary.Values; comboBox_content.SelectedIndex = 0; comboBox_time_sw.DataContext = CommonManager.Instance.DayOfWeekDictionary.Values; comboBox_time_sw.SelectedIndex = 0; comboBox_time_sh.DataContext = CommonManager.Instance.HourDictionary.Values; comboBox_time_sh.SelectedIndex = 0; comboBox_time_sm.DataContext = CommonManager.Instance.MinDictionary.Values; comboBox_time_sm.SelectedIndex = 0; comboBox_time_ew.DataContext = CommonManager.Instance.DayOfWeekDictionary.Values; comboBox_time_ew.SelectedIndex = 6; comboBox_time_eh.DataContext = CommonManager.Instance.HourDictionary.Values; comboBox_time_eh.SelectedIndex = 23; comboBox_time_em.DataContext = CommonManager.Instance.MinDictionary.Values; comboBox_time_em.SelectedIndex = 59; comboBox_week_sh.DataContext = CommonManager.Instance.HourDictionary.Values; comboBox_week_sh.SelectedIndex = 0; comboBox_week_sm.DataContext = CommonManager.Instance.MinDictionary.Values; comboBox_week_sm.SelectedIndex = 0; comboBox_week_eh.DataContext = CommonManager.Instance.HourDictionary.Values; comboBox_week_eh.SelectedIndex = 23; comboBox_week_em.DataContext = CommonManager.Instance.MinDictionary.Values; comboBox_week_em.SelectedIndex = 59; } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }
/// <summary> /// EPGデータの更新があれば再読み込みする /// </summary> /// <returns></returns> public ErrCode ReloadEpgData() { ErrCode ret = ErrCode.CMD_SUCCESS; try { if (noAutoReloadEpg == true) { if (updateEpgData == true && oneTimeReloadEpg == true) { if (cmd == null) { ret = ErrCode.CMD_ERR; } else { serviceEventList.Clear(); serviceEventList = null; serviceEventList = new Dictionary <ulong, EpgServiceEventInfo>(); List <EpgServiceEventInfo> list = new List <EpgServiceEventInfo>(); ret = (ErrCode)cmd.SendEnumPgAll(ref list); if (ret == ErrCode.CMD_SUCCESS) { foreach (EpgServiceEventInfo info in list) { UInt64 id = CommonManager.Create64Key( info.serviceInfo.ONID, info.serviceInfo.TSID, info.serviceInfo.SID); serviceEventList.Add(id, info); } updateEpgData = false; oneTimeReloadEpg = false; } list.Clear(); list = null; } } } else { if (updateEpgData == true) { if (cmd == null) { ret = ErrCode.CMD_ERR; } else { serviceEventList.Clear(); serviceEventList = null; serviceEventList = new Dictionary <ulong, EpgServiceEventInfo>(); List <EpgServiceEventInfo> list = new List <EpgServiceEventInfo>(); ret = (ErrCode)cmd.SendEnumPgAll(ref list); if (ret == ErrCode.CMD_SUCCESS) { foreach (EpgServiceEventInfo info in list) { UInt64 id = CommonManager.Create64Key( info.serviceInfo.ONID, info.serviceInfo.TSID, info.serviceInfo.SID); serviceEventList.Add(id, info); } updateEpgData = false; } list.Clear(); list = null; } } } } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } return(ret); }
private void button_rename_Click(object sender, RoutedEventArgs e) { if (recInfo != null && recInfo.RecFilePath.Length > 0) { string destPath = null; try { // 絶対パスであること string path = textBox_recFilePath.Text; if (Path.GetFullPath(path).Equals(path, StringComparison.OrdinalIgnoreCase)) { // 拡張子は変更できない if (Path.GetExtension(path).Equals(Path.GetExtension(recInfo.RecFilePath), StringComparison.OrdinalIgnoreCase)) { // 移動先のディレクトリは存在しなければならない if (Directory.Exists(Path.GetDirectoryName(path))) { destPath = path; } } } } catch { } if (destPath == null) { MessageBox.Show("拡張子または移動先が不正です。", "", MessageBoxButton.OK, MessageBoxImage.Error); textBox_recFilePath.Text = recInfo.RecFilePath; } else { // データベースを変更 ErrCode err = ErrCode.CMD_ERR; string originalPath = recInfo.RecFilePath; recInfo.RecFilePath = destPath; try { err = CommonManager.CreateSrvCtrl().SendChgPathRecInfo(new List <RecFileInfo>() { recInfo }); StatusManager.StatusNotifySet(err == ErrCode.CMD_SUCCESS, "録画ファイル名を変更"); if (err != ErrCode.CMD_SUCCESS) { MessageBox.Show(CommonManager.GetErrCodeText(err) ?? "録画ファイル名の変更に失敗しました。", "録画ファイル名の変更", MessageBoxButton.OK, MessageBoxImage.Exclamation); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } if (err != ErrCode.CMD_SUCCESS) { textBox_recFilePath.Text = recInfo.RecFilePath = originalPath; } else { // ファイルが存在すれば移動する var errFileList = new List <string>(); try { File.Move(originalPath, destPath); } catch (FileNotFoundException) { } catch { errFileList.Add(originalPath); } try { // 拡張子が付加されたファイルも移動する foreach (string path in Directory.GetFiles(Path.GetDirectoryName(originalPath), Path.GetFileName(originalPath) + ".*")) { if (path.Length > originalPath.Length && string.Compare(path, 0, originalPath, 0, originalPath.Length, StringComparison.OrdinalIgnoreCase) == 0) { try { File.Move(path, destPath + path.Substring(originalPath.Length)); } catch { errFileList.Add(path); } } } } catch { } if (errFileList.Any()) { StatusManager.StatusNotifyAppend("リネームに失敗 < "); MessageBox.Show("録画済み一覧の情報は更新されましたが、リネームまたは移動に失敗したファイルがあります。\r\n\r\n" + string.Join("\r\n", errFileList), "録画ファイル名の変更", MessageBoxButton.OK, MessageBoxImage.Warning); } } } } button_rename.IsEnabled = false; }
private void button_add_reserve_Click(object sender, RoutedEventArgs e) { try { if (listView_result.SelectedItem != null) { List <ReserveData> list = new List <ReserveData>(); RecSettingData setInfo = recSettingView.GetRecSetting(); foreach (SearchItem item in listView_result.SelectedItems) { EpgEventInfo eventInfo = item.EventInfo; if (item.IsReserved == false && eventInfo.StartTimeFlag != 0) { ReserveData reserveInfo = new ReserveData(); if (eventInfo.ShortInfo != null) { reserveInfo.Title = eventInfo.ShortInfo.event_name; } reserveInfo.StartTime = eventInfo.start_time; reserveInfo.StartTimeEpg = eventInfo.start_time; if (eventInfo.DurationFlag == 0) { reserveInfo.DurationSecond = 10 * 60; } else { reserveInfo.DurationSecond = eventInfo.durationSec; } UInt64 key = CommonManager.Create64Key(eventInfo.original_network_id, eventInfo.transport_stream_id, eventInfo.service_id); if (ChSet5.Instance.ChList.ContainsKey(key) == true) { reserveInfo.StationName = ChSet5.Instance.ChList[key].ServiceName; } reserveInfo.OriginalNetworkID = eventInfo.original_network_id; reserveInfo.TransportStreamID = eventInfo.transport_stream_id; reserveInfo.ServiceID = eventInfo.service_id; reserveInfo.EventID = eventInfo.event_id; reserveInfo.RecSetting = setInfo; list.Add(reserveInfo); } } if (list.Count > 0) { ErrCode err = CommonManager.CreateSrvCtrl().SendAddReserve(list); if (err != ErrCode.CMD_SUCCESS) { MessageBox.Show(CommonManager.GetErrCodeText(err) ?? "予約登録でエラーが発生しました。終了時間がすでに過ぎている可能性があります。"); } } } } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }
public bool StartTimeShift(UInt32 reserveID) { try { if (Settings.Instance.TvTestExe.Length == 0) { MessageBox.Show("TVTest.exeのパスが設定されていません"); return(false); } if (CommonManager.Instance.NWMode == false) { if (IniFileHandler.GetPrivateProfileInt("SET", "EnableTCPSrv", 0, SettingPath.TimerSrvIniPath) == 0) { MessageBox.Show("追っかけ再生を行うには、動作設定でネットワーク接続を許可する必要があります。"); return(false); } } NWPlayTimeShiftInfo playInfo = new NWPlayTimeShiftInfo(); ErrCode err = CommonManager.CreateSrvCtrl().SendNwTimeShiftOpen(reserveID, ref playInfo); if (err != ErrCode.CMD_SUCCESS) { MessageBox.Show(CommonManager.GetErrCodeText(err) ?? "まだ録画が開始されていません。"); return(false); } OpenTVTest(1000, "TvTest"); var cmdTvTest = new CtrlCmdUtil(); cmdTvTest.SetPipeSetting("Global\\TvTest_Ctrl_BonConnect_" + process.Id, "TvTest_Ctrl_BonPipe_" + process.Id); cmdTvTest.SetConnectTimeOut(1000); TVTestStreamingInfo sendInfo = new TVTestStreamingInfo(); sendInfo.enableMode = 1; sendInfo.ctrlID = playInfo.ctrlID; if (CommonManager.Instance.NWMode == false) { sendInfo.serverIP = 0x7F000001; // 原作はここで自ホスト名を取得して解決したアドレスを格納している。(ないとは思うが)不具合があれば戻すこと sendInfo.serverPort = (UInt32)IniFileHandler.GetPrivateProfileInt("SET", "TCPPort", 4510, SettingPath.TimerSrvIniPath); } else { sendInfo.serverIP = 0x7F000001; IPAddress srvIP = CommonManager.Instance.NW.ConnectedIP; if (srvIP != null && srvIP.GetAddressBytes().Length == 4) { byte[] oct = srvIP.GetAddressBytes(); sendInfo.serverIP = (uint)oct[0] << 24 | (uint)oct[1] << 16 | (uint)oct[2] << 8 | oct[3]; } sendInfo.serverPort = CommonManager.Instance.NW.ConnectedPort; } sendInfo.filePath = playInfo.filePath; if (Settings.Instance.NwTvModeUDP == true) { sendInfo.udpSend = 1; } if (Settings.Instance.NwTvModeTCP == true) { sendInfo.tcpSend = 1; } for (int i = 0; i < 10 && cmdTvTest.SendViewSetStreamingInfo(sendInfo) != ErrCode.CMD_SUCCESS; i++) { System.Threading.Thread.Sleep(1000); } WakeupWindow(process.MainWindowHandle); } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } return(true); }
/// <summary> /// タブ生成 /// </summary> private bool CreateTabItem() { { List <CustomEpgTabInfo> defaultList = null; if (Settings.Instance.UseCustomEpgView == false) { defaultList = new List <CustomEpgTabInfo>(); if (CommonManager.Instance.NWMode && CommonManager.Instance.NWConnectedIP == null) { return(false); } ErrCode err = CommonManager.Instance.DB.ReloadEpgData(); if (err != ErrCode.CMD_SUCCESS) { if (IsVisible && err != ErrCode.CMD_ERR_BUSY) { Dispatcher.BeginInvoke(new Action(() => MessageBox.Show(CommonManager.GetErrCodeText(err) ?? "EPGデータの取得でエラーが発生しました。"))); } return(false); } //デフォルト表示 for (int i = 0; i < 5; i++) { var setInfo = new CustomEpgTabInfo(); foreach (EpgServiceInfo info in CommonManager.Instance.DB.ServiceEventList.Values.Select(allInfo => allInfo.serviceInfo)) { if (Settings.Instance.ShowEpgCapServiceOnly && (ChSet5.Instance.ChList.ContainsKey(CommonManager.Create64Key(info.ONID, info.TSID, info.SID)) == false || ChSet5.Instance.ChList[CommonManager.Create64Key(info.ONID, info.TSID, info.SID)].EpgCapFlag == false)) { continue; } if (i == 0 && ChSet5.IsDttv(info.ONID)) { setInfo.TabName = "地デジ"; setInfo.ViewServiceList.Add((ulong)CustomEpgTabInfo.SpecialViewServices.ViewServiceDttv); } else if (i == 1 && ChSet5.IsBS(info.ONID)) { setInfo.TabName = "BS"; setInfo.ViewServiceList.Add((ulong)CustomEpgTabInfo.SpecialViewServices.ViewServiceBS); } else if (i == 2 && ChSet5.IsCS(info.ONID) && ChSet5.IsCS3(info.ONID) == false) { setInfo.TabName = "CS"; setInfo.ViewServiceList.Add((ulong)CustomEpgTabInfo.SpecialViewServices.ViewServiceCS); } else if (i == 3 && ChSet5.IsCS3(info.ONID)) { setInfo.TabName = "CS3"; setInfo.ViewServiceList.Add((ulong)CustomEpgTabInfo.SpecialViewServices.ViewServiceCS3); } else if (i == 4 && ChSet5.IsOther(info.ONID)) { setInfo.TabName = "その他"; setInfo.ViewServiceList.Add((ulong)CustomEpgTabInfo.SpecialViewServices.ViewServiceOther); } else { continue; } defaultList.Add(setInfo); break; } } } foreach (CustomEpgTabInfo info in defaultList ?? Settings.Instance.CustomEpgTabList) { var tabItem = new TabItem(); tabItem.Header = info.TabName; if (info.ViewMode == 1) { //1週間表示 var epgView = new EpgWeekMainView(info); epgView.ViewModeChangeRequested += item_ViewModeChangeRequested; tabItem.Content = epgView; } else if (info.ViewMode == 2) { //リスト表示 var epgView = new EpgListMainView(info); epgView.ViewModeChangeRequested += item_ViewModeChangeRequested; tabItem.Content = epgView; } else { //標準ラテ欄表示 var epgView = new EpgMainView(info); epgView.ViewModeChangeRequested += item_ViewModeChangeRequested; tabItem.Content = epgView; } tabControl.Items.Add(tabItem); } if (tabControl.Items.Count > 0) { tabControl.SelectedIndex = 0; } } return(true); }
public EpgAutoAddDataAppend GetEpgAutoAddDataAppend(EpgAutoAddData master) { if (master == null) { return(null); } //データ更新は必要になったときにまとめて行う var dict = epgAutoAddAppendList ?? new Dictionary <uint, EpgAutoAddDataAppend>(); if (updateEpgAutoAddAppend == true) { List <EpgAutoAddData> srcList = EpgAutoAddList.Values.Where(data => dict.ContainsKey(data.dataID) == false).ToList(); if (srcList.Count != 0 && Settings.Instance.NoEpgAutoAddAppend == false) { List <EpgSearchKeyInfo> keyList = srcList.RecSearchKeyList().DeepClone(); keyList.ForEach(key => key.keyDisabledFlag = 0); //無効解除 var list_list = new List <List <EpgEventInfo> >(); try { CommonManager.CreateSrvCtrl().SendSearchPgByKey(keyList, ref list_list); } catch { } //通常あり得ないが、コマンド成功にもかかわらず何か問題があった場合は飛ばす if (srcList.Count == list_list.Count) { int i = 0; foreach (EpgAutoAddData item in srcList) { //イベントの再利用。再利用不可の場合でもサービス名の修正は現在番組なので不用。 if (IsEpgLoaded) { for (int j = 0; j < list_list[i].Count; j++) { EpgEventInfo refData; if (EventUIDList.TryGetValue(list_list[i][j].CurrentPgUID(), out refData)) { list_list[i][j] = refData; } } } dict[item.dataID] = new EpgAutoAddDataAppend(list_list[i++]); } } } epgAutoAddAppendList = dict; updateEpgAutoAddAppend = false; updateEpgAutoAddAppendReserveInfo = true;//現時刻でのSearchList再作成も含む } //予約情報との突き合わせが古い場合 if (updateEpgAutoAddAppendReserveInfo == true) { foreach (EpgAutoAddDataAppend item in dict.Values) { item.UpdateCounts(); } updateEpgAutoAddAppendReserveInfo = false; } //SendSearchPgByKeyに失敗した場合などは引っかかる。 EpgAutoAddDataAppend retv; dict.TryGetValue(master.dataID, out retv); return(retv ?? new EpgAutoAddDataAppend()); }
public bool SetLiveCh(UInt16 ONID, UInt16 TSID, UInt16 SID) { try { if (Settings.Instance.TvTestExe.Length == 0) { MessageBox.Show("TVTest.exeのパスが設定されていません"); return(false); } OpenTVTest(Settings.Instance.TvTestOpenWait, Settings.Instance.NwTvMode == false); var cmdTvTest = new CtrlCmdUtil(); cmdTvTest.SetPipeSetting("Global\\" + processType + "_Ctrl_BonConnect_" + process.Id, processType + "_Ctrl_BonPipe_" + process.Id); cmdTvTest.SetConnectTimeOut(1000); if (Settings.Instance.NwTvMode == true) { SetChInfo chInfo = new SetChInfo(); chInfo.useSID = 1; chInfo.useBonCh = 0; chInfo.ONID = ONID; chInfo.TSID = TSID; chInfo.SID = SID; UInt32 nwMode = 0; String nwBonDriver = "BonDriver_UDP.dll"; if (Settings.Instance.NwTvModeUDP == true) { nwMode += 1; } if (Settings.Instance.NwTvModeTCP == true) { nwMode += 2; nwBonDriver = Settings.Instance.NwTvModePipe ? "BonDriver_NetworkPipe.dll" : "BonDriver_TCP.dll"; } if (CommonManager.CreateSrvCtrl().SendNwTVMode(nwMode) == ErrCode.CMD_SUCCESS) { if (CommonManager.CreateSrvCtrl().SendNwTVSetCh(chInfo) == ErrCode.CMD_SUCCESS) { String val = ""; for (int i = 0; i < 10; i++) { if (cmdTvTest.SendViewGetBonDrivere(ref val) != ErrCode.CMD_SUCCESS) { System.Threading.Thread.Sleep(1000); continue; } if (val.Equals(nwBonDriver, StringComparison.OrdinalIgnoreCase) == false) { cmdTvTest.SendViewSetBonDrivere(nwBonDriver); } break; } } } } else { UInt64 key = CommonManager.Create64Key(ONID, TSID, SID); TvTestChChgInfo chInfo = new TvTestChChgInfo(); ErrCode err = CommonManager.CreateSrvCtrl().SendGetChgChTVTest(key, ref chInfo); if (err == ErrCode.CMD_SUCCESS) { String val = ""; for (int i = 0; i < 10; i++) { if (cmdTvTest.SendViewGetBonDrivere(ref val) != ErrCode.CMD_SUCCESS) { System.Threading.Thread.Sleep(1000); continue; } // 識別用IDが設定されたViewアプリは弄らない if (processType == "View") { int id = -1; if (cmdTvTest.SendViewGetID(ref id) != ErrCode.CMD_SUCCESS || id >= 0) { break; } } if (val.Equals(chInfo.bonDriver, StringComparison.OrdinalIgnoreCase) == false) { if (cmdTvTest.SendViewSetBonDrivere(chInfo.bonDriver) == ErrCode.CMD_SUCCESS) { System.Threading.Thread.Sleep(Settings.Instance.TvTestChgBonWait); cmdTvTest.SendViewSetCh(chInfo.chInfo); } } else { cmdTvTest.SendViewSetCh(chInfo.chInfo); } break; } } else { MessageBox.Show(CommonManager.GetErrCodeText(err) ?? "指定サービスを受信できるBonDriverが設定されていません。"); return(false); } } WakeupWindow(process.MainWindowHandle); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } return(true); }
public static UInt64 Create64PgKey(this EpgEventData obj) { return(CommonManager.Create64PgKey(obj.original_network_id, obj.transport_stream_id, obj.service_id, obj.event_id)); }
public UInt64 Create64PgKey() { return(CommonManager.Create64PgKey(originalNetworkID, transportStreamID, serviceID, 0xFFFF)); }
public static RoutedEventHandler OpenFolderNameDialog(TextBox box, string Description = "", bool checkNWPath = false, string defaultPath = "") { return((sender, e) => CommonManager.GetFolderNameByDialog(box, Description, checkNWPath, defaultPath)); }
public override string ToString() { return(CommonManager.ConvertTimeText(DateInfo)); }
public override UInt64 Create64PgKey() { return(CommonManager.Create64PgKey(original_network_id, transport_stream_id, service_id, event_id)); }
public static string GetDurationStringReserveStyle(uint durationSecond) { return(CommonManager.ConvertDurationText(durationSecond, Settings.Instance.ResInfoNoDurSecond)); }
public override String ConvertInfoText(object param = null) { return(CommonManager.ConvertProgramText(EventInfo, EventInfoTextMode.All)); }
public static string GetTimeStringReserveStyle(DateTime time, uint durationSecond) { return(CommonManager.ConvertTimeText(time, durationSecond, Settings.Instance.ResInfoNoYear, Settings.Instance.ResInfoNoSecond)); }
private void button_add_reserve_Click(object sender, RoutedEventArgs e) { try { if (listView_result.SelectedItem != null) { SearchItem item = listView_result.SelectedItem as SearchItem; EpgEventInfo eventInfo = item.EventInfo; if (eventInfo.StartTimeFlag == 0) { MessageBox.Show("開始時間未定のため予約できません"); return; } ReserveData reserveInfo = new ReserveData(); if (eventInfo.ShortInfo != null) { reserveInfo.Title = eventInfo.ShortInfo.event_name; } reserveInfo.StartTime = eventInfo.start_time; reserveInfo.StartTimeEpg = eventInfo.start_time; if (eventInfo.DurationFlag == 0) { reserveInfo.DurationSecond = 10 * 60; } else { reserveInfo.DurationSecond = eventInfo.durationSec; } UInt64 key = CommonManager.Create64Key(eventInfo.original_network_id, eventInfo.transport_stream_id, eventInfo.service_id); if (ChSet5.Instance.ChList.ContainsKey(key) == true) { reserveInfo.StationName = ChSet5.Instance.ChList[key].ServiceName; } reserveInfo.OriginalNetworkID = eventInfo.original_network_id; reserveInfo.TransportStreamID = eventInfo.transport_stream_id; reserveInfo.ServiceID = eventInfo.service_id; reserveInfo.EventID = eventInfo.event_id; RecSettingData setInfo = new RecSettingData(); recSettingView.GetRecSetting(ref setInfo); reserveInfo.RecSetting = setInfo; List <ReserveData> list = new List <ReserveData>(); list.Add(reserveInfo); ErrCode err = (ErrCode)cmd.SendAddReserve(list); if (err == ErrCode.CMD_ERR_CONNECT) { MessageBox.Show("サーバー または EpgTimerSrv に接続できませんでした。"); } if (err == ErrCode.CMD_ERR_TIMEOUT) { MessageBox.Show("EpgTimerSrvとの接続にタイムアウトしました。"); } if (err != ErrCode.CMD_SUCCESS) { MessageBox.Show("予約登録でエラーが発生しました。終了時間がすでに過ぎている可能性があります。"); } CommonManager.Instance.DB.SetUpdateNotify((UInt32)UpdateNotifyItem.ReserveInfo); CommonManager.Instance.DB.ReloadReserveInfo(); SearchPg(); } } catch (Exception ex) { MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace); } }
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()); } } }