/*
* Copyright (c) 2006, Brendan Grant (grantb@dahat.com)
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * All original and modified versions of this source code must include the
* above copyright notice, this list of conditions and the following
* disclaimer.
* * This code may not be used with or within any modules or code that is
* licensed in any way that that compels or requires users or modifiers
* to release their source code or changes as a requirement for
* the use, modification or distribution of binary, object or source code
* based on the licensed source code. (ex: Cannot be used with GPL code.)
* * The name of Brendan Grant may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY BRENDAN GRANT ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL BRENDAN GRANT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using System.Text;
namespace BrendanGrant.Helpers.FileAssociation
{
///
///
///
public class ProgramIcon
{
///
/// Represents and empty or nonexistent Program Icon
///
public static readonly ProgramIcon None = new ProgramIcon();
private string path;
private int index;
///
/// Gets or sets value that specifies icons index within a file.
///
public int Index
{
get { return index; }
set { index = value; }
}
///
/// Gets or sets a value that specifies the file containing the icon.
///
public string Path
{
get { return path; }
set { path = value; }
}
///
/// Creates instance of ProgramIcon.
///
/// Filename of file containing icon.
/// Index of icon within the file.
public ProgramIcon(string path, int index)
{
this.path = path;
this.index = index;
}
///
/// Creates instance of ProgramIcon.
///
/// Filename of file containing icon.
public ProgramIcon(string path)
{
this.path = path;
this.index = 0;
}
///
/// Creates instance of ProgramIcon.
///
public ProgramIcon()
{
this.path = string.Empty;
this.index = 0;
}
///
/// Returns string representation of current ProgramIcon.
///
///
public override string ToString()
{
return path + "," + index.ToString();
}
///
/// Parses string to create and instance of ProgramIcon.
///
/// String specifying file path. Icon can be included as well.
/// ProgramIcon based on input string.
public static ProgramIcon Parse(string regString)
{
if (regString == string.Empty)
return new ProgramIcon("");
if (regString.StartsWith("\"") && regString.EndsWith("\""))
{
if (regString.Length > 3)
regString = regString.Substring(1, regString.Length - 2);
}
string path;
int index = 0;
int commaPos = regString.IndexOf(",");
if (commaPos == -1)
{
commaPos = regString.Length;
}
else
{
index = int.Parse(regString.Substring(commaPos + 1));
}
path = regString.Substring(0, commaPos);
return new ProgramIcon(path, index);
}
///
///
///
///
///
///
public static bool operator ==(ProgramIcon lv, ProgramIcon rv)
{
if (ReferenceEquals(lv, null) && ReferenceEquals(rv, null))
return true;
else if (ReferenceEquals(lv, null) || ReferenceEquals(rv, null))
return false;
else
{
if (lv.path == rv.path
&& lv.index == rv.index)
{
return true;
}
}
return false;
}
///
///
///
///
///
///
public static bool operator !=(ProgramIcon lv, ProgramIcon rv)
{
return !(lv == rv);
}
///
/// Determines whether the specified System.Object is equal to the current System.Object.
///
/// The System.Object to compare with the current System.Object.
/// true if the specified System.Object is equal to the current System.Object; otherwise, false.
public override bool Equals(object obj)
{
//Exists only to avoid compiler warning
return this == (obj as ProgramIcon);
}
///
/// Serves as a hash function for a particular type.
///
/// A hash code for the current System.Object.
public override int GetHashCode()
{
//Exists only to avoid compiler warning
return base.GetHashCode();
}
}
}