The Labs \ Source Viewer \ SSCLI \ System.ComponentModel \ CategoryAttribute

  1. //------------------------------------------------------------------------------
  2. // <copyright file="CategoryAttribute.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. /*
  16. */
  17. namespace System.ComponentModel
  18. {
  19.     using System;
  20.     using System.ComponentModel;
  21.     using System.Diagnostics;
  22.     using System.Security.Permissions;
  23.    
  24.     /// <devdoc>
  25.     /// <para>Specifies the category in which the property or event will be displayed in a
  26.     /// visual designer.</para>
  27.     /// </devdoc>
  28.     [AttributeUsage(AttributeTargets.All)]
  29.     public class CategoryAttribute : Attribute
  30.     {
  31.         private static CategoryAttribute appearance;
  32.         private static CategoryAttribute asynchronous;
  33.         private static CategoryAttribute behavior;
  34.         private static CategoryAttribute data;
  35.         private static CategoryAttribute design;
  36.         private static CategoryAttribute action;
  37.         private static CategoryAttribute format;
  38.         private static CategoryAttribute layout;
  39.         private static CategoryAttribute mouse;
  40.         private static CategoryAttribute key;
  41.         private static CategoryAttribute focus;
  42.         private static CategoryAttribute windowStyle;
  43.         private static CategoryAttribute dragDrop;
  44.         private static CategoryAttribute defAttr;
  45.        
  46.         private bool localized;
  47.        
  48.         /// <devdoc>
  49.         /// <para>
  50.         /// Provides the actual category name.
  51.         /// </para>
  52.         /// </devdoc>
  53.         private string categoryValue;
  54.        
  55.         /// <devdoc>
  56.         /// <para>Gets the action category attribute.</para>
  57.         /// </devdoc>
  58.         public static CategoryAttribute Action {
  59.             get {
  60.                 if (action == null) {
  61.                     action = new CategoryAttribute("Action");
  62.                 }
  63.                 return action;
  64.             }
  65.         }
  66.        
  67.         /// <devdoc>
  68.         /// <para>Gets the appearance category attribute.</para>
  69.         /// </devdoc>
  70.         public static CategoryAttribute Appearance {
  71.             get {
  72.                 if (appearance == null) {
  73.                     appearance = new CategoryAttribute("Appearance");
  74.                 }
  75.                 return appearance;
  76.             }
  77.         }
  78.        
  79.         /// <devdoc>
  80.         /// <para>Gets the asynchronous category attribute.</para>
  81.         /// </devdoc>
  82.         public static CategoryAttribute Asynchronous {
  83.             get {
  84.                 if (asynchronous == null) {
  85.                     asynchronous = new CategoryAttribute("Asynchronous");
  86.                 }
  87.                 return asynchronous;
  88.             }
  89.         }
  90.        
  91.         /// <devdoc>
  92.         /// <para>Gets the behavior category attribute.</para>
  93.         /// </devdoc>
  94.         public static CategoryAttribute Behavior {
  95.             get {
  96.                 if (behavior == null) {
  97.                     behavior = new CategoryAttribute("Behavior");
  98.                 }
  99.                 return behavior;
  100.             }
  101.         }
  102.        
  103.         /// <devdoc>
  104.         /// <para>Gets the data category attribute.</para>
  105.         /// </devdoc>
  106.         public static CategoryAttribute Data {
  107.             get {
  108.                 if (data == null) {
  109.                     data = new CategoryAttribute("Data");
  110.                 }
  111.                 return data;
  112.             }
  113.         }
  114.        
  115.         /// <devdoc>
  116.         /// <para>Gets the default category attribute.</para>
  117.         /// </devdoc>
  118.         public static CategoryAttribute Default {
  119.             get {
  120.                 if (defAttr == null) {
  121.                     defAttr = new CategoryAttribute();
  122.                 }
  123.                 return defAttr;
  124.             }
  125.         }
  126.        
  127.         /// <devdoc>
  128.         /// <para>Gets the design category attribute.</para>
  129.         /// </devdoc>
  130.         public static CategoryAttribute Design {
  131.             get {
  132.                 if (design == null) {
  133.                     design = new CategoryAttribute("Design");
  134.                 }
  135.                 return design;
  136.             }
  137.         }
  138.        
  139.         /// <devdoc>
  140.         /// <para>Gets the drag and drop category attribute.</para>
  141.         /// </devdoc>
  142.         public static CategoryAttribute DragDrop {
  143.             get {
  144.                 if (dragDrop == null) {
  145.                     dragDrop = new CategoryAttribute("DragDrop");
  146.                 }
  147.                 return dragDrop;
  148.             }
  149.         }
  150.        
  151.         /// <devdoc>
  152.         /// <para>Gets the focus category attribute.</para>
  153.         /// </devdoc>
  154.         public static CategoryAttribute Focus {
  155.             get {
  156.                 if (focus == null) {
  157.                     focus = new CategoryAttribute("Focus");
  158.                 }
  159.                 return focus;
  160.             }
  161.         }
  162.        
  163.         /// <devdoc>
  164.         /// <para>Gets the format category attribute.</para>
  165.         /// </devdoc>
  166.         public static CategoryAttribute Format {
  167.             get {
  168.                 if (format == null) {
  169.                     format = new CategoryAttribute("Format");
  170.                 }
  171.                 return format;
  172.             }
  173.         }
  174.        
  175.         /// <devdoc>
  176.         /// <para>Gets the keyboard category attribute.</para>
  177.         /// </devdoc>
  178.         public static CategoryAttribute Key {
  179.             get {
  180.                 if (key == null) {
  181.                     key = new CategoryAttribute("Key");
  182.                 }
  183.                 return key;
  184.             }
  185.         }
  186.        
  187.         /// <devdoc>
  188.         /// <para>Gets the layout category attribute.</para>
  189.         /// </devdoc>
  190.         public static CategoryAttribute Layout {
  191.             get {
  192.                 if (layout == null) {
  193.                     layout = new CategoryAttribute("Layout");
  194.                 }
  195.                 return layout;
  196.             }
  197.         }
  198.        
  199.         /// <devdoc>
  200.         /// <para>Gets the mouse category attribute.</para>
  201.         /// </devdoc>
  202.         public static CategoryAttribute Mouse {
  203.             get {
  204.                 if (mouse == null) {
  205.                     mouse = new CategoryAttribute("Mouse");
  206.                 }
  207.                 return mouse;
  208.             }
  209.         }
  210.        
  211.         /// <devdoc>
  212.         /// <para> Gets the window style category
  213.         /// attribute.</para>
  214.         /// </devdoc>
  215.         public static CategoryAttribute WindowStyle {
  216.             get {
  217.                 if (windowStyle == null) {
  218.                     windowStyle = new CategoryAttribute("WindowStyle");
  219.                 }
  220.                 return windowStyle;
  221.             }
  222.         }
  223.        
  224.         /// <devdoc>
  225.         /// <para>Initializes a new instance of the <see cref='System.ComponentModel.CategoryAttribute'/>
  226.         /// class with the default category.</para>
  227.         /// </devdoc>
  228.         public CategoryAttribute() : this("Default")
  229.         {
  230.         }
  231.        
  232.         /// <devdoc>
  233.         /// <para>Initializes a new instance of the <see cref='System.ComponentModel.CategoryAttribute'/> class with
  234.         /// the specified category name.</para>
  235.         /// </devdoc>
  236.         public CategoryAttribute(string category)
  237.         {
  238.             this.categoryValue = category;
  239.             this.localized = false;
  240.         }
  241.        
  242.         /// <devdoc>
  243.         /// <para>Gets the name of the category for the property or event
  244.         /// that this attribute is bound to.</para>
  245.         /// </devdoc>
  246.         public string Category {
  247.             get {
  248.                 if (!localized) {
  249.                     localized = true;
  250.                     string localizedValue = GetLocalizedString(categoryValue);
  251.                     if (localizedValue != null) {
  252.                         categoryValue = localizedValue;
  253.                     }
  254.                 }
  255.                 return categoryValue;
  256.             }
  257.         }
  258.        
  259.         /// <devdoc>
  260.         /// </devdoc>
  261.         /// <devdoc>
  262.         /// </devdoc>
  263.         /// <internalonly/>
  264.         /// <internalonly/>
  265.         public override bool Equals(object obj)
  266.         {
  267.             if (obj == this) {
  268.                 return true;
  269.             }
  270.            
  271.             if (obj is CategoryAttribute) {
  272.                 return Category.Equals(((CategoryAttribute)obj).Category);
  273.             }
  274.             return false;
  275.         }
  276.        
  277.         /// <devdoc>
  278.         /// <para>[To be supplied.]</para>
  279.         /// </devdoc>
  280.         public override int GetHashCode()
  281.         {
  282.             return Category.GetHashCode();
  283.         }
  284.        
  285.         /// <devdoc>
  286.         /// <para>Looks up the localized name of a given category.</para>
  287.         /// </devdoc>
  288.         protected virtual string GetLocalizedString(string value)
  289.         {
  290.             return (string)SR.GetObject("PropertyCategory" + value);
  291.         }
  292.        
  293.         /// <devdoc>
  294.         /// </devdoc>
  295.         /// <devdoc>
  296.         /// </devdoc>
  297.         /// <internalonly/>
  298.         /// <internalonly/>
  299.         public override bool IsDefaultAttribute()
  300.         {
  301.             return Category.Equals(Default.Category);
  302.         }
  303.     }
  304. }

Developer Fusion