Skip to content

Commit eabf731

Browse files
authored
Merge pull request #3598 from marticliment/go-back
2 parents 49e1165 + 8effd64 commit eabf731

10 files changed

Lines changed: 82 additions & 34 deletions

File tree

src/UniGetUI.Core.Data/CoreData.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ public static class CoreData
1414

1515
public const string UserAgentString = $"UniGetUI/{VersionName} (https://marticliment.com/unigetui/; contact@marticliment.com)";
1616

17+
public const string AppIdentifier = "MartiCliment.UniGetUI";
18+
public const string MainWindowIdentifier = "MartiCliment.UniGetUI.MainInterface";
19+
1720
private static bool? IS_PORTABLE;
1821
private static string? PORTABLE_PATH;
1922
public static bool IsPortable { get => IS_PORTABLE ?? false; }

src/UniGetUI.PackageEngine.Managers.Vcpkg/Vcpkg.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ protected override IReadOnlyList<Package> GetAvailableUpdates_UnSafe()
180180
RedirectStandardError = true,
181181
UseShellExecute = false,
182182
CreateNoWindow = true,
183-
StandardOutputEncoding = System.Text.Encoding.UTF8
183+
StandardOutputEncoding = Encoding.UTF8
184184
}
185185
};
186186
IProcessTaskLogger logger = TaskLogger.CreateNew(LoggableTaskType.ListUpdates, p);

src/UniGetUI/EntryPoint.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,7 @@ private static async Task<bool> DecideRedirection()
121121
// example on single-instance apps using unpackaged AppSdk + WinUI3
122122
bool isRedirect = false;
123123

124-
var keyInstance = AppInstance.FindOrRegisterForKey("MartiCliment.UniGetUI.MainInterface");
125-
124+
var keyInstance = AppInstance.FindOrRegisterForKey(CoreData.MainWindowIdentifier);
126125
if (keyInstance.IsCurrent)
127126
{
128127
keyInstance.Activated += async (_, e) =>

src/UniGetUI/MainWindow.xaml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,18 @@
3232
x:Name="TitleBar"
3333
Title="UniGetUI"
3434
Grid.Row="0"
35+
Margin="0,4"
3536
IsPaneToggleButtonVisible="True"
3637
PaneToggleRequested="TitleBar_PaneToggleRequested"
38+
IsBackButtonVisible="False"
39+
BackRequested="TitleBar_OnBackRequested"
3740
Visibility="Collapsed">
3841
<winex:TitleBar.IconSource>
3942
<ImageIconSource ImageSource="ms-appx:///Assets/Images/icon.png" />
4043
</winex:TitleBar.IconSource>
41-
<winex:TitleBar.Content>
44+
<!--winex:TitleBar.Content>
4245
<UserControl Height="10" />
43-
</winex:TitleBar.Content>
46+
</winex:TitleBar.Content-->
4447
</winex:TitleBar>
4548
<StackPanel
4649
Grid.Row="1"

src/UniGetUI/MainWindow.xaml.cs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
using UniGetUI.Interface.Enums;
2424
using UniGetUI.PackageEngine.PackageClasses;
2525
using UniGetUI.Pages.DialogPages;
26+
using TitleBar = WinUIEx.TitleBar;
2627

2728
namespace UniGetUI.Interface
2829
{
@@ -73,7 +74,7 @@ public MainWindow()
7374

7475
if (Settings.Get("ShowVersionNumberOnTitlebar"))
7576
{
76-
AddToSubtitle(CoreTools.Translate("version {0} (build number: {1})", CoreData.VersionName, CoreData.BuildNumber));
77+
AddToSubtitle(CoreTools.Translate("version {0}", CoreData.VersionName));
7778
}
7879

7980
if (CoreTools.IsAdministrator())
@@ -689,7 +690,7 @@ public void SwitchToInterface()
689690
SetTitleBar(TitleBar);
690691

691692
NavigationPage = new MainView();
692-
693+
NavigationPage.CanGoBackChanged += (_, can) => TitleBar.IsBackButtonVisible = can;
693694

694695
object? control = MainContentFrame.Content as Grid;
695696
if (control is Grid loadingWindow)
@@ -1001,14 +1002,19 @@ private static bool IsRectangleFullyVisible(int x, int y, int width, int height)
10011002

10021003
private void TitleBar_PaneToggleRequested(WinUIEx.TitleBar sender, object args)
10031004
{
1004-
if (NavigationPage is not null)
1005+
if (NavigationPage is null)
1006+
return;
1007+
1008+
if(this.AppWindow.Size.Width >= 1600)
10051009
{
1006-
if(this.AppWindow.Size.Width >= 1600)
1007-
{
1008-
Settings.Set("CollapseNavMenuOnWideScreen", NavigationPage.NavView.IsPaneOpen);
1009-
}
1010-
NavigationPage.NavView.IsPaneOpen = !NavigationPage.NavView.IsPaneOpen;
1010+
Settings.Set("CollapseNavMenuOnWideScreen", NavigationPage.NavView.IsPaneOpen);
10111011
}
1012+
NavigationPage.NavView.IsPaneOpen = !NavigationPage.NavView.IsPaneOpen;
1013+
}
1014+
1015+
private void TitleBar_OnBackRequested(WinUIEx.TitleBar sender, object args)
1016+
{
1017+
NavigationPage?.NavigateBack();
10121018
}
10131019
}
10141020

src/UniGetUI/Pages/MainView.xaml.cs

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ public sealed partial class MainView : UserControl
5555

5656
private PageType OldPage_t = PageType.Null;
5757
private PageType CurrentPage_t = PageType.Null;
58+
private List<PageType> NavigationHistory = new();
59+
60+
public event EventHandler<bool>? CanGoBackChanged;
5861

5962
public MainView()
6063
{
@@ -237,8 +240,10 @@ private void SettingsNavButton_Click(object sender, EventArgs e)
237240
private void ManagersNavButton_Click(object sender, EventArgs e)
238241
=> NavigateTo(PageType.Managers);
239242

243+
private bool _lastNavItemSelectionWasAuto;
240244
private void SelectNavButtonForPage(PageType page)
241245
{
246+
_lastNavItemSelectionWasAuto = true;
242247
NavView.SelectedItem = page switch
243248
{
244249
PageType.Discover => DiscoverNavBtn,
@@ -249,6 +254,7 @@ private void SelectNavButtonForPage(PageType page)
249254
PageType.Managers => ManagersNavBtn,
250255
_ => MoreNavBtn,
251256
};
257+
_lastNavItemSelectionWasAuto = false;
252258
}
253259

254260
private async void AboutNavButton_Click(object sender, RoutedEventArgs e)
@@ -258,26 +264,47 @@ private async void AboutNavButton_Click(object sender, RoutedEventArgs e)
258264
SelectNavButtonForPage(CurrentPage_t);
259265
}
260266

261-
public void NavigateTo(PageType NewPage_t)
267+
public void NavigateTo(PageType NewPage_t, bool toHistory = true)
262268
{
263269
SelectNavButtonForPage(NewPage_t);
264-
if (CurrentPage_t == NewPage_t) return;
270+
if (CurrentPage_t == NewPage_t)
271+
return;
265272

266273
Page NewPage = GetPageForType(NewPage_t);
267-
268274
Page? oldPage = ContentFrame.Content as Page;
269275
ContentFrame.Content = NewPage;
270276

271277
OldPage_t = CurrentPage_t;
272278
CurrentPage_t = NewPage_t;
273279

274280
(oldPage as IEnterLeaveListener)?.OnLeave();
281+
if (toHistory && OldPage_t is not PageType.Null)
282+
{
283+
NavigationHistory.Add(OldPage_t);
284+
CanGoBackChanged?.Invoke(this, true);
285+
}
275286

276287
(NewPage as AbstractPackagesPage)?.FocusPackageList();
277288
(NewPage as AbstractPackagesPage)?.FilterPackages();
278289
(NewPage as IEnterLeaveListener)?.OnEnter();
279290
}
280291

292+
public void NavigateBack()
293+
{
294+
if (ContentFrame.Content is IInnerNavigationPage navPage && navPage.CanGoBack())
295+
{
296+
navPage.GoBack();
297+
}
298+
else
299+
{
300+
NavigateTo(NavigationHistory.Last(), toHistory: false);
301+
NavigationHistory.RemoveAt(NavigationHistory.Count-1);
302+
CanGoBackChanged?.Invoke(
303+
this,
304+
NavigationHistory.Any() || ((ContentFrame.Content as IInnerNavigationPage)?.CanGoBack() ?? false));
305+
}
306+
}
307+
281308
private void ReleaseNotesMenu_Click(object sender, RoutedEventArgs e)
282309
=> DialogHelper.ShowReleaseNotes();
283310

@@ -414,15 +441,12 @@ private void ClearSuccessfulOps_Click(object sender, RoutedEventArgs e)
414441

415442
private void NavigationView_SelectionChanged(NavigationView sender, NavigationViewSelectionChangedEventArgs args)
416443
{
417-
if(args.SelectedItem is CustomNavViewItem item)
444+
if (_lastNavItemSelectionWasAuto)
445+
return;
446+
447+
if(args.SelectedItem is CustomNavViewItem item && item.Tag is not PageType.Null)
418448
{
419-
if(item.Tag is PageType.Null)
420-
{
421-
}
422-
else
423-
{
424-
NavigateTo(item.Tag);
425-
}
449+
NavigateTo(item.Tag);
426450
}
427451
}
428452

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace UniGetUI.Interface.Pages;
2+
3+
public interface IInnerNavigationPage
4+
{
5+
public bool CanGoBack();
6+
public void GoBack();
7+
}

src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ namespace UniGetUI.Pages.SettingsPages
1515
/// <summary>
1616
/// An empty page that can be used on its own or navigated to within a Frame.
1717
/// </summary>
18-
public sealed partial class SettingsBasePage : Page, IEnterLeaveListener
18+
public sealed partial class SettingsBasePage : Page, IEnterLeaveListener, IInnerNavigationPage
1919
{
2020
bool IsManagers;
2121
public SettingsBasePage(bool isManagers)
@@ -93,13 +93,14 @@ private void Page_NavigationRequested(object? sender, Type e)
9393
}
9494

9595
public void OnEnter()
96-
{
97-
MainNavigationFrame.Navigate(IsManagers ? typeof(ManagersHomepage) : typeof(SettingsHomepage), null, new DrillInNavigationTransitionInfo());
98-
}
96+
=> MainNavigationFrame.Navigate(IsManagers ? typeof(ManagersHomepage) : typeof(SettingsHomepage), null, new DrillInNavigationTransitionInfo());
9997

100-
public void OnLeave()
101-
{
98+
public void OnLeave() { }
10299

103-
}
100+
public bool CanGoBack()
101+
=> MainNavigationFrame.CanGoBack && MainNavigationFrame.Content is not SettingsHomepage && MainNavigationFrame.Content is not ManagersHomepage;
102+
103+
public void GoBack()
104+
=> MainNavigationFrame.GoBack();
104105
}
105106
}

src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -614,9 +614,9 @@
614614
x:Name="ViewModeSelector"
615615
SelectionChanged="ViewModeSelector_SelectionChanged"
616616
SelectionMode="Single">
617-
<Toolkit:SegmentedItem Icon="{ui:FontIcon Glyph=&#xE8FD;}" ToolTipService.ToolTip="List" />
618-
<Toolkit:SegmentedItem Icon="{ui:FontIcon Glyph=&#xF168;}" ToolTipService.ToolTip="Grid" />
619-
<Toolkit:SegmentedItem Icon="{ui:FontIcon Glyph=&#xF0E2;}" ToolTipService.ToolTip="Icons" />
617+
<Toolkit:SegmentedItem Icon="{ui:FontIcon Glyph=&#xE8FD;}" x:Name="Selector_List" />
618+
<Toolkit:SegmentedItem Icon="{ui:FontIcon Glyph=&#xF168;}" x:Name="Selector_Grid" />
619+
<Toolkit:SegmentedItem Icon="{ui:FontIcon Glyph=&#xF0E2;}" x:Name="Selector_Icons" />
620620
</Toolkit:Segmented>
621621
</StackPanel>
622622
</StackPanel>

src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections.Concurrent;
22
using System.Collections.ObjectModel;
33
using System.Diagnostics;
4+
using System.Runtime.Serialization;
45
using Microsoft.UI.Input;
56
using Microsoft.UI.Xaml;
67
using Microsoft.UI.Xaml.Controls;
@@ -221,6 +222,10 @@ protected AbstractPackagesPage(PackagesPageData data)
221222
if (viewMode < 0 || viewMode >= ViewModeSelector.Items.Count) viewMode = 0;
222223
ViewModeSelector.SelectedIndex = viewMode;
223224

225+
ToolTipService.SetToolTip(Selector_List, CoreTools.Translate("List"));
226+
ToolTipService.SetToolTip(Selector_Grid, CoreTools.Translate("Grid"));
227+
ToolTipService.SetToolTip(Selector_Icons, CoreTools.Translate("Icons"));
228+
224229
MainTitle.Text = data.PageTitle;
225230
HeaderIcon.Glyph = data.Glyph;
226231

0 commit comments

Comments
 (0)