void mdiClient_ControlAdded(object sender, ControlEventArgs e) { MetroWindow mw = e.Control as MetroWindow; if (mw == null) { throw new ArgumentException("Si possono aggiungere solo finestre di tipo MetroWindow"); } MDITab tab = new MDITab(); tab.AssociateForm = mw; tab.State = MDITab.EMDITabState.NORMAL; tab.CloseButtonState = MDITab.EMDITabCloseButtonState.NORMAL; Rectangle lastTabRect = new Rectangle(); Rectangle newTabRect = new Rectangle(); if (_mdiTabs.Count > 0) { lastTabRect = _mdiTabs[_mdiTabs.Count - 1].TabRect; } Graphics g = CreateGraphics(); if (g == null) { throw new NullReferenceException(); } MetroWindow p = ParentForm as MetroWindow; if (p == null) { throw new Exception("Il form padre deve essere una finestra di tipo MetroWindow"); } MetroVisualManager vm = p.VisualManager(); int width = (int)(g.MeasureString(mw.Text, vm.MDITabFont).Width + 30); newTabRect.Location = new Point(lastTabRect.Location.X + lastTabRect.Width, 0); newTabRect.Size = new Size(width, 21); tab.TabRect = newTabRect; _mdiTabs.Add(tab); _dropDownFileList.AddItem(mw.Text); }
protected virtual void OnUpdateMDITabsCloses(Point point) { bool bInvalidate = false; Rectangle rc = _tabsRectangle; rc = ParentForm.RectangleToScreen(rc); if (!rc.Contains(point)) { ResetMDITabsState(); return; } MetroWindow formToClose = null; for (int i = 0; i < _mdiTabs.Count; i++) { MDITab tab = _mdiTabs[i]; rc = tab.CloseTabRect; rc = ParentForm.RectangleToScreen(rc); if (rc.Contains(point)) { formToClose = tab.AssociateForm; bInvalidate = true; } } if (formToClose != null) { formToClose.Close(); } if (bInvalidate) { UpdateColors(); } }
protected virtual void OnUpdateMDITabsState(IntPtr handle) { MetroWindow wnd = MetroWindow.FromHandle(handle) as MetroWindow; if (wnd == null) { throw new ArgumentException("Child form must be a MetroWindow derived class"); } for (int i = 0; i < _mdiTabs.Count; i++) { MDITab tab = _mdiTabs[i]; if (tab.AssociateForm == wnd) { tab.State = MDITab.EMDITabState.SELECTED; } else { tab.State = MDITab.EMDITabState.NORMAL; } } }
protected virtual void OnUpdateMDITabsSelection(Point point) { bool bInvalidate = false; bool bFoundCloseButtonPress = false; Rectangle rc = _tabsRectangle; rc = ParentForm.RectangleToScreen(rc); if (!rc.Contains(point)) { ResetMDITabsState(); return; } for (int i = 0; i < _mdiTabs.Count; i++) { MDITab tab = _mdiTabs[i]; rc = tab.CloseTabRect; rc = ParentForm.RectangleToScreen(rc); if (rc.Contains(point)) { if (tab.CloseButtonState != MDITab.EMDITabCloseButtonState.PRESSED) { tab.CloseButtonState = MDITab.EMDITabCloseButtonState.PRESSED; bFoundCloseButtonPress = true; bInvalidate = true; } } else if (tab.CloseButtonState != MDITab.EMDITabCloseButtonState.NORMAL) { tab.CloseButtonState = MDITab.EMDITabCloseButtonState.NORMAL; bInvalidate = true; } } if (!bFoundCloseButtonPress) { MetroWindow formToActivate = null; for (int i = 0; i < _mdiTabs.Count; i++) { MDITab tab = _mdiTabs[i]; if (tab.State != MDITab.EMDITabState.SELECTED) { rc = tab.TabRect; rc = ParentForm.RectangleToScreen(rc); if (rc.Contains(rc)) { formToActivate = tab.AssociateForm; tab.State = MDITab.EMDITabState.SELECTED; bInvalidate = true; } else { tab.State = MDITab.EMDITabState.NORMAL; bInvalidate = true; } } } if (formToActivate != null) { formToActivate.Activate(); } } if (bInvalidate) { UpdateColors(); } }
protected virtual void OnUpdateMDITabsState(Point point) { bool bInvalidate = false; Rectangle rc = _tabsRectangle; rc = ParentForm.RectangleToScreen(rc); if (!rc.Contains(point)) { ResetMDITabsState(); return; } for (int i = 0; i < _mdiTabs.Count; i++) { MDITab tab = _mdiTabs[i]; if (tab.State != MDITab.EMDITabState.SELECTED) { rc = tab.TabRect; rc = ParentForm.RectangleToScreen(rc); if (rc.Contains(point)) { if (tab.State != MDITab.EMDITabState.HOVER) { tab.State = MDITab.EMDITabState.HOVER; bInvalidate = true; } } else { if (tab.State != MDITab.EMDITabState.NORMAL) { tab.State = MDITab.EMDITabState.NORMAL; bInvalidate = true; } } } rc = tab.CloseTabRect; rc = ParentForm.RectangleToScreen(rc); if (rc.Contains(point)) { if (tab.CloseButtonState == MDITab.EMDITabCloseButtonState.NORMAL) { tab.CloseButtonState = MDITab.EMDITabCloseButtonState.HOVER; bInvalidate = true; } } else if (tab.CloseButtonState != MDITab.EMDITabCloseButtonState.NORMAL) { tab.CloseButtonState = MDITab.EMDITabCloseButtonState.NORMAL; bInvalidate = true; } } if (bInvalidate) { UpdateColors(); } }