예제 #1
0
        private void SetListItems(EditProgress progress)
        {
            var fillString = string.Empty;

            if (progress != null)
            {
                var translations = progress.Translations;

                if (translations != null && translations.Count > 0)
                {
                    keyList.ItemsSource = translations;
                    return;
                }
                else
                {
                    fillString = "当前列表内容为空。";
                }
            }
            else
            {
                fillString = "当前未打开任何进度文件。";
            }

            keyList.ItemsSource = new string[] { fillString };
        }
예제 #2
0
        private async Task CloseEditProgress(EditProgress progress)
        {
            var result = default(MessageDialogResult);

            if (IsProgressChanged)             //不这么写这个消息框Task就算不在条件内也会触发
            {
                var taskResult = this.ShowMessageAsync("保存进度", "当前进度未保存,是否要保存当前进度。", MessageDialogStyle.AffirmativeAndNegative, new MetroDialogSettings()
                {
                    AffirmativeButtonText = "是",
                    NegativeButtonText    = "否"
                });

                //将异步等待结果返回
                result = await taskResult;
            }

            switch (result)
            {
            case MessageDialogResult.Affirmative:
                if (!ProgressSave(progress))
                {
                    break;
                }
                return;

            case MessageDialogResult.Negative:
            default:
                break;
            }
        }
예제 #3
0
        /// <summary>
        /// 进度另存为
        /// </summary>
        /// <returns></returns>
        private bool ProgressSaveAs(EditProgress progress)
        {
            IsProgressChanged = false;

            using (var dialog = new CommonSaveFileDialog())
            {
                var fileName   = string.Empty;
                var originName = progress?.OriginName;

                if (originName != null)
                {
                    var file = new FileInfo(progress.OriginName);
                    fileName = file.Name.Replace(file.Extension, "");
                }
                else
                {
                    fileName = "edit";
                }

                dialog.DefaultExtension = ".edp";
                dialog.DefaultFileName  = $"{fileName}_progress";
                dialog.Filters.Add(new CommonFileDialogFilter("编辑进度", "*.edp"));

                if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
                {
                    return(SaveProgress(progress, dialog.FileName));
                }
            }

            return(false);
        }
예제 #4
0
        /// <summary>
        /// 保存进度
        /// </summary>
        /// <returns>是否成功写入硬盘</returns>
        private bool ProgressSave(EditProgress progress)
        {
            IsProgressChanged = false;

            //如果文件未保存过则转为另存为执行
            return(string.IsNullOrWhiteSpace(progress.OpenPath)
                                                 ? ProgressSaveAs(progress)
                                                 : SaveProgress(progress, progress.OpenPath));
        }
예제 #5
0
        private void CheckValidProgress(EditProgress progress, string title, string content)
        {
            if (progress != null)
            {
                return;
            }

            throw new MessageDialogException(title, content);
        }
예제 #6
0
        private void CreateCurrentProgress()
        {
            EditProgress = new EditProgress()
            {
                State        = EditProgressState.NotSave,
                Translations = new NotifyList <Translation>()
            };

            SetListItems(EditProgress);
        }
예제 #7
0
        /// <summary>
        /// 打开进度
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void OpenProgress_Click(object sender, RoutedEventArgs e)
        {
            await CloseCurrentProgress();

            IsProgressChanged = false;
            using (var _fileDialog = new CommonOpenFileDialog())
            {
                _fileDialog.Multiselect = false;
                _fileDialog.Title       = "选择需要打开的文件";

                _fileDialog.Filters.Add(new CommonFileDialogFilter("编辑进度", "*.edp"));

                if (_fileDialog.ShowDialog() == CommonFileDialogResult.Ok)
                {
                    var file = new FileInfo(_fileDialog.FileName);

                    var content = file.GZipRead();
                    var decoded = Encoding.UTF8.GetString(Convert.FromBase64String(content));

                    //初始化新的编辑进度
                    var progress = new EditProgress();

                    //从本地序列化填充到实例
                    JsonConvert.PopulateObject(decoded, progress);

                    //打开进度时设置初始状态
                    progress.Translations.ForEach(r =>
                    {
                        var state = TranslationState.Empty;

                        if (r.Text == r.Translated)
                        {
                            state = TranslationState.SameWithOrigin;
                        }
                        else if (r.IsTranslated)
                        {
                            state = TranslationState.Changed;
                        }

                        r.State = state;
                    });

                    //设置翻译条目的排序顺序
                    progress.Translations.Sort((x, y) =>
                    {
                        var stateSort = TranslationStateComparer.CompareDesc(x.State, y.State);
                        return(stateSort == 0 ? string.CompareOrdinal(x.Key, y.Key) : stateSort);
                    });

                    progress.OpenPath = file.FullName;

                    EditProgress = progress;
                }
            }
        }
예제 #8
0
        private async Task ImportPath(EditProgress progress, bool isTranslate)
        {
            var dialogController = await this.ShowProgressAsync("正在导入", "正在将文本导入到当前进度中...");

            dialogController.SetIndeterminate();

            using (var _fileDialog = new CommonOpenFileDialog())
            {
                _fileDialog.Multiselect = false;
                _fileDialog.Title       = "选择需要导入的文本";


                if (_fileDialog.ShowDialog() == CommonFileDialogResult.Ok)
                {
                    var fileInfo = new FileInfo(_fileDialog.FileName);

                    //打开文件流
                    using (var reader = fileInfo.OpenText())
                    {
                        //获取文本内容
                        var fileContent = reader.ReadToEnd();

                        //获取导入的文本中有哪些段落
                        var importContents = ImportContent(fileContent);

                        if (isTranslate)
                        {
                            ImportTranslation(progress.Translations, importContents); //检查导入译文的更新
                        }
                        else                                                          //如果是译文则不检查原文的更新
                        {
                            //检查导入文本的更新
                            UpdateTranslation(progress.Translations, importContents);

                            //设置进度内导入的文件名
                            progress.OriginName = fileInfo.Name;

                            //设置进度内导入的文件内容
                            progress.OriginContent = fileContent;
                        }
                    }
                }
            }

            await dialogController.CloseAsync();
        }
예제 #9
0
        private bool SaveProgress(EditProgress progress, string path)
        {
            var fileInfo = new FileInfo(path);

            fileInfo.Check();

            try
            {
                var jsonString = JsonConvert.SerializeObject(progress);
                var encoded    = Convert.ToBase64String(Encoding.UTF8.GetBytes(jsonString));

                GZipExtension.GZipSave(fileInfo, encoded);
            }
            catch (Exception)
            {
                return(false);
            }

            progress.Translations.Where(t => t.State != TranslationState.Changed).ForEach(t => t.State = TranslationState.Changed);
            return(true);
        }
예제 #10
0
        /// <summary>
        /// 初始化应用程序主窗体
        /// </summary>
        public MainWindow()
        {
            //初始化窗体控件
            InitializeComponent();

            //设置为主窗体关闭后结束程序
            Application.Current.ShutdownMode = ShutdownMode.OnMainWindowClose;

            //将本窗体设置为主窗体 (为什么CheckSymbol会变成主窗体???)
            Application.Current.MainWindow = this;

            //捕捉应用程序域未能处理的异常(将会引起程序崩溃)
            AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
            {
                var exception = e.ExceptionObject as Exception;
                UnhandledExceptionLog(exception, true);                 //true -> crash on dialog close

                DisplayUnhandleExceptionDialog(exception, e.IsTerminating);

                ProgressSave(EditProgress);
            };

            //捕捉应用程序未拦截的异常(可被拦截)
            Application.Current.DispatcherUnhandledException += (sender, e) =>
            {
                //被触发的异常
                var exception = e.Exception;

                //默认异常都需要被拦截
                e.Handled = true;

                if (exception is MessageDialogException)
                {
                    DisplayMessages(exception as MessageDialogException);
                    return;
                }

                if (exception is CrashException)
                {
                    e.Handled = !(e.Exception as CrashException).Crash;
                }

                if (e.Handled)
                {
                    UnhandledExceptionLog(exception, !e.Handled);                     //false -> not crash
                    DisplayUnhandleExceptionDialog(exception);
                }
            };

            OnEditProgressChangedEventHandle += editprogress =>
            {
                //重新绑定列表
                SetListItems(EditProgress);

                //重置编辑框
                EditorReset();

                Title = _mainTitle;

                if (editprogress == null)
                {
                    Title += "(未打开进度)";
                }
            };

            EditProgress = null;
        }
예제 #11
0
 private void CheckValidProgress(EditProgress progress)
 {
     CheckValidProgress(EditProgress, "无效的操作", "当前没有已打开的任务进度。");
 }