From bd2658c9189b5ae98333d7ec57ebf18becc2c100 Mon Sep 17 00:00:00 2001 From: AstraZero Date: Sun, 28 Jun 2026 07:56:15 +0800 Subject: [PATCH 1/6] Feat: Ppt button preview --- Ink Canvas/Properties/PPTStrings.Designer.cs | 10 + Ink Canvas/Properties/PPTStrings.en-US.resx | 15 + Ink Canvas/Properties/PPTStrings.resx | 15 + Ink Canvas/Properties/PPTStrings.zh-ME.resx | 17 +- .../Pages/PPTFlipButtonSettingsPage.xaml | 243 ++++++++ .../Pages/PPTFlipButtonSettingsPage.xaml.cs | 477 +++++++++++++++ .../SettingsViews/Pages/PowerPointPage.xaml | 548 +++++++----------- .../Pages/PowerPointPage.xaml.cs | 380 +----------- .../SettingsViews/SettingsWindow.xaml.cs | 2 + 9 files changed, 1002 insertions(+), 705 deletions(-) create mode 100644 Ink Canvas/Windows/SettingsViews/Pages/PPTFlipButtonSettingsPage.xaml create mode 100644 Ink Canvas/Windows/SettingsViews/Pages/PPTFlipButtonSettingsPage.xaml.cs diff --git a/Ink Canvas/Properties/PPTStrings.Designer.cs b/Ink Canvas/Properties/PPTStrings.Designer.cs index 28423a24..e988f922 100644 --- a/Ink Canvas/Properties/PPTStrings.Designer.cs +++ b/Ink Canvas/Properties/PPTStrings.Designer.cs @@ -68,6 +68,16 @@ public static string GetString(string key) public static string FlipButtonsScale => ResourceManager.GetString(nameof(FlipButtonsScale), _resourceCulture); + public static string FlipButtonsSettingHint => ResourceManager.GetString(nameof(FlipButtonsSettingHint), _resourceCulture); + + public static string Configure => ResourceManager.GetString(nameof(Configure), _resourceCulture); + + public static string GlobalSettings => ResourceManager.GetString(nameof(GlobalSettings), _resourceCulture); + + public static string Positions => ResourceManager.GetString(nameof(Positions), _resourceCulture); + + public static string EnablePositionButton => ResourceManager.GetString(nameof(EnablePositionButton), _resourceCulture); + public static string GoToFirstPageOnReenter => ResourceManager.GetString(nameof(GoToFirstPageOnReenter), _resourceCulture); public static string GroupTitle => ResourceManager.GetString(nameof(GroupTitle), _resourceCulture); diff --git a/Ink Canvas/Properties/PPTStrings.en-US.resx b/Ink Canvas/Properties/PPTStrings.en-US.resx index 018c105d..11b6b82d 100644 --- a/Ink Canvas/Properties/PPTStrings.en-US.resx +++ b/Ink Canvas/Properties/PPTStrings.en-US.resx @@ -84,6 +84,21 @@ Page-turn button size + + Configure the position, appearance, and behavior of page-turn buttons + + + Configure + + + Global settings + + + Display positions + + + Enable {0} button + Go to first slide when starting a slideshow diff --git a/Ink Canvas/Properties/PPTStrings.resx b/Ink Canvas/Properties/PPTStrings.resx index 183a5838..c9dd7f68 100644 --- a/Ink Canvas/Properties/PPTStrings.resx +++ b/Ink Canvas/Properties/PPTStrings.resx @@ -84,6 +84,21 @@ 翻页按钮大小 + + 配置翻页按钮的位置、外观与行为 + + + 配置 + + + 全局设置 + + + 显示位置 + + + 启用{0}按钮 + 进入放映时回到首页 diff --git a/Ink Canvas/Properties/PPTStrings.zh-ME.resx b/Ink Canvas/Properties/PPTStrings.zh-ME.resx index 28cffd99..100d00ca 100644 --- a/Ink Canvas/Properties/PPTStrings.zh-ME.resx +++ b/Ink Canvas/Properties/PPTStrings.zh-ME.resx @@ -1,4 +1,4 @@ - + @@ -84,6 +84,21 @@ 翻页按钮大小 + + 配置翻页按钮的位置、外观和行为 + + + 配置 + + + 全局设置 + + + 显示位置 + + + 启用{0}按钮 + 进放映时回到首页 diff --git a/Ink Canvas/Windows/SettingsViews/Pages/PPTFlipButtonSettingsPage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/PPTFlipButtonSettingsPage.xaml new file mode 100644 index 00000000..ff3a0676 --- /dev/null +++ b/Ink Canvas/Windows/SettingsViews/Pages/PPTFlipButtonSettingsPage.xaml @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + @@ -368,7 +369,7 @@ - @@ -99,33 +101,6 @@ Icon="{x:Static ui:SegoeFluentIcons.ShowResults}" Toggled="ToggleSwitchShowPPTButton_OnToggled"/> - - - - - - - - - - - - - (checkbox.Tag.ToString(), out dir)) return; - - var ppt = SettingsManager.Settings.PowerPointSettings; - var str = ppt.PPTButtonsDisplayOption.ToString(); - char[] c = str.ToCharArray(); - int idx = GetDisplayOptionIndex(dir); - if (idx < c.Length) - { - c[idx] = checkbox.IsChecked == true ? '2' : '1'; - ppt.PPTButtonsDisplayOption = int.Parse(new string(c)); - SettingsManager.SaveSettingsToFile(); - SettingsActionHub.OnPPTButtonsDisplayOptionChanged(); - - if (_selectedDirection == dir) - { - _isLoaded = false; - CardEnablePositionButton.IsOn = checkbox.IsChecked == true; - _isLoaded = true; - } UpdatePreview(); } } diff --git a/Ink Canvas/Windows/SettingsViews/Pages/ToolbarMenuPage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/ToolbarMenuPage.xaml index 3450d90f..82d42e1a 100644 --- a/Ink Canvas/Windows/SettingsViews/Pages/ToolbarMenuPage.xaml +++ b/Ink Canvas/Windows/SettingsViews/Pages/ToolbarMenuPage.xaml @@ -169,6 +169,6 @@ - - - - - + @@ -548,6 +548,6 @@ From 774d7a687604abbac7862c08a0ceea30315c97a6 Mon Sep 17 00:00:00 2001 From: PrefacedCorg <1876568293@qq.com> Date: Sun, 28 Jun 2026 15:01:05 +0800 Subject: [PATCH 5/6] =?UTF-8?q?Summary=EF=BC=9F=E4=B8=8D=E4=BC=9A=E5=A1=AB?= =?UTF-8?q?=E6=80=8E=E4=B9=88=E5=8A=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Pages/PPTFlipButtonSettingsPage.xaml | 17 ++++++++++++- .../Pages/PPTFlipButtonSettingsPage.xaml.cs | 24 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/Ink Canvas/Windows/SettingsViews/Pages/PPTFlipButtonSettingsPage.xaml b/Ink Canvas/Windows/SettingsViews/Pages/PPTFlipButtonSettingsPage.xaml index abcaee92..a85ae85e 100644 --- a/Ink Canvas/Windows/SettingsViews/Pages/PPTFlipButtonSettingsPage.xaml +++ b/Ink Canvas/Windows/SettingsViews/Pages/PPTFlipButtonSettingsPage.xaml @@ -96,11 +96,26 @@ - + + + + + + + + + + + + + 0, + PPTNavBar.NavDirection.RightSide => 1, + PPTNavBar.NavDirection.LeftBottom => 2, + PPTNavBar.NavDirection.RightBottom => 3, + _ => 0 + }; + _isSyncingPosition = false; + string title = direction switch { PPTNavBar.NavDirection.LeftSide => Properties.PPTStrings.Position_Left, @@ -280,6 +293,17 @@ private void PreviewRB_MouseLeftButtonDown(object sender, System.Windows.Input.M SelectPosition(PPTNavBar.NavDirection.RightBottom); } + private void ComboBoxPosition_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (!_isLoaded || _isSyncingPosition) return; + var item = ComboBoxPosition.SelectedItem as ComboBoxItem; + if (item?.Tag == null) return; + if (Enum.TryParse(item.Tag.ToString(), out var dir)) + { + SelectPosition(dir); + } + } + #endregion #region Position & Opacity Sliders From f720783d7d8f9d34ad4959544f07845599eb2f25 Mon Sep 17 00:00:00 2001 From: AstraZero Date: Sun, 28 Jun 2026 16:58:50 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E6=88=91=E4=B9=9F=E4=B8=8D=E4=BC=9A?= =?UTF-8?q?=E5=86=99summary=E5=96=B5=E5=96=B5=E5=96=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas/Helpers/PPTUIManager.cs | 60 ++++---- Ink Canvas/MainWindow_cs/MW_PPT.cs | 14 ++ Ink Canvas/MainWindow_cs/MW_Settings.cs | 9 ++ Ink Canvas/Resources/Settings.cs | 104 ++++++++++++++ .../Helpers/SettingsActionHub.cs | 40 ++++++ .../Pages/PPTFlipButtonSettingsPage.xaml.cs | 136 +++++++++--------- 6 files changed, 266 insertions(+), 97 deletions(-) diff --git a/Ink Canvas/Helpers/PPTUIManager.cs b/Ink Canvas/Helpers/PPTUIManager.cs index 74f299b5..6194fda6 100644 --- a/Ink Canvas/Helpers/PPTUIManager.cs +++ b/Ink Canvas/Helpers/PPTUIManager.cs @@ -15,6 +15,14 @@ public class PPTUIManager public int PPTButtonsDisplayOption { get; set; } = 2222; public int PPTSButtonsOption { get; set; } = 221; public int PPTBButtonsOption { get; set; } = 121; + public bool PPTLSButtonShowPageNumber { get; set; } = true; + public bool PPTRSButtonShowPageNumber { get; set; } = true; + public bool PPTLBButtonShowPageNumber { get; set; } = false; + public bool PPTRBButtonShowPageNumber { get; set; } = false; + public bool PPTLSButtonBlackBackground { get; set; } = false; + public bool PPTRSButtonBlackBackground { get; set; } = false; + public bool PPTLBButtonBlackBackground { get; set; } = false; + public bool PPTRBButtonBlackBackground { get; set; } = false; public int PPTLSButtonPosition { get; set; } = 0; public int PPTRSButtonPosition { get; set; } = 0; public int PPTLBButtonPosition { get; set; } = 0; @@ -256,7 +264,7 @@ public void UpdateNavigationPanelsVisibility() _mainWindow.RightBottomPanelForPPTNavigation.Margin = new Thickness(0, 0, 6 + PPTRBButtonPosition, 6); // 根据显示选项设置面板可见性 - var displayOption = PPTButtonsDisplayOption.ToString(); + var displayOption = PPTButtonsDisplayOption.ToString().PadLeft(4, '1'); if (displayOption.Length >= 4) { var options = displayOption.ToCharArray(); @@ -400,24 +408,17 @@ private void UpdateSideButtonStyles() { try { - var sideOption = PPTSButtonsOption.ToString(); - if (sideOption.Length < 3) return; - - var options = sideOption.ToCharArray(); - - // 页码按钮显示 - var pageButtonVisibility = options[0] == '2' ? Visibility.Visible : Visibility.Collapsed; - _mainWindow.LeftSidePanelForPPTNavigation.SetPageButtonVisibility(pageButtonVisibility); - _mainWindow.RightSidePanelForPPTNavigation.SetPageButtonVisibility(pageButtonVisibility); - - // 透明度 + // 左侧按钮 + _mainWindow.LeftSidePanelForPPTNavigation.SetPageButtonVisibility( + PPTLSButtonShowPageNumber ? Visibility.Visible : Visibility.Collapsed); _mainWindow.LeftSidePanelForPPTNavigation.SetBarOpacity(PPTLSButtonOpacity); - _mainWindow.RightSidePanelForPPTNavigation.SetBarOpacity(PPTRSButtonOpacity); + _mainWindow.LeftSidePanelForPPTNavigation.ApplyTheme(PPTLSButtonBlackBackground); - // 颜色主题 - bool isDarkTheme = options[2] == '2'; - _mainWindow.LeftSidePanelForPPTNavigation.ApplyTheme(isDarkTheme); - _mainWindow.RightSidePanelForPPTNavigation.ApplyTheme(isDarkTheme); + // 右侧按钮 + _mainWindow.RightSidePanelForPPTNavigation.SetPageButtonVisibility( + PPTRSButtonShowPageNumber ? Visibility.Visible : Visibility.Collapsed); + _mainWindow.RightSidePanelForPPTNavigation.SetBarOpacity(PPTRSButtonOpacity); + _mainWindow.RightSidePanelForPPTNavigation.ApplyTheme(PPTRSButtonBlackBackground); } catch (Exception ex) { @@ -429,24 +430,17 @@ private void UpdateBottomButtonStyles() { try { - var bottomOption = PPTBButtonsOption.ToString(); - if (bottomOption.Length < 3) return; - - var options = bottomOption.ToCharArray(); - - // 页码按钮显示 - var pageButtonVisibility = options[0] == '2' ? Visibility.Visible : Visibility.Collapsed; - _mainWindow.LeftBottomPanelForPPTNavigation.SetPageButtonVisibility(pageButtonVisibility); - _mainWindow.RightBottomPanelForPPTNavigation.SetPageButtonVisibility(pageButtonVisibility); - - // 透明度 + // 左下按钮 + _mainWindow.LeftBottomPanelForPPTNavigation.SetPageButtonVisibility( + PPTLBButtonShowPageNumber ? Visibility.Visible : Visibility.Collapsed); _mainWindow.LeftBottomPanelForPPTNavigation.SetBarOpacity(PPTLBButtonOpacity); - _mainWindow.RightBottomPanelForPPTNavigation.SetBarOpacity(PPTRBButtonOpacity); + _mainWindow.LeftBottomPanelForPPTNavigation.ApplyTheme(PPTLBButtonBlackBackground); - // 颜色主题 - bool isDarkTheme = options[2] == '2'; - _mainWindow.LeftBottomPanelForPPTNavigation.ApplyTheme(isDarkTheme); - _mainWindow.RightBottomPanelForPPTNavigation.ApplyTheme(isDarkTheme); + // 右下按钮 + _mainWindow.RightBottomPanelForPPTNavigation.SetPageButtonVisibility( + PPTRBButtonShowPageNumber ? Visibility.Visible : Visibility.Collapsed); + _mainWindow.RightBottomPanelForPPTNavigation.SetBarOpacity(PPTRBButtonOpacity); + _mainWindow.RightBottomPanelForPPTNavigation.ApplyTheme(PPTRBButtonBlackBackground); } catch (Exception ex) { diff --git a/Ink Canvas/MainWindow_cs/MW_PPT.cs b/Ink Canvas/MainWindow_cs/MW_PPT.cs index eab761db..bcf9e762 100644 --- a/Ink Canvas/MainWindow_cs/MW_PPT.cs +++ b/Ink Canvas/MainWindow_cs/MW_PPT.cs @@ -314,6 +314,7 @@ public void InitializePPTManagers() // 初始化UI管理器 _pptUIManager = new PPTUIManager(this); + Settings.PowerPointSettings.MigrateLegacyButtonOptions(); _pptUIManager.ShowPPTButton = Settings.PowerPointSettings.ShowPPTButton; _pptUIManager.PPTButtonsDisplayOption = Settings.PowerPointSettings.PPTButtonsDisplayOption; _pptUIManager.PPTSButtonsOption = Settings.PowerPointSettings.PPTSButtonsOption; @@ -324,6 +325,19 @@ public void InitializePPTManagers() _pptUIManager.PPTRBButtonPosition = Settings.PowerPointSettings.PPTRBButtonPosition; _pptUIManager.EnablePPTButtonPageClickable = Settings.PowerPointSettings.EnablePPTButtonPageClickable; _pptUIManager.EnablePPTButtonLongPressPageTurn = Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn; + _pptUIManager.PPTLSButtonOpacity = Settings.PowerPointSettings.PPTLSButtonOpacity; + _pptUIManager.PPTRSButtonOpacity = Settings.PowerPointSettings.PPTRSButtonOpacity; + _pptUIManager.PPTLBButtonOpacity = Settings.PowerPointSettings.PPTLBButtonOpacity; + _pptUIManager.PPTRBButtonOpacity = Settings.PowerPointSettings.PPTRBButtonOpacity; + _pptUIManager.PPTLSButtonShowPageNumber = Settings.PowerPointSettings.PPTLSButtonShowPageNumber; + _pptUIManager.PPTRSButtonShowPageNumber = Settings.PowerPointSettings.PPTRSButtonShowPageNumber; + _pptUIManager.PPTLBButtonShowPageNumber = Settings.PowerPointSettings.PPTLBButtonShowPageNumber; + _pptUIManager.PPTRBButtonShowPageNumber = Settings.PowerPointSettings.PPTRBButtonShowPageNumber; + _pptUIManager.PPTLSButtonBlackBackground = Settings.PowerPointSettings.PPTLSButtonBlackBackground; + _pptUIManager.PPTRSButtonBlackBackground = Settings.PowerPointSettings.PPTRSButtonBlackBackground; + _pptUIManager.PPTLBButtonBlackBackground = Settings.PowerPointSettings.PPTLBButtonBlackBackground; + _pptUIManager.PPTRBButtonBlackBackground = Settings.PowerPointSettings.PPTRBButtonBlackBackground; + _pptUIManager.PPTNavBarScale = Settings.PowerPointSettings.PPTNavBarScale; LogHelper.WriteLogToFile("PPT管理器初始化完成", LogHelper.LogType.Event); } diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs index 299af31f..6e2f7a8d 100644 --- a/Ink Canvas/MainWindow_cs/MW_Settings.cs +++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs @@ -500,6 +500,7 @@ public void UpdatePPTUIManagerSettings() { if (_pptUIManager != null && IsInPPTPresentationMode) { + Settings.PowerPointSettings.MigrateLegacyButtonOptions(); _pptUIManager.PPTButtonsDisplayOption = Settings.PowerPointSettings.PPTButtonsDisplayOption; _pptUIManager.PPTSButtonsOption = Settings.PowerPointSettings.PPTSButtonsOption; _pptUIManager.PPTBButtonsOption = Settings.PowerPointSettings.PPTBButtonsOption; @@ -513,6 +514,14 @@ public void UpdatePPTUIManagerSettings() _pptUIManager.PPTRSButtonOpacity = Settings.PowerPointSettings.PPTRSButtonOpacity; _pptUIManager.PPTLBButtonOpacity = Settings.PowerPointSettings.PPTLBButtonOpacity; _pptUIManager.PPTRBButtonOpacity = Settings.PowerPointSettings.PPTRBButtonOpacity; + _pptUIManager.PPTLSButtonShowPageNumber = Settings.PowerPointSettings.PPTLSButtonShowPageNumber; + _pptUIManager.PPTRSButtonShowPageNumber = Settings.PowerPointSettings.PPTRSButtonShowPageNumber; + _pptUIManager.PPTLBButtonShowPageNumber = Settings.PowerPointSettings.PPTLBButtonShowPageNumber; + _pptUIManager.PPTRBButtonShowPageNumber = Settings.PowerPointSettings.PPTRBButtonShowPageNumber; + _pptUIManager.PPTLSButtonBlackBackground = Settings.PowerPointSettings.PPTLSButtonBlackBackground; + _pptUIManager.PPTRSButtonBlackBackground = Settings.PowerPointSettings.PPTRSButtonBlackBackground; + _pptUIManager.PPTLBButtonBlackBackground = Settings.PowerPointSettings.PPTLBButtonBlackBackground; + _pptUIManager.PPTRBButtonBlackBackground = Settings.PowerPointSettings.PPTRBButtonBlackBackground; _pptUIManager.PPTNavBarScale = Settings.PowerPointSettings.PPTNavBarScale; _pptUIManager.UpdateNavigationPanelsVisibility(); _pptUIManager.UpdateNavigationButtonStyles(); diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs index 9ef08cf9..8d93e2a3 100644 --- a/Ink Canvas/Resources/Settings.cs +++ b/Ink Canvas/Resources/Settings.cs @@ -683,6 +683,30 @@ public class PowerPointSettings [JsonProperty("pptBButtonsOption")] public int PPTBButtonsOption { get; set; } = 121; + [JsonProperty("pptLSButtonShowPageNumber")] + public bool PPTLSButtonShowPageNumber { get; set; } = true; + + [JsonProperty("pptRSButtonShowPageNumber")] + public bool PPTRSButtonShowPageNumber { get; set; } = true; + + [JsonProperty("pptLBButtonShowPageNumber")] + public bool PPTLBButtonShowPageNumber { get; set; } = false; + + [JsonProperty("pptRBButtonShowPageNumber")] + public bool PPTRBButtonShowPageNumber { get; set; } = false; + + [JsonProperty("pptLSButtonBlackBackground")] + public bool PPTLSButtonBlackBackground { get; set; } = false; + + [JsonProperty("pptRSButtonBlackBackground")] + public bool PPTRSButtonBlackBackground { get; set; } = false; + + [JsonProperty("pptLBButtonBlackBackground")] + public bool PPTLBButtonBlackBackground { get; set; } = false; + + [JsonProperty("pptRBButtonBlackBackground")] + public bool PPTRBButtonBlackBackground { get; set; } = false; + [JsonProperty("enablePPTButtonPageClickable")] public bool EnablePPTButtonPageClickable { get; set; } = true; @@ -707,6 +731,86 @@ public class PowerPointSettings [JsonProperty("pptNavBarScale")] public double PPTNavBarScale { get; set; } = 1.0; + private bool _hasMigratedButtonOptions = false; + + public string GetPPTButtonsDisplayOptionString() + { + return PPTButtonsDisplayOption.ToString().PadLeft(4, '1'); + } + + public void MigrateLegacyButtonOptions() + { + if (_hasMigratedButtonOptions) return; + _hasMigratedButtonOptions = true; + + bool changed = false; + + var dispOpt = PPTButtonsDisplayOption.ToString(); + if (dispOpt.Length < 4) + { + PPTButtonsDisplayOption = int.Parse(dispOpt.PadLeft(4, '1')); + changed = true; + dispOpt = PPTButtonsDisplayOption.ToString(); + } + + if (dispOpt.Length >= 4) + { + bool hasAnyEnabled = dispOpt[0] == '2' || dispOpt[1] == '2' || dispOpt[2] == '2' || dispOpt[3] == '2'; + if (!hasAnyEnabled) + { + PPTButtonsDisplayOption = 2222; + changed = true; + } + } + + var sideOpt = PPTSButtonsOption.ToString(); + if (sideOpt.Length >= 3) + { + bool sideShowPage = sideOpt[0] == '2'; + bool sideBlackBg = sideOpt[2] == '2'; + if (PPTLSButtonShowPageNumber == true && PPTRSButtonShowPageNumber == true) + { + PPTLSButtonShowPageNumber = sideShowPage; + PPTRSButtonShowPageNumber = sideShowPage; + changed = true; + } + if (PPTLSButtonBlackBackground == false && PPTRSButtonBlackBackground == false) + { + PPTLSButtonBlackBackground = sideBlackBg; + PPTRSButtonBlackBackground = sideBlackBg; + changed = true; + } + } + + var bottomOpt = PPTBButtonsOption.ToString(); + if (bottomOpt.Length >= 3) + { + bool bottomShowPage = bottomOpt[0] == '2'; + bool bottomBlackBg = bottomOpt[2] == '2'; + if (PPTLBButtonShowPageNumber == false && PPTRBButtonShowPageNumber == false) + { + PPTLBButtonShowPageNumber = bottomShowPage; + PPTRBButtonShowPageNumber = bottomShowPage; + changed = true; + } + if (PPTLBButtonBlackBackground == false && PPTRBButtonBlackBackground == false) + { + PPTLBButtonBlackBackground = bottomBlackBg; + PPTRBButtonBlackBackground = bottomBlackBg; + changed = true; + } + } + + if (changed) + { + try + { + Windows.SettingsViews.Helpers.SettingsManager.SaveSettingsToFile(); + } + catch { } + } + } + // -- new -- [JsonProperty("powerPointSupport")] diff --git a/Ink Canvas/Windows/SettingsViews/Helpers/SettingsActionHub.cs b/Ink Canvas/Windows/SettingsViews/Helpers/SettingsActionHub.cs index 19f3c973..31e70987 100644 --- a/Ink Canvas/Windows/SettingsViews/Helpers/SettingsActionHub.cs +++ b/Ink Canvas/Windows/SettingsViews/Helpers/SettingsActionHub.cs @@ -635,6 +635,46 @@ public static void OnPPTBButtonsOptionChanged() mw?.UpdatePPTBtnPreview(); } + public static void OnPPTButtonShowPageNumberChanged(string buttonKey, bool value) + { + var mw = GetMainWindow(); + if (mw?.PPTUIManager != null) + { + switch (buttonKey) + { + case "LS": mw.PPTUIManager.PPTLSButtonShowPageNumber = value; break; + case "RS": mw.PPTUIManager.PPTRSButtonShowPageNumber = value; break; + case "LB": mw.PPTUIManager.PPTLBButtonShowPageNumber = value; break; + case "RB": mw.PPTUIManager.PPTRBButtonShowPageNumber = value; break; + } + if (mw.IsInPPTPresentationMode) + { + mw.PPTUIManager.UpdateNavigationButtonStyles(); + } + } + mw?.UpdatePPTBtnPreview(); + } + + public static void OnPPTButtonBlackBackgroundChanged(string buttonKey, bool value) + { + var mw = GetMainWindow(); + if (mw?.PPTUIManager != null) + { + switch (buttonKey) + { + case "LS": mw.PPTUIManager.PPTLSButtonBlackBackground = value; break; + case "RS": mw.PPTUIManager.PPTRSButtonBlackBackground = value; break; + case "LB": mw.PPTUIManager.PPTLBButtonBlackBackground = value; break; + case "RB": mw.PPTUIManager.PPTRBButtonBlackBackground = value; break; + } + if (mw.IsInPPTPresentationMode) + { + mw.PPTUIManager.UpdateNavigationButtonStyles(); + } + } + mw?.UpdatePPTBtnPreview(); + } + public static void OnPPTBButtonsOptionWithOpacityChanged() { var mw = GetMainWindow(); diff --git a/Ink Canvas/Windows/SettingsViews/Pages/PPTFlipButtonSettingsPage.xaml.cs b/Ink Canvas/Windows/SettingsViews/Pages/PPTFlipButtonSettingsPage.xaml.cs index a5d6785c..27649966 100644 --- a/Ink Canvas/Windows/SettingsViews/Pages/PPTFlipButtonSettingsPage.xaml.cs +++ b/Ink Canvas/Windows/SettingsViews/Pages/PPTFlipButtonSettingsPage.xaml.cs @@ -29,10 +29,23 @@ public PPTFlipButtonSettingsPage() private void PPTFlipButtonSettingsPage_Loaded(object sender, RoutedEventArgs e) { LoadSettings(); + + // 先同步 ComboBox 选中项(不触发 SelectionChanged),再显示设置面板 + _isSyncingPosition = true; + ComboBoxPosition.SelectedIndex = _selectedDirection switch + { + PPTNavBar.NavDirection.LeftSide => 0, + PPTNavBar.NavDirection.RightSide => 1, + PPTNavBar.NavDirection.LeftBottom => 2, + PPTNavBar.NavDirection.RightBottom => 3, + _ => 0 + }; + _isSyncingPosition = false; + SelectPosition(_selectedDirection); + _isLoaded = true; UpdateAllSliderTexts(); UpdatePreview(); - SelectPosition(_selectedDirection); SliderTouchHelper.AddTouchSupportToAllSliders(this); // 进入本页时把导航栏切到 LeftMinimal,给预览更多空间 @@ -87,6 +100,8 @@ private void LoadSettings() CardEnablePPTButtonLongPressPageTurn.IsOn = ppt.EnablePPTButtonLongPressPageTurn; _isLoaded = true; + + UpdatePreview(); } private void UpdateAllSliderTexts() @@ -107,15 +122,15 @@ private void UpdateSliderText(Slider slider, TextBlock textBlock, string format) public void UpdatePreview() { var ppt = SettingsManager.Settings.PowerPointSettings; - var displayOpt = ppt.PPTButtonsDisplayOption.ToString(); + var displayOpt = ppt.GetPPTButtonsDisplayOptionString(); - UpdatePreviewNavBar(PreviewLS, PreviewLSBorder, displayOpt, 2, ppt.PPTLSButtonPosition, ppt.PPTLSButtonOpacity, ppt.PPTSButtonsOption.ToString()); - UpdatePreviewNavBar(PreviewRS, PreviewRSBorder, displayOpt, 3, ppt.PPTRSButtonPosition, ppt.PPTRSButtonOpacity, ppt.PPTSButtonsOption.ToString()); - UpdatePreviewNavBar(PreviewLB, PreviewLBBorder, displayOpt, 0, ppt.PPTLBButtonPosition, ppt.PPTLBButtonOpacity, ppt.PPTBButtonsOption.ToString()); - UpdatePreviewNavBar(PreviewRB, PreviewRBBorder, displayOpt, 1, ppt.PPTRBButtonPosition, ppt.PPTRBButtonOpacity, ppt.PPTBButtonsOption.ToString()); + UpdatePreviewNavBar(PreviewLS, PreviewLSBorder, displayOpt, 2, ppt.PPTLSButtonPosition, ppt.PPTLSButtonOpacity, ppt.PPTLSButtonShowPageNumber, ppt.PPTLSButtonBlackBackground); + UpdatePreviewNavBar(PreviewRS, PreviewRSBorder, displayOpt, 3, ppt.PPTRSButtonPosition, ppt.PPTRSButtonOpacity, ppt.PPTRSButtonShowPageNumber, ppt.PPTRSButtonBlackBackground); + UpdatePreviewNavBar(PreviewLB, PreviewLBBorder, displayOpt, 0, ppt.PPTLBButtonPosition, ppt.PPTLBButtonOpacity, ppt.PPTLBButtonShowPageNumber, ppt.PPTLBButtonBlackBackground); + UpdatePreviewNavBar(PreviewRB, PreviewRBBorder, displayOpt, 1, ppt.PPTRBButtonPosition, ppt.PPTRBButtonOpacity, ppt.PPTRBButtonShowPageNumber, ppt.PPTRBButtonBlackBackground); } - private void UpdatePreviewNavBar(PPTNavBar navBar, Border border, string displayOpt, int index, int offset, double opacity, string groupOpt) + private void UpdatePreviewNavBar(PPTNavBar navBar, Border border, string displayOpt, int index, int offset, double opacity, bool showPageNumber, bool blackBackground) { bool isEnabled = displayOpt.Length > index && displayOpt[index] == '2'; bool showTotal = CardShowPPTButton.IsOn && isEnabled; @@ -128,7 +143,6 @@ private void UpdatePreviewNavBar(PPTNavBar navBar, Border border, string display navBar.SetBarOpacity(opacity); - // 按 16:9 容器实际尺寸缩放 Margin(位置跟随 Image 缩放,但 Border 大小保持不变) double viewScale = (PreviewCanvas != null && PreviewCanvas.ActualWidth > 0) ? PreviewCanvas.ActualWidth / 1600.0 : 1.0; var direction = navBar.Direction; @@ -149,29 +163,14 @@ private void UpdatePreviewNavBar(PPTNavBar navBar, Border border, string display border.Margin = new Thickness(0, 0, (6 + offset) * viewScale, 6 * viewScale); } - bool showPage = groupOpt.Length > 0 && groupOpt[0] == '2'; - navBar.PageButtonBorder.Visibility = showPage ? Visibility.Visible : Visibility.Collapsed; - - bool isDark = groupOpt.Length > 2 && groupOpt[2] == '2'; - navBar.ApplyTheme(isDark); + navBar.PageButtonBorder.Visibility = showPageNumber ? Visibility.Visible : Visibility.Collapsed; + navBar.ApplyTheme(blackBackground); } private void SelectPosition(PPTNavBar.NavDirection direction) { _selectedDirection = direction; - // 同步 ComboBox 选中项 - _isSyncingPosition = true; - ComboBoxPosition.SelectedIndex = direction switch - { - PPTNavBar.NavDirection.LeftSide => 0, - PPTNavBar.NavDirection.RightSide => 1, - PPTNavBar.NavDirection.LeftBottom => 2, - PPTNavBar.NavDirection.RightBottom => 3, - _ => 0 - }; - _isSyncingPosition = false; - string title = direction switch { PPTNavBar.NavDirection.LeftSide => Properties.PPTStrings.Position_Left, @@ -221,7 +220,7 @@ private void SelectPosition(PPTNavBar.NavDirection direction) // Load current values _isLoaded = false; var ppt = SettingsManager.Settings.PowerPointSettings; - var displayOpt = ppt.PPTButtonsDisplayOption.ToString(); + var displayOpt = ppt.GetPPTButtonsDisplayOptionString(); int idx = GetDisplayOptionIndex(direction); CardEnablePositionButton.IsOn = displayOpt.Length > idx && displayOpt[idx] == '2'; @@ -243,14 +242,23 @@ private void SelectPosition(PPTNavBar.NavDirection direction) _ => 0.5 }; - string groupOpt; - if (IsSideButton(direction)) - groupOpt = ppt.PPTSButtonsOption.ToString(); - else - groupOpt = ppt.PPTBButtonsOption.ToString(); + CheckboxShowPageNumber.IsChecked = direction switch + { + PPTNavBar.NavDirection.LeftSide => ppt.PPTLSButtonShowPageNumber, + PPTNavBar.NavDirection.RightSide => ppt.PPTRSButtonShowPageNumber, + PPTNavBar.NavDirection.LeftBottom => ppt.PPTLBButtonShowPageNumber, + PPTNavBar.NavDirection.RightBottom => ppt.PPTRBButtonShowPageNumber, + _ => false + }; - CheckboxShowPageNumber.IsChecked = groupOpt.Length > 0 && groupOpt[0] == '2'; - CheckboxBlackBackground.IsChecked = groupOpt.Length > 2 && groupOpt[2] == '2'; + CheckboxBlackBackground.IsChecked = direction switch + { + PPTNavBar.NavDirection.LeftSide => ppt.PPTLSButtonBlackBackground, + PPTNavBar.NavDirection.RightSide => ppt.PPTRSButtonBlackBackground, + PPTNavBar.NavDirection.LeftBottom => ppt.PPTLBButtonBlackBackground, + PPTNavBar.NavDirection.RightBottom => ppt.PPTRBButtonBlackBackground, + _ => false + }; UpdateAllSliderTexts(); _isLoaded = true; @@ -383,7 +391,7 @@ private void ToggleSwitchEnablePositionButton_Toggled(object sender, RoutedEvent { if (!_isLoaded) return; var ppt = SettingsManager.Settings.PowerPointSettings; - var str = ppt.PPTButtonsDisplayOption.ToString(); + var str = ppt.GetPPTButtonsDisplayOptionString(); char[] c = str.ToCharArray(); int idx = GetDisplayOptionIndex(_selectedDirection); if (idx < c.Length) @@ -400,24 +408,24 @@ private void CheckboxShowPageNumber_Changed(object sender, RoutedEventArgs e) { if (!_isLoaded) return; var ppt = SettingsManager.Settings.PowerPointSettings; - if (IsSideButton(_selectedDirection)) + bool val = CheckboxShowPageNumber.IsChecked == true; + string key = _selectedDirection switch { - var str = ppt.PPTSButtonsOption.ToString(); - char[] c = str.ToCharArray(); - c[0] = CheckboxShowPageNumber.IsChecked == true ? '2' : '1'; - ppt.PPTSButtonsOption = int.Parse(new string(c)); - SettingsManager.SaveSettingsToFile(); - SettingsActionHub.OnPPTSButtonsOptionChanged(); - } - else + PPTNavBar.NavDirection.LeftSide => "LS", + PPTNavBar.NavDirection.RightSide => "RS", + PPTNavBar.NavDirection.LeftBottom => "LB", + PPTNavBar.NavDirection.RightBottom => "RB", + _ => "LS" + }; + switch (_selectedDirection) { - var str = ppt.PPTBButtonsOption.ToString(); - char[] c = str.ToCharArray(); - c[0] = CheckboxShowPageNumber.IsChecked == true ? '2' : '1'; - ppt.PPTBButtonsOption = int.Parse(new string(c)); - SettingsManager.SaveSettingsToFile(); - SettingsActionHub.OnPPTBButtonsOptionChanged(); + case PPTNavBar.NavDirection.LeftSide: ppt.PPTLSButtonShowPageNumber = val; break; + case PPTNavBar.NavDirection.RightSide: ppt.PPTRSButtonShowPageNumber = val; break; + case PPTNavBar.NavDirection.LeftBottom: ppt.PPTLBButtonShowPageNumber = val; break; + case PPTNavBar.NavDirection.RightBottom: ppt.PPTRBButtonShowPageNumber = val; break; } + SettingsManager.SaveSettingsToFile(); + SettingsActionHub.OnPPTButtonShowPageNumberChanged(key, val); UpdatePreview(); } @@ -425,24 +433,24 @@ private void CheckboxBlackBackground_Changed(object sender, RoutedEventArgs e) { if (!_isLoaded) return; var ppt = SettingsManager.Settings.PowerPointSettings; - if (IsSideButton(_selectedDirection)) + bool val = CheckboxBlackBackground.IsChecked == true; + string key = _selectedDirection switch { - var str = ppt.PPTSButtonsOption.ToString(); - char[] c = str.ToCharArray(); - c[2] = CheckboxBlackBackground.IsChecked == true ? '2' : '1'; - ppt.PPTSButtonsOption = int.Parse(new string(c)); - SettingsManager.SaveSettingsToFile(); - SettingsActionHub.OnPPTSButtonsOptionChanged(); - } - else + PPTNavBar.NavDirection.LeftSide => "LS", + PPTNavBar.NavDirection.RightSide => "RS", + PPTNavBar.NavDirection.LeftBottom => "LB", + PPTNavBar.NavDirection.RightBottom => "RB", + _ => "LS" + }; + switch (_selectedDirection) { - var str = ppt.PPTBButtonsOption.ToString(); - char[] c = str.ToCharArray(); - c[2] = CheckboxBlackBackground.IsChecked == true ? '2' : '1'; - ppt.PPTBButtonsOption = int.Parse(new string(c)); - SettingsManager.SaveSettingsToFile(); - SettingsActionHub.OnPPTBButtonsOptionChanged(); + case PPTNavBar.NavDirection.LeftSide: ppt.PPTLSButtonBlackBackground = val; break; + case PPTNavBar.NavDirection.RightSide: ppt.PPTRSButtonBlackBackground = val; break; + case PPTNavBar.NavDirection.LeftBottom: ppt.PPTLBButtonBlackBackground = val; break; + case PPTNavBar.NavDirection.RightBottom: ppt.PPTRBButtonBlackBackground = val; break; } + SettingsManager.SaveSettingsToFile(); + SettingsActionHub.OnPPTButtonBlackBackgroundChanged(key, val); UpdatePreview(); }