Skip to content

Commit 43f6864

Browse files
authored
Add "Close tabs to the left" and "Close others" to tab context menu (#8015)
1 parent 931fe9f commit 43f6864

File tree

7 files changed

+101
-36
lines changed

7 files changed

+101
-36
lines changed

src/Files/Helpers/MultitaskingTabsHelpers.cs

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,41 @@
33
using Microsoft.Toolkit.Uwp;
44
using Microsoft.UI.Xaml.Controls;
55
using System;
6-
using System.Collections.Generic;
6+
using System.Linq;
77
using System.Threading.Tasks;
88

99
namespace Files.Helpers
1010
{
1111
public static class MultitaskingTabsHelpers
1212
{
13-
public static void CloseTabsToTheRight(TabItem clickedTab, IMultitaskingControl multitaskingControl)
13+
public static void CloseTabsToTheLeft(TabItem clickedTab, IMultitaskingControl multitaskingControl)
1414
{
15-
int index = MainPageViewModel.AppInstances.IndexOf(clickedTab);
16-
List<TabItem> tabsToClose = new List<TabItem>();
15+
if (multitaskingControl is not null)
16+
{
17+
var tabs = MainPageViewModel.AppInstances;
18+
var currentIndex = tabs.IndexOf(clickedTab);
19+
20+
tabs.Take(currentIndex).ToList().ForEach(tab => multitaskingControl.CloseTab(tab));
21+
}
22+
}
1723

18-
for (int i = index + 1; i < MainPageViewModel.AppInstances.Count; i++)
24+
public static void CloseTabsToTheRight(TabItem clickedTab, IMultitaskingControl multitaskingControl)
25+
{
26+
if (multitaskingControl is not null)
1927
{
20-
tabsToClose.Add(MainPageViewModel.AppInstances[i]);
28+
var tabs = MainPageViewModel.AppInstances;
29+
var currentIndex = tabs.IndexOf(clickedTab);
30+
31+
tabs.Skip(currentIndex + 1).ToList().ForEach(tab => multitaskingControl.CloseTab(tab));
2132
}
33+
}
2234

23-
foreach (var item in tabsToClose)
35+
public static void CloseOthers(TabItem clickedTab, IMultitaskingControl multitaskingControl)
36+
{
37+
if (multitaskingControl is not null)
2438
{
25-
multitaskingControl?.CloseTab(item);
39+
var tabs = MainPageViewModel.AppInstances;
40+
tabs.Where((t) => t != clickedTab).ToList().ForEach(tab => multitaskingControl.CloseTab(tab));
2641
}
2742
}
2843

@@ -64,4 +79,4 @@ public static async Task AddNewTab(Type type, object tabViewItemArgs, int atInde
6479
MainPageViewModel.AppInstances.Insert(atIndex == -1 ? MainPageViewModel.AppInstances.Count : atIndex, tabItem);
6580
}
6681
}
67-
}
82+
}

src/Files/MultilingualResources/Files.it-IT.xlf

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1771,10 +1771,6 @@
17711771
<source>Would you like to continue as administrator?</source>
17721772
<target state="translated">Vuoi continuare come amministratore?</target>
17731773
</trans-unit>
1774-
<trans-unit id="HorizontalMultitaskingControlCloseTabsToTheRight.Text" translate="yes" xml:space="preserve">
1775-
<source>Close tabs to the right</source>
1776-
<target state="translated">Chiudi schede a destra</target>
1777-
</trans-unit>
17781774
<trans-unit id="FullTrustStatusTeachingTip.Title" translate="yes" xml:space="preserve">
17791775
<source>Administrator</source>
17801776
<target state="translated">Amministratore</target>
@@ -3498,6 +3494,30 @@ Usiamo App Center per tenere traccia dell'utilizzo dell'app, trovare bug e risol
34983494
<source>Open in</source>
34993495
<target state="new">Open in</target>
35003496
</trans-unit>
3497+
<trans-unit id="RotateLeft" translate="yes" xml:space="preserve">
3498+
<source>Rotate left</source>
3499+
<target state="new">Rotate left</target>
3500+
</trans-unit>
3501+
<trans-unit id="RotateRight" translate="yes" xml:space="preserve">
3502+
<source>Rotate right</source>
3503+
<target state="new">Rotate right</target>
3504+
</trans-unit>
3505+
<trans-unit id="Install" translate="yes" xml:space="preserve">
3506+
<source>Install</source>
3507+
<target state="new">Install</target>
3508+
</trans-unit>
3509+
<trans-unit id="CloseTabsToTheLeft" translate="yes" xml:space="preserve">
3510+
<source>Close tabs to the left</source>
3511+
<target state="translated">Chiudi schede a sinistra</target>
3512+
</trans-unit>
3513+
<trans-unit id="CloseTabsToTheRight" translate="yes" xml:space="preserve">
3514+
<source>Close tabs to the right</source>
3515+
<target state="translated">Chiudi schede a destra</target>
3516+
</trans-unit>
3517+
<trans-unit id="CloseOthers" translate="yes" xml:space="preserve">
3518+
<source>Close others</source>
3519+
<target state="translated">Chiudi le altre schede</target>
3520+
</trans-unit>
35013521
</group>
35023522
</body>
35033523
</file>

src/Files/Strings/en-US/Resources.resw

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1560,9 +1560,6 @@
15601560
<data name="PropertyItemCount" xml:space="preserve">
15611561
<value>Item count</value>
15621562
</data>
1563-
<data name="HorizontalMultitaskingControlCloseTabsToTheRight.Text" xml:space="preserve">
1564-
<value>Close tabs to the right</value>
1565-
</data>
15661563
<data name="StatusDeletionFailed" xml:space="preserve">
15671564
<value>Deletion Failed</value>
15681565
</data>
@@ -2738,4 +2735,13 @@ We use App Center to track which settings are being used, find bugs, and fix cra
27382735
<data name="Install" xml:space="preserve">
27392736
<value>Install</value>
27402737
</data>
2741-
</root>
2738+
<data name="CloseTabsToTheLeft" xml:space="preserve">
2739+
<value>Close tabs to the left</value>
2740+
</data>
2741+
<data name="CloseTabsToTheRight" xml:space="preserve">
2742+
<value>Close tabs to the right</value>
2743+
</data>
2744+
<data name="CloseOthers" xml:space="preserve">
2745+
<value>Close others</value>
2746+
</data>
2747+
</root>

src/Files/Strings/it-IT/Resources.resw

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,9 +1335,6 @@
13351335
<data name="ElevateConfirmDialog.Content" xml:space="preserve">
13361336
<value>Vuoi continuare come amministratore?</value>
13371337
</data>
1338-
<data name="HorizontalMultitaskingControlCloseTabsToTheRight.Text" xml:space="preserve">
1339-
<value>Chiudi schede a destra</value>
1340-
</data>
13411338
<data name="FullTrustStatusTeachingTip.Title" xml:space="preserve">
13421339
<value>Amministratore</value>
13431340
</data>
@@ -2596,4 +2593,13 @@ Usiamo App Center per tenere traccia dell'utilizzo dell'app, trovare bug e risol
25962593
<data name="Bytes" xml:space="preserve">
25972594
<value>Byte</value>
25982595
</data>
2596+
<data name="CloseTabsToTheLeft" xml:space="preserve">
2597+
<value>Chiudi schede a sinistra</value>
2598+
</data>
2599+
<data name="CloseTabsToTheRight" xml:space="preserve">
2600+
<value>Chiudi schede a destra</value>
2601+
</data>
2602+
<data name="CloseOthers" xml:space="preserve">
2603+
<value>Chiudi le altre schede</value>
2604+
</data>
25992605
</root>

src/Files/UserControls/MultitaskingControl/BaseMultitaskingControl.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,14 @@ public List<ITabItemContent> GetAllTabInstances()
101101
return MainPageViewModel.AppInstances.Select(x => x.Control?.TabItemContent).ToList();
102102
}
103103

104+
public void CloseTabsToTheLeft(object sender, RoutedEventArgs e)
105+
=> MultitaskingTabsHelpers.CloseTabsToTheLeft(((FrameworkElement)sender).DataContext as TabItem, this);
106+
104107
public void CloseTabsToTheRight(object sender, RoutedEventArgs e)
105-
{
106-
MultitaskingTabsHelpers.CloseTabsToTheRight(((FrameworkElement)sender).DataContext as TabItem, this);
107-
}
108+
=> MultitaskingTabsHelpers.CloseTabsToTheRight(((FrameworkElement)sender).DataContext as TabItem, this);
109+
110+
public void CloseOthers(object sender, RoutedEventArgs e)
111+
=> MultitaskingTabsHelpers.CloseOthers(((FrameworkElement)sender).DataContext as TabItem, this);
108112

109113
public async void ReopenClosedTab(object sender, RoutedEventArgs e)
110114
{
@@ -165,4 +169,4 @@ public void SetLoadingIndicatorStatus(ITabItem item, bool loading)
165169
}
166170
}
167171
}
168-
}
172+
}

src/Files/UserControls/MultitaskingControl/HorizontalMultitaskingControl.xaml

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
xmlns:local1="using:Files"
88
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
99
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
10+
xmlns:helpers="using:Files.Helpers"
1011
xmlns:vm="using:Files.ViewModels"
1112
d:DesignHeight="300"
1213
d:DesignWidth="400"
@@ -52,12 +53,21 @@
5253
<FontIcon Glyph="&#xE8A7;" />
5354
</MenuFlyoutItem.Icon>
5455
</MenuFlyoutItem>
56+
<MenuFlyoutItem
57+
x:Name="MenuItemCloseTabsToTheLeft"
58+
Click="CloseTabsToTheLeft"
59+
DataContextChanged="MenuItemCloseTabsToTheLeft_DataContextChanged"
60+
Text="{helpers:ResourceString Name=CloseTabsToTheLeft}" />
5561
<MenuFlyoutItem
5662
x:Name="MenuItemCloseTabsToTheRight"
57-
x:Uid="HorizontalMultitaskingControlCloseTabsToTheRight"
5863
Click="CloseTabsToTheRight"
5964
DataContextChanged="MenuItemCloseTabsToTheRight_DataContextChanged"
60-
Text="Close tabs to the right" />
65+
Text="{helpers:ResourceString Name=CloseTabsToTheRight}" />
66+
<MenuFlyoutItem
67+
x:Name="MenuItemCloseOthers"
68+
Click="CloseOthers"
69+
DataContextChanged="MenuItemCloseOthers_DataContextChanged"
70+
Text="{helpers:ResourceString Name=CloseOthers}" />
6171
<MenuFlyoutItem
6272
x:Name="MenuItemReopenClosedTab"
6373
x:Uid="HorizontalMultitaskingControlReopenClosedTab"
@@ -129,4 +139,4 @@
129139
HorizontalAlignment="Left"
130140
Child="{x:Bind ActionsControl, Mode=OneWay}" />
131141
</Grid>
132-
</local:BaseMultitaskingControl>
142+
</local:BaseMultitaskingControl>

src/Files/UserControls/MultitaskingControl/HorizontalMultitaskingControl.xaml.cs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -189,18 +189,22 @@ private void TabItemContextMenu_Opening(object sender, object e)
189189
MenuItemReopenClosedTab.IsEnabled = RecentlyClosedTabs.Any();
190190
}
191191

192+
private void MenuItemCloseTabsToTheLeft_DataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args)
193+
{
194+
TabItem tabItem = args.NewValue as TabItem;
195+
MenuItemCloseTabsToTheLeft.IsEnabled = MainPageViewModel.AppInstances.IndexOf(tabItem) > 0;
196+
}
197+
192198
private void MenuItemCloseTabsToTheRight_DataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args)
193199
{
194200
TabItem tabItem = args.NewValue as TabItem;
201+
MenuItemCloseTabsToTheRight.IsEnabled = MainPageViewModel.AppInstances.IndexOf(tabItem) < MainPageViewModel.AppInstances.Count - 1;
202+
}
195203

196-
if (MainPageViewModel.AppInstances.IndexOf(tabItem) == MainPageViewModel.AppInstances.Count - 1)
197-
{
198-
MenuItemCloseTabsToTheRight.IsEnabled = false;
199-
}
200-
else
201-
{
202-
MenuItemCloseTabsToTheRight.IsEnabled = true;
203-
}
204+
private void MenuItemCloseOthers_DataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args)
205+
{
206+
TabItem tabItem = args.NewValue as TabItem;
207+
MenuItemCloseOthers.IsEnabled = MainPageViewModel.AppInstances.Count > 1;
204208
}
205209

206210
public override DependencyObject ContainerFromItem(ITabItem item) => HorizontalTabView.ContainerFromItem(item);
@@ -225,4 +229,4 @@ public Visibility TabStripVisibility
225229
public static readonly DependencyProperty TabStripVisibilityProperty =
226230
DependencyProperty.Register("TabStripVisibility", typeof(Visibility), typeof(HorizontalMultitaskingControl), new PropertyMetadata(Visibility.Visible));
227231
}
228-
}
232+
}

0 commit comments

Comments
 (0)