1:
2: protected bool IsDesignMode { get; set; }
3: protected override void RenderBody(HtmlTextWriter writer)
4: {
5: if (this.WebPartManager.DisplayMode.Name == "Design")
6: {
7: this.IsDesignMode = true;
8: }
9: if (this != null)
10: {
11: if ((base.DesignMode
12: || ((base.WebPartManager != null)
13: && base.WebPartManager.DisplayMode.AllowPageDesign))
14: && (((this.BorderColor != Color.Empty)
15: || (this.BorderStyle != BorderStyle.NotSet))
16: || (this.BorderWidth != Unit.Empty)))
17: {
18: Style style = new Style();
19: style.BorderColor = this.BorderColor;
20: style.BorderStyle = this.BorderStyle;
21: style.BorderWidth = this.BorderWidth;
22: style.AddAttributesToRender(writer, this);
23: }
24: writer.RenderBeginTag(HtmlTextWriterTag.Table);
25: WebPartChrome webPartChrome = this.WebPartChrome;
26: int index = 0;
27: //If there are no webparts in this WebPartZone then
28: //we render an empty droppable area
29: if (WebParts.Count == 0 && this.IsDesignMode)
30: {
31: this.RenderEmptyZoneBody(writer, index);
32: }
33: else
34: {
35: //Loop through all the webparts and render the droppable areas
36: //and add the draggable style to the webparts
37: foreach (WebPart wp in WebParts)
38: {
39: if (this.IsDesignMode && index == 0)
40: this.RenderDroppableRow(writer, index);
41: writer.RenderBeginTag(HtmlTextWriterTag.Tr);
42: writer.RenderBeginTag(HtmlTextWriterTag.Td);
43: if (this.IsDesignMode)
44: {
45: writer.AddStyleAttribute(HtmlTextWriterStyle.Position, "");
46: writer.AddAttribute(HtmlTextWriterAttribute.Class, "draggable");
47: writer.AddAttribute("webPartID", "WebPart_" + wp.ID);
48: writer.RenderBeginTag(HtmlTextWriterTag.Table);
49: }
50: else
51: writer.RenderBeginTag(HtmlTextWriterTag.Table);
52: writer.RenderBeginTag(HtmlTextWriterTag.Tr);
53: writer.RenderBeginTag(HtmlTextWriterTag.Td);
54: webPartChrome.RenderWebPart(writer, wp);
55: writer.RenderEndTag();
56: writer.RenderEndTag();
57: writer.RenderEndTag();
58: writer.RenderEndTag();
59: writer.RenderEndTag();
60: index++;
61: if (this.IsDesignMode)
62: this.RenderDroppableRow(writer, index);
63: }
64: }
65: writer.RenderEndTag();
66: }
67: }
68: //It renders a TableRow tag with the droppable attribute
69: private void RenderDroppableRow(HtmlTextWriter writer, int index)
70: {
71: writer.RenderBeginTag(HtmlTextWriterTag.Tr);
72: writer.AddAttribute(HtmlTextWriterAttribute.Class, "droppable");
73: writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "20px");
74: writer.AddAttribute("wpindex", index.ToString());
75: writer.RenderBeginTag(HtmlTextWriterTag.Td);
76: writer.RenderEndTag();
77: writer.RenderEndTag();
78: }
79: //This method creates the empty zone that allows webparts
80: //to be droped in
81: private void RenderEmptyZoneBody(HtmlTextWriter writer, int index)
82: {
83: string emptyZoneText = this.EmptyZoneText;
84: bool designMode = ((!base.DesignMode && this.AllowLayoutChange)
85: && ((base.WebPartManager != null)
86: && base.WebPartManager.DisplayMode.AllowPageDesign))
87: && !string.IsNullOrEmpty(emptyZoneText);
88: //Depending on the orientation that the webpart has is how
89: //we acctually render the empty zone
90: if (this.LayoutOrientation == Orientation.Vertical)
91: writer.RenderBeginTag(HtmlTextWriterTag.Tr);
92: if (designMode)
93: writer.AddAttribute(HtmlTextWriterAttribute.Valign, "top");
94: if (this.LayoutOrientation == Orientation.Horizontal)
95: writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%");
96: else
97: writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "100%");
98: writer.AddAttribute(HtmlTextWriterAttribute.Class, "droppable");
99: writer.AddStyleAttribute(HtmlTextWriterStyle.Height, "20px");
100: writer.AddAttribute("wpindex", index.ToString());
101: writer.RenderBeginTag(HtmlTextWriterTag.Td);
102: if (designMode)
103: {
104: Style emptyZoneTextStyle = base.EmptyZoneTextStyle;
105: if (!emptyZoneTextStyle.IsEmpty)
106: emptyZoneTextStyle.AddAttributesToRender(writer, this);
107: writer.RenderBeginTag(HtmlTextWriterTag.Div);
108: writer.Write(emptyZoneText);
109: writer.RenderEndTag();
110: }
111: writer.RenderEndTag();
112: if (this.LayoutOrientation == Orientation.Vertical)
113: writer.RenderEndTag();
114: if (designMode && this.DragDropEnabled)
115: this.RenderDropCue(writer);
116: }
117:
118: protected override void Render(System.Web.UI.HtmlTextWriter writer)
119: {
120: if (this.WebPartManager.DisplayMode.Name == "Design")
121: this.IsDesignMode = true;
122:
123: if (this != null)
124: {
125: writer.AddAttribute(HtmlTextWriterAttribute.Id, this.ID);
126: writer.AddAttribute(HtmlTextWriterAttribute.Class, "webPartZoneClass");
127: writer.RenderBeginTag(HtmlTextWriterTag.Table);
128: writer.RenderBeginTag(HtmlTextWriterTag.Tr);
129: writer.RenderBeginTag(HtmlTextWriterTag.Td);
130:
131: this.RenderBody(writer);
132:
133: writer.RenderEndTag();
134: writer.RenderEndTag();
135: writer.RenderEndTag();
136: }
137: else
138: {
139: base.RenderContents(writer);
140: }
141: }