Browse Source

视图-显示模式

OYXH\oyxh 2 years ago
parent
commit
ca59cd8cec

+ 1 - 1
PDF Office/App.xaml.cs

@@ -50,7 +50,7 @@ namespace PDF_Office
         public static List<string> OpenedFileList = new List<string>();
 
         public static bool IsFirstOpen = true;
-
+        public static bool IsBookMode = false;
         public App()
         {
 #if !DEBUG

+ 71 - 1
PDF Office/Styles/RadioButtonStyle.xaml

@@ -50,7 +50,77 @@
         <Setter Property="BorderBrush" Value="{StaticResource RadioButton.Static.Border}" />
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />
         <Setter Property="BorderThickness" Value="0" />
-        <Setter Property="Width" Value="72" />
+        <Setter Property="Width" Value="60" />
+        <Setter Property="Height" Value="80" />
+        <Setter Property="HorizontalContentAlignment" Value="Center" />
+        <Setter Property="VerticalContentAlignment" Value="Center" />
+        <Setter Property="Template">
+            <Setter.Value>
+                <ControlTemplate TargetType="{x:Type RadioButton}">
+                    <Grid
+                        x:Name="templateRoot"
+                        Background="Transparent"
+                        SnapsToDevicePixels="True">
+                        <Border
+                            x:Name="radioButtonBorder"
+                            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
+                            Background="{TemplateBinding Background}"
+                            BorderBrush="{TemplateBinding BorderBrush}"
+                            BorderThickness="{TemplateBinding BorderThickness}">
+                            <Rectangle
+                                x:Name="optionMark"
+                                Width="{TemplateBinding Width}"
+                                Height="{TemplateBinding Height}"
+                                Opacity="0" />
+                        </Border>
+                        <ContentPresenter
+                            x:Name="contentPresenter"
+                            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
+                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
+                            Focusable="False"
+                            RecognizesAccessKey="True"
+                            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
+                    </Grid>
+                    <ControlTemplate.Triggers>
+                        <Trigger Property="HasContent" Value="true">
+                            <Setter Property="FocusVisualStyle" Value="{StaticResource OptionMarkFocusVisual}" />
+                            <Setter Property="Padding" Value="4,-1,0,0" />
+                        </Trigger>
+                        <Trigger Property="IsMouseOver" Value="true">
+                            <Setter TargetName="radioButtonBorder" Property="Background" Value="{StaticResource RadioButton.MouseOver.Background}" />
+                            <Setter TargetName="radioButtonBorder" Property="BorderBrush" Value="{StaticResource RadioButton.MouseOver.Border}" />
+                            <Setter TargetName="optionMark" Property="Fill" Value="{StaticResource RadioButton.MouseOver.Glyph}" />
+                        </Trigger>
+                        <Trigger Property="IsEnabled" Value="false">
+                            <Setter TargetName="radioButtonBorder" Property="Background" Value="{StaticResource RadioButton.Disabled.Background}" />
+                            <Setter TargetName="radioButtonBorder" Property="BorderBrush" Value="{StaticResource RadioButton.Disabled.Border}" />
+                            <Setter TargetName="optionMark" Property="Fill" Value="{StaticResource RadioButton.Disabled.Glyph}" />
+                        </Trigger>
+                        <Trigger Property="IsPressed" Value="true">
+                            <Setter TargetName="radioButtonBorder" Property="Background" Value="{StaticResource RadioButton.Pressed.Background}" />
+                            <Setter TargetName="radioButtonBorder" Property="BorderBrush" Value="{StaticResource RadioButton.Pressed.Border}" />
+                            <Setter TargetName="optionMark" Property="Fill" Value="{StaticResource RadioButton.Pressed.Glyph}" />
+                        </Trigger>
+                        <Trigger Property="IsChecked" Value="true">
+                            <Setter TargetName="optionMark" Property="Opacity" Value="1" />
+                            <Setter TargetName="optionMark" Property="Fill" Value="{StaticResource RadioButton.Pressed.Glyph}" />
+                        </Trigger>
+                        <Trigger Property="IsChecked" Value="{x:Null}">
+                            <Setter TargetName="optionMark" Property="Opacity" Value="0.56" />
+                        </Trigger>
+                    </ControlTemplate.Triggers>
+                </ControlTemplate>
+            </Setter.Value>
+        </Setter>
+    </Style>
+    <Style x:Key="SplitModeViewRadioBtn" TargetType="{x:Type RadioButton}">
+        <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" />
+        <Setter Property="Background" Value="{StaticResource RadioButton.Static.Background}" />
+        <Setter Property="BorderBrush" Value="{StaticResource RadioButton.Static.Border}" />
+        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />
+        <Setter Property="BorderThickness" Value="0" />
+        <Setter Property="Width" Value="78" />
         <Setter Property="Height" Value="80" />
         <Setter Property="HorizontalContentAlignment" Value="Center" />
         <Setter Property="VerticalContentAlignment" Value="Center" />

+ 3 - 2
PDF Office/ViewModels/BottomToolContentViewModel.cs

@@ -182,6 +182,7 @@ namespace PDF_Office.ViewModels
         {
             NavigationParameters param = new NavigationParameters();
             param.Add(ParameterNames.PDFViewer, PDFViewer);
+            param.Add("BottomToolContentViewModel", this);
             region.RequestNavigate(RegionNames.PropertyRegionName, "ViewModularContent", param);
             viewContentViewModel.IsPropertyOpen = true;
         }
@@ -409,7 +410,7 @@ namespace PDF_Office.ViewModels
             return false;
         }
 
-        private void PDFViewer_InfoChanged(object sender, KeyValuePair<string, object> e)
+        public void PDFViewer_InfoChanged(object sender, KeyValuePair<string, object> e)
         {
             if (e.Key == "PageNum")
             {
@@ -467,7 +468,7 @@ namespace PDF_Office.ViewModels
             }
         }
 
-        private void SetModeView()
+        public void SetModeView()
         {
             if (PDFViewer != null)
             {

+ 301 - 12
PDF Office/ViewModels/PropertyPanel/ViewModularContentViewModel.cs

@@ -1,5 +1,10 @@
-using ComPDFKitViewer.PdfViewer;
+using ComPDFKitViewer;
+using ComPDFKitViewer.PdfViewer;
+using Microsoft.Office.Interop.Word;
+using PDF_Office.Helper;
 using PDF_Office.Model;
+using PDF_Office.Views;
+using PDFSettings.Settings;
 using Prism.Commands;
 using Prism.Mvvm;
 using Prism.Regions;
@@ -9,38 +14,257 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Forms;
 
 namespace PDF_Office.ViewModels.PropertyPanel
 {
     public class ViewModularContentViewModel : BindableBase, INavigationAware
     {
-        public IRegionManager region;
+        private IRegionManager region;
+
+        private IDialogService dialogs;
+
+        //记录 单页 双页  书本模式
+        private ViewMode viewmode = ViewMode.Single;
 
-        public IDialogService dialogs;
         public CPDFViewer PDFViewer { get; set; }
+        public BottomToolContentViewModel BottomToolContentViewModel { get; set; }
         public string SplitScreenViewRegionName { get; set; }
 
+        private Visibility splitScreenViewVisible = Visibility.Collapsed;
+
+        /// <summary>
+        /// 控制Content的显示 用于显示分屏的模块
+        /// </summary>
+        public Visibility SplitScreenViewVisible
+        {
+            get { return splitScreenViewVisible; }
+            set
+            {
+                SetProperty(ref splitScreenViewVisible, value);
+            }
+        }
+
+        private bool isContinue;
+
+        public bool IsContinue
+        {
+            get { return isContinue; }
+            set
+            {
+                SetProperty(ref isContinue, value);
+                BottomToolContentViewModel.SetModeView();
+            }
+        }
+
+        private bool isPagesBreak = true;
+
+        public bool IsPagesBreak
+        {
+            get { return isPagesBreak; }
+            set
+            {
+                SetProperty(ref isPagesBreak, value);
+            }
+        }
+
+        private bool isSingleView;
+
+        public bool IsSingleView
+        {
+            get { return isSingleView; }
+            set
+            {
+                SetProperty(ref isSingleView, value);
+                if (value)
+                {
+                    SetModeView();
+                }
+            }
+        }
+
+        private bool isTwoPageView;
+
+        public bool IsTwoPageView
+        {
+            get { return isTwoPageView; }
+            set
+            {
+                SetProperty(ref isTwoPageView, value);
+                if (value)
+                {
+                    SetModeView();
+                }
+            }
+        }
+
+        private bool isBookModeView;
+
+        public bool IsBookModeView
+        {
+            get { return isBookModeView; }
+            set
+            {
+                SetProperty(ref isBookModeView, value);
+                if (value)
+                {
+                    SetModeView();
+                }
+            }
+        }
+
         public DelegateCommand<object> VerticalSplitScreenCommand { get; set; }
+        public DelegateCommand<object> DisableCommand { get; set; }
+
+        public DelegateCommand<object> SinglePageCommand { get; set; }
+        public DelegateCommand<object> TwoPageCommand { get; set; }
+        public DelegateCommand<object> BookModeCommand { get; set; }
+        public DelegateCommand<object> chkContinueCommand { get; set; }
+        public DelegateCommand<object> chkPagesBreakCommand { get; set; }
 
         public ViewModularContentViewModel(IRegionManager regionManager, IDialogService dialogService)
         {
             region = regionManager;
             dialogs = dialogService;
+            //未显示时无法注册上Region名称
+            SplitScreenViewVisible = Visibility.Visible;
             SplitScreenViewRegionName = RegionNames.SplitScreenViewRegionName;
+
+            SplitScreenViewVisible = Visibility.Collapsed;
+
             VerticalSplitScreenCommand = new DelegateCommand<object>(VerticalSplitScreenEvent);
+            DisableCommand = new DelegateCommand<object>(DisableEvent);
+            SinglePageCommand = new DelegateCommand<object>(SinglePageEvent);
+            TwoPageCommand = new DelegateCommand<object>(TwoPageEvent);
+            BookModeCommand = new DelegateCommand<object>(BookModeEvent);
+            chkContinueCommand = new DelegateCommand<object>(chkContinueEvent);
+            chkPagesBreakCommand = new DelegateCommand<object>(chkPagesBreakEvent);
+        }
 
-            //System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
-            //{
-            //    NavigationParameters parameters = new NavigationParameters();
-            //    parameters.Add(ParameterNames.PDFViewer, PDFViewer);
-            //    parameters.Add(ParameterNames.ViewContentViewModel, this);
-            //    region.RequestNavigate(RegionNames.SplitScreenViewRegionName, "SplitScreenView", parameters);
-            //}
-            //));
+        private void chkPagesBreakEvent(object obj)
+        {
+            if (IsPagesBreak)
+            {
+                PDFViewer.SetPageSpacing(8);
+                IsPagesBreak = true;
+            }
+            else
+            {
+                PDFViewer.SetPageSpacing(0);
+                IsPagesBreak = false;
+            }
+            SaveMode(IsPagesBreak);
         }
 
+        public void SetModeView()
+        {
+            if (PDFViewer != null)
+            {
+                if (IsContinue)
+                {
+                    if (IsSingleView)
+                    {
+                        PDFViewer.ChangeViewMode(ViewMode.SingleContinuous);
+                    }
+                    else if (IsTwoPageView)
+                    {
+                        PDFViewer.ChangeViewMode(ViewMode.DoubleContinuous);
+                    }
+                    else
+                    {
+                        PDFViewer.ChangeViewMode(ViewMode.BookContinuous);
+                    }
+                }
+                else
+                {
+                    if (IsSingleView)
+                    {
+                        PDFViewer.ChangeViewMode(ViewMode.Single);
+                    }
+                    else if (IsTwoPageView)
+                    {
+                        PDFViewer.ChangeViewMode(ViewMode.Double);
+                    }
+                    else
+                    {
+                        PDFViewer.ChangeViewMode(ViewMode.Book);
+                    }
+                }
+            }
+            SaveMode(PDFViewer.ModeView);
+        }
+
+        /// <summary>
+        /// 连续滚动
+        /// </summary>
+        /// <param name="obj"></param>
+        private void chkContinueEvent(object obj)
+        {
+            SetModeView();
+            //SaveMode(PDFViewer.ModeView);
+        }
+
+        private void BookModeEvent(object obj)
+        {
+            SetModeView();
+        }
+
+        private void TwoPageEvent(object obj)
+        {
+            SetModeView();
+        }
+
+        /// <summary>
+        /// 显示模式-单页
+        /// </summary>
+        /// <param name="obj"></param>
+        private void SinglePageEvent(object obj)
+        {
+            SetModeView();
+        }
+
+        /// <summary>
+        /// 保存模式
+        /// </summary>
+        /// <param name="modeView"></param>
+        private void SaveMode(object modeView)
+        {
+            OpenFileInfo fileInfo = SettingHelper.GetFileInfo(PDFViewer.Document.FilePath);
+            if (fileInfo != null)
+            {
+                if (modeView is SplitMode)
+                {
+                    fileInfo.LastSplitMode = PDFViewer.Mode;
+                }
+                else if (modeView is ViewMode)
+                {
+                    fileInfo.LastViewMode = PDFViewer.ModeView;
+                }
+                else if (modeView is bool)
+                {
+                    fileInfo.LastPageSpace = (bool)modeView;
+                }
+                SettingHelper.SetFileInfo(fileInfo);
+            }
+        }
+
+        /// <summary>
+        /// 分屏视图-单屏
+        /// </summary>
+        /// <param name="obj"></param>
+        private void DisableEvent(object obj)
+        {
+            SplitScreenViewVisible = Visibility.Collapsed;
+        }
+
+        /// <summary>
+        /// 分屏视图-垂直
+        /// </summary>
+        /// <param name="obj"></param>
         private void VerticalSplitScreenEvent(object obj)
         {
+            SplitScreenViewVisible = Visibility.Visible;
             NavigationParameters param = new NavigationParameters();
             param.Add(ParameterNames.PDFViewer, PDFViewer);
             region.RequestNavigate(RegionNames.SplitScreenViewRegionName, "SplitScreenView", param);
@@ -58,10 +282,75 @@ namespace PDF_Office.ViewModels.PropertyPanel
         public void OnNavigatedTo(NavigationContext navigationContext)
         {
             var pdfview = navigationContext.Parameters[ParameterNames.PDFViewer] as CPDFViewer;
-            if (pdfview != null)
+            var btnTool = navigationContext.Parameters["BottomToolContentViewModel"] as BottomToolContentViewModel;
+            if (pdfview != null && btnTool != null)
             {
+                BottomToolContentViewModel = btnTool;
                 PDFViewer = pdfview;
             }
+            //if (PDFViewer.ModeView == ComPDFKitViewer.ViewMode.SingleContinuous
+            //    || PDFViewer.ModeView == ComPDFKitViewer.ViewMode.DoubleContinuous
+            //    || PDFViewer.ModeView == ComPDFKitViewer.ViewMode.BookContinuous)
+            //{
+            //    isContinue = true;
+            //}
+            //else
+            //{
+            //    isContinue = false;
+            //}
+            IsSingleView = BottomToolContentViewModel.IsSingleView;
+            IsTwoPageView = BottomToolContentViewModel.IsDoubleView;
+            IsBookModeView = BottomToolContentViewModel.IsBookMode;
+            IsContinue = BottomToolContentViewModel.IsContinue;
+            PDFViewer.InfoChanged += PDFViewer_InfoChanged;
+        }
+
+        private void PDFViewer_InfoChanged(object sender, KeyValuePair<string, object> e)
+        {
+            if (e.Key == "ViewMode")
+            {
+                GetModeView((ViewMode)e.Value);
+            }
+        }
+
+        private void GetModeView(ViewMode mode)
+        {
+            if ((int)mode % 2 == 0)
+            {
+                if (!IsContinue)
+                {
+                    IsContinue = true;
+                }
+            }
+            else
+            {
+                if (IsContinue)
+                {
+                    IsContinue = false;
+                }
+            }
+
+            if ((int)mode <= 2)
+            {
+                if (!isSingleView)
+                {
+                    IsSingleView = true;
+                }
+            }
+            else if ((int)mode <= 4)
+            {
+                if (!isTwoPageView)
+                {
+                    IsTwoPageView = true;
+                }
+            }
+            else
+            {
+                if (!isBookModeView)
+                {
+                    IsBookModeView = true;
+                }
+            }
         }
     }
 }

+ 2 - 2
PDF Office/Views/BOTA/BookmarkContent.xaml

@@ -41,7 +41,7 @@
                             Grid.Column="0"
                             Width="16"
                             Height="16"
-                            Source="\Resources\BOTA\empty_bookmark.png" />
+                            Source="pack://application:,,,/Resources/BOTA/empty_bookmark.png" />
                         <TextBox
                             Name="TxtTitleInput"
                             Grid.Column="1"
@@ -150,7 +150,7 @@
             <Image
                 Width="140"
                 Height="140"
-                Source="\Resources\BOTA\empty_bookmark.png" />
+                Source="pack://application:,,,/Resources/BOTA/empty_bookmark.png" />
             <TextBlock
                 Name="txtEmpty"
                 Margin="0,12,0,0"

File diff suppressed because it is too large
+ 55 - 28
PDF Office/Views/PropertyPanel/ViewModularContent.xaml


+ 19 - 0
PDF Office/Views/PropertyPanel/ViewModularContent.xaml.cs

@@ -24,5 +24,24 @@ namespace PDF_Office.Views.PropertyPanel
         {
             InitializeComponent();
         }
+
+        private void RbtnReadMode_Click(object sender, RoutedEventArgs e)
+        {
+            RbtnReadMode.IsChecked = false;
+            var window = Window.GetWindow(this) as MainWindow;
+            if (window != null)
+            {
+                var main = window.TabablzControl.SelectedItem as MainContent;
+                if (main != null)
+                {
+                    var mainContent =  main.ContentMain.Content as ViewContent;
+                    if (mainContent != null)
+                    {
+
+                    }
+                    //main.GetCurrentViewer()?.MenuEnterReadMode_Click(null, null);
+                }
+            }
+        }
     }
 }