/// <summary> /// コンポーネントの設定 /// 対象となるDirComponent配下のコンポーネントを再帰的に取得、設定する。 /// </summary> /// <param name="dirComponent"></param> internal static void SetComponent(DirComponent dirComponent) { foreach (var dir in Directory.GetDirectories(dirComponent.m_strPath)) { var dirComponentSub = new DirComponent(dir); SetComponent(dirComponentSub); dirComponent.m_listComponent.Add(dirComponentSub); } foreach (var file in Directory.GetFiles(dirComponent.m_strPath, "*.txt")) { var fileComponent = new FileComponent(file); dirComponent.m_listComponent.Add(fileComponent); } }
/// <summary> /// EnterCommandの処理を実行する /// </summary> /// <param name="context"></param> internal override void Execute(Context context) { if (base.m_component.GetType() == typeof(DirComponent)) { // Undo用にカレントコンポーネントを保持 this.m_beforeComponent = context.m_currentComponent; // カレントコンポーネントを設定 context.m_currentComponent = (DirComponent)base.m_component; } else { Common.FileOpen(base.m_component.m_strPath); base.m_bStack = false; } }
/// <summary> /// ディレクトリを作成する /// </summary> /// <param name="strPathName"></param> private void CreateDir(string strPathName) { if (!Directory.Exists(strPathName)) { Directory.CreateDirectory(strPathName); base.m_component.Add(new DirComponent(strPathName)); // ディレクトリ配下の全ファイル名を取得 var lstStrFileName = DirComponent.GetAllFileName((DirComponent)base.m_component); Common.OutputFileName(lstStrFileName); } else { this.m_strErrMessage = Define.TXT_ALREADY_EXIST; base.m_bStack = false; } }
/// <summary> /// ファイルを作成する /// </summary> /// <param name="strPathName"></param> private void CreateFile(string strPathName) { strPathName = strPathName + ".txt"; if (!File.Exists(strPathName)) { File.CreateText(strPathName); base.m_component.Add(new FileComponent(strPathName)); // ディレクトリ配下の全ファイル名を取得 var lstStrFileName = DirComponent.GetAllFileName((DirComponent)base.m_component); Common.OutputFileName(lstStrFileName); } else { this.m_strErrMessage = Define.TXT_ALREADY_EXIST; base.m_bStack = false; } }
/// <summary> /// 親コンポーネントを取得 /// 全コンポーネントから対象コンポーネントの親コンポーネントを再帰的に取得する。 /// ※MemoTree直下の場合、nullが返却される。 /// </summary> /// <param name="parentComponent"></param> /// <param name="childComponent"></param> /// <returns>親コンポーネント</returns> private Component GetParentComponent(DirComponent parentComponent, DirComponent childComponent) { foreach (var component in parentComponent.m_listComponent) { if (component == childComponent) { return(parentComponent); } if (component.GetType() == typeof(DirComponent)) { var recursiveComponent = GetParentComponent((DirComponent)component, childComponent); if (recursiveComponent != null) { return(recursiveComponent); } } } return(null); }
/// <summary> /// コンストラクタ /// MemoTreeの起動を行う /// </summary> public Context() { // MemoTreeディレクトリの存在チェック var strInitPath = Directory.GetCurrentDirectory() + "/MemoTree"; if (!Directory.Exists(strInitPath)) { Directory.CreateDirectory(strInitPath); } this.m_componentMain = new DirComponent(strInitPath); // 全ディレクトリ、ファイルを再帰的に取得 DirComponent.SetComponent(this.m_componentMain); this.m_currentComponent = this.m_componentMain; // 起動時はキー入力モードを設定 this.m_stateInvoker = KeyInputStateInvoker.GetInstance(); // 起動時はEnterコマンドを直接実行 var enterCommand = new EnterCommand(); enterCommand.CallExecute(this, this.m_componentMain, false); }
/// <summary> /// 対象となるDirComponent直下のコンポーネントの名前を全て取得する。 /// </summary> /// <param name="dirComponent"></param> /// <returns>ファイル名のリスト</returns> internal static List <string> GetAllFileName(DirComponent dirComponent) { return(dirComponent.m_listComponent.Select(x => x.m_strName).ToList()); }