Skip to content

Commit

Permalink
Initial GUI Localization Support (#508)
Browse files Browse the repository at this point in the history
* Initial gui localization support, fix some namespaces

* Add some missing localization strings, cleanup

* Complete initial GUI localization support

* Improve GUI translation compatibility and window resizability

* Add initial French translation

* Fix duplicate settings in app.config

* Add missing translation

* Add note for translators, don't require restart to apply language

* Correct comment

* Update translations

* Fix and add some translations, update translator note

* Add chat compression to localization files

* Update translations and translation keys

* Rename InfoHelper to ThumbnailService

* Higher resolution peeposad

* Fix vod creation date & codec alpha detection

* Rename HandyControl boolean key

* Update translations

* Add WPF README

* Create Strings.tr.resx

* Update AvailableCultures.cs

* Update TwitchDownloaderWPF.csproj

* Update Strings.tr.resx

* Formatting

* Update README

* Update README

* Fix some translations not showing in UI, add wrapping to some elements

* Rework PageQueue.xaml, reduce top padding on all pages, add text wrapping to page buttons

* Update translations

* Typos

* Detect when a theme file fails to write

* Setup unhandled exception listeners before anything else

* Rename SettingsPage to WindowSettings

* Add window title localization

* Update Strings.tr.resx

* Update Strings.tr.resx (#4)

* Update Strings.tr.resx

* Remove empty comments from Strings.tr.resx

* Update Strings.tr.resx

* Update Strings.fr.resx

* Update README

* Add localization tooltip to settings window, fix some text width issues, update translations

* Update translations

* Add AppTextDisabled and AppInnerTextDisabled theme keys

* Adjust page button padding

* Add chat compression to window queue options

* Update translations

* Use translations

* Update Strings.tr.resx

* Update Strings.tr.resx

* Update Strings.tr.resx

* Update Strings.tr.resx

* Update translations

* Update Strings.tr.resx

* Add translations

* Thanks Rider

* Update README, reduce image file sizes

* Revert settings icon

* Update Strings.tr.resx

* Fix missing return statement after merge, clean up urlTimecodeRegex

---------

Co-authored-by: Teknoist <[email protected]>
  • Loading branch information
ScrubN and Teknoist authored Mar 4, 2023
1 parent f9ccf5d commit 9486967
Show file tree
Hide file tree
Showing 81 changed files with 5,285 additions and 873 deletions.
20 changes: 15 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,33 +17,43 @@


## Chat Render Example

https://user-images.githubusercontent.com/1060681/197653099-c3fd12c2-f03a-4580-84e4-63ce3f36be8d.mp4


## What can it do?

- Download Twitch VODs
- Download Twitch Clips
- Download chat for VODS and Clips, in either a [JSON with all the original information](https://pastebin.com/raw/YDgRe6X4), a browser HTML file, or a [plain text file](https://pastebin.com/raw/016azeQX)
- Download chat for VODs and Clips, in either a [JSON with all the original information](https://pastebin.com/raw/YDgRe6X4), a browser HTML file, or a [plain text file](https://pastebin.com/raw/016azeQX)
- Update the contents of a previously generated JSON chat file with an option to save as another format
- Use a previously generated JSON chat file to render the chat with Twemoji emojis and BTTV, FFZ, 7TV static and animated emotes

# GUI

## Windows
## Windows WPF

![](https://i.imgur.com/bLegxGX.gif)

### [See the full WPF documentation here](TwitchDownloaderWPF/README.md).

### Functionality

The Windows GUI implements all of the main functions of the program along with some extra quality of life functions:
The Windows WPF GUI implements all of the main functions of the program along with some extra quality of life functions:
- Queue up multiple download/render jobs to run simultaneously
- Create a list of download jobs from a list of vod/clip links
- Search for and download multiple vods/clips from any streamer without leaving the app
- Search for and download multiple VODs/clips from any streamer without leaving the app

### Multi-language Support

The Windows WPF GUI is available in multiple languages thanks to community translations. See the [Localization section](TwitchDownloaderWPF/README.md#localization) of the [WPF README](TwitchDownloaderWPF/README.md) for more details.

### Theming
The Windows GUI comes with a light and dark theme and will update according the current Windows theme by default. The GUI also supports user created themes! See `Themes/README.txt` (generated on every run) for more details.

The Windows WPF GUI comes bundled with both light and dark themes, along with an option to update live according the current Windows theme. It also supports user created themes! See the [Theming section](TwitchDownloaderWPF/README.md#theming) of the [WPF README](TwitchDownloaderWPF/README.md) for more details.

### Video Demonstration

https://www.youtube.com/watch?v=0W3MhfhnYjk
(older version, same concept)

Expand Down
2 changes: 1 addition & 1 deletion TwitchDownloaderCLI/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ Extra example, if I wanted only seconds 3-6 in a 10 second stream I would do `-b
(Default: 2048) The maximum bandwidth a thread will be allowed to use in kilobytes per second (KB/s).

**--oauth**
OAuth access token to download subscriber only VODs. <u>**DO NOT SHARE YOUR OAUTH WITH ANYONE.**</u>
OAuth access token to download subscriber only VODs. <ins>**DO NOT SHARE YOUR OUATH TOKEN WITH ANYONE.**</ins>

**--ffmpeg-path**
Path to ffmpeg executable.
Expand Down
2 changes: 1 addition & 1 deletion TwitchDownloaderWPF.sln
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TwitchDownloader", "TwitchDownloaderWPF\TwitchDownloader.csproj", "{A5940F4D-027D-4F9E-9F65-C0D842807BE1}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TwitchDownloaderWPF", "TwitchDownloaderWPF\TwitchDownloaderWPF.csproj", "{A5940F4D-027D-4F9E-9F65-C0D842807BE1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TwitchDownloaderCore", "TwitchDownloaderCore\TwitchDownloaderCore.csproj", "{3984E19D-EAA0-4D85-95CF-88DCD0D9316B}"
EndProject
Expand Down
9 changes: 6 additions & 3 deletions TwitchDownloaderWPF/App.config
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="TwitchDownloader.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="TwitchDownloaderWPF.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
Expand All @@ -25,7 +25,7 @@
</assemblyBinding>
</runtime>
<userSettings>
<TwitchDownloader.Properties.Settings>
<TwitchDownloaderWPF.Properties.Settings>
<setting name="VodDownloadThreads" serializeAs="String">
<value>4</value>
</setting>
Expand Down Expand Up @@ -206,12 +206,15 @@
<setting name="DisperseCommentOffsets" serializeAs="String">
<value>False</value>
</setting>
<setting name="GuiCulture" serializeAs="String">
<value>en-US</value>
</setting>
<setting name="MaximumBandwidthKb" serializeAs="String">
<value>2048</value>
</setting>
<setting name="ChatRenderSharpening" serializeAs="String">
<value>False</value>
</setting>
</TwitchDownloader.Properties.Settings>
</TwitchDownloaderWPF.Properties.Settings>
</userSettings>
</configuration>
70 changes: 36 additions & 34 deletions TwitchDownloaderWPF/App.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,40 +3,42 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TwitchDownloaderWPF"
xmlns:hc="https://handyorg.github.io/handycontrol">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/>
<ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/>
<!-- Top dictionaries MUST be HandyControl, other merged dictionaries below -->
</ResourceDictionary.MergedDictionaries>
<SolidColorBrush x:Key="AppBackground" Color="#FFFFFF"/>
<SolidColorBrush x:Key="AppElementBackground" Color="#FFFFFF"/>
<SolidColorBrush x:Key="AppElementBorder" Color="#E0E0E0"/>
<SolidColorBrush x:Key="AppText" Color="#212121"/>
<SolidColorBrush x:Key="AppElementInnerBackground" Color="#D1D1D1"/>
<SolidColorBrush x:Key="AppElementInnerBorder" Color="#BABABA"/>
<SolidColorBrush x:Key="AppInnerText" Color="#212121"/>
<SolidColorBrush x:Key="AppHyperlink" Color="#0066CC"/>
<SolidColorBrush x:Key="AppCheckBox" Color="#3A96F2"/>
<SolidColorBrush x:Key="AppRadio" Color="#2388ED"/>
<SolidColorBrush x:Key="AppDivider" Color="#E0E0E0"/>
<SolidColorBrush x:Key="AppDividerText" Color="#212121"/>
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml" />
<ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml" />
<!-- Top dictionaries MUST be HandyControl, other merged dictionaries below -->
</ResourceDictionary.MergedDictionaries>
<SolidColorBrush x:Key="AppBackground" Color="#FFFFFF" />
<SolidColorBrush x:Key="AppElementBackground" Color="#FFFFFF" />
<SolidColorBrush x:Key="AppElementBorder" Color="#E0E0E0" />
<SolidColorBrush x:Key="AppText" Color="#212121" />
<SolidColorBrush x:Key="AppTextDisabled" Color="#A6A6A6" />
<SolidColorBrush x:Key="AppElementInnerBackground" Color="#D1D1D1" />
<SolidColorBrush x:Key="AppElementInnerBorder" Color="#BABABA" />
<SolidColorBrush x:Key="AppInnerText" Color="#212121" />
<SolidColorBrush x:Key="AppInnerTextDisabled" Color="#A6A6A6" />
<SolidColorBrush x:Key="AppHyperlink" Color="#0066CC" />
<SolidColorBrush x:Key="AppCheckBox" Color="#3A96F2" />
<SolidColorBrush x:Key="AppRadio" Color="#2388ED" />
<SolidColorBrush x:Key="AppDivider" Color="#E0E0E0" />
<SolidColorBrush x:Key="AppDividerText" Color="#212121" />

<SolidColorBrush x:Key="BigButtonBackground" Color="#326CF3"/>
<SolidColorBrush x:Key="BigButtonBorder" Color="#326CF3"/>
<SolidColorBrush x:Key="BigButtonText" Color="#FFFFFF"/>
<SolidColorBrush x:Key="BigButtonBackground" Color="#326CF3" />
<SolidColorBrush x:Key="BigButtonBorder" Color="#326CF3" />
<SolidColorBrush x:Key="BigButtonText" Color="#FFFFFF" />

<SolidColorBrush x:Key="ActionButtonBackground" Color="#00BCD4"/>
<SolidColorBrush x:Key="ActionButtonBorder" Color="#E0E0E0"/>
<SolidColorBrush x:Key="ActionButtonText" Color="#FFFFFF"/>
<SolidColorBrush x:Key="ActionButtonBackground" Color="#00BCD4" />
<SolidColorBrush x:Key="ActionButtonBorder" Color="#E0E0E0" />
<SolidColorBrush x:Key="ActionButtonText" Color="#FFFFFF" />

<SolidColorBrush x:Key="StatusBarBackground" Color="#FFFFFF"/>
<SolidColorBrush x:Key="StatusBarBorder" Color="#E0E0E0"/>
<SolidColorBrush x:Key="StatusBarElement" Color="#EEEEEE"/>
<SolidColorBrush x:Key="StatusBarElementBorder" Color="#E0E0E0"/>
<SolidColorBrush x:Key="StatusBarText" Color="#212121"/>
<SolidColorBrush x:Key="ProgressBarForeground" Color="#326CF3"/>
</ResourceDictionary>
</Application.Resources>
</Application>
<SolidColorBrush x:Key="StatusBarBackground" Color="#FFFFFF" />
<SolidColorBrush x:Key="StatusBarBorder" Color="#E0E0E0" />
<SolidColorBrush x:Key="StatusBarElement" Color="#EEEEEE" />
<SolidColorBrush x:Key="StatusBarElementBorder" Color="#E0E0E0" />
<SolidColorBrush x:Key="StatusBarText" Color="#212121" />
<SolidColorBrush x:Key="ProgressBarForeground" Color="#326CF3" />
</ResourceDictionary>
</Application.Resources>
</Application>
21 changes: 14 additions & 7 deletions TwitchDownloaderWPF/App.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
using System.IO;
using System.Windows;
using System.Windows.Threading;
using TwitchDownloader.Tools;
using TwitchDownloaderWPF.Properties;
using TwitchDownloaderWPF.Services;
using TwitchDownloaderWPF.Translations;

namespace TwitchDownloaderWPF
{
Expand All @@ -23,35 +25,37 @@ protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);

// Set the working dir to the process dir if run from start menu
Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

// Set the working dir to the process dir if run from sys32/syswow64
var processDir = Directory.GetParent(Environment.ProcessPath).FullName;
if (Environment.CurrentDirectory != processDir)
{
Environment.CurrentDirectory = processDir;
}

RequestCultureChange();

WindowsThemeService windowsThemeService = new();
ThemeServiceSingleton = new ThemeService(this, windowsThemeService);

Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

MainWindow = new MainWindow();
MainWindow.Show();
}

private void Current_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
Exception ex = e.Exception;
MessageBox.Show(ex.ToString(), "Fatal Error", MessageBoxButton.OK, MessageBoxImage.Error);
MessageBox.Show(ex.ToString(), Strings.FatalError, MessageBoxButton.OK, MessageBoxImage.Error);

Current?.Shutdown();
}

private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Exception ex = (Exception)e.ExceptionObject;
MessageBox.Show(ex.ToString(), "Fatal Error", MessageBoxButton.OK, MessageBoxImage.Error);
MessageBox.Show(ex.ToString(), Strings.FatalError, MessageBoxButton.OK, MessageBoxImage.Error);

Current?.Shutdown();
}
Expand All @@ -61,5 +65,8 @@ public void RequestAppThemeChange()

public void RequestTitleBarChange()
=> ThemeServiceSingleton.SetTitleBarTheme(Windows);

public void RequestCultureChange()
=> CultureService.SetApplicationCulture(Settings.Default.GuiCulture);
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TwitchDownloaderWPF/Images/chatrender1Example.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TwitchDownloaderWPF/Images/chatrender2Example.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TwitchDownloaderWPF/Images/chatrender3Example.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TwitchDownloaderWPF/Images/chatrender4Example.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TwitchDownloaderWPF/Images/chatupdateExample.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TwitchDownloaderWPF/Images/clipExample.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified TwitchDownloaderWPF/Images/donate.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TwitchDownloaderWPF/Images/enqueueExample.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TwitchDownloaderWPF/Images/massclipExample.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TwitchDownloaderWPF/Images/massurlExample.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TwitchDownloaderWPF/Images/massvodExample.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified TwitchDownloaderWPF/Images/peepoSad.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TwitchDownloaderWPF/Images/rangeExample.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TwitchDownloaderWPF/Images/settingsExample.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TwitchDownloaderWPF/Images/taskqueueExample.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TwitchDownloaderWPF/Images/vodExample.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
28 changes: 22 additions & 6 deletions TwitchDownloaderWPF/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TwitchDownloaderWPF"
xmlns:lex="http://wpflocalizeextension.codeplex.com"
lex:LocalizeDictionary.DesignCulture=""
lex:ResxLocalizationProvider.DefaultAssembly="TwitchDownloaderWPF"
lex:ResxLocalizationProvider.DefaultDictionary="Strings"
mc:Ignorable="d"
Title="Twitch Downloader" MinHeight="440" Height="500" MinWidth="700" Width="850" Loaded="Window_Loaded">
<Grid Background="{DynamicResource AppBackground}">
Expand All @@ -22,12 +26,24 @@
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="5"/>
</Grid.ColumnDefinitions>
<Button x:Name="btnVodDownload" Margin="4" Grid.Row="1" Grid.Column="1" Content="VOD Downloader" Width="122" Height="52" Click="btnVodDownload_Click" FontWeight="Bold" Background="{DynamicResource BigButtonBackground}" Foreground="{DynamicResource BigButtonText}" BorderBrush="{DynamicResource BigButtonBorder}" />
<Button x:Name="btnClipDownload" Margin="4" Grid.Row="1" Grid.Column="2" Content="Clip Downloader" Width="122" Height="52" Click="btnClipDownload_Click" FontWeight="Bold" Background="{DynamicResource BigButtonBackground}" Foreground="{DynamicResource BigButtonText}" BorderBrush="{DynamicResource BigButtonBorder}" />
<Button x:Name="btnChatDownload" Margin="4" Grid.Row="1" Grid.Column="3" Content="Chat Downloader" Width="122" Height="52" Click="btnChatDownload_Click" FontWeight="Bold" Background="{DynamicResource BigButtonBackground}" Foreground="{DynamicResource BigButtonText}" BorderBrush="{DynamicResource BigButtonBorder}" />
<Button x:Name="btnChatUpdate" Margin="4" Grid.Row="1" Grid.Column="4" Content="Chat Updater" Width="122" Height="52" Click="btnChatUpdate_Click" FontWeight="Bold" Background="{DynamicResource BigButtonBackground}" Foreground="{DynamicResource BigButtonText}" BorderBrush="{DynamicResource BigButtonBorder}" />
<Button x:Name="btnChatRender" Margin="4" Grid.Row="1" Grid.Column="5" Content="Chat Render" Width="122" Height="52" Click="btnChatRender_Click" FontWeight="Bold" Background="{DynamicResource BigButtonBackground}" Foreground="{DynamicResource BigButtonText}" BorderBrush="{DynamicResource BigButtonBorder}" />
<Button x:Name="btnQueue" Margin="4" Grid.Row="1" Grid.Column="6" Content="Task Queue" Width="122" Height="52" Click="btnQueue_Click" FontWeight="Bold" Background="{DynamicResource BigButtonBackground}" Foreground="{DynamicResource BigButtonText}" BorderBrush="{DynamicResource BigButtonBorder}" />
<Button x:Name="btnVodDownload" Margin="4" Grid.Row="1" Grid.Column="1" MinWidth="122" Height="52" Click="btnVodDownload_Click" FontWeight="Bold" Padding="3,0,3,0" Background="{DynamicResource BigButtonBackground}" Foreground="{DynamicResource BigButtonText}" BorderBrush="{DynamicResource BigButtonBorder}" >
<TextBlock Text="{lex:Loc VodDownload}" TextWrapping="Wrap" TextAlignment="Center" MaxWidth="{Binding ActualWidth, ElementName=btnVodDownload, Mode=OneWay}" Padding="3,0,3,0" />
</Button>
<Button x:Name="btnClipDownload" Margin="4" Grid.Row="1" Grid.Column="2" MinWidth="122" Height="52" Click="btnClipDownload_Click" FontWeight="Bold" Padding="3,0,3,0" Background="{DynamicResource BigButtonBackground}" Foreground="{DynamicResource BigButtonText}" BorderBrush="{DynamicResource BigButtonBorder}" >
<TextBlock Text="{lex:Loc ClipDownload}" TextWrapping="Wrap" TextAlignment="Center" MaxWidth="{Binding ActualWidth, ElementName=btnClipDownload, Mode=OneWay}" Padding="3,0,3,0" />
</Button>
<Button x:Name="btnChatDownload" Margin="4" Grid.Row="1" Grid.Column="3" MinWidth="122" Height="52" Click="btnChatDownload_Click" FontWeight="Bold" Padding="3,0,3,0" Background="{DynamicResource BigButtonBackground}" Foreground="{DynamicResource BigButtonText}" BorderBrush="{DynamicResource BigButtonBorder}" >
<TextBlock Text="{lex:Loc ChatDownload}" TextWrapping="Wrap" TextAlignment="Center" MaxWidth="{Binding ActualWidth, ElementName=btnChatDownload, Mode=OneWay}" Padding="3,0,3,0" />
</Button>
<Button x:Name="btnChatUpdate" Margin="4" Grid.Row="1" Grid.Column="4" MinWidth="122" Height="52" Click="btnChatUpdate_Click" FontWeight="Bold" Padding="3,0,3,0" Background="{DynamicResource BigButtonBackground}" Foreground="{DynamicResource BigButtonText}" BorderBrush="{DynamicResource BigButtonBorder}" >
<TextBlock Text="{lex:Loc ChatUpdater}" TextWrapping="Wrap" TextAlignment="Center" MaxWidth="{Binding ActualWidth, ElementName=btnChatUpdate, Mode=OneWay}" Padding="3,0,3,0" />
</Button>
<Button x:Name="btnChatRender" Margin="4" Grid.Row="1" Grid.Column="5" MinWidth="122" Height="52" Click="btnChatRender_Click" FontWeight="Bold" Padding="3,0,3,0" Background="{DynamicResource BigButtonBackground}" Foreground="{DynamicResource BigButtonText}" BorderBrush="{DynamicResource BigButtonBorder}" >
<TextBlock Text="{lex:Loc ChatRender}" TextWrapping="Wrap" TextAlignment="Center" MaxWidth="{Binding ActualWidth, ElementName=btnChatRender, Mode=OneWay}" Padding="3,0,3,0" />
</Button>
<Button x:Name="btnQueue" Margin="4" Grid.Row="1" Grid.Column="6" MinWidth="122" Height="52" Click="btnQueue_Click" FontWeight="Bold" Padding="3,0,3,0" Background="{DynamicResource BigButtonBackground}" Foreground="{DynamicResource BigButtonText}" BorderBrush="{DynamicResource BigButtonBorder}" >
<TextBlock Text="{lex:Loc TaskQueue}" TextWrapping="Wrap" TextAlignment="Center" MaxWidth="{Binding ActualWidth, ElementName=btnQueue, Mode=OneWay}" Padding="3,0,3,0" />
</Button>
<Frame Focusable="False" x:Name="Main" Grid.Column="0" Grid.ColumnSpan="8" Grid.Row="2" NavigationUIVisibility="Hidden" Background="{DynamicResource AppBackground}" BorderBrush="{DynamicResource AppBackground}"/>
</Grid>
</Window>
Loading

0 comments on commit 9486967

Please sign in to comment.