using Prism.Mvvm; using Prism.Regions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ComPDFKitViewer.PdfViewer; using PDF_Master.Model; using Prism.Commands; using System.Windows.Controls; using DryIoc; using Prism.Services.Dialogs; using PDF_Master.Views.PageEdit; using PDF_Master.Properties; using PDF_Master.Helper; using PDFReader_WPF.Helper; using System.Drawing; using PDF_Master.Views.BOTA; using ImTools; namespace PDF_Master.ViewModels.BOTA { public class BOTAContentViewModel : BindableBase, INavigationAware { public CPDFViewer pdfViewer { get; set; } private IRegionManager regions { get; set; } private IDialogService dialogs { get; set; } public ViewContentViewModel viewContentViewModel { get; set; } private Dictionary viewNameByTabItem; private string botaContentRegionName; public string BOTAContentRegionName { get { return botaContentRegionName; } set { SetProperty(ref botaContentRegionName, value); } } private int selectedIndex; public int SelectedIndex { get { return selectedIndex; } set { SetProperty(ref selectedIndex, value); } } private string tip_Thumbnail; public string Tip_Thumbnail { get { return tip_Thumbnail; } set { SetProperty(ref tip_Thumbnail, value); } } private string tip_OutLine; public string Tip_OutLine { get { return tip_OutLine; } set { SetProperty(ref tip_OutLine, value); } } private string tip_BookMark; public string Tip_BookMark { get { return tip_BookMark; } set { SetProperty(ref tip_BookMark, value); } } private string tip_Search; public string Tip_Search { get { return tip_Search; } set { SetProperty(ref tip_Search, value); } } private string tip_Annote; public string Tip_Annote { get { return tip_Annote; } set { SetProperty(ref tip_Annote, value); } } public string CurrentBar = ""; public DelegateCommand TabControlSelectionChangedCommand { get; set; } public BOTAContentViewModel(IRegionManager regionManager, IDialogService dialogService) { regions = regionManager; dialogs = dialogService; BOTAContentRegionName = Guid.NewGuid().ToString(); TabControlSelectionChangedCommand = new DelegateCommand(TabControlSelectionChangedEvent); viewNameByTabItem = new Dictionary(); InitDictionartViewNameByTabItem(ref viewNameByTabItem); InitString(); } private void TabControlSelectionChangedEvent(object e) { var args = e as SelectionChangedEventArgs; if (args != null && args.AddedItems.Count > 0) { if (!string.IsNullOrEmpty((args.AddedItems[0] as TabItem).Name)) { TabControlDataTracking((args.AddedItems[0] as TabItem).Name); EnterSelectedBar((args.AddedItems[0] as TabItem).Name); if ((args.AddedItems[0] as TabItem).IsSelected) { viewContentViewModel.OpenBOTA = true; } } } } /// /// 侧边按钮埋点 /// /// 按钮名字 private void TabControlDataTracking(string tag) { switch (tag) { case "TabItemOutLine": DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.LeftSideBar, "LeftSideBar_Btn", "Btn_LeftSideBar_Outline"); break; case "TabItemThumbnail": DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.LeftSideBar, "LeftSideBar_Btn", "Btn_LeftSideBar_Thumbnail"); break; case "TabItemBookMark": DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.LeftSideBar, "LeftSideBar_Btn", "Btn_LeftSideBar_BookMark"); break; case "TabItemAnnotation": DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.LeftSideBar, "LeftSideBar_Btn", "Btn_LeftSideBar_Annotation"); break; case "TabItemSearch": DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.LeftSideBar, "LeftSideBar_Btn", "Btn_LeftSideBar_Search"); break; } } private void InitString() { Tip_Annote = App.MainPageLoader.GetString("ViewTopToolbar_Annotation"); Tip_OutLine = App.MainPageLoader.GetString("Outline_Title"); Tip_BookMark = App.MainPageLoader.GetString("Bookmark_Title"); Tip_Search = App.MainPageLoader.GetString("ViewRightMenu_Search"); Tip_Thumbnail = App.MainPageLoader.GetString("Thumbnails_Title"); } /// /// 初始化名称-视图字典 /// private void InitDictionartViewNameByTabItem(ref Dictionary viewNameByTabItem) { //绑定tabitem名字和对应的View控件名称 viewNameByTabItem.Add("TabItemThumbnail", "PageEditContent"); viewNameByTabItem.Add("TabItemOutLine", "OutLineControl"); viewNameByTabItem.Add("TabItemBookMark", "BookmarkContent"); viewNameByTabItem.Add("TabItemAnnotation", "AnnotationContent"); viewNameByTabItem.Add("TabItemSearch", "SearchContent"); viewNameByTabItem.Add("TabItemForm", ""); viewNameByTabItem.Add("TabItemSign", ""); } /// /// 导航至目标TabItem /// /// private void EnterSelectedBar(string currentBar) { //增加判空逻辑 if (!string.IsNullOrEmpty(currentBar)) { CurrentBar = currentBar; NavigationParameters param = new NavigationParameters(); param.Add(ParameterNames.PDFViewer, pdfViewer); param.Add(ParameterNames.ViewContentViewModel, viewContentViewModel); if (currentBar == "TabItemThumbnail") { param.Add(ParameterNames.BOTAThumb, true); } if (viewNameByTabItem.ContainsKey(currentBar)) { regions.RequestNavigate(BOTAContentRegionName, viewNameByTabItem[currentBar], param); var views = regions.Regions[BOTAContentRegionName].Views; var search = views.FindFirst(x => x is SearchContent); if (search is SearchContent searchContent) { viewContentViewModel.SearchTextFocus(searchContent); } } //增加判空逻辑 if (pdfViewer != null && pdfViewer.Document != null) { var info = SettingHelper.GetFileInfo(pdfViewer.Document.FilePath); if (info != null) { info.BOTASelectedTab = currentBar; info.BOTASelectedInex = SelectedIndex; SettingHelper.SetFileInfo(info); } } } } /// /// 根据缓存判断,如果记录需要展开BOTA 则还原上一次的展开状态 /// public void OpenBOTA() { //记录上一次BOTA展开情况 if (Settings.Default.AppProperties.InitialVIew.RememberBOTA) { //如果是加密文档 则先不展开,解密后再展开 if (pdfViewer.Document.IsLocked) { return; } var info = SettingHelper.GetFileInfo(pdfViewer.Document.FilePath); //避免新文档因打开文件没有selectedTab信息导致崩溃 if (info != null && !string.IsNullOrEmpty(info.BOTASelectedTab)) { SelectedIndex = info.BOTASelectedInex; EnterSelectedBar(info.BOTASelectedTab); viewContentViewModel.OpenBOTA = true; } } } #region Navigate public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { } public void OnNavigatedTo(NavigationContext navigationContext) { var contentViewModel = navigationContext.Parameters[ParameterNames.ViewContentViewModel] as ViewContentViewModel; if (contentViewModel != null) { viewContentViewModel = contentViewModel; contentViewModel.botaViewModel = this; } var pdfview = navigationContext.Parameters[ParameterNames.PDFViewer] as CPDFViewer; if (pdfview != null) { pdfViewer = pdfview; } //大纲和文档同时打开 if (Settings.Default.AppProperties.InitialVIew.ShowOutLine && pdfViewer.Document.GetOutlineList().Count > 0) { SelectedIndex = 2; EnterSelectedBar("TabItemOutLine"); viewContentViewModel.OpenBOTA = true; } //确认是否要展开BOTA OpenBOTA(); } #endregion Navigate } }