/// <summary> /// Initialize a new instance of the ViewDrawMonth class. /// </summary> /// <param name="calendar">Reference to calendar provider.</param> /// <param name="months">Reference to months instance.</param> /// <param name="redirector">Redirector for getting values.</param> /// <param name="needPaintDelegate">Delegate for requesting paint changes.</param> public ViewDrawMonth(IKryptonMonthCalendar calendar, ViewLayoutMonths months, PaletteRedirect redirector, NeedPaintHandler needPaintDelegate) : base(false) { _calendar = calendar; _months = months; // Add a header for showing the month/year value _drawContent = new ViewDrawContent(_calendar.StateNormal.Header.Content, this, VisualOrientation.Top); _borderForced = new PaletteBorderInheritForced(_calendar.StateNormal.Header.Border); _borderForced.ForceBorderEdges(PaletteDrawBorders.None); _drawHeader = new ViewDrawDocker(_calendar.StateNormal.Header.Back, _borderForced, null); _drawHeader.Add(_drawContent, ViewDockStyle.Fill); Add(_drawHeader); // Create the left/right arrows for moving the months _arrowPrev = new ButtonSpecCalendar(this, PaletteButtonSpecStyle.Previous, RelativeEdgeAlign.Near); _arrowNext = new ButtonSpecCalendar(this, PaletteButtonSpecStyle.Next, RelativeEdgeAlign.Far); _arrowPrev.Click += new EventHandler(OnPrevMonth); _arrowNext.Click += new EventHandler(OnNextMonth); _buttonSpecs = new CalendarButtonSpecCollection(this); _buttonSpecs.Add(_arrowPrev); _buttonSpecs.Add(_arrowNext); // Using a button spec manager to add the buttons to the header _buttonManager = new ButtonSpecManagerDraw(_calendar.CalendarControl, redirector, null, _buttonSpecs, new ViewDrawDocker[] { _drawHeader }, new IPaletteMetric[] { _calendar.StateCommon }, new PaletteMetricInt[] { PaletteMetricInt.HeaderButtonEdgeInsetCalendar }, new PaletteMetricPadding[] { PaletteMetricPadding.None }, _calendar.GetToolStripDelegate, needPaintDelegate); // Create stacks for holding display items ViewLayoutStack namesStack = new ViewLayoutStack(true); ViewLayoutStack weeksStack = new ViewLayoutStack(true); ViewLayoutStack daysStack = new ViewLayoutStack(false); _numberStack = new ViewLayoutStack(false); weeksStack.Add(_numberStack); weeksStack.Add(daysStack); // Add day names _drawMonthDayNames = new ViewDrawMonthDayNames(_calendar, _months); _drawWeekCorner = new ViewLayoutWeekCorner(_calendar, _months, _calendar.StateNormal.Header.Border); namesStack.Add(_drawWeekCorner); namesStack.Add(_drawMonthDayNames); Add(namesStack); Add(weeksStack); // Add border between week numbers and days area _borderEdgeRedirect = new PaletteBorderEdgeRedirect(_calendar.StateNormal.Header.Border, null); _borderEdge = new PaletteBorderEdge(_borderEdgeRedirect, null); _drawBorderEdge = new ViewDrawBorderEdge(_borderEdge, Orientation.Vertical); _drawWeekNumbers = new ViewDrawWeekNumbers(_calendar, _months); ViewLayoutDocker borderLeftDock = new ViewLayoutDocker(); borderLeftDock.Add(_drawWeekNumbers, ViewDockStyle.Left); borderLeftDock.Add(new ViewLayoutSeparator(0, 4), ViewDockStyle.Top); borderLeftDock.Add(_drawBorderEdge, ViewDockStyle.Fill); borderLeftDock.Add(new ViewLayoutSeparator(0, 4), ViewDockStyle.Bottom); _numberStack.Add(borderLeftDock); // Add border between day names and individual days PaletteBorderEdgeRedirect borderEdgeRedirect = new PaletteBorderEdgeRedirect(_calendar.StateNormal.Header.Border, null); PaletteBorderEdge borderEdge = new PaletteBorderEdge(borderEdgeRedirect, null); ViewDrawBorderEdge drawBorderEdge = new ViewDrawBorderEdge(borderEdge, Orientation.Horizontal); ViewLayoutDocker borderTopDock = new ViewLayoutDocker(); borderTopDock.Add(new ViewLayoutSeparator(4, 1), ViewDockStyle.Left); borderTopDock.Add(drawBorderEdge, ViewDockStyle.Fill); borderTopDock.Add(new ViewLayoutSeparator(4, 1), ViewDockStyle.Right); borderTopDock.Add(new ViewLayoutSeparator(1, 3), ViewDockStyle.Bottom); daysStack.Add(borderTopDock); // Add the actual individual days _drawMonthDays = new ViewDrawMonthDays(_calendar, _months); daysStack.Add(_drawMonthDays); // Adding buttons manually means we have to ask for buttons to be created _buttonManager.RecreateButtons(); }
/// <summary> /// Initialize a new instance of the ViewDrawButton class. /// </summary> /// <param name="paletteDisabled">Palette source for the disabled state.</param> /// <param name="paletteNormal">Palette source for the normal state.</param> /// <param name="paletteTracking">Palette source for the tracking state.</param> /// <param name="palettePressed">Palette source for the pressed state.</param> /// <param name="paletteCheckedNormal">Palette source for the normal checked state.</param> /// <param name="paletteCheckedTracking">Palette source for the tracking checked state.</param> /// <param name="paletteCheckedPressed">Palette source for the pressed checked state.</param> /// <param name="paletteMetric">Palette source for metric values.</param> /// <param name="buttonValues">Source for content values.</param> /// <param name="orientation">Visual orientation of the content.</param> /// <param name="useMnemonic">Use mnemonics.</param> public ViewDrawButton(IPaletteTriple paletteDisabled, IPaletteTriple paletteNormal, IPaletteTriple paletteTracking, IPaletteTriple palettePressed, IPaletteTriple paletteCheckedNormal, IPaletteTriple paletteCheckedTracking, IPaletteTriple paletteCheckedPressed, IPaletteMetric paletteMetric, IContentValues buttonValues, VisualOrientation orientation, bool useMnemonic) { // Remember the source information _paletteDisabled = paletteDisabled; _paletteNormal = paletteNormal; _paletteTracking = paletteTracking; _palettePressed = palettePressed; _paletteCheckedNormal = paletteCheckedNormal; _paletteCheckedTracking = paletteCheckedTracking; _paletteCheckedPressed = paletteCheckedPressed; _paletteCurrent = _paletteNormal; // Default to not being checked _checked = false; _allowUncheck = true; _dropDown = false; _splitter = false; _dropDownPosition = VisualOrientation.Right; // Create the drop down view _drawDropDown = new ViewLayoutCenter(1); _drawDropDownButton = new ViewDrawDropDownButton(); _drawDropDown.Add(_drawDropDownButton); _drawOuterSeparator = new ViewLayoutSeparator(1); // Create the view used to draw the split edge _edgeRedirect = new PaletteBorderEdgeRedirect(_paletteNormal.PaletteBorder, null); _drawSplitBorder = new ViewDrawBorderEdge(new PaletteBorderEdge(_edgeRedirect, null), CommonHelper.VisualToOrientation(orientation)); // Our view contains background and border with content inside _drawContent = new ViewDrawContent(_paletteNormal.PaletteContent, buttonValues, orientation); _drawCanvas = new ViewDrawSplitCanvas(_paletteNormal.PaletteBack, _paletteNormal.PaletteBorder, paletteMetric, PaletteMetricPadding.None, orientation); // Use a docker layout to organize the contents of the canvas _layoutDocker = new ViewLayoutDocker(); _layoutDocker.Add(_drawContent, ViewDockStyle.Fill); _layoutDocker.Add(_drawSplitBorder, ViewDockStyle.Right); _layoutDocker.Add(_drawDropDown, ViewDockStyle.Right); _layoutDocker.Add(_drawOuterSeparator, ViewDockStyle.Right); _layoutDocker.Tag = this; // Pass the mnemonic default to the content view _drawContent.UseMnemonic = useMnemonic; // Place the content inside the canvas _drawCanvas.Add(_layoutDocker); // Set initial view element visible states UpdateDropDown(); // Place the canvas inside ourself Add(_drawCanvas); }
/// <summary> /// Initialize a new instance of the ViewLayoutScrollViewport class. /// </summary> /// <param name="rootControl">Top level visual control.</param> /// <param name="viewportFiller">View element to place inside viewport.</param> /// <param name="paletteBorderEdge">Palette for use with the border edge.</param> /// <param name="paletteMetrics">Palette source for metrics.</param> /// <param name="metricPadding">Metric used to get view padding.</param> /// <param name="metricOvers">Metric used to get overposition.</param> /// <param name="orientation">Orientation for the viewport children.</param> /// <param name="alignment">Alignment of the children within the viewport.</param> /// <param name="animateChange">Animate changes in the viewport.</param> /// <param name="vertical">Is the viewport vertical.</param> /// <param name="needPaintDelegate">Delegate for notifying paint requests.</param> public ViewLayoutScrollViewport(VisualControl rootControl, ViewBase viewportFiller, PaletteBorderEdge paletteBorderEdge, IPaletteMetric paletteMetrics, PaletteMetricPadding metricPadding, PaletteMetricInt metricOvers, VisualOrientation orientation, RelativePositionAlign alignment, bool animateChange, bool vertical, NeedPaintHandler needPaintDelegate) { Debug.Assert(rootControl != null); Debug.Assert(viewportFiller != null); Debug.Assert(needPaintDelegate != null); // We need a way to notify changes in layout _needPaintDelegate = needPaintDelegate; // By default we are showing the contained viewport in vertical scrolling _viewportVertical = vertical; // Our initial visual orientation should match the parameter Orientation = orientation; // Create the child viewport _viewport = new ViewLayoutViewport(paletteMetrics, metricPadding, metricOvers, ViewportOrientation(_viewportVertical), alignment, animateChange); // Default to same alignment for both directions _viewport.CounterAlignment = alignment; // We always want the viewport to fill any remainder space _viewport.FillSpace = true; // Put the provided element inside the viewport _viewport.Add(viewportFiller); // Hook into animation step events _viewport.AnimateStep += new EventHandler(OnAnimateStep); // To prevent the contents of the viewport from being able to draw outside // the viewport (such as having child controls) we use a ViewLayoutControl // that uses a child control to restrict the drawing region. _viewControl = new ViewLayoutControl(rootControl, _viewport); _viewControl.InDesignMode = rootControl.InDesignMode; // Create the scrollbar and matching border edge _scrollbarV = new ViewDrawScrollBar(true); _scrollbarH = new ViewDrawScrollBar(false); _borderEdgeV = new ViewDrawBorderEdge(paletteBorderEdge, System.Windows.Forms.Orientation.Vertical); _borderEdgeH = new ViewDrawBorderEdge(paletteBorderEdge, System.Windows.Forms.Orientation.Horizontal); // Hook into scroll position changes _scrollbarV.ScrollChanged += new EventHandler(OnScrollVChanged); _scrollbarH.ScrollChanged += new EventHandler(OnScrollHChanged); // Add with appropriate docking style Add(_viewControl, ViewDockStyle.Fill); Add(_borderEdgeV, ViewDockStyle.Right); Add(_borderEdgeH, ViewDockStyle.Bottom); Add(_scrollbarV, ViewDockStyle.Right); Add(_scrollbarH, ViewDockStyle.Bottom); }