From b226be4939c078abd7c75f14f6d999138afcf6bf Mon Sep 17 00:00:00 2001 From: azzlack Date: Fri, 27 Jul 2012 21:34:58 -0200 Subject: [PATCH] Split AbstractDataEditorControl to separate class file. Cleaned up code in AbstractDataEditor and AbstractDataEditorControl. Made AbstractDataEditorControl inherit from INamingContainer to help with control id issues. Made the ID and DataTypeName fields of AbstractDataEditor abstract so they must be implemented. --- .../datatype/AbstractDataEditor.cs | 197 +++++------------- .../datatype/AbstractDataEditorControl.cs | 148 +++++++++++++ src/umbraco.cms/umbraco.cms.csproj | 1 + .../MultiNodeTreePicker/MNTP_DataType.cs | 13 +- .../MultipleTextstringDataType.cs | 4 +- .../Slider/SliderDataType.cs | 4 +- 6 files changed, 216 insertions(+), 151 deletions(-) create mode 100644 src/umbraco.cms/businesslogic/datatype/AbstractDataEditorControl.cs diff --git a/src/umbraco.cms/businesslogic/datatype/AbstractDataEditor.cs b/src/umbraco.cms/businesslogic/datatype/AbstractDataEditor.cs index 32be9f7b33..91d425218c 100644 --- a/src/umbraco.cms/businesslogic/datatype/AbstractDataEditor.cs +++ b/src/umbraco.cms/businesslogic/datatype/AbstractDataEditor.cs @@ -1,10 +1,7 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Web.UI; - -namespace umbraco.cms.businesslogic.datatype +namespace umbraco.cms.businesslogic.datatype { + using System; + /// /// A much easier way to build custom datatypes. Inherit from this class /// and change Id and DataTypeName and then set the RenderControl property @@ -13,178 +10,96 @@ namespace umbraco.cms.businesslogic.datatype /// public abstract class AbstractDataEditor : BaseDataType, interfaces.IDataType { - private interfaces.IData _baseData; - private interfaces.IDataPrevalue _prevalueeditor; - private AbstractDataEditorControl m_editor; + private interfaces.IData baseData; + private interfaces.IDataPrevalue prevalueEditor; + private AbstractDataEditorControl editor; - public AbstractDataEditor() - { - m_editor = new AbstractDataEditorControl(this); - } /// - /// The data editor control is the 'real' IDataEditor control. Hook into the - /// OnSave event in your inherited class' constructor and update the - /// base.Data.Value property to save a value + /// Initializes a new instance of the class. + /// + protected AbstractDataEditor() + { + this.editor = new AbstractDataEditorControl(this); + } + + /// + /// Gets the data editor control that is the 'real' IDataEditor control. + /// Hook into the OnSave event in your inherited class' constructor and update the base.Data.Value property to save a value. /// /// The data editor control. public AbstractDataEditorControl DataEditorControl { - get { return m_editor; } + get { return this.editor; } } - #region IDataEditor Members /// - /// The RenderControl the control that's rendered when editing. This should be - /// *your* control, so set this property to the WebControl that you're creating + /// Sets the RenderControl to the control that's rendered when editing. + /// This should be *your* control, so set this property to the WebControl that you're creating. /// - /// The render control. + /// + /// The render control. + /// public System.Web.UI.Control RenderControl { set { - m_editor.Control = value; + this.editor.Control = value; } } + /// + /// Gets the data editor. + /// + /// + /// The data editor. + /// public override umbraco.interfaces.IDataEditor DataEditor { - get { return m_editor; } + get { return this.editor; } } + /// + /// Gets the stored data. + /// + /// + /// The stored data. + /// public override umbraco.interfaces.IData Data { get { - if (_baseData == null) - _baseData = new DefaultData(this); - return _baseData; + return this.baseData ?? (this.baseData = new DefaultData(this)); } } + /// + /// Gets the prevalue editor. + /// + /// + /// The prevalue editor. + /// public override umbraco.interfaces.IDataPrevalue PrevalueEditor { get { - if (_prevalueeditor == null) - _prevalueeditor = new DefaultPreValueEditor(this, false); - return _prevalueeditor; + return this.prevalueEditor ?? (this.prevalueEditor = new DefaultPreValueEditor(this, false)); } } - public override string DataTypeName - { - get { throw new NotImplementedException(); } - } - - public override Guid Id - { - get { throw new NotImplementedException(); } - } - - } - - [ValidationProperty("Value")] - public class AbstractDataEditorControl : System.Web.UI.WebControls.WebControl, interfaces.IDataEditor - { - private cms.businesslogic.datatype.BaseDataType _datatype; - - // property is used as a wrapper around the actual controls ValidationProperty - public object Value { - - get - { - - var attr = this.Control.GetType().GetCustomAttributes(typeof(ValidationPropertyAttribute), true); - - if (attr != null && attr.Length > 0) - { - //get value of marked property - System.Reflection.PropertyInfo info = this.Control.GetType().GetProperty(((ValidationPropertyAttribute)attr[0]).Name); - return info.GetValue(this.Control, null); - } - else - { - //not marked so no validation - return "ok"; - } - - - } - - } - public AbstractDataEditorControl(cms.businesslogic.datatype.BaseDataType DataType) - { - _datatype = DataType; - } - - public System.Web.UI.Control Control - { - get; - set; - } - - public virtual void Save() - { - FireOnSave(new EventArgs()); - } - - public virtual bool ShowLabel - { - get { return true; } - } - - [Obsolete("This is legacy and should be left to false")] - public virtual bool TreatAsRichTextEditor - { - get { return false; } - } - - public virtual System.Web.UI.Control Editor - { - get { return this; } - } - - protected override void OnInit(EventArgs e) - { - base.OnInit(e); - - if (_datatype.HasSettings()) - { - DataEditorSettingsStorage ss = new DataEditorSettingsStorage(); - - List> s = ss.GetSettings(_datatype.DataTypeDefinitionId); - ss.Dispose(); - - _datatype.LoadSettings(s); - } - - this.Controls.Add(Control); - } - - #endregion - - // events - - /// - /// The save event handler + /// Gets the name of the datatype. /// - public delegate void SaveEventHandler(EventArgs e); - /// - /// Occurs when [after save]. - /// - public event SaveEventHandler OnSave; - /// - /// Raises the event. - /// - /// The instance containing the event data. - protected virtual void FireOnSave(EventArgs e) - { - if (OnSave != null) - { - OnSave(e); - } - } + /// + /// The name of the datatype. + /// + public abstract override string DataTypeName { get; } + /// + /// Gets the unique id of the datatype. + /// + /// + /// The unique id of the datatype. + /// + public abstract override Guid Id { get; } } } diff --git a/src/umbraco.cms/businesslogic/datatype/AbstractDataEditorControl.cs b/src/umbraco.cms/businesslogic/datatype/AbstractDataEditorControl.cs new file mode 100644 index 0000000000..313073440c --- /dev/null +++ b/src/umbraco.cms/businesslogic/datatype/AbstractDataEditorControl.cs @@ -0,0 +1,148 @@ +namespace umbraco.cms.businesslogic.datatype +{ + using System; + using System.Web.UI; + using System.Web.UI.WebControls; + + using umbraco.interfaces; + + [ValidationProperty("Value")] + public class AbstractDataEditorControl : WebControl, INamingContainer, IDataEditor + { + /// + /// The base datatype. + /// + private readonly cms.businesslogic.datatype.BaseDataType datatype; + + /// + /// Initializes a new instance of the class. + /// + /// The base datatype. + public AbstractDataEditorControl(BaseDataType datatype) + { + this.datatype = datatype; + } + + /// + /// The save event handler + /// + public event EventHandler OnSave; + + /// + /// Gets or sets the control. + /// + /// + /// The control. + /// + public Control Control { get; set; } + + /// + /// Gets the value. + /// + /// + /// The value. + /// + public object Value + { + get + { + var attr = this.Control.GetType().GetCustomAttributes(typeof(ValidationPropertyAttribute), true); + + if (attr != null && attr.Length > 0) + { + // get value of marked property + var info = this.Control.GetType().GetProperty(((ValidationPropertyAttribute)attr[0]).Name); + + return info.GetValue(this.Control, null); + } + + // not marked so no validation + return "ok"; + } + } + + /// + /// Gets a value indicating whether a label is shown + /// + /// + /// true if [show label]; otherwise, false. + /// + public virtual bool ShowLabel + { + get + { + return true; + } + } + + /// + /// Gets a value indicating whether the editor should be treated as a rich text editor. + /// + /// + /// true if [treat as rich text editor]; otherwise, false. + /// + [Obsolete("This is legacy and should be left to false")] + public virtual bool TreatAsRichTextEditor + { + get + { + return false; + } + } + + /// + /// Gets the editor control + /// + /// + /// The editor. + /// + public virtual Control Editor + { + get + { + return this; + } + } + + /// + /// Saves the data in this control. + /// + public virtual void Save() + { + this.FireOnSave(EventArgs.Empty); + } + + /// + /// Raises the event. + /// + /// An object that contains the event data. + protected override void OnInit(EventArgs e) + { + base.OnInit(e); + + if (this.datatype.HasSettings()) + { + var ss = new DataEditorSettingsStorage(); + + var s = ss.GetSettings(this.datatype.DataTypeDefinitionId); + ss.Dispose(); + + this.datatype.LoadSettings(s); + } + + this.Controls.Add(this.Control); + } + + /// + /// Raises the event. + /// + /// The instance containing the event data. + protected virtual void FireOnSave(EventArgs e) + { + if (this.OnSave != null) + { + this.OnSave(this, e); + } + } + } +} \ No newline at end of file diff --git a/src/umbraco.cms/umbraco.cms.csproj b/src/umbraco.cms/umbraco.cms.csproj index 3ff2f6eac3..5d535419b6 100644 --- a/src/umbraco.cms/umbraco.cms.csproj +++ b/src/umbraco.cms/umbraco.cms.csproj @@ -202,6 +202,7 @@ + diff --git a/src/umbraco.editorControls/MultiNodeTreePicker/MNTP_DataType.cs b/src/umbraco.editorControls/MultiNodeTreePicker/MNTP_DataType.cs index 066e868388..2cc5de8052 100644 --- a/src/umbraco.editorControls/MultiNodeTreePicker/MNTP_DataType.cs +++ b/src/umbraco.editorControls/MultiNodeTreePicker/MNTP_DataType.cs @@ -21,7 +21,7 @@ namespace umbraco.editorControls.MultiNodeTreePicker RenderControl = m_Tree; m_Tree.Init += Tree_Init; m_Tree.Load += Tree_Load; - DataEditorControl.OnSave += DataEditorControl_OnSave; + DataEditorControl.OnSave += DataEditorControl_OnSave; } @@ -157,11 +157,12 @@ namespace umbraco.editorControls.MultiNodeTreePicker } - /// - /// Handle the saving event, need to give data to Umbraco - /// - /// The instance containing the event data. - void DataEditorControl_OnSave(EventArgs e) + /// + /// Handle the saving event, need to give data to Umbraco + /// + /// The source of the event. + /// The instance containing the event data. + void DataEditorControl_OnSave(object sender, EventArgs e) { string val; if (StoreAsCommaDelimited) diff --git a/src/umbraco.editorControls/MultipleTextstring/MultipleTextstringDataType.cs b/src/umbraco.editorControls/MultipleTextstring/MultipleTextstringDataType.cs index 75ea3a9d53..c83e73e544 100644 --- a/src/umbraco.editorControls/MultipleTextstring/MultipleTextstringDataType.cs +++ b/src/umbraco.editorControls/MultipleTextstring/MultipleTextstringDataType.cs @@ -36,7 +36,7 @@ namespace umbraco.editorControls.MultipleTextstring this.m_Control.Init += new EventHandler(this.m_Control_Init); // assign the save event for the data-type/editor - this.DataEditorControl.OnSave += new AbstractDataEditorControl.SaveEventHandler(this.DataEditorControl_OnSave); + this.DataEditorControl.OnSave += this.DataEditorControl_OnSave; } /// @@ -127,7 +127,7 @@ namespace umbraco.editorControls.MultipleTextstring /// Saves the data for the editor control. /// /// The instance containing the event data. - private void DataEditorControl_OnSave(EventArgs e) + private void DataEditorControl_OnSave(object sender, EventArgs e) { this.Data.Value = this.m_Control.Values; } diff --git a/src/umbraco.editorControls/Slider/SliderDataType.cs b/src/umbraco.editorControls/Slider/SliderDataType.cs index d3d02cc151..becbd416df 100644 --- a/src/umbraco.editorControls/Slider/SliderDataType.cs +++ b/src/umbraco.editorControls/Slider/SliderDataType.cs @@ -32,7 +32,7 @@ namespace umbraco.editorControls.Slider this.m_Control.Init += new EventHandler(this.m_Control_Init); // assign the save event for the data-type/editor - this.DataEditorControl.OnSave += new AbstractDataEditorControl.SaveEventHandler(this.DataEditorControl_OnSave); + this.DataEditorControl.OnSave += this.DataEditorControl_OnSave; } /// @@ -115,7 +115,7 @@ namespace umbraco.editorControls.Slider /// Saves the editor control value. /// /// The instance containing the event data. - private void DataEditorControl_OnSave(EventArgs e) + private void DataEditorControl_OnSave(object sender, EventArgs e) { // set the values (on PostBack) var value1 = this.m_Control.Options.MinValue;