smart combobox control

some localization for cueripper
version bump
This commit is contained in:
chudov
2010-03-25 01:05:26 +00:00
parent 5f270e4a8e
commit 612fba3bcb
33 changed files with 2623 additions and 1303 deletions

View File

@@ -145,6 +145,11 @@
<Install>true</Install> <Install>true</Install>
</BootstrapperPackage> </BootstrapperPackage>
</ItemGroup> </ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Messages.resx">
</EmbeddedResource>
<EmbeddedResource Include="Messages.ru-RU.resx" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.

View File

@@ -109,7 +109,6 @@ namespace Bwg.Scsi
private byte m_scsi_status; private byte m_scsi_status;
private Logger m_logger; private Logger m_logger;
private int m_MaximumTransferLength; private int m_MaximumTransferLength;
static private IDictionary<ushort, string> m_asc_map;
#endregion #endregion
#region private static data structures #region private static data structures
@@ -699,11 +698,11 @@ namespace Bwg.Scsi
/// <returns>a string representing the error codes given by ASC and ASCQ</returns> /// <returns>a string representing the error codes given by ASC and ASCQ</returns>
public static string LookupSenseError(byte asc, byte ascq) public static string LookupSenseError(byte asc, byte ascq)
{ {
ushort data = Mix(asc, ascq) ; string res = messages.GetString(string.Format("SCSIErrorMessage_{0:X2}{1:X2}", asc, ascq));
if (m_asc_map.ContainsKey(data)) if (res != null)
return m_asc_map[data]; return res;
string msg = messages.GetString("UnknownSCSIError") ?? "Unknown SCSI Error";
return "NO SENSE STRING FOR ASC=" + asc.ToString("X") + ", ASCQ=" + ascq.ToString("X"); return msg + " ASC=" + asc.ToString("X2") + ", ASCQ=" + ascq.ToString("X2");
} }
/// <summary> /// <summary>
@@ -769,176 +768,6 @@ namespace Bwg.Scsi
} }
} }
private static ushort Mix(byte asc, byte ascq)
{
return (ushort)((asc << 8) | ascq);
}
#region Initialize ASC/ASCQ Error table
private static void InitAscTable()
{
m_asc_map = new Dictionary<ushort, string>();
m_asc_map[Mix(0x00, 0x00)] = "NO ADDITIONAL SENSE INFORMATION";
m_asc_map[Mix(0x00, 0x06)] = "I/O PROCESS TERMINATED";
m_asc_map[Mix(0x01, 0x00)] = "NO INDEX/SECTOR SIGNAL";
m_asc_map[Mix(0x01, 0x02)] = "NO SEEK COMPLETE";
m_asc_map[Mix(0x01, 0x03)] = "PERIPHERAL DEVICE WRITE FAULT";
m_asc_map[Mix(0x04, 0x00)] = "LOGICAL UNIT NOT READY, CAUSE NOT REPORTABLE";
m_asc_map[Mix(0x04, 0x01)] = "LOGICAL UNIT IS IN PROCESS OF BECOMING READY";
m_asc_map[Mix(0x04, 0x02)] = "LOGICAL UNIT NOT READY, INITIALIZING COMMAND REQUIRED";
m_asc_map[Mix(0x04, 0x03)] = "LOGICAL UNIT NOT READY, MANUAL INTERVENTION REQUIRED";
m_asc_map[Mix(0x04, 0x04)] = "LOGICAL UNIT NOT READY, FORMAT IN PROGRESS";
m_asc_map[Mix(0x04, 0x07)] = "LOGICAL UNIT NOT READY, OPERATION IN PROGRESS";
m_asc_map[Mix(0x04, 0x08)] = "LOGICAL UNIT NOT READY, LONG WRITE IN PROGRESS";
m_asc_map[Mix(0x05, 0x00)] = "LOGICAL UNIT DOES NOT RESPOND TO SELECTION";
m_asc_map[Mix(0x08, 0x00)] = "LOGICAL UNIT COMMUNICATION FAILURE";
m_asc_map[Mix(0x08, 0x01)] = "LOGICAL UNIT COMMUNICATION TIME-OUT";
m_asc_map[Mix(0x08, 0x02)] = "LOGICAL UNIT COMMUNICATION PARITY ERROR";
m_asc_map[Mix(0x08, 0x03)] = "LOGICAL UNIT COMMUNICATION CRC ERROR (ULTRA-DMA/32)";
m_asc_map[Mix(0x08, 0x04)] = "UNREACHABLE COPY TARGET";
m_asc_map[Mix(0x0c, 0x00)] = "WRITE ERROR";
m_asc_map[Mix(0x10, 0x00)] = "ID CRC OR ECC ERROR";
m_asc_map[Mix(0x11, 0x00)] = "UNRECOVERED READ ERROR";
m_asc_map[Mix(0x11, 0x01)] = "READ RETRIES EXHAUSTED";
m_asc_map[Mix(0x11, 0x02)] = "ERROR TOO LONG TO CORRECT";
m_asc_map[Mix(0x11, 0x05)] = "L-EC UNCORRECTABLE ERROR";
m_asc_map[Mix(0x11, 0x06)] = "CIRC UNRECOVERED ERROR";
m_asc_map[Mix(0x11, 0x0F)] = "ERROR READING UPC/EAN NUMBER";
m_asc_map[Mix(0x11, 0x10)] = "ERROR READING ISRC NUMBER";
m_asc_map[Mix(0x11, 0x11)] = "READ ERROR <20> LOSS OF STREAMING";
m_asc_map[Mix(0x20, 0x00)] = "INVALID COMMAND OPERATION CODE";
m_asc_map[Mix(0x21, 0x00)] = "LOGICAL BLOCK ADDRESS OUT OF RANGE";
m_asc_map[Mix(0x21, 0x01)] = "INVALID ELEMENT ADDRESS";
m_asc_map[Mix(0x21, 0x02)] = "INVALID ADDRESS FOR WRITE";
m_asc_map[Mix(0x24, 0x00)] = "INVALID FIELD IN CDB";
m_asc_map[Mix(0x26, 0x00)] = "INVALID FIELD IN PARAMETER LIST";
m_asc_map[Mix(0x26, 0x01)] = "PARAMETER NOT SUPPORTED";
m_asc_map[Mix(0x26, 0x02)] = "PARAMETER VALUE INVALID";
m_asc_map[Mix(0x26, 0x03)] = "THRESHOLD PARAMETERS NOT SUPPORTED";
m_asc_map[Mix(0x27, 0x00)] = "WRITE PROTECTED";
m_asc_map[Mix(0x28, 0x00)] = "NOT READY TO READY CHANGE, MEDIUM MAY HAVE CHANGED";
m_asc_map[Mix(0x28, 0x01)] = "IMPORT OR EXPORT ELEMENT ACCESSED";
m_asc_map[Mix(0x29, 0x00)] = "POWER ON, RESET, OR BUS DEVICE RESET OCCURRED";
m_asc_map[Mix(0x29, 0x01)] = "POWER ON OCCURRED";
m_asc_map[Mix(0x29, 0x02)] = "BUS RESET OCCURRED";
m_asc_map[Mix(0x29, 0x03)] = "BUS DEVICE RESET FUNCTION OCCURRED";
m_asc_map[Mix(0x29, 0x04)] = "DEVICE INTERNAL RESET";
m_asc_map[Mix(0x2A, 0x00)] = "PARAMETERS CHANGED";
m_asc_map[Mix(0x2A, 0x01)] = "MODE PARAMETERS CHANGED";
m_asc_map[Mix(0x2A, 0x02)] = "LOG PARAMETERS CHANGED";
m_asc_map[Mix(0x2C, 0x00)] = "COMMMAND SEQUENCE ERROR";
m_asc_map[Mix(0x2C, 0x03)] = "CURRENT PROGRAM AREA IS NOT EMPTY";
m_asc_map[Mix(0x2C, 0x04)] = "CURRENT PROGRAM AREA IS EMPTY";
m_asc_map[Mix(0x2E, 0x00)] = "INSUFFICIENT TIME FOR OPERATION";
m_asc_map[Mix(0x30, 0x00)] = "INCOMPATIBLE MEDIUM INSTALLED";
m_asc_map[Mix(0x30, 0x01)] = "CANNOT READ MEDIUM - UNKNOWN FORMAT";
m_asc_map[Mix(0x30, 0x02)] = "CANNOT READ MEDIUM - INCOMPATIBLE FORMAT";
m_asc_map[Mix(0x30, 0x03)] = "CLEANING CARTRIDGE INSTALLED";
m_asc_map[Mix(0x30, 0x04)] = "CANNOT WRITE MEDIUM - UNKONWN FORMAT";
m_asc_map[Mix(0x30, 0x05)] = "CANNOT WRITE MEDIUM - INCOMPATIBLE FORMAT";
m_asc_map[Mix(0x30, 0x06)] = "CANNOT FORMAT MEDIUM - INCOMPATIBLE FORMAT";
m_asc_map[Mix(0x30, 0x07)] = "CLEANING FAILURE";
m_asc_map[Mix(0x30, 0x08)] = "CANNOT WRITE - APPLICATION CODE MISMATCH";
m_asc_map[Mix(0x30, 0x09)] = "CURRENT SESSION NOT FIXATED FOR APPEND";
m_asc_map[Mix(0x30, 0x10)] = "MEDIUM NOT FORMATTED";
m_asc_map[Mix(0x30, 0x11)] = "CANNOT WRITE MEDIUM - UNSUPPORTED MEDIUM VERSION";
m_asc_map[Mix(0x3A, 0x00)] = "MEDIUM NOT PRESENT";
m_asc_map[Mix(0x3A, 0x01)] = "MEDIUM NOT PRESENT - TRAY CLOSED";
m_asc_map[Mix(0x3A, 0x02)] = "MEDIUM NOT PRESENT - TRAY OPEN";
m_asc_map[Mix(0x3B, 0x0D)] = "MEDIUM DESTINATION ELEMENT FULL";
m_asc_map[Mix(0x3B, 0x0E)] = "MEDIUM SOURCE ELEMENT EMPTY";
m_asc_map[Mix(0x3B, 0x0F)] = "END OF MEDIUM REACHED";
m_asc_map[Mix(0x3B, 0x11)] = "MEDIUM MAGAZINE NOT ACCESSIBLE";
m_asc_map[Mix(0x3B, 0x12)] = "MEDIUM MAGAZINE REMOVED";
m_asc_map[Mix(0x3B, 0x13)] = "MEDIUM MAGAZINE INSERTED";
m_asc_map[Mix(0x3B, 0x14)] = "MEDIUM MAGAZINE LOCKED";
m_asc_map[Mix(0x3B, 0x15)] = "MEDIUM MAGAZINE UNLOCKED";
m_asc_map[Mix(0x3E, 0x00)] = "LOGICAL UNIT HAS NOT SELF-CONFIGURED YET";
m_asc_map[Mix(0x3E, 0x01)] = "LOGICAL UNIT FAILURE";
m_asc_map[Mix(0x3E, 0x02)] = "TIMEOUT ON LOGICAL UNIT";
m_asc_map[Mix(0x3F, 0x00)] = "TARGET OPERATING CONDITIONS HAVE CHANGED";
m_asc_map[Mix(0x3F, 0x01)] = "MICROCODE HAS BEEN CHANGED";
m_asc_map[Mix(0x3F, 0x02)] = "CHANGED OPERATING DEFINITION";
m_asc_map[Mix(0x3F, 0x03)] = "INQUIRY DATA HAS CHANGED";
m_asc_map[Mix(0x53, 0x00)] = "MEDIA LOAD OR EJECT FAILED";
m_asc_map[Mix(0x53, 0x02)] = "MEDIUM REMOVAL PREVENTED";
m_asc_map[Mix(0x57, 0x00)] = "UNABLE TO RECOVER TABLE OF CONTENTS";
m_asc_map[Mix(0x5A, 0x00)] = "OPERATOR REQUEST OR STATE CHANGE INPUT";
m_asc_map[Mix(0x5A, 0x01)] = "OPERATOR MEDIUM REMOVAL REQUEST";
m_asc_map[Mix(0x5A, 0x02)] = "OPERATOR SELECTED WRITE PROTECT";
m_asc_map[Mix(0x5A, 0x03)] = "OPERATOR SELECTED WRITE PERMIT";
m_asc_map[Mix(0x5B, 0x00)] = "LOG EXCEPTION";
m_asc_map[Mix(0x5B, 0x01)] = "THRESHOLD CONDITION MET";
m_asc_map[Mix(0x5B, 0x02)] = "LOG COUNTER AT MAXIMUM";
m_asc_map[Mix(0x5B, 0x03)] = "LOG LIST CODES EXHAUSTED";
m_asc_map[Mix(0x5E, 0x00)] = "LOW POWER CONDITION ON";
m_asc_map[Mix(0x5E, 0x01)] = "IDLE CONDITION ACTIVATED BY TIMER";
m_asc_map[Mix(0x5E, 0x02)] = "STANDBY CONDITION ACTIVATED BY TIMER";
m_asc_map[Mix(0x5E, 0x03)] = "IDLE CONDITION ACTIVATED BY COMMAND";
m_asc_map[Mix(0x5E, 0x04)] = "STANDBY CONDITION ACTIVATED BY COMMAND";
m_asc_map[Mix(0x63, 0x00)] = "END OF USER AREA ENCOUNTERED ON THIS TRACK";
m_asc_map[Mix(0x63, 0x01)] = "PACKET DOES NOT FIT IN AVAILABLE SPACE";
m_asc_map[Mix(0x64, 0x00)] = "ILLEGAL MODE FOR THIS TRACK";
m_asc_map[Mix(0x64, 0x01)] = "INVALID PACKET SIZE";
m_asc_map[Mix(0x65, 0x00)] = "VOLTAGE FAULT";
m_asc_map[Mix(0x6F, 0x00)] = "COPY PROTECTION KEY EXCHANGE FAILURE - AUTHENTICATION FAILURE";
m_asc_map[Mix(0x6F, 0x01)] = "COPY PROTECTION KEY EXCHANGE FAILURE - KEY NOT PRESENT";
m_asc_map[Mix(0x6F, 0x02)] = "COPY PROTECTION KEY EXCHANGE FAILURE - KEY NOT ESTABLISHED";
m_asc_map[Mix(0x6F, 0x03)] = "READ OF SCRAMBLED SECTOR WITHOUT AUTHENTICATION";
m_asc_map[Mix(0x6F, 0x04)] = "MEDIA REGION CODE IS MISMATCHED TO LOGICAL UNIT REGION";
m_asc_map[Mix(0x6F, 0x05)] = "LOGICAL UNIT REGION MUST BE PERMANENT/REGION RESET COUNT ERROR";
m_asc_map[Mix(0x72, 0x00)] = "SESSION FIXATION ERROR";
m_asc_map[Mix(0x72, 0x01)] = "SESSION FIXATION ERROR WRITING LEAD-IN";
m_asc_map[Mix(0x72, 0x02)] = "SESSION FIXATION ERROR WRITING LEAD-OUT";
m_asc_map[Mix(0x72, 0x03)] = "SESSION FIXATION ERROR - INCOMPLETE TRACK IN SESSION";
m_asc_map[Mix(0x72, 0x04)] = "EMPTY OR PARTIALLY WRITTEN RESERVED TRACK";
m_asc_map[Mix(0x72, 0x05)] = "NO MORE TRACK RESERVATIONS ALLOWED";
m_asc_map[Mix(0x72, 0x06)] = "RMZ EXTENSION IS NOT ALLOWED";
m_asc_map[Mix(0x72, 0x07)] = "NO MORE TEST ZONE EXTENSIONS ARE ALLOWED";
m_asc_map[Mix(0x73, 0x00)] = "CD CONTROL ERROR";
m_asc_map[Mix(0x73, 0x01)] = "POWER CALIBRATION AREA ALMOST";
m_asc_map[Mix(0x73, 0x02)] = "POWER CALIBRATION AREA IS FULL";
m_asc_map[Mix(0x73, 0x03)] = "POWER CALIBRATION AREA ERROR";
m_asc_map[Mix(0x73, 0x04)] = "PROGRAM MEMORY AREA UPDATE FAILURE";
m_asc_map[Mix(0x73, 0x05)] = "PROGRAM MEMORY AREA IS FULL";
m_asc_map[Mix(0x73, 0x06)] = "RMA/PMA IS ALMOST FULL";
}
#endregion
private CommandStatus SendCommand(Command cmd) private CommandStatus SendCommand(Command cmd)
{ {
return (m_ossize == 32) ? SendCommand32(cmd) : SendCommand64(cmd); return (m_ossize == 32) ? SendCommand32(cmd) : SendCommand64(cmd);
@@ -1077,6 +906,8 @@ namespace Bwg.Scsi
#endregion #endregion
static global::System.Resources.ResourceManager messages;
#region constructor #region constructor
/// <summary> /// <summary>
/// ///
@@ -1085,7 +916,6 @@ namespace Bwg.Scsi
{ {
m_logger = l; m_logger = l;
LogSenseState = true; LogSenseState = true;
InitAscTable();
IntPtr p = new IntPtr(); IntPtr p = new IntPtr();
if (Marshal.SizeOf(p) == 4) if (Marshal.SizeOf(p) == 4)
@@ -1098,7 +928,7 @@ namespace Bwg.Scsi
static Device() static Device()
{ {
InitAscTable(); messages = new global::System.Resources.ResourceManager("Bwg.Scsi.Messages", typeof(Device).Assembly);
} }
#endregion #endregion

495
Bwg.Scsi/Messages.resx Normal file
View File

@@ -0,0 +1,495 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="SCSIErrorMessage_0000" xml:space="preserve">
<value>NO ADDITIONAL SENSE INFORMATION</value>
</data>
<data name="SCSIErrorMessage_0006" xml:space="preserve">
<value>I/O PROCESS TERMINATED</value>
</data>
<data name="SCSIErrorMessage_0100" xml:space="preserve">
<value>NO INDEX/SECTOR SIGNAL</value>
</data>
<data name="SCSIErrorMessage_0102" xml:space="preserve">
<value>NO SEEK COMPLETE</value>
</data>
<data name="SCSIErrorMessage_0103" xml:space="preserve">
<value>PERIPHERAL DEVICE WRITE FAULT</value>
</data>
<data name="SCSIErrorMessage_0400" xml:space="preserve">
<value>LOGICAL UNIT NOT READY, CAUSE NOT REPORTABLE</value>
</data>
<data name="SCSIErrorMessage_0401" xml:space="preserve">
<value>LOGICAL UNIT IS IN PROCESS OF BECOMING READY</value>
</data>
<data name="SCSIErrorMessage_0402" xml:space="preserve">
<value>LOGICAL UNIT NOT READY, INITIALIZING COMMAND REQUIRED</value>
</data>
<data name="SCSIErrorMessage_0403" xml:space="preserve">
<value>LOGICAL UNIT NOT READY, MANUAL INTERVENTION REQUIRED</value>
</data>
<data name="SCSIErrorMessage_0404" xml:space="preserve">
<value>LOGICAL UNIT NOT READY, FORMAT IN PROGRESS</value>
</data>
<data name="SCSIErrorMessage_0407" xml:space="preserve">
<value>LOGICAL UNIT NOT READY, OPERATION IN PROGRESS</value>
</data>
<data name="SCSIErrorMessage_0408" xml:space="preserve">
<value>LOGICAL UNIT NOT READY, LONG WRITE IN PROGRESS</value>
</data>
<data name="SCSIErrorMessage_0500" xml:space="preserve">
<value>LOGICAL UNIT DOES NOT RESPOND TO SELECTION</value>
</data>
<data name="SCSIErrorMessage_0800" xml:space="preserve">
<value>LOGICAL UNIT COMMUNICATION FAILURE</value>
</data>
<data name="SCSIErrorMessage_0801" xml:space="preserve">
<value>LOGICAL UNIT COMMUNICATION TIME-OUT</value>
</data>
<data name="SCSIErrorMessage_0802" xml:space="preserve">
<value>LOGICAL UNIT COMMUNICATION PARITY ERROR</value>
</data>
<data name="SCSIErrorMessage_0803" xml:space="preserve">
<value>LOGICAL UNIT COMMUNICATION CRC ERROR (ULTRA-DMA/32)</value>
</data>
<data name="SCSIErrorMessage_0804" xml:space="preserve">
<value>UNREACHABLE COPY TARGET</value>
</data>
<data name="SCSIErrorMessage_0c00" xml:space="preserve">
<value>WRITE ERROR</value>
</data>
<data name="SCSIErrorMessage_1000" xml:space="preserve">
<value>ID CRC OR ECC ERROR</value>
</data>
<data name="SCSIErrorMessage_1100" xml:space="preserve">
<value>UNRECOVERED READ ERROR</value>
</data>
<data name="SCSIErrorMessage_1101" xml:space="preserve">
<value>READ RETRIES EXHAUSTED</value>
</data>
<data name="SCSIErrorMessage_1102" xml:space="preserve">
<value>ERROR TOO LONG TO CORRECT</value>
</data>
<data name="SCSIErrorMessage_1105" xml:space="preserve">
<value>L-EC UNCORRECTABLE ERROR</value>
</data>
<data name="SCSIErrorMessage_1106" xml:space="preserve">
<value>CIRC UNRECOVERED ERROR</value>
</data>
<data name="SCSIErrorMessage_110F" xml:space="preserve">
<value>ERROR READING UPC/EAN NUMBER</value>
</data>
<data name="SCSIErrorMessage_1110" xml:space="preserve">
<value>ERROR READING ISRC NUMBER</value>
</data>
<data name="SCSIErrorMessage_1111" xml:space="preserve">
<value>READ ERROR LOSS OF STREAMING</value>
</data>
<data name="SCSIErrorMessage_2000" xml:space="preserve">
<value>INVALID COMMAND OPERATION CODE</value>
</data>
<data name="SCSIErrorMessage_2100" xml:space="preserve">
<value>LOGICAL BLOCK ADDRESS OUT OF RANGE</value>
</data>
<data name="SCSIErrorMessage_2101" xml:space="preserve">
<value>INVALID ELEMENT ADDRESS</value>
</data>
<data name="SCSIErrorMessage_2102" xml:space="preserve">
<value>INVALID ADDRESS FOR WRITE</value>
</data>
<data name="SCSIErrorMessage_2400" xml:space="preserve">
<value>INVALID FIELD IN CDB</value>
</data>
<data name="SCSIErrorMessage_2600" xml:space="preserve">
<value>INVALID FIELD IN PARAMETER LIST</value>
</data>
<data name="SCSIErrorMessage_2601" xml:space="preserve">
<value>PARAMETER NOT SUPPORTED</value>
</data>
<data name="SCSIErrorMessage_2602" xml:space="preserve">
<value>PARAMETER VALUE INVALID</value>
</data>
<data name="SCSIErrorMessage_2603" xml:space="preserve">
<value>THRESHOLD PARAMETERS NOT SUPPORTED</value>
</data>
<data name="SCSIErrorMessage_2700" xml:space="preserve">
<value>WRITE PROTECTED</value>
</data>
<data name="SCSIErrorMessage_2800" xml:space="preserve">
<value>NOT READY TO READY CHANGE, MEDIUM MAY HAVE CHANGED</value>
</data>
<data name="SCSIErrorMessage_2801" xml:space="preserve">
<value>IMPORT OR EXPORT ELEMENT ACCESSED</value>
</data>
<data name="SCSIErrorMessage_2900" xml:space="preserve">
<value>POWER ON, RESET, OR BUS DEVICE RESET OCCURRED</value>
</data>
<data name="SCSIErrorMessage_2901" xml:space="preserve">
<value>POWER ON OCCURRED</value>
</data>
<data name="SCSIErrorMessage_2902" xml:space="preserve">
<value>BUS RESET OCCURRED</value>
</data>
<data name="SCSIErrorMessage_2903" xml:space="preserve">
<value>BUS DEVICE RESET FUNCTION OCCURRED</value>
</data>
<data name="SCSIErrorMessage_2904" xml:space="preserve">
<value>DEVICE INTERNAL RESET</value>
</data>
<data name="SCSIErrorMessage_2A00" xml:space="preserve">
<value>PARAMETERS CHANGED</value>
</data>
<data name="SCSIErrorMessage_2A01" xml:space="preserve">
<value>MODE PARAMETERS CHANGED</value>
</data>
<data name="SCSIErrorMessage_2A02" xml:space="preserve">
<value>LOG PARAMETERS CHANGED</value>
</data>
<data name="SCSIErrorMessage_2C00" xml:space="preserve">
<value>COMMMAND SEQUENCE ERROR</value>
</data>
<data name="SCSIErrorMessage_2C03" xml:space="preserve">
<value>CURRENT PROGRAM AREA IS NOT EMPTY</value>
</data>
<data name="SCSIErrorMessage_2C04" xml:space="preserve">
<value>CURRENT PROGRAM AREA IS EMPTY</value>
</data>
<data name="SCSIErrorMessage_2E00" xml:space="preserve">
<value>INSUFFICIENT TIME FOR OPERATION</value>
</data>
<data name="SCSIErrorMessage_3000" xml:space="preserve">
<value>INCOMPATIBLE MEDIUM INSTALLED</value>
</data>
<data name="SCSIErrorMessage_3001" xml:space="preserve">
<value>CANNOT READ MEDIUM - UNKNOWN FORMAT</value>
</data>
<data name="SCSIErrorMessage_3002" xml:space="preserve">
<value>CANNOT READ MEDIUM - INCOMPATIBLE FORMAT</value>
</data>
<data name="SCSIErrorMessage_3003" xml:space="preserve">
<value>CLEANING CARTRIDGE INSTALLED</value>
</data>
<data name="SCSIErrorMessage_3004" xml:space="preserve">
<value>CANNOT WRITE MEDIUM - UNKONWN FORMAT</value>
</data>
<data name="SCSIErrorMessage_3005" xml:space="preserve">
<value>CANNOT WRITE MEDIUM - INCOMPATIBLE FORMAT</value>
</data>
<data name="SCSIErrorMessage_3006" xml:space="preserve">
<value>CANNOT FORMAT MEDIUM - INCOMPATIBLE FORMAT</value>
</data>
<data name="SCSIErrorMessage_3007" xml:space="preserve">
<value>CLEANING FAILURE</value>
</data>
<data name="SCSIErrorMessage_3008" xml:space="preserve">
<value>CANNOT WRITE - APPLICATION CODE MISMATCH</value>
</data>
<data name="SCSIErrorMessage_3009" xml:space="preserve">
<value>CURRENT SESSION NOT FIXATED FOR APPEND</value>
</data>
<data name="SCSIErrorMessage_3010" xml:space="preserve">
<value>MEDIUM NOT FORMATTED</value>
</data>
<data name="SCSIErrorMessage_3011" xml:space="preserve">
<value>CANNOT WRITE MEDIUM - UNSUPPORTED MEDIUM VERSION</value>
</data>
<data name="SCSIErrorMessage_3A00" xml:space="preserve">
<value>MEDIUM NOT PRESENT</value>
</data>
<data name="SCSIErrorMessage_3A01" xml:space="preserve">
<value>MEDIUM NOT PRESENT - TRAY CLOSED</value>
</data>
<data name="SCSIErrorMessage_3A02" xml:space="preserve">
<value>MEDIUM NOT PRESENT - TRAY OPEN</value>
</data>
<data name="SCSIErrorMessage_3B0D" xml:space="preserve">
<value>MEDIUM DESTINATION ELEMENT FULL</value>
</data>
<data name="SCSIErrorMessage_3B0E" xml:space="preserve">
<value>MEDIUM SOURCE ELEMENT EMPTY</value>
</data>
<data name="SCSIErrorMessage_3B0F" xml:space="preserve">
<value>END OF MEDIUM REACHED</value>
</data>
<data name="SCSIErrorMessage_3B11" xml:space="preserve">
<value>MEDIUM MAGAZINE NOT ACCESSIBLE</value>
</data>
<data name="SCSIErrorMessage_3B12" xml:space="preserve">
<value>MEDIUM MAGAZINE REMOVED</value>
</data>
<data name="SCSIErrorMessage_3B13" xml:space="preserve">
<value>MEDIUM MAGAZINE INSERTED</value>
</data>
<data name="SCSIErrorMessage_3B14" xml:space="preserve">
<value>MEDIUM MAGAZINE LOCKED</value>
</data>
<data name="SCSIErrorMessage_3B15" xml:space="preserve">
<value>MEDIUM MAGAZINE UNLOCKED</value>
</data>
<data name="SCSIErrorMessage_3E00" xml:space="preserve">
<value>LOGICAL UNIT HAS NOT SELF-CONFIGURED YET</value>
</data>
<data name="SCSIErrorMessage_3E01" xml:space="preserve">
<value>LOGICAL UNIT FAILURE</value>
</data>
<data name="SCSIErrorMessage_3E02" xml:space="preserve">
<value>TIMEOUT ON LOGICAL UNIT</value>
</data>
<data name="SCSIErrorMessage_3F00" xml:space="preserve">
<value>TARGET OPERATING CONDITIONS HAVE CHANGED</value>
</data>
<data name="SCSIErrorMessage_3F01" xml:space="preserve">
<value>MICROCODE HAS BEEN CHANGED</value>
</data>
<data name="SCSIErrorMessage_3F02" xml:space="preserve">
<value>CHANGED OPERATING DEFINITION</value>
</data>
<data name="SCSIErrorMessage_3F03" xml:space="preserve">
<value>INQUIRY DATA HAS CHANGED</value>
</data>
<data name="SCSIErrorMessage_5300" xml:space="preserve">
<value>MEDIA LOAD OR EJECT FAILED</value>
</data>
<data name="SCSIErrorMessage_5302" xml:space="preserve">
<value>MEDIUM REMOVAL PREVENTED</value>
</data>
<data name="SCSIErrorMessage_5700" xml:space="preserve">
<value>UNABLE TO RECOVER TABLE OF CONTENTS</value>
</data>
<data name="SCSIErrorMessage_5A00" xml:space="preserve">
<value>OPERATOR REQUEST OR STATE CHANGE INPUT</value>
</data>
<data name="SCSIErrorMessage_5A01" xml:space="preserve">
<value>OPERATOR MEDIUM REMOVAL REQUEST</value>
</data>
<data name="SCSIErrorMessage_5A02" xml:space="preserve">
<value>OPERATOR SELECTED WRITE PROTECT</value>
</data>
<data name="SCSIErrorMessage_5A03" xml:space="preserve">
<value>OPERATOR SELECTED WRITE PERMIT</value>
</data>
<data name="SCSIErrorMessage_5B00" xml:space="preserve">
<value>LOG EXCEPTION</value>
</data>
<data name="SCSIErrorMessage_5B01" xml:space="preserve">
<value>THRESHOLD CONDITION MET</value>
</data>
<data name="SCSIErrorMessage_5B02" xml:space="preserve">
<value>LOG COUNTER AT MAXIMUM</value>
</data>
<data name="SCSIErrorMessage_5B03" xml:space="preserve">
<value>LOG LIST CODES EXHAUSTED</value>
</data>
<data name="SCSIErrorMessage_5E00" xml:space="preserve">
<value>LOW POWER CONDITION ON</value>
</data>
<data name="SCSIErrorMessage_5E01" xml:space="preserve">
<value>IDLE CONDITION ACTIVATED BY TIMER</value>
</data>
<data name="SCSIErrorMessage_5E02" xml:space="preserve">
<value>STANDBY CONDITION ACTIVATED BY TIMER</value>
</data>
<data name="SCSIErrorMessage_5E03" xml:space="preserve">
<value>IDLE CONDITION ACTIVATED BY COMMAND</value>
</data>
<data name="SCSIErrorMessage_5E04" xml:space="preserve">
<value>STANDBY CONDITION ACTIVATED BY COMMAND</value>
</data>
<data name="SCSIErrorMessage_6300" xml:space="preserve">
<value>END OF USER AREA ENCOUNTERED ON THIS TRACK</value>
</data>
<data name="SCSIErrorMessage_6301" xml:space="preserve">
<value>PACKET DOES NOT FIT IN AVAILABLE SPACE</value>
</data>
<data name="SCSIErrorMessage_6400" xml:space="preserve">
<value>ILLEGAL MODE FOR THIS TRACK</value>
</data>
<data name="SCSIErrorMessage_6401" xml:space="preserve">
<value>INVALID PACKET SIZE</value>
</data>
<data name="SCSIErrorMessage_6500" xml:space="preserve">
<value>VOLTAGE FAULT</value>
</data>
<data name="SCSIErrorMessage_6F00" xml:space="preserve">
<value>COPY PROTECTION KEY EXCHANGE FAILURE - AUTHENTICATION FAILURE</value>
</data>
<data name="SCSIErrorMessage_6F01" xml:space="preserve">
<value>COPY PROTECTION KEY EXCHANGE FAILURE - KEY NOT PRESENT</value>
</data>
<data name="SCSIErrorMessage_6F02" xml:space="preserve">
<value>COPY PROTECTION KEY EXCHANGE FAILURE - KEY NOT ESTABLISHED</value>
</data>
<data name="SCSIErrorMessage_6F03" xml:space="preserve">
<value>READ OF SCRAMBLED SECTOR WITHOUT AUTHENTICATION</value>
</data>
<data name="SCSIErrorMessage_6F04" xml:space="preserve">
<value>MEDIA REGION CODE IS MISMATCHED TO LOGICAL UNIT REGION</value>
</data>
<data name="SCSIErrorMessage_6F05" xml:space="preserve">
<value>LOGICAL UNIT REGION MUST BE PERMANENT/REGION RESET COUNT ERROR</value>
</data>
<data name="SCSIErrorMessage_7200" xml:space="preserve">
<value>SESSION FIXATION ERROR</value>
</data>
<data name="SCSIErrorMessage_7201" xml:space="preserve">
<value>SESSION FIXATION ERROR WRITING LEAD-IN</value>
</data>
<data name="SCSIErrorMessage_7202" xml:space="preserve">
<value>SESSION FIXATION ERROR WRITING LEAD-OUT</value>
</data>
<data name="SCSIErrorMessage_7203" xml:space="preserve">
<value>SESSION FIXATION ERROR - INCOMPLETE TRACK IN SESSION</value>
</data>
<data name="SCSIErrorMessage_7204" xml:space="preserve">
<value>EMPTY OR PARTIALLY WRITTEN RESERVED TRACK</value>
</data>
<data name="SCSIErrorMessage_7205" xml:space="preserve">
<value>NO MORE TRACK RESERVATIONS ALLOWED</value>
</data>
<data name="SCSIErrorMessage_7206" xml:space="preserve">
<value>RMZ EXTENSION IS NOT ALLOWED</value>
</data>
<data name="SCSIErrorMessage_7207" xml:space="preserve">
<value>NO MORE TEST ZONE EXTENSIONS ARE ALLOWED</value>
</data>
<data name="SCSIErrorMessage_7300" xml:space="preserve">
<value>CD CONTROL ERROR</value>
</data>
<data name="SCSIErrorMessage_7301" xml:space="preserve">
<value>POWER CALIBRATION AREA ALMOST</value>
</data>
<data name="SCSIErrorMessage_7302" xml:space="preserve">
<value>POWER CALIBRATION AREA IS FULL</value>
</data>
<data name="SCSIErrorMessage_7303" xml:space="preserve">
<value>POWER CALIBRATION AREA ERROR</value>
</data>
<data name="SCSIErrorMessage_7304" xml:space="preserve">
<value>PROGRAM MEMORY AREA UPDATE FAILURE</value>
</data>
<data name="SCSIErrorMessage_7305" xml:space="preserve">
<value>PROGRAM MEMORY AREA IS FULL</value>
</data>
<data name="SCSIErrorMessage_7306" xml:space="preserve">
<value>RMA/PMA IS ALMOST FULL</value>
</data>
<data name="UnknownSCSIError" xml:space="preserve">
<value>NO SENSE STRING FOR</value>
</data>
</root>

View File

@@ -0,0 +1,129 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="SCSIErrorMessage_3A00" xml:space="preserve">
<value>отсутствует носитель</value>
</data>
<data name="SCSIErrorMessage_3A01" xml:space="preserve">
<value>отсутствует носитель - лоток открыт</value>
</data>
<data name="SCSIErrorMessage_3A02" xml:space="preserve">
<value>отсутствует носитель - лоток закрыт</value>
</data>
</root>

View File

@@ -15,10 +15,6 @@ namespace BBBNOVA
private bool resize = false; private bool resize = false;
private Color _backColor = Color.White; private Color _backColor = Color.White;
private Color _color1 = Color.White;
private Color _color2 = Color.Gainsboro;
private Color _color3 = Color.White;
private Color _color4 = Color.PaleGoldenrod;
private BNRadius _radius = new BNRadius(); private BNRadius _radius = new BNRadius();
private int _dropDownHeight = 200; private int _dropDownHeight = 200;
@@ -67,30 +63,6 @@ namespace BBBNOVA
#region Properties #region Properties
public Color Color1
{
get { return _color1; }
set { _color1 = value; Invalidate(true); }
}
public Color Color2
{
get { return _color2; }
set { _color2 = value; Invalidate(true); }
}
public Color Color3
{
get { return _color3; }
set { _color3 = value; Invalidate(true); }
}
public Color Color4
{
get { return _color4; }
set { _color4 = value; Invalidate(true); }
}
public int DropDownHeight public int DropDownHeight
{ {
get { return _dropDownHeight; } get { return _dropDownHeight; }
@@ -155,15 +127,7 @@ namespace BBBNOVA
set set
{ {
_dropDownStyle = value; _dropDownStyle = value;
_textBox.Visible = ComboBoxStyle.DropDownList != value;
if (_dropDownStyle == ComboBoxStyle.DropDownList)
{
_textBox.Visible = false;
}
else
{
_textBox.Visible = true;
}
Invalidate(true); Invalidate(true);
} }
} }
@@ -179,35 +143,36 @@ namespace BBBNOVA
} }
} }
public bool IsDroppedDown public bool IsDroppedDown
{ {
get { return _isDroppedDown; } get { return _isDroppedDown; }
set set
{ {
if (_isDroppedDown == true && value == false ) if (_isDroppedDown == value)
{ return;
if (_popupControl.IsDropDown)
{
_popupControl.Close();
}
}
_isDroppedDown = value; _isDroppedDown = value;
if (_isDroppedDown) if (!_isDroppedDown && _popupControl.IsDropDown)
{ {
_popupControl.Close();
hovered = this.RectangleToScreen(this.ClientRectangle).Contains(MousePosition);
}
if (_isDroppedDown)
{
_listBox.Width = _dropDownWidth; _listBox.Width = _dropDownWidth;
_listBox.Height = CalculateListHeight(); _listBox.Height = CalculateListHeight();
_popupControl.Show(this, CalculateDropPosition(), ToolStripDropDownDirection.BelowRight); _popupControl.Show(this, CalculateDropPosition(), ToolStripDropDownDirection.BelowRight);
Capture = false; Capture = false;
_listBox.Capture = true; _listBox.Capture = true;
} }
Invalidate(); Invalidate();
if (_isDroppedDown)
OnDroppedDown(this, EventArgs.Empty); OnDroppedDown(this, EventArgs.Empty);
} }
} }
[Category("Appearance"), Description("Selects the radius of combobox edges.")] [Category("Appearance"), Description("Selects the radius of combobox edges.")]
public BNRadius Radius public BNRadius Radius
@@ -336,7 +301,7 @@ namespace BBBNOVA
_popupControl.Padding = new Padding(0); _popupControl.Padding = new Padding(0);
_popupControl.Margin = new Padding(0); _popupControl.Margin = new Padding(0);
_popupControl.AutoSize = true; _popupControl.AutoSize = true;
_popupControl.AutoClose = false; _popupControl.AutoClose = true;
_popupControl.DropShadowEnabled = true; _popupControl.DropShadowEnabled = true;
_popupControl.Items.Add(_controlHost); _popupControl.Items.Add(_controlHost);
@@ -347,11 +312,12 @@ namespace BBBNOVA
_listBox.MeasureItem += new MeasureItemEventHandler(_listBox_MeasureItem); _listBox.MeasureItem += new MeasureItemEventHandler(_listBox_MeasureItem);
_listBox.DrawItem += new DrawItemEventHandler(_listBox_DrawItem); _listBox.DrawItem += new DrawItemEventHandler(_listBox_DrawItem);
_listBox.MouseClick += new MouseEventHandler(_listBox_MouseClick); _listBox.MouseClick += new MouseEventHandler(_listBox_MouseClick);
_listBox.MouseUp += new MouseEventHandler(_listBox_MouseUp); //_listBox.MouseUp += new MouseEventHandler(_listBox_MouseUp);
_listBox.MouseDown += new MouseEventHandler(_listBox_MouseDown); _listBox.MouseDown += new MouseEventHandler(_listBox_MouseDown);
_listBox.MouseMove += new MouseEventHandler(_listBox_MouseMove); _listBox.MouseMove += new MouseEventHandler(_listBox_MouseMove);
//(_listBox.DataManager as CurrencyManager).ListChanged += new ListChangedEventHandler(BNComboBox_ListChanged); //(_listBox.DataManager as CurrencyManager).ListChanged += new ListChangedEventHandler(BNComboBox_ListChanged);
_popupControl.Closing += new ToolStripDropDownClosingEventHandler(_popupControl_Closing);
_popupControl.Closed += new ToolStripDropDownClosedEventHandler(_popupControl_Closed); _popupControl.Closed += new ToolStripDropDownClosedEventHandler(_popupControl_Closed);
_textBox.Resize += new EventHandler(_textBox_Resize); _textBox.Resize += new EventHandler(_textBox_Resize);
@@ -456,8 +422,9 @@ namespace BBBNOVA
hovered = false; hovered = false;
Invalidate(true); Invalidate(true);
} }
if (!this.RectangleToScreen(this.ClientRectangle).Contains(MousePosition) &&
base.OnMouseLeave(e); (!IsDroppedDown || !_popupControl.RectangleToScreen(_popupControl.ClientRectangle).Contains(MousePosition)))
base.OnMouseLeave(e);
} }
protected override void OnMouseDown(MouseEventArgs e) protected override void OnMouseDown(MouseEventArgs e)
@@ -465,7 +432,7 @@ namespace BBBNOVA
//System.Diagnostics.Trace.WriteLine(string.Format("OnMouseDown({0})", SelectedIndex)); //System.Diagnostics.Trace.WriteLine(string.Format("OnMouseDown({0})", SelectedIndex));
_textBox.Focus(); _textBox.Focus();
if (e.Button == MouseButtons.Left) if (e.Button == MouseButtons.Left)
if ((this.RectangleToScreen(rectBtn).Contains(MousePosition) || (DropDownStyle == ComboBoxStyle.DropDownList))) if (rectBtn.Contains(e.Location) || DropDownStyle == ComboBoxStyle.DropDownList || this.IsDroppedDown)
{ {
this.IsDroppedDown = !this.IsDroppedDown; this.IsDroppedDown = !this.IsDroppedDown;
} }
@@ -488,6 +455,18 @@ namespace BBBNOVA
base.OnMouseWheel(e); base.OnMouseWheel(e);
} }
public override bool Focused
{
get
{
if (base.ContainsFocus) return true;
if (this.IsDroppedDown && _popupControl.ContainsFocus) return true;
//if (this.IsDroppedDown && _listBox.ContainsFocus) return true;
if (this._dropDownStyle != ComboBoxStyle.DropDownList && _textBox.ContainsFocus) return true;
return false;
}
}
protected override void OnGotFocus(EventArgs e) protected override void OnGotFocus(EventArgs e)
{ {
Invalidate(true); Invalidate(true);
@@ -496,9 +475,9 @@ namespace BBBNOVA
protected override void OnLostFocus(EventArgs e) protected override void OnLostFocus(EventArgs e)
{ {
if (this.IsDroppedDown && !_popupControl.ContainsFocus && !this.ContainsFocus) if (this.IsDroppedDown && !this.Focused)
this.IsDroppedDown = false; this.IsDroppedDown = false;
Invalidate();
base.OnLostFocus(e); base.OnLostFocus(e);
} }
@@ -510,11 +489,16 @@ namespace BBBNOVA
//this.SelectedIndex = _listBox.SelectedIndex; //this.SelectedIndex = _listBox.SelectedIndex;
//this.Invalidate(true); //this.Invalidate(true);
Text = _listBox.SelectedValue != null ? if (Enabled || _listBox.SelectedItem != null)
_listBox.GetItemText(_listBox.SelectedValue) : {
""; Text = _listBox.SelectedItem != null ?
_listBox.GetItemText(_listBox.SelectedItem) :
"";
}
// SelectedValue
OnSelectedIndexChanged(e); if (_listBox.SelectedIndex >= 0)
OnSelectedIndexChanged(e);
base.OnSelectedValueChanged(e); base.OnSelectedValueChanged(e);
} }
@@ -610,34 +594,25 @@ namespace BBBNOVA
Radius.BottomLeft); Radius.BottomLeft);
//brushes and pens //brushes and pens
Brush brInnerBrush = new LinearGradientBrush( Color foreColor = Color.FromArgb(IsDroppedDown ? 100 : 50, ForeColor);
new Rectangle(rectInner.X,rectInner.Y,rectInner.Width,rectInner.Height+1), Brush brInnerBrush = new LinearGradientBrush(
(hovered || IsDroppedDown || ContainsFocus)?Color4:Color2, Color.Transparent, new Rectangle(rectInner.X, rectInner.Y, rectInner.Width, rectInner.Height + 1),
LinearGradientMode.Vertical); Color.FromArgb((hovered || IsDroppedDown || Focused) ? 200 : 100, ForeColor), Color.Transparent,
LinearGradientMode.Vertical);
Brush brBackground; Brush brBackground;
if (this.DropDownStyle == ComboBoxStyle.DropDownList) if (this.DropDownStyle == ComboBoxStyle.DropDownList)
{ brBackground = new LinearGradientBrush(pathInnerBorder.GetBounds(), BackColor, foreColor, LinearGradientMode.Vertical);
brBackground = new LinearGradientBrush(pathInnerBorder.GetBounds(), else
Color.FromArgb(IsDroppedDown ? 100 : 255, Color.White), brBackground = new SolidBrush(BackColor);
Color.FromArgb(IsDroppedDown?255:100, BackColor), Pen penOuterBorder = new Pen(BackColor, 0);
LinearGradientMode.Vertical);
}
else
{
brBackground = new SolidBrush(BackColor);
}
Pen penOuterBorder = new Pen(Color1, 0);
Pen penInnerBorder = new Pen(brInnerBrush, 0); Pen penInnerBorder = new Pen(brInnerBrush, 0);
LinearGradientBrush brButtonLeft = new LinearGradientBrush(rectBtn, Color1, Color2, LinearGradientMode.Vertical); LinearGradientBrush brButtonLeft = new LinearGradientBrush(rectBtn, BackColor, ForeColor, LinearGradientMode.Vertical);
ColorBlend blend = new ColorBlend(); ColorBlend blend = new ColorBlend();
blend.Colors = new Color[] { Color.Transparent, Color2, Color.Transparent }; blend.Colors = new Color[] { Color.Transparent, foreColor, Color.Transparent };
blend.Positions = new float[] { 0.0f, 0.5f, 1.0f}; blend.Positions = new float[] { 0.0f, 0.5f, 1.0f};
brButtonLeft.InterpolationColors = blend; brButtonLeft.InterpolationColors = blend;
Pen penLeftButton = new Pen(brButtonLeft, 0); Pen penLeftButton = new Pen(brButtonLeft, 0);
Brush brButton = new LinearGradientBrush(pathBtnBorder.GetBounds(), Brush brButton = new LinearGradientBrush(pathBtnBorder.GetBounds(), BackColor, foreColor, LinearGradientMode.Vertical);
Color.FromArgb(100, IsDroppedDown? Color2:Color.White),
Color.FromArgb(100, IsDroppedDown ? Color.White : Color2),
LinearGradientMode.Vertical);
//draw //draw
e.Graphics.FillPath(brBackground, pathContentBorder); e.Graphics.FillPath(brBackground, pathContentBorder);
@@ -691,11 +666,11 @@ namespace BBBNOVA
SolidBrush foreBrush = new SolidBrush(ForeColor); SolidBrush foreBrush = new SolidBrush(ForeColor);
if (Enabled) if (Enabled)
{ {
e.Graphics.DrawString(_textBox.Text, this.Font, foreBrush, rectText.Location); e.Graphics.DrawString(_textBox.Text, this.Font, foreBrush, rectText);
} }
else else
{ {
ControlPaint.DrawStringDisabled(e.Graphics, _textBox.Text, Font, Color1, rectText, sf); ControlPaint.DrawStringDisabled(e.Graphics, _textBox.Text, Font, BackColor, rectText, sf);
} }
} }
/* /*
@@ -823,8 +798,9 @@ namespace BBBNOVA
int i = _listBox.IndexFromPoint(e.Location); int i = _listBox.IndexFromPoint(e.Location);
if (_hoverItem != i) if (_hoverItem != i)
{ {
if (_hoverItem != -1) _listBox.Invalidate(_listBox.GetItemRectangle(_hoverItem));
_hoverItem = i; _hoverItem = i;
_listBox.Invalidate(); if (_hoverItem != -1) _listBox.Invalidate(_listBox.GetItemRectangle(_hoverItem));
} }
} }
@@ -837,16 +813,16 @@ namespace BBBNOVA
IsDroppedDown = false; IsDroppedDown = false;
} }
void _listBox_MouseUp(object sender, MouseEventArgs e) //void _listBox_MouseUp(object sender, MouseEventArgs e)
{ //{
int i = _listBox.IndexFromPoint(e.Location); // int i = _listBox.IndexFromPoint(e.Location);
//System.Diagnostics.Trace.WriteLine(string.Format("_listBox_MouseUp({0})", i)); // //System.Diagnostics.Trace.WriteLine(string.Format("_listBox_MouseUp({0})", i));
if (i >= 0) // if (i >= 0)
{ // {
_listBox.SelectedIndex = i; // _listBox.SelectedIndex = i;
IsDroppedDown = false; // IsDroppedDown = false;
} // }
} //}
void _listBox_MouseClick(object sender, MouseEventArgs e) void _listBox_MouseClick(object sender, MouseEventArgs e)
{ {
@@ -881,8 +857,8 @@ namespace BBBNOVA
{ {
if (DrawMode == DrawMode.Normal) if (DrawMode == DrawMode.Normal)
{ {
Color fg = _hoverItem != -1 && _hoverItem == e.Index ? Color1 : Color4; Color fg = _hoverItem != -1 && _hoverItem == e.Index ? BackColor : ForeColor;
Color bg = _hoverItem != -1 && _hoverItem == e.Index ? Color4 : Color1; Color bg = _hoverItem != -1 && _hoverItem == e.Index ? ForeColor : BackColor;
e.Graphics.FillRectangle(new SolidBrush(bg), e.Bounds); e.Graphics.FillRectangle(new SolidBrush(bg), e.Bounds);
if (e.Index >= 0) if (e.Index >= 0)
@@ -906,7 +882,8 @@ namespace BBBNOVA
StringFormat sf = new StringFormat(StringFormatFlags.NoWrap); StringFormat sf = new StringFormat(StringFormatFlags.NoWrap);
sf.Alignment = StringAlignment.Near; sf.Alignment = StringAlignment.Near;
textBounds.Offset(-3, 0); textBounds.Offset(-3, 0);
e.Graphics.DrawString(_listBox.GetItemText(Items[e.Index]), e.Font, new SolidBrush(fg), textBounds); textBounds.Height = _textBox.Height;
e.Graphics.DrawString(_listBox.GetItemText(Items[e.Index]), this.Font, new SolidBrush(fg), textBounds);
} }
return; return;
} }
@@ -938,19 +915,20 @@ namespace BBBNOVA
} }
void _popupControl_Closed(object sender, ToolStripDropDownClosedEventArgs e) void _popupControl_Closing(object sender, ToolStripDropDownClosingEventArgs e)
{
if (e.CloseReason == ToolStripDropDownCloseReason.AppClicked)
{
if (this.RectangleToScreen(this.ClientRectangle).Contains(MousePosition))
e.Cancel = true;
}
}
void _popupControl_Closed(object sender, ToolStripDropDownClosedEventArgs e)
{ {
_isDroppedDown = false; IsDroppedDown = false;
if (!this.RectangleToScreen(this.ClientRectangle).Contains(MousePosition))
{
hovered = false;
}
_hoverItem = -1;
Invalidate(true);
} }
void _textBox_Resize(object sender, EventArgs e) void _textBox_Resize(object sender, EventArgs e)
{ {
this.AdjustControls(); this.AdjustControls();

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// //
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

View File

@@ -82,6 +82,7 @@ namespace CUERipper
this.imageListMetadataSource = new System.Windows.Forms.ImageList(this.components); this.imageListMetadataSource = new System.Windows.Forms.ImageList(this.components);
this.bnComboBoxDrives = new BBBNOVA.BNComboBox(); this.bnComboBoxDrives = new BBBNOVA.BNComboBox();
this.drivesBindingSource = new System.Windows.Forms.BindingSource(this.components); this.drivesBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.bnComboBoxOutputFormat = new BBBNOVA.BNComboBox();
this.statusStrip1.SuspendLayout(); this.statusStrip1.SuspendLayout();
this.contextMenuStripRelease.SuspendLayout(); this.contextMenuStripRelease.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numericWriteOffset)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.numericWriteOffset)).BeginInit();
@@ -280,12 +281,8 @@ namespace CUERipper
// //
// bnComboBoxLosslessOrNot // bnComboBoxLosslessOrNot
// //
this.bnComboBoxLosslessOrNot.BackColor = System.Drawing.SystemColors.ControlDark; this.bnComboBoxLosslessOrNot.BackColor = System.Drawing.Color.White;
this.bnComboBoxLosslessOrNot.Border = System.Windows.Forms.BorderStyle.FixedSingle; this.bnComboBoxLosslessOrNot.Border = System.Windows.Forms.BorderStyle.FixedSingle;
this.bnComboBoxLosslessOrNot.Color1 = System.Drawing.SystemColors.Control;
this.bnComboBoxLosslessOrNot.Color2 = System.Drawing.SystemColors.ControlDark;
this.bnComboBoxLosslessOrNot.Color3 = System.Drawing.Color.Maroon;
this.bnComboBoxLosslessOrNot.Color4 = System.Drawing.SystemColors.ControlDarkDark;
this.bnComboBoxLosslessOrNot.DataSource = this.losslessOrNotBindingSource; this.bnComboBoxLosslessOrNot.DataSource = this.losslessOrNotBindingSource;
this.bnComboBoxLosslessOrNot.DropDownHeight = 200; this.bnComboBoxLosslessOrNot.DropDownHeight = 200;
this.bnComboBoxLosslessOrNot.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.bnComboBoxLosslessOrNot.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
@@ -314,12 +311,8 @@ namespace CUERipper
// //
// bnComboBoxEncoder // bnComboBoxEncoder
// //
this.bnComboBoxEncoder.BackColor = System.Drawing.SystemColors.ControlDark; this.bnComboBoxEncoder.BackColor = System.Drawing.Color.White;
this.bnComboBoxEncoder.Border = System.Windows.Forms.BorderStyle.FixedSingle; this.bnComboBoxEncoder.Border = System.Windows.Forms.BorderStyle.FixedSingle;
this.bnComboBoxEncoder.Color1 = System.Drawing.SystemColors.Control;
this.bnComboBoxEncoder.Color2 = System.Drawing.SystemColors.ControlDark;
this.bnComboBoxEncoder.Color3 = System.Drawing.Color.Maroon;
this.bnComboBoxEncoder.Color4 = System.Drawing.SystemColors.ControlDarkDark;
this.bnComboBoxEncoder.DataSource = this.encodersBindingSource; this.bnComboBoxEncoder.DataSource = this.encodersBindingSource;
this.bnComboBoxEncoder.DropDownHeight = 200; this.bnComboBoxEncoder.DropDownHeight = 200;
this.bnComboBoxEncoder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.bnComboBoxEncoder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
@@ -349,12 +342,8 @@ namespace CUERipper
// //
// bnComboBoxFormat // bnComboBoxFormat
// //
this.bnComboBoxFormat.BackColor = System.Drawing.SystemColors.ControlDark; this.bnComboBoxFormat.BackColor = System.Drawing.Color.White;
this.bnComboBoxFormat.Border = System.Windows.Forms.BorderStyle.FixedSingle; this.bnComboBoxFormat.Border = System.Windows.Forms.BorderStyle.FixedSingle;
this.bnComboBoxFormat.Color1 = System.Drawing.SystemColors.Control;
this.bnComboBoxFormat.Color2 = System.Drawing.SystemColors.ControlDark;
this.bnComboBoxFormat.Color3 = System.Drawing.Color.Maroon;
this.bnComboBoxFormat.Color4 = System.Drawing.SystemColors.ControlDarkDark;
this.bnComboBoxFormat.DataSource = this.formatsBindingSource; this.bnComboBoxFormat.DataSource = this.formatsBindingSource;
this.bnComboBoxFormat.DropDownHeight = 200; this.bnComboBoxFormat.DropDownHeight = 200;
this.bnComboBoxFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.bnComboBoxFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
@@ -385,12 +374,8 @@ namespace CUERipper
// //
// bnComboBoxImage // bnComboBoxImage
// //
this.bnComboBoxImage.BackColor = System.Drawing.SystemColors.ControlDark; this.bnComboBoxImage.BackColor = System.Drawing.Color.White;
this.bnComboBoxImage.Border = System.Windows.Forms.BorderStyle.FixedSingle; this.bnComboBoxImage.Border = System.Windows.Forms.BorderStyle.FixedSingle;
this.bnComboBoxImage.Color1 = System.Drawing.SystemColors.Control;
this.bnComboBoxImage.Color2 = System.Drawing.SystemColors.ControlDark;
this.bnComboBoxImage.Color3 = System.Drawing.Color.Maroon;
this.bnComboBoxImage.Color4 = System.Drawing.SystemColors.ControlDarkDark;
this.bnComboBoxImage.DataSource = this.cUEStylesBindingSource; this.bnComboBoxImage.DataSource = this.cUEStylesBindingSource;
this.bnComboBoxImage.DropDownHeight = 200; this.bnComboBoxImage.DropDownHeight = 200;
this.bnComboBoxImage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.bnComboBoxImage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
@@ -534,12 +519,8 @@ namespace CUERipper
// //
// bnComboBoxRelease // bnComboBoxRelease
// //
this.bnComboBoxRelease.BackColor = System.Drawing.SystemColors.ControlDarkDark; this.bnComboBoxRelease.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.bnComboBoxRelease.Border = System.Windows.Forms.BorderStyle.FixedSingle; this.bnComboBoxRelease.Border = System.Windows.Forms.BorderStyle.FixedSingle;
this.bnComboBoxRelease.Color1 = System.Drawing.SystemColors.Control;
this.bnComboBoxRelease.Color2 = System.Drawing.SystemColors.ControlDark;
this.bnComboBoxRelease.Color3 = System.Drawing.Color.Maroon;
this.bnComboBoxRelease.Color4 = System.Drawing.SystemColors.ControlDarkDark;
this.bnComboBoxRelease.ContextMenuStrip = this.contextMenuStripRelease; this.bnComboBoxRelease.ContextMenuStrip = this.contextMenuStripRelease;
this.bnComboBoxRelease.DataSource = this.releasesBindingSource; this.bnComboBoxRelease.DataSource = this.releasesBindingSource;
this.bnComboBoxRelease.DropDownHeight = 200; this.bnComboBoxRelease.DropDownHeight = 200;
@@ -574,12 +555,8 @@ namespace CUERipper
// //
// bnComboBoxDrives // bnComboBoxDrives
// //
this.bnComboBoxDrives.BackColor = System.Drawing.SystemColors.ControlDarkDark; this.bnComboBoxDrives.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.bnComboBoxDrives.Border = System.Windows.Forms.BorderStyle.FixedSingle; this.bnComboBoxDrives.Border = System.Windows.Forms.BorderStyle.FixedSingle;
this.bnComboBoxDrives.Color1 = System.Drawing.SystemColors.Control;
this.bnComboBoxDrives.Color2 = System.Drawing.SystemColors.ControlDark;
this.bnComboBoxDrives.Color3 = System.Drawing.Color.Maroon;
this.bnComboBoxDrives.Color4 = System.Drawing.SystemColors.ControlDarkDark;
this.bnComboBoxDrives.DataSource = this.drivesBindingSource; this.bnComboBoxDrives.DataSource = this.drivesBindingSource;
this.bnComboBoxDrives.DropDownHeight = 200; this.bnComboBoxDrives.DropDownHeight = 200;
this.bnComboBoxDrives.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.bnComboBoxDrives.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
@@ -603,13 +580,36 @@ namespace CUERipper
this.drivesBindingSource.DataMember = "Drives"; this.drivesBindingSource.DataMember = "Drives";
this.drivesBindingSource.DataSource = this.bindingSourceCR; this.drivesBindingSource.DataSource = this.bindingSourceCR;
// //
// bnComboBoxOutputFormat
//
this.bnComboBoxOutputFormat.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.bnComboBoxOutputFormat.Border = System.Windows.Forms.BorderStyle.FixedSingle;
this.bnComboBoxOutputFormat.DropDownHeight = 200;
this.bnComboBoxOutputFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDown;
this.bnComboBoxOutputFormat.DropDownWidth = 552;
this.bnComboBoxOutputFormat.ForeColor = System.Drawing.SystemColors.ControlText;
this.bnComboBoxOutputFormat.ImageList = null;
this.bnComboBoxOutputFormat.IsDroppedDown = false;
resources.ApplyResources(this.bnComboBoxOutputFormat, "bnComboBoxOutputFormat");
this.bnComboBoxOutputFormat.MaxDropDownItems = 8;
this.bnComboBoxOutputFormat.MinimumSize = new System.Drawing.Size(40, 21);
this.bnComboBoxOutputFormat.Name = "bnComboBoxOutputFormat";
this.bnComboBoxOutputFormat.Radius = ((BBBNOVA.BNRadius)(resources.GetObject("bnComboBoxOutputFormat.Radius")));
this.bnComboBoxOutputFormat.SelectedIndex = -1;
this.bnComboBoxOutputFormat.SelectedItem = null;
this.bnComboBoxOutputFormat.Sorted = false;
this.bnComboBoxOutputFormat.DroppedDown += new System.EventHandler(this.bnComboBoxOutputFormat_DroppedDown);
this.bnComboBoxOutputFormat.MouseLeave += new System.EventHandler(this.bnComboBoxOutputFormat_MouseLeave);
this.bnComboBoxOutputFormat.TextChanged += new System.EventHandler(this.bnComboBoxOutputFormat_TextChanged);
//
// frmCUERipper // frmCUERipper
// //
resources.ApplyResources(this, "$this"); resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.txtOutputPath);
this.Controls.Add(this.bnComboBoxRelease); this.Controls.Add(this.bnComboBoxRelease);
this.Controls.Add(this.bnComboBoxDrives); this.Controls.Add(this.bnComboBoxDrives);
this.Controls.Add(this.txtOutputPath); this.Controls.Add(this.bnComboBoxOutputFormat);
this.Controls.Add(this.comboBoxOutputFormat); this.Controls.Add(this.comboBoxOutputFormat);
this.Controls.Add(this.progressBarErrors); this.Controls.Add(this.progressBarErrors);
this.Controls.Add(this.progressBarCD); this.Controls.Add(this.progressBarCD);
@@ -701,6 +701,7 @@ namespace CUERipper
private System.Windows.Forms.BindingSource encodersBindingSource; private System.Windows.Forms.BindingSource encodersBindingSource;
private BBBNOVA.BNComboBox bnComboBoxLosslessOrNot; private BBBNOVA.BNComboBox bnComboBoxLosslessOrNot;
private System.Windows.Forms.BindingSource losslessOrNotBindingSource; private System.Windows.Forms.BindingSource losslessOrNotBindingSource;
private BBBNOVA.BNComboBox bnComboBoxOutputFormat;
} }
} }

View File

@@ -24,13 +24,11 @@ namespace CUERipper
public partial class frmCUERipper : Form public partial class frmCUERipper : Form
{ {
private Thread _workThread = null; private Thread _workThread = null;
private ICDRipper _reader = null;
private StartStop _startStop; private StartStop _startStop;
private CUEConfig _config; private CUEConfig _config;
private string _format;
private CUESheet cueSheet; private CUESheet cueSheet;
private ReleaseInfo selectedRelease; private ReleaseInfo selectedRelease;
private DriveInfo selectedDrive; private DriveInfo selectedDriveInfo;
private string _pathOut; private string _pathOut;
string _defaultLosslessFormat, _defaultLossyFormat, _defaultHybridFormat; string _defaultLosslessFormat, _defaultLossyFormat, _defaultHybridFormat;
private CUEControls.ShellIconMgr m_icon_mgr; private CUEControls.ShellIconMgr m_icon_mgr;
@@ -51,11 +49,6 @@ namespace CUERipper
m_icon_mgr.SetExtensionIcon(".ogg", Properties.Resources.ogg); m_icon_mgr.SetExtensionIcon(".ogg", Properties.Resources.ogg);
} }
//private byte toBCD(int val)
//{
// return (byte)(((val / 10) << 4) + (val % 10));
//}
string[] OutputPathUseTemplates = { string[] OutputPathUseTemplates = {
"%music%\\%artist%\\[%year% - ]%album%\\%artist% - %album%.cue", "%music%\\%artist%\\[%year% - ]%album%\\%artist% - %album%.cue",
"%music%\\%artist%\\[%year% - ]%album%[ - %edition%]$ifgreater($max(%discnumber%,%totaldiscs%),1, - cd %discnumber%,)[' ('%unique%')']\\%artist% - %album%[ - %edition%].cue" "%music%\\%artist%\\[%year% - ]%album%[ - %edition%]$ifgreater($max(%discnumber%,%totaldiscs%),1, - cd %discnumber%,)[' ('%unique%')']\\%artist% - %album%[ - %edition%].cue"
@@ -118,32 +111,6 @@ namespace CUERipper
private void frmCUERipper_Load(object sender, EventArgs e) private void frmCUERipper_Load(object sender, EventArgs e)
{ {
bindingSourceCR.DataSource = this;
bnComboBoxDrives.ImageList = m_icon_mgr.ImageList;
bnComboBoxFormat.ImageList = m_icon_mgr.ImageList;
//releaseBindingSource.DataSource = new string[] { "a", "b", "ccc" };
//byte[] _subchannelBuffer0 = { 0x01, 0x01, 0x01, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x02, 0x0A, 0x4C, 0x43 };
//byte[] _subchannelBuffer1 = { 0x21, 0x01, 0x01, 0x00, 0x00, 0x11, 0x00, 0x00, 0x02, 0x11, 0xCF, 0x3E };
//byte[] _subchannelBuffer2 = { 0x21, 0x01, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x02, 0x12, 0x11, 0x8F };
//_subchannelBuffer0[3] = toBCD(_subchannelBuffer0[3]);
//_subchannelBuffer0[4] = toBCD(_subchannelBuffer0[4]);
//_subchannelBuffer0[5] = toBCD(_subchannelBuffer0[5]);
//_subchannelBuffer0[7] = toBCD(_subchannelBuffer0[7]);
//_subchannelBuffer0[8] = toBCD(_subchannelBuffer0[8]);
//_subchannelBuffer0[9] = toBCD(_subchannelBuffer0[9]);
//Crc16Ccitt _crc = new Crc16Ccitt(InitialCrcValue.Zeros);
//ushort crc0a = (ushort)(_crc.ComputeChecksum(_subchannelBuffer0, 0, 10) ^ 0xffff);
//ushort crc0b = (ushort)(_subchannelBuffer0[11] + (_subchannelBuffer0[10] << 8));
//ushort crc1a = (ushort)(_crc.ComputeChecksum(_subchannelBuffer1, 0, 10) ^ 0xffff);
//ushort crc1b = (ushort)(_subchannelBuffer1[11] + (_subchannelBuffer1[10] << 8));
//ushort crc2a = (ushort)(_crc.ComputeChecksum(_subchannelBuffer2, 0, 10) ^ 0xffff);
//ushort crc2b = (ushort)(_subchannelBuffer2[11] + (_subchannelBuffer2[10] << 8));
//if (crc0a != crc0b) // || crc1a != crc1b || crc2a != crc2b)
//{
//}
SetupControls();
SettingsReader sr = new SettingsReader("CUERipper", "settings.txt", Application.ExecutablePath); SettingsReader sr = new SettingsReader("CUERipper", "settings.txt", Application.ExecutablePath);
_config.Load(sr); _config.Load(sr);
_defaultLosslessFormat = sr.Load("DefaultLosslessFormat") ?? "flac"; _defaultLosslessFormat = sr.Load("DefaultLosslessFormat") ?? "flac";
@@ -153,16 +120,25 @@ namespace CUERipper
//_config.preserveHTOA = sr.LoadBoolean("PreserveHTOA") ?? false; //_config.preserveHTOA = sr.LoadBoolean("PreserveHTOA") ?? false;
//_config.createM3U = sr.LoadBoolean("CreateM3U") ?? true; //_config.createM3U = sr.LoadBoolean("CreateM3U") ?? true;
bindingSourceCR.DataSource = this;
bnComboBoxDrives.ImageList = m_icon_mgr.ImageList;
bnComboBoxFormat.ImageList = m_icon_mgr.ImageList;
SetupControls();
int iFormat, nFormats = sr.LoadInt32("OutputPathUseTemplates", 0, 10) ?? 0; int iFormat, nFormats = sr.LoadInt32("OutputPathUseTemplates", 0, 10) ?? 0;
for (iFormat = 0; iFormat < OutputPathUseTemplates.Length; iFormat++) for (iFormat = 0; iFormat < OutputPathUseTemplates.Length; iFormat++)
comboBoxOutputFormat.Items.Add(OutputPathUseTemplates[iFormat]); comboBoxOutputFormat.Items.Add(OutputPathUseTemplates[iFormat]);
for (iFormat = nFormats - 1; iFormat >= 0; iFormat--) for (iFormat = nFormats - 1; iFormat >= 0; iFormat--)
comboBoxOutputFormat.Items.Add(sr.Load(string.Format("OutputPathUseTemplate{0}", iFormat)) ?? ""); comboBoxOutputFormat.Items.Add(sr.Load(string.Format("OutputPathUseTemplate{0}", iFormat)) ?? "");
for (iFormat = 0; iFormat < OutputPathUseTemplates.Length; iFormat++)
bnComboBoxOutputFormat.Items.Add(OutputPathUseTemplates[iFormat]);
for (iFormat = nFormats - 1; iFormat >= 0; iFormat--)
bnComboBoxOutputFormat.Items.Add(sr.Load(string.Format("OutputPathUseTemplate{0}", iFormat)) ?? "");
comboBoxOutputFormat.Text = sr.Load("PathFormat") ?? "%music%\\%artist%\\[%year% - ]%album%\\%artist% - %album%.cue"; comboBoxOutputFormat.Text = sr.Load("PathFormat") ?? "%music%\\%artist%\\[%year% - ]%album%\\%artist% - %album%.cue";
bnComboBoxOutputFormat.Text = sr.Load("PathFormat") ?? "%music%\\%artist%\\[%year% - ]%album%\\%artist% - %album%.cue";
checkBoxEACMode.Checked = _config.createEACLOG; checkBoxEACMode.Checked = _config.createEACLOG;
SelectedOutputAudioType = (AudioEncoderType?)sr.LoadInt32("OutputAudioType", null, null) ?? AudioEncoderType.Lossless; SelectedOutputAudioType = (AudioEncoderType?)sr.LoadInt32("OutputAudioType", null, null) ?? AudioEncoderType.Lossless;
bnComboBoxFormat.SelectedIndex = sr.LoadInt32("ComboCodec", 0, bnComboBoxFormat.Items.Count - 1) ?? 0;
bnComboBoxImage.SelectedIndex = sr.LoadInt32("ComboImage", 0, bnComboBoxImage.Items.Count - 1) ?? 0; bnComboBoxImage.SelectedIndex = sr.LoadInt32("ComboImage", 0, bnComboBoxImage.Items.Count - 1) ?? 0;
trackBarSecureMode.Value = sr.LoadInt32("SecureMode", 0, trackBarSecureMode.Maximum - 1) ?? 1; trackBarSecureMode.Value = sr.LoadInt32("SecureMode", 0, trackBarSecureMode.Maximum - 1) ?? 1;
trackBarSecureMode_Scroll(this, new EventArgs()); trackBarSecureMode_Scroll(this, new EventArgs());
@@ -211,7 +187,7 @@ namespace CUERipper
listTracks.Items.Clear(); listTracks.Items.Clear();
releases.Clear(); releases.Clear();
selectedRelease = null; selectedRelease = null;
selectedDrive = null; selectedDriveInfo = null;
bnComboBoxRelease.Text = ""; bnComboBoxRelease.Text = "";
foreach (char drive in CDDrivesList.DrivesAvailable()) foreach (char drive in CDDrivesList.DrivesAvailable())
{ {
@@ -232,14 +208,14 @@ namespace CUERipper
} }
catch catch
{ {
drives.Add(new DriveInfo(drive + ": " + ex.Message)); drives.Add(new DriveInfo(m_icon_mgr, drive + ":\\", ex.Message));
continue; continue;
} }
} }
if (!AccurateRipVerify.FindDriveReadOffset(arName, out driveOffset)) if (!AccurateRipVerify.FindDriveReadOffset(arName, out driveOffset))
; //throw new Exception("Failed to find drive read offset for drive" + _ripper.ARName); ; //throw new Exception("Failed to find drive read offset for drive" + _ripper.ARName);
reader.DriveOffset = driveOffset; reader.DriveOffset = driveOffset;
drives.Add(new DriveInfo(reader, drive + ":\\", m_icon_mgr)); drives.Add(new DriveInfo(m_icon_mgr, drive + ":\\", reader));
} }
if (drives.Count == 0) if (drives.Count == 0)
{ {
@@ -256,13 +232,14 @@ namespace CUERipper
{ {
bool running = _workThread != null; bool running = _workThread != null;
comboBoxOutputFormat.Visible = outputFormatVisible; bnComboBoxOutputFormat.Visible = comboBoxOutputFormat.Visible = outputFormatVisible;
txtOutputPath.Visible = !outputFormatVisible; txtOutputPath.Visible = !outputFormatVisible;
txtOutputPath.Enabled = !running && !outputFormatVisible; txtOutputPath.Enabled = !running && !outputFormatVisible;
bnComboBoxRelease.Enabled = !running && releases.Count > 0;
bnComboBoxOutputFormat.Enabled =
comboBoxOutputFormat.Enabled = comboBoxOutputFormat.Enabled =
listTracks.Enabled = listTracks.Enabled =
bnComboBoxDrives.Enabled = bnComboBoxDrives.Enabled =
bnComboBoxRelease.Enabled =
groupBoxSettings.Enabled = !running; groupBoxSettings.Enabled = !running;
buttonPause.Visible = buttonPause.Enabled = buttonAbort.Visible = buttonAbort.Enabled = running; buttonPause.Visible = buttonPause.Enabled = buttonAbort.Visible = buttonAbort.Enabled = running;
buttonGo.Visible = buttonGo.Enabled = !running; buttonGo.Visible = buttonGo.Enabled = !running;
@@ -348,7 +325,7 @@ namespace CUERipper
submit &= audioSource.CorrectionQuality > 0; submit &= audioSource.CorrectionQuality > 0;
foreach (DBEntry entry in cueSheet.CTDB.Entries) foreach (DBEntry entry in cueSheet.CTDB.Entries)
if (entry.toc.TrackOffsets == _reader.TOC.TrackOffsets && !entry.hasErrors) if (entry.toc.TrackOffsets == selectedDriveInfo.drive.TOC.TrackOffsets && !entry.hasErrors)
confirm = entry; confirm = entry;
for (int iSector = 0; iSector < (int)cueSheet.TOC.AudioLength; iSector++) for (int iSector = 0; iSector < (int)cueSheet.TOC.AudioLength; iSector++)
@@ -397,7 +374,7 @@ namespace CUERipper
private void buttonGo_Click(object sender, EventArgs e) private void buttonGo_Click(object sender, EventArgs e)
{ {
if (_reader == null) if (selectedDriveInfo == null)
return; return;
if (!comboBoxOutputFormat.Items.Contains(comboBoxOutputFormat.Text) && comboBoxOutputFormat.Text.Contains("%")) if (!comboBoxOutputFormat.Items.Contains(comboBoxOutputFormat.Text) && comboBoxOutputFormat.Text.Contains("%"))
@@ -407,26 +384,32 @@ namespace CUERipper
comboBoxOutputFormat.Items.RemoveAt(OutputPathUseTemplates.Length + 10); comboBoxOutputFormat.Items.RemoveAt(OutputPathUseTemplates.Length + 10);
} }
if (!bnComboBoxOutputFormat.Items.Contains(bnComboBoxOutputFormat.Text) && bnComboBoxOutputFormat.Text.Contains("%"))
{
bnComboBoxOutputFormat.Items.Insert(OutputPathUseTemplates.Length, bnComboBoxOutputFormat.Text);
if (bnComboBoxOutputFormat.Items.Count > OutputPathUseTemplates.Length + 10)
bnComboBoxOutputFormat.Items.RemoveAt(OutputPathUseTemplates.Length + 10);
}
cueSheet.CopyMetadata(selectedRelease.metadata); cueSheet.CopyMetadata(selectedRelease.metadata);
_format = bnComboBoxFormat.SelectedItem.ToString();
cueSheet.OutputStyle = bnComboBoxImage.SelectedIndex == 0 ? CUEStyle.SingleFileWithCUE : cueSheet.OutputStyle = bnComboBoxImage.SelectedIndex == 0 ? CUEStyle.SingleFileWithCUE :
CUEStyle.GapsAppended; CUEStyle.GapsAppended;
_pathOut = cueSheet.GenerateUniqueOutputPath(comboBoxOutputFormat.Text, _pathOut = cueSheet.GenerateUniqueOutputPath(bnComboBoxOutputFormat.Text,
cueSheet.OutputStyle == CUEStyle.SingleFileWithCUE ? "." + _format : ".cue", cueSheet.OutputStyle == CUEStyle.SingleFileWithCUE ? "." + selectedFormat.ToString() : ".cue",
CUEAction.Encode, null); CUEAction.Encode, null);
if (_pathOut == "") if (_pathOut == "")
{ {
MessageBox.Show(this, "Output path generation failed", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(this, "Output path generation failed", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return; return;
} }
cueSheet.GenerateFilenames(SelectedOutputAudioType, _format, _pathOut); cueSheet.GenerateFilenames(SelectedOutputAudioType, selectedFormat.ToString(), _pathOut);
_reader.CorrectionQuality = trackBarSecureMode.Value; selectedDriveInfo.drive.CorrectionQuality = trackBarSecureMode.Value;
_workThread = new Thread(Rip); _workThread = new Thread(Rip);
_workThread.Priority = ThreadPriority.BelowNormal; _workThread.Priority = ThreadPriority.BelowNormal;
_workThread.IsBackground = true; _workThread.IsBackground = true;
SetupControls(); SetupControls();
_workThread.Start(_reader); _workThread.Start(selectedDriveInfo.drive);
} }
private void buttonAbort_Click(object sender, EventArgs e) private void buttonAbort_Click(object sender, EventArgs e)
@@ -439,14 +422,6 @@ namespace CUERipper
_startStop.Pause(); _startStop.Pause();
} }
private void comboRelease_Format(object sender, ListControlConvertEventArgs e)
{
if (e.ListItem is string)
return;
ReleaseInfo r = (ReleaseInfo)(e.ListItem);
e.Value = string.Format("{0}{1} - {2}", r.metadata.Year != "" ? r.metadata.Year + ": " : "", r.metadata.Artist, r.metadata.Title);
}
private void UpdateRelease() private void UpdateRelease()
{ {
listTracks.Items.Clear(); listTracks.Items.Clear();
@@ -455,13 +430,13 @@ namespace CUERipper
if (selectedRelease == null) if (selectedRelease == null)
return; return;
for (int i = 1; i <= _reader.TOC.TrackCount; i++) for (int i = 1; i <= selectedDriveInfo.drive.TOC.TrackCount; i++)
{ {
listTracks.Items.Add(new ListViewItem(new string[] { listTracks.Items.Add(new ListViewItem(new string[] {
_reader.TOC[i].IsAudio ? selectedRelease.metadata.Tracks[i - _reader.TOC.FirstAudio].Title : "Data track", selectedDriveInfo.drive.TOC[i].IsAudio ? selectedRelease.metadata.Tracks[i - selectedDriveInfo.drive.TOC.FirstAudio].Title : "Data track",
_reader.TOC[i].Number.ToString(), selectedDriveInfo.drive.TOC[i].Number.ToString(),
_reader.TOC[i].StartMSF, selectedDriveInfo.drive.TOC[i].StartMSF,
_reader.TOC[i].LengthMSF })); selectedDriveInfo.drive.TOC[i].LengthMSF }));
} }
} }
@@ -534,7 +509,7 @@ namespace CUERipper
cueSheet.Action = CUEAction.Encode; cueSheet.Action = CUEAction.Encode;
this.BeginInvoke((MethodInvoker)delegate() { toolStripStatusLabel1.Text = "Contacting CTDB database..."; }); this.BeginInvoke((MethodInvoker)delegate() { toolStripStatusLabel1.Text = "Contacting CTDB database..."; });
cueSheet.UseCUEToolsDB(true, "CUERipper 2.0.6: " + _reader.ARName); cueSheet.UseCUEToolsDB(true, "CUERipper 2.0.7: " + selectedDriveInfo.drive.ARName);
cueSheet.CTDB.UploadHelper.onProgress += new EventHandler<Krystalware.UploadHelper.UploadProgressEventArgs>(UploadProgress); cueSheet.CTDB.UploadHelper.onProgress += new EventHandler<Krystalware.UploadHelper.UploadProgressEventArgs>(UploadProgress);
this.BeginInvoke((MethodInvoker)delegate() { toolStripStatusLabel1.Text = "Contacting AccurateRip database..."; }); this.BeginInvoke((MethodInvoker)delegate() { toolStripStatusLabel1.Text = "Contacting AccurateRip database..."; });
cueSheet.UseAccurateRip(); cueSheet.UseAccurateRip();
@@ -639,8 +614,8 @@ namespace CUERipper
private void UpdateDrive() private void UpdateDrive()
{ {
selectedDrive = bnComboBoxDrives.SelectedItem as DriveInfo; selectedDriveInfo = bnComboBoxDrives.SelectedItem as DriveInfo;
if (selectedDrive == null) if (selectedDriveInfo == null)
return; return;
toolStripStatusAr.Visible = false; toolStripStatusAr.Visible = false;
@@ -650,10 +625,11 @@ namespace CUERipper
listTracks.Items.Clear(); listTracks.Items.Clear();
releases.Clear(); releases.Clear();
selectedRelease = null; selectedRelease = null;
bnComboBoxRelease.Enabled = false;
bnComboBoxRelease.Text = ""; bnComboBoxRelease.Text = "";
if (selectedDrive == null || selectedDrive.drive == null) if (selectedDriveInfo == null || selectedDriveInfo.drive == null)
{ {
_reader = null; selectedDriveInfo = null;
return; return;
} }
if (cueSheet != null) if (cueSheet != null)
@@ -661,21 +637,20 @@ namespace CUERipper
cueSheet.Close(); cueSheet.Close();
cueSheet = null; cueSheet = null;
} }
_reader = selectedDrive.drive;
try try
{ {
_reader.Close(); selectedDriveInfo.drive.Close();
_reader.Open(_reader.Path[0]); selectedDriveInfo.drive.Open(selectedDriveInfo.drive.Path[0]);
numericWriteOffset.Value = _reader.DriveOffset; numericWriteOffset.Value = selectedDriveInfo.drive.DriveOffset;
} }
catch (Exception ex) catch (Exception ex)
{ {
numericWriteOffset.Value = _reader.DriveOffset; numericWriteOffset.Value = selectedDriveInfo.drive.DriveOffset;
//_reader.Close(); //selectedDriveInfo.drive.Close();
bnComboBoxRelease.Text = ex.Message; bnComboBoxRelease.Text = ex.Message;
return; return;
} }
if (_reader.TOC.AudioTracks == 0) if (selectedDriveInfo.drive.TOC.AudioTracks == 0)
{ {
bnComboBoxRelease.Text = "No audio tracks"; bnComboBoxRelease.Text = "No audio tracks";
return; return;
@@ -685,7 +660,7 @@ namespace CUERipper
_workThread.Priority = ThreadPriority.BelowNormal; _workThread.Priority = ThreadPriority.BelowNormal;
_workThread.IsBackground = true; _workThread.IsBackground = true;
SetupControls(); SetupControls();
_workThread.Start(_reader); _workThread.Start(selectedDriveInfo.drive);
} }
private void listTracks_DoubleClick(object sender, EventArgs e) private void listTracks_DoubleClick(object sender, EventArgs e)
@@ -718,7 +693,7 @@ namespace CUERipper
private void listTracks_AfterLabelEdit(object sender, LabelEditEventArgs e) private void listTracks_AfterLabelEdit(object sender, LabelEditEventArgs e)
{ {
if (selectedRelease == null) return; if (selectedRelease == null) return;
if (e.Label != null && _reader.TOC[e.Item + 1].IsAudio) if (e.Label != null && selectedDriveInfo.drive.TOC[e.Item + 1].IsAudio)
selectedRelease.metadata.Tracks[e.Item].Title = e.Label; selectedRelease.metadata.Tracks[e.Item].Title = e.Label;
else else
e.CancelEdit = true; e.CancelEdit = true;
@@ -745,7 +720,6 @@ namespace CUERipper
//sw.Save("PreserveHTOA", _config.preserveHTOA); //sw.Save("PreserveHTOA", _config.preserveHTOA);
//sw.Save("CreateM3U", _config.createM3U); //sw.Save("CreateM3U", _config.createM3U);
sw.Save("OutputAudioType", (int)SelectedOutputAudioType); sw.Save("OutputAudioType", (int)SelectedOutputAudioType);
sw.Save("ComboCodec", bnComboBoxFormat.SelectedIndex);
sw.Save("ComboImage", bnComboBoxImage.SelectedIndex); sw.Save("ComboImage", bnComboBoxImage.SelectedIndex);
sw.Save("PathFormat", comboBoxOutputFormat.Text); sw.Save("PathFormat", comboBoxOutputFormat.Text);
sw.Save("SecureMode", trackBarSecureMode.Value); sw.Save("SecureMode", trackBarSecureMode.Value);
@@ -758,7 +732,7 @@ namespace CUERipper
private void listTracks_BeforeLabelEdit(object sender, LabelEditEventArgs e) private void listTracks_BeforeLabelEdit(object sender, LabelEditEventArgs e)
{ {
if (!_reader.TOC[e.Item + 1].IsAudio) if (!selectedDriveInfo.drive.TOC[e.Item + 1].IsAudio)
e.CancelEdit = true; e.CancelEdit = true;
} }
@@ -868,9 +842,9 @@ namespace CUERipper
private void toolStripStatusLabelMusicBrainz_Click(object sender, EventArgs e) private void toolStripStatusLabelMusicBrainz_Click(object sender, EventArgs e)
{ {
if (_reader == null) if (selectedDriveInfo == null)
return; return;
System.Diagnostics.Process.Start("http://musicbrainz.org/bare/cdlookup.html?toc=" + _reader.TOC.MusicBrainzTOC); System.Diagnostics.Process.Start("http://musicbrainz.org/bare/cdlookup.html?toc=" + selectedDriveInfo.drive.TOC.MusicBrainzTOC);
} }
private void frmCUERipper_KeyDown(object sender, KeyEventArgs e) private void frmCUERipper_KeyDown(object sender, KeyEventArgs e)
@@ -888,7 +862,7 @@ namespace CUERipper
{ {
if (selectedFormat == null) return; if (selectedFormat == null) return;
CUEStyle style = bnComboBoxImage.SelectedIndex == 0 ? CUEStyle.SingleFileWithCUE : CUEStyle.GapsAppended; CUEStyle style = bnComboBoxImage.SelectedIndex == 0 ? CUEStyle.SingleFileWithCUE : CUEStyle.GapsAppended;
txtOutputPath.Text = selectedRelease == null ? "" : selectedRelease.metadata.GenerateUniqueOutputPath(comboBoxOutputFormat.Text, txtOutputPath.Text = selectedRelease == null ? "" : selectedRelease.metadata.GenerateUniqueOutputPath(bnComboBoxOutputFormat.Text,
style == CUEStyle.SingleFileWithCUE ? "." + selectedFormat.ToString() : ".cue", CUEAction.Encode, null); style == CUEStyle.SingleFileWithCUE ? "." + selectedFormat.ToString() : ".cue", CUEAction.Encode, null);
} }
@@ -897,7 +871,7 @@ namespace CUERipper
if (!outputFormatVisible) if (!outputFormatVisible)
return; return;
outputFormatVisible = false; outputFormatVisible = false;
comboBoxOutputFormat.Visible = false; bnComboBoxOutputFormat.Visible = false;
txtOutputPath.Enabled = true; txtOutputPath.Enabled = true;
txtOutputPath.Visible = true; txtOutputPath.Visible = true;
} }
@@ -907,9 +881,10 @@ namespace CUERipper
if (outputFormatVisible) if (outputFormatVisible)
return; return;
outputFormatVisible = true; outputFormatVisible = true;
comboBoxOutputFormat.Visible = true; //comboBoxOutputFormat.Visible = true;
comboBoxOutputFormat.Focus(); bnComboBoxOutputFormat.Visible = true;
comboBoxOutputFormat.Select(0, 0); bnComboBoxOutputFormat.Focus();
//bnComboBoxOutputFormat.Select();
txtOutputPath.Enabled = false; txtOutputPath.Enabled = false;
txtOutputPath.Visible = false; txtOutputPath.Visible = false;
} }
@@ -953,11 +928,9 @@ namespace CUERipper
foreach (CUEToolsUDC encoder in _config.encoders) foreach (CUEToolsUDC encoder in _config.encoders)
if (encoder.extension == SelectedOutputAudioFmt.extension) if (encoder.extension == SelectedOutputAudioFmt.extension)
{ {
if (SelectedOutputAudioFormat.StartsWith("lossy.") && !encoder.lossless) if (SelectedOutputAudioType == AudioEncoderType.Lossless && !encoder.lossless)
continue; continue;
else if (SelectedOutputAudioType == AudioEncoderType.Lossless && !encoder.lossless) if (SelectedOutputAudioType == AudioEncoderType.Lossy && (encoder.lossless && !selectedFormat.lossyWAV))
continue;
else if (SelectedOutputAudioType == AudioEncoderType.Lossy && encoder.lossless)
continue; continue;
encoders.Add(encoder); encoders.Add(encoder);
} }
@@ -1014,6 +987,31 @@ namespace CUERipper
formats.ResetBindings(); formats.ResetBindings();
SelectedOutputAudioFormat = select; SelectedOutputAudioFormat = select;
} }
private void bnComboBoxOutputFormat_TextChanged(object sender, EventArgs e)
{
comboBoxOutputFormat_TextUpdate(sender, e);
}
private void bnComboBoxOutputFormat_MouseLeave(object sender, EventArgs e)
{
if (!outputFormatVisible)
return;
outputFormatVisible = false;
bnComboBoxOutputFormat.Visible = false;
txtOutputPath.Enabled = true;
txtOutputPath.Visible = true;
}
private void bnComboBoxOutputFormat_DroppedDown(object sender, EventArgs e)
{
if (!outputFormatVisible || bnComboBoxOutputFormat.IsDroppedDown)
return;
outputFormatVisible = false;
bnComboBoxOutputFormat.Visible = false;
txtOutputPath.Enabled = true;
txtOutputPath.Visible = true;
}
} }
public class StartStop public class StartStop
@@ -1123,21 +1121,23 @@ namespace CUERipper
} }
} }
public DriveInfo(ICDRipper drive, string path, CUEControls.IIconManager iconMgr) public DriveInfo(CUEControls.IIconManager iconMgr, string path, ICDRipper drive)
{ {
this.drive = drive;
this.iconMgr = iconMgr; this.iconMgr = iconMgr;
this.di = new DirectoryInfo(path); this.di = new DirectoryInfo(path);
this.drive = drive;
} }
public DriveInfo(string error) public DriveInfo(CUEControls.IIconManager iconMgr, string path, string error)
{ {
this.iconMgr = iconMgr;
this.di = new DirectoryInfo(path);
this.error = error; this.error = error;
} }
public override string ToString() public override string ToString()
{ {
return drive != null ? drive.Path : error; return drive != null ? drive.Path : this.di.FullName + ": " + error;
} }
} }
} }

View File

@@ -197,7 +197,7 @@
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;statusStrip1.ZOrder" xml:space="preserve"> <data name="&gt;&gt;statusStrip1.ZOrder" xml:space="preserve">
<value>10</value> <value>11</value>
</data> </data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="listTracks.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms"> <data name="listTracks.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
@@ -258,7 +258,7 @@
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;listTracks.ZOrder" xml:space="preserve"> <data name="&gt;&gt;listTracks.ZOrder" xml:space="preserve">
<value>8</value> <value>9</value>
</data> </data>
<data name="buttonGo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms"> <data name="buttonGo.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value> <value>Top, Left, Right</value>
@@ -288,7 +288,7 @@
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;buttonGo.ZOrder" xml:space="preserve"> <data name="&gt;&gt;buttonGo.ZOrder" xml:space="preserve">
<value>9</value> <value>10</value>
</data> </data>
<data name="buttonAbort.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms"> <data name="buttonAbort.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value> <value>Top, Left, Right</value>
@@ -321,7 +321,7 @@
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;buttonAbort.ZOrder" xml:space="preserve"> <data name="&gt;&gt;buttonAbort.ZOrder" xml:space="preserve">
<value>11</value> <value>12</value>
</data> </data>
<data name="buttonPause.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms"> <data name="buttonPause.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value> <value>Top, Left, Right</value>
@@ -354,7 +354,7 @@
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;buttonPause.ZOrder" xml:space="preserve"> <data name="&gt;&gt;buttonPause.ZOrder" xml:space="preserve">
<value>12</value> <value>13</value>
</data> </data>
<metadata name="contextMenuStripRelease.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="contextMenuStripRelease.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value> <value>17, 17</value>
@@ -485,7 +485,7 @@
<value>bnComboBoxLosslessOrNot</value> <value>bnComboBoxLosslessOrNot</value>
</data> </data>
<data name="&gt;&gt;bnComboBoxLosslessOrNot.Type" xml:space="preserve"> <data name="&gt;&gt;bnComboBoxLosslessOrNot.Type" xml:space="preserve">
<value>BBBNOVA.BNComboBox, CUEControls, Version=2.0.6.0, Culture=neutral, PublicKeyToken=null</value> <value>BBBNOVA.BNComboBox, CUEControls, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;bnComboBoxLosslessOrNot.Parent" xml:space="preserve"> <data name="&gt;&gt;bnComboBoxLosslessOrNot.Parent" xml:space="preserve">
<value>groupBoxSettings</value> <value>groupBoxSettings</value>
@@ -517,7 +517,7 @@
<value>bnComboBoxEncoder</value> <value>bnComboBoxEncoder</value>
</data> </data>
<data name="&gt;&gt;bnComboBoxEncoder.Type" xml:space="preserve"> <data name="&gt;&gt;bnComboBoxEncoder.Type" xml:space="preserve">
<value>BBBNOVA.BNComboBox, CUEControls, Version=2.0.6.0, Culture=neutral, PublicKeyToken=null</value> <value>BBBNOVA.BNComboBox, CUEControls, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;bnComboBoxEncoder.Parent" xml:space="preserve"> <data name="&gt;&gt;bnComboBoxEncoder.Parent" xml:space="preserve">
<value>groupBoxSettings</value> <value>groupBoxSettings</value>
@@ -576,7 +576,7 @@
<value>bnComboBoxFormat</value> <value>bnComboBoxFormat</value>
</data> </data>
<data name="&gt;&gt;bnComboBoxFormat.Type" xml:space="preserve"> <data name="&gt;&gt;bnComboBoxFormat.Type" xml:space="preserve">
<value>BBBNOVA.BNComboBox, CUEControls, Version=2.0.6.0, Culture=neutral, PublicKeyToken=null</value> <value>BBBNOVA.BNComboBox, CUEControls, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;bnComboBoxFormat.Parent" xml:space="preserve"> <data name="&gt;&gt;bnComboBoxFormat.Parent" xml:space="preserve">
<value>groupBoxSettings</value> <value>groupBoxSettings</value>
@@ -647,7 +647,7 @@
<value>bnComboBoxImage</value> <value>bnComboBoxImage</value>
</data> </data>
<data name="&gt;&gt;bnComboBoxImage.Type" xml:space="preserve"> <data name="&gt;&gt;bnComboBoxImage.Type" xml:space="preserve">
<value>BBBNOVA.BNComboBox, CUEControls, Version=2.0.6.0, Culture=neutral, PublicKeyToken=null</value> <value>BBBNOVA.BNComboBox, CUEControls, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;bnComboBoxImage.Parent" xml:space="preserve"> <data name="&gt;&gt;bnComboBoxImage.Parent" xml:space="preserve">
<value>groupBoxSettings</value> <value>groupBoxSettings</value>
@@ -800,7 +800,7 @@
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;groupBoxSettings.ZOrder" xml:space="preserve"> <data name="&gt;&gt;groupBoxSettings.ZOrder" xml:space="preserve">
<value>7</value> <value>8</value>
</data> </data>
<data name="toolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing"> <data name="toolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
<value>181, 22</value> <value>181, 22</value>
@@ -839,7 +839,7 @@
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;progressBarErrors.ZOrder" xml:space="preserve"> <data name="&gt;&gt;progressBarErrors.ZOrder" xml:space="preserve">
<value>5</value> <value>6</value>
</data> </data>
<data name="progressBarCD.Location" type="System.Drawing.Point, System.Drawing"> <data name="progressBarCD.Location" type="System.Drawing.Point, System.Drawing">
<value>382, 392</value> <value>382, 392</value>
@@ -866,10 +866,10 @@
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;progressBarCD.ZOrder" xml:space="preserve"> <data name="&gt;&gt;progressBarCD.ZOrder" xml:space="preserve">
<value>6</value> <value>7</value>
</data> </data>
<data name="comboBoxOutputFormat.Location" type="System.Drawing.Point, System.Drawing"> <data name="comboBoxOutputFormat.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 60</value> <value>6, 170</value>
</data> </data>
<data name="comboBoxOutputFormat.MaxDropDownItems" type="System.Int32, mscorlib"> <data name="comboBoxOutputFormat.MaxDropDownItems" type="System.Int32, mscorlib">
<value>10</value> <value>10</value>
@@ -893,10 +893,10 @@
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;comboBoxOutputFormat.ZOrder" xml:space="preserve"> <data name="&gt;&gt;comboBoxOutputFormat.ZOrder" xml:space="preserve">
<value>4</value> <value>5</value>
</data> </data>
<data name="txtOutputPath.Location" type="System.Drawing.Point, System.Drawing"> <data name="txtOutputPath.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 61</value> <value>7, 61</value>
</data> </data>
<data name="txtOutputPath.Size" type="System.Drawing.Size, System.Drawing"> <data name="txtOutputPath.Size" type="System.Drawing.Size, System.Drawing">
<value>552, 20</value> <value>552, 20</value>
@@ -917,7 +917,7 @@
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;txtOutputPath.ZOrder" xml:space="preserve"> <data name="&gt;&gt;txtOutputPath.ZOrder" xml:space="preserve">
<value>3</value> <value>1</value>
</data> </data>
<metadata name="releasesBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="releasesBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>824, 56</value> <value>824, 56</value>
@@ -995,13 +995,13 @@
<value>bnComboBoxRelease</value> <value>bnComboBoxRelease</value>
</data> </data>
<data name="&gt;&gt;bnComboBoxRelease.Type" xml:space="preserve"> <data name="&gt;&gt;bnComboBoxRelease.Type" xml:space="preserve">
<value>BBBNOVA.BNComboBox, CUEControls, Version=2.0.6.0, Culture=neutral, PublicKeyToken=null</value> <value>BBBNOVA.BNComboBox, CUEControls, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;bnComboBoxRelease.Parent" xml:space="preserve"> <data name="&gt;&gt;bnComboBoxRelease.Parent" xml:space="preserve">
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;bnComboBoxRelease.ZOrder" xml:space="preserve"> <data name="&gt;&gt;bnComboBoxRelease.ZOrder" xml:space="preserve">
<value>1</value> <value>2</value>
</data> </data>
<metadata name="drivesBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="drivesBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>116, 456</value> <value>116, 456</value>
@@ -1027,13 +1027,42 @@
<value>bnComboBoxDrives</value> <value>bnComboBoxDrives</value>
</data> </data>
<data name="&gt;&gt;bnComboBoxDrives.Type" xml:space="preserve"> <data name="&gt;&gt;bnComboBoxDrives.Type" xml:space="preserve">
<value>BBBNOVA.BNComboBox, CUEControls, Version=2.0.6.0, Culture=neutral, PublicKeyToken=null</value> <value>BBBNOVA.BNComboBox, CUEControls, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null</value>
</data> </data>
<data name="&gt;&gt;bnComboBoxDrives.Parent" xml:space="preserve"> <data name="&gt;&gt;bnComboBoxDrives.Parent" xml:space="preserve">
<value>$this</value> <value>$this</value>
</data> </data>
<data name="&gt;&gt;bnComboBoxDrives.ZOrder" xml:space="preserve"> <data name="&gt;&gt;bnComboBoxDrives.ZOrder" xml:space="preserve">
<value>2</value> <value>3</value>
</data>
<data name="bnComboBoxOutputFormat.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 60</value>
</data>
<data name="bnComboBoxOutputFormat.Radius" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEJDVUVDb250cm9scywgVmVyc2lvbj0yLjAuNi4wLCBDdWx0dXJl
PW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABBCQkJOT1ZBLkJOUmFkaXVzBAAAAAhfdG9w
TGVmdAlfdG9wUmlnaHQLX2JvdHRvbUxlZnQMX2JvdHRvbVJpZ2h0AAAAAAgICAgCAAAAAgAAAAYAAAAC
AAAAAgAAAAs=
</value>
</data>
<data name="bnComboBoxOutputFormat.Size" type="System.Drawing.Size, System.Drawing">
<value>552, 21</value>
</data>
<data name="bnComboBoxOutputFormat.TabIndex" type="System.Int32, mscorlib">
<value>37</value>
</data>
<data name="&gt;&gt;bnComboBoxOutputFormat.Name" xml:space="preserve">
<value>bnComboBoxOutputFormat</value>
</data>
<data name="&gt;&gt;bnComboBoxOutputFormat.Type" xml:space="preserve">
<value>BBBNOVA.BNComboBox, CUEControls, Version=2.0.7.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;bnComboBoxOutputFormat.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;bnComboBoxOutputFormat.ZOrder" xml:space="preserve">
<value>4</value>
</data> </data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value> <value>True</value>
@@ -1448,7 +1477,7 @@
<value>CenterScreen</value> <value>CenterScreen</value>
</data> </data>
<data name="$this.Text" xml:space="preserve"> <data name="$this.Text" xml:space="preserve">
<value>CUERipper 2.0.6</value> <value>CUERipper 2.0.7</value>
</data> </data>
<data name="&gt;&gt;toolStripStatusLabel1.Name" xml:space="preserve"> <data name="&gt;&gt;toolStripStatusLabel1.Name" xml:space="preserve">
<value>toolStripStatusLabel1</value> <value>toolStripStatusLabel1</value>

View File

@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number // Build Number
// Revision // Revision
// //
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// //
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// //
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// //
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// //
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// //
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// //
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// //
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// //
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// //
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

View File

@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number // Build Number
// Revision // Revision
// //
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

View File

@@ -1788,7 +1788,7 @@ string status = processor.Go();
m_freedb.UserName = "gchudov"; m_freedb.UserName = "gchudov";
m_freedb.Hostname = "gmail.com"; m_freedb.Hostname = "gmail.com";
m_freedb.ClientName = "CUETools"; m_freedb.ClientName = "CUETools";
m_freedb.Version = "2.0.6"; m_freedb.Version = "2.0.7";
m_freedb.SetDefaultSiteAddress("freedb.org"); m_freedb.SetDefaultSiteAddress("freedb.org");
QueryResult queryResult; QueryResult queryResult;
@@ -5327,7 +5327,7 @@ string status = processor.Go();
} }
case "repair": case "repair":
{ {
UseCUEToolsDB(false, "CUETools 2.0.6"); UseCUEToolsDB(false, "CUETools 2.0.7");
Action = CUEAction.Verify; Action = CUEAction.Verify;
if (CTDB.DBStatus != null) if (CTDB.DBStatus != null)
return CTDB.DBStatus; return CTDB.DBStatus;

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// //
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

View File

@@ -89,7 +89,7 @@ namespace CUETools.ConsoleRipper
static void Main(string[] args) static void Main(string[] args)
{ {
Console.SetOut(Console.Error); Console.SetOut(Console.Error);
Console.WriteLine("CUERipper v2.0.6 Copyright (C) 2008-10 Gregory S. Chudov"); Console.WriteLine("CUERipper v2.0.7 Copyright (C) 2008-10 Gregory S. Chudov");
Console.WriteLine("This is free software under the GNU GPLv3+ license; There is NO WARRANTY, to"); Console.WriteLine("This is free software under the GNU GPLv3+ license; There is NO WARRANTY, to");
Console.WriteLine("the extent permitted by law. <http://www.gnu.org/licenses/> for details."); Console.WriteLine("the extent permitted by law. <http://www.gnu.org/licenses/> for details.");

View File

@@ -40,6 +40,11 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Resource1.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resource1.resx</DependentUpon>
</Compile>
<Compile Include="SCSIDrive.cs" /> <Compile Include="SCSIDrive.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>
@@ -68,6 +73,13 @@
<Private>False</Private> <Private>False</Private>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resource1.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resource1.Designer.cs</LastGenOutput>
</EmbeddedResource>
<EmbeddedResource Include="Resource1.ru-RU.resx" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// //
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

126
CUETools.Ripper.SCSI/Resource1.Designer.cs generated Normal file
View File

@@ -0,0 +1,126 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.4200
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace CUETools.Ripper.SCSI {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resource1 {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resource1() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CUETools.Ripper.SCSI.Resource1", typeof(Resource1).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to failed to autodetect read command.
/// </summary>
internal static string AutodetectReadCommandFailed {
get {
return ResourceManager.GetString("AutodetectReadCommandFailed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Error querying drive.
/// </summary>
internal static string DeviceInquiryError {
get {
return ResourceManager.GetString("DeviceInquiryError", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to not an MMC device.
/// </summary>
internal static string DeviceNotMMC {
get {
return ResourceManager.GetString("DeviceNotMMC", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Open failed.
/// </summary>
internal static string DeviceOpenError {
get {
return ResourceManager.GetString("DeviceOpenError", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to no audio.
/// </summary>
internal static string NoAudio {
get {
return ResourceManager.GetString("NoAudio", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Error reading CD.
/// </summary>
internal static string ReadCDError {
get {
return ResourceManager.GetString("ReadCDError", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Cannot open CD.
/// </summary>
internal static string ReadTOCError {
get {
return ResourceManager.GetString("ReadTOCError", resourceCulture);
}
}
}
}

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AutodetectReadCommandFailed" xml:space="preserve">
<value>failed to autodetect read command</value>
</data>
<data name="DeviceInquiryError" xml:space="preserve">
<value>Error querying drive</value>
</data>
<data name="DeviceNotMMC" xml:space="preserve">
<value>not an MMC device</value>
</data>
<data name="DeviceOpenError" xml:space="preserve">
<value>Open failed</value>
</data>
<data name="NoAudio" xml:space="preserve">
<value>no audio</value>
</data>
<data name="ReadCDError" xml:space="preserve">
<value>Error reading CD</value>
</data>
<data name="ReadTOCError" xml:space="preserve">
<value>Cannot open CD</value>
</data>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AutodetectReadCommandFailed" xml:space="preserve">
<value>не удалось определить команду чтения</value>
</data>
<data name="DeviceInquiryError" xml:space="preserve">
<value>Ошибка при опросе устройства</value>
</data>
<data name="DeviceNotMMC" xml:space="preserve">
<value>устройство не поддерживает стандарт MMC</value>
</data>
<data name="DeviceOpenError" xml:space="preserve">
<value>Ошибка при открытии устройства</value>
</data>
<data name="NoAudio" xml:space="preserve">
<value>отсутствует аудио</value>
</data>
<data name="ReadCDError" xml:space="preserve">
<value>Ошибка при чтении диска</value>
</data>
<data name="ReadTOCError" xml:space="preserve">
<value>Ошибка при обращении к диску</value>
</data>
</root>

View File

@@ -49,7 +49,6 @@ namespace CUETools.Ripper.SCSI
const int NSECTORS = 16; const int NSECTORS = 16;
//const int MSECTORS = 5*1024*1024 / (4 * 588); //const int MSECTORS = 5*1024*1024 / (4 * 588);
const int MSECTORS = 2400; const int MSECTORS = 2400;
int _currentTrack = -1, _currentIndex = -1, _currentTrackActualStart = -1;
Logger m_logger; Logger m_logger;
CDImageLayout _toc; CDImageLayout _toc;
CDImageLayout _toc2; CDImageLayout _toc2;
@@ -201,14 +200,14 @@ namespace CUETools.Ripper.SCSI
m_device = new Device(m_logger); m_device = new Device(m_logger);
if (!m_device.Open(m_device_letter)) if (!m_device.Open(m_device_letter))
throw new Exception("Open failed: " + WinDev.Win32ErrorToString(m_device.LastError)); throw new Exception(Resource1.DeviceOpenError + ": " + WinDev.Win32ErrorToString(m_device.LastError));
// Get device info // Get device info
st = m_device.Inquiry(out m_inqury_result); st = m_device.Inquiry(out m_inqury_result);
if (st != Device.CommandStatus.Success || !m_inqury_result.Valid) if (st != Device.CommandStatus.Success || !m_inqury_result.Valid)
throw new SCSIException("Inquiry", m_device, st); throw new SCSIException(Resource1.DeviceInquiryError, m_device, st);
if (m_inqury_result.PeripheralQualifier != 0 || m_inqury_result.PeripheralDeviceType != Device.MMCDeviceType) if (m_inqury_result.PeripheralQualifier != 0 || m_inqury_result.PeripheralDeviceType != Device.MMCDeviceType)
throw new Exception(Path + " is not an MMC device"); throw new Exception(Path + ": " + Resource1.DeviceNotMMC);
m_max_sectors = Math.Min(NSECTORS, m_device.MaximumTransferLength / CB_AUDIO - 1); m_max_sectors = Math.Min(NSECTORS, m_device.MaximumTransferLength / CB_AUDIO - 1);
//// Open/Initialize the driver //// Open/Initialize the driver
@@ -252,7 +251,7 @@ namespace CUETools.Ripper.SCSI
IList<TocEntry> toc; IList<TocEntry> toc;
st = m_device.ReadToc((byte)0, false, out toc); st = m_device.ReadToc((byte)0, false, out toc);
if (st != Device.CommandStatus.Success) if (st != Device.CommandStatus.Success)
throw new SCSIException("ReadTOC", m_device, st); throw new SCSIException(Resource1.ReadTOCError, m_device, st);
//throw new Exception("ReadTOC: " + (st == Device.CommandStatus.DeviceFailed ? Device.LookupSenseError(m_device.GetSenseAsc(), m_device.GetSenseAscq()) : st.ToString())); //throw new Exception("ReadTOC: " + (st == Device.CommandStatus.DeviceFailed ? Device.LookupSenseError(m_device.GetSenseAsc(), m_device.GetSenseAscq()) : st.ToString()));
//byte[] qdata = null; //byte[] qdata = null;
@@ -566,7 +565,7 @@ namespace CUETools.Ripper.SCSI
public unsafe bool DetectGaps() public unsafe bool DetectGaps()
{ {
if (!TestReadCommand()) if (!TestReadCommand())
throw new Exception("failed to autodetect read command:\n" + _autodetectResult); throw new Exception(Resource1.AutodetectReadCommandFailed+ ":\n" + _autodetectResult);
if (_gapDetection == GapDetectionMethod.None) if (_gapDetection == GapDetectionMethod.None)
{ {
@@ -715,8 +714,6 @@ namespace CUETools.Ripper.SCSI
bool found = false; bool found = false;
_autodetectResult = ""; _autodetectResult = "";
_currentStart = 0; _currentStart = 0;
_currentTrack = -1;
_currentIndex = -1;
m_max_sectors = Math.Min(NSECTORS, m_device.MaximumTransferLength / CB_AUDIO - 1); m_max_sectors = Math.Min(NSECTORS, m_device.MaximumTransferLength / CB_AUDIO - 1);
int sector = 3; int sector = 3;
int pass = 0; int pass = 0;
@@ -810,16 +807,22 @@ namespace CUETools.Ripper.SCSI
int offs = 0; int offs = 0;
if (c2Size == 296) if (c2Size == 296)
{ {
// TODO: sometimes sector C2 byte is placed after C2 info, not before!! // TODO: sometimes (e.g on PIONEER 215D) sector C2 byte is placed after C2 info,
// not before, like it says in mmc6r02g.pdf !!
int c2 = 0; int c2 = 0;
for (int pos = 2; pos < 294; pos++) for (int pos = 2; pos < 294; pos++)
c2 |= sectorPtr[4 * 588 + pos]; c2 |= sectorPtr[4 * 588 + pos];
if (sectorPtr[4 * 588 + 294] == (c2 | sectorPtr[4 * 588 + 0] | sectorPtr[4 * 588 + 1])) if (sectorPtr[4 * 588 + 294] == (c2 | sectorPtr[4 * 588 + 0] | sectorPtr[4 * 588 + 1]))
offs = 0; offs = 0;
else if (sectorPtr[4 * 588] == (c2 | sectorPtr[4 * 588 + 294] | sectorPtr[4 * 588 + 295]))
offs = 2;
else else
throw new Exception("invalid C2 pointers"); offs = 2;
// TSSTcorp CDDVDW SH-S203B SB03
// TSSTcorpCD/DVDW SH-W162C TS12
// Both produced Exception("invalid C2 pointers");
//else if (sectorPtr[4 * 588] == (c2 | sectorPtr[4 * 588 + 294] | sectorPtr[4 * 588 + 295]))
// offs = 2;
//else
// throw new Exception("invalid C2 pointers");
} }
for (int pos = 0; pos < 294; pos++) for (int pos = 0; pos < 294; pos++)
{ {
@@ -881,7 +884,7 @@ namespace CUETools.Ripper.SCSI
if (!abort) if (!abort)
return st; return st;
SCSIException ex = new SCSIException("ReadCD", m_device, st); SCSIException ex = new SCSIException(Resource1.ReadCDError, m_device, st);
if (sector != 0 && Sectors2Read > 1 && st == Device.CommandStatus.DeviceFailed && m_device.GetSenseAsc() == 0x64 && m_device.GetSenseAscq() == 0x00) if (sector != 0 && Sectors2Read > 1 && st == Device.CommandStatus.DeviceFailed && m_device.GetSenseAsc() == 0x64 && m_device.GetSenseAscq() == 0x00)
{ {
if (_debugMessages) if (_debugMessages)
@@ -1139,7 +1142,7 @@ namespace CUETools.Ripper.SCSI
return; return;
if (!TestReadCommand()) if (!TestReadCommand())
throw new Exception("failed to autodetect read command:\n" + _autodetectResult); throw new Exception(Resource1.AutodetectReadCommandFailed + "\n" + _autodetectResult);
_currentStart = iSector; _currentStart = iSector;
_currentEnd = _currentStart + MSECTORS; _currentEnd = _currentStart + MSECTORS;
@@ -1312,9 +1315,7 @@ namespace CUETools.Ripper.SCSI
set set
{ {
if (_toc.AudioLength <= 0) if (_toc.AudioLength <= 0)
throw new Exception("no audio"); throw new Exception(Resource1.NoAudio);
_currentTrack = -1;
_currentIndex = -1;
_crcErrorsCount = 0; _crcErrorsCount = 0;
_errorsCount = 0; _errorsCount = 0;
_currentStart = -1; _currentStart = -1;
@@ -1363,7 +1364,7 @@ namespace CUETools.Ripper.SCSI
{ {
get get
{ {
return "CUERipper v2.0.6 Copyright (C) 2008-10 Gregory S. Chudov"; return "CUERipper v2.0.7 Copyright (C) 2008-10 Gregory S. Chudov";
// ripper.GetName().Name + " " + ripper.GetName().Version; // ripper.GetName().Name + " " + ripper.GetName().Version;
} }
} }

View File

@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// //
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

View File

@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number // Build Number
// Revision // Revision
// //
[assembly: AssemblyVersion("2.0.6.0")] [assembly: AssemblyVersion("2.0.7.0")]
[assembly: AssemblyFileVersion("2.0.6.0")] [assembly: AssemblyFileVersion("2.0.7.0")]

View File

@@ -741,7 +741,7 @@ namespace JDP {
if (useAR || useCUEToolsDB) if (useAR || useCUEToolsDB)
cueSheet.DataTrackLengthMSF = txtDataTrackLength.Text; cueSheet.DataTrackLengthMSF = txtDataTrackLength.Text;
if (useCUEToolsDB) if (useCUEToolsDB)
cueSheet.UseCUEToolsDB(false, "CUETools 2.0.6"); cueSheet.UseCUEToolsDB(false, "CUETools 2.0.7");
if (useAR) if (useAR)
cueSheet.UseAccurateRip(); cueSheet.UseAccurateRip();

File diff suppressed because it is too large Load Diff