From 5b519f48e17a60fdad9b4ba82d2ef6dab1969808 Mon Sep 17 00:00:00 2001 From: callmeyan Date: Wed, 23 Apr 2025 18:02:17 +0800 Subject: [PATCH] =?UTF-8?q?fixed:=20=E4=BF=AE=E5=A4=8D=E9=A6=96=E6=AC=A1?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=8F=92=E4=BB=B6=E9=9D=A2=E6=9D=BF=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E5=A4=9A=E4=B8=AA=E7=AA=97=E5=8F=A3=E6=88=96?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=97=A0=E6=B3=95=E6=AD=A3=E7=A1=AE=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/AIProofread/v17/.suo | Bin 2927104 -> 3148800 bytes AIProofread/Bridge.cs | 6 +- AIProofread/Controls/ProofreadMainControl.cs | 2 +- AIProofread/Model/DocumentInfo.cs | 58 +++++++------- AIProofread/Model/DocumentList.cs | 18 +++-- AIProofread/Ribbon1.Designer.cs | 2 +- AIProofread/ThisAddIn.cs | 78 ++++++++++--------- 7 files changed, 94 insertions(+), 70 deletions(-) diff --git a/.vs/AIProofread/v17/.suo b/.vs/AIProofread/v17/.suo index f38da7f6afe0a2bec827b2f4a0a2645d5a0bf63a..6d3ee23bcb8f97bbc39393b3a2d37adc01f14c59 100644 GIT binary patch delta 30589 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 public class DocumentInfo { + public ILog Logger = LogHelper.GetLogger(typeof(DocumentInfo)); public static readonly int MIN_WIDTH = 420; private static char[] ArticleSpecialChars = new char[4] { '\a', '\r', '\v', '\f' }; @@ -74,8 +76,8 @@ namespace AIProofread.Model } } - public bool IsActive { get; internal set; } - public bool PaneVisible { get; set; } + public bool IsActive { get; internal set; } = false; + public bool PaneVisible { get; set; } = false; public int Id { get; set; } public CustomTaskPane TaskPane { get; set; } @@ -102,26 +104,33 @@ namespace AIProofread.Model /// public void ShowPane() { - if (null != TaskPane) - { - TaskPane.Visible = PaneVisible = true; - } - else + if(null == TaskPane) { CreateTaskPane(); } + Logger.Debug("TaskPane.Visible {"+TaskPane==null?"null":(TaskPane.Visible?"true":"false")+" => true"); + TaskPane.Visible = PaneVisible = true; + } + + ///

+ /// 隐藏面板 + /// + public void HidePane() + { + if (!PaneVisible) return; + ShowDocumentStatus("HidePane"); + Logger.Debug($"TaskPane.Visible {TaskPane.Visible} => false"); + TaskPane.Visible = PaneVisible = false; } public void RunInMainThread(Action action) { - if (null != TaskPane) - { - TaskPane.Control.BeginInvoke(action); - } - else + Logger.Debug($"RunInMainThread {action}"); + if (null == TaskPane) { CreateTaskPane(); } + TaskPane.Control.BeginInvoke(action); } public void ShowDialog(string message, string confirmText, string confirmAction) @@ -167,16 +176,7 @@ namespace AIProofread.Model private void ShowDocumentStatus(string tag) { - // Logger.Log($"{fileName} {tag} PaneVisible is {PaneVisible} Poofread is {Proofread} Proofreading is {Proofreading}"); - } - - /// - /// 隐藏面板 - /// - public void HidePane() - { - ShowDocumentStatus(" HidePane"); - if (null != TaskPane) TaskPane.Visible = PaneVisible = false; + // Logger.Log($"{fileName} {tag} PaneVisible is {PaneVisible} Poofread is {Proofread} Proofreading is {Proofreading}"); } /// @@ -184,7 +184,7 @@ namespace AIProofread.Model /// public void Active() { - ShowDocumentStatus(" Active"); + ShowDocumentStatus("Active"); IsActive = true; if (Config.IS_WPS && null != TaskPane && PaneVisible) { @@ -194,7 +194,7 @@ namespace AIProofread.Model public void Deactive() { - ShowDocumentStatus(" Deactive"); + ShowDocumentStatus("Deactive"); IsActive = false; if (Config.IS_WPS) { @@ -203,7 +203,7 @@ namespace AIProofread.Model // 异步等待一段时间 重新设置为true,防止面板关闭时,触发事件 ThreadPool.QueueUserWorkItem(state => { - Thread.Sleep(1000); + Thread.Sleep(500); PaneVisible = true; }); } @@ -270,6 +270,7 @@ namespace AIProofread.Model // 创建pane 并初始化 public void CreateTaskPane() { + Logger.Debug("CreateTaskPane"); var control = new ProofreadMainControl(); if (MinWidth < 10) { @@ -312,7 +313,12 @@ namespace AIProofread.Model this.fileName = CurrentDocument.FullName; ranges.Clear(); ComputeUniqueId(); - if (TaskPane == null) CreateTaskPane(); + if (TaskPane == null) + { + Logger.Debug("init document Initialize(318) and CreateTaskPane"); + CreateTaskPane(); + + } } diff --git a/AIProofread/Model/DocumentList.cs b/AIProofread/Model/DocumentList.cs index 214d0d1..3418a07 100644 --- a/AIProofread/Model/DocumentList.cs +++ b/AIProofread/Model/DocumentList.cs @@ -1,9 +1,9 @@ -using Microsoft.Office.Interop.Word; +using log4net; +using log4net.Repository.Hierarchy; +using Microsoft.Office.Interop.Word; using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace AIProofread.Model { @@ -12,6 +12,7 @@ namespace AIProofread.Model /// public class DocumentList { + public ILog Logger = LogHelper.GetLogger(typeof(DocumentList)); public List documentList = new List(); public DocumentInfo ActiveDocument { get; set; } public int Count => documentList.Count; @@ -109,11 +110,17 @@ namespace AIProofread.Model /// public DocumentInfo SetActiveDocument(Document originDocument) { + Logger.Debug("SetActiveDocument(113): " + originDocument.Name); if (originDocument == null) return null; var document = InitDocument(originDocument); - + if (document == null) + { + Logger.Error("Document not exists SetActiveDocument"); + return null; + } if (ActiveDocument == document) return document; - else if (Globals.ThisAddIn.IsWPS) + + if (Globals.ThisAddIn.IsWPS) { // WPS 只有一个窗口 所以需要先关闭之前文档的面板 ActiveDocument?.Deactive(); @@ -137,6 +144,7 @@ namespace AIProofread.Model // 如果不存在,则添加 if (document == null) { + Logger.Debug("Document not exists,InitDocument: " + originDocument.Name); document = new DocumentInfo(originDocument); Add(document); } diff --git a/AIProofread/Ribbon1.Designer.cs b/AIProofread/Ribbon1.Designer.cs index 71b31ea..44c4699 100644 --- a/AIProofread/Ribbon1.Designer.cs +++ b/AIProofread/Ribbon1.Designer.cs @@ -107,7 +107,6 @@ namespace AIProofread // menuProofreadList // this.menuProofreadList.ControlSize = Microsoft.Office.Core.RibbonControlSize.RibbonControlSizeLarge; - this.menuProofreadList.Enabled = false; this.menuProofreadList.Image = global::AIProofread.Properties.Resources.icon_proofread; this.menuProofreadList.Items.Add(this.BtnProofreadExact); this.menuProofreadList.Items.Add(this.BtnProofreadFull); @@ -290,6 +289,7 @@ namespace AIProofread // BtnShowPanel // this.BtnShowPanel.ControlSize = Microsoft.Office.Core.RibbonControlSize.RibbonControlSizeLarge; + this.BtnShowPanel.Enabled = false; this.BtnShowPanel.Image = global::AIProofread.Properties.Resources.icon_panel; this.BtnShowPanel.Label = "显示面板\r\n"; this.BtnShowPanel.Name = "BtnShowPanel"; diff --git a/AIProofread/ThisAddIn.cs b/AIProofread/ThisAddIn.cs index d0d6486..b6b2df7 100644 --- a/AIProofread/ThisAddIn.cs +++ b/AIProofread/ThisAddIn.cs @@ -9,6 +9,8 @@ using UtilLib; using AIProofread.Model; using System.Collections.Generic; using log4net; +using System.Threading.Tasks; +using DocumentFormat.OpenXml.EMMA; namespace AIProofread @@ -130,10 +132,28 @@ namespace AIProofread // CheckDocumentClosedTick(); // 定时检测文档是否关闭 - _timer = new System.Timers.Timer(10000); - _timer.Elapsed += CheckDocumentClosed; - _timer.AutoReset = true; - _timer.Enabled = true; + //_timer = new System.Timers.Timer(10000); + //_timer.Elapsed += CheckDocumentClosed; + //_timer.AutoReset = true; + //_timer.Enabled = true; + + try + { + // 默认已经打开了文档 直接初始化 + if (Application.Documents.Count > 0 && Application.ActiveDocument != null) + { + Logger.Debug("ThisAddIn_Startup 开始初始化当前文档"); + ActiveDocument = documentList.InitDocument(Application.ActiveDocument); + + // 直接初始化面板 + // info.CheckPanel(); + Logger.Debug("ThisAddIn_Startup 结束初始化当前文档"); + } + } + catch (Exception ex) + { + Logger.Error("Initialize documentlist Error ", ex); + } } catch (Exception ex1) { @@ -184,6 +204,12 @@ namespace AIProofread for (int i = documentList.documentList.Count - 1; i >= 0; i--) { var item = documentList.documentList[i]; + // 判断文档对象是否已经被移除 + if (item.CurrentDocument == null) + { + documentList.Remove(item); + continue; + } // 可能出现另存问题 所以需要更新文件名称 var oldName = item.fileName; var currentName = item.CurrentDocument.FullName; @@ -274,6 +300,7 @@ namespace AIProofread // 启动地址 applicationStartupPath = System.Windows.Forms.Application.StartupPath; + Logger.Debug("applicationStartupPath --> " + applicationStartupPath); // 判断是否是WPS if (applicationStartupPath.Contains("WPS")) { @@ -289,22 +316,6 @@ namespace AIProofread Logger.Error("Init WPS Error ", ex); } } - try - { - // 默认已经打开了文档 直接初始化 - if(CurrentWordApplication.Documents.Count > 0){ - foreach (Document item in CurrentWordApplication.Documents) - { - var info = documentList.InitDocument(item); - // 直接初始化面板 - info.CheckPanel(); - } - } - } - catch (Exception ex) - { - Logger.Error("Initialize documentlist Error ", ex); - } string verTextFile = Config.APP_BASE_DIR + Path.GetFileName("app_version.txt"); try { @@ -351,21 +362,27 @@ namespace AIProofread private void Application_DocumentChange() { + // 检测是否存在打开的文档 if (CurrentWordApplication.Documents.Count == 0) { return; } - //var document = CurrentWordApplication.ActiveDocument; + var document = CurrentWordApplication.ActiveDocument; + Logger.Debug("Application_DocumentChange -- " + document.Name + " 修订模式: is " + document.TrackRevisions); // 设置当前文档 - ActiveDocument = documentList.SetActiveDocument(CurrentWordApplication.ActiveDocument); + ActiveDocument = documentList.SetActiveDocument(document); + if (ActiveDocument == null) + { + return; + } ActiveDocument.CheckBtnStatus(); CheckDocumentClosed(null, null); if (formCommonsenseDetection != null) { formCommonsenseDetection.SendMessageToWeb("document-change", null); } - //LogHelper.Log("Application_DocumentChange -- " + ActiveDocument.fileName + " track is " + ActiveDocument.CurrentDocument.TrackRevisions); + // } public void SetActiveDocument(Document doc) @@ -390,10 +407,10 @@ namespace AIProofread /// private void Application_WindowActivate(Document activeDoc, Window Wn) { + Logger.Debug("Application_WindowActivate -- " + activeDoc.Name); if (activeDoc != null && (ActiveDocument == null || activeDoc != ActiveDocument.CurrentDocument)) { - ActiveDocument = documentList.SetActiveDocument(activeDoc); - Logger.Info("Application_WindowActivate -- " + ActiveDocument.fileName); + documentList.SetActiveDocument(activeDoc); } //// 当前文档添加书签集合 //if (!allMarks.ContainsKey(activeDoc)) @@ -472,16 +489,6 @@ namespace AIProofread FmainThreadContext.Send(d, null); } - //private void ProofreadPanel_SizeChanged(object sender, EventArgs e) - //{ - // // 处理最小宽度 - // if (customTaskPane != null && customTaskPane.Width < MinWidth && customTaskPane.Visible) - // { - // SendKeys.Send("{ESC}"); - // customTaskPane.Width = MinWidth; - // } - //} - private void Application_WindowSelectionChange(Selection s) { ribbon.ParseSelectionChange(s); @@ -529,6 +536,7 @@ namespace AIProofread // 显示面板 public void ShowPanel() { + Logger.Debug("ShowPanel"); ActiveDocument?.ShowPane(); }