// Copyright � 2007 Jeffrey Bazinet, http://www.vwd-cms.com/
using System;
using System.Data;
using System.Configuration;
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.IO;
using System.Text;
namespace VwdCms
{
public class FileRBL : RadioButtonList
{
private string _extension;
private string _folder;
private string _itemCssClass = "listitemwithicon";
private string _itemCssClassSelected = "listitemwithiconselected";
private bool _addNoneItem = true;
private string _imageUrl = VwdCms.Configuration.Utilities.ImageUrl;
private bool _includeExtensionInFileName = false;
private bool _filesLoaded = false;
public FileRBL()
{
// default settings
this.CssClass = "textboxtext";
this.EnableViewState = true;
this.AutoPostBack = false;
this.RepeatColumns = 3;
this.RepeatDirection = RepeatDirection.Vertical;
this.BorderStyle = BorderStyle.None;
this.CellPadding = 1;
this.CellSpacing = 1;
}
protected override void OnLoad(EventArgs e)
{
this.RegisterSelectionChangedScript();
this.SetListItemStyles();
base.OnLoad(e);
}
protected override void OnPreRender(EventArgs e)
{
LoadFilesPrivate();
base.OnPreRender(e);
}
public bool AddNoneItem
{
get { return _addNoneItem; }
set { _addNoneItem = value; }
}
public bool IncludeExtensionInFileName
{
get { return _includeExtensionInFileName; }
set { _includeExtensionInFileName = value; }
}
public string Extension
{
get { return _extension; }
set { _extension = value; }
}
// folder is a virtual path
public string Folder
{
get { return _folder; }
set { _folder = value; }
}
public string SelectedFile
{
get
{
if (_includeExtensionInFileName)
{
return this.SelectedValue;
}
else
{
string file = this.SelectedValue;
if (!string.IsNullOrEmpty(file))
{
if (file.ToLower().EndsWith(this.Extension))
{
file = file.Remove(file.Length - this.Extension.Length);
}
}
return file;
}
}
set
{
ListItem itm = this.Items.FindByValue(value);
this.SelectedIndex = this.Items.IndexOf(itm);
this.SetListItemStyles();
}
}
public string ItemCssClass
{
get { return _itemCssClass; }
set { _itemCssClass = value; }
}
public string ItemCssClassSelected
{
get { return _itemCssClassSelected; }
set { _itemCssClassSelected = value; }
}
public string ImageUrl
{
get { return _imageUrl; }
set
{
_imageUrl = value;
if (!_imageUrl.EndsWith("/"))
{
_imageUrl += "/";
}
}
}
private void LoadFilesPrivate()
{
if (!_filesLoaded)
{
LoadFiles();
SetListItemStyles();
}
}
public void LoadFiles()
{
_filesLoaded = true;
string selectedFile = this.SelectedFile;
this.Items.Clear();
string extension = this.Extension;
string lpFolder = VwdCms.Configuration.Utilities.GetLocalPath(this.Folder);
DirectoryInfo di = new DirectoryInfo(lpFolder);
FileInfo[] files = di.GetFiles("*" + extension);
ListItem itm = null;
if (this.AddNoneItem)
{
itm = new ListItem("None / Default", string.Empty);
this.Items.Add(itm);
}
if (files != null files.Length 0)
{
string displayname = null;
string filename = null;
foreach (FileInfo fi in files)
{
filename = fi.Name;
displayname = filename;
if (displayname.ToLower().EndsWith(".exclude"))
{
displayname = displayname.Remove(displayname.Length - ".exclude".Length);
}
displayname = displayname.Remove(displayname.Length - extension.Length);
itm = new ListItem(displayname, filename);
if (filename == selectedFile)
{
itm.Selected = true;
}
this.Items.Add(itm);
}
SetListItemStyles();
}
if (this.SelectedItem == null)
{
if (this.Items.Count 0)
{
this.SelectedIndex = 0;
}
}
}
private void SetListItemStyles()
{
string bgImage = "background-image:url("
+ this.ImageUrl
+ this.Extension.Remove(0, 1)
+ ".gif);";
foreach (ListItem itm in this.Items)
{
if (itm.Selected)
{
itm.Attributes.Add("class", this.ItemCssClassSelected);
}
else
{
itm.Attributes.Add("class", this.ItemCssClass);
}
itm.Attributes.Add("style", bgImage);
itm.Attributes.Add("onclick", this.ClientID + "_SelectionChanged(this);");
}
}
private void RegisterSelectionChangedScript()
{
StringBuilder sb = new StringBuilder();
sb.Append("<script type=\"text/javascript\">\r\n");
sb.Append("function ");
sb.Append(this.ClientID);
sb.Append("_SelectionChanged(item)\r\n { \r\n");
sb.Append("var radio = document.forms[0][item.name];\r\n");
sb.Append("if ( radio ) \r\n { \r\n");
sb.Append("for ( var i = 0; i < radio.length; i++ )\r\n { \r\n");
sb.Append("if ( radio[i].checked ) \r\n { \r\n");
sb.Append("radio[i].parentElement.className = \"");
sb.Append(this.ItemCssClassSelected);
sb.Append("\";\r\n");
sb.Append("} \r\n else \r\n { \r\n ");
sb.Append("radio[i].parentElement.className = \"");
sb.Append(this.ItemCssClass);
sb.Append("\";\r\n");
sb.Append("} \r\n ");
sb.Append("} \r\n ");
sb.Append("} \r\n ");
sb.Append("} \r\n ");
sb.Append("</script> \r\n ");
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
this.ClientID + "_SelectionChangedScript", sb.ToString());
}
}// end class
} // end namespace