/// <summary> /// Gets the view element to use as the layout filler. /// </summary> /// <returns>ViewBase derived instance.</returns> protected override void SetLayoutFiller(ViewLayoutDocker viewLayout) { // Hide the selected page from showing up inside the layout viewLayout.Add(new ViewLayoutPageHide(Navigator), ViewDockStyle.Top); viewLayout.Add(_selectedButton, ViewDockStyle.Fill); }
/// <summary> /// Initialize a new instance of the ViewDrawNavRibbonTab class. /// </summary> /// <param name="navigator">Owning navigator instance.</param> /// <param name="page">Page this ribbon tab represents.</param> public ViewDrawNavRibbonTab(KryptonNavigator navigator, KryptonPage page) { Debug.Assert(navigator != null); Debug.Assert(page != null); _navigator = navigator; _page = page; _lastClick = DateTime.Now.AddDays(-1); // Associate the page component with this view element Component = page; // Create a controller for managing button behavior _buttonController = new PageButtonController(this, new NeedPaintHandler(OnNeedPaint)); _buttonController.ClickOnDown = true; _buttonController.Click += new MouseEventHandler(OnClick); _buttonController.RightClick += new MouseEventHandler(OnRightClick); // Allow the page to be dragged and hook into drag events _buttonController.AllowDragging = true; _buttonController.DragStart += new EventHandler <DragStartEventCancelArgs>(OnDragStart); _buttonController.DragMove += new EventHandler <PointEventArgs>(OnDragMove); _buttonController.DragEnd += new EventHandler <PointEventArgs>(OnDragEnd); _buttonController.DragQuit += new EventHandler(OnDragQuit); _buttonController.ButtonDragRectangle += new EventHandler <ButtonDragRectangleEventArgs>(OnButtonDragRectangle); _buttonController.ButtonDragOffset += new EventHandler <ButtonDragOffsetEventArgs>(OnButtonDragOffset); // A tab is selected on being pressed and not on the mouse up _buttonController.ClickOnDown = true; // We need to be notified of got/lost focus and keyboard events SourceController = _buttonController; KeyController = _buttonController; // Create a decorator to interface with the tooltip manager ToolTipController toolTipController = new ToolTipController(_navigator.ToolTipManager, this, _buttonController); ToolTipController hoverController = new ToolTipController(_navigator.HoverManager, this, toolTipController); // Assign controller for handing mouse input MouseController = hoverController; // Create overrides for handling a focus state _paletteGeneral = _navigator.StateCommon.RibbonGeneral; _overrideStateNormal = new PaletteRibbonTabContentInheritOverride(_page.OverrideFocus.RibbonTab.TabDraw, _page.OverrideFocus.RibbonTab.TabDraw, _page.OverrideFocus.RibbonTab.Content, _page.StateNormal.RibbonTab.TabDraw, _page.StateNormal.RibbonTab.TabDraw, _page.StateNormal.RibbonTab.Content, PaletteState.FocusOverride); _overrideStateTracking = new PaletteRibbonTabContentInheritOverride(_page.OverrideFocus.RibbonTab.TabDraw, _page.OverrideFocus.RibbonTab.TabDraw, _page.OverrideFocus.RibbonTab.Content, _page.StateTracking.RibbonTab.TabDraw, _page.StateTracking.RibbonTab.TabDraw, _page.StateTracking.RibbonTab.Content, PaletteState.FocusOverride); _overrideStatePressed = new PaletteRibbonTabContentInheritOverride(_page.OverrideFocus.RibbonTab.TabDraw, _page.OverrideFocus.RibbonTab.TabDraw, _page.OverrideFocus.RibbonTab.Content, _page.StatePressed.RibbonTab.TabDraw, _page.StatePressed.RibbonTab.TabDraw, _page.StatePressed.RibbonTab.Content, PaletteState.FocusOverride); _overrideStateSelected = new PaletteRibbonTabContentInheritOverride(_page.OverrideFocus.RibbonTab.TabDraw, _page.OverrideFocus.RibbonTab.TabDraw, _page.OverrideFocus.RibbonTab.Content, _page.StateSelected.RibbonTab.TabDraw, _page.StateSelected.RibbonTab.TabDraw, _page.StateSelected.RibbonTab.Content, PaletteState.FocusOverride); // Use a class to convert from ribbon tab to content interface _contentProvider = new RibbonTabToContent(_paletteGeneral, _overrideStateNormal, _overrideStateNormal); // Create the content view element and use the content provider as a way to // convert from the ribbon palette entries to the content palette entries _viewContent = new ViewDrawContent(_contentProvider, this, VisualOrientation.Top); // Add content to the view _layoutDocker = new ViewLayoutDocker(); _layoutDocker.Add(_viewContent, ViewDockStyle.Fill); Add(_layoutDocker); // Create button specification collection manager _buttonManager = new ButtonSpecNavManagerLayoutBar(Navigator, Navigator.InternalRedirector, Page.ButtonSpecs, null, new ViewLayoutDocker[] { _layoutDocker }, new IPaletteMetric[] { Navigator.StateCommon }, new PaletteMetricInt[] { PaletteMetricInt.PageButtonInset }, new PaletteMetricInt[] { PaletteMetricInt.PageButtonInset }, new PaletteMetricPadding[] { PaletteMetricPadding.PageButtonPadding }, new GetToolStripRenderer(Navigator.CreateToolStripRenderer), new NeedPaintHandler(OnNeedPaint)); // Hook up the tooltip manager so that tooltips can be generated _buttonManager.ToolTipManager = Navigator.ToolTipManager; _buttonManager.RemapTarget = ButtonSpecNavRemap.ButtonSpecRemapTarget.ButtonStandalone; // Ensure current button specs are created _buttonManager.RecreateButtons(); // Create the state specific memento array _mementos = new IDisposable[Enum.GetValues(typeof(PaletteState)).Length]; // Cache the last shape encountered _lastRibbonShape = PaletteRibbonShape.Office2010; }
private void CreateButtonSpecView() { // Layout docker used to contain the generated button specs _viewButtonSpecDocker = new ViewLayoutDocker(); }
/// <summary> /// Create the view hierarchy for this view mode. /// </summary> protected override void CreateCheckItemView() { // Create the two headers and header content _viewContentPrimary = new ViewDrawContent(Navigator.StateNormal.HeaderGroup.HeaderPrimary.Content, Navigator.Header.HeaderValuesPrimary, VisualOrientation.Top); _viewHeadingPrimary = new ViewDrawDocker(Navigator.StateNormal.HeaderGroup.HeaderPrimary.Back, Navigator.StateNormal.HeaderGroup.HeaderPrimary.Border, Navigator.StateNormal.HeaderGroup.HeaderPrimary, PaletteMetricBool.None, PaletteMetricPadding.HeaderGroupPaddingPrimary, VisualOrientation.Top); _viewContentSecondary = new ViewDrawContent(Navigator.StateNormal.HeaderGroup.HeaderSecondary.Content, Navigator.Header.HeaderValuesSecondary, VisualOrientation.Top); _viewHeadingSecondary = new ViewDrawDocker(Navigator.StateNormal.HeaderGroup.HeaderSecondary.Back, Navigator.StateNormal.HeaderGroup.HeaderSecondary.Border, Navigator.StateNormal.HeaderGroup.HeaderSecondary, PaletteMetricBool.None, PaletteMetricPadding.HeaderGroupPaddingSecondary, VisualOrientation.Top); // Place the the content as fillers in the headers _viewHeadingPrimary.Add(_viewContentPrimary, ViewDockStyle.Fill); _viewHeadingSecondary.Add(_viewContentSecondary, ViewDockStyle.Fill); // Create a canvas for containing the selected page and put old root inside it _drawGroup = new ViewDrawCanvas(Navigator.StateNormal.HeaderGroup.Back, Navigator.StateNormal.HeaderGroup.Border, VisualOrientation.Top) { ApplyIncludeBorderEdge = true }; _drawGroup.Add(_oldRoot); // Create the view element that lays out the check/tab buttons ViewLayoutBarForTabs layoutBar = new ViewLayoutBarForTabs(Navigator.Bar.ItemSizing, Navigator.Bar.ItemAlignment, Navigator.Bar.BarMultiline, Navigator.Bar.ItemMinimumSize, Navigator.Bar.ItemMaximumSize, Navigator.Bar.BarMinimumHeight, Navigator.Bar.TabBorderStyle, true); _layoutBar = layoutBar; // Create the scroll spacer that restricts display _layoutBarViewport = new ViewLayoutViewport(Navigator.StateCommon.Bar, PaletteMetricPadding.BarPaddingTabs, PaletteMetricInt.CheckButtonGap, Navigator.Bar.BarOrientation, Navigator.Bar.ItemAlignment, Navigator.Bar.BarAnimation) { _layoutBar }; // Create the button bar area docker _layoutBarDocker = new ViewLayoutDocker { { _layoutBarViewport, ViewDockStyle.Fill } }; // Add a separators for insetting items _layoutBarSeparatorFirst = new ViewLayoutSeparator(0); _layoutBarSeparatorLast = new ViewLayoutSeparator(0); _layoutBarDocker.Add(_layoutBarSeparatorFirst, ViewDockStyle.Left); _layoutBarDocker.Add(_layoutBarSeparatorLast, ViewDockStyle.Right); // Create the layout that insets the contents to allow for rounding of the group border _layoutOverlap = new ViewLayoutInsetOverlap(_drawGroup) { _layoutBarDocker }; // Create the docker used to layout contents of main panel and fill with group _layoutPanelDocker = new ViewLayoutDockerOverlap(_drawGroup, _layoutOverlap, layoutBar) { { _layoutOverlap, ViewDockStyle.Top }, { _drawGroup, ViewDockStyle.Fill } }; // Place the headers and page holding area into the group _topGroup = new ViewLayoutDocker { { _viewHeadingSecondary, ViewDockStyle.Bottom }, { _viewHeadingPrimary, ViewDockStyle.Top }, { _layoutPanelDocker, ViewDockStyle.Fill } }; // Prevent adjacent headers from having two borders _topGroup.RemoveChildBorders = true; // Create the top level panel and put a layout docker inside it _drawPanel = new ViewDrawPanel(Navigator.StateNormal.Back) { _topGroup }; _newRoot = _drawPanel; // Set initial visible state of headers _viewHeadingPrimary.Visible = Navigator.Header.HeaderVisiblePrimary; _viewHeadingSecondary.Visible = Navigator.Header.HeaderVisibleSecondary; // Set the correct tab style UpdateTabStyle(); // Must call the base class to perform common actions base.CreateCheckItemView(); }
/// <summary> /// Create the view hierarchy for this view mode. /// </summary> protected override void CreateCheckItemView() { // Create a canvas for containing the selected page and put old root inside it _drawGroup = new ViewDrawCanvas(Navigator.StateNormal.HeaderGroup.Back, Navigator.StateNormal.HeaderGroup.Border, VisualOrientation.Top) { _oldRoot }; // Create the view element that lays out the check buttons ViewLayoutBarForTabs layoutBar = new ViewLayoutBarForTabs(Navigator.StateCommon.Bar, PaletteMetricInt.RibbonTabGap, Navigator.Bar.ItemSizing, Navigator.Bar.ItemAlignment, Navigator.Bar.BarMultiline, Navigator.Bar.ItemMinimumSize, Navigator.Bar.ItemMaximumSize, Navigator.Bar.BarMinimumHeight, Navigator.Bar.TabBorderStyle, true); _layoutBar = layoutBar; // Create the scroll spacer that restricts display _layoutBarViewport = new ViewLayoutViewport(Navigator.StateCommon.Bar, PaletteMetricPadding.BarPaddingTabs, PaletteMetricInt.RibbonTabGap, Navigator.Bar.BarOrientation, Navigator.Bar.ItemAlignment, Navigator.Bar.BarAnimation) { _layoutBar }; // Create the button bar area docker _layoutBarDocker = new ViewLayoutDocker { { _layoutBarViewport, ViewDockStyle.Fill } }; // Add a separators for insetting items _layoutBarSeparatorFirst = new ViewLayoutSeparator(0); _layoutBarSeparatorLast = new ViewLayoutSeparator(0); _layoutBarDocker.Add(_layoutBarSeparatorFirst, ViewDockStyle.Left); _layoutBarDocker.Add(_layoutBarSeparatorLast, ViewDockStyle.Right); // Create the layout that insets the contents to allow for rounding of the group border _layoutOverlap = new ViewLayoutInsetOverlap(_drawGroup) { _layoutBarDocker }; // Create the docker used to layout contents of main panel and fill with group _layoutPanelDocker = new ViewLayoutDockerOverlap(_drawGroup, _layoutOverlap, layoutBar) { { _layoutOverlap, ViewDockStyle.Top }, { _drawGroup, ViewDockStyle.Fill } }; // Create the top level panel and put a layout docker inside it _drawPanel = new ViewDrawPanel(Navigator.StateNormal.Back) { _layoutPanelDocker }; _newRoot = _drawPanel; // Must call the base class to perform common actions base.CreateCheckItemView(); }
private void CreateViewElements(PaletteRedirect redirect) { // Layout for individual tabs inside the header LayoutTabs = new ViewLayoutRibbonTabs(_ribbon, NeedPaintDelegate); // Put inside a viewport so scrollers are used when tabs cannot be shrunk to fill space _tabsViewport = new ViewLayoutRibbonScrollPort(_ribbon, System.Windows.Forms.Orientation.Horizontal, LayoutTabs, true, SCROLL_SPEED, NeedPaintDelegate) { TransparentBackground = true }; _tabsViewport.PaintBackground += OnTabsPaintBackground; LayoutTabs.ParentControl = _tabsViewport.ViewLayoutControl.ChildControl; LayoutTabs.NeedPaintDelegate = _tabsViewport.ViewControlPaintDelegate; // We use a layout docker as a child to prevent buttons going to the left of the app button ViewLayoutDocker tabsDocker = new ViewLayoutDocker { // Place the tabs viewport as the fill inside ourself, the button specs will be placed // to the left and right of this fill element automatically by the button manager below { _tabsViewport, ViewDockStyle.Fill } }; // We need to draw the bottom half of the application button or a full app tab LayoutAppButton = new ViewLayoutRibbonAppButton(_ribbon, true); LayoutAppTab = new ViewLayoutRibbonAppTab(_ribbon); // Connect up the application button controller to the app button element _appButtonController.Target3 = LayoutAppButton.AppButton; _appButtonController.Click += OnAppButtonClicked; _appButtonController.MouseReleased += OnAppButtonReleased; LayoutAppButton.MouseController = _appButtonController; LayoutAppButton.SourceController = _appButtonController; LayoutAppButton.KeyController = _appButtonController; _appTabController.Target1 = LayoutAppTab.AppTab; _appTabController.Click += OnAppButtonClicked; _appTabController.MouseReleased += OnAppButtonReleased; LayoutAppTab.MouseController = _appTabController; LayoutAppTab.SourceController = _appTabController; LayoutAppTab.KeyController = _appTabController; // When the app button is not visible we need separator instead before start of first tab _layoutAppButtonSep = new ViewLayoutSeparator(5, 0) { Visible = false }; // Used separators around the tabs and the edge elements _rightSeparator = new ViewLayoutRibbonSeparator(FAR_TAB_GAP, true); _leftSeparator = new ViewLayoutRibbonSeparator(BUTTON_TAB_GAP_2007, true); // Place application button on left and tabs as the filler (with some separators for neatness) Add(_rightSeparator, ViewDockStyle.Left); Add(_leftSeparator, ViewDockStyle.Left); Add(LayoutAppButton, ViewDockStyle.Left); Add(_layoutAppButtonSep, ViewDockStyle.Left); Add(LayoutAppTab, ViewDockStyle.Left); Add(tabsDocker, ViewDockStyle.Fill); // Create button specification collection manager PaletteRedirect aeroOverrideText = new PaletteRedirectRibbonAeroOverride(_ribbon, redirect); ButtonSpecManager = new ButtonSpecManagerLayoutRibbon(_ribbon, aeroOverrideText, _ribbon.ButtonSpecs, _buttonSpecsFixed, new ViewLayoutDocker[] { tabsDocker }, new IPaletteMetric[] { _ribbon.StateCommon }, new PaletteMetricInt[] { PaletteMetricInt.HeaderButtonEdgeInsetPrimary }, new PaletteMetricPadding[] { PaletteMetricPadding.RibbonButtonPadding }, _ribbon.CreateToolStripRenderer, NeedPaintDelegate); // Create the manager for handling tooltips ToolTipManager = new ToolTipManager(); ToolTipManager.ShowToolTip += OnShowToolTip; ToolTipManager.CancelToolTip += OnCancelToolTip; ButtonSpecManager.ToolTipManager = ToolTipManager; }
/// <summary> /// Initialize a new instance of the ViewDrawMenuLinkLabel class. /// </summary> /// <param name="provider">Reference to provider.</param> /// <param name="linkLabel">Reference to owning link label entry.</param> public ViewDrawMenuLinkLabel(IContextMenuProvider provider, KryptonContextMenuLinkLabel linkLabel) { _provider = provider; KryptonContextMenuLinkLabel = linkLabel; // Create fixed storage of the content values _contentValues = new FixedContentValue(linkLabel.Text, linkLabel.ExtraText, linkLabel.Image, linkLabel.ImageTransparentColor); // Decide on the enabled state of the display ItemEnabled = provider.ProviderEnabled; // Give the heading object the redirector to use when inheriting values linkLabel.SetPaletteRedirect(provider.ProviderRedirector); // Create the content for the actual heading text/image _drawContent = new ViewDrawContent(linkLabel.OverrideFocusNotVisited, _contentValues, VisualOrientation.Top) { UseMnemonic = true, Enabled = ItemEnabled }; // Place label link in the center of the area but inside some separator to add spacing _innerDocker = new ViewLayoutDocker { { _drawContent, ViewDockStyle.Fill }, { new ViewLayoutSeparator(1), ViewDockStyle.Right }, { new ViewLayoutSeparator(1), ViewDockStyle.Left }, { new ViewLayoutSeparator(1), ViewDockStyle.Top }, { new ViewLayoutSeparator(1), ViewDockStyle.Bottom } }; // Use outer docker so that any extra space not needed is used by the null _outerDocker = new ViewLayoutDocker { { _innerDocker, ViewDockStyle.Top }, { new ViewLayoutNull(), ViewDockStyle.Fill } }; // Use context menu specific version of the link label controller MenuLinkLabelController mllc = new(provider.ProviderViewManager, _drawContent, this, provider.ProviderNeedPaintDelegate); mllc.Click += OnClick; _drawContent.MouseController = mllc; _drawContent.KeyController = mllc; // Add docker as the composite content Add(_outerDocker); // Want to know when a property changes whilst displayed KryptonContextMenuLinkLabel.PropertyChanged += OnPropertyChanged; // We need to know if a property of the command changes if (KryptonContextMenuLinkLabel.KryptonCommand != null) { _cachedCommand = KryptonContextMenuLinkLabel.KryptonCommand; KryptonContextMenuLinkLabel.KryptonCommand.PropertyChanged += OnCommandPropertyChanged; } }
/// <summary> /// Initialize a new instance of the ViewDrawMenuRadioButton class. /// </summary> /// <param name="provider">Reference to provider.</param> /// <param name="radioButton">Reference to owning radio button entry.</param> public ViewDrawMenuRadioButton(IContextMenuProvider provider, KryptonContextMenuRadioButton radioButton) { _provider = provider; KryptonContextMenuRadioButton = radioButton; // Create fixed storage of the content values _contentValues = new FixedContentValue(radioButton.Text, radioButton.ExtraText, radioButton.Image, radioButton.ImageTransparentColor); // Decide on the enabled state of the display ItemEnabled = provider.ProviderEnabled && KryptonContextMenuRadioButton.Enabled; // Give the heading object the redirector to use when inheriting values KryptonContextMenuRadioButton.SetPaletteRedirect(provider.ProviderRedirector); // Create the content for the actual heading text/image ViewDrawContent = new ViewDrawContent(ItemEnabled ? KryptonContextMenuRadioButton.OverrideNormal : KryptonContextMenuRadioButton.OverrideDisabled, _contentValues, VisualOrientation.Top) { UseMnemonic = true, Enabled = ItemEnabled }; // Create the radio button image drawer and place inside element so it is always centered ViewDrawRadioButton = new ViewDrawRadioButton(KryptonContextMenuRadioButton.StateRadioButtonImages) { CheckState = KryptonContextMenuRadioButton.Checked, Enabled = ItemEnabled }; _layoutCenter = new ViewLayoutCenter { ViewDrawRadioButton }; // Place the radio button on the left of the available space but inside separators _innerDocker = new ViewLayoutDocker { { ViewDrawContent, ViewDockStyle.Fill }, { _layoutCenter, ViewDockStyle.Left }, { new ViewLayoutSeparator(1), ViewDockStyle.Right }, { new ViewLayoutSeparator(3), ViewDockStyle.Left }, { new ViewLayoutSeparator(1), ViewDockStyle.Top }, { new ViewLayoutSeparator(1), ViewDockStyle.Bottom } }; // Use outer docker so that any extra space not needed is used by the null _outerDocker = new ViewLayoutDocker { { _innerDocker, ViewDockStyle.Top }, { new ViewLayoutNull(), ViewDockStyle.Fill } }; // Use context menu specific version of the radio button controller MenuRadioButtonController mrbc = new(provider.ProviderViewManager, _innerDocker, this, provider.ProviderNeedPaintDelegate); mrbc.Click += OnClick; _innerDocker.MouseController = mrbc; _innerDocker.KeyController = mrbc; // We need to be notified whenever the checked state changes KryptonContextMenuRadioButton.CheckedChanged += OnCheckedChanged; if (KryptonContextMenuRadioButton.KryptonCommand != null) { _cachedCommand = KryptonContextMenuRadioButton.KryptonCommand; KryptonContextMenuRadioButton.KryptonCommand.PropertyChanged += OnCommandPropertyChanged; } // Add docker as the composite content Add(_outerDocker); }
/// <summary> /// Initialize a new instance of the ViewDrawButtonExtended 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 ViewDrawButtonExtended(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; CurrentPalette = _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 { { _drawContent, ViewDockStyle.Fill }, { _drawSplitBorder, ViewDockStyle.Right }, { _drawDropDown, ViewDockStyle.Right }, { _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 ViewDrawMenuCheckBox class. /// </summary> /// <param name="provider">Reference to provider.</param> /// <param name="checkBox">Reference to owning check box entry.</param> public ViewDrawMenuCheckBox(IContextMenuProvider provider, KryptonContextMenuCheckBox checkBox) { _provider = provider; KryptonContextMenuCheckBox = checkBox; // Create fixed storage of the content values _contentValues = new FixedContentValue(ResolveText, ResolveExtraText, ResolveImage, ResolveImageTransparentColor); // Decide on the enabled state of the display ItemEnabled = provider.ProviderEnabled && ResolveEnabled; // Give the heading object the redirector to use when inheriting values KryptonContextMenuCheckBox.SetPaletteRedirect(provider.ProviderRedirector); // Create the content for the actual heading text/image ViewDrawContent = new ViewDrawContent(ItemEnabled ? KryptonContextMenuCheckBox.OverrideNormal : KryptonContextMenuCheckBox.OverrideDisabled, _contentValues, VisualOrientation.Top) { UseMnemonic = true, Enabled = ItemEnabled }; // Create the check box image drawer and place inside element so it is always centered ViewDrawCheckBox = new ViewDrawCheckBox(KryptonContextMenuCheckBox.StateCheckBoxImages) { CheckState = ResolveCheckState, Enabled = ItemEnabled }; _layoutCenter = new ViewLayoutCenter { ViewDrawCheckBox }; // Place the check box on the left of the available space but inside separators _innerDocker = new ViewLayoutDocker { { ViewDrawContent, ViewDockStyle.Fill }, { _layoutCenter, ViewDockStyle.Left }, { new ViewLayoutSeparator(1), ViewDockStyle.Right }, { new ViewLayoutSeparator(3), ViewDockStyle.Left }, { new ViewLayoutSeparator(1), ViewDockStyle.Top }, { new ViewLayoutSeparator(1), ViewDockStyle.Bottom } }; // Use outer docker so that any extra space not needed is used by the null _outerDocker = new ViewLayoutDocker { { _innerDocker, ViewDockStyle.Top }, { new ViewLayoutNull(), ViewDockStyle.Fill } }; // Use context menu specific version of the check box controller MenuCheckBoxController mcbc = new(provider.ProviderViewManager, _innerDocker, this, provider.ProviderNeedPaintDelegate); mcbc.Click += OnClick; _innerDocker.MouseController = mcbc; _innerDocker.KeyController = mcbc; // Add docker as the composite content Add(_outerDocker); // Want to know when a property changes whilst displayed KryptonContextMenuCheckBox.PropertyChanged += OnPropertyChanged; // We need to know if a property of the command changes if (KryptonContextMenuCheckBox.KryptonCommand != null) { _cachedCommand = KryptonContextMenuCheckBox.KryptonCommand; KryptonContextMenuCheckBox.KryptonCommand.PropertyChanged += OnCommandPropertyChanged; } }
private void CreateView() { // Override the palette provided values _backForced = new PaletteBackInheritForced(_ribbon.StateCommon.RibbonGroupClusterButton.PaletteBack); _borderForced = new PaletteBorderInheritForced(_ribbon.StateCommon.RibbonGroupClusterButton.PaletteBorder); // Create the background and border view _viewMediumSmall = new ViewDrawRibbonGroupButtonBackBorder(_ribbon, _ribbonColorButton, _backForced, _borderForced, true, _needPaint) { SplitVertical = false }; _viewMediumSmall.Click += new EventHandler(OnSmallButtonClick); _viewMediumSmall.DropDown += new EventHandler(OnSmallButtonDropDown); if (_ribbon.InDesignMode) { _viewMediumSmall.ContextClick += new MouseEventHandler(OnContextClick); } // Create the layout docker for the contents of the button ViewLayoutDocker contentLayout = new ViewLayoutDocker(); // Create the image and drop down content _viewMediumSmallImage = new ViewDrawRibbonGroupClusterColorButtonImage(_ribbon, _ribbonColorButton); _viewMediumSmallText1 = new ViewDrawRibbonGroupClusterColorButtonText(_ribbon, _ribbonColorButton) { Visible = (_currentSize != GroupItemSize.Small) }; _viewMediumSmallDropArrow = new ViewDrawRibbonDropArrow(_ribbon); _viewMediumSmallText2Sep1 = new ViewLayoutRibbonSeparator(3, false); _viewMediumSmallText2Sep2 = new ViewLayoutRibbonSeparator(3, false); ViewLayoutRibbonCenterPadding imagePadding = new ViewLayoutRibbonCenterPadding(_smallImagePadding) { _viewMediumSmallImage }; // Layout the content in the center of a row _viewMediumSmallCenter = new ViewLayoutRibbonRowCenter { imagePadding, _viewMediumSmallText1, _viewMediumSmallText2Sep1, _viewMediumSmallDropArrow, _viewMediumSmallText2Sep2 }; // Use content as only fill item contentLayout.Add(_viewMediumSmallCenter, ViewDockStyle.Fill); // Add the content into the background and border _viewMediumSmall.Add(contentLayout); // Create controller for intercepting events to determine tool tip handling _viewMediumSmall.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, _viewMediumSmall, _viewMediumSmall.MouseController); // Provide back reference to the button definition _ribbonColorButton.ClusterColorButtonView = _viewMediumSmall; // Define the actual view Add(_viewMediumSmall); }
/// <summary> /// Initialize a new instance of the ViewDrawMenuCheckButton class. /// </summary> /// <param name="provider">Reference to provider.</param> /// <param name="checkButton">Reference to owning check button entry.</param> public ViewDrawMenuCheckButton(IContextMenuProvider provider, KryptonContextMenuCheckButton checkButton) { _provider = provider; KryptonContextMenuCheckButton = checkButton; // Create fixed storage of the content values _contentValues = new FixedContentValue(ResolveText, ResolveExtraText, ResolveImage, ResolveImageTransparentColor); // Decide on the enabled state of the display ItemEnabled = provider.ProviderEnabled && ResolveEnabled; // Give the heading object the redirector to use when inheriting values KryptonContextMenuCheckButton.SetPaletteRedirect(provider.ProviderRedirector); // Create the view button instance ViewDrawButton = new ViewDrawButton(checkButton.OverrideDisabled, checkButton.OverrideNormal, checkButton.OverrideTracking, checkButton.OverridePressed, new PaletteMetricRedirect(provider.ProviderRedirector), _contentValues, VisualOrientation.Top, true); // Add the checked specific palettes to the existing view button ViewDrawButton.SetCheckedPalettes(checkButton.OverrideCheckedNormal, checkButton.OverrideCheckedTracking, checkButton.OverrideCheckedPressed); ViewDrawButton.Enabled = ItemEnabled; ViewDrawButton.Checked = ResolveChecked; // Place the check box on the left of the available space but inside separators _innerDocker = new ViewLayoutDocker { { ViewDrawButton, ViewDockStyle.Fill }, { new ViewLayoutSeparator(1), ViewDockStyle.Right }, { new ViewLayoutSeparator(1), ViewDockStyle.Left }, { new ViewLayoutSeparator(1), ViewDockStyle.Top }, { new ViewLayoutSeparator(1), ViewDockStyle.Bottom } }; // Use outer docker so that any extra space not needed is used by the null _outerDocker = new ViewLayoutDocker { { _innerDocker, ViewDockStyle.Top }, { new ViewLayoutNull(), ViewDockStyle.Fill } }; // Use context menu specific version of the check box controller MenuCheckButtonController mcbc = new(provider.ProviderViewManager, _innerDocker, this, provider.ProviderNeedPaintDelegate); mcbc.Click += OnClick; _innerDocker.MouseController = mcbc; _innerDocker.KeyController = mcbc; // Add docker as the composite content Add(_outerDocker); // Want to know when a property changes whilst Displayed KryptonContextMenuCheckButton.PropertyChanged += OnPropertyChanged; // We need to know if a property of the command changes if (KryptonContextMenuCheckButton.KryptonCommand != null) { _cachedCommand = KryptonContextMenuCheckButton.KryptonCommand; KryptonContextMenuCheckButton.KryptonCommand.PropertyChanged += OnCommandPropertyChanged; } }
public KryptonListView() { SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.SupportsTransparentBackColor // Cannot get thi sto work (Code removed)!! | ControlStyles.EnableNotifyMessage , true); base.OwnerDraw = true; // We need to repaint entire control whenever resized SetStyle(ControlStyles.ResizeRedraw, true); // Yes, we want to be drawn double buffered by default DoubleBuffered = true; // Default fields _alwaysActive = true; _style = ButtonStyle.ListItem; Padding = new Padding(1); base.BorderStyle = System.Windows.Forms.BorderStyle.None; // We need to create and cache a device context compatible with the display _screenDC = PI.CreateCompatibleDC(IntPtr.Zero); // Set the palette and renderer to the defaults as specified by the manager Redirector = new PaletteRedirect(null); CacheNewPalette(KryptonManager.CurrentGlobalPalette); KryptonManager.GlobalPaletteChanged += OnGlobalPaletteChanged; NeedPaintDelegate = OnNeedPaint; // Create the palette storage Images = new CheckBoxImages(NeedPaintDelegate); _paletteCheckBoxImages = new PaletteRedirectCheckBox(Redirector, Images); StateCommon = new PaletteListStateRedirect(Redirector, PaletteBackStyle.InputControlStandalone, PaletteBorderStyle.InputControlStandalone, NeedPaintDelegate); OverrideFocus = new PaletteListItemTripleRedirect(Redirector, PaletteBackStyle.ButtonListItem, PaletteBorderStyle.ButtonListItem, PaletteContentStyle.ButtonListItem, NeedPaintDelegate); StateDisabled = new PaletteListState(StateCommon, NeedPaintDelegate); StateActive = new PaletteDouble(StateCommon, NeedPaintDelegate); StateNormal = new PaletteListState(StateCommon, NeedPaintDelegate); StateTracking = new PaletteListItemTriple(StateCommon.Item, NeedPaintDelegate); StatePressed = new PaletteListItemTriple(StateCommon.Item, NeedPaintDelegate); StateCheckedNormal = new PaletteListItemTriple(StateCommon.Item, NeedPaintDelegate); StateCheckedTracking = new PaletteListItemTriple(StateCommon.Item, NeedPaintDelegate); StateCheckedPressed = new PaletteListItemTriple(StateCommon.Item, NeedPaintDelegate); // Create manager and view for drawing the background ViewDrawPanel = new ViewDrawPanel(StateNormal.Back); // Create the override handling classes _overrideNormal = new PaletteTripleOverride(OverrideFocus.Item, StateNormal.Item, PaletteState.FocusOverride); _overrideTracking = new PaletteTripleOverride(OverrideFocus.Item, StateTracking.Item, PaletteState.FocusOverride); _overridePressed = new PaletteTripleOverride(OverrideFocus.Item, StatePressed.Item, PaletteState.FocusOverride); _overrideCheckedNormal = new PaletteTripleOverride(OverrideFocus.Item, StateCheckedNormal.Item, PaletteState.FocusOverride); _overrideCheckedTracking = new PaletteTripleOverride(OverrideFocus.Item, StateCheckedTracking.Item, PaletteState.FocusOverride); _overrideCheckedPressed = new PaletteTripleOverride(OverrideFocus.Item, StateCheckedPressed.Item, PaletteState.FocusOverride); // Create the check box image drawer and place inside element so it is always centered _drawCheckBox = new ViewDrawCheckBox(_paletteCheckBoxImages); _layoutCheckBox = new ViewLayoutCenter { _drawCheckBox }; _layoutCheckBoxAfter = new ViewLayoutSeparator(3, 0); _layoutCheckBoxStack = new ViewLayoutStack(true) { _layoutCheckBox, _layoutCheckBoxAfter }; // Stack used to layout the location of the node image _layoutImage = new ViewLayoutSeparator(0, 0); _layoutImageAfter = new ViewLayoutSeparator(3, 0); _layoutImageCenter = new ViewLayoutCenter(_layoutImage); _layoutImageStack = new ViewLayoutStack(true) { _layoutImageCenter, _layoutImageAfter }; _layoutImageState = new ViewLayoutSeparator(16, 16); _layoutImageCenterState = new ViewLayoutCenter(_layoutImageState); // Create the draw element for owner drawing individual items _contentValues = new ShortTextValue(); _drawButton = new ViewDrawButton(StateDisabled.Item, _overrideNormal, _overrideTracking, _overridePressed, _overrideCheckedNormal, _overrideCheckedTracking, _overrideCheckedPressed, new PaletteMetricRedirect(Redirector), _contentValues, VisualOrientation.Top, false); // Place check box on the left and the label in the remainder _layoutDockerTile = new ViewLayoutDocker { { _layoutImageStack, ViewDockStyle.Left }, { _layoutImageCenterState, ViewDockStyle.Left }, { _layoutCheckBoxStack, ViewDockStyle.Left }, { _drawButton, ViewDockStyle.Fill } }; _layoutDockerSmall = new ViewLayoutDocker { { _drawButton, ViewDockStyle.Left }, { _layoutImageStack, ViewDockStyle.Left }, { _layoutImageCenterState, ViewDockStyle.Left }, { _layoutCheckBoxStack, ViewDockStyle.Left } }; // Place check box on the left and the text to match the width _layoutDockerCheckLarge = new ViewLayoutDocker { { _layoutImageStack, ViewDockStyle.Left }, { _layoutImageCenterState, ViewDockStyle.Left }, { _layoutCheckBoxStack, ViewDockStyle.Left }, { _drawButton, ViewDockStyle.Bottom } }; // Create the element that fills the remainder space and remembers fill rectangle _layoutFill = new ViewLayoutFill(this) { DisplayPadding = new Padding(1) }; // Create inner view for placing inside the drawing docker _drawDockerInner = new ViewLayoutDocker { { _layoutFill, ViewDockStyle.Fill } }; // Create view for the control border and background _drawDockerOuter = new ViewDrawDocker(StateNormal.Back, StateNormal.Border) { { _drawDockerInner, ViewDockStyle.Fill } }; // Create the view manager instance ViewManager = new ViewManager(this, _drawDockerOuter); // We need to create and cache a device context compatible with the display _screenDC = PI.CreateCompatibleDC(IntPtr.Zero); StateCommon.Item.Content.ShortText.MultiLine = InheritBool.True; StateCommon.Item.Content.ShortText.MultiLineH = PaletteRelativeAlign.Center; StateCommon.Item.Content.ShortText.TextH = PaletteRelativeAlign.Center; }