using log4net; using log4net.Repository.Hierarchy; using Microsoft.Office.Interop.Word; using System; using System.Collections.Generic; using System.Linq; 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; public void Add(DocumentInfo documentInfo) { documentList.Add(documentInfo); } public void Clear() { documentList.ForEach(doc => { doc.Dispose(); }); documentList.Clear(); } public DocumentInfo Get(int index) { return documentList[index]; } public DocumentInfo GetById(int id) { return Count > 0 ? documentList.FirstOrDefault(x => x.Id == id) : null; } public DocumentInfo Get(string uniqueId) { return Count > 0 ? documentList.FirstOrDefault(x => x.UniqueId == uniqueId) : null; } public DocumentInfo Get(Document doc) { return Count > 0 && doc != null ? documentList.FirstOrDefault(x => x.CurrentDocument == doc) : null; } public DocumentInfo GetActive() { // documentList.FirstOrDefault(x => x.IsActive) return Count > 0 ? ActiveDocument : null; } public bool Contains(DocumentInfo documentInfo) { return Count > 0 && documentList.Contains(documentInfo); } public bool Contains(string uniqueId) { return Count > 0 && documentList.Any(x => x.UniqueId == uniqueId); } // 通过文档判断是否包含 public bool Contains(Document originDocument) { return Count > 0 && originDocument != null && documentList.Any(x => x.CurrentDocument == originDocument); } /// /// 移除文档 /// /// /// public bool Remove(DocumentInfo documentInfo) { return documentList.Remove(documentInfo); } public bool Remove(Document originDocument) { if (Count > 0 && originDocument != null) { documentList.RemoveAll(x => { if (x.CurrentDocument == originDocument) { x.Close(); return true; } return false; }); } return true; } /// /// 获取文档的索引 /// /// /// public int IndexOf(DocumentInfo item) { return documentList.IndexOf(item); } /// /// 设置当前激活的文档 /// /// 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 != null && ActiveDocument.CurrentDocument != originDocument) { // WPS 只有一个窗口 所以需要先关闭之前文档的面板 ActiveDocument?.Deactive(); } // 如果存在,则设置激活 ActiveDocument = document; //document.IsActive = true; document.Active(); document.CheckBtnStatus(); return document; } internal void HideAllPane() { documentList.ForEach(d => d.HidePane()); } public DocumentInfo InitDocument(Document originDocument) { var document = Get(originDocument); try { // 如果不存在,则添加 if (document == null) { Logger.Debug("Document not exists,InitDocument: " + originDocument.Name); document = new DocumentInfo(originDocument); Add(document); } }catch(Exception ex) { Logger.Error("InitDocument error: " + ex.Message,ex); } return document; } } }