/*--- Method: public ------------------------------------------------------------------------------------------------------------------------------------------*/

        /// <summary> 新しいオーバーレイを作成します。
        /// </summary>
        public void AddNewOverlay(CommonDataModel pCommonDM, OverlayDataModel pAddOverlayDM, TimelineComponent pTimelineC, OverlayManageDataModel pOverlayManageM, bool IsImport)
        {
            // ID設定
            if (pOverlayManageM.OverlayViewComponentCollection.Count > 0)
            {
                pAddOverlayDM.OverlayWindowData.ID = pOverlayManageM.OverlayViewComponentCollection.Max(m => m.OverlayDataModel.OverlayWindowData.ID) + 1;
            }
            else
            {
                pAddOverlayDM.OverlayWindowData.ID = 1;
            }

            OverlayViewComponent component = new OverlayViewComponent(pCommonDM);

            component.OverlayDataModel = pAddOverlayDM;

            if (IsImport)
            {
                pAddOverlayDM.OverlayWindowData.WindowTop        = 10;
                pAddOverlayDM.OverlayWindowData.WindowLeft       = 10;
                pAddOverlayDM.OverlayWindowData.WindowVisibility = false;
                pAddOverlayDM.OverlayWindowData.WindowLock       = false;
            }
            else
            {
                this.SetDefaultOverlayWindowData(component.OverlayDataModel.OverlayWindowData);
                this.SetDefaultOverlaySettingData(component.OverlayDataModel.OverlayOptionData);
            }

            component.OverlayDataModel.OverlayViewData.TimelineViewSource = new CollectionViewSource()
            {
                Source = pTimelineC.TimelineObjectModel.ActivityCollection
            };
            this.setFilterProcess.SetResetFilter(component.OverlayDataModel.OverlayViewData.TimelineViewSource, false);

            // バージョン設定
            component.OverlayDataModel.DataVersion = pCommonDM.ApplicationData.ApplicationVersion;

            pOverlayManageM.OverlayViewComponentCollection.Add(component);
            pCommonDM.ViewCollection.Add(component);
        }
 /// <summary> オーバーレイのコピー作成を実行します。
 /// </summary>
 /// <param name="pOverlayVC"> コピーするオーバーレイコンポーネント </param>
 /// <param name="pTimelineC"> コピーしたオーバーレイに搭載するタイムラインコンポーネント </param>
 /// <param name="pOverlayManageDM"> オーバーレイ管理データモデル </param>
 /// <param name="pNewOverlayName"> コピー後に設定するオーバーレイの名前 </param>
 public void CopyOverlay(OverlayViewComponent pOverlayVC, TimelineComponent pTimelineC, OverlayManageDataModel pOverlayManageDM, string pNewOverlayName)
 {
     this.OverlayDataModelSave(pOverlayVC.CommonDataModel.ApplicationData.GetTempOverlayFullPath, pOverlayVC.OverlayDataModel, false);
     this.ImportOverlay(pOverlayVC.CommonDataModel, pTimelineC, pOverlayManageDM, pOverlayVC.CommonDataModel.ApplicationData.GetTempOverlayFullPath, pNewOverlayName);
 }
        /// <summary> オーバーレイをインポートします。
        /// </summary>
        public bool ImportOverlay(CommonDataModel pCommonDataModel, TimelineComponent pTimelineComponent, OverlayManageDataModel pOverlayManageDataModel, string pOverlayFullPath, string pImportOverlayName)
        {
            var data = this.OverlayDataModelLoad(pOverlayFullPath, false);

            if (data != null)
            {
                this.overlayDataRevisionProcess.DataRevisionExecute(data);
                if (!string.IsNullOrWhiteSpace(pImportOverlayName))
                {
                    data.OverlayWindowData.OverlayName = pImportOverlayName;
                }

                this.AddNewOverlay(pCommonDataModel, data, pTimelineComponent, pOverlayManageDataModel, true);
            }
            else
            {
                throw new FileLoadException();
            }

            return(true);
        }
        /// <summary> ファイル選択ダイアログを表示後、オーバーレイをインポートします。
        /// </summary>
        public bool ImportOverlay(CommonDataModel pCommonDataModel, TimelineComponent pTimelineComponent, OverlayManageDataModel pOverlayManageDataModel)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();

            openFileDialog.FilterIndex      = 1;
            openFileDialog.Filter           = "Overlay Xml|*.xml|All Files (*.*)|*.*";
            openFileDialog.InitialDirectory = pCommonDataModel.ApplicationData.PluginDllDirectory;
            openFileDialog.Title            = "Import Overlay Data";
            bool?result = openFileDialog.ShowDialog();

            if (result == true)
            {
                return(this.ImportOverlay(pCommonDataModel, pTimelineComponent, pOverlayManageDataModel, openFileDialog.FileName, string.Empty));
            }

            return(false);
        }
        /// <summary> 既存のオーバーレイを削除します。
        /// </summary>
        /// <param name="pOverlayViewC"> 削除するオーバーレイデータ </param>
        /// <param name="pCommonDM"> 値参照用の共通データモデル </param>
        /// <param name="pOverlayManageDM"> 削除データのコレクションを持つオーバーレイ管理モデル </param>
        public void DeleteOverlay(OverlayViewComponent pOverlayViewC, CommonDataModel pCommonDM, OverlayManageDataModel pOverlayManageDM)
        {
            if (pCommonDM == null || pCommonDM.ApplicationData == null)
            {
                return;
            }

            string fileName = pCommonDM.ApplicationData.OverlayDataPartName + String.Format("{0:0000}", pOverlayViewC.OverlayDataModel.OverlayWindowData.ID) + ".xml";
            string path     = Path.Combine(pCommonDM.ApplicationData.RoamingDirectoryPath, "OverlayData", fileName);

            pOverlayManageDM.OverlayViewComponentCollection.Remove(pOverlayViewC);
            pCommonDM.ViewCollection.Remove(pOverlayViewC);

            WindowsServices.WindowCloseSendMessage(pOverlayViewC.OverlayDataModel.OverlayWindowData.WindowIntPtr);
            pOverlayViewC.OverlayDataModel.OverlayWindowData.WindowIntPtr = IntPtr.Zero;

            pOverlayViewC = null;

            if (File.Exists(path))
            {
                File.Delete(path);
            }
        }
        /// <summary> 保存されているオーバーレイを全てロードします。
        /// </summary>
        /// <param name="pCommonDataModel"> 共通データモデル </param>
        /// <param name="pTimelineComponent"> タイムラインコンポーネント </param>
        /// <param name="pOverlayManageDataModel"> 読込データを追加する管理データモデル </param>
        public void OverlayDataModelLoad(CommonDataModel pCommonDataModel, TimelineComponent pTimelineComponent, OverlayManageDataModel pOverlayManageDataModel)
        {
            if (pCommonDataModel == null || pCommonDataModel.ApplicationData == null)
            {
                return;
            }
            if (pCommonDataModel.ApplicationData.OverlayDataFilePathList.Count == 0)
            {
                return;
            }

            var dataList = this.OverlayDataModelLoad(pCommonDataModel.ApplicationData.OverlayDataFilePathList, true);

            if (dataList.Count == 0)
            {
                return;
            }

            foreach (var data in dataList)
            {
                OverlayViewComponent component = new OverlayViewComponent(pCommonDataModel);

                this.overlayDataRevisionProcess.DataRevisionExecute(data);

                // バージョン設定
                data.DataVersion = pCommonDataModel.ApplicationData.ApplicationVersion;

                component.OverlayDataModel = data;

                component.OverlayDataModel.OverlayViewData.TimelineViewSource = new CollectionViewSource()
                {
                    Source = pTimelineComponent.TimelineObjectModel.ActivityCollection
                };

                this.setFilterProcess.SetResetFilter(component.OverlayDataModel.OverlayViewData.TimelineViewSource, false);

                pOverlayManageDataModel.OverlayViewComponentCollection.Add(component);

                pCommonDataModel.ViewCollection.Add(component);
            }
        }