Files
Umbraco-CMS/OLD/umbraco.Legacy/umbraco/controls/CheckboxTree.cs
2012-06-22 20:39:48 +04:00

182 lines
7.0 KiB
C#

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using umbraco.cms.presentation.Trees;
namespace umbraco.presentation.controls {
public class CheckboxTree : System.Web.UI.WebControls.TreeView {
protected override void OnInit(EventArgs e) {
base.OnInit(e);
if (ScriptManager.GetCurrent(this.Page) == null)
throw new Exception("This control requires a ScriptManager");
//RenderJS();
RenderJS();
}
protected override void Render(HtmlTextWriter writer) {
base.Render(writer);
}
/// <summary>
/// Return the instance on the loadContent class. This lazily instantiates the loadContent object and if it is
/// already created, it will return the already created instance.
/// </summary>
private loadContent ContentTree {
get {
if (m_contentTree != null)
return m_contentTree;
m_contentTree = new loadContent("content");
m_contentTree.FunctionToCall = m_clientNodeClicked;
m_contentTree.IsDialog = true;
m_contentTree.DialogMode = TreeDialogModes.id;
return m_contentTree;
}
}
private loadContent m_contentTree;
private string m_clientNodeChecked = "void(0);";
private string m_clientNodeClicked = "void(0);";
private bool m_showCheckBoxes = true;
private string m_imagesRootPath = GlobalSettings.Path + "/images/umbraco/";
private string m_unpublishedColor = "#999999";
/// <summary>
/// The JavaScript method to call when a node is clicked. The method will receive a node ID as it's parameter.
/// </summary>
public string OnClientNodeClicked {
get { return m_clientNodeClicked; }
set { m_clientNodeClicked = value; }
}
/// <summary>
/// The JavaScript method to call when a node is checked. The method will receive a comma seperated list of node IDs that are checked.
/// </summary>
public string OnClientNodeChecked {
get { return m_clientNodeChecked; }
set { m_clientNodeChecked = value; }
}
public bool ShowCheckBoxes {
get { return m_showCheckBoxes; }
set { m_showCheckBoxes = value; }
}
public string ImagesRootPath {
get { return m_imagesRootPath; }
set { m_imagesRootPath = value; }
}
public string UnpublishedColor {
get { return m_unpublishedColor; }
set { m_unpublishedColor = value; }
}
/// <summary>
/// The JavaScript function that is called when a node is checked
/// </summary>
protected const string JSSelectNode = "ContentTreeControl_CheckedNode";
/// <summary>
/// Registers JavaScript for the contentTree
/// </summary>
private void RenderJS() {
StringBuilder sb = new StringBuilder();
ContentTree.RenderJS(ref sb);
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "treeJS", sb.ToString(), true);
}
/// <summary>
/// Get the XmlTree for the Content Tree for the node ID passed in.
/// </summary>
/// <param name="nodeID"></param>
/// <returns></returns>
public static XmlTree GetNodeData(int? nodeID, CheckboxTree cbTree) {
XmlTree xTree = new XmlTree();
cbTree.ContentTree.id = (nodeID == null ? cbTree.ContentTree.StartNodeID : nodeID.Value);
cbTree.ContentTree.Render(ref xTree);
return xTree;
}
/// <summary>
/// Converts an XmlTree to a TreeNodeCollection
/// </summary>
/// <param name="xTree"></param>
/// <param name="parentNode"></param>
/// <returns></returns>
public static TreeNodeCollection FromXmlTree(XmlTree xTree, TreeNode parentNode, CheckboxTree cbTree) {
TreeNodeCollection nodes = new TreeNodeCollection(parentNode);
foreach (XmlTreeNode xNode in xTree) {
if (xNode != null) {
TreeNode node = FromXmlTreeNode(xNode, cbTree);
nodes.Add(node);
}
}
return nodes;
}
/// <summary>
/// Converts an XmlTreeNode to a TreeNode
/// </summary>
/// <param name="xNode"></param>
/// <returns></returns>
public static TreeNode FromXmlTreeNode(XmlTreeNode xNode, CheckboxTree cbTree) {
TreeNode node = new TreeNode(xNode.Text, xNode.NodeID, cbTree.ImagesRootPath + xNode.Icon, xNode.Action, "");
node.ImageUrl = "";
node.PopulateOnDemand = (string.IsNullOrEmpty(xNode.Source) ? false : true);
//node.SelectAction = (string.IsNullOrEmpty(xNode.Source) ? TreeNodeSelectAction.Select : TreeNodeSelectAction.Expand);
node.SelectAction = TreeNodeSelectAction.None;
string nodeMarkup = "";
//add our custom checkbox
if (cbTree.ShowCheckBoxes)
nodeMarkup += string.Format("<span class=\"treeCheckBox\"><input type='checkbox' id='{0}' name='{0}' value='{1}' onclick='{2}(this);' /></span>",
"chk" + node.Value, node.Value, cbTree.OnClientNodeChecked);
if (xNode.Icon.StartsWith(".")) {
nodeMarkup += "<div class=\"sprTree " + xNode.Icon.TrimStart('.') + "\"><img class=\"webfx-tree-icon\" src=\"../images/nada.gif\"/> </div>";
} else {
nodeMarkup += "<span class=\"treeIcon\"><img src=\"" + cbTree.ImagesRootPath + xNode.Icon + "\"/></span>";
}
//show the node as being not published
if (xNode.NotPublished.Value)
nodeMarkup += string.Format("<span class=\"treeText\" style='color:{0};'>{1}</span>", cbTree.UnpublishedColor, node.Text);
else {
nodeMarkup += string.Format("<span class=\"treeText\">{0}</span>", node.Text);
}
node.Text = nodeMarkup;
return node;
}
/*
/// <summary>
/// Populates child nodes on demand
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void objTree_TreeNodePopulate(object sender, TreeNodeEventArgs e) {
XmlTree xTree = GetNodeData(int.Parse(e.Node.Value));
TreeNodeCollection nodes = FromXmlTree(xTree, e.Node);
foreach (TreeNode node in nodes)
e.Node.ChildNodes.Add(node);
} */
}
}