Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / Documents / FixedSOMContainer.cs / 1 / FixedSOMContainer.cs
/*++
File: FixedSOMContainer.cs
Copyright (C) 2005 Microsoft Corporation. All rights reserved.
Description:
Abstract class that provides a common base class for all semantic containers
History:
05/17/2005: agurcan - Created
--*/
namespace System.Windows.Documents
{
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows.Media;
internal abstract class FixedSOMContainer :FixedSOMSemanticBox, IComparable
{
//--------------------------------------------------------------------
//
// Constructors
//
//---------------------------------------------------------------------
#region Constructors
protected FixedSOMContainer()
{
_semanticBoxes = new List();
}
#endregion Constructors
int IComparable.CompareTo(object comparedObj)
{
int result = Int32.MinValue;
FixedSOMPageElement compared = comparedObj as FixedSOMPageElement;
FixedSOMPageElement This = this as FixedSOMPageElement;
Debug.Assert(compared != null);
Debug.Assert(This != null);
if (compared == null)
{
throw new ArgumentException(SR.Get(SRID.UnexpectedParameterType, comparedObj.GetType(), typeof(FixedSOMContainer)), "comparedObj");
}
SpatialComparison compareHor = base._CompareHorizontal(compared, false);
SpatialComparison compareVer = base._CompareVertical(compared);
Debug.Assert(compareHor != SpatialComparison.None);
Debug.Assert(compareVer != SpatialComparison.None);
switch (compareHor)
{
case SpatialComparison.Before:
if (compareVer != SpatialComparison.After)
{
result = -1;
}
break;
case SpatialComparison.After:
if (compareVer != SpatialComparison.Before)
{
result = 1;
}
break;
case SpatialComparison.OverlapBefore:
if (compareVer == SpatialComparison.Before)
{
result = -1;
}
else if (compareVer == SpatialComparison.After)
{
result = 1;
}
break;
case SpatialComparison.OverlapAfter:
if (compareVer == SpatialComparison.After)
{
result = 1;
}
else if (compareVer == SpatialComparison.Before)
{
result = -1;
}
break;
case SpatialComparison.Equal:
switch (compareVer)
{
case SpatialComparison.After:
case SpatialComparison.OverlapAfter:
result = 1;
break;
case SpatialComparison.Before:
case SpatialComparison.OverlapBefore:
result = -1;
break;
case SpatialComparison.Equal:
result = 0;
break;
default:
Debug.Assert(false);
break;
}
break;
default:
//Shouldn't happen
Debug.Assert(false);
break;
}
if (result == Int32.MinValue)
{
//Indecisive. Does markup order help?
if (This.FixedNodes.Count == 0 || compared.FixedNodes.Count == 0)
{
result = 0;
}
else
{
FixedNode thisObjFirstNode = This.FixedNodes[0];
FixedNode thisObjLastNode = This.FixedNodes[This.FixedNodes.Count - 1];
FixedNode otherObjFirstNode = compared.FixedNodes[0];
FixedNode otherObjLastNode = compared.FixedNodes[compared.FixedNodes.Count - 1];
if (This.FixedSOMPage.MarkupOrder.IndexOf(otherObjFirstNode) - This.FixedSOMPage.MarkupOrder.IndexOf(thisObjLastNode) == 1)
{
result = -1;
}
else if (This.FixedSOMPage.MarkupOrder.IndexOf(otherObjLastNode) - This.FixedSOMPage.MarkupOrder.IndexOf(thisObjFirstNode) == 1)
{
result = 1;
}
else
{
//Indecisive. Whichever is below comes after; if same whichever is on the right comes after
int absVerComparison = _SpatialToAbsoluteComparison(compareVer);
result = absVerComparison != 0 ? absVerComparison : _SpatialToAbsoluteComparison(compareHor);
}
}
}
return result;
}
#region Protected Methods
protected void AddSorted(FixedSOMSemanticBox box)
{
int i=_semanticBoxes.Count-1;
for (; i>=0; i--)
{
if (box.CompareTo(_semanticBoxes[i]) == 1)
{
break;
}
}
_semanticBoxes.Insert(i+1, box);
_UpdateBoundingRect(box.BoundingRect);
}
protected void Add(FixedSOMSemanticBox box)
{
_semanticBoxes.Add(box);
_UpdateBoundingRect(box.BoundingRect);
}
#endregion
#region public Properties
internal virtual FixedElement.ElementType[] ElementTypes
{
get
{
return new FixedElement.ElementType[0];
}
}
public List SemanticBoxes
{
get
{
return _semanticBoxes;
}
set
{
_semanticBoxes = value;
}
}
public List FixedNodes
{
get
{
if (_fixedNodes == null)
{
_ConstructFixedNodes();
}
return _fixedNodes;
}
}
#endregion
#region Private methods
void _ConstructFixedNodes()
{
_fixedNodes = new List();
foreach (FixedSOMSemanticBox box in _semanticBoxes)
{
FixedSOMElement element = box as FixedSOMElement;
if (element != null)
{
_fixedNodes.Add(element.FixedNode);
}
else
{
FixedSOMContainer container = box as FixedSOMContainer;
Debug.Assert(container != null);
List nodes = container.FixedNodes;
foreach (FixedNode node in nodes)
{
_fixedNodes.Add(node);
}
}
}
}
void _UpdateBoundingRect(Rect rect)
{
if (_boundingRect.IsEmpty)
{
_boundingRect = rect;
}
else
{
_boundingRect.Union(rect);
}
}
#endregion Private methods
//-------------------------------------------------------------------
//
// Protected Fields
//
//---------------------------------------------------------------------
#region Protected Fields
protected List _semanticBoxes;
protected List _fixedNodes;
#endregion Protected Fields
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
/*++
File: FixedSOMContainer.cs
Copyright (C) 2005 Microsoft Corporation. All rights reserved.
Description:
Abstract class that provides a common base class for all semantic containers
History:
05/17/2005: agurcan - Created
--*/
namespace System.Windows.Documents
{
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows.Media;
internal abstract class FixedSOMContainer :FixedSOMSemanticBox, IComparable
{
//--------------------------------------------------------------------
//
// Constructors
//
//---------------------------------------------------------------------
#region Constructors
protected FixedSOMContainer()
{
_semanticBoxes = new List();
}
#endregion Constructors
int IComparable.CompareTo(object comparedObj)
{
int result = Int32.MinValue;
FixedSOMPageElement compared = comparedObj as FixedSOMPageElement;
FixedSOMPageElement This = this as FixedSOMPageElement;
Debug.Assert(compared != null);
Debug.Assert(This != null);
if (compared == null)
{
throw new ArgumentException(SR.Get(SRID.UnexpectedParameterType, comparedObj.GetType(), typeof(FixedSOMContainer)), "comparedObj");
}
SpatialComparison compareHor = base._CompareHorizontal(compared, false);
SpatialComparison compareVer = base._CompareVertical(compared);
Debug.Assert(compareHor != SpatialComparison.None);
Debug.Assert(compareVer != SpatialComparison.None);
switch (compareHor)
{
case SpatialComparison.Before:
if (compareVer != SpatialComparison.After)
{
result = -1;
}
break;
case SpatialComparison.After:
if (compareVer != SpatialComparison.Before)
{
result = 1;
}
break;
case SpatialComparison.OverlapBefore:
if (compareVer == SpatialComparison.Before)
{
result = -1;
}
else if (compareVer == SpatialComparison.After)
{
result = 1;
}
break;
case SpatialComparison.OverlapAfter:
if (compareVer == SpatialComparison.After)
{
result = 1;
}
else if (compareVer == SpatialComparison.Before)
{
result = -1;
}
break;
case SpatialComparison.Equal:
switch (compareVer)
{
case SpatialComparison.After:
case SpatialComparison.OverlapAfter:
result = 1;
break;
case SpatialComparison.Before:
case SpatialComparison.OverlapBefore:
result = -1;
break;
case SpatialComparison.Equal:
result = 0;
break;
default:
Debug.Assert(false);
break;
}
break;
default:
//Shouldn't happen
Debug.Assert(false);
break;
}
if (result == Int32.MinValue)
{
//Indecisive. Does markup order help?
if (This.FixedNodes.Count == 0 || compared.FixedNodes.Count == 0)
{
result = 0;
}
else
{
FixedNode thisObjFirstNode = This.FixedNodes[0];
FixedNode thisObjLastNode = This.FixedNodes[This.FixedNodes.Count - 1];
FixedNode otherObjFirstNode = compared.FixedNodes[0];
FixedNode otherObjLastNode = compared.FixedNodes[compared.FixedNodes.Count - 1];
if (This.FixedSOMPage.MarkupOrder.IndexOf(otherObjFirstNode) - This.FixedSOMPage.MarkupOrder.IndexOf(thisObjLastNode) == 1)
{
result = -1;
}
else if (This.FixedSOMPage.MarkupOrder.IndexOf(otherObjLastNode) - This.FixedSOMPage.MarkupOrder.IndexOf(thisObjFirstNode) == 1)
{
result = 1;
}
else
{
//Indecisive. Whichever is below comes after; if same whichever is on the right comes after
int absVerComparison = _SpatialToAbsoluteComparison(compareVer);
result = absVerComparison != 0 ? absVerComparison : _SpatialToAbsoluteComparison(compareHor);
}
}
}
return result;
}
#region Protected Methods
protected void AddSorted(FixedSOMSemanticBox box)
{
int i=_semanticBoxes.Count-1;
for (; i>=0; i--)
{
if (box.CompareTo(_semanticBoxes[i]) == 1)
{
break;
}
}
_semanticBoxes.Insert(i+1, box);
_UpdateBoundingRect(box.BoundingRect);
}
protected void Add(FixedSOMSemanticBox box)
{
_semanticBoxes.Add(box);
_UpdateBoundingRect(box.BoundingRect);
}
#endregion
#region public Properties
internal virtual FixedElement.ElementType[] ElementTypes
{
get
{
return new FixedElement.ElementType[0];
}
}
public List SemanticBoxes
{
get
{
return _semanticBoxes;
}
set
{
_semanticBoxes = value;
}
}
public List FixedNodes
{
get
{
if (_fixedNodes == null)
{
_ConstructFixedNodes();
}
return _fixedNodes;
}
}
#endregion
#region Private methods
void _ConstructFixedNodes()
{
_fixedNodes = new List();
foreach (FixedSOMSemanticBox box in _semanticBoxes)
{
FixedSOMElement element = box as FixedSOMElement;
if (element != null)
{
_fixedNodes.Add(element.FixedNode);
}
else
{
FixedSOMContainer container = box as FixedSOMContainer;
Debug.Assert(container != null);
List nodes = container.FixedNodes;
foreach (FixedNode node in nodes)
{
_fixedNodes.Add(node);
}
}
}
}
void _UpdateBoundingRect(Rect rect)
{
if (_boundingRect.IsEmpty)
{
_boundingRect = rect;
}
else
{
_boundingRect.Union(rect);
}
}
#endregion Private methods
//-------------------------------------------------------------------
//
// Protected Fields
//
//---------------------------------------------------------------------
#region Protected Fields
protected List _semanticBoxes;
protected List _fixedNodes;
#endregion Protected 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
- ProcessModuleCollection.cs
- DelegateHelpers.Generated.cs
- SecurityHeaderElementInferenceEngine.cs
- ApplicationDirectoryMembershipCondition.cs
- XmlFormatReaderGenerator.cs
- TreeView.cs
- InfoCardArgumentException.cs
- ParseNumbers.cs
- RedirectionProxy.cs
- PolyQuadraticBezierSegment.cs
- XmlSchemaSimpleContent.cs
- EncryptedData.cs
- FormClosedEvent.cs
- MessageCredentialType.cs
- DataGridViewSelectedCellCollection.cs
- ActivityExecutor.cs
- DeviceSpecificChoice.cs
- SimpleBitVector32.cs
- CalculatedColumn.cs
- SecurityCapabilities.cs
- InputLangChangeEvent.cs
- ApplicationSecurityManager.cs
- XmlSchemaGroup.cs
- TreeViewItem.cs
- ActivityCodeDomReferenceService.cs
- BasePattern.cs
- SqlNotificationRequest.cs
- SimpleType.cs
- ClrPerspective.cs
- CommonProperties.cs
- MILUtilities.cs
- Cursor.cs
- AttributeData.cs
- PageThemeBuildProvider.cs
- AssociatedControlConverter.cs
- ToolboxDataAttribute.cs
- WindowsSysHeader.cs
- AspNetSynchronizationContext.cs
- VScrollBar.cs
- NavigatingCancelEventArgs.cs
- TextEncodedRawTextWriter.cs
- DataGridViewLayoutData.cs
- TextBlockAutomationPeer.cs
- EntityContainerEmitter.cs
- EnumValAlphaComparer.cs
- ReflectionPermission.cs
- RequestSecurityTokenResponse.cs
- Currency.cs
- OrderPreservingPipeliningSpoolingTask.cs
- SamlSecurityTokenAuthenticator.cs
- BrushConverter.cs
- XmlArrayAttribute.cs
- ContextProperty.cs
- ErrorReporting.cs
- Trace.cs
- DataGridViewButtonColumn.cs
- FormView.cs
- Win32MouseDevice.cs
- FileDialogCustomPlacesCollection.cs
- TextRange.cs
- SqlGenerator.cs
- DPCustomTypeDescriptor.cs
- TrackingStringDictionary.cs
- XmlSchemaSimpleTypeRestriction.cs
- MemberHolder.cs
- JoinGraph.cs
- DashStyles.cs
- PreviousTrackingServiceAttribute.cs
- CodeCastExpression.cs
- URI.cs
- WebPartConnectionsCancelEventArgs.cs
- Rotation3D.cs
- XmlSerializationReader.cs
- SettingsSection.cs
- SafeEventLogWriteHandle.cs
- TextSyndicationContent.cs
- IResourceProvider.cs
- TypefaceCollection.cs
- CodeTryCatchFinallyStatement.cs
- ViewManager.cs
- DataGridViewSelectedCellCollection.cs
- basecomparevalidator.cs
- DataGridViewCellToolTipTextNeededEventArgs.cs
- ItemType.cs
- SmiContext.cs
- DataTable.cs
- TemplateKey.cs
- Visual3D.cs
- GeneralTransform3DGroup.cs
- XmlTextWriter.cs
- PropertyCondition.cs
- TreeNode.cs
- ServiceModelActivationSectionGroup.cs
- DataServiceException.cs
- OneToOneMappingSerializer.cs
- Helper.cs
- SafeRsaProviderHandle.cs
- SqlDataSourceSummaryPanel.cs
- SystemIPInterfaceStatistics.cs
- RemotingServices.cs