File: PanelDesigner.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 (182 lines) | stat: -rw-r--r-- 6,366 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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
//------------------------------------------------------------------------------
// <copyright file="PanelDesigner.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>                                                                
//------------------------------------------------------------------------------

namespace System.Web.UI.Design.MobileControls
{
    using System;
    using System.Drawing;
    using System.ComponentModel;
    using System.Diagnostics;
    using System.Web.UI.Design.MobileControls.Util;
    using System.Web.UI.Design.MobileControls.Adapters;
    using System.Web.UI.MobileControls;

    using Microsoft.Win32;
    using System.Globalization;

    /// <summary>
    ///    <para>
    ///       Provides design-time support for the <see cref='System.Web.UI.MobileControls.Panel'/>
    ///       web control.
    ///    </para>
    /// </summary>
    /// <seealso cref='System.Web.UI.MobileControls.Panel'/>
    [
        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 PanelDesigner : MobileContainerDesigner
    {
        private Panel  _panel;
        private TemporaryBitmapFile _backgroundBmpFile = null;
        private Size   _defaultSize;

        internal PanelDesigner()
        {
            _defaultSize = new Size(300, 45);
        }

        private bool ValidContainment
        {
            get
            {
                return (ContainmentStatus == ContainmentStatus.InForm ||
                    ContainmentStatus == ContainmentStatus.InPanel ||
                    ContainmentStatus == ContainmentStatus.InTemplateFrame);
            }
        }

        protected override void Dispose(bool disposing) 
        {
            if (disposing) 
            {
                SystemEvents.UserPreferenceChanged -= 
                    new UserPreferenceChangedEventHandler(this.OnUserPreferenceChanged);
            }

            base.Dispose(disposing);
        }

        protected override Size GetDefaultSize()
        {
            return _defaultSize;
        }

        protected override String GetErrorMessage(out bool infoMode)
        {
            infoMode = false;

            // Skip containment checking if the control is placed in MobileUserControl
            if (DesignerAdapterUtil.InMobileUserControl(_panel))
            {
                return null;
            }

            if (DesignerAdapterUtil.InUserControl(_panel))
            {
                infoMode = true;
                return MobileControlDesigner._userControlWarningMessage;
            }

            if (!DesignerAdapterUtil.InMobilePage(_panel))
            {
                return SR.GetString(SR.MobileControl_MobilePageErrorMessage);
            }

            if (!ValidContainment)
            {
                return SR.GetString(SR.MobileControl_FormPanelContainmentErrorMessage);
            }

            return null;
        }

        /// <summary>
        ///   Initializes the designer with the Form control that this instance
        ///   of the designer is associated with.
        /// </summary>
        /// <param name='component'>
        ///   The associated Form control.
        /// </param>
        /// <seealso cref='IDesigner'/>
        public override void Initialize(IComponent component)
        {
            Debug.Assert(component is Panel,
                "PanelDesigner.Initialize - Invalid Panel Control");

            // This must be called first in order to get properties from runtime control.
            base.Initialize(component);

            _panel = (Panel) component;

            SystemEvents.UserPreferenceChanged += 
                new UserPreferenceChangedEventHandler(this.OnUserPreferenceChanged);
        }

        internal override void OnBackgroundImageChange(String message, bool infoMode)
        {
            if (message == null)
            {
                RemoveBehaviorStyle("backgroundImage");
                SetBehaviorStyle("paddingTop", 8);
            }
            else
            {
                ImageCreator.CreateBackgroundImage(
                    ref _backgroundBmpFile,
                    String.Empty,
                    String.Empty,
                    message,
                    infoMode,
                    GetDefaultSize().Width
                );

                // redraw the background image here
                SetBehaviorStyle("backgroundImage",
                    "url(" + _backgroundBmpFile.Url + ")");
                SetBehaviorStyle(
                    "paddingTop",
                    _backgroundBmpFile.UnderlyingBitmap.Height + 8
                );
            }
        }

        private void OnUserPreferenceChanged(Object sender, UserPreferenceChangedEventArgs e)
        {
            if (e.Category == UserPreferenceCategory.Color)
            {
                bool infoMode;
                String newMessage = GetErrorMessage(out infoMode);
                OnBackgroundImageChange(newMessage, infoMode);
            }            
        }

        /// <summary>
        ///   Adjust the appearance based on current status.
        /// </summary>
        //protected override void SetStyleAttributes()
        protected override void OnContainmentChanged()
        {
            base.OnContainmentChanged();

            SetBehaviorStyle("marginRight",
                ContainmentStatus == ContainmentStatus.AtTopLevel ? "30%" : "5px");

            SetBehaviorStyle("marginTop", ValidContainment? "3px" : "5px");
            SetBehaviorStyle("marginBottom", ValidContainment? "3px" : "5px");
            SetBehaviorStyle("width", ValidContainment? "100%" : GetDefaultSize().Width.ToString(CultureInfo.InvariantCulture) + "px");
        }

        protected override void SetControlDefaultAppearance()
        {
            base.SetControlDefaultAppearance();

            // Customize styles
            SetBehaviorStyle("borderStyle", "dotted");
        }
    }
}