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
- IndicFontClient.cs
- CornerRadiusConverter.cs
- HashAlgorithm.cs
- FileDocument.cs
- SponsorHelper.cs
- CreateUserErrorEventArgs.cs
- CharacterMetricsDictionary.cs
- BlockCollection.cs
- WindowInteropHelper.cs
- TrustManagerMoreInformation.cs
- ISessionStateStore.cs
- ContractComponent.cs
- SqlNodeTypeOperators.cs
- XmlSchemaObjectTable.cs
- ToolStripTextBox.cs
- WindowsFormsHostPropertyMap.cs
- UIElement3DAutomationPeer.cs
- LinkedResource.cs
- FileLogRecordEnumerator.cs
- XmlNamespaceDeclarationsAttribute.cs
- EntityProxyFactory.cs
- ConnectionStringsExpressionBuilder.cs
- BamlVersionHeader.cs
- ListViewGroupItemCollection.cs
- ValidationResults.cs
- PingOptions.cs
- FrameworkElementAutomationPeer.cs
- HtmlTernaryTree.cs
- NativeMethods.cs
- XmlExtensionFunction.cs
- FileController.cs
- Point.cs
- CompilerGeneratedAttribute.cs
- CallbackTimeoutsBehavior.cs
- RegexMatchCollection.cs
- OutputScope.cs
- CustomAttributeBuilder.cs
- BitmapPalettes.cs
- EventLogger.cs
- util.cs
- Wildcard.cs
- OleServicesContext.cs
- SplitterEvent.cs
- DrawingContext.cs
- ControlPersister.cs
- SafeTimerHandle.cs
- MultidimensionalArrayItemReference.cs
- WmfPlaceableFileHeader.cs
- EventLogLink.cs
- DataGridViewButtonColumn.cs
- FastEncoderWindow.cs
- PlainXmlDeserializer.cs
- BuildResult.cs
- XmlSchemaIdentityConstraint.cs
- TreeView.cs
- StringCollectionEditor.cs
- CompositeControl.cs
- Utils.cs
- HttpWebRequest.cs
- MouseButtonEventArgs.cs
- DefaultAssemblyResolver.cs
- FixedSOMElement.cs
- ProfileModule.cs
- DataProtection.cs
- XmlEnumAttribute.cs
- DiscoveryReferences.cs
- OpenFileDialog.cs
- DBConnectionString.cs
- CacheHelper.cs
- DetailsViewDeleteEventArgs.cs
- MultiTrigger.cs
- _RequestCacheProtocol.cs
- InnerItemCollectionView.cs
- RoutedPropertyChangedEventArgs.cs
- FastEncoder.cs
- MenuTracker.cs
- XmlQueryCardinality.cs
- RoutedPropertyChangedEventArgs.cs
- RealizedColumnsBlock.cs
- precedingsibling.cs
- TypeHelpers.cs
- ApplicationHost.cs
- SingleSelectRootGridEntry.cs
- XmlSerializerNamespaces.cs
- CapabilitiesRule.cs
- UrlMapping.cs
- StoryFragments.cs
- SizeAnimationBase.cs
- SafeSystemMetrics.cs
- QualifiedCellIdBoolean.cs
- Dispatcher.cs
- GroupByExpressionRewriter.cs
- ClientConvert.cs
- DateTimeOffset.cs
- RegularExpressionValidator.cs
- HttpListenerRequest.cs
- ListItem.cs
- Animatable.cs
- GroupItem.cs
- QuaternionConverter.cs