/// <summary> /// сохранить размеры окошка, координаты и его текущую вкладку /// </summary> private void SaveNonChartWindowsPlacement(TerminalBookmark leaving) { foreach (var child in MdiChildren.Where(c => c is IMdiNonChartWindow)) { var windowCode = ((IMdiNonChartWindow)child).WindowCode; var wnd = nonChartWindows.FirstOrDefault(w => w.Window == windowCode && ((leaving == null) || (w.ChartTab == leaving.Id))); if (wnd == null) { continue; } // размеры и координаты try { wnd.WindowPos = child.Location; wnd.WindowSize = child.Size; wnd.WindowState = child.WindowState.ToString(); wnd.CurrentTabIndex = ((IMdiNonChartWindow)child).WindowInnerTabPageIndex; } catch (ObjectDisposedException) { continue; } } }
private void ShowBookmarkChildren(TerminalBookmark bookmark) { bookmarkStrip.SelectedBookmark = bookmark; var tabTag = bookmark.Id; // сохранить все окна графиков foreach (var child in Charts.Where(child => child.bookmarkId != tabTag)) { child.SavePlacement(); child.Hide(); } // показать графики вкладки Charts.ForEach(c => { try { if (c.bookmarkId == tabTag) { c.Show(); } } catch (Exception ex) { Logger.ErrorFormat("Переключение на вкладку {0}: {1}", tabTag, ex); Logger.ErrorFormat("Window title is {0}", c.Text); Logger.ErrorFormat("Ticker is {0}", c.chart.Symbol); throw; } }); Charts.ForEach(c => { if (c.bookmarkId == tabTag) { c.RestorePlacement(); } }); // убрать окна Счет, Доходность, Чат и прочие, если их нет на свежеоткрытой вкладке foreach (var child in MdiChildren.Where(c => c is IMdiNonChartWindow)) { var windowCode = ((IMdiNonChartWindow)child).WindowCode; if (!nonChartWindows.Any(w => w.Window == windowCode && w.ChartTab == tabTag)) { child.Close(); } } // показать окна (Счет, Доходность, Чат ...) текущей вкладки и установить им размеры foreach (var wind in nonChartWindows.Where(w => w.ChartTab == tabTag)) { EnsureShowAndPlaceNonChartWindow(wind); } MenuItemVerticalClick(this, EventArgs.Empty); }
private void BookmarkSelected(TerminalBookmark leaving, TerminalBookmark entering) { BookmarkStorage.Instance.CurrentBookmarkId = entering.Id; // сохранить положиение и размеры окошек той вкладки, с которой уходим SaveNonChartWindowsPlacement(leaving); // показать окошки для вкладки ShowBookmarkChildren(entering); }
/// <summary> /// удалить графики, оставшиеся без вкладки /// </summary> private void InstanceOnBookmarkDeleted(TerminalBookmark terminalBookmark) { // закрыть графики - остальные окна не надо уничтожать, и так закроются foreach (var chart in Charts) { if (chart.bookmarkId != terminalBookmark.Id) { continue; } chart.Close(); } }