From 0290d8f5db97607ae9b715380599dd26ec8d0ddb Mon Sep 17 00:00:00 2001 From: Alex Bezdieniezhnykh Date: Thu, 28 Nov 2024 18:04:34 +0200 Subject: [PATCH] add badge with window switch on the top right --- Azaion.Annotator/Annotator.xaml | 3 +- Azaion.Annotator/Annotator.xaml.cs | 12 ++--- .../Extensions/WindowExtensions.cs | 16 ------- Azaion.Annotator/HelpWindow.xaml.cs | 12 ++--- Azaion.Common/Constants.cs | 9 ++-- .../DTO/Config/AnnotatorWindowConfig.cs | 8 ++++ Azaion.Common/DTO/Config/AppConfig.cs | 11 ++--- Azaion.Common/DTO/Config/WindowConfig.cs | 14 ------ Azaion.Dataset/DatasetExplorer.xaml | 3 +- Azaion.Dataset/DatasetExplorerModule.cs | 2 +- Azaion.Launcher/Loader.xaml.cs | 4 +- Azaion.Suite/App.xaml.cs | 25 ++++++---- Azaion.Suite/Azaion.Suite.csproj | 9 +++- Azaion.Suite/MainSuite.xaml | 45 ++++++++++++++++-- Azaion.Suite/MainSuite.xaml.cs | 42 ++++++++++++---- Azaion.Suite/logo.png | Bin 0 -> 50930 bytes Azaion.Suite/upload.cmd | 41 +++++++++------- 17 files changed, 160 insertions(+), 96 deletions(-) delete mode 100644 Azaion.Annotator/Extensions/WindowExtensions.cs create mode 100644 Azaion.Common/DTO/Config/AnnotatorWindowConfig.cs delete mode 100644 Azaion.Common/DTO/Config/WindowConfig.cs create mode 100644 Azaion.Suite/logo.png diff --git a/Azaion.Annotator/Annotator.xaml b/Azaion.Annotator/Annotator.xaml index b2f7911..24161c8 100644 --- a/Azaion.Annotator/Annotator.xaml +++ b/Azaion.Annotator/Annotator.xaml @@ -7,7 +7,8 @@ xmlns:controls1="clr-namespace:Azaion.Common.Controls;assembly=Azaion.Common" xmlns:controls2="clr-namespace:Azaion.Annotator.Controls;assembly=Azaion.Common" mc:Ignorable="d" - Title="Azaion Annotator" Height="450" Width="1100" + Title="Azaion Annotator" Height="800" Width="1100" + WindowState="Maximized" > diff --git a/Azaion.Annotator/Annotator.xaml.cs b/Azaion.Annotator/Annotator.xaml.cs index 7a96d2a..1c52a90 100644 --- a/Azaion.Annotator/Annotator.xaml.cs +++ b/Azaion.Annotator/Annotator.xaml.cs @@ -76,21 +76,21 @@ public partial class Annotator _vlcFrameExtractor = vlcFrameExtractor; _aiDetector = aiDetector; - Loaded += VideoView_Loaded; + Loaded += OnLoaded; Closed += OnFormClosed; Editor.GetTimeFunc = () => TimeSpan.FromMilliseconds(_mediaPlayer.Time); } - private void VideoView_Loaded(object sender, RoutedEventArgs e) + private void OnLoaded(object sender, RoutedEventArgs e) { Core.Initialize(); InitControls(); _suspendLayout = true; - MainGrid.ColumnDefinitions.FirstOrDefault()!.Width = new GridLength(_appConfig.WindowConfig.LeftPanelWidth); - MainGrid.ColumnDefinitions.LastOrDefault()!.Width = new GridLength(_appConfig.WindowConfig.RightPanelWidth); + MainGrid.ColumnDefinitions.FirstOrDefault()!.Width = new GridLength(_appConfig.AnnotatorWindowConfig.LeftPanelWidth); + MainGrid.ColumnDefinitions.LastOrDefault()!.Width = new GridLength(_appConfig.AnnotatorWindowConfig.RightPanelWidth); _suspendLayout = false; @@ -229,8 +229,8 @@ public partial class Annotator if (_suspendLayout) return; - _appConfig.WindowConfig.LeftPanelWidth = MainGrid.ColumnDefinitions.FirstOrDefault()!.Width.Value; - _appConfig.WindowConfig.RightPanelWidth = MainGrid.ColumnDefinitions.LastOrDefault()!.Width.Value; + _appConfig.AnnotatorWindowConfig.LeftPanelWidth = MainGrid.ColumnDefinitions.FirstOrDefault()!.Width.Value; + _appConfig.AnnotatorWindowConfig.RightPanelWidth = MainGrid.ColumnDefinitions.LastOrDefault()!.Width.Value; await ThrottleExt.Throttle(() => { diff --git a/Azaion.Annotator/Extensions/WindowExtensions.cs b/Azaion.Annotator/Extensions/WindowExtensions.cs deleted file mode 100644 index fe72f66..0000000 --- a/Azaion.Annotator/Extensions/WindowExtensions.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Windows; -using Azaion.Annotator.DTO; -using Azaion.Common.DTO.Config; - -namespace Azaion.Annotator.Extensions; - -public static class WindowExtensions -{ - public static WindowConfig GetConfig(this Window window) => - new() - { - WindowSize = new Size(window.Width, window.Height), - WindowLocation = new Point(window.Left, window.Top), - FullScreen = window.WindowState == WindowState.Maximized - }; -} \ No newline at end of file diff --git a/Azaion.Annotator/HelpWindow.xaml.cs b/Azaion.Annotator/HelpWindow.xaml.cs index b9e3518..f5e7cc3 100644 --- a/Azaion.Annotator/HelpWindow.xaml.cs +++ b/Azaion.Annotator/HelpWindow.xaml.cs @@ -6,12 +6,12 @@ namespace Azaion.Annotator; public partial class HelpWindow : Window { - private readonly WindowConfig _windowConfig; + private readonly AnnotatorWindowConfig _annotatorWindowConfig; - public HelpWindow(IOptions windowConfig) + public HelpWindow(IOptions windowConfig) { - _windowConfig = windowConfig.Value; - Loaded += (_, _) => CbShowHelp.IsChecked = _windowConfig.ShowHelpOnStart; + _annotatorWindowConfig = windowConfig.Value; + Loaded += (_, _) => CbShowHelp.IsChecked = _annotatorWindowConfig.ShowHelpOnStart; Closing += (sender, args) => { args.Cancel = true; @@ -20,7 +20,7 @@ public partial class HelpWindow : Window InitializeComponent(); } - private void CbShowHelp_OnChecked(object sender, RoutedEventArgs e) => _windowConfig.ShowHelpOnStart = true; - private void CbShowHelp_OnUnchecked(object sender, RoutedEventArgs e) => _windowConfig.ShowHelpOnStart = false; + private void CbShowHelp_OnChecked(object sender, RoutedEventArgs e) => _annotatorWindowConfig.ShowHelpOnStart = true; + private void CbShowHelp_OnUnchecked(object sender, RoutedEventArgs e) => _annotatorWindowConfig.ShowHelpOnStart = false; } \ No newline at end of file diff --git a/Azaion.Common/Constants.cs b/Azaion.Common/Constants.cs index f5295ec..8464329 100644 --- a/Azaion.Common/Constants.cs +++ b/Azaion.Common/Constants.cs @@ -56,16 +56,17 @@ public class Constants # endregion AIRecognitionConfig - # region WindowConfig + # region AnnotatorWindowConfig - public static readonly Size DefaultWindowSize = new(1280, 720); - public static readonly Point DefaultWindowLocation = new(100, 100); - public static readonly Size DefaultThumbnailSize = new(240, 135); + public static int DEFAULT_LEFT_PANEL_WIDTH = 250; + public static int DEFAULT_RIGHT_PANEL_WIDTH = 250; #endregion #region Thumbnails + public static readonly Size DefaultThumbnailSize = new(240, 135); + public const int DEFAULT_THUMBNAIL_BORDER = 10; public const string THUMBNAIL_PREFIX = "_thumb"; diff --git a/Azaion.Common/DTO/Config/AnnotatorWindowConfig.cs b/Azaion.Common/DTO/Config/AnnotatorWindowConfig.cs new file mode 100644 index 0000000..6c7d8aa --- /dev/null +++ b/Azaion.Common/DTO/Config/AnnotatorWindowConfig.cs @@ -0,0 +1,8 @@ +namespace Azaion.Common.DTO.Config; + +public class AnnotatorWindowConfig +{ + public double LeftPanelWidth { get; set; } + public double RightPanelWidth { get; set; } + public bool ShowHelpOnStart { get; set; } +} \ No newline at end of file diff --git a/Azaion.Common/DTO/Config/AppConfig.cs b/Azaion.Common/DTO/Config/AppConfig.cs index 84528cb..60cdb37 100644 --- a/Azaion.Common/DTO/Config/AppConfig.cs +++ b/Azaion.Common/DTO/Config/AppConfig.cs @@ -12,7 +12,7 @@ public class AppConfig public AnnotationConfig AnnotationConfig { get; set; } = null!; - public WindowConfig WindowConfig { get; set; } = null!; + public AnnotatorWindowConfig AnnotatorWindowConfig { get; set; } = null!; public AIRecognitionConfig AIRecognitionConfig { get; set; } = null!; @@ -51,13 +51,10 @@ public class ConfigUpdater : IConfigUpdater ImageFormats = Constants.DefaultImageFormats, }, - WindowConfig = new WindowConfig + AnnotatorWindowConfig = new AnnotatorWindowConfig { - WindowSize = Constants.DefaultWindowSize, - WindowLocation = Constants.DefaultWindowLocation, - FullScreen = true, - LeftPanelWidth = 250, - RightPanelWidth = 250, + LeftPanelWidth = Constants.DEFAULT_LEFT_PANEL_WIDTH, + RightPanelWidth = Constants.DEFAULT_RIGHT_PANEL_WIDTH }, DirectoriesConfig = new DirectoriesConfig diff --git a/Azaion.Common/DTO/Config/WindowConfig.cs b/Azaion.Common/DTO/Config/WindowConfig.cs deleted file mode 100644 index 98a5097..0000000 --- a/Azaion.Common/DTO/Config/WindowConfig.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Windows; - -namespace Azaion.Common.DTO.Config; - -public class WindowConfig -{ - public Size WindowSize { get; set; } - public Point WindowLocation { get; set; } - public bool FullScreen { get; set; } - - public double LeftPanelWidth { get; set; } - public double RightPanelWidth { get; set; } - public bool ShowHelpOnStart { get; set; } -} \ No newline at end of file diff --git a/Azaion.Dataset/DatasetExplorer.xaml b/Azaion.Dataset/DatasetExplorer.xaml index f267355..87aeff0 100644 --- a/Azaion.Dataset/DatasetExplorer.xaml +++ b/Azaion.Dataset/DatasetExplorer.xaml @@ -9,7 +9,8 @@ xmlns:controls="clr-namespace:Azaion.Common.Controls;assembly=Azaion.Common" xmlns:controls1="clr-namespace:Azaion.Annotator.Controls;assembly=Azaion.Common" mc:Ignorable="d" - Title="Переглядач анотацій" Height="900" Width="1200"> + Title="Переглядач анотацій" Height="900" Width="1200" + WindowState="Maximized"> diff --git a/Azaion.Dataset/DatasetExplorerModule.cs b/Azaion.Dataset/DatasetExplorerModule.cs index 37a2922..c907ec5 100644 --- a/Azaion.Dataset/DatasetExplorerModule.cs +++ b/Azaion.Dataset/DatasetExplorerModule.cs @@ -4,7 +4,7 @@ namespace Azaion.Dataset; public class DatasetExplorerModule : IAzaionModule { - public string Name => "Переглядач Анотацій"; + public string Name => "Переглядач"; public string SvgIcon => @" diff --git a/Azaion.Launcher/Loader.xaml.cs b/Azaion.Launcher/Loader.xaml.cs index 13a66c4..299aa78 100644 --- a/Azaion.Launcher/Loader.xaml.cs +++ b/Azaion.Launcher/Loader.xaml.cs @@ -12,9 +12,11 @@ public partial class Loader : Window InitializeComponent(); } - private void RunClick(object sender, RoutedEventArgs e) + private async void RunClick(object sender, RoutedEventArgs e) { Process.Start("Azaion.Suite.exe", $"-e {TbEmail.Text} -p {TbPassword.Password}"); + await Task.Delay(2000); + Close(); } private void CloseClick(object sender, RoutedEventArgs e) => Close(); diff --git a/Azaion.Suite/App.xaml.cs b/Azaion.Suite/App.xaml.cs index a8bcd56..f7ee763 100644 --- a/Azaion.Suite/App.xaml.cs +++ b/Azaion.Suite/App.xaml.cs @@ -1,7 +1,6 @@ using System.IO; using System.Net.Http; using System.Windows; -using System.Windows.Controls; using System.Windows.Input; using System.Windows.Threading; using Azaion.Annotator; @@ -104,7 +103,7 @@ public partial class App services.ConfigureSection(context.Configuration); services.ConfigureSection(context.Configuration); services.ConfigureSection(context.Configuration); - services.ConfigureSection(context.Configuration); + services.ConfigureSection(context.Configuration); services.ConfigureSection(context.Configuration); services.ConfigureSection(context.Configuration); @@ -171,18 +170,26 @@ public partial class App _ = ThrottleExt.Throttle(() => _mediator.Publish(keyEvent), TimeSpan.FromMilliseconds(50)); } + private readonly Dictionary _uiElementToWindowEnum = new() + { + { "LibVLCSharp.WPF.ForegroundWindow", WindowEnum.Annotator }, + { "Azaion.Annotator.Annotator", WindowEnum.Annotator }, + { "Azaion.Annotator.DatasetExplorer", WindowEnum.DatasetExplorer } + }; + private WindowEnum GetParentWindow(FrameworkElement? element) { - if (element?.GetType().Name == "LibVLCSharp.WPF.ForegroundWindow") - return WindowEnum.Annotator; + while (element != null) + { + var windowEnum = _uiElementToWindowEnum!.GetValueOrDefault(element.GetType().FullName); + + if (windowEnum != WindowEnum.None) + return windowEnum; - while (element != null && element is not TabItem) element = element.Parent as FrameworkElement; + } - if (element is not TabItem || element.Tag == null) - return WindowEnum.None; - - return (WindowEnum)element.Tag; + return WindowEnum.None; } diff --git a/Azaion.Suite/Azaion.Suite.csproj b/Azaion.Suite/Azaion.Suite.csproj index cb5a641..6d11ed8 100644 --- a/Azaion.Suite/Azaion.Suite.csproj +++ b/Azaion.Suite/Azaion.Suite.csproj @@ -33,11 +33,18 @@ + + + + PreserveNewest + + + - + diff --git a/Azaion.Suite/MainSuite.xaml b/Azaion.Suite/MainSuite.xaml index 6ebe207..1589da7 100644 --- a/Azaion.Suite/MainSuite.xaml +++ b/Azaion.Suite/MainSuite.xaml @@ -4,19 +4,58 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" - Title="Azaion Оператор" Height="100" Width="200" + Title="Azaion Оператор" Height="60" Width="214" WindowStyle="None" ResizeMode="NoResize" Top="0" Topmost="True" > - - + + + + + + + + + + + + + + diff --git a/Azaion.Suite/MainSuite.xaml.cs b/Azaion.Suite/MainSuite.xaml.cs index bc9ec5f..8c8e790 100644 --- a/Azaion.Suite/MainSuite.xaml.cs +++ b/Azaion.Suite/MainSuite.xaml.cs @@ -18,7 +18,7 @@ public partial class MainSuite private readonly IConfigUpdater _configUpdater; private readonly IEnumerable _modules; private readonly IServiceProvider _sp; - private readonly List _openedWindows = new(); + private readonly Dictionary _openedWindows = new(); public MainSuite(IOptions appConfig, IConfigUpdater configUpdater, IEnumerable modules, IServiceProvider sp ) { @@ -33,7 +33,7 @@ public partial class MainSuite SizeChanged += async (_, _) => await SaveUserSettings(); LocationChanged += async (_, _) => await SaveUserSettings(); StateChanged += async (_, _) => await SaveUserSettings(); - Left = SystemParameters.WorkArea.Width - Width - 150; + Left = SystemParameters.WorkArea.Width - Width - 250; } private void OnLoaded(object sender, RoutedEventArgs e) @@ -71,15 +71,35 @@ public partial class MainSuite Cursor = Cursors.Hand, Tag = azaionModule }; - lvItem.MouseUp += (sender, _) => - { - var module = ((sender as ListViewItem)!.Tag as IAzaionModule)!; - var window = (_sp.GetRequiredService(module.MainWindowType) as Window)!; - _openedWindows.Add(window); - window.Show(); - }; + lvItem.MouseUp += (lv, _) => OpenWindow((lv as ListViewItem)!); ListView.Items.Add(lvItem); } + + + //by default show first + ListView.SelectedIndex = 0; + OpenWindow((ListView.Items[0] as ListViewItem)!); + } + + private void OpenWindow(ListViewItem sender) + { + var module = (sender.Tag as IAzaionModule)!; + var window = (_sp.GetRequiredService(module.MainWindowType) as Window)!; + + if (_openedWindows.ContainsKey(module.WindowEnum)) + window.Activate(); + else + { + _openedWindows[module.WindowEnum] = window; + window.Closed += (_, _) => + { + _openedWindows.Remove(module.WindowEnum); + if (!_openedWindows.Any()) + Close(); + }; + window.Show(); + window.Activate(); + } } private async Task SaveUserSettings() @@ -95,7 +115,9 @@ public partial class MainSuite { _configUpdater.Save(_appConfig); foreach (var window in _openedWindows) - window.Close(); + window.Value.Close(); Application.Current.Shutdown(); } + + private void CloseBtn_OnClick(object sender, RoutedEventArgs e) => Close(); } \ No newline at end of file diff --git a/Azaion.Suite/logo.png b/Azaion.Suite/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..094e3c1d32d65c7de6a9e64c2ceed06354e5f7ce GIT binary patch literal 50930 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 Ap#T5? literal 0 HcmV?d00001 diff --git a/Azaion.Suite/upload.cmd b/Azaion.Suite/upload.cmd index b013bc4..a0291f7 100644 --- a/Azaion.Suite/upload.cmd +++ b/Azaion.Suite/upload.cmd @@ -1,14 +1,22 @@ setlocal enabledelayedexpansion +set CONFIG=%1 +@echo off + +set API_URL=https://api.azaion.com -set LOGIN_URL=https://api.azaion.com/login -set RESOURCE_URL=https://api.azaion.com/resources set EMAIL=uploader@azaion.com set PASSWORD=Az@1on_10Upl0@der -set FILE_TO_UPLOAD=bin\Release\net8.0-windows\secure\Azaion.Annotator.dll + +set FILE1_TO_UPLOAD=%cd%\bin\%CONFIG%\net8.0-windows\secure\Azaion.Annotator.dll +set "FILE1_TO_UPLOAD=%FILE1_TO_UPLOAD:\=/%" + +set FILE2_TO_UPLOAD=%cd%\bin\%CONFIG%\net8.0-windows\secure\Azaion.Dataset.dll +set "FILE2_TO_UPLOAD=%FILE2_TO_UPLOAD:\=/%" + echo Logging in and retrieving token... for /f "tokens=*" %%i in ('curl -s -X POST -H "Content-Type: application/json" ^ - -d "{\"email\":\"%EMAIL%\",\"password\":\"%PASSWORD%\"}" %LOGIN_URL%') do set RESPONSE=%%i + -d "{\"email\":\"%EMAIL%\",\"password\":\"%PASSWORD%\"}" %API_URL%/login') do set RESPONSE=%%i for /f "tokens=2 delims=:" %%a in ('echo %RESPONSE% ^| findstr /i "token"') do ( set "TOKEN=%%a" @@ -16,18 +24,19 @@ for /f "tokens=2 delims=:" %%a in ('echo %RESPONSE% ^| findstr /i "token"') do ( set "TOKEN=!TOKEN:~0,-2!" ) -echo Token retrieved: %TOKEN% - :: Step 2: Upload the DLL file -if not exist "%FILE_TO_UPLOAD%" ( - echo File %FILE_TO_UPLOAD% does not exist. Exiting... - exit /b 1 -) -echo Uploading file to resources... -curl -X POST -H "Authorization: Bearer %TOKEN%" ^ - -H "Content-Type: application/octet-stream" ^ - --data-binary @"%FILE_TO_UPLOAD%" ^ - %RESOURCE_URL% +echo Uploading files to resources... -echo Done! \ No newline at end of file +curl --location %API_URL%/resources ^ + -H "Authorization: Bearer %TOKEN%" ^ + -H "Content-Type: multipart/form-data" ^ + --form "data=@%FILE1_TO_UPLOAD%" + +curl --location %API_URL%/resources ^ + -H "Authorization: Bearer %TOKEN%" ^ + -H "Content-Type: multipart/form-data" ^ + --form "data=@%FILE2_TO_UPLOAD%" + + +echo Done!