Beispiel #1
0
        /// <summary>
        /// 作業エリアが閉じられる時
        /// </summary>
        /// <param name="vm">閉じようとしている作業エリア</param>
        /// <returns></returns>
        public bool DocumentClosing(WorkAreaViewModel vm)
        {
            var canceled = false;

            // 変更があったか?
            if (vm.HasChanged)
            {
                var result = LocalizedMessageBox.Show("Lang:PlanClosingConfirmMessage", "Lang:Confirmation", MessageBoxButton.YesNoCancel, MessageBoxImage.Question, MessageBoxResult.Cancel, vm.Title);

                switch (result)
                {
                // 保存する場合
                case MessageBoxResult.Yes:
                    vm.Save();
                    canceled = vm.HasChanged;           // 保存したはずなのに変更点がある(保存キャンセルされた等)場合、閉じないようにする
                    break;

                // 保存せずに閉じる場合
                case MessageBoxResult.No:
                    break;

                // キャンセルする場合
                case MessageBoxResult.Cancel:
                    canceled = true;
                    break;
                }
            }

            // 閉じる場合、リソースを開放
            if (!canceled)
            {
                vm.Dispose();
                Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() =>
                {
                    Documents.Remove(vm);

                    // 最後のタブを閉じた時にAvalonDockのActiveContentが更新されないためここでnullにする
                    // → nullにしないと閉じたはずのタブを保存できてしまう
                    if (Documents.Count == 0)
                    {
                        ActiveContent = null;
                    }
                }), DispatcherPriority.Background);

                // ガーベジコレクション用タイマー開始
                if (!_GCTimer.IsEnabled)
                {
                    _GCTimer.Start();
                }

                // 時間計測用ストップウォッチを初期化
                _GCStopWatch.Reset();
            }

            return(canceled);
        }
        /// <summary>
        /// インポート実行
        /// </summary>
        /// <param name="import"></param>
        public void Import(IImport import)
        {
            // インポート対象数を取得
            var importCnt = import.Select();

            for (var cnt = 0; cnt < importCnt; cnt++)
            {
                var vm = new WorkAreaViewModel(_WorkAreaManager.ActiveLayoutID);

                if (vm.Import(import))
                {
                    _WorkAreaManager.Documents.Add(vm);
                }
                else
                {
                    vm.Dispose();
                }
            }
        }