public static void AddOrUpdate(IVsWindowFrame frame) { if (frame == null) { return; } if (cache.ContainsKey(frame)) { var tv = cache[frame]; if (names == null) { return; } if (names.ContainsKey(tv.originalName)) { tv.SetName(names[tv.originalName]); } } else { try { cache[frame] = new TabView(frame); } catch { /* NOP */ } } }
// Windowのアクティブ化時(一連のイベントの最後になることが多い(が違うこともある public void OnActiveFrameChanged(IVsWindowFrame oldFrame, IVsWindowFrame newFrame) { Debug.WriteLine($"OnActiveFrameChanged:{newFrame}"); // ソリューション エクスプローラーをタブから最初に開いた際に元に戻ってしまう // もう面倒なのでしつこいくらいに変更をかけるw TabView.AddOrUpdate(newFrame); }
// 起動時にすでにタブになっているViewを取得 internal void Initialize() { var ww = GetAllToolWindowView().ToList(); Debug.WriteLine($"Initialize count:{ww.Count}"); foreach (var twView in ww) { var frame = tmpFrames.FirstOrDefault(x => x.FrameView == twView); TabView.AddOrUpdate(frame); } }
public TabMonitor(IReadOnlyDictionary <string, string> names) { this.names = names; Application.Current.MainWindow.ContentRendered += ContentRendered; TabView.Rename(names); void ContentRendered(object s, EventArgs e) { Application.Current.MainWindow.ContentRendered -= ContentRendered; Initialize(); } }
// タブが開いた時・閉じた時?(なにがnewなのか謎) public void OnFrameIsOnScreenChanged(IVsWindowFrame frame, bool newIsOnScreen) { Debug.WriteLine($"OnFrameIsOnScreenChanged:{frame}"); TabView.AddOrUpdate(frame); }
public void ForceRename() => TabView.Rename(names);
public void Rename(IReadOnlyDictionary <string, string> names) => TabView.Rename(this.names = names);