private void _bClick(object sender, EventArgs e) { if (!(_lb.SelectedItem is AToolbar tb)) { return; } if (tb._c.IsDisposed) { ADialog.Show("Closed", owner: this); return; } var w = tb._c.Hwnd(); var r = w.Rect; if (sender == _bShow) { if (AScreen.IsInAnyScreen(r)) { r.Inflate(2, 2); var osd = new AOsdRect { Rect = r, Color = 0xff0000 }; osd.Show(); ATimer.After(1000, _ => osd.Dispose()); } else { ADialog.Show("Offscreen", "Rectangle: " + r.ToString(), owner: this); } } else if (sender == _bMove) { if (!w.IsVisible && !ADialog.ShowOkCancel("Hidden", "Move this hidden toolbar?", owner: this)) { return; } var xy = AMouse.XY; w.MoveLL(xy.x, xy.y); var w2 = this.Hwnd(); if (!w.ZorderIsAbove(w2)) { w.ZorderAbove(w2); } } }
/// <summary> /// Starts or stops capturing. /// Does nothing if already in that state. /// </summary> public void StartStop(bool start) { if (start == Capturing) { return; } var wForm = (AWnd)_form; if (start) { //let other forms stop capturing wForm.Prop.Set(c_propName, 1); AWnd.Find(null, "WindowsForms*", also: o => { if (o != wForm && o.Prop[c_propName] == 1) { o.Send(c_stopMessage); } return(false); }); if (!Api.RegisterHotKey(wForm, 1, 0, KKey.F3)) { ADialog.ShowError("Failed to register hotkey F3", owner: _form); return; } Capturing = true; //set timer that shows AO rect if (_timer == null) { _osr = TUtil.CreateOsdRect(); _timer = new ATimer(t => { //Don't capture too frequently. // Eg if the callback is very slow. Or if multiple timer messages are received without time interval (possible in some conditions). long t1 = ATime.PerfMilliseconds, t2 = t1 - _prevTime; _prevTime = t1; if (t2 < 100) { return; } //show rect of UI object from mouse AWnd w = AWnd.FromMouse(WXYFlags.NeedWindow); RECT?r = default; if (!(w.Is0 || w == wForm || w.OwnerWindow == wForm)) { r = _cbGetRect(); } if (r.HasValue) { var rr = r.GetValueOrDefault(); rr.Inflate(2, 2); //2 pixels inside, 2 outside _osr.Rect = rr; _osr.Show(); } else { _osr.Visible = false; } }); } _timer.Every(250); } else { Capturing = false; Api.UnregisterHotKey(wForm, 1); wForm.Prop.Remove(c_propName); _timer.Stop(); _osr.Hide(); } }
internal void ShowContextMenu(Point p) { var gp = this as _Panel; bool isTab = this is _Tab gt; var state = this.DockState; var m = new AMenu(); m.Control.Text = "Menu"; //dock state m.Add("Float\tD-click, drag", o => this.SetDockState(_DockState.Floating)).Enabled = state != _DockState.Floating; m.Add("Dock \tD-click, Alt+drag", o => this.SetDockState(_DockState.Docked)).Enabled = state != _DockState.Docked; //menu.Add("Auto Hide", o => this.SetDockState(_DockState.AutoHide)).Enabled = state != _DockState.AutoHide && !isTab; //not implemented m["Hide\tM-click"] = o => this.SetDockState(_DockState.Hidden); m.Separator(); using (m.Submenu("Show Panel")) _manager.ZAddShowPanelsToMenu(m.LastMenuItem.DropDown, false); using (m.Submenu("Show Toolbar")) _manager.ZAddShowPanelsToMenu(m.LastMenuItem.DropDown, true); m.Separator(); var k = (!this.IsTabbedPanel || this.IsFloating) ? this : gp.ParentTab; //caption edge using (m.Submenu("Caption At")) { m["Top"] = o => k._SetCaptionEdge(CaptionEdge.Top); if (k.CaptionAt == CaptionEdge.Top) { m.LastMenuItem.Checked = true; } m["Bottom"] = o => k._SetCaptionEdge(CaptionEdge.Bottom); if (k.CaptionAt == CaptionEdge.Bottom) { m.LastMenuItem.Checked = true; } m["Left"] = o => k._SetCaptionEdge(CaptionEdge.Left); if (k.CaptionAt == CaptionEdge.Left) { m.LastMenuItem.Checked = true; } m["Right"] = o => k._SetCaptionEdge(CaptionEdge.Right); if (k.CaptionAt == CaptionEdge.Right) { m.LastMenuItem.Checked = true; } } //fixed width/height if (this.IsDockedOn(_manager)) { _AddFixedSize(k.ParentSplit, k); void _AddFixedSize(_Split gs, _Node gn) { if (gs.IsSplitterVisible) { bool fixedSize = gs.IsChildFixedSize(gn); m.Add(gs.IsVerticalSplit ? "Fixed Width" : "Fixed Height", o => gs.SetChildFixedSize(gn, !fixedSize)).Checked = fixedSize; } var gs2 = gs.ParentSplit; if (gs2 != null) { using (m.Submenu("Container")) { m.LastMenuItem.DropDown.Opened += (unu, sed) => { var osd = new AOsdRect { Rect = _manager.RectangleToScreen(gs.Bounds), Color = 0x00c000 }; osd.Show(); ATimer.After(1000, _ => osd.Dispose()); }; _AddFixedSize(gs2, gs); } } } } //test //m.Separator(); //m["test"] = o => //{ //}; //custom _manager.ZPanelContextMenu?.Invoke(new ZContextMenuEventArgs(gp, m)); m.Show(this.ParentControl, p.X, p.Y); }