XCore.MultiPane.SetSplitterDistance C# (CSharp) Method

SetSplitterDistance() private method

private SetSplitterDistance ( ) : void
return void
		private void SetSplitterDistance()
		{
			int sizeOfSharedDimension = Orientation == Orientation.Vertical ? Width : Height;
			// If the default size is specified in the XML file, use that,
			// otherwise compute something reasonable.
			string defaultLoc = XmlUtils.GetOptionalAttributeValue(m_configurationParameters,
				"defaultFixedPaneSizePoints",
				"50%");
			int defaultLocation;

			// Find 'total', which will be the height or width,
			// depending on the orientation of the multi pane.
			bool proportional = defaultLoc.EndsWith("%");
			int total;
			Size size = Size;
			if (m_parentSizeHint.Width != 0 && !proportional)
				size = m_parentSizeHint;
			if (Orientation == Orientation.Vertical)
				total = size.Width;
			else
				total = size.Height;

			if (proportional)
			{
				string percentStr = defaultLoc.Substring(0, defaultLoc.Length - 1);
				int percent = Int32.Parse(percentStr);
				float loc = (total * (((float)percent) / 100));
				double locD = Math.Round(loc);
				defaultLocation = (int)locD;
			}
			else
			{
				defaultLocation = Int32.Parse(defaultLoc);
			}

			if (m_mediator != null)
			{
				// NB GetIntProperty RECORDS the default as if it had really been set by the user.
				// This behavior is disastrous here, where if we haven't truly persisted something,
				// we want to stick to computing the percent whenever the parent resizes.
				// So, first see whether there is a value in the property table at all.
				if (m_mediator.PropertyTable.GetValue(SplitterDistancePropertyName) != null)
					defaultLocation = m_mediator.PropertyTable.GetIntProperty(SplitterDistancePropertyName, defaultLocation);
			}
			if (defaultLocation < CollapsingSplitContainer.kCollapsedSize)
				defaultLocation = CollapsingSplitContainer.kCollapsedSize;

			if (SplitterDistance != defaultLocation)
			{
				int originalSD = SplitterDistance;
				try
				{
					// Msg: SplitterDistance (aka: defaultLocation) must be between Panel1MinSize and Width - Panel2MinSize.
					if (defaultLocation >= Panel1MinSize && defaultLocation <= (sizeOfSharedDimension - Panel2MinSize))
					{
						// We do NOT want to persist this computed position!
						bool old = m_fOkToPersistSplit;
						m_fOkToPersistSplit = false;
						SplitterDistance = defaultLocation;
						m_fOkToPersistSplit = old;
					}
				}
				catch (Exception err)
				{
					Debug.WriteLine(err.Message);
					string msg = string.Format("Orientation: {0} Width: {1} Height: {2} Original SD: {3} New SD: {4} Panel1MinSize: {5} Panel2MinSize: {6} ID: {7} Panel1Collapsed: {8} Panel2Collapsed: {9}",
						Orientation.ToString(), Width, Height, originalSD, defaultLocation,
						Panel1MinSize, Panel2MinSize,
						XmlUtils.GetAttributeValue(m_configurationParameters, "id", "NOID"),
						Panel1Collapsed, Panel2Collapsed);
					throw new ArgumentOutOfRangeException(msg, err);
				}
			}
		}