Better handle GoToPath, MessageBox customizations

This commit is contained in:
2023-07-27 19:44:11 +02:00
parent 0cc4ff8e1d
commit 047faf28c4
5 changed files with 75 additions and 25 deletions

View File

@@ -91,11 +91,15 @@ public class NavigationUserCommandHandlerService : UserCommandHandlerServiceBase
{
await OpenSelected();
}
else if (_currentSelectedItem?.Value is IElementViewModel
{Element: {NativePath: not null, Provider: ILocalContentProvider} localFile}
else if (
_currentSelectedItem?.Value is IElementViewModel
{
Element: {NativePath: not null, Provider: ILocalContentProvider} localFile
}
)
{
Process.Start(new ProcessStartInfo(localFile.NativePath!.Path) {UseShellExecute = true});
var processStartInfo = new ProcessStartInfo(localFile.NativePath!.Path) {UseShellExecute = true};
Process.Start(processStartInfo);
if (_viewMode == ViewMode.RapidTravel)
{
@@ -119,15 +123,38 @@ public class NavigationUserCommandHandlerService : UserCommandHandlerServiceBase
private async Task GoToPath()
{
var pathInput = new TextInputElement("Path");
await _userCommunicationService.ReadInputs(pathInput);
var acceptedForm = await _userCommunicationService.ReadInputs(pathInput);
if (!acceptedForm) return;
var path = pathInput.Value!;
IItem? resolvedPath = null;
try
{
resolvedPath = await _timelessContentProvider.GetItemByNativePathAsync(new NativePath(path));
}
catch
{
}
//TODO: message on empty result and on null pathInput.Value
var resolvedPath = await _timelessContentProvider.GetItemByNativePathAsync(new NativePath(pathInput.Value));
if (resolvedPath is IContainer container)
{
await _userCommandHandlerService.HandleCommandAsync(
new OpenContainerCommand(new AbsolutePath(_timelessContentProvider, container)));
}
else if (resolvedPath is IElement element)
{
await _userCommandHandlerService.HandleCommandAsync(
new OpenContainerCommand(element.Parent!));
}
else
{
await _userCommunicationService.ShowMessageBox(
$"Path does not exists: {path}",
okText: "Ok",
showCancel: false
);
}
}
private async Task GoToHome()

View File

@@ -6,5 +6,10 @@ public interface IUserCommunicationService
Task<bool> ReadInputs(IInputElement field, IEnumerable<IPreviewElement>? previews = null);
Task<bool> ReadInputs(IEnumerable<IInputElement> fields, IEnumerable<IPreviewElement>? previews = null);
void ShowToastMessage(string text);
Task<MessageBoxResult> ShowMessageBox(string text);
Task<MessageBoxResult> ShowMessageBox(
string text,
bool showCancel = true,
string? okText = null,
string? cancelText = null
);
}

View File

@@ -9,23 +9,28 @@ public partial class MessageBoxViewModel : IModalViewModel
{
private readonly Action<MessageBoxViewModel, MessageBoxResult> _handler;
public string Text { get; }
public bool ShowCancel { get; }
public string OkText { get; }
public string CancelText { get; }
public string Name => "MessageBoxViewModel";
public MessageBoxViewModel(string text, Action<MessageBoxViewModel, MessageBoxResult> handler) : this()
public MessageBoxViewModel(
string text,
Action<MessageBoxViewModel, MessageBoxResult> handler,
bool showCancel = true,
string? okText = null,
string? cancelText = null) : this()
{
_handler = handler;
Text = text;
ShowCancel = showCancel;
OkText = okText ?? "Yes";
CancelText = cancelText ?? "No";
}
[Command]
public void Ok()
{
_handler.Invoke(this, MessageBoxResult.Ok);
}
public void Ok() => _handler.Invoke(this, MessageBoxResult.Ok);
[Command]
public void Cancel()
{
_handler.Invoke(this, MessageBoxResult.Cancel);
}
public void Cancel() => _handler.Invoke(this, MessageBoxResult.Cancel);
}

View File

@@ -119,14 +119,26 @@ public class DialogService : IDialogService
});
}
public Task<MessageBoxResult> ShowMessageBox(string text)
public Task<MessageBoxResult> ShowMessageBox(
string text,
bool showCancel = true,
string? okText = null,
string? cancelText = null)
{
var taskCompletionSource = new TaskCompletionSource<MessageBoxResult>();
_modalService.OpenModal(new MessageBoxViewModel(text, (vm, result) =>
_modalService.OpenModal(
new MessageBoxViewModel(
text,
(vm, result) =>
{
_modalService.CloseModal(vm);
taskCompletionSource.SetResult(result);
}));
},
showCancel,
okText,
cancelText
)
);
return taskCompletionSource.Task;
}

View File

@@ -824,13 +824,14 @@
Orientation="Horizontal">
<Button
Command="{Binding OkCommand}"
Content="Yes"
Content="{Binding OkText}"
HorizontalContentAlignment="Center"
Width="80" />
<Button
Command="{Binding CancelCommand}"
Content="No"
Content="{Binding CancelText}"
HorizontalContentAlignment="Center"
IsVisible="{Binding ShowCancel}"
Margin="10,0,0,0"
Width="80" />
</StackPanel>