Merge pull request #1368 from onesounds/RememberSizeSettingWindow

Remember Setting window Size and Location
This commit is contained in:
Jeremy Wu 2022-10-05 18:00:24 +11:00 committed by GitHub
commit 69c03cf1cd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 74 additions and 8 deletions

View file

@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Drawing;
@ -43,6 +43,11 @@ namespace Flow.Launcher.Infrastructure.UserSettings
public bool UseSound { get; set; } = true;
public bool FirstLaunch { get; set; } = true;
public double SettingWindowWidth { get; set; } = 1000;
public double SettingWindowHeight { get; set; } = 700;
public double SettingWindowTop { get; set; }
public double SettingWindowLeft { get; set; }
public int CustomExplorerIndex { get; set; } = 0;
[JsonIgnore]
@ -220,4 +225,4 @@ namespace Flow.Launcher.Infrastructure.UserSettings
Light,
Dark
}
}
}

View file

@ -13,18 +13,20 @@
xmlns:userSettings="clr-namespace:Flow.Launcher.Infrastructure.UserSettings;assembly=Flow.Launcher.Infrastructure"
xmlns:vm="clr-namespace:Flow.Launcher.ViewModel"
Title="{DynamicResource flowlauncher_settings}"
Width="1000"
Height="700"
Width="{Binding SettingWindowWidth, Mode=TwoWay}"
Height="{Binding SettingWindowHeight, Mode=TwoWay}"
MinWidth="900"
MinHeight="600"
d:DataContext="{d:DesignInstance vm:SettingWindowViewModel}"
Closed="OnClosed"
Icon="Images\app.ico"
Left="{Binding SettingWindowLeft, Mode=TwoWay}"
Loaded="OnLoaded"
MouseDown="window_MouseDown"
ResizeMode="CanResize"
StateChanged="Window_StateChanged"
WindowStartupLocation="CenterScreen"
Top="{Binding SettingWindowTop, Mode=TwoWay}"
WindowStartupLocation="Manual"
mc:Ignorable="d">
<WindowChrome.WindowChrome>
<WindowChrome CaptionHeight="32" ResizeBorderThickness="{x:Static SystemParameters.WindowResizeBorderThickness}" />
@ -1114,7 +1116,6 @@
<!--#endregion-->
<ContentControl
x:Name="PluginSettingControl"
MaxHeight="550"
Margin="0"
Padding="1"
VerticalAlignment="Stretch"

View file

@ -38,11 +38,12 @@ namespace Flow.Launcher
public SettingWindow(IPublicAPI api, SettingWindowViewModel viewModel)
{
InitializeComponent();
settings = viewModel.Settings;
DataContext = viewModel;
this.viewModel = viewModel;
API = api;
InitializePosition();
InitializeComponent();
}
#region General
@ -55,6 +56,7 @@ namespace Flow.Launcher
HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource;
HwndTarget hwndTarget = hwndSource.CompositionTarget;
hwndTarget.RenderMode = RenderMode.SoftwareOnly;
InitializePosition();
}
private void OnSelectPythonDirectoryClick(object sender, RoutedEventArgs e)
@ -243,6 +245,8 @@ namespace Flow.Launcher
private void OnClosed(object sender, EventArgs e)
{
settings.SettingWindowTop = Top;
settings.SettingWindowLeft = Left;
viewModel.Save();
}
@ -320,6 +324,7 @@ namespace Flow.Launcher
private void OnCloseButtonClick(object sender, RoutedEventArgs e)
{
Close();
}
@ -350,6 +355,36 @@ namespace Flow.Launcher
Plugins.ScrollIntoView(Plugins.SelectedItem);
}
public void InitializePosition()
{
if (settings.SettingWindowTop >= 0 && settings.SettingWindowLeft >= 0)
{
Top = settings.SettingWindowTop;
Left = settings.SettingWindowLeft;
}
else
{
Top = WindowTop();
Left = WindowLeft();
}
}
public double WindowLeft()
{
var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position);
var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.X, 0);
var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.Width, 0);
var left = (dip2.X - this.ActualWidth) / 2 + dip1.X;
return left;
}
public double WindowTop()
{
var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position);
var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Y);
var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Height);
var top = (dip2.Y - this.ActualHeight) / 2 + dip1.Y - 20;
return top;
}
private void OnExternalPluginUninstallClick(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
@ -360,6 +395,7 @@ namespace Flow.Launcher
API.ChangeQuery($"{actionKeyword} uninstall {id}");
API.ShowMainWindow();
}
}
}
}

View file

@ -51,7 +51,7 @@ namespace Flow.Launcher.ViewModel
{
await _updater.UpdateAppAsync(App.API, false);
}
public bool AutoUpdates
{
get => Settings.AutoUpdates;
@ -406,6 +406,30 @@ namespace Flow.Launcher.ViewModel
set => Settings.UseSound = value;
}
public double SettingWindowWidth
{
get => Settings.SettingWindowWidth;
set => Settings.SettingWindowWidth = value;
}
public double SettingWindowHeight
{
get => Settings.SettingWindowHeight;
set => Settings.SettingWindowHeight = value;
}
public double SettingWindowTop
{
get => Settings.SettingWindowTop;
set => Settings.SettingWindowTop = value;
}
public double SettingWindowLeft
{
get => Settings.SettingWindowLeft;
set => Settings.SettingWindowLeft = value;
}
public Brush PreviewBackground
{
get