private CtxmData GetWorkCtxmDataView(CtxmCode code) { CtxmData ctxm = new CtxmData(code); CtxmData ctxmDef = DefCtxmData[code]; //存在するものをコピーしていく。編集メニューは常に個別設定が有効になる。 if (Settings.Instance.MenuSet.IsManualAssign.Contains(code) == true || code == CtxmCode.EditChgMenu) { CtxmSetting ctxmEdited = Settings.Instance.MenuSet.ManualMenuItems.FindData(code); if (ctxmEdited == null) { //編集サブメニューの場合は、初期無効アイテムを削除したデフォルトセッティングを返す。 return(code != CtxmCode.EditChgMenu ? ctxmDef.Clone() : GetDefaultChgSubMenuCtxmData()); } ctxmEdited.Items.ForEach(setMenuString => { CtxmItemData item1 = ctxmDef.Items.Find(item => item.Header == setMenuString); if (item1 != null) { ctxm.Items.Add(item1.Clone()); } }); } else { ctxmDef.Items.ForEach(item1 => { if (MC.WorkCmdOptions[item1.Command].IsMenuEnabled == true) { ctxm.Items.Add(item1.Clone()); } }); } //・連続したセパレータの除去 for (int i = ctxm.Items.Count - 1; i >= 1; i--) { if (ctxm.Items[i].Command == EpgCmdsEx.Separator && ctxm.Items[i - 1].Command == EpgCmdsEx.Separator) { ctxm.Items.RemoveAt(i); } } //・先頭と最後のセパレータ除去 if (ctxm.Items.Count != 0 && ctxm.Items[ctxm.Items.Count - 1].Command == EpgCmdsEx.Separator) { ctxm.Items.RemoveAt(ctxm.Items.Count - 1); } if (ctxm.Items.Count != 0 && ctxm.Items[0].Command == EpgCmdsEx.Separator) { ctxm.Items.RemoveAt(0); } return(ctxm); }
public static List <CtxmItemData> Clone(this IEnumerable <CtxmItemData> src) { return(CtxmItemData.Clone(src)); }