aboutsummaryrefslogtreecommitdiff
path: root/source/ShiftUI/Internal/BindingManagerBase.cs
diff options
context:
space:
mode:
authorMichaelTheShifter <[email protected]>2016-07-20 09:40:36 -0400
committerMichaelTheShifter <[email protected]>2016-07-20 09:40:36 -0400
commitd40fed5ce2bc806a91245adb18039634eac13ed0 (patch)
treef1d7168aee6db109ac2c738ad18c9db667a6ba69 /source/ShiftUI/Internal/BindingManagerBase.cs
parentf1856e8ed30ed882229fd3fa2a4038122a5fb441 (diff)
downloadshiftos-c--d40fed5ce2bc806a91245adb18039634eac13ed0.tar.gz
shiftos-c--d40fed5ce2bc806a91245adb18039634eac13ed0.tar.bz2
shiftos-c--d40fed5ce2bc806a91245adb18039634eac13ed0.zip
Move ShiftUI source code to ShiftOS
This'll be a lot easier to work on.
Diffstat (limited to 'source/ShiftUI/Internal/BindingManagerBase.cs')
-rw-r--r--source/ShiftUI/Internal/BindingManagerBase.cs204
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
+ }
+}