Refactor path handling in UI components
- Removed redundant folder and file opening methods from AiTabView and FaceAiTabView. - Introduced PathPickerField control to streamline path selection and opening functionality across multiple views. - Updated FaceAiTabView and GeneralTabView to utilize PathPickerField for source and destination path selection. - Created PathShellService to encapsulate logic for opening paths in the file explorer. - Simplified XAML structure by replacing manual grid definitions with PathPickerField components. - Removed unused namespaces and cleaned up code for better readability and maintainability.
This commit is contained in:
parent
f3ac1ea920
commit
398cfa310e
10 changed files with 484 additions and 562 deletions
|
|
@ -1,6 +1,7 @@
|
|||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:avaloniaDataGrid="clr-namespace:Avalonia.Controls;assembly=Avalonia.Controls.DataGrid"
|
||||
xmlns:controls="clr-namespace:ImageCatalog_2.Controls"
|
||||
xmlns:iconPacks="https://github.com/MahApps/IconPacks.Avalonia"
|
||||
xmlns:converters="clr-namespace:ImageCatalog_2.Converters"
|
||||
x:Class="ImageCatalog_2.AvaloniaViews.FaceAiTabView"
|
||||
|
|
@ -37,34 +38,21 @@
|
|||
<TextBlock Grid.Column="4" Text="Usa --multicore in CPU e --multiprocess in GPU." VerticalAlignment="Center" TextWrapping="Wrap" Opacity="0.75" />
|
||||
</Grid>
|
||||
|
||||
<Grid ColumnDefinitions="Auto,*,Auto,Auto" ColumnSpacing="6">
|
||||
<TextBlock Grid.Column="0" Text="Sorgente:" VerticalAlignment="Center" />
|
||||
<TextBox Grid.Column="1" Name="FaceDestinationPathTextBox" Text="{Binding DestinationPath, Mode=OneWay}" IsReadOnly="True" />
|
||||
<Button Grid.Column="3" Name="FaceOpenDestinationButton" Click="OpenFaceDestinationFolder_Click" Width="72" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="Folder" Width="14" Height="14" />
|
||||
<TextBlock Text="Apri" />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
</Grid>
|
||||
<controls:PathPickerField Label="Sorgente:"
|
||||
Text="{Binding DestinationPath, Mode=TwoWay}"
|
||||
IsTextReadOnly="True"
|
||||
PreferenceKey="Picker.DestinationFolder.LastPath"
|
||||
PickerTitle="Seleziona cartella sorgente Face Encoder"
|
||||
PickerMode="Folder"
|
||||
AppendDirectorySeparator="True" />
|
||||
|
||||
<TextBlock Text="Output encodings" FontWeight="Bold" Margin="0,4,0,0" />
|
||||
<Grid ColumnDefinitions="Auto,*,Auto,Auto" ColumnSpacing="6">
|
||||
<TextBlock Grid.Column="0" Text="Cartella out:" VerticalAlignment="Center" />
|
||||
<TextBox Grid.Column="1" Name="FaceOutputFolderTextBox" Text="{Binding FaceOutputFolderPath, Mode=TwoWay}" Watermark="C:\output\face_encoder" />
|
||||
<Button Grid.Column="2" Name="FaceSelectOutputButton" Click="SelectFaceOutputFolder_Click" Width="104" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="FolderOutline" Width="14" Height="14" />
|
||||
<TextBlock Text="Scegli..." />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<Button Grid.Column="3" Name="FaceOpenOutputButton" Click="OpenFaceOutputFolder_Click" Width="72" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="Folder" Width="14" Height="14" />
|
||||
<TextBlock Text="Apri" />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
</Grid>
|
||||
<controls:PathPickerField Label="Cartella out:"
|
||||
Text="{Binding FaceOutputFolderPath, Mode=TwoWay}"
|
||||
Watermark="C:\output\face_encoder"
|
||||
PreferenceKey="Picker.FaceOutputFolder.LastPath"
|
||||
PickerTitle="Seleziona la cartella output per encodings e log"
|
||||
PickerMode="Folder" />
|
||||
<TextBlock Text="I file vengono creati come face_encodings_yyyyMMdd_HHmmss_nomecartella.pkl e encoder_log_yyyyMMdd_HHmmss_nomecartella.txt."
|
||||
TextWrapping="Wrap"
|
||||
Opacity="0.75" />
|
||||
|
|
@ -116,22 +104,12 @@
|
|||
TextWrapping="Wrap"
|
||||
Opacity="0.75" />
|
||||
|
||||
<Grid ColumnDefinitions="Auto,*,Auto,Auto" ColumnSpacing="6">
|
||||
<TextBlock Grid.Column="0" Text="Percorso:" VerticalAlignment="Center" />
|
||||
<TextBox Grid.Column="1" Name="FaceExecutablePathTextBox" Text="{Binding FaceExecutablePath, Mode=TwoWay}" Watermark="C:\tools\Face_Recognition_Windows" />
|
||||
<Button Grid.Column="2" Name="FaceSelectExecutableButton" Click="SelectFaceExecutable_Click" Width="104" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="FolderOutline" Width="14" Height="14" />
|
||||
<TextBlock Text="Scegli..." />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<Button Grid.Column="3" Name="FaceOpenExecutableButton" Click="OpenFaceExecutableFolder_Click" Width="72" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="Folder" Width="14" Height="14" />
|
||||
<TextBlock Text="Apri" />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
</Grid>
|
||||
<controls:PathPickerField Label="Percorso:"
|
||||
Text="{Binding FaceExecutablePath, Mode=TwoWay}"
|
||||
Watermark="C:\tools\Face_Recognition_Windows"
|
||||
PreferenceKey="Picker.FaceExecutableFolder.LastPath"
|
||||
PickerTitle="Seleziona la cartella Face Recognition Windows"
|
||||
PickerMode="Folder" />
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</TabItem>
|
||||
|
|
@ -146,40 +124,24 @@
|
|||
TextWrapping="Wrap" Opacity="0.8" />
|
||||
|
||||
<TextBlock Text="Eseguibile matcher" FontWeight="Bold" Margin="0,4,0,0" />
|
||||
<Grid ColumnDefinitions="Auto,*,Auto,Auto" ColumnSpacing="6">
|
||||
<TextBlock Grid.Column="0" Text="Percorso:" VerticalAlignment="Center" />
|
||||
<TextBox Grid.Column="1" Name="FaceMatcherExecutablePathTextBox" Text="{Binding FaceMatcherExecutablePath, Mode=TwoWay}" Watermark="C:\tools\Face_Recognition_Windows\face_matcher.exe" />
|
||||
<Button Grid.Column="2" Click="SelectFaceMatcherExecutable_Click" Width="104" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="FileOutline" Width="14" Height="14" />
|
||||
<TextBlock Text="Scegli..." />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<Button Grid.Column="3" Click="OpenFaceMatcherExecutable_Click" Width="72" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="Folder" Width="14" Height="14" />
|
||||
<TextBlock Text="Apri" />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
</Grid>
|
||||
<controls:PathPickerField Label="Percorso:"
|
||||
Text="{Binding FaceMatcherExecutablePath, Mode=TwoWay}"
|
||||
Watermark="C:\tools\Face_Recognition_Windows\face_matcher.exe"
|
||||
PreferenceKey="Picker.FaceMatcherExecutable.LastPath"
|
||||
PickerTitle="Seleziona face_matcher.exe"
|
||||
PickerMode="OpenFile"
|
||||
FileTypeName="Eseguibile"
|
||||
FilePatterns="*.exe" />
|
||||
|
||||
<TextBlock Text="Immagine da testare" FontWeight="Bold" Margin="0,4,0,0" />
|
||||
<Grid ColumnDefinitions="Auto,*,Auto,Auto" ColumnSpacing="6">
|
||||
<TextBlock Grid.Column="0" Text="Immagine:" VerticalAlignment="Center" />
|
||||
<TextBox Grid.Column="1" Name="FaceMatcherImagePathTextBox" Text="{Binding FaceMatcherSelectedImagePath, Mode=TwoWay}" Watermark="Percorso immagine da usare per il match" />
|
||||
<Button Grid.Column="2" Click="SelectFaceMatcherImage_Click" Width="104" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="ImageOutline" Width="14" Height="14" />
|
||||
<TextBlock Text="Scegli..." />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<Button Grid.Column="3" Click="OpenFaceMatcherImage_Click" Width="72" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="Folder" Width="14" Height="14" />
|
||||
<TextBlock Text="Apri" />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
</Grid>
|
||||
<controls:PathPickerField Label="Immagine:"
|
||||
Text="{Binding FaceMatcherSelectedImagePath, Mode=TwoWay}"
|
||||
Watermark="Percorso immagine da usare per il match"
|
||||
PreferenceKey="Picker.FaceMatcherImage.LastPath"
|
||||
PickerTitle="Seleziona immagine per il match"
|
||||
PickerMode="OpenFile"
|
||||
FileTypeName="Immagini"
|
||||
FilePatterns="*.jpg;*.jpeg;*.png;*.bmp;*.gif;*.webp" />
|
||||
<TextBlock Text="Questa immagine resta solo runtime e non viene salvata nel file impostazioni."
|
||||
TextWrapping="Wrap"
|
||||
Opacity="0.75" />
|
||||
|
|
@ -193,68 +155,43 @@
|
|||
</Border>
|
||||
</StackPanel>
|
||||
|
||||
<Grid ColumnDefinitions="Auto,*,Auto" ColumnSpacing="6">
|
||||
<TextBlock Grid.Column="0" Text="Destinazione attuale:" VerticalAlignment="Center" />
|
||||
<TextBox Grid.Column="1" Name="FaceMatcherDestinationPathTextBox" Text="{Binding DestinationPath, Mode=OneWay}" IsReadOnly="True" />
|
||||
<Button Grid.Column="2" Click="OpenFaceDestinationFolder_Click" Width="72" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="Folder" Width="14" Height="14" />
|
||||
<TextBlock Text="Apri" />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
</Grid>
|
||||
<controls:PathPickerField Label="Destinazione attuale:"
|
||||
Text="{Binding DestinationPath, Mode=TwoWay}"
|
||||
IsTextReadOnly="True"
|
||||
PreferenceKey="Picker.DestinationFolder.LastPath"
|
||||
PickerTitle="Seleziona cartella destinazione Face Matcher"
|
||||
PickerMode="Folder"
|
||||
AppendDirectorySeparator="True" />
|
||||
|
||||
<TextBlock Text="Encodings e file di appoggio" FontWeight="Bold" Margin="0,4,0,0" />
|
||||
<Grid ColumnDefinitions="Auto,*,Auto,Auto" ColumnSpacing="6">
|
||||
<TextBlock Grid.Column="0" Text="Encodings .pkl:" VerticalAlignment="Center" />
|
||||
<TextBox Grid.Column="1" Name="FaceMatcherEncodingsPathTextBox" Text="{Binding FaceMatcherEncodingsPath, Mode=TwoWay}" Watermark="Se vuoto usa l'ultimo .pkl in output encodings" />
|
||||
<Button Grid.Column="2" Click="SelectFaceMatcherEncodings_Click" Width="104" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="FileCodeOutline" Width="14" Height="14" />
|
||||
<TextBlock Text="Scegli..." />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<Button Grid.Column="3" Click="OpenFaceMatcherEncodings_Click" Width="72" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="Folder" Width="14" Height="14" />
|
||||
<TextBlock Text="Apri" />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
</Grid>
|
||||
<controls:PathPickerField Label="Encodings .pkl:"
|
||||
Text="{Binding FaceMatcherEncodingsPath, Mode=TwoWay}"
|
||||
Watermark="Se vuoto usa l'ultimo .pkl in output encodings"
|
||||
PreferenceKey="Picker.FaceMatcherEncodings.LastPath"
|
||||
PickerTitle="Seleziona file encodings .pkl"
|
||||
PickerMode="OpenFile"
|
||||
FileTypeName="Encodings"
|
||||
FilePatterns="*.pkl" />
|
||||
|
||||
<Grid ColumnDefinitions="Auto,*,Auto,Auto" ColumnSpacing="6">
|
||||
<TextBlock Grid.Column="0" Text="Risultato CSV:" VerticalAlignment="Center" />
|
||||
<TextBox Grid.Column="1" Name="FaceMatcherOutputPathTextBox" Text="{Binding FaceMatcherOutputPath, Mode=TwoWay}" Watermark="Opzionale: file/cartella output CSV" />
|
||||
<Button Grid.Column="2" Click="SelectFaceMatcherOutput_Click" Width="104" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="FileDelimitedOutline" Width="14" Height="14" />
|
||||
<TextBlock Text="Scegli..." />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<Button Grid.Column="3" Click="OpenFaceMatcherOutput_Click" Width="72" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="Folder" Width="14" Height="14" />
|
||||
<TextBlock Text="Apri" />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
</Grid>
|
||||
<controls:PathPickerField Label="Risultato CSV:"
|
||||
Text="{Binding FaceMatcherOutputPath, Mode=TwoWay}"
|
||||
Watermark="Opzionale: file/cartella output CSV"
|
||||
PreferenceKey="Picker.FaceMatcherOutput.LastPath"
|
||||
PickerTitle="Seleziona output CSV del matcher"
|
||||
PickerMode="SaveFile"
|
||||
FileTypeName="CSV"
|
||||
FilePatterns="*.csv"
|
||||
DefaultExtension="csv" />
|
||||
|
||||
<Grid ColumnDefinitions="Auto,*,Auto,Auto" ColumnSpacing="6">
|
||||
<TextBlock Grid.Column="0" Text="Log matcher:" VerticalAlignment="Center" />
|
||||
<TextBox Grid.Column="1" Name="FaceMatcherLogPathTextBox" Text="{Binding FaceMatcherLogPath, Mode=TwoWay}" Watermark="Opzionale: file/cartella log txt" />
|
||||
<Button Grid.Column="2" Click="SelectFaceMatcherLog_Click" Width="104" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="FileDocumentOutline" Width="14" Height="14" />
|
||||
<TextBlock Text="Scegli..." />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
<Button Grid.Column="3" Click="OpenFaceMatcherLog_Click" Width="72" Margin="6,0,0,0">
|
||||
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Spacing="6">
|
||||
<iconPacks:PackIconMaterial Kind="Folder" Width="14" Height="14" />
|
||||
<TextBlock Text="Apri" />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
</Grid>
|
||||
<controls:PathPickerField Label="Log matcher:"
|
||||
Text="{Binding FaceMatcherLogPath, Mode=TwoWay}"
|
||||
Watermark="Opzionale: file/cartella log txt"
|
||||
PreferenceKey="Picker.FaceMatcherLog.LastPath"
|
||||
PickerTitle="Seleziona log TXT del matcher"
|
||||
PickerMode="SaveFile"
|
||||
FileTypeName="Log"
|
||||
FilePatterns="*.txt;*.log"
|
||||
DefaultExtension="txt" />
|
||||
|
||||
<Grid ColumnDefinitions="Auto,100,*" ColumnSpacing="6">
|
||||
<TextBlock Grid.Column="0" Text="Tolleranza:" VerticalAlignment="Center" />
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue