//------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ namespace System.Web.UI.MobileControls { using System; using System.ComponentModel; using System.Diagnostics; [ AttributeUsage(AttributeTargets.All) ] [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")] internal sealed class MobileCategoryAttribute : CategoryAttribute { private static MobileCategoryAttribute deviceSpecific; private const String _categoryDeviceSpecific = "Category_DeviceSpecific"; private const String _categoryPrefix = "Category_"; private const String _usCategoryDeviceSpecific = "Device Specific"; private static readonly int _prefixLength = _categoryPrefix.Length; // Initializes a new instance of the CategoryAttribute class. internal /*public*/ MobileCategoryAttribute(String category) : base(category) { } internal /*public*/ static CategoryAttribute DeviceSpecific { get { if (deviceSpecific == null) { deviceSpecific = new MobileCategoryAttribute(_categoryDeviceSpecific); } return deviceSpecific; } } // This method is called the first time the category property // is accessed. It provides a way to lookup a localized string for // the given category. Classes may override this to add their // own localized names to categories. If a localized string is // available for the given value, the method should return it. // Otherwise, it should return null. protected override String GetLocalizedString(String value) { Debug.Assert(value != null); String localizedValue = null; int index = value.IndexOf(_categoryPrefix, StringComparison.Ordinal); // mobile controls have "Category_" prefix. if (index == 0) { String categoryName = value.Substring(_prefixLength); // see if already defined in base class. localizedValue = base.GetLocalizedString(categoryName); } // fall back to local resource string. if (localizedValue == null) { localizedValue = (String) SR.GetString(value); } if (localizedValue == null && value.Equals(_usCategoryDeviceSpecific)) { localizedValue = (String) SR.GetString(SR.Category_DeviceSpecific); } // This attribute is internal, and we should never have a missing resource string. Debug.Assert(localizedValue != null, "All MobileWebForms category attributes should have localized strings. Category '" + value + "' not found."); return localizedValue; } } }