Tabs Studio v1.6.3 is released – added highly experimental version of floating tab groups support.
September 21, 2009
Floating tab groups support – Alpha 1
To give some impression what is possible and what is problematic supporting floating tab groups I’m releasing an early alpha showing what I have now.
Prerequisites
Visual Studio 2008 and Tabs Studio v1.6.3.
How to create a floating tab group
- Make sure exactly two tab groups (horizontal or vertical) are opened.
- Decide for yourself what tab group you want to detach.
- Resize main Visual Studio window for tab group that remains.
- Select tab group that you want to detach and invoke TabsStudio.Connect.DetachTabGroup aka Detach Tab Group command.
Floating tab group window is created that you can freely move and resize:

Floating tab group window and main Visual Studio window
Limitations of floating tab group window usage
- Can’t resize main Visual Studio window.
- Can’t easily switch to main Visual Studio window – in most cases you need to switch to the tab group in main Visual Studio window first.
- Can’t close floating tab group window – close whole Visual Studio instead.
- Can’t switch between windows that have different number of toolbars associated with them.
Feel free to try it for yourself.
September 18, 2009
Floating tab groups in Visual Studio 2008?
I’m experimenting with detachable tab groups in Tabs Studio. It’s extremely brittle and limited, but some things work:

Two standard vertical tab groups in Visual Studio 2008

New floating tab group window and main Visual Studio 2008 window
It might be useful in multi-monitor setup. I don’t have personal experience with multi-monitor environment. Listening to the buzz about floating code windows in Visual Studio 2010, I hear that some say how cool it is and some say they can successfully utilize their multiple monitors with Visual Studio 2008 already.
What do you think about the floating tab groups in Visual Studio 2008 idea?
September 15, 2009
Color Icons add-in
I use less distractive “gray theme” icons in Tabs Studio context menu. Now that context menu is completely customizable, I’ve created an alternative color icons pack:

Custom icons in tab context menu
Color Icons add-in monitors two tab context menu events and replaces default icons in context menu with icons from its own resources. Color Icons’ icons are stored in Icons folder with Build Action set to Resource in file properties. Each image has resolution 96 dpi and size 16*16 pixels.
You can also replace default close tab button image with the one from ColorIcons.dll using following style:
<Style TargetType="TabsStudio:CloseTabButton" BasedOn="{StaticResource DefaultCloseTabButtonStyle}"> <Setter Property="Source" Value="pack://application:,,,/ColorIcons;component/icons/close_tab.png"/> </Style>

Custom close tab button image
You can also use file path (or even website URL) to describe where the custom image is located:
<Style TargetType="TabsStudio:CloseTabButton" BasedOn="{StaticResource DefaultCloseTabButtonStyle}"> <Setter Property="Source" Value="file://c:/close.png"/> </Style>
Download Color Icons v1.0.0 for Tabs Studio v1.6.2.
Sync add-in
Occasionally, I need to find one of the currently opened documents in Solution Explorer. To fulfill this necessity and to demonstrate Tabs Studio context menu extensibility I’ve created Sync add-in.
Visual Studio has the Track Active Item in Solution Explorer option that constantly syncs Solution Explorer with the currently opened document:

Track Active Item Viusal Studio option
Visual Studio also has the View.TrackActivityinSolutionExplorer command that acts as a toggle for this option. With Track Active Item in Solution Explorer option turned off you can call View.TrackActivityinSolutionExplorer command twice to locate currently opened document in Solution Explorer window (if Solution Explorer window is opened).
Alternatively, Sync add-in adds the new Sync with Solution Explorer command to tab and tab extension context menus. It allows locating any opened document (not only current) and activates Solution Explorer window if it is not opened:

Sync with Solution Explorer tab extension context menu command
Sync monitors both OpeningTabExtensionContextMenu and OpeningTabContextMenu events:
engine.OpeningTabExtensionContextMenu += OpeningTabExtensionContextMenu; engine.OpeningTabContextMenu += OpeningTabContextMenu;
In OpeningTabExtensionContextMenu it checks that TabExtension has Document and ProjectItem associated with it (to show Sync command only for document windows), stores TabExtension for later processing (if user chooses Sync command from the menu) and places the new Sync menu item after the Open Containing Folder item:
private void OpeningTabExtensionContextMenu(object sender, TabsStudioExt.OpeningTabExtensionContextMenuEventArgs e) { try { if (e.TabExtension.Window.Document == null || e.TabExtension.Window.Document.ProjectItem == null) return; } catch (System.Exception) { return; } storedTabExtension = e.TabExtension; PlaceMenuItem(syncTabExtensionMenuItem, e.ContextMenu); }
To exactly place the new menu item, Sync scans all context menu items looking for the control with the OpenContainingFolder name and inserts the new item after it:
private void PlaceMenuItem(System.Windows.Controls.MenuItem menuItem, System.Windows.Controls.ContextMenu menu) { foreach (object item in menu.Items) { if (item is System.Windows.Controls.Control) { if ((item as System.Windows.Controls.Control).Name.Equals("OpenContainingFolder")) { menu.Items.Insert(menu.Items.IndexOf(item) + 1, menuItem); break; } } } }
When user chooses the Sync menu command, Solution Explorer window is activated, associated project item is made visible using the ExpandView method and associated element in the Solution Explorer tree is selected:
private void SyncTabExtension(object sender, System.Windows.RoutedEventArgs e) { try { EnvDTE.UIHierarchy solutionExplorer = dte.ToolWindows.SolutionExplorer; solutionExplorer.Parent.Activate(); EnvDTE.ProjectItem projectItem = storedTabExtension.Window.Document.ProjectItem; projectItem.ExpandView(); EnvDTE.UIHierarchyItem hierarchyItem = FindHierarchyItem(solutionExplorer.UIHierarchyItems, projectItem); if (hierarchyItem != null) hierarchyItem.Select(EnvDTE.vsUISelectionType.vsUISelectionTypeSelect); } catch (System.Exception) { } }
When Sync command is invoked for a tab, all extensions in this tab are selected in the Solution Explorer tree.
Download Sync v1.0.0 for Tabs Studio v1.6.2.
Tabs Studio v1.6.2 is released
Tabs Studio v1.6.2 is released – added ability to customize tab context menu from an add-in.
September 14, 2009
Customizing tab context menu from an add-in
In the next Tabs Studio version I’ve added two new events that occur just before tab context menu is opened:
namespace TabsStudioExt { public interface ITabsStudioEngine { ... event OpeningTabContextMenuEventHandler OpeningTabContextMenu; event OpeningTabExtensionContextMenuEventHandler OpeningTabExtensionContextMenu; } }
OpeningTabContextMenuEventArgs contains the System.Windows.Controls.ContextMenu ContextMenu property, Tab and Tabs properties. OpeningTabExtensionContextMenuEventArgs contains the ContextMenu, TabExtension, Tab and Tabs properties. An add-in can add, remove and modify menu items in the context menu based on TabExtension or Tab it was opened for. Right click on a tab with a single extension generates the OpeningTabExtensionContextMenu event.
To simplify customization from an add-in, each menu item and separator in the default context menu was given a Name. For document tab context menu the names are: Open, OpenSeparator, Save, Close, CloseAllButThis, CloseAllDocuments, FileSeparator, CopyFullPath, OpenContainingFolder, VS2010DocumentSeparator, VS2010Floating, VS2010Dockable, TabGroupsSeparator, MoveToNextTabGroup, MoveToPreviousTabGroup, TabsStudioSeparator and TabsStudio:

Document tab context menu
For non document tab context menu additional names are: WindowSeparator, Floating, Dockable, TabbedDocument, AutoHide and Hide:

Non document tab context menu
September 12, 2009
Tabs Studio v1.6.1 is released
Tabs Studio v1.6.1 is released – added the Open add-ins directory button to the Add-in Manager dialog, fixed sharing violation accessing registration info file when opening several Visual Studio instances at the same time.
September 11, 2009
Opening add-ins directory
For the next Tabs Studio version I’ve added the Open add-ins directory button to the Add-in Manager dialog:

Open add-ins directory button in the Add-ins Manager dialog
This button creates the TabsStudioAddins directory if it doesn’t exist and opens it in Windows Explorer:

TabsStudioAddins directory in Windows Explorer
Installing and removing add-ins should be easier now – no need to search for the TabsStudioAddins directory on the disk yourself.
September 4, 2009
Tabs Studio v1.6.0 is released
Tabs Studio v1.6.0 public is released – no changes comparing to v1.5.7.