This commit is contained in:
Alessandro Autiero
2024-05-20 17:24:00 +02:00
parent 7c2caed16c
commit 9f5590d41c
562 changed files with 3303 additions and 156787 deletions

View File

@@ -1,16 +1,17 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:fluent_ui/fluent_ui.dart' as fluentUi show FluentIcons;
import 'package:fluent_ui/fluent_ui.dart' hide FluentIcons;
import 'package:fluentui_system_icons/fluentui_system_icons.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:reboot_common/common.dart';
import 'package:reboot_launcher/src/controller/matchmaker_controller.dart';
import 'package:reboot_launcher/src/dialog/implementation/data.dart';
import 'package:reboot_launcher/src/page/abstract/page.dart';
import 'package:reboot_launcher/src/page/abstract/page_setting.dart';
import 'package:reboot_launcher/src/page/abstract/page_type.dart';
import 'package:reboot_launcher/src/util/translations.dart';
import 'package:reboot_launcher/src/widget/common/setting_tile.dart';
import 'package:reboot_launcher/src/widget/server/start_button.dart';
import 'package:reboot_launcher/src/widget/server/type_selector.dart';
import 'package:reboot_launcher/src/widget/server_start_button.dart';
import 'package:reboot_launcher/src/widget/server_type_selector.dart';
import 'package:reboot_launcher/src/widget/setting_tile.dart';
import 'package:url_launcher/url_launcher.dart';
class MatchmakerPage extends RebootPage {
@@ -26,42 +27,10 @@ class MatchmakerPage extends RebootPage {
String get iconAsset => "assets/images/matchmaker.png";
@override
bool get hasButton => true;
bool hasButton(String? pageName) => pageName == null;
@override
RebootPageType get type => RebootPageType.matchmaker;
@override
List<PageSetting> get settings => [
PageSetting(
name: translations.matchmakerConfigurationName,
description: translations.matchmakerConfigurationDescription,
children: [
PageSetting(
name: translations.matchmakerConfigurationHostName,
description: translations.matchmakerConfigurationHostDescription
),
PageSetting(
name: translations.matchmakerConfigurationPortName,
description: translations.matchmakerConfigurationPortDescription
),
PageSetting(
name: translations.matchmakerConfigurationDetachedName,
description: translations.matchmakerConfigurationDetachedDescription
)
]
),
PageSetting(
name: translations.matchmakerInstallationDirectoryName,
description: translations.matchmakerInstallationDirectoryDescription,
content: translations.matchmakerInstallationDirectoryContent
),
PageSetting(
name: translations.matchmakerResetDefaultsName,
description: translations.matchmakerResetDefaultsDescription,
content: translations.matchmakerResetDefaultsContent
)
];
}
class _MatchmakerPageState extends RebootPageState<MatchmakerPage> {
@@ -74,89 +43,138 @@ class _MatchmakerPageState extends RebootPageState<MatchmakerPage> {
@override
List<Widget> get settings => [
_configuration,
_type,
_hostName,
_port,
_gameServerAddress,
_detached,
_installationDirectory,
_resetDefaults
];
Widget get _configuration => Obx(() => SettingTile(
title: translations.matchmakerConfigurationName,
subtitle: translations.matchmakerConfigurationDescription,
Widget get _detached => Obx(() {
if(_matchmakerController.type.value != ServerType.embedded) {
return const SizedBox.shrink();
}
return SettingTile(
icon: Icon(
FluentIcons.developer_board_24_regular
),
title: Text(translations.matchmakerConfigurationDetachedName),
subtitle: Text(translations.matchmakerConfigurationDetachedDescription),
contentWidth: null,
content: Row(
children: [
Text(
_matchmakerController.detached.value ? translations.on : translations.off
),
const SizedBox(
width: 16.0
),
ToggleSwitch(
checked: _matchmakerController.detached.value,
onChanged: (value) => _matchmakerController.detached.value = value
),
],
),
);
});
Widget get _gameServerAddress => Obx(() {
if(_matchmakerController.type.value != ServerType.embedded) {
return const SizedBox.shrink();
}
return SettingTile(
icon: Icon(
FluentIcons.stream_input_20_regular
),
title: Text(translations.matchmakerConfigurationAddressName),
subtitle: Text(translations.matchmakerConfigurationAddressDescription),
content: TextFormBox(
placeholder: translations.matchmakerConfigurationAddressName,
controller: _matchmakerController.gameServerAddress,
focusNode: _matchmakerController.gameServerAddressFocusNode
)
);
});
Widget get _port => Obx(() {
if(_matchmakerController.type.value == ServerType.embedded) {
return const SizedBox.shrink();
}
return SettingTile(
icon: Icon(
fluentUi.FluentIcons.number_field
),
title: Text(translations.matchmakerConfigurationPortName),
subtitle: Text(translations.matchmakerConfigurationPortDescription),
content: TextFormBox(
placeholder: translations.matchmakerConfigurationPortName,
controller: _matchmakerController.port,
keyboardType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly
]
)
);
});
Widget get _hostName => Obx(() {
if(_matchmakerController.type.value == ServerType.remote) {
return const SizedBox.shrink();
}
return SettingTile(
icon: Icon(
FluentIcons.globe_24_regular
),
title: Text(translations.matchmakerConfigurationHostName),
subtitle: Text(translations.matchmakerConfigurationHostDescription),
content: TextFormBox(
placeholder: translations.matchmakerConfigurationHostName,
controller: _matchmakerController.host
)
);
});
Widget get _type => SettingTile(
icon: Icon(
FluentIcons.people_24_regular
),
title: Text(translations.matchmakerTypeName),
subtitle: Text(translations.matchmakerTypeDescription),
content: const ServerTypeSelector(
authenticator: false
),
expandedContent: [
if(_matchmakerController.type.value == ServerType.remote)
SettingTile(
title: translations.matchmakerConfigurationHostName,
subtitle: translations.matchmakerConfigurationHostDescription,
isChild: true,
content: TextFormBox(
placeholder: translations.matchmakerConfigurationHostName,
controller: _matchmakerController.host
)
),
if(_matchmakerController.type.value != ServerType.embedded)
SettingTile(
title: translations.matchmakerConfigurationPortName,
subtitle: translations.matchmakerConfigurationPortDescription,
isChild: true,
content: TextFormBox(
placeholder: translations.matchmakerConfigurationPortName,
controller: _matchmakerController.port,
keyboardType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly
]
)
),
if(_matchmakerController.type.value == ServerType.embedded)
SettingTile(
title: translations.matchmakerConfigurationAddressName,
subtitle: translations.matchmakerConfigurationAddressDescription,
isChild: true,
content: TextFormBox(
placeholder: translations.matchmakerConfigurationAddressName,
controller: _matchmakerController.gameServerAddress,
focusNode: _matchmakerController.gameServerAddressFocusNode
)
),
if(_matchmakerController.type.value == ServerType.embedded)
SettingTile(
title: translations.matchmakerConfigurationDetachedName,
subtitle: translations.matchmakerConfigurationDetachedDescription,
contentWidth: null,
isChild: true,
content: Obx(() => Row(
children: [
Text(
_matchmakerController.detached.value ? translations.on : translations.off
),
const SizedBox(
width: 16.0
),
ToggleSwitch(
checked: _matchmakerController.detached.value,
onChanged: (value) => _matchmakerController.detached.value = value
),
],
)),
)
]
));
SettingTile get _installationDirectory => SettingTile(
title: translations.matchmakerInstallationDirectoryName,
subtitle: translations.matchmakerInstallationDirectoryDescription,
content: Button(
onPressed: () => launchUrl(matchmakerDirectory.uri),
child: Text(translations.matchmakerInstallationDirectoryContent)
)
);
Widget get _installationDirectory => Obx(() {
if(_matchmakerController.type.value != ServerType.embedded) {
return const SizedBox.shrink();
}
return SettingTile(
icon: Icon(
FluentIcons.folder_24_regular
),
title: Text(translations.matchmakerInstallationDirectoryName),
subtitle: Text(translations.matchmakerInstallationDirectoryDescription),
content: Button(
onPressed: () => launchUrl(matchmakerDirectory.uri),
child: Text(translations.matchmakerInstallationDirectoryContent)
)
);
});
SettingTile get _resetDefaults => SettingTile(
title: translations.matchmakerResetDefaultsName,
subtitle: translations.matchmakerResetDefaultsDescription,
icon: Icon(
FluentIcons.arrow_reset_24_regular
),
title: Text(translations.matchmakerResetDefaultsName),
subtitle: Text(translations.matchmakerResetDefaultsDescription),
content: Button(
onPressed: () => showResetDialog(_matchmakerController.reset),
child: Text(translations.matchmakerResetDefaultsContent),