using Ink_Canvas.Helpers; using Newtonsoft.Json; using System; using System.Diagnostics; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Diagnostics; using File = System.IO.File; using System.Windows.Media; using System.Windows.Ink; namespace Ink_Canvas { public partial class MainWindow : Window { #region Behavior private void ToggleSwitchIsAutoUpdate_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Startup.IsAutoUpdate = ToggleSwitchIsAutoUpdate.IsOn; ToggleSwitchIsAutoUpdateWithSilence.Visibility = ToggleSwitchIsAutoUpdate.IsOn ? Visibility.Visible : Visibility.Collapsed; SaveSettingsToFile(); } private void ToggleSwitchIsAutoUpdateWithSilence_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Startup.IsAutoUpdateWithSilence = ToggleSwitchIsAutoUpdateWithSilence.IsOn; AutoUpdateTimePeriodBlock.Visibility = Settings.Startup.IsAutoUpdateWithSilence ? Visibility.Visible : Visibility.Collapsed; SaveSettingsToFile(); } private void ToggleSwitchIsAutoUpdateWithProxy_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Startup.IsAutoUpdateWithProxy = ToggleSwitchIsAutoUpdateWithProxy.IsOn; AutoUpdateWithProxy_Title.Visibility = Settings.Startup.IsAutoUpdateWithProxy ? Visibility.Visible : Visibility.Collapsed; SaveSettingsToFile(); } private void AutoUpdateProxyTextBox_TextChanged(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Startup.AutoUpdateProxy = AutoUpdateProxyTextBox.Text; SaveSettingsToFile(); } private void BtnResetAutoUpdateProxyToGHProxy_Click(object sender, RoutedEventArgs e) { AutoUpdateProxyTextBox.Text = "https://mirror.ghproxy.com/"; } private async void BtnCheckAutoUpdateProxyReturnedData_Click(object sender, RoutedEventArgs e) { string ProxyReturnedData = await AutoUpdateHelper.GetRemoteVersion(Settings.Startup.AutoUpdateProxy + "https://raw.githubusercontent.com/ChangSakura/Ink-Canvas/master/AutomaticUpdateVersionControl.txt"); ShowNotification(ProxyReturnedData); } private void AutoUpdateWithSilenceStartTimeComboBox_SelectionChanged(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Startup.AutoUpdateWithSilenceStartTime = (string)AutoUpdateWithSilenceStartTimeComboBox.SelectedItem; SaveSettingsToFile(); } private void AutoUpdateWithSilenceEndTimeComboBox_SelectionChanged(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Startup.AutoUpdateWithSilenceEndTime = (string)AutoUpdateWithSilenceEndTimeComboBox.SelectedItem; SaveSettingsToFile(); } private void ToggleSwitchRunAtStartup_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; if (ToggleSwitchRunAtStartup.IsOn) { StartAutomaticallyDel("InkCanvas"); StartAutomaticallyCreate("Ink Canvas Annotation"); } else { StartAutomaticallyDel("InkCanvas"); StartAutomaticallyDel("Ink Canvas Annotation"); } } private void ToggleSwitchFoldAtStartup_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Startup.IsFoldAtStartup = ToggleSwitchFoldAtStartup.IsOn; SaveSettingsToFile(); } private void ToggleSwitchSupportPowerPoint_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.PowerPointSupport = ToggleSwitchSupportPowerPoint.IsOn; SaveSettingsToFile(); if (Settings.PowerPointSettings.PowerPointSupport) { timerCheckPPT.Start(); } else { timerCheckPPT.Stop(); } } private void ToggleSwitchShowCanvasAtNewSlideShow_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.IsShowCanvasAtNewSlideShow = ToggleSwitchShowCanvasAtNewSlideShow.IsOn; SaveSettingsToFile(); } #endregion #region Startup private void ToggleSwitchEnableNibMode_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; if (sender == ToggleSwitchEnableNibMode) { ToggleSwitchBoardEnableNibMode.IsOn = ToggleSwitchEnableNibMode.IsOn; } else { ToggleSwitchEnableNibMode.IsOn = ToggleSwitchBoardEnableNibMode.IsOn; } Settings.Startup.IsEnableNibMode = ToggleSwitchEnableNibMode.IsOn; if (Settings.Startup.IsEnableNibMode) { BoundsWidth = Settings.Advanced.NibModeBoundsWidth; } else { BoundsWidth = Settings.Advanced.FingerModeBoundsWidth; } SaveSettingsToFile(); } #endregion #region Appearance private void ToggleSwitchEnableDisPlayNibModeToggle_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Appearance.IsEnableDisPlayNibModeToggler = ToggleSwitchEnableDisPlayNibModeToggle.IsOn; SaveSettingsToFile(); LoadSettings(); } private void ToggleSwitchIsColorfulViewboxFloatingBar_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Appearance.IsColorfulViewboxFloatingBar = ToggleSwitchColorfulViewboxFloatingBar.IsOn; SaveSettingsToFile(); LoadSettings(); } private void ToggleSwitchEnableViewboxFloatingBarScaleTransform_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Appearance.EnableViewboxFloatingBarScaleTransform = ToggleSwitchEnableViewboxFloatingBarScaleTransform.IsOn; SaveSettingsToFile(); LoadSettings(); } private void ToggleSwitchEnableViewboxBlackBoardScaleTransform_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Appearance.EnableViewboxBlackBoardScaleTransform = ToggleSwitchEnableViewboxBlackBoardScaleTransform.IsOn; SaveSettingsToFile(); LoadSettings(); } private void ToggleSwitchShowButtonPPTNavigation_OnToggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.IsShowPPTNavigation = ToggleSwitchShowButtonPPTNavigation.IsOn; PptNavigationBtn.Visibility = Settings.PowerPointSettings.IsShowPPTNavigation ? Visibility.Visible : Visibility.Collapsed; SaveSettingsToFile(); } private void ToggleSwitchShowBottomPPTNavigationPanel_OnToggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.IsShowBottomPPTNavigationPanel = ToggleSwitchShowBottomPPTNavigationPanel.IsOn; if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) { BottomViewboxPPTSidesControl.Visibility = Settings.PowerPointSettings.IsShowBottomPPTNavigationPanel ? Visibility.Visible : Visibility.Collapsed; } SaveSettingsToFile(); } private void ToggleSwitchShowSidePPTNavigationPanel_OnToggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.IsShowSidePPTNavigationPanel = ToggleSwitchShowSidePPTNavigationPanel.IsOn; if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) { LeftSidePanelForPPTNavigation.Visibility = Settings.PowerPointSettings.IsShowSidePPTNavigationPanel ? Visibility.Visible : Visibility.Collapsed; RightSidePanelForPPTNavigation.Visibility = Settings.PowerPointSettings.IsShowSidePPTNavigationPanel ? Visibility.Visible : Visibility.Collapsed; } SaveSettingsToFile(); } private void ToggleSwitchShowCursor_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Canvas.IsShowCursor = ToggleSwitchShowCursor.IsOn; inkCanvas_EditingModeChanged(inkCanvas, null); SaveSettingsToFile(); } #endregion #region Canvas private void ComboBoxPenStyle_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!isLoaded) return; if (sender == ComboBoxPenStyle) { Settings.Canvas.InkStyle = ComboBoxPenStyle.SelectedIndex; BoardComboBoxPenStyle.SelectedIndex = ComboBoxPenStyle.SelectedIndex; } else { Settings.Canvas.InkStyle = BoardComboBoxPenStyle.SelectedIndex; ComboBoxPenStyle.SelectedIndex = BoardComboBoxPenStyle.SelectedIndex; } SaveSettingsToFile(); } private void ComboBoxEraserSize_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!isLoaded) return; Settings.Canvas.EraserSize = ComboBoxEraserSize.SelectedIndex; SaveSettingsToFile(); } private void ComboBoxEraserSizeFloatingBar_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!isLoaded) return; Settings.Canvas.EraserSize = ComboBoxEraserSizeFloatingBar.SelectedIndex; double k = 1; switch (ComboBoxEraserSizeFloatingBar.SelectedIndex) { case 0: k = 0.5; break; case 1: k = 0.8; break; case 3: k = 1.25; break; case 4: k = 1.8; break; } inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90); // inkCanvas.EraserShape = new RectangleStylusShape(k * 90, k * 90); inkCanvas.EditingMode = InkCanvasEditingMode.Ink; inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; SaveSettingsToFile(); } private void InkWidthSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { if (!isLoaded) return; if (sender == BoardInkWidthSlider) InkWidthSlider.Value = ((Slider)sender).Value; if (sender == InkWidthSlider) BoardInkWidthSlider.Value = ((Slider)sender).Value; drawingAttributes.Height = ((Slider)sender).Value / 2; drawingAttributes.Width = ((Slider)sender).Value / 2; Settings.Canvas.InkWidth = ((Slider)sender).Value / 2; SaveSettingsToFile(); } private void InkAlphaSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { if (!isLoaded) return; // if (sender == BoardInkWidthSlider) InkWidthSlider.Value = ((Slider)sender).Value; // if (sender == InkWidthSlider) BoardInkWidthSlider.Value = ((Slider)sender).Value; byte NowR = drawingAttributes.Color.R; byte NowG = drawingAttributes.Color.G; byte NowB = drawingAttributes.Color.B; // Trace.WriteLine(BitConverter.GetBytes(((Slider)sender).Value)); drawingAttributes.Color = Color.FromArgb((byte)(((Slider)sender).Value), NowR, NowG, NowB); // drawingAttributes.Width = ((Slider)sender).Value / 2; // Settings.Canvas.InkAlpha = ((Slider)sender).Value; // SaveSettingsToFile(); } private void ComboBoxHyperbolaAsymptoteOption_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!isLoaded) return; Settings.Canvas.HyperbolaAsymptoteOption = (OptionalOperation)ComboBoxHyperbolaAsymptoteOption.SelectedIndex; SaveSettingsToFile(); } #endregion #region Automation private void StartOrStoptimerCheckAutoFold() { if (Settings.Automation.IsEnableAutoFold) { timerCheckAutoFold.Start(); } else { timerCheckAutoFold.Stop(); } } private void ToggleSwitchAutoFoldInEasiNote_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoFoldInEasiNote = ToggleSwitchAutoFoldInEasiNote.IsOn; SaveSettingsToFile(); StartOrStoptimerCheckAutoFold(); } private void ToggleSwitchAutoFoldInEasiNoteIgnoreDesktopAnno_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoFoldInEasiNoteIgnoreDesktopAnno = ToggleSwitchAutoFoldInEasiNoteIgnoreDesktopAnno.IsOn; SaveSettingsToFile(); } private void ToggleSwitchAutoFoldInEasiCamera_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoFoldInEasiCamera = ToggleSwitchAutoFoldInEasiCamera.IsOn; SaveSettingsToFile(); StartOrStoptimerCheckAutoFold(); } private void ToggleSwitchAutoFoldInEasiNote3C_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoFoldInEasiNote3C = ToggleSwitchAutoFoldInEasiNote3C.IsOn; SaveSettingsToFile(); StartOrStoptimerCheckAutoFold(); } private void ToggleSwitchAutoFoldInEasiNote5C_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoFoldInEasiNote5C = ToggleSwitchAutoFoldInEasiNote5C.IsOn; SaveSettingsToFile(); StartOrStoptimerCheckAutoFold(); } private void ToggleSwitchAutoFoldInSeewoPincoTeacher_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoFoldInSeewoPincoTeacher = ToggleSwitchAutoFoldInSeewoPincoTeacher.IsOn; SaveSettingsToFile(); StartOrStoptimerCheckAutoFold(); } private void ToggleSwitchAutoFoldInHiteTouchPro_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoFoldInHiteTouchPro = ToggleSwitchAutoFoldInHiteTouchPro.IsOn; SaveSettingsToFile(); StartOrStoptimerCheckAutoFold(); } private void ToggleSwitchAutoFoldInHiteCamera_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoFoldInHiteCamera = ToggleSwitchAutoFoldInHiteCamera.IsOn; SaveSettingsToFile(); StartOrStoptimerCheckAutoFold(); } private void ToggleSwitchAutoFoldInWxBoardMain_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoFoldInWxBoardMain = ToggleSwitchAutoFoldInWxBoardMain.IsOn; SaveSettingsToFile(); StartOrStoptimerCheckAutoFold(); } private void ToggleSwitchAutoFoldInOldZyBoard_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoFoldInOldZyBoard = ToggleSwitchAutoFoldInOldZyBoard.IsOn; SaveSettingsToFile(); StartOrStoptimerCheckAutoFold(); } private void ToggleSwitchAutoFoldInMSWhiteboard_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoFoldInMSWhiteboard = ToggleSwitchAutoFoldInMSWhiteboard.IsOn; SaveSettingsToFile(); StartOrStoptimerCheckAutoFold(); } private void ToggleSwitchAutoFoldInPPTSlideShow_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoFoldInPPTSlideShow = ToggleSwitchAutoFoldInPPTSlideShow.IsOn; SaveSettingsToFile(); StartOrStoptimerCheckAutoFold(); } private void ToggleSwitchAutoKillPptService_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoKillPptService = ToggleSwitchAutoKillPptService.IsOn; SaveSettingsToFile(); if (Settings.Automation.IsAutoKillEasiNote || Settings.Automation.IsAutoKillPptService) { timerKillProcess.Start(); } else { timerKillProcess.Stop(); } } private void ToggleSwitchAutoKillEasiNote_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoKillEasiNote = ToggleSwitchAutoKillEasiNote.IsOn; SaveSettingsToFile(); if (Settings.Automation.IsAutoKillEasiNote || Settings.Automation.IsAutoKillPptService) { timerKillProcess.Start(); } else { timerKillProcess.Stop(); } } private void ToggleSwitchSaveScreenshotsInDateFolders_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsSaveScreenshotsInDateFolders = ToggleSwitchSaveScreenshotsInDateFolders.IsOn; SaveSettingsToFile(); } private void ToggleSwitchAutoSaveStrokesAtScreenshot_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoSaveStrokesAtScreenshot = ToggleSwitchAutoSaveStrokesAtScreenshot.IsOn; ToggleSwitchAutoSaveStrokesAtClear.Header = ToggleSwitchAutoSaveStrokesAtScreenshot.IsOn ? "清屏时自动截图并保存墨迹" : "清屏时自动截图"; SaveSettingsToFile(); } private void ToggleSwitchAutoSaveStrokesAtClear_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoSaveStrokesAtClear = ToggleSwitchAutoSaveStrokesAtClear.IsOn; SaveSettingsToFile(); } private void ToggleSwitchHideStrokeWhenSelecting_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Canvas.HideStrokeWhenSelecting = ToggleSwitchHideStrokeWhenSelecting.IsOn; SaveSettingsToFile(); } private void ToggleSwitchFitToCurve_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; drawingAttributes.FitToCurve = ToggleSwitchFitToCurve.IsOn; Settings.Canvas.FitToCurve = ToggleSwitchFitToCurve.IsOn; SaveSettingsToFile(); } private void ToggleSwitchAutoSaveStrokesInPowerPoint_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.IsAutoSaveStrokesInPowerPoint = ToggleSwitchAutoSaveStrokesInPowerPoint.IsOn; SaveSettingsToFile(); } private void ToggleSwitchNotifyPreviousPage_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.IsNotifyPreviousPage = ToggleSwitchNotifyPreviousPage.IsOn; SaveSettingsToFile(); } private void ToggleSwitchNotifyHiddenPage_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.IsNotifyHiddenPage = ToggleSwitchNotifyHiddenPage.IsOn; SaveSettingsToFile(); } private void SideControlMinimumAutomationSlider_ValueChanged(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.MinimumAutomationStrokeNumber = (int)SideControlMinimumAutomationSlider.Value; SaveSettingsToFile(); } private void AutoSavedStrokesLocationTextBox_TextChanged(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.AutoSavedStrokesLocation = AutoSavedStrokesLocation.Text; SaveSettingsToFile(); } private void AutoSavedStrokesLocationButton_Click(object sender, RoutedEventArgs e) { System.Windows.Forms.FolderBrowserDialog folderBrowser = new System.Windows.Forms.FolderBrowserDialog(); folderBrowser.ShowDialog(); if (folderBrowser.SelectedPath.Length > 0) AutoSavedStrokesLocation.Text = folderBrowser.SelectedPath; } private void SetAutoSavedStrokesLocationToDiskDButton_Click(object sender, RoutedEventArgs e) { AutoSavedStrokesLocation.Text = @"D:\Ink Canvas"; } private void SetAutoSavedStrokesLocationToDocumentFolderButton_Click(object sender, RoutedEventArgs e) { AutoSavedStrokesLocation.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Ink Canvas"; } private void ToggleSwitchAutoDelSavedFiles_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.AutoDelSavedFiles = ToggleSwitchAutoDelSavedFiles.IsOn; SaveSettingsToFile(); } private void ComboBoxAutoDelSavedFilesDaysThreshold_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!isLoaded) return; Settings.Automation.AutoDelSavedFilesDaysThreshold = int.Parse(((ComboBoxItem)ComboBoxAutoDelSavedFilesDaysThreshold.SelectedItem).Content.ToString()); SaveSettingsToFile(); } private void ToggleSwitchAutoSaveScreenShotInPowerPoint_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint = ToggleSwitchAutoSaveScreenShotInPowerPoint.IsOn; SaveSettingsToFile(); } #endregion #region Gesture private void ToggleSwitchEnableFingerGestureSlideShowControl_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl = ToggleSwitchEnableFingerGestureSlideShowControl.IsOn; SaveSettingsToFile(); } private void ToggleSwitchAutoSwitchTwoFingerGesture_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Gesture.AutoSwitchTwoFingerGesture = ToggleSwitchAutoSwitchTwoFingerGesture.IsOn; SaveSettingsToFile(); } private void ToggleSwitchEnableTwoFingerZoom_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; if (sender == ToggleSwitchEnableTwoFingerZoom) { BoardToggleSwitchEnableTwoFingerZoom.IsOn = ToggleSwitchEnableTwoFingerZoom.IsOn; } else { ToggleSwitchEnableTwoFingerZoom.IsOn = BoardToggleSwitchEnableTwoFingerZoom.IsOn; } Settings.Gesture.IsEnableTwoFingerZoom = ToggleSwitchEnableTwoFingerZoom.IsOn; CheckEnableTwoFingerGestureBtnColorPrompt(); SaveSettingsToFile(); } private void ToggleSwitchEnableMultiTouchMode_Toggled(object sender, RoutedEventArgs e) { //if (!isLoaded) return; if (sender == ToggleSwitchEnableMultiTouchMode) { BoardToggleSwitchEnableMultiTouchMode.IsOn = ToggleSwitchEnableMultiTouchMode.IsOn; } else { ToggleSwitchEnableMultiTouchMode.IsOn = BoardToggleSwitchEnableMultiTouchMode.IsOn; } if (ToggleSwitchEnableMultiTouchMode.IsOn) { if (!isInMultiTouchMode) BorderMultiTouchMode_MouseUp(null, null); } else { if (isInMultiTouchMode) BorderMultiTouchMode_MouseUp(null, null); } Settings.Gesture.IsEnableMultiTouchMode = ToggleSwitchEnableMultiTouchMode.IsOn; CheckEnableTwoFingerGestureBtnColorPrompt(); SaveSettingsToFile(); } private void ToggleSwitchEnableTwoFingerTranslate_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; if (sender == ToggleSwitchEnableTwoFingerTranslate) { BoardToggleSwitchEnableTwoFingerTranslate.IsOn = ToggleSwitchEnableTwoFingerTranslate.IsOn; } else { ToggleSwitchEnableTwoFingerTranslate.IsOn = BoardToggleSwitchEnableTwoFingerTranslate.IsOn; } Settings.Gesture.IsEnableTwoFingerTranslate = ToggleSwitchEnableTwoFingerTranslate.IsOn; CheckEnableTwoFingerGestureBtnColorPrompt(); SaveSettingsToFile(); } private void ToggleSwitchEnableTwoFingerRotation_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; if (sender == ToggleSwitchEnableTwoFingerRotation) { BoardToggleSwitchEnableTwoFingerRotation.IsOn = ToggleSwitchEnableTwoFingerRotation.IsOn; } else { ToggleSwitchEnableTwoFingerRotation.IsOn = BoardToggleSwitchEnableTwoFingerRotation.IsOn; } Settings.Gesture.IsEnableTwoFingerRotation = ToggleSwitchEnableTwoFingerRotation.IsOn; Settings.Gesture.IsEnableTwoFingerRotationOnSelection = ToggleSwitchEnableTwoFingerRotationOnSelection.IsOn; CheckEnableTwoFingerGestureBtnColorPrompt(); SaveSettingsToFile(); } private void ToggleSwitchEnableTwoFingerGestureInPresentationMode_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.IsEnableTwoFingerGestureInPresentationMode = ToggleSwitchEnableTwoFingerGestureInPresentationMode.IsOn; SaveSettingsToFile(); } #endregion #region Reset public static void SetSettingsToRecommendation() { bool AutoDelSavedFilesDays = Settings.Automation.AutoDelSavedFiles; int AutoDelSavedFilesDaysThreshold = Settings.Automation.AutoDelSavedFilesDaysThreshold; Settings = new Settings(); Settings.Advanced.IsSpecialScreen = true; Settings.Advanced.IsQuadIR = false; Settings.Advanced.TouchMultiplier = 0.3; Settings.Advanced.NibModeBoundsWidth = 5; Settings.Advanced.FingerModeBoundsWidth = 20; Settings.Advanced.EraserBindTouchMultiplier = true; Settings.Advanced.IsLogEnabled = true; Settings.Advanced.IsSecondConfimeWhenShutdownApp = false; Settings.Appearance.IsEnableDisPlayNibModeToggler = false; Settings.Appearance.IsColorfulViewboxFloatingBar = false; Settings.Appearance.EnableViewboxFloatingBarScaleTransform = true; Settings.Appearance.EnableViewboxBlackBoardScaleTransform = false; Settings.Appearance.IsTransparentButtonBackground = true; Settings.Appearance.IsShowExitButton = true; Settings.Appearance.IsShowEraserButton = true; Settings.Appearance.IsShowHideControlButton = false; Settings.Appearance.IsShowLRSwitchButton = false; Settings.Appearance.IsShowModeFingerToggleSwitch = true; Settings.Appearance.Theme = 0; Settings.Automation.IsAutoFoldInEasiNote = true; Settings.Automation.IsAutoFoldInEasiNoteIgnoreDesktopAnno = true; Settings.Automation.IsAutoFoldInEasiCamera = true; Settings.Automation.IsAutoFoldInEasiNote3C = false; Settings.Automation.IsAutoFoldInEasiNote5C = true; Settings.Automation.IsAutoFoldInSeewoPincoTeacher = false; Settings.Automation.IsAutoFoldInHiteTouchPro = false; Settings.Automation.IsAutoFoldInHiteCamera = false; Settings.Automation.IsAutoFoldInWxBoardMain = false; Settings.Automation.IsAutoFoldInOldZyBoard = false; Settings.Automation.IsAutoFoldInMSWhiteboard = false; Settings.Automation.IsAutoFoldInPPTSlideShow = false; Settings.Automation.IsAutoKillPptService = false; Settings.Automation.IsAutoKillEasiNote = false; Settings.Automation.IsSaveScreenshotsInDateFolders = false; Settings.Automation.IsAutoSaveStrokesAtScreenshot = true; Settings.Automation.IsAutoSaveStrokesAtClear = true; Settings.Automation.IsAutoClearWhenExitingWritingMode = false; Settings.Automation.MinimumAutomationStrokeNumber = 0; Settings.Automation.AutoDelSavedFiles = AutoDelSavedFilesDays; Settings.Automation.AutoDelSavedFilesDaysThreshold = AutoDelSavedFilesDaysThreshold; Settings.PowerPointSettings.IsShowPPTNavigation = true; Settings.PowerPointSettings.IsShowBottomPPTNavigationPanel = false; Settings.PowerPointSettings.IsShowSidePPTNavigationPanel = true; Settings.PowerPointSettings.PowerPointSupport = true; Settings.PowerPointSettings.IsShowCanvasAtNewSlideShow = false; Settings.PowerPointSettings.IsNoClearStrokeOnSelectWhenInPowerPoint = true; Settings.PowerPointSettings.IsShowStrokeOnSelectInPowerPoint = false; Settings.PowerPointSettings.IsAutoSaveStrokesInPowerPoint = true; Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint = true; Settings.PowerPointSettings.IsNotifyPreviousPage = false; Settings.PowerPointSettings.IsNotifyHiddenPage = false; Settings.PowerPointSettings.IsEnableTwoFingerGestureInPresentationMode = false; Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl = false; Settings.PowerPointSettings.IsSupportWPS = true; Settings.Canvas.InkWidth = 2.5; Settings.Canvas.IsShowCursor = false; Settings.Canvas.InkStyle = 0; Settings.Canvas.EraserSize = 1; Settings.Canvas.EraserType = 0; Settings.Canvas.HideStrokeWhenSelecting = false; Settings.Canvas.FitToCurve = true; Settings.Canvas.UsingWhiteboard = false; Settings.Canvas.HyperbolaAsymptoteOption = 0; Settings.Gesture.AutoSwitchTwoFingerGesture = true; Settings.Gesture.IsEnableTwoFingerTranslate = true; Settings.Gesture.IsEnableTwoFingerZoom = false; Settings.Gesture.IsEnableTwoFingerRotation = false; Settings.Gesture.IsEnableTwoFingerRotationOnSelection = false; Settings.InkToShape.IsInkToShapeEnabled = true; Settings.Startup.IsEnableNibMode = false; Settings.Startup.IsAutoUpdate = true; Settings.Startup.IsAutoUpdateWithSilence = true; Settings.Startup.IsAutoUpdateWithProxy = true; Settings.Startup.AutoUpdateProxy = "https://mirror.ghproxy.com/"; Settings.Startup.AutoUpdateWithSilenceStartTime = "18:20"; Settings.Startup.AutoUpdateWithSilenceEndTime = "07:40"; Settings.Startup.IsFoldAtStartup = false; } private void BtnResetToSuggestion_Click(object sender, RoutedEventArgs e) { try { isLoaded = false; SetSettingsToRecommendation(); SaveSettingsToFile(); LoadSettings(); isLoaded = true; ToggleSwitchRunAtStartup.IsOn = true; } catch { } ShowNotification("设置已重置为默认推荐设置~"); } private async void SpecialVersionResetToSuggestion_Click() { await Task.Delay(1000); try { isLoaded = false; SetSettingsToRecommendation(); Settings.Automation.AutoDelSavedFiles = true; Settings.Automation.AutoDelSavedFilesDaysThreshold = 15; SetAutoSavedStrokesLocationToDiskDButton_Click(null, null); SaveSettingsToFile(); LoadSettings(); isLoaded = true; } catch { } } #endregion #region Ink To Shape private void ToggleSwitchEnableInkToShape_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.InkToShape.IsInkToShapeEnabled = ToggleSwitchEnableInkToShape.IsOn; SaveSettingsToFile(); } #endregion #region Advanced private void ToggleSwitchIsSpecialScreen_OnToggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Advanced.IsSpecialScreen = ToggleSwitchIsSpecialScreen.IsOn; TouchMultiplierSlider.Visibility = ToggleSwitchIsSpecialScreen.IsOn ? Visibility.Visible : Visibility.Collapsed; SaveSettingsToFile(); } private void TouchMultiplierSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { if (!isLoaded) return; Settings.Advanced.TouchMultiplier = e.NewValue; SaveSettingsToFile(); } private void BorderCalculateMultiplier_TouchDown(object sender, TouchEventArgs e) { var args = e.GetTouchPoint(null).Bounds; double value; if (!Settings.Advanced.IsQuadIR) value = args.Width; else value = Math.Sqrt(args.Width * args.Height); //四边红外 TextBlockShowCalculatedMultiplier.Text = (5 / (value * 1.1)).ToString(); } private void ToggleSwitchEraserBindTouchMultiplier_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Advanced.EraserBindTouchMultiplier = ToggleSwitchEraserBindTouchMultiplier.IsOn; SaveSettingsToFile(); } private void NibModeBoundsWidthSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { if (!isLoaded) return; Settings.Advanced.NibModeBoundsWidth = (int)e.NewValue; if (Settings.Startup.IsEnableNibMode) { BoundsWidth = Settings.Advanced.NibModeBoundsWidth; } else { BoundsWidth = Settings.Advanced.FingerModeBoundsWidth; } SaveSettingsToFile(); } private void FingerModeBoundsWidthSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { if (!isLoaded) return; Settings.Advanced.FingerModeBoundsWidth = (int)e.NewValue; if (Settings.Startup.IsEnableNibMode) { BoundsWidth = Settings.Advanced.NibModeBoundsWidth; } else { BoundsWidth = Settings.Advanced.FingerModeBoundsWidth; } SaveSettingsToFile(); } private void ToggleSwitchIsQuadIR_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Advanced.IsQuadIR = ToggleSwitchIsQuadIR.IsOn; SaveSettingsToFile(); } private void ToggleSwitchIsLogEnabled_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Advanced.IsLogEnabled = ToggleSwitchIsLogEnabled.IsOn; SaveSettingsToFile(); } private void ToggleSwitchIsSecondConfimeWhenShutdownApp_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Advanced.IsSecondConfimeWhenShutdownApp = ToggleSwitchIsSecondConfimeWhenShutdownApp.IsOn; SaveSettingsToFile(); } #endregion public static void SaveSettingsToFile() { string text = JsonConvert.SerializeObject(Settings, Formatting.Indented); try { File.WriteAllText(App.RootPath + settingsFileName, text); } catch { } } private void SCManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e) { e.Handled = true; } private void HyperlinkSourceToICCRepository_Click(object sender, RoutedEventArgs e) { Process.Start("https://gitea.bliemhax.com/kriastans/InkCanvasForClass"); HideSubPanels(); } private void HyperlinkSourceToPresentRepository_Click(object sender, RoutedEventArgs e) { Process.Start("https://github.com/ChangSakura/Ink-Canvas"); HideSubPanels(); } private void HyperlinkSourceToOringinalRepository_Click(object sender, RoutedEventArgs e) { Process.Start("https://github.com/WXRIW/Ink-Canvas"); HideSubPanels(); } } }