示例#1
0
        public object Clone()
        {
            CustomisableColourTable clone = (CustomisableColourTable)MemberwiseClone();

            clone._colours = new Dictionary <ColourTableGroup, Color>(clone._colours);
            return(clone);
        }
示例#2
0
        public static void SaveAs(CustomisableColourTable table, string filePath)
        {
            if (table == null)
            {
                throw new ArgumentNullException("table");
            }
            if (filePath == null)
            {
                throw new ArgumentNullException("filePath");
            }

            // VB or C#?
            bool vb = IsVbFile(filePath);

            // Get user-defined namespace and class name.
            string        nameSpace  = Settings.Default.DefaultNamespace;
            string        className  = GetClassName(filePath);
            StringBuilder properties = new StringBuilder();

            // For each color in color table.
            IEnumerable <ColourTableGroup> values = Enum.GetValues(typeof(ColourTableGroup)).Cast <ColourTableGroup>();

            foreach (ColourTableGroup colorGroup in values)
            {
                // Color and name of the property.
                Color  colour       = table[colorGroup];
                string propertyName = Enum.GetName(typeof(ColourTableGroup), colorGroup);

                // Templates for Color.FromArgb and Color.FromName.
                string propertyTemplateArgb = vb ? VbPropertyArgbTemplate
                                                 : CsPropertyArgbTemplate;
                string propertyTemplateName = vb ? VbPropertyNameTemplate
                                                 : CsPropertyNameTemplate;

                // Compose property.
                string property;
                if (colour.IsNamedColor)
                {
                    property = string.Format(CultureInfo.InvariantCulture,
                                             propertyTemplateName, propertyName,
                                             colour.Name);
                }
                else
                {
                    property = string.Format(CultureInfo.InvariantCulture,
                                             propertyTemplateArgb, propertyName,
                                             colour.A, colour.R, colour.G, colour.B);
                }

                // Append to list.
                properties.AppendLine(property);
            }

            string header = Settings.Default.IncludeHeader
                                ? string.Format(
                CultureInfo.InvariantCulture,
                Header, vb ? VbComment : CsComment)
                                : string.Empty;

            // Generate output.
            string output = string.Format(
                CultureInfo.InvariantCulture,
                vb ? VbTemplate : CsTemplate,
                header, nameSpace, className, properties);

            File.WriteAllText(filePath, output);
        }
示例#3
0
        public static void LoadFrom(CustomisableColourTable table, string filePath)
        {
            if (table == null)
            {
                throw new ArgumentNullException("table");
            }
            if (filePath == null)
            {
                throw new ArgumentNullException("filePath");
            }

            // VB or C#?
            bool vb = IsVbFile(filePath);

            Regex regex = new Regex(
                vb ? VbPattern : CsPattern,
                RegexOptions.CultureInvariant | RegexOptions.IgnorePatternWhitespace |
                RegexOptions.Multiline | RegexOptions.IgnoreCase);

            // Try to open and read file.
            string text = File.ReadAllText(filePath);

            Match match = regex.Match(text);

            if (!match.Success)
            {
                throw new InvalidOperationException();
            }

            // Reset all colors to their default values.
            table.InitFromBase(true);

            bool modified = false;

            while (match.Success)
            {
                string property = match.Groups["Property"].Value;
                string name     = match.Groups["Name"].Value;

                Color colour;
                if (!string.IsNullOrEmpty(name))
                {
                    colour = Color.FromName(name);
                }
                else
                {
                    int r = int.Parse(match.Groups["R"].Value);
                    int g = int.Parse(match.Groups["G"].Value);
                    int b = int.Parse(match.Groups["B"].Value);

                    // Alpha chanel is optional.
                    int a;
                    if (!int.TryParse(match.Groups["A"].Value, out a))
                    {
                        a = 255;
                    }

                    colour = Color.FromArgb(a, r, g, b);
                }

                try
                {
                    ColourTableGroup colourGroup = (ColourTableGroup)Enum.Parse(typeof(ColourTableGroup), property);
                    table[colourGroup] = colour;
                    modified           = true;
                }
                catch (ArgumentException)
                {
                }

                match = match.NextMatch();
            }

            if (modified)
            {
                table.MakeColorsDefault();
            }
        }