CUETools & CUERipper: Local metadata cache implemented

CUETools: register qaac.exe in external encoders
CUERipper: hopefully fixed problems with Matrox desktop manager
CUERipper: now remembers the drive which was last used
CUERipper: added a way to reload metadata
taglib-sharp: fixed incompatibility with tags produced by qaac.exe
This commit is contained in:
chudov
2010-05-02 17:04:51 +00:00
parent 382ca8a67b
commit 691cc51ee8
18 changed files with 1287 additions and 750 deletions

View File

@@ -30,9 +30,9 @@ namespace CUEControls
private Rectangle rectBtn = new Rectangle(0, 0, 1, 1);
private Rectangle rectContent = new Rectangle(0, 0, 1, 1);
private ToolStripControlHost _controlHost;
//private ToolStripControlHost _controlHost;
private ListBox _listBox;
private ToolStripDropDown _popupControl;
//private ToolStripDropDown _popupControl;
private TextBox _textBox;
private DrawMode _drawMode = DrawMode.Normal;
@@ -153,9 +153,9 @@ namespace CUEControls
_isDroppedDown = value;
if (!_isDroppedDown && _popupControl.IsDropDown)
if (!_isDroppedDown && _listBox.Visible)
{
_popupControl.Close();
_listBox.Visible = false;
hovered = this.RectangleToScreen(this.ClientRectangle).Contains(MousePosition);
}
@@ -163,7 +163,9 @@ namespace CUEControls
{
_listBox.Width = _dropDownWidth;
_listBox.Height = CalculateListHeight();
_popupControl.Show(this, CalculateDropPosition(), ToolStripDropDownDirection.BelowRight);
_listBox.Location = CalculateDropPosition();
_listBox.Show();
//_popupControl.Show(this, CalculateDropPosition(), ToolStripDropDownDirection.BelowRight);
Capture = false;
_listBox.Capture = true;
}
@@ -199,11 +201,12 @@ namespace CUEControls
{
get
{
return _popupControl.DropShadowEnabled;
return true; // _popupControl.DropShadowEnabled;
}
set
{
_popupControl.DropShadowEnabled = value;
// TODO
//_popupControl.DropShadowEnabled = value;
}
}
@@ -265,7 +268,7 @@ namespace CUEControls
_radius.TopRight = 6;
this.Height = 21;
this.Width = 95;
this.Width = 95 + 100;
this.SuspendLayout();
_textBox = new TextBox();
@@ -278,32 +281,36 @@ namespace CUEControls
_textBox.Padding = new Padding(0);
_textBox.TextAlign = HorizontalAlignment.Left;
_textBox.Font = base.Font;
this.Controls.Add(_textBox);
_listBox = new ListBox();
_listBox.IntegralHeight = true;
_listBox.BorderStyle = BorderStyle.None;
_listBox.SelectionMode = SelectionMode.One;
_listBox.DrawMode = DrawMode.OwnerDrawFixed;
_listBox.Font = base.Font;
//_listBox.DrawMode = DrawMode.Normal;
_listBox.BindingContext = new BindingContext();
_listBox.Visible = false;
_listBox.Parent = this;
this.Controls.Add(_textBox);
this.Controls.Add(_listBox);
this.ResumeLayout(false);
AdjustControls();
_listBox = new ListBox();
_listBox.IntegralHeight = true;
_listBox.BorderStyle = BorderStyle.None;
_listBox.SelectionMode = SelectionMode.One;
_listBox.DrawMode = DrawMode.OwnerDrawFixed;
_listBox.Font = base.Font;
//_listBox.DrawMode = DrawMode.Normal;
_listBox.BindingContext = new BindingContext();
//_controlHost = new ToolStripControlHost(_listBox);
//_controlHost.Padding = new Padding(0);
//_controlHost.Margin = new Padding(0);
//_controlHost.AutoSize = false;
_controlHost = new ToolStripControlHost(_listBox);
_controlHost.Padding = new Padding(0);
_controlHost.Margin = new Padding(0);
_controlHost.AutoSize = false;
_popupControl = new ToolStripDropDown();
_popupControl.Padding = new Padding(0);
_popupControl.Margin = new Padding(0);
_popupControl.AutoSize = true;
_popupControl.AutoClose = true;
_popupControl.DropShadowEnabled = true;
_popupControl.Items.Add(_controlHost);
//_popupControl = new ToolStripDropDown();
//_popupControl.Padding = new Padding(0);
//_popupControl.Margin = new Padding(0);
//_popupControl.AutoSize = true;
//_popupControl.AutoClose = true;
//_popupControl.DropShadowEnabled = true;
//_popupControl.Items.Add(_controlHost);
_dropDownWidth = this.Width;
@@ -317,8 +324,8 @@ namespace CUEControls
_listBox.MouseMove += new MouseEventHandler(_listBox_MouseMove);
//(_listBox.DataManager as CurrencyManager).ListChanged += new ListChangedEventHandler(BNComboBox_ListChanged);
_popupControl.Closing += new ToolStripDropDownClosingEventHandler(_popupControl_Closing);
_popupControl.Closed += new ToolStripDropDownClosedEventHandler(_popupControl_Closed);
//_popupControl.Closing += new ToolStripDropDownClosingEventHandler(_popupControl_Closing);
//_popupControl.Closed += new ToolStripDropDownClosedEventHandler(_popupControl_Closed);
_textBox.Resize += new EventHandler(_textBox_Resize);
_textBox.TextChanged += new EventHandler(_textBox_TextChanged);
@@ -331,6 +338,17 @@ namespace CUEControls
#region Overrides
protected override CreateParams CreateParams
{
//[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
get
{
CreateParams cp = base.CreateParams;
cp.Style &= ~0x06000000;
return cp;
}
}
protected override void OnCreateControl()
{
base.OnCreateControl();
@@ -423,7 +441,7 @@ namespace CUEControls
Invalidate(true);
}
if (!this.RectangleToScreen(this.ClientRectangle).Contains(MousePosition) &&
(!IsDroppedDown || !_popupControl.RectangleToScreen(_popupControl.ClientRectangle).Contains(MousePosition)))
(!IsDroppedDown || !_listBox.RectangleToScreen(_listBox.ClientRectangle).Contains(MousePosition)))
base.OnMouseLeave(e);
}
@@ -460,7 +478,7 @@ namespace CUEControls
get
{
if (base.ContainsFocus) return true;
if (this.IsDroppedDown && _popupControl.ContainsFocus) return true;
if (this.IsDroppedDown && _listBox.ContainsFocus) return true;
//if (this.IsDroppedDown && _listBox.ContainsFocus) return true;
if (this._dropDownStyle != ComboBoxStyle.DropDownList && _textBox.ContainsFocus) return true;
return false;
@@ -1037,9 +1055,9 @@ namespace CUEControls
private Point CalculateDropPosition()
{
Point point = new Point(0, this.Height);
if ((this.PointToScreen(new Point(0, 0)).Y + this.Height + _controlHost.Height) > Screen.PrimaryScreen.WorkingArea.Height)
if ((this.PointToScreen(new Point(0, 0)).Y + this.Height + _listBox.Height) > Screen.PrimaryScreen.WorkingArea.Height)
{
point.Y = -this._controlHost.Height - 7;
point.Y = -this._listBox.Height - 7;
}
return point;
}

View File

@@ -42,9 +42,6 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="BNComboBox.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="FileSystemTreeView.cs">
<SubType>Component</SubType>
</Compile>
@@ -52,6 +49,9 @@
<DependentUpon>FileSystemTreeView.cs</DependentUpon>
</Compile>
<Compile Include="IIconManager.cs" />
<Compile Include="ImgComboBox.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="MediaSlider.cs">
<SubType>UserControl</SubType>
</Compile>

480
CUEControls/ImgComboBox.cs Normal file
View File

@@ -0,0 +1,480 @@
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms.Design;
using System.ComponentModel;
using System;
namespace CUEControls
{
public class ImgComboBox : ComboBox
{
private Rectangle rectBtn = new Rectangle(0, 0, 1, 1);
private Rectangle rectContent = new Rectangle(0, 0, 1, 1);
private Rectangle rectTextBounds = new Rectangle(0, 0, 1, 1);
private RectRadius _radius = new RectRadius(2, 6, 2, 2);
public ImgComboBox()
{
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
//SetStyle(ControlStyles.UserMouse, true);
SetStyle(ControlStyles.UserPaint, true);
//SetStyle(ControlStyles.Selectable, true);
base.BackColor = Color.Transparent;
base.DrawMode = DrawMode.OwnerDrawFixed;
AdjustControls();
}
#region Properties
private string _text;
[Localizable(true),Bindable(true)]
public override string Text
{
get
{
if (DropDownStyle != ComboBoxStyle.DropDownList || Items.Count != 0)
return base.Text;
return _text;
}
set
{
if (DropDownStyle != ComboBoxStyle.DropDownList || Items.Count != 0)
base.Text = value;
_text = value;
Invalidate();
}
}
private DrawMode _drawMode = DrawMode.Normal;
[DefaultValue(DrawMode.Normal)]
[Category("Behavior"), Description("Indicates whether the user code or this control will handle the drawing of elements in the list.")]
public new DrawMode DrawMode
{
get { return _drawMode; }
set
{
_drawMode = value;
base.DrawMode = value == DrawMode.Normal ? DrawMode.OwnerDrawFixed : value;
}
}
[Category("Appearance"), Description("Selects the radius of combobox edges.")]
[DefaultValue("2, 6, 2, 2")]
public RectRadius Radius
{
get { return _radius; }
set { if (value != null) _radius = value; }
}
private ImageList _imageList = null;
public ImageList ImageList
{
get
{
return _imageList;
}
set
{
_imageList = value;
AdjustControls();
}
}
private string _imageKeyMember = null;
[Category("Data"), Description("Indicates the property to use as a key to select images from ImageList."), DefaultValue(null)]
[TypeConverter("System.Windows.Forms.Design.DataMemberFieldConverter, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
[Editor("System.Windows.Forms.Design.DataMemberFieldEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(System.Drawing.Design.UITypeEditor))]
[Browsable(true)]
public string ImageKeyMember
{
get
{
return _imageKeyMember;
}
set
{
_imageKeyMember = value;
}
}
#endregion
protected virtual Color GetOuterBorderColor()
{
return (Enabled) ? BackColor : BackColor;
}
protected virtual Color GetInnerBorderColor()
{
return (Enabled) ? BackColor : SystemColors.Control;
}
private void AdjustControls()
{
rectTextBounds.X = ClientRectangle.Left + 5 + (ImageList != null ? ImageList.ImageSize.Width + 5 : 0);
rectTextBounds.Y = ClientRectangle.Top + 4;
rectTextBounds.Width = ClientRectangle.Width - rectTextBounds.X - 18;
rectTextBounds.Height = ClientRectangle.Height - 8;
rectBtn.X = ClientRectangle.Width - 18;
rectBtn.Y = ClientRectangle.Top + 4;
rectBtn.Width = 18;
rectBtn.Height = ClientRectangle.Height - 8;
rectContent.X = ClientRectangle.Left;
rectContent.Y = ClientRectangle.Top;
rectContent.Width = ClientRectangle.Width;
rectContent.Height = ClientRectangle.Height;
Invalidate(true);
}
private int GetImageKey(int index)
{
if (this.ImageList == null || index < 0)
return -1;
object key = FilterItemOnProperty(Items[index], ImageKeyMember ?? DisplayMember);
if (key == null)
return -1;
if (key is int)
return (int)key;
if (key is string)
return this.ImageList.Images.IndexOfKey(key as string);
return -1;
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
AdjustControls();
}
protected override void OnDrawItem(DrawItemEventArgs e)
{
if (_drawMode != DrawMode.Normal)
{
base.OnDrawItem(e);
return;
}
if ((e.State & DrawItemState.ComboBoxEdit) != 0)
return;
//if (e.State == DrawItemState.
//int _hoverItem = SelectedIndex;
Color fg = e.ForeColor; // _hoverItem != -1 && _hoverItem == e.Index ? SystemColors.HighlightText : ForeColor;
Color bg = e.BackColor; // _hoverItem != -1 && _hoverItem == e.Index ? SystemColors.Highlight : BackColor;
if (bg == SystemColors.Window || bg.A < 255)
e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds);
else using (Brush b = new SolidBrush(bg))
e.Graphics.FillRectangle(b, e.Bounds);
if (e.Index >= 0)
{
Rectangle textBounds = e.Bounds;
textBounds.X += 5;
textBounds.Width -= 5;
// image
if (this.ImageList != null)
{
int idx = GetImageKey(e.Index);
if (idx >= 0)
this.ImageList.Draw(e.Graphics, e.Bounds.X + 5, e.Bounds.Y, idx);
textBounds.X += this.ImageList.ImageSize.Width + 5;
textBounds.Width -= this.ImageList.ImageSize.Width + 5;
}
//text
StringFormat sf = new StringFormat(StringFormatFlags.NoWrap);
sf.Alignment = StringAlignment.Near;
textBounds.Offset(-3, 0);
//textBounds.Height = _textBox.Height;
e.Graphics.DrawString(GetItemText(Items[e.Index]), this.Font, new SolidBrush(fg), textBounds, sf);
}
//base.OnDrawItem(e);
}
protected override void OnPaint(PaintEventArgs e)
{
bool hovered = this.RectangleToScreen(this.ClientRectangle).Contains(MousePosition);
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
//content border
Rectangle rectCont = rectContent;
rectCont.X += 1;
rectCont.Y += 1;
rectCont.Width -= 3;
rectCont.Height -= 3;
GraphicsPath pathContentBorder = CreateRoundRectangle(rectCont, Radius.TopLeft, Radius.TopRight, Radius.BottomRight,
Radius.BottomLeft);
//button border
Rectangle rectButton = rectBtn;
rectButton.X += 1;
rectButton.Y += 1;
rectButton.Width -= 3;
rectButton.Height -= 3;
GraphicsPath pathBtnBorder = CreateRoundRectangle(rectButton, 0, Radius.TopRight, Radius.BottomRight, 0);
//outer border
Rectangle rectOuter = rectContent;
rectOuter.Width -= 1;
rectOuter.Height -= 1;
GraphicsPath pathOuterBorder = CreateRoundRectangle(rectOuter, Radius.TopLeft, Radius.TopRight, Radius.BottomRight,
Radius.BottomLeft);
//inner border
Rectangle rectInner = rectContent;
rectInner.X += 1;
rectInner.Y += 1;
rectInner.Width -= 3;
rectInner.Height -= 3;
GraphicsPath pathInnerBorder = CreateRoundRectangle(rectInner, Radius.TopLeft, Radius.TopRight, Radius.BottomRight,
Radius.BottomLeft);
//brushes and pens
Color foreColor = Color.FromArgb(DroppedDown ? 100 : 50, ForeColor);
Brush brInnerBrush = new LinearGradientBrush(
new Rectangle(rectInner.X, rectInner.Y, rectInner.Width, rectInner.Height + 1),
Color.FromArgb((hovered || DroppedDown || Focused) ? 200 : 100, ForeColor),
Color.Transparent,
LinearGradientMode.Vertical);
Brush brBackground;
if (this.DropDownStyle == ComboBoxStyle.DropDownList)
brBackground = new LinearGradientBrush(pathInnerBorder.GetBounds(), BackColor, hovered ? Color.FromArgb(100, SystemColors.HotTrack) : foreColor, LinearGradientMode.Vertical);
else
brBackground = new SolidBrush(BackColor);
Pen penInnerBorder = new Pen(brInnerBrush, 0);
LinearGradientBrush brButtonLeft = new LinearGradientBrush(rectBtn, BackColor, ForeColor, LinearGradientMode.Vertical);
ColorBlend blend = new ColorBlend();
blend.Colors = new Color[] { Color.Transparent, foreColor, Color.Transparent };
blend.Positions = new float[] { 0.0f, 0.5f, 1.0f };
brButtonLeft.InterpolationColors = blend;
Pen penLeftButton = new Pen(brButtonLeft, 0);
Brush brButton = new LinearGradientBrush(pathBtnBorder.GetBounds(), BackColor, foreColor, LinearGradientMode.Vertical);
//draw
e.Graphics.FillPath(brBackground, pathContentBorder);
if (DropDownStyle != ComboBoxStyle.DropDownList)
{
e.Graphics.FillPath(brButton, pathBtnBorder);
}
Color outerBorderColor = GetOuterBorderColor();
if (outerBorderColor.IsSystemColor)
{
Pen penOuterBorder = SystemPens.FromSystemColor(outerBorderColor);
e.Graphics.DrawPath(penOuterBorder, pathOuterBorder);
}
else using (Pen penOuterBorder = new Pen(outerBorderColor))
e.Graphics.DrawPath(penOuterBorder, pathOuterBorder);
e.Graphics.DrawPath(penInnerBorder, pathInnerBorder);
e.Graphics.DrawLine(penLeftButton, rectBtn.Left + 1, rectInner.Top + 1, rectBtn.Left + 1, rectInner.Bottom - 1);
//Glimph
Rectangle rectGlimph = rectButton;
rectButton.Width -= 4;
e.Graphics.TranslateTransform(rectGlimph.Left + rectGlimph.Width / 2.0f, rectGlimph.Top + rectGlimph.Height / 2.0f);
GraphicsPath path = new GraphicsPath();
PointF[] points = new PointF[3];
points[0] = new PointF(-6 / 2.0f, -3 / 2.0f);
points[1] = new PointF(6 / 2.0f, -3 / 2.0f);
points[2] = new PointF(0, 6 / 2.0f);
path.AddLine(points[0], points[1]);
path.AddLine(points[1], points[2]);
path.CloseFigure();
e.Graphics.RotateTransform(0);
SolidBrush br = new SolidBrush(Enabled ? Color.Gray : Color.Gainsboro);
e.Graphics.FillPath(br, path);
e.Graphics.ResetTransform();
br.Dispose();
path.Dispose();
// image
if (ImageList != null)
{
int idx = GetImageKey(SelectedIndex);
if (idx >= 0)
this.ImageList.Draw(e.Graphics, rectTextBounds.Left - this.ImageList.ImageSize.Width - 5, rectContent.Y + 2, idx);
}
//text
if (DropDownStyle == ComboBoxStyle.DropDownList)
{
StringFormat sf = new StringFormat(StringFormatFlags.NoWrap);
sf.Alignment = StringAlignment.Near;
Rectangle rectText = rectTextBounds;
rectText.Offset(-3, 0);
SolidBrush foreBrush = new SolidBrush(ForeColor);
if (Enabled)
{
e.Graphics.DrawString(Text, this.Font, foreBrush, rectText, sf);
}
else
{
ControlPaint.DrawStringDisabled(e.Graphics, Text, Font, BackColor, rectText, sf);
}
}
/*
Dim foreBrush As SolidBrush = New SolidBrush(color)
If (enabled) Then
g.DrawString(text, font, foreBrush, rect, sf)
Else
ControlPaint.DrawStringDisabled(g, text, font, backColor, _
rect, sf)
End If
foreBrush.Dispose()*/
pathContentBorder.Dispose();
pathOuterBorder.Dispose();
pathInnerBorder.Dispose();
pathBtnBorder.Dispose();
penInnerBorder.Dispose();
penLeftButton.Dispose();
brBackground.Dispose();
brInnerBrush.Dispose();
brButtonLeft.Dispose();
brButton.Dispose();
}
public static GraphicsPath CreateRoundRectangle(Rectangle rectangle, int topLeftRadius, int topRightRadius,
int bottomRightRadius, int bottomLeftRadius)
{
GraphicsPath path = new GraphicsPath();
int l = rectangle.Left;
int t = rectangle.Top;
int w = rectangle.Width;
int h = rectangle.Height;
if (topLeftRadius > 0)
{
path.AddArc(l, t, topLeftRadius * 2, topLeftRadius * 2, 180, 90);
}
path.AddLine(l + topLeftRadius, t, l + w - topRightRadius, t);
if (topRightRadius > 0)
{
path.AddArc(l + w - topRightRadius * 2, t, topRightRadius * 2, topRightRadius * 2, 270, 90);
}
path.AddLine(l + w, t + topRightRadius, l + w, t + h - bottomRightRadius);
if (bottomRightRadius > 0)
{
path.AddArc(l + w - bottomRightRadius * 2, t + h - bottomRightRadius * 2,
bottomRightRadius * 2, bottomRightRadius * 2, 0, 90);
}
path.AddLine(l + w - bottomRightRadius, t + h, l + bottomLeftRadius, t + h);
if (bottomLeftRadius > 0)
{
path.AddArc(l, t + h - bottomLeftRadius * 2, bottomLeftRadius * 2, bottomLeftRadius * 2, 90, 90);
}
path.AddLine(l, t + h - bottomLeftRadius, l, t + topLeftRadius);
path.CloseFigure();
return path;
}
}
[TypeConverter(typeof(RectRadiusConverter))]
public class RectRadius : ICloneable
{
public static readonly RectRadius Default = new RectRadius();
public RectRadius()
: this(0,0,0,0)
{
}
public RectRadius(int topLeft, int topRight, int bottomLeft, int bottomRight)
{
TopLeft = topLeft;
TopRight = topRight;
BottomLeft = bottomLeft;
BottomRight = bottomRight;
}
public override bool Equals(object other)
{
RectRadius rrOther = other as RectRadius;
return rrOther.TopLeft == TopLeft && rrOther.TopRight == TopRight && rrOther.BottomLeft == BottomLeft && rrOther.BottomRight == BottomRight;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
object ICloneable.Clone()
{
return new RectRadius(TopLeft, TopRight, BottomLeft, BottomRight);
}
[RefreshProperties(RefreshProperties.All)]
public int TopLeft { get; set; }
[RefreshProperties(RefreshProperties.All)]
public int TopRight {get; set; }
[RefreshProperties(RefreshProperties.All)]
public int BottomLeft { get; set; }
[RefreshProperties(RefreshProperties.All)]
public int BottomRight { get; set; }
}
// Summary:
// Converts rectangles from one data type to another. Access this class through
// the System.ComponentModel.TypeDescriptor.
public class RectRadiusConverter : TypeConverter
{
public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
{
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(RectRadius), attributes);
return props.Sort(new string[] { "TopLeft", "TopRight", "BottomLeft", "BottomRight" });
}
public override bool GetPropertiesSupported(ITypeDescriptorContext context)
{
return true;
}
}
public class ImgComboBoxItem<T>
{
string text;
string imageKey;
T value;
public string ImageKey
{
get
{
return imageKey;
}
}
public override string ToString()
{
return text ?? value.ToString();
}
public T Value
{
get
{
return value;
}
}
public ImgComboBoxItem(string text, string imageKey, T value)
{
this.text = text;
this.imageKey = imageKey;
this.value = value;
}
}
}

View File

@@ -30,6 +30,13 @@ namespace CUERipper
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmCUERipper));
CUEControls.RectRadius rectRadius1 = new CUEControls.RectRadius();
CUEControls.RectRadius rectRadius2 = new CUEControls.RectRadius();
CUEControls.RectRadius rectRadius3 = new CUEControls.RectRadius();
CUEControls.RectRadius rectRadius4 = new CUEControls.RectRadius();
CUEControls.RectRadius rectRadius5 = new CUEControls.RectRadius();
CUEControls.RectRadius rectRadius6 = new CUEControls.RectRadius();
CUEControls.RectRadius rectRadius7 = new CUEControls.RectRadius();
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
this.toolStripStatusLabelMusicBrainz = new System.Windows.Forms.ToolStripStatusLabel();
@@ -49,25 +56,27 @@ namespace CUERipper
this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.variousToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.fixEncodingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.reloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.numericWriteOffset = new System.Windows.Forms.NumericUpDown();
this.lblWriteOffset = new System.Windows.Forms.Label();
this.checkBoxEACMode = new System.Windows.Forms.CheckBox();
this.groupBoxSettings = new System.Windows.Forms.GroupBox();
this.bnComboBoxLosslessOrNot = new CUEControls.BNComboBox();
this.bnComboBoxLosslessOrNot = new CUEControls.ImgComboBox();
this.losslessOrNotBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.bindingSourceCR = new System.Windows.Forms.BindingSource(this.components);
this.bnComboBoxEncoder = new CUEControls.BNComboBox();
this.bnComboBoxEncoder = new CUEControls.ImgComboBox();
this.encodersBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.labelSecureMode = new System.Windows.Forms.Label();
this.bnComboBoxFormat = new CUEControls.BNComboBox();
this.bnComboBoxFormat = new CUEControls.ImgComboBox();
this.formatsBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.labelEncoderMinMode = new System.Windows.Forms.Label();
this.bnComboBoxImage = new CUEControls.BNComboBox();
this.bnComboBoxImage = new CUEControls.ImgComboBox();
this.cUEStylesBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.labelEncoderMaxMode = new System.Windows.Forms.Label();
this.labelEncoderMode = new System.Windows.Forms.Label();
this.trackBarEncoderMode = new System.Windows.Forms.TrackBar();
this.trackBarSecureMode = new System.Windows.Forms.TrackBar();
this.drivesBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.imageListChecked = new System.Windows.Forms.ImageList(this.components);
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.progressBarErrors = new ProgressODoom.ProgressBarEx();
@@ -79,12 +88,11 @@ namespace CUERipper
this.plainProgressPainter2 = new ProgressODoom.PlainProgressPainter();
this.txtOutputPath = new System.Windows.Forms.TextBox();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.bnComboBoxRelease = new CUEControls.BNComboBox();
this.bnComboBoxRelease = new CUEControls.ImgComboBox();
this.releasesBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.imageListMetadataSource = new System.Windows.Forms.ImageList(this.components);
this.bnComboBoxDrives = new CUEControls.BNComboBox();
this.drivesBindingSource = new System.Windows.Forms.BindingSource(this.components);
this.bnComboBoxOutputFormat = new CUEControls.BNComboBox();
this.bnComboBoxDrives = new CUEControls.ImgComboBox();
this.bnComboBoxOutputFormat = new CUEControls.ImgComboBox();
this.statusStrip1.SuspendLayout();
this.contextMenuStripRelease.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.numericWriteOffset)).BeginInit();
@@ -96,8 +104,8 @@ namespace CUERipper
((System.ComponentModel.ISupportInitialize)(this.cUEStylesBindingSource)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.trackBarEncoderMode)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.trackBarSecureMode)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.releasesBindingSource)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.drivesBindingSource)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.releasesBindingSource)).BeginInit();
this.SuspendLayout();
//
// statusStrip1
@@ -127,6 +135,8 @@ namespace CUERipper
| System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom)));
this.toolStripStatusLabelMusicBrainz.BorderStyle = System.Windows.Forms.Border3DStyle.SunkenInner;
this.toolStripStatusLabelMusicBrainz.Image = global::CUERipper.Properties.Resources.musicbrainz;
this.toolStripStatusLabelMusicBrainz.IsLink = true;
this.toolStripStatusLabelMusicBrainz.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;
this.toolStripStatusLabelMusicBrainz.Name = "toolStripStatusLabelMusicBrainz";
resources.ApplyResources(this.toolStripStatusLabelMusicBrainz, "toolStripStatusLabelMusicBrainz");
this.toolStripStatusLabelMusicBrainz.Click += new System.EventHandler(this.toolStripStatusLabelMusicBrainz_Click);
@@ -228,7 +238,8 @@ namespace CUERipper
this.contextMenuStripRelease.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.editToolStripMenuItem,
this.variousToolStripMenuItem,
this.fixEncodingToolStripMenuItem});
this.fixEncodingToolStripMenuItem,
this.reloadToolStripMenuItem});
this.contextMenuStripRelease.Name = "contextMenuStripRelease";
resources.ApplyResources(this.contextMenuStripRelease, "contextMenuStripRelease");
this.contextMenuStripRelease.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStripRelease_Opening);
@@ -251,6 +262,12 @@ namespace CUERipper
resources.ApplyResources(this.fixEncodingToolStripMenuItem, "fixEncodingToolStripMenuItem");
this.fixEncodingToolStripMenuItem.Click += new System.EventHandler(this.fixEncodingToolStripMenuItem_Click);
//
// reloadToolStripMenuItem
//
this.reloadToolStripMenuItem.Name = "reloadToolStripMenuItem";
resources.ApplyResources(this.reloadToolStripMenuItem, "reloadToolStripMenuItem");
this.reloadToolStripMenuItem.Click += new System.EventHandler(this.reloadToolStripMenuItem_Click);
//
// numericWriteOffset
//
resources.ApplyResources(this.numericWriteOffset, "numericWriteOffset");
@@ -299,24 +316,21 @@ namespace CUERipper
//
// bnComboBoxLosslessOrNot
//
this.bnComboBoxLosslessOrNot.BackColor = System.Drawing.Color.White;
this.bnComboBoxLosslessOrNot.BackColor = System.Drawing.Color.Transparent;
this.bnComboBoxLosslessOrNot.DataSource = this.losslessOrNotBindingSource;
this.bnComboBoxLosslessOrNot.DropDownHeight = 200;
this.bnComboBoxLosslessOrNot.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.bnComboBoxLosslessOrNot.DropDownWidth = 80;
this.bnComboBoxLosslessOrNot.ForeColor = System.Drawing.SystemColors.ControlText;
this.bnComboBoxLosslessOrNot.ImageKeyMember = "ImageKey";
this.bnComboBoxLosslessOrNot.ImageList = null;
this.bnComboBoxLosslessOrNot.IsDroppedDown = false;
resources.ApplyResources(this.bnComboBoxLosslessOrNot, "bnComboBoxLosslessOrNot");
this.bnComboBoxLosslessOrNot.MaxDropDownItems = 8;
this.bnComboBoxLosslessOrNot.MinimumSize = new System.Drawing.Size(40, 21);
this.bnComboBoxLosslessOrNot.MinimumSize = new System.Drawing.Size(40, 0);
this.bnComboBoxLosslessOrNot.Name = "bnComboBoxLosslessOrNot";
this.bnComboBoxLosslessOrNot.Radius = ((CUEControls.BNRadius)(resources.GetObject("bnComboBoxLosslessOrNot.Radius")));
this.bnComboBoxLosslessOrNot.SelectedIndex = -1;
this.bnComboBoxLosslessOrNot.SelectedItem = null;
this.bnComboBoxLosslessOrNot.Sorted = false;
this.bnComboBoxLosslessOrNot.SelectedIndexChanged += new System.EventHandler(this.bnComboBoxLosslessOrNot_SelectedIndexChanged);
rectRadius1.BottomLeft = 2;
rectRadius1.BottomRight = 2;
rectRadius1.TopLeft = 2;
rectRadius1.TopRight = 6;
this.bnComboBoxLosslessOrNot.Radius = rectRadius1;
this.bnComboBoxLosslessOrNot.SelectedValueChanged += new System.EventHandler(this.bnComboBoxLosslessOrNot_SelectedValueChanged);
//
// losslessOrNotBindingSource
//
@@ -325,27 +339,24 @@ namespace CUERipper
//
// bindingSourceCR
//
this.bindingSourceCR.DataSource = typeof(CUERipper.frmCUERipper);
this.bindingSourceCR.DataSource = typeof(CUERipper.CUERipperData);
//
// bnComboBoxEncoder
//
this.bnComboBoxEncoder.BackColor = System.Drawing.Color.White;
this.bnComboBoxEncoder.BackColor = System.Drawing.Color.Transparent;
this.bnComboBoxEncoder.DataSource = this.encodersBindingSource;
this.bnComboBoxEncoder.DropDownHeight = 200;
this.bnComboBoxEncoder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.bnComboBoxEncoder.DropDownWidth = 80;
this.bnComboBoxEncoder.ForeColor = System.Drawing.SystemColors.ControlText;
this.bnComboBoxEncoder.ImageList = null;
this.bnComboBoxEncoder.IsDroppedDown = false;
resources.ApplyResources(this.bnComboBoxEncoder, "bnComboBoxEncoder");
this.bnComboBoxEncoder.MaxDropDownItems = 8;
this.bnComboBoxEncoder.MinimumSize = new System.Drawing.Size(40, 21);
this.bnComboBoxEncoder.MinimumSize = new System.Drawing.Size(40, 0);
this.bnComboBoxEncoder.Name = "bnComboBoxEncoder";
this.bnComboBoxEncoder.Radius = ((CUEControls.BNRadius)(resources.GetObject("bnComboBoxEncoder.Radius")));
this.bnComboBoxEncoder.SelectedIndex = -1;
this.bnComboBoxEncoder.SelectedItem = null;
this.bnComboBoxEncoder.Sorted = false;
this.bnComboBoxEncoder.SelectedIndexChanged += new System.EventHandler(this.comboBoxEncoder_SelectedIndexChanged);
rectRadius2.BottomLeft = 2;
rectRadius2.BottomRight = 2;
rectRadius2.TopLeft = 2;
rectRadius2.TopRight = 6;
this.bnComboBoxEncoder.Radius = rectRadius2;
this.bnComboBoxEncoder.SelectedValueChanged += new System.EventHandler(this.bnComboBoxEncoder_SelectedValueChanged);
//
// encodersBindingSource
//
@@ -359,24 +370,20 @@ namespace CUERipper
//
// bnComboBoxFormat
//
this.bnComboBoxFormat.BackColor = System.Drawing.Color.White;
this.bnComboBoxFormat.BackColor = System.Drawing.Color.Transparent;
this.bnComboBoxFormat.DataSource = this.formatsBindingSource;
this.bnComboBoxFormat.DropDownHeight = 200;
this.bnComboBoxFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.bnComboBoxFormat.DropDownWidth = 80;
this.bnComboBoxFormat.ForeColor = System.Drawing.SystemColors.ControlText;
this.bnComboBoxFormat.ImageKeyMember = "DotExtension";
this.bnComboBoxFormat.ImageList = null;
this.bnComboBoxFormat.IsDroppedDown = false;
resources.ApplyResources(this.bnComboBoxFormat, "bnComboBoxFormat");
this.bnComboBoxFormat.MaxDropDownItems = 8;
this.bnComboBoxFormat.MinimumSize = new System.Drawing.Size(40, 21);
this.bnComboBoxFormat.Name = "bnComboBoxFormat";
this.bnComboBoxFormat.Radius = ((CUEControls.BNRadius)(resources.GetObject("bnComboBoxFormat.Radius")));
this.bnComboBoxFormat.SelectedIndex = -1;
this.bnComboBoxFormat.SelectedItem = null;
this.bnComboBoxFormat.Sorted = false;
this.bnComboBoxFormat.SelectedIndexChanged += new System.EventHandler(this.bnComboBoxFormat_SelectedIndexChanged);
rectRadius3.BottomLeft = 2;
rectRadius3.BottomRight = 2;
rectRadius3.TopLeft = 2;
rectRadius3.TopRight = 6;
this.bnComboBoxFormat.Radius = rectRadius3;
this.bnComboBoxFormat.SelectedValueChanged += new System.EventHandler(this.bnComboBoxFormat_SelectedValueChanged);
//
// formatsBindingSource
//
@@ -390,22 +397,19 @@ namespace CUERipper
//
// bnComboBoxImage
//
this.bnComboBoxImage.BackColor = System.Drawing.Color.White;
this.bnComboBoxImage.BackColor = System.Drawing.Color.Transparent;
this.bnComboBoxImage.DataSource = this.cUEStylesBindingSource;
this.bnComboBoxImage.DropDownHeight = 200;
this.bnComboBoxImage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.bnComboBoxImage.DropDownWidth = 80;
this.bnComboBoxImage.ForeColor = System.Drawing.SystemColors.ControlText;
this.bnComboBoxImage.ImageList = null;
this.bnComboBoxImage.IsDroppedDown = false;
resources.ApplyResources(this.bnComboBoxImage, "bnComboBoxImage");
this.bnComboBoxImage.MaxDropDownItems = 8;
this.bnComboBoxImage.MinimumSize = new System.Drawing.Size(40, 21);
this.bnComboBoxImage.MinimumSize = new System.Drawing.Size(40, 0);
this.bnComboBoxImage.Name = "bnComboBoxImage";
this.bnComboBoxImage.Radius = ((CUEControls.BNRadius)(resources.GetObject("bnComboBoxImage.Radius")));
this.bnComboBoxImage.SelectedIndex = -1;
this.bnComboBoxImage.SelectedItem = null;
this.bnComboBoxImage.Sorted = false;
rectRadius4.BottomLeft = 2;
rectRadius4.BottomRight = 2;
rectRadius4.TopLeft = 2;
rectRadius4.TopRight = 6;
this.bnComboBoxImage.Radius = rectRadius4;
//
// cUEStylesBindingSource
//
@@ -432,11 +436,16 @@ namespace CUERipper
// trackBarSecureMode
//
resources.ApplyResources(this.trackBarSecureMode, "trackBarSecureMode");
this.trackBarSecureMode.LargeChange = 3;
this.trackBarSecureMode.LargeChange = 1;
this.trackBarSecureMode.Maximum = 2;
this.trackBarSecureMode.Name = "trackBarSecureMode";
this.trackBarSecureMode.Scroll += new System.EventHandler(this.trackBarSecureMode_Scroll);
//
// drivesBindingSource
//
this.drivesBindingSource.DataMember = "Drives";
this.drivesBindingSource.DataSource = this.bindingSourceCR;
//
// imageListChecked
//
this.imageListChecked.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageListChecked.ImageStream")));
@@ -529,26 +538,23 @@ namespace CUERipper
//
// bnComboBoxRelease
//
this.bnComboBoxRelease.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.bnComboBoxRelease.BackColor = System.Drawing.Color.Transparent;
this.bnComboBoxRelease.ContextMenuStrip = this.contextMenuStripRelease;
this.bnComboBoxRelease.DataSource = this.releasesBindingSource;
this.bnComboBoxRelease.DropDownHeight = 200;
this.bnComboBoxRelease.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.bnComboBoxRelease.DropDownWidth = 552;
this.bnComboBoxRelease.ForeColor = System.Drawing.SystemColors.ControlText;
this.bnComboBoxRelease.ImageKeyMember = "ImageKey";
this.bnComboBoxRelease.ImageList = this.imageListMetadataSource;
this.bnComboBoxRelease.IsDroppedDown = false;
resources.ApplyResources(this.bnComboBoxRelease, "bnComboBoxRelease");
this.bnComboBoxRelease.MaxDropDownItems = 8;
this.bnComboBoxRelease.MinimumSize = new System.Drawing.Size(61, 21);
this.bnComboBoxRelease.MinimumSize = new System.Drawing.Size(61, 0);
this.bnComboBoxRelease.Name = "bnComboBoxRelease";
this.bnComboBoxRelease.Radius = ((CUEControls.BNRadius)(resources.GetObject("bnComboBoxRelease.Radius")));
this.bnComboBoxRelease.SelectedIndex = -1;
this.bnComboBoxRelease.SelectedItem = null;
this.bnComboBoxRelease.Sorted = false;
rectRadius5.BottomLeft = 2;
rectRadius5.BottomRight = 2;
rectRadius5.TopLeft = 2;
rectRadius5.TopRight = 6;
this.bnComboBoxRelease.Radius = rectRadius5;
this.toolTip1.SetToolTip(this.bnComboBoxRelease, resources.GetString("bnComboBoxRelease.ToolTip"));
this.bnComboBoxRelease.SelectedIndexChanged += new System.EventHandler(this.bnComboBoxRelease_SelectedIndexChanged);
this.bnComboBoxRelease.SelectedValueChanged += new System.EventHandler(this.bnComboBoxRelease_SelectedValueChanged);
//
// releasesBindingSource
//
@@ -561,53 +567,42 @@ namespace CUERipper
this.imageListMetadataSource.TransparentColor = System.Drawing.Color.Transparent;
this.imageListMetadataSource.Images.SetKeyName(0, "musicbrainz");
this.imageListMetadataSource.Images.SetKeyName(1, "freedb");
this.imageListMetadataSource.Images.SetKeyName(2, "local");
//
// bnComboBoxDrives
//
this.bnComboBoxDrives.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.bnComboBoxDrives.BackColor = System.Drawing.Color.Transparent;
this.bnComboBoxDrives.DataSource = this.drivesBindingSource;
this.bnComboBoxDrives.DropDownHeight = 200;
this.bnComboBoxDrives.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.bnComboBoxDrives.DropDownWidth = 552;
this.bnComboBoxDrives.ForeColor = System.Drawing.SystemColors.ControlText;
this.bnComboBoxDrives.ImageKeyMember = "ImageKey";
this.bnComboBoxDrives.ImageList = this.imageListMetadataSource;
this.bnComboBoxDrives.IsDroppedDown = false;
resources.ApplyResources(this.bnComboBoxDrives, "bnComboBoxDrives");
this.bnComboBoxDrives.MaxDropDownItems = 8;
this.bnComboBoxDrives.MinimumSize = new System.Drawing.Size(61, 21);
this.bnComboBoxDrives.MinimumSize = new System.Drawing.Size(61, 0);
this.bnComboBoxDrives.Name = "bnComboBoxDrives";
this.bnComboBoxDrives.Radius = ((CUEControls.BNRadius)(resources.GetObject("bnComboBoxDrives.Radius")));
this.bnComboBoxDrives.SelectedIndex = -1;
this.bnComboBoxDrives.SelectedItem = null;
this.bnComboBoxDrives.Sorted = false;
this.bnComboBoxDrives.SelectedIndexChanged += new System.EventHandler(this.bnComboBoxDrives_SelectedIndexChanged);
//
// drivesBindingSource
//
this.drivesBindingSource.DataMember = "Drives";
this.drivesBindingSource.DataSource = this.bindingSourceCR;
rectRadius6.BottomLeft = 2;
rectRadius6.BottomRight = 2;
rectRadius6.TopLeft = 2;
rectRadius6.TopRight = 6;
this.bnComboBoxDrives.Radius = rectRadius6;
this.bnComboBoxDrives.SelectedValueChanged += new System.EventHandler(this.bnComboBoxDrives_SelectedValueChanged);
//
// bnComboBoxOutputFormat
//
this.bnComboBoxOutputFormat.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.bnComboBoxOutputFormat.DropDownHeight = 200;
this.bnComboBoxOutputFormat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDown;
this.bnComboBoxOutputFormat.DropDownWidth = 552;
this.bnComboBoxOutputFormat.BackColor = System.Drawing.Color.Transparent;
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.MinimumSize = new System.Drawing.Size(40, 0);
this.bnComboBoxOutputFormat.Name = "bnComboBoxOutputFormat";
this.bnComboBoxOutputFormat.Radius = ((CUEControls.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);
rectRadius7.BottomLeft = 2;
rectRadius7.BottomRight = 2;
rectRadius7.TopLeft = 2;
rectRadius7.TopRight = 6;
this.bnComboBoxOutputFormat.Radius = rectRadius7;
this.bnComboBoxOutputFormat.Leave += new System.EventHandler(this.bnComboBoxOutputFormat_Leave);
this.bnComboBoxOutputFormat.MouseLeave += new System.EventHandler(this.bnComboBoxOutputFormat_MouseLeave);
this.bnComboBoxOutputFormat.DropDown += new System.EventHandler(this.bnComboBoxOutputFormat_DroppedDown);
this.bnComboBoxOutputFormat.TextChanged += new System.EventHandler(this.bnComboBoxOutputFormat_TextChanged);
//
// frmCUERipper
@@ -647,8 +642,8 @@ namespace CUERipper
((System.ComponentModel.ISupportInitialize)(this.cUEStylesBindingSource)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.trackBarEncoderMode)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.trackBarSecureMode)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.releasesBindingSource)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.drivesBindingSource)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.releasesBindingSource)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@@ -693,24 +688,25 @@ namespace CUERipper
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelMusicBrainz;
private System.Windows.Forms.TextBox txtOutputPath;
private System.Windows.Forms.ToolTip toolTip1;
private CUEControls.BNComboBox bnComboBoxImage;
private CUEControls.ImgComboBox bnComboBoxImage;
private System.Windows.Forms.BindingSource bindingSourceCR;
private System.Windows.Forms.ImageList imageListMetadataSource;
private System.Windows.Forms.BindingSource cUEStylesBindingSource;
private CUEControls.BNComboBox bnComboBoxRelease;
private CUEControls.ImgComboBox bnComboBoxRelease;
private System.Windows.Forms.BindingSource releasesBindingSource;
private CUEControls.BNComboBox bnComboBoxDrives;
private CUEControls.ImgComboBox bnComboBoxDrives;
private System.Windows.Forms.BindingSource drivesBindingSource;
private CUEControls.BNComboBox bnComboBoxFormat;
private CUEControls.ImgComboBox bnComboBoxFormat;
private System.Windows.Forms.BindingSource formatsBindingSource;
private CUEControls.BNComboBox bnComboBoxEncoder;
private CUEControls.ImgComboBox bnComboBoxEncoder;
private System.Windows.Forms.BindingSource encodersBindingSource;
private CUEControls.BNComboBox bnComboBoxLosslessOrNot;
private CUEControls.ImgComboBox bnComboBoxLosslessOrNot;
private System.Windows.Forms.BindingSource losslessOrNotBindingSource;
private CUEControls.BNComboBox bnComboBoxOutputFormat;
private CUEControls.ImgComboBox bnComboBoxOutputFormat;
private System.Windows.Forms.ImageList imageListChecked;
private System.Windows.Forms.ToolStripMenuItem variousToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem fixEncodingToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem reloadToolStripMenuItem;
}
}

View File

@@ -28,11 +28,13 @@ namespace CUERipper
private StartStop _startStop;
private CUEConfig _config;
private CUESheet cueSheet;
private ReleaseInfo selectedRelease;
private CUEMetadataEntry selectedRelease;
private DriveInfo selectedDriveInfo;
private string _pathOut;
string _defaultLosslessFormat, _defaultLossyFormat, _defaultHybridFormat;
private CUEControls.ShellIconMgr m_icon_mgr;
private string defaultDrive;
internal CUERipperData data = new CUERipperData();
public frmCUERipper()
{
@@ -55,65 +57,6 @@ namespace CUERipper
"%music%\\%artist%\\[%year% - ]%album%[ - %edition%]$ifgreater($max(%discnumber%,%totaldiscs%),1, - cd %discnumber%,)[' ('%unique%')']\\%artist% - %album%[ - %edition%].cue"
};
private BindingList<string> cueStyles = new BindingList<string> { "image", "tracks" };
//private BindingList<string> losslessOrNot = new BindingList<string> { "lossless", "lossy" };
private BindingList<BNComboBoxItem<AudioEncoderType>> losslessOrNot = new BindingList<BNComboBoxItem<AudioEncoderType>> {
new BNComboBoxItem<AudioEncoderType>("lossless", "checked", AudioEncoderType.Lossless),
new BNComboBoxItem<AudioEncoderType>("lossy", "unchecked", AudioEncoderType.Lossy)
};
private BindingList<ReleaseInfo> releases = new BindingList<ReleaseInfo>();
private BindingList<DriveInfo> drives = new BindingList<DriveInfo>();
private BindingList<FormatInfo> formats = new BindingList<FormatInfo>();
private BindingList<CUEToolsUDC> encoders = new BindingList<CUEToolsUDC>();
public BindingList<string> CUEStyles
{
get
{
return cueStyles;
}
}
public BindingList<BNComboBoxItem<AudioEncoderType>> LosslessOrNot
{
get
{
return losslessOrNot;
}
}
public BindingList<ReleaseInfo> Releases
{
get
{
return releases;
}
}
public BindingList<DriveInfo> Drives
{
get
{
return drives;
}
}
public BindingList<FormatInfo> Formats
{
get
{
return formats;
}
}
public BindingList<CUEToolsUDC> Encoders
{
get
{
return encoders;
}
}
private void frmCUERipper_Load(object sender, EventArgs e)
{
SettingsReader sr = new SettingsReader("CUERipper", "settings.txt", Application.ExecutablePath);
@@ -125,7 +68,7 @@ namespace CUERipper
//_config.preserveHTOA = sr.LoadBoolean("PreserveHTOA") ?? false;
//_config.createM3U = sr.LoadBoolean("CreateM3U") ?? true;
bindingSourceCR.DataSource = this;
bindingSourceCR.DataSource = data;
bnComboBoxDrives.ImageList = m_icon_mgr.ImageList;
bnComboBoxFormat.ImageList = m_icon_mgr.ImageList;
SetupControls();
@@ -142,6 +85,7 @@ namespace CUERipper
bnComboBoxImage.SelectedIndex = sr.LoadInt32("ComboImage", 0, bnComboBoxImage.Items.Count - 1) ?? 0;
trackBarSecureMode.Value = sr.LoadInt32("SecureMode", 0, trackBarSecureMode.Maximum - 1) ?? 1;
trackBarSecureMode_Scroll(this, new EventArgs());
defaultDrive = sr.Load("DefaultDrive");
UpdateDrives();
}
@@ -171,7 +115,10 @@ namespace CUERipper
if (val == DBT_DEVICEARRIVAL || val == DBT_DEVICEREMOVECOMPLETE)
UpdateDrive();
else if (val == DBT_DEVNODES_CHANGED)
UpdateDrives();
{
if (_workThread == null)
UpdateDrives();
}
}
base.WndProc(ref m);
}
@@ -179,7 +126,7 @@ namespace CUERipper
private void DrivesLookup(object o)
{
// Lookup
drives.RaiseListChangedEvents = false;
data.Drives.RaiseListChangedEvents = false;
foreach (char drive in CDDrivesList.DrivesAvailable())
{
ICDRipper reader = null;
@@ -204,35 +151,40 @@ namespace CUERipper
}
catch
{
drives.Add(new DriveInfo(m_icon_mgr, drive + ":\\", ex.Message));
data.Drives.Add(new DriveInfo(m_icon_mgr, drive + ":\\", ex.Message));
continue;
}
}
if (!AccurateRipVerify.FindDriveReadOffset(arName, out driveOffset))
; //throw new Exception("Failed to find drive read offset for drive" + _ripper.ARName);
reader.DriveOffset = driveOffset;
drives.Add(new DriveInfo(m_icon_mgr, drive + ":\\", reader));
data.Drives.Add(new DriveInfo(m_icon_mgr, drive + ":\\", reader));
}
_workThread = null;
this.BeginInvoke((MethodInvoker)delegate()
{
data.Drives.RaiseListChangedEvents = true;
data.Drives.ResetBindings();
for(int i = 0; i < bnComboBoxDrives.Items.Count; i++)
if ((bnComboBoxDrives.Items[i] as DriveInfo).Path == defaultDrive)
bnComboBoxDrives.SelectedIndex = i;
_workThread = null;
SetupControls();
drives.RaiseListChangedEvents = true;
drives.ResetBindings();
if (drives.Count == 0)
if (data.Drives.Count == 0)
bnComboBoxDrives.Text = Properties.Resources.NoDrives;
else
UpdateDrive();
});
}
private void UpdateDrives()
{
buttonGo.Enabled = false;
foreach (DriveInfo driveInfo in drives)
foreach (DriveInfo driveInfo in data.Drives)
if (driveInfo.drive != null)
driveInfo.drive.Close();
drives.Clear();
data.Drives.Clear();
listTracks.Items.Clear();
releases.Clear();
data.Releases.Clear();
selectedRelease = null;
selectedDriveInfo = null;
bnComboBoxRelease.Text = "";
@@ -259,8 +211,8 @@ namespace CUERipper
bnComboBoxOutputFormat.Visible = outputFormatVisible;
txtOutputPath.Visible = !outputFormatVisible;
txtOutputPath.Enabled = !running && !outputFormatVisible;
bnComboBoxRelease.Enabled = !running && releases.Count > 0;
bnComboBoxDrives.Enabled = !running && drives.Count > 0;
bnComboBoxRelease.Enabled = !running && data.Releases.Count > 0;
bnComboBoxDrives.Enabled = !running && data.Drives.Count > 0;
bnComboBoxOutputFormat.Enabled =
listTracks.Enabled =
groupBoxSettings.Enabled = !running;
@@ -399,7 +351,7 @@ namespace CUERipper
{
this.BeginInvoke((MethodInvoker)delegate()
{
releases.Clear();
data.Releases.Clear();
selectedRelease = null;
bnComboBoxRelease.Text = ex.Message;
});
@@ -424,6 +376,8 @@ namespace CUERipper
bnComboBoxOutputFormat.Items.RemoveAt(OutputPathUseTemplates.Length + 10);
}
selectedRelease.metadata.Save();
cueSheet.CopyMetadata(selectedRelease.metadata);
cueSheet.OutputStyle = bnComboBoxImage.SelectedIndex == 0 ? CUEStyle.SingleFileWithCUE :
CUEStyle.GapsAppended;
@@ -458,7 +412,7 @@ namespace CUERipper
private void UpdateRelease()
{
listTracks.Items.Clear();
selectedRelease = bnComboBoxRelease.SelectedItem as ReleaseInfo;
selectedRelease = bnComboBoxRelease.SelectedItem as CUEMetadataEntry;
comboBoxOutputFormat_TextUpdate(this, new EventArgs());
if (selectedRelease == null)
return;
@@ -485,43 +439,42 @@ namespace CUERipper
});
}
private ReleaseInfo CreateCUESheet(ICDRipper audioSource, Release release, CDEntry cdEntry)
private CUEMetadataEntry CreateCUESheet(ICDRipper audioSource, Release release)
{
ReleaseInfo r = new ReleaseInfo(_config, audioSource.TOC);
General.SetCUELine(r.metadata.Attributes, "REM", "GENRE", "", true);
General.SetCUELine(r.metadata.Attributes, "REM", "DATE", "", false);
if (release != null)
{
r.metadata.FillFromMusicBrainz(release);
r.ImageKey = "musicbrainz";
}
else if (cdEntry != null)
{
r.metadata.FillFromFreedb(cdEntry);
r.ImageKey = "freedb";
}
else
{
r.metadata.Artist = "Unknown Artist";
r.metadata.Title = "Unknown Title";
for (int i = 0; i < audioSource.TOC.AudioTracks; i++)
{
r.metadata.Tracks[i].Title = string.Format("Track {0:00}", i + 1);
r.metadata.Tracks[i].Artist = r.metadata.Artist;
}
}
if (r.metadata.Genre == "") r.metadata.Genre = "";
if (r.metadata.Year == "") r.metadata.Year = "";
return r;
CUEMetadataEntry entry = new CUEMetadataEntry(audioSource.TOC, "musicbrainz");
entry.metadata.FillFromMusicBrainz(release, entry.TOC.FirstAudio - 1);
return entry;
}
private CUEMetadataEntry CreateCUESheet(ICDRipper audioSource, CDEntry cdEntry)
{
CUEMetadataEntry entry = new CUEMetadataEntry(audioSource.TOC, "freedb");
entry.metadata.FillFromFreedb(cdEntry, entry.TOC.FirstAudio - 1);
return entry;
}
private CUEMetadataEntry CreateCUESheet(ICDRipper audioSource)
{
CUEMetadataEntry entry = new CUEMetadataEntry(audioSource.TOC, "local");
entry.metadata.Artist = "Unknown Artist";
entry.metadata.Title = "Unknown Title";
for (int i = 0; i < entry.TOC.AudioTracks; i++)
{
entry.metadata.Tracks[i].Title = string.Format("Track {0:00}", i + 1);
entry.metadata.Tracks[i].Artist = entry.metadata.Artist;
}
return entry;
}
private bool loadAllMetadata = false;
private void Lookup(object o)
{
ICDRipper audioSource = o as ICDRipper;
int mbresults_count = 0; // have to cache results.Count, because it sometimes hangs in it, and we don't want UI thread to hang.
string musicbrainzError = "";
releases.RaiseListChangedEvents = false;
data.Releases.RaiseListChangedEvents = false;
cueSheet = new CUESheet(_config);
cueSheet.OpenCD(audioSource);
@@ -532,86 +485,103 @@ namespace CUERipper
cueSheet.CTDB.UploadHelper.onProgress += new EventHandler<Krystalware.UploadHelper.UploadProgressEventArgs>(UploadProgress);
this.BeginInvoke((MethodInvoker)delegate() { toolStripStatusLabel1.Text = Properties.Resources.LookingUpVia + " AccurateRip..."; });
cueSheet.UseAccurateRip();
this.BeginInvoke((MethodInvoker)delegate() { toolStripStatusLabel1.Text = Properties.Resources.LookingUpVia + " MusicBrainz..."; });
General.SetCUELine(cueSheet.Attributes, "REM", "DISCID", AccurateRipVerify.CalculateCDDBId(audioSource.TOC), false);
General.SetCUELine(cueSheet.Attributes, "REM", "COMMENT", _config.createEACLOG ? "ExactAudioCopy v0.99pb4" : audioSource.RipperVersion, true);
ReleaseQueryParameters p = new ReleaseQueryParameters();
p.DiscId = audioSource.TOC.MusicBrainzId;
Query<Release> results = Release.Query(p);
MusicBrainzService.XmlRequest += new EventHandler<XmlRequestEventArgs>(MusicBrainz_LookupProgress);
try
{
foreach (Release release in results)
{
release.GetEvents();
release.GetTracks();
releases.Add(CreateCUESheet(audioSource, release, null));
}
mbresults_count = results.Count;
CUEMetadata cache = CUEMetadata.Load(audioSource.TOC.TOCID);
if (cache != null)
data.Releases.Add(new CUEMetadataEntry(cache, audioSource.TOC, "local"));
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.Message);
if (!(ex is MusicBrainzNotFoundException))
musicbrainzError = ex.Message;
}
MusicBrainzService.XmlRequest -= new EventHandler<XmlRequestEventArgs>(MusicBrainz_LookupProgress);
FreedbHelper m_freedb = new FreedbHelper();
m_freedb.UserName = "gchudov";
m_freedb.Hostname = "gmail.com";
m_freedb.ClientName = "CUERipper";
m_freedb.Version = "2.0.8";
m_freedb.SetDefaultSiteAddress(Properties.Settings.Default.MAIN_FREEDB_SITEADDRESS);
QueryResult queryResult;
QueryResultCollection coll;
string code = string.Empty;
try
if (data.Releases.Count == 0 || loadAllMetadata)
{
MusicBrainz_LookupProgress(this, null);
code = m_freedb.Query(AccurateRipVerify.CalculateCDDBQuery(audioSource.TOC), out queryResult, out coll);
if (code == FreedbHelper.ResponseCodes.CODE_200)
loadAllMetadata = false;
this.BeginInvoke((MethodInvoker)delegate() { toolStripStatusLabel1.Text = Properties.Resources.LookingUpVia + " MusicBrainz..."; });
ReleaseQueryParameters p = new ReleaseQueryParameters();
p.DiscId = audioSource.TOC.MusicBrainzId;
Query<Release> results = Release.Query(p);
MusicBrainzService.XmlRequest += new EventHandler<XmlRequestEventArgs>(MusicBrainz_LookupProgress);
try
{
CDEntry cdEntry;
MusicBrainz_LookupProgress(this, null);
code = m_freedb.Read(queryResult, out cdEntry);
if (code == FreedbHelper.ResponseCodes.CODE_210)
foreach (Release release in results)
{
ReleaseInfo r = CreateCUESheet(audioSource, null, cdEntry);
releases.Add(r);
release.GetEvents();
release.GetTracks();
data.Releases.Add(CreateCUESheet(audioSource, release));
}
mbresults_count = results.Count;
}
else
if (code == FreedbHelper.ResponseCodes.CODE_210 ||
code == FreedbHelper.ResponseCodes.CODE_211 )
catch (Exception ex)
{
foreach (QueryResult qr in coll)
System.Diagnostics.Trace.WriteLine(ex.Message);
if (!(ex is MusicBrainzNotFoundException))
musicbrainzError = ex.Message;
}
MusicBrainzService.XmlRequest -= new EventHandler<XmlRequestEventArgs>(MusicBrainz_LookupProgress);
FreedbHelper m_freedb = new FreedbHelper();
m_freedb.UserName = "gchudov";
m_freedb.Hostname = "gmail.com";
m_freedb.ClientName = "CUERipper";
m_freedb.Version = "2.0.8";
m_freedb.SetDefaultSiteAddress(Properties.Settings.Default.MAIN_FREEDB_SITEADDRESS);
QueryResult queryResult;
QueryResultCollection coll;
string code = string.Empty;
try
{
MusicBrainz_LookupProgress(this, null);
code = m_freedb.Query(AccurateRipVerify.CalculateCDDBQuery(audioSource.TOC), out queryResult, out coll);
if (code == FreedbHelper.ResponseCodes.CODE_200)
{
CDEntry cdEntry;
MusicBrainz_LookupProgress(this, null);
code = m_freedb.Read(qr, out cdEntry);
code = m_freedb.Read(queryResult, out cdEntry);
if (code == FreedbHelper.ResponseCodes.CODE_210)
{
ReleaseInfo r = CreateCUESheet(audioSource, null, cdEntry);
releases.Add(r);
CUEMetadataEntry r = CreateCUESheet(audioSource, cdEntry);
data.Releases.Add(r);
}
}
else
if (code == FreedbHelper.ResponseCodes.CODE_210 ||
code == FreedbHelper.ResponseCodes.CODE_211)
{
foreach (QueryResult qr in coll)
{
CDEntry cdEntry;
MusicBrainz_LookupProgress(this, null);
code = m_freedb.Read(qr, out cdEntry);
if (code == FreedbHelper.ResponseCodes.CODE_210)
{
CUEMetadataEntry r = CreateCUESheet(audioSource, cdEntry);
data.Releases.Add(r);
}
}
}
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.Message);
}
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.Message);
}
if (releases.Count == 0)
if (data.Releases.Count == 0)
{
releases.Add(CreateCUESheet(audioSource, null, null));
data.Releases.Add(CreateCUESheet(audioSource));
}
_workThread = null;
if (musicbrainzError != "")
@@ -619,8 +589,8 @@ namespace CUERipper
this.BeginInvoke((MethodInvoker)delegate()
{
SetupControls();
releases.RaiseListChangedEvents = true;
releases.ResetBindings();
data.Releases.RaiseListChangedEvents = true;
data.Releases.ResetBindings();
//bnComboBoxRelease.SelectedIndex = 0;
toolStripStatusAr.Enabled = cueSheet.ArVerify.ARStatus == null;
toolStripStatusAr.Text = cueSheet.ArVerify.ARStatus == null ? cueSheet.ArVerify.WorstTotal().ToString() : "";
@@ -637,10 +607,12 @@ namespace CUERipper
private void UpdateDrive()
{
selectedDriveInfo = bnComboBoxDrives.SelectedItem as DriveInfo;
if (selectedDriveInfo == null)
if (bnComboBoxDrives.SelectedItem as DriveInfo == null)
return;
selectedDriveInfo = bnComboBoxDrives.SelectedItem as DriveInfo;
defaultDrive = selectedDriveInfo.Path;
toolStripStatusAr.Enabled = false;
toolStripStatusAr.Text = "";
toolStripStatusAr.ToolTipText = "";
@@ -652,7 +624,7 @@ namespace CUERipper
toolStripStatusLabelMusicBrainz.ToolTipText = "";
buttonGo.Enabled = false;
listTracks.Items.Clear();
releases.Clear();
data.Releases.Clear();
selectedRelease = null;
bnComboBoxRelease.Enabled = false;
bnComboBoxRelease.Text = "";
@@ -677,6 +649,7 @@ namespace CUERipper
numericWriteOffset.Value = selectedDriveInfo.drive.DriveOffset;
//selectedDriveInfo.drive.Close();
bnComboBoxRelease.Text = ex.Message;
//bnComboBoxRelease.Enabled = false;
return;
}
if (selectedDriveInfo.drive.TOC.AudioTracks == 0)
@@ -732,22 +705,21 @@ namespace CUERipper
{
if (selectedRelease == null) return;
bool isVarious = false;
for (int i = 0; i < selectedRelease.metadata.TOC.AudioTracks; i++)
for (int i = 0; i < selectedRelease.metadata.Tracks.Count; i++)
if (selectedRelease.metadata.Tracks[i].Artist != selectedRelease.metadata.Artist)
isVarious = true;
variousToolStripMenuItem.Enabled = selectedRelease.ImageKey == "freedb" && !isVarious;
ReleaseInfo r = new ReleaseInfo(_config, selectedRelease.metadata.TOC);
r.metadata.CopyMetadata(selectedRelease.metadata);
fixEncodingToolStripMenuItem.Enabled = selectedRelease.ImageKey == "freedb" && r.metadata.FreedbToEncoding();
CUEMetadata copy = new CUEMetadata(selectedRelease.metadata);
fixEncodingToolStripMenuItem.Enabled = selectedRelease.ImageKey == "freedb" && copy.FreedbToEncoding();
}
private void editToolStripMenuItem_Click(object sender, EventArgs e)
{
if (selectedRelease == null) return;
frmProperties frm = new frmProperties();
frm.CUE = selectedRelease.metadata;
frm.Metadata = selectedRelease.metadata;
frm.ShowDialog();
releases.ResetItem(bnComboBoxRelease.SelectedIndex);
data.Releases.ResetItem(bnComboBoxRelease.SelectedIndex);
comboBoxOutputFormat_TextUpdate(sender, e);
}
@@ -756,7 +728,7 @@ namespace CUERipper
if (selectedRelease == null) return;
selectedRelease.metadata.FreedbToVarious();
UpdateRelease();
releases.ResetItem(bnComboBoxRelease.SelectedIndex);
data.Releases.ResetItem(bnComboBoxRelease.SelectedIndex);
}
private void fixEncodingToolStripMenuItem_Click(object sender, EventArgs e)
@@ -764,10 +736,23 @@ namespace CUERipper
if (selectedRelease == null) return;
selectedRelease.metadata.FreedbToEncoding();
UpdateRelease();
releases.ResetItem(bnComboBoxRelease.SelectedIndex);
data.Releases.ResetItem(bnComboBoxRelease.SelectedIndex);
comboBoxOutputFormat_TextUpdate(sender, e);
}
private void reloadToolStripMenuItem_Click(object sender, EventArgs e)
{
loadAllMetadata = true;
data.Releases.Clear();
selectedRelease = null;
UpdateRelease();
_workThread = new Thread(Lookup);
_workThread.Priority = ThreadPriority.BelowNormal;
_workThread.IsBackground = true;
SetupControls();
_workThread.Start(selectedDriveInfo.drive);
}
private void frmCUERipper_FormClosed(object sender, FormClosedEventArgs e)
{
SettingsWriter sw = new SettingsWriter("CUERipper", "settings.txt", Application.ExecutablePath);
@@ -786,6 +771,8 @@ namespace CUERipper
for (int iFormat = bnComboBoxOutputFormat.Items.Count - 1; iFormat >= OutputPathUseTemplates.Length; iFormat--)
sw.Save(string.Format("OutputPathUseTemplate{0}", iFormat - OutputPathUseTemplates.Length), bnComboBoxOutputFormat.Items[iFormat].ToString());
if (defaultDrive != null)
sw.Save("DefaultDrive", defaultDrive);
sw.Close();
}
@@ -803,7 +790,7 @@ namespace CUERipper
}
set
{
foreach (FormatInfo fmt in formats)
foreach (FormatInfo fmt in data.Formats)
if (fmt.ToString() == value)
bnComboBoxFormat.SelectedItem = fmt;
}
@@ -823,11 +810,11 @@ namespace CUERipper
{
get
{
return (bnComboBoxLosslessOrNot.SelectedItem as BNComboBoxItem<AudioEncoderType>).Value;
return (bnComboBoxLosslessOrNot.SelectedItem as ImgComboBoxItem<AudioEncoderType>).Value;
}
set
{
foreach (BNComboBoxItem<AudioEncoderType> item in losslessOrNot)
foreach (ImgComboBoxItem<AudioEncoderType> item in data.LosslessOrNot)
if (value == item.Value)
{
bnComboBoxLosslessOrNot.SelectedItem = item;
@@ -842,7 +829,7 @@ namespace CUERipper
_config.createEACLOG = checkBoxEACMode.Checked;
}
private void comboBoxEncoder_SelectedIndexChanged(object sender, EventArgs e)
private void bnComboBoxEncoder_SelectedValueChanged(object sender, EventArgs e)
{
if (SelectedOutputAudioFormat == null)
return;
@@ -902,7 +889,10 @@ namespace CUERipper
private void frmCUERipper_KeyDown(object sender, KeyEventArgs e)
{
if (_workThread == null && e.KeyCode == Keys.F5)
{
loadAllMetadata = true;
UpdateDrives();
}
}
private void comboBoxOutputFormat_SelectedIndexChanged(object sender, EventArgs e)
@@ -913,17 +903,25 @@ namespace CUERipper
private void comboBoxOutputFormat_TextUpdate(object sender, EventArgs e)
{
if (selectedFormat == null) return;
if (selectedRelease == null)
{
txtOutputPath.Text = "";
return;
}
CUEStyle style = bnComboBoxImage.SelectedIndex == 0 ? CUEStyle.SingleFileWithCUE : CUEStyle.GapsAppended;
txtOutputPath.Text = selectedRelease == null ? "" : selectedRelease.metadata.GenerateUniqueOutputPath(bnComboBoxOutputFormat.Text,
CUESheet sheet = new CUESheet(_config);
sheet.TOC = selectedDriveInfo.drive.TOC;
sheet.CopyMetadata(selectedRelease.metadata);
txtOutputPath.Text = sheet.GenerateUniqueOutputPath(bnComboBoxOutputFormat.Text,
style == CUEStyle.SingleFileWithCUE ? "." + selectedFormat.ToString() : ".cue", CUEAction.Encode, null);
}
private void bnComboBoxRelease_SelectedIndexChanged(object sender, EventArgs e)
private void bnComboBoxRelease_SelectedValueChanged(object sender, EventArgs e)
{
UpdateRelease();
}
private void bnComboBoxDrives_SelectedIndexChanged(object sender, EventArgs e)
private void bnComboBoxDrives_SelectedValueChanged(object sender, EventArgs e)
{
if (_workThread == null)
UpdateDrive();
@@ -931,11 +929,11 @@ namespace CUERipper
private FormatInfo selectedFormat;
private void bnComboBoxFormat_SelectedIndexChanged(object sender, EventArgs e)
private void bnComboBoxFormat_SelectedValueChanged(object sender, EventArgs e)
{
selectedFormat = bnComboBoxFormat.SelectedItem as FormatInfo;
encoders.Clear();
data.Encoders.Clear();
if (SelectedOutputAudioFmt == null)
return;
@@ -952,7 +950,7 @@ namespace CUERipper
break;
}
encoders.RaiseListChangedEvents = false;
data.Encoders.RaiseListChangedEvents = false;
foreach (CUEToolsUDC encoder in _config.encoders)
if (encoder.extension == SelectedOutputAudioFmt.extension)
@@ -961,24 +959,24 @@ namespace CUERipper
continue;
if (SelectedOutputAudioType == AudioEncoderType.Lossy && (encoder.lossless && !selectedFormat.lossyWAV))
continue;
encoders.Add(encoder);
data.Encoders.Add(encoder);
}
CUEToolsUDC select = SelectedOutputAudioFormat.StartsWith("lossy.") ? SelectedOutputAudioFmt.encoderLossless
: SelectedOutputAudioType == AudioEncoderType.Lossless ? SelectedOutputAudioFmt.encoderLossless
: SelectedOutputAudioFmt.encoderLossy;
encoders.RaiseListChangedEvents = true;
encoders.ResetBindings();
data.Encoders.RaiseListChangedEvents = true;
data.Encoders.ResetBindings();
bnComboBoxEncoder.SelectedItem = select;
comboBoxOutputFormat_TextUpdate(sender, e);
}
private void bnComboBoxLosslessOrNot_SelectedIndexChanged(object sender, EventArgs e)
private void bnComboBoxLosslessOrNot_SelectedValueChanged(object sender, EventArgs e)
{
if (bnComboBoxLosslessOrNot.SelectedItem == null) return;
formats.Clear();
formats.RaiseListChangedEvents = false;
data.Formats.Clear();
data.Formats.RaiseListChangedEvents = false;
foreach (KeyValuePair<string, CUEToolsFormat> format in _config.formats)
{
if (SelectedOutputAudioType == AudioEncoderType.Lossless && !format.Value.allowLossless)
@@ -987,7 +985,7 @@ namespace CUERipper
continue;
if (SelectedOutputAudioType == AudioEncoderType.Lossy && !format.Value.allowLossy)
continue;
formats.Add(new FormatInfo(format.Value, false));
data.Formats.Add(new FormatInfo(format.Value, false));
}
foreach (KeyValuePair<string, CUEToolsFormat> format in _config.formats)
{
@@ -997,7 +995,7 @@ namespace CUERipper
continue;
if (SelectedOutputAudioType == AudioEncoderType.NoAudio)
continue;
formats.Add(new FormatInfo(format.Value, true));
data.Formats.Add(new FormatInfo(format.Value, true));
}
string select = null;
switch (SelectedOutputAudioType)
@@ -1012,8 +1010,8 @@ namespace CUERipper
select = _defaultHybridFormat;
break;
}
formats.RaiseListChangedEvents = true;
formats.ResetBindings();
data.Formats.RaiseListChangedEvents = true;
data.Formats.ResetBindings();
SelectedOutputAudioFormat = select;
}
@@ -1045,7 +1043,7 @@ namespace CUERipper
private void bnComboBoxOutputFormat_DroppedDown(object sender, EventArgs e)
{
if (!outputFormatVisible || bnComboBoxOutputFormat.IsDroppedDown || bnComboBoxOutputFormat.Focused)
if (!outputFormatVisible || bnComboBoxOutputFormat.DroppedDown || bnComboBoxOutputFormat.Focused)
return;
outputFormatVisible = false;
bnComboBoxOutputFormat.Visible = false;
@@ -1123,34 +1121,6 @@ namespace CUERipper
}
}
public class ReleaseInfo
{
public CUESheet metadata;
private string imageKey;
public string ImageKey
{
get
{
return imageKey;
}
set
{
imageKey = value;
}
}
public ReleaseInfo(CUEConfig config, CDImageLayout TOC)
{
metadata = new CUESheet(config);
metadata.TOC = TOC;
}
public override string ToString()
{
return string.Format("{0}{1} - {2}", metadata.Year != "" ? metadata.Year + ": " : "", metadata.Artist, metadata.Title);
}
}
public class DriveInfo
{
public ICDRipper drive;
@@ -1158,6 +1128,14 @@ namespace CUERipper
DirectoryInfo di;
CUEControls.IIconManager iconMgr;
public string Path
{
get
{
return di.FullName;
}
}
public int ImageKey
{
get
@@ -1185,4 +1163,66 @@ namespace CUERipper
return drive != null ? drive.Path : this.di.FullName + ": " + error;
}
}
internal class CUERipperData
{
private BindingList<string> cueStyles = new BindingList<string> { "image", "tracks" };
//private BindingList<string> losslessOrNot = new BindingList<string> { "lossless", "lossy" };
private BindingList<ImgComboBoxItem<AudioEncoderType>> losslessOrNot = new BindingList<ImgComboBoxItem<AudioEncoderType>> {
new ImgComboBoxItem<AudioEncoderType>("lossless", "checked", AudioEncoderType.Lossless),
new ImgComboBoxItem<AudioEncoderType>("lossy", "unchecked", AudioEncoderType.Lossy)
};
private BindingList<CUEMetadataEntry> releases = new BindingList<CUEMetadataEntry>();
private BindingList<DriveInfo> drives = new BindingList<DriveInfo>();
private BindingList<FormatInfo> formats = new BindingList<FormatInfo>();
private BindingList<CUEToolsUDC> encoders = new BindingList<CUEToolsUDC>();
public BindingList<string> CUEStyles
{
get
{
return cueStyles;
}
}
public BindingList<ImgComboBoxItem<AudioEncoderType>> LosslessOrNot
{
get
{
return losslessOrNot;
}
}
public BindingList<CUEMetadataEntry> Releases
{
get
{
return releases;
}
}
public BindingList<DriveInfo> Drives
{
get
{
return drives;
}
}
public BindingList<FormatInfo> Formats
{
get
{
return formats;
}
}
public BindingList<CUEToolsUDC> Encoders
{
get
{
return encoders;
}
}
}
}

View File

@@ -360,25 +360,31 @@
<value>17, 17</value>
</metadata>
<data name="editToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>152, 22</value>
<value>149, 22</value>
</data>
<data name="editToolStripMenuItem.Text" xml:space="preserve">
<value>Edit</value>
</data>
<data name="variousToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>152, 22</value>
<value>149, 22</value>
</data>
<data name="variousToolStripMenuItem.Text" xml:space="preserve">
<value>Various Artists</value>
</data>
<data name="fixEncodingToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>152, 22</value>
<value>149, 22</value>
</data>
<data name="fixEncodingToolStripMenuItem.Text" xml:space="preserve">
<value>Fix Encoding</value>
</data>
<data name="reloadToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>149, 22</value>
</data>
<data name="reloadToolStripMenuItem.Text" xml:space="preserve">
<value>Reload</value>
</data>
<data name="contextMenuStripRelease.Size" type="System.Drawing.Size, System.Drawing">
<value>153, 92</value>
<value>150, 92</value>
</data>
<data name="&gt;&gt;contextMenuStripRelease.Name" xml:space="preserve">
<value>contextMenuStripRelease</value>
@@ -479,25 +485,20 @@
<data name="bnComboBoxLosslessOrNot.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 19</value>
</data>
<data name="bnComboBoxLosslessOrNot.Radius" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEJDVUVDb250cm9scywgVmVyc2lvbj0yLjAuOC4wLCBDdWx0dXJl
PW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABRDVUVDb250cm9scy5CTlJhZGl1cwQAAAAI
X3RvcExlZnQJX3RvcFJpZ2h0C19ib3R0b21MZWZ0DF9ib3R0b21SaWdodAAAAAAICAgIAgAAAAIAAAAG
AAAAAgAAAAIAAAAL
</value>
</data>
<data name="bnComboBoxLosslessOrNot.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 21</value>
</data>
<data name="bnComboBoxLosslessOrNot.TabIndex" type="System.Int32, mscorlib">
<value>39</value>
</data>
<data name="bnComboBoxLosslessOrNot.Text" xml:space="preserve">
<value>lossless</value>
</data>
<data name="&gt;&gt;bnComboBoxLosslessOrNot.Name" xml:space="preserve">
<value>bnComboBoxLosslessOrNot</value>
</data>
<data name="&gt;&gt;bnComboBoxLosslessOrNot.Type" xml:space="preserve">
<value>CUEControls.BNComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null</value>
<value>CUEControls.ImgComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;bnComboBoxLosslessOrNot.Parent" xml:space="preserve">
<value>groupBoxSettings</value>
@@ -511,25 +512,20 @@
<data name="bnComboBoxEncoder.Location" type="System.Drawing.Point, System.Drawing">
<value>92, 46</value>
</data>
<data name="bnComboBoxEncoder.Radius" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEJDVUVDb250cm9scywgVmVyc2lvbj0yLjAuOC4wLCBDdWx0dXJl
PW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABRDVUVDb250cm9scy5CTlJhZGl1cwQAAAAI
X3RvcExlZnQJX3RvcFJpZ2h0C19ib3R0b21MZWZ0DF9ib3R0b21SaWdodAAAAAAICAgIAgAAAAIAAAAG
AAAAAgAAAAIAAAAL
</value>
</data>
<data name="bnComboBoxEncoder.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 21</value>
</data>
<data name="bnComboBoxEncoder.TabIndex" type="System.Int32, mscorlib">
<value>38</value>
</data>
<data name="bnComboBoxEncoder.Text" xml:space="preserve">
<value>libFlac</value>
</data>
<data name="&gt;&gt;bnComboBoxEncoder.Name" xml:space="preserve">
<value>bnComboBoxEncoder</value>
</data>
<data name="&gt;&gt;bnComboBoxEncoder.Type" xml:space="preserve">
<value>CUEControls.BNComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null</value>
<value>CUEControls.ImgComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;bnComboBoxEncoder.Parent" xml:space="preserve">
<value>groupBoxSettings</value>
@@ -570,25 +566,20 @@
<data name="bnComboBoxFormat.Location" type="System.Drawing.Point, System.Drawing">
<value>92, 19</value>
</data>
<data name="bnComboBoxFormat.Radius" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEJDVUVDb250cm9scywgVmVyc2lvbj0yLjAuOC4wLCBDdWx0dXJl
PW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABRDVUVDb250cm9scy5CTlJhZGl1cwQAAAAI
X3RvcExlZnQJX3RvcFJpZ2h0C19ib3R0b21MZWZ0DF9ib3R0b21SaWdodAAAAAAICAgIAgAAAAIAAAAG
AAAAAgAAAAIAAAAL
</value>
</data>
<data name="bnComboBoxFormat.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 21</value>
</data>
<data name="bnComboBoxFormat.TabIndex" type="System.Int32, mscorlib">
<value>37</value>
</data>
<data name="bnComboBoxFormat.Text" xml:space="preserve">
<value>flac</value>
</data>
<data name="&gt;&gt;bnComboBoxFormat.Name" xml:space="preserve">
<value>bnComboBoxFormat</value>
</data>
<data name="&gt;&gt;bnComboBoxFormat.Type" xml:space="preserve">
<value>CUEControls.BNComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null</value>
<value>CUEControls.ImgComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;bnComboBoxFormat.Parent" xml:space="preserve">
<value>groupBoxSettings</value>
@@ -641,25 +632,20 @@
<data name="bnComboBoxImage.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 46</value>
</data>
<data name="bnComboBoxImage.Radius" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEJDVUVDb250cm9scywgVmVyc2lvbj0yLjAuOC4wLCBDdWx0dXJl
PW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABRDVUVDb250cm9scy5CTlJhZGl1cwQAAAAI
X3RvcExlZnQJX3RvcFJpZ2h0C19ib3R0b21MZWZ0DF9ib3R0b21SaWdodAAAAAAICAgIAgAAAAIAAAAG
AAAAAgAAAAIAAAAL
</value>
</data>
<data name="bnComboBoxImage.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 21</value>
</data>
<data name="bnComboBoxImage.TabIndex" type="System.Int32, mscorlib">
<value>34</value>
</data>
<data name="bnComboBoxImage.Text" xml:space="preserve">
<value>image</value>
</data>
<data name="&gt;&gt;bnComboBoxImage.Name" xml:space="preserve">
<value>bnComboBoxImage</value>
</data>
<data name="&gt;&gt;bnComboBoxImage.Type" xml:space="preserve">
<value>CUEControls.BNComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null</value>
<value>CUEControls.ImgComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;bnComboBoxImage.Parent" xml:space="preserve">
<value>groupBoxSettings</value>
@@ -814,6 +800,9 @@
<data name="&gt;&gt;groupBoxSettings.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<metadata name="drivesBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>998, 56</value>
</metadata>
<metadata name="imageListChecked.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>207, 17</value>
</metadata>
@@ -965,8 +954,8 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAa
CQAAAk1TRnQBSQFMAgEBAgEAAQQBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAS
CgAAAk1TRnQBSQFMAgEBAwEAAQQBAAEEAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@@ -996,34 +985,34 @@
AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw
AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wIAAXoCUQt6AQAB7Q8K
IAABUQEAAREBEwEAAQ8KegG1BAQD8wEEA/MCBAFfAQohAAG8A/8BEwEPCXoBtQMEAfQCBAH0AQQB9AIE
AfQCBAEKIQABvAT/AQAJegG1AaICBAH/AgQB/wEEAf8CBAH/AgQBCiAAAVEBDwHrAgcBvAEAAREEAAER
A3oBtQGiAwQD/wEEA/8DBAEKIAABegFRAQ8CAAH/AQABDwH3Av8BkgIRAnoBtQGiBQQB/wEEAf8FBAEK
IAAEegEAAf8BAAERBP8BvAEAAnoBtQGiBQQB/wEEAf8FBAEKIAAErgEAAf8CAAETAbwD/wEAAq4BtQGi
DQQBCiAABK4BAAH/AQABEgEPAwAB/wEAAq4N/wH0AfMB7CAABK4BAAH/AQ8BAAERAhIBAAH/AQACrgH/
AaIC/wEEA/8CBAP/AgQB7CAABK4BAAL/AZIBEQEAAQ8BAAH/AQACrgH/AaIC/wEEAv8BBAT/AQQB9AHz
AewgAASuAQABBwP/AbwB6gEAAf8BAAKuAf8BogL/AQQC/wQEAf8DBAEKIAAErgERARMBBwb/AQACrgH/
AaIBBAH/AQQC/wEEAv8BBAH/AQQB9AHzAQogAAWuAREBAAERAZIE/wEAAq4B/wGGAv8CBAL/AgQD/wIE
AewgAAeuAREBAAEPAesBvAH/AQACrgH/AYYL/wH0AfMB7CEACa4BDwEAARMBEQGuAQAC/wG1C/8B9AEH
IAABQgFNAT4HAAE+AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEAAYABAXYAAYABAQYACw==
AfQCBAEKAfEC7gHyAQAB8gTuAfIBAAHyAu4B8REAAbwE/wEACXoBtQGiAgQB/wIEAf8BBAH/AgQB/wIE
AQoBvAH1AfQDBwT0AwcB9AH1AbwQAAFRAQ8B6wIHAbwBAAERBAABEQN6AbUBogMEA/8BBAP/AwQBCgHw
AfQC8wH0BvMB9ALzAfQB8BAAAXoBUQEPAgAB/wEAAQ8B9wL/AZICEQJ6AbUBogUEAf8BBAH/BQQBCgHw
AfQM8wH0AfAQAAR6AQAB/wEAAREE/wG8AQACegG1AaIFBAH/AQQB/wUEAQoB8AH0DPMB9AHwEAAErgEA
Af8CAAETAbwD/wEAAq4BtQGiDQQBCgHxAfUF9AEAAXMB7gT0AfUB8RAABK4BAAH/AQABEgEPAwAB/wEA
Aq4N/wH0AfMB7AHyAfUF9AEcAcMBUQEIA/QB9QHyEAAErgEAAf8BDwEAARECEgEAAf8BAAKuAf8BogL/
AQQD/wIEA/8CBAHsAfIG9QEbAVgBegFRAQgD9QHyEAAErgEAAv8BkgERAQABDwEAAf8BAAKuAf8BogL/
AQQC/wEEBP8BBAH0AfMB7AHyAf8G9QEaAVgBegFRARoB9QH/AfIQAASuAQABBwP/AbwB6gEAAf8BAAKu
Af8BogL/AQQC/wQEAf8DBAEKAfII/wEaAVgBegFRARoB/wHyEAAErgERARMBBwb/AQACrgH/AaIBBAH/
AQQC/wEEAv8BBAH/AQQB9AHzAQoB8gn/ARsBWAF6Ae0B8AHyEAAFrgERAQABEQGSBP8BAAKuAf8BhgL/
AgQC/wIEA/8CBAHsAfMK8gHwAe8B9AHtAbwQAAeuAREBAAEPAesBvAH/AQACrgH/AYYL/wH0AfMB7AwA
AfQB7gEWAW8RAAmuAQ8BAAETAREBrgEAAv8BtQv/AfQBBw0AAfQBFgHzEAABQgFNAT4HAAE+AwABKAMA
AUADAAEQAwABAQEAAQEFAAGAFwAD/wEAAYABAQIAAv8GAAL/BgABCAEQXgAB/wHwAgABgAEBAgAB/wH4
AgAL
</value>
</data>
<data name="bnComboBoxRelease.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 33</value>
</data>
<data name="bnComboBoxRelease.Radius" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEJDVUVDb250cm9scywgVmVyc2lvbj0yLjAuOC4wLCBDdWx0dXJl
PW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABRDVUVDb250cm9scy5CTlJhZGl1cwQAAAAI
X3RvcExlZnQJX3RvcFJpZ2h0C19ib3R0b21MZWZ0DF9ib3R0b21SaWdodAAAAAAICAgIAgAAAAIAAAAG
AAAAAgAAAAIAAAAL
</value>
</data>
<data name="bnComboBoxRelease.Size" type="System.Drawing.Size, System.Drawing">
<value>552, 21</value>
</data>
<data name="bnComboBoxRelease.TabIndex" type="System.Int32, mscorlib">
<value>35</value>
</data>
<data name="bnComboBoxRelease.Text" xml:space="preserve">
<value>Releases</value>
</data>
<data name="bnComboBoxRelease.ToolTip" xml:space="preserve">
<value>Right-lick to edit release info</value>
</data>
@@ -1031,7 +1020,7 @@
<value>bnComboBoxRelease</value>
</data>
<data name="&gt;&gt;bnComboBoxRelease.Type" xml:space="preserve">
<value>CUEControls.BNComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null</value>
<value>CUEControls.ImgComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;bnComboBoxRelease.Parent" xml:space="preserve">
<value>$this</value>
@@ -1039,31 +1028,23 @@
<data name="&gt;&gt;bnComboBoxRelease.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<metadata name="drivesBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>998, 56</value>
</metadata>
<data name="bnComboBoxDrives.Location" type="System.Drawing.Point, System.Drawing">
<value>6, 6</value>
</data>
<data name="bnComboBoxDrives.Radius" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAEJDVUVDb250cm9scywgVmVyc2lvbj0yLjAuOC4wLCBDdWx0dXJl
PW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABRDVUVDb250cm9scy5CTlJhZGl1cwQAAAAI
X3RvcExlZnQJX3RvcFJpZ2h0C19ib3R0b21MZWZ0DF9ib3R0b21SaWdodAAAAAAICAgIAgAAAAIAAAAG
AAAAAgAAAAIAAAAL
</value>
</data>
<data name="bnComboBoxDrives.Size" type="System.Drawing.Size, System.Drawing">
<value>552, 21</value>
</data>
<data name="bnComboBoxDrives.TabIndex" type="System.Int32, mscorlib">
<value>36</value>
</data>
<data name="bnComboBoxDrives.Text" xml:space="preserve">
<value>Drives</value>
</data>
<data name="&gt;&gt;bnComboBoxDrives.Name" xml:space="preserve">
<value>bnComboBoxDrives</value>
</data>
<data name="&gt;&gt;bnComboBoxDrives.Type" xml:space="preserve">
<value>CUEControls.BNComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null</value>
<value>CUEControls.ImgComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;bnComboBoxDrives.Parent" xml:space="preserve">
<value>$this</value>
@@ -1074,14 +1055,6 @@
<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/////AQAAAAAAAAAMAgAAAEJDVUVDb250cm9scywgVmVyc2lvbj0yLjAuOC4wLCBDdWx0dXJl
PW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABRDVUVDb250cm9scy5CTlJhZGl1cwQAAAAI
X3RvcExlZnQJX3RvcFJpZ2h0C19ib3R0b21MZWZ0DF9ib3R0b21SaWdodAAAAAAICAgIAgAAAAIAAAAG
AAAAAgAAAAIAAAAL
</value>
</data>
<data name="bnComboBoxOutputFormat.Size" type="System.Drawing.Size, System.Drawing">
<value>552, 21</value>
</data>
@@ -1092,7 +1065,7 @@
<value>bnComboBoxOutputFormat</value>
</data>
<data name="&gt;&gt;bnComboBoxOutputFormat.Type" xml:space="preserve">
<value>CUEControls.BNComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null</value>
<value>CUEControls.ImgComboBox, CUEControls, Version=2.0.8.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;bnComboBoxOutputFormat.Parent" xml:space="preserve">
<value>$this</value>
@@ -1593,6 +1566,12 @@
<data name="&gt;&gt;fixEncodingToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;reloadToolStripMenuItem.Name" xml:space="preserve">
<value>reloadToolStripMenuItem</value>
</data>
<data name="&gt;&gt;reloadToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;losslessOrNotBindingSource.Name" xml:space="preserve">
<value>losslessOrNotBindingSource</value>
</data>
@@ -1623,6 +1602,12 @@
<data name="&gt;&gt;cUEStylesBindingSource.Type" xml:space="preserve">
<value>System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;drivesBindingSource.Name" xml:space="preserve">
<value>drivesBindingSource</value>
</data>
<data name="&gt;&gt;drivesBindingSource.Type" xml:space="preserve">
<value>System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;imageListChecked.Name" xml:space="preserve">
<value>imageListChecked</value>
</data>
@@ -1683,12 +1668,6 @@
<data name="&gt;&gt;imageListMetadataSource.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;drivesBindingSource.Name" xml:space="preserve">
<value>drivesBindingSource</value>
</data>
<data name="&gt;&gt;drivesBindingSource.Type" xml:space="preserve">
<value>System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>frmCUERipper</value>
</data>

View File

@@ -18,41 +18,27 @@ namespace CUETools.Processor
private void frmProperties_Load(object sender, EventArgs e)
{
textArtist.Text = _cueSheet.Artist;
textTitle.Text = _cueSheet.Title;
textYear.Text = _cueSheet.Year;
textGenre.Text = _cueSheet.Genre;
textCatalog.Text = _cueSheet.Catalog;
textBoxDiscNumber.Text = _cueSheet.DiscNumber;
textBoxTotalDiscs.Text = _cueSheet.TotalDiscs;
textArtist.Text = Metadata.Artist;
textTitle.Text = Metadata.Title;
textYear.Text = Metadata.Year;
textGenre.Text = Metadata.Genre;
textCatalog.Text = Metadata.Catalog;
textBoxDiscNumber.Text = Metadata.DiscNumber;
textBoxTotalDiscs.Text = Metadata.TotalDiscs;
}
public CUESheet CUE
{
get
{
return _cueSheet;
}
set
{
_cueSheet = value;
}
}
CUESheet _cueSheet;
public CUEMetadata Metadata { get; set; }
private void button1_Click(object sender, EventArgs e)
{
foreach (TrackInfo track in _cueSheet.Tracks)
if (track.Artist == _cueSheet.Artist)
track.Artist = textArtist.Text;
_cueSheet.Artist = textArtist.Text;
_cueSheet.Title = textTitle.Text;
_cueSheet.Year = textYear.Text;
_cueSheet.Genre = textGenre.Text;
_cueSheet.Catalog = textCatalog.Text;
_cueSheet.DiscNumber = textBoxDiscNumber.Text;
_cueSheet.TotalDiscs = textBoxTotalDiscs.Text;
Metadata.Tracks.ForEach(track => track.Artist = track.Artist == Metadata.Artist ? textArtist.Text : track.Artist);
Metadata.Artist = textArtist.Text;
Metadata.Title = textTitle.Text;
Metadata.Year = textYear.Text;
Metadata.Genre = textGenre.Text;
Metadata.Catalog = textCatalog.Text;
Metadata.DiscNumber = textBoxDiscNumber.Text;
Metadata.TotalDiscs = textBoxTotalDiscs.Text;
}
}
}

View File

@@ -1054,7 +1054,7 @@ namespace CUETools.AccurateRip
public static bool FindDriveReadOffset(string driveName, out int driveReadOffset)
{
string fileName = System.IO.Path.Combine(CachePath, "DriveOffsets.bin");
if (!File.Exists(fileName) || (DateTime.Now - File.GetLastWriteTime(fileName) > TimeSpan.FromDays(1)) )
if (!File.Exists(fileName) || (DateTime.Now - File.GetLastWriteTime(fileName) > TimeSpan.FromDays(10)) )
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.accuraterip.com/accuraterip/DriveOffsets.bin");
req.Method = "GET";

View File

@@ -69,6 +69,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="AudioReadWrite.cs" />
<Compile Include="CUEMetadata.cs" />
<Compile Include="Processor.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Settings.cs" />

View File

@@ -1045,6 +1045,7 @@ namespace CUETools.Processor
encoders.Add(new CUEToolsUDC("lame cbr", "mp3", false, "96 128 192 256 320", "256", "lame.exe", "-m s -q 0 -b %M --noreplaygain - %O"));
encoders.Add(new CUEToolsUDC("oggenc", "ogg", false, "-1 -0.5 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8", "3", "oggenc.exe", "-q %M - -o %O"));
encoders.Add(new CUEToolsUDC("nero aac", "m4a", false, "0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9", "0.4", "neroAacEnc.exe", "-q %M -if - -of %O"));
encoders.Add(new CUEToolsUDC("qaac tvbr", "m4a", false, "10 20 30 40 50 60 70 80 90 100 110 127", "80", "qaac.exe", "-s -V %M -q 2 - -o %O"));
decoders.Add("takc", new CUEToolsUDC("takc", "tak", true, "", "", "takc.exe", "-d %I -"));
decoders.Add("ffmpeg alac", new CUEToolsUDC("ffmpeg alac", "m4a", true, "", "", "ffmpeg.exe", "%I -f wav -"));
@@ -1638,6 +1639,7 @@ string status = processor.Go();
private List<TagLib.IPicture> _albumArt = new List<TagLib.IPicture>();
private int _padding = 8192;
private IWebProxy proxy;
private CUEMetadata taglibMetadata;
public event EventHandler<CompressionPasswordRequiredEventArgs> PasswordRequired;
public event EventHandler<CUEToolsProgressEventArgs> CUEToolsProgress;
@@ -1748,6 +1750,7 @@ string status = processor.Go();
Genre = metadata.Genre;
Artist = metadata.Artist;
Title = metadata.Title;
Catalog = metadata.Catalog;
for (int i = 0; i < Tracks.Count; i++)
{
Tracks[i].Title = metadata.Tracks[i].Title;
@@ -1755,6 +1758,45 @@ string status = processor.Go();
}
}
public void CopyMetadata(CUEMetadata metadata)
{
TotalDiscs = metadata.TotalDiscs;
DiscNumber = metadata.DiscNumber;
Year = metadata.Year;
Genre = metadata.Genre;
Artist = metadata.Artist;
Title = metadata.Title;
Catalog = metadata.Catalog;
for (int i = 0; i < Tracks.Count; i++)
{
Tracks[i].Title = metadata.Tracks[i].Title;
Tracks[i].Artist = metadata.Tracks[i].Artist;
// ISRC?
}
}
public CUEMetadata Metadata
{
get
{
CUEMetadata metadata = new CUEMetadata(TOC.TOCID, (int)TOC.AudioTracks);
metadata.TotalDiscs = TotalDiscs;
metadata.DiscNumber = DiscNumber;
metadata.Year = Year;
metadata.Genre = Genre;
metadata.Artist = Artist;
metadata.Title = Title;
metadata.Catalog = Catalog;
for (int i = 0; i < Tracks.Count; i++)
{
metadata.Tracks[i].Title = Tracks[i].Title;
metadata.Tracks[i].Artist = Tracks[i].Artist;
// ISRC?
}
return metadata;
}
}
public void FillFromMusicBrainz(MusicBrainz.Release release)
{
string date = release.GetEvents().Count > 0 ? release.GetEvents()[0].Date : null;
@@ -1818,9 +1860,28 @@ string status = processor.Go();
}
}
public List<object> LookupAlbumInfo(bool useFreedb, bool useMusicBrainz)
public List<object> LookupAlbumInfo(bool useFreedb, bool useMusicBrainz, bool useCache)
{
List<object> Releases = new List<object>();
StringCollection DiscIds = new StringCollection();
DiscIds.Add(_toc.MusicBrainzId);
if (useCache)
{
try
{
CUEMetadata cache = CUEMetadata.Load(TOC.TOCID);
if (cache != null)
Releases.Add(new CUEMetadataEntry(cache, TOC, "local"));
}
catch (Exception ex)
{
System.Diagnostics.Trace.WriteLine(ex.Message);
}
}
Releases.Add(new CUEMetadataEntry(Metadata, TOC, "cue"));
Releases.Add(new CUEMetadataEntry(new CUEMetadata(taglibMetadata), TOC, "tags"));
if (useFreedb)
{
@@ -1846,7 +1907,14 @@ string status = processor.Go();
ShowProgress("Looking up album via Freedb... " + queryResult.Discid, 0.5, null, null);
code = m_freedb.Read(queryResult, out cdEntry);
if (code == FreedbHelper.ResponseCodes.CODE_210)
Releases.Add(cdEntry);
{
CUEMetadata metadata = new CUEMetadata(TOC.TOCID, (int)TOC.AudioTracks);
metadata.FillFromFreedb(cdEntry, TOC.FirstAudio - 1);
CDImageLayout toc = TocFromCDEntry(cdEntry);
if (!DiscIds.Contains(toc.MusicBrainzId))
DiscIds.Add(toc.MusicBrainzId);
Releases.Add(new CUEMetadataEntry(metadata, toc, "freedb"));
}
}
else
if (code == FreedbHelper.ResponseCodes.CODE_210 ||
@@ -1859,7 +1927,14 @@ string status = processor.Go();
CheckStop();
code = m_freedb.Read(qr, out cdEntry);
if (code == FreedbHelper.ResponseCodes.CODE_210)
Releases.Add(cdEntry);
{
CUEMetadata metadata = new CUEMetadata(TOC.TOCID, (int)TOC.AudioTracks);
metadata.FillFromFreedb(cdEntry, TOC.FirstAudio - 1);
CDImageLayout toc = TocFromCDEntry(cdEntry);
if (!DiscIds.Contains(toc.MusicBrainzId))
DiscIds.Add(toc.MusicBrainzId);
Releases.Add(new CUEMetadataEntry(metadata, toc,"freedb"));
}
}
}
}
@@ -1874,16 +1949,8 @@ string status = processor.Go();
{
ShowProgress("Looking up album via MusicBrainz...", 0.0, null, null);
StringCollection DiscIds = new StringCollection();
DiscIds.Add(_toc.MusicBrainzId);
//if (_tocFromLog != null && !DiscIds.Contains(_tocFromLog.MusicBrainzId))
// DiscIds.Add(_tocFromLog.MusicBrainzId);
foreach (CDEntry cdEntry in Releases)
{
CDImageLayout toc = TocFromCDEntry(cdEntry);
if (!DiscIds.Contains(toc.MusicBrainzId))
DiscIds.Add(toc.MusicBrainzId);
}
MusicBrainzService.XmlRequest += new EventHandler<XmlRequestEventArgs>(MusicBrainz_LookupProgress);
foreach (string DiscId in DiscIds)
@@ -1909,7 +1976,9 @@ string status = processor.Go();
;
}
catch { }
Releases.Add(release);
CUEMetadata metadata = new CUEMetadata(TOC.TOCID, (int)TOC.AudioTracks);
metadata.FillFromMusicBrainz(release, TOC.FirstAudio - 1);
Releases.Add(new CUEMetadataEntry(metadata, TOC, "musicbrainz"));
}
}
catch (Exception ex)
@@ -2499,59 +2568,44 @@ string status = processor.Go();
_fileInfo = _tracks[0]._fileInfo;
_tracks[0]._fileInfo = null;
}
taglibMetadata = new CUEMetadata(TOC.TOCID, (int)TOC.AudioTracks);
taglibMetadata.Artist = GetCommonTag(file => file.Tag.JoinedAlbumArtists) ?? GetCommonTag(file => file.Tag.JoinedPerformers) ?? "";
taglibMetadata.Title = GetCommonTag(file => file.Tag.Album) ?? "";
taglibMetadata.Year = GetCommonTag(file => file.Tag.Year != 0 ? file.Tag.Year.ToString() : null) ?? "";
taglibMetadata.Genre = GetCommonTag(file => file.Tag.JoinedGenres) ?? "";
taglibMetadata.TotalDiscs = GetCommonTag(file => file.Tag.DiscCount != 0 ? file.Tag.DiscCount.ToString() : null) ?? "";
taglibMetadata.DiscNumber = GetCommonTag(file => file.Tag.Disc != 0 ? file.Tag.Disc.ToString() : null) ?? "";
for (i = 0; i < TrackCount; i++)
{
TrackInfo track = _tracks[i];
taglibMetadata.Tracks[i].Artist = (_hasTrackFilenames && track._fileInfo != null ? track._fileInfo.Tag.JoinedPerformers :
_hasEmbeddedCUESheet && _fileInfo != null ? Tagging.TagListToSingleValue(Tagging.GetMiscTag(_fileInfo, String.Format("cue_track{0:00}_ARTIST", i + 1))) :
null) ?? "";
taglibMetadata.Tracks[i].Title = (_hasTrackFilenames && track._fileInfo != null ? track._fileInfo.Tag.Title :
_hasEmbeddedCUESheet && _fileInfo != null ? Tagging.TagListToSingleValue(Tagging.GetMiscTag(_fileInfo, String.Format("cue_track{0:00}_TITLE", i + 1))) :
null) ?? "";
}
if (_config.fillUpCUE)
{
if (_config.overwriteCUEData || General.FindCUELine(_attributes, "PERFORMER") == null)
{
string value = GetCommonTag(delegate(TagLib.File file) { return file.Tag.JoinedAlbumArtists; });
if (value == null)
value = GetCommonTag(delegate(TagLib.File file) { return file.Tag.JoinedPerformers; });
if (value != null && value != "")
General.SetCUELine(_attributes, "PERFORMER", value, true);
}
if (_config.overwriteCUEData || General.FindCUELine(_attributes, "TITLE") == null)
{
string value = GetCommonTag(delegate(TagLib.File file) { return file.Tag.Album; });
if (value != null)
General.SetCUELine(_attributes, "TITLE", value, true);
}
if (_config.overwriteCUEData || General.FindCUELine(_attributes, "REM", "DATE") == null)
{
string value = GetCommonTag(delegate(TagLib.File file) { return file.Tag.Year != 0 ? file.Tag.Year.ToString() : null; });
if (value != null)
General.SetCUELine(_attributes, "REM", "DATE", value, false);
}
if (_config.overwriteCUEData || General.FindCUELine(_attributes, "REM", "GENRE") == null)
{
string value = GetCommonTag(delegate(TagLib.File file) { return file.Tag.JoinedGenres; });
if (value != null)
General.SetCUELine(_attributes, "REM", "GENRE", value, true);
}
if (_config.overwriteCUEData || TotalDiscs == "")
{
string value = GetCommonTag(delegate(TagLib.File file) { return file.Tag.DiscCount != 0 ? file.Tag.DiscCount.ToString() : null; });
if (value != null)
TotalDiscs = value;
}
if (_config.overwriteCUEData || DiscNumber == "")
{
string value = GetCommonTag(delegate(TagLib.File file) { return file.Tag.Disc != 0 ? file.Tag.Disc.ToString() : null; });
if (value != null)
DiscNumber = value;
}
if ((_config.overwriteCUEData || General.FindCUELine(_attributes, "PERFORMER") == null) && taglibMetadata.Artist != "")
General.SetCUELine(_attributes, "PERFORMER", taglibMetadata.Artist, true);
if ((_config.overwriteCUEData || General.FindCUELine(_attributes, "TITLE") == null) && taglibMetadata.Title != "")
General.SetCUELine(_attributes, "TITLE", taglibMetadata.Title, true);
if ((_config.overwriteCUEData || General.FindCUELine(_attributes, "REM", "DATE") == null) && taglibMetadata.Year != "")
General.SetCUELine(_attributes, "REM", "DATE", taglibMetadata.Year, false);
if ((_config.overwriteCUEData || General.FindCUELine(_attributes, "REM", "GENRE") == null) && taglibMetadata.Genre != "")
General.SetCUELine(_attributes, "REM", "GENRE", taglibMetadata.Genre, true);
if ((_config.overwriteCUEData || TotalDiscs == "") && taglibMetadata.TotalDiscs != "")
TotalDiscs = taglibMetadata.TotalDiscs;
if ((_config.overwriteCUEData || DiscNumber == "") && taglibMetadata.DiscNumber != "")
DiscNumber = taglibMetadata.DiscNumber;
for (i = 0; i < TrackCount; i++)
{
TrackInfo track = _tracks[i];
string artist = _hasTrackFilenames && track._fileInfo != null ? track._fileInfo.Tag.JoinedPerformers :
_hasEmbeddedCUESheet && _fileInfo != null ? Tagging.TagListToSingleValue(Tagging.GetMiscTag(_fileInfo, String.Format("cue_track{0:00}_ARTIST", i + 1))) :
null;
string title = _hasTrackFilenames && track._fileInfo != null ? track._fileInfo.Tag.Title :
_hasEmbeddedCUESheet && _fileInfo != null ? Tagging.TagListToSingleValue(Tagging.GetMiscTag(_fileInfo, String.Format("cue_track{0:00}_TITLE", i + 1))) :
null;
if ((_config.overwriteCUEData || track.Artist == "") && artist != null && artist != "")
track.Artist = artist;
if ((_config.overwriteCUEData || track.Title == "") && title != null)
track.Title = title;
if ((_config.overwriteCUEData || _tracks[i].Artist == "") && taglibMetadata.Tracks[i].Artist != "")
_tracks[i].Artist = taglibMetadata.Tracks[i].Artist;
if ((_config.overwriteCUEData || _tracks[i].Title == "") && taglibMetadata.Tracks[i].Title != "")
_tracks[i].Title = taglibMetadata.Tracks[i].Title;
}
}
@@ -4055,32 +4109,46 @@ string status = processor.Go();
_albumArt.Add(picture);
return;
}
if ((_config.extractAlbumArt || _config.embedAlbumArt) && _inputDir != null)
if ((_config.extractAlbumArt || _config.embedAlbumArt) && !_isCD)
{
List<string> names = new List<string>();
names.Add("folder.jpg");
names.Add("cover.jpg");
names.Add("albumart.jpg");
names.Add("thumbnail.jpg");
names.Add("albumartlarge.jpg");
names.Add("front.jpg");
foreach (string name in names)
{
string imgPath = Path.Combine(_inputDir, name);
if (File.Exists(imgPath))
string imgPath = Path.Combine(_isArchive ? _archiveCUEpath : _inputDir, name);
bool exists = _isArchive ? _archiveContents.Contains(imgPath) : File.Exists(imgPath);
if (exists)
{
TagLib.Picture pic = new TagLib.Picture(imgPath);
TagLib.File.IFileAbstraction file = _isArchive
? (TagLib.File.IFileAbstraction)new ArchiveFileAbstraction(this, imgPath)
: (TagLib.File.IFileAbstraction)new TagLib.File.LocalFileAbstraction(imgPath);
TagLib.Picture pic = new TagLib.Picture(file);
pic.Description = name;
_albumArt.Add(pic);
return;
}
}
foreach (string imgPath in Directory.GetFiles(_inputDir, "*.jpg"))
if (!_isArchive)
{
TagLib.Picture pic = new TagLib.Picture(imgPath);
pic.Description = Path.GetFileName(imgPath);
_albumArt.Add(pic);
if (Action != CUEAction.Encode)
return;
// TODO: archive case
foreach (string imgPath in Directory.GetFiles(_inputDir, "*.jpg", SearchOption.AllDirectories))
{
TagLib.Picture pic = new TagLib.Picture(imgPath);
if (imgPath.StartsWith(_inputDir))
pic.Description = imgPath.Substring(_inputDir.Length).Trim(Path.DirectorySeparatorChar);
else
pic.Description = Path.GetFileName(imgPath);
_albumArt.Add(pic);
if (Action != CUEAction.Encode)
return;
}
}
if (_albumArt.Count != 0)
@@ -4809,12 +4877,7 @@ string status = processor.Go();
if (files == null)
audioFiles = Directory.GetFiles(dir == "" ? "." : dir, "*." + format.Key);
else
{
audioFiles = files.FindAll(delegate(string s)
{
return Path.GetDirectoryName(s) == dir && Path.GetExtension(s).ToLower() == "." + format.Key;
}).ToArray();
}
audioFiles = files.FindAll(s => Path.GetDirectoryName(s) == dir && Path.GetExtension(s).ToLower() == "." + format.Key).ToArray();
if (audioFiles.Length == filePos.Count)
{
Array.Sort(audioFiles);
@@ -4836,12 +4899,13 @@ string status = processor.Go();
foundAll = false;
break;
}
audioFiles = fileGroup.files.ConvertAll<string>(delegate(FileSystemInfo info) { return info.FullName; }).ToArray();
audioFiles = fileGroup.files.ConvertAll<string>(info => info.FullName).ToArray();
Array.Sort(audioFiles);
extension = fileGroup.main.Extension.ToLower().TrimStart('.');
foundAll = true;
}
}
// Choose filegroup by DISCID?
}
if (!foundAll)

View File

@@ -21,6 +21,7 @@ namespace CUETools.Processor
if (fileInfo is TagLib.Mpeg4.File)
{
// remove fb2k/nero nasty tags mess
//if (((TagLib.Mpeg4.File)fileInfo).UserData.
((TagLib.Mpeg4.File)fileInfo).UserData.RemoveChild("tags");
TagLib.Mpeg4.AppleTag mpeg4 = (TagLib.Mpeg4.AppleTag)fileInfo.GetTag(TagLib.TagTypes.Apple, true);
return true;

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 B

View File

@@ -745,7 +745,19 @@ namespace JDP {
if (_batchPaths.Count == 0 && action == CUEAction.Encode)
{
if (checkBoxUseFreeDb.Checked || checkBoxUseMusicBrainz.Checked)
releases = cueSheet.LookupAlbumInfo(checkBoxUseFreeDb.Checked, checkBoxUseMusicBrainz.Checked);
releases = cueSheet.LookupAlbumInfo(checkBoxUseFreeDb.Checked, checkBoxUseMusicBrainz.Checked, true);
}
else // if checkBoxUseMetadataCache.Checked
{
try
{
CUEMetadata cache = CUEMetadata.Load(cueSheet.TOC.TOCID);
if (cache != null)
cueSheet.CopyMetadata(cache);
}
catch
{
}
}
this.Invoke((MethodInvoker)delegate()

View File

@@ -82,10 +82,12 @@ namespace JDP
//
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
this.imageList1.Images.SetKeyName(0, "eac3.ico");
this.imageList1.Images.SetKeyName(1, "freedb.ico");
this.imageList1.Images.SetKeyName(2, "musicbrainz.ico");
this.imageList1.Images.SetKeyName(3, "cue3.ico");
this.imageList1.Images.SetKeyName(0, "eac");
this.imageList1.Images.SetKeyName(1, "freedb");
this.imageList1.Images.SetKeyName(2, "musicbrainz");
this.imageList1.Images.SetKeyName(3, "cue");
this.imageList1.Images.SetKeyName(4, "tags");
this.imageList1.Images.SetKeyName(5, "local");
//
// textBox1
//

View File

@@ -8,8 +8,6 @@ using System.IO;
using System.Windows.Forms;
using CUETools.CDImage;
using CUETools.Processor;
using MusicBrainz;
using Freedb;
namespace JDP
{
@@ -43,38 +41,26 @@ namespace JDP
item.Tag = pic;
listChoices.Items.Add(item);
}
else if (i is MusicBrainz.Release)
else if (i is CUEMetadataEntry)
{
ReleaseInfo r = new ReleaseInfo(CUE, i as MusicBrainz.Release);
ListViewItem item = new ListViewItem(r.Text, 2);
item.Tag = r;
listChoices.Items.Add(item);
}
else if (i is Freedb.CDEntry)
{
ReleaseInfo r = new ReleaseInfo(CUE, i as Freedb.CDEntry);
ListViewItem item = new ListViewItem(r.Text, 1);
item.Tag = r;
CUEMetadataEntry entry = i as CUEMetadataEntry;
ListViewItem item = new ListViewItem(entry.ToString(), entry.ImageKey);
item.Tag = entry;
listChoices.Items.Add(item);
// check if the entry contains non-iso characters,
// and add a second one if it does
ReleaseInfo r2 = new ReleaseInfo(CUE, i as Freedb.CDEntry);
r2.FixEncoding();
if (!r.Equals(r2))
if (entry.ImageKey == "freedb")
{
item = new ListViewItem(r2.Text, 1);
item.Tag = r2;
listChoices.Items.Add(item);
// check if the entry contains non-iso characters,
// and add a second one if it does
CUEMetadata copy = new CUEMetadata(entry.metadata);
if (copy.FreedbToEncoding())
{
entry = new CUEMetadataEntry(copy, entry.TOC, entry.ImageKey);
item = new ListViewItem(entry.ToString(), entry.ImageKey);
item.Tag = entry;
listChoices.Items.Add(item);
}
}
return;
}
else if (i is CUESheet)
{
ReleaseInfo r = new ReleaseInfo(CUE);
ListViewItem item = new ListViewItem(r.Text, 3);
item.Tag = r;
listChoices.Items.Add(item);
}
else
{
@@ -88,8 +74,6 @@ namespace JDP
{
set
{
if (CUE != null)
AddItem(CUE);
foreach (object i in value)
AddItem(i);
if (CUE != null)
@@ -133,12 +117,12 @@ namespace JDP
}
}
private ReleaseInfo ChosenRelease
private CUEMetadataEntry ChosenRelease
{
get
{
object o = ChosenObject;
return o != null && o is ReleaseInfo ? o as ReleaseInfo : null;
return o != null && o is CUEMetadataEntry ? o as CUEMetadataEntry : null;
}
}
@@ -152,10 +136,11 @@ namespace JDP
private void frmChoice_FormClosing(object sender, FormClosingEventArgs e)
{
ReleaseInfo ri = ChosenRelease;
CUEMetadataEntry ri = ChosenRelease;
if (e.CloseReason != CloseReason.None || DialogResult != DialogResult.OK || ri == null || CUE == null)
return;
CUE.CopyMetadata(ri.metadata);
ri.metadata.Save();
}
private void AutoResizeTracks()
@@ -185,17 +170,17 @@ namespace JDP
{
textBox1.Text = (item as CUEToolsSourceFile).contents.Replace("\r\n", "\n").Replace("\r", "\n").Replace("\n", "\r\n");
}
else if (item != null && item is ReleaseInfo)
else if (item != null && item is CUEMetadataEntry)
{
ReleaseInfo r = (item as ReleaseInfo);
CUEMetadataEntry r = (item as CUEMetadataEntry);
listTracks.Items.Clear();
foreach (TrackInfo track in r.metadata.Tracks)
foreach (CUETrackMetadata track in r.metadata.Tracks)
{
listTracks.Items.Add(new ListViewItem(new string[] {
track.Title,
(listTracks.Items.Count + 1).ToString(),
r.metadata.TOC[listTracks.Items.Count + r.metadata.TOC.FirstAudio].StartMSF,
r.metadata.TOC[listTracks.Items.Count + r.metadata.TOC.FirstAudio].LengthMSF
r.TOC[listTracks.Items.Count + r.TOC.FirstAudio].StartMSF,
r.TOC[listTracks.Items.Count + r.TOC.FirstAudio].LengthMSF
}));
}
AutoResizeTracks();
@@ -237,7 +222,7 @@ namespace JDP
private void listTracks_AfterLabelEdit(object sender, LabelEditEventArgs e)
{
ReleaseInfo ri = ChosenRelease;
CUEMetadataEntry ri = ChosenRelease;
if (ri != null && e.Label != null)
ri.metadata.Tracks[e.Item].Title = e.Label;
}
@@ -246,13 +231,13 @@ namespace JDP
{
if (e.KeyCode == Keys.Enter)
{
if (listTracks.FocusedItem.Index + 1 < listTracks.Items.Count) // && e.editing
{
listTracks.FocusedItem.Selected = false;
listTracks.FocusedItem = listTracks.Items[listTracks.FocusedItem.Index + 1];
listTracks.FocusedItem.Selected = true;
listTracks.FocusedItem.BeginEdit();
}
if (listTracks.FocusedItem.Index + 1 < listTracks.Items.Count) // && e.editing
{
listTracks.FocusedItem.Selected = false;
listTracks.FocusedItem = listTracks.Items[listTracks.FocusedItem.Index + 1];
listTracks.FocusedItem.Selected = true;
listTracks.FocusedItem.BeginEdit();
}
}
}
@@ -270,13 +255,13 @@ namespace JDP
private void listMetadata_AfterLabelEdit(object sender, LabelEditEventArgs e)
{
ListViewItem item = ChosenItem;
ReleaseInfo r = ChosenRelease;
CUEMetadataEntry r = ChosenRelease;
if (e.Label != null && item != null && r != null)
{
switch (e.Item)
{
case 0:
foreach (TrackInfo track in r.metadata.Tracks)
foreach (CUETrackMetadata track in r.metadata.Tracks)
if (track.Artist == r.metadata.Artist)
track.Artist = e.Label;
r.metadata.Artist = e.Label;
@@ -287,7 +272,7 @@ namespace JDP
case 4: r.metadata.DiscNumber = e.Label; break;
case 5: r.metadata.TotalDiscs = e.Label; break;
}
item.Text = r.Text;
item.Text = r.ToString();
}
}
@@ -297,67 +282,4 @@ namespace JDP
PictureBoxSizeMode.CenterImage : PictureBoxSizeMode.Zoom;
}
}
sealed class ReleaseInfo
{
public CUESheet metadata;
public ReleaseInfo(CUESheet cue)
{
metadata = new CUESheet(cue.Config);
metadata.TOC = cue.TOC;
metadata.CopyMetadata(cue);
}
public ReleaseInfo(CUESheet cue, Freedb.CDEntry release)
{
metadata = new CUESheet(cue.Config);
metadata.TOC = cue.TocFromCDEntry(release);
metadata.FillFromFreedb(release);
}
public ReleaseInfo(CUESheet cue, MusicBrainz.Release release)
{
metadata = new CUESheet(cue.Config);
metadata.TOC = cue.TOC;
metadata.FillFromMusicBrainz(release);
}
private string FixEncoding(string src)
{
Encoding iso = Encoding.GetEncoding("iso-8859-1");
return Encoding.Default.GetString(iso.GetBytes(src));
}
public string Text
{
get
{
return string.Format("{0}: {1} - {2}",
metadata.Year == "" ? "YYYY" : metadata.Year,
metadata.Artist == "" ? "Unknown Artist" : metadata.Artist,
metadata.Title == "" ? "Unknown Title" : metadata.Title);
}
}
public void FixEncoding()
{
metadata.Artist = FixEncoding(metadata.Artist);
metadata.Title = FixEncoding(metadata.Title);
foreach (TrackInfo track in metadata.Tracks)
{
track.Title = FixEncoding(track.Title);
track.Artist = FixEncoding(track.Artist);
}
}
public bool Equals(ReleaseInfo r)
{
bool equal = metadata.Title == r.metadata.Title && metadata.Artist == r.metadata.Artist;
for (int t = 0; t < metadata.TrackCount; t++)
if (r.metadata.Tracks[t].Title != metadata.Tracks[t].Title || r.metadata.Tracks[t].Artist != metadata.Tracks[t].Artist)
equal = false;
return equal;
}
}
}

View File

@@ -166,83 +166,119 @@
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACg
EQAAAk1TRnQBSQFMAgEBBAEAAQwBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8ALgADAgEDAxQBHAMw
AUwDRAF5A1ABmgNQAaQDUAGaA0QBeQMwAUwDFAEcAwMBBAgAA5YB/wEfAgAB/wEfAgAB/wEfAgAB/wEf
AgAB/wEfAgAB/wEfAgAB/wEfAgAB/wEfAgAB/wEfAgAB/wEfAgAB/wEfAgAB/wEfAgAB/wEfAgAB/wEf
AgAB/wEfAgAB/wQAAVIBzAL/AR8CmQH/AR8CmQH/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/
AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/EAADAgEDAxQBHAMwAUwDRAF5A1ABmgNQ
AaQDUAGaA0QBeQMwAUwDFAEcAwMBBBAAAwQBBgMkATYDUwGwAWMCXgHlAXwCZAH7AbMCqQH/AXwCbQH7
A2AB6wNaAdMDUwGsA0cBggMoATwDBwEJBAABzAKZAf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIAAf8D6gH/
A+oB/wPqAf8BgAIAAf8D6gH/A+oB/wPqAf8BgAIAAf8BgAIAAf8BUgIAAf8BHwIAAf8BHwKZAf8DAAH/
AxUB/wM5Af8DAAH/AwgB/wFSAcwC/wFSAcwC/wFSAcwC/wFSAcwC/wFSAcwC/wFSAcwC/wFSAcwC/wFS
AcwC/wFSAcwC/wFSAcwC/wgAAwQBBgMkATYDUwGwAWMCXgHlAXwCZAH7AbMCqQH/AXwCbQH7A2AB6wNa
AdMDUwGsA0cBggMoATwDBwEJCAADAgEDAzEBTwNcAeoBzwK0Av8C3QL/AuIC/wLoAv8C7gL/AvMB/wPP
Af8DXwHzA1gBxgNMAZIDKAE8AwMBBAHMApkB/wGAAgAB/wGAAgAB/wGAAgAB/wPxAf8BgAIAAf8BgAIA
Af8D8QH/AYACAAH/A/EB/wGAAgAB/wGAAgAB/wPxAf8BgAIAAf8BgAIAAf8BHwIAAf8DAAH/A8wN/wM5
Af8DCAH/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/
BAADAgEDAzEBTwNcAeoBzwK0Av8C3QL/AuIC/wLoAv8C7gL/AvMB/wPPAf8DXwHzA1gBxgNMAZIDKAE8
AwMBBAQAAyYBOANtAfcB9QLHAv8C0gL/AtgC/wLdAv8C4gL/AugC/wL0Bf8D9QH/A4UB+wNYAcYDRwGC
AxQBHAHMApkB/wGZAQABHwH/AYACAAH/AYACAAX/AYACAAH/AYACAAX/AYACAAX/AYACAAH/AYACAAX/
AYACAAH/AYACAAH/AR8CAAH/AwAB/wPMEf8DAAH/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/
AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/BAADJgE4A20B9wH1AscC/wLSAv8C2AL/At0C/wLiAv8C6AL/
AvQF/wP1Af8DhQH7A1gBxgNHAYIDFAEcAwcBCQNeAd0B9QLNAv8CzwL/As0C/wLSAv8C2AL/At0C/wLi
Av8C+gn/A/UB/wNfAfMDUwGsAzABTAHMApkB/wGZAQABHwH/AYACAAH/AYACAAH/AYACAA3/AYACAA3/
AYACAAH/AYACAAH/AYACAAH/AR8CAAH/AR8CmQH/AwgB/wNjAf8DwAH/A8AB/wPMAf8DAAH/AxUB/wMA
Af8DAAH/AwAB/wMAAf8DFQH/AVIBzAL/AVIBzAL/AVIBzAL/AwcBCQNeAd0B9QLNAv8CzwL/As0C/wLS
Av8C2AL/At0C/wLiAv8C+gn/A/UB/wNfAfMDUwGsAzABTAM+AWoBxgKxAv8C2QL/AtQC/wLPAv8CzQL/
AdQB2wL/AdcB4gL/AeQB6hH/AdICzAH/A1oB0wNDAXcBzAKZAf8BmQEAAR8B/wGAAgAB/wGAAgAB/wGA
AgAB/wGAAgAB/wGAAgAF/wGAAgAF/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wEfAgAB/wFS
AcwC/wEfApkB/wMIAf8DAAH/AwAF/wMAAf8DCAH/AaQCoAn/A5kB/wMVAf8DFQH/AVIBzAL/AVIBzAL/
Az4BagHGArEC/wLZAv8C1AL/As8C/wLNAv8B1AHbAv8B1wHiAv8B5AHqEf8B0gLMAf8DWgHTA0MBdwNW
AbYB/wLjAf8BAAEaARsB/wEAARoBGwH/AQABGgEbAv8B3gHnAf8BAAEaARsC/wHRAfMB/wEAARoBGwL/
AfgC/wFaAmAB/wEAARoBGwH/AVoCYAH/AcwCmQH/AVwCVQHqA04BlAHMApkB/wGZAQABHwH/AYACAAH/
AYACAAH/AYACAAH/AYACAAH/AYACAAX/AYACAAX/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/
AR8CAAH/AVIBzAL/AVIBzAL/AVIBzAL/AVIBzAL/AwAF/wMAAf8DFRH/A8wB/wMAAf8BUgHMAv8BUgHM
Av8DVgG2Af8C4wH/AVoCYAH/AQABGgEbAf8BWgJgAv8B3gHnAf8BWgJgAf8BAAEaARsB/wFaAmAC/wH4
Av8BAAEaARsB/wEAARoBGwH/AQABGgEbAf8BzAKZAf8BXAJVAeoDTgGUA2EB4gH/AucB/wEAARoBGwL/
At4C/wLgAv8B7wH8Af8BAAEaARsC/wHiAfwB/wEAARoBGwH/AfwB8AH5Af8BAAEaARsB/wHMApkB/wEA
ARoBGwH/AcwCmQH/AW0CbAH3A1EBoQHMApkB/wGZAQABHwH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/
AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AYACAAH/AR8CAAH/
AZkCUgH/AZkCUgH/AZkCUgH/AZkCUgH/AwAF/wMAAf8DAAH/AzkB/wPMDf8DAAH/AZkCUgH/AZkCUgH/
A2EB4gH/AucB/wEAARoBGwL/At4B/wEAARoBGwL/Ae8B/AH/AQABGgEbAv8B4gH8Af8BAAEaARsB/wH8
AfAB+QH/AQABGgEbAf8BzAKZAf8BzAKZAf8BzAKZAf8BbQJsAfcDUQGhAZ4CjAH/AekCvgH/AQABGgEb
Af8BAAEaARsB/wH5AtYC/wHpAfMB/wEAARoBGwH/AQABGgEbAf8BAAEaARsB/wH5AegB7AH/AQABGgEb
Af8B5gK6Af8B5gK9Af8B5gLAAf8BpgKUAf8DTgGUNP8D8QH/A+oB/wOAAf8BmQJSAf8BmQJSAf8BmQJS
Af8BmQJSAf8DAAX/AwAB/wNBAf8DCAH/AwAB/wMAAf8DAAX/AwAB/wGZAlIB/wGZAlIB/wGeAowB/wHp
Ar4B/wEAARoBGwH/AfMCxQH/AfkC1gL/AekB8wH/AQABGgEbAv8B6QHzAf8BAAEaARsB/wH5AegB7AH/
AQABGgEbAf8BAAEaARsB/wHmAr0B/wHmAsAB/wGmApQB/wNOAZQDXQHSAdsCqAH/AQABGgEbAf8B6gK3
Af8B8wLNAv8B7gH8Af8BAAEaARsC/wHSAfUB/wEAARoBGwL/AfQB/AH/AQABGgEbAv8C2AH/AQABGgEb
Av8C4gH/A2IB9gNDAXcE/wGZAQABHwn/AYACAA3/AYACAAH/AYACAA3/AYACAAH/AYACAAH/A4AB/wGZ
AlIB/wGZAlIB/wGZAlIB/wGZAlIB/wMABf8DCAH/AwAB/wMVAf8DQQH/A0EB/wMABf8DAAH/AZkCUgH/
AZkCUgH/A10B0gHbAqgB/wEAARoBGwH/AeoCtwH/AQABGgEbAv8B7gH8Af8BAAEaARsC/wHSAfUB/wEA
ARoBGwL/AfQB/AH/AQABGgEbAv8C2AL/At0C/wLiAf8DYgH2A0MBdwNWAbEB1QKiAf8BAAEaARsB/wEA
ARoBGwH/AQABGgEbAv8B9gL/AVoCYAH/AQABGgEbAf8BWgJgAv8B4AHnAf8BWgJgAf8BAAEaARsB/wFa
AmAC/wLdAf8DWgHkAzABTAT/AZkBAAEfCf8BgAIACf8BgAIAEf8BgAIAAf8D8QH/A+oB/wOAAf8BmQJS
Af8BmQJSAf8BmQJSAf8BmQJSAf8DAAn/A5kB/wMVAf8DAAH/AwgB/wMABf8DAAH/AZkCUgH/AZkCUgH/
A1YBsQHVAqIB/wFaAmAB/wEAARoBGwH/AVoCYAL/AfYC/wEAARoBGwL/AdIB9QH/AQABGgEbAv8B4AHn
Af8BAAEaARsB/wEAARoBGwH/AQABGgEbAv8C3QH/A1oB5AMwAUwDMgFQAcMCvxL/AewB8QL/AdsB5wL/
AdkB3gL/AtQC/wLPAv8CzQL/AtIB/wHGAq0B/wNTAawDFAEbBP8BmQEAAR8J/wGAAgAJ/wGAAgAB/wGA
AgAB/wGAAgAB/wGAAgAF/wGAAgAB/wGAAgAB/wGAAgAB/wEfAgAB/wGZAlIB/wGZAlIB/wGZAlIB/wGZ
AlIB/wMAAf8DwA3/A8wB/wNLAf8DAAX/AwAB/wGZAlIB/wGZAlIB/wMyAVABwwK/Ev8B7AHxAv8B2wHn
Av8B2QHeAv8C1AL/As8C/wLNAv8C0gH/AcYCrQH/A1MBrAMUARsEAANaAcAD9Qr/Av4C/wLnAv8C4wL/
At4C/wLZAv8C1AL/As8B/wH1AscB/wNfAeMDIwE0AwIBAwT/AZkBAAEfAf8BgAIABf8BgAIACf8BgAIA
Cf8BgAIABf8BgAIAAf8D8QH/A+oB/wEfAgAB/wGZAlIB/wGZAlIB/wGZAlIB/wGZAlIB/wMVAf8DOQH/
A8AZ/wMAAf8BmQJSAf8BmQJSAf8EAANaAcAD9Qr/Av4C/wLnAv8C4wL/At4C/wLZAv8C1AL/As8B/wH1
AscB/wNfAeMDIwE0AwIBAwQAAxcBIANiAe8D9Qb/AvgC/wLsAv8C5wL/AuMC/wLeAv8C2QH/AfUCzQH/
A20B9wMwAU0DBAEGBAAE/wGZAh8J/wGAAgAB/wGAAgAJ/wGAAgAB/wGAAgAN/wGAAgAB/wGAAgAB/wOG
Af8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8DFQH/AwAB/wMVAf8DmRH/AwAB/wGZAlIB/wGZ
AlIB/wQAAxcBIANiAe8D9Qb/AvgC/wLsAv8C5wL/AuMC/wLeAv8C2QH/AfUCzQH/A20B9wMwAU0DBAEG
DAADFwEgA1oBwAPGAv8C9wL/AvIC/wLsAv8C5wL/AuMB/wHGArEB/wNeAdADJAE2AwIBAwgABP8BmQIf
Lf8D8QH/A+oB/wOGAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8DFQH/
AwAB/wMIAf8DYwH/A8wF/wMAAf8BmQJSAf8BmQJSAf8IAAMXASADWgHAA8YC/wL3Av8C8gL/AuwC/wLn
Av8C4wH/AcYCsQH/A14B0AMkATYDAgEDGAADMgFQA1EBogNdAdIBjAKJAf8DYAHUA1QBpgM3AVoDBQEH
EAAI/wHMApkt/wPxAf8DwAH/BAABmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJSAf8BmQJS
Af8BmQJSAf8BmQJSAf8DCAH/AwAB/wM5Af8DFQH/AZkCUgH/FAADMgFQA1EBogNdAdIBjAKJAf8DYAHU
A1QBpgM3AVoDBQEHEAABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/4EAAeABAwIA
AYABAQHgAQMBwAEBBAABwAEBAYAFAAGAAQABgAUAAYBBAAGABQABgAEAAYABAQQAAYABAQHAAQMEAAHA
AQMB8AEPAgABgAEBAfABDws=
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAC
GgAAAk1TRnQBSQFMAgEBBgEAAQwBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIB4AAh4BHQEqAj8BNwF3Ah4BHQEq8AACHgEdASkCQgE6AXQC/wHwAf8CQgE6
AXQCHgEdASnoAAIeAR0BKAJGAT4BcQL/AfAB/wLpAdoD/wHxAf8CRgE+AXECHgEdASggAAI2ATIBWQJA
ATcBdgJAATcBdgIvASwBSwQAAi8BLAFLAkABNwF2AkABNwF2AkABNwF2AkABNwF2Ai8BLAFLBAACLwEs
AUsCQAE3AXYCQAE3AXYCNgEyAVmAAAIeAR0BJwJIAUEBbwL/AfAB/wHrAd0BsQH/AfcBwQE4Af8B7QHf
AbMD/wHyAf8CSAFBAW8CHgEdASccAAJFAT0BcgL5AekB/wLzAeMB/wJzAWUBtQI9ATQBeAKLAX0BwwLz
AeMB/wLzAeMB/wLzAeMB/wLzAeMB/wKLAX0BwwI9ATQBeAJzAWUBtQLzAeMB/wL5AekB/wJFAT0BcoAA
AkkBQQFuAv8B8AH/AukB2gH/AecBqwEiAf8B5wGrASIB/wHnAasBIgH/AeoB2wGwA/8B9AH/AkkBQQFu
Ah4BHQEnGAACSAFBAW8C9AHmAf8C6QHaAf8C7wHgAf8C9AHmAf8C7wHgAf8C6QHaAf8C6QHaAf8C6QHa
Af8C6QHaAf8C7wHgAf8C9AHmAf8C7wHgAf8C6QHaAf8C9AHmAf8CSAFBAW+AAAIeAR0BJwJKAUIBbQL/
AfEB/wHnAdcBqwH/AdcBlgENAf8B1wGWAQ0B/wHXAZYBDQH/AegB2AGuA/8B9QH/AkoBQgFtAh4BHQEn
FAACSQFCAW4C9gHoAf8C6wHeAf8C6wHeAf8C6wHeAf8C6wHeAf8C6wHeAf8C6wHeAf8C6wHeAf8C6wHe
Af8C6wHeAf8C6wHeAf8C6wHeAf8C6wHeAf8C9gHoAf8CSQFCAW6EAAIdARwBJgJKAUMBbAL/AfIB/wHl
AdQBqQH/Ac0BiQEAAf8BzQGJAQAB/wHNAYkBAAH/AegB1wGvA/8B9wH/AkoBQwFsAh0BHAEmEAACSgFD
AW0C9wHsAf8C7gHjAf8C7gHjAf8C7gHjAf8C7gHjAf8C7gHjAf8C7gHjAf8C7gHjAf8C7gHjAf8C7gHj
Af8C7gHjAf8C7gHjAf8C7gHjAf8C9wHsAf8CSgFDAW2IAAIdARwBJgJKAUMBawL/AfQB/wHnAdYBrAH/
AdEBjgEFAf8B0QGOAQUB/wHRAY4BBQH/AewB2wGzA/8B+AH/AkoBQwFrAh0BHAEmDAACSgFDAWsC+QHv
Af8C8QHoAf8C8QHoAf8C8QHoAf8C8QHoAf8C8QHoAf8DAAH/AVABhQGTAf8BuALLAf8C8QHoAf8C8QHo
Af8C8QHoAf8C8QHoAf8C+QHvAf8CSgFDAWuMAAIdARwBJgJLAUQBawL/AfUB/wHrAdwBswH/Ad8BoQEY
Af8B3wGhARgB/wHfAaEBGAH/AfEB4gG7A/8B+gH/AksBRAFrAx0BJggAAksBRAFqAvoB8wH/AvUB7gH/
AvUB7gH/AvUB7gH/AvUB7gH/AvUB7gH/AXsBsQHAAf8B2QH0Av8BPgGcAasB/wG1AdMB1AH/AvUB7gH/
AvUB7gH/AvUB7gH/AvoB8wH/AksBRAFqkAADHQEmAkwBRQFqAv8B9wH/AfIB5AG7Af8B8AG4AS8B/wHw
AbgBLwH/AfABuAEvAf8C+AH0A/8B+wH/AkwBRQFqAh0BHAElBAACTAFFAWkC/AH3Af8C+AHzAf8C+AHz
Af8C+AHzAf8C+AHzAf8C+AHzAf8B1AHmAecB/wFIAbQBwwH/AXgB5gH3Af8BPwGdAa0B/wG2AdUB1wH/
AvgB8wH/AvgB8wH/AvwB9wH/AkwBRQFplAACHQEcASUCTAFFAWkC/wH4Af8B9wHqAcMB/wH9AckBQAH/
AfkB7AHHAf8C+wH3Af8C/AH5A/8B/AH/AkwBRQFpAh0BHAElAkwBRQFoAv0B+gH/AvsB9wH/AvsB9wH/
AvsB9wH/AvsB9wH/AvsB9wH/AvsB9wH/Ab4B5QHoAf8BSQG1AcUB/wF4AeYB9wH/AUABngGuAf8BuQHY
AdsB/wL7AfcB/wL9AfoB/wJMAUUBaJgAAh0BHAElAkwBRQFoAv8B+gH/AvgB9AH/AvsB9wH/AugB3gH/
AtgByQH/AugB3gP/Af4B/wJMAUUBaAJNAUcBaAL+Af0B/wL9AfsB/wL9AfsB/wL9AfsB/wL9AfsB/wL9
AfsB/wL9AfsB/wL9AfsB/wHAAeYB6wH/AUoBtQHGAf8BeAHmAfcB/wFAAZ4BrwH/Ab4B2AHcAf8C/gH9
Af8CTQFHAWicAAIdARwBJQJNAUYBaAL/AfsB/wL8AfkB/wLLAbsB/wQAAssBvAP/Af4B/wJNAUYBaAJO
AUcBZyT/AcEB6AHuAf8BSgG2AccB/wF4AeYB9wH/A5MB/wPVAf8CTgFHAWegAAIdARwBJQJNAUYBZwL/
AfwB/wLUAcoB/wKvAZ8B/wLUAcsD/wH+Af8CTQFGAWcCOwE3AU0CTgFHAWYCTgFHAWYCTgFHAWYCTgFH
AWYCTgFHAWYCTgFHAWYCTgFHAWYCTgFHAWYCTgFHAWYCTgFHAWYBVQFmAWABjAJeAVgBpwP3Af8CSQFY
AbsCRgFVAXqkAAMcASQCTgFHAWcC/wH+A/8B/gP/Af4F/wJOAUcBZzAAAxsBJAJBAU4BfAKAAv8CJwGM
AcGoAAMcASQCTgFHAWYCTgFHAWYCTgFHAWYCTgFHAWYCOwE4AU00AAImASwBOQItAZUBrwInATQBQIwA
AwIBAwMUARwDMAFMA0QBeQNQAZoDUAGkA1ABmgNEAXkDMAFMAxQBHAMDAQQIAAOWAf8BHgIAAf8BHgIA
Af8BHgIAAf8BHgIAAf8BHgIAAf8BHgIAAf8BHgIAAf8BHgIAAf8BHgIAAf8BHgIAAf8BHgIAAf8BHgIA
Af8BHgIAAf8BHgIAAf8BHgIAAf8EAAFRAcwC/wEeApkB/wEeApkB/wFRAcwC/wFRAcwC/wFRAcwC/wFR
AcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/xAAAwIBAwMUARwDMAFM
A0QBeQNQAZoDUAGkA1ABmgNEAXkDMAFMAxQBHAMDAQQQAAMEAQYDJAE2A1MBsAFjAl4B5QF5AmIB+wGz
AqkB/wF5AmoB+wNgAesDWgHTA1MBrANHAYIDKAE8AwcBCQQAAcwCmQH/AYACAAH/AYACAAH/AYACAAH/
AYACAAH/A+oB/wPqAf8D6gH/AYACAAH/A+oB/wPqAf8D6gH/AYACAAH/AYACAAH/AVECAAH/AR4CAAH/
AR4CmQH/AwAB/wMUAf8DOAH/AwAB/wMHAf8BUQHMAv8BUQHMAv8BUQHMAv8BUQHMAv8BUQHMAv8BUQHM
Av8BUQHMAv8BUQHMAv8BUQHMAv8BUQHMAv8IAAMEAQYDJAE2A1MBsAFjAl4B5QF5AmIB+wGzAqkB/wF5
AmoB+wNgAesDWgHTA1MBrANHAYIDKAE8AwcBCQgAAwIBAwMxAU8DXAHqAc8CtAL/At0C/wLiAv8C6AL/
Au4C/wLzAf8DzwH/A18B8wNYAcYDTAGSAygBPAMDAQQBzAKZAf8BgAIAAf8BgAIAAf8BgAIAAf8D8QH/
AYACAAH/AYACAAH/A/EB/wGAAgAB/wPxAf8BgAIAAf8BgAIAAf8D8QH/AYACAAH/AYACAAH/AR4CAAH/
AwAB/wPMDf8DOAH/AwcB/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFR
AcwC/wFRAcwC/wQAAwIBAwMxAU8DXAHqAc8CtAL/At0C/wLiAv8C6AL/Au4C/wLzAf8DzwH/A18B8wNY
AcYDTAGSAygBPAMDAQQEAAMmATgDbQH3AfUCxwL/AtIC/wLYAv8C3QL/AuIC/wLoAv8C9AX/A/UB/wOE
AfsDWAHGA0cBggMUARwBzAKZAf8BmQEAAR4B/wGAAgAB/wGAAgAF/wGAAgAB/wGAAgAF/wGAAgAF/wGA
AgAB/wGAAgAF/wGAAgAB/wGAAgAB/wEeAgAB/wMAAf8DzBH/AwAB/wFRAcwC/wFRAcwC/wFRAcwC/wFR
AcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wQAAyYBOANtAfcB9QLHAv8C0gL/AtgC/wLd
Av8C4gL/AugC/wL0Bf8D9QH/A4QB+wNYAcYDRwGCAxQBHAMHAQkDXgHdAfUCzQL/As8C/wLNAv8C0gL/
AtgC/wLdAv8C4gL/AvoJ/wP1Af8DXwHzA1MBrAMwAUwBzAKZAf8BmQEAAR4B/wGAAgAB/wGAAgAB/wGA
AgAN/wGAAgAN/wGAAgAB/wGAAgAB/wGAAgAB/wEeAgAB/wEeApkB/wMHAf8DYgH/A8AB/wPAAf8DzAH/
AwAB/wMUAf8DAAH/AwAB/wMAAf8DAAH/AxQB/wFRAcwC/wFRAcwC/wFRAcwC/wMHAQkDXgHdAfUCzQL/
As8C/wLNAv8C0gL/AtgC/wLdAv8C4gL/AvoJ/wP1Af8DXwHzA1MBrAMwAUwDPgFqAcYCsQL/AtkC/wLU
Av8CzwL/As0C/wHUAdsC/wHXAeIC/wHkAeoR/wHSAswB/wNaAdMDQwF3AcwCmQH/AZkBAAEeAf8BgAIA
Af8BgAIAAf8BgAIAAf8BgAIAAf8BgAIABf8BgAIABf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIA
Af8BHgIAAf8BUQHMAv8BHgKZAf8DBwH/AwAB/wMABf8DAAH/AwcB/wGkAqAJ/wOZAf8DFAH/AxQB/wFR
AcwC/wFRAcwC/wM+AWoBxgKxAv8C2QL/AtQC/wLPAv8CzQL/AdQB2wL/AdcB4gL/AeQB6hH/AdICzAH/
A1oB0wNDAXcDVgG2Af8C4wH/AQABGQEaAf8BAAEZARoB/wEAARkBGgL/Ad4B5wH/AQABGQEaAv8B0QHz
Af8BAAEZARoC/wH4Av8BWQJfAf8BAAEZARoB/wFZAl8B/wHMApkB/wFcAlUB6gNOAZQBzAKZAf8BmQEA
AR4B/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAF/wGAAgAF/wGAAgAB/wGAAgAB/wGAAgAB/wGA
AgAB/wGAAgAB/wEeAgAB/wFRAcwC/wFRAcwC/wFRAcwC/wFRAcwC/wMABf8DAAH/AxQR/wPMAf8DAAH/
AVEBzAL/AVEBzAL/A1YBtgH/AuMB/wFZAl8B/wEAARkBGgH/AVkCXwL/Ad4B5wH/AVkCXwH/AQABGQEa
Af8BWQJfAv8B+AL/AQABGQEaAf8BAAEZARoB/wEAARkBGgH/AcwCmQH/AVwCVQHqA04BlANhAeIB/wLn
Af8BAAEZARoC/wLeAv8C4AL/Ae8B/AH/AQABGQEaAv8B4gH8Af8BAAEZARoB/wH8AfAB+QH/AQABGQEa
Af8BzAKZAf8BAAEZARoB/wHMApkB/wFtAmwB9wNRAaEBzAKZAf8BmQEAAR4B/wGAAgAB/wGAAgAB/wGA
AgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGAAgAB/wGA
AgAB/wEeAgAB/wGZAlEB/wGZAlEB/wGZAlEB/wGZAlEB/wMABf8DAAH/AwAB/wM4Af8DzA3/AwAB/wGZ
AlEB/wGZAlEB/wNhAeIB/wLnAf8BAAEZARoC/wLeAf8BAAEZARoC/wHvAfwB/wEAARkBGgL/AeIB/AH/
AQABGQEaAf8B/AHwAfkB/wEAARkBGgH/AcwCmQH/AcwCmQH/AcwCmQH/AW0CbAH3A1EBoQGeAowB/wHp
Ar4B/wEAARkBGgH/AQABGQEaAf8B+QLWAv8B6QHzAf8BAAEZARoB/wEAARkBGgH/AQABGQEaAf8B+QHo
AewB/wEAARkBGgH/AeYCugH/AeYCvQH/AeYCwAH/AaYClAH/A04BlDT/A/EB/wPqAf8DgAH/AZkCUQH/
AZkCUQH/AZkCUQH/AZkCUQH/AwAF/wMAAf8DQAH/AwcB/wMAAf8DAAH/AwAF/wMAAf8BmQJRAf8BmQJR
Af8BngKMAf8B6QK+Af8BAAEZARoB/wHzAsUB/wH5AtYC/wHpAfMB/wEAARkBGgL/AekB8wH/AQABGQEa
Af8B+QHoAewB/wEAARkBGgH/AQABGQEaAf8B5gK9Af8B5gLAAf8BpgKUAf8DTgGUA10B0gHbAqgB/wEA
ARkBGgH/AeoCtwH/AfMCzQL/Ae4B/AH/AQABGQEaAv8B0gH1Af8BAAEZARoC/wH0AfwB/wEAARkBGgL/
AtgB/wEAARkBGgL/AuIB/wNiAfYDQwF3BP8BmQEAAR4J/wGAAgAN/wGAAgAB/wGAAgAN/wGAAgAB/wGA
AgAB/wOAAf8BmQJRAf8BmQJRAf8BmQJRAf8BmQJRAf8DAAX/AwcB/wMAAf8DFAH/A0AB/wNAAf8DAAX/
AwAB/wGZAlEB/wGZAlEB/wNdAdIB2wKoAf8BAAEZARoB/wHqArcB/wEAARkBGgL/Ae4B/AH/AQABGQEa
Av8B0gH1Af8BAAEZARoC/wH0AfwB/wEAARkBGgL/AtgC/wLdAv8C4gH/A2IB9gNDAXcDVgGxAdUCogH/
AQABGQEaAf8BAAEZARoB/wEAARkBGgL/AfYC/wFZAl8B/wEAARkBGgH/AVkCXwL/AeAB5wH/AVkCXwH/
AQABGQEaAf8BWQJfAv8C3QH/A1oB5AMwAUwE/wGZAQABHgn/AYACAAn/AYACABH/AYACAAH/A/EB/wPq
Af8DgAH/AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/AwAJ/wOZAf8DFAH/AwAB/wMHAf8DAAX/AwAB/wGZ
AlEB/wGZAlEB/wNWAbEB1QKiAf8BWQJfAf8BAAEZARoB/wFZAl8C/wH2Av8BAAEZARoC/wHSAfUB/wEA
ARkBGgL/AeAB5wH/AQABGQEaAf8BAAEZARoB/wEAARkBGgL/At0B/wNaAeQDMAFMAzIBUAHDAr8S/wHs
AfEC/wHbAecC/wHZAd4C/wLUAv8CzwL/As0C/wLSAf8BxgKtAf8DUwGsAxQBGwT/AZkBAAEeCf8BgAIA
Cf8BgAIAAf8BgAIAAf8BgAIAAf8BgAIABf8BgAIAAf8BgAIAAf8BgAIAAf8BHgIAAf8BmQJRAf8BmQJR
Af8BmQJRAf8BmQJRAf8DAAH/A8AN/wPMAf8DSgH/AwAF/wMAAf8BmQJRAf8BmQJRAf8DMgFQAcMCvxL/
AewB8QL/AdsB5wL/AdkB3gL/AtQC/wLPAv8CzQL/AtIB/wHGAq0B/wNTAawDFAEbBAADWgHAA/UK/wL+
Av8C5wL/AuMC/wLeAv8C2QL/AtQC/wLPAf8B9QLHAf8DXwHjAyMBNAMCAQME/wGZAQABHgH/AYACAAX/
AYACAAn/AYACAAn/AYACAAX/AYACAAH/A/EB/wPqAf8BHgIAAf8BmQJRAf8BmQJRAf8BmQJRAf8BmQJR
Af8DFAH/AzgB/wPAGf8DAAH/AZkCUQH/AZkCUQH/BAADWgHAA/UK/wL+Av8C5wL/AuMC/wLeAv8C2QL/
AtQC/wLPAf8B9QLHAf8DXwHjAyMBNAMCAQMEAAMXASADYgHvA/UG/wL4Av8C7AL/AucC/wLjAv8C3gL/
AtkB/wH1As0B/wNtAfcDMAFNAwQBBgQABP8BmQIeCf8BgAIAAf8BgAIACf8BgAIAAf8BgAIADf8BgAIA
Af8BgAIAAf8DhgH/AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/AxQB/wMAAf8DFAH/A5kR/wMA
Af8BmQJRAf8BmQJRAf8EAAMXASADYgHvA/UG/wL4Av8C7AL/AucC/wLjAv8C3gL/AtkB/wH1As0B/wNt
AfcDMAFNAwQBBgwAAxcBIANaAcADxgL/AvcC/wLyAv8C7AL/AucC/wLjAf8BxgKxAf8DXgHQAyQBNgMC
AQMIAAT/AZkCHi3/A/EB/wPqAf8DhgH/AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/
AZkCUQH/AxQB/wMAAf8DBwH/A2IB/wPMBf8DAAH/AZkCUQH/AZkCUQH/CAADFwEgA1oBwAPGAv8C9wL/
AvIC/wLsAv8C5wL/AuMB/wHGArEB/wNeAdADJAE2AwIBAxgAAzIBUANRAaIDXQHSAYwCiQH/A2AB1ANU
AaYDNwFaAwUBBxAACP8BzAKZLf8D8QH/A8AB/wQAAZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/
AZkCUQH/AZkCUQH/AZkCUQH/AZkCUQH/AwcB/wMAAf8DOAH/AxQB/wGZAlEB/xQAAzIBUANRAaIDXQHS
AYwCiQH/A2AB1ANUAaYDNwFaAwUBBxAAAUIBTQE+BwABPgMAASgDAAFAAwABIAMAAQEBAAEBBgABARYA
A/8BAAHjA/8EAAHBA/8EAAGAAf8BCAEQBQABfwcAAT8HAAEfBgABgAEPBgABwAEHBgAB4AEDBgAB8AEB
BgAB+AcAAfwHAAH+AQgGAAH/BwAB/wGAAf8B8AQAAf8BwAH/AfgEAAHgAQMCAAGAAQEB4AEDAcABAQQA
AcABAQGABQABgAEAAYAFAAGAQQABgAUAAYABAAGAAQEEAAGAAQEBwAEDBAABwAEDAfABDwIAAYABAQHw
AQ8L
</value>
</data>
<data name="listChoices.TabIndex" type="System.Int32, mscorlib">

Binary file not shown.