Click here to Skip to main content
15,889,842 members
Articles / Programming Languages / Visual Basic

EnumGroupBox - a semi-automatic GroupBox control

Rate me:
Please Sign up or sign in to vote.
4.20/5 (10 votes)
3 May 20063 min read 64.1K   822   36  
A GroupBox automatically filled using Enums as templates.
using System;
using System.Collections;
using System.ComponentModel;        
namespace NSourceStructure
{
	public class ProcessOptions
	{
		#region Local Enums used for EnumGroupBoxes
		[Flags, Description("xEPredefined")]
			public enum EPredefined
		{
			[Description("xNothing")] Nothing = 0,
			[Description("xPhysical")] Physical = 1,
			[Description("xLogical")]	Logical = Physical << 1,
			[Description("xRebuild")]	Rebuild = Logical << 1,
			[Description("xStructure")]	Structure = Rebuild << 1
		}

		[Flags, Description("xETask")]
			public enum ETasks
		{
			[Description("0 xNoTask")] NoTask = 0,
			[Description("1 xBlocks")] Blocks = 1,
			[Description("2 xSplitIfBlock")] SplitIfBlock = Blocks << 1,
			[Description("3 xSplitSwitchBlock")] SplitSwitchBlock = SplitIfBlock << 1,
			[Description("4 xMoveComment")] MoveComment = SplitSwitchBlock << 1,
			[Description("5 xStripComments")] StripComments = MoveComment << 1,
			[Description("6 xStripEmptyLines")] StripEmptyLines = StripComments << 1,
			[Description("7 xStripRegions")] StripRegions = StripEmptyLines << 1,
			[Description("8 xDesignerRegion")] DesignerRegion = StripRegions << 1,
			[Description("9 xSortDesignReg")] SortDesignReg = DesignerRegion << 1,
			[Description("10 xTrimStart")] TrimStart = SortDesignReg << 1,
			[Description("11 xTrimEnd")] TrimEnd = TrimStart << 1,
			[Description("12 xCombineLines")] CombineLines = TrimEnd << 1,
			[Description("13 xCombineDeclares")] CombineDeclares = CombineLines << 1

		}
		[Flags, Description("xEUnitSort")]
			public enum EUnitSort
		{
			[Description("xNoUnitSort")] NoUnitSort = 0,
			[Description("xAccessSort")] AccessSort = 1,
			[Description("xAlphaSort")] AlphaSort = AccessSort << 1,
			[Description("xTypeSort")] TypeSort = AlphaSort << 1,
			[Description("xRebuildSort")] RebuildSort = TypeSort << 1
		}
		[Flags, Description("xESpecialSort")]
			public enum ESpecialSort
		{
			[Description("xNoSpecialSort")] NoSpecialSort = 0,
			[Description("xElseSort")] ElseSort = 1,
			[Description("xCaseSort")] CaseSort = ElseSort << 1
		}
		[Flags, Description("xEColorSchema")]
			public enum EColorSchema
		{
			[Description("xNone")] None = 0,
			[Description("xUnits")] Units = 1,
			[Description("xAccess")] Access = Units << 1,
			[Description("xCompare")] Compare = Access << 1,
			[Description("xLevel")] Level = Compare << 1
		}
		#endregion
		#region Constructor(s)
		public ProcessOptions()
		{
			m_Predefined = EPredefined.Nothing;
			m_UnitSort = EUnitSort.NoUnitSort;
			m_SpecialSort = ESpecialSort.NoSpecialSort;
			m_Tasks = ETasks.NoTask;
		}
		public ProcessOptions(ProcessOptions processOptions):this()
		{
			if (processOptions != null)
			{
				m_Predefined = (EPredefined)processOptions.Predefined;
				m_UnitSort = (EUnitSort)processOptions.UnitSort;
				m_SpecialSort = (ESpecialSort)processOptions.SpecialSort;
				m_Tasks = (ETasks)processOptions.Tasks;
			}
		}
		#endregion
		#region Local Variables
		private ETasks m_Tasks;
		private EUnitSort m_UnitSort;
		private ESpecialSort m_SpecialSort;
		private EPredefined m_Predefined;
		private EColorSchema m_ColorSchema;
		#endregion
		#region Properties
		public EPredefined Predefined
		{
			get
			{
				return m_Predefined;
			}
			set
			{
				m_Predefined = value;
				switch (m_Predefined)
				{
					case EPredefined.Structure:
						m_Tasks = ETasks.StripComments;
						addTask(ETasks.StripEmptyLines);
						addTask(ETasks.DesignerRegion);
						addTask(ETasks.StripRegions);
						addTask(ETasks.CombineLines);
						addTask(ETasks.CombineDeclares);
						addTask(ETasks.SortDesignReg);
						m_UnitSort = EUnitSort.TypeSort;
						m_SpecialSort = ESpecialSort.NoSpecialSort;
						break;
					case EPredefined.Logical:
						m_Tasks = ETasks.StripComments;
						addTask(ETasks.StripEmptyLines);
						addTask(ETasks.StripRegions);
						addTask(ETasks.TrimStart);
						addTask(ETasks.TrimEnd);
						addTask(ETasks.CombineLines);
						addTask(ETasks.SplitSwitchBlock);
						addTask(ETasks.SplitIfBlock);
						addTask(ETasks.Blocks);
						m_UnitSort = EUnitSort.AlphaSort;
						m_SpecialSort = ESpecialSort.CaseSort;
						addSpecialSort(ESpecialSort.ElseSort);
						break;
					case EPredefined.Nothing:
						m_Tasks = ETasks.NoTask;
						m_UnitSort = EUnitSort.NoUnitSort;
						m_SpecialSort = ESpecialSort.NoSpecialSort;
						break;
					case EPredefined.Physical:
						m_Tasks = ETasks.Blocks;
						addTask(ETasks.SplitSwitchBlock);
						addTask(ETasks.SplitIfBlock);
						m_UnitSort = EUnitSort.NoUnitSort;
						m_SpecialSort = ESpecialSort.NoSpecialSort;
						break;
					case EPredefined.Rebuild:
						m_Tasks = ETasks.MoveComment;
						addTask(ETasks.StripEmptyLines);
						addTask(ETasks.StripRegions);
						addTask(ETasks.DesignerRegion);
						addTask(ETasks.TrimEnd);
						addTask(ETasks.CombineLines);
						addTask(ETasks.CombineDeclares);
						addTask(ETasks.SplitSwitchBlock);
						addTask(ETasks.SplitIfBlock);
						addTask(ETasks.Blocks);
						m_UnitSort = EUnitSort.RebuildSort;
						m_SpecialSort = ESpecialSort.CaseSort;
						addSpecialSort(ESpecialSort.ElseSort);
						break;
				}
			}
		}
		public EUnitSort UnitSort
		{
			get 
			{
				return m_UnitSort;
			}
			set
			{
				m_UnitSort = value;
			}
		}
		public ESpecialSort SpecialSort
		{
			get 
			{
				return m_SpecialSort;
			}
			set
			{
				m_SpecialSort = value;
			}
		}
		public ETasks Tasks
		{
			get
			{
				return m_Tasks;
			}
			set
			{
				m_Tasks = value;
			}
		}
		public EColorSchema ColorSchema
		{
			get
			{
				return m_ColorSchema;
			}
			set
			{
				m_ColorSchema = value;
			}
		}
		#endregion
		#region Local Methods
		private void addClassSort(EUnitSort Flag)
		{
			m_UnitSort = m_UnitSort | Flag;
		}
		private void addSpecialSort(ESpecialSort Flag)
		{
			m_SpecialSort = m_SpecialSort | Flag;
		}
		private void addTask(ETasks Task)
		{
			m_Tasks = m_Tasks | Task;
		}
		#endregion
		#region Public Methods
		public bool Check(EUnitSort Sort)
		{
			return ((m_UnitSort & Sort) == Sort);
		}
		public bool Check(ESpecialSort Sort)
		{
			return ((m_SpecialSort & Sort) == Sort);
		}
		public bool Check(ETasks Task)
		{
			return ((m_Tasks & Task) == Task);
		}
		#endregion
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Germany Germany
Peter Schlang, working with computers since 1974
Developing mainly for newspapers since 1981, first as employee of ATEX
Freelancer since 1987
Preferred language is VB: Starting with VB 1.0 and VBDOS, up to VB.NET

Comments and Discussions