crashanalysercmd/PerfToolsSharedLibraries/Engine/SymbianUtils/Colour/ColourGenerationUtil.cs
author Matti Laitinen <matti.t.laitinen@nokia.com>
Thu, 11 Feb 2010 15:50:58 +0200
changeset 0 818e61de6cd1
permissions -rw-r--r--
Add initial version of Crash Analyser cmdline under EPL

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
* 
* Description:
*
*/
using System;
using System.Text;
using System.Collections.Generic;
using System.Drawing;

namespace SymbianUtils.Colour
{
    public class ColourGenerationUtil
    {
        #region Constructors
        public ColourGenerationUtil()
        {
            iStandardColors = CreateStandardColors();
            iBannedColors = CreateBannedColors();
        }
        #endregion

        #region API
        public Color GenerateRandomColour( Random aRandomNumberGenerator )
        {
            Color ret = Color.White;
            //
            bool blackListed = false;
            do
            {
                int colItemIndex = aRandomNumberGenerator.Next( (int) KnownColor.Aqua, (int) KnownColor.YellowGreen );
                KnownColor col = (KnownColor) colItemIndex;
                //
                blackListed = BannedColors.Contains( col );
                ret = Color.FromKnownColor( col );
            }
            while ( blackListed );
            //
            return ret;
        }

        public Color GenerateRandomColourAndRemoveFromList()
        {
            int count = iStandardColors.Count;
            System.Random random = new Random();
            int colItemIndex = random.Next( 0, count );
            Color ret = Color.FromKnownColor( iStandardColors[ colItemIndex ] );
            iStandardColors.RemoveAt( colItemIndex );
            return ret;
        }

        public void SuplimentStandardColoursWithAdditionalEntries( int aRequiredEntryCount )
        {
            // Pick colours at random from the standard colours until we have used them all
            System.Random random = new Random();

            // How many objects do we have to colourise?
            int iterations = 0;
            int maxIterations = (int) KnownColor.MenuHighlight - iBannedColors.Count;
            while ( iStandardColors.Count < aRequiredEntryCount && iterations < maxIterations )
            {
                int colItemIndex = random.Next( (int) KnownColor.Aqua, (int) KnownColor.YellowGreen );
                KnownColor col = (KnownColor) colItemIndex;
                //
                bool alreadyExists = iStandardColors.Contains( col );
                bool isBanned = iBannedColors.Contains( col );
                if ( !alreadyExists && !isBanned )
                {
                    iStandardColors.Add( col );
                }

                ++iterations;
            }

            // If we still dont' have enough colours at this point, then just duplicate some of the
            // known colours
            iterations = 0;
            maxIterations = iStandardColors.Count;
            while ( iStandardColors.Count < aRequiredEntryCount )
            {
                KnownColor col = iStandardColors[ iterations ];
                iStandardColors.Add( col );
                //
                if ( iterations >= maxIterations )
                {
                    iterations = 0;
                }
            }
        }

        public List<KnownColor> CreateStandardColors()
        {
            List<KnownColor> list = new List<KnownColor>();
            //
            list.Add( KnownColor.Red );
            list.Add( KnownColor.IndianRed );
            list.Add( KnownColor.Tomato );
            list.Add( KnownColor.SandyBrown );
            list.Add( KnownColor.Moccasin );
            list.Add( KnownColor.Gold );
            list.Add( KnownColor.Yellow );
            list.Add( KnownColor.YellowGreen );
            list.Add( KnownColor.LawnGreen );
            list.Add( KnownColor.ForestGreen );
            list.Add( KnownColor.Aquamarine );
            list.Add( KnownColor.LightSeaGreen );
            list.Add( KnownColor.Cyan );
            list.Add( KnownColor.SkyBlue );
            list.Add( KnownColor.DodgerBlue );
            list.Add( KnownColor.LightSteelBlue );
            list.Add( KnownColor.SlateBlue );
            list.Add( KnownColor.DarkOrchid );
            list.Add( KnownColor.Fuchsia );
            list.Add( KnownColor.Pink );
            //
            return list;
        }

        public List<KnownColor> CreateBannedColors()
        {
            List<KnownColor> list = new List<KnownColor>();
            //
            list.Add( KnownColor.Black );
            list.Add( KnownColor.LightGray );
            list.Add( KnownColor.White );
            list.Add( KnownColor.Gray );
            list.Add( KnownColor.GrayText );
            list.Add( KnownColor.DarkGray );
            list.Add( KnownColor.DimGray );
            list.Add( KnownColor.Azure );
            list.Add( KnownColor.Silver );
            list.Add( KnownColor.GhostWhite );
            list.Add( KnownColor.DarkKhaki );
            list.Add( KnownColor.DarkOliveGreen );
            list.Add( KnownColor.NavajoWhite );
            list.Add( KnownColor.Ivory );
            list.Add( KnownColor.Cornsilk );
            list.Add( KnownColor.Honeydew );
            list.Add( KnownColor.AliceBlue );
            list.Add( KnownColor.Gainsboro );
            list.Add( KnownColor.Beige );
            list.Add( KnownColor.Lavender );
            list.Add( KnownColor.FloralWhite );
            //
            list.Add( KnownColor.Desktop );
            list.Add( KnownColor.AppWorkspace );
            list.Add( KnownColor.Transparent );
            list.Add( KnownColor.Bisque );
            list.Add( KnownColor.Control );
            list.Add( KnownColor.ControlText );
            list.Add( KnownColor.ControlDark );
            list.Add( KnownColor.ControlDarkDark );
            list.Add( KnownColor.ControlLight );
            list.Add( KnownColor.ControlLightLight );
            list.Add( KnownColor.ButtonFace );
            list.Add( KnownColor.ButtonHighlight );
            list.Add( KnownColor.ButtonShadow );
            list.Add( KnownColor.GradientActiveCaption );
            list.Add( KnownColor.GradientInactiveCaption );
            list.Add( KnownColor.HotTrack );
            list.Add( KnownColor.Menu );
            list.Add( KnownColor.MenuBar );
            list.Add( KnownColor.MenuHighlight );
            list.Add( KnownColor.MenuText );
            list.Add( KnownColor.ActiveBorder );
            list.Add( KnownColor.ActiveCaption );
            list.Add( KnownColor.ActiveCaptionText );
            list.Add( KnownColor.InactiveBorder );
            list.Add( KnownColor.InactiveCaption );
            list.Add( KnownColor.InactiveCaptionText );
            list.Add( KnownColor.Highlight );
            list.Add( KnownColor.HighlightText );
            list.Add( KnownColor.BlanchedAlmond );
            list.Add( KnownColor.Info );
            list.Add( KnownColor.InfoText );
            list.Add( KnownColor.Window );
            list.Add( KnownColor.WindowText );
            list.Add( KnownColor.WindowFrame );
            list.Add( KnownColor.ScrollBar );
            list.Add( KnownColor.LightBlue );
            //
            return list;
        }
        #endregion

        #region Properties
        public List<KnownColor> StandardColors
        {
            get { return iStandardColors; }
        }

        public List<KnownColor> BannedColors
        {
            get { return iBannedColors; }
        }
        #endregion

        #region Data members
        private readonly List<KnownColor> iStandardColors;
        private readonly List<KnownColor> iBannedColors;
        #endregion
    }
}