mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
[GUI] Added a window to edit AaruFormat files basic metadata.
This commit is contained in:
359
Aaru.Gui/ViewModels/Windows/ImageMetadataViewModel.cs
Normal file
359
Aaru.Gui/ViewModels/Windows/ImageMetadataViewModel.cs
Normal file
@@ -0,0 +1,359 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Input;
|
||||||
|
using Aaru.CommonTypes;
|
||||||
|
using Aaru.CommonTypes.Enums;
|
||||||
|
using Aaru.CommonTypes.Interfaces;
|
||||||
|
using Aaru.Core;
|
||||||
|
using Aaru.Gui.Views.Windows;
|
||||||
|
using Aaru.Images;
|
||||||
|
using Aaru.Localization;
|
||||||
|
using Aaru.Logging;
|
||||||
|
using Avalonia.Platform.Storage;
|
||||||
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
|
using CommunityToolkit.Mvvm.Input;
|
||||||
|
using Humanizer;
|
||||||
|
using MsBox.Avalonia;
|
||||||
|
using MsBox.Avalonia.Base;
|
||||||
|
using MsBox.Avalonia.Enums;
|
||||||
|
using ImageInfo = Aaru.CommonTypes.Structs.ImageInfo;
|
||||||
|
|
||||||
|
namespace Aaru.Gui.ViewModels.Windows;
|
||||||
|
|
||||||
|
public sealed partial class ImageMetadataViewModel : ViewModelBase
|
||||||
|
{
|
||||||
|
readonly ImageMetadata _view;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _comments;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _commentsNotSet = true;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _creator;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _creatorNotSet = true;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _driveFirmwareRevision;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _driveFirmwareRevisionNotSet = true;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _driveManufacturer;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _driveManufacturerNotSet = true;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _driveModel;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _driveModelNotSet = true;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _driveSerialNumber;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _driveSerialNumberNotSet = true;
|
||||||
|
AaruFormat _imageFormat;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _imagePath;
|
||||||
|
IFilter _inputFilter;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _isOpened;
|
||||||
|
[ObservableProperty]
|
||||||
|
int _mediaLastSequence;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _mediaManufacturer;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _mediaManufacturerNotSet = true;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _mediaModel;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _mediaModelNotSet = true;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _mediaPartNumber;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _mediaPartNumberNotSet = true;
|
||||||
|
[ObservableProperty]
|
||||||
|
int _mediaSequence;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _mediaSerialNumber;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _mediaSerialNumberNotSet = true;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _mediaTitle;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _mediaTitleNotSet = true;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _mediaType;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _sequenceNotSet = true;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _size;
|
||||||
|
|
||||||
|
|
||||||
|
public ImageMetadataViewModel(ImageMetadata view)
|
||||||
|
{
|
||||||
|
_view = view;
|
||||||
|
OpenImageCommand = new AsyncRelayCommand(OpenImageAsync);
|
||||||
|
LoadMetadataCommand = new RelayCommand(LoadMetadata);
|
||||||
|
SaveMetadataCommand = new AsyncRelayCommand(SaveMetadataAsync);
|
||||||
|
CloseCommand = new RelayCommand(Close);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICommand OpenImageCommand { get; }
|
||||||
|
public ICommand LoadMetadataCommand { get; }
|
||||||
|
|
||||||
|
public ICommand SaveMetadataCommand { get; }
|
||||||
|
public ICommand CloseCommand { get; }
|
||||||
|
|
||||||
|
static FilePickerFileType AaruFormatFiles { get; } = new(UI.AaruFormat_files)
|
||||||
|
{
|
||||||
|
Patterns = new AaruFormat().KnownExtensions.Select(static s => $"*{s}").ToList(),
|
||||||
|
MimeTypes = ["application/octet-stream"]
|
||||||
|
};
|
||||||
|
|
||||||
|
void Close()
|
||||||
|
{
|
||||||
|
CloseImage();
|
||||||
|
|
||||||
|
_view.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CloseImage()
|
||||||
|
{
|
||||||
|
if(!IsOpened) return;
|
||||||
|
|
||||||
|
_imageFormat.Close();
|
||||||
|
IsOpened = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task SaveMetadataAsync()
|
||||||
|
{
|
||||||
|
if(!IsOpened) return;
|
||||||
|
|
||||||
|
var info = new ImageInfo
|
||||||
|
{
|
||||||
|
MediaSequence = SequenceNotSet ? 0 : MediaSequence,
|
||||||
|
LastMediaSequence = SequenceNotSet ? 0 : MediaLastSequence,
|
||||||
|
Creator = CreatorNotSet ? null : Creator,
|
||||||
|
Comments = CommentsNotSet ? null : Comments,
|
||||||
|
MediaTitle = MediaTitleNotSet ? null : MediaTitle,
|
||||||
|
MediaManufacturer = MediaManufacturerNotSet ? null : MediaManufacturer,
|
||||||
|
MediaModel = MediaModelNotSet ? null : MediaModel,
|
||||||
|
MediaSerialNumber = MediaSerialNumberNotSet ? null : MediaSerialNumber,
|
||||||
|
MediaPartNumber = MediaPartNumberNotSet ? null : MediaPartNumber,
|
||||||
|
DriveManufacturer = DriveManufacturerNotSet ? null : DriveManufacturer,
|
||||||
|
DriveModel = DriveModelNotSet ? null : DriveModel,
|
||||||
|
DriveSerialNumber = DriveSerialNumberNotSet ? null : DriveSerialNumber,
|
||||||
|
DriveFirmwareRevision = DriveFirmwareRevisionNotSet ? null : DriveFirmwareRevision
|
||||||
|
};
|
||||||
|
|
||||||
|
ulong sectors = _imageFormat.Info.Sectors;
|
||||||
|
MediaType mediaType = _imageFormat.Info.MediaType;
|
||||||
|
uint negativeSectors = _imageFormat.Info.NegativeSectors;
|
||||||
|
uint overflowSectors = _imageFormat.Info.OverflowSectors;
|
||||||
|
uint sectorSize = _imageFormat.Info.SectorSize;
|
||||||
|
|
||||||
|
// We close the read-only context and reopen it in resume mode
|
||||||
|
_imageFormat.Close();
|
||||||
|
|
||||||
|
bool ret = _imageFormat.Create(ImagePath, mediaType, [], sectors, negativeSectors, overflowSectors, sectorSize);
|
||||||
|
|
||||||
|
IMsBox<ButtonResult> msbox;
|
||||||
|
|
||||||
|
if(!ret)
|
||||||
|
{
|
||||||
|
AaruLogging.Error(UI.Error_reopening_image_for_writing);
|
||||||
|
AaruLogging.Error(_imageFormat.ErrorMessage);
|
||||||
|
|
||||||
|
msbox = MessageBoxManager.GetMessageBoxStandard(UI.Title_Error,
|
||||||
|
UI.There_was_an_error_reopening_the_image_for_writing,
|
||||||
|
ButtonEnum.Ok,
|
||||||
|
Icon.Error);
|
||||||
|
|
||||||
|
await msbox.ShowAsync();
|
||||||
|
|
||||||
|
_view.Close();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now we set the metadata
|
||||||
|
_imageFormat.SetImageInfo(info);
|
||||||
|
|
||||||
|
// We close the image
|
||||||
|
_imageFormat.Close();
|
||||||
|
|
||||||
|
// And we re-open it in read-only mode
|
||||||
|
ErrorNumber errno = _imageFormat.Open(_inputFilter);
|
||||||
|
|
||||||
|
if(errno != ErrorNumber.NoError)
|
||||||
|
{
|
||||||
|
AaruLogging.Error(UI.Error_reopening_image_in_read_only_mode_after_writing_metadata);
|
||||||
|
AaruLogging.Error(Localization.Core.Error_0, errno);
|
||||||
|
|
||||||
|
msbox = MessageBoxManager.GetMessageBoxStandard(UI.Title_Error,
|
||||||
|
UI
|
||||||
|
.There_was_an_error_reopening_the_image_in_read_only_mode_after_writing_metadata,
|
||||||
|
ButtonEnum.Ok,
|
||||||
|
Icon.Error);
|
||||||
|
|
||||||
|
await msbox.ShowAsync();
|
||||||
|
|
||||||
|
_view.Close();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
msbox = MessageBoxManager.GetMessageBoxStandard(Localization.Core.Success,
|
||||||
|
UI.Metadata_saved_successfully,
|
||||||
|
ButtonEnum.Ok,
|
||||||
|
Icon.Success);
|
||||||
|
|
||||||
|
await msbox.ShowAsync();
|
||||||
|
|
||||||
|
LoadMetadata();
|
||||||
|
}
|
||||||
|
|
||||||
|
void LoadMetadata()
|
||||||
|
{
|
||||||
|
if(!IsOpened) return;
|
||||||
|
|
||||||
|
MediaSequence = _imageFormat.Info.MediaSequence;
|
||||||
|
MediaLastSequence = _imageFormat.Info.LastMediaSequence;
|
||||||
|
Creator = _imageFormat.Info.Creator;
|
||||||
|
Comments = _imageFormat.Info.Comments;
|
||||||
|
MediaTitle = _imageFormat.Info.MediaTitle;
|
||||||
|
MediaManufacturer = _imageFormat.Info.MediaManufacturer;
|
||||||
|
MediaModel = _imageFormat.Info.MediaModel;
|
||||||
|
MediaSerialNumber = _imageFormat.Info.MediaSerialNumber;
|
||||||
|
MediaPartNumber = _imageFormat.Info.MediaPartNumber;
|
||||||
|
DriveManufacturer = _imageFormat.Info.DriveManufacturer;
|
||||||
|
DriveModel = _imageFormat.Info.DriveModel;
|
||||||
|
DriveSerialNumber = _imageFormat.Info.DriveSerialNumber;
|
||||||
|
DriveFirmwareRevision = _imageFormat.Info.DriveFirmwareRevision;
|
||||||
|
SequenceNotSet = MediaSequence == 0 || MediaLastSequence == 0;
|
||||||
|
CreatorNotSet = string.IsNullOrEmpty(Creator);
|
||||||
|
CommentsNotSet = string.IsNullOrEmpty(Comments);
|
||||||
|
MediaTitleNotSet = string.IsNullOrEmpty(MediaTitle);
|
||||||
|
MediaManufacturerNotSet = string.IsNullOrEmpty(MediaManufacturer);
|
||||||
|
MediaModelNotSet = string.IsNullOrEmpty(MediaModel);
|
||||||
|
MediaSerialNumberNotSet = string.IsNullOrEmpty(MediaSerialNumber);
|
||||||
|
MediaPartNumberNotSet = string.IsNullOrEmpty(MediaPartNumber);
|
||||||
|
DriveManufacturerNotSet = string.IsNullOrEmpty(DriveManufacturer);
|
||||||
|
DriveModelNotSet = string.IsNullOrEmpty(DriveModel);
|
||||||
|
DriveSerialNumberNotSet = string.IsNullOrEmpty(DriveSerialNumber);
|
||||||
|
DriveFirmwareRevisionNotSet = string.IsNullOrEmpty(DriveFirmwareRevision);
|
||||||
|
}
|
||||||
|
|
||||||
|
async Task OpenImageAsync()
|
||||||
|
{
|
||||||
|
IReadOnlyList<IStorageFile> result = await _view.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
|
||||||
|
{
|
||||||
|
Title = UI.Dialog_Choose_image_to_open,
|
||||||
|
AllowMultiple = false,
|
||||||
|
FileTypeFilter = [AaruFormatFiles]
|
||||||
|
});
|
||||||
|
|
||||||
|
// Exit if user did not select exactly one file
|
||||||
|
if(result.Count != 1) return;
|
||||||
|
|
||||||
|
// Get the appropriate filter plugin for the selected file
|
||||||
|
IFilter inputFilter = PluginRegister.Singleton.GetFilter(result[0].Path.LocalPath);
|
||||||
|
|
||||||
|
// Show error if no suitable filter plugin is found
|
||||||
|
if(inputFilter == null)
|
||||||
|
{
|
||||||
|
IMsBox<ButtonResult> msbox = MessageBoxManager.GetMessageBoxStandard(UI.Title_Error,
|
||||||
|
UI.Cannot_open_specified_file,
|
||||||
|
ButtonEnum.Ok,
|
||||||
|
Icon.Error);
|
||||||
|
|
||||||
|
await msbox.ShowAsync();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Detect the image format of the selected file
|
||||||
|
if(ImageFormat.Detect(inputFilter) is not AaruFormat imageFormat)
|
||||||
|
{
|
||||||
|
IMsBox<ButtonResult> msbox = MessageBoxManager.GetMessageBoxStandard(UI.Title_Error,
|
||||||
|
UI.File_is_not_an_AaruFormat_image,
|
||||||
|
ButtonEnum.Ok,
|
||||||
|
Icon.Error);
|
||||||
|
|
||||||
|
await msbox.ShowAsync();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Open the image file
|
||||||
|
ErrorNumber opened = imageFormat.Open(inputFilter);
|
||||||
|
|
||||||
|
if(opened != ErrorNumber.NoError)
|
||||||
|
{
|
||||||
|
IMsBox<ButtonResult> msbox = MessageBoxManager.GetMessageBoxStandard(UI.Title_Error,
|
||||||
|
string.Format(UI.Error_0_opening_image_format, opened),
|
||||||
|
ButtonEnum.Ok,
|
||||||
|
Icon.Error);
|
||||||
|
|
||||||
|
await msbox.ShowAsync();
|
||||||
|
|
||||||
|
AaruLogging.Error(UI.Unable_to_open_image_format);
|
||||||
|
AaruLogging.Error(UI.No_error_given);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(imageFormat.Info.Version.StartsWith("1.", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
IMsBox<ButtonResult> msbox = MessageBoxManager.GetMessageBoxStandard(UI.Title_Warning,
|
||||||
|
UI.AaruFormat_images_version_1_x_are_read_only,
|
||||||
|
ButtonEnum.Ok,
|
||||||
|
Icon.Warning);
|
||||||
|
|
||||||
|
await msbox.ShowAsync();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ImagePath = $"[lime]{result[0].Path.LocalPath}[/]";
|
||||||
|
MediaType = $"[orange]{imageFormat.Info.MediaType.Humanize()}[/]";
|
||||||
|
|
||||||
|
Size =
|
||||||
|
$"[teal]{ByteSize.FromBytes(imageFormat.Info.Sectors * imageFormat.Info.SectorSize).Humanize()}[/]";
|
||||||
|
|
||||||
|
_inputFilter = inputFilter;
|
||||||
|
_imageFormat = imageFormat;
|
||||||
|
IsOpened = true;
|
||||||
|
|
||||||
|
LoadMetadata();
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
IMsBox<ButtonResult> msbox = MessageBoxManager.GetMessageBoxStandard(UI.Title_Error,
|
||||||
|
UI.Unable_to_open_image_format,
|
||||||
|
ButtonEnum.Ok,
|
||||||
|
Icon.Error);
|
||||||
|
|
||||||
|
await msbox.ShowAsync();
|
||||||
|
|
||||||
|
AaruLogging.Error(UI.Unable_to_open_image_format);
|
||||||
|
AaruLogging.Error(Localization.Core.Error_0, ex.Message);
|
||||||
|
AaruLogging.Exception(ex, Localization.Core.Error_0, ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
IMsBox<ButtonResult> msbox = MessageBoxManager.GetMessageBoxStandard(UI.Title_Error,
|
||||||
|
UI.Exception_reading_file,
|
||||||
|
ButtonEnum.Ok,
|
||||||
|
Icon.Error);
|
||||||
|
|
||||||
|
await msbox.ShowAsync();
|
||||||
|
|
||||||
|
AaruLogging.Error(string.Format(UI.Error_reading_file_0, ex.Message));
|
||||||
|
AaruLogging.Exception(ex, UI.Error_reading_file_0, ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -118,6 +118,7 @@ public partial class MainWindowViewModel : ViewModelBase
|
|||||||
OpenIbgLogCommand = new AsyncRelayCommand(OpenIbgLogAsync);
|
OpenIbgLogCommand = new AsyncRelayCommand(OpenIbgLogAsync);
|
||||||
ConnectToRemoteCommand = new AsyncRelayCommand(ConnectToRemoteAsync);
|
ConnectToRemoteCommand = new AsyncRelayCommand(ConnectToRemoteAsync);
|
||||||
OpenDeviceCommand = new RelayCommand(OpenDevice);
|
OpenDeviceCommand = new RelayCommand(OpenDevice);
|
||||||
|
ImageMetadataCommand = new AsyncRelayCommand(ImageMetadataAsync);
|
||||||
|
|
||||||
_genericHddIcon =
|
_genericHddIcon =
|
||||||
new Bitmap(AssetLoader.Open(new Uri("avares://Aaru.Gui/Assets/Icons/oxygen/32x32/drive-harddisk.png")));
|
new Bitmap(AssetLoader.Open(new Uri("avares://Aaru.Gui/Assets/Icons/oxygen/32x32/drive-harddisk.png")));
|
||||||
@@ -172,6 +173,7 @@ public partial class MainWindowViewModel : ViewModelBase
|
|||||||
public ICommand OpenIbgLogCommand { get; }
|
public ICommand OpenIbgLogCommand { get; }
|
||||||
public ICommand ConnectToRemoteCommand { get; }
|
public ICommand ConnectToRemoteCommand { get; }
|
||||||
public ICommand OpenDeviceCommand { get; }
|
public ICommand OpenDeviceCommand { get; }
|
||||||
|
public ICommand ImageMetadataCommand { get; }
|
||||||
|
|
||||||
public bool NativeMenuSupported
|
public bool NativeMenuSupported
|
||||||
{
|
{
|
||||||
@@ -229,6 +231,14 @@ public partial class MainWindowViewModel : ViewModelBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Task ImageMetadataAsync()
|
||||||
|
{
|
||||||
|
var dialog = new ImageMetadata();
|
||||||
|
dialog.DataContext = new ImageMetadataViewModel(dialog);
|
||||||
|
|
||||||
|
return dialog.ShowDialog(_view);
|
||||||
|
}
|
||||||
|
|
||||||
void OpenDevice()
|
void OpenDevice()
|
||||||
{
|
{
|
||||||
var deviceListWindow = new DeviceList();
|
var deviceListWindow = new DeviceList();
|
||||||
|
|||||||
235
Aaru.Gui/Views/Windows/ImageMetadata.axaml
Normal file
235
Aaru.Gui/Views/Windows/ImageMetadata.axaml
Normal file
@@ -0,0 +1,235 @@
|
|||||||
|
<Window xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:windows="clr-namespace:Aaru.Gui.ViewModels.Windows"
|
||||||
|
xmlns:controls="clr-namespace:Aaru.Gui.Controls"
|
||||||
|
xmlns:localization="clr-namespace:Aaru.Localization;assembly=Aaru.Localization"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:DesignWidth="800"
|
||||||
|
d:DesignHeight="450"
|
||||||
|
Width="680"
|
||||||
|
Height="600"
|
||||||
|
x:Class="Aaru.Gui.Views.Windows.ImageMetadata"
|
||||||
|
x:DataType="windows:ImageMetadataViewModel"
|
||||||
|
Title="{x:Static localization:UI.Title_Edit_image_metadata}">
|
||||||
|
<Design.DataContext>
|
||||||
|
<windows:ImageMetadataViewModel />
|
||||||
|
</Design.DataContext>
|
||||||
|
<Grid RowDefinitions="*, Auto"
|
||||||
|
RowSpacing="8"
|
||||||
|
Margin="12">
|
||||||
|
<TabControl Grid.Row="0">
|
||||||
|
<TabItem>
|
||||||
|
<TabItem.Header>
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Image}" />
|
||||||
|
</TabItem.Header>
|
||||||
|
<Grid Margin="8"
|
||||||
|
RowSpacing="8"
|
||||||
|
RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,*">
|
||||||
|
<StackPanel Orientation="Horizontal"
|
||||||
|
Spacing="8"
|
||||||
|
Grid.Row="0">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Image_path}"
|
||||||
|
FontWeight="Bold" />
|
||||||
|
<controls:SpectreTextBlock Text="{Binding ImagePath, Mode=OneWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Horizontal"
|
||||||
|
Spacing="8"
|
||||||
|
Grid.Row="1">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Media_type}"
|
||||||
|
FontWeight="Bold" />
|
||||||
|
<controls:SpectreTextBlock Text="{Binding MediaType, Mode=OneWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Horizontal"
|
||||||
|
Spacing="8"
|
||||||
|
Grid.Row="2">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Size}"
|
||||||
|
FontWeight="Bold" />
|
||||||
|
<controls:SpectreTextBlock Text="{Binding Size, Mode=OneWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Horizontal"
|
||||||
|
Spacing="8"
|
||||||
|
Grid.Row="3">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Creator}"
|
||||||
|
FontWeight="Bold"
|
||||||
|
VerticalAlignment="Center" />
|
||||||
|
<CheckBox Content="{x:Static localization:UI.Title_Not_set}"
|
||||||
|
IsChecked="{Binding CreatorNotSet, Mode=TwoWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
<TextBox Text="{Binding Creator, Mode=TwoWay}"
|
||||||
|
Watermark="{x:Static localization:UI.Watermark_Who_created_the_image}"
|
||||||
|
Grid.Row="4"
|
||||||
|
IsEnabled="{Binding !CreatorNotSet, Mode=OneWay}" />
|
||||||
|
<StackPanel Orientation="Horizontal"
|
||||||
|
Spacing="8"
|
||||||
|
Grid.Row="5">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Comments}"
|
||||||
|
FontWeight="Bold"
|
||||||
|
VerticalAlignment="Center" />
|
||||||
|
<CheckBox Content="{x:Static localization:UI.Title_Not_set}"
|
||||||
|
IsChecked="{Binding CommentsNotSet, Mode=TwoWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
<TextBox Text="{Binding Comments, Mode=TwoWay}"
|
||||||
|
AcceptsReturn="True"
|
||||||
|
MinHeight="200"
|
||||||
|
VerticalAlignment="Stretch"
|
||||||
|
Grid.Row="6"
|
||||||
|
IsEnabled="{Binding !CommentsNotSet, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
</TabItem>
|
||||||
|
<TabItem>
|
||||||
|
<TabItem.Header>
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Media}" />
|
||||||
|
</TabItem.Header>
|
||||||
|
<StackPanel Orientation="Vertical"
|
||||||
|
Spacing="8">
|
||||||
|
<CheckBox Content="{x:Static localization:UI.Title_Sequence_is_not_set}"
|
||||||
|
IsChecked="{Binding SequenceNotSet, Mode=TwoWay}" />
|
||||||
|
<StackPanel Orientation="Horizontal"
|
||||||
|
Spacing="8">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Media_number_no}"
|
||||||
|
VerticalAlignment="Center" />
|
||||||
|
<NumericUpDown Minimum="1"
|
||||||
|
Increment="1"
|
||||||
|
Value="{Binding MediaSequence, Mode=TwoWay}"
|
||||||
|
IsEnabled="{Binding !SequenceNotSet, Mode=OneWay}"
|
||||||
|
Width="120" />
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_no_in_a_sequence_of_no}"
|
||||||
|
VerticalAlignment="Center" />
|
||||||
|
<NumericUpDown Minimum="1"
|
||||||
|
Increment="1"
|
||||||
|
Value="{Binding MediaLastSequence, Mode=TwoWay}"
|
||||||
|
IsEnabled="{Binding !SequenceNotSet, Mode=OneWay}"
|
||||||
|
Width="120" />
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_no_media}"
|
||||||
|
VerticalAlignment="Center" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Horizontal"
|
||||||
|
Spacing="8">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Title}"
|
||||||
|
FontWeight="Bold"
|
||||||
|
VerticalAlignment="Center" />
|
||||||
|
<CheckBox Content="{x:Static localization:UI.Title_Not_set}"
|
||||||
|
IsChecked="{Binding MediaTitleNotSet, Mode=TwoWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
<TextBox Text="{Binding MediaTitle, Mode=TwoWay}"
|
||||||
|
IsEnabled="{Binding !MediaTitleNotSet, Mode=OneWay}"
|
||||||
|
Watermark="{x:Static localization:UI.Watermark_Media_title}" />
|
||||||
|
<StackPanel Orientation="Horizontal"
|
||||||
|
Spacing="8">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Manufacturer}"
|
||||||
|
FontWeight="Bold"
|
||||||
|
VerticalAlignment="Center" />
|
||||||
|
<CheckBox Content="{x:Static localization:UI.Title_Not_set}"
|
||||||
|
IsChecked="{Binding MediaManufacturerNotSet, Mode=TwoWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
<TextBox Text="{Binding MediaManufacturer, Mode=TwoWay}"
|
||||||
|
IsEnabled="{Binding !MediaManufacturerNotSet, Mode=OneWay}"
|
||||||
|
Watermark="{x:Static localization:UI.Watermark_Media_manufacturer}" />
|
||||||
|
<StackPanel Orientation="Horizontal"
|
||||||
|
Spacing="8">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Model}"
|
||||||
|
FontWeight="Bold"
|
||||||
|
VerticalAlignment="Center" />
|
||||||
|
<CheckBox Content="{x:Static localization:UI.Title_Not_set}"
|
||||||
|
IsChecked="{Binding MediaModelNotSet, Mode=TwoWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
<TextBox Text="{Binding MediaModel, Mode=TwoWay}"
|
||||||
|
IsEnabled="{Binding !MediaModelNotSet, Mode=OneWay}"
|
||||||
|
Watermark="{x:Static localization:UI.Watermark_Media_model}" />
|
||||||
|
<StackPanel Orientation="Horizontal"
|
||||||
|
Spacing="8">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Manufacturer}"
|
||||||
|
FontWeight="Bold"
|
||||||
|
VerticalAlignment="Center" />
|
||||||
|
<CheckBox Content="{x:Static localization:UI.Title_Not_set}"
|
||||||
|
IsChecked="{Binding MediaSerialNumberNotSet, Mode=TwoWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
<TextBox Text="{Binding MediaSerialNumber, Mode=TwoWay}"
|
||||||
|
IsEnabled="{Binding !MediaSerialNumberNotSet, Mode=OneWay}"
|
||||||
|
Watermark="{x:Static localization:UI.Watermark_Media_serial_number}" />
|
||||||
|
<StackPanel Orientation="Horizontal"
|
||||||
|
Spacing="8">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Part_number}"
|
||||||
|
FontWeight="Bold"
|
||||||
|
VerticalAlignment="Center" />
|
||||||
|
<CheckBox Content="{x:Static localization:UI.Title_Not_set}"
|
||||||
|
IsChecked="{Binding MediaPartNumberNotSet, Mode=TwoWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
<TextBox Text="{Binding MediaPartNumber, Mode=TwoWay}"
|
||||||
|
IsEnabled="{Binding !MediaPartNumberNotSet, Mode=OneWay}"
|
||||||
|
Watermark="{x:Static localization:UI.Watermark_Media_part_number}" />
|
||||||
|
</StackPanel>
|
||||||
|
</TabItem>
|
||||||
|
<TabItem>
|
||||||
|
<TabItem.Header>
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Drive}" />
|
||||||
|
</TabItem.Header>
|
||||||
|
<StackPanel Orientation="Vertical"
|
||||||
|
Spacing="8">
|
||||||
|
<StackPanel Orientation="Horizontal"
|
||||||
|
Spacing="8">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Manufacturer}"
|
||||||
|
FontWeight="Bold"
|
||||||
|
VerticalAlignment="Center" />
|
||||||
|
<CheckBox Content="{x:Static localization:UI.Title_Not_set}"
|
||||||
|
IsChecked="{Binding DriveManufacturerNotSet, Mode=TwoWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
<TextBox Text="{Binding DriveManufacturer, Mode=TwoWay}"
|
||||||
|
IsEnabled="{Binding !DriveManufacturerNotSet, Mode=OneWay}"
|
||||||
|
Watermark="{x:Static localization:UI.Watermark_Drive_manufacturer}" />
|
||||||
|
<StackPanel Orientation="Horizontal"
|
||||||
|
Spacing="8">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Model}"
|
||||||
|
FontWeight="Bold"
|
||||||
|
VerticalAlignment="Center" />
|
||||||
|
<CheckBox Content="{x:Static localization:UI.Title_Not_set}"
|
||||||
|
IsChecked="{Binding DriveModelNotSet, Mode=TwoWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
<TextBox Text="{Binding DriveModel, Mode=TwoWay}"
|
||||||
|
IsEnabled="{Binding !DriveModelNotSet, Mode=OneWay}"
|
||||||
|
Watermark="{x:Static localization:UI.Watermark_Drive_model}" />
|
||||||
|
<StackPanel Orientation="Horizontal"
|
||||||
|
Spacing="8">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Serial_number}"
|
||||||
|
FontWeight="Bold"
|
||||||
|
VerticalAlignment="Center" />
|
||||||
|
<CheckBox Content="{x:Static localization:UI.Title_Not_set}"
|
||||||
|
IsChecked="{Binding DriveSerialNumberNotSet, Mode=TwoWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
<TextBox Text="{Binding DriveSerialNumber, Mode=TwoWay}"
|
||||||
|
IsEnabled="{Binding !DriveSerialNumberNotSet, Mode=OneWay}"
|
||||||
|
Watermark="{x:Static localization:UI.Watermark_Drive_serial_number}" />
|
||||||
|
<StackPanel Orientation="Horizontal"
|
||||||
|
Spacing="8">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Firmware_revision}"
|
||||||
|
FontWeight="Bold"
|
||||||
|
VerticalAlignment="Center" />
|
||||||
|
<CheckBox Content="{x:Static localization:UI.Title_Not_set}"
|
||||||
|
IsChecked="{Binding DriveFirmwareRevisionNotSet, Mode=TwoWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
<TextBox Text="{Binding DriveFirmwareRevision, Mode=TwoWay}"
|
||||||
|
IsEnabled="{Binding !DriveFirmwareRevisionNotSet, Mode=OneWay}"
|
||||||
|
Watermark="{x:Static localization:UI.Watermark_Drive_firmware_revision}" />
|
||||||
|
</StackPanel>
|
||||||
|
</TabItem>
|
||||||
|
</TabControl>
|
||||||
|
<StackPanel Grid.Row="1"
|
||||||
|
HorizontalAlignment="Right"
|
||||||
|
Orientation="Horizontal"
|
||||||
|
Spacing="8">
|
||||||
|
<Button Content="{x:Static localization:UI.ButtonLabel_Open}"
|
||||||
|
IsVisible="{Binding !IsOpened, Mode=OneWay}"
|
||||||
|
Command="{Binding OpenImageCommand, Mode=OneWay}" />
|
||||||
|
<Button Content="{x:Static localization:UI.ButtonLabel_Load}"
|
||||||
|
IsVisible="{Binding IsOpened, Mode=OneWay}"
|
||||||
|
Command="{Binding LoadMetadataCommand, Mode=OneWay}" />
|
||||||
|
<Button Content="{x:Static localization:UI.ButtonLabel_Save}"
|
||||||
|
IsVisible="{Binding IsOpened, Mode=OneWay}"
|
||||||
|
Command="{Binding SaveMetadataCommand, Mode=OneWay}" />
|
||||||
|
<Button Content="{x:Static localization:UI.ButtonLabel_Close}"
|
||||||
|
Command="{Binding CloseCommand, Mode=OneWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
19
Aaru.Gui/Views/Windows/ImageMetadata.axaml.cs
Normal file
19
Aaru.Gui/Views/Windows/ImageMetadata.axaml.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
using Aaru.Gui.ViewModels.Windows;
|
||||||
|
using Avalonia.Controls;
|
||||||
|
|
||||||
|
namespace Aaru.Gui.Views.Windows;
|
||||||
|
|
||||||
|
public partial class ImageMetadata : Window
|
||||||
|
{
|
||||||
|
public ImageMetadata()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void OnClosing(WindowClosingEventArgs e)
|
||||||
|
{
|
||||||
|
(DataContext as ImageMetadataViewModel)?.CloseImage();
|
||||||
|
base.OnClosing(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
Command="{Binding OpenIbgLogCommand, Mode=OneWay}" />
|
Command="{Binding OpenIbgLogCommand, Mode=OneWay}" />
|
||||||
<MenuItem Header="{x:Static localization:UI.Menu_Connect_to_AaruRemote}"
|
<MenuItem Header="{x:Static localization:UI.Menu_Connect_to_AaruRemote}"
|
||||||
Command="{Binding ConnectToRemoteCommand, Mode=OneWay}" />
|
Command="{Binding ConnectToRemoteCommand, Mode=OneWay}" />
|
||||||
<MenuItem Header="Open device..."
|
<MenuItem Header="{x:Static localization:UI.Menu_Open_device}"
|
||||||
Command="{Binding OpenDeviceCommand, Mode=OneWay}"
|
Command="{Binding OpenDeviceCommand, Mode=OneWay}"
|
||||||
IsVisible="{Binding DevicesSupported, Mode=OneWay}" />
|
IsVisible="{Binding DevicesSupported, Mode=OneWay}" />
|
||||||
<Separator />
|
<Separator />
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
IsVisible="{Binding !NativeMenuSupported, Mode=OneWay}"
|
IsVisible="{Binding !NativeMenuSupported, Mode=OneWay}"
|
||||||
Command="{Binding ExitCommand, Mode=OneWay}" />
|
Command="{Binding ExitCommand, Mode=OneWay}" />
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
<MenuItem Header="Image"
|
<MenuItem Header="{x:Static localization:UI.Menu_Image}"
|
||||||
IsEnabled="{Binding ImageLoaded, Mode=OneWay}">
|
IsEnabled="{Binding ImageLoaded, Mode=OneWay}">
|
||||||
<MenuItem Command="{Binding CalculateEntropyCommand, Mode=OneWay}"
|
<MenuItem Command="{Binding CalculateEntropyCommand, Mode=OneWay}"
|
||||||
Header="{x:Static localization:UI.ButtonLabel_Calculate_entropy}" />
|
Header="{x:Static localization:UI.ButtonLabel_Calculate_entropy}" />
|
||||||
@@ -55,6 +55,10 @@
|
|||||||
<MenuItem Command="{Binding DecodeImageMediaTagsCommand, Mode=OneWay}"
|
<MenuItem Command="{Binding DecodeImageMediaTagsCommand, Mode=OneWay}"
|
||||||
Header="{x:Static localization:UI.ButtonLabel_Decode_media_tags}" />
|
Header="{x:Static localization:UI.ButtonLabel_Decode_media_tags}" />
|
||||||
</MenuItem>
|
</MenuItem>
|
||||||
|
<MenuItem Header="{x:Static localization:UI.Menu_Metadata}">
|
||||||
|
<MenuItem Command="{Binding ImageMetadataCommand, Mode=OneWay}"
|
||||||
|
Header="{x:Static localization:UI.Menu_Edit_image_metadata}" />
|
||||||
|
</MenuItem>
|
||||||
<MenuItem Header="{x:Static localization:UI.Menu_Window}">
|
<MenuItem Header="{x:Static localization:UI.Menu_Window}">
|
||||||
<MenuItem Header="{x:Static localization:UI.Menu_Console}"
|
<MenuItem Header="{x:Static localization:UI.Menu_Console}"
|
||||||
Command="{Binding ConsoleCommand, Mode=OneWay}" />
|
Command="{Binding ConsoleCommand, Mode=OneWay}" />
|
||||||
|
|||||||
192
Aaru.Localization/UI.Designer.cs
generated
192
Aaru.Localization/UI.Designer.cs
generated
@@ -6699,5 +6699,197 @@ namespace Aaru.Localization {
|
|||||||
return ResourceManager.GetString("Images_have_identical_contents", resourceCulture);
|
return ResourceManager.GetString("Images_have_identical_contents", resourceCulture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static string Menu_Image {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Menu_Image", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Menu_Metadata {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Menu_Metadata", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Menu_Edit_image_metadata {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Menu_Edit_image_metadata", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Title_Edit_image_metadata {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Title_Edit_image_metadata", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Title_Image {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Title_Image", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Title_Image_path {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Title_Image_path", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Title_Creator {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Title_Creator", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Title_Not_set {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Title_Not_set", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Watermark_Who_created_the_image {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Watermark_Who_created_the_image", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Title_Sequence_is_not_set {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Title_Sequence_is_not_set", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Title_Media_number_no {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Title_Media_number_no", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Title_no_in_a_sequence_of_no {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Title_no_in_a_sequence_of_no", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Title_no_media {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Title_no_media", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Watermark_Media_title {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Watermark_Media_title", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Watermark_Media_manufacturer {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Watermark_Media_manufacturer", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Watermark_Media_model {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Watermark_Media_model", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Watermark_Media_serial_number {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Watermark_Media_serial_number", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Watermark_Media_part_number {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Watermark_Media_part_number", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Watermark_Drive_manufacturer {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Watermark_Drive_manufacturer", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Watermark_Drive_model {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Watermark_Drive_model", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Watermark_Drive_serial_number {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Watermark_Drive_serial_number", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Watermark_Drive_firmware_revision {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Watermark_Drive_firmware_revision", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ButtonLabel_Open {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ButtonLabel_Open", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string ButtonLabel_Load {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("ButtonLabel_Load", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string AaruFormat_files {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("AaruFormat_files", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Error_reopening_image_for_writing {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Error_reopening_image_for_writing", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string There_was_an_error_reopening_the_image_for_writing {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("There_was_an_error_reopening_the_image_for_writing", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Error_reopening_image_in_read_only_mode_after_writing_metadata {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Error_reopening_image_in_read_only_mode_after_writing_metadata", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string There_was_an_error_reopening_the_image_in_read_only_mode_after_writing_metadata {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("There_was_an_error_reopening_the_image_in_read_only_mode_after_writing_metadata", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Metadata_saved_successfully {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("Metadata_saved_successfully", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string File_is_not_an_AaruFormat_image {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("File_is_not_an_AaruFormat_image", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string AaruFormat_images_version_1_x_are_read_only {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("AaruFormat_images_version_1_x_are_read_only", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2193,7 +2193,7 @@ Probadores:
|
|||||||
<value>Comandos</value>
|
<value>Comandos</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Comments" xml:space="preserve">
|
<data name="Title_Comments" xml:space="preserve">
|
||||||
<value>Comentarios</value>
|
<value>[bold][slateblue1]Comentarios[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Connected_by_USB" xml:space="preserve">
|
<data name="Title_Connected_by_USB" xml:space="preserve">
|
||||||
<value>[bold][slateblue1]Conectado por USB[/][/]</value>
|
<value>[bold][slateblue1]Conectado por USB[/][/]</value>
|
||||||
@@ -2244,7 +2244,7 @@ Probadores:
|
|||||||
<value>Información del fabricante del disco</value>
|
<value>Información del fabricante del disco</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Drive" xml:space="preserve">
|
<data name="Title_Drive" xml:space="preserve">
|
||||||
<value>Unidad</value>
|
<value>[bold][red]Unidad[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Drive_firmware_revision" xml:space="preserve">
|
<data name="Title_Drive_firmware_revision" xml:space="preserve">
|
||||||
<value>[slateblue1]Revisión del firmware de la unidad[/]</value>
|
<value>[slateblue1]Revisión del firmware de la unidad[/]</value>
|
||||||
@@ -2310,7 +2310,7 @@ Probadores:
|
|||||||
<value>[bold][blue]Dispositivo FireWire[/][/]</value>
|
<value>[bold][blue]Dispositivo FireWire[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Firmware_revision" xml:space="preserve">
|
<data name="Title_Firmware_revision" xml:space="preserve">
|
||||||
<value>Revisión de firmware</value>
|
<value>[bold][slateblue1]Revisión de firmware[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_First_Media_image" xml:space="preserve">
|
<data name="Title_First_Media_image" xml:space="preserve">
|
||||||
<value>[green]1ª imagen[/]</value>
|
<value>[green]1ª imagen[/]</value>
|
||||||
@@ -2478,8 +2478,8 @@ Probadores:
|
|||||||
<value>[bold][blue]Mensaje[/][/]</value>
|
<value>[bold][blue]Mensaje[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Metadata" xml:space="preserve">
|
<data name="Title_Metadata" xml:space="preserve">
|
||||||
<value>Metadato</value>
|
<value>Metadatos</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Miscellaneous" xml:space="preserve">
|
<data name="Title_Miscellaneous" xml:space="preserve">
|
||||||
<value>[bold][darkorange3]Miscelánea[/][/]</value>
|
<value>[bold][darkorange3]Miscelánea[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -2529,7 +2529,7 @@ Probadores:
|
|||||||
<value>Particiones</value>
|
<value>Particiones</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Part_number" xml:space="preserve">
|
<data name="Title_Part_number" xml:space="preserve">
|
||||||
<value>Número de parte</value>
|
<value>[bold][slateblue1]Número de parte[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_PCMCIA" xml:space="preserve">
|
<data name="Title_PCMCIA" xml:space="preserve">
|
||||||
<value>PCMCIA</value>
|
<value>PCMCIA</value>
|
||||||
@@ -2631,7 +2631,7 @@ Probadores:
|
|||||||
<value>[bold][teal]Veces usado[/][/]</value>
|
<value>[bold][teal]Veces usado[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Title" xml:space="preserve">
|
<data name="Title_Title" xml:space="preserve">
|
||||||
<value>Título</value>
|
<value>[bold][slateblue1]Título[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_TOC" xml:space="preserve">
|
<data name="Title_TOC" xml:space="preserve">
|
||||||
<value>[bold][blue]Tabla de contenidos[/][/]</value>
|
<value>[bold][blue]Tabla de contenidos[/][/]</value>
|
||||||
@@ -2988,7 +2988,7 @@ Probadores:
|
|||||||
<value>[bold][blue]Fecha[/][/]</value>
|
<value>[bold][blue]Fecha[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Size" xml:space="preserve">
|
<data name="Title_Size" xml:space="preserve">
|
||||||
<value>[bold][lime]Tamaño[/][/]</value>
|
<value>[bold][slateblue1]Tamaño[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Unable_to_get_information_about_archive" xml:space="preserve">
|
<data name="Unable_to_get_information_about_archive" xml:space="preserve">
|
||||||
<value>[red]No se pudo obtener información sobre el archivo...[/]</value>
|
<value>[red]No se pudo obtener información sobre el archivo...[/]</value>
|
||||||
@@ -3350,4 +3350,100 @@ Probadores:
|
|||||||
<data name="Images_have_identical_contents" xml:space="preserve">
|
<data name="Images_have_identical_contents" xml:space="preserve">
|
||||||
<value>[green]Las imágenes tienen idéntico contenido.[/]</value>
|
<value>[green]Las imágenes tienen idéntico contenido.[/]</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Menu_Image" xml:space="preserve">
|
||||||
|
<value>_Imagen</value>
|
||||||
|
</data>
|
||||||
|
<data name="Menu_Metadata" xml:space="preserve">
|
||||||
|
<value>_Metadatos</value>
|
||||||
|
</data>
|
||||||
|
<data name="Menu_Edit_image_metadata" xml:space="preserve">
|
||||||
|
<value>Editar metadatos de _imagen</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_Edit_image_metadata" xml:space="preserve">
|
||||||
|
<value>Editar metadatos de imagen</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_Image" xml:space="preserve">
|
||||||
|
<value>[bold][purple_2]Imagen[/][/]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_Image_path" xml:space="preserve">
|
||||||
|
<value>[bold][slateblue1]Ruta a la imagen[/][/]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_Creator" xml:space="preserve">
|
||||||
|
<value>[bold][slateblue1]Creador[/][/]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_Not_set" xml:space="preserve">
|
||||||
|
<value>No establecido</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Who_created_the_image" xml:space="preserve">
|
||||||
|
<value>Quién creó la imagen</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_Sequence_is_not_set" xml:space="preserve">
|
||||||
|
<value>Secuencia no establecida</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_Media_number_no" xml:space="preserve">
|
||||||
|
<value>[bold][slateblue1]Medio número[/][/]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_no_in_a_sequence_of_no" xml:space="preserve">
|
||||||
|
<value>[bold][slateblue1]en una secuencia de[/][/]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_no_media" xml:space="preserve">
|
||||||
|
<value>[bold][slateblue1]medios.[/][/]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Media_title" xml:space="preserve">
|
||||||
|
<value>Título del medio</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Media_manufacturer" xml:space="preserve">
|
||||||
|
<value>Fabricante del medio</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Media_model" xml:space="preserve">
|
||||||
|
<value>Modelo del medio</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Media_serial_number" xml:space="preserve">
|
||||||
|
<value>Número de serie del medio</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Media_part_number" xml:space="preserve">
|
||||||
|
<value>Número de parte del medio</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Drive_manufacturer" xml:space="preserve">
|
||||||
|
<value>Fabricante de la unidad</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Drive_model" xml:space="preserve">
|
||||||
|
<value>Modelo de la unidad</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Drive_serial_number" xml:space="preserve">
|
||||||
|
<value>Número de serie de la unidad</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Drive_firmware_revision" xml:space="preserve">
|
||||||
|
<value>Revisión del firmware de la unidad</value>
|
||||||
|
</data>
|
||||||
|
<data name="ButtonLabel_Open" xml:space="preserve">
|
||||||
|
<value>Abrir</value>
|
||||||
|
</data>
|
||||||
|
<data name="ButtonLabel_Load" xml:space="preserve">
|
||||||
|
<value>Cargar</value>
|
||||||
|
</data>
|
||||||
|
<data name="AaruFormat_files" xml:space="preserve">
|
||||||
|
<value>Archivos AaruFormat</value>
|
||||||
|
</data>
|
||||||
|
<data name="Error_reopening_image_for_writing" xml:space="preserve">
|
||||||
|
<value>Error reabriendo la imagen para escritura.</value>
|
||||||
|
</data>
|
||||||
|
<data name="There_was_an_error_reopening_the_image_for_writing" xml:space="preserve">
|
||||||
|
<value>Ocurrió un error al reabrir la imagen para escritura. Consulte el registro para más información.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Error_reopening_image_in_read_only_mode_after_writing_metadata" xml:space="preserve">
|
||||||
|
<value>Error reabriendo la imagen en sólo lectura después de escribir los metadatos.</value>
|
||||||
|
</data>
|
||||||
|
<data name="There_was_an_error_reopening_the_image_in_read_only_mode_after_writing_metadata" xml:space="preserve">
|
||||||
|
<value>Ocurrió un error al reabrir la imagen en sólo lectura después de escribir los metadatos. Consulte el registro para más información.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Metadata_saved_successfully" xml:space="preserve">
|
||||||
|
<value>Metadatos guardados con éxito.</value>
|
||||||
|
</data>
|
||||||
|
<data name="File_is_not_an_AaruFormat_image" xml:space="preserve">
|
||||||
|
<value>El archivo no es una imagen AaruFormat.</value>
|
||||||
|
</data>
|
||||||
|
<data name="AaruFormat_images_version_1_x_are_read_only" xml:space="preserve">
|
||||||
|
<value>Las imágenes AaruFormat versión 1.x son de sólo lectura, conviértala primero a una versión más moderna.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -2137,7 +2137,7 @@ Testers:
|
|||||||
<value>Image information</value>
|
<value>Image information</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Comments" xml:space="preserve">
|
<data name="Title_Comments" xml:space="preserve">
|
||||||
<value>Comments</value>
|
<value>[bold][slateblue1]Comments[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Media_information" xml:space="preserve">
|
<data name="Title_Media_information" xml:space="preserve">
|
||||||
<value>Media information</value>
|
<value>Media information</value>
|
||||||
@@ -2670,13 +2670,13 @@ Do you want to continue?</value>
|
|||||||
<value>Metadata</value>
|
<value>Metadata</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Title" xml:space="preserve">
|
<data name="Title_Title" xml:space="preserve">
|
||||||
<value>Title</value>
|
<value>[bold][slateblue1]Title[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Barcode" xml:space="preserve">
|
<data name="Title_Barcode" xml:space="preserve">
|
||||||
<value>Barcode</value>
|
<value>Barcode</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Part_number" xml:space="preserve">
|
<data name="Title_Part_number" xml:space="preserve">
|
||||||
<value>Part number</value>
|
<value>[bold][slateblue1]Part number[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Number_in_sequence" xml:space="preserve">
|
<data name="Title_Number_in_sequence" xml:space="preserve">
|
||||||
<value>Number in sequence</value>
|
<value>Number in sequence</value>
|
||||||
@@ -2685,10 +2685,10 @@ Do you want to continue?</value>
|
|||||||
<value>Last media of the sequence</value>
|
<value>Last media of the sequence</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Drive" xml:space="preserve">
|
<data name="Title_Drive" xml:space="preserve">
|
||||||
<value>Drive</value>
|
<value>[bold][red]Drive[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Firmware_revision" xml:space="preserve">
|
<data name="Title_Firmware_revision" xml:space="preserve">
|
||||||
<value>Firmware revision</value>
|
<value>[bold][slateblue1]Firmware revision[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Existing_Aaru_Metadata_sidecar" xml:space="preserve">
|
<data name="Title_Existing_Aaru_Metadata_sidecar" xml:space="preserve">
|
||||||
<value>Existing Aaru Metadata sidecar</value>
|
<value>Existing Aaru Metadata sidecar</value>
|
||||||
@@ -3063,7 +3063,7 @@ Do you want to continue?</value>
|
|||||||
<comment>"Attributes" abbreviated to the smallest possible size, if allowed by language rules.</comment>
|
<comment>"Attributes" abbreviated to the smallest possible size, if allowed by language rules.</comment>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Size" xml:space="preserve">
|
<data name="Title_Size" xml:space="preserve">
|
||||||
<value>[bold][lime]Size[/][/]</value>
|
<value>[bold][slateblue1]Size[/][/]</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="Title_Compressed" xml:space="preserve">
|
<data name="Title_Compressed" xml:space="preserve">
|
||||||
<value>[bold][teal]Compressed[/][/]</value>
|
<value>[bold][teal]Compressed[/][/]</value>
|
||||||
@@ -3425,4 +3425,103 @@ Do you want to continue?</value>
|
|||||||
<data name="Images_have_identical_contents" xml:space="preserve">
|
<data name="Images_have_identical_contents" xml:space="preserve">
|
||||||
<value>[green]Images have identical contents.[/]</value>
|
<value>[green]Images have identical contents.[/]</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Menu_Image" xml:space="preserve">
|
||||||
|
<value>_Image</value>
|
||||||
|
</data>
|
||||||
|
<data name="Menu_Metadata" xml:space="preserve">
|
||||||
|
<value>_Metadata</value>
|
||||||
|
</data>
|
||||||
|
<data name="Menu_Edit_image_metadata" xml:space="preserve">
|
||||||
|
<value>Edit _image metadata</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_Edit_image_metadata" xml:space="preserve">
|
||||||
|
<value>Edit image metadata</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_Image" xml:space="preserve">
|
||||||
|
<value>[bold][purple_2]Image[/][/]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_Image_path" xml:space="preserve">
|
||||||
|
<value>[bold][slateblue1]Image path[/][/]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_Creator" xml:space="preserve">
|
||||||
|
<value>[bold][slateblue1]Creator[/][/]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_Not_set" xml:space="preserve">
|
||||||
|
<value>Not set</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Who_created_the_image" xml:space="preserve">
|
||||||
|
<value>Who created the image</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_Sequence_is_not_set" xml:space="preserve">
|
||||||
|
<value>Sequence is not set</value>
|
||||||
|
</data>
|
||||||
|
<data name="Title_Media_number_no" xml:space="preserve">
|
||||||
|
<value>[bold][slateblue1]Media number[/][/]</value>
|
||||||
|
<comment>Followed by media number</comment>
|
||||||
|
</data>
|
||||||
|
<data name="Title_no_in_a_sequence_of_no" xml:space="preserve">
|
||||||
|
<value>[bold][slateblue1]in a sequence of[/][/]</value>
|
||||||
|
<comment>Follows a media number and is followed by the number of total media</comment>
|
||||||
|
</data>
|
||||||
|
<data name="Title_no_media" xml:space="preserve">
|
||||||
|
<value>[bold][slateblue1]media.[/][/]</value>
|
||||||
|
<comment>Follows the number of total media in the sequence.</comment>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Media_title" xml:space="preserve">
|
||||||
|
<value>Media title</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Media_manufacturer" xml:space="preserve">
|
||||||
|
<value>Media manufacturer</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Media_model" xml:space="preserve">
|
||||||
|
<value>Media model</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Media_serial_number" xml:space="preserve">
|
||||||
|
<value>Media serial number</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Media_part_number" xml:space="preserve">
|
||||||
|
<value>Media part number</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Drive_manufacturer" xml:space="preserve">
|
||||||
|
<value>Drive manufacturer</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Drive_model" xml:space="preserve">
|
||||||
|
<value>Drive model</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Drive_serial_number" xml:space="preserve">
|
||||||
|
<value>Drive serial number</value>
|
||||||
|
</data>
|
||||||
|
<data name="Watermark_Drive_firmware_revision" xml:space="preserve">
|
||||||
|
<value>Drive firmware revision</value>
|
||||||
|
</data>
|
||||||
|
<data name="ButtonLabel_Open" xml:space="preserve">
|
||||||
|
<value>Open</value>
|
||||||
|
</data>
|
||||||
|
<data name="ButtonLabel_Load" xml:space="preserve">
|
||||||
|
<value>Load</value>
|
||||||
|
</data>
|
||||||
|
<data name="AaruFormat_files" xml:space="preserve">
|
||||||
|
<value>AaruFormat files</value>
|
||||||
|
</data>
|
||||||
|
<data name="Error_reopening_image_for_writing" xml:space="preserve">
|
||||||
|
<value>Error reopening image for writing.</value>
|
||||||
|
</data>
|
||||||
|
<data name="There_was_an_error_reopening_the_image_for_writing" xml:space="preserve">
|
||||||
|
<value>There was an error reopening the image for writing. Check the logs for details.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Error_reopening_image_in_read_only_mode_after_writing_metadata" xml:space="preserve">
|
||||||
|
<value>Error reopening image in read-only mode after writing metadata.</value>
|
||||||
|
</data>
|
||||||
|
<data name="There_was_an_error_reopening_the_image_in_read_only_mode_after_writing_metadata" xml:space="preserve">
|
||||||
|
<value>There was an error reopening the image in read-only mode after writing metadata. Check the logs for details.</value>
|
||||||
|
</data>
|
||||||
|
<data name="Metadata_saved_successfully" xml:space="preserve">
|
||||||
|
<value>Metadata saved successfully.</value>
|
||||||
|
</data>
|
||||||
|
<data name="File_is_not_an_AaruFormat_image" xml:space="preserve">
|
||||||
|
<value>File is not an AaruFormat image.</value>
|
||||||
|
</data>
|
||||||
|
<data name="AaruFormat_images_version_1_x_are_read_only" xml:space="preserve">
|
||||||
|
<value>AaruFormat images version 1.x are read-only, convert it to a newer version first.</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
Reference in New Issue
Block a user