using System;
using System.Collections;
using System.Web;
using System.Web.UI.WebControls;
using CMS.CMSHelper;
using CMS.GlobalHelper;
using CMS.SettingsProvider;
using CMS.UIControls;
public partial class CMSAdminControls_UI_Trees_ObjectTree : CMSUserControl
{
#region "Events"
///
/// Fires when new node is created, returns true if the object should be created.
///
public event ObjectTypeTreeNode.OnBeforeCreateNodeHandler OnBeforeCreateNode;
#endregion
#region "Variables"
private string mNodeTextTemplate = "##ICON####NODENAME##";
private string mSelectedNodeTextTemplate = "##ICON####NODENAME##";
private string mValueTextTemplate = null;
private string mPreselectObjectType = string.Empty;
private ObjectTypeTreeNode mRootNode = null;
private int mSiteId = 0;
private bool mUsePostback = false;
private bool mUseImages = false;
private bool mIsPreselectedObjectTypeSiteObject = false;
#endregion
#region "Properties"
///
/// Tree definition.
///
public ObjectTypeTreeNode RootNode
{
get
{
return mRootNode;
}
set
{
mRootNode = value;
}
}
///
/// Template of the node text.
///
public string NodeTextTemplate
{
get
{
return mNodeTextTemplate;
}
set
{
mNodeTextTemplate = value;
}
}
///
/// Template of the selected node text.
///
public string SelectedNodeTextTemplate
{
get
{
return mSelectedNodeTextTemplate;
}
set
{
mSelectedNodeTextTemplate = value;
}
}
///
/// Template of the node Value.
///
public string ValueTextTemplate
{
get
{
return mValueTextTemplate;
}
set
{
mValueTextTemplate = value;
}
}
///
/// Site ID.
///
public int SiteID
{
get
{
return mSiteId;
}
set
{
mSiteId = value;
}
}
///
/// Tree view control.
///
public TreeView TreeView
{
get
{
return treeElem;
}
}
///
/// Use postback on node selection.
///
public bool UsePostback
{
get
{
return mUsePostback;
}
set
{
mUsePostback = value;
}
}
///
/// Use images on node tree.
///
public bool UseImages
{
get
{
return mUseImages;
}
set
{
mUseImages = value;
}
}
public override bool EnableViewState
{
get
{
return base.EnableViewState;
}
set
{
base.EnableViewState = value;
treeElem.EnableViewState = value;
}
}
///
/// Defines whether some specific object type should be preselected.
///
public string PreselectObjectType
{
get
{
return mPreselectObjectType;
}
set
{
mPreselectObjectType = value;
}
}
///
/// Defines whether preselected object type is site-related object type.
///
public bool IsPreselectedObjectTypeSiteObject
{
get
{
return mIsPreselectedObjectTypeSiteObject;
}
set
{
mIsPreselectedObjectTypeSiteObject = value;
}
}
#endregion
#region "Page events"
protected void Page_Load(object sender, EventArgs e)
{
treeElem.ExpandImageToolTip = GetString("contenttree.expand");
treeElem.CollapseImageToolTip = GetString("contenttree.collapse");
string imagePath = "Design/Controls/Tree";
if (CultureHelper.IsUICultureRTL())
{
imagePath = "RTL/" + imagePath;
}
treeElem.LineImagesFolder = GetImageUrl(imagePath, IsLiveSite, false);
if (!RequestHelper.IsPostBack())
{
ReloadData();
}
}
#endregion
#region "Other methods"
public void ReloadData()
{
treeElem.Nodes.Clear();
if (RootNode != null)
{
TreeNode rootNode = CreateNode(RootNode);
rootNode.Selected = true;
treeElem.Nodes.Add(rootNode);
// Expand node structure
TreeNode nodeToExpand = treeElem.SelectedNode.Parent;
while (nodeToExpand != null)
{
nodeToExpand.Expanded = true;
nodeToExpand = nodeToExpand.Parent;
}
}
}
///
/// Defines whether preselected object type is contained in the structure.
///
public bool ContainsObjectType(string type)
{
if (treeElem.Nodes.Count > 0)
{
return ContainsObjectType(treeElem.Nodes[0], type);
}
else
{
return false;
}
}
///
/// Defines whether preselected object type is contained in the structure.
///
public bool ContainsObjectType(TreeNode nodeToExpand, string type)
{
if (nodeToExpand.Value == type)
{
return true;
}
if (nodeToExpand.ChildNodes.Count > 0)
{
foreach (TreeNode node in nodeToExpand.ChildNodes)
{
if (ContainsObjectType(node, type))
{
return true;
}
}
}
return false;
}
public TreeNode CreateNode(ObjectTypeTreeNode source)
{
// Create new node
TreeNode newNode = new TreeNode();
newNode.Expanded = source.Expand;
// Get the image
string objectType = source.ObjectType ?? source.Group;
if (!UsePostback)
{
newNode.NavigateUrl = "#";
}
string template = NodeTextTemplate;
// Site
int siteId = 0;
if (source.Site)
{
siteId = SiteID;
}
// Title
string name = GetString("ObjectTasks." + objectType.Replace(".", "_").Replace("#", "_"));
// Image
string imageUrl = GetObjectIconUrl(objectType, "list.png");
string imageTag = "
";
if ((objectType == String.Empty) || (objectType == CMSObjectHelper.GROUP_OBJECTS))
{
imageUrl = GetImageUrl("General/DefaultRoot.png");
imageTag = "
";
template = imageTag + SelectedNodeTextTemplate;
siteId = -1;
name = GetString("ObjectTasks.Root");
}
if (source.Main)
{
name = "" + name + "";
}
newNode.Text = template.Replace("##ICON##", imageTag).Replace("##NODENAME##", name).Replace("##SITEID##", siteId.ToString()).Replace("##OBJECTTYPE##", HttpUtility.UrlEncode(objectType));
if (ValueTextTemplate != null)
{
newNode.Value = ValueTextTemplate.Replace("##SITEID##", siteId.ToString()).Replace("##OBJECTTYPE##", objectType);
}
// Add image to the node
if (UseImages && (imageUrl != ""))
{
newNode.ImageUrl = imageUrl;
}
// Disable if not active node
if (UsePostback && !source.Active)
{
newNode.SelectAction = TreeNodeSelectAction.None;
}
if (source.Group != null && !source.Active)
{
newNode.SelectAction = TreeNodeSelectAction.Expand;
}
// Add child nodes
if (source.ChildNodes.Count > 0)
{
foreach (ObjectTypeTreeNode child in source.ChildNodes)
{
if ((SiteID > 0) || !child.Site)
{
if ((OnBeforeCreateNode == null) || OnBeforeCreateNode(child))
{
// Create child node
TreeNode childNode = CreateNode(child);
if ((child.ObjectType != null) || (childNode.ChildNodes.Count > 0))
{
newNode.ChildNodes.Add(childNode);
// Preselect node
if ((child.ObjectType == PreselectObjectType) && (child.Site == IsPreselectedObjectTypeSiteObject))
{
childNode.Selected = true;
}
}
}
}
}
}
return newNode;
}
#endregion
}