diff options
Diffstat (limited to 'source/ShiftUI/Internal/BindingManagerBase.cs')
| -rw-r--r-- | source/ShiftUI/Internal/BindingManagerBase.cs | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/source/ShiftUI/Internal/BindingManagerBase.cs b/source/ShiftUI/Internal/BindingManagerBase.cs new file mode 100644 index 0000000..c2b0392 --- /dev/null +++ b/source/ShiftUI/Internal/BindingManagerBase.cs @@ -0,0 +1,204 @@ +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// Copyright (c) 2004-2005 Novell, Inc. +// +// Authors: +// Peter Bartok [email protected] +// Jackson Harper [email protected] +// + + +// NOT COMPLETE + +using System.ComponentModel; +using System.Collections; +using System; + +namespace ShiftUI +{ + public abstract class BindingManagerBase + { + private BindingsCollection bindings; + internal bool transfering_data; /* true if we're pushing or pulling data */ + + #region Public Constructors + public BindingManagerBase() + { + } + #endregion // Public Constructors + + #region Protected Instance Fields + protected EventHandler onCurrentChangedHandler; + protected EventHandler onPositionChangedHandler; + internal EventHandler onCurrentItemChangedHandler; + #endregion // Protected Instance Fields + + #region Public Instance Properties + public BindingsCollection Bindings { + get { + if (bindings == null) { + bindings = new BindingsCollection (); + } + return bindings; + } + } + + public abstract int Count { + get; + } + + public abstract object Current { + get; + } + + public bool IsBindingSuspended { + get { + return IsSuspended; + } + } + + public abstract int Position { + get; set; + } + #endregion // Public Instance Properties + + #region Public Instance Methods + public abstract void AddNew(); + + public abstract void CancelCurrentEdit(); + + public abstract void EndCurrentEdit(); + + public virtual PropertyDescriptorCollection GetItemProperties() + { + return GetItemPropertiesInternal (); + } + + internal virtual PropertyDescriptorCollection GetItemPropertiesInternal () + { + throw new NotImplementedException (); + } + + public abstract void RemoveAt(int index); + + public abstract void ResumeBinding(); + + public abstract void SuspendBinding(); + #endregion // Public Instance Methods + + internal virtual bool IsSuspended { + get { + return false; + } + } + + #region Protected Instance Methods + [MonoTODO ("Not implemented, will throw NotImplementedException")] + protected internal virtual PropertyDescriptorCollection GetItemProperties (ArrayList dataSources, ArrayList listAccessors) + { + throw new NotImplementedException(); + } + + [MonoTODO ("Not implemented, will throw NotImplementedException")] + protected virtual PropertyDescriptorCollection GetItemProperties (Type listType, int offset, ArrayList dataSources, ArrayList listAccessors) + { + throw new NotImplementedException(); + } + + protected internal abstract string GetListName (ArrayList listAccessors); + + protected internal abstract void OnCurrentChanged (EventArgs e); + + protected void PullData() + { + try { + if (!transfering_data) { + transfering_data = true; + UpdateIsBinding (); + } + foreach (Binding binding in Bindings) { + binding.PullData (); + } + } finally { + transfering_data = false; + } + } + + protected void PushData() + { + try { + if (!transfering_data) { + transfering_data = true; + UpdateIsBinding (); + } + foreach (Binding binding in Bindings) { + binding.PushData (); + } + } finally { + transfering_data = false; + } + } + + + protected void OnBindingComplete (BindingCompleteEventArgs args) + { + if (BindingComplete != null) + BindingComplete (this, args); + } + + protected abstract void OnCurrentItemChanged (EventArgs e); + + protected void OnDataError (Exception e) + { + if (DataError != null) + DataError (this, new BindingManagerDataErrorEventArgs (e)); + } + + protected abstract void UpdateIsBinding(); + #endregion // Protected Instance Methods + + internal void AddBinding (Binding binding) + { + if (Bindings.Contains (binding)) + return; + Bindings.Add (binding); + } + + #region Events + public event EventHandler CurrentChanged { + add { onCurrentChangedHandler += value; } + remove { onCurrentChangedHandler -= value; } + } + + public event EventHandler PositionChanged { + add { onPositionChangedHandler += value; } + remove { onPositionChangedHandler -= value; } + } + + public event EventHandler CurrentItemChanged { + add { onCurrentItemChangedHandler += value; } + remove { onCurrentItemChangedHandler -= value; } + } + + public event BindingCompleteEventHandler BindingComplete; + public event BindingManagerDataErrorEventHandler DataError; + #endregion // Events + } +} |
