mirror of
https://github.com/bloxstraplabs/bloxstrap.git
synced 2025-04-21 10:01:27 -07:00
Add backend code for new menu
This commit is contained in:
parent
f9140334b3
commit
8552d94a4a
@ -21,13 +21,13 @@ namespace Bloxstrap
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class App : Application
|
public partial class App : Application
|
||||||
{
|
{
|
||||||
public const StringComparison StringFormat = StringComparison.InvariantCulture;
|
|
||||||
public static readonly CultureInfo CultureFormat = CultureInfo.InvariantCulture;
|
public static readonly CultureInfo CultureFormat = CultureInfo.InvariantCulture;
|
||||||
|
|
||||||
public const string ProjectName = "Bloxstrap";
|
public const string ProjectName = "Bloxstrap";
|
||||||
public const string ProjectRepository = "pizzaboxer/bloxstrap";
|
public const string ProjectRepository = "pizzaboxer/bloxstrap";
|
||||||
|
|
||||||
public static string BaseDirectory = null!;
|
public static string BaseDirectory = null!;
|
||||||
|
public static bool IsSetupComplete { get; set; } = true;
|
||||||
public static bool IsFirstRun { get; private set; } = false;
|
public static bool IsFirstRun { get; private set; } = false;
|
||||||
public static bool IsQuiet { get; private set; } = false;
|
public static bool IsQuiet { get; private set; } = false;
|
||||||
public static bool IsUninstall { get; private set; } = false;
|
public static bool IsUninstall { get; private set; } = false;
|
||||||
@ -65,9 +65,6 @@ namespace Bloxstrap
|
|||||||
// see https://aka.ms/applicationconfiguration.
|
// see https://aka.ms/applicationconfiguration.
|
||||||
ApplicationConfiguration.Initialize();
|
ApplicationConfiguration.Initialize();
|
||||||
|
|
||||||
new MainWindow().ShowDialog();
|
|
||||||
return;
|
|
||||||
|
|
||||||
LaunchArgs = e.Args;
|
LaunchArgs = e.Args;
|
||||||
|
|
||||||
HttpClient.Timeout = TimeSpan.FromMinutes(5);
|
HttpClient.Timeout = TimeSpan.FromMinutes(5);
|
||||||
@ -95,12 +92,13 @@ namespace Bloxstrap
|
|||||||
{
|
{
|
||||||
IsFirstRun = true;
|
IsFirstRun = true;
|
||||||
Settings = SettingsManager.Settings;
|
Settings = SettingsManager.Settings;
|
||||||
|
BaseDirectory = Path.Combine(Directories.LocalAppData, ProjectName);
|
||||||
|
|
||||||
if (IsQuiet)
|
if (!IsQuiet)
|
||||||
BaseDirectory = Path.Combine(Directories.LocalAppData, ProjectName);
|
{
|
||||||
else
|
IsSetupComplete = false;
|
||||||
//new Preferences().ShowDialog();
|
|
||||||
new MainWindow().ShowDialog();
|
new MainWindow().ShowDialog();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -109,8 +107,7 @@ namespace Bloxstrap
|
|||||||
}
|
}
|
||||||
|
|
||||||
// preferences dialog was closed, and so base directory was never set
|
// preferences dialog was closed, and so base directory was never set
|
||||||
// (this doesnt account for the registry value not existing but thats basically never gonna happen)
|
if (!IsSetupComplete)
|
||||||
if (String.IsNullOrEmpty(BaseDirectory))
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Directories.Initialize(BaseDirectory);
|
Directories.Initialize(BaseDirectory);
|
||||||
@ -132,8 +129,7 @@ namespace Bloxstrap
|
|||||||
|
|
||||||
string commandLine = "";
|
string commandLine = "";
|
||||||
|
|
||||||
#if DEBUG
|
#if false//DEBUG
|
||||||
//new Preferences().ShowDialog();
|
|
||||||
new MainWindow().ShowDialog();
|
new MainWindow().ShowDialog();
|
||||||
#else
|
#else
|
||||||
if (LaunchArgs.Length > 0)
|
if (LaunchArgs.Length > 0)
|
||||||
@ -147,7 +143,7 @@ namespace Bloxstrap
|
|||||||
}
|
}
|
||||||
|
|
||||||
//new Preferences().ShowDialog();
|
//new Preferences().ShowDialog();
|
||||||
new Configuration.MainWindow().ShowDialog();
|
new MainWindow().ShowDialog();
|
||||||
}
|
}
|
||||||
else if (LaunchArgs[0].StartsWith("roblox-player:"))
|
else if (LaunchArgs[0].StartsWith("roblox-player:"))
|
||||||
{
|
{
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
<ApplicationIcon>Bloxstrap.ico</ApplicationIcon>
|
<ApplicationIcon>Bloxstrap.ico</ApplicationIcon>
|
||||||
<Version>2.0.0</Version>
|
<Version>2.0.0</Version>
|
||||||
<FileVersion>2.0.0.0</FileVersion>
|
<FileVersion>2.0.0.0</FileVersion>
|
||||||
|
<ApplicationManifest>app.manifest</ApplicationManifest>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -449,6 +449,12 @@ namespace Bloxstrap
|
|||||||
private void UpdateProgressbar()
|
private void UpdateProgressbar()
|
||||||
{
|
{
|
||||||
int newProgress = (int)Math.Floor(ProgressIncrement * TotalDownloadedBytes);
|
int newProgress = (int)Math.Floor(ProgressIncrement * TotalDownloadedBytes);
|
||||||
|
|
||||||
|
// bugcheck: if we're restoring a file from a package, it'll incorrectly increment the progress beyond 100
|
||||||
|
// too lazy to fix properly so lol
|
||||||
|
if (newProgress > 100)
|
||||||
|
return;
|
||||||
|
|
||||||
Dialog.ProgressValue = newProgress;
|
Dialog.ProgressValue = newProgress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,13 +84,13 @@ namespace Bloxstrap.Dialogs.BootstrapperDialogs
|
|||||||
|
|
||||||
if (Bootstrapper is null)
|
if (Bootstrapper is null)
|
||||||
{
|
{
|
||||||
Message = "Style Preview - Click Cancel to return";
|
Message = "Style preview - Click Cancel to close";
|
||||||
CancelEnabled = true;
|
CancelEnabled = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Bootstrapper.Dialog = this;
|
Bootstrapper.Dialog = this;
|
||||||
Task.Run(() => RunBootstrapper());
|
Task.Run(RunBootstrapper);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
15
Bloxstrap/Models/DeployInfo.cs
Normal file
15
Bloxstrap/Models/DeployInfo.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Bloxstrap.Models
|
||||||
|
{
|
||||||
|
public class DeployInfo
|
||||||
|
{
|
||||||
|
public string Timestamp { get; set; } = null!;
|
||||||
|
public string Version { get; set; } = null!;
|
||||||
|
public string VersionGuid { get; set; } = null!;
|
||||||
|
}
|
||||||
|
}
|
21
Bloxstrap/ViewModels/AboutViewModel.cs
Normal file
21
Bloxstrap/ViewModels/AboutViewModel.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
using System.Windows.Input;
|
||||||
|
using CommunityToolkit.Mvvm.Input;
|
||||||
|
using Bloxstrap.Helpers;
|
||||||
|
|
||||||
|
namespace Bloxstrap.ViewModels
|
||||||
|
{
|
||||||
|
public class AboutViewModel
|
||||||
|
{
|
||||||
|
public ICommand OpenWebpageCommand => new RelayCommand<string>(OpenWebpage);
|
||||||
|
|
||||||
|
private void OpenWebpage(string? location)
|
||||||
|
{
|
||||||
|
if (location is null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Utilities.OpenWebsite(location);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Version => $"Version {App.Version}";
|
||||||
|
}
|
||||||
|
}
|
91
Bloxstrap/ViewModels/BootstrapperViewModel.cs
Normal file
91
Bloxstrap/ViewModels/BootstrapperViewModel.cs
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using Bloxstrap.Enums;
|
||||||
|
using Bloxstrap.Views;
|
||||||
|
using CommunityToolkit.Mvvm.Input;
|
||||||
|
using Wpf.Ui.Mvvm.Services;
|
||||||
|
using Wpf.Ui.Mvvm.Contracts;
|
||||||
|
|
||||||
|
namespace Bloxstrap.ViewModels
|
||||||
|
{
|
||||||
|
public class BootstrapperViewModel
|
||||||
|
{
|
||||||
|
private readonly Page _page;
|
||||||
|
|
||||||
|
public ICommand PreviewBootstrapperCommand => new RelayCommand(PreviewBootstrapper);
|
||||||
|
|
||||||
|
private void PreviewBootstrapper() => App.Settings.BootstrapperStyle.Show();
|
||||||
|
|
||||||
|
public BootstrapperViewModel(Page page)
|
||||||
|
{
|
||||||
|
_page = page;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool UpdateCheckingEnabled
|
||||||
|
{
|
||||||
|
get => App.Settings.CheckForUpdates;
|
||||||
|
set => App.Settings.CheckForUpdates = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ChannelChangePromptingEnabled
|
||||||
|
{
|
||||||
|
get => App.Settings.PromptChannelChange;
|
||||||
|
set => App.Settings.PromptChannelChange = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IReadOnlyDictionary<string, Theme> Themes { get; set; } = new Dictionary<string, Theme>()
|
||||||
|
{
|
||||||
|
{ "System Default", Enums.Theme.Default },
|
||||||
|
{ "Light", Enums.Theme.Light },
|
||||||
|
{ "Dark", Enums.Theme.Dark },
|
||||||
|
};
|
||||||
|
|
||||||
|
public string Theme
|
||||||
|
{
|
||||||
|
get => Themes.FirstOrDefault(x => x.Value == App.Settings.Theme).Key;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
App.Settings.Theme = Themes[value];
|
||||||
|
((MainWindow)Window.GetWindow(_page)!).SetTheme();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public IReadOnlyDictionary<string, BootstrapperStyle> Dialogs { get; set; } = new Dictionary<string, BootstrapperStyle>()
|
||||||
|
{
|
||||||
|
{ "Vista (2009 - 2011)", BootstrapperStyle.VistaDialog },
|
||||||
|
{ "Legacy (2009 - 2011)", BootstrapperStyle.LegacyDialog2009 },
|
||||||
|
{ "Legacy (2011 - 2014)", BootstrapperStyle.LegacyDialog2011 },
|
||||||
|
{ "Progress (~2014)", BootstrapperStyle.ProgressDialog },
|
||||||
|
};
|
||||||
|
|
||||||
|
public string Dialog
|
||||||
|
{
|
||||||
|
get => Dialogs.FirstOrDefault(x => x.Value == App.Settings.BootstrapperStyle).Key;
|
||||||
|
set => App.Settings.BootstrapperStyle = Dialogs[value];
|
||||||
|
}
|
||||||
|
|
||||||
|
public IReadOnlyDictionary<string, BootstrapperIcon> Icons { get; set; } = new Dictionary<string, BootstrapperIcon>()
|
||||||
|
{
|
||||||
|
{ "Bloxstrap", BootstrapperIcon.IconBloxstrap },
|
||||||
|
{ "2009", BootstrapperIcon.Icon2009 },
|
||||||
|
{ "2011", BootstrapperIcon.Icon2011 },
|
||||||
|
{ "2015", BootstrapperIcon.IconEarly2015 },
|
||||||
|
{ "2016", BootstrapperIcon.IconLate2015 },
|
||||||
|
{ "2017", BootstrapperIcon.Icon2017 },
|
||||||
|
{ "2019", BootstrapperIcon.Icon2019 },
|
||||||
|
{ "2022", BootstrapperIcon.Icon2022 }
|
||||||
|
};
|
||||||
|
|
||||||
|
public string Icon
|
||||||
|
{
|
||||||
|
get => Icons.FirstOrDefault(x => x.Value == App.Settings.BootstrapperIcon).Key;
|
||||||
|
set => App.Settings.BootstrapperIcon = Icons[value];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
108
Bloxstrap/ViewModels/InstallationViewModel.cs
Normal file
108
Bloxstrap/ViewModels/InstallationViewModel.cs
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
using Bloxstrap.Enums;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using CommunityToolkit.Mvvm.Input;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using Wpf.Ui.Mvvm.Interfaces;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using Bloxstrap.Helpers;
|
||||||
|
using Bloxstrap.Models;
|
||||||
|
|
||||||
|
namespace Bloxstrap.ViewModels
|
||||||
|
{
|
||||||
|
public class InstallationViewModel : INotifyPropertyChanged
|
||||||
|
{
|
||||||
|
public event PropertyChangedEventHandler? PropertyChanged;
|
||||||
|
public void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||||
|
|
||||||
|
private IEnumerable<string> _channels = DeployManager.ChannelsAbstracted.Contains(App.Settings.Channel) ? DeployManager.ChannelsAbstracted : DeployManager.ChannelsAll;
|
||||||
|
private bool _showAllChannels = !DeployManager.ChannelsAbstracted.Contains(App.Settings.Channel);
|
||||||
|
|
||||||
|
public ICommand BrowseInstallLocationCommand => new RelayCommand(BrowseInstallLocation);
|
||||||
|
|
||||||
|
public DeployInfo? ChannelDeployInfo { get; private set; } = null; //new DeployInfo(){ Version = "hi", VersionGuid = "hi", Timestamp = "January 25 2023 at 6:03:48 PM" };
|
||||||
|
|
||||||
|
public InstallationViewModel()
|
||||||
|
{
|
||||||
|
Task.Run(() => LoadChannelDeployInfo(App.Settings.Channel));
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task LoadChannelDeployInfo(string channel)
|
||||||
|
{
|
||||||
|
ChannelDeployInfo = null;
|
||||||
|
OnPropertyChanged(nameof(ChannelDeployInfo));
|
||||||
|
|
||||||
|
ClientVersion info = await DeployManager.GetLastDeploy(channel, true);
|
||||||
|
string? strTimestamp = info.Timestamp?.ToString("MM/dd/yyyy h:mm:ss tt", App.CultureFormat);
|
||||||
|
|
||||||
|
ChannelDeployInfo = new DeployInfo() { Version = info.Version, VersionGuid = info.VersionGuid, Timestamp = strTimestamp! };
|
||||||
|
OnPropertyChanged(nameof(ChannelDeployInfo));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BrowseInstallLocation()
|
||||||
|
{
|
||||||
|
using var dialog = new FolderBrowserDialog();
|
||||||
|
|
||||||
|
if (dialog.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
InstallLocation = dialog.SelectedPath;
|
||||||
|
OnPropertyChanged(nameof(InstallLocation));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string InstallLocation
|
||||||
|
{
|
||||||
|
get => App.BaseDirectory;
|
||||||
|
set => App.BaseDirectory = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool CreateDesktopIcon
|
||||||
|
{
|
||||||
|
get => App.Settings.CreateDesktopIcon;
|
||||||
|
set => App.Settings.CreateDesktopIcon = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<string> Channels
|
||||||
|
{
|
||||||
|
get => _channels;
|
||||||
|
set => _channels = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Channel
|
||||||
|
{
|
||||||
|
get => App.Settings.Channel;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
//Task.Run(() => GetChannelInfo(value));
|
||||||
|
Task.Run(() => LoadChannelDeployInfo(value));
|
||||||
|
App.Settings.Channel = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ShowAllChannels
|
||||||
|
{
|
||||||
|
get => _showAllChannels;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value)
|
||||||
|
{
|
||||||
|
Channels = DeployManager.ChannelsAll;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Channels = DeployManager.ChannelsAbstracted;
|
||||||
|
Channel = DeployManager.DefaultChannel;
|
||||||
|
OnPropertyChanged(nameof(Channel));
|
||||||
|
}
|
||||||
|
|
||||||
|
OnPropertyChanged(nameof(Channels));
|
||||||
|
|
||||||
|
_showAllChannels = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
95
Bloxstrap/ViewModels/IntegrationsViewModel.cs
Normal file
95
Bloxstrap/ViewModels/IntegrationsViewModel.cs
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using CommunityToolkit.Mvvm.Input;
|
||||||
|
using Wpf.Ui.Mvvm.Contracts;
|
||||||
|
using Bloxstrap.Views.Pages;
|
||||||
|
using Bloxstrap.Helpers;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
|
namespace Bloxstrap.ViewModels
|
||||||
|
{
|
||||||
|
public class IntegrationsViewModel : INotifyPropertyChanged
|
||||||
|
{
|
||||||
|
public event PropertyChangedEventHandler? PropertyChanged;
|
||||||
|
public void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||||
|
|
||||||
|
private readonly Page _page;
|
||||||
|
|
||||||
|
public ICommand OpenReShadeFolderCommand => new RelayCommand(OpenReShadeFolder);
|
||||||
|
public ICommand ShowReShadeHelpCommand => new RelayCommand(ShowReShadeHelp);
|
||||||
|
|
||||||
|
public bool CanOpenReShadeFolder => !App.IsFirstRun;
|
||||||
|
|
||||||
|
public IntegrationsViewModel(Page page)
|
||||||
|
{
|
||||||
|
_page = page;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OpenReShadeFolder()
|
||||||
|
{
|
||||||
|
Process.Start("explorer.exe", Directories.ReShade);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ShowReShadeHelp()
|
||||||
|
{
|
||||||
|
((INavigationWindow)Window.GetWindow(_page)!).Navigate(typeof(ReShadeHelpPage));
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool DiscordActivityEnabled
|
||||||
|
{
|
||||||
|
get => App.Settings.UseDiscordRichPresence;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
App.Settings.UseDiscordRichPresence = value;
|
||||||
|
|
||||||
|
if (!value)
|
||||||
|
{
|
||||||
|
DiscordActivityJoinEnabled = value;
|
||||||
|
OnPropertyChanged(nameof(DiscordActivityJoinEnabled));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool DiscordActivityJoinEnabled
|
||||||
|
{
|
||||||
|
get => !App.Settings.HideRPCButtons;
|
||||||
|
set => App.Settings.HideRPCButtons = !value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ReShadeEnabled
|
||||||
|
{
|
||||||
|
get => App.Settings.UseReShade;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
App.Settings.UseReShade = value;
|
||||||
|
ReShadePresetsEnabled = value;
|
||||||
|
OnPropertyChanged(nameof(ReShadePresetsEnabled));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool ReShadePresetsEnabled
|
||||||
|
{
|
||||||
|
get => App.Settings.UseReShadeExtraviPresets;
|
||||||
|
set => App.Settings.UseReShadeExtraviPresets = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool RbxFpsUnlockerEnabled
|
||||||
|
{
|
||||||
|
get => App.Settings.RFUEnabled;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
App.Settings.RFUEnabled = value;
|
||||||
|
RbxFpsUnlockerAutocloseEnabled = value;
|
||||||
|
OnPropertyChanged(nameof(RbxFpsUnlockerAutocloseEnabled));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool RbxFpsUnlockerAutocloseEnabled
|
||||||
|
{
|
||||||
|
get => App.Settings.RFUAutoclose;
|
||||||
|
set => App.Settings.RFUAutoclose = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
96
Bloxstrap/ViewModels/MainWindowViewModel.cs
Normal file
96
Bloxstrap/ViewModels/MainWindowViewModel.cs
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
using System.IO;
|
||||||
|
using System;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Automation.Peers;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using Bloxstrap.Views;
|
||||||
|
using CommunityToolkit.Mvvm.Input;
|
||||||
|
using Microsoft.Win32;
|
||||||
|
|
||||||
|
namespace Bloxstrap.ViewModels
|
||||||
|
{
|
||||||
|
public class MainWindowViewModel
|
||||||
|
{
|
||||||
|
private readonly Window _window;
|
||||||
|
private readonly string _originalBaseDirectory = App.BaseDirectory; // we need this to check if the basedirectory changes
|
||||||
|
|
||||||
|
public ICommand CloseWindowCommand => new RelayCommand(CloseWindow);
|
||||||
|
public ICommand ConfirmSettingsCommand => new RelayCommand(ConfirmSettings);
|
||||||
|
|
||||||
|
public string ConfirmButtonText => App.IsFirstRun ? "Install" : "Save";
|
||||||
|
|
||||||
|
public MainWindowViewModel(Window window)
|
||||||
|
{
|
||||||
|
_window = window;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CloseWindow() => _window.Close();
|
||||||
|
|
||||||
|
private void ConfirmSettings()
|
||||||
|
{
|
||||||
|
if (String.IsNullOrEmpty(App.BaseDirectory))
|
||||||
|
{
|
||||||
|
App.ShowMessageBox("You must set an install location", MessageBoxImage.Error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// check if we can write to the directory (a bit hacky but eh)
|
||||||
|
|
||||||
|
string testPath = App.BaseDirectory;
|
||||||
|
string testFile = Path.Combine(testPath, $"{App.ProjectName}WriteTest.txt");
|
||||||
|
bool testPathExists = Directory.Exists(testPath);
|
||||||
|
|
||||||
|
if (!testPathExists)
|
||||||
|
Directory.CreateDirectory(testPath);
|
||||||
|
|
||||||
|
File.WriteAllText(testFile, "hi");
|
||||||
|
File.Delete(testFile);
|
||||||
|
|
||||||
|
if (!testPathExists)
|
||||||
|
Directory.Delete(testPath);
|
||||||
|
}
|
||||||
|
catch (UnauthorizedAccessException)
|
||||||
|
{
|
||||||
|
App.ShowMessageBox($"{App.ProjectName} does not have write access to the install location you selected. Please choose another install location.", MessageBoxImage.Error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
App.ShowMessageBox(ex.Message, MessageBoxImage.Error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!App.IsFirstRun)
|
||||||
|
{
|
||||||
|
App.SettingsManager.ShouldSave = true;
|
||||||
|
|
||||||
|
if (App.BaseDirectory != _originalBaseDirectory)
|
||||||
|
{
|
||||||
|
App.ShowMessageBox($"{App.ProjectName} will install to the new location you've set the next time it runs.", MessageBoxImage.Information);
|
||||||
|
|
||||||
|
App.Settings.VersionGuid = "";
|
||||||
|
|
||||||
|
using (RegistryKey registryKey = Registry.CurrentUser.CreateSubKey($@"Software\{App.ProjectName}"))
|
||||||
|
{
|
||||||
|
registryKey.SetValue("InstallLocation", App.BaseDirectory);
|
||||||
|
registryKey.SetValue("OldInstallLocation", _originalBaseDirectory);
|
||||||
|
registryKey.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// preserve settings
|
||||||
|
// we don't need to copy the bootstrapper over since the install process will do that automatically
|
||||||
|
|
||||||
|
App.SettingsManager.Save();
|
||||||
|
|
||||||
|
File.Copy(Path.Combine(App.BaseDirectory, "Settings.json"), Path.Combine(App.BaseDirectory, "Settings.json"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
App.IsSetupComplete = true;
|
||||||
|
|
||||||
|
CloseWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
37
Bloxstrap/ViewModels/ModsViewModel.cs
Normal file
37
Bloxstrap/ViewModels/ModsViewModel.cs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using Bloxstrap.Helpers;
|
||||||
|
using CommunityToolkit.Mvvm.Input;
|
||||||
|
|
||||||
|
namespace Bloxstrap.ViewModels
|
||||||
|
{
|
||||||
|
public class ModsViewModel
|
||||||
|
{
|
||||||
|
public ICommand OpenModsFolderCommand => new RelayCommand(OpenModsFolder);
|
||||||
|
|
||||||
|
public bool CanOpenModsFolder => !App.IsFirstRun;
|
||||||
|
|
||||||
|
private void OpenModsFolder()
|
||||||
|
{
|
||||||
|
Process.Start("explorer.exe", Directories.Modifications);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool OldDeathSoundEnabled
|
||||||
|
{
|
||||||
|
get => App.Settings.UseOldDeathSound;
|
||||||
|
set => App.Settings.UseOldDeathSound = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool OldMouseCursorEnabled
|
||||||
|
{
|
||||||
|
get => App.Settings.UseOldMouseCursor;
|
||||||
|
set => App.Settings.UseOldMouseCursor = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool DisableAppPatchEnabled
|
||||||
|
{
|
||||||
|
get => App.Settings.UseDisableAppPatch;
|
||||||
|
set => App.Settings.UseDisableAppPatch = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,12 +1,14 @@
|
|||||||
<ui:UiWindow x:Class="Bloxstrap.Views.MainWindow"
|
<ui:UiWindow x:Class="Bloxstrap.Views.MainWindow"
|
||||||
|
x:Name="ConfigurationWindow"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
|
||||||
xmlns:pages="clr-namespace:Bloxstrap.Views.Pages"
|
xmlns:pages="clr-namespace:Bloxstrap.Views.Pages"
|
||||||
|
xmlns:models="clr-namespace:Bloxstrap.ViewModels"
|
||||||
|
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
Title="Bloxstrap - Preferences"
|
Title="Bloxstrap Menu"
|
||||||
MinWidth="880"
|
MinWidth="880"
|
||||||
Width="920"
|
Width="920"
|
||||||
Height="580"
|
Height="580"
|
||||||
@ -25,9 +27,9 @@
|
|||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
<ui:TitleBar x:Name="RootTitleBar" Grid.Row="0" ForceShutdown="False" MinimizeToTray="False" ShowHelp="False" UseSnapLayout="True" />
|
<ui:TitleBar x:Name="RootTitleBar" Grid.Row="0" ForceShutdown="False" MinimizeToTray="False" ShowHelp="False" UseSnapLayout="True" Title="Bloxstrap Menu" Icon="pack://application:,,,/Resources/IconBloxstrap-png.png" />
|
||||||
|
|
||||||
<Grid x:Name="RootGrid" Grid.Row="1" Margin="12,0,0,0" Visibility="Visible">
|
<Grid x:Name="RootGrid" Grid.Row="1" Margin="13,0,0,0" Visibility="Visible">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="Auto" />
|
<RowDefinition Height="Auto" />
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
@ -37,7 +39,7 @@
|
|||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<Grid Grid.Row="0" Margin="6,0,0,24">
|
<!--<Grid Grid.Row="0" Margin="6,0,0,24">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="Auto" />
|
<ColumnDefinition Width="Auto" />
|
||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
@ -52,7 +54,7 @@
|
|||||||
<TextBlock FontSize="18" FontWeight="Medium" Text="Bloxstrap" />
|
<TextBlock FontSize="18" FontWeight="Medium" Text="Bloxstrap" />
|
||||||
<TextBlock Text="Configuration Menu" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock Text="Configuration Menu" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>-->
|
||||||
|
|
||||||
<ui:NavigationFluent x:Name="RootNavigation" Grid.Row="1" Grid.Column="0" Margin="0,0,12,0" Frame="{Binding ElementName=RootFrame}" SelectedPageIndex="0">
|
<ui:NavigationFluent x:Name="RootNavigation" Grid.Row="1" Grid.Column="0" Margin="0,0,12,0" Frame="{Binding ElementName=RootFrame}" SelectedPageIndex="0">
|
||||||
<ui:NavigationFluent.Items>
|
<ui:NavigationFluent.Items>
|
||||||
@ -89,10 +91,10 @@
|
|||||||
</ItemsPanelTemplate>
|
</ItemsPanelTemplate>
|
||||||
</StatusBar.ItemsPanel>
|
</StatusBar.ItemsPanel>
|
||||||
<StatusBarItem Grid.Column="1" Padding="0,0,4,0">
|
<StatusBarItem Grid.Column="1" Padding="0,0,4,0">
|
||||||
<ui:Button Content="Save" Appearance="Primary" />
|
<ui:Button Content="{Binding ConfirmButtonText, Mode=OneTime}" Appearance="Primary" Command="{Binding ConfirmSettingsCommand, Mode=OneWay}" />
|
||||||
</StatusBarItem>
|
</StatusBarItem>
|
||||||
<StatusBarItem Grid.Column="2" Padding="4,0,0,0">
|
<StatusBarItem Grid.Column="2" Padding="4,0,0,0">
|
||||||
<ui:Button Content="Cancel" />
|
<ui:Button Content="Cancel" Command="{Binding CloseWindowCommand, Mode=OneWay}" />
|
||||||
</StatusBarItem>
|
</StatusBarItem>
|
||||||
</StatusBar>
|
</StatusBar>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
@ -2,7 +2,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using Wpf.Ui.Controls.Interfaces;
|
using Wpf.Ui.Controls.Interfaces;
|
||||||
using Wpf.Ui.Mvvm.Contracts;
|
using Wpf.Ui.Mvvm.Contracts;
|
||||||
|
using Bloxstrap.Enums;
|
||||||
|
using Bloxstrap.ViewModels;
|
||||||
using Wpf.Ui.Mvvm.Services;
|
using Wpf.Ui.Mvvm.Services;
|
||||||
|
using Wpf.Ui.Appearance;
|
||||||
|
|
||||||
namespace Bloxstrap.Views
|
namespace Bloxstrap.Views
|
||||||
{
|
{
|
||||||
@ -11,11 +14,26 @@ namespace Bloxstrap.Views
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class MainWindow : INavigationWindow
|
public partial class MainWindow : INavigationWindow
|
||||||
{
|
{
|
||||||
|
private readonly IThemeService _themeService = new ThemeService();
|
||||||
|
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
{
|
{
|
||||||
|
DataContext = new MainWindowViewModel(this);
|
||||||
|
SetTheme();
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetTheme()
|
||||||
|
{
|
||||||
|
var theme = ThemeType.Light;
|
||||||
|
|
||||||
|
if (App.Settings.Theme.GetFinal() == Enums.Theme.Dark)
|
||||||
|
theme = ThemeType.Dark;
|
||||||
|
|
||||||
|
_themeService.SetTheme(theme);
|
||||||
|
_themeService.SetSystemAccent();
|
||||||
|
}
|
||||||
|
|
||||||
#region INavigationWindow methods
|
#region INavigationWindow methods
|
||||||
|
|
||||||
public Frame GetFrame() => RootFrame;
|
public Frame GetFrame() => RootFrame;
|
||||||
|
@ -28,14 +28,18 @@
|
|||||||
<ColumnDefinition Width="Auto" />
|
<ColumnDefinition Width="Auto" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<TextBlock Grid.Column="0" Text="Bloxstrap" Margin="0,0,4,0" FontSize="24" FontWeight="Medium" />
|
<TextBlock Grid.Column="0" Text="Bloxstrap" Margin="0,0,4,0" FontSize="24" FontWeight="Medium" />
|
||||||
<TextBlock Grid.Column="1" Text="Version 2.0.0" Margin="4,0,0,2" VerticalAlignment="Bottom" FontSize="16" FontWeight="Medium" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock Grid.Column="1" Text="{Binding Version, Mode=OneTime}" Margin="4,0,0,2" VerticalAlignment="Bottom" FontSize="16" FontWeight="Medium" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<TextBlock Text="An open-source, feature-packed alternative bootstrapper for Roblox" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock Text="An open-source, feature-packed alternative bootstrapper for Roblox" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
<TextBlock Text="Developed by pizzaboxer - if this is useful, please consider leaving a star on GitHub!" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock Text="Developed by pizzaboxer - if you like this, please consider leaving a star on GitHub!" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
<StackPanel Orientation="Horizontal">
|
||||||
|
<ui:Anchor Margin="0,16,4,0" Content="GitHub Repository" Icon="Code24" NavigateUri="https://github.com/pizzaboxer/bloxstrap" />
|
||||||
|
<ui:Anchor Margin="4,16,4,0" Content="Report an issue" Icon="Chat48" NavigateUri="https://github.com/pizzaboxer/bloxstrap/issues" />
|
||||||
|
<ui:Anchor Margin="4,16,0,0" Content="Latest Releases" Icon="ArrowDownload48" NavigateUri="https://github.com/pizzaboxer/bloxstrap/releases" />
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
<!--not enough contributors to be worth doing this yet-->
|
|
||||||
<TextBlock Text="Contributions" FontWeight="Medium" FontSize="20" Margin="0,16,0,0" />
|
<TextBlock Text="Contributions" FontWeight="Medium" FontSize="20" Margin="0,16,0,0" />
|
||||||
<TextBlock Text="These are the people who have made notable contributions to Bloxstrap, helping make it what it is." TextWrapping="Wrap" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock Text="These are the people who have made notable contributions to Bloxstrap, helping make it what it is." TextWrapping="Wrap" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
<Grid Column="0" Margin="0,16,0,0">
|
<Grid Column="0" Margin="0,16,0,0">
|
||||||
@ -43,22 +47,26 @@
|
|||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
|
<RowDefinition Height="*" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="Auto" />
|
<ColumnDefinition Width="Auto" />
|
||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<TextBlock Grid.Row="0" Grid.Column="0" Margin="0,0,16,8" FontSize="14" FontWeight="Medium" Text="Multako" />
|
<TextBlock Grid.Row="0" Grid.Column="0" Margin="0,0,16,8" FontSize="14" FontWeight="Medium"><Hyperlink Foreground="{DynamicResource TextFillColorPrimaryBrush}" Command="{Binding OpenWebpageCommand}" CommandParameter="https://www.roblox.com/users/2485612194/profile">Multako</Hyperlink></TextBlock>
|
||||||
<TextBlock Grid.Row="0" Grid.Column="1" Margin="0,0,0,8" VerticalAlignment="Bottom" Text="Designing the Bloxstrap logo" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock Grid.Row="0" Grid.Column="1" Margin="0,0,0,8" VerticalAlignment="Bottom" Text="Designing the Bloxstrap logo" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
|
|
||||||
<TextBlock Grid.Row="1" Grid.Column="0" Margin="0,0,16,8" FontSize="14" FontWeight="Medium" Text="bluepilledgreat" />
|
<TextBlock Grid.Row="1" Grid.Column="0" Margin="0,0,16,8" FontSize="14" FontWeight="Medium"><Hyperlink Foreground="{DynamicResource TextFillColorPrimaryBrush}" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/bluepilledgreat">bluepilledgreat</Hyperlink></TextBlock>
|
||||||
<TextBlock Grid.Row="1" Grid.Column="1" Margin="0,0,0,8" VerticalAlignment="Bottom" Text="Helping with bootstrapper functionality and UX" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock Grid.Row="1" Grid.Column="1" Margin="0,0,0,8" VerticalAlignment="Bottom" Text="Helping with bootstrapper functionality and UX" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
|
|
||||||
<TextBlock Grid.Row="2" Grid.Column="0" Margin="0,0,16,0" FontSize="14" FontWeight="Medium" Text="sitiom" />
|
<TextBlock Grid.Row="2" Grid.Column="0" Margin="0,0,16,8" FontSize="14" FontWeight="Medium"><Hyperlink Foreground="{DynamicResource TextFillColorPrimaryBrush}" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/1011025m">1011025m</Hyperlink></TextBlock>
|
||||||
<TextBlock Grid.Row="2" Grid.Column="1" Margin="0,0,0,0" VerticalAlignment="Bottom" Text="Setting up GitHub CI workflows and Winget releases" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock Grid.Row="2" Grid.Column="1" Margin="0,0,0,8" VerticalAlignment="Bottom" Text="Providing a method for disabling the Roblox desktop app" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
|
|
||||||
|
<TextBlock Grid.Row="3" Grid.Column="0" Margin="0,0,16,0" FontSize="14" FontWeight="Medium"><Hyperlink Foreground="{DynamicResource TextFillColorPrimaryBrush}" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/sitiom">sitiom</Hyperlink></TextBlock>
|
||||||
|
<TextBlock Grid.Row="3" Grid.Column="1" Margin="0,0,0,0" VerticalAlignment="Bottom" Text="Setting up GitHub CI workflows and Winget releases" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<ui:Anchor Margin="0,16,0,0" Content="See all contributors" NavigateUri="https://github.com/pizzaboxer/bloxstrap/graphs/contributors" />
|
<ui:Anchor Margin="0,16,0,0" Content="See all code contributors" Icon="People48" NavigateUri="https://github.com/pizzaboxer/bloxstrap/graphs/contributors" />
|
||||||
|
|
||||||
<TextBlock Text="Licenses" FontWeight="Medium" FontSize="18" Margin="0,16,0,0" />
|
<TextBlock Text="Licenses" FontWeight="Medium" FontSize="18" Margin="0,16,0,0" />
|
||||||
<Grid>
|
<Grid>
|
||||||
@ -76,52 +84,51 @@
|
|||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<TextBlock Grid.Row="0" Grid.Column="0" Text="Bloxstrap" FontSize="14" TextWrapping="Wrap" Margin="0,8,0,0" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock Grid.Row="0" Grid.Column="0" Text="Bloxstrap" FontSize="14" TextWrapping="Wrap" Margin="0,8,0,0" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
<ui:CardAction Grid.Row="1" Grid.Column="0" Tag="messagebox" Margin="0,8,8,0" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/pizzaboxer/bloxstrap/blob/main/LICENSE">
|
<ui:CardAction Grid.Row="1" Grid.Column="0" Margin="0,8,8,0" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/pizzaboxer/bloxstrap/blob/main/LICENSE">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="Bloxstrap by pizzaboxer" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="Bloxstrap by pizzaboxer" />
|
||||||
<TextBlock FontSize="12" Text="MIT License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="MIT License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardAction>
|
</ui:CardAction>
|
||||||
<ui:CardAction Grid.Row="1" Grid.Column="1" Tag="messagebox" Margin="0,8,8,0" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/lepoco/wpfui/blob/main/LICENSE">
|
<ui:CardAction Grid.Row="1" Grid.Column="1" Margin="0,8,8,0" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/lepoco/wpfui/blob/main/LICENSE">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="WPF-UI by Lepoco" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="WPF-UI by lepoco" />
|
||||||
<TextBlock FontSize="12" Text="MIT License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="MIT License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardAction>
|
</ui:CardAction>
|
||||||
<ui:CardAction Grid.Row="1" Grid.Column="2" Tag="messagebox" Margin="0,8,0,0" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/securifybv/ShellLink/blob/master/LICENSE.txt">
|
<ui:CardAction Grid.Row="1" Grid.Column="2" Margin="0,8,0,0" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/securifybv/ShellLink/blob/master/LICENSE.txt">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="ShellLink by securifybv" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="ShellLink by securifybv" />
|
||||||
<TextBlock FontSize="12" Text="MIT License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="MIT License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardAction>
|
</ui:CardAction>
|
||||||
<ui:CardAction Grid.Row="2" Grid.Column="0" Tag="messagebox" Margin="0,8,8,0" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/rickyah/ini-parser/blob/development/LICENSE">
|
<ui:CardAction Grid.Row="2" Grid.Column="0" Margin="0,8,8,0" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/rickyah/ini-parser/blob/development/LICENSE">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="ini-parser by rickyah" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="ini-parser by rickyah" />
|
||||||
<TextBlock FontSize="12" Text="MIT License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="MIT License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardAction>
|
</ui:CardAction>
|
||||||
<!--should this be here? i only borrowed and modified three files, and each source file should have an appropriate copyright notice in the source-->
|
<ui:CardAction Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Margin="0,8,0,0" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/MaximumADHD/Roblox-Studio-Mod-Manager/blob/main/LICENSE">
|
||||||
<!--<ui:CardAction Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" Tag="messagebox" Margin="0,8,0,0" Command="{Binding OpenWebpageCommand}" CommandParameter="">
|
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="Roblox Studio Mod Manager by MaximumADHD" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="Roblox Studio Mod Manager by MaximumADHD" />
|
||||||
<TextBlock FontSize="12" Text="MIT License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="MIT License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardAction>-->
|
</ui:CardAction>
|
||||||
|
|
||||||
<TextBlock Grid.Row="3" Grid.Column="0" Text="Integrations" FontSize="14" TextWrapping="Wrap" Margin="0,8,0,0" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock Grid.Row="3" Grid.Column="0" Text="Integrations" FontSize="14" TextWrapping="Wrap" Margin="0,8,0,0" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
<ui:CardAction Grid.Row="4" Grid.Column="0" Tag="messagebox" Margin="0,8,8,0" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/Lachee/discord-rpc-csharp/blob/master/LICENSE">
|
<ui:CardAction Grid.Row="4" Grid.Column="0" Margin="0,8,8,0" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/Lachee/discord-rpc-csharp/blob/master/LICENSE">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="DiscordRPC by Lachee" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="DiscordRPC by Lachee" />
|
||||||
<TextBlock FontSize="12" Text="MIT License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="MIT License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardAction>
|
</ui:CardAction>
|
||||||
<ui:CardAction Grid.Row="4" Grid.Column="1" Tag="messagebox" Margin="0,8,8,0" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/crosire/reshade/blob/main/LICENSE.md">
|
<ui:CardAction Grid.Row="4" Grid.Column="1" Margin="0,8,8,0" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/crosire/reshade/blob/main/LICENSE.md">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="ReShade by crosire" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="ReShade by crosire" />
|
||||||
<TextBlock FontSize="12" Text="BSD 3-Clause License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="BSD 3-Clause License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardAction>
|
</ui:CardAction>
|
||||||
<ui:CardAction Grid.Row="4" Grid.Column="2" Tag="messagebox" Margin="0,8,0,0" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/axstin/rbxfpsunlocker/blob/master/LICENSE">
|
<ui:CardAction Grid.Row="4" Grid.Column="2" Margin="0,8,0,0" Command="{Binding OpenWebpageCommand}" CommandParameter="https://github.com/axstin/rbxfpsunlocker/blob/master/LICENSE">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="rbxfpsunlocker by axstin" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="rbxfpsunlocker by axstin" />
|
||||||
<TextBlock FontSize="12" Text="MIT License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="MIT License" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
|
@ -1,10 +1,4 @@
|
|||||||
using System.Diagnostics;
|
using Bloxstrap.ViewModels;
|
||||||
using System.Windows;
|
|
||||||
using System.Windows.Controls;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using Bloxstrap.Helpers;
|
|
||||||
using CommunityToolkit.Mvvm.Input;
|
|
||||||
using static System.Net.Mime.MediaTypeNames;
|
|
||||||
|
|
||||||
namespace Bloxstrap.Views.Pages
|
namespace Bloxstrap.Views.Pages
|
||||||
{
|
{
|
||||||
@ -15,21 +9,8 @@ namespace Bloxstrap.Views.Pages
|
|||||||
{
|
{
|
||||||
public AboutPage()
|
public AboutPage()
|
||||||
{
|
{
|
||||||
DataContext = new AboutPageViewModel();
|
DataContext = new AboutViewModel();
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AboutPageViewModel
|
|
||||||
{
|
|
||||||
public ICommand OpenWebpageCommand => new RelayCommand<string>(OpenWebpage);
|
|
||||||
|
|
||||||
private void OpenWebpage(string? location)
|
|
||||||
{
|
|
||||||
if (location is null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Utilities.OpenWebsite(location);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:models="clr-namespace:Bloxstrap.ViewModels"
|
||||||
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
d:DesignHeight="450" d:DesignWidth="800"
|
d:DesignHeight="450" d:DesignWidth="800"
|
||||||
@ -20,7 +21,7 @@
|
|||||||
<TextBlock FontSize="12" Text="Bloxstrap will check and automatically update itself when launching Roblox." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="Bloxstrap will check and automatically update itself when launching Roblox." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardControl.Header>
|
</ui:CardControl.Header>
|
||||||
<ui:ToggleSwitch />
|
<ui:ToggleSwitch IsChecked="{Binding UpdateCheckingEnabled, Mode=TwoWay}" />
|
||||||
</ui:CardControl>
|
</ui:CardControl>
|
||||||
<ui:CardControl Margin="0,8,0,0">
|
<ui:CardControl Margin="0,8,0,0">
|
||||||
<ui:CardControl.Header>
|
<ui:CardControl.Header>
|
||||||
@ -29,7 +30,7 @@
|
|||||||
<TextBlock FontSize="12" Text="Confirm if Roblox mandates a channel change on launch. Otherwise, it'll change automatically." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="Confirm if Roblox mandates a channel change on launch. Otherwise, it'll change automatically." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardControl.Header>
|
</ui:CardControl.Header>
|
||||||
<ui:ToggleSwitch />
|
<ui:ToggleSwitch IsChecked="{Binding ChannelChangePromptingEnabled, Mode=TwoWay}" />
|
||||||
</ui:CardControl>
|
</ui:CardControl>
|
||||||
|
|
||||||
<!--should this all be in a collapsed panel like how channel settings are? that might be better, idk-->
|
<!--should this all be in a collapsed panel like how channel settings are? that might be better, idk-->
|
||||||
@ -41,7 +42,7 @@
|
|||||||
<TextBlock FontSize="12" Text="Dark theme does not apply to Legacy or Vista styles." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="Dark theme does not apply to Legacy or Vista styles." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardControl.Header>
|
</ui:CardControl.Header>
|
||||||
<ComboBox />
|
<ComboBox Width="200" Padding="10,5,10,5" ItemsSource="{Binding Themes.Keys, Mode=OneTime}" Text="{Binding Theme, Mode=TwoWay}" />
|
||||||
</ui:CardControl>
|
</ui:CardControl>
|
||||||
<ui:CardControl Margin="0,8,0,0">
|
<ui:CardControl Margin="0,8,0,0">
|
||||||
<ui:CardControl.Header>
|
<ui:CardControl.Header>
|
||||||
@ -50,7 +51,7 @@
|
|||||||
<TextBlock FontSize="12" Text="Choose how the bootstrapper should look." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="Choose how the bootstrapper should look." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardControl.Header>
|
</ui:CardControl.Header>
|
||||||
<ComboBox />
|
<ComboBox Width="200" Padding="10,5,10,5" ItemsSource="{Binding Dialogs.Keys, Mode=OneTime}" Text="{Binding Dialog, Mode=TwoWay}" />
|
||||||
</ui:CardControl>
|
</ui:CardControl>
|
||||||
<ui:CardControl Margin="0,8,0,0">
|
<ui:CardControl Margin="0,8,0,0">
|
||||||
<ui:CardControl.Header>
|
<ui:CardControl.Header>
|
||||||
@ -59,8 +60,8 @@
|
|||||||
<TextBlock FontSize="12" Text="Choose what icon the bootstrapper should use." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="Choose what icon the bootstrapper should use." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardControl.Header>
|
</ui:CardControl.Header>
|
||||||
<ComboBox />
|
<ComboBox Width="200" Padding="10,5,10,5" ItemsSource="{Binding Icons.Keys, Mode=OneTime}" Text="{Binding Icon, Mode=TwoWay}" />
|
||||||
</ui:CardControl>
|
</ui:CardControl>
|
||||||
<ui:Button Content="Preview" HorizontalAlignment="Stretch" Margin="0,8,0,0" />
|
<ui:Button Content="Preview" HorizontalAlignment="Stretch" Margin="0,8,0,0" Command="{Binding PreviewBootstrapperCommand}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:UiPage>
|
</ui:UiPage>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
namespace Bloxstrap.Views.Pages
|
using Bloxstrap.ViewModels;
|
||||||
|
|
||||||
|
namespace Bloxstrap.Views.Pages
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Interaction logic for BootstrapperPage.xaml
|
/// Interaction logic for BootstrapperPage.xaml
|
||||||
@ -7,6 +9,7 @@
|
|||||||
{
|
{
|
||||||
public BootstrapperPage()
|
public BootstrapperPage()
|
||||||
{
|
{
|
||||||
|
DataContext = new BootstrapperViewModel(this);
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
Scrollable="True">
|
Scrollable="True">
|
||||||
|
|
||||||
<StackPanel Margin="0,0,14,14">
|
<StackPanel Margin="0,0,14,14">
|
||||||
<TextBlock Text="Configure how Bloxstrap and Roblox is installed." FontSize="14" Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
<TextBlock Text="Configure how Bloxstrap and Roblox are installed." FontSize="14" Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
||||||
|
|
||||||
<ui:CardExpander Margin="0,16,0,0">
|
<ui:CardExpander Margin="0,16,0,0">
|
||||||
<ui:CardExpander.Header>
|
<ui:CardExpander.Header>
|
||||||
@ -24,8 +24,8 @@
|
|||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
<ColumnDefinition Width="Auto" />
|
<ColumnDefinition Width="Auto" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<TextBox Grid.Column="0" Margin="0,0,4,0" />
|
<TextBox Grid.Column="0" Margin="0,0,4,0" Text="{Binding InstallLocation, Mode=TwoWay}" />
|
||||||
<ui:Button Grid.Column="1" Margin="4,0,0,0" Height="35" Icon="Folder24" Content="Browse" />
|
<ui:Button Grid.Column="1" Margin="4,0,0,0" Height="35" Icon="Folder24" Content="Browse" Command="{Binding BrowseInstallLocationCommand}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</ui:CardExpander>
|
</ui:CardExpander>
|
||||||
|
|
||||||
@ -36,7 +36,7 @@
|
|||||||
<TextBlock FontSize="12" Text="Bloxstrap will place an icon on the desktop that launches Roblox." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="Bloxstrap will place an icon on the desktop that launches Roblox." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardControl.Header>
|
</ui:CardControl.Header>
|
||||||
<ui:ToggleSwitch />
|
<ui:ToggleSwitch IsChecked="{Binding CreateDesktopIcon, Mode=TwoWay}" />
|
||||||
</ui:CardControl>
|
</ui:CardControl>
|
||||||
|
|
||||||
<ui:CardExpander Margin="0,8,0,0">
|
<ui:CardExpander Margin="0,8,0,0">
|
||||||
@ -50,7 +50,7 @@
|
|||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="Channel" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="Channel" />
|
||||||
<TextBlock FontSize="12" Text="Choose which release channel to download Roblox from." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="Choose which release channel to download Roblox from." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<ComboBox Grid.Column="1" Margin="8,0,8,0" />
|
<ComboBox Grid.Column="1" Margin="8,0,8,0" Padding="10,5,10,5" Width="200" ItemsSource="{Binding Channels, Mode=OneWay}" Text="{Binding Channel, Mode=TwoWay}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</ui:CardExpander.Header>
|
</ui:CardExpander.Header>
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
@ -60,6 +60,16 @@
|
|||||||
<ColumnDefinition Width="Auto" />
|
<ColumnDefinition Width="Auto" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Grid Column="0" Margin="0,0,4,0">
|
<Grid Column="0" Margin="0,0,4,0">
|
||||||
|
<Grid.Style>
|
||||||
|
<Style>
|
||||||
|
<Setter Property="Grid.Visibility" Value="Visible"/>
|
||||||
|
<Style.Triggers>
|
||||||
|
<DataTrigger Binding="{Binding ChannelDeployInfo}" Value="{x:Null}">
|
||||||
|
<Setter Property="Grid.Visibility" Value="Collapsed" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
</Grid.Style>
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
@ -71,15 +81,34 @@
|
|||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
|
|
||||||
<TextBlock Grid.Row="0" Grid.Column="0" Margin="0,0,16,8" VerticalAlignment="Center" Text="Version" />
|
<TextBlock Grid.Row="0" Grid.Column="0" Margin="0,0,16,8" VerticalAlignment="Center" Text="Version" />
|
||||||
<TextBlock Grid.Row="0" Grid.Column="1" Text="v0.560.0.5600365" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock Grid.Row="0" Grid.Column="1" Foreground="{DynamicResource TextFillColorTertiaryBrush}" Text="{Binding ChannelDeployInfo.Version, Mode=OneWay}" />
|
||||||
|
|
||||||
<TextBlock Grid.Row="1" Grid.Column="0" Margin="0,0,16,8" VerticalAlignment="Center" Text="Hash" />
|
<TextBlock Grid.Row="1" Grid.Column="0" Margin="0,0,16,8" VerticalAlignment="Center" Text="VersionGuid" />
|
||||||
<TextBlock Grid.Row="1" Grid.Column="1" Text="version-41dcbd77dbcf416f" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock Grid.Row="1" Grid.Column="1" Foreground="{DynamicResource TextFillColorTertiaryBrush}" Text="{Binding ChannelDeployInfo.VersionGuid, Mode=OneWay}" />
|
||||||
|
|
||||||
<TextBlock Grid.Row="2" Grid.Column="0" Margin="0,0,16,0" VerticalAlignment="Center" Text="Deployed" />
|
<TextBlock Grid.Row="2" Grid.Column="0" Margin="0,0,16,0" VerticalAlignment="Center" Text="Deployed" />
|
||||||
<TextBlock Grid.Row="2" Grid.Column="1" Text="January 25 2023 at 6:03:48 PM" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock Grid.Row="2" Grid.Column="1" Foreground="{DynamicResource TextFillColorTertiaryBrush}" Text="{Binding ChannelDeployInfo.Timestamp, Mode=OneWay}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<CheckBox Grid.Column="1" Margin="4,0,0,0" Content="Show all available channels" VerticalAlignment="Top" />
|
<Grid Column="0">
|
||||||
|
<Grid.Style>
|
||||||
|
<Style>
|
||||||
|
<Setter Property="Grid.Visibility" Value="Collapsed"/>
|
||||||
|
<Style.Triggers>
|
||||||
|
<DataTrigger Binding="{Binding ChannelDeployInfo}" Value="{x:Null}">
|
||||||
|
<Setter Property="Grid.Visibility" Value="Visible" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
</Grid.Style>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
<ColumnDefinition Width="*" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<ui:ProgressRing Grid.Column="0" Margin="6" IsIndeterminate="True" />
|
||||||
|
<TextBlock Grid.Column="1" Margin="16" VerticalAlignment="Center" Text="Fetching latest deploy info, please wait..." />
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<CheckBox Grid.Column="1" Margin="4,0,0,0" Content="Show all available channels" VerticalAlignment="Top" IsChecked="{Binding ShowAllChannels, Mode=TwoWay}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardExpander>
|
</ui:CardExpander>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
namespace Bloxstrap.Views.Pages
|
using Bloxstrap.ViewModels;
|
||||||
|
|
||||||
|
namespace Bloxstrap.Views.Pages
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Interaction logic for InstallationPage.xaml
|
/// Interaction logic for InstallationPage.xaml
|
||||||
@ -7,6 +9,7 @@
|
|||||||
{
|
{
|
||||||
public InstallationPage()
|
public InstallationPage()
|
||||||
{
|
{
|
||||||
|
DataContext = new InstallationViewModel();
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,15 @@
|
|||||||
<ui:UiPage x:Class="Bloxstrap.Views.Pages.IntegrationsPage"
|
<ui:UiPage x:Class="Bloxstrap.Views.Pages.IntegrationsPage"
|
||||||
|
x:Name="IntegrationsPageView"
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:models="clr-namespace:Bloxstrap.ViewModels"
|
||||||
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
d:DesignHeight="450" d:DesignWidth="800"
|
d:DesignHeight="680" d:DesignWidth="800"
|
||||||
Title="IntegrationsPage"
|
Title="IntegrationsPage"
|
||||||
Scrollable="True">
|
Scrollable="True">
|
||||||
|
|
||||||
<StackPanel Margin="0,0,14,14">
|
<StackPanel Margin="0,0,14,14">
|
||||||
<TextBlock Text="Configure quick and easy ways to improve the Roblox gameplay experience." FontSize="14" Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
<TextBlock Text="Configure quick and easy ways to improve the Roblox gameplay experience." FontSize="14" Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
||||||
|
|
||||||
@ -20,16 +21,16 @@
|
|||||||
<TextBlock FontSize="12" Text="The game you're playing on Roblox will show on your Discord activity." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="The game you're playing on Roblox will show on your Discord activity." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardControl.Header>
|
</ui:CardControl.Header>
|
||||||
<ui:ToggleSwitch />
|
<ui:ToggleSwitch x:Name="DiscordActivityEnabledToggle" IsChecked="{Binding DiscordActivityEnabled, Mode=TwoWay}" />
|
||||||
</ui:CardControl>
|
</ui:CardControl>
|
||||||
<ui:CardControl Margin="0,8,0,0">
|
<ui:CardControl Margin="0,8,0,0" IsEnabled="{Binding IsChecked, ElementName=DiscordActivityEnabledToggle, Mode=OneWay}">
|
||||||
<ui:CardControl.Header>
|
<ui:CardControl.Header>
|
||||||
<StackPanel Grid.Column="0">
|
<StackPanel Grid.Column="0">
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="Allow activity joining" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="Allow activity joining" />
|
||||||
<TextBlock FontSize="12" Text="When enabled, anyone can join your game through your Discord activity." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="When enabled, anyone can join your game through your Discord activity." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardControl.Header>
|
</ui:CardControl.Header>
|
||||||
<ui:ToggleSwitch />
|
<ui:ToggleSwitch IsChecked="{Binding DiscordActivityJoinEnabled, Mode=TwoWay}" />
|
||||||
</ui:CardControl>
|
</ui:CardControl>
|
||||||
|
|
||||||
<TextBlock Text="ReShade" FontSize="16" FontWeight="Medium" Margin="0,16,0,0" />
|
<TextBlock Text="ReShade" FontSize="16" FontWeight="Medium" Margin="0,16,0,0" />
|
||||||
@ -40,54 +41,78 @@
|
|||||||
<TextBlock FontSize="12" Text="Reshade is a post-processing injector that enables the use of shaders." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="Reshade is a post-processing injector that enables the use of shaders." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardControl.Header>
|
</ui:CardControl.Header>
|
||||||
<ui:ToggleSwitch />
|
<ui:ToggleSwitch x:Name="ReShadeEnabledToggle" IsChecked="{Binding ReShadeEnabled, Mode=TwoWay}" />
|
||||||
</ui:CardControl>
|
</ui:CardControl>
|
||||||
<ui:CardControl Margin="0,8,0,0">
|
<ui:CardControl Margin="0,8,0,0" IsEnabled="{Binding IsChecked, ElementName=ReShadeEnabledToggle, Mode=OneWay}">
|
||||||
<ui:CardControl.Header>
|
<ui:CardControl.Header>
|
||||||
<StackPanel Grid.Column="0">
|
<StackPanel Grid.Column="0">
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="Use Extravi's shader presets" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="Use Extravi's shader presets" />
|
||||||
<TextBlock FontSize="12" Text="ReShade presets made specifically for Roblox that enhance your graphics." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="ReShade presets made specifically for Roblox that enhance your graphics." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardControl.Header>
|
</ui:CardControl.Header>
|
||||||
<ui:ToggleSwitch />
|
<ui:ToggleSwitch IsChecked="{Binding ReShadePresetsEnabled, Mode=TwoWay}" />
|
||||||
</ui:CardControl>
|
</ui:CardControl>
|
||||||
<Grid>
|
<Grid>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
<ColumnDefinition Width="*" />
|
<ColumnDefinition Width="*" />
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<ui:CardAction Grid.Column="0" Margin="0,8,4,0" Icon="Folder24" Tag="messagebox">
|
<ui:CardAction Grid.Column="0" Margin="0,8,4,0" Icon="Folder24" Command="{Binding OpenReShadeFolderCommand}" IsEnabled="{Binding CanOpenReShadeFolder}">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="Open ReShade Folder" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="Open ReShade Folder">
|
||||||
<TextBlock FontSize="12" Text="Shaders and screenshots are stored here" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<!--this is so fucking stupid the disabled state of the cardaction doesnt change the header text colour-->
|
||||||
|
<TextBlock.Style>
|
||||||
|
<Style>
|
||||||
|
<Style.Triggers>
|
||||||
|
<DataTrigger Binding="{Binding CanOpenReShadeFolder}" Value="False">
|
||||||
|
<Setter Property="TextBlock.Foreground" Value="{DynamicResource TextFillColorDisabledBrush}" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
</TextBlock.Style>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock FontSize="12" Foreground="{DynamicResource TextFillColorTertiaryBrush}">
|
||||||
|
<TextBlock.Style>
|
||||||
|
<Style>
|
||||||
|
<Setter Property="TextBlock.Text" Value="Shaders and screenshots are stored here."/>
|
||||||
|
<Style.Triggers>
|
||||||
|
<DataTrigger Binding="{Binding CanOpenReShadeFolder}" Value="False">
|
||||||
|
<Setter Property="TextBlock.Text" Value="Bloxstrap must first be installed." />
|
||||||
|
</DataTrigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
</TextBlock.Style>
|
||||||
|
</TextBlock>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardAction>
|
</ui:CardAction>
|
||||||
<ui:CardAction Grid.Column="1" Margin="4,8,0,0" Icon="BookQuestionMark24" Tag="messagebox" Click="NavigateReShadeHelp">
|
<ui:CardAction Grid.Column="1" Margin="4,8,0,0" Icon="BookQuestionMark24" Command="{Binding ShowReShadeHelpCommand}">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="Help" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="Help" />
|
||||||
<TextBlock FontSize="12" Text="See help information on using ReShade" Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="12" Text="See help information on using ReShade." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardAction>
|
</ui:CardAction>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<TextBlock Text="FPS Unlocking" FontSize="16" FontWeight="Medium" Margin="0,16,0,0" />
|
<StackPanel x:Name="RbxFpsUnlockerOptions">
|
||||||
<ui:CardControl Margin="0,8,0,0">
|
<TextBlock Text="FPS Unlocking" FontSize="16" FontWeight="Medium" Margin="0,16,0,0" />
|
||||||
<ui:CardControl.Header>
|
<ui:CardControl Margin="0,8,0,0">
|
||||||
<StackPanel Grid.Column="0">
|
<ui:CardControl.Header>
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="Use axstin's rbxfpsunlocker" />
|
<StackPanel Grid.Column="0">
|
||||||
<TextBlock FontSize="12" Text="rbxfpsunlocker removes Roblox's 60FPS cap and will launch alongside Roblox." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="Use axstin's rbxfpsunlocker" />
|
||||||
</StackPanel>
|
<TextBlock FontSize="12" Text="rbxfpsunlocker removes Roblox's 60FPS cap and will launch alongside Roblox." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</ui:CardControl.Header>
|
</StackPanel>
|
||||||
<ui:ToggleSwitch />
|
</ui:CardControl.Header>
|
||||||
</ui:CardControl>
|
<ui:ToggleSwitch x:Name="RbxFpsUnlockerEnabledToggle" IsChecked="{Binding RbxFpsUnlockerEnabled, Mode=TwoWay}" />
|
||||||
<ui:CardControl Margin="0,8,0,0">
|
</ui:CardControl>
|
||||||
<ui:CardControl.Header>
|
<ui:CardControl Margin="0,8,0,0" IsEnabled="{Binding IsChecked, ElementName=RbxFpsUnlockerEnabledToggle, Mode=OneWay}">
|
||||||
<StackPanel Grid.Column="0">
|
<ui:CardControl.Header>
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="Stop when Roblox closes" />
|
<StackPanel Grid.Column="0">
|
||||||
<TextBlock FontSize="12" Text="rbxfpsunlocker will automatically close when Roblox closes." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="Stop when Roblox closes" />
|
||||||
</StackPanel>
|
<TextBlock FontSize="12" Text="rbxfpsunlocker will automatically close when Roblox closes." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</ui:CardControl.Header>
|
</StackPanel>
|
||||||
<ui:ToggleSwitch />
|
</ui:CardControl.Header>
|
||||||
</ui:CardControl>
|
<ui:ToggleSwitch IsChecked="{Binding RbxFpsUnlockerAutocloseEnabled, Mode=TwoWay}" />
|
||||||
|
</ui:CardControl>
|
||||||
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:UiPage>
|
</ui:UiPage>
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using Wpf.Ui.Common.Interfaces;
|
using Bloxstrap.ViewModels;
|
||||||
using Wpf.Ui.Mvvm.Contracts;
|
|
||||||
using Wpf.Ui.Mvvm.Interfaces;
|
|
||||||
|
|
||||||
namespace Bloxstrap.Views.Pages
|
namespace Bloxstrap.Views.Pages
|
||||||
{
|
{
|
||||||
@ -14,12 +11,12 @@ namespace Bloxstrap.Views.Pages
|
|||||||
{
|
{
|
||||||
public IntegrationsPage()
|
public IntegrationsPage()
|
||||||
{
|
{
|
||||||
|
DataContext = new IntegrationsViewModel(this);
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
|
||||||
|
|
||||||
private void NavigateReShadeHelp(object sender, EventArgs e)
|
// rbxfpsunlocker does not have 64 bit support
|
||||||
{
|
if (!Environment.Is64BitOperatingSystem)
|
||||||
((INavigationWindow)Window.GetWindow(this)!).Navigate(typeof(ReShadeHelpPage));
|
this.RbxFpsUnlockerOptions.Visibility = Visibility.Collapsed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,19 +3,41 @@
|
|||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:models="clr-namespace:Bloxstrap.ViewModels"
|
||||||
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
d:DesignHeight="450" d:DesignWidth="800"
|
d:DesignHeight="450" d:DesignWidth="800"
|
||||||
Title="ModsPage"
|
Title="ModsPage"
|
||||||
Scrollable="True">
|
Scrollable="True">
|
||||||
|
|
||||||
<StackPanel Margin="0,0,14,14">
|
<StackPanel Margin="0,0,14,14">
|
||||||
<TextBlock Text="Manage and apply file mods to the Roblox game client." FontSize="14" Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
<TextBlock Text="Manage and apply file mods to the Roblox game client." FontSize="14" Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
||||||
|
|
||||||
<ui:CardAction Grid.Column="0" Margin="0,16,0,0" Icon="Folder24" Tag="messagebox">
|
<ui:CardAction Grid.Column="0" Margin="0,16,0,0" Icon="Folder24" Command="{Binding OpenModsFolderCommand}" IsEnabled="{Binding CanOpenModsFolder, Mode=OneTime}">
|
||||||
<StackPanel>
|
<StackPanel>
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="Open Mods Folder" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="Open Mods Folder">
|
||||||
<TextBlock FontSize="12" Text="This folder contains all the file mods applied to Roblox. See below for more info." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
<!--this is so fucking stupid the disabled state of the cardaction doesnt change the header text colour-->
|
||||||
|
<TextBlock.Style>
|
||||||
|
<Style>
|
||||||
|
<Style.Triggers>
|
||||||
|
<DataTrigger Binding="{Binding CanOpenModsFolder, Mode=OneTime}" Value="False">
|
||||||
|
<Setter Property="TextBlock.Foreground" Value="{DynamicResource TextFillColorDisabledBrush}" />
|
||||||
|
</DataTrigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
</TextBlock.Style>
|
||||||
|
</TextBlock>
|
||||||
|
<TextBlock FontSize="12" Foreground="{DynamicResource TextFillColorTertiaryBrush}">
|
||||||
|
<TextBlock.Style>
|
||||||
|
<Style>
|
||||||
|
<Setter Property="TextBlock.Text" Value="This folder contains all the file mods applied to Roblox. See below for more info."/>
|
||||||
|
<Style.Triggers>
|
||||||
|
<DataTrigger Binding="{Binding CanOpenModsFolder, Mode=OneTime}" Value="False">
|
||||||
|
<Setter Property="TextBlock.Text" Value="Bloxstrap must first be installed before accessing this folder. See below for what it does." />
|
||||||
|
</DataTrigger>
|
||||||
|
</Style.Triggers>
|
||||||
|
</Style>
|
||||||
|
</TextBlock.Style>
|
||||||
|
</TextBlock>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardAction>
|
</ui:CardAction>
|
||||||
|
|
||||||
@ -34,31 +56,34 @@
|
|||||||
<ui:CardControl.Header>
|
<ui:CardControl.Header>
|
||||||
<StackPanel Grid.Column="0">
|
<StackPanel Grid.Column="0">
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="Use old death sound" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="Use old death sound" />
|
||||||
|
<TextBlock FontSize="12" Text="Bring back the classic 'oof' death sound." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardControl.Header>
|
</ui:CardControl.Header>
|
||||||
<ui:ToggleSwitch />
|
<ui:ToggleSwitch IsChecked="{Binding OldDeathSoundEnabled, Mode=TwoWay}" />
|
||||||
</ui:CardControl>
|
</ui:CardControl>
|
||||||
<ui:CardControl Grid.Row="0" Grid.Column="1" Margin="4,8,0,0">
|
<ui:CardControl Grid.Row="0" Grid.Column="1" Margin="4,8,0,0">
|
||||||
<ui:CardControl.Header>
|
<ui:CardControl.Header>
|
||||||
<StackPanel Grid.Column="0">
|
<StackPanel Grid.Column="0">
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="Use old mouse cursor" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="Use old mouse cursor" />
|
||||||
|
<TextBlock FontSize="12" Text="Use the pre-2022 style mouse cursor." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardControl.Header>
|
</ui:CardControl.Header>
|
||||||
<ui:ToggleSwitch />
|
<ui:ToggleSwitch IsChecked="{Binding OldMouseCursorEnabled, Mode=TwoWay}" />
|
||||||
</ui:CardControl>
|
</ui:CardControl>
|
||||||
|
|
||||||
<ui:CardControl Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Margin="0,8,0,0">
|
<ui:CardControl Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Margin="0,8,0,0">
|
||||||
<ui:CardControl.Header>
|
<ui:CardControl.Header>
|
||||||
<StackPanel Grid.Column="0">
|
<StackPanel Grid.Column="0">
|
||||||
<TextBlock FontSize="13" FontWeight="Medium" Text="Disable desktop app" />
|
<TextBlock FontSize="13" FontWeight="Medium" Text="Disable desktop app" />
|
||||||
|
<TextBlock FontSize="12" Text="Stops the desktop app from showing when launching Roblox or leaving a game." Foreground="{DynamicResource TextFillColorTertiaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:CardControl.Header>
|
</ui:CardControl.Header>
|
||||||
<ui:ToggleSwitch />
|
<ui:ToggleSwitch IsChecked="{Binding DisableAppPatchEnabled, Mode=TwoWay}" />
|
||||||
</ui:CardControl>
|
</ui:CardControl>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<TextBlock Text="Adding your own mods" FontSize="16" FontWeight="Medium" Margin="0,16,0,0" />
|
<TextBlock Text="Adding your own mods" FontSize="16" FontWeight="Medium" Margin="0,16,0,0" />
|
||||||
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="The Modifications folder is where you can apply modifications to Roblox files while ensuring that they're preserved whenever Roblox updates." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="The Mods folder is where you can apply modifications to Roblox files while ensuring that they're preserved whenever Roblox updates." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
||||||
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="For example, placing a file at Modifications\content\sounds\ouch.ogg will automatically copy to and overwrite the file at Versions\Version-id\content\sounds\ouch.ogg. In this case, it replaces the death sound, which the old death sound preset does." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="For example, placing a file at Modifications\content\sounds\ouch.ogg will automatically copy to and overwrite the file at Versions\Version-id\content\sounds\ouch.ogg. In this case, it replaces the death sound, which the old death sound preset does." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
||||||
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="When you remove a file, Bloxstrap restores the original version of the file the next time Roblox launches." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="When you remove a file, Bloxstrap restores the original version of the file the next time Roblox launches." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
||||||
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="The folder is also used for handling mod presets and files for integrations like ReShade, so if you find any files or folders that already exist, you can safely ignore them." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="The folder is also used for handling mod presets and files for integrations like ReShade, so if you find any files or folders that already exist, you can safely ignore them." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
using System;
|
using Bloxstrap.ViewModels;
|
||||||
using System.Windows;
|
|
||||||
using Wpf.Ui.Mvvm.Contracts;
|
|
||||||
|
|
||||||
namespace Bloxstrap.Views.Pages
|
namespace Bloxstrap.Views.Pages
|
||||||
{
|
{
|
||||||
@ -11,6 +9,7 @@ namespace Bloxstrap.Views.Pages
|
|||||||
{
|
{
|
||||||
public ModsPage()
|
public ModsPage()
|
||||||
{
|
{
|
||||||
|
DataContext = new ModsViewModel();
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
Scrollable="True">
|
Scrollable="True">
|
||||||
|
|
||||||
<StackPanel Margin="0,0,14,14">
|
<StackPanel Margin="0,0,14,14">
|
||||||
<TextBlock Text="Keyboard Controls" FontSize="20" FontWeight="Medium" />
|
<TextBlock Text="Keyboard Controls" FontSize="16" FontWeight="Medium" />
|
||||||
<Grid Column="0" Margin="0,8,0,0">
|
<Grid Column="0" Margin="0,8,0,0">
|
||||||
<Grid.RowDefinitions>
|
<Grid.RowDefinitions>
|
||||||
<RowDefinition Height="*" />
|
<RowDefinition Height="*" />
|
||||||
@ -36,9 +36,9 @@
|
|||||||
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="If you're using a laptop keyboard, you may have to hold down the Fn key when pressing F6." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="If you're using a laptop keyboard, you may have to hold down the Fn key when pressing F6." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
||||||
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="Any screenshots you take are saved to the Screenshots folder in the ReShade folder." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="Any screenshots you take are saved to the Screenshots folder in the ReShade folder." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
||||||
|
|
||||||
<TextBlock Text="Adding your own shaders and presets" FontSize="20" FontWeight="Medium" Margin="0,16,0,0" />
|
<TextBlock Text="Adding your own shaders and presets" FontSize="16" FontWeight="Medium" Margin="0,16,0,0" />
|
||||||
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="While Bloxstrap provides Extravi's ReShade presets as a great way to enhance Roblox's graphics, it also provides the ability to install custom shaders and presets." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="While Bloxstrap provides Extravi's ReShade presets as a great way to enhance Roblox's graphics, it also provides the ability to install custom shaders and presets." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
||||||
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="To install custom presets, just extract the necessary .ini files to the ReShade Presets folder. Though, you may also need to add additional shaders and textures." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="To install custom presets, just extract the necessary .ini files to the ReShade Presets folder. Though, you may also need to add additional shaders and textures." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
||||||
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="To install shaders (known as effects), extract the necessary files to the ReShade Shaders folder. The same goes for textures, where you extract them to the ReShade Textures folder. You could alternatively extract them to organized subfolders like how Bloxstrap does them, though you'll have to configure ReShade to look in these folders." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
<TextBlock HorizontalAlignment="Left" Margin="0,8,0,0" TextWrapping="Wrap" Text="To install shaders (known as effects), extract the necessary files to the ReShade Shaders folder. The same goes for textures, where you extract them to the ReShade Textures folder. You could alternatively extract them to organized subfolders like how Bloxstrap does them, though you'll have to configure ReShade to look in those folders." Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</ui:UiPage>
|
</ui:UiPage>
|
||||||
|
79
Bloxstrap/app.manifest
Normal file
79
Bloxstrap/app.manifest
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||||
|
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
|
||||||
|
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
|
||||||
|
<security>
|
||||||
|
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||||
|
<!-- UAC Manifest Options
|
||||||
|
If you want to change the Windows User Account Control level replace the
|
||||||
|
requestedExecutionLevel node with one of the following.
|
||||||
|
|
||||||
|
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
||||||
|
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
|
||||||
|
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
|
||||||
|
|
||||||
|
Specifying requestedExecutionLevel element will disable file and registry virtualization.
|
||||||
|
Remove this element if your application requires this virtualization for backwards
|
||||||
|
compatibility.
|
||||||
|
-->
|
||||||
|
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
|
||||||
|
</requestedPrivileges>
|
||||||
|
</security>
|
||||||
|
</trustInfo>
|
||||||
|
|
||||||
|
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||||
|
<application>
|
||||||
|
<!-- A list of the Windows versions that this application has been tested on
|
||||||
|
and is designed to work with. Uncomment the appropriate elements
|
||||||
|
and Windows will automatically select the most compatible environment. -->
|
||||||
|
|
||||||
|
<!-- Windows Vista -->
|
||||||
|
<!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
|
||||||
|
|
||||||
|
<!-- Windows 7 -->
|
||||||
|
<!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->
|
||||||
|
|
||||||
|
<!-- Windows 8 -->
|
||||||
|
<!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->
|
||||||
|
|
||||||
|
<!-- Windows 8.1 -->
|
||||||
|
<!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->
|
||||||
|
|
||||||
|
<!-- Windows 10 -->
|
||||||
|
<!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->
|
||||||
|
|
||||||
|
</application>
|
||||||
|
</compatibility>
|
||||||
|
|
||||||
|
<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
|
||||||
|
DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
|
||||||
|
to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
|
||||||
|
also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config.
|
||||||
|
|
||||||
|
Makes the application long-path aware. See https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->
|
||||||
|
<!--
|
||||||
|
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||||
|
<windowsSettings>
|
||||||
|
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
|
||||||
|
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
|
||||||
|
</windowsSettings>
|
||||||
|
</application>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<dependentAssembly>
|
||||||
|
<assemblyIdentity
|
||||||
|
type="win32"
|
||||||
|
name="Microsoft.Windows.Common-Controls"
|
||||||
|
version="6.0.0.0"
|
||||||
|
processorArchitecture="*"
|
||||||
|
publicKeyToken="6595b64144ccf1df"
|
||||||
|
language="*"
|
||||||
|
/>
|
||||||
|
</dependentAssembly>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
</assembly>
|
Loading…
Reference in New Issue
Block a user