/// <summary> /// Initialize a new instance of the KryptonDockingEdgeAutoHidden class. /// </summary> /// <param name="name">Initial name of the element.</param> /// <param name="control">Reference to control that is being managed.</param> /// <param name="edge">Docking edge being managed.</param> public KryptonDockingEdgeAutoHidden(string name, Control control, DockingEdge edge) : base(name) { Control = control ?? throw new ArgumentNullException(nameof(control)); Edge = edge; _panelEventFired = false; // Create and add the panel used to host auto hidden groups _panel = new KryptonAutoHiddenPanel(edge) { AutoSize = true, AutoSizeMode = AutoSizeMode.GrowAndShrink, Dock = DockingHelper.DockStyleFromDockEdge(edge, false) }; _panel.Disposed += OnPanelDisposed; // Create the panel that slides into/out of view to show selected auto host entry _slidePanel = new KryptonAutoHiddenSlidePanel(control, edge, _panel); _slidePanel.SplitterMoveRect += OnSlidePanelSeparatorMoveRect; _slidePanel.SplitterMoved += OnSlidePanelSeparatorMoved; _slidePanel.SplitterMoving += OnSlidePanelSeparatorMoving; _slidePanel.PageCloseClicked += OnSlidePanelPageCloseClicked; _slidePanel.PageAutoHiddenClicked += OnSlidePanelPageAutoHiddenClicked; _slidePanel.PageDropDownClicked += OnSlidePanelPageDropDownClicked; _slidePanel.AutoHiddenShowingStateChanged += OnSlidePanelAutoHiddenShowingStateChanged; _slidePanel.Disposed += OnSlidePanelDisposed; Control.Controls.Add(_panel); }
/// <summary> /// Initialize a new instance of the KryptonAutoHiddenSlidePanel class. /// </summary> /// <param name="control">Reference to control that is being managed.</param> /// <param name="edge">Docking edge being managed.</param> /// <param name="panel">Reference to auto hidden panel for this edge.</param> public KryptonAutoHiddenSlidePanel(Control control, DockingEdge edge, KryptonAutoHiddenPanel panel) { _control = control; _edge = edge; _panel = panel; _state = DockingAutoHiddenShowState.Hidden; _checkMakeHidden = OnCheckMakeHidden; // We need to a timer to automate sliding in and out _slideTimer = new Timer { Interval = SLIDE_INTERVAL }; _slideTimer.Tick += OnSlideTimerTick; // Timer used to delay between notification of need to slide inwards and performing actual slide _dismissTimer = new Timer { Interval = DISMISS_INTERVAL }; _dismissTimer.Tick += OnDismissTimerTick; _dismissRunning = false; // Create inner panel that holds the actual dockspace and separator _dockspaceSlide = new KryptonDockspaceSlide { Dock = DockStyle.Fill, AutoHiddenHost = true }; _dockspaceSlide.PageCloseClicked += OnDockspacePageCloseClicked; _dockspaceSlide.PageAutoHiddenClicked += OnDockspacePageAutoHiddenClicked; _dockspaceSlide.PageDropDownClicked += OnDockspacePageDropDownClicked; SeparatorControl = new KryptonDockspaceSeparator(edge, true); SeparatorControl.SplitterMoving += OnDockspaceSeparatorMoving; SeparatorControl.SplitterMoved += OnDockspaceSeparatorMoved; SeparatorControl.SplitterMoveRect += OnDockspaceSeparatorMoveRect; _inner = new KryptonPanel(); _inner.Controls.AddRange(new Control[] { _dockspaceSlide, SeparatorControl }); Controls.Add(_inner); // Do not show ourself until we are needed Visible = false; // Add a Button that is not showing and used to push focus away from the dockspace _dummyTarget = new Button { Location = new Point(-200, -200), Size = new Size(100, 100) }; Controls.Add(_dummyTarget); // Add ourself into the target control for docking control.SizeChanged += OnControlSizeChanged; control.Controls.Add(this); // Need to peek at windows messages so we can determine if mouse is over the slide out panel Application.AddMessageFilter(this); }
/// <summary> /// Initialize a new instance of the AutoHiddenGroupPanelEventArgs class. /// </summary> /// <param name="autoHiddenPanel">Reference to auto hidden panel control instance.</param> /// <param name="element">Reference to docking auto hidden edge element that is managing the panel.</param> public AutoHiddenGroupPanelEventArgs(KryptonAutoHiddenPanel autoHiddenPanel, KryptonDockingEdgeAutoHidden element) { AutoHiddenPanelControl = autoHiddenPanel; EdgeAutoHiddenElement = element; }