Skip to content

Commit

Permalink
bitwindow: add settings modal
Browse files Browse the repository at this point in the history
  • Loading branch information
octobocto committed Feb 2, 2025
1 parent 5074824 commit a933e22
Show file tree
Hide file tree
Showing 4 changed files with 163 additions and 0 deletions.
14 changes: 14 additions & 0 deletions clients/sail_ui/lib/widgets/components/daemon_connection_card.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:sail_ui/sail_ui.dart';
import 'package:sail_ui/widgets/modals/daemon_settings_modal.dart';

class DaemonConnectionCard extends StatelessWidget {
final void Function(String name, String logPath)? navigateToLogs;
Expand Down Expand Up @@ -42,6 +43,19 @@ class DaemonConnectionCard extends StatelessWidget {
: theme.colors.error,
),
Expanded(child: Container()),
SailScaleButton(
onPressed: () {
showDialog(
context: context,
builder: (context) => DaemonConnectionDetailsModal(
connection: connection,
),
);
},
style: SailButtonStyle.secondary,
pressed: connection.initializingBinary,
child: SailSVG.fromAsset(SailSVGAsset.iconTabSettings, width: 18),
),
SailScaleButton(
onPressed: restartDaemon,
style: SailButtonStyle.secondary,
Expand Down
2 changes: 2 additions & 0 deletions clients/sail_ui/lib/widgets/core/sail_text.dart
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ class SailText {
bool bold = false,
Color? color,
bool underline = false,
bool monospace = false,
}) {
return Builder(
builder: (context) {
Expand All @@ -139,6 +140,7 @@ class SailText {
fontWeight: bold ? SailStyleValues.boldWeight : null,
decoration: underline ? TextDecoration.underline : TextDecoration.none,
decorationColor: underline ? (color ?? theme.colors.text) : null,
fontFamily: monospace ? 'SourceCodePro' : 'Inter',
),
textAlign: textAlign,
);
Expand Down
90 changes: 90 additions & 0 deletions clients/sail_ui/lib/widgets/modals/daemon_settings_modal.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import 'package:flutter/material.dart';
import 'package:sail_ui/sail_ui.dart';

class DaemonConnectionDetailsModal extends StatefulWidget {
final RPCConnection connection;

const DaemonConnectionDetailsModal({
super.key,
required this.connection,
});

@override
State<DaemonConnectionDetailsModal> createState() => _DaemonConnectionDetailsModalState();
}

class _DaemonConnectionDetailsModalState extends State<DaemonConnectionDetailsModal> {
List<String> args = [];

@override
void initState() {
super.initState();
_loadArgs();
}

Future<void> _loadArgs() async {
final loadedArgs = await widget.connection.binaryArgs(widget.connection.conf);
loadedArgs.removeWhere((arg) => arg.contains('pass'));
if (mounted) {
setState(() {
args = loadedArgs;
});
}
}

@override
Widget build(BuildContext context) {
return Dialog(
backgroundColor: context.sailTheme.colors.backgroundSecondary,
child: ConstrainedBox(
constraints: const BoxConstraints(maxWidth: 500),
child: SailRawCard(
padding: true,
title: '${widget.connection.binary.name} Connection Details',
subtitle: 'Connection information for this daemon',
widgetHeaderEnd: SailTextButton(
label: '×',
onPressed: () => Navigator.of(context).pop(),
),
child: Padding(
padding: const EdgeInsets.all(SailStyleValues.padding16),
child: SailColumn(
spacing: SailStyleValues.padding16,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
StaticField(
label: 'Host',
value: widget.connection.conf.host,
copyable: true,
),
StaticField(
label: 'Port',
value: widget.connection.binary.port.toString(),
copyable: true,
),
if (args.isNotEmpty)
StaticField(
label: 'Binary Arguments',
value: args.join(' \\\n'),
copyable: true,
),
const SizedBox(height: SailStyleValues.padding08),
SailRow(
spacing: SailStyleValues.padding08,
mainAxisAlignment: MainAxisAlignment.end,
children: [
QtButton(
label: 'Close',
onPressed: () => Navigator.pop(context),
size: ButtonSize.small,
),
],
),
],
),
),
),
),
);
}
}
57 changes: 57 additions & 0 deletions clients/sail_ui/lib/widgets/static/static_field.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,63 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:sail_ui/sail_ui.dart';

class StaticField extends StatelessWidget {
final String label;
final String value;
final bool copyable;

const StaticField({
super.key,
required this.label,
required this.value,
this.copyable = false,
});

@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SailText.primary13(
label,
color: context.sailTheme.colors.textSecondary,
),
const SizedBox(height: 4),
Row(
children: [
Expanded(
child: SailText.primary13(
value,
color: context.sailTheme.colors.text,
monospace: true,
),
),
if (copyable)
QtIconButton(
tooltip: 'Copy to clipboard',
onPressed: () {
Clipboard.setData(ClipboardData(text: value));
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Copied $label to clipboard'),
duration: const Duration(seconds: 2),
),
);
},
icon: Icon(
Icons.copy,
size: 16,
color: context.sailTheme.colors.text,
),
),
],
),
const SizedBox(height: 8),
],
);
}
}

class StaticActionField extends StatelessWidget {
final String? label;
final String value;
Expand Down

0 comments on commit a933e22

Please sign in to comment.