DrawAvailableRangeText ( DrawingObjects oDrawingObjects, IDynamicFilterRangeTrackBar oDynamicFilterRangeTrackBar, ref Int32 iAvailableRangeTextLeft, ref Int32 iAvailableRangeTextRight, ref Int32 iTop ) { Debug.Assert(oDrawingObjects != null); Debug.Assert(oDynamicFilterRangeTrackBar != null); AssertValid(); DrawRangeText(oDrawingObjects, oDynamicFilterRangeTrackBar.ValueToString( oDynamicFilterRangeTrackBar.AvailableMinimum), oDynamicFilterRangeTrackBar.ValueToString( oDynamicFilterRangeTrackBar.AvailableMaximum), SystemBrushes.GrayText, ref iAvailableRangeTextLeft, ref iAvailableRangeTextRight, ref iTop ); iTop += oDrawingObjects.GetFontHeightMultiple(0.4F); }
DrawSelectedRangeLine ( DrawingObjects oDrawingObjects, IDynamicFilterRangeTrackBar oDynamicFilterRangeTrackBar, Pen oSelectedRangeLinePen, Int32 iAvailableRangeLineLeft, Int32 iAvailableRangeLineRight, out Int32 iSelectedRangeLineLeft, out Int32 iSelectedRangeLineRight, ref Int32 iTop ) { Debug.Assert(oDrawingObjects != null); Debug.Assert(oDynamicFilterRangeTrackBar != null); Debug.Assert(oSelectedRangeLinePen != null); AssertValid(); iSelectedRangeLineLeft = GetXWithinAvailableLine( oDynamicFilterRangeTrackBar.SelectedMinimum, oDynamicFilterRangeTrackBar, iAvailableRangeLineLeft, iAvailableRangeLineRight); iSelectedRangeLineRight = GetXWithinAvailableLine( oDynamicFilterRangeTrackBar.SelectedMaximum, oDynamicFilterRangeTrackBar, iAvailableRangeLineLeft, iAvailableRangeLineRight); // Don't let the line have zero width. if (iSelectedRangeLineRight == iSelectedRangeLineLeft) { if (iSelectedRangeLineLeft == iAvailableRangeLineLeft) { iSelectedRangeLineRight += MinimumSelectedLineWidth; } else if (iSelectedRangeLineRight == iAvailableRangeLineRight) { iSelectedRangeLineLeft -= MinimumSelectedLineWidth; } else { iSelectedRangeLineLeft -= (MinimumSelectedLineWidth / 2); iSelectedRangeLineRight += (MinimumSelectedLineWidth / 2); } } oDrawingObjects.Graphics.DrawLine(oSelectedRangeLinePen, iSelectedRangeLineLeft, iTop, iSelectedRangeLineRight, iTop); iTop += AvailableLineHeight; }
GetXWithinAvailableLine ( Decimal decValue, IDynamicFilterRangeTrackBar oDynamicFilterRangeTrackBar, Int32 iAvailableLineLeft, Int32 iAvailableLineRight ) { Debug.Assert(oDynamicFilterRangeTrackBar != null); Debug.Assert(iAvailableLineRight >= iAvailableLineLeft); AssertValid(); Decimal decValueX = (Decimal)iAvailableLineLeft + ((Decimal)iAvailableLineRight - (Decimal)iAvailableLineLeft) * ( (decValue - oDynamicFilterRangeTrackBar.AvailableMinimum) / (oDynamicFilterRangeTrackBar.AvailableMaximum - oDynamicFilterRangeTrackBar.AvailableMinimum) ); return((Int32)decValueX); }
GetXWithinAvailableLine ( Decimal decValue, IDynamicFilterRangeTrackBar oDynamicFilterRangeTrackBar, Int32 iAvailableLineLeft, Int32 iAvailableLineRight ) { Debug.Assert(oDynamicFilterRangeTrackBar != null); Debug.Assert(iAvailableLineRight >= iAvailableLineLeft); AssertValid(); Decimal decValueX = (Decimal)iAvailableLineLeft + ( (Decimal)iAvailableLineRight - (Decimal)iAvailableLineLeft ) * ( (decValue - oDynamicFilterRangeTrackBar.AvailableMinimum) / (oDynamicFilterRangeTrackBar.AvailableMaximum - oDynamicFilterRangeTrackBar.AvailableMinimum) ); return ( (Int32)decValueX ); }
DrawSelectedRangeText ( DrawingObjects oDrawingObjects, IDynamicFilterRangeTrackBar oDynamicFilterRangeTrackBar, Int32 iAvailableRangeTextLeft, Int32 iAvailableRangeTextRight, Int32 iSelectedRangeLineLeft, Int32 iSelectedRangeLineRight, Int32 iTop ) { Debug.Assert(oDrawingObjects != null); Debug.Assert(oDynamicFilterRangeTrackBar != null); AssertValid(); // Measure the minimum and maximum selected values. String sSelectedMinimumText = oDynamicFilterRangeTrackBar.ValueToString( oDynamicFilterRangeTrackBar.SelectedMinimum); Int32 iSelectedMinimumTextWidth = MeasureTextWidth(oDrawingObjects, sSelectedMinimumText); String sSelectedMaximumText = oDynamicFilterRangeTrackBar.ValueToString( oDynamicFilterRangeTrackBar.SelectedMaximum); Int32 iSelectedMaximumTextWidth = MeasureTextWidth( oDrawingObjects, sSelectedMaximumText); // If there is enough room, draw the selected minimum text with its // right edge aligned with the left edge of the selected line, and the // selected maximum text with its left edge aligned with the right edge // of the selected line. Don't let any text exceed the bounds // specified by iAvailableRangeTextLeft and iAvailableRangeTextRight, // and don't let the text run into each other. Int32 iSelectedMinimumTextRight = Math.Max( iSelectedRangeLineLeft, iAvailableRangeTextLeft + iSelectedMinimumTextWidth ); iSelectedMinimumTextRight = Math.Min( iSelectedMinimumTextRight, iAvailableRangeTextRight - iSelectedMaximumTextWidth ); Int32 iSelectedMaximumTextLeft = Math.Min( iSelectedRangeLineRight, iAvailableRangeTextRight - iSelectedMaximumTextWidth ); iSelectedMaximumTextLeft = Math.Max( iSelectedMaximumTextLeft, iAvailableRangeTextLeft + iSelectedMinimumTextWidth ); if (iSelectedMinimumTextRight - iSelectedMinimumTextWidth >= iAvailableRangeTextLeft) { oDrawingObjects.Graphics.DrawString(sSelectedMinimumText, oDrawingObjects.Font, SystemBrushes.Highlight, iSelectedMinimumTextRight, iTop, oDrawingObjects.RightAlignStringFormat); } if (iSelectedMaximumTextLeft + iSelectedMaximumTextWidth <= iAvailableRangeTextRight) { oDrawingObjects.Graphics.DrawString(sSelectedMaximumText, oDrawingObjects.Font, SystemBrushes.Highlight, iSelectedMaximumTextLeft, iTop); } }
DrawSelectedRangeLine ( DrawingObjects oDrawingObjects, IDynamicFilterRangeTrackBar oDynamicFilterRangeTrackBar, Pen oSelectedRangeLinePen, Int32 iAvailableRangeLineLeft, Int32 iAvailableRangeLineRight, out Int32 iSelectedRangeLineLeft, out Int32 iSelectedRangeLineRight, ref Int32 iTop ) { Debug.Assert(oDrawingObjects != null); Debug.Assert(oDynamicFilterRangeTrackBar != null); Debug.Assert(oSelectedRangeLinePen != null); AssertValid(); iSelectedRangeLineLeft = GetXWithinAvailableLine( oDynamicFilterRangeTrackBar.SelectedMinimum, oDynamicFilterRangeTrackBar, iAvailableRangeLineLeft, iAvailableRangeLineRight); iSelectedRangeLineRight = GetXWithinAvailableLine( oDynamicFilterRangeTrackBar.SelectedMaximum, oDynamicFilterRangeTrackBar, iAvailableRangeLineLeft, iAvailableRangeLineRight); // Don't let the line have zero width. if (iSelectedRangeLineRight == iSelectedRangeLineLeft) { if (iSelectedRangeLineLeft == iAvailableRangeLineLeft) { iSelectedRangeLineRight += MinimumSelectedLineWidth; } else if (iSelectedRangeLineRight == iAvailableRangeLineRight) { iSelectedRangeLineLeft -= MinimumSelectedLineWidth; } else { iSelectedRangeLineLeft -= (MinimumSelectedLineWidth / 2); iSelectedRangeLineRight += (MinimumSelectedLineWidth / 2); } } oDrawingObjects.Graphics.DrawLine(oSelectedRangeLinePen, iSelectedRangeLineLeft, iTop, iSelectedRangeLineRight, iTop); iTop += AvailableLineHeight; }
DrawAvailableRangeText ( DrawingObjects oDrawingObjects, IDynamicFilterRangeTrackBar oDynamicFilterRangeTrackBar, ref Int32 iAvailableRangeTextLeft, ref Int32 iAvailableRangeTextRight, ref Int32 iTop ) { Debug.Assert(oDrawingObjects != null); Debug.Assert(oDynamicFilterRangeTrackBar != null); AssertValid(); DrawRangeText(oDrawingObjects, oDynamicFilterRangeTrackBar.ValueToString( oDynamicFilterRangeTrackBar.AvailableMinimum), oDynamicFilterRangeTrackBar.ValueToString( oDynamicFilterRangeTrackBar.AvailableMaximum), SystemBrushes.GrayText, ref iAvailableRangeTextLeft, ref iAvailableRangeTextRight, ref iTop ); iTop += oDrawingObjects.GetFontHeightMultiple(0.4F); }
DrawDynamicFilterRangeTrackBar ( DrawingObjects oDrawingObjects, IDynamicFilterRangeTrackBar oDynamicFilterRangeTrackBar, Pen oAvailableRangeLinePen, Pen oSelectedRangeLinePen, Rectangle oColumnRectangle, Int32 iTrackBarLeft, Int32 iTrackBarRight, ref Int32 iTop ) { Debug.Assert(oDrawingObjects != null); Debug.Assert(oDynamicFilterRangeTrackBar != null); Debug.Assert(oAvailableRangeLinePen != null); Debug.Assert(oSelectedRangeLinePen != null); iTop += oDrawingObjects.GetFontHeightMultiple(0.2F); // Draw the text for the available range. Int32 iAvailableRangeTextLeft = iTrackBarLeft; Int32 iAvailableRangeTextRight = iTrackBarRight; Int32 iAvailableRangeTextTop = iTop; DrawAvailableRangeText(oDrawingObjects, oDynamicFilterRangeTrackBar, ref iAvailableRangeTextLeft, ref iAvailableRangeTextRight, ref iTop); // Draw the line representing the available range. Int32 iLineMargin = oDrawingObjects.GetFontHeightMultiple(0.1F); Int32 iAvailableRangeLineLeft = iTrackBarLeft + iLineMargin; Int32 iAvailableRangeLineRight = iTrackBarRight - iLineMargin; oDrawingObjects.Graphics.DrawLine(oAvailableRangeLinePen, iAvailableRangeLineLeft, iTop, iAvailableRangeLineRight, iTop); // Draw the line representing the selected range. Int32 iSelectedRangeLineLeft, iSelectedRangeLineRight; DrawSelectedRangeLine(oDrawingObjects, oDynamicFilterRangeTrackBar, oSelectedRangeLinePen, iAvailableRangeLineLeft, iAvailableRangeLineRight, out iSelectedRangeLineLeft, out iSelectedRangeLineRight, ref iTop); // Draw the text for the selected range. DrawSelectedRangeText(oDrawingObjects, oDynamicFilterRangeTrackBar, iAvailableRangeTextLeft, iAvailableRangeTextRight, iSelectedRangeLineLeft, iSelectedRangeLineRight, iAvailableRangeTextTop); DrawExcelColumnName(oDrawingObjects, oDynamicFilterRangeTrackBar.ColumnName, iTrackBarLeft, iTrackBarRight, ref iTop); // Draw a line separating this track bar from the next. DrawHorizontalSeparator(oDrawingObjects, oColumnRectangle, ref iTop); }
DrawSelectedRangeText ( DrawingObjects oDrawingObjects, IDynamicFilterRangeTrackBar oDynamicFilterRangeTrackBar, Int32 iAvailableRangeTextLeft, Int32 iAvailableRangeTextRight, Int32 iSelectedRangeLineLeft, Int32 iSelectedRangeLineRight, Int32 iTop ) { Debug.Assert(oDrawingObjects != null); Debug.Assert(oDynamicFilterRangeTrackBar != null); AssertValid(); // Measure the minimum and maximum selected values. String sSelectedMinimumText = oDynamicFilterRangeTrackBar.ValueToString( oDynamicFilterRangeTrackBar.SelectedMinimum); Int32 iSelectedMinimumTextWidth = MeasureTextWidth(oDrawingObjects, sSelectedMinimumText); String sSelectedMaximumText = oDynamicFilterRangeTrackBar.ValueToString( oDynamicFilterRangeTrackBar.SelectedMaximum); Int32 iSelectedMaximumTextWidth = MeasureTextWidth( oDrawingObjects, sSelectedMaximumText); // If there is enough room, draw the selected minimum text with its // right edge aligned with the left edge of the selected line, and the // selected maximum text with its left edge aligned with the right edge // of the selected line. Don't let any text exceed the bounds // specified by iAvailableRangeTextLeft and iAvailableRangeTextRight, // and don't let the text run into each other. Int32 iSelectedMinimumTextRight = Math.Max( iSelectedRangeLineLeft, iAvailableRangeTextLeft + iSelectedMinimumTextWidth ); iSelectedMinimumTextRight = Math.Min( iSelectedMinimumTextRight, iAvailableRangeTextRight - iSelectedMaximumTextWidth ); Int32 iSelectedMaximumTextLeft = Math.Min( iSelectedRangeLineRight, iAvailableRangeTextRight - iSelectedMaximumTextWidth ); iSelectedMaximumTextLeft = Math.Max( iSelectedMaximumTextLeft, iAvailableRangeTextLeft + iSelectedMinimumTextWidth ); if (iSelectedMinimumTextRight - iSelectedMinimumTextWidth >= iAvailableRangeTextLeft) { oDrawingObjects.Graphics.DrawString(sSelectedMinimumText, oDrawingObjects.Font, SystemBrushes.Highlight, iSelectedMinimumTextRight, iTop, oDrawingObjects.RightAlignStringFormat); } if (iSelectedMaximumTextLeft + iSelectedMaximumTextWidth <= iAvailableRangeTextRight) { oDrawingObjects.Graphics.DrawString(sSelectedMaximumText, oDrawingObjects.Font, SystemBrushes.Highlight, iSelectedMaximumTextLeft, iTop); } }
DrawDynamicFilterRangeTrackBar ( DrawingObjects oDrawingObjects, IDynamicFilterRangeTrackBar oDynamicFilterRangeTrackBar, Pen oAvailableRangeLinePen, Pen oSelectedRangeLinePen, Rectangle oColumnRectangle, Int32 iTrackBarLeft, Int32 iTrackBarRight, ref Int32 iTop ) { Debug.Assert(oDrawingObjects != null); Debug.Assert(oDynamicFilterRangeTrackBar != null); Debug.Assert(oAvailableRangeLinePen != null); Debug.Assert(oSelectedRangeLinePen != null); iTop += oDrawingObjects.GetFontHeightMultiple(0.2F); // Draw the text for the available range. Int32 iAvailableRangeTextLeft = iTrackBarLeft; Int32 iAvailableRangeTextRight = iTrackBarRight; Int32 iAvailableRangeTextTop = iTop; DrawAvailableRangeText(oDrawingObjects, oDynamicFilterRangeTrackBar, ref iAvailableRangeTextLeft, ref iAvailableRangeTextRight, ref iTop); // Draw the line representing the available range. Int32 iLineMargin = oDrawingObjects.GetFontHeightMultiple(0.1F); Int32 iAvailableRangeLineLeft = iTrackBarLeft + iLineMargin; Int32 iAvailableRangeLineRight = iTrackBarRight - iLineMargin; oDrawingObjects.Graphics.DrawLine(oAvailableRangeLinePen, iAvailableRangeLineLeft, iTop, iAvailableRangeLineRight, iTop); // Draw the line representing the selected range. Int32 iSelectedRangeLineLeft, iSelectedRangeLineRight; DrawSelectedRangeLine(oDrawingObjects, oDynamicFilterRangeTrackBar, oSelectedRangeLinePen, iAvailableRangeLineLeft, iAvailableRangeLineRight, out iSelectedRangeLineLeft, out iSelectedRangeLineRight, ref iTop); // Draw the text for the selected range. DrawSelectedRangeText(oDrawingObjects, oDynamicFilterRangeTrackBar, iAvailableRangeTextLeft, iAvailableRangeTextRight, iSelectedRangeLineLeft, iSelectedRangeLineRight, iAvailableRangeTextTop); DrawExcelColumnName(oDrawingObjects, oDynamicFilterRangeTrackBar.ColumnName, iTrackBarLeft, iTrackBarRight, ref iTop); // Draw a line separating this track bar from the next. DrawHorizontalSeparator(oDrawingObjects, oColumnRectangle, ref iTop); }
//************************************************************************* // Method: OnSelectedRangeChanged() // /// <summary> /// Handles the SelectedRangeChanged event on all the range track bars. /// </summary> /// /// <param name="oDynamicFilterRangeTrackBar"> /// Range track bar that fired the event. /// </param> //************************************************************************* protected void OnSelectedRangeChanged( IDynamicFilterRangeTrackBar oDynamicFilterRangeTrackBar ) { Debug.Assert(oDynamicFilterRangeTrackBar != null); AssertValid(); // Turn off automatic recalculation. The dynamic filter column in the // edge or vertex table needs to be recalculated as the RangeTrackBar // is manipulated, but to minimize delays nothing else should be // recalculated. SetManualCalculation(); // Update the persisted settings for this RangeTrackBar. This updates // two cells in the dynamic filter settings table. String sSelectedMinimumAddress, sSelectedMaximumAddress; m_oDynamicFilterSettings.SetSettings( oDynamicFilterRangeTrackBar.TableName, oDynamicFilterRangeTrackBar.ColumnName, oDynamicFilterRangeTrackBar.SelectedMinimum, oDynamicFilterRangeTrackBar.SelectedMaximum, out sSelectedMinimumAddress, out sSelectedMaximumAddress); // Now recalculate just the dynamic filter column. DynamicFilterColumns eDynamicFilterColumns = DynamicFilterColumns.None; if (oDynamicFilterRangeTrackBar.TableName == TableNames.Edges) { eDynamicFilterColumns = DynamicFilterColumns.EdgeTable; } else if (oDynamicFilterRangeTrackBar.TableName == TableNames.Vertices) { eDynamicFilterColumns = DynamicFilterColumns.VertexTable; } else { Debug.Assert(false); } RecalculateDynamicFilterColumns(eDynamicFilterColumns); FireDynamicFilterColumnsChanged(eDynamicFilterColumns); }