Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Ink / EditBehavior.cs / 1305600 / EditBehavior.cs
//----------------------------------------------------------------------------
//
// File: EditingBehavior.cs
//
// Description:
// Base EditingBehavior for InkCanvas
// Features:
//
// History:
// 4/29/2003 waynezen: Rewrote for mid-stroke support
// 3/15/2003 samgeo: Created
//
// Copyright (C) 2003 by Microsoft Corporation. All rights reserved.
//
//---------------------------------------------------------------------------
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows.Input;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Interop;
using System.Windows.Navigation;
using System.Windows.Media;
namespace MS.Internal.Ink
{
///
/// Base class for all EditingBehaviors in the InkCanvas
/// Please see the design detain at http://tabletpc/longhorn/Specs/Mid-Stroke%20and%20Pen%20Cursor%20Dev%20Design.mht
///
internal abstract class EditingBehavior
{
//-------------------------------------------------------------------------------
//
// Constructors
//
//-------------------------------------------------------------------------------
#region Constructors
///
/// Constructor
///
/// EditngCoordinator instance
/// InkCanvas instance
internal EditingBehavior(EditingCoordinator editingCoordinator, InkCanvas inkCanvas)
{
if (inkCanvas == null)
{
throw new ArgumentNullException("inkCanvas");
}
if (editingCoordinator == null)
{
throw new ArgumentNullException("editingCoordinator");
}
_inkCanvas = inkCanvas;
_editingCoordinator = editingCoordinator;
}
#endregion Constructors
//--------------------------------------------------------------------------------
//
// Public Methods
//
//-------------------------------------------------------------------------------
#region Public Methods
///
/// An internal method which should be called from:
/// EditingCoordinator.PushEditingBehavior
/// EditingCoordinator.PopEditingBehavior
/// The mehod's called when the behavior switching occurs.
///
public void Activate()
{
// Debug verification which will never be compiled into release bits.
EditingCoordinator.DebugCheckActiveBehavior(this);
// Invoke the virtual OnActivate method.
OnActivate();
}
///
/// An internal method which should be called from:
/// EditingCoordinator.PushEditingBehavior
/// EditingCoordinator.PopEditingBehavior
/// The mehod's called when the behavior switching occurs.
///
public void Deactivate()
{
// Debug verification which will never be compiled into release bits.
EditingCoordinator.DebugCheckActiveBehavior(this);
// Invoke the virtual OnDeactivate method.
OnDeactivate();
}
///
/// An internal method which should be called from:
/// EditingCoordinator.OnInkCanvasStylusUp
/// EditingCoordinator.OnInkCanvasLostStylusCapture
/// EditingCoordinator.UpdateEditingState
/// The mehod's called when the current editing state is committed or discarded.
///
/// A flag which indicates either editing is committed or discarded
public void Commit(bool commit)
{
// Debug verification which will never be compiled into release bits.
EditingCoordinator.DebugCheckActiveBehavior(this);
// Invoke the virtual OnCommit method.
OnCommit(commit);
}
///
/// UpdateTransform
/// Called by: EditingCoordinator.InvalidateBehaviorCursor
///
public void UpdateTransform()
{
if ( !EditingCoordinator.IsTransformValid(this) )
{
OnTransformChanged();
}
}
#endregion Public Methods
//--------------------------------------------------------------------------------
//
// Public Properties
//
//--------------------------------------------------------------------------------
#region Public Properties
///
/// Retrieve the cursor which is associated to this behavior.
/// The method which should be called from:
/// EditingCoordinator.InvalidateCursor
/// EditingCoordinator.PushEditingBehavior
/// EditingCoordinator.PopEditingBehavior
///
/// The current cursor
public Cursor Cursor
{
get
{
// If the cursor instance hasn't been created or is dirty, we will create a new instance.
if ( _cachedCursor == null || !EditingCoordinator.IsCursorValid(this) )
{
// Invoke the virtual method to get cursor. Then cache it.
_cachedCursor = GetCurrentCursor();
}
return _cachedCursor;
}
}
#endregion Public Properties
//-------------------------------------------------------------------------------
//
// Protected Methods
//
//--------------------------------------------------------------------------------
#region Protected Methods
///
/// Called when the EditingBehavior is activated. EditingBehaviors
/// should register for event handlers in this call
/// Called from:
/// EditingBehavior.Activate
///
protected abstract void OnActivate();
///
/// Called when the EditingBehavior is deactivated. EditingBehaviors
/// should unregister from event handlers in this call
/// Called from:
/// EditingBehavior.Deactivate
///
protected abstract void OnDeactivate();
///
/// Called when the user editing is committed or discarded.
/// Called from:
/// EditingBehavior.Commit
///
/// A flag which indicates either editing is committed or discarded
protected abstract void OnCommit(bool commit);
///
/// Called when the new cursor instance is required.
/// Called from:
/// EditingBehavior.GetCursor
///
///
protected abstract Cursor GetCurrentCursor();
///
/// Unload the dynamic behavior. The method should be only called from:
/// SelectionEditingBehavior
/// LassoSelectionBehavior
///
protected void SelfDeactivate()
{
EditingCoordinator.DeactivateDynamicBehavior();
}
///
/// Calculate the transform which is accumalated with the InkCanvas' XXXTransform properties.
///
///
protected Matrix GetElementTransformMatrix()
{
Transform layoutTransform = this.InkCanvas.LayoutTransform;
Transform renderTransform = this.InkCanvas.RenderTransform;
Matrix xf = layoutTransform.Value;
xf *= renderTransform.Value;
return xf;
}
///
/// OnTransformChanged
///
protected virtual void OnTransformChanged()
{
// Defer to derived.
}
#endregion Protected Methods
//-------------------------------------------------------------------------------
//
// Protected Properties
//
//-------------------------------------------------------------------------------
#region Protected Properties
///
/// Provides access to the InkCanvas this EditingBehavior is attached to
///
///
protected InkCanvas InkCanvas
{
get { return _inkCanvas; }
}
///
/// Provides access to the EditingStack this EditingBehavior is on
///
///
protected EditingCoordinator EditingCoordinator
{
get { return _editingCoordinator; }
}
#endregion Protected Properties
//-------------------------------------------------------------------------------
//
// Protected Fields
//
//--------------------------------------------------------------------------------
#region Private Fields
///
/// The InkCanvas this EditingBehavior is operating on
///
private InkCanvas _inkCanvas;
///
/// The EditingStack this EditingBehavior is on
///
private EditingCoordinator _editingCoordinator;
///
/// Fields related to the cursor
///
private Cursor _cachedCursor;
#endregion Private Fields
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------------------
//
// File: EditingBehavior.cs
//
// Description:
// Base EditingBehavior for InkCanvas
// Features:
//
// History:
// 4/29/2003 waynezen: Rewrote for mid-stroke support
// 3/15/2003 samgeo: Created
//
// Copyright (C) 2003 by Microsoft Corporation. All rights reserved.
//
//---------------------------------------------------------------------------
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows.Input;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Interop;
using System.Windows.Navigation;
using System.Windows.Media;
namespace MS.Internal.Ink
{
///
/// Base class for all EditingBehaviors in the InkCanvas
/// Please see the design detain at http://tabletpc/longhorn/Specs/Mid-Stroke%20and%20Pen%20Cursor%20Dev%20Design.mht
///
internal abstract class EditingBehavior
{
//-------------------------------------------------------------------------------
//
// Constructors
//
//-------------------------------------------------------------------------------
#region Constructors
///
/// Constructor
///
/// EditngCoordinator instance
/// InkCanvas instance
internal EditingBehavior(EditingCoordinator editingCoordinator, InkCanvas inkCanvas)
{
if (inkCanvas == null)
{
throw new ArgumentNullException("inkCanvas");
}
if (editingCoordinator == null)
{
throw new ArgumentNullException("editingCoordinator");
}
_inkCanvas = inkCanvas;
_editingCoordinator = editingCoordinator;
}
#endregion Constructors
//--------------------------------------------------------------------------------
//
// Public Methods
//
//-------------------------------------------------------------------------------
#region Public Methods
///
/// An internal method which should be called from:
/// EditingCoordinator.PushEditingBehavior
/// EditingCoordinator.PopEditingBehavior
/// The mehod's called when the behavior switching occurs.
///
public void Activate()
{
// Debug verification which will never be compiled into release bits.
EditingCoordinator.DebugCheckActiveBehavior(this);
// Invoke the virtual OnActivate method.
OnActivate();
}
///
/// An internal method which should be called from:
/// EditingCoordinator.PushEditingBehavior
/// EditingCoordinator.PopEditingBehavior
/// The mehod's called when the behavior switching occurs.
///
public void Deactivate()
{
// Debug verification which will never be compiled into release bits.
EditingCoordinator.DebugCheckActiveBehavior(this);
// Invoke the virtual OnDeactivate method.
OnDeactivate();
}
///
/// An internal method which should be called from:
/// EditingCoordinator.OnInkCanvasStylusUp
/// EditingCoordinator.OnInkCanvasLostStylusCapture
/// EditingCoordinator.UpdateEditingState
/// The mehod's called when the current editing state is committed or discarded.
///
/// A flag which indicates either editing is committed or discarded
public void Commit(bool commit)
{
// Debug verification which will never be compiled into release bits.
EditingCoordinator.DebugCheckActiveBehavior(this);
// Invoke the virtual OnCommit method.
OnCommit(commit);
}
///
/// UpdateTransform
/// Called by: EditingCoordinator.InvalidateBehaviorCursor
///
public void UpdateTransform()
{
if ( !EditingCoordinator.IsTransformValid(this) )
{
OnTransformChanged();
}
}
#endregion Public Methods
//--------------------------------------------------------------------------------
//
// Public Properties
//
//--------------------------------------------------------------------------------
#region Public Properties
///
/// Retrieve the cursor which is associated to this behavior.
/// The method which should be called from:
/// EditingCoordinator.InvalidateCursor
/// EditingCoordinator.PushEditingBehavior
/// EditingCoordinator.PopEditingBehavior
///
/// The current cursor
public Cursor Cursor
{
get
{
// If the cursor instance hasn't been created or is dirty, we will create a new instance.
if ( _cachedCursor == null || !EditingCoordinator.IsCursorValid(this) )
{
// Invoke the virtual method to get cursor. Then cache it.
_cachedCursor = GetCurrentCursor();
}
return _cachedCursor;
}
}
#endregion Public Properties
//-------------------------------------------------------------------------------
//
// Protected Methods
//
//--------------------------------------------------------------------------------
#region Protected Methods
///
/// Called when the EditingBehavior is activated. EditingBehaviors
/// should register for event handlers in this call
/// Called from:
/// EditingBehavior.Activate
///
protected abstract void OnActivate();
///
/// Called when the EditingBehavior is deactivated. EditingBehaviors
/// should unregister from event handlers in this call
/// Called from:
/// EditingBehavior.Deactivate
///
protected abstract void OnDeactivate();
///
/// Called when the user editing is committed or discarded.
/// Called from:
/// EditingBehavior.Commit
///
/// A flag which indicates either editing is committed or discarded
protected abstract void OnCommit(bool commit);
///
/// Called when the new cursor instance is required.
/// Called from:
/// EditingBehavior.GetCursor
///
///
protected abstract Cursor GetCurrentCursor();
///
/// Unload the dynamic behavior. The method should be only called from:
/// SelectionEditingBehavior
/// LassoSelectionBehavior
///
protected void SelfDeactivate()
{
EditingCoordinator.DeactivateDynamicBehavior();
}
///
/// Calculate the transform which is accumalated with the InkCanvas' XXXTransform properties.
///
///
protected Matrix GetElementTransformMatrix()
{
Transform layoutTransform = this.InkCanvas.LayoutTransform;
Transform renderTransform = this.InkCanvas.RenderTransform;
Matrix xf = layoutTransform.Value;
xf *= renderTransform.Value;
return xf;
}
///
/// OnTransformChanged
///
protected virtual void OnTransformChanged()
{
// Defer to derived.
}
#endregion Protected Methods
//-------------------------------------------------------------------------------
//
// Protected Properties
//
//-------------------------------------------------------------------------------
#region Protected Properties
///
/// Provides access to the InkCanvas this EditingBehavior is attached to
///
///
protected InkCanvas InkCanvas
{
get { return _inkCanvas; }
}
///
/// Provides access to the EditingStack this EditingBehavior is on
///
///
protected EditingCoordinator EditingCoordinator
{
get { return _editingCoordinator; }
}
#endregion Protected Properties
//-------------------------------------------------------------------------------
//
// Protected Fields
//
//--------------------------------------------------------------------------------
#region Private Fields
///
/// The InkCanvas this EditingBehavior is operating on
///
private InkCanvas _inkCanvas;
///
/// The EditingStack this EditingBehavior is on
///
private EditingCoordinator _editingCoordinator;
///
/// Fields related to the cursor
///
private Cursor _cachedCursor;
#endregion Private Fields
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FormatConvertedBitmap.cs
- ExternalFile.cs
- SponsorHelper.cs
- MultipartIdentifier.cs
- AppLevelCompilationSectionCache.cs
- RegexInterpreter.cs
- Maps.cs
- TagPrefixAttribute.cs
- ApplicationBuildProvider.cs
- keycontainerpermission.cs
- AuthStoreRoleProvider.cs
- SendAgentStatusRequest.cs
- SerializationHelper.cs
- SoapAttributeAttribute.cs
- NameValueSectionHandler.cs
- ImageListImage.cs
- TemplateBindingExtension.cs
- Invariant.cs
- SplitterCancelEvent.cs
- MaterialGroup.cs
- WCFBuildProvider.cs
- SQLInt64.cs
- SecurityTokenAuthenticator.cs
- FileCodeGroup.cs
- BaseParser.cs
- TypeLoadException.cs
- SecurityPolicySection.cs
- EncryptedKey.cs
- PenLineCapValidation.cs
- Trace.cs
- TextEndOfLine.cs
- BackgroundFormatInfo.cs
- GrammarBuilderBase.cs
- Base64Encoder.cs
- Model3D.cs
- QuaternionAnimationUsingKeyFrames.cs
- ProfileInfo.cs
- OracleCommandSet.cs
- TreeNodeConverter.cs
- InputMethodStateTypeInfo.cs
- WSMessageEncoding.cs
- OverflowException.cs
- FontUnit.cs
- Vector3DAnimationBase.cs
- SqlSelectStatement.cs
- ContainerSelectorActiveEvent.cs
- TdsParserSafeHandles.cs
- CellQuery.cs
- Stacktrace.cs
- AnnotationMap.cs
- AuthenticationConfig.cs
- LinearQuaternionKeyFrame.cs
- VisualStyleRenderer.cs
- InvalidPrinterException.cs
- OdbcEnvironment.cs
- DesignerTransaction.cs
- WindowsSolidBrush.cs
- IpcChannelHelper.cs
- RegexRunner.cs
- FormParameter.cs
- ReadOnlyCollectionBase.cs
- NumericUpDownAcceleration.cs
- ViewStateException.cs
- HttpResponseInternalWrapper.cs
- AVElementHelper.cs
- DataGridViewTextBoxCell.cs
- CacheHelper.cs
- DiscriminatorMap.cs
- oledbmetadatacolumnnames.cs
- FileCodeGroup.cs
- ParseHttpDate.cs
- IsolatedStorageSecurityState.cs
- ComplexBindingPropertiesAttribute.cs
- ZoneButton.cs
- HttpValueCollection.cs
- ListSortDescriptionCollection.cs
- UdpChannelListener.cs
- XPathEmptyIterator.cs
- WebDescriptionAttribute.cs
- SessionPageStateSection.cs
- SettingsPropertyValue.cs
- CachedFontFace.cs
- AgileSafeNativeMemoryHandle.cs
- CalloutQueueItem.cs
- EncryptedXml.cs
- XmlValidatingReaderImpl.cs
- DataTableReader.cs
- SessionEndingCancelEventArgs.cs
- ThreadStaticAttribute.cs
- DetailsViewUpdatedEventArgs.cs
- StickyNoteHelper.cs
- CharStorage.cs
- FormViewInsertedEventArgs.cs
- Win32MouseDevice.cs
- RoutingUtilities.cs
- DataGridViewLayoutData.cs
- SqlParameterCollection.cs
- DesignerForm.cs
- TransportContext.cs
- CounterSetInstance.cs