Revision: 6716
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=6716&view=rev
Author: gerdwagner
Date: 2012-11-17 03:28:37 +0000 (Sat, 17 Nov 2012)
Log Message:
-----------
Session tabs can be detached in separate windows. The tabs can be arbitrarily moved between the main and separated windows using drag and drop.
--> Added remove to main tab button
--> Empty windows are closed
Modified Paths:
--------------
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/DesktopTabbedPaneOutwardDndChanel.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/MultipleWindowsHandler.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/DesktopContainerFactory.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/ButtonTabComponent.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPane.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPaneHolder.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/RemoveTabHandelResult.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/TabWindowController.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java
trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/I18NStrings.properties
trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/squirrel.properties
Added Paths:
-----------
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPaneListener.java
trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/tab-detach-small_revert.png
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/DesktopTabbedPaneOutwardDndChanel.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/DesktopTabbedPaneOutwardDndChanel.java 2012-11-14 21:49:37 UTC (rev 6715)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/DesktopTabbedPaneOutwardDndChanel.java 2012-11-17 03:28:37 UTC (rev 6716)
@@ -68,11 +68,11 @@
DockTabDesktopPaneHolder sourceDesktopPaneHolder = _app.getMultipleWindowsHandler().getDockTabDesktopPaneOfTabbedPane(_dnDTabbedPaneData.getTabbedPane());
- RemoveTabHandelResult moveTabHandelResult = sourceDesktopPaneHolder.getDockTabDesktopPane().removeTabHandel(_dnDTabbedPaneData.getDragTabIndex());
+ RemoveTabHandelResult moveTabHandelResult = sourceDesktopPaneHolder.removeTabHandel(_dnDTabbedPaneData.getDragTabIndex());
DockTabDesktopPaneHolder targetDesktopPaneHolder = _app.getMultipleWindowsHandler().getDockTabDesktopPaneOfTabbedPane(targetTabbedPane);
- targetDesktopPaneHolder.getDockTabDesktopPane().addTabWidgetAt(moveTabHandelResult.getTabHandle().getWidget(), targetTabIndex, moveTabHandelResult.getRemovedButtonTabComponent().getExternalButtons());
+ targetDesktopPaneHolder.addTabWidgetAt(moveTabHandelResult.getTabHandle().getWidget(), targetTabIndex, moveTabHandelResult.getRemovedButtonTabComponent().getExternalButtons());
sourceDesktopPaneHolder.tabDragedAndDroped();
targetDesktopPaneHolder.tabDragedAndDroped();
@@ -82,7 +82,7 @@
{
for (JTabbedPane tabbedPane : _listeners.keySet())
{
- if(dockTabDesktopPaneHolder.getDockTabDesktopPane().isMyTabbedPane(tabbedPane))
+ if(dockTabDesktopPaneHolder.isMyTabbedPane(tabbedPane))
{
_listeners.remove(tabbedPane);
break;
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/MultipleWindowsHandler.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/MultipleWindowsHandler.java 2012-11-14 21:49:37 UTC (rev 6715)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/MultipleWindowsHandler.java 2012-11-17 03:28:37 UTC (rev 6716)
@@ -1,12 +1,16 @@
package net.sourceforge.squirrel_sql.client;
+import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.TabWidget;
import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.docktabdesktop.DockTabDesktopPane;
import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.docktabdesktop.DockTabDesktopPaneHolder;
import net.sourceforge.squirrel_sql.client.gui.builders.dndtabbedpane.OutwardDndTabbedPaneChanel;
+import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.docktabdesktop.RemoveTabHandelResult;
+import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.docktabdesktop.SmallTabButton;
import javax.swing.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
+import java.util.ArrayList;
import java.util.HashSet;
public class MultipleWindowsHandler
@@ -16,6 +20,7 @@
private DesktopTabbedPaneOutwardDndChanel _outwardDndTabbedPaneChanel;
private Application _app;
+ private DockTabDesktopPaneHolder _mainDockTabDesktopPaneHolder;
public MultipleWindowsHandler(Application app)
{
@@ -45,14 +50,8 @@
public void registerMainFrame(final DockTabDesktopPane mainDesktop)
{
-
- final DockTabDesktopPaneHolder dockTabDesktopPaneHolder = new DockTabDesktopPaneHolder()
+ _mainDockTabDesktopPaneHolder = new DockTabDesktopPaneHolder()
{
- @Override
- public DockTabDesktopPane getDockTabDesktopPane()
- {
- return mainDesktop;
- }
@Override
public void setSelected(boolean b)
@@ -65,11 +64,35 @@
{
onTabDragedAndDroped(mainDesktop);
}
+
+ @Override
+ public void addTabWidgetAt(TabWidget widget, int tabIndex, ArrayList<SmallTabButton> externalButtons)
+ {
+ mainDesktop.addTabWidgetAt(widget, tabIndex, externalButtons);
+ }
+
+ @Override
+ public RemoveTabHandelResult removeTabHandel(int tabIndex)
+ {
+ return mainDesktop.removeTabHandel(tabIndex);
+ }
+
+ @Override
+ public boolean isMyTabbedPane(JTabbedPane tabbedPane)
+ {
+ return mainDesktop.isMyTabbedPane(tabbedPane);
+ }
+
+ @Override
+ public void addTabWidget(TabWidget widget, ArrayList<SmallTabButton> externalButtons)
+ {
+ mainDesktop.addTabWidgetAt(widget, mainDesktop.getTabCount() , externalButtons);
+ }
};
- _dockTabDesktopPaneHolders.add(dockTabDesktopPaneHolder);
+ _dockTabDesktopPaneHolders.add(_mainDockTabDesktopPaneHolder);
- _curSelectedDockTabDesktopPaneHolder = dockTabDesktopPaneHolder;
+ _curSelectedDockTabDesktopPaneHolder = _mainDockTabDesktopPaneHolder;
_app.getMainFrame().addWindowFocusListener(new WindowFocusListener()
@@ -77,7 +100,7 @@
@Override
public void windowGainedFocus(WindowEvent e)
{
- selectDesktop(dockTabDesktopPaneHolder);
+ selectDesktop(_mainDockTabDesktopPaneHolder);
}
@Override
@@ -125,7 +148,7 @@
{
for (DockTabDesktopPaneHolder dockTabDesktopPaneHolder : _dockTabDesktopPaneHolders)
{
- if(dockTabDesktopPaneHolder.getDockTabDesktopPane().isMyTabbedPane(tabbedPane))
+ if(dockTabDesktopPaneHolder.isMyTabbedPane(tabbedPane))
{
return dockTabDesktopPaneHolder;
}
@@ -133,4 +156,9 @@
throw new IllegalArgumentException("Could not find DockTabDesktopPane for TabbedPane " + tabbedPane);
}
+
+ public DockTabDesktopPaneHolder getMainDockTabDesktopHolder()
+ {
+ return _mainDockTabDesktopPaneHolder;
+ }
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/DesktopContainerFactory.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/DesktopContainerFactory.java 2012-11-14 21:49:37 UTC (rev 6715)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/DesktopContainerFactory.java 2012-11-17 03:28:37 UTC (rev 6716)
@@ -1,7 +1,6 @@
package net.sourceforge.squirrel_sql.client.gui.desktopcontainer;
import net.sourceforge.squirrel_sql.client.IApplication;
-import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.ScrollableDesktopPane;
import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.docktabdesktop.DockTabDesktopPane;
import java.awt.*;
@@ -12,7 +11,7 @@
{
if (app.getDesktopStyle().isDockTabStyle())
{
- return new DockTabDesktopPane(app, true);
+ return new DockTabDesktopPane(app, true, null);
}
else
{
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/ButtonTabComponent.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/ButtonTabComponent.java 2012-11-14 21:49:37 UTC (rev 6715)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/ButtonTabComponent.java 2012-11-17 03:28:37 UTC (rev 6716)
@@ -109,6 +109,19 @@
return ret;
}
+ public SmallTabButton findSmallTabButtonByUserObject(Object userObject)
+ {
+ for (Component cp : _pnlSmallTabButtons.getComponents())
+ {
+ SmallTabButton stb = (SmallTabButton) cp;
+ if(userObject == stb.getUserObject())
+ {
+ return stb;
+ }
+ }
+ return null;
+ }
+
private static class CloseTabButton extends SmallTabButton
{
private CloseTabButton()
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPane.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPane.java 2012-11-14 21:49:37 UTC (rev 6715)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPane.java 2012-11-17 03:28:37 UTC (rev 6716)
@@ -37,6 +37,7 @@
private IApplication _app;
private boolean _belongsToMainApplicationWindow;
+ private DockTabDesktopPaneListener _dockTabDesktopPaneListener;
private JPanel _pnlButtons = new JPanel();
@@ -59,10 +60,11 @@
private ScrollableTabHandler _scrollableTabHandler;
- public DockTabDesktopPane(IApplication app, boolean belongsToMainApplicationWindow)
+ public DockTabDesktopPane(IApplication app, boolean belongsToMainApplicationWindow, DockTabDesktopPaneListener dockTabDesktopPaneListener)
{
_app = app;
_belongsToMainApplicationWindow = belongsToMainApplicationWindow;
+ _dockTabDesktopPaneListener = dockTabDesktopPaneListener;
_tabbedPane = new DesktopTabbedPane(_app);
@@ -169,7 +171,7 @@
addTabWidgetAt(widget, _tabbedPane.getTabCount(), new ArrayList<SmallTabButton>());
}
- public void addTabWidgetAt(TabWidget widget, int index, ArrayList<SmallTabButton> externalButtons)
+ public TabHandle addTabWidgetAt(TabWidget widget, int index, ArrayList<SmallTabButton> externalButtons)
{
final TabHandle tabHandle = new TabHandle(widget, this);
((TabDelegate) widget.getDelegate()).setTabHandle(tabHandle);
@@ -182,14 +184,18 @@
ButtonTabComponent btc = (ButtonTabComponent) _tabbedPane.getTabComponentAt(tabIx);
- btc.getClosebutton().addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
+ btc.getClosebutton().addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
removeTab(tabHandle, e, TabClosingMode.CLOSE_BUTTON);
}
});
- btc.getToWindowButton().addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
+ btc.getToWindowButton().addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
onToWindow(tabHandle);
}
});
@@ -205,6 +211,8 @@
tabHandle.fireAdded(_belongsToMainApplicationWindow);
_tabbedPane.setSelectedIndex(tabIx);
_scrollableTabHandler.tabAdded();
+
+ return tabHandle;
}
@@ -227,7 +235,12 @@
RemoveTabHandelResult removeTabHandelResult = removeTabHandel(tabHandle);
- tabWindowController.getDockTabDesktopPane().addTabWidgetAt(tabHandle.getWidget(), 0, removeTabHandelResult.getRemovedButtonTabComponent().getExternalButtons());
+ tabWindowController.addTabWidgetAt(tabHandle.getWidget(), 0, removeTabHandelResult.getRemovedButtonTabComponent().getExternalButtons());
+
+ if (null != _dockTabDesktopPaneListener)
+ {
+ _dockTabDesktopPaneListener.tabWasRemoved(tabHandle);
+ }
}
public RemoveTabHandelResult removeTabHandel(int tabIndex)
@@ -236,7 +249,7 @@
return removeTabHandel(tabHandle);
}
- private RemoveTabHandelResult removeTabHandel(TabHandle tabHandle)
+ public RemoveTabHandelResult removeTabHandel(TabHandle tabHandle)
{
RemoveTabHandelResult ret = new RemoveTabHandelResult();
int tabIndex = getTabIndex(tabHandle);
@@ -654,4 +667,10 @@
selectedHandle._setSelected(b, true);
}
}
+
+ public int getTabCount()
+ {
+ return _tabHandles.size();
+ }
+
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPaneHolder.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPaneHolder.java 2012-11-14 21:49:37 UTC (rev 6715)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPaneHolder.java 2012-11-17 03:28:37 UTC (rev 6716)
@@ -1,10 +1,21 @@
package net.sourceforge.squirrel_sql.client.gui.desktopcontainer.docktabdesktop;
+import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.TabWidget;
+
+import javax.swing.*;
+import java.util.ArrayList;
+
public interface DockTabDesktopPaneHolder
{
- DockTabDesktopPane getDockTabDesktopPane();
-
void setSelected(boolean b);
void tabDragedAndDroped();
+
+ void addTabWidgetAt(TabWidget widget, int tabIndex, ArrayList<SmallTabButton> externalButtons);
+
+ RemoveTabHandelResult removeTabHandel(int tabIndex);
+
+ boolean isMyTabbedPane(JTabbedPane tabbedPane);
+
+ void addTabWidget(TabWidget widget, ArrayList<SmallTabButton> externalButtons);
}
Added: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPaneListener.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPaneListener.java (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/DockTabDesktopPaneListener.java 2012-11-17 03:28:37 UTC (rev 6716)
@@ -0,0 +1,6 @@
+package net.sourceforge.squirrel_sql.client.gui.desktopcontainer.docktabdesktop;
+
+public interface DockTabDesktopPaneListener
+{
+ public void tabWasRemoved(TabHandle tabHandle);
+}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/RemoveTabHandelResult.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/RemoveTabHandelResult.java 2012-11-14 21:49:37 UTC (rev 6715)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/RemoveTabHandelResult.java 2012-11-17 03:28:37 UTC (rev 6716)
@@ -1,11 +1,5 @@
package net.sourceforge.squirrel_sql.client.gui.desktopcontainer.docktabdesktop;
-/**
- * Created with IntelliJ IDEA.
- * User: gerd
- * Date: 24.10.12
- * Time: 20:05
- */
public class RemoveTabHandelResult
{
private ButtonTabComponent _removedButtonTabComponent;
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/TabWindowController.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/TabWindowController.java 2012-11-14 21:49:37 UTC (rev 6715)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/TabWindowController.java 2012-11-17 03:28:37 UTC (rev 6716)
@@ -1,6 +1,7 @@
package net.sourceforge.squirrel_sql.client.gui.desktopcontainer.docktabdesktop;
import net.sourceforge.squirrel_sql.client.IApplication;
+import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.TabWidget;
import net.sourceforge.squirrel_sql.client.gui.mainframe.SquirrelDesktopManager;
import net.sourceforge.squirrel_sql.client.resources.SquirrelResources;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
@@ -8,9 +9,7 @@
import javax.swing.*;
import java.awt.*;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowFocusListener;
+import java.awt.event.*;
import java.util.ArrayList;
public class TabWindowController implements DockTabDesktopPaneHolder
@@ -21,26 +20,38 @@
private final DockTabDesktopPane _dockTabDesktopPane;
private IApplication _app;
private final JMenu _mnuSession;
+ private final JFrame _tabWindowFrame;
+ private static class MoveTabBackToMainWinMarker {}
+
public TabWindowController(Point locationOnScreen, Dimension size, final IApplication app)
{
_app = app;
- JFrame f = new JFrame(_app.getMainFrame().getTitle() + " " +s_stringMgr.getString("docktabdesktop.TabWindowController.titlePostFix"));
+ _tabWindowFrame = new JFrame(_app.getMainFrame().getTitle() + " " +s_stringMgr.getString("docktabdesktop.TabWindowController.titlePostFix"));
- f.setLocation(locationOnScreen);
- f.setSize(size);
- f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+ _tabWindowFrame.setLocation(locationOnScreen);
+ _tabWindowFrame.setSize(size);
+ _tabWindowFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
- _dockTabDesktopPane = new DockTabDesktopPane(app, false);
+ DockTabDesktopPaneListener dockTabDesktopPaneListener = new DockTabDesktopPaneListener()
+ {
+ @Override
+ public void tabWasRemoved(TabHandle tabHandle)
+ {
+ onTabWasRemoved();
+ }
+ };
+
+ _dockTabDesktopPane = new DockTabDesktopPane(app, false, dockTabDesktopPaneListener);
_dockTabDesktopPane.setDesktopManager(new SquirrelDesktopManager(app));
- f.getContentPane().add(_dockTabDesktopPane);
+ _tabWindowFrame.getContentPane().add(_dockTabDesktopPane);
JMenuBar mnuBar = new JMenuBar();
_mnuSession = cloneMenu(app.getMainFrame().getSessionMenu());
mnuBar.add(_mnuSession);
- f.setJMenuBar(mnuBar);
+ _tabWindowFrame.setJMenuBar(mnuBar);
WindowFocusListener l = new WindowFocusListener()
{
@@ -55,17 +66,17 @@
{
}
};
- f.addWindowFocusListener(l);
+ _tabWindowFrame.addWindowFocusListener(l);
final ImageIcon icon = app.getResources().getIcon(SquirrelResources.IImageNames.APPLICATION_ICON);
if (icon != null)
{
- f.setIconImage(icon.getImage());
+ _tabWindowFrame.setIconImage(icon.getImage());
}
- f.addWindowListener(new WindowAdapter()
+ _tabWindowFrame.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e)
@@ -74,11 +85,24 @@
}
});
- f.setVisible(true);
+ _tabWindowFrame.setVisible(true);
}
+ private void onTabWasRemoved()
+ {
+ if(0 == _dockTabDesktopPane.getTabCount())
+ {
+ closeFrame();
+ }
+ }
+
private void onWindowClosing()
{
+ dispose();
+ }
+
+ private void dispose()
+ {
ArrayList<TabHandle> handels = _dockTabDesktopPane.getAllHandels();
TabHandle[] clone = handels.toArray(new TabHandle[handels.size()]);
for (TabHandle handel : clone)
@@ -91,12 +115,6 @@
@Override
- public DockTabDesktopPane getDockTabDesktopPane()
- {
- return _dockTabDesktopPane;
- }
-
- @Override
public void setSelected(boolean b)
{
_dockTabDesktopPane.setSelected(true);
@@ -156,4 +174,110 @@
return ret;
}
+
+ @Override
+ public void addTabWidgetAt(final TabWidget widget, int tabIndex, final ArrayList<SmallTabButton> externalButtons)
+ {
+
+ SmallTabButton btnMoveTabBackToMainWin = null;
+ for (SmallTabButton externalButton : externalButtons)
+ {
+ if(externalButton.getUserObject() == MoveTabBackToMainWinMarker.class)
+ {
+ btnMoveTabBackToMainWin = externalButton;
+ break;
+ }
+ }
+
+ ArrayList<SmallTabButton> buf = externalButtons;
+ if (null == btnMoveTabBackToMainWin)
+ {
+ buf = new ArrayList<SmallTabButton>();
+ String toolTipText = s_stringMgr.getString("docktabdesktop.TabWindowController.moveTabBackToMainWin");
+ ImageIcon icon = _app.getResources().getIcon(SquirrelResources.IImageNames.TAB_DETACH_SMALL_REVERT);
+ btnMoveTabBackToMainWin = new SmallTabButton(toolTipText, icon, MoveTabBackToMainWinMarker.class);
+ buf.add(btnMoveTabBackToMainWin);
+ buf.addAll(externalButtons);
+ }
+
+ final TabHandle tabHandle = _dockTabDesktopPane.addTabWidgetAt(widget, tabIndex, buf);
+
+ btnMoveTabBackToMainWin.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onMoveBackToMainWin(tabHandle);
+ }
+ });
+
+ }
+
+ private void onMoveBackToMainWin(TabHandle tabHandle)
+ {
+ RemoveTabHandelResult removeTabHandelResult = _dockTabDesktopPane.removeTabHandel(tabHandle);
+
+ cleanUpOnMove(removeTabHandelResult);
+
+ DockTabDesktopPaneHolder mainDockTabDesktopHolder = _app.getMultipleWindowsHandler().getMainDockTabDesktopHolder();
+ ArrayList<SmallTabButton> externalButtons = removeTabHandelResult.getRemovedButtonTabComponent().getExternalButtons();
+
+ mainDockTabDesktopHolder.addTabWidget(tabHandle.getWidget(), externalButtons);
+ }
+
+ @Override
+ public RemoveTabHandelResult removeTabHandel(int tabIndex)
+ {
+ RemoveTabHandelResult tabHandelResult = _dockTabDesktopPane.removeTabHandel(tabIndex);
+
+ cleanUpOnMove(tabHandelResult);
+
+ return tabHandelResult;
+ }
+
+ private void cleanUpOnMove(RemoveTabHandelResult tabHandelResult)
+ {
+ ButtonTabComponent removedButtonTabComponent = tabHandelResult.getRemovedButtonTabComponent();
+
+ SmallTabButton stb = null;
+
+ if (null != removedButtonTabComponent)
+ {
+ stb = removedButtonTabComponent.findSmallTabButtonByUserObject(MoveTabBackToMainWinMarker.class);
+ }
+
+ if (null != stb)
+ {
+ for (ActionListener actionListener : stb.getActionListeners())
+ {
+ stb.removeActionListener(actionListener);
+ }
+ removedButtonTabComponent.removeSmallTabButton(stb);
+ }
+
+ if(0 == _dockTabDesktopPane.getTabCount())
+ {
+ closeFrame();
+ }
+
+ }
+
+ private void closeFrame()
+ {
+ dispose();
+ _tabWindowFrame.setVisible(false);
+ _tabWindowFrame.dispose();
+ }
+
+ @Override
+ public boolean isMyTabbedPane(JTabbedPane tabbedPane)
+ {
+ return _dockTabDesktopPane.isMyTabbedPane(tabbedPane);
+ }
+
+ @Override
+ public void addTabWidget(TabWidget widget, ArrayList<SmallTabButton> externalButtons)
+ {
+ _dockTabDesktopPane.addTabWidgetAt(widget, _dockTabDesktopPane.getTabCount(), externalButtons);
+ }
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java 2012-11-14 21:49:37 UTC (rev 6715)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java 2012-11-17 03:28:37 UTC (rev 6716)
@@ -88,6 +88,7 @@
String TAB_DETACH = "tabDetach";
String TAB_DETACH_SMALL = "tabDetachSmall";
+ String TAB_DETACH_SMALL_REVERT = "tabDetachSmallRevert";
String AGG_COUNT = "aggCount";
String AGG_SUM = "aggSum";
Modified: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/I18NStrings.properties
===================================================================
--- trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/I18NStrings.properties 2012-11-14 21:49:37 UTC (rev 6715)
+++ trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/I18NStrings.properties 2012-11-17 03:28:37 UTC (rev 6716)
@@ -3,4 +3,6 @@
docktabdesktop.ButtonTabComponent.toolTip=Close this tab
docktabdesktop.ButtonTabComponent.detachButtonTooltip=Move tab to new window
-docktabdesktop.TabWindowController.titlePostFix=detached tab window
\ No newline at end of file
+docktabdesktop.TabWindowController.titlePostFix=detached tab window
+
+docktabdesktop.TabWindowController.moveTabBackToMainWin=Move tab back to main window
\ No newline at end of file
Added: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/tab-detach-small_revert.png
===================================================================
(Binary files differ)
Property changes on: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/tab-detach-small_revert.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/squirrel.properties
===================================================================
--- trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/squirrel.properties 2012-11-14 21:49:37 UTC (rev 6715)
+++ trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/squirrel.properties 2012-11-17 03:28:37 UTC (rev 6716)
@@ -73,6 +73,7 @@
tabDetach.image=tab-detach.png
tabDetachSmall.image=tab-detach-small.png
+tabDetachSmallRevert.image=tab-detach-small_revert.png
aggCount.image=aggcount.png
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|