Compare commits

...

4 Commits

Author SHA1 Message Date
dependabot[bot]
21190ce37b
Merge df63dccb8b into f0eb2eb745 2025-03-15 13:01:26 +00:00
Matt
f0eb2eb745
use PathValidator for RenameCustomTheme (#4886) 2025-03-15 10:52:10 +00:00
Matt
338ebba191
Localise more custom dialog related strings (#4881)
Some checks are pending
CI (Debug) / build (push) Waiting to run
CI (Release) / build (push) Waiting to run
CI (Release) / release (push) Blocked by required conditions
CI (Release) / release-test (push) Blocked by required conditions
* translate template comments

* localise default custom theme name
2025-03-15 00:17:23 +00:00
dependabot[bot]
df63dccb8b
Bump wpfui from dca423b to f710123
Bumps [wpfui](https://github.com/bloxstraplabs/wpfui) from `dca423b` to `f710123`.
- [Commits](dca423b724...f710123e72)

---
updated-dependencies:
- dependency-name: wpfui
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-13 16:47:00 +00:00
8 changed files with 123 additions and 11 deletions

View File

@ -1,10 +1,36 @@
namespace Bloxstrap.Extensions
using System.Text;
namespace Bloxstrap.Extensions
{
static class CustomThemeTemplateEx
{
const string EXAMPLES_URL = "https://github.com/bloxstraplabs/custom-bootstrapper-examples";
public static string GetFileName(this CustomThemeTemplate template)
{
return $"CustomBootstrapperTemplate_{template}.xml";
}
public static string GetFileContents(this CustomThemeTemplate template)
{
string contents = Encoding.UTF8.GetString(Resource.Get(template.GetFileName()).Result);
switch (template)
{
case CustomThemeTemplate.Blank:
{
string moreText = string.Format(Strings.CustomTheme_Templates_Blank_MoreExamples, EXAMPLES_URL);
return string.Format(contents, Strings.CustomTheme_Templates_Blank_UIElements, moreText);
}
case CustomThemeTemplate.Simple:
{
string moreText = string.Format(Strings.CustomTheme_Templates_Simple_MoreExamples, EXAMPLES_URL);
return string.Format(contents, moreText);
}
default:
Debug.Assert(false);
return contents;
}
}
}
}

View File

@ -1,4 +1,4 @@
<BloxstrapCustomBootstrapper Version="1" Height="320" Width="500">
<!-- Put UI elements here -->
<!-- Examples of custom bootstrappers can be found at https://github.com/bloxstraplabs/custom-bootstrapper-examples -->
<!-- {0} -->
<!-- {1} -->
</BloxstrapCustomBootstrapper>

View File

@ -1,5 +1,5 @@
<BloxstrapCustomBootstrapper Version="1" Height="320" Width="520" IgnoreTitleBarInset="True" Theme="Default" Margin="30">
<!-- Find more custom bootstrapper examples at https://github.com/bloxstraplabs/custom-bootstrapper-examples -->
<!-- {0} -->
<TitleBar Title="" ShowMinimize="False" ShowClose="False" />
<Image Source="{Icon}" Height="100" Width="100" HorizontalAlignment="Center" Margin="0,15,0,0" />

View File

@ -973,6 +973,15 @@ namespace Bloxstrap.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Custom Theme {0}.
/// </summary>
public static string CustomTheme_DefaultName {
get {
return ResourceManager.GetString("CustomTheme.DefaultName", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Save changes to {0}?.
/// </summary>
@ -1271,6 +1280,33 @@ namespace Bloxstrap.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Examples of custom bootstrappers can be found at {0}.
/// </summary>
public static string CustomTheme_Templates_Blank_MoreExamples {
get {
return ResourceManager.GetString("CustomTheme.Templates.Blank.MoreExamples", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Put UI elements here.
/// </summary>
public static string CustomTheme_Templates_Blank_UIElements {
get {
return ResourceManager.GetString("CustomTheme.Templates.Blank.UIElements", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Find more custom bootstrapper examples at {0}.
/// </summary>
public static string CustomTheme_Templates_Simple_MoreExamples {
get {
return ResourceManager.GetString("CustomTheme.Templates.Simple.MoreExamples", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Add Fast Flag.
/// </summary>

View File

@ -1474,4 +1474,17 @@ Defaulting to {1}.</value>
<data name="Menu.Behaviour.BackgroundUpdates.Description" xml:space="preserve">
<value>Update Roblox in the background instead of waiting. Not recommended for slow networks. At least 3GB of free storage space is required for this feature to work.</value>
</data>
<data name="CustomTheme.Templates.Blank.UIElements" xml:space="preserve">
<value>Put UI elements here</value>
</data>
<data name="CustomTheme.Templates.Blank.MoreExamples" xml:space="preserve">
<value>Examples of custom bootstrappers can be found at {0}</value>
</data>
<data name="CustomTheme.Templates.Simple.MoreExamples" xml:space="preserve">
<value>Find more custom bootstrapper examples at {0}</value>
</data>
<data name="CustomTheme.DefaultName" xml:space="preserve">
<value>Custom Theme {0}</value>
<comment>{0} is a string (e.g. '1', '1-1234')</comment>
</data>
</root>

View File

@ -39,11 +39,12 @@ namespace Bloxstrap.UI.Elements.Dialogs
{
int count = Directory.GetDirectories(Paths.CustomThemes).Count();
string name = $"Custom Theme {count + 1}";
int i = count + 1;
string name = string.Format(Strings.CustomTheme_DefaultName, i);
// TODO: this sucks
if (File.Exists(GetThemePath(name)))
name += " " + Random.Shared.Next(1, 100000).ToString(); // easy
name = string.Format(Strings.CustomTheme_DefaultName, $"{i}-{Random.Shared.Next(1, 100000)}"); // easy
return name;
}
@ -76,7 +77,7 @@ namespace Bloxstrap.UI.Elements.Dialogs
string themeFilePath = Path.Combine(dir, "Theme.xml");
string templateContent = Encoding.UTF8.GetString(Resource.Get(template.GetFileName()).Result);
string templateContent = template.GetFileContents();
File.WriteAllText(themeFilePath, templateContent);
}

View File

@ -194,11 +194,47 @@ namespace Bloxstrap.UI.ViewModels.Settings
private void RenameCustomTheme()
{
if (SelectedCustomTheme is null)
const string LOG_IDENT = "AppearanceViewModel::RenameCustomTheme";
if (SelectedCustomTheme is null || SelectedCustomTheme == SelectedCustomThemeName)
return;
if (SelectedCustomTheme == SelectedCustomThemeName)
if (string.IsNullOrEmpty(SelectedCustomThemeName))
{
Frontend.ShowMessageBox(Strings.CustomTheme_Add_Errors_NameEmpty, MessageBoxImage.Error);
return;
}
var validationResult = PathValidator.IsFileNameValid(SelectedCustomThemeName);
if (validationResult != PathValidator.ValidationResult.Ok)
{
switch (validationResult)
{
case PathValidator.ValidationResult.IllegalCharacter:
Frontend.ShowMessageBox(Strings.CustomTheme_Add_Errors_NameIllegalCharacters, MessageBoxImage.Error);
break;
case PathValidator.ValidationResult.ReservedFileName:
Frontend.ShowMessageBox(Strings.CustomTheme_Add_Errors_NameReserved, MessageBoxImage.Error);
break;
default:
App.Logger.WriteLine(LOG_IDENT, $"Got unhandled PathValidator::ValidationResult {validationResult}");
Debug.Assert(false);
Frontend.ShowMessageBox(Strings.CustomTheme_Add_Errors_Unknown, MessageBoxImage.Error);
break;
}
return;
}
// better to check for the file instead of the directory so broken themes can be overwritten
string path = Path.Combine(Paths.CustomThemes, SelectedCustomThemeName, "Theme.xml");
if (File.Exists(path))
{
Frontend.ShowMessageBox(Strings.CustomTheme_Add_Errors_NameTaken, MessageBoxImage.Error);
return;
}
try
{
@ -206,7 +242,7 @@ namespace Bloxstrap.UI.ViewModels.Settings
}
catch (Exception ex)
{
App.Logger.WriteException("AppearanceViewModel::RenameCustomTheme", ex);
App.Logger.WriteException(LOG_IDENT, ex);
Frontend.ShowMessageBox(string.Format(Strings.Menu_Appearance_CustomThemes_RenameFailed, SelectedCustomTheme, ex.Message), MessageBoxImage.Error);
return;
}

1
wpfui

@ -1 +0,0 @@
Subproject commit dca423b724ec24bd3377da3a27f4055ae317b50a

1
wpfui Normal file
View File

@ -0,0 +1 @@
f710123e72d9dcc8d09fccc4e2a783cc5cf5e652