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 }; }
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; } }
/// <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); }
/// <summary> /// 保存进度 /// </summary> /// <returns>是否成功写入硬盘</returns> private bool ProgressSave(EditProgress progress) { IsProgressChanged = false; //如果文件未保存过则转为另存为执行 return(string.IsNullOrWhiteSpace(progress.OpenPath) ? ProgressSaveAs(progress) : SaveProgress(progress, progress.OpenPath)); }
private void CheckValidProgress(EditProgress progress, string title, string content) { if (progress != null) { return; } throw new MessageDialogException(title, content); }
private void CreateCurrentProgress() { EditProgress = new EditProgress() { State = EditProgressState.NotSave, Translations = new NotifyList <Translation>() }; SetListItems(EditProgress); }
/// <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; } } }
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(); }
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); }
/// <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; }
private void CheckValidProgress(EditProgress progress) { CheckValidProgress(EditProgress, "无效的操作", "当前没有已打开的任务进度。"); }