Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
d7f55fd
prevent inserting restricted character in new file dialog
szabolcstarnai Feb 4, 2022
3b4ab22
Merge branch 'files-community:main' into 7967-feature
szabolcstarnai Feb 4, 2022
6ef246c
prevent pasting restricted characters
szabolcstarnai Feb 4, 2022
0282794
Merge branch 'files-community:main' into 7967-feature
szabolcstarnai Feb 4, 2022
820b673
implementing in Details layout
szabolcstarnai Feb 4, 2022
6c3e39d
fix for Details, implementing in Column view
szabolcstarnai Feb 5, 2022
17060b0
fix for Details, implementing in Column view
szabolcstarnai Feb 5, 2022
35b8069
fix
szabolcstarnai Feb 5, 2022
528a079
Grid view
szabolcstarnai Feb 5, 2022
9b237be
Merge branch 'files-community:main' into 7967-feature
szabolcstarnai Feb 6, 2022
3495f4d
Merge branch 'files-community:main' into 7967-feature
szabolcstarnai Feb 7, 2022
8590401
cleanup
szabolcstarnai Feb 7, 2022
c41f675
Merge branch 'files-community:main' into 7967-feature
szabolcstarnai Feb 7, 2022
00a8119
putting code in helpers
szabolcstarnai Feb 8, 2022
6ccc8b4
Merge branch '7967-feature' of https://github.com/szabolcstarnai/File…
szabolcstarnai Feb 8, 2022
097ea0d
Merge branch 'files-community:main' into 7967-feature
szabolcstarnai Feb 8, 2022
cf0b584
Merge branch 'files-community:main' into 7967-feature
szabolcstarnai Feb 10, 2022
420c2e9
fix, distinguish between pasting and writing
szabolcstarnai Feb 11, 2022
9ff11ce
Merge branch 'files-community:main' into 7967-feature
szabolcstarnai Feb 11, 2022
180b9c0
fix in new item dialog
szabolcstarnai Feb 12, 2022
24489fe
cleanup
szabolcstarnai Feb 12, 2022
d0d3352
Merge branch 'main' of https://github.com/files-community/Files into …
gave92 Mar 19, 2022
6f9cd77
Restore changes to view modes
gave92 Mar 19, 2022
48d4c93
Switch to BeforeTextChanging event to avoid having to keep state as c…
gave92 Mar 19, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions src/Files.Uwp/BaseLayout.cs
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,6 @@ public abstract class BaseLayout : Page, IBaseLayout, INotifyPropertyChanged

public string OldItemName { get; set; } = null;

public TextBlock RenamingTextBlock { get; set; } = null;

private bool isMiddleClickToScrollEnabled = true;

public bool IsMiddleClickToScrollEnabled
Expand Down Expand Up @@ -1236,6 +1234,26 @@ public void ResetRenameDoubleClick()
preRenamingItem = null;
tapDebounceTimer.Stop();
}

protected async void ValidateItemNameInputText(TextBox textBox, TextBoxBeforeTextChangingEventArgs args, Action<bool> showError)
{
if (FilesystemHelpers.ContainsRestrictedCharacters(args.NewText))
{
args.Cancel = true;
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
var oldSelection = textBox.SelectionStart + textBox.SelectionLength;
var oldText = textBox.Text;
textBox.Text = FilesystemHelpers.FilterRestrictedCharacters(args.NewText);
textBox.SelectionStart = oldSelection + textBox.Text.Length - oldText.Length;
showError?.Invoke(true);
});
}
else
{
showError?.Invoke(false);
}
}
}

public class ContextMenuExtensions : DependencyObject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -810,6 +810,16 @@ public static async Task<IEnumerable<IStorageItemWithPath>> GetDraggedStorageIte
return itemsList;
}

public static string FilterRestrictedCharacters(string input)
{
int invalidCharIndex;
while ((invalidCharIndex = input.IndexOfAny(RestrictedCharacters)) >= 0)
{
input = input.Remove(invalidCharIndex, 1);
}
return input;
}

public static bool ContainsRestrictedCharacters(string input)
{
return input.IndexOfAny(RestrictedCharacters) >= 0;
Expand Down
38 changes: 23 additions & 15 deletions src/Files.Uwp/Helpers/DynamicDialogFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,27 +56,35 @@ public static DynamicDialog GetFor_RenameDialog()
Opacity = 0.0d
};

inputText.TextChanged += (s, e) =>
inputText.BeforeTextChanging += async (textBox, args) =>
{
var textBox = s as TextBox;
dialog.ViewModel.AdditionalData = textBox.Text;

if (FilesystemHelpers.ContainsRestrictedCharacters(textBox.Text))
{
dialog.ViewModel.DynamicButtonsEnabled = DynamicDialogButtons.Cancel;
tipText.Opacity = 1.0d;
return;
}
else if (!string.IsNullOrWhiteSpace(textBox.Text))
if (FilesystemHelpers.ContainsRestrictedCharacters(args.NewText))
{
dialog.ViewModel.DynamicButtonsEnabled = DynamicDialogButtons.Primary | DynamicDialogButtons.Cancel;
args.Cancel = true;
await inputText.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
var oldSelection = textBox.SelectionStart + textBox.SelectionLength;
var oldText = textBox.Text;
textBox.Text = FilesystemHelpers.FilterRestrictedCharacters(args.NewText);
textBox.SelectionStart = oldSelection + textBox.Text.Length - oldText.Length;
tipText.Opacity = 1.0d;
});
}
else
{
dialog.ViewModel.DynamicButtonsEnabled = DynamicDialogButtons.Cancel;
}
dialog.ViewModel.AdditionalData = textBox.Text;

tipText.Opacity = 0.0d;
if (!string.IsNullOrWhiteSpace(textBox.Text))
{
dialog.ViewModel.DynamicButtonsEnabled = DynamicDialogButtons.Primary | DynamicDialogButtons.Cancel;
}
else
{
dialog.ViewModel.DynamicButtonsEnabled = DynamicDialogButtons.Cancel;
}

tipText.Opacity = 0.0d;
}
};

inputText.Loaded += (s, e) =>
Expand Down
2 changes: 1 addition & 1 deletion src/Files.Uwp/Views/LayoutModes/ColumnViewBase.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -310,8 +310,8 @@
Margin="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
BeforeTextChanging="ItemNameTextBox_BeforeTextChanging"
TextAlignment="Left"
TextChanged="ListViewTextBoxItemName_TextChanged"
TextWrapping="Wrap"
Visibility="Collapsed" />
<Grid Grid.Column="2">
Expand Down
41 changes: 15 additions & 26 deletions src/Files.Uwp/Views/LayoutModes/ColumnViewBase.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -126,25 +126,6 @@ protected override void UnhookEvents()
}
}

private void ListViewTextBoxItemName_TextChanged(object sender, TextChangedEventArgs e)
{
var textBox = sender as TextBox;

if (FilesystemHelpers.ContainsRestrictedCharacters(textBox.Text))
{
FileNameTeachingTip.Visibility = Visibility.Visible;
FileNameTeachingTip.IsOpen = true;
}
else
{
if (FileNameTeachingTip.IsOpen == true)
{
FileNameTeachingTip.IsOpen = false;
FileNameTeachingTip.Visibility = Visibility.Collapsed;
}
}
}

public event EventHandler ItemInvoked;

protected override void OnNavigatedTo(NavigationEventArgs eventArgs)
Expand Down Expand Up @@ -199,13 +180,11 @@ override public void StartRenameItem()
{
return;
}
RenamingTextBlock = listViewItem.FindDescendant("ItemName") as TextBlock;
TextBlock textBlock = listViewItem.FindDescendant("ItemName") as TextBlock;
textBox = listViewItem.FindDescendant("ListViewTextBoxItemName") as TextBox;
//textBlock = (listViewItem.ContentTemplateRoot as Border).FindDescendant("ItemName") as TextBlock;
//textBox = (listViewItem.ContentTemplateRoot as Border).FindDescendant("ListViewTextBoxItemName") as TextBox;
textBox.Text = RenamingTextBlock.Text;
OldItemName = RenamingTextBlock.Text;
RenamingTextBlock.Visibility = Visibility.Collapsed;
textBox.Text = textBlock.Text;
OldItemName = textBlock.Text;
textBlock.Visibility = Visibility.Collapsed;
textBox.Visibility = Visibility.Visible;

textBox.Focus(FocusState.Pointer);
Expand All @@ -221,6 +200,15 @@ override public void StartRenameItem()
IsRenamingItem = true;
}

private void ItemNameTextBox_BeforeTextChanging(TextBox textBox, TextBoxBeforeTextChangingEventArgs args)
{
ValidateItemNameInputText(textBox, args, (showError) =>
{
FileNameTeachingTip.Visibility = showError ? Visibility.Visible : Visibility.Collapsed;
FileNameTeachingTip.IsOpen = showError;
});
}

private void RenameTextBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
if (e.Key == VirtualKey.Escape)
Expand Down Expand Up @@ -269,8 +257,9 @@ private void EndRename(TextBox textBox)
ListViewItem listViewItem = FileList.ContainerFromItem(RenamingItem) as ListViewItem;
listViewItem?.Focus(FocusState.Programmatic);

TextBlock textBlock = listViewItem.FindDescendant("ItemName") as TextBlock;
textBox.Visibility = Visibility.Collapsed;
RenamingTextBlock.Visibility = Visibility.Visible;
textBlock.Visibility = Visibility.Visible;
}

textBox.LostFocus -= RenameTextBox_LostFocus;
Expand Down
2 changes: 1 addition & 1 deletion src/Files.Uwp/Views/LayoutModes/DetailsLayoutBrowser.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -640,7 +640,7 @@
MaxWidth="{Binding MaxWidthForRenameTextbox, ElementName=PageRoot, Mode=OneWay}"
HorizontalAlignment="Left"
VerticalAlignment="Center"
TextChanged="ListViewTextBoxItemName_TextChanged"
BeforeTextChanging="ItemNameTextBox_BeforeTextChanging"
Visibility="Collapsed">
<TextBox.Resources>
<SolidColorBrush x:Key="TextControlBackgroundFocused" Color="{ThemeResource SolidBackgroundFillColorSecondary}" />
Expand Down
19 changes: 5 additions & 14 deletions src/Files.Uwp/Views/LayoutModes/DetailsLayoutBrowser.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -345,8 +345,6 @@ override public void StartRenameItem()
}
TextBlock textBlock = listViewItem.FindDescendant("ItemName") as TextBlock;
textBox = listViewItem.FindDescendant("ItemNameTextBox") as TextBox;
//TextBlock textBlock = (gridViewItem.ContentTemplateRoot as Grid).FindName("ItemName") as TextBlock;
//textBox = (gridViewItem.ContentTemplateRoot as Grid).FindName("TileViewTextBoxItemName") as TextBox;
textBox.Text = textBlock.Text;
OldItemName = textBlock.Text;
textBlock.Visibility = Visibility.Collapsed;
Expand All @@ -366,20 +364,13 @@ override public void StartRenameItem()
IsRenamingItem = true;
}

private void ListViewTextBoxItemName_TextChanged(object sender, TextChangedEventArgs e)
private void ItemNameTextBox_BeforeTextChanging(TextBox textBox, TextBoxBeforeTextChangingEventArgs args)
{
var textBox = sender as TextBox;

if (FilesystemHelpers.ContainsRestrictedCharacters(textBox.Text))
{
FileNameTeachingTip.Visibility = Visibility.Visible;
FileNameTeachingTip.IsOpen = true;
}
else
ValidateItemNameInputText(textBox, args, (showError) =>
{
FileNameTeachingTip.IsOpen = false;
FileNameTeachingTip.Visibility = Visibility.Collapsed;
}
FileNameTeachingTip.Visibility = showError ? Visibility.Visible : Visibility.Collapsed;
FileNameTeachingTip.IsOpen = showError;
});
}

private void RenameTextBox_KeyDown(object sender, KeyRoutedEventArgs e)
Expand Down
4 changes: 2 additions & 2 deletions src/Files.Uwp/Views/LayoutModes/GridViewBrowser.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -197,9 +197,9 @@
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="{ThemeResource SolidBackgroundFillColorSecondary}"
BeforeTextChanging="ItemNameTextBox_BeforeTextChanging"
Text="{x:Bind ItemName, Mode=OneWay}"
TextAlignment="Center"
TextChanged="GridViewTextBoxItemName_TextChanged"
TextWrapping="Wrap" />
</Popup>
</Grid>
Expand Down Expand Up @@ -337,8 +337,8 @@
x:Name="TileViewTextBoxItemName"
Grid.Row="0"
HorizontalAlignment="Left"
BeforeTextChanging="ItemNameTextBox_BeforeTextChanging"
Text="{x:Bind ItemName, Mode=OneWay}"
TextChanged="GridViewTextBoxItemName_TextChanged"
Visibility="Collapsed" />
<TextBlock
Grid.Row="1"
Expand Down
21 changes: 5 additions & 16 deletions src/Files.Uwp/Views/LayoutModes/GridViewBrowser.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -260,8 +260,6 @@ override public void StartRenameItem()
{
Popup popup = gridViewItem.FindDescendant("EditPopup") as Popup;
TextBlock textBlock = gridViewItem.FindDescendant("ItemName") as TextBlock;
//Popup popup = (gridViewItem.ContentTemplateRoot as Grid).FindName("EditPopup") as Popup;
//TextBlock textBlock = (gridViewItem.ContentTemplateRoot as Grid).FindName("ItemName") as TextBlock;
textBox = popup.Child as TextBox;
textBox.Text = textBlock.Text;
popup.IsOpen = true;
Expand All @@ -271,8 +269,6 @@ override public void StartRenameItem()
{
TextBlock textBlock = gridViewItem.FindDescendant("ItemName") as TextBlock;
textBox = gridViewItem.FindDescendant("TileViewTextBoxItemName") as TextBox;
//TextBlock textBlock = (gridViewItem.ContentTemplateRoot as Grid).FindName("ItemName") as TextBlock;
//textBox = (gridViewItem.ContentTemplateRoot as Grid).FindName("TileViewTextBoxItemName") as TextBox;
textBox.Text = textBlock.Text;
OldItemName = textBlock.Text;
textBlock.Visibility = Visibility.Collapsed;
Expand All @@ -292,20 +288,13 @@ override public void StartRenameItem()
IsRenamingItem = true;
}

private void GridViewTextBoxItemName_TextChanged(object sender, TextChangedEventArgs e)
private void ItemNameTextBox_BeforeTextChanging(TextBox textBox, TextBoxBeforeTextChangingEventArgs args)
{
var textBox = sender as TextBox;

if (FilesystemHelpers.ContainsRestrictedCharacters(textBox.Text))
ValidateItemNameInputText(textBox, args, (showError) =>
{
FileNameTeachingTip.Visibility = Visibility.Visible;
FileNameTeachingTip.IsOpen = true;
}
else
{
FileNameTeachingTip.IsOpen = false;
FileNameTeachingTip.Visibility = Visibility.Collapsed;
}
FileNameTeachingTip.Visibility = showError ? Visibility.Visible : Visibility.Collapsed;
FileNameTeachingTip.IsOpen = showError;
});
}

private void RenameTextBox_KeyDown(object sender, KeyRoutedEventArgs e)
Expand Down