mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
[GUI] Add device information to device view.
This commit is contained in:
@@ -347,9 +347,6 @@
|
|||||||
<Compile Update="Views\Dialogs\Encodings.xaml.cs">
|
<Compile Update="Views\Dialogs\Encodings.xaml.cs">
|
||||||
<DependentUpon>Encodings.xaml</DependentUpon>
|
<DependentUpon>Encodings.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Update="Views\Panels\DeviceInfo.xaml.cs">
|
|
||||||
<DependentUpon>DeviceInfo.xaml</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Update="Views\Panels\FileSystem.xaml.cs">
|
<Compile Update="Views\Panels\FileSystem.xaml.cs">
|
||||||
<DependentUpon>FileSystem.xaml</DependentUpon>
|
<DependentUpon>FileSystem.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|||||||
@@ -1,528 +0,0 @@
|
|||||||
// /***************************************************************************
|
|
||||||
// Aaru Data Preservation Suite
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// Filename : DeviceInfoViewModel.cs
|
|
||||||
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
|
||||||
//
|
|
||||||
// Component : GUI view models.
|
|
||||||
//
|
|
||||||
// --[ Description ] ----------------------------------------------------------
|
|
||||||
//
|
|
||||||
// View model and code for the device information panel.
|
|
||||||
//
|
|
||||||
// --[ License ] --------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General public License as
|
|
||||||
// published by the Free Software Foundation, either version 3 of the
|
|
||||||
// License, or (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General public License
|
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
//
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
// Copyright © 2011-2025 Natalia Portillo
|
|
||||||
// ****************************************************************************/
|
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Input;
|
|
||||||
using Aaru.Decoders.SCSI.SSC;
|
|
||||||
using Aaru.Devices;
|
|
||||||
using Aaru.Gui.ViewModels.Tabs;
|
|
||||||
using Aaru.Gui.Views.Tabs;
|
|
||||||
using Aaru.Localization;
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Platform.Storage;
|
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
|
||||||
using CommunityToolkit.Mvvm.Input;
|
|
||||||
using Humanizer;
|
|
||||||
using Humanizer.Localisation;
|
|
||||||
using DeviceInfo = Aaru.Core.Devices.Info.DeviceInfo;
|
|
||||||
|
|
||||||
namespace Aaru.Gui.ViewModels.Panels;
|
|
||||||
|
|
||||||
public sealed partial class DeviceInfoViewModel : ViewModelBase
|
|
||||||
{
|
|
||||||
readonly DeviceInfo _devInfo;
|
|
||||||
readonly Window _view;
|
|
||||||
[ObservableProperty]
|
|
||||||
AtaInfo _ataInfo;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _blockLimits;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _blockSizeGranularity;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _cid;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _csd;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _densities;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _deviceType;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _extendedCsd;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _firewireGuid;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _firewireManufacturer;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _firewireModel;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _firewireModelId;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _firewireVendorId;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _firewireVisible;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _kreon;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _kreonChallengeResponse;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _kreonChallengeResponse360;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _kreonDecryptSs;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _kreonDecryptSs360;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _kreonErrorSkipping;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _kreonLock;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _kreonWxripperUnlock;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _kreonWxripperUnlock360;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _kreonXtremeUnlock;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _kreonXtremeUnlock360;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _manufacturer;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _maxBlockSize;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _mediumDensity;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _mediumTypes;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _minBlockSize;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _model;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _ocr;
|
|
||||||
[ObservableProperty]
|
|
||||||
PcmciaInfo _pcmciaInfo;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorBitSetting;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorBitSettingDl;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _plextorCdReadTime;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _plextorCdWriteTime;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _plextorDiscs;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _plextorDvd;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorDvdPlusWriteTest;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _plextorDvdReadTime;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorDvdTimesVisible;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _plextorDvdWriteTime;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorEepromVisible;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorGigaRec;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorHidesRecordables;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorHidesSessions;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorHiding;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorPoweRec;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorPoweRecEnabled;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _plextorPoweRecLast;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorPoweRecLastVisible;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _plextorPoweRecMax;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorPoweRecMaxVisible;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _plextorPoweRecRecommended;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorPoweRecRecommendedVisible;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _plextorPoweRecSelected;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorPoweRecSelectedVisible;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorSecuRec;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorSilentMode;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _plextorSilentModeAccessTime;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _plextorSilentModeCdReadSpeedLimit;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _plextorSilentModeCdWriteSpeedLimit;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _plextorSilentModeDvdReadSpeedLimit;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorSilentModeDvdReadSpeedLimitVisible;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorSilentModeEnabled;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorSpeedEnabled;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorSpeedRead;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorVariRec;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorVariRecDvd;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _plextorVisible;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _removable;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _removableChecked;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _revision;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _saveUsbDescriptorsEnabled;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _scr;
|
|
||||||
[ObservableProperty]
|
|
||||||
ScsiInfo _scsiInfo;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _scsiType;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _sdMm;
|
|
||||||
[ObservableProperty]
|
|
||||||
SdMmcInfo _sdMmcInfo;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _sdMmcText;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _secureDigital;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _serial;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _ssc;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _usbConnected;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _usbManufacturer;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _usbProduct;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _usbProductId;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _usbSerial;
|
|
||||||
[ObservableProperty]
|
|
||||||
string _usbVendorId;
|
|
||||||
[ObservableProperty]
|
|
||||||
bool _usbVisible;
|
|
||||||
|
|
||||||
public DeviceInfoViewModel(DeviceInfo devInfo, Window view)
|
|
||||||
{
|
|
||||||
SaveUsbDescriptorsCommand = new AsyncRelayCommand(SaveUsbDescriptorsAsync);
|
|
||||||
_view = view;
|
|
||||||
_devInfo = devInfo;
|
|
||||||
|
|
||||||
DeviceType = devInfo.Type.ToString();
|
|
||||||
Manufacturer = devInfo.Manufacturer;
|
|
||||||
Model = devInfo.Model;
|
|
||||||
Revision = devInfo.FirmwareRevision;
|
|
||||||
Serial = devInfo.Serial;
|
|
||||||
ScsiType = devInfo.ScsiType.ToString();
|
|
||||||
Removable = devInfo.IsRemovable;
|
|
||||||
UsbVisible = devInfo.IsUsb;
|
|
||||||
|
|
||||||
if(devInfo.IsUsb)
|
|
||||||
{
|
|
||||||
UsbVisible = true;
|
|
||||||
SaveUsbDescriptorsEnabled = devInfo.UsbDescriptors != null;
|
|
||||||
UsbVendorId = $"{devInfo.UsbVendorId:X4}";
|
|
||||||
UsbProductId = $"{devInfo.UsbProductId:X4}";
|
|
||||||
UsbManufacturer = devInfo.UsbManufacturerString;
|
|
||||||
UsbProduct = devInfo.UsbProductString;
|
|
||||||
UsbSerial = devInfo.UsbSerialString;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(devInfo.IsFireWire)
|
|
||||||
{
|
|
||||||
FirewireVisible = true;
|
|
||||||
FirewireVendorId = $"{devInfo.FireWireVendor:X4}";
|
|
||||||
FirewireModelId = $"{devInfo.FireWireModel:X4}";
|
|
||||||
FirewireManufacturer = devInfo.FireWireVendorName;
|
|
||||||
FirewireModel = devInfo.FireWireModelName;
|
|
||||||
FirewireGuid = $"{devInfo.FireWireGuid:X16}";
|
|
||||||
}
|
|
||||||
|
|
||||||
if(devInfo.IsPcmcia)
|
|
||||||
{
|
|
||||||
PcmciaInfo = new PcmciaInfo
|
|
||||||
{
|
|
||||||
DataContext = new PcmciaInfoViewModel(devInfo.Cis, _view)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if(devInfo.AtaIdentify != null || devInfo.AtapiIdentify != null)
|
|
||||||
{
|
|
||||||
AtaInfo = new AtaInfo
|
|
||||||
{
|
|
||||||
DataContext =
|
|
||||||
new AtaInfoViewModel(devInfo.AtaIdentify, devInfo.AtapiIdentify, devInfo.AtaMcptError, _view)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if(devInfo.ScsiInquiryData != null)
|
|
||||||
{
|
|
||||||
ScsiInfo = new ScsiInfo
|
|
||||||
{
|
|
||||||
DataContext = new ScsiInfoViewModel(devInfo.ScsiInquiryData,
|
|
||||||
devInfo.ScsiInquiry,
|
|
||||||
devInfo.ScsiEvpdPages,
|
|
||||||
devInfo.ScsiMode,
|
|
||||||
devInfo.ScsiType,
|
|
||||||
devInfo.ScsiModeSense6,
|
|
||||||
devInfo.ScsiModeSense10,
|
|
||||||
devInfo.MmcConfiguration,
|
|
||||||
_view)
|
|
||||||
};
|
|
||||||
|
|
||||||
if(devInfo.PlextorFeatures != null)
|
|
||||||
{
|
|
||||||
PlextorVisible = true;
|
|
||||||
|
|
||||||
if(devInfo.PlextorFeatures.Eeprom != null)
|
|
||||||
{
|
|
||||||
PlextorEepromVisible = true;
|
|
||||||
PlextorDiscs = $"{devInfo.PlextorFeatures.Discs}";
|
|
||||||
PlextorCdReadTime = devInfo.PlextorFeatures.CdReadTime.Seconds().Humanize(minUnit: TimeUnit.Second);
|
|
||||||
|
|
||||||
PlextorCdWriteTime =
|
|
||||||
devInfo.PlextorFeatures.CdWriteTime.Seconds().Humanize(minUnit: TimeUnit.Second);
|
|
||||||
|
|
||||||
if(devInfo.PlextorFeatures.IsDvd)
|
|
||||||
{
|
|
||||||
PlextorDvdTimesVisible = true;
|
|
||||||
|
|
||||||
PlextorDvdReadTime = devInfo.PlextorFeatures.DvdReadTime.Seconds()
|
|
||||||
.Humanize(minUnit: TimeUnit.Second);
|
|
||||||
|
|
||||||
PlextorDvdWriteTime = devInfo.PlextorFeatures.DvdWriteTime.Seconds()
|
|
||||||
.Humanize(minUnit: TimeUnit.Second);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PlextorPoweRec = devInfo.PlextorFeatures.PoweRec;
|
|
||||||
|
|
||||||
if(devInfo.PlextorFeatures.PoweRec)
|
|
||||||
{
|
|
||||||
PlextorPoweRecEnabled = devInfo.PlextorFeatures.PoweRecEnabled;
|
|
||||||
|
|
||||||
if(devInfo.PlextorFeatures.PoweRecEnabled)
|
|
||||||
{
|
|
||||||
PlextorPoweRecEnabled = true;
|
|
||||||
|
|
||||||
if(devInfo.PlextorFeatures.PoweRecRecommendedSpeed > 0)
|
|
||||||
{
|
|
||||||
PlextorPoweRecRecommendedVisible = true;
|
|
||||||
|
|
||||||
PlextorPoweRecRecommended =
|
|
||||||
string.Format(UI._0_Kb_sec, devInfo.PlextorFeatures.PoweRecRecommendedSpeed);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(devInfo.PlextorFeatures.PoweRecSelected > 0)
|
|
||||||
{
|
|
||||||
PlextorPoweRecSelectedVisible = true;
|
|
||||||
|
|
||||||
PlextorPoweRecSelected =
|
|
||||||
string.Format(UI._0_Kb_sec, devInfo.PlextorFeatures.PoweRecSelected);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(devInfo.PlextorFeatures.PoweRecMax > 0)
|
|
||||||
{
|
|
||||||
PlextorPoweRecMaxVisible = true;
|
|
||||||
PlextorPoweRecMax = string.Format(UI._0_Kb_sec, devInfo.PlextorFeatures.PoweRecMax);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(devInfo.PlextorFeatures.PoweRecLast > 0)
|
|
||||||
{
|
|
||||||
PlextorPoweRecLastVisible = true;
|
|
||||||
PlextorPoweRecLast = string.Format(UI._0_Kb_sec, devInfo.PlextorFeatures.PoweRecLast);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PlextorSilentMode = devInfo.PlextorFeatures.SilentMode;
|
|
||||||
|
|
||||||
if(devInfo.PlextorFeatures.SilentMode)
|
|
||||||
{
|
|
||||||
PlextorSilentModeEnabled = devInfo.PlextorFeatures.SilentModeEnabled;
|
|
||||||
|
|
||||||
if(devInfo.PlextorFeatures.SilentModeEnabled)
|
|
||||||
{
|
|
||||||
PlextorSilentModeAccessTime = devInfo.PlextorFeatures.AccessTimeLimit == 2
|
|
||||||
? Localization.Core.Access_time_is_slow
|
|
||||||
: Localization.Core.Access_time_is_fast;
|
|
||||||
|
|
||||||
PlextorSilentModeCdReadSpeedLimit =
|
|
||||||
devInfo.PlextorFeatures.CdReadSpeedLimit > 0
|
|
||||||
? $"{devInfo.PlextorFeatures.CdReadSpeedLimit}x"
|
|
||||||
: UI.unlimited_as_in_speed;
|
|
||||||
|
|
||||||
PlextorSilentModeCdWriteSpeedLimit =
|
|
||||||
devInfo.PlextorFeatures.CdWriteSpeedLimit > 0
|
|
||||||
? $"{devInfo.PlextorFeatures.CdReadSpeedLimit}x"
|
|
||||||
: UI.unlimited_as_in_speed;
|
|
||||||
|
|
||||||
if(devInfo.PlextorFeatures.IsDvd)
|
|
||||||
{
|
|
||||||
PlextorSilentModeDvdReadSpeedLimitVisible = true;
|
|
||||||
|
|
||||||
PlextorSilentModeDvdReadSpeedLimit =
|
|
||||||
devInfo.PlextorFeatures.DvdReadSpeedLimit > 0
|
|
||||||
? $"{devInfo.PlextorFeatures.DvdReadSpeedLimit}x"
|
|
||||||
: UI.unlimited_as_in_speed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PlextorGigaRec = devInfo.PlextorFeatures.GigaRec;
|
|
||||||
PlextorSecuRec = devInfo.PlextorFeatures.SecuRec;
|
|
||||||
PlextorSpeedRead = devInfo.PlextorFeatures.SpeedRead;
|
|
||||||
|
|
||||||
if(devInfo.PlextorFeatures.SpeedRead) PlextorSpeedEnabled = devInfo.PlextorFeatures.SpeedReadEnabled;
|
|
||||||
|
|
||||||
PlextorHiding = devInfo.PlextorFeatures.Hiding;
|
|
||||||
|
|
||||||
if(devInfo.PlextorFeatures.Hiding)
|
|
||||||
{
|
|
||||||
PlextorHidesRecordables = devInfo.PlextorFeatures.HidesRecordables;
|
|
||||||
PlextorHidesSessions = devInfo.PlextorFeatures.HidesSessions;
|
|
||||||
}
|
|
||||||
|
|
||||||
PlextorVariRec = devInfo.PlextorFeatures.VariRec;
|
|
||||||
|
|
||||||
if(devInfo.PlextorFeatures.IsDvd)
|
|
||||||
{
|
|
||||||
PlextorVariRecDvd = devInfo.PlextorFeatures.VariRecDvd;
|
|
||||||
PlextorBitSetting = devInfo.PlextorFeatures.BitSetting;
|
|
||||||
PlextorBitSettingDl = devInfo.PlextorFeatures.BitSettingDl;
|
|
||||||
PlextorDvdPlusWriteTest = devInfo.PlextorFeatures.DvdPlusWriteTest;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(devInfo.ScsiInquiry?.KreonPresent == true)
|
|
||||||
{
|
|
||||||
Kreon = true;
|
|
||||||
KreonChallengeResponse = devInfo.KreonFeatures.HasFlag(KreonFeatures.ChallengeResponse);
|
|
||||||
KreonDecryptSs = devInfo.KreonFeatures.HasFlag(KreonFeatures.DecryptSs);
|
|
||||||
KreonXtremeUnlock = devInfo.KreonFeatures.HasFlag(KreonFeatures.XtremeUnlock);
|
|
||||||
KreonWxripperUnlock = devInfo.KreonFeatures.HasFlag(KreonFeatures.WxripperUnlock);
|
|
||||||
|
|
||||||
KreonChallengeResponse360 = devInfo.KreonFeatures.HasFlag(KreonFeatures.ChallengeResponse360);
|
|
||||||
|
|
||||||
KreonDecryptSs360 = devInfo.KreonFeatures.HasFlag(KreonFeatures.DecryptSs360);
|
|
||||||
KreonXtremeUnlock360 = devInfo.KreonFeatures.HasFlag(KreonFeatures.XtremeUnlock360);
|
|
||||||
KreonWxripperUnlock360 = devInfo.KreonFeatures.HasFlag(KreonFeatures.WxripperUnlock360);
|
|
||||||
KreonLock = devInfo.KreonFeatures.HasFlag(KreonFeatures.Lock);
|
|
||||||
KreonErrorSkipping = devInfo.KreonFeatures.HasFlag(KreonFeatures.ErrorSkipping);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(devInfo.BlockLimits != null)
|
|
||||||
{
|
|
||||||
BlockLimits.BlockLimitsData? blockLimits = Decoders.SCSI.SSC.BlockLimits.Decode(devInfo.BlockLimits);
|
|
||||||
|
|
||||||
if(blockLimits.HasValue)
|
|
||||||
{
|
|
||||||
Ssc = true;
|
|
||||||
|
|
||||||
if(blockLimits.Value.minBlockLen == blockLimits.Value.maxBlockLen)
|
|
||||||
{
|
|
||||||
MinBlockSize = string.Format(Localization.Core.Device_block_size_is_fixed_at_0_bytes,
|
|
||||||
blockLimits.Value.minBlockLen);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
MaxBlockSize = blockLimits.Value.maxBlockLen > 0
|
|
||||||
? string.Format(Localization.Core.Device_maximum_block_size_is_0_bytes,
|
|
||||||
blockLimits.Value.maxBlockLen)
|
|
||||||
: Localization.Core.Device_does_not_specify_a_maximum_block_size;
|
|
||||||
|
|
||||||
MinBlockSize = string.Format(Localization.Core.Device_minimum_block_size_is_0_bytes,
|
|
||||||
blockLimits.Value.minBlockLen);
|
|
||||||
|
|
||||||
if(blockLimits.Value.granularity > 0)
|
|
||||||
{
|
|
||||||
BlockSizeGranularity =
|
|
||||||
string.Format(Localization.Core.Device_needs_a_block_size_granularity_of_pow_0_1_bytes,
|
|
||||||
blockLimits.Value.granularity,
|
|
||||||
Math.Pow(2, blockLimits.Value.granularity));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(devInfo.DensitySupport != null)
|
|
||||||
{
|
|
||||||
if(devInfo.DensitySupportHeader.HasValue)
|
|
||||||
Densities = DensitySupport.PrettifyDensity(devInfo.DensitySupportHeader);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(devInfo.MediumDensitySupport != null)
|
|
||||||
{
|
|
||||||
if(devInfo.MediaTypeSupportHeader.HasValue)
|
|
||||||
MediumTypes = DensitySupport.PrettifyMediumType(devInfo.MediaTypeSupportHeader);
|
|
||||||
|
|
||||||
MediumDensity = DensitySupport.PrettifyMediumType(devInfo.MediumDensitySupport);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SdMmcInfo = new SdMmcInfo
|
|
||||||
{
|
|
||||||
DataContext = new SdMmcInfoViewModel(devInfo.Type,
|
|
||||||
devInfo.CID,
|
|
||||||
devInfo.CSD,
|
|
||||||
devInfo.OCR,
|
|
||||||
devInfo.ExtendedCSD,
|
|
||||||
devInfo.SCR)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public ICommand SaveUsbDescriptorsCommand { get; }
|
|
||||||
|
|
||||||
async Task SaveUsbDescriptorsAsync()
|
|
||||||
{
|
|
||||||
IStorageFile result = await _view.StorageProvider.SaveFilePickerAsync(new FilePickerSaveOptions
|
|
||||||
{
|
|
||||||
FileTypeChoices = new List<FilePickerFileType>
|
|
||||||
{
|
|
||||||
FilePickerFileTypes.Binary
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if(result is null) return;
|
|
||||||
|
|
||||||
var saveFs = new FileStream(result.Path.AbsolutePath, FileMode.Create);
|
|
||||||
saveFs.Write(_devInfo.UsbDescriptors, 0, _devInfo.UsbDescriptors.Length);
|
|
||||||
|
|
||||||
saveFs.Close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -30,16 +30,22 @@
|
|||||||
// Copyright © 2011-2025 Natalia Portillo
|
// Copyright © 2011-2025 Natalia Portillo
|
||||||
// ****************************************************************************/
|
// ****************************************************************************/
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Input;
|
||||||
using Aaru.CommonTypes.Enums;
|
using Aaru.CommonTypes.Enums;
|
||||||
using Aaru.Core;
|
using Aaru.Core;
|
||||||
|
using Aaru.Decoders.SCSI.SSC;
|
||||||
using Aaru.Devices;
|
using Aaru.Devices;
|
||||||
|
using Aaru.Gui.ViewModels.Tabs;
|
||||||
|
using Aaru.Gui.Views.Tabs;
|
||||||
using Aaru.Gui.Views.Windows;
|
using Aaru.Gui.Views.Windows;
|
||||||
using Aaru.Localization;
|
using Aaru.Localization;
|
||||||
using Aaru.Logging;
|
using Aaru.Logging;
|
||||||
using Avalonia.Threading;
|
using Avalonia.Threading;
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
using Humanizer;
|
using Humanizer;
|
||||||
|
using Humanizer.Localisation;
|
||||||
using MsBox.Avalonia;
|
using MsBox.Avalonia;
|
||||||
using MsBox.Avalonia.Base;
|
using MsBox.Avalonia.Base;
|
||||||
using MsBox.Avalonia.Enums;
|
using MsBox.Avalonia.Enums;
|
||||||
@@ -70,6 +76,154 @@ public partial class DeviceViewModel : ViewModelBase
|
|||||||
string _statusMessage;
|
string _statusMessage;
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
bool _usbConnected;
|
bool _usbConnected;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _usbVisible;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _usbVendorId;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _usbProductId;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _usbManufacturer;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _usbProduct;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _usbSerial;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _saveUsbDescriptorsEnabled;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _firewireVisible;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _firewireVendorId;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _firewireModelId;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _firewireManufacturer;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _firewireModel;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _firewireGuid;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorVisible;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorEepromVisible;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorDvdTimesVisible;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorPoweRec;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorPoweRecEnabled;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorPoweRecRecommendedVisible;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorPoweRecSelectedVisible;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorPoweRecMaxVisible;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorPoweRecLastVisible;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorSilentMode;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorSilentModeEnabled;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorSilentModeDvdReadSpeedLimitVisible;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorGigaRec;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorSecuRec;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorSpeedRead;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorSpeedEnabled;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorHiding;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorHidesRecordables;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorHidesSessions;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorVariRec;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorDvd;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorVariRecDvd;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorBitSetting;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorBitSettingDl;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _plextorDvdPlusWriteTest;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _plextorDiscs;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _plextorCdReadTime;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _plextorCdWriteTime;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _plextorDvdReadTime;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _plextorDvdWriteTime;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _plextorPoweRecRecommended;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _plextorPoweRecSelected;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _plextorPoweRecMax;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _plextorPoweRecLast;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _plextorSilentModeAccessTime;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _plextorSilentModeCdReadSpeedLimit;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _plextorSilentModeCdWriteSpeedLimit;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _plextorSilentModeDvdReadSpeedLimit;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _kreon;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _kreonChallengeResponse;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _kreonDecryptSs;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _kreonXtremeUnlock;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _kreonWxripperUnlock;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _kreonChallengeResponse360;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _kreonDecryptSs360;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _kreonXtremeUnlock360;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _kreonWxripperUnlock360;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _kreonLock;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _kreonErrorSkipping;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _ssc;
|
||||||
|
[ObservableProperty]
|
||||||
|
bool _blockLimits;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _minBlockSize;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _maxBlockSize;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _blockSizeGranularity;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _densities;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _mediumTypes;
|
||||||
|
[ObservableProperty]
|
||||||
|
string _mediumDensity;
|
||||||
|
[ObservableProperty]
|
||||||
|
SdMmcInfo _sdMmcInfo;
|
||||||
|
[ObservableProperty]
|
||||||
|
ScsiInfo _scsiInfo;
|
||||||
|
[ObservableProperty]
|
||||||
|
PcmciaInfo _pcmciaInfo;
|
||||||
|
[ObservableProperty]
|
||||||
|
AtaInfo _ataInfo;
|
||||||
|
|
||||||
public DeviceViewModel(DeviceView window, string devicePath)
|
public DeviceViewModel(DeviceView window, string devicePath)
|
||||||
{
|
{
|
||||||
@@ -82,6 +236,8 @@ public partial class DeviceViewModel : ViewModelBase
|
|||||||
_ = Task.Run(Worker);
|
_ = Task.Run(Worker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ICommand SaveUsbDescriptorsCommand { get; }
|
||||||
|
|
||||||
void Worker()
|
void Worker()
|
||||||
{
|
{
|
||||||
Dispatcher.UIThread.Invoke(() => StatusMessage = "Opening device...");
|
Dispatcher.UIThread.Invoke(() => StatusMessage = "Opening device...");
|
||||||
@@ -140,6 +296,320 @@ public partial class DeviceViewModel : ViewModelBase
|
|||||||
});
|
});
|
||||||
|
|
||||||
_dev = dev;
|
_dev = dev;
|
||||||
|
|
||||||
|
Statistics.AddDevice(dev);
|
||||||
|
|
||||||
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
|
{
|
||||||
|
StatusMessage = "Querying device information...";
|
||||||
|
});
|
||||||
|
|
||||||
|
var devInfo = new Aaru.Core.Devices.Info.DeviceInfo(dev);
|
||||||
|
|
||||||
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
|
{
|
||||||
|
StatusMessage = "Device information queryied successfully...";
|
||||||
|
});
|
||||||
|
|
||||||
|
if(devInfo.IsUsb)
|
||||||
|
{
|
||||||
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
|
{
|
||||||
|
UsbVisible = true;
|
||||||
|
SaveUsbDescriptorsEnabled = devInfo.UsbDescriptors != null;
|
||||||
|
UsbVendorId = $"[cyan]{devInfo.UsbVendorId:X4}[/]";
|
||||||
|
UsbProductId = $"[cyan]{devInfo.UsbProductId:X4}[/]";
|
||||||
|
UsbManufacturer = $"[blue]{devInfo.UsbManufacturerString}[/]";
|
||||||
|
UsbProduct = $"[purple]{devInfo.UsbProductString}[/]";
|
||||||
|
UsbSerial = $"[fuchsia]{devInfo.UsbSerialString}[/]";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(devInfo.IsFireWire)
|
||||||
|
{
|
||||||
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
|
{
|
||||||
|
FirewireVisible = true;
|
||||||
|
FirewireVendorId = $"[cyan]{devInfo.FireWireVendor:X4}[/]";
|
||||||
|
FirewireModelId = $"[cyan]{devInfo.FireWireModel:X4}[/]";
|
||||||
|
FirewireManufacturer = $"[blue]{devInfo.FireWireVendorName}[/]";
|
||||||
|
FirewireModel = $"[purple]{devInfo.FireWireModelName}[/]";
|
||||||
|
FirewireGuid = $"[fuchsia]{devInfo.FireWireGuid:X16}[/]";
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(devInfo.IsPcmcia)
|
||||||
|
{
|
||||||
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
|
{
|
||||||
|
PcmciaInfo = new PcmciaInfo
|
||||||
|
{
|
||||||
|
DataContext = new PcmciaInfoViewModel(devInfo.Cis, _window)
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(devInfo.AtaIdentify != null || devInfo.AtapiIdentify != null)
|
||||||
|
{
|
||||||
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
|
{
|
||||||
|
AtaInfo = new AtaInfo
|
||||||
|
{
|
||||||
|
DataContext = new AtaInfoViewModel(devInfo.AtaIdentify,
|
||||||
|
devInfo.AtapiIdentify,
|
||||||
|
devInfo.AtaMcptError,
|
||||||
|
_window)
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(devInfo.ScsiInquiryData != null)
|
||||||
|
{
|
||||||
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
|
{
|
||||||
|
ScsiInfo = new ScsiInfo
|
||||||
|
{
|
||||||
|
DataContext = new ScsiInfoViewModel(devInfo.ScsiInquiryData,
|
||||||
|
devInfo.ScsiInquiry,
|
||||||
|
devInfo.ScsiEvpdPages,
|
||||||
|
devInfo.ScsiMode,
|
||||||
|
devInfo.ScsiType,
|
||||||
|
devInfo.ScsiModeSense6,
|
||||||
|
devInfo.ScsiModeSense10,
|
||||||
|
devInfo.MmcConfiguration,
|
||||||
|
_window)
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
if(devInfo.PlextorFeatures != null)
|
||||||
|
{
|
||||||
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
|
{
|
||||||
|
PlextorVisible = true;
|
||||||
|
|
||||||
|
if(devInfo.PlextorFeatures.Eeprom != null)
|
||||||
|
{
|
||||||
|
PlextorEepromVisible = true;
|
||||||
|
PlextorDiscs = $"{devInfo.PlextorFeatures.Discs}";
|
||||||
|
|
||||||
|
PlextorCdReadTime = devInfo.PlextorFeatures.CdReadTime.Seconds()
|
||||||
|
.Humanize(minUnit: TimeUnit.Second);
|
||||||
|
|
||||||
|
PlextorCdWriteTime = devInfo.PlextorFeatures.CdWriteTime.Seconds()
|
||||||
|
.Humanize(minUnit: TimeUnit.Second);
|
||||||
|
|
||||||
|
if(devInfo.PlextorFeatures.IsDvd)
|
||||||
|
{
|
||||||
|
PlextorDvdTimesVisible = true;
|
||||||
|
|
||||||
|
PlextorDvdReadTime = devInfo.PlextorFeatures.DvdReadTime.Seconds()
|
||||||
|
.Humanize(minUnit: TimeUnit.Second);
|
||||||
|
|
||||||
|
PlextorDvdWriteTime = devInfo.PlextorFeatures.DvdWriteTime.Seconds()
|
||||||
|
.Humanize(minUnit: TimeUnit.Second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PlextorPoweRec = devInfo.PlextorFeatures.PoweRec;
|
||||||
|
|
||||||
|
if(devInfo.PlextorFeatures.PoweRec)
|
||||||
|
{
|
||||||
|
PlextorPoweRecEnabled = devInfo.PlextorFeatures.PoweRecEnabled;
|
||||||
|
|
||||||
|
if(devInfo.PlextorFeatures.PoweRecEnabled)
|
||||||
|
{
|
||||||
|
PlextorPoweRecEnabled = true;
|
||||||
|
|
||||||
|
if(devInfo.PlextorFeatures.PoweRecRecommendedSpeed > 0)
|
||||||
|
{
|
||||||
|
PlextorPoweRecRecommendedVisible = true;
|
||||||
|
|
||||||
|
PlextorPoweRecRecommended =
|
||||||
|
string.Format(UI._0_Kb_sec, devInfo.PlextorFeatures.PoweRecRecommendedSpeed);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(devInfo.PlextorFeatures.PoweRecSelected > 0)
|
||||||
|
{
|
||||||
|
PlextorPoweRecSelectedVisible = true;
|
||||||
|
|
||||||
|
PlextorPoweRecSelected =
|
||||||
|
string.Format(UI._0_Kb_sec, devInfo.PlextorFeatures.PoweRecSelected);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(devInfo.PlextorFeatures.PoweRecMax > 0)
|
||||||
|
{
|
||||||
|
PlextorPoweRecMaxVisible = true;
|
||||||
|
PlextorPoweRecMax = string.Format(UI._0_Kb_sec, devInfo.PlextorFeatures.PoweRecMax);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(devInfo.PlextorFeatures.PoweRecLast > 0)
|
||||||
|
{
|
||||||
|
PlextorPoweRecLastVisible = true;
|
||||||
|
PlextorPoweRecLast = string.Format(UI._0_Kb_sec, devInfo.PlextorFeatures.PoweRecLast);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PlextorSilentMode = devInfo.PlextorFeatures.SilentMode;
|
||||||
|
|
||||||
|
if(devInfo.PlextorFeatures.SilentMode)
|
||||||
|
{
|
||||||
|
PlextorSilentModeEnabled = devInfo.PlextorFeatures.SilentModeEnabled;
|
||||||
|
|
||||||
|
if(devInfo.PlextorFeatures.SilentModeEnabled)
|
||||||
|
{
|
||||||
|
PlextorSilentModeAccessTime = devInfo.PlextorFeatures.AccessTimeLimit == 2
|
||||||
|
? Localization.Core.Access_time_is_slow
|
||||||
|
: Localization.Core.Access_time_is_fast;
|
||||||
|
|
||||||
|
PlextorSilentModeCdReadSpeedLimit =
|
||||||
|
devInfo.PlextorFeatures.CdReadSpeedLimit > 0
|
||||||
|
? $"{devInfo.PlextorFeatures.CdReadSpeedLimit}x"
|
||||||
|
: UI.unlimited_as_in_speed;
|
||||||
|
|
||||||
|
PlextorSilentModeCdWriteSpeedLimit =
|
||||||
|
devInfo.PlextorFeatures.CdWriteSpeedLimit > 0
|
||||||
|
? $"{devInfo.PlextorFeatures.CdReadSpeedLimit}x"
|
||||||
|
: UI.unlimited_as_in_speed;
|
||||||
|
|
||||||
|
if(devInfo.PlextorFeatures.IsDvd)
|
||||||
|
{
|
||||||
|
PlextorSilentModeDvdReadSpeedLimitVisible = true;
|
||||||
|
|
||||||
|
PlextorSilentModeDvdReadSpeedLimit =
|
||||||
|
devInfo.PlextorFeatures.DvdReadSpeedLimit > 0
|
||||||
|
? $"{devInfo.PlextorFeatures.DvdReadSpeedLimit}x"
|
||||||
|
: UI.unlimited_as_in_speed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
PlextorGigaRec = devInfo.PlextorFeatures.GigaRec;
|
||||||
|
PlextorSecuRec = devInfo.PlextorFeatures.SecuRec;
|
||||||
|
PlextorSpeedRead = devInfo.PlextorFeatures.SpeedRead;
|
||||||
|
|
||||||
|
if(devInfo.PlextorFeatures.SpeedRead)
|
||||||
|
PlextorSpeedEnabled = devInfo.PlextorFeatures.SpeedReadEnabled;
|
||||||
|
|
||||||
|
PlextorHiding = devInfo.PlextorFeatures.Hiding;
|
||||||
|
|
||||||
|
if(devInfo.PlextorFeatures.Hiding)
|
||||||
|
{
|
||||||
|
PlextorHidesRecordables = devInfo.PlextorFeatures.HidesRecordables;
|
||||||
|
PlextorHidesSessions = devInfo.PlextorFeatures.HidesSessions;
|
||||||
|
}
|
||||||
|
|
||||||
|
PlextorVariRec = devInfo.PlextorFeatures.VariRec;
|
||||||
|
|
||||||
|
if(devInfo.PlextorFeatures.IsDvd)
|
||||||
|
{
|
||||||
|
PlextorVariRecDvd = devInfo.PlextorFeatures.VariRecDvd;
|
||||||
|
PlextorBitSetting = devInfo.PlextorFeatures.BitSetting;
|
||||||
|
PlextorBitSettingDl = devInfo.PlextorFeatures.BitSettingDl;
|
||||||
|
PlextorDvdPlusWriteTest = devInfo.PlextorFeatures.DvdPlusWriteTest;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(devInfo.ScsiInquiry?.KreonPresent == true)
|
||||||
|
{
|
||||||
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
|
{
|
||||||
|
Kreon = true;
|
||||||
|
KreonChallengeResponse = devInfo.KreonFeatures.HasFlag(KreonFeatures.ChallengeResponse);
|
||||||
|
KreonDecryptSs = devInfo.KreonFeatures.HasFlag(KreonFeatures.DecryptSs);
|
||||||
|
KreonXtremeUnlock = devInfo.KreonFeatures.HasFlag(KreonFeatures.XtremeUnlock);
|
||||||
|
KreonWxripperUnlock = devInfo.KreonFeatures.HasFlag(KreonFeatures.WxripperUnlock);
|
||||||
|
|
||||||
|
KreonChallengeResponse360 = devInfo.KreonFeatures.HasFlag(KreonFeatures.ChallengeResponse360);
|
||||||
|
|
||||||
|
KreonDecryptSs360 = devInfo.KreonFeatures.HasFlag(KreonFeatures.DecryptSs360);
|
||||||
|
KreonXtremeUnlock360 = devInfo.KreonFeatures.HasFlag(KreonFeatures.XtremeUnlock360);
|
||||||
|
KreonWxripperUnlock360 = devInfo.KreonFeatures.HasFlag(KreonFeatures.WxripperUnlock360);
|
||||||
|
KreonLock = devInfo.KreonFeatures.HasFlag(KreonFeatures.Lock);
|
||||||
|
KreonErrorSkipping = devInfo.KreonFeatures.HasFlag(KreonFeatures.ErrorSkipping);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(devInfo.BlockLimits != null)
|
||||||
|
{
|
||||||
|
BlockLimits.BlockLimitsData? blockLimits = Decoders.SCSI.SSC.BlockLimits.Decode(devInfo.BlockLimits);
|
||||||
|
|
||||||
|
if(blockLimits.HasValue)
|
||||||
|
{
|
||||||
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
|
{
|
||||||
|
Ssc = true;
|
||||||
|
|
||||||
|
if(blockLimits.Value.minBlockLen == blockLimits.Value.maxBlockLen)
|
||||||
|
{
|
||||||
|
MinBlockSize = string.Format(Localization.Core.Device_block_size_is_fixed_at_0_bytes,
|
||||||
|
blockLimits.Value.minBlockLen);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MaxBlockSize = blockLimits.Value.maxBlockLen > 0
|
||||||
|
? string.Format(Localization.Core.Device_maximum_block_size_is_0_bytes,
|
||||||
|
blockLimits.Value.maxBlockLen)
|
||||||
|
: Localization.Core.Device_does_not_specify_a_maximum_block_size;
|
||||||
|
|
||||||
|
MinBlockSize = string.Format(Localization.Core.Device_minimum_block_size_is_0_bytes,
|
||||||
|
blockLimits.Value.minBlockLen);
|
||||||
|
|
||||||
|
if(blockLimits.Value.granularity > 0)
|
||||||
|
{
|
||||||
|
BlockSizeGranularity =
|
||||||
|
string.Format(Localization.Core
|
||||||
|
.Device_needs_a_block_size_granularity_of_pow_0_1_bytes,
|
||||||
|
blockLimits.Value.granularity,
|
||||||
|
Math.Pow(2, blockLimits.Value.granularity));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(devInfo.DensitySupport != null)
|
||||||
|
{
|
||||||
|
if(devInfo.DensitySupportHeader.HasValue)
|
||||||
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
|
{
|
||||||
|
Densities = DensitySupport.PrettifyDensity(devInfo.DensitySupportHeader);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if(devInfo.MediumDensitySupport != null)
|
||||||
|
{
|
||||||
|
if(devInfo.MediaTypeSupportHeader.HasValue)
|
||||||
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
|
{
|
||||||
|
MediumTypes = DensitySupport.PrettifyMediumType(devInfo.MediaTypeSupportHeader);
|
||||||
|
});
|
||||||
|
|
||||||
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
|
{
|
||||||
|
MediumDensity = DensitySupport.PrettifyMediumType(devInfo.MediumDensitySupport);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(devInfo.CID != null ||
|
||||||
|
devInfo.CSD != null ||
|
||||||
|
devInfo.OCR != null ||
|
||||||
|
devInfo.ExtendedCSD != null ||
|
||||||
|
devInfo.SCR != null)
|
||||||
|
Dispatcher.UIThread.Invoke(() =>
|
||||||
|
{
|
||||||
|
SdMmcInfo = new SdMmcInfo
|
||||||
|
{
|
||||||
|
DataContext = new SdMmcInfoViewModel(devInfo.Type,
|
||||||
|
devInfo.CID,
|
||||||
|
devInfo.CSD,
|
||||||
|
devInfo.OCR,
|
||||||
|
devInfo.ExtendedCSD,
|
||||||
|
devInfo.SCR)
|
||||||
|
};
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Closed()
|
public void Closed()
|
||||||
|
|||||||
@@ -1,480 +0,0 @@
|
|||||||
<!--
|
|
||||||
// /***************************************************************************
|
|
||||||
// Aaru Data Preservation Suite
|
|
||||||
// ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
|
|
||||||
//
|
|
||||||
// Filename : DeviceInfo.xaml
|
|
||||||
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
|
||||||
//
|
|
||||||
// Component : GUI panel.
|
|
||||||
//
|
|
||||||
// ‐‐[ Description ] ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
|
|
||||||
//
|
|
||||||
// Device information panel.
|
|
||||||
//
|
|
||||||
// ‐‐[ License ] ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General public License as
|
|
||||||
// published by the Free Software Foundation, either version 3 of the
|
|
||||||
// License, or (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General public License
|
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
//
|
|
||||||
// ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
|
|
||||||
// Copyright © 2011-2025 Natalia Portillo
|
|
||||||
// ****************************************************************************/
|
|
||||||
-->
|
|
||||||
<UserControl 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:panels="clr-namespace:Aaru.Gui.ViewModels.Panels"
|
|
||||||
xmlns:localization="clr-namespace:Aaru.Localization;assembly=Aaru.Localization"
|
|
||||||
mc:Ignorable="d"
|
|
||||||
d:DesignWidth="800"
|
|
||||||
d:DesignHeight="450"
|
|
||||||
x:DataType="panels:DeviceInfoViewModel"
|
|
||||||
x:Class="Aaru.Gui.Views.Panels.DeviceInfo">
|
|
||||||
<Design.DataContext>
|
|
||||||
<panels:DeviceInfoViewModel />
|
|
||||||
</Design.DataContext>
|
|
||||||
<StackPanel Orientation="Vertical">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Device_information}" />
|
|
||||||
<TabControl>
|
|
||||||
<TabItem>
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_General}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<StackPanel Orientation="Vertical">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Device_type}" />
|
|
||||||
<TextBox Text="{Binding DeviceType}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Manufacturer}" />
|
|
||||||
<TextBox Text="{Binding Manufacturer}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Model}" />
|
|
||||||
<TextBox Text="{Binding Model}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Revision}" />
|
|
||||||
<TextBox Text="{Binding Revision}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Serial_number}" />
|
|
||||||
<TextBox Text="{Binding Serial}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Peripheral_device_type}" />
|
|
||||||
<TextBox Text="{Binding ScsiType}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<CheckBox IsChecked="{Binding RemovableChecked}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Removable_media}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding UsbConnected}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Connected_by_USB}" />
|
|
||||||
</CheckBox>
|
|
||||||
</StackPanel>
|
|
||||||
</TabItem>
|
|
||||||
<TabItem IsVisible="{Binding UsbVisible}">
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_USB}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<StackPanel Orientation="Vertical">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Vendor_ID}" />
|
|
||||||
<TextBox Text="{Binding UsbVendorId}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Product_ID}" />
|
|
||||||
<TextBox Text="{Binding UsbProductId}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Manufacturer}" />
|
|
||||||
<TextBox Text="{Binding UsbManufacturer}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Product}" />
|
|
||||||
<TextBox Text="{Binding UsbProduct}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Serial_number}" />
|
|
||||||
<TextBox Text="{Binding UsbSerial}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<Button Command="{Binding SaveUsbDescriptorsCommand}"
|
|
||||||
IsVisible="{Binding SaveUsbDescriptorsEnabled}">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Save_descriptors_to_file}" />
|
|
||||||
</Button>
|
|
||||||
</StackPanel>
|
|
||||||
</TabItem>
|
|
||||||
<TabItem IsVisible="{Binding FirewireVisible}">
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_FireWire}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<StackPanel Orientation="Vertical">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Vendor_ID}" />
|
|
||||||
<TextBox Text="{Binding FirewireVendorId}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Model_ID}" />
|
|
||||||
<TextBox Text="{Binding FirewireModelId}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Manufacturer}" />
|
|
||||||
<TextBox Text="{Binding FirewireManufacturer}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Model}" />
|
|
||||||
<TextBox Text="{Binding FirewireModel}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_GUID}" />
|
|
||||||
<TextBox Text="{Binding FirewireGuid}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</TabItem>
|
|
||||||
<TabItem IsVisible="{Binding PlextorVisible}">
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Plextor}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<StackPanel Orientation="Vertical">
|
|
||||||
<StackPanel Orientation="Vertical"
|
|
||||||
IsVisible="{Binding PlextorEepromVisible}">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Total_loaded_discs}" />
|
|
||||||
<TextBox Text="{Binding PlextorDiscs}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Time_spent_reading_CDs}" />
|
|
||||||
<TextBox Text="{Binding PlextorCdReadTime}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Time_spent_writing_CDs}" />
|
|
||||||
<TextBox Text="{Binding PlextorCdWriteTime}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Vertical"
|
|
||||||
IsVisible="{Binding PlextorDvdTimesVisible}">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Time_spent_reading_DVDs}" />
|
|
||||||
<TextBox Text="{Binding PlextorDvdReadTime}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Time_spent_writing_DVDs}" />
|
|
||||||
<TextBox Text="{Binding PlextorDvdWriteTime}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
<CheckBox IsChecked="{Binding PlextorPoweRec}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Supports_PoweRec}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding PlextorPoweRecEnabled}"
|
|
||||||
IsEnabled="False"
|
|
||||||
IsVisible="{Binding PlextorPoweRec}">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.PoweRec_is_enabled}" />
|
|
||||||
</CheckBox>
|
|
||||||
<StackPanel Orientation="Vertical"
|
|
||||||
IsVisible="{Binding PlextorPoweRecEnabled}">
|
|
||||||
<StackPanel Orientation="Vertical"
|
|
||||||
IsVisible="{Binding PlextorPoweRecRecommendedVisible}">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Recommended_speed}" />
|
|
||||||
<TextBox Text="{Binding PlextorPoweRecRecommended}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Vertical"
|
|
||||||
IsVisible="{Binding PlextorPoweRecSelectedVisible}">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock
|
|
||||||
Text="{x:Static localization:UI.Selected_PoweRec_speed_for_currently_inserted_media}" />
|
|
||||||
<TextBox Text="{Binding PlextorPoweRecSelected}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Vertical"
|
|
||||||
IsVisible="{Binding PlextorPoweRecMaxVisible}">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock
|
|
||||||
Text="{x:Static localization:UI.Maximum_PoweRec_speed_for_currently_inserted_media}" />
|
|
||||||
<TextBox Text="{Binding PlextorPoweRecMax}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Vertical"
|
|
||||||
IsVisible="{Binding PlextorPoweRecLastVisible}">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Last_PoweRec_used_speed}" />
|
|
||||||
<TextBox Text="{Binding PlextorPoweRecLast}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
<CheckBox IsChecked="{Binding PlextorSilentMode}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Supports_SilentMode}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding PlextorSilentModeEnabled}"
|
|
||||||
IsEnabled="False"
|
|
||||||
IsVisible="{Binding PlextorSilentMode}">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.SilentMode_is_enabled}" />
|
|
||||||
</CheckBox>
|
|
||||||
<StackPanel Orientation="Vertical"
|
|
||||||
IsVisible="{Binding PlextorSilentModeEnabled}">
|
|
||||||
<TextBlock Text="{Binding PlextorSilentModeAccessTime}" />
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.CD_read_speed_limited_to}" />
|
|
||||||
<TextBox Text="{Binding PlextorSilentModeCdReadSpeedLimit}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.CD_write_speed_limited_to}" />
|
|
||||||
<TextBox Text="{Binding PlextorSilentModeCdWriteSpeedLimit}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Vertical"
|
|
||||||
IsVisible="{Binding PlextorSilentModeDvdReadSpeedLimitVisible}">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.DVD_read_speed_limited_to}" />
|
|
||||||
<TextBox Text="{Binding PlextorSilentModeDvdReadSpeedLimit}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
<CheckBox IsChecked="{Binding PlextorGigaRec}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Supports_GigaRec}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding PlextorSecuRec}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Supports_SecuRec}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding PlextorSpeedRead}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Supports_SpeedRead}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding PlextorSpeedEnabled}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.SpeedRead_is_enabled}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding PlextorHiding}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Supports_hiding_CD_Rs_and_sessions}" />
|
|
||||||
</CheckBox>
|
|
||||||
<StackPanel Orientation="Vertical"
|
|
||||||
IsVisible="{Binding PlextorHiding}">
|
|
||||||
<CheckBox IsChecked="{Binding PlextorHidesRecordables}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Is_hiding_CD_Rs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding PlextorHidesSessions}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Is_forcing_only_first_session}" />
|
|
||||||
</CheckBox>
|
|
||||||
</StackPanel>
|
|
||||||
<CheckBox IsChecked="{Binding PlextorVariRec}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Supports_VariRec}" />
|
|
||||||
</CheckBox>
|
|
||||||
<StackPanel Orientation="Vertical"
|
|
||||||
IsVisible="{Binding PlextorDvd}">
|
|
||||||
<CheckBox IsChecked="{Binding PlextorVariRecDvd}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Supports_VariRec_on_DVDs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding PlextorBitSetting}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Supports_bitsetting_DVD_R_book_type}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding PlextorBitSettingDl}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Supports_bitsetting_DVD_R_DL_book_type}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding PlextorDvdPlusWriteTest}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Supports_test_writing_DVD_Plus}" />
|
|
||||||
</CheckBox>
|
|
||||||
</StackPanel>
|
|
||||||
</StackPanel>
|
|
||||||
</TabItem>
|
|
||||||
<TabItem IsVisible="{Binding Kreon}">
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Kreon}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<StackPanel Orientation="Vertical">
|
|
||||||
<CheckBox IsChecked="{Binding KreonChallengeResponse}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:Core.Can_do_challenge_response_with_Xbox_discs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding KreonDecryptSs}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:Core.Can_read_and_decrypt_SS_from_Xbox_discs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding KreonXtremeUnlock}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:Core.Can_set_xtreme_unlock_state_with_Xbox_discs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding KreonWxripperUnlock}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:Core.Can_set_wxripper_unlock_state_with_Xbox_discs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding KreonChallengeResponse360}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:Core.Can_do_challenge_response_with_Xbox_360_discs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding KreonDecryptSs360}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:Core.Can_read_and_decrypt_SS_from_Xbox_360_discs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding KreonXtremeUnlock360}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:Core.Can_set_xtreme_unlock_state_with_Xbox_360_discs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding KreonWxripperUnlock360}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock
|
|
||||||
Text="{x:Static localization:Core.Can_set_wxripper_unlock_state_with_Xbox_360_discs}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding KreonLock}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:Core.Can_set_Kreon_locked_state}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding KreonErrorSkipping}"
|
|
||||||
IsEnabled="False">
|
|
||||||
<TextBlock Text="{x:Static localization:Core.Kreon_Can_skip_read_errors}" />
|
|
||||||
</CheckBox>
|
|
||||||
</StackPanel>
|
|
||||||
</TabItem>
|
|
||||||
<TabItem IsVisible="{Binding Ssc}">
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{x:Static localization:UI.SSC_Label}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<StackPanel Orientation="Vertical">
|
|
||||||
<StackPanel Orientation="Vertical"
|
|
||||||
IsVisible="{Binding BlockLimits}">
|
|
||||||
<TextBlock Text="{Binding MinBlockSize}"
|
|
||||||
IsVisible="{Binding !!MinBlockSize}" />
|
|
||||||
<TextBlock Text="{Binding MaxBlockSize}"
|
|
||||||
IsVisible="{Binding !!MaxBlockSize}" />
|
|
||||||
<TextBlock Text="{Binding BlockSizeGranularity}"
|
|
||||||
IsVisible="{Binding !!BlockSizeGranularity}" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Vertical"
|
|
||||||
IsVisible="{Binding !!Densities}">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Densities_supported_by_device}" />
|
|
||||||
<TextBox Text="{Binding Densities}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<StackPanel Orientation="Vertical"
|
|
||||||
IsVisible="{Binding !!MediumTypes}">
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Medium_types_supported_by_device}" />
|
|
||||||
<TextBox Text="{Binding MediumTypes}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</StackPanel>
|
|
||||||
<TextBox Text="{Binding MediumDensity}"
|
|
||||||
IsReadOnly="True"
|
|
||||||
IsVisible="{Binding !!MediumDensity}" />
|
|
||||||
</StackPanel>
|
|
||||||
</TabItem>
|
|
||||||
<TabItem IsVisible="{Binding SecureDigital}">
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{Binding SdMmcText}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<TabControl>
|
|
||||||
<TabItem IsVisible="{Binding !!Cid}">
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_CID}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<TextBox Text="{Binding Cid}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</TabItem>
|
|
||||||
<TabItem IsVisible="{Binding !!Csd}">
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_CSD}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<TextBox Text="{Binding Csd}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</TabItem>
|
|
||||||
<TabItem IsVisible="{Binding !!Ocr}">
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_OCR}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<TextBox Text="{Binding Ocr}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</TabItem>
|
|
||||||
<TabItem IsVisible="{Binding !!ExtendedCsd}">
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_Extended_CSD}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<TextBox Text="{Binding ExtendedCsd}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</TabItem>
|
|
||||||
<TabItem IsVisible="{Binding !!Scr}">
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_SCR}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<TextBox Text="{Binding Scr}"
|
|
||||||
IsReadOnly="True" />
|
|
||||||
</TabItem>
|
|
||||||
</TabControl>
|
|
||||||
</TabItem>
|
|
||||||
<TabItem IsVisible="{Binding !!PcmciaInfo}">
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_PCMCIA}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<ContentControl Content="{Binding PcmciaInfo}" />
|
|
||||||
</TabItem>
|
|
||||||
<TabItem IsVisible="{Binding !!AtaInfo}">
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_ATA_ATAPI}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<ContentControl Content="{Binding AtaInfo}" />
|
|
||||||
</TabItem>
|
|
||||||
<TabItem IsVisible="{Binding !!ScsiInfo}">
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_SCSI}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<ContentControl Content="{Binding ScsiInfo}" />
|
|
||||||
</TabItem>
|
|
||||||
<TabItem IsVisible="{Binding !!SdMmcInfo}">
|
|
||||||
<TabItem.Header>
|
|
||||||
<TextBlock Text="{x:Static localization:UI.Title_SD_MMC}" />
|
|
||||||
</TabItem.Header>
|
|
||||||
<ContentControl Content="{Binding SdMmcInfo}" />
|
|
||||||
</TabItem>
|
|
||||||
</TabControl>
|
|
||||||
</StackPanel>
|
|
||||||
</UserControl>
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
// /***************************************************************************
|
|
||||||
// Aaru Data Preservation Suite
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// Filename : DeviceInfo.xaml.cs
|
|
||||||
// Author(s) : Natalia Portillo <claunia@claunia.com>
|
|
||||||
//
|
|
||||||
// Component : GUI panels.
|
|
||||||
//
|
|
||||||
// --[ Description ] ----------------------------------------------------------
|
|
||||||
//
|
|
||||||
// Device information panel.
|
|
||||||
//
|
|
||||||
// --[ License ] --------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU General public License as
|
|
||||||
// published by the Free Software Foundation, either version 3 of the
|
|
||||||
// License, or (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU General public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU General public License
|
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
//
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
// Copyright © 2011-2025 Natalia Portillo
|
|
||||||
// ****************************************************************************/
|
|
||||||
|
|
||||||
using Avalonia.Controls;
|
|
||||||
using Avalonia.Markup.Xaml;
|
|
||||||
|
|
||||||
namespace Aaru.Gui.Views.Panels;
|
|
||||||
|
|
||||||
public sealed class DeviceInfo : UserControl
|
|
||||||
{
|
|
||||||
public DeviceInfo() => InitializeComponent();
|
|
||||||
|
|
||||||
void InitializeComponent() => AvaloniaXamlLoader.Load(this);
|
|
||||||
}
|
|
||||||
@@ -12,81 +12,484 @@
|
|||||||
Width="640"
|
Width="640"
|
||||||
x:Class="Aaru.Gui.Views.Windows.DeviceView"
|
x:Class="Aaru.Gui.Views.Windows.DeviceView"
|
||||||
x:DataType="windows:DeviceViewModel"
|
x:DataType="windows:DeviceViewModel"
|
||||||
Title="DeviceView">
|
Title="{Binding DevicePath, Mode=OneWay}">
|
||||||
<Grid RowDefinitions="Auto,*, Auto"
|
<Grid RowDefinitions="Auto,*, Auto"
|
||||||
RowSpacing="8"
|
RowSpacing="8"
|
||||||
Margin="12">
|
Margin="12">
|
||||||
<StackPanel Grid.Row="0"
|
<Grid Grid.Row="0"
|
||||||
Orientation="Vertical"
|
ColumnDefinitions="Auto, *"
|
||||||
Spacing="8">
|
ColumnSpacing="8"
|
||||||
<Grid ColumnDefinitions="Auto, *"
|
IsVisible="{Binding DevicePath, Converter={x:Static StringConverters.IsNotNullOrEmpty}, Mode=OneWay}">
|
||||||
ColumnSpacing="8"
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
IsVisible="{Binding DevicePath, Converter={x:Static StringConverters.IsNotNullOrEmpty}, Mode=OneWay}">
|
Text="{x:Static localization:UI.Title_Device_path}" />
|
||||||
<controls:SpectreTextBlock Grid.Column="0"
|
<TextBlock Grid.Column="1"
|
||||||
Text="{x:Static localization:UI.Title_Device_path}" />
|
Foreground="Green"
|
||||||
<TextBlock Grid.Column="1"
|
Text="{Binding DevicePath, Mode=OneWay}" />
|
||||||
Foreground="Green"
|
</Grid>
|
||||||
Text="{Binding DevicePath, Mode=OneWay}" />
|
<TabControl Grid.Row="1">
|
||||||
</Grid>
|
<TabItem>
|
||||||
<Grid ColumnDefinitions="Auto, *"
|
<TabItem.Header>
|
||||||
ColumnSpacing="8"
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_General}" />
|
||||||
IsVisible="{Binding DeviceType, Converter={x:Static StringConverters.IsNotNullOrEmpty}, Mode=OneWay}">
|
</TabItem.Header>
|
||||||
<controls:SpectreTextBlock Grid.Column="0"
|
<StackPanel Margin="8"
|
||||||
Text="{x:Static localization:UI.Title_Device_type}" />
|
Orientation="Vertical"
|
||||||
<controls:SpectreTextBlock Grid.Column="1"
|
Spacing="8">
|
||||||
Text="{Binding DeviceType}" />
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
</Grid>
|
ColumnSpacing="8"
|
||||||
<Grid ColumnDefinitions="Auto, *"
|
IsVisible="{Binding DeviceType, Converter={x:Static StringConverters.IsNotNullOrEmpty}, Mode=OneWay}">
|
||||||
ColumnSpacing="8"
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
IsVisible="{Binding Manufacturer, Converter={x:Static StringConverters.IsNotNullOrEmpty}, Mode=OneWay}">
|
Text="{x:Static localization:UI.Title_Device_type}" />
|
||||||
<controls:SpectreTextBlock Grid.Column="0"
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
Text="{x:Static localization:UI.Title_Manufacturer}" />
|
Text="{Binding DeviceType, Mode=OneWay}" />
|
||||||
<controls:SpectreTextBlock Grid.Column="1"
|
</Grid>
|
||||||
Text="{Binding Manufacturer}" />
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
</Grid>
|
ColumnSpacing="8"
|
||||||
<Grid ColumnDefinitions="Auto, *"
|
IsVisible="{Binding Manufacturer, Converter={x:Static StringConverters.IsNotNullOrEmpty}, Mode=OneWay}">
|
||||||
ColumnSpacing="8"
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
IsVisible="{Binding Model, Converter={x:Static StringConverters.IsNotNullOrEmpty}, Mode=OneWay}">
|
Text="{x:Static localization:UI.Title_Manufacturer}" />
|
||||||
<controls:SpectreTextBlock Grid.Column="0"
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
Text="{x:Static localization:UI.Title_Model}" />
|
Text="{Binding Manufacturer, Mode=OneWay}" />
|
||||||
<controls:SpectreTextBlock Grid.Column="1"
|
</Grid>
|
||||||
Text="{Binding Model}" />
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
</Grid>
|
ColumnSpacing="8"
|
||||||
<Grid ColumnDefinitions="Auto, *"
|
IsVisible="{Binding Model, Converter={x:Static StringConverters.IsNotNullOrEmpty}, Mode=OneWay}">
|
||||||
ColumnSpacing="8"
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
IsVisible="{Binding Revision, Converter={x:Static StringConverters.IsNotNullOrEmpty}, Mode=OneWay}">
|
Text="{x:Static localization:UI.Title_Model}" />
|
||||||
<controls:SpectreTextBlock Grid.Column="0"
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
Text="{x:Static localization:UI.Title_Revision}" />
|
Text="{Binding Model, Mode=OneWay}" />
|
||||||
<controls:SpectreTextBlock Grid.Column="1"
|
</Grid>
|
||||||
Text="{Binding Revision}" />
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
</Grid>
|
ColumnSpacing="8"
|
||||||
<Grid ColumnDefinitions="Auto, *"
|
IsVisible="{Binding Revision, Converter={x:Static StringConverters.IsNotNullOrEmpty}, Mode=OneWay}">
|
||||||
ColumnSpacing="8"
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
IsVisible="{Binding Serial, Converter={x:Static StringConverters.IsNotNullOrEmpty}, Mode=OneWay}">
|
Text="{x:Static localization:UI.Title_Revision}" />
|
||||||
<controls:SpectreTextBlock Grid.Column="0"
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
Text="{x:Static localization:UI.Title_Serial_number}" />
|
Text="{Binding Revision, Mode=OneWay}" />
|
||||||
<controls:SpectreTextBlock Grid.Column="1"
|
</Grid>
|
||||||
Text="{Binding Serial}" />
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
</Grid>
|
ColumnSpacing="8"
|
||||||
<Grid ColumnDefinitions="Auto, *"
|
IsVisible="{Binding Serial, Converter={x:Static StringConverters.IsNotNullOrEmpty}, Mode=OneWay}">
|
||||||
ColumnSpacing="8"
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
IsVisible="{Binding ScsiType, Converter={x:Static StringConverters.IsNotNullOrEmpty}, Mode=OneWay}">
|
Text="{x:Static localization:UI.Title_Serial_number}" />
|
||||||
<controls:SpectreTextBlock Grid.Column="0"
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
Text="{x:Static localization:UI.Title_Peripheral_device_type}" />
|
Text="{Binding Serial, Mode=OneWay}" />
|
||||||
<controls:SpectreTextBlock Grid.Column="1"
|
</Grid>
|
||||||
Text="{Binding ScsiType}" />
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
</Grid>
|
ColumnSpacing="8"
|
||||||
<CheckBox IsChecked="{Binding RemovableChecked}"
|
IsVisible="{Binding ScsiType, Converter={x:Static StringConverters.IsNotNullOrEmpty}, Mode=OneWay}">
|
||||||
IsEnabled="False">
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Removable_media}" />
|
Text="{x:Static localization:UI.Title_Peripheral_device_type}" />
|
||||||
</CheckBox>
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
<CheckBox IsChecked="{Binding UsbConnected}"
|
Text="{Binding ScsiType, Mode=OneWay}" />
|
||||||
IsEnabled="False">
|
</Grid>
|
||||||
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Connected_by_USB}" />
|
<CheckBox IsChecked="{Binding RemovableChecked, Mode=OneWay}"
|
||||||
</CheckBox>
|
IsEnabled="False">
|
||||||
</StackPanel>
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Removable_media}" />
|
||||||
<Panel Grid.Row="1" />
|
</CheckBox>
|
||||||
<TextBox Grid.Row="2"
|
<CheckBox IsChecked="{Binding UsbConnected, Mode=OneWay}"
|
||||||
Text="{Binding StatusMessage, Mode=OneWay}" />
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Connected_by_USB}" />
|
||||||
|
</CheckBox>
|
||||||
|
</StackPanel>
|
||||||
|
</TabItem>
|
||||||
|
<TabItem IsVisible="{Binding UsbVisible, Mode=OneWay}">
|
||||||
|
<TabItem.Header>
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_USB}" />
|
||||||
|
</TabItem.Header>
|
||||||
|
<StackPanel Orientation="Vertical"
|
||||||
|
Margin="8"
|
||||||
|
Spacing="8">
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Title_Vendor_ID}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding UsbVendorId, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Title_Product_ID}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding UsbProductId, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Title_Manufacturer}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding UsbManufacturer, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Title_Product}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding UsbProduct, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Title_Serial_number}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding UsbSerial, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Button Command="{Binding SaveUsbDescriptorsCommand, Mode=OneWay}"
|
||||||
|
IsVisible="{Binding SaveUsbDescriptorsEnabled, Mode=OneWay}">
|
||||||
|
<TextBlock Text="{x:Static localization:UI.Save_descriptors_to_file}" />
|
||||||
|
</Button>
|
||||||
|
</StackPanel>
|
||||||
|
</TabItem>
|
||||||
|
<TabItem IsVisible="{Binding FirewireVisible, Mode=OneWay}">
|
||||||
|
<TabItem.Header>
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_FireWire}" />
|
||||||
|
</TabItem.Header>
|
||||||
|
<StackPanel Orientation="Vertical">
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Title_Vendor_ID}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding FirewireVendorId, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Title_Model_ID}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding FirewireModelId, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Title_Manufacturer}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding FirewireManufacturer, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Title_Model}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding FirewireModel, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Title_GUID}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding FirewireGuid, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
</TabItem>
|
||||||
|
<TabItem IsVisible="{Binding PlextorVisible, Mode=OneWay}">
|
||||||
|
<TabItem.Header>
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Plextor}" />
|
||||||
|
</TabItem.Header>
|
||||||
|
<ScrollViewer Margin="8">
|
||||||
|
<StackPanel Orientation="Vertical"
|
||||||
|
Spacing="8">
|
||||||
|
<StackPanel Orientation="Vertical"
|
||||||
|
IsVisible="{Binding PlextorEepromVisible, Mode=OneWay}"
|
||||||
|
Spacing="8">
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Total_loaded_discs}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding PlextorDiscs, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Time_spent_reading_CDs}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding PlextorCdReadTime, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Time_spent_writing_CDs}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding PlextorCdWriteTime, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<StackPanel Orientation="Vertical"
|
||||||
|
IsVisible="{Binding PlextorDvdTimesVisible, Mode=OneWay}"
|
||||||
|
Spacing="8">
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Time_spent_reading_DVDs}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding PlextorDvdReadTime, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Time_spent_writing_DVDs}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding PlextorDvdWriteTime, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
<CheckBox IsChecked="{Binding PlextorPoweRec, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Supports_PoweRec}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding PlextorPoweRecEnabled, Mode=OneWay}"
|
||||||
|
IsEnabled="False"
|
||||||
|
IsVisible="{Binding PlextorPoweRec, Mode=OneWay}">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.PoweRec_is_enabled}" />
|
||||||
|
</CheckBox>
|
||||||
|
<StackPanel Orientation="Vertical"
|
||||||
|
IsVisible="{Binding PlextorPoweRecEnabled, Mode=OneWay}"
|
||||||
|
Spacing="8">
|
||||||
|
<StackPanel Orientation="Vertical"
|
||||||
|
IsVisible="{Binding PlextorPoweRecRecommendedVisible, Mode=OneWay}">
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Recommended_speed}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding PlextorPoweRecRecommended, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Vertical"
|
||||||
|
IsVisible="{Binding PlextorPoweRecSelectedVisible, Mode=OneWay}">
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Selected_PoweRec_speed_for_currently_inserted_media}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding PlextorPoweRecSelected, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Vertical"
|
||||||
|
IsVisible="{Binding PlextorPoweRecMaxVisible, Mode=OneWay}">
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Maximum_PoweRec_speed_for_currently_inserted_media}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding PlextorPoweRecMax, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Vertical"
|
||||||
|
IsVisible="{Binding PlextorPoweRecLastVisible, Mode=OneWay}">
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.Last_PoweRec_used_speed}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding PlextorPoweRecLast, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
<CheckBox IsChecked="{Binding PlextorSilentMode, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Supports_SilentMode}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding PlextorSilentModeEnabled, Mode=OneWay}"
|
||||||
|
IsEnabled="False"
|
||||||
|
IsVisible="{Binding PlextorSilentMode, Mode=OneWay}">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.SilentMode_is_enabled}" />
|
||||||
|
</CheckBox>
|
||||||
|
<StackPanel Orientation="Vertical"
|
||||||
|
IsVisible="{Binding PlextorSilentModeEnabled, Mode=OneWay}"
|
||||||
|
Spacing="8">
|
||||||
|
<TextBlock Text="{Binding PlextorSilentModeAccessTime, Mode=OneWay}" />
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.CD_read_speed_limited_to}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding PlextorSilentModeCdReadSpeedLimit, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.CD_write_speed_limited_to}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding PlextorSilentModeCdWriteSpeedLimit, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
<StackPanel Orientation="Vertical"
|
||||||
|
IsVisible="{Binding PlextorSilentModeDvdReadSpeedLimitVisible, Mode=OneWay}">
|
||||||
|
<Grid ColumnDefinitions="Auto, *"
|
||||||
|
ColumnSpacing="8">
|
||||||
|
<controls:SpectreTextBlock Grid.Column="0"
|
||||||
|
Text="{x:Static localization:UI.DVD_read_speed_limited_to}" />
|
||||||
|
<controls:SpectreTextBlock Grid.Column="1"
|
||||||
|
Text="{Binding PlextorSilentModeDvdReadSpeedLimit, Mode=OneWay}" />
|
||||||
|
</Grid>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
<CheckBox IsChecked="{Binding PlextorGigaRec, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Supports_GigaRec}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding PlextorSecuRec, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Supports_SecuRec}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding PlextorSpeedRead, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Supports_SpeedRead}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding PlextorSpeedEnabled, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.SpeedRead_is_enabled}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding PlextorHiding, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock
|
||||||
|
Text="{x:Static localization:UI.Supports_hiding_CD_Rs_and_sessions}" />
|
||||||
|
</CheckBox>
|
||||||
|
<StackPanel Orientation="Vertical"
|
||||||
|
IsVisible="{Binding PlextorHiding, Mode=OneWay}">
|
||||||
|
<CheckBox IsChecked="{Binding PlextorHidesRecordables, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Is_hiding_CD_Rs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding PlextorHidesSessions, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock
|
||||||
|
Text="{x:Static localization:UI.Is_forcing_only_first_session}" />
|
||||||
|
</CheckBox>
|
||||||
|
</StackPanel>
|
||||||
|
<CheckBox IsChecked="{Binding PlextorVariRec, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Supports_VariRec}" />
|
||||||
|
</CheckBox>
|
||||||
|
<StackPanel Orientation="Vertical"
|
||||||
|
IsVisible="{Binding PlextorDvd, Mode=OneWay}">
|
||||||
|
<CheckBox IsChecked="{Binding PlextorVariRecDvd, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Supports_VariRec_on_DVDs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding PlextorBitSetting, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock
|
||||||
|
Text="{x:Static localization:UI.Supports_bitsetting_DVD_R_book_type}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding PlextorBitSettingDl, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock
|
||||||
|
Text="{x:Static localization:UI.Supports_bitsetting_DVD_R_DL_book_type}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding PlextorDvdPlusWriteTest, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock
|
||||||
|
Text="{x:Static localization:UI.Supports_test_writing_DVD_Plus}" />
|
||||||
|
</CheckBox>
|
||||||
|
</StackPanel>
|
||||||
|
</StackPanel>
|
||||||
|
</ScrollViewer>
|
||||||
|
</TabItem>
|
||||||
|
<TabItem IsVisible="{Binding Kreon, Mode=OneWay}">
|
||||||
|
<TabItem.Header>
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Title_Kreon}" />
|
||||||
|
</TabItem.Header>
|
||||||
|
<StackPanel Orientation="Vertical" Margin="8">
|
||||||
|
<CheckBox IsChecked="{Binding KreonChallengeResponse, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:Core.Can_do_challenge_response_with_Xbox_discs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding KreonDecryptSs, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:Core.Can_read_and_decrypt_SS_from_Xbox_discs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding KreonXtremeUnlock, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:Core.Can_set_xtreme_unlock_state_with_Xbox_discs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding KreonWxripperUnlock, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:Core.Can_set_wxripper_unlock_state_with_Xbox_discs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding KreonChallengeResponse360, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:Core.Can_do_challenge_response_with_Xbox_360_discs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding KreonDecryptSs360, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:Core.Can_read_and_decrypt_SS_from_Xbox_360_discs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding KreonXtremeUnlock360, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:Core.Can_set_xtreme_unlock_state_with_Xbox_360_discs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding KreonWxripperUnlock360, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock
|
||||||
|
Text="{x:Static localization:Core.Can_set_wxripper_unlock_state_with_Xbox_360_discs}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding KreonLock, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:Core.Can_set_Kreon_locked_state}" />
|
||||||
|
</CheckBox>
|
||||||
|
<CheckBox IsChecked="{Binding KreonErrorSkipping, Mode=OneWay}"
|
||||||
|
IsEnabled="False">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:Core.Kreon_Can_skip_read_errors}" />
|
||||||
|
</CheckBox>
|
||||||
|
</StackPanel>
|
||||||
|
</TabItem>
|
||||||
|
<TabItem IsVisible="{Binding Ssc, Mode=OneWay}">
|
||||||
|
<TabItem.Header>
|
||||||
|
<TextBlock Text="{x:Static localization:UI.SSC_Label}" />
|
||||||
|
</TabItem.Header>
|
||||||
|
<StackPanel Orientation="Vertical" Margin="8" Spacing="8">
|
||||||
|
<StackPanel Orientation="Vertical" Spacing="8"
|
||||||
|
IsVisible="{Binding BlockLimits, Mode=OneWay}">
|
||||||
|
<controls:SpectreTextBlock Text="{Binding MinBlockSize, Mode=OneWay}"
|
||||||
|
IsVisible="{Binding !!MinBlockSize, Mode=OneWay}" />
|
||||||
|
<controls:SpectreTextBlock Text="{Binding MaxBlockSize, Mode=OneWay}"
|
||||||
|
IsVisible="{Binding !!MaxBlockSize, Mode=OneWay}" />
|
||||||
|
<controls:SpectreTextBlock Text="{Binding BlockSizeGranularity, Mode=OneWay}"
|
||||||
|
IsVisible="{Binding !!BlockSizeGranularity, Mode=OneWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Vertical" Spacing="8"
|
||||||
|
IsVisible="{Binding !!Densities, Mode=OneWay}">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Densities_supported_by_device}" VerticalAlignment="Center"/>
|
||||||
|
<TextBox Text="{Binding Densities, Mode=OneWay}"
|
||||||
|
IsReadOnly="True" />
|
||||||
|
</StackPanel>
|
||||||
|
<StackPanel Orientation="Vertical" Spacing="8"
|
||||||
|
IsVisible="{Binding !!MediumTypes, Mode=OneWay}">
|
||||||
|
<controls:SpectreTextBlock Text="{x:Static localization:UI.Medium_types_supported_by_device}" VerticalAlignment="Center"/>
|
||||||
|
<TextBox Text="{Binding MediumTypes, Mode=OneWay}"
|
||||||
|
IsReadOnly="True" />
|
||||||
|
</StackPanel>
|
||||||
|
<TextBox Text="{Binding MediumDensity, Mode=OneWay}"
|
||||||
|
IsReadOnly="True"
|
||||||
|
IsVisible="{Binding !!MediumDensity, Mode=OneWay}" />
|
||||||
|
</StackPanel>
|
||||||
|
</TabItem>
|
||||||
|
<TabItem IsVisible="{Binding !!PcmciaInfo, Mode=OneWay}">
|
||||||
|
<TabItem.Header>
|
||||||
|
<TextBlock Text="{x:Static localization:UI.Title_PCMCIA}" />
|
||||||
|
</TabItem.Header>
|
||||||
|
<ContentControl Content="{Binding PcmciaInfo, Mode=OneWay}" />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem IsVisible="{Binding !!AtaInfo, Mode=OneWay}">
|
||||||
|
<TabItem.Header>
|
||||||
|
<TextBlock Text="{x:Static localization:UI.Title_ATA_ATAPI}" />
|
||||||
|
</TabItem.Header>
|
||||||
|
<ContentControl Content="{Binding AtaInfo, Mode=OneWay}" />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem IsVisible="{Binding !!ScsiInfo, Mode=OneWay}">
|
||||||
|
<TabItem.Header>
|
||||||
|
<TextBlock Text="{x:Static localization:UI.Title_SCSI}" />
|
||||||
|
</TabItem.Header>
|
||||||
|
<ContentControl Content="{Binding ScsiInfo, Mode=OneWay}" />
|
||||||
|
</TabItem>
|
||||||
|
<TabItem IsVisible="{Binding !!SdMmcInfo, Mode=OneWay}">
|
||||||
|
<TabItem.Header>
|
||||||
|
<TextBlock Text="{x:Static localization:UI.Title_SD_MMC}" />
|
||||||
|
</TabItem.Header>
|
||||||
|
<ContentControl Content="{Binding SdMmcInfo, Mode=OneWay}" />
|
||||||
|
</TabItem>
|
||||||
|
</TabControl>
|
||||||
|
<TextBlock Grid.Row="2"
|
||||||
|
Text="{Binding StatusMessage, Mode=OneWay}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</Window>
|
</Window>
|
||||||
Reference in New Issue
Block a user