├── UTE UWP+ ├── Assets │ ├── UTEUpdate │ │ └── Version.txt │ ├── Changelogs │ │ └── Latest.md │ ├── Cut.png │ ├── Check.png │ ├── Copy.png │ ├── Error.png │ ├── Home.png │ ├── Info.png │ ├── Logo.png │ ├── Paste.png │ ├── Print.png │ ├── Save.png │ ├── Console.png │ ├── Delete.png │ ├── OpenFile.png │ ├── Question.png │ ├── Warning.png │ ├── Changelog.png │ ├── utevericon.png │ ├── StoreLogo.backup.png │ ├── LargeTile.scale-100.png │ ├── LargeTile.scale-125.png │ ├── LargeTile.scale-150.png │ ├── LargeTile.scale-200.png │ ├── LargeTile.scale-400.png │ ├── SmallTile.scale-100.png │ ├── SmallTile.scale-125.png │ ├── SmallTile.scale-150.png │ ├── SmallTile.scale-200.png │ ├── SmallTile.scale-400.png │ ├── StoreLogo.scale-100.png │ ├── StoreLogo.scale-125.png │ ├── StoreLogo.scale-150.png │ ├── StoreLogo.scale-200.png │ ├── StoreLogo.scale-400.png │ ├── ProfilePictures │ │ ├── Ivirius.png │ │ └── ErrorTek.png │ ├── SplashScreen.scale-100.png │ ├── SplashScreen.scale-125.png │ ├── SplashScreen.scale-150.png │ ├── SplashScreen.scale-200.png │ ├── SplashScreen.scale-400.png │ ├── LockScreenLogo.scale-200.png │ ├── Square44x44Logo.scale-100.png │ ├── Square44x44Logo.scale-125.png │ ├── Square44x44Logo.scale-150.png │ ├── Square44x44Logo.scale-200.png │ ├── Square44x44Logo.scale-400.png │ ├── Wide310x150Logo.scale-100.png │ ├── Wide310x150Logo.scale-125.png │ ├── Wide310x150Logo.scale-150.png │ ├── Wide310x150Logo.scale-200.png │ ├── Wide310x150Logo.scale-400.png │ ├── Square150x150Logo.scale-100.png │ ├── Square150x150Logo.scale-125.png │ ├── Square150x150Logo.scale-150.png │ ├── Square150x150Logo.scale-200.png │ ├── Square150x150Logo.scale-400.png │ ├── Square44x44Logo.targetsize-16.png │ ├── Square44x44Logo.targetsize-24.png │ ├── Square44x44Logo.targetsize-256.png │ ├── Square44x44Logo.targetsize-32.png │ ├── Square44x44Logo.targetsize-48.png │ ├── Square44x44Logo.altform-unplated_targetsize-16.png │ ├── Square44x44Logo.altform-unplated_targetsize-256.png │ ├── Square44x44Logo.altform-unplated_targetsize-32.png │ ├── Square44x44Logo.altform-unplated_targetsize-48.png │ ├── Square44x44Logo.targetsize-24_altform-unplated.png │ ├── Square44x44Logo.altform-lightunplated_targetsize-16.png │ ├── Square44x44Logo.altform-lightunplated_targetsize-24.png │ ├── Square44x44Logo.altform-lightunplated_targetsize-256.png │ ├── Square44x44Logo.altform-lightunplated_targetsize-32.png │ ├── Square44x44Logo.altform-lightunplated_targetsize-48.png │ └── Templates │ │ ├── SongLyricsTemplate.rtf │ │ ├── CalendarTemplate.rtf │ │ └── ImageArticleTemplate.rtf ├── .editorconfig ├── Styles │ ├── _FontSizes.xaml │ ├── Page.xaml │ ├── _Colors.xaml │ ├── TextBlock.xaml │ └── _Thickness.xaml ├── Views │ ├── AboutUTE.xaml.cs │ ├── FirstRunDialog.xaml.cs │ ├── WhatsNewDialog.xaml.cs │ ├── TableDialog.xaml.cs │ ├── ComputeHash.xaml │ ├── HelpPage.xaml.cs │ ├── ImageOptionsDialog.xaml.cs │ ├── FirstRunDialog.xaml │ ├── WhatsNewDialog.xaml │ ├── ImageOptionsDialog.xaml │ ├── ComputeHash.xaml.cs │ ├── HelpPage.xaml │ ├── AboutUTE.xaml │ ├── UTEUpdate.xaml │ ├── TableDialog.xaml │ ├── UTEUpdate.xaml.cs │ ├── SettingsPageContainer.xaml │ ├── VelocityIDsPage.xaml │ ├── VelocityIDsPage.xaml.cs │ ├── SettingsPageContainer.xaml.cs │ ├── ViewModel.cs │ ├── SettingsPage.xaml │ └── SettingsPage.xaml.cs ├── Helpers │ ├── ResourceExtensions.cs │ ├── EnumToBooleanConverter.cs │ ├── UTEUpdateLauncher.cs │ ├── EncryptorsDecryptors.cs │ ├── SettingsHelper.cs │ ├── SettingsStorageExtensions.cs │ └── BuildInfo.cs ├── Services │ ├── FirstRunDisplayService.cs │ ├── WhatsNewDisplayService.cs │ ├── ToastNotificationsService.cs │ ├── ThemeSelectorService.cs │ ├── ToastNotificationsService.Samples.cs │ ├── NavigationService.cs │ └── ActivationService.cs ├── Properties │ ├── AssemblyInfo.cs │ └── Default.rd.xml ├── Activation │ ├── ActivationHandler.cs │ ├── DefaultActivationHandler.cs │ └── CommandLineActivationHandler.cs ├── Program.cs ├── Package.appxmanifest ├── README.md ├── App.xaml.cs └── UTE UWP+.csproj ├── crowdin.yml ├── UTE UWP+.Core ├── readme.txt ├── UTE UWP+.Core.csproj └── Helpers │ ├── Singleton.cs │ └── Json.cs ├── PRIVACY.txt ├── SECURITY.md ├── CONTRIBUTING.md ├── .github └── ISSUE_TEMPLATE │ └── bug_report.md ├── LICENSE.txt ├── .gitattributes ├── README.md ├── CODE_OF_CONDUCT.md ├── .gitignore └── UTE UWP+.sln /UTE UWP+/Assets/UTEUpdate/Version.txt: -------------------------------------------------------------------------------- 1 | 4.6.0.2 -------------------------------------------------------------------------------- /UTE UWP+/Assets/Changelogs/Latest.md: -------------------------------------------------------------------------------- 1 | - Fix text highlighting bug 2 | - Code cleanup 3 | - Update dependencies -------------------------------------------------------------------------------- /UTE UWP+/Assets/Cut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Cut.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Check.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Copy.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Error.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Home.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Info.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Logo.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Paste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Paste.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Print.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Print.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Save.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Console.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Delete.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/OpenFile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/OpenFile.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Question.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Question.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Warning.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Changelog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Changelog.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/utevericon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/utevericon.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/StoreLogo.backup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/StoreLogo.backup.png -------------------------------------------------------------------------------- /crowdin.yml: -------------------------------------------------------------------------------- 1 | files: 2 | - source: /UTE UWP+/Strings/en-us/*.resw 3 | translation: /UTE UWP+/Strings/%locale%/%original_file_name% 4 | -------------------------------------------------------------------------------- /UTE UWP+/Assets/LargeTile.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/LargeTile.scale-100.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/LargeTile.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/LargeTile.scale-125.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/LargeTile.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/LargeTile.scale-150.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/LargeTile.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/LargeTile.scale-200.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/LargeTile.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/LargeTile.scale-400.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/SmallTile.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/SmallTile.scale-100.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/SmallTile.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/SmallTile.scale-125.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/SmallTile.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/SmallTile.scale-150.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/SmallTile.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/SmallTile.scale-200.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/SmallTile.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/SmallTile.scale-400.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/StoreLogo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/StoreLogo.scale-100.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/StoreLogo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/StoreLogo.scale-125.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/StoreLogo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/StoreLogo.scale-150.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/StoreLogo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/StoreLogo.scale-200.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/StoreLogo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/StoreLogo.scale-400.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/ProfilePictures/Ivirius.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/ProfilePictures/Ivirius.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/SplashScreen.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/SplashScreen.scale-100.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/SplashScreen.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/SplashScreen.scale-125.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/SplashScreen.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/SplashScreen.scale-150.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/SplashScreen.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/SplashScreen.scale-200.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/SplashScreen.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/SplashScreen.scale-400.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/LockScreenLogo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/LockScreenLogo.scale-200.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/ProfilePictures/ErrorTek.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/ProfilePictures/ErrorTek.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.scale-100.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.scale-125.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.scale-150.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.scale-200.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.scale-400.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Wide310x150Logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Wide310x150Logo.scale-100.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Wide310x150Logo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Wide310x150Logo.scale-125.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Wide310x150Logo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Wide310x150Logo.scale-150.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Wide310x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Wide310x150Logo.scale-200.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Wide310x150Logo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Wide310x150Logo.scale-400.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square150x150Logo.scale-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square150x150Logo.scale-100.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square150x150Logo.scale-125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square150x150Logo.scale-125.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square150x150Logo.scale-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square150x150Logo.scale-150.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square150x150Logo.scale-200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square150x150Logo.scale-200.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square150x150Logo.scale-400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square150x150Logo.scale-400.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.targetsize-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.targetsize-16.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.targetsize-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.targetsize-24.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.targetsize-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.targetsize-256.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.targetsize-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.targetsize-32.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.targetsize-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.targetsize-48.png -------------------------------------------------------------------------------- /UTE UWP+.Core/readme.txt: -------------------------------------------------------------------------------- 1 | This core project is a .net standard project. 2 | It's a great place to put all your logic that is not platform dependent (e.g. model/helper classes) so they can be reused. -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.altform-unplated_targetsize-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.altform-unplated_targetsize-16.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.altform-unplated_targetsize-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.altform-unplated_targetsize-256.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.altform-unplated_targetsize-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.altform-unplated_targetsize-32.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.altform-unplated_targetsize-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.altform-unplated_targetsize-48.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.targetsize-24_altform-unplated.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.targetsize-24_altform-unplated.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.altform-lightunplated_targetsize-16.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.altform-lightunplated_targetsize-24.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.altform-lightunplated_targetsize-256.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.altform-lightunplated_targetsize-32.png -------------------------------------------------------------------------------- /UTE UWP+/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/HEAD/UTE UWP+/Assets/Square44x44Logo.altform-lightunplated_targetsize-48.png -------------------------------------------------------------------------------- /UTE UWP+/.editorconfig: -------------------------------------------------------------------------------- 1 | # top-most EditorConfig file 2 | root = true 3 | 4 | [*] 5 | end_of_line = crlf 6 | 7 | [*.{cs,xaml}] 8 | indent_style = space 9 | indent_size = 4 10 | trim_trailing_whitespace = true 11 | insert_final_newline = true 12 | -------------------------------------------------------------------------------- /PRIVACY.txt: -------------------------------------------------------------------------------- 1 | ULTRATEXTEDIT UWP PRIVACY POLICY 2 | Last updated: 21 October 2024 3 | 4 | UltraTextEdit UWP is a text editor app. It does not have any online-enabled features, stores all data locally on the user's device, and does not share any data with either the developer or any third party. -------------------------------------------------------------------------------- /UTE UWP+/Styles/_FontSizes.xaml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 24 6 | 16 7 | 8 | 9 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Updates/Support Timeline 2 | 3 | ## Supported Versions 4 | 5 | Use this section to tell people about which versions of your project are 6 | currently being supported with security updates. 7 | 8 | Version(s) currently supported: 9 | - UTE UWP 4.x (until 2032) 10 | ## Adding a new feature or Reporting a Vulnerability 11 | 12 | Do this using Issues and Pull Requests. 13 | -------------------------------------------------------------------------------- /UTE UWP+/Styles/Page.xaml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /UTE UWP+/Assets/Templates/SongLyricsTemplate.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\fbidis\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}{\f1\fnil Segoe UI;}} 2 | {\colortbl ;\red0\green0\blue0;} 3 | {\*\generator Riched20 10.0.26100}\viewkind4\uc1 4 | \pard\qc\tx720\cf1\f0\fs56 \par 5 | 6 | \pard\tx720\b\fs21 \b0\par 7 | \par 8 | \b \par 9 | \par 10 | \f1\par 11 | } 12 | -------------------------------------------------------------------------------- /UTE UWP+/Views/AboutUTE.xaml.cs: -------------------------------------------------------------------------------- 1 | using Windows.UI.Xaml.Controls; 2 | 3 | namespace UTE_UWP_.Views 4 | { 5 | /// 6 | /// An empty page that can be used on its own or navigated to within a Frame. 7 | /// 8 | public sealed partial class AboutUTE : Page 9 | { 10 | public AboutUTE() 11 | { 12 | this.InitializeComponent(); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /UTE UWP+/Views/FirstRunDialog.xaml.cs: -------------------------------------------------------------------------------- 1 | using Windows.UI.Xaml; 2 | using Windows.UI.Xaml.Controls; 3 | 4 | namespace UTE_UWP_.Views 5 | { 6 | public sealed partial class FirstRunDialog : ContentDialog 7 | { 8 | public FirstRunDialog() 9 | { 10 | RequestedTheme = (Window.Current.Content as FrameworkElement).RequestedTheme; 11 | InitializeComponent(); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /UTE UWP+/Helpers/ResourceExtensions.cs: -------------------------------------------------------------------------------- 1 | using Windows.ApplicationModel.Resources; 2 | 3 | namespace UTE_UWP_.Helpers 4 | { 5 | internal static class ResourceExtensions 6 | { 7 | private static ResourceLoader _resLoader = new ResourceLoader(); 8 | 9 | public static string GetLocalized(this string resourceKey) 10 | { 11 | return _resLoader.GetString(resourceKey); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /UTE UWP+.Core/UTE UWP+.Core.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | UTE_UWP_.Core 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /UTE UWP+/Styles/_Colors.xaml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing guidelines 2 | 3 | To ensure that the app gets the highest quality code contributions and issue reports, the contributions to this repository will be reviewed by the principal author of the app, @errortek, before being merged into the codebase, or suggested that a fix for an issue is being worked on. 4 |
Additionally, please follow the repository's Code of Conduct when interacting within the community and submitting contributions! 5 | -------------------------------------------------------------------------------- /UTE UWP+.Core/Helpers/Singleton.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Concurrent; 3 | 4 | namespace UTE_UWP_.Core.Helpers 5 | { 6 | public static class Singleton 7 | where T : new() 8 | { 9 | private static ConcurrentDictionary _instances = new ConcurrentDictionary(); 10 | 11 | public static T Instance 12 | { 13 | get 14 | { 15 | return _instances.GetOrAdd(typeof(T), (t) => new T()); 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /UTE UWP+/Views/WhatsNewDialog.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | using Windows.UI.Xaml; 3 | using Windows.UI.Xaml.Controls; 4 | 5 | namespace UTE_UWP_.Views 6 | { 7 | public sealed partial class WhatsNewDialog : ContentDialog 8 | { 9 | 10 | private string changelog; 11 | 12 | public WhatsNewDialog() 13 | { 14 | // TODO: Update the contents of this dialog every time you release a new version of the app 15 | RequestedTheme = (Window.Current.Content as FrameworkElement).RequestedTheme; 16 | InitializeComponent(); 17 | changelog = File.ReadAllText("Assets/Changelogs/Latest.md"); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /UTE UWP+.Core/Helpers/Json.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | 4 | using Newtonsoft.Json; 5 | 6 | namespace UTE_UWP_.Core.Helpers 7 | { 8 | public static class Json 9 | { 10 | public static async Task ToObjectAsync(string value) 11 | { 12 | return await Task.Run(() => 13 | { 14 | return JsonConvert.DeserializeObject(value); 15 | }); 16 | } 17 | 18 | public static async Task StringifyAsync(object value) 19 | { 20 | return await Task.Run(() => 21 | { 22 | return JsonConvert.SerializeObject(value); 23 | }); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior. 15 | 16 | **Expected behavior** 17 | A clear and concise description of what you expected to happen. 18 | 19 | **Screenshots** 20 | If applicable, add screenshots to help explain your problem. 21 | 22 | **Desktop (please complete the following information):** 23 | - Windows version: [e.g. Windows 10 22H2, WIndows 11 24H2] 24 | - App version [e.g. 4.2.0] 25 | 26 | **Additional context** 27 | Add any other context about the problem here. 28 | -------------------------------------------------------------------------------- /UTE UWP+/Services/FirstRunDisplayService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | 4 | using Microsoft.Toolkit.Uwp.Helpers; 5 | 6 | using UTE_UWP_.Views; 7 | 8 | using Windows.ApplicationModel.Core; 9 | using Windows.UI.Core; 10 | 11 | namespace UTE_UWP_.Services 12 | { 13 | public static class FirstRunDisplayService 14 | { 15 | private static bool shown = false; 16 | 17 | internal static async Task ShowIfAppropriateAsync() 18 | { 19 | await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync( 20 | CoreDispatcherPriority.Normal, async () => 21 | { 22 | if (SystemInformation.Instance.IsFirstRun && !shown) 23 | { 24 | shown = true; 25 | var dialog = new FirstRunDialog(); 26 | await dialog.ShowAsync(); 27 | } 28 | }); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /UTE UWP+/Views/TableDialog.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.UI.Xaml.Controls; 3 | 4 | // The Content Dialog item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238 5 | 6 | namespace UTE_UWP_ 7 | { 8 | public sealed partial class TableDialog : ContentDialog 9 | 10 | { 11 | public TableDialog() 12 | { 13 | this.InitializeComponent(); 14 | } 15 | public int rows; 16 | public int columns; 17 | 18 | 19 | private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) 20 | { 21 | variable_extraction(); 22 | } 23 | 24 | private void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) 25 | { 26 | } 27 | 28 | public void variable_extraction() 29 | { 30 | rows = Int32.Parse(rowBox.Text); 31 | columns = Int32.Parse(columnBox.Text); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /UTE UWP+/Views/ComputeHash.xaml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | Base64 Encode/Decode 14 | 15 | 16 | 17 | SHA1 Hash 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /UTE UWP+/Services/WhatsNewDisplayService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | 4 | using Microsoft.Toolkit.Uwp.Helpers; 5 | 6 | using UTE_UWP_.Views; 7 | 8 | using Windows.ApplicationModel.Core; 9 | using Windows.UI.Core; 10 | 11 | namespace UTE_UWP_.Services 12 | { 13 | // For instructions on testing this service see https://github.com/microsoft/TemplateStudio/blob/main/docs/UWP/features/whats-new-prompt.md 14 | public static class WhatsNewDisplayService 15 | { 16 | private static bool shown = false; 17 | 18 | internal static async Task ShowIfAppropriateAsync() 19 | { 20 | await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync( 21 | CoreDispatcherPriority.Normal, async () => 22 | { 23 | if (SystemInformation.Instance.IsAppUpdated && !shown) 24 | { 25 | shown = true; 26 | var dialog = new WhatsNewDialog(); 27 | await dialog.ShowAsync(); 28 | } 29 | }); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021-2024 ErrorTek/jpbandroid, Ivirius, and other contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /UTE UWP+/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | 6 | // General Information about an assembly is controlled through the following 7 | // set of attributes. Change these attribute values to modify the information 8 | // associated with an assembly. 9 | [assembly: AssemblyTitle("UTE_UWP_")] 10 | [assembly: AssemblyDescription("")] 11 | [assembly: AssemblyConfiguration("")] 12 | [assembly: AssemblyCompany("")] 13 | [assembly: AssemblyProduct("UTE_UWP_")] 14 | [assembly: AssemblyCopyright("Copyright © 2023")] 15 | [assembly: AssemblyTrademark("")] 16 | [assembly: AssemblyCulture("")] 17 | 18 | // Version information for an assembly consists of the following four values: 19 | // 20 | // Major Version 21 | // Minor Version 22 | // Build Number 23 | // Revision 24 | // 25 | // You can specify all the values or you can default the Build and Revision Numbers 26 | // by using the '*' as shown below: 27 | // [assembly: AssemblyVersion("1.0.*")] 28 | [assembly: AssemblyVersion("1.0.0.0")] 29 | [assembly: AssemblyFileVersion("1.0.0.0")] 30 | [assembly: ComVisible(false)] 31 | -------------------------------------------------------------------------------- /UTE UWP+/Views/HelpPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using Windows.UI.Xaml; 2 | using Windows.UI.Xaml.Controls; 3 | 4 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238 5 | 6 | namespace UTE_UWP_.Views 7 | { 8 | /// 9 | /// An empty page that can be used on its own or navigated to within a Frame. 10 | /// 11 | public sealed partial class HelpPage : Page 12 | { 13 | public HelpPage() 14 | { 15 | this.InitializeComponent(); 16 | } 17 | 18 | private void AboutButton_Click(object sender, RoutedEventArgs e) 19 | { 20 | MainPage mainPage = new MainPage(); 21 | mainPage.uteverclick(sender, e); 22 | } 23 | 24 | private void ChangelogButton_Click(object sender, RoutedEventArgs e) 25 | { 26 | MainPage mainPage = new MainPage(); 27 | mainPage.ChangelogClick(sender, e); 28 | } 29 | 30 | private void UpdateButton_Click(object sender, RoutedEventArgs e) 31 | { 32 | SettingsPage settingsPage = new SettingsPage(); 33 | settingsPage.UpdateButton_Click(sender, e); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /UTE UWP+/Services/ToastNotificationsService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | 4 | using UTE_UWP_.Activation; 5 | 6 | using Windows.ApplicationModel.Activation; 7 | using Windows.UI.Notifications; 8 | 9 | namespace UTE_UWP_.Services 10 | { 11 | internal partial class ToastNotificationsService : ActivationHandler 12 | { 13 | public void ShowToastNotification(ToastNotification toastNotification) 14 | { 15 | try 16 | { 17 | ToastNotificationManager.CreateToastNotifier().Show(toastNotification); 18 | } 19 | catch (Exception) 20 | { 21 | // TODO: Adding ToastNotification can fail in rare conditions, please handle exceptions as appropriate to your scenario. 22 | } 23 | } 24 | 25 | protected override async Task HandleInternalAsync(ToastNotificationActivatedEventArgs args) 26 | { 27 | //// TODO: Handle activation from toast notification 28 | //// More details at https://docs.microsoft.com/windows/uwp/design/shell/tiles-and-notifications/send-local-toast 29 | 30 | await Task.CompletedTask; 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /UTE UWP+/Helpers/EnumToBooleanConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | using Windows.UI.Xaml.Data; 4 | 5 | namespace UTE_UWP_.Helpers 6 | { 7 | public class EnumToBooleanConverter : IValueConverter 8 | { 9 | public Type EnumType { get; set; } 10 | 11 | public object Convert(object value, Type targetType, object parameter, string language) 12 | { 13 | if (parameter is string enumString) 14 | { 15 | if (!Enum.IsDefined(EnumType, value)) 16 | { 17 | throw new ArgumentException("value must be an Enum!"); 18 | } 19 | 20 | var enumValue = Enum.Parse(EnumType, enumString); 21 | 22 | return enumValue.Equals(value); 23 | } 24 | 25 | throw new ArgumentException("parameter must be an Enum name!"); 26 | } 27 | 28 | public object ConvertBack(object value, Type targetType, object parameter, string language) 29 | { 30 | if (parameter is string enumString) 31 | { 32 | return Enum.Parse(EnumType, enumString); 33 | } 34 | 35 | throw new ArgumentException("parameter must be an Enum name!"); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /UTE UWP+/Helpers/UTEUpdateLauncher.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UTE_UWP_.Views; 3 | using Windows.ApplicationModel.Core; 4 | using Windows.UI.Core; 5 | using Windows.UI.ViewManagement; 6 | using Windows.UI.Xaml; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | namespace UTE_UWP_.Helpers 10 | { 11 | class UTEUpdateLauncher 12 | { 13 | public async void LaunchUTEUpdate() 14 | { 15 | ApplicationView currentAV = ApplicationView.GetForCurrentView(); 16 | CoreApplicationView newAV = CoreApplication.CreateNewView(); 17 | await newAV.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => 18 | { 19 | var newWindow = Window.Current; 20 | var newAppView = ApplicationView.GetForCurrentView(); 21 | newAppView.Title = $"UltraTextEdit Update"; 22 | 23 | var frame = new Frame(); 24 | frame.Navigate(typeof(UTEUpdate)); 25 | newWindow.Content = frame; 26 | newWindow.Activate(); 27 | 28 | await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newAppView.Id, 29 | ViewSizePreference.UseMinimum, currentAV.Id, ViewSizePreference.UseMinimum); 30 | }); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /UTE UWP+/Views/ImageOptionsDialog.xaml.cs: -------------------------------------------------------------------------------- 1 | using Windows.UI.Xaml; 2 | using Windows.UI.Xaml.Controls; 3 | 4 | // The Content Dialog item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238 5 | 6 | namespace UTE_UWP_.Views 7 | { 8 | public sealed partial class ImageOptionsDialog : ContentDialog 9 | { 10 | public double DefaultWidth { get; set; } 11 | public double DefaultHeight { get; set; } 12 | public string Tag { get; private set; } 13 | 14 | public ImageOptionsDialog() 15 | { 16 | InitializeComponent(); 17 | 18 | Loaded += ImageOptionsDialog_Loaded; 19 | } 20 | 21 | private void ImageOptionsDialog_Loaded(object sender, RoutedEventArgs e) 22 | { 23 | WidthBox.Value = DefaultWidth; 24 | HeightBox.Value = DefaultHeight; 25 | } 26 | 27 | private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) 28 | { 29 | DefaultWidth = WidthBox.Value; 30 | DefaultHeight = HeightBox.Value; 31 | } 32 | 33 | private void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) 34 | { 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /UTE UWP+/Helpers/EncryptorsDecryptors.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using System.Text; 4 | using System.Security.Cryptography; 5 | 6 | namespace UTE_UWP_.Helpers 7 | { 8 | public class EncryptorsDecryptors 9 | { 10 | public static string Base64Encode(string text) 11 | { 12 | return Convert.ToBase64String(Encoding.UTF8.GetBytes(text)).TrimEnd('=').Replace('+', '-') 13 | .Replace('/', '_'); 14 | } 15 | 16 | public static string Base64Decode(string text) 17 | { 18 | text = text.Replace('_', '/').Replace('-', '+'); 19 | switch (text.Length % 4) 20 | { 21 | case 2: 22 | text += "=="; 23 | break; 24 | case 3: 25 | text += "="; 26 | break; 27 | } 28 | return Encoding.UTF8.GetString(Convert.FromBase64String(text)); 29 | } 30 | 31 | public static string SHA1Encrypt(string text) 32 | { 33 | var hash = new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(text)); 34 | return string.Concat(hash.Select(b => b.ToString("x2"))); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /UTE UWP+/Views/FirstRunDialog.xaml: -------------------------------------------------------------------------------- 1 | 13 | 14 | 15 | 16 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /UTE UWP+/Properties/Default.rd.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /UTE UWP+/Helpers/SettingsHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.Storage; 3 | 4 | namespace UTE_UWP_.Helpers 5 | { 6 | public static class SettingsHelper 7 | { 8 | public static Object GetSetting(string key) 9 | { 10 | ApplicationDataContainer LocalSettings = ApplicationData.Current.LocalSettings; 11 | return LocalSettings.Values[key]; 12 | } 13 | 14 | public static Int32 GetSettingInt(string key) 15 | { 16 | ApplicationDataContainer LocalSettings = ApplicationData.Current.LocalSettings; 17 | return (Int32)LocalSettings.Values[key]; 18 | } 19 | 20 | public static Boolean GetSettingBool(string key) 21 | { 22 | ApplicationDataContainer LocalSettings = ApplicationData.Current.LocalSettings; 23 | return (Boolean)LocalSettings.Values[key]; 24 | } 25 | 26 | public static String GetSettingString(string key) 27 | { 28 | ApplicationDataContainer LocalSettings = ApplicationData.Current.LocalSettings; 29 | return (String)LocalSettings.Values[key]; 30 | } 31 | 32 | public static void SetSetting(string key, object value) 33 | { 34 | ApplicationDataContainer LocalSettings = ApplicationData.Current.LocalSettings; 35 | LocalSettings.Values[key] = value; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /UTE UWP+/Views/WhatsNewDialog.xaml: -------------------------------------------------------------------------------- 1 | 13 | 14 | 15 | 16 | 20 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /UTE UWP+/Activation/ActivationHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | 4 | namespace UTE_UWP_.Activation 5 | { 6 | // For more information on understanding and extending activation flow see 7 | // https://github.com/microsoft/TemplateStudio/blob/main/docs/UWP/activation.md 8 | internal abstract class ActivationHandler 9 | { 10 | public abstract bool CanHandle(object args); 11 | 12 | public abstract Task HandleAsync(object args); 13 | } 14 | 15 | // Extend this class to implement new ActivationHandlers 16 | internal abstract class ActivationHandler : ActivationHandler 17 | where T : class 18 | { 19 | // Override this method to add the activation logic in your activation handler 20 | protected abstract Task HandleInternalAsync(T args); 21 | 22 | public override async Task HandleAsync(object args) 23 | { 24 | await HandleInternalAsync(args as T); 25 | } 26 | 27 | public override bool CanHandle(object args) 28 | { 29 | // CanHandle checks the args is of type you have configured 30 | return args is T && CanHandleInternal(args as T); 31 | } 32 | 33 | // You can override this method to add extra validation on activation args 34 | // to determine if your ActivationHandler should handle this activation args 35 | protected virtual bool CanHandleInternal(T args) 36 | { 37 | return true; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /UTE UWP+/Styles/TextBlock.xaml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 13 | 14 | 20 | 21 | 28 | 29 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /UTE UWP+/Assets/Templates/CalendarTemplate.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\fbidis\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Segoe UI;}{\f1\fnil Segoe UI;}} 2 | {\colortbl ;\red0\green0\blue0;} 3 | {\*\generator Riched20 10.0.26100}\viewkind4\uc1 4 | \pard\tx720\cf1\f0\fs48 December 2024\par 5 | \fs21 Monday Tuesday Wednesday Thursday Friday Saturday Sunday\par 6 | \trowd\trgaph10\trpaddl10\trpaddr10\trpaddfl3\trpaddfr3 7 | \cellx1000\cellx2000\cellx3000\cellx4000\cellx5000\cellx6000\cellx7000 8 | \pard\intbl 25\cell 26\cell 27\cell 28\cell 29\cell 30\cell 1\cell\row\trowd\trgaph10\trpaddl10\trpaddr10\trpaddfl3\trpaddfr3 9 | \cellx1000\cellx2000\cellx3000\cellx4000\cellx5000\cellx6000\cellx7000 10 | \pard\intbl 2\cell 3\cell 4\cell 5\cell 6\cell 7\cell 8\cell\row\trowd\trgaph10\trpaddl10\trpaddr10\trpaddfl3\trpaddfr3 11 | \cellx1000\cellx2000\cellx3000\cellx4000\cellx5000\cellx6000\cellx7000 12 | \pard\intbl 9\cell 10\cell 11\cell 12\cell 13\cell 14\cell 15\cell\row\trowd\trgaph10\trpaddl10\trpaddr10\trpaddfl3\trpaddfr3 13 | \cellx1000\cellx2000\cellx3000\cellx4000\cellx5000\cellx6000\cellx7000 14 | \pard\intbl 16\cell 17\cell 18\cell 19\cell 20\cell 21\cell 22\cell\row\trowd\trgaph10\trpaddl10\trpaddr10\trpaddfl3\trpaddfr3 15 | \cellx1000\cellx2000\cellx3000\cellx4000\cellx5000\cellx6000\cellx7000 16 | \pard\intbl 23\cell 24\cell 25\cell 26\cell 27\cell 28\cell 29\cell\row\trowd\trgaph10\trpaddl10\trpaddr10\trpaddfl3\trpaddfr3 17 | \cellx1000\cellx2000\cellx3000\cellx4000\cellx5000\cellx6000\cellx7000 18 | \pard\intbl 30\cell 31\cell 1\cell 2\cell 3\cell 4\cell 5\cell\row 19 | \pard\tx720\f1\par 20 | } 21 | -------------------------------------------------------------------------------- /UTE UWP+/Views/ImageOptionsDialog.xaml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 30 | 31 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /UTE UWP+/Views/ComputeHash.xaml.cs: -------------------------------------------------------------------------------- 1 | using Windows.UI.Xaml; 2 | using Windows.UI.Xaml.Controls; 3 | using UTE_UWP_.Helpers; 4 | 5 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238 6 | 7 | namespace UTE_UWP_.Views 8 | { 9 | /// 10 | /// An empty page that can be used on its own or navigated to within a Frame. 11 | /// 12 | public sealed partial class ComputeHash : Page 13 | { 14 | public ComputeHash() 15 | { 16 | this.InitializeComponent(); 17 | } 18 | 19 | private void Button_Click(object sender, RoutedEventArgs e) 20 | { 21 | MainPage mainPage = (Window.Current.Content as Frame).Content as MainPage; 22 | string docText = mainPage.docText; 23 | docText = EncryptorsDecryptors.Base64Encode(docText); 24 | base64_result.Text = docText; 25 | } 26 | 27 | private void Button_Click_1(object sender, RoutedEventArgs e) 28 | { 29 | MainPage mainPage = (Window.Current.Content as Frame).Content as MainPage; 30 | string docText = mainPage.docText; 31 | docText = EncryptorsDecryptors.Base64Decode(docText); 32 | base64_result.Text = docText; 33 | } 34 | 35 | private void Button_Click_2(object sender, RoutedEventArgs e) 36 | { 37 | MainPage mainPage = (Window.Current.Content as Frame).Content as MainPage; 38 | string docText = mainPage.docText; 39 | docText = EncryptorsDecryptors.SHA1Encrypt(docText); 40 | sha1_result.Text = docText; 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /UTE UWP+/Activation/DefaultActivationHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | 4 | using UTE_UWP_.Core.Helpers; 5 | using UTE_UWP_.Services; 6 | 7 | using Windows.ApplicationModel.Activation; 8 | 9 | namespace UTE_UWP_.Activation 10 | { 11 | internal class DefaultActivationHandler : ActivationHandler 12 | { 13 | private readonly Type _navElement; 14 | 15 | public DefaultActivationHandler(Type navElement) 16 | { 17 | _navElement = navElement; 18 | } 19 | 20 | protected override async Task HandleInternalAsync(IActivatedEventArgs args) 21 | { 22 | // When the navigation stack isn't restored, navigate to the first page and configure 23 | // the new page by passing required information in the navigation parameter 24 | object arguments = null; 25 | if (args is LaunchActivatedEventArgs launchArgs) 26 | { 27 | arguments = launchArgs.Arguments; 28 | } 29 | 30 | NavigationService.Navigate(_navElement, arguments); 31 | 32 | // TODO: Remove or change this sample which shows a toast notification when the app is launched. 33 | // You can use this sample to create toast notifications where needed in your app. 34 | //Singleton.Instance.ShowToastNotificationSample(); 35 | await Task.CompletedTask; 36 | } 37 | 38 | protected override bool CanHandleInternal(IActivatedEventArgs args) 39 | { 40 | // None of the ActivationHandlers has handled the app activation 41 | return NavigationService.Frame.Content == null && _navElement != null; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /UTE UWP+/Styles/_Thickness.xaml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 0,36,0,0 7 | 8 | 9 | 24,0,0,0 10 | 24,0,24,0 11 | 24,24,24,24 12 | 0,24,0,0 13 | 0,24,0,24 14 | 0,0,24,0 15 | 0,0,0,24 16 | 17 | 18 | 12, 0, 0, 0 19 | 12, 12, 0, 0 20 | 12, 0, 12, 0 21 | 12, 12, 12, 12 22 | 0, 12, 0, 0 23 | 0, 12, 12, 12 24 | 0, 12, 0, 12 25 | 0, 0, 12, 0 26 | 27 | 28 | 8, 0, 0, 0 29 | 8, 8, 8, 8 30 | 0, 8, 0, 0 31 | 32 | 33 | 0, 4, 0, 0 34 | 0, 4, 4, 4 35 | -------------------------------------------------------------------------------- /UTE UWP+/Views/HelpPage.xaml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | UltraTextEdit UWP 14 | 15 | version 4.6.0.2, Preview 16 | 17 | 23 | 29 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /UTE UWP+/Views/AboutUTE.xaml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | version 4.6.0.2 22 | Development semester: 25H1 23 | Compilation date: March 8, 2025 24 | ©️ 2021-2025 ErrorTek, Ivirius, and other contributors 25 | Licensed under the MIT License 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /UTE UWP+/Views/UTEUpdate.xaml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 14 | 15 | No updates available 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /UTE UWP+/Services/ThemeSelectorService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | 4 | using UTE_UWP_.Helpers; 5 | 6 | using Windows.ApplicationModel.Core; 7 | using Windows.Storage; 8 | using Windows.UI.Core; 9 | using Windows.UI.Xaml; 10 | 11 | namespace UTE_UWP_.Services 12 | { 13 | public static class ThemeSelectorService 14 | { 15 | private const string SettingsKey = "AppBackgroundRequestedTheme"; 16 | 17 | public static ElementTheme Theme { get; set; } = ElementTheme.Default; 18 | 19 | public static async Task InitializeAsync() 20 | { 21 | Theme = await LoadThemeFromSettingsAsync(); 22 | } 23 | 24 | public static async Task SetThemeAsync(ElementTheme theme) 25 | { 26 | Theme = theme; 27 | 28 | await SetRequestedThemeAsync(); 29 | await SaveThemeInSettingsAsync(Theme); 30 | } 31 | 32 | public static async Task SetRequestedThemeAsync() 33 | { 34 | foreach (var view in CoreApplication.Views) 35 | { 36 | await view.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => 37 | { 38 | if (Window.Current.Content is FrameworkElement frameworkElement) 39 | { 40 | frameworkElement.RequestedTheme = Theme; 41 | } 42 | }); 43 | } 44 | } 45 | 46 | private static async Task LoadThemeFromSettingsAsync() 47 | { 48 | ElementTheme cacheTheme = ElementTheme.Default; 49 | string themeName = await ApplicationData.Current.LocalSettings.ReadAsync(SettingsKey); 50 | 51 | if (!string.IsNullOrEmpty(themeName)) 52 | { 53 | Enum.TryParse(themeName, out cacheTheme); 54 | } 55 | 56 | return cacheTheme; 57 | } 58 | 59 | private static async Task SaveThemeInSettingsAsync(ElementTheme theme) 60 | { 61 | await ApplicationData.Current.LocalSettings.SaveAsync(SettingsKey, theme.ToString()); 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /UTE UWP+/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Windows.ApplicationModel; 3 | 4 | namespace UTE_UWP_ 5 | { 6 | public static class Program 7 | { 8 | // This project includes DISABLE_XAML_GENERATED_MAIN in the build properties, 9 | // which prevents the build system from generating the default Main method: 10 | // static void Main(string[] args) 11 | // { 12 | // global::Windows.UI.Xaml.Application.Start((p) => new App()); 13 | // } 14 | // TODO: Update the logic in this method if you want to control the launching of multiple instances. 15 | // You may find the `AppInstance.GetActivatedEventArgs()` useful for your app-defined logic. 16 | public static void Main(string[] args) 17 | { 18 | // If the platform indicates a recommended instance, use that. 19 | if (AppInstance.RecommendedInstance != null) 20 | { 21 | AppInstance.RecommendedInstance.RedirectActivationTo(); 22 | } 23 | else 24 | { 25 | // Update the logic below as appropriate for your app. 26 | // Multiple instances of an app are registered using keys. 27 | // Creating a unique key (as below) allows a new instance to always be created. 28 | // Always using the same key will mean there's only one ever one instance. 29 | // Or you can use your own logic to launch a new instance or switch to an existing one. 30 | var key = Guid.NewGuid().ToString(); 31 | var instance = AppInstance.FindOrRegisterInstanceForKey(key); 32 | 33 | if (instance.IsCurrentInstance) 34 | { 35 | // If successfully registered this instance, do normal XAML initialization. 36 | global::Windows.UI.Xaml.Application.Start((p) => new App()); 37 | } 38 | else 39 | { 40 | // Some other instance has registered for this key, redirect activation to that instance. 41 | instance.RedirectActivationTo(); 42 | } 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /UTE UWP+/Activation/CommandLineActivationHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using System.Threading.Tasks; 3 | 4 | using UTE_UWP_.Services; 5 | using UTE_UWP_.Views; 6 | 7 | using Windows.ApplicationModel.Activation; 8 | using Windows.ApplicationModel.Core; 9 | using Windows.UI.Xaml; 10 | using Windows.UI.Xaml.Controls; 11 | 12 | namespace UTE_UWP_.Activation 13 | { 14 | internal class CommandLineActivationHandler : ActivationHandler 15 | { 16 | // Learn more about these EventArgs at https://docs.microsoft.com/en-us/uwp/api/windows.applicationmodel.activation.commandlineactivatedeventargs 17 | protected override async Task HandleInternalAsync(CommandLineActivatedEventArgs args) 18 | { 19 | CommandLineActivationOperation operation = args.Operation; 20 | 21 | // Because these are supplied by the caller, they should be treated as untrustworthy. 22 | string cmdLineString = operation.Arguments; 23 | 24 | // The directory where the command-line activation request was made. 25 | // This is typically not the install location of the app itself, but could be any arbitrary path. 26 | string activationPath = operation.CurrentDirectoryPath; 27 | 28 | //// TODO: parse the cmdLineString to determine what to do. 29 | //// If doing anything async, get a deferral first. 30 | //// using (var deferral = operation.GetDeferral()) 31 | //// { 32 | //// await ParseCmdString(cmdLineString, activationPath); 33 | //// } 34 | //// 35 | //// If the arguments warrant showing a different view on launch, that can be done here. 36 | //// NavigationService.Navigate(typeof(CmdLineActivationSamplePage), cmdLineString); 37 | //// If you do nothing, the app will launch like normal. 38 | 39 | await Task.CompletedTask; 40 | } 41 | 42 | protected override bool CanHandleInternal(CommandLineActivatedEventArgs args) 43 | { 44 | // Only handle a commandline launch if arguments are passed. 45 | return args?.Operation.Arguments.Any() ?? false; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /UTE UWP+/Views/TableDialog.xaml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 18 | 24 | 25 | 29 | 35 | 36 | 40 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /UTE UWP+/Services/ToastNotificationsService.Samples.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Toolkit.Uwp.Notifications; 2 | 3 | using Windows.UI.Notifications; 4 | 5 | namespace UTE_UWP_.Services 6 | { 7 | internal partial class ToastNotificationsService 8 | { 9 | public void ShowToastNotificationSample() 10 | { 11 | // Create the toast content 12 | var content = new ToastContent() 13 | { 14 | // More about the Launch property at https://docs.microsoft.com/dotnet/api/microsoft.toolkit.uwp.notifications.toastcontent 15 | Launch = "ToastContentActivationParams", 16 | 17 | Visual = new ToastVisual() 18 | { 19 | BindingGeneric = new ToastBindingGeneric() 20 | { 21 | Children = 22 | { 23 | new AdaptiveText() 24 | { 25 | Text = "Sample Toast Notification" 26 | }, 27 | 28 | new AdaptiveText() 29 | { 30 | Text = @"Click OK to see how activation from a toast notification can be handled in the ToastNotificationService." 31 | } 32 | } 33 | } 34 | }, 35 | 36 | Actions = new ToastActionsCustom() 37 | { 38 | Buttons = 39 | { 40 | // More about Toast Buttons at https://docs.microsoft.com/dotnet/api/microsoft.toolkit.uwp.notifications.toastbutton 41 | new ToastButton("OK", "ToastButtonActivationArguments") 42 | { 43 | ActivationType = ToastActivationType.Foreground 44 | }, 45 | 46 | new ToastButtonDismiss("Cancel") 47 | } 48 | } 49 | }; 50 | 51 | // Add the content to the toast 52 | var toast = new ToastNotification(content.GetXml()) 53 | { 54 | // TODO: Set a unique identifier for this notification within the notification group. (optional) 55 | // More details at https://docs.microsoft.com/uwp/api/windows.ui.notifications.toastnotification.tag 56 | Tag = "ToastTag" 57 | }; 58 | 59 | // And show the toast 60 | ShowToastNotification(toast); 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /UTE UWP+/Views/UTEUpdate.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Net; 4 | using Windows.ApplicationModel; 5 | using Windows.Management.Deployment; 6 | using Windows.UI.Xaml; 7 | using Windows.UI.Xaml.Controls; 8 | 9 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238 10 | 11 | namespace UTE_UWP_.Views 12 | { 13 | /// 14 | /// An empty page that can be used on its own or navigated to within a Frame. 15 | /// 16 | public sealed partial class UTEUpdate : Page 17 | { 18 | public UTEUpdate() 19 | { 20 | this.InitializeComponent(); 21 | } 22 | 23 | private async void CheckForUpdates(object sender, RoutedEventArgs e) 24 | { 25 | updatecheckProgress.Visibility = Visibility.Visible; 26 | checkforupdateText.Text = "Checking for updates..."; 27 | WebClient client = new WebClient(); 28 | Stream stream = client.OpenRead("https://raw.githubusercontent.com/errortek/UltraTextEdit-UWP/refs/heads/dev/UTE%20UWP%2B/Assets/UTEUpdate/Version.txt"); 29 | StreamReader reader = new StreamReader(stream); 30 | var newVersion = new Version(await reader.ReadToEndAsync()); 31 | Package package = Package.Current; 32 | PackageVersion packageVersion = package.Id.Version; 33 | var currentVersion = new Version(string.Format("{0}.{1}.{2}.{3}", packageVersion.Major, packageVersion.Minor, packageVersion.Build, packageVersion.Revision)); 34 | 35 | //compare package versions 36 | if (newVersion.CompareTo(currentVersion) > 0) 37 | { 38 | checkforupdateText.Text = "An update is available"; 39 | updatecheckProgress.Visibility = Visibility.Collapsed; 40 | NewUpdateGrid.Visibility = Visibility.Visible; 41 | NewVersion.Text = $"UTE {newVersion}"; 42 | PackageManager packagemanager = new PackageManager(); 43 | await packagemanager.AddPackageAsync( 44 | new Uri($"https://github.com/errortek/UltraTextEdit-UWP/releases/download/{newVersion}/Latest.msixbundle"), 45 | null, DeploymentOptions.ForceApplicationShutdown 46 | ); 47 | } 48 | else 49 | { 50 | checkforupdateText.Text = "No updates available"; 51 | updatecheckProgress.Visibility = Visibility.Collapsed; 52 | } 53 | stream.Close(); 54 | reader.Close(); 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /UTE UWP+/Assets/Templates/ImageArticleTemplate.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\fbidis\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil Segoe UI;}{\f1\fnil\fcharset0 Segoe UI;}} 2 | {\colortbl ;\red0\green0\blue0;} 3 | {\*\generator Riched20 10.0.26100}\viewkind4\uc1 4 | \pard\qc\tx720\cf1\f0\fs21{\pict{\*\picprop{\sp{\sn wzDescription}{\sv Image}}{\sp{\sn posv}{\sv 1}} 5 | }\pngblip\picw8538\pich5336\picwgoal4840\pichgoal3025 6 | 89504e470d0a1a0a0000000d4948445200000190000000fa08060000008fa71144000000017352 7 | 474200aece1ce90000000467414d410000b18f0bfc610500000009704859730000127400001274 8 | 01de661f780000038d49444154785eedd5b101802000c030e431568ff727d999b47332f6815eeb 9 | 7ede01003fcd3300c0170602406220002406024062200024060240622000240602406220002406 10 | 024062200024060240622000240602406220002406024062200024060240622000240602406220 11 | 002406024062200024060240622000240602406220002406024062200024060240622000240602 12 | 406220002406024062200024060240622000240602406220002406024062200024060240622000 13 | 240602406220002406024062200024060240622000240602406220002406024062200024060240 14 | 622000240602406220002406024062200024060240622000240602406220002406024062200024 15 | 060240622000240602406220002406024062200024060240622000240602406220002406024062 16 | 200024060240622000240602406220002406024062200024060240622000240602406220002406 17 | 024062200024060240622000240602406220002406024062200024060240622000240602406220 18 | 002406024062200024060240622000240602406220002406024062200024060240622000240602 19 | 406220002406024062200024060240622000240602406220002406024062200024060240622000 20 | 240602406220002406024062200024060240622000240602406220002406024062200024060240 21 | 622000240602406220002406024062200024060240622000240602406220002406024062200024 22 | 060240622000240602406220002406024062200024060240622000240602406220002406024062 23 | 200024060240622000240602406220002406024062200024060240622000240602406220002406 24 | 024062200024060240622000240602406220002406024062200024060240622000240602406220 25 | 002406024062200024060240622000240602406220002406024062200024060240622000240602 26 | 406220002406024062200024060240622000240602406220002406024062200024060240622000 27 | 240602406220002406024062200024060240622000240602406220002406024062200024060240 28 | 622000240602406220002406024062200024060240622000240602406220002406024062200024 29 | 060240622000240602406220002406024062200024060240622000240602406220002406024062 30 | 200024060240622000240602406220002406024062200024060240622000240602406220002406 31 | 02406220002406024062200024060240622000241bd8ea0446a8fc22820000000049454e44ae42 32 | 6082 33 | }\par 34 | \f1\fs56 \par 35 | \fs40 <Subtitle>\par 36 | \fs21 <Article content>\f0\par 37 | } 38 | -------------------------------------------------------------------------------- /UTE UWP+/Views/SettingsPageContainer.xaml: -------------------------------------------------------------------------------- 1 | <Page 2 | x:Class="UTE_UWP_.Views.SettingsPageContainer" 3 | xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 | xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 | xmlns:local="using:UTE_UWP_.Views" 6 | xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 7 | xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:muxc="using:Microsoft.UI.Xaml.Controls" xmlns:animatedvisuals="using:Microsoft.UI.Xaml.Controls.AnimatedVisuals" 8 | mc:Ignorable="d"> 9 | <Grid> 10 | <Grid.RowDefinitions> 11 | <RowDefinition Height="32" /> 12 | <RowDefinition /> 13 | </Grid.RowDefinitions> 14 | 15 | <Border x:Name="AppTitleBar" 16 | IsHitTestVisible="True" 17 | VerticalAlignment="Top" 18 | Background="Transparent" 19 | Height="30" 20 | Canvas.ZIndex="1" 21 | Margin="50,2,0,0" 22 | RelativePanel.AlignRightWithPanel="True" RelativePanel.AlignLeftWithPanel="True"> 23 | <StackPanel Orientation="Horizontal"> 24 | <Image x:Name="AppFontIcon" 25 | HorizontalAlignment="Left" 26 | VerticalAlignment="Center" 27 | Source="ms-appx:///Assets/Square44x44Logo.png" 28 | Width="16" 29 | Height="16" 30 | Margin="0,2,0,0" /> 31 | <TextBlock x:Name="AppTitle" 32 | x:Uid="Settings_Title" 33 | VerticalAlignment="Center" 34 | Margin="12,2,0,0" 35 | Style="{StaticResource CaptionTextBlockStyle}" /> 36 | </StackPanel> 37 | </Border> 38 | 39 | <Button x:Name="BackButton" 40 | CornerRadius="5" 41 | Height="28" 42 | ToolTipService.ToolTip="Back" 43 | Margin="5,5,2,0" 44 | Style="{StaticResource TransparentButton}" 45 | Width="40" 46 | VerticalAlignment="Center" 47 | AutomationProperties.Name="Back" 48 | AutomationProperties.AutomationId="BackButton" 49 | AutomationProperties.ItemType="Navigation Button" 50 | Canvas.ZIndex="2" 51 | Click="BackButton_Click"> 52 | <muxc:AnimatedIcon x:Name="BackAnimatedIcon" Height="16" Width="16"> 53 | <muxc:AnimatedIcon.Source> 54 | <animatedvisuals:AnimatedBackVisualSource/> 55 | </muxc:AnimatedIcon.Source> 56 | <muxc:AnimatedIcon.FallbackIconSource> 57 | <muxc:SymbolIconSource Symbol="Back"/> 58 | </muxc:AnimatedIcon.FallbackIconSource> 59 | </muxc:AnimatedIcon> 60 | </Button> 61 | <Frame Grid.Row="1" x:Name="SettingsFrame"/> 62 | </Grid> 63 | </Page> 64 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | ################################################################################ 65 | # linguist file type excludes 66 | # 67 | # Excludes certain file types (like RTF) from the Linguist statistics to avoid 68 | # the project being mislabelled. 69 | ################################################################################ 70 | *.rtf linguist-documentation 71 | -------------------------------------------------------------------------------- /UTE UWP+/Views/VelocityIDsPage.xaml: -------------------------------------------------------------------------------- 1 | <Page 2 | x:Class="UTE_UWP_.Views.VelocityIDsPage" 3 | xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 | xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 | xmlns:local="using:UTE_UWP_.Views" 6 | xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 7 | xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 8 | xmlns:muxc="using:Microsoft.UI.Xaml.Controls" xmlns:controls="using:CommunityToolkit.WinUI.Controls" xmlns:animatedvisuals="using:Microsoft.UI.Xaml.Controls.AnimatedVisuals" 9 | mc:Ignorable="d" 10 | muxc:BackdropMaterial.ApplyToRootOrPageBackground="True"> 11 | 12 | <Grid> 13 | <Grid.RowDefinitions> 14 | <RowDefinition Height="32" /> 15 | <RowDefinition /> 16 | </Grid.RowDefinitions> 17 | 18 | <Border x:Name="AppTitleBar" 19 | IsHitTestVisible="True" 20 | VerticalAlignment="Top" 21 | Background="Transparent" 22 | Height="30" 23 | Canvas.ZIndex="1" 24 | Margin="50,2,0,0" 25 | RelativePanel.AlignRightWithPanel="True" RelativePanel.AlignLeftWithPanel="True"> 26 | <StackPanel Orientation="Horizontal"> 27 | <Image x:Name="AppFontIcon" 28 | HorizontalAlignment="Left" 29 | VerticalAlignment="Center" 30 | Source="ms-appx:///Assets/Square44x44Logo.png" 31 | Width="16" 32 | Height="16" 33 | Margin="0,2,0,0" /> 34 | <TextBlock x:Name="AppTitle" 35 | x:Uid="Settings_Title" 36 | VerticalAlignment="Center" 37 | Margin="12,2,0,0" 38 | Style="{StaticResource CaptionTextBlockStyle}" /> 39 | </StackPanel> 40 | </Border> 41 | 42 | <Button x:Name="BackButton" 43 | CornerRadius="5" 44 | Height="28" 45 | ToolTipService.ToolTip="Back" 46 | Margin="5,5,2,0" 47 | Style="{StaticResource TransparentButton}" 48 | Width="40" 49 | VerticalAlignment="Center" 50 | AutomationProperties.Name="Back" 51 | AutomationProperties.AutomationId="BackButton" 52 | AutomationProperties.ItemType="Navigation Button" 53 | Canvas.ZIndex="2" 54 | Click="BackButton_Click"> 55 | <muxc:AnimatedIcon x:Name="BackAnimatedIcon" Height="16" Width="16"> 56 | <muxc:AnimatedIcon.Source> 57 | <animatedvisuals:AnimatedBackVisualSource/> 58 | </muxc:AnimatedIcon.Source> 59 | <muxc:AnimatedIcon.FallbackIconSource> 60 | <muxc:SymbolIconSource Symbol="Back"/> 61 | </muxc:AnimatedIcon.FallbackIconSource> 62 | </muxc:AnimatedIcon> 63 | </Button> 64 | 65 | <ScrollViewer Grid.Row="1" x:Name="view"> 66 | <StackPanel Orientation="Vertical" Padding="20" Spacing="5"> 67 | <TextBlock Text="Velocity IDs" Margin="0,0,0,10" FontSize="32" FontWeight="SemiBold" /> 68 | <controls:SettingsCard Header="Show the first run and changelog dialog links in the Ribbon"> 69 | <ToggleSwitch x:Name="dialogsonribbonvidToggle" OffContent="Off" OnContent="On" Toggled="dialogsonribbonvidToggle_Toggled"/> 70 | </controls:SettingsCard> 71 | </StackPanel> 72 | </ScrollViewer> 73 | </Grid> 74 | </Page> 75 | -------------------------------------------------------------------------------- /UTE UWP+/Package.appxmanifest: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | 3 | <Package 4 | xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" 5 | xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" 6 | xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" 7 | xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" 8 | xmlns:desktop4="http://schemas.microsoft.com/appx/manifest/desktop/windows10/4" 9 | xmlns:iot2="http://schemas.microsoft.com/appx/manifest/iot/windows10/2" 10 | xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5" 11 | xmlns:genTemplate="http://schemas.microsoft.com/appx/developer/templatestudio" 12 | IgnorableNamespaces="uap mp genTemplate uap5 uap3 desktop4 iot2"> 13 | 14 | <Identity 15 | Name="UTE.UWP.Preview" 16 | Publisher="CN=jpb" 17 | Version="4.6.0.2" /> 18 | 19 | <mp:PhoneIdentity PhoneProductId="f886852f-63db-4809-a421-3ebf06677b8f" PhonePublisherId="00000000-0000-0000-0000-000000000000"/> 20 | 21 | <Properties> 22 | <DisplayName>UTE UWP (Preview)</DisplayName> 23 | <PublisherDisplayName>ErrorTek</PublisherDisplayName> 24 | <Logo>Assets\StoreLogo.png</Logo> 25 | </Properties> 26 | 27 | <Dependencies> 28 | <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" /> 29 | </Dependencies> 30 | 31 | <Resources> 32 | <Resource Language="x-generate"/> 33 | </Resources> 34 | 35 | <Applications> 36 | <Application Id="App" 37 | desktop4:SupportsMultipleInstances="true" 38 | iot2:SupportsMultipleInstances="true" 39 | Executable="$targetnametoken$.exe" 40 | EntryPoint="UTE_UWP_.App"> 41 | <uap:VisualElements 42 | DisplayName="UltraTextEdit UWP (Preview)" 43 | Square150x150Logo="Assets\Square150x150Logo.png" 44 | Square44x44Logo="Assets\Square44x44Logo.png" 45 | Description="ms-resource:AppDescription" 46 | BackgroundColor="transparent"> 47 | <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png" Square71x71Logo="Assets\SmallTile.png" Square310x310Logo="Assets\LargeTile.png" ShortName="UTE UWP (Preview)"/> 48 | <uap:SplashScreen Image="Assets\SplashScreen.png" /> 49 | </uap:VisualElements> 50 | 51 | <Extensions> 52 | <uap3:Extension Category="windows.appUriHandler"> 53 | <uap3:AppUriHandler> 54 | <uap3:Host Name="myapp.website.com"/> 55 | </uap3:AppUriHandler> 56 | </uap3:Extension> 57 | <uap5:Extension 58 | Category="windows.appExecutionAlias" 59 | Executable="UTE_UWP_.exe" 60 | EntryPoint="UTE_UWP_.App"> 61 | <uap5:AppExecutionAlias> 62 | <uap5:ExecutionAlias Alias="UTE_UWP_.exe" /> 63 | </uap5:AppExecutionAlias> 64 | </uap5:Extension> 65 | <uap:Extension Category="windows.protocol"> 66 | <uap:Protocol Name="wtsapp"> 67 | <uap:Logo>Assets\Icon.png</uap:Logo> 68 | <uap:DisplayName>UTE_UWP_</uap:DisplayName> 69 | </uap:Protocol> 70 | </uap:Extension> 71 | </Extensions> 72 | </Application> 73 | </Applications> 74 | 75 | <Capabilities> 76 | <Capability Name="internetClient" /> 77 | </Capabilities> 78 | 79 | <genTemplate:Metadata> 80 | <genTemplate:Item Name="generator" Value="Template Studio"/> 81 | <genTemplate:Item Name="wizardVersion" Version="v5.3" /> 82 | <genTemplate:Item Name="projectType" Value="Blank" /> 83 | <genTemplate:Item Name="framework" Value="CodeBehind" /> 84 | <genTemplate:Item Name="platform" Value="Uwp" /> 85 | </genTemplate:Metadata> 86 | </Package> 87 | -------------------------------------------------------------------------------- /UTE UWP+/Services/NavigationService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | using Windows.UI.Xaml; 4 | using Windows.UI.Xaml.Controls; 5 | using Windows.UI.Xaml.Media.Animation; 6 | using Windows.UI.Xaml.Navigation; 7 | 8 | namespace UTE_UWP_.Services 9 | { 10 | public static class NavigationService 11 | { 12 | public static event NavigatedEventHandler Navigated; 13 | 14 | public static event NavigationFailedEventHandler NavigationFailed; 15 | 16 | private static Frame _frame; 17 | private static object _lastParamUsed; 18 | 19 | public static Frame Frame 20 | { 21 | get 22 | { 23 | if (_frame == null) 24 | { 25 | _frame = Window.Current.Content as Frame; 26 | RegisterFrameEvents(); 27 | } 28 | 29 | return _frame; 30 | } 31 | 32 | set 33 | { 34 | UnregisterFrameEvents(); 35 | _frame = value; 36 | RegisterFrameEvents(); 37 | } 38 | } 39 | 40 | public static bool CanGoBack => Frame.CanGoBack; 41 | 42 | public static bool CanGoForward => Frame.CanGoForward; 43 | 44 | public static bool GoBack() 45 | { 46 | if (CanGoBack) 47 | { 48 | Frame.GoBack(); 49 | return true; 50 | } 51 | 52 | return false; 53 | } 54 | 55 | public static void GoForward() => Frame.GoForward(); 56 | 57 | public static bool Navigate(Type pageType, object parameter = null, NavigationTransitionInfo infoOverride = null) 58 | { 59 | if (pageType == null || !pageType.IsSubclassOf(typeof(Page))) 60 | { 61 | throw new ArgumentException($"Invalid pageType '{pageType}', please provide a valid pageType.", nameof(pageType)); 62 | } 63 | 64 | // Don't open the same page multiple times 65 | if (Frame.Content?.GetType() != pageType || (parameter != null && !parameter.Equals(_lastParamUsed))) 66 | { 67 | var navigationResult = Frame.Navigate(pageType, parameter, infoOverride); 68 | if (navigationResult) 69 | { 70 | _lastParamUsed = parameter; 71 | } 72 | 73 | return navigationResult; 74 | } 75 | else 76 | { 77 | return false; 78 | } 79 | } 80 | 81 | public static bool Navigate<T>(object parameter = null, NavigationTransitionInfo infoOverride = null) 82 | where T : Page 83 | => Navigate(typeof(T), parameter, infoOverride); 84 | 85 | private static void RegisterFrameEvents() 86 | { 87 | if (_frame != null) 88 | { 89 | _frame.Navigated += Frame_Navigated; 90 | _frame.NavigationFailed += Frame_NavigationFailed; 91 | } 92 | } 93 | 94 | private static void UnregisterFrameEvents() 95 | { 96 | if (_frame != null) 97 | { 98 | _frame.Navigated -= Frame_Navigated; 99 | _frame.NavigationFailed -= Frame_NavigationFailed; 100 | } 101 | } 102 | 103 | private static void Frame_NavigationFailed(object sender, NavigationFailedEventArgs e) => NavigationFailed?.Invoke(sender, e); 104 | 105 | private static void Frame_Navigated(object sender, NavigationEventArgs e) => Navigated?.Invoke(sender, e); 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # <img src="https://github.com/jpbandroid/UltraTextEdit-UWP/blob/main/UTE%20UWP+/Assets/utevericon.png?raw=true" width="36"/> UltraTextEdit UWP 2 | 3 | #### UTE UWP is a modern, lightweight text editor adhering to the Fluent Design Guidelines, using the UWP platform. 4 | 5 | <p align="center"> 6 | <a title="GitHub Releases" target="_blank" href="https://github.com/jpbandroid/UltraTextEdit-UWP"> 7 | <img align="left" src="https://img.shields.io/github/v/release/jpbandroid/UltraTextEdit-UWP?include_prereleases" alt="Release" /> 8 | </a> 9 | <a title="Repository Size" target="_blank" href="https://github.com/jpbandroid/UltraTextEdit-UWP/activity"> 10 | <img align="left" src="https://img.shields.io/github/repo-size/jpbandroid/UltraTextEdit-UWP?color=%23cc0000" alt="Size" /> 11 | </a> 12 | <a title="Crowdin" target="_blank" href="https://crowdin.com/project/ultratextedit-uwp"><img align="left" src="https://badges.crowdin.net/ultratextedit-uwp/localized.svg"/></a> 13 | </p> 14 | <br/> 15 | 16 | ## ⬇️ Installation 17 | 18 | <p> 19 | <a title="GitHub" href="https://github.com/jpbandroid/UltraTextEdit-UWP/releases/latest"> 20 | <img src="https://user-images.githubusercontent.com/74561130/160255105-5e32f911-574f-4cc4-b90b-8769099086e4.png" width="157" alt="Get it from GitHub" /> 21 | </a> 22 | <p/> 23 | 24 | ### 📸 Screenshots 25 | 26 | ![{A8AFE5CC-F8EF-46AE-8AAE-830CFB06DC8E}](https://github.com/user-attachments/assets/505866f1-6f88-4538-b221-c482eee2c4a3) 27 | ![{C17FAA16-19F4-4009-BE95-AA9E8A44FDDF}](https://github.com/user-attachments/assets/bb399d91-be8c-4d71-b18d-a591e1d315be) 28 | ![{825B0DE1-DAF8-4E59-8A94-FDFC110878B0}](https://github.com/user-attachments/assets/f5ae6d15-2650-4c37-adbe-dffd0dfb1514) 29 | 30 | ## 🧪 Contributing & Feedback 31 | 32 | There are many ways to contribute: 33 | 34 | - Upvote popular feature requests 35 | - Create discussions about new features 36 | - [Submit a new feature contribution or bugfix](https://github.com/jpbandroid/UltraTextEdit-UWP/pulls) 37 | - [File bug reports and feature requests](https://github.com/jpbandroid/UltraTextEdit-UWP/issues/new/choose) 38 | - Review the [latest commits](https://github.com/jpbandroid/UltraTextEdit-UWP/commits) 39 | - Help localize the project via [Crowdin](https://crowdin.com/project/ultratextedit-uwp) 40 | - Join the [Developer Sancutary](https://discord.gg/windows-apps-hub-714581497222398064) Discord server to get the latest product announcements! (the UTE section is found under the #jpb-projects forum channel, in the UltraTextEdit (UWP) forum post!) 41 | ## 🛠️ Compiling from Source 42 | 43 | Compiling the app from source is the best way to make sure that you get the latest features and enhancements. However, some functionality may be incomplete or not functional. 44 | 45 | ### 1️⃣ Prerequisites 46 | 47 | Ensure you have the following components installed on your device: 48 | 49 | - [Git](https://git-scm.com/) 50 | - [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) with following individual components: 51 | - UWP app development compponents 52 | - Windows 11 SDK 53 | - [Windows 11 or Windows 10](https://www.microsoft.com/en-us/windows) (version 1809+) 54 | - At least 4GB of RAM (at least 8GB recommended) 55 | 56 | ### 2️⃣ Get the source 57 | 58 | Clone the repository using Git (git clone then the repo URL) 59 | 60 | ### 3️⃣ Build the project 61 | 62 | - Open the solution file. 63 | - Build with `DEBUG|x64` (or whichever architecture is the most appropriate to your device) 64 | - Note: You may need to add the CommunityToolkitLabs NuGet source for the app to compile (if you don't have it added already), you can find the link you need in the repo of CommunityToolkit Labs. 65 | 66 | ## 📊 Statistics 67 | ![Alt](https://repobeats.axiom.co/api/embed/5448bddd9f9794aafe615ba07510bc88d68235a9.svg "Repobeats analytics image") 68 | 69 | ## ⚖️ License and Credits 70 | 71 | Copyright ©️ 2021-2024 ErrorTek, Ivirius, other contributors 72 | 73 | Licensed under the [MIT License](LICENSE.md). 74 | -------------------------------------------------------------------------------- /UTE UWP+/README.md: -------------------------------------------------------------------------------- 1 | # <img src="https://github.com/jpbandroid/UltraTextEdit-UWP/blob/main/UTE%20UWP+/Assets/utevericon.png?raw=true" width="36"/> UltraTextEdit UWP 2 | 3 | #### UTE UWP is a modern, lightweight text editor adhering to the Fluent Design Guidelines, using the UWP platform. 4 | #### NOTE: The repository has been moved over to https://github.com/jpbandroid/UltraTextEdit-UWP, expect new releases over there! 5 | 6 | <p align="center"> 7 | <a title="GitHub Releases" target="_blank" href="https://github.com/jpbandroid/UltraTextEdit-UWP"> 8 | <img align="left" src="https://img.shields.io/github/v/release/jpbandroid/UltraTextEdit-UWP?include_prereleases" alt="Release" /> 9 | </a> 10 | <a title="Repository Size" target="_blank" href="https://github.com/jpbandroid/UltraTextEdit-UWP/activity"> 11 | <img align="left" src="https://img.shields.io/github/repo-size/jpbandroid/UltraTextEdit-UWP?color=%23cc0000" alt="Size" /> 12 | </a> 13 | <a title="Crowdin" target="_blank" href="https://crowdin.com/project/ultratextedit-uwp"><img align="left" src="https://badges.crowdin.net/ultratextedit-uwp/localized.svg"/></a> 14 | </p> 15 | <br/> 16 | 17 | ## ⬇️ Installation 18 | 19 | <p> 20 | <a title="GitHub" href="https://github.com/jpbandroid/UltraTextEdit-UWP/releases/latest"> 21 | <img src="https://user-images.githubusercontent.com/74561130/160255105-5e32f911-574f-4cc4-b90b-8769099086e4.png" width="157" alt="Get it from GitHub" /> 22 | </a> 23 | <p/> 24 | 25 | ### 📸 Screenshots 26 | 27 | ![{A8AFE5CC-F8EF-46AE-8AAE-830CFB06DC8E}](https://github.com/user-attachments/assets/505866f1-6f88-4538-b221-c482eee2c4a3) 28 | ![{C17FAA16-19F4-4009-BE95-AA9E8A44FDDF}](https://github.com/user-attachments/assets/bb399d91-be8c-4d71-b18d-a591e1d315be) 29 | ![{825B0DE1-DAF8-4E59-8A94-FDFC110878B0}](https://github.com/user-attachments/assets/f5ae6d15-2650-4c37-adbe-dffd0dfb1514) 30 | 31 | ## 🧪 Contributing & Feedback 32 | 33 | There are many ways to contribute: 34 | 35 | - Upvote popular feature requests 36 | - Create discussions about new features 37 | - [Submit a new feature contribution or bugfix](https://github.com/jpbandroid/UltraTextEdit-UWP/pulls) 38 | - [File bug reports and feature requests](https://github.com/jpbandroid/UltraTextEdit-UWP/issues/new/choose) 39 | - Review the [latest commits](https://github.com/jpbandroid/UltraTextEdit-UWP/commits) 40 | - Help localize the project via [Crowdin](https://crowdin.com/project/ultratextedit-uwp) 41 | - Join the [Developer Sancutary](https://discord.gg/windows-apps-hub-714581497222398064) Discord server to get the latest product announcements! (the UTE section is found under the #jpb-projects forum channel, in the UltraTextEdit (UWP) forum post!) 42 | ## 🛠️ Compiling from Source 43 | 44 | Compiling the app from source is the best way to make sure that you get the latest features and enhancements. However, some functionality may be incomplete or not functional. 45 | 46 | ### 1️⃣ Prerequisites 47 | 48 | Ensure you have the following components installed on your device: 49 | 50 | - [Git](https://git-scm.com/) 51 | - [Visual Studio 2022](https://visualstudio.microsoft.com/vs/) with following individual components: 52 | - UWP app development compponents 53 | - Windows 11 SDK 54 | - [Windows 11 or Windows 10](https://www.microsoft.com/en-us/windows) (version 1809+) 55 | - At least 4GB of RAM (at least 8GB recommended) 56 | 57 | ### 2️⃣ Get the source 58 | 59 | Clone the repository using Git (git clone then the repo URL) 60 | 61 | ### 3️⃣ Build the project 62 | 63 | - Open the solution file. 64 | - Build with `DEBUG|x64` (or whichever architecture is the most appropriate to your device) 65 | - Note: You may need to add the CommunityToolkitLabs NuGet source for the app to compile (if you don't have it added already), you can find the link you need in the repo of CommunityToolkit Labs. 66 | 67 | ## 📊 Statistics 68 | ![Alt](https://repobeats.axiom.co/api/embed/5448bddd9f9794aafe615ba07510bc88d68235a9.svg "Repobeats analytics image") 69 | 70 | ## ⚖️ License and Credits 71 | 72 | Copyright ©️ 2021-2024 ErrorTek, Ivirius, other contributors 73 | 74 | Licensed under the [MIT License](LICENSE.md). -------------------------------------------------------------------------------- /UTE UWP+/Views/VelocityIDsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using MicaForUWP.Media; 2 | using UTE_UWP_.Helpers; 3 | using Windows.Storage; 4 | using Windows.UI.Xaml; 5 | using Windows.UI.Xaml.Controls; 6 | using Windows.UI.Xaml.Media; 7 | 8 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238 9 | 10 | namespace UTE_UWP_.Views 11 | { 12 | /// <summary> 13 | /// An empty page that can be used on its own or navigated to within a Frame. 14 | /// </summary> 15 | public sealed partial class VelocityIDsPage : Page 16 | { 17 | public VelocityIDsPage() 18 | { 19 | this.InitializeComponent(); 20 | 21 | if (BuildInfo.BeforeWin11) 22 | { 23 | if (App.Current.RequestedTheme == ApplicationTheme.Light) 24 | { 25 | Application.Current.Resources["AppTitleBarBrush"] = new BackdropMicaBrush() 26 | { 27 | LuminosityOpacity = 0.8F, 28 | TintOpacity = 0F, 29 | BackgroundSource = BackgroundSource.WallpaperBackdrop, 30 | Opacity = 1, 31 | TintColor = Windows.UI.Color.FromArgb(255, 230, 230, 230), 32 | FallbackColor = Windows.UI.Color.FromArgb(255, 230, 230, 230) 33 | }; 34 | this.Background = (Brush)Application.Current.Resources["AppTitleBarBrush"]; 35 | } 36 | else 37 | { 38 | Application.Current.Resources["AppTitleBarBrush"] = new BackdropMicaBrush() 39 | { 40 | LuminosityOpacity = 0.8F, 41 | TintOpacity = 0F, 42 | BackgroundSource = BackgroundSource.WallpaperBackdrop, 43 | Opacity = 1, 44 | TintColor = Windows.UI.Color.FromArgb(255, 25, 25, 25), 45 | FallbackColor = Windows.UI.Color.FromArgb(25, 25, 25, 25) 46 | }; 47 | this.Background = (Brush)Application.Current.Resources["AppTitleBarBrush"]; 48 | } 49 | 50 | } 51 | else 52 | { 53 | 54 | } 55 | 56 | var LocalSettings = ApplicationData.Current.LocalSettings; 57 | if (LocalSettings.Values["DialogsInRibbonVID"] != null) 58 | { 59 | if ((string)LocalSettings.Values["DialogsInRibbonVID"] == "On") 60 | { 61 | dialogsonribbonvidToggle.IsOn = true; 62 | 63 | } 64 | if ((string)LocalSettings.Values["DialogsInRibbonVID"] == "Off") 65 | { 66 | dialogsonribbonvidToggle.IsOn = false; 67 | } 68 | } 69 | else 70 | { 71 | LocalSettings.Values["DialogsInRibbonVID"] = "Off"; 72 | dialogsonribbonvidToggle.IsOn = false; 73 | } 74 | 75 | } 76 | 77 | private void BackButton_Click(object sender, RoutedEventArgs e) 78 | { 79 | if (Window.Current.Content is Frame rootFrame && rootFrame.CanGoBack) 80 | { 81 | rootFrame.GoBack(); 82 | } 83 | } 84 | 85 | private void dialogsonribbonvidToggle_Toggled(object sender, RoutedEventArgs e) 86 | { 87 | if (dialogsonribbonvidToggle.IsOn == true) 88 | { 89 | var LocalSettings = ApplicationData.Current.LocalSettings; 90 | if (LocalSettings.Values["DialogsInRibbonVID"] != null) 91 | { 92 | LocalSettings.Values["DialogsInRibbonVID"] = "On"; 93 | } 94 | } 95 | else 96 | { 97 | var LocalSettings = ApplicationData.Current.LocalSettings; 98 | if (LocalSettings.Values["DialogsInRibbonVID"] != null) 99 | { 100 | LocalSettings.Values["DialogsInRibbonVID"] = "Off"; 101 | } 102 | } 103 | } 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /UTE UWP+/Views/SettingsPageContainer.xaml.cs: -------------------------------------------------------------------------------- 1 | using MicaForUWP.Media; 2 | using UTE_UWP_.Helpers; 3 | using Windows.ApplicationModel.Core; 4 | using Windows.UI.ViewManagement; 5 | using Windows.UI; 6 | using Windows.UI.Xaml; 7 | using Windows.UI.Xaml.Controls; 8 | using Windows.UI.Xaml.Media; 9 | 10 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238 11 | 12 | namespace UTE_UWP_.Views 13 | { 14 | /// <summary> 15 | /// An empty page that can be used on its own or navigated to within a Frame. 16 | /// </summary> 17 | public sealed partial class SettingsPageContainer : Page 18 | { 19 | public SettingsPageContainer() 20 | { 21 | this.InitializeComponent(); 22 | SettingsFrame.Navigate(typeof(SettingsPage)); 23 | 24 | if (BuildInfo.BeforeWin11) 25 | { 26 | if (App.Current.RequestedTheme == ApplicationTheme.Light) 27 | { 28 | Application.Current.Resources["AppTitleBarBrush"] = new BackdropMicaBrush() 29 | { 30 | LuminosityOpacity = 0.8F, 31 | TintOpacity = 0F, 32 | BackgroundSource = BackgroundSource.WallpaperBackdrop, 33 | Opacity = 1, 34 | TintColor = Windows.UI.Color.FromArgb(255, 230, 230, 230), 35 | FallbackColor = Windows.UI.Color.FromArgb(255, 230, 230, 230) 36 | }; 37 | this.Background = (Brush)Application.Current.Resources["AppTitleBarBrush"]; 38 | } 39 | else 40 | { 41 | Application.Current.Resources["AppTitleBarBrush"] = new BackdropMicaBrush() 42 | { 43 | LuminosityOpacity = 0.8F, 44 | TintOpacity = 0F, 45 | BackgroundSource = BackgroundSource.WallpaperBackdrop, 46 | Opacity = 1, 47 | TintColor = Windows.UI.Color.FromArgb(255, 25, 25, 25), 48 | FallbackColor = Windows.UI.Color.FromArgb(25, 25, 25, 25) 49 | }; 50 | this.Background = (Brush)Application.Current.Resources["AppTitleBarBrush"]; 51 | } 52 | 53 | var appViewTitleBar = ApplicationView.GetForCurrentView().TitleBar; 54 | 55 | appViewTitleBar.ButtonBackgroundColor = Colors.Transparent; 56 | appViewTitleBar.ButtonInactiveBackgroundColor = Colors.Transparent; 57 | 58 | var coreTitleBar = CoreApplication.GetCurrentView().TitleBar; 59 | coreTitleBar.ExtendViewIntoTitleBar = true; 60 | UpdateTitleBarLayout(coreTitleBar); 61 | 62 | Window.Current.SetTitleBar(AppTitleBar); 63 | 64 | coreTitleBar.LayoutMetricsChanged += CoreTitleBar_LayoutMetricsChanged; 65 | coreTitleBar.IsVisibleChanged += CoreTitleBar_IsVisibleChanged; 66 | } 67 | } 68 | 69 | private void CoreTitleBar_LayoutMetricsChanged(CoreApplicationViewTitleBar sender, object args) 70 | { 71 | UpdateTitleBarLayout(sender); 72 | } 73 | 74 | private void CoreTitleBar_IsVisibleChanged(CoreApplicationViewTitleBar sender, object args) 75 | { 76 | AppTitleBar.Visibility = sender.IsVisible ? Visibility.Visible : Visibility.Collapsed; 77 | } 78 | 79 | private void UpdateTitleBarLayout(CoreApplicationViewTitleBar coreTitleBar) 80 | { 81 | // Update title bar control size as needed to account for system size changes. 82 | AppTitleBar.Height = coreTitleBar.Height; 83 | 84 | // Ensure the custom title bar does not overlap window caption controls 85 | Thickness currMargin = AppTitleBar.Margin; 86 | AppTitleBar.Margin = new Thickness(currMargin.Left, currMargin.Top, coreTitleBar.SystemOverlayRightInset, currMargin.Bottom); 87 | } 88 | 89 | private void BackButton_Click(object sender, RoutedEventArgs e) 90 | { 91 | if (Window.Current.Content is Frame rootFrame && rootFrame.CanGoBack) 92 | { 93 | rootFrame.GoBack(); 94 | } 95 | } 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /UTE UWP+/Views/ViewModel.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.ComponentModel; 3 | using System.Runtime.CompilerServices; 4 | using System.Threading; 5 | 6 | namespace UTE_UWP_.ViewModels 7 | { 8 | /// <summary> 9 | /// Base ViewModel implementation, wraps a <typeparamref name="Type"/> 10 | /// object for the Model-View-ViewModel pattern and contains methods 11 | /// to handle property changes. 12 | /// </summary> 13 | /// <typeparam name="Type">Type of the underlying model.</typeparam> 14 | public abstract class ViewModel<Type> : ViewModel 15 | { 16 | private Type _model; 17 | /// <summary> 18 | /// Gets or sets the underlying <see cref="Type"/> object. 19 | /// </summary> 20 | public Type Model 21 | { 22 | get => _model; 23 | set 24 | { 25 | if (_model == null || !_model.Equals(value)) 26 | { 27 | _model = value; 28 | 29 | // Raise the PropertyChanged event for all properties. 30 | OnPropertyChanged(string.Empty); 31 | } 32 | } 33 | } 34 | } 35 | 36 | /// <summary> 37 | /// Base ViewModel implementation, contains methods to 38 | /// handle property changes. 39 | /// </summary> 40 | public abstract class ViewModel : INotifyPropertyChanged 41 | { 42 | private readonly Dictionary<PropertyChangedEventHandler, SynchronizationContext> PropertyChangedEvents = 43 | new Dictionary<PropertyChangedEventHandler, SynchronizationContext>(); 44 | 45 | /// <summary> 46 | /// Occurs when a property value changes. 47 | /// </summary> 48 | public event PropertyChangedEventHandler PropertyChanged 49 | { 50 | add 51 | { 52 | PropertyChangedEvents.Add(value, SynchronizationContext.Current); 53 | } 54 | remove 55 | { 56 | PropertyChangedEvents.Remove(value); 57 | } 58 | } 59 | 60 | /// <summary> 61 | /// Notifies listeners that a property value has changed. 62 | /// </summary> 63 | /// <param name="propertyName">Name of the property used to notify listeners. This 64 | /// value is optional and can be provided automatically when invoked from compilers 65 | /// that support <see cref="CallerMemberNameAttribute"/>.</param> 66 | protected void OnPropertyChanged([CallerMemberName] string propertyName = null) 67 | { 68 | PropertyChangedEventArgs args = new PropertyChangedEventArgs(propertyName); 69 | foreach (KeyValuePair<PropertyChangedEventHandler, SynchronizationContext> @event in PropertyChangedEvents) 70 | { 71 | if (@event.Value == null) 72 | { 73 | @event.Key.Invoke(this, args); 74 | } 75 | else 76 | { 77 | @event.Value.Post(s => @event.Key.Invoke(s, args), this); 78 | } 79 | } 80 | } 81 | 82 | /// <summary> 83 | /// Checks if a property already matches a desired value. Sets the property and 84 | /// notifies listeners only when necessary. 85 | /// </summary> 86 | /// <typeparam name="T">Type of the property.</typeparam> 87 | /// <param name="storage">Reference to a property with both getter and setter.</param> 88 | /// <param name="value">Desired value for the property.</param> 89 | /// <param name="propertyName">Name of the property used to notify listeners. This 90 | /// value is optional and can be provided automatically when invoked from compilers that 91 | /// support CallerMemberName.</param> 92 | /// <returns>True if the value was changed, false if the existing value matched the 93 | /// desired value.</returns> 94 | protected bool Set<T>(ref T storage, T value, 95 | [CallerMemberName] string propertyName = null) 96 | { 97 | if (Equals(storage, value)) 98 | { 99 | return false; 100 | } 101 | 102 | storage = value; 103 | OnPropertyChanged(propertyName); 104 | return true; 105 | } 106 | } 107 | } -------------------------------------------------------------------------------- /UTE UWP+/Helpers/SettingsStorageExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Threading.Tasks; 4 | using UTE_UWP_.Core.Helpers; 5 | using Windows.Storage; 6 | using Windows.Storage.Streams; 7 | 8 | namespace UTE_UWP_.Helpers 9 | { 10 | // Use these extension methods to store and retrieve local and roaming app data 11 | // More details regarding storing and retrieving app data at https://docs.microsoft.com/windows/uwp/app-settings/store-and-retrieve-app-data 12 | public static class SettingsStorageExtensions 13 | { 14 | private const string FileExtension = ".json"; 15 | 16 | public static bool IsRoamingStorageAvailable(this ApplicationData appData) 17 | { 18 | return appData.RoamingStorageQuota == 0; 19 | } 20 | 21 | public static async Task SaveAsync<T>(this StorageFolder folder, string name, T content) 22 | { 23 | var file = await folder.CreateFileAsync(GetFileName(name), CreationCollisionOption.ReplaceExisting); 24 | var fileContent = await Json.StringifyAsync(content); 25 | 26 | await FileIO.WriteTextAsync(file, fileContent); 27 | } 28 | 29 | public static async Task<T> ReadAsync<T>(this StorageFolder folder, string name) 30 | { 31 | if (!File.Exists(Path.Combine(folder.Path, GetFileName(name)))) 32 | { 33 | return default; 34 | } 35 | 36 | var file = await folder.GetFileAsync($"{name}.json"); 37 | var fileContent = await FileIO.ReadTextAsync(file); 38 | 39 | return await Json.ToObjectAsync<T>(fileContent); 40 | } 41 | 42 | public static async Task SaveAsync<T>(this ApplicationDataContainer settings, string key, T value) 43 | { 44 | settings.SaveString(key, await Json.StringifyAsync(value)); 45 | } 46 | 47 | public static void SaveString(this ApplicationDataContainer settings, string key, string value) 48 | { 49 | settings.Values[key] = value; 50 | } 51 | 52 | public static async Task<T> ReadAsync<T>(this ApplicationDataContainer settings, string key) 53 | { 54 | object obj = null; 55 | 56 | if (settings.Values.TryGetValue(key, out obj)) 57 | { 58 | return await Json.ToObjectAsync<T>((string)obj); 59 | } 60 | 61 | return default; 62 | } 63 | 64 | public static async Task<StorageFile> SaveFileAsync(this StorageFolder folder, byte[] content, string fileName, CreationCollisionOption options = CreationCollisionOption.ReplaceExisting) 65 | { 66 | if (content == null) 67 | { 68 | throw new ArgumentNullException(nameof(content)); 69 | } 70 | 71 | if (string.IsNullOrEmpty(fileName)) 72 | { 73 | throw new ArgumentException("File name is null or empty. Specify a valid file name", nameof(fileName)); 74 | } 75 | 76 | var storageFile = await folder.CreateFileAsync(fileName, options); 77 | await FileIO.WriteBytesAsync(storageFile, content); 78 | return storageFile; 79 | } 80 | 81 | public static async Task<byte[]> ReadFileAsync(this StorageFolder folder, string fileName) 82 | { 83 | var item = await folder.TryGetItemAsync(fileName).AsTask().ConfigureAwait(false); 84 | 85 | if ((item != null) && item.IsOfType(StorageItemTypes.File)) 86 | { 87 | var storageFile = await folder.GetFileAsync(fileName); 88 | byte[] content = await storageFile.ReadBytesAsync(); 89 | return content; 90 | } 91 | 92 | return null; 93 | } 94 | 95 | public static async Task<byte[]> ReadBytesAsync(this StorageFile file) 96 | { 97 | if (file != null) 98 | { 99 | using (IRandomAccessStream stream = await file.OpenReadAsync()) 100 | { 101 | using (var reader = new DataReader(stream.GetInputStreamAt(0))) 102 | { 103 | await reader.LoadAsync((uint)stream.Size); 104 | var bytes = new byte[stream.Size]; 105 | reader.ReadBytes(bytes); 106 | return bytes; 107 | } 108 | } 109 | } 110 | return null; 111 | } 112 | 113 | private static string GetFileName(string name) 114 | { 115 | return string.Concat(name, FileExtension); 116 | } 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /UTE UWP+/Helpers/BuildInfo.cs: -------------------------------------------------------------------------------- 1 | using Windows.Foundation.Metadata; 2 | using Windows.UI.Composition; 3 | 4 | namespace UTE_UWP_.Helpers 5 | { 6 | internal class BuildInfo 7 | { 8 | private static BuildInfo _buildInfo; 9 | 10 | private BuildInfo() 11 | { 12 | if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 15)) 13 | { 14 | Build = Build.Win11Anniversary; 15 | } 16 | else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 14)) 17 | { 18 | Build = Build.Win11; 19 | } 20 | else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 13)) 21 | { 22 | Build = Build.Nov2021; 23 | } 24 | else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 12)) 25 | { 26 | Build = Build.May2021; 27 | } 28 | else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 11)) 29 | { 30 | Build = Build.Oct2020; 31 | } 32 | else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 10)) 33 | { 34 | Build = Build.May2020; 35 | } 36 | else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 9)) 37 | { 38 | Build = Build.Nov2019; 39 | } 40 | else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 8)) 41 | { 42 | Build = Build.May2019; 43 | } 44 | else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 7)) 45 | { 46 | Build = Build.Oct2018; 47 | } 48 | else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 6)) 49 | { 50 | Build = Build.Apr2018; 51 | } 52 | else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 5)) 53 | { 54 | Build = Build.FallCreators; 55 | } 56 | else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 4)) 57 | { 58 | Build = Build.Creators; 59 | } 60 | else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 3)) 61 | { 62 | Build = Build.Anniversary; 63 | } 64 | else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 2)) 65 | { 66 | Build = Build.Threshold2; 67 | } 68 | else if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 1)) 69 | { 70 | Build = Build.Threshold1; 71 | } 72 | else 73 | { 74 | Build = Build.Unknown; 75 | } 76 | 77 | if (!BeforeCreatorsUpdate) 78 | { 79 | var capabilities = CompositionCapabilities.GetForCurrentView(); 80 | capabilities.Changed += (s, e) => UpdateCapabilities(capabilities); 81 | UpdateCapabilities(capabilities); 82 | } 83 | 84 | void UpdateCapabilities(CompositionCapabilities capabilities) 85 | { 86 | AreEffectsSupported = capabilities.AreEffectsSupported(); 87 | AreEffectsFast = capabilities.AreEffectsFast(); 88 | } 89 | } 90 | 91 | public static Build Build { get; private set; } 92 | public static bool AreEffectsFast { get; private set; } 93 | public static bool AreEffectsSupported { get; private set; } 94 | public static bool BeforeCreatorsUpdate => Build < Build.Creators; 95 | 96 | public static bool BeforeWin11 => Build < Build.Win11; 97 | 98 | public static bool BeforeWin1122H2 => Build < Build.Win11Anniversary; 99 | 100 | public static BuildInfo RetrieveApiInfo() => _buildInfo = new BuildInfo(); 101 | } 102 | 103 | public enum Build 104 | { 105 | Unknown = 0, 106 | Threshold1 = 1507, // 10240 107 | Threshold2 = 1511, // 10586 108 | Anniversary = 1607, // 14393 Redstone 1 109 | Creators = 1703, // 15063 Redstone 2 110 | FallCreators = 1709, // 16299 Redstone 3 111 | Apr2018 = 1803, // 17134 Redsone 4 112 | Oct2018 = 1809, // 17763 Redstone 5 113 | May2019 = 1903, // 18362 19H1 114 | Nov2019 = 1909, // 18363 19H2 115 | May2020 = 2004, // 19041 20H1 116 | Oct2020 = 2009, // 19042 20H2 117 | May2021 = 2104, // 19043 21H1 118 | Nov2021 = 2110, // 19044 21H2 (Win10) 119 | Win11 = 2200, // 22000 21H2 (Win11) 120 | Win11Anniversary = 2262 //22621 22H2 (Win11) 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # ErrorTek projects' Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | . 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series 86 | of actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or 93 | permanent ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within 113 | the community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.0, available at 119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 120 | 121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 122 | enforcement ladder](https://github.com/mozilla/diversity). 123 | 124 | [homepage]: https://www.contributor-covenant.org 125 | 126 | For answers to common questions about this code of conduct, see the FAQ at 127 | https://www.contributor-covenant.org/faq. Translations are available at 128 | https://www.contributor-covenant.org/translations. 129 | -------------------------------------------------------------------------------- /UTE UWP+/Services/ActivationService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | using UTE_UWP_.Activation; 7 | using UTE_UWP_.Core.Helpers; 8 | using UTE_UWP_.Services; 9 | 10 | using Windows.ApplicationModel.Activation; 11 | using Windows.System; 12 | using Windows.UI.Xaml; 13 | using Windows.UI.Xaml.Controls; 14 | using Windows.UI.Xaml.Input; 15 | 16 | namespace UTE_UWP_.Services 17 | { 18 | // For more information on understanding and extending activation flow see 19 | // https://github.com/microsoft/TemplateStudio/blob/main/docs/UWP/activation.md 20 | internal class ActivationService 21 | { 22 | private readonly App _app; 23 | private readonly Type _defaultNavItem; 24 | private Lazy<UIElement> _shell; 25 | 26 | private object _lastActivationArgs; 27 | 28 | public static readonly KeyboardAccelerator AltLeftKeyboardAccelerator = BuildKeyboardAccelerator(VirtualKey.Left, VirtualKeyModifiers.Menu); 29 | 30 | public static readonly KeyboardAccelerator BackKeyboardAccelerator = BuildKeyboardAccelerator(VirtualKey.GoBack); 31 | 32 | public ActivationService(App app, Type defaultNavItem, Lazy<UIElement> shell = null) 33 | { 34 | _app = app; 35 | _shell = shell; 36 | _defaultNavItem = defaultNavItem; 37 | } 38 | 39 | public async Task ActivateAsync(object activationArgs) 40 | { 41 | if (IsInteractive(activationArgs)) 42 | { 43 | // Initialize services that you need before app activation 44 | // take into account that the splash screen is shown while this code runs. 45 | await InitializeAsync(); 46 | 47 | // Do not repeat app initialization when the Window already has content, 48 | // just ensure that the window is active 49 | if (Window.Current.Content == null) 50 | { 51 | // Create a Shell or Frame to act as the navigation context 52 | Window.Current.Content = _shell?.Value ?? new Frame(); 53 | NavigationService.NavigationFailed += (sender, e) => 54 | { 55 | throw e.Exception; 56 | }; 57 | } 58 | } 59 | 60 | // Depending on activationArgs one of ActivationHandlers or DefaultActivationHandler 61 | // will navigate to the first page 62 | await HandleActivationAsync(activationArgs); 63 | _lastActivationArgs = activationArgs; 64 | 65 | if (IsInteractive(activationArgs)) 66 | { 67 | // Ensure the current window is active 68 | Window.Current.Activate(); 69 | 70 | // Tasks after activation 71 | await StartupAsync(); 72 | } 73 | } 74 | 75 | private static KeyboardAccelerator BuildKeyboardAccelerator(VirtualKey key, VirtualKeyModifiers? modifiers = null) 76 | { 77 | var keyboardAccelerator = new KeyboardAccelerator() { Key = key }; 78 | if (modifiers.HasValue) 79 | { 80 | keyboardAccelerator.Modifiers = modifiers.Value; 81 | } 82 | 83 | keyboardAccelerator.Invoked += OnKeyboardAcceleratorInvoked; 84 | return keyboardAccelerator; 85 | } 86 | 87 | private static void OnKeyboardAcceleratorInvoked(KeyboardAccelerator sender, KeyboardAcceleratorInvokedEventArgs args) 88 | { 89 | var result = NavigationService.GoBack(); 90 | args.Handled = result; 91 | } 92 | 93 | private async Task InitializeAsync() 94 | { 95 | await ThemeSelectorService.InitializeAsync().ConfigureAwait(false); 96 | //await WindowManagerService.Current.InitializeAsync(); 97 | } 98 | 99 | private async Task HandleActivationAsync(object activationArgs) 100 | { 101 | var activationHandler = GetActivationHandlers() 102 | .FirstOrDefault(h => h.CanHandle(activationArgs)); 103 | 104 | if (activationHandler != null) 105 | { 106 | await activationHandler.HandleAsync(activationArgs); 107 | } 108 | 109 | if (IsInteractive(activationArgs)) 110 | { 111 | var defaultHandler = new DefaultActivationHandler(_defaultNavItem); 112 | if (defaultHandler.CanHandle(activationArgs)) 113 | { 114 | await defaultHandler.HandleAsync(activationArgs); 115 | } 116 | } 117 | } 118 | 119 | private async Task StartupAsync() 120 | { 121 | // TODO: This is a sample to demonstrate how to add a UserActivity. Please adapt and move this method call to where you consider convenient in your app. 122 | //await UserActivityService.AddSampleUserActivity(); 123 | await ThemeSelectorService.SetRequestedThemeAsync(); 124 | await FirstRunDisplayService.ShowIfAppropriateAsync(); 125 | await WhatsNewDisplayService.ShowIfAppropriateAsync(); 126 | } 127 | 128 | private IEnumerable<ActivationHandler> GetActivationHandlers() 129 | { 130 | yield return Singleton<ToastNotificationsService>.Instance; 131 | //yield return Singleton<WebToAppLinkActivationHandler>.Instance; 132 | //yield return Singleton<SchemeActivationHandler>.Instance; 133 | yield return Singleton<CommandLineActivationHandler>.Instance; 134 | } 135 | 136 | private bool IsInteractive(object args) 137 | { 138 | return args is IActivatedEventArgs; 139 | } 140 | } 141 | } 142 | -------------------------------------------------------------------------------- /UTE UWP+/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UTE_UWP_.Services; 3 | using Windows.ApplicationModel.Activation; 4 | using Windows.Storage; 5 | using Windows.UI; 6 | using Windows.UI.Xaml; 7 | using Windows.UI.Xaml.Media; 8 | 9 | namespace UTE_UWP_ 10 | { 11 | public sealed partial class App : Application 12 | { 13 | private Lazy<ActivationService> _activationService; 14 | 15 | private ActivationService ActivationService 16 | { 17 | get { return _activationService.Value; } 18 | } 19 | 20 | public App() 21 | { 22 | InitializeComponent(); 23 | UnhandledException += OnAppUnhandledException; 24 | 25 | 26 | // Deferred execution until used. Check https://docs.microsoft.com/dotnet/api/system.lazy-1 for further info on Lazy<T> class. 27 | _activationService = new Lazy<ActivationService>(CreateActivationService); 28 | } 29 | 30 | protected override async void OnLaunched(LaunchActivatedEventArgs args) 31 | { 32 | var LocalSettings = ApplicationData.Current.LocalSettings; 33 | if (LocalSettings.Values["NewRibbon"] == null) 34 | { 35 | LocalSettings.Values["NewRibbon"] = "Off"; 36 | } 37 | if (LocalSettings.Values["AccentTheme"] == null) { 38 | LocalSettings.Values["AccentTheme"] = "Default"; 39 | } 40 | if ((string)LocalSettings.Values["AccentTheme"] == "Slate Green") 41 | { 42 | var brush = new SolidColorBrush(Color.FromArgb(255, 92, 255, 138)); 43 | Application.Current.Resources["SystemAccentColor"] = Color.FromArgb(255, 92, 255, 138); 44 | Application.Current.Resources["SystemAccentColorDark1"] = Color.FromArgb(255, 92, 255, 138); 45 | Application.Current.Resources["SystemAccentColorDark2"] = Color.FromArgb(255, 92, 255, 138); 46 | Application.Current.Resources["SystemAccentColorDark3"] = Color.FromArgb(255, 92, 255, 138); 47 | Application.Current.Resources["SystemAccentColorLight1"] = Color.FromArgb(255, 92, 255, 138); 48 | Application.Current.Resources["SystemAccentColorLight2"] = Color.FromArgb(255, 92, 255, 138); 49 | Application.Current.Resources["SystemAccentColorLight3"] = Color.FromArgb(255, 92, 255, 138); 50 | } 51 | if ((string)LocalSettings.Values["AccentTheme"] == "Lilac") 52 | { 53 | var brush = new SolidColorBrush(Color.FromArgb(255, 0x89, 0x61, 0xCC)); 54 | Application.Current.Resources["SystemAccentColor"] = Color.FromArgb(255, 0x89, 0x81, 0xCC); 55 | Application.Current.Resources["SystemAccentColorDark1"] = Color.FromArgb(255, 0x98, 0x75, 0xD4); 56 | Application.Current.Resources["SystemAccentColorDark2"] = Color.FromArgb(255, 0xA7, 0x88, 0xDD); 57 | Application.Current.Resources["SystemAccentColorDark3"] = Color.FromArgb(255, 0xB7, 0x9C, 0xE5); 58 | Application.Current.Resources["SystemAccentColorLight1"] = Color.FromArgb(255, 0x77, 0x52, 0xBA); 59 | Application.Current.Resources["SystemAccentColorLight2"] = Color.FromArgb(255, 0x65, 0x43, 0xA9); 60 | Application.Current.Resources["SystemAccentColorLight3"] = Color.FromArgb(255, 0xA7, 0x88, 0xDD); 61 | } 62 | if ((string)LocalSettings.Values["AccentTheme"] == "Crimson") 63 | { 64 | var brush = new SolidColorBrush(Color.FromArgb(255, 0x89, 0x61, 0xCC)); 65 | Application.Current.Resources["SystemAccentColor"] = Color.FromArgb(255, 0xD1, 0x34, 0x38); 66 | Application.Current.Resources["SystemAccentColorDark1"] = Color.FromArgb(255, 0xD9, 0x4D, 0x50); 67 | Application.Current.Resources["SystemAccentColorDark2"] = Color.FromArgb(255, 0xE1, 0x65, 0x68); 68 | Application.Current.Resources["SystemAccentColorDark3"] = Color.FromArgb(255, 0xE9, 0x7E, 0x81); 69 | Application.Current.Resources["SystemAccentColorLight1"] = Color.FromArgb(255, 0xBE, 0x2A, 0x2D); 70 | Application.Current.Resources["SystemAccentColorLight2"] = Color.FromArgb(255, 0xAB, 0x1F, 0x22); 71 | Application.Current.Resources["SystemAccentColorLight3"] = Color.FromArgb(255, 0x99, 0x15, 0x16); 72 | } 73 | if ((string)LocalSettings.Values["AccentTheme"] == "Blue") 74 | { 75 | var brush = new SolidColorBrush(Color.FromArgb(255, 0x89, 0x61, 0xCC)); 76 | Application.Current.Resources["SystemAccentColor"] = Color.FromArgb(255, 0x00, 0x73, 0xCF); 77 | Application.Current.Resources["SystemAccentColorDark1"] = Color.FromArgb(255, 0x1D, 0x85, 0xD7); 78 | Application.Current.Resources["SystemAccentColorDark2"] = Color.FromArgb(255, 0x3B, 0x97, 0xDF); 79 | Application.Current.Resources["SystemAccentColorDark3"] = Color.FromArgb(255, 0x58, 0xA8, 0xE8); 80 | Application.Current.Resources["SystemAccentColorLight1"] = Color.FromArgb(255, 0x00, 0x64, 0xBE); 81 | Application.Current.Resources["SystemAccentColorLight2"] = Color.FromArgb(255, 0x00, 0x55, 0xAD); 82 | Application.Current.Resources["SystemAccentColorLight3"] = Color.FromArgb(255, 0x00, 0x45, 0x9D); 83 | } 84 | if ((string)LocalSettings.Values["AccentTheme"] == "Seafoam") 85 | { 86 | var brush = new SolidColorBrush(Color.FromArgb(255, 0x89, 0x61, 0xCC)); 87 | Application.Current.Resources["SystemAccentColor"] = Color.FromArgb(255, 0x00, 0xB7, 0xC3); 88 | Application.Current.Resources["SystemAccentColorDark1"] = Color.FromArgb(255, 0x1C, 0xC1, 0xCC); 89 | Application.Current.Resources["SystemAccentColorDark2"] = Color.FromArgb(255, 0x38, 0xCA, 0xD4); 90 | Application.Current.Resources["SystemAccentColorDark3"] = Color.FromArgb(255, 0x54, 0xD4, 0xDD); 91 | Application.Current.Resources["SystemAccentColorLight1"] = Color.FromArgb(255, 0x00, 0xA4, 0xB0); 92 | Application.Current.Resources["SystemAccentColorLight2"] = Color.FromArgb(255, 0x00, 0x90, 0x9D); 93 | Application.Current.Resources["SystemAccentColorLight3"] = Color.FromArgb(255, 0x00, 0x7D, 0x89); 94 | } 95 | if (!args.PrelaunchActivated) 96 | { 97 | await ActivationService.ActivateAsync(args); 98 | 99 | } 100 | } 101 | 102 | protected override async void OnActivated(IActivatedEventArgs args) 103 | { 104 | await ActivationService.ActivateAsync(args); 105 | } 106 | 107 | private void OnAppUnhandledException(object sender, Windows.UI.Xaml.UnhandledExceptionEventArgs e) 108 | { 109 | // TODO: Please log and handle the exception as appropriate to your scenario 110 | // For more info see https://docs.microsoft.com/uwp/api/windows.ui.xaml.application.unhandledexception 111 | } 112 | 113 | private ActivationService CreateActivationService() 114 | { 115 | return new ActivationService(this, typeof(Views.MainPage)); 116 | } 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Ww][Ii][Nn]32/ 27 | [Aa][Rr][Mm]/ 28 | [Aa][Rr][Mm]64/ 29 | bld/ 30 | [Bb]in/ 31 | [Oo]bj/ 32 | [Oo]ut/ 33 | [Ll]og/ 34 | [Ll]ogs/ 35 | 36 | # Visual Studio 2015/2017 cache/options directory 37 | .vs/ 38 | # Uncomment if you have tasks that create the project's static files in wwwroot 39 | #wwwroot/ 40 | 41 | # Visual Studio 2017 auto generated files 42 | Generated\ Files/ 43 | 44 | # MSTest test Results 45 | [Tt]est[Rr]esult*/ 46 | [Bb]uild[Ll]og.* 47 | 48 | # NUnit 49 | *.VisualState.xml 50 | TestResult.xml 51 | nunit-*.xml 52 | 53 | # Build Results of an ATL Project 54 | [Dd]ebugPS/ 55 | [Rr]eleasePS/ 56 | dlldata.c 57 | 58 | # Benchmark Results 59 | BenchmarkDotNet.Artifacts/ 60 | 61 | # .NET Core 62 | project.lock.json 63 | project.fragment.lock.json 64 | artifacts/ 65 | 66 | # ASP.NET Scaffolding 67 | ScaffoldingReadMe.txt 68 | 69 | # StyleCop 70 | StyleCopReport.xml 71 | 72 | # Files built by Visual Studio 73 | *_i.c 74 | *_p.c 75 | *_h.h 76 | *.ilk 77 | *.meta 78 | *.obj 79 | *.iobj 80 | *.pch 81 | *.pdb 82 | *.ipdb 83 | *.pgc 84 | *.pgd 85 | *.rsp 86 | *.sbr 87 | *.tlb 88 | *.tli 89 | *.tlh 90 | *.tmp 91 | *.tmp_proj 92 | *_wpftmp.csproj 93 | *.log 94 | *.vspscc 95 | *.vssscc 96 | .builds 97 | *.pidb 98 | *.svclog 99 | *.scc 100 | 101 | # Chutzpah Test files 102 | _Chutzpah* 103 | 104 | # Visual C++ cache files 105 | ipch/ 106 | *.aps 107 | *.ncb 108 | *.opendb 109 | *.opensdf 110 | *.sdf 111 | *.cachefile 112 | *.VC.db 113 | *.VC.VC.opendb 114 | 115 | # Visual Studio profiler 116 | *.psess 117 | *.vsp 118 | *.vspx 119 | *.sap 120 | 121 | # Visual Studio Trace Files 122 | *.e2e 123 | 124 | # TFS 2012 Local Workspace 125 | $tf/ 126 | 127 | # Guidance Automation Toolkit 128 | *.gpState 129 | 130 | # ReSharper is a .NET coding add-in 131 | _ReSharper*/ 132 | *.[Rr]e[Ss]harper 133 | *.DotSettings.user 134 | 135 | # TeamCity is a build add-in 136 | _TeamCity* 137 | 138 | # DotCover is a Code Coverage Tool 139 | *.dotCover 140 | 141 | # AxoCover is a Code Coverage Tool 142 | .axoCover/* 143 | !.axoCover/settings.json 144 | 145 | # Coverlet is a free, cross platform Code Coverage Tool 146 | coverage*.json 147 | coverage*.xml 148 | coverage*.info 149 | 150 | # Visual Studio code coverage results 151 | *.coverage 152 | *.coveragexml 153 | 154 | # NCrunch 155 | _NCrunch_* 156 | .*crunch*.local.xml 157 | nCrunchTemp_* 158 | 159 | # MightyMoose 160 | *.mm.* 161 | AutoTest.Net/ 162 | 163 | # Web workbench (sass) 164 | .sass-cache/ 165 | 166 | # Installshield output folder 167 | [Ee]xpress/ 168 | 169 | # DocProject is a documentation generator add-in 170 | DocProject/buildhelp/ 171 | DocProject/Help/*.HxT 172 | DocProject/Help/*.HxC 173 | DocProject/Help/*.hhc 174 | DocProject/Help/*.hhk 175 | DocProject/Help/*.hhp 176 | DocProject/Help/Html2 177 | DocProject/Help/html 178 | 179 | # Click-Once directory 180 | publish/ 181 | 182 | # Publish Web Output 183 | *.[Pp]ublish.xml 184 | *.azurePubxml 185 | # Note: Comment the next line if you want to checkin your web deploy settings, 186 | # but database connection strings (with potential passwords) will be unencrypted 187 | *.pubxml 188 | *.publishproj 189 | 190 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 191 | # checkin your Azure Web App publish settings, but sensitive information contained 192 | # in these scripts will be unencrypted 193 | PublishScripts/ 194 | 195 | # NuGet Packages 196 | *.nupkg 197 | # NuGet Symbol Packages 198 | *.snupkg 199 | # The packages folder can be ignored because of Package Restore 200 | **/[Pp]ackages/* 201 | # except build/, which is used as an MSBuild target. 202 | !**/[Pp]ackages/build/ 203 | # Uncomment if necessary however generally it will be regenerated when needed 204 | #!**/[Pp]ackages/repositories.config 205 | # NuGet v3's project.json files produces more ignorable files 206 | *.nuget.props 207 | *.nuget.targets 208 | 209 | # Microsoft Azure Build Output 210 | csx/ 211 | *.build.csdef 212 | 213 | # Microsoft Azure Emulator 214 | ecf/ 215 | rcf/ 216 | 217 | # Windows Store app package directories and files 218 | AppPackages/ 219 | BundleArtifacts/ 220 | Package.StoreAssociation.xml 221 | _pkginfo.txt 222 | *.appx 223 | *.appxbundle 224 | *.appxupload 225 | 226 | # Visual Studio cache files 227 | # files ending in .cache can be ignored 228 | *.[Cc]ache 229 | # but keep track of directories ending in .cache 230 | !?*.[Cc]ache/ 231 | 232 | # Others 233 | ClientBin/ 234 | ~$* 235 | *~ 236 | *.dbmdl 237 | *.dbproj.schemaview 238 | *.jfm 239 | *.pfx 240 | *.publishsettings 241 | orleans.codegen.cs 242 | 243 | # Including strong name files can present a security risk 244 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 245 | #*.snk 246 | 247 | # Since there are multiple workflows, uncomment next line to ignore bower_components 248 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 249 | #bower_components/ 250 | 251 | # RIA/Silverlight projects 252 | Generated_Code/ 253 | 254 | # Backup & report files from converting an old project file 255 | # to a newer Visual Studio version. Backup files are not needed, 256 | # because we have git ;-) 257 | _UpgradeReport_Files/ 258 | Backup*/ 259 | UpgradeLog*.XML 260 | UpgradeLog*.htm 261 | ServiceFabricBackup/ 262 | *.rptproj.bak 263 | 264 | # SQL Server files 265 | *.mdf 266 | *.ldf 267 | *.ndf 268 | 269 | # Business Intelligence projects 270 | *.rdl.data 271 | *.bim.layout 272 | *.bim_*.settings 273 | *.rptproj.rsuser 274 | *- [Bb]ackup.rdl 275 | *- [Bb]ackup ([0-9]).rdl 276 | *- [Bb]ackup ([0-9][0-9]).rdl 277 | 278 | # Microsoft Fakes 279 | FakesAssemblies/ 280 | 281 | # GhostDoc plugin setting file 282 | *.GhostDoc.xml 283 | 284 | # Node.js Tools for Visual Studio 285 | .ntvs_analysis.dat 286 | node_modules/ 287 | 288 | # Visual Studio 6 build log 289 | *.plg 290 | 291 | # Visual Studio 6 workspace options file 292 | *.opt 293 | 294 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 295 | *.vbw 296 | 297 | # Visual Studio LightSwitch build output 298 | **/*.HTMLClient/GeneratedArtifacts 299 | **/*.DesktopClient/GeneratedArtifacts 300 | **/*.DesktopClient/ModelManifest.xml 301 | **/*.Server/GeneratedArtifacts 302 | **/*.Server/ModelManifest.xml 303 | _Pvt_Extensions 304 | 305 | # Paket dependency manager 306 | .paket/paket.exe 307 | paket-files/ 308 | 309 | # FAKE - F# Make 310 | .fake/ 311 | 312 | # CodeRush personal settings 313 | .cr/personal 314 | 315 | # Python Tools for Visual Studio (PTVS) 316 | __pycache__/ 317 | *.pyc 318 | 319 | # Cake - Uncomment if you are using it 320 | # tools/** 321 | # !tools/packages.config 322 | 323 | # Tabs Studio 324 | *.tss 325 | 326 | # Telerik's JustMock configuration file 327 | *.jmconfig 328 | 329 | # BizTalk build output 330 | *.btp.cs 331 | *.btm.cs 332 | *.odx.cs 333 | *.xsd.cs 334 | 335 | # OpenCover UI analysis results 336 | OpenCover/ 337 | 338 | # Azure Stream Analytics local run output 339 | ASALocalRun/ 340 | 341 | # MSBuild Binary and Structured Log 342 | *.binlog 343 | 344 | # NVidia Nsight GPU debugger configuration file 345 | *.nvuser 346 | 347 | # MFractors (Xamarin productivity tool) working folder 348 | .mfractor/ 349 | 350 | # Local History for Visual Studio 351 | .localhistory/ 352 | 353 | # BeatPulse healthcheck temp database 354 | healthchecksdb 355 | 356 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 357 | MigrationBackup/ 358 | 359 | # Ionide (cross platform F# VS Code tools) working folder 360 | .ionide/ 361 | 362 | # Fody - auto-generated XML schema 363 | FodyWeavers.xsd -------------------------------------------------------------------------------- /UTE UWP+.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.8.34322.80 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UTE UWP+", "UTE UWP+\UTE UWP+.csproj", "{73B4987B-140D-4D2E-92C6-EA7A290D146C}" 7 | EndProject 8 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UTE UWP+.Core", "UTE UWP+.Core\UTE UWP+.Core.csproj", "{19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}" 9 | EndProject 10 | Global 11 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 12 | Debug|Any CPU = Debug|Any CPU 13 | Debug|ARM = Debug|ARM 14 | Debug|ARM64 = Debug|ARM64 15 | Debug|x64 = Debug|x64 16 | Debug|x86 = Debug|x86 17 | Release|Any CPU = Release|Any CPU 18 | Release|ARM = Release|ARM 19 | Release|ARM64 = Release|ARM64 20 | Release|x64 = Release|x64 21 | Release|x86 = Release|x86 22 | EndGlobalSection 23 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 24 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Debug|Any CPU.ActiveCfg = Debug|x64 25 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Debug|Any CPU.Build.0 = Debug|x64 26 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Debug|Any CPU.Deploy.0 = Debug|x64 27 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Debug|ARM.ActiveCfg = Debug|ARM 28 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Debug|ARM.Build.0 = Debug|ARM 29 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Debug|ARM.Deploy.0 = Debug|ARM 30 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Debug|ARM64.ActiveCfg = Debug|ARM64 31 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Debug|ARM64.Build.0 = Debug|ARM64 32 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Debug|ARM64.Deploy.0 = Debug|ARM64 33 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Debug|x64.ActiveCfg = Debug|x64 34 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Debug|x64.Build.0 = Debug|x64 35 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Debug|x64.Deploy.0 = Debug|x64 36 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Debug|x86.ActiveCfg = Debug|x86 37 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Debug|x86.Build.0 = Debug|x86 38 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Debug|x86.Deploy.0 = Debug|x86 39 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Release|Any CPU.ActiveCfg = Release|x64 40 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Release|Any CPU.Build.0 = Release|x64 41 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Release|Any CPU.Deploy.0 = Release|x64 42 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Release|ARM.ActiveCfg = Release|ARM 43 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Release|ARM.Build.0 = Release|ARM 44 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Release|ARM.Deploy.0 = Release|ARM 45 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Release|ARM64.ActiveCfg = Release|ARM64 46 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Release|ARM64.Build.0 = Release|ARM64 47 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Release|ARM64.Deploy.0 = Release|ARM64 48 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Release|x64.ActiveCfg = Release|x64 49 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Release|x64.Build.0 = Release|x64 50 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Release|x64.Deploy.0 = Release|x64 51 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Release|x86.ActiveCfg = Release|x86 52 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Release|x86.Build.0 = Release|x86 53 | {73B4987B-140D-4D2E-92C6-EA7A290D146C}.Release|x86.Deploy.0 = Release|x86 54 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 55 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Debug|Any CPU.Build.0 = Debug|Any CPU 56 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Debug|ARM.ActiveCfg = Debug|Any CPU 57 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Debug|ARM.Build.0 = Debug|Any CPU 58 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Debug|ARM64.ActiveCfg = Debug|Any CPU 59 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Debug|ARM64.Build.0 = Debug|Any CPU 60 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Debug|x64.ActiveCfg = Debug|Any CPU 61 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Debug|x64.Build.0 = Debug|Any CPU 62 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Debug|x86.ActiveCfg = Debug|Any CPU 63 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Debug|x86.Build.0 = Debug|Any CPU 64 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Release|Any CPU.ActiveCfg = Release|Any CPU 65 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Release|Any CPU.Build.0 = Release|Any CPU 66 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Release|ARM.ActiveCfg = Release|Any CPU 67 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Release|ARM.Build.0 = Release|Any CPU 68 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Release|ARM64.ActiveCfg = Release|Any CPU 69 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Release|ARM64.Build.0 = Release|Any CPU 70 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Release|x64.ActiveCfg = Release|Any CPU 71 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Release|x64.Build.0 = Release|Any CPU 72 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Release|x86.ActiveCfg = Release|Any CPU 73 | {19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}.Release|x86.Build.0 = Release|Any CPU 74 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Debug|Any CPU.ActiveCfg = Debug|x64 75 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Debug|Any CPU.Build.0 = Debug|x64 76 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Debug|ARM.ActiveCfg = Debug|x64 77 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Debug|ARM.Build.0 = Debug|x64 78 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Debug|ARM64.ActiveCfg = Debug|arm64 79 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Debug|ARM64.Build.0 = Debug|arm64 80 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Debug|x64.ActiveCfg = Debug|x64 81 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Debug|x64.Build.0 = Debug|x64 82 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Debug|x86.ActiveCfg = Debug|x86 83 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Debug|x86.Build.0 = Debug|x86 84 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Release|Any CPU.ActiveCfg = Release|x64 85 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Release|Any CPU.Build.0 = Release|x64 86 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Release|ARM.ActiveCfg = Release|x64 87 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Release|ARM.Build.0 = Release|x64 88 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Release|ARM64.ActiveCfg = Release|arm64 89 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Release|ARM64.Build.0 = Release|arm64 90 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Release|x64.ActiveCfg = Release|x64 91 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Release|x64.Build.0 = Release|x64 92 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Release|x86.ActiveCfg = Release|x86 93 | {FF1EEBE0-AB84-4B40-A612-44AFB84D2C34}.Release|x86.Build.0 = Release|x86 94 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 95 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Debug|Any CPU.Build.0 = Debug|Any CPU 96 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Debug|ARM.ActiveCfg = Debug|Any CPU 97 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Debug|ARM.Build.0 = Debug|Any CPU 98 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Debug|ARM64.ActiveCfg = Debug|arm64 99 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Debug|ARM64.Build.0 = Debug|arm64 100 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Debug|x64.ActiveCfg = Debug|x64 101 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Debug|x64.Build.0 = Debug|x64 102 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Debug|x86.ActiveCfg = Debug|x86 103 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Debug|x86.Build.0 = Debug|x86 104 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Release|Any CPU.ActiveCfg = Release|Any CPU 105 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Release|Any CPU.Build.0 = Release|Any CPU 106 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Release|ARM.ActiveCfg = Release|Any CPU 107 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Release|ARM.Build.0 = Release|Any CPU 108 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Release|ARM64.ActiveCfg = Release|arm64 109 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Release|ARM64.Build.0 = Release|arm64 110 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Release|x64.ActiveCfg = Release|x64 111 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Release|x64.Build.0 = Release|x64 112 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Release|x86.ActiveCfg = Release|x86 113 | {C5269C6C-3A36-4946-83E9-EE8C994E333C}.Release|x86.Build.0 = Release|x86 114 | EndGlobalSection 115 | GlobalSection(SolutionProperties) = preSolution 116 | HideSolutionNode = FALSE 117 | EndGlobalSection 118 | GlobalSection(ExtensibilityGlobals) = postSolution 119 | SolutionGuid = {D09FD6CD-578E-43B1-A8A3-B8869B56CED6} 120 | EndGlobalSection 121 | EndGlobal 122 | -------------------------------------------------------------------------------- /UTE UWP+/Views/SettingsPage.xaml: -------------------------------------------------------------------------------- 1 | <Page 2 | x:Class="UTE_UWP_.Views.SettingsPage" 3 | xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 | xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 | xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 6 | xmlns:helper="using:UTE_UWP_.Helpers" 7 | xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 8 | Style="{StaticResource PageStyle}" 9 | xmlns:xaml="using:Windows.UI.Xaml" xmlns:muxc="using:Microsoft.UI.Xaml.Controls" xmlns:animatedvisuals="using:Microsoft.UI.Xaml.Controls.AnimatedVisuals" xmlns:controls="using:CommunityToolkit.WinUI.Controls" xmlns:controlsold="using:Microsoft.Toolkit.Uwp.UI.Controls" 10 | mc:Ignorable="d"> 11 | <Page.Resources> 12 | <helper:EnumToBooleanConverter x:Key="EnumToBooleanConverter" EnumType="ElementTheme" /> 13 | </Page.Resources> 14 | <Grid> 15 | <Grid 16 | x:Name="ContentArea"> 17 | <ScrollViewer x:Name="view"> 18 | <StackPanel Orientation="Vertical" Padding="20" Spacing="5"> 19 | <TextBlock x:Uid="Settings_Title" Margin="0,0,0,10" FontSize="32" FontWeight="SemiBold" /> 20 | <TextBlock Text="Editor" Margin="0,0,0,10" FontSize="18" FontWeight="SemiBold" /> 21 | <StackPanel Margin="{StaticResource SmallTopBottomMargin}"> 22 | <controls:SettingsCard Header="Text wrapping"> 23 | <ComboBox x:Name="TextWrapComboBox" SelectionChanged="TextWrapComboBox_SelectionChanged"> 24 | <x:String>No wrap</x:String> 25 | <x:String>Wrap</x:String> 26 | <x:String>Wrap whole words</x:String> 27 | </ComboBox> 28 | </controls:SettingsCard> 29 | <controls:SettingsCard Header="Spell check"> 30 | <controls:SettingsCard.HeaderIcon> 31 | <FontIcon Glyph="" /> 32 | </controls:SettingsCard.HeaderIcon> 33 | <CheckBox x:Name="spellcheckBox" Checked="spellcheckBox_Checked" Unchecked="spellcheckBox_Unchecked" Margin="0,0,-100,0"/> 34 | </controls:SettingsCard> 35 | </StackPanel> 36 | <TextBlock x:Uid="Settings_Personalization" Margin="0,0,0,10" FontSize="18" FontWeight="SemiBold" /> 37 | <StackPanel Margin="{StaticResource SmallTopBottomMargin}"> 38 | <controls:SettingsExpander x:Uid="SettingsTheme"> 39 | <controls:SettingsExpander.Items> 40 | <controls:SettingsCard HorizontalContentAlignment="Left" 41 | ContentAlignment="Left"> 42 | <StackPanel> 43 | <RadioButton 44 | x:Uid="Settings_Theme_Light" 45 | Checked="ThemeChanged_CheckedAsync" 46 | IsChecked="{x:Bind ElementTheme, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter=Light, Mode=OneWay}" 47 | FontSize="15" 48 | GroupName="AppTheme" > 49 | <RadioButton.CommandParameter> 50 | <xaml:ElementTheme>Light</xaml:ElementTheme> 51 | </RadioButton.CommandParameter> 52 | </RadioButton> 53 | <RadioButton 54 | x:Uid="Settings_Theme_Dark" 55 | Checked="ThemeChanged_CheckedAsync" 56 | IsChecked="{x:Bind ElementTheme, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter=Dark, Mode=OneWay}" 57 | FontSize="15" 58 | GroupName="AppTheme"> 59 | <RadioButton.CommandParameter> 60 | <xaml:ElementTheme>Dark</xaml:ElementTheme> 61 | </RadioButton.CommandParameter> 62 | </RadioButton> 63 | <RadioButton 64 | x:Uid="Settings_Theme_Default" 65 | Checked="ThemeChanged_CheckedAsync" 66 | IsChecked="{x:Bind ElementTheme, Converter={StaticResource EnumToBooleanConverter}, ConverterParameter=Default, Mode=OneWay}" 67 | FontSize="15" 68 | GroupName="AppTheme"> 69 | <RadioButton.CommandParameter> 70 | <xaml:ElementTheme>Default</xaml:ElementTheme> 71 | </RadioButton.CommandParameter> 72 | </RadioButton> 73 | </StackPanel> 74 | </controls:SettingsCard> 75 | </controls:SettingsExpander.Items> 76 | </controls:SettingsExpander> 77 | <controls:SettingsCard x:Uid="AccentColor"> 78 | <ComboBox x:Name="AccentBox" ItemsSource="{x:Bind accentcolors}" SelectionChanged="AccentBox_SelectionChanged"/> 79 | </controls:SettingsCard> 80 | </StackPanel> 81 | 82 | <TextBlock x:Uid="Settings_About" Style="{ThemeResource SubtitleTextBlockStyle}" /> 83 | 84 | <StackPanel Margin="{StaticResource XSmallTopMargin}"> 85 | <!--<TextBlock Style="{ThemeResource BodyTextBlockStyle}" Text="{x:Bind VersionDescription, Mode=OneWay}" />--> 86 | <controls:SettingsCard Header="{x:Bind VersionDescription, Mode=OneWay}" Description="© 2021-2025 ErrorTek, Ivirius, and other contributors"> 87 | <controls:SettingsCard.HeaderIcon> 88 | <BitmapIcon UriSource="ms-appx:///Assets/Square44x44Logo.png" ShowAsMonochrome="False"/> 89 | </controls:SettingsCard.HeaderIcon> 90 | </controls:SettingsCard> 91 | 92 | <controls:SettingsCard x:Name="updateblock" 93 | Header="UTE Update" 94 | IsClickEnabled="True" 95 | Click="UpdateButton_Click"> 96 | <controls:SettingsCard.HeaderIcon> 97 | <FontIcon Glyph=""/> 98 | </controls:SettingsCard.HeaderIcon> 99 | </controls:SettingsCard> 100 | <controls:SettingsCard 101 | ActionIconToolTip="Open GitHub repo in browser" 102 | Description="Go there to submit issues, view pull requests, and check out the code!!" 103 | Header="GitHub repo" 104 | x:Uid="GitHubRepo" 105 | IsClickEnabled="True" 106 | IsEnabled="True" 107 | Click="GH_Navigate"> 108 | <controls:SettingsCard.ActionIcon> 109 | <FontIcon Glyph=""/> 110 | </controls:SettingsCard.ActionIcon> 111 | <controls:SettingsCard.HeaderIcon> 112 | <FontIcon Glyph=""/> 113 | </controls:SettingsCard.HeaderIcon> 114 | </controls:SettingsCard> 115 | <controls:SettingsCard 116 | x:Uid="LocalizationContribution" 117 | IsClickEnabled="True" 118 | IsEnabled="True" 119 | Click="LocalizationContrib_Navigate"> 120 | <controls:SettingsCard.ActionIcon> 121 | <FontIcon Glyph=""/> 122 | </controls:SettingsCard.ActionIcon> 123 | <controls:SettingsCard.HeaderIcon> 124 | <FontIcon Glyph=""/> 125 | </controls:SettingsCard.HeaderIcon> 126 | </controls:SettingsCard> 127 | <controls:SettingsCard x:Name="vidsblock" 128 | Header="Velocity IDs" 129 | IsClickEnabled="True" 130 | Click="VIDsButton_Click"> 131 | <controls:SettingsCard.HeaderIcon> 132 | <FontIcon Glyph=""/> 133 | </controls:SettingsCard.HeaderIcon> 134 | </controls:SettingsCard> 135 | 136 | 137 | </StackPanel> 138 | </StackPanel> 139 | </ScrollViewer> 140 | </Grid> 141 | </Grid> 142 | </Page> 143 | -------------------------------------------------------------------------------- /UTE UWP+/Views/SettingsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Runtime.CompilerServices; 5 | using System.Threading.Tasks; 6 | 7 | using UTE_UWP_.Helpers; 8 | using UTE_UWP_.Services; 9 | 10 | using Windows.ApplicationModel; 11 | using Windows.Storage; 12 | using Windows.UI; 13 | using Windows.UI.Xaml; 14 | using Windows.UI.Xaml.Controls; 15 | using Windows.UI.Xaml.Media; 16 | using Windows.UI.Xaml.Navigation; 17 | 18 | namespace UTE_UWP_.Views 19 | { 20 | public sealed partial class SettingsPage : Page, INotifyPropertyChanged 21 | { 22 | private ElementTheme _elementTheme = ThemeSelectorService.Theme; 23 | 24 | public ElementTheme ElementTheme 25 | { 26 | get { return _elementTheme; } 27 | 28 | set { Set(ref _elementTheme, value); } 29 | } 30 | 31 | private string _versionDescription; 32 | 33 | public string VersionDescription 34 | { 35 | get { return _versionDescription; } 36 | 37 | set { Set(ref _versionDescription, value); } 38 | } 39 | 40 | public List<string> accentcolors = new List<string> 41 | { 42 | "Default", 43 | "Blue", 44 | "Seafoam", 45 | "Slate Green", 46 | "Crimson", 47 | "Lilac" 48 | }; 49 | 50 | public SettingsPage() 51 | { 52 | InitializeComponent(); 53 | 54 | this.Background = new SolidColorBrush(Colors.Transparent); 55 | 56 | var LocalSettings = ApplicationData.Current.LocalSettings; 57 | 58 | if ((string)LocalSettings.Values["AccentTheme"] == "Slate Green") 59 | { 60 | AccentBox.SelectedItem = "Slate Green"; 61 | } 62 | if ((string)LocalSettings.Values["AccentTheme"] == "Lilac") 63 | { 64 | AccentBox.SelectedItem = "Lilac"; 65 | } 66 | if ((string)LocalSettings.Values["AccentTheme"] == "Crimson") 67 | { 68 | AccentBox.SelectedItem = "Crimson"; 69 | } 70 | if ((string)LocalSettings.Values["AccentTheme"] == "Seafoam") 71 | { 72 | AccentBox.SelectedItem = "Seafoam"; 73 | } 74 | if ((string)LocalSettings.Values["AccentTheme"] == "Blue") 75 | { 76 | AccentBox.SelectedItem = "Blue"; 77 | } 78 | if ((string)LocalSettings.Values["AccentTheme"] == "Default") 79 | { 80 | AccentBox.SelectedItem = "Default"; 81 | } 82 | 83 | 84 | if ((string)LocalSettings.Values["TextWrapping"] == "No wrap") 85 | { 86 | TextWrapComboBox.SelectedItem = "No wrap"; 87 | } 88 | if ((string)LocalSettings.Values["TextWrapping"] == "Wrap") 89 | { 90 | TextWrapComboBox.SelectedItem = "Wrap"; 91 | } 92 | if ((string)LocalSettings.Values["TextWrapping"] == "Wrap whole words") 93 | { 94 | TextWrapComboBox.SelectedItem = "Wrap whole words"; 95 | } 96 | 97 | 98 | if (LocalSettings.Values["SpellCheck"] != null) 99 | { 100 | if ((string)LocalSettings.Values["SpellCheck"] == "On") 101 | { 102 | spellcheckBox.IsChecked = true; 103 | 104 | } 105 | if ((string)LocalSettings.Values["SpellCheck"] == "Off") 106 | { 107 | spellcheckBox.IsChecked = false; 108 | } 109 | } 110 | else 111 | { 112 | LocalSettings.Values["SpellCheck"] = "Off"; 113 | spellcheckBox.IsChecked = false; 114 | } 115 | } 116 | 117 | protected override async void OnNavigatedTo(NavigationEventArgs e) 118 | { 119 | await InitializeAsync(); 120 | } 121 | 122 | private async Task InitializeAsync() 123 | { 124 | VersionDescription = GetVersionDescription(); 125 | await Task.CompletedTask; 126 | } 127 | 128 | private string GetVersionDescription() 129 | { 130 | var appName = "AppDisplayName".GetLocalized(); 131 | var package = Package.Current; 132 | var packageId = package.Id; 133 | var version = packageId.Version; 134 | 135 | return $"{appName} - {version.Major}.{version.Minor}.{version.Build}.{version.Revision}"; 136 | } 137 | 138 | private async void ThemeChanged_CheckedAsync(object sender, RoutedEventArgs e) 139 | { 140 | var param = (sender as RadioButton)?.CommandParameter; 141 | 142 | if (param != null) 143 | { 144 | await ThemeSelectorService.SetThemeAsync((ElementTheme)param); 145 | } 146 | } 147 | 148 | public event PropertyChangedEventHandler PropertyChanged; 149 | 150 | private void Set<T>(ref T storage, T value, [CallerMemberName]string propertyName = null) 151 | { 152 | if (Equals(storage, value)) 153 | { 154 | return; 155 | } 156 | 157 | storage = value; 158 | OnPropertyChanged(propertyName); 159 | } 160 | 161 | public List<string> Fonts; 162 | 163 | #region Appearance 164 | public int DocumentViewPadding; 165 | 166 | public string DefaultFont; 167 | 168 | // Modes: 169 | // 0. No wrap 170 | // 1. Wrap 171 | // 2. Wrap whole words 172 | 173 | public int TextWrapping; 174 | 175 | // Modes: 176 | // 0. Light 177 | // 1. Dark 178 | // 2. Default 179 | 180 | public int Theme; 181 | #endregion 182 | 183 | private void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 184 | 185 | private async void GH_Navigate(object sender, RoutedEventArgs e) 186 | { 187 | // The URI to launch 188 | string uriToLaunch = @"https://github.com/jpbandroid/UltraTextEdit-UWP"; 189 | 190 | // Create a Uri object from a URI string 191 | var uri = new Uri(uriToLaunch); 192 | 193 | // Launch the URI 194 | async void DefaultLaunch() 195 | { 196 | // Launch the URI 197 | var success = await Windows.System.Launcher.LaunchUriAsync(uri); 198 | 199 | if (success) 200 | { 201 | // URI launched 202 | } 203 | else 204 | { 205 | // URI launch failed 206 | } 207 | } 208 | DefaultLaunch(); 209 | } 210 | 211 | private void VIDsButton_Click(object sender, RoutedEventArgs e) 212 | { 213 | if (Window.Current.Content is Frame rootFrame) 214 | { 215 | rootFrame.Navigate(typeof(VelocityIDsPage)); 216 | } 217 | } 218 | 219 | private void AccentBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 220 | { 221 | var LocalSettings = ApplicationData.Current.LocalSettings; 222 | if (AccentBox.SelectedItem != null) 223 | { 224 | if ((string)AccentBox.SelectedItem == "Default") 225 | { 226 | LocalSettings.Values["AccentTheme"] = "Default"; 227 | } else if ((string)AccentBox.SelectedItem == "Slate Green") 228 | { 229 | LocalSettings.Values["AccentTheme"] = "Slate Green"; 230 | } else if ((string)AccentBox.SelectedItem == "Lilac") 231 | { 232 | LocalSettings.Values["AccentTheme"] = "Lilac"; 233 | } 234 | else if ((string)AccentBox.SelectedItem == "Seafoam") 235 | { 236 | LocalSettings.Values["AccentTheme"] = "Seafoam"; 237 | } 238 | else if ((string)AccentBox.SelectedItem == "Blue") 239 | { 240 | LocalSettings.Values["AccentTheme"] = "Blue"; 241 | } 242 | else if ((string)AccentBox.SelectedItem == "Crimson") 243 | { 244 | LocalSettings.Values["AccentTheme"] = "Crimson"; 245 | } 246 | } 247 | } 248 | 249 | private void spellcheckBox_Checked(object sender, RoutedEventArgs e) 250 | { 251 | var LocalSettings = ApplicationData.Current.LocalSettings; 252 | if (LocalSettings.Values["SpellCheck"] != null) 253 | { 254 | LocalSettings.Values["SpellCheck"] = "On"; 255 | } 256 | } 257 | 258 | private void spellcheckBox_Unchecked(object sender, RoutedEventArgs e) 259 | { 260 | var LocalSettings = ApplicationData.Current.LocalSettings; 261 | if (LocalSettings.Values["SpellCheck"] != null) 262 | { 263 | LocalSettings.Values["SpellCheck"] = "Off"; 264 | } 265 | } 266 | 267 | private void TextWrapComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 268 | { 269 | var LocalSettings = ApplicationData.Current.LocalSettings; 270 | if (TextWrapComboBox.SelectedItem != null) { 271 | if (LocalSettings.Values["TextWrapping"] != null) 272 | { 273 | LocalSettings.Values["TextWrapping"] = TextWrapComboBox.SelectedItem.ToString(); 274 | } else 275 | { 276 | LocalSettings.Values["TextWrapping"] = "Wrap"; 277 | } 278 | } 279 | } 280 | 281 | private void LocalizationContrib_Navigate(object sender, RoutedEventArgs e) 282 | { 283 | // The URI to launch 284 | string uriToLaunch = @"https://crowdin.com/project/ultratextedit-uwp"; 285 | 286 | // Create a Uri object from a URI string 287 | var uri = new Uri(uriToLaunch); 288 | 289 | // Launch the URI 290 | async void DefaultLaunch() 291 | { 292 | // Launch the URI 293 | var success = await Windows.System.Launcher.LaunchUriAsync(uri); 294 | 295 | if (success) 296 | { 297 | // URI launched 298 | } 299 | else 300 | { 301 | // URI launch failed 302 | } 303 | } 304 | DefaultLaunch(); 305 | } 306 | 307 | public void UpdateButton_Click(object sender, RoutedEventArgs e) 308 | { 309 | UTEUpdateLauncher updateLauncher = new UTEUpdateLauncher(); 310 | updateLauncher.LaunchUTEUpdate(); 311 | } 312 | } 313 | } 314 | -------------------------------------------------------------------------------- /UTE UWP+/UTE UWP+.csproj: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 3 | <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> 4 | <PropertyGroup> 5 | <LangVersion>9.0</LangVersion> 6 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 7 | <Platform Condition=" '$(Platform)' == '' ">x86</Platform> 8 | <ProjectGuid>{73B4987B-140D-4D2E-92C6-EA7A290D146C}</ProjectGuid> 9 | <OutputType>AppContainerExe</OutputType> 10 | <AppDesignerFolder>Properties</AppDesignerFolder> 11 | <RootNamespace>UTE_UWP_</RootNamespace> 12 | <AssemblyName>UTE_UWP_</AssemblyName> 13 | <DefaultLanguage>en-US</DefaultLanguage> 14 | <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier> 15 | <TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.26100.0</TargetPlatformVersion> 16 | <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion> 17 | <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion> 18 | <FileAlignment>512</FileAlignment> 19 | <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> 20 | <WindowsXamlEnableOverview>true</WindowsXamlEnableOverview> 21 | <PackageCertificateKeyFile> 22 | </PackageCertificateKeyFile> 23 | <GenerateAppInstallerFile>False</GenerateAppInstallerFile> 24 | <PackageCertificateThumbprint>C211B2ED7E44682F953BB3FADD3225F23E30558E</PackageCertificateThumbprint> 25 | <AppxPackageSigningTimestampDigestAlgorithm>SHA256</AppxPackageSigningTimestampDigestAlgorithm> 26 | <AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision> 27 | <GenerateTestArtifacts>True</GenerateTestArtifacts> 28 | <AppxBundle>Always</AppxBundle> 29 | <AppxBundlePlatforms>x86|x64|arm64</AppxBundlePlatforms> 30 | <HoursBetweenUpdateChecks>0</HoursBetweenUpdateChecks> 31 | <AppxPackageSigningEnabled>True</AppxPackageSigningEnabled> 32 | </PropertyGroup> 33 | <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> 34 | <DebugSymbols>true</DebugSymbols> 35 | <OutputPath>bin\x86\Debug\</OutputPath> 36 | <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN</DefineConstants> 37 | <NoWarn>;2008</NoWarn> 38 | <DebugType>full</DebugType> 39 | <PlatformTarget>x86</PlatformTarget> 40 | <UseVSHostingProcess>false</UseVSHostingProcess> 41 | <ErrorReport>prompt</ErrorReport> 42 | <Prefer32Bit>true</Prefer32Bit> 43 | </PropertyGroup> 44 | <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> 45 | <OutputPath>bin\x86\Release\</OutputPath> 46 | <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN</DefineConstants> 47 | <Optimize>true</Optimize> 48 | <NoWarn>;2008</NoWarn> 49 | <DebugType>pdbonly</DebugType> 50 | <PlatformTarget>x86</PlatformTarget> 51 | <UseVSHostingProcess>false</UseVSHostingProcess> 52 | <ErrorReport>prompt</ErrorReport> 53 | <Prefer32Bit>true</Prefer32Bit> 54 | <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain> 55 | </PropertyGroup> 56 | <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'"> 57 | <DebugSymbols>true</DebugSymbols> 58 | <OutputPath>bin\ARM\Debug\</OutputPath> 59 | <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN</DefineConstants> 60 | <NoWarn>;2008</NoWarn> 61 | <DebugType>full</DebugType> 62 | <PlatformTarget>ARM</PlatformTarget> 63 | <UseVSHostingProcess>false</UseVSHostingProcess> 64 | <ErrorReport>prompt</ErrorReport> 65 | <Prefer32Bit>true</Prefer32Bit> 66 | </PropertyGroup> 67 | <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'"> 68 | <OutputPath>bin\ARM\Release\</OutputPath> 69 | <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN</DefineConstants> 70 | <Optimize>true</Optimize> 71 | <NoWarn>;2008</NoWarn> 72 | <DebugType>pdbonly</DebugType> 73 | <PlatformTarget>ARM</PlatformTarget> 74 | <UseVSHostingProcess>false</UseVSHostingProcess> 75 | <ErrorReport>prompt</ErrorReport> 76 | <Prefer32Bit>true</Prefer32Bit> 77 | <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain> 78 | </PropertyGroup> 79 | <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM64'"> 80 | <DebugSymbols>true</DebugSymbols> 81 | <OutputPath>bin\ARM64\Debug\</OutputPath> 82 | <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN</DefineConstants> 83 | <NoWarn>;2008</NoWarn> 84 | <DebugType>full</DebugType> 85 | <PlatformTarget>ARM64</PlatformTarget> 86 | <UseVSHostingProcess>false</UseVSHostingProcess> 87 | <ErrorReport>prompt</ErrorReport> 88 | <Prefer32Bit>true</Prefer32Bit> 89 | <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain> 90 | </PropertyGroup> 91 | <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM64'"> 92 | <OutputPath>bin\ARM64\Release\</OutputPath> 93 | <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN</DefineConstants> 94 | <Optimize>true</Optimize> 95 | <NoWarn>;2008</NoWarn> 96 | <DebugType>pdbonly</DebugType> 97 | <PlatformTarget>ARM64</PlatformTarget> 98 | <UseVSHostingProcess>false</UseVSHostingProcess> 99 | <ErrorReport>prompt</ErrorReport> 100 | <Prefer32Bit>true</Prefer32Bit> 101 | <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain> 102 | </PropertyGroup> 103 | <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'"> 104 | <DebugSymbols>true</DebugSymbols> 105 | <OutputPath>bin\x64\Debug\</OutputPath> 106 | <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN</DefineConstants> 107 | <NoWarn>;2008</NoWarn> 108 | <DebugType>full</DebugType> 109 | <PlatformTarget>x64</PlatformTarget> 110 | <UseVSHostingProcess>false</UseVSHostingProcess> 111 | <ErrorReport>prompt</ErrorReport> 112 | <Prefer32Bit>true</Prefer32Bit> 113 | </PropertyGroup> 114 | <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'"> 115 | <OutputPath>bin\x64\Release\</OutputPath> 116 | <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN</DefineConstants> 117 | <Optimize>true</Optimize> 118 | <NoWarn>;2008</NoWarn> 119 | <DebugType>pdbonly</DebugType> 120 | <PlatformTarget>x64</PlatformTarget> 121 | <UseVSHostingProcess>false</UseVSHostingProcess> 122 | <ErrorReport>prompt</ErrorReport> 123 | <Prefer32Bit>true</Prefer32Bit> 124 | <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain> 125 | </PropertyGroup> 126 | <PropertyGroup> 127 | <RestoreProjectStyle>PackageReference</RestoreProjectStyle> 128 | </PropertyGroup> 129 | <ItemGroup> 130 | <PackageReference Include="AdaptiveCards"> 131 | <Version>3.1.0</Version> 132 | </PackageReference> 133 | <PackageReference Include="CommunityToolkit.Common"> 134 | <Version>8.4.0</Version> 135 | </PackageReference> 136 | <PackageReference Include="CommunityToolkit.Labs.Uwp.Ribbon"> 137 | <Version>0.1.250305-build.2058</Version> 138 | </PackageReference> 139 | <PackageReference Include="CommunityToolkit.Uwp.Controls.Segmented"> 140 | <Version>8.2.250129-preview2</Version> 141 | </PackageReference> 142 | <PackageReference Include="CommunityToolkit.Uwp.Controls.SettingsControls"> 143 | <Version>8.2.250129-preview2</Version> 144 | </PackageReference> 145 | <PackageReference Include="Markdig"> 146 | <Version>0.40.0</Version> 147 | </PackageReference> 148 | <PackageReference Include="MicaForUWP"> 149 | <Version>0.2.12</Version> 150 | </PackageReference> 151 | <PackageReference Include="Microsoft.Bcl.AsyncInterfaces"> 152 | <Version>10.0.0-preview.1.25080.5</Version> 153 | </PackageReference> 154 | <PackageReference Include="Microsoft.NETCore.Platforms"> 155 | <Version>8.0.0-preview.7.23375.6</Version> 156 | </PackageReference> 157 | <PackageReference Include="Microsoft.NETCore.Targets"> 158 | <Version>6.0.0-preview.4.21253.7</Version> 159 | </PackageReference> 160 | <PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform"> 161 | <Version>6.2.14</Version> 162 | </PackageReference> 163 | <PackageReference Include="Microsoft.Toolkit.Uwp"> 164 | <Version>7.1.3</Version> 165 | </PackageReference> 166 | <PackageReference Include="Microsoft.Toolkit.Uwp.Notifications"> 167 | <Version>7.1.3</Version> 168 | </PackageReference> 169 | <PackageReference Include="Microsoft.Toolkit.Uwp.UI.Controls"> 170 | <Version>7.1.3</Version> 171 | </PackageReference> 172 | <PackageReference Include="Microsoft.UI.Xaml"> 173 | <Version>2.8.7</Version> 174 | </PackageReference> 175 | <PackageReference Include="Microsoft.Xaml.Behaviors.Uwp.Managed"> 176 | <Version>3.0.0</Version> 177 | </PackageReference> 178 | </ItemGroup> 179 | <ItemGroup> 180 | <PRIResource Include="Strings\en-us\Resources.resw"> 181 | <SubType>Designer</SubType> 182 | </PRIResource> 183 | </ItemGroup> 184 | <ItemGroup> 185 | <Compile Include="Activation\ActivationHandler.cs" /> 186 | <Compile Include="Activation\CommandLineActivationHandler.cs" /> 187 | <Compile Include="Helpers\BuildInfo.cs" /> 188 | <Compile Include="Helpers\EncryptorsDecryptors.cs" /> 189 | <Compile Include="Helpers\EnumToBooleanConverter.cs" /> 190 | <Compile Include="Helpers\SettingsHelper.cs" /> 191 | <Compile Include="Helpers\SettingsStorageExtensions.cs" /> 192 | <Compile Include="Helpers\UTEUpdateLauncher.cs" /> 193 | <Compile Include="Program.cs" /> 194 | <Compile Include="Services\ActivationService.cs" /> 195 | <Compile Include="Activation\DefaultActivationHandler.cs" /> 196 | <Compile Include="Services\FirstRunDisplayService.cs" /> 197 | <Compile Include="Services\NavigationService.cs" /> 198 | <Compile Include="Services\ThemeSelectorService.cs" /> 199 | <Compile Include="Services\ToastNotificationsService.cs" /> 200 | <Compile Include="Services\ToastNotificationsService.Samples.cs" /> 201 | <Compile Include="Services\WhatsNewDisplayService.cs" /> 202 | <Compile Include="Views\AboutUTE.xaml.cs"> 203 | <DependentUpon>AboutUTE.xaml</DependentUpon> 204 | </Compile> 205 | <Compile Include="Views\ComputeHash.xaml.cs"> 206 | <DependentUpon>ComputeHash.xaml</DependentUpon> 207 | </Compile> 208 | <Compile Include="Views\FirstRunDialog.xaml.cs"> 209 | <DependentUpon>FirstRunDialog.xaml</DependentUpon> 210 | </Compile> 211 | <Compile Include="Views\HelpPage.xaml.cs"> 212 | <DependentUpon>HelpPage.xaml</DependentUpon> 213 | </Compile> 214 | <Compile Include="Views\ImageOptionsDialog.xaml.cs" /> 215 | <Compile Include="Views\MainPage.xaml.cs"> 216 | <DependentUpon>MainPage.xaml</DependentUpon> 217 | </Compile> 218 | <Compile Include="Views\SettingsPage.xaml.cs"> 219 | <DependentUpon>SettingsPage.xaml</DependentUpon> 220 | </Compile> 221 | <Compile Include="Views\SettingsPageContainer.xaml.cs"> 222 | <DependentUpon>SettingsPageContainer.xaml</DependentUpon> 223 | </Compile> 224 | <Compile Include="Views\TableDialog.xaml.cs" /> 225 | <Compile Include="Views\UTEUpdate.xaml.cs"> 226 | <DependentUpon>UTEUpdate.xaml</DependentUpon> 227 | </Compile> 228 | <Compile Include="Views\VelocityIDsPage.xaml.cs"> 229 | <DependentUpon>VelocityIDsPage.xaml</DependentUpon> 230 | </Compile> 231 | <Compile Include="Views\ViewModel.cs" /> 232 | <Compile Include="Views\WhatsNewDialog.xaml.cs"> 233 | <DependentUpon>WhatsNewDialog.xaml</DependentUpon> 234 | </Compile> 235 | </ItemGroup> 236 | <ItemGroup> 237 | <Compile Include="App.xaml.cs"> 238 | <DependentUpon>App.xaml</DependentUpon> 239 | </Compile> 240 | <Compile Include="Properties\AssemblyInfo.cs" /> 241 | </ItemGroup> 242 | <ItemGroup> 243 | <Page Include="Styles\Page.xaml"> 244 | <Generator>MSBuild:Compile</Generator> 245 | <SubType>Designer</SubType> 246 | </Page> 247 | <Page Include="Styles\_Colors.xaml"> 248 | <SubType>Designer</SubType> 249 | <Generator>MSBuild:Compile</Generator> 250 | </Page> 251 | <Page Include="Styles\_FontSizes.xaml"> 252 | <SubType>Designer</SubType> 253 | <Generator>MSBuild:Compile</Generator> 254 | </Page> 255 | <Page Include="Styles\_Thickness.xaml"> 256 | <SubType>Designer</SubType> 257 | <Generator>MSBuild:Compile</Generator> 258 | </Page> 259 | <Page Include="Styles\TextBlock.xaml"> 260 | <SubType>Designer</SubType> 261 | <Generator>MSBuild:Compile</Generator> 262 | </Page> 263 | <Page Include="Views\AboutUTE.xaml"> 264 | <SubType>Designer</SubType> 265 | <Generator>MSBuild:Compile</Generator> 266 | </Page> 267 | <Page Include="Views\ComputeHash.xaml"> 268 | <SubType>Designer</SubType> 269 | <Generator>MSBuild:Compile</Generator> 270 | </Page> 271 | <Page Include="Views\FirstRunDialog.xaml"> 272 | <Generator>MSBuild:Compile</Generator> 273 | <SubType>Designer</SubType> 274 | </Page> 275 | <Page Include="Views\HelpPage.xaml"> 276 | <SubType>Designer</SubType> 277 | <Generator>MSBuild:Compile</Generator> 278 | </Page> 279 | <Page Include="Views\ImageOptionsDialog.xaml"> 280 | <Generator>MSBuild:Compile</Generator> 281 | <SubType>Designer</SubType> 282 | </Page> 283 | <Page Include="Views\MainPage.xaml"> 284 | <Generator>MSBuild:Compile</Generator> 285 | <SubType>Designer</SubType> 286 | </Page> 287 | <Page Include="Views\SettingsPage.xaml"> 288 | <Generator>MSBuild:Compile</Generator> 289 | <SubType>Designer</SubType> 290 | </Page> 291 | <Page Include="Views\SettingsPageContainer.xaml"> 292 | <SubType>Designer</SubType> 293 | <Generator>MSBuild:Compile</Generator> 294 | </Page> 295 | <Page Include="Views\TableDialog.xaml"> 296 | <Generator>MSBuild:Compile</Generator> 297 | <SubType>Designer</SubType> 298 | </Page> 299 | <Page Include="Views\UTEUpdate.xaml"> 300 | <SubType>Designer</SubType> 301 | <Generator>MSBuild:Compile</Generator> 302 | </Page> 303 | <Page Include="Views\VelocityIDsPage.xaml"> 304 | <SubType>Designer</SubType> 305 | <Generator>MSBuild:Compile</Generator> 306 | </Page> 307 | <Page Include="Views\WhatsNewDialog.xaml"> 308 | <Generator>MSBuild:Compile</Generator> 309 | <SubType>Designer</SubType> 310 | </Page> 311 | </ItemGroup> 312 | <ItemGroup> 313 | <AppxManifest Include="Package.appxmanifest"> 314 | <SubType>Designer</SubType> 315 | </AppxManifest> 316 | </ItemGroup> 317 | <ItemGroup> 318 | <Compile Include="Helpers\ResourceExtensions.cs" /> 319 | </ItemGroup> 320 | <ItemGroup> 321 | <Content Include="Assets\Changelog.png" /> 322 | <Content Include="Assets\Check.png" /> 323 | <Content Include="Assets\Console.png" /> 324 | <Content Include="Assets\Copy.png" /> 325 | <Content Include="Assets\Cut.png" /> 326 | <Content Include="Assets\Delete.png" /> 327 | <Content Include="Assets\Error.png" /> 328 | <Content Include="Assets\Home.png" /> 329 | <Content Include="Assets\Info.png" /> 330 | <Content Include="Assets\LargeTile.scale-100.png" /> 331 | <Content Include="Assets\LargeTile.scale-125.png" /> 332 | <Content Include="Assets\LargeTile.scale-150.png" /> 333 | <Content Include="Assets\LargeTile.scale-200.png" /> 334 | <Content Include="Assets\LargeTile.scale-400.png" /> 335 | <Content Include="Assets\Logo.png" /> 336 | <Content Include="Assets\OpenFile.png" /> 337 | <Content Include="Assets\Paste.png" /> 338 | <Content Include="Assets\Print.png" /> 339 | <Content Include="Assets\ProfilePictures\Ivirius.png" /> 340 | <Content Include="Assets\ProfilePictures\ErrorTek.png" /> 341 | <Content Include="Assets\Question.png" /> 342 | <Content Include="Assets\Save.png" /> 343 | <Content Include="Assets\SmallTile.scale-100.png" /> 344 | <Content Include="Assets\SmallTile.scale-125.png" /> 345 | <Content Include="Assets\SmallTile.scale-150.png" /> 346 | <Content Include="Assets\SmallTile.scale-200.png" /> 347 | <Content Include="Assets\SmallTile.scale-400.png" /> 348 | <Content Include="Assets\SplashScreen.scale-100.png" /> 349 | <Content Include="Assets\SplashScreen.scale-125.png" /> 350 | <Content Include="Assets\SplashScreen.scale-150.png" /> 351 | <Content Include="Assets\SplashScreen.scale-400.png" /> 352 | <Content Include="Assets\Square150x150Logo.scale-100.png" /> 353 | <Content Include="Assets\Square150x150Logo.scale-125.png" /> 354 | <Content Include="Assets\Square150x150Logo.scale-150.png" /> 355 | <Content Include="Assets\Square150x150Logo.scale-400.png" /> 356 | <Content Include="Assets\Square44x44Logo.altform-lightunplated_targetsize-16.png" /> 357 | <Content Include="Assets\Square44x44Logo.altform-lightunplated_targetsize-24.png" /> 358 | <Content Include="Assets\Square44x44Logo.altform-lightunplated_targetsize-256.png" /> 359 | <Content Include="Assets\Square44x44Logo.altform-lightunplated_targetsize-32.png" /> 360 | <Content Include="Assets\Square44x44Logo.altform-lightunplated_targetsize-48.png" /> 361 | <Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-16.png" /> 362 | <Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-256.png" /> 363 | <Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-32.png" /> 364 | <Content Include="Assets\Square44x44Logo.altform-unplated_targetsize-48.png" /> 365 | <Content Include="Assets\Square44x44Logo.scale-100.png" /> 366 | <Content Include="Assets\Square44x44Logo.scale-125.png" /> 367 | <Content Include="Assets\Square44x44Logo.scale-150.png" /> 368 | <Content Include="Assets\Square44x44Logo.scale-400.png" /> 369 | <Content Include="Assets\Square44x44Logo.targetsize-16.png" /> 370 | <Content Include="Assets\Square44x44Logo.targetsize-24.png" /> 371 | <Content Include="Assets\Square44x44Logo.targetsize-256.png" /> 372 | <Content Include="Assets\Square44x44Logo.targetsize-32.png" /> 373 | <Content Include="Assets\Square44x44Logo.targetsize-48.png" /> 374 | <Content Include="Assets\StoreLogo.scale-100.png" /> 375 | <Content Include="Assets\StoreLogo.scale-125.png" /> 376 | <Content Include="Assets\StoreLogo.scale-150.png" /> 377 | <Content Include="Assets\StoreLogo.scale-200.png" /> 378 | <Content Include="Assets\StoreLogo.scale-400.png" /> 379 | <Content Include="Assets\UTEUpdate\Version.txt" /> 380 | <Content Include="Assets\utevericon.png" /> 381 | <Content Include="Assets\Warning.png" /> 382 | <Content Include="Assets\Wide310x150Logo.scale-100.png" /> 383 | <Content Include="Assets\Wide310x150Logo.scale-125.png" /> 384 | <Content Include="Assets\Wide310x150Logo.scale-150.png" /> 385 | <Content Include="Assets\Wide310x150Logo.scale-400.png" /> 386 | <Content Include="Properties\Default.rd.xml" /> 387 | <Content Include="Assets\LockScreenLogo.scale-200.png" /> 388 | <Content Include="Assets\SplashScreen.scale-200.png" /> 389 | <Content Include="Assets\Square150x150Logo.scale-200.png" /> 390 | <Content Include="Assets\Square44x44Logo.scale-200.png" /> 391 | <Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" /> 392 | <Content Include="Assets\Wide310x150Logo.scale-200.png" /> 393 | </ItemGroup> 394 | <ItemGroup> 395 | <None Include=".editorconfig" /> 396 | <Content Include="Assets\Changelogs\Latest.md"> 397 | <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 398 | </Content> 399 | <Content Include="Assets\Templates\CalendarTemplate.rtf"> 400 | <CopyToOutputDirectory>Always</CopyToOutputDirectory> 401 | </Content> 402 | <Content Include="Assets\Templates\ImageArticleTemplate.rtf"> 403 | <CopyToOutputDirectory>Always</CopyToOutputDirectory> 404 | </Content> 405 | <Content Include="Assets\Templates\SongLyricsTemplate.rtf"> 406 | <CopyToOutputDirectory>Always</CopyToOutputDirectory> 407 | </Content> 408 | <None Include="jpbAppCert24.pfx" /> 409 | <None Include="README.md" /> 410 | <PRIResource Include="Strings\el-GR\Resources.resw" /> 411 | <PRIResource Include="Strings\af-ZA\Resources.resw" /> 412 | <PRIResource Include="Strings\ar-SA\Resources.resw" /> 413 | <PRIResource Include="Strings\ca-ES\Resources.resw" /> 414 | <PRIResource Include="Strings\cs-CZ\Resources.resw" /> 415 | <PRIResource Include="Strings\da-DK\Resources.resw" /> 416 | <PRIResource Include="Strings\de-DE\Resources.resw" /> 417 | <PRIResource Include="Strings\es-ES\Resources.resw" /> 418 | <PRIResource Include="Strings\fi-FI\Resources.resw" /> 419 | <PRIResource Include="Strings\fr-FR\Resources.resw" /> 420 | <PRIResource Include="Strings\he-IL\Resources.resw" /> 421 | <PRIResource Include="Strings\hu-HU\Resources.resw" /> 422 | <PRIResource Include="Strings\it-IT\Resources.resw" /> 423 | <PRIResource Include="Strings\ja-JP\Resources.resw" /> 424 | <PRIResource Include="Strings\ko-KR\Resources.resw" /> 425 | <PRIResource Include="Strings\nl-NL\Resources.resw" /> 426 | <PRIResource Include="Strings\no-NO\Resources.resw" /> 427 | <PRIResource Include="Strings\pl-PL\Resources.resw" /> 428 | <PRIResource Include="Strings\pt-BR\Resources.resw" /> 429 | <PRIResource Include="Strings\pt-PT\Resources.resw" /> 430 | <PRIResource Include="Strings\ro-RO\Resources.resw" /> 431 | <PRIResource Include="Strings\ru-RU\Resources.resw" /> 432 | <PRIResource Include="Strings\sr-SP\Resources.resw" /> 433 | <PRIResource Include="Strings\sv-SE\Resources.resw" /> 434 | <PRIResource Include="Strings\tr-TR\Resources.resw" /> 435 | <PRIResource Include="Strings\uk-UA\Resources.resw" /> 436 | <PRIResource Include="Strings\vi-VN\Resources.resw" /> 437 | <PRIResource Include="Strings\zh-CN\Resources.resw" /> 438 | <PRIResource Include="Strings\zh-TW\Resources.resw" /> 439 | <None Include="UTE UWP+_TemporaryKey.pfx" /> 440 | </ItemGroup> 441 | <ItemGroup> 442 | <ApplicationDefinition Include="App.xaml"> 443 | <Generator>MSBuild:Compile</Generator> 444 | <SubType>Designer</SubType> 445 | </ApplicationDefinition> 446 | </ItemGroup> 447 | <ItemGroup> 448 | <ProjectReference Include="..\UTE UWP+.Core\UTE UWP+.Core.csproj"> 449 | <Project>{19C9189B-7CEE-43BD-8E96-DA3CADB91BC0}</Project> 450 | <Name>UTE UWP+.Core</Name> 451 | </ProjectReference> 452 | </ItemGroup> 453 | <ItemGroup /> 454 | <PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' < '14.0' "> 455 | <VisualStudioVersion>14.0</VisualStudioVersion> 456 | </PropertyGroup> 457 | <Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" /> 458 | <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 459 | Other similar extension points exist, see Microsoft.Common.targets. 460 | <Target Name="BeforeBuild"> 461 | </Target> 462 | <Target Name="AfterBuild"> 463 | </Target> 464 | --> 465 | </Project> --------------------------------------------------------------------------------