File: DesignerUtility.cs

package info (click to toggle)
mono 6.14.1%2Bds2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,282,732 kB
  • sloc: cs: 11,182,461; xml: 2,850,281; ansic: 699,123; cpp: 122,919; perl: 58,604; javascript: 30,841; asm: 21,845; makefile: 19,602; sh: 10,973; python: 4,772; pascal: 925; sql: 859; sed: 16; php: 1
file content (150 lines) | stat: -rw-r--r-- 5,656 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//------------------------------------------------------------------------------
// <copyright file="DesignerUtility.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>                                                                
//------------------------------------------------------------------------------

namespace System.Web.UI.Design.MobileControls.Util
{
    using System;
    using System.Collections;
    using System.Collections.Specialized;
    using System.ComponentModel;
    using System.ComponentModel.Design;
    using System.Diagnostics;
    using System.Reflection;
    using System.Web.UI.MobileControls;
    using System.Globalization;

    [
        System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand,
        Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)
    ]
    [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 class DesignerUtility
    {
        /* Removed for DCR 4240
        internal static bool IsValidName(String name)
        {
            if (name == null || name.Length == 0)
            {
                return false;
            }

            for (int pos = 0; pos < name.Length; pos++)
            {
                Char ch = name[pos];
                if (Char.IsWhiteSpace(ch) || ch.Equals('"') || ch.Equals('<') || 
                    ch.Equals('>') || ch.Equals('\'') || ch.Equals('&'))
                {
                    return false;
                }
            }
            return true;
        }
        */

        internal static bool TopLevelControl(MobileControl control)
        {
            if (control is Form || control is StyleSheet)
            {
                return true;
            }
            return false;
        }

        internal static String ChoiceToUniqueIdentifier(DeviceSpecificChoice choice)
        {
            Debug.Assert(choice != null);
            return  ChoiceToUniqueIdentifier(choice.Filter, choice.Argument);
        }

        internal static String ChoiceToUniqueIdentifier(String filter, String argument)
        {
            if (String.IsNullOrEmpty(filter))
            {
                filter = SR.GetString(SR.DeviceFilter_DefaultChoice);
            }
            if (argument == null)
            {
                argument = String.Empty;
            }
            return String.Format(CultureInfo.InvariantCulture, "{0} (\"{1}\")", filter, argument);
        }
        
        // NOTE: Throws CheckoutException.Canceled if user cancels checkout.
        internal static void EnsureFileCheckedOut(ISite site, String fileName)
        {
            Type serviceType = Type.GetType("Microsoft.VisualStudio.Shell.VsCheckoutService, " + AssemblyRef.MicrosoftVisualStudio);

            // Do nothing if service cannot be found.
            if (serviceType == null) {
//                Debug.Fail("type Microsoft.VisualStudio.Shell.VsCheckoutService cannot be found in DesignerUtility.EnsureFileCheckedOut.");
                return;
            }

            Object serviceInstance = System.Activator.CreateInstance(
                serviceType, new Object[] { site });

            try
            {
                Object[] args = new Object[] { fileName };
                bool fileNeedsCheckout = (bool) serviceType.InvokeMember(
                    "DoesFileNeedCheckout",
                    BindingFlags.Default | BindingFlags.InvokeMethod,
                    null,
                    serviceInstance,
                    args, CultureInfo.InvariantCulture
                );
                if(fileNeedsCheckout)
                {
                    serviceType.InvokeMember(
                        "CheckoutFile",
                        BindingFlags.Default | BindingFlags.InvokeMethod,
                        null,
                        serviceInstance,
                        args, CultureInfo.InvariantCulture
                    );                
                }
            }
            finally
            {
                serviceType.InvokeMember(
                    "Dispose",
                    BindingFlags.Default | BindingFlags.InvokeMethod,
                    null,
                    serviceInstance,
                    new Object[] {}, CultureInfo.InvariantCulture
                );                
                serviceInstance = null;
            }
        }

        // Ideally we would refactor the rest of the common code in the ADF/PO/DFE
        // dialogs into a separate manager object.
        internal static StringCollection GetDuplicateChoiceTreeNodes(ICollection treeNodes)
        {
            HybridDictionary visitedChoices = new HybridDictionary();
            StringCollection duplicateChoices = new StringCollection();
            
            foreach(ChoiceTreeNode node in treeNodes)
            {
                String key = ChoiceToUniqueIdentifier(node.Name, node.Argument);
                if(visitedChoices[key] == null)
                {
                    visitedChoices[key] = 1;
                }
                else
                {
                    if((int)visitedChoices[key] == 1)
                    {
                        duplicateChoices.Add(key);

                    }
                    visitedChoices[key] = ((int)visitedChoices[key]) + 1;
                }
            }
            return duplicateChoices;
        }        
    }
}