This commit is contained in:
PrefacedCorg
2026-04-26 09:12:26 +08:00
parent 24cbaf69ea
commit c4657ebb86
17 changed files with 2149 additions and 3748 deletions
@@ -122,13 +122,13 @@
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Pinned}" />
</ui:SettingsCard.HeaderIcon>
<ikw:SimpleStackPanel Orientation="Horizontal" Spacing="8">
<TextBlock Text="{Binding ElementName=ViewboxFloatingBarScaleTransformValueSlider, Path=Value}"
VerticalAlignment="Center" FontFamily="Consolas"/>
<Slider x:Name="ViewboxFloatingBarScaleTransformValueSlider" Minimum="0.5"
Maximum="1.25" Width="168"
IsSnapToTickEnabled="True" Value="1" TickFrequency="0.05"
TickPlacement="None" AutoToolTipPlacement="None"
ValueChanged="ViewboxFloatingBarScaleTransformValueSlider_ValueChanged" />
<TextBlock Text="{Binding ElementName=ViewboxFloatingBarScaleTransformValueSlider, Path=Value}"
VerticalAlignment="Center" FontFamily="Consolas" Width="40" />
</ikw:SimpleStackPanel>
</ui:SettingsCard>
@@ -137,13 +137,13 @@
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.EaseOfAccess}" />
</ui:SettingsCard.HeaderIcon>
<ikw:SimpleStackPanel Orientation="Horizontal" Spacing="8">
<TextBlock Text="{Binding ElementName=ViewboxFloatingBarOpacityValueSlider, Path=Value, StringFormat={}{0:F2}}"
VerticalAlignment="Center" FontFamily="Consolas"/>
<Slider x:Name="ViewboxFloatingBarOpacityValueSlider" Minimum="0.3"
Maximum="1" Width="168"
IsSnapToTickEnabled="True" Value="1" TickFrequency="0.05"
TickPlacement="None" AutoToolTipPlacement="None"
ValueChanged="ViewboxFloatingBarOpacityValueSlider_ValueChanged" />
<TextBlock Text="{Binding ElementName=ViewboxFloatingBarOpacityValueSlider, Path=Value}"
VerticalAlignment="Center" FontFamily="Consolas" Width="40" />
</ikw:SimpleStackPanel>
</ui:SettingsCard>
@@ -106,6 +106,9 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
ComboBoxEraserDisplayOption.SelectedIndex = settings.Appearance.EraserDisplayOption;
CardEnableTrayIcon.IsOn = settings.Appearance.EnableTrayIcon;
if (BtnHitokotoCustomize != null)
BtnHitokotoCustomize.Visibility = settings.Appearance.ChickenSoupSource == 3 ? Visibility.Visible : Visibility.Collapsed;
}
private MainWindow GetMainWindow() => Application.Current.MainWindow as MainWindow;
@@ -232,6 +235,10 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
{
mw.ViewboxFloatingBarScaleTransform.ScaleX = val > 0.5 && val < 1.25 ? val : val <= 0.5 ? 0.5 : 1.25;
mw.ViewboxFloatingBarScaleTransform.ScaleY = val > 0.5 && val < 1.25 ? val : val <= 0.5 ? 0.5 : 1.25;
if (mw.BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
mw.ViewboxFloatingBarMarginAnimation(60);
else
mw.ViewboxFloatingBarMarginAnimation(100, true);
}
}
@@ -249,6 +256,11 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
if (!_isLoaded) return;
SettingsManager.Settings.Appearance.ViewboxFloatingBarOpacityInPPTValue = ViewboxFloatingBarOpacityInPPTValueSlider.Value;
SettingsManager.SaveSettingsToFile();
var mw = GetMainWindow();
if (mw != null && mw.currentMode == 2)
{
mw.ViewboxFloatingBar.Opacity = ViewboxFloatingBarOpacityInPPTValueSlider.Value;
}
}
#endregion
@@ -0,0 +1,353 @@
<ui:Page x:Class="Ink_Canvas.Windows.SettingsViews.Pages.AutomationPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Ink_Canvas.Windows.SettingsViews.Pages"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:ikw="http://schemas.inkore.net/lib/ui/wpf"
xmlns:i18n="clr-namespace:Ink_Canvas.MarkupExtensions"
xmlns:controls="clr-namespace:Ink_Canvas.Controls;assembly=InkCanvas.Controls"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
Title="自动化">
<ScrollViewer PanningMode="VerticalFirst">
<Grid Margin="59,0,59,0">
<FrameworkElement.Resources>
<sys:Double x:Key="SettingsCardSpacing">4</sys:Double>
<Style x:Key="SettingsSectionHeaderTextBlockStyle"
BasedOn="{StaticResource BodyStrongTextBlockStyle}"
TargetType="TextBlock">
<Style.Setters>
<Setter Property="Margin" Value="1,30,0,6" />
</Style.Setters>
</Style>
</FrameworkElement.Resources>
<Grid>
<ikw:SimpleStackPanel MaxWidth="1000"
HorizontalAlignment="Stretch"
Spacing="{StaticResource SettingsCardSpacing}">
<TextBlock Text="{i18n:I18n Key=AutoFold_Title}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNote"
Header="希沃白板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInEasiNote_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNoteIgnoreDesktopAnno"
Header="希沃白板 (忽略桌面批注)"
Icon="{x:Static ui:SegoeFluentIcons.Clear}"
Toggled="ToggleSwitchAutoFoldInEasiNoteIgnoreDesktopAnno_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiCamera"
Header="希沃视频展台"
Icon="{x:Static ui:SegoeFluentIcons.Camera}"
Toggled="ToggleSwitchAutoFoldInEasiCamera_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNote3"
Header="EasiNote3"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInEasiNote3_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNote3C"
Header="EasiNote3C"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInEasiNote3C_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInEasiNote5C"
Header="EasiNote5C"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInEasiNote5C_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInSeewoPincoTeacher"
Header="Seewo Pinco Teacher"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInSeewoPincoTeacher_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInHiteTouchPro"
Header="鸿合 TouchPro"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInHiteTouchPro_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInHiteLightBoard"
Header="鸿合 光能板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInHiteLightBoard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInHiteCamera"
Header="鸿合 视频展台"
Icon="{x:Static ui:SegoeFluentIcons.Camera}"
Toggled="ToggleSwitchAutoFoldInHiteCamera_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInWxBoardMain"
Header="小白板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInWxBoardMain_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInOldZyBoard"
Header="中银白板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInOldZyBoard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInMSWhiteboard"
Header="Microsoft Whiteboard"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInMSWhiteboard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInAdmoxWhiteboard"
Header="Admox 白板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInAdmoxWhiteboard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInAdmoxBooth"
Header="Admox 展台"
Icon="{x:Static ui:SegoeFluentIcons.Camera}"
Toggled="ToggleSwitchAutoFoldInAdmoxBooth_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInQPoint"
Header="QPoint"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInQPoint_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInYiYunVisualPresenter"
Header="易云展台"
Icon="{x:Static ui:SegoeFluentIcons.Camera}"
Toggled="ToggleSwitchAutoFoldInYiYunVisualPresenter_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInMaxHubWhiteboard"
Header="MaxHub 白板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInMaxHubWhiteboard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldInPPTSlideShow"
Header="PPT 放映"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoFoldInPPTSlideShow_Toggled"/>
<TextBlock Text="{i18n:I18n Key=AutoKill_Title}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillPptService"
Header="PPT 服务"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillPptService_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillEasiNote"
Header="希沃白板"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillEasiNote_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillHiteAnnotation"
Header="鸿合批注"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillHiteAnnotation_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillVComYouJiao"
Header="VCom 幼教"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillVComYouJiao_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillSeewoLauncher2DesktopAnnotation"
Header="希沃桌面批注"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillSeewoLauncher2DesktopAnnotation_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillInkCanvas"
Header="InkCanvas"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillInkCanvas_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillICA"
Header="ICA"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillICA_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoKillIDT"
Header="IDT"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchAutoKillIDT_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoEnterAnnotationAfterKillHite"
Header="杀进程后进入批注模式"
Icon="{x:Static ui:SegoeFluentIcons.Edit}"
Toggled="ToggleSwitchAutoEnterAnnotationAfterKillHite_Toggled"/>
<TextBlock Text="{i18n:I18n Key=AutoFold_Mode}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardAutoEnterAnnotationModeWhenExitFoldMode"
Header="退出收纳时进入批注模式"
Icon="{x:Static ui:SegoeFluentIcons.Edit}"
Toggled="ToggleSwitchAutoEnterAnnotationModeWhenExitFoldMode_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldWhenExitWhiteboard"
Header="退出白板时自动收纳"
Icon="{x:Static ui:SegoeFluentIcons.Back}"
Toggled="ToggleSwitchAutoFoldWhenExitWhiteboard_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoFoldAfterPPTSlideShow"
Header="PPT 放映结束后自动收纳"
Icon="{x:Static ui:SegoeFluentIcons.Back}"
Toggled="ToggleSwitchAutoFoldAfterPPTSlideShow_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardKeepFoldAfterSoftwareExit"
Header="软件退出后保持收纳"
Icon="{x:Static ui:SegoeFluentIcons.Pin}"
Toggled="ToggleSwitchKeepFoldAfterSoftwareExit_Toggled"/>
<TextBlock Text="{i18n:I18n Key=AutoSave_Title}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardSaveScreenshotsInDateFolders"
Header="截图按日期分文件夹"
Icon="{x:Static ui:SegoeFluentIcons.Folder}"
Toggled="ToggleSwitchSaveScreenshotsInDateFolders_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoSaveStrokesAtScreenshot"
Header="截图时自动保存墨迹"
Icon="{x:Static ui:SegoeFluentIcons.Save}"
Toggled="ToggleSwitchAutoSaveStrokesAtScreenshot_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoSaveStrokesAtClear"
Header="清屏时自动截图"
Icon="{x:Static ui:SegoeFluentIcons.Save}"
Toggled="ToggleSwitchAutoSaveStrokesAtClear_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardSaveStrokesAsXML"
Header="墨迹保存为 XML"
Icon="{x:Static ui:SegoeFluentIcons.Save}"
Toggled="ToggleSwitchSaveStrokesAsXML_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardEnableAutoSaveStrokes"
Header="定时自动保存墨迹"
Icon="{x:Static ui:SegoeFluentIcons.Save}"
Toggled="ToggleSwitchEnableAutoSaveStrokes_Toggled"/>
<ui:SettingsCard Header="自动保存间隔">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.QuietHours}"/>
</ui:SettingsCard.HeaderIcon>
<ComboBox x:Name="ComboBoxAutoSaveStrokesInterval"
SelectionChanged="ComboBoxAutoSaveStrokesInterval_SelectionChanged">
<ComboBoxItem Content="1 分钟" Tag="1"/>
<ComboBoxItem Content="3 分钟" Tag="3"/>
<ComboBoxItem Content="5 分钟" Tag="5"/>
<ComboBoxItem Content="10 分钟" Tag="10"/>
<ComboBoxItem Content="30 分钟" Tag="30"/>
</ComboBox>
</ui:SettingsCard>
<controls:LabeledSettingsCard x:Name="CardAutoDelSavedFiles"
Header="自动删除旧保存文件"
Icon="{x:Static ui:SegoeFluentIcons.Delete}"
Toggled="ToggleSwitchAutoDelSavedFiles_Toggled"/>
<ui:SettingsCard Header="自动删除天数阈值">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Calendar}"/>
</ui:SettingsCard.HeaderIcon>
<ComboBox x:Name="ComboBoxAutoDelSavedFilesDaysThreshold"
SelectionChanged="ComboBoxAutoDelSavedFilesDaysThreshold_SelectionChanged">
<ComboBoxItem Content="7"/>
<ComboBoxItem Content="14"/>
<ComboBoxItem Content="30"/>
<ComboBoxItem Content="60"/>
<ComboBoxItem Content="90"/>
</ComboBox>
</ui:SettingsCard>
<ui:SettingsCard Header="自动化最小笔画数">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Calculator}"/>
</ui:SettingsCard.HeaderIcon>
<Slider x:Name="SideControlMinimumAutomationSlider" Minimum="1" Maximum="50" Width="200" ValueChanged="SideControlMinimumAutomationSlider_ValueChanged"/>
</ui:SettingsCard>
<controls:LabeledSettingsCard x:Name="CardSaveFullPageStrokes"
Header="保存全页墨迹"
Icon="{x:Static ui:SegoeFluentIcons.Save}"
Toggled="ToggleSwitchSaveFullPageStrokes_Toggled"/>
<TextBlock Text="悬浮窗拦截" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardFloatingWindowInterceptorEnabled"
Header="启用悬浮窗拦截"
Icon="{x:Static ui:SegoeFluentIcons.Shield}"
Toggled="ToggleSwitchFloatingWindowInterceptorEnabled_Toggled"/>
<ui:SettingsExpander Header="拦截规则"
Visibility="{Binding IsOn, ElementName=CardFloatingWindowInterceptorEnabled, Converter={StaticResource BooleanToVisibilityConverter}}"
IsExpanded="{Binding IsOn, ElementName=CardFloatingWindowInterceptorEnabled, Mode=OneWay}">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Filter}"/>
</ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Items>
<ui:SettingsCard Header="希沃白板 3">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoWhiteboard3Floating" Toggled="ToggleSwitchSeewoWhiteboard3Floating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="希沃白板 5">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoWhiteboard5Floating" Toggled="ToggleSwitchSeewoWhiteboard5Floating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="希沃白板 5C">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoWhiteboard5CFloating" Toggled="ToggleSwitchSeewoWhiteboard5CFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="希沃品课侧栏">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoPincoSideBarFloating" Toggled="ToggleSwitchSeewoPincoSideBarFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="希沃品课画笔">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoPincoDrawingFloating" Toggled="ToggleSwitchSeewoPincoDrawingFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="希沃PPT小工具">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoPPTFloating" Toggled="ToggleSwitchSeewoPPTFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="AiClass">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardAiClassFloating" Toggled="ToggleSwitchAiClassFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="鸿合屏幕书写">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardHiteAnnotationFloating" Toggled="ToggleSwitchHiteAnnotationFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="畅言智慧课堂">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardChangYanFloating" Toggled="ToggleSwitchChangYanFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="畅言PPT">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardChangYanPptFloating" Toggled="ToggleSwitchChangYanPptFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="天喻教育云">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardIntelligentClassFloating" Toggled="ToggleSwitchIntelligentClassFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="希沃桌面画笔">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoDesktopAnnotationFloating" Toggled="ToggleSwitchSeewoDesktopAnnotationFloating_Toggled"/>
</ui:SettingsCard>
<ui:SettingsCard Header="希沃桌面侧栏">
<ui:SettingsCard.HeaderIcon><ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/></ui:SettingsCard.HeaderIcon>
<controls:LabeledSettingsCard x:Name="CardSeewoDesktopSideBarFloating" Toggled="ToggleSwitchSeewoDesktopSideBarFloating_Toggled"/>
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
<TextBlock Text="文件关联" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<ikw:SimpleStackPanel Orientation="Horizontal" Spacing="8" HorizontalAlignment="Left">
<Button x:Name="BtnRegisterFileAssociation" Content="注册文件关联" Click="BtnRegisterFileAssociation_Click"/>
<Button x:Name="BtnUnregisterFileAssociation" Content="取消文件关联" Click="BtnUnregisterFileAssociation_Click"/>
<Button x:Name="BtnCheckFileAssociation" Content="检查关联状态" Click="BtnCheckFileAssociation_Click"/>
</ikw:SimpleStackPanel>
<TextBlock x:Name="TextBlockFileAssociationStatus" Margin="0,4,0,0"/>
<Rectangle Height="48" />
</ikw:SimpleStackPanel>
</Grid>
</Grid>
</ScrollViewer>
</ui:Page>
@@ -0,0 +1,647 @@
using Ink_Canvas.Helpers;
using Ink_Canvas.Windows.SettingsViews.Helpers;
using System;
using System.Windows;
using System.Windows.Controls;
using Page = iNKORE.UI.WPF.Modern.Controls.Page;
namespace Ink_Canvas.Windows.SettingsViews.Pages
{
public partial class AutomationPage : Page
{
private bool _isLoaded = false;
public AutomationPage()
{
InitializeComponent();
Loaded += AutomationPage_Loaded;
Unloaded += AutomationPage_Unloaded;
}
private void AutomationPage_Loaded(object sender, RoutedEventArgs e)
{
LoadSettings();
_isLoaded = true;
}
private void AutomationPage_Unloaded(object sender, RoutedEventArgs e)
{
_isLoaded = false;
}
private MainWindow GetMainWindow() => Application.Current.MainWindow as MainWindow;
private void LoadSettings()
{
_isLoaded = false;
var auto = SettingsManager.Settings.Automation;
CardAutoFoldInEasiNote.IsOn = auto.IsAutoFoldInEasiNote;
CardAutoFoldInEasiNoteIgnoreDesktopAnno.IsOn = auto.IsAutoFoldInEasiNoteIgnoreDesktopAnno;
CardAutoFoldInEasiCamera.IsOn = auto.IsAutoFoldInEasiCamera;
CardAutoFoldInEasiNote3.IsOn = auto.IsAutoFoldInEasiNote3;
CardAutoFoldInEasiNote3C.IsOn = auto.IsAutoFoldInEasiNote3C;
CardAutoFoldInEasiNote5C.IsOn = auto.IsAutoFoldInEasiNote5C;
CardAutoFoldInSeewoPincoTeacher.IsOn = auto.IsAutoFoldInSeewoPincoTeacher;
CardAutoFoldInHiteTouchPro.IsOn = auto.IsAutoFoldInHiteTouchPro;
CardAutoFoldInHiteLightBoard.IsOn = auto.IsAutoFoldInHiteLightBoard;
CardAutoFoldInHiteCamera.IsOn = auto.IsAutoFoldInHiteCamera;
CardAutoFoldInWxBoardMain.IsOn = auto.IsAutoFoldInWxBoardMain;
CardAutoFoldInOldZyBoard.IsOn = auto.IsAutoFoldInOldZyBoard;
CardAutoFoldInMSWhiteboard.IsOn = auto.IsAutoFoldInMSWhiteboard;
CardAutoFoldInAdmoxWhiteboard.IsOn = auto.IsAutoFoldInAdmoxWhiteboard;
CardAutoFoldInAdmoxBooth.IsOn = auto.IsAutoFoldInAdmoxBooth;
CardAutoFoldInQPoint.IsOn = auto.IsAutoFoldInQPoint;
CardAutoFoldInYiYunVisualPresenter.IsOn = auto.IsAutoFoldInYiYunVisualPresenter;
CardAutoFoldInMaxHubWhiteboard.IsOn = auto.IsAutoFoldInMaxHubWhiteboard;
CardAutoFoldInPPTSlideShow.IsOn = auto.IsAutoFoldInPPTSlideShow;
CardAutoKillPptService.IsOn = auto.IsAutoKillPptService;
CardAutoKillEasiNote.IsOn = auto.IsAutoKillEasiNote;
CardAutoKillHiteAnnotation.IsOn = auto.IsAutoKillHiteAnnotation;
CardAutoKillVComYouJiao.IsOn = auto.IsAutoKillVComYouJiao;
CardAutoKillSeewoLauncher2DesktopAnnotation.IsOn = auto.IsAutoKillSeewoLauncher2DesktopAnnotation;
CardAutoKillInkCanvas.IsOn = auto.IsAutoKillInkCanvas;
CardAutoKillICA.IsOn = auto.IsAutoKillICA;
CardAutoKillIDT.IsOn = auto.IsAutoKillIDT;
CardAutoEnterAnnotationAfterKillHite.IsOn = auto.IsAutoEnterAnnotationAfterKillHite;
CardAutoEnterAnnotationModeWhenExitFoldMode.IsOn = auto.IsAutoEnterAnnotationModeWhenExitFoldMode;
CardAutoFoldWhenExitWhiteboard.IsOn = auto.IsAutoFoldWhenExitWhiteboard;
CardAutoFoldAfterPPTSlideShow.IsOn = auto.IsAutoFoldAfterPPTSlideShow;
CardKeepFoldAfterSoftwareExit.IsOn = auto.KeepFoldAfterSoftwareExit;
CardSaveScreenshotsInDateFolders.IsOn = auto.IsSaveScreenshotsInDateFolders;
CardAutoSaveStrokesAtScreenshot.IsOn = auto.IsAutoSaveStrokesAtScreenshot;
CardAutoSaveStrokesAtClear.IsOn = auto.IsAutoSaveStrokesAtClear;
CardSaveStrokesAsXML.IsOn = auto.IsSaveStrokesAsXML;
CardEnableAutoSaveStrokes.IsOn = auto.IsEnableAutoSaveStrokes;
var interval = auto.AutoSaveStrokesIntervalMinutes;
foreach (ComboBoxItem item in ComboBoxAutoSaveStrokesInterval.Items)
{
if (item.Tag != null && int.TryParse(item.Tag.ToString(), out int tagVal) && tagVal == interval)
{
ComboBoxAutoSaveStrokesInterval.SelectedItem = item;
break;
}
}
CardAutoDelSavedFiles.IsOn = auto.AutoDelSavedFiles;
ComboBoxAutoDelSavedFilesDaysThreshold.SelectedIndex = auto.AutoDelSavedFilesDaysThreshold switch
{
7 => 0, 14 => 1, 30 => 2, 60 => 3, 90 => 4, _ => 2
};
SideControlMinimumAutomationSlider.Value = auto.MinimumAutomationStrokeNumber;
CardSaveFullPageStrokes.IsOn = auto.IsSaveFullPageStrokes;
CardFloatingWindowInterceptorEnabled.IsOn = auto.FloatingWindowInterceptor.IsEnabled;
if (auto.FloatingWindowInterceptor.InterceptRules != null)
{
CardSeewoWhiteboard3Floating.IsOn = auto.FloatingWindowInterceptor.InterceptRules.ContainsKey("SeewoWhiteboard3Floating") && auto.FloatingWindowInterceptor.InterceptRules["SeewoWhiteboard3Floating"];
CardSeewoWhiteboard5Floating.IsOn = auto.FloatingWindowInterceptor.InterceptRules.ContainsKey("SeewoWhiteboard5Floating") && auto.FloatingWindowInterceptor.InterceptRules["SeewoWhiteboard5Floating"];
CardSeewoWhiteboard5CFloating.IsOn = auto.FloatingWindowInterceptor.InterceptRules.ContainsKey("SeewoWhiteboard5CFloating") && auto.FloatingWindowInterceptor.InterceptRules["SeewoWhiteboard5CFloating"];
CardSeewoPincoSideBarFloating.IsOn = auto.FloatingWindowInterceptor.InterceptRules.ContainsKey("SeewoPincoSideBarFloating") && auto.FloatingWindowInterceptor.InterceptRules["SeewoPincoSideBarFloating"];
CardSeewoPincoDrawingFloating.IsOn = auto.FloatingWindowInterceptor.InterceptRules.ContainsKey("SeewoPincoDrawingFloating") && auto.FloatingWindowInterceptor.InterceptRules["SeewoPincoDrawingFloating"];
CardSeewoPPTFloating.IsOn = auto.FloatingWindowInterceptor.InterceptRules.ContainsKey("SeewoPPTFloating") && auto.FloatingWindowInterceptor.InterceptRules["SeewoPPTFloating"];
CardAiClassFloating.IsOn = auto.FloatingWindowInterceptor.InterceptRules.ContainsKey("AiClassFloating") && auto.FloatingWindowInterceptor.InterceptRules["AiClassFloating"];
CardHiteAnnotationFloating.IsOn = auto.FloatingWindowInterceptor.InterceptRules.ContainsKey("HiteAnnotationFloating") && auto.FloatingWindowInterceptor.InterceptRules["HiteAnnotationFloating"];
CardChangYanFloating.IsOn = auto.FloatingWindowInterceptor.InterceptRules.ContainsKey("ChangYanFloating") && auto.FloatingWindowInterceptor.InterceptRules["ChangYanFloating"];
CardChangYanPptFloating.IsOn = auto.FloatingWindowInterceptor.InterceptRules.ContainsKey("ChangYanPptFloating") && auto.FloatingWindowInterceptor.InterceptRules["ChangYanPptFloating"];
CardIntelligentClassFloating.IsOn = auto.FloatingWindowInterceptor.InterceptRules.ContainsKey("IntelligentClassFloating") && auto.FloatingWindowInterceptor.InterceptRules["IntelligentClassFloating"];
CardSeewoDesktopAnnotationFloating.IsOn = auto.FloatingWindowInterceptor.InterceptRules.ContainsKey("SeewoDesktopAnnotationFloating") && auto.FloatingWindowInterceptor.InterceptRules["SeewoDesktopAnnotationFloating"];
CardSeewoDesktopSideBarFloating.IsOn = auto.FloatingWindowInterceptor.InterceptRules.ContainsKey("SeewoDesktopSideBarFloating") && auto.FloatingWindowInterceptor.InterceptRules["SeewoDesktopSideBarFloating"];
}
_isLoaded = true;
}
#region AutoFold
private void ToggleSwitchAutoFoldInEasiNote_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInEasiNote = CardAutoFoldInEasiNote.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInEasiNoteIgnoreDesktopAnno_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInEasiNoteIgnoreDesktopAnno = CardAutoFoldInEasiNoteIgnoreDesktopAnno.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchAutoFoldInEasiCamera_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInEasiCamera = CardAutoFoldInEasiCamera.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInEasiNote3_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInEasiNote3 = CardAutoFoldInEasiNote3.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInEasiNote3C_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInEasiNote3C = CardAutoFoldInEasiNote3C.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInEasiNote5C_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInEasiNote5C = CardAutoFoldInEasiNote5C.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInSeewoPincoTeacher_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInSeewoPincoTeacher = CardAutoFoldInSeewoPincoTeacher.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInHiteTouchPro_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInHiteTouchPro = CardAutoFoldInHiteTouchPro.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInHiteLightBoard_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInHiteLightBoard = CardAutoFoldInHiteLightBoard.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInHiteCamera_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInHiteCamera = CardAutoFoldInHiteCamera.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInWxBoardMain_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInWxBoardMain = CardAutoFoldInWxBoardMain.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInOldZyBoard_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInOldZyBoard = CardAutoFoldInOldZyBoard.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInMSWhiteboard_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInMSWhiteboard = CardAutoFoldInMSWhiteboard.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInAdmoxWhiteboard_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInAdmoxWhiteboard = CardAutoFoldInAdmoxWhiteboard.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInAdmoxBooth_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInAdmoxBooth = CardAutoFoldInAdmoxBooth.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInQPoint_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInQPoint = CardAutoFoldInQPoint.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInYiYunVisualPresenter_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInYiYunVisualPresenter = CardAutoFoldInYiYunVisualPresenter.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInMaxHubWhiteboard_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldInMaxHubWhiteboard = CardAutoFoldInMaxHubWhiteboard.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.StartOrStoptimerCheckAutoFold();
}
private void ToggleSwitchAutoFoldInPPTSlideShow_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
var auto = SettingsManager.Settings.Automation;
bool previousState = auto.IsAutoFoldInPPTSlideShow;
auto.IsAutoFoldInPPTSlideShow = CardAutoFoldInPPTSlideShow.IsOn;
if (previousState != auto.IsAutoFoldInPPTSlideShow)
{
LogHelper.WriteLogToFile($"PPT自动收纳设置已变更: {auto.IsAutoFoldInPPTSlideShow}", LogHelper.LogType.Trace);
}
SettingsManager.SaveSettingsToFile();
mw?.StartOrStoptimerCheckAutoFold();
}
#endregion
#region AutoKill
private void UpdateAutoKillTimer()
{
var mw = GetMainWindow();
if (mw == null) return;
var auto = SettingsManager.Settings.Automation;
bool anyKill = auto.IsAutoKillEasiNote || auto.IsAutoKillPptService ||
auto.IsAutoKillHiteAnnotation || auto.IsAutoKillInkCanvas ||
auto.IsAutoKillICA || auto.IsAutoKillIDT || auto.IsAutoKillVComYouJiao ||
auto.IsAutoKillSeewoLauncher2DesktopAnnotation;
mw.UpdateAutoKillProcessTimer(anyKill);
}
private void ToggleSwitchAutoKillPptService_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoKillPptService = CardAutoKillPptService.IsOn;
SettingsManager.SaveSettingsToFile();
UpdateAutoKillTimer();
}
private void ToggleSwitchAutoKillEasiNote_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoKillEasiNote = CardAutoKillEasiNote.IsOn;
SettingsManager.SaveSettingsToFile();
UpdateAutoKillTimer();
}
private void ToggleSwitchAutoKillHiteAnnotation_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoKillHiteAnnotation = CardAutoKillHiteAnnotation.IsOn;
SettingsManager.SaveSettingsToFile();
UpdateAutoKillTimer();
}
private void ToggleSwitchAutoKillVComYouJiao_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoKillVComYouJiao = CardAutoKillVComYouJiao.IsOn;
SettingsManager.SaveSettingsToFile();
UpdateAutoKillTimer();
}
private void ToggleSwitchAutoKillSeewoLauncher2DesktopAnnotation_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoKillSeewoLauncher2DesktopAnnotation = CardAutoKillSeewoLauncher2DesktopAnnotation.IsOn;
SettingsManager.SaveSettingsToFile();
UpdateAutoKillTimer();
}
private void ToggleSwitchAutoKillInkCanvas_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoKillInkCanvas = CardAutoKillInkCanvas.IsOn;
SettingsManager.SaveSettingsToFile();
UpdateAutoKillTimer();
}
private void ToggleSwitchAutoKillICA_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoKillICA = CardAutoKillICA.IsOn;
SettingsManager.SaveSettingsToFile();
UpdateAutoKillTimer();
}
private void ToggleSwitchAutoKillIDT_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoKillIDT = CardAutoKillIDT.IsOn;
SettingsManager.SaveSettingsToFile();
UpdateAutoKillTimer();
}
private void ToggleSwitchAutoEnterAnnotationAfterKillHite_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoEnterAnnotationAfterKillHite = CardAutoEnterAnnotationAfterKillHite.IsOn;
SettingsManager.SaveSettingsToFile();
}
#endregion
#region Fold Mode
private void ToggleSwitchAutoEnterAnnotationModeWhenExitFoldMode_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoEnterAnnotationModeWhenExitFoldMode = CardAutoEnterAnnotationModeWhenExitFoldMode.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchAutoFoldWhenExitWhiteboard_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldWhenExitWhiteboard = CardAutoFoldWhenExitWhiteboard.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchAutoFoldAfterPPTSlideShow_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoFoldAfterPPTSlideShow = CardAutoFoldAfterPPTSlideShow.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchKeepFoldAfterSoftwareExit_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.KeepFoldAfterSoftwareExit = CardKeepFoldAfterSoftwareExit.IsOn;
SettingsManager.SaveSettingsToFile();
}
#endregion
#region Storage & Save
private void ToggleSwitchSaveScreenshotsInDateFolders_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsSaveScreenshotsInDateFolders = CardSaveScreenshotsInDateFolders.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchAutoSaveStrokesAtScreenshot_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoSaveStrokesAtScreenshot = CardAutoSaveStrokesAtScreenshot.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchAutoSaveStrokesAtClear_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsAutoSaveStrokesAtClear = CardAutoSaveStrokesAtClear.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchSaveStrokesAsXML_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsSaveStrokesAsXML = CardSaveStrokesAsXML.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchEnableAutoSaveStrokes_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsEnableAutoSaveStrokes = CardEnableAutoSaveStrokes.IsOn;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.UpdateAutoSaveStrokesTimer();
}
private void ComboBoxAutoSaveStrokesInterval_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!_isLoaded || ComboBoxAutoSaveStrokesInterval.SelectedItem == null) return;
var selectedItem = ComboBoxAutoSaveStrokesInterval.SelectedItem as ComboBoxItem;
if (selectedItem?.Tag != null && int.TryParse(selectedItem.Tag.ToString(), out int intervalMinutes))
{
SettingsManager.Settings.Automation.AutoSaveStrokesIntervalMinutes = intervalMinutes;
SettingsManager.SaveSettingsToFile();
GetMainWindow()?.UpdateAutoSaveStrokesTimer();
}
}
private void ToggleSwitchAutoDelSavedFiles_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.AutoDelSavedFiles = CardAutoDelSavedFiles.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ComboBoxAutoDelSavedFilesDaysThreshold_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.AutoDelSavedFilesDaysThreshold =
int.Parse(((ComboBoxItem)ComboBoxAutoDelSavedFilesDaysThreshold.SelectedItem).Content.ToString());
SettingsManager.SaveSettingsToFile();
}
private void SideControlMinimumAutomationSlider_ValueChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.MinimumAutomationStrokeNumber = (int)SideControlMinimumAutomationSlider.Value;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchSaveFullPageStrokes_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.Automation.IsSaveFullPageStrokes = CardSaveFullPageStrokes.IsOn;
SettingsManager.SaveSettingsToFile();
}
#endregion
#region Floating Window Interceptor
private void ToggleSwitchFloatingWindowInterceptorEnabled_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
if (mw == null) return;
SettingsManager.Settings.Automation.FloatingWindowInterceptor.IsEnabled = CardFloatingWindowInterceptorEnabled.IsOn;
if (mw._floatingWindowInterceptorManager != null)
{
if (SettingsManager.Settings.Automation.FloatingWindowInterceptor.IsEnabled)
mw._floatingWindowInterceptorManager.Start();
else
mw._floatingWindowInterceptorManager.Stop();
}
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchSeewoWhiteboard3Floating_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
GetMainWindow()?.SetInterceptRule(FloatingWindowInterceptor.InterceptType.SeewoWhiteboard3Floating, CardSeewoWhiteboard3Floating.IsOn);
}
private void ToggleSwitchSeewoWhiteboard5Floating_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
GetMainWindow()?.SetInterceptRule(FloatingWindowInterceptor.InterceptType.SeewoWhiteboard5Floating, CardSeewoWhiteboard5Floating.IsOn);
}
private void ToggleSwitchSeewoWhiteboard5CFloating_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
GetMainWindow()?.SetInterceptRule(FloatingWindowInterceptor.InterceptType.SeewoWhiteboard5CFloating, CardSeewoWhiteboard5CFloating.IsOn);
}
private void ToggleSwitchSeewoPincoSideBarFloating_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
GetMainWindow()?.SetInterceptRule(FloatingWindowInterceptor.InterceptType.SeewoPincoSideBarFloating, CardSeewoPincoSideBarFloating.IsOn);
}
private void ToggleSwitchSeewoPincoDrawingFloating_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
GetMainWindow()?.SetInterceptRule(FloatingWindowInterceptor.InterceptType.SeewoPincoDrawingFloating, CardSeewoPincoDrawingFloating.IsOn);
}
private void ToggleSwitchSeewoPPTFloating_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
GetMainWindow()?.SetInterceptRule(FloatingWindowInterceptor.InterceptType.SeewoPPTFloating, CardSeewoPPTFloating.IsOn);
}
private void ToggleSwitchAiClassFloating_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
GetMainWindow()?.SetInterceptRule(FloatingWindowInterceptor.InterceptType.AiClassFloating, CardAiClassFloating.IsOn);
}
private void ToggleSwitchHiteAnnotationFloating_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
GetMainWindow()?.SetInterceptRule(FloatingWindowInterceptor.InterceptType.HiteAnnotationFloating, CardHiteAnnotationFloating.IsOn);
}
private void ToggleSwitchChangYanFloating_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
GetMainWindow()?.SetInterceptRule(FloatingWindowInterceptor.InterceptType.ChangYanFloating, CardChangYanFloating.IsOn);
}
private void ToggleSwitchChangYanPptFloating_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
GetMainWindow()?.SetInterceptRule(FloatingWindowInterceptor.InterceptType.ChangYanPptFloating, CardChangYanPptFloating.IsOn);
}
private void ToggleSwitchIntelligentClassFloating_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
GetMainWindow()?.SetInterceptRule(FloatingWindowInterceptor.InterceptType.IntelligentClassFloating, CardIntelligentClassFloating.IsOn);
}
private void ToggleSwitchSeewoDesktopAnnotationFloating_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
GetMainWindow()?.SetInterceptRule(FloatingWindowInterceptor.InterceptType.SeewoDesktopAnnotationFloating, CardSeewoDesktopAnnotationFloating.IsOn);
}
private void ToggleSwitchSeewoDesktopSideBarFloating_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
GetMainWindow()?.SetInterceptRule(FloatingWindowInterceptor.InterceptType.SeewoDesktopSideBarFloating, CardSeewoDesktopSideBarFloating.IsOn);
}
#endregion
#region File Association
private void BtnRegisterFileAssociation_Click(object sender, RoutedEventArgs e)
{
try
{
bool success = FileAssociationManager.RegisterFileAssociation();
UpdateFileAssociationStatus();
var mw = GetMainWindow();
if (mw != null)
mw.ShowNotification(success ? "文件关联注册成功" : "文件关联注册失败");
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"注册文件关联失败: {ex.Message}", LogHelper.LogType.Error);
UpdateFileAssociationStatus();
}
}
private void BtnUnregisterFileAssociation_Click(object sender, RoutedEventArgs e)
{
try
{
bool success = FileAssociationManager.UnregisterFileAssociation();
UpdateFileAssociationStatus();
var mw = GetMainWindow();
if (mw != null)
mw.ShowNotification(success ? "文件关联已取消" : "取消文件关联失败");
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"取消文件关联失败: {ex.Message}", LogHelper.LogType.Error);
UpdateFileAssociationStatus();
}
}
private void BtnCheckFileAssociation_Click(object sender, RoutedEventArgs e)
{
UpdateFileAssociationStatus();
}
private void UpdateFileAssociationStatus()
{
try
{
bool isRegistered = FileAssociationManager.IsFileAssociationRegistered();
if (isRegistered)
{
TextBlockFileAssociationStatus.Text = "✓ .icstk文件关联已注册";
TextBlockFileAssociationStatus.Foreground = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.LightGreen);
}
else
{
TextBlockFileAssociationStatus.Text = "✗ .icstk文件关联未注册";
TextBlockFileAssociationStatus.Foreground = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.LightCoral);
}
}
catch (Exception ex)
{
TextBlockFileAssociationStatus.Text = "✗ 检查文件关联状态时出错";
TextBlockFileAssociationStatus.Foreground = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.LightCoral);
LogHelper.WriteLogToFile($"检查文件关联状态失败: {ex.Message}", LogHelper.LogType.Error);
}
}
#endregion
}
}
@@ -119,6 +119,9 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
{
SettingsManager.Settings.Canvas.DisablePressure = false;
CardDisablePressure.IsOn = false;
var mw = Application.Current.MainWindow as MainWindow;
if (mw != null && mw.inkCanvas != null)
mw.inkCanvas.DefaultDrawingAttributes.IgnorePressure = false;
}
SettingsManager.SaveSettingsToFile();
}
@@ -133,6 +136,9 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
CardEnablePressureTouchMode.IsOn = false;
}
SettingsManager.SaveSettingsToFile();
var mw = Application.Current.MainWindow as MainWindow;
if (mw != null && mw.inkCanvas != null)
mw.inkCanvas.DefaultDrawingAttributes.IgnorePressure = CardDisablePressure.IsOn;
}
private void ComboBoxEraserSize_SelectionChanged(object sender, SelectionChangedEventArgs e)
@@ -140,6 +146,14 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.EraserSize = ComboBoxEraserSize.SelectedIndex;
SettingsManager.SaveSettingsToFile();
var mw = Application.Current.MainWindow as MainWindow;
if (mw != null)
{
if (mw.ComboBoxEraserSizeFloatingBar != null)
mw.ComboBoxEraserSizeFloatingBar.SelectedIndex = ComboBoxEraserSize.SelectedIndex;
if (mw.BoardComboBoxEraserSize != null)
mw.BoardComboBoxEraserSize.SelectedIndex = ComboBoxEraserSize.SelectedIndex;
}
}
private void ToggleSwitchHideStrokeWhenSelecting_Toggled(object sender, RoutedEventArgs e)
@@ -221,6 +235,15 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
SettingsManager.Settings.Canvas.EnableInkFade = ToggleSwitchEnableInkFade.IsOn;
ExpanderEnableInkFade.IsExpanded = ToggleSwitchEnableInkFade.IsOn;
SettingsManager.SaveSettingsToFile();
var mw = Application.Current.MainWindow as MainWindow;
if (mw != null)
{
mw.UpdateInkFadeManager(ToggleSwitchEnableInkFade.IsOn, SettingsManager.Settings.Canvas.InkFadeTime);
if (mw.ToggleSwitchInkFadeInPanel != null)
mw.ToggleSwitchInkFadeInPanel.IsOn = ToggleSwitchEnableInkFade.IsOn;
if (mw.ToggleSwitchInkFadeInPanel2 != null)
mw.ToggleSwitchInkFadeInPanel2.IsOn = ToggleSwitchEnableInkFade.IsOn;
}
}
private void InkFadeTimeSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
@@ -228,6 +251,11 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
if (!_isLoaded) return;
SettingsManager.Settings.Canvas.InkFadeTime = (int)e.NewValue;
SettingsManager.SaveSettingsToFile();
var mw = Application.Current.MainWindow as MainWindow;
if (mw != null && SettingsManager.Settings.Canvas.EnableInkFade)
{
mw.UpdateInkFadeManager(true, (int)e.NewValue);
}
}
private void ToggleSwitchHideInkFadeControlInPenMenu_Toggled(object sender, RoutedEventArgs e)
@@ -70,6 +70,14 @@ namespace Ink_Canvas.Windows.SettingsViews.Pages
if (!_isLoaded) return;
SettingsManager.Settings.InkToShape.IsInkToShapeEnabled = CardEnableInkToShape.IsOn;
SettingsManager.SaveSettingsToFile();
var mw = Application.Current.MainWindow as MainWindow;
if (mw != null)
{
if (mw.FloatingBarToggleSwitchEnableInkToShape != null)
mw.FloatingBarToggleSwitchEnableInkToShape.IsOn = CardEnableInkToShape.IsOn;
if (mw.BoardToggleSwitchEnableInkToShape != null)
mw.BoardToggleSwitchEnableInkToShape.IsOn = CardEnableInkToShape.IsOn;
}
}
private void ComboBoxShapeRecognitionEngine_SelectionChanged(object sender, SelectionChangedEventArgs e)
@@ -0,0 +1,278 @@
<ui:Page x:Class="Ink_Canvas.Windows.SettingsViews.Pages.PowerPointPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Ink_Canvas.Windows.SettingsViews.Pages"
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
xmlns:ikw="http://schemas.inkore.net/lib/ui/wpf"
xmlns:i18n="clr-namespace:Ink_Canvas.MarkupExtensions"
xmlns:controls="clr-namespace:Ink_Canvas.Controls;assembly=InkCanvas.Controls"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
Title="{i18n:I18n Key=Nav_PPT_Settings}">
<ScrollViewer PanningMode="VerticalFirst">
<Grid Margin="59,0,59,0">
<FrameworkElement.Resources>
<sys:Double x:Key="SettingsCardSpacing">4</sys:Double>
<Style x:Key="SettingsSectionHeaderTextBlockStyle"
BasedOn="{StaticResource BodyStrongTextBlockStyle}"
TargetType="TextBlock">
<Style.Setters>
<Setter Property="Margin" Value="1,30,0,6" />
</Style.Setters>
</Style>
</FrameworkElement.Resources>
<Grid>
<ikw:SimpleStackPanel MaxWidth="1000"
HorizontalAlignment="Stretch"
Spacing="{StaticResource SettingsCardSpacing}">
<TextBlock Text="{i18n:I18n Key=PPT_GroupTitle}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardSupportPowerPoint"
Header="{i18n:I18n Key=PPT_SupportPowerPoint}"
Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"
Toggled="ToggleSwitchSupportPowerPoint_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardPowerPointEnhancement"
Header="{i18n:I18n Key=PPT_Enhancement}"
Icon="{x:Static ui:SegoeFluentIcons.Puzzle}"
Toggled="ToggleSwitchPowerPointEnhancement_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardSkipAnimationsWhenGoNext"
Header="{i18n:I18n Key=PPT_SkipAnimations}"
Icon="{x:Static ui:SegoeFluentIcons.FastForward}"
Toggled="ToggleSwitchSkipAnimationsWhenGoNext_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardUseRotPptLink"
Header="{i18n:I18n Key=PPT_UseRot}"
Icon="{x:Static ui:SegoeFluentIcons.Link}"
Toggled="ToggleSwitchUseRotPptLink_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardSupportWPS"
Header="{i18n:I18n Key=PPT_SupportWPS}"
Icon="{x:Static ui:SegoeFluentIcons.Document}"
Toggled="ToggleSwitchSupportWPS_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardEnableWppProcessKill"
Header="{i18n:I18n Key=PPT_KillWppProcess}"
Description="{i18n:I18n Key=PPT_KillWppHint}"
Icon="{x:Static ui:SegoeFluentIcons.Cancel}"
Toggled="ToggleSwitchEnableWppProcessKill_Toggled"/>
<TextBlock Text="{i18n:I18n Key=PPT_FlipButtonsTitle}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardShowPPTButton"
Header="{i18n:I18n Key=PPT_ShowFlipButtons}"
Icon="{x:Static ui:SegoeFluentIcons.ShowResults}"
Toggled="ToggleSwitchShowPPTButton_OnToggled"/>
<ui:SettingsExpander Header="{i18n:I18n Key=PPT_Position_Left}"
Visibility="{Binding IsOn, ElementName=CardShowPPTButton, Converter={StaticResource BooleanToVisibilityConverter}}"
IsExpanded="{Binding IsOn, ElementName=CardShowPPTButton, Mode=OneWay}">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.CaretSolidLeft}"/>
</ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Content>
<CheckBox x:Name="CheckboxEnableLSPPTButton" Checked="CheckboxEnableLSPPTButton_IsCheckChanged" Unchecked="CheckboxEnableLSPPTButton_IsCheckChanged"/>
</ui:SettingsExpander.Content>
<ui:SettingsExpander.Items>
<ui:SettingsCard Header="{i18n:I18n Key=PPT_LeftOffset}">
<Slider x:Name="PPTButtonLeftPositionValueSlider" Minimum="-500" Maximum="500" Width="200" ValueChanged="PPTButtonLeftPositionValueSlider_ValueChanged"/>
</ui:SettingsCard>
<ui:SettingsCard Header="{i18n:I18n Key=PPT_LeftOpacity}" Visibility="{Binding IsChecked, ElementName=CheckboxSPPTHalfOpacity, Converter={StaticResource BooleanToVisibilityConverter}}">
<Slider x:Name="PPTLSButtonOpacityValueSlider" Minimum="0.1" Maximum="1.0" Width="200" ValueChanged="PPTLSButtonOpacityValueSlider_ValueChanged"/>
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
<ui:SettingsExpander Header="{i18n:I18n Key=PPT_Position_Right}"
Visibility="{Binding IsOn, ElementName=CardShowPPTButton, Converter={StaticResource BooleanToVisibilityConverter}}"
IsExpanded="{Binding IsOn, ElementName=CardShowPPTButton, Mode=OneWay}">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.CaretSolidRight}"/>
</ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Content>
<CheckBox x:Name="CheckboxEnableRSPPTButton" Checked="CheckboxEnableRSPPTButton_IsCheckChanged" Unchecked="CheckboxEnableRSPPTButton_IsCheckChanged"/>
</ui:SettingsExpander.Content>
<ui:SettingsExpander.Items>
<ui:SettingsCard Header="{i18n:I18n Key=PPT_RightOffset}">
<Slider x:Name="PPTButtonRightPositionValueSlider" Minimum="-500" Maximum="500" Width="200" ValueChanged="PPTButtonRightPositionValueSlider_ValueChanged"/>
</ui:SettingsCard>
<ui:SettingsCard Header="{i18n:I18n Key=PPT_RightOpacity}" Visibility="{Binding IsChecked, ElementName=CheckboxSPPTHalfOpacity, Converter={StaticResource BooleanToVisibilityConverter}}">
<Slider x:Name="PPTRSButtonOpacityValueSlider" Minimum="0.1" Maximum="1.0" Width="200" ValueChanged="PPTRSButtonOpacityValueSlider_ValueChanged"/>
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
<ui:SettingsExpander Header="{i18n:I18n Key=PPT_Position_LeftBottom}"
Visibility="{Binding IsOn, ElementName=CardShowPPTButton, Converter={StaticResource BooleanToVisibilityConverter}}"
IsExpanded="{Binding IsOn, ElementName=CardShowPPTButton, Mode=OneWay}">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.CaretSolidDown}"/>
</ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Content>
<CheckBox x:Name="CheckboxEnableLBPPTButton" Checked="CheckboxEnableLBPPTButton_IsCheckChanged" Unchecked="CheckboxEnableLBPPTButton_IsCheckChanged"/>
</ui:SettingsExpander.Content>
<ui:SettingsExpander.Items>
<ui:SettingsCard Header="{i18n:I18n Key=PPT_LeftBottomOffset}">
<Slider x:Name="PPTButtonLBPositionValueSlider" Minimum="-500" Maximum="500" Width="200" ValueChanged="PPTButtonLBPositionValueSlider_ValueChanged"/>
</ui:SettingsCard>
<ui:SettingsCard Header="{i18n:I18n Key=PPT_LeftBottomOpacity}" Visibility="{Binding IsChecked, ElementName=CheckboxBPPTHalfOpacity, Converter={StaticResource BooleanToVisibilityConverter}}">
<Slider x:Name="PPTLBButtonOpacityValueSlider" Minimum="0.1" Maximum="1.0" Width="200" ValueChanged="PPTLBButtonOpacityValueSlider_ValueChanged"/>
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
<ui:SettingsExpander Header="{i18n:I18n Key=PPT_Position_RightBottom}"
Visibility="{Binding IsOn, ElementName=CardShowPPTButton, Converter={StaticResource BooleanToVisibilityConverter}}"
IsExpanded="{Binding IsOn, ElementName=CardShowPPTButton, Mode=OneWay}">
<ui:SettingsExpander.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.CaretSolidDown}"/>
</ui:SettingsExpander.HeaderIcon>
<ui:SettingsExpander.Content>
<CheckBox x:Name="CheckboxEnableRBPPTButton" Checked="CheckboxEnableRBPPTButton_IsCheckChanged" Unchecked="CheckboxEnableRBPPTButton_IsCheckChanged"/>
</ui:SettingsExpander.Content>
<ui:SettingsExpander.Items>
<ui:SettingsCard Header="{i18n:I18n Key=PPT_RightBottomOffset}">
<Slider x:Name="PPTButtonRBPositionValueSlider" Minimum="-500" Maximum="500" Width="200" ValueChanged="PPTButtonRBPositionValueSlider_ValueChanged"/>
</ui:SettingsCard>
<ui:SettingsCard Header="{i18n:I18n Key=PPT_RightBottomOpacity}" Visibility="{Binding IsChecked, ElementName=CheckboxBPPTHalfOpacity, Converter={StaticResource BooleanToVisibilityConverter}}">
<Slider x:Name="PPTRBButtonOpacityValueSlider" Minimum="0.1" Maximum="1.0" Width="200" ValueChanged="PPTRBButtonOpacityValueSlider_ValueChanged"/>
</ui:SettingsCard>
</ui:SettingsExpander.Items>
</ui:SettingsExpander>
<ui:SettingsCard Header="{i18n:I18n Key=PPT_SideGroupTitle}"
Visibility="{Binding IsOn, ElementName=CardShowPPTButton, Converter={StaticResource BooleanToVisibilityConverter}}">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.DockLeft}"/>
</ui:SettingsCard.HeaderIcon>
<ikw:SimpleStackPanel Orientation="Vertical" Spacing="6">
<CheckBox x:Name="CheckboxSPPTDisplayPage" Content="{i18n:I18n Key=PPT_ShowPageNumber}" Checked="CheckboxSPPTDisplayPage_IsCheckChange" Unchecked="CheckboxSPPTDisplayPage_IsCheckChange"/>
<CheckBox x:Name="CheckboxSPPTHalfOpacity" Content="{i18n:I18n Key=PPT_HalfOpacity}" Checked="CheckboxSPPTHalfOpacity_IsCheckChange" Unchecked="CheckboxSPPTHalfOpacity_IsCheckChange"/>
<CheckBox x:Name="CheckboxSPPTBlackBackground" Content="{i18n:I18n Key=PPT_BlackBackground}" Checked="CheckboxSPPTBlackBackground_IsCheckChange" Unchecked="CheckboxSPPTBlackBackground_IsCheckChange"/>
</ikw:SimpleStackPanel>
</ui:SettingsCard>
<ui:SettingsCard Header="{i18n:I18n Key=PPT_BottomGroupTitle}"
Visibility="{Binding IsOn, ElementName=CardShowPPTButton, Converter={StaticResource BooleanToVisibilityConverter}}">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.DockBottom}"/>
</ui:SettingsCard.HeaderIcon>
<ikw:SimpleStackPanel Orientation="Vertical" Spacing="6">
<CheckBox x:Name="CheckboxBPPTDisplayPage" Content="{i18n:I18n Key=PPT_ShowPageNumber}" Checked="CheckboxBPPTDisplayPage_IsCheckChange" Unchecked="CheckboxBPPTDisplayPage_IsCheckChange"/>
<CheckBox x:Name="CheckboxBPPTHalfOpacity" Content="{i18n:I18n Key=PPT_HalfOpacity}" Checked="CheckboxBPPTHalfOpacity_IsCheckChange" Unchecked="CheckboxBPPTHalfOpacity_IsCheckChange"/>
<CheckBox x:Name="CheckboxBPPTBlackBackground" Content="{i18n:I18n Key=PPT_BlackBackground}" Checked="CheckboxBPPTBlackBackground_IsCheckChange" Unchecked="CheckboxBPPTBlackBackground_IsCheckChange"/>
</ikw:SimpleStackPanel>
</ui:SettingsCard>
<controls:LabeledSettingsCard x:Name="CardEnablePPTButtonPageClickable"
Header="{i18n:I18n Key=PPT_PageButtonClickable}"
Description="{i18n:I18n Key=PPT_PageButtonClickableHint}"
Icon="{x:Static ui:SegoeFluentIcons.TouchPointer}"
Visibility="{Binding IsOn, ElementName=CardShowPPTButton, Converter={StaticResource BooleanToVisibilityConverter}}"
Toggled="ToggleSwitchEnablePPTButtonPageClickable_OnToggled"/>
<controls:LabeledSettingsCard x:Name="CardEnablePPTButtonLongPressPageTurn"
Header="{i18n:I18n Key=PPT_LongPressPageTurn}"
Description="{i18n:I18n Key=PPT_LongPressPageTurnHint}"
Icon="{x:Static ui:SegoeFluentIcons.Touch}"
Visibility="{Binding IsOn, ElementName=CardShowPPTButton, Converter={StaticResource BooleanToVisibilityConverter}}"
Toggled="ToggleSwitchEnablePPTButtonLongPressPageTurn_OnToggled"/>
<TextBlock Text="{i18n:I18n Key=PPT_EnterAnnotationOnShow}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardShowCanvasAtNewSlideShow"
Header="{i18n:I18n Key=PPT_EnterAnnotationOnShow}"
Icon="{x:Static ui:SegoeFluentIcons.Edit}"
Toggled="ToggleSwitchShowCanvasAtNewSlideShow_Toggled"/>
<TextBlock Text="{i18n:I18n Key=Nav_PPT_Settings}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardEnableTwoFingerGestureInPresentationMode"
Header="{i18n:I18n Key=PPT_TwoFingerGesture}"
Icon="{x:Static ui:SegoeFluentIcons.TouchPointer}"
Toggled="ToggleSwitchEnableTwoFingerGestureInPresentationMode_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardEnableFingerGestureSlideShowControl"
Header="{i18n:I18n Key=PPT_FingerGestureSlide}"
Description="{i18n:I18n Key=PPT_FingerGestureSlideHint}"
Icon="{x:Static ui:SegoeFluentIcons.Handwriting}"
Toggled="ToggleSwitchEnableFingerGestureSlideShowControl_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardShowGestureButtonInSlideShow"
Header="{i18n:I18n Key=PPT_ShowGestureButtonInShow}"
Description="{i18n:I18n Key=PPT_ShowGestureButtonInShowHint}"
Icon="{x:Static ui:SegoeFluentIcons.TouchPointer}"
Toggled="ToggleSwitchShowGestureButtonInSlideShow_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardEnablePPTTimeCapsule"
Header="{i18n:I18n Key=PPT_TimeCapsule}"
Description="{i18n:I18n Key=PPT_TimeCapsuleHint}"
Icon="{x:Static ui:SegoeFluentIcons.QuietHours}"
Toggled="ToggleSwitchEnablePPTTimeCapsule_Toggled"/>
<ui:SettingsCard Header="{i18n:I18n Key=PPT_TimeCapsulePosition}">
<ui:SettingsCard.HeaderIcon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Location}"/>
</ui:SettingsCard.HeaderIcon>
<ComboBox x:Name="ComboBoxPPTTimeCapsulePosition"
SelectionChanged="ComboBoxPPTTimeCapsulePosition_SelectionChanged">
<ComboBoxItem Content="{i18n:I18n Key=PPT_TimeCapsulePos_TL}"/>
<ComboBoxItem Content="{i18n:I18n Key=PPT_TimeCapsulePos_TR}"/>
<ComboBoxItem Content="{i18n:I18n Key=PPT_TimeCapsulePos_Center}"/>
</ComboBox>
</ui:SettingsCard>
<controls:LabeledSettingsCard x:Name="CardShowPPTSidebarByDefault"
Header="{i18n:I18n Key=PPT_ShowQuickPanelInShow}"
Description="{i18n:I18n Key=PPT_ShowQuickPanelInShowHint}"
Icon="{x:Static ui:SegoeFluentIcons.OpenPane}"
Toggled="ToggleSwitchShowPPTSidebarByDefault_Toggled"/>
<TextBlock Text="{i18n:I18n Key=PPT_AutoScreenshot}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardAutoSaveScreenShotInPowerPoint"
Header="{i18n:I18n Key=PPT_AutoScreenshot}"
Description="{i18n:I18n Key=PPT_AutoScreenshotHint}"
Icon="{x:Static ui:SegoeFluentIcons.Camera}"
Toggled="ToggleSwitchAutoSaveScreenShotInPowerPoint_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAutoSaveStrokesInPowerPoint"
Header="{i18n:I18n Key=PPT_AutoSaveStrokes}"
Description="{i18n:I18n Key=PPT_AutoSaveStrokesHint}"
Icon="{x:Static ui:SegoeFluentIcons.Save}"
Toggled="ToggleSwitchAutoSaveStrokesInPowerPoint_Toggled"/>
<TextBlock Text="{i18n:I18n Key=PPT_RememberLastPage}" Style="{StaticResource SettingsSectionHeaderTextBlockStyle}"/>
<controls:LabeledSettingsCard x:Name="CardNotifyPreviousPage"
Header="{i18n:I18n Key=PPT_RememberLastPage}"
Description="{i18n:I18n Key=PPT_RememberLastPageHint}"
Icon="{x:Static ui:SegoeFluentIcons.History}"
Toggled="ToggleSwitchNotifyPreviousPage_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardAlwaysGoToFirstPageOnReenter"
Header="{i18n:I18n Key=PPT_GoToFirstPageOnReenter}"
Icon="{x:Static ui:SegoeFluentIcons.Rewind}"
Toggled="ToggleSwitchAlwaysGoToFirstPageOnReenter_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardNotifyHiddenPage"
Header="{i18n:I18n Key=PPT_NotifyHiddenPage}"
Icon="{x:Static ui:SegoeFluentIcons.Hide}"
Toggled="ToggleSwitchNotifyHiddenPage_Toggled"/>
<controls:LabeledSettingsCard x:Name="CardNotifyAutoPlayPresentation"
Header="{i18n:I18n Key=PPT_NotifyAutoPlay}"
Icon="{x:Static ui:SegoeFluentIcons.Play}"
Toggled="ToggleSwitchNotifyAutoPlayPresentation_Toggled"/>
<Rectangle Height="48" />
</ikw:SimpleStackPanel>
</Grid>
</Grid>
</ScrollViewer>
</ui:Page>
@@ -0,0 +1,700 @@
using Ink_Canvas.Helpers;
using Ink_Canvas.Windows.SettingsViews.Helpers;
using System;
using System.Windows;
using System.Windows.Controls;
using Page = iNKORE.UI.WPF.Modern.Controls.Page;
namespace Ink_Canvas.Windows.SettingsViews.Pages
{
public partial class PowerPointPage : Page
{
private bool _isLoaded = false;
private DelayAction _sliderDelayAction = new DelayAction();
public PowerPointPage()
{
InitializeComponent();
Loaded += PowerPointPage_Loaded;
Unloaded += PowerPointPage_Unloaded;
}
private void PowerPointPage_Loaded(object sender, RoutedEventArgs e)
{
LoadSettings();
_isLoaded = true;
}
private void PowerPointPage_Unloaded(object sender, RoutedEventArgs e)
{
_isLoaded = false;
}
private MainWindow GetMainWindow() => Application.Current.MainWindow as MainWindow;
private void LoadSettings()
{
_isLoaded = false;
var ppt = SettingsManager.Settings.PowerPointSettings;
CardSupportPowerPoint.IsOn = ppt.PowerPointSupport;
CardPowerPointEnhancement.IsOn = ppt.EnablePowerPointEnhancement;
CardSkipAnimationsWhenGoNext.IsOn = ppt.SkipAnimationsWhenGoNext;
CardUseRotPptLink.IsOn = ppt.UseRotPptLink;
CardSupportWPS.IsOn = ppt.IsSupportWPS;
CardEnableWppProcessKill.IsOn = ppt.EnableWppProcessKill;
CardShowPPTButton.IsOn = ppt.ShowPPTButton;
var displayOpt = ppt.PPTButtonsDisplayOption.ToString();
CheckboxEnableLBPPTButton.IsChecked = displayOpt.Length > 0 && displayOpt[0] == '2';
CheckboxEnableRBPPTButton.IsChecked = displayOpt.Length > 1 && displayOpt[1] == '2';
CheckboxEnableLSPPTButton.IsChecked = displayOpt.Length > 2 && displayOpt[2] == '2';
CheckboxEnableRSPPTButton.IsChecked = displayOpt.Length > 3 && displayOpt[3] == '2';
PPTButtonLeftPositionValueSlider.Value = ppt.PPTLSButtonPosition;
PPTButtonRightPositionValueSlider.Value = ppt.PPTRSButtonPosition;
PPTButtonLBPositionValueSlider.Value = ppt.PPTLBButtonPosition;
PPTButtonRBPositionValueSlider.Value = ppt.PPTRBButtonPosition;
PPTLSButtonOpacityValueSlider.Value = ppt.PPTLSButtonOpacity;
PPTRSButtonOpacityValueSlider.Value = ppt.PPTRSButtonOpacity;
PPTLBButtonOpacityValueSlider.Value = ppt.PPTLBButtonOpacity;
PPTRBButtonOpacityValueSlider.Value = ppt.PPTRBButtonOpacity;
var sOpt = ppt.PPTSButtonsOption.ToString();
CheckboxSPPTDisplayPage.IsChecked = sOpt.Length > 0 && sOpt[0] == '2';
CheckboxSPPTHalfOpacity.IsChecked = sOpt.Length > 1 && sOpt[1] == '2';
CheckboxSPPTBlackBackground.IsChecked = sOpt.Length > 2 && sOpt[2] == '2';
var bOpt = ppt.PPTBButtonsOption.ToString();
CheckboxBPPTDisplayPage.IsChecked = bOpt.Length > 0 && bOpt[0] == '2';
CheckboxBPPTHalfOpacity.IsChecked = bOpt.Length > 1 && bOpt[1] == '2';
CheckboxBPPTBlackBackground.IsChecked = bOpt.Length > 2 && bOpt[2] == '2';
CardEnablePPTButtonPageClickable.IsOn = ppt.EnablePPTButtonPageClickable;
CardEnablePPTButtonLongPressPageTurn.IsOn = ppt.EnablePPTButtonLongPressPageTurn;
CardShowCanvasAtNewSlideShow.IsOn = ppt.IsShowCanvasAtNewSlideShow;
CardEnableTwoFingerGestureInPresentationMode.IsOn = ppt.IsEnableTwoFingerGestureInPresentationMode;
CardEnableFingerGestureSlideShowControl.IsOn = ppt.IsEnableFingerGestureSlideShowControl;
CardShowGestureButtonInSlideShow.IsOn = ppt.ShowGestureButtonInSlideShow;
CardEnablePPTTimeCapsule.IsOn = ppt.EnablePPTTimeCapsule;
ComboBoxPPTTimeCapsulePosition.SelectedIndex = ppt.PPTTimeCapsulePosition;
CardShowPPTSidebarByDefault.IsOn = ppt.ShowPPTSidebarByDefault;
CardAutoSaveScreenShotInPowerPoint.IsOn = ppt.IsAutoSaveScreenShotInPowerPoint;
CardAutoSaveStrokesInPowerPoint.IsOn = ppt.IsAutoSaveStrokesInPowerPoint;
CardNotifyPreviousPage.IsOn = ppt.IsNotifyPreviousPage;
CardAlwaysGoToFirstPageOnReenter.IsOn = ppt.IsAlwaysGoToFirstPageOnReenter;
CardNotifyHiddenPage.IsOn = ppt.IsNotifyHiddenPage;
CardNotifyAutoPlayPresentation.IsOn = ppt.IsNotifyAutoPlayPresentation;
_isLoaded = true;
}
#region PPT Basic
private void ToggleSwitchSupportPowerPoint_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
var ppt = SettingsManager.Settings.PowerPointSettings;
ppt.PowerPointSupport = CardSupportPowerPoint.IsOn;
if (!ppt.PowerPointSupport && ppt.IsSupportWPS)
{
ppt.IsSupportWPS = false;
CardSupportWPS.IsOn = false;
if (mw?.PPTManager != null) mw.PPTManager.IsSupportWPS = false;
}
SettingsManager.SaveSettingsToFile();
if (mw != null)
{
if (ppt.PowerPointSupport)
{
if (mw.PPTManager == null) mw.InitializePPTManagers();
mw.StartPPTMonitoring();
}
else mw.StopPPTMonitoring();
}
}
private void ToggleSwitchPowerPointEnhancement_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
var ppt = SettingsManager.Settings.PowerPointSettings;
ppt.EnablePowerPointEnhancement = CardPowerPointEnhancement.IsOn;
if (ppt.EnablePowerPointEnhancement)
{
ppt.IsSupportWPS = false;
CardSupportWPS.IsOn = false;
if (mw?.PPTManager != null) mw.PPTManager.IsSupportWPS = false;
}
SettingsManager.SaveSettingsToFile();
if (mw != null)
{
if (ppt.EnablePowerPointEnhancement)
mw.StartPowerPointProcessMonitoring();
else
mw.StopPowerPointProcessMonitoring();
}
}
private void ToggleSwitchSkipAnimationsWhenGoNext_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
SettingsManager.Settings.PowerPointSettings.SkipAnimationsWhenGoNext = CardSkipAnimationsWhenGoNext.IsOn;
if (mw?.PPTManager != null)
mw.PPTManager.SkipAnimationsWhenNavigating = CardSkipAnimationsWhenGoNext.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchUseRotPptLink_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
var ppt = SettingsManager.Settings.PowerPointSettings;
ppt.UseRotPptLink = CardUseRotPptLink.IsOn;
SettingsManager.SaveSettingsToFile();
try
{
if (mw != null)
{
mw.StopPPTMonitoring();
if (ppt.UseRotPptLink && ppt.EnablePowerPointEnhancement)
{
ppt.EnablePowerPointEnhancement = false;
CardPowerPointEnhancement.IsOn = false;
mw.StopPowerPointProcessMonitoring();
SettingsManager.SaveSettingsToFile();
}
mw.InitializePPTManagers();
if (ppt.PowerPointSupport) mw.StartPPTMonitoring();
LogHelper.WriteLogToFile($"已切换 PPT 联动架构为 {(ppt.UseRotPptLink ? "ROT" : "COM")}", LogHelper.LogType.Event);
}
}
catch (Exception ex) { LogHelper.WriteLogToFile($"切换 PPT 联动架构失败: {ex}", LogHelper.LogType.Error); }
}
private void ToggleSwitchSupportWPS_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
var ppt = SettingsManager.Settings.PowerPointSettings;
ppt.IsSupportWPS = CardSupportWPS.IsOn;
if (ppt.IsSupportWPS)
{
if (!ppt.PowerPointSupport)
{
ppt.PowerPointSupport = true;
CardSupportPowerPoint.IsOn = true;
if (mw != null)
{
if (mw.PPTManager == null) mw.InitializePPTManagers();
mw.StartPPTMonitoring();
}
}
if (ppt.EnablePowerPointEnhancement)
{
ppt.EnablePowerPointEnhancement = false;
CardPowerPointEnhancement.IsOn = false;
mw?.StopPowerPointProcessMonitoring();
}
}
if (mw?.PPTManager != null)
{
mw.PPTManager.IsSupportWPS = ppt.IsSupportWPS;
mw.PPTManager.SkipAnimationsWhenNavigating = ppt.SkipAnimationsWhenGoNext;
}
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchEnableWppProcessKill_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.PowerPointSettings.EnableWppProcessKill = CardEnableWppProcessKill.IsOn;
SettingsManager.SaveSettingsToFile();
}
#endregion
#region PPT Flip Buttons
private void ToggleSwitchShowPPTButton_OnToggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
SettingsManager.Settings.PowerPointSettings.ShowPPTButton = CardShowPPTButton.IsOn;
SettingsManager.SaveSettingsToFile();
if (mw?.PPTUIManager != null)
{
mw.PPTUIManager.ShowPPTButton = CardShowPPTButton.IsOn;
mw.PPTUIManager.UpdateNavigationPanelsVisibility();
}
mw?.UpdatePPTBtnPreview();
}
private void ToggleSwitchShowPPTSidebarByDefault_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
SettingsManager.Settings.PowerPointSettings.ShowPPTSidebarByDefault = CardShowPPTSidebarByDefault.IsOn;
SettingsManager.SaveSettingsToFile();
if (mw != null && mw.BtnPPTSlideShowEnd?.Visibility == Visibility.Visible)
mw.UpdatePPTQuickPanelVisibility();
}
private void ToggleSwitchEnablePPTButtonPageClickable_OnToggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.PowerPointSettings.EnablePPTButtonPageClickable = CardEnablePPTButtonPageClickable.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchEnablePPTButtonLongPressPageTurn_OnToggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn = CardEnablePPTButtonLongPressPageTurn.IsOn;
SettingsManager.SaveSettingsToFile();
}
#endregion
#region PPT Button Position & Opacity Sliders
private void PPTButtonLeftPositionValueSlider_ValueChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
SettingsManager.Settings.PowerPointSettings.PPTLSButtonPosition = (int)PPTButtonLeftPositionValueSlider.Value;
mw?.UpdatePPTBtnSlidersStatus();
mw?.UpdatePPTUIManagerSettings();
_sliderDelayAction.DebounceAction(2000, null, () => SettingsManager.SaveSettingsToFile());
mw?.UpdatePPTBtnPreview();
}
private void PPTButtonRightPositionValueSlider_ValueChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
SettingsManager.Settings.PowerPointSettings.PPTRSButtonPosition = (int)PPTButtonRightPositionValueSlider.Value;
mw?.UpdatePPTBtnSlidersStatus();
mw?.UpdatePPTUIManagerSettings();
_sliderDelayAction.DebounceAction(2000, null, () => SettingsManager.SaveSettingsToFile());
mw?.UpdatePPTBtnPreview();
}
private void PPTButtonLBPositionValueSlider_ValueChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
SettingsManager.Settings.PowerPointSettings.PPTLBButtonPosition = (int)PPTButtonLBPositionValueSlider.Value;
mw?.UpdatePPTBtnSlidersStatus();
mw?.UpdatePPTUIManagerSettings();
_sliderDelayAction.DebounceAction(2000, null, () => SettingsManager.SaveSettingsToFile());
mw?.UpdatePPTBtnPreview();
}
private void PPTButtonRBPositionValueSlider_ValueChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
SettingsManager.Settings.PowerPointSettings.PPTRBButtonPosition = (int)PPTButtonRBPositionValueSlider.Value;
mw?.UpdatePPTBtnSlidersStatus();
mw?.UpdatePPTUIManagerSettings();
_sliderDelayAction.DebounceAction(2000, null, () => SettingsManager.SaveSettingsToFile());
mw?.UpdatePPTBtnPreview();
}
private void PPTLSButtonOpacityValueSlider_ValueChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
double roundedValue = Math.Round(PPTLSButtonOpacityValueSlider.Value, 1);
PPTLSButtonOpacityValueSlider.ValueChanged -= PPTLSButtonOpacityValueSlider_ValueChanged;
PPTLSButtonOpacityValueSlider.Value = roundedValue;
PPTLSButtonOpacityValueSlider.ValueChanged += PPTLSButtonOpacityValueSlider_ValueChanged;
SettingsManager.Settings.PowerPointSettings.PPTLSButtonOpacity = roundedValue;
SettingsManager.SaveSettingsToFile();
var mw = GetMainWindow();
if (mw?.PPTUIManager != null)
{
mw.PPTUIManager.PPTLSButtonOpacity = roundedValue;
mw.PPTUIManager.UpdateNavigationButtonStyles();
}
mw?.UpdatePPTBtnPreview();
}
private void PPTRSButtonOpacityValueSlider_ValueChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
double roundedValue = Math.Round(PPTRSButtonOpacityValueSlider.Value, 1);
PPTRSButtonOpacityValueSlider.ValueChanged -= PPTRSButtonOpacityValueSlider_ValueChanged;
PPTRSButtonOpacityValueSlider.Value = roundedValue;
PPTRSButtonOpacityValueSlider.ValueChanged += PPTRSButtonOpacityValueSlider_ValueChanged;
SettingsManager.Settings.PowerPointSettings.PPTRSButtonOpacity = roundedValue;
SettingsManager.SaveSettingsToFile();
var mw = GetMainWindow();
if (mw?.PPTUIManager != null)
{
mw.PPTUIManager.PPTRSButtonOpacity = roundedValue;
mw.PPTUIManager.UpdateNavigationButtonStyles();
}
mw?.UpdatePPTBtnPreview();
}
private void PPTLBButtonOpacityValueSlider_ValueChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
double roundedValue = Math.Round(PPTLBButtonOpacityValueSlider.Value, 1);
PPTLBButtonOpacityValueSlider.ValueChanged -= PPTLBButtonOpacityValueSlider_ValueChanged;
PPTLBButtonOpacityValueSlider.Value = roundedValue;
PPTLBButtonOpacityValueSlider.ValueChanged += PPTLBButtonOpacityValueSlider_ValueChanged;
SettingsManager.Settings.PowerPointSettings.PPTLBButtonOpacity = roundedValue;
SettingsManager.SaveSettingsToFile();
var mw = GetMainWindow();
if (mw?.PPTUIManager != null)
{
mw.PPTUIManager.PPTLBButtonOpacity = roundedValue;
mw.PPTUIManager.UpdateNavigationButtonStyles();
}
mw?.UpdatePPTBtnPreview();
}
private void PPTRBButtonOpacityValueSlider_ValueChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
double roundedValue = Math.Round(PPTRBButtonOpacityValueSlider.Value, 1);
PPTRBButtonOpacityValueSlider.ValueChanged -= PPTRBButtonOpacityValueSlider_ValueChanged;
PPTRBButtonOpacityValueSlider.Value = roundedValue;
PPTRBButtonOpacityValueSlider.ValueChanged += PPTRBButtonOpacityValueSlider_ValueChanged;
SettingsManager.Settings.PowerPointSettings.PPTRBButtonOpacity = roundedValue;
SettingsManager.SaveSettingsToFile();
var mw = GetMainWindow();
if (mw?.PPTUIManager != null)
{
mw.PPTUIManager.PPTRBButtonOpacity = roundedValue;
mw.PPTUIManager.UpdateNavigationButtonStyles();
}
mw?.UpdatePPTBtnPreview();
}
#endregion
#region PPT Button Display Checkboxes
private void CheckboxEnableLBPPTButton_IsCheckChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
var str = SettingsManager.Settings.PowerPointSettings.PPTButtonsDisplayOption.ToString();
char[] c = str.ToCharArray();
c[0] = CheckboxEnableLBPPTButton.IsChecked == true ? '2' : '1';
SettingsManager.Settings.PowerPointSettings.PPTButtonsDisplayOption = int.Parse(new string(c));
SettingsManager.SaveSettingsToFile();
if (mw?.PPTUIManager != null && mw.BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
{
mw.PPTUIManager.PPTButtonsDisplayOption = SettingsManager.Settings.PowerPointSettings.PPTButtonsDisplayOption;
mw.PPTUIManager.UpdateNavigationPanelsVisibility();
}
mw?.UpdatePPTBtnPreview();
}
private void CheckboxEnableRBPPTButton_IsCheckChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
var str = SettingsManager.Settings.PowerPointSettings.PPTButtonsDisplayOption.ToString();
char[] c = str.ToCharArray();
c[1] = CheckboxEnableRBPPTButton.IsChecked == true ? '2' : '1';
SettingsManager.Settings.PowerPointSettings.PPTButtonsDisplayOption = int.Parse(new string(c));
SettingsManager.SaveSettingsToFile();
if (mw?.PPTUIManager != null && mw.BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
{
mw.PPTUIManager.PPTButtonsDisplayOption = SettingsManager.Settings.PowerPointSettings.PPTButtonsDisplayOption;
mw.PPTUIManager.UpdateNavigationPanelsVisibility();
}
mw?.UpdatePPTBtnPreview();
}
private void CheckboxEnableLSPPTButton_IsCheckChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
var str = SettingsManager.Settings.PowerPointSettings.PPTButtonsDisplayOption.ToString();
char[] c = str.ToCharArray();
c[2] = CheckboxEnableLSPPTButton.IsChecked == true ? '2' : '1';
SettingsManager.Settings.PowerPointSettings.PPTButtonsDisplayOption = int.Parse(new string(c));
SettingsManager.SaveSettingsToFile();
if (mw?.PPTUIManager != null && mw.BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
{
mw.PPTUIManager.PPTButtonsDisplayOption = SettingsManager.Settings.PowerPointSettings.PPTButtonsDisplayOption;
mw.PPTUIManager.UpdateNavigationPanelsVisibility();
}
mw?.UpdatePPTBtnPreview();
}
private void CheckboxEnableRSPPTButton_IsCheckChanged(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
var str = SettingsManager.Settings.PowerPointSettings.PPTButtonsDisplayOption.ToString();
char[] c = str.ToCharArray();
c[3] = CheckboxEnableRSPPTButton.IsChecked == true ? '2' : '1';
SettingsManager.Settings.PowerPointSettings.PPTButtonsDisplayOption = int.Parse(new string(c));
SettingsManager.SaveSettingsToFile();
if (mw?.PPTUIManager != null && mw.BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
{
mw.PPTUIManager.PPTButtonsDisplayOption = SettingsManager.Settings.PowerPointSettings.PPTButtonsDisplayOption;
mw.PPTUIManager.UpdateNavigationPanelsVisibility();
}
mw?.UpdatePPTBtnPreview();
}
private void CheckboxSPPTDisplayPage_IsCheckChange(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
var str = SettingsManager.Settings.PowerPointSettings.PPTSButtonsOption.ToString();
char[] c = str.ToCharArray();
c[0] = CheckboxSPPTDisplayPage.IsChecked == true ? '2' : '1';
SettingsManager.Settings.PowerPointSettings.PPTSButtonsOption = int.Parse(new string(c));
SettingsManager.SaveSettingsToFile();
if (mw?.PPTUIManager != null && mw.BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
{
mw.PPTUIManager.PPTSButtonsOption = SettingsManager.Settings.PowerPointSettings.PPTSButtonsOption;
mw.PPTUIManager.UpdateNavigationButtonStyles();
}
mw?.UpdatePPTBtnPreview();
}
private void CheckboxSPPTHalfOpacity_IsCheckChange(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
var ppt = SettingsManager.Settings.PowerPointSettings;
var str = ppt.PPTSButtonsOption.ToString();
char[] c = str.ToCharArray();
bool isHalf = CheckboxSPPTHalfOpacity.IsChecked == true;
c[1] = isHalf ? '2' : '1';
ppt.PPTSButtonsOption = int.Parse(new string(c));
if (isHalf)
{
if (ppt.PPTLSButtonOpacity == 1.0) ppt.PPTLSButtonOpacity = 0.5;
if (ppt.PPTRSButtonOpacity == 1.0) ppt.PPTRSButtonOpacity = 0.5;
PPTLSButtonOpacityValueSlider.Value = ppt.PPTLSButtonOpacity;
PPTRSButtonOpacityValueSlider.Value = ppt.PPTRSButtonOpacity;
}
else
{
if (ppt.PPTLSButtonOpacity == 0.5) ppt.PPTLSButtonOpacity = 1.0;
if (ppt.PPTRSButtonOpacity == 0.5) ppt.PPTRSButtonOpacity = 1.0;
PPTLSButtonOpacityValueSlider.Value = ppt.PPTLSButtonOpacity;
PPTRSButtonOpacityValueSlider.Value = ppt.PPTRSButtonOpacity;
}
SettingsManager.SaveSettingsToFile();
if (mw?.PPTUIManager != null && mw.BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
{
mw.PPTUIManager.PPTSButtonsOption = ppt.PPTSButtonsOption;
mw.PPTUIManager.PPTLSButtonOpacity = ppt.PPTLSButtonOpacity;
mw.PPTUIManager.PPTRSButtonOpacity = ppt.PPTRSButtonOpacity;
mw.PPTUIManager.UpdateNavigationButtonStyles();
}
mw?.UpdatePPTBtnPreview();
}
private void CheckboxSPPTBlackBackground_IsCheckChange(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
var str = SettingsManager.Settings.PowerPointSettings.PPTSButtonsOption.ToString();
char[] c = str.ToCharArray();
c[2] = CheckboxSPPTBlackBackground.IsChecked == true ? '2' : '1';
SettingsManager.Settings.PowerPointSettings.PPTSButtonsOption = int.Parse(new string(c));
SettingsManager.SaveSettingsToFile();
if (mw?.PPTUIManager != null && mw.BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
{
mw.PPTUIManager.PPTSButtonsOption = SettingsManager.Settings.PowerPointSettings.PPTSButtonsOption;
mw.PPTUIManager.UpdateNavigationButtonStyles();
}
mw?.UpdatePPTBtnPreview();
}
private void CheckboxBPPTDisplayPage_IsCheckChange(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
var str = SettingsManager.Settings.PowerPointSettings.PPTBButtonsOption.ToString();
char[] c = str.ToCharArray();
c[0] = CheckboxBPPTDisplayPage.IsChecked == true ? '2' : '1';
SettingsManager.Settings.PowerPointSettings.PPTBButtonsOption = int.Parse(new string(c));
SettingsManager.SaveSettingsToFile();
if (mw?.PPTUIManager != null && mw.BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
{
mw.PPTUIManager.PPTBButtonsOption = SettingsManager.Settings.PowerPointSettings.PPTBButtonsOption;
mw.PPTUIManager.UpdateNavigationButtonStyles();
}
mw?.UpdatePPTBtnPreview();
}
private void CheckboxBPPTHalfOpacity_IsCheckChange(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
var ppt = SettingsManager.Settings.PowerPointSettings;
var str = ppt.PPTBButtonsOption.ToString();
char[] c = str.ToCharArray();
bool isHalf = CheckboxBPPTHalfOpacity.IsChecked == true;
c[1] = isHalf ? '2' : '1';
ppt.PPTBButtonsOption = int.Parse(new string(c));
if (isHalf)
{
if (ppt.PPTLBButtonOpacity == 1.0) ppt.PPTLBButtonOpacity = 0.5;
if (ppt.PPTRBButtonOpacity == 1.0) ppt.PPTRBButtonOpacity = 0.5;
PPTLBButtonOpacityValueSlider.Value = ppt.PPTLBButtonOpacity;
PPTRBButtonOpacityValueSlider.Value = ppt.PPTRBButtonOpacity;
}
else
{
if (ppt.PPTLBButtonOpacity == 0.5) ppt.PPTLBButtonOpacity = 1.0;
if (ppt.PPTRBButtonOpacity == 0.5) ppt.PPTRBButtonOpacity = 1.0;
PPTLBButtonOpacityValueSlider.Value = ppt.PPTLBButtonOpacity;
PPTRBButtonOpacityValueSlider.Value = ppt.PPTRBButtonOpacity;
}
SettingsManager.SaveSettingsToFile();
if (mw?.PPTUIManager != null && mw.BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
{
mw.PPTUIManager.PPTBButtonsOption = ppt.PPTBButtonsOption;
mw.PPTUIManager.PPTLBButtonOpacity = ppt.PPTLBButtonOpacity;
mw.PPTUIManager.PPTRBButtonOpacity = ppt.PPTRBButtonOpacity;
mw.PPTUIManager.UpdateNavigationButtonStyles();
}
mw?.UpdatePPTBtnPreview();
}
private void CheckboxBPPTBlackBackground_IsCheckChange(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
var str = SettingsManager.Settings.PowerPointSettings.PPTBButtonsOption.ToString();
char[] c = str.ToCharArray();
c[2] = CheckboxBPPTBlackBackground.IsChecked == true ? '2' : '1';
SettingsManager.Settings.PowerPointSettings.PPTBButtonsOption = int.Parse(new string(c));
SettingsManager.SaveSettingsToFile();
if (mw?.PPTUIManager != null && mw.BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
{
mw.PPTUIManager.PPTBButtonsOption = SettingsManager.Settings.PowerPointSettings.PPTBButtonsOption;
mw.PPTUIManager.UpdateNavigationButtonStyles();
}
mw?.UpdatePPTBtnPreview();
}
#endregion
#region PPT SlideShow Entry & Gesture
private void ToggleSwitchShowCanvasAtNewSlideShow_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.PowerPointSettings.IsShowCanvasAtNewSlideShow = CardShowCanvasAtNewSlideShow.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchEnableTwoFingerGestureInPresentationMode_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.PowerPointSettings.IsEnableTwoFingerGestureInPresentationMode = CardEnableTwoFingerGestureInPresentationMode.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchEnableFingerGestureSlideShowControl_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl = CardEnableFingerGestureSlideShowControl.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchShowGestureButtonInSlideShow_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
SettingsManager.Settings.PowerPointSettings.ShowGestureButtonInSlideShow = CardShowGestureButtonInSlideShow.IsOn;
SettingsManager.SaveSettingsToFile();
if (mw != null && mw.BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
mw.UpdateGestureButtonVisibilityInPPTMode();
}
private void ToggleSwitchEnablePPTTimeCapsule_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
var mw = GetMainWindow();
SettingsManager.Settings.PowerPointSettings.EnablePPTTimeCapsule = CardEnablePPTTimeCapsule.IsOn;
SettingsManager.SaveSettingsToFile();
if (mw != null && mw.BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
{
mw.UpdatePPTTimeCapsuleVisibility();
mw.UpdatePPTQuickPanelVisibility();
}
}
private void ComboBoxPPTTimeCapsulePosition_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!_isLoaded || ComboBoxPPTTimeCapsulePosition == null) return;
var mw = GetMainWindow();
SettingsManager.Settings.PowerPointSettings.PPTTimeCapsulePosition = ComboBoxPPTTimeCapsulePosition.SelectedIndex;
SettingsManager.SaveSettingsToFile();
if (mw != null && mw.BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
mw.UpdatePPTTimeCapsulePosition();
}
#endregion
#region PPT Auto Save & Notifications
private void ToggleSwitchAutoSaveScreenShotInPowerPoint_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint = CardAutoSaveScreenShotInPowerPoint.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchAutoSaveStrokesInPowerPoint_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.PowerPointSettings.IsAutoSaveStrokesInPowerPoint = CardAutoSaveStrokesInPowerPoint.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchNotifyPreviousPage_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.PowerPointSettings.IsNotifyPreviousPage = CardNotifyPreviousPage.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchAlwaysGoToFirstPageOnReenter_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.PowerPointSettings.IsAlwaysGoToFirstPageOnReenter = CardAlwaysGoToFirstPageOnReenter.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchNotifyHiddenPage_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.PowerPointSettings.IsNotifyHiddenPage = CardNotifyHiddenPage.IsOn;
SettingsManager.SaveSettingsToFile();
}
private void ToggleSwitchNotifyAutoPlayPresentation_Toggled(object sender, RoutedEventArgs e)
{
if (!_isLoaded) return;
SettingsManager.Settings.PowerPointSettings.IsNotifyAutoPlayPresentation = CardNotifyAutoPlayPresentation.IsOn;
SettingsManager.SaveSettingsToFile();
}
#endregion
}
}
@@ -186,6 +186,17 @@
</ui:NavigationViewItem.MenuItems>
</ui:NavigationViewItem>
<!-- PowerPoint -->
<ui:NavigationViewItem
x:Name="PowerPointPageItem"
Content="PowerPoint"
Tag="PowerPointPage"
ToolTipService.ToolTip="PowerPoint 设置">
<ui:NavigationViewItem.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Slideshow}"/>
</ui:NavigationViewItem.Icon>
</ui:NavigationViewItem>
<!-- 更新设置 -->
<ui:NavigationViewItem
x:Name="UpdatePageItem"
@@ -219,6 +230,17 @@
</ui:NavigationViewItem.Icon>
</ui:NavigationViewItem>
<!-- 自动化 -->
<ui:NavigationViewItem
x:Name="AutomationPageItem"
Content="自动化"
Tag="AutomationPage"
ToolTipService.ToolTip="自动化设置">
<ui:NavigationViewItem.Icon>
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Sync}"/>
</ui:NavigationViewItem.Icon>
</ui:NavigationViewItem>
<!-- 画板设置 -->
<ui:NavigationViewItem
x:Name="CanvasPageItem"
@@ -44,6 +44,8 @@ namespace Ink_Canvas.Windows.SettingsViews
{ "UpdatePage", typeof(UpdatePage) },
{ "ExperimentalPage", typeof(ExperimentalPage) },
{ "AdvancedPage", typeof(AdvancedPage) },
{ "AutomationPage", typeof(AutomationPage) },
{ "PowerPointPage", typeof(PowerPointPage) },
{ "RandomDrawPage", typeof(RandomDrawPage) },
{ "CanvasPage", typeof(CanvasPage) },
{ "InkRecognitionPage", typeof(InkRecognitionPage) },