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
{
private HashSet<DockTabDesktopPaneHolder> _dockTabDesktopPaneHolders = new HashSet<DockTabDesktopPaneHolder>();
private DockTabDesktopPaneHolder _curSelectedDockTabDesktopPaneHolder;
private DesktopTabbedPaneOutwardDndChanel _outwardDndTabbedPaneChanel;
private Application _app;
private DockTabDesktopPaneHolder _mainDockTabDesktopPaneHolder;
public MultipleWindowsHandler(Application app)
{
_app = app;
_outwardDndTabbedPaneChanel = new DesktopTabbedPaneOutwardDndChanel(_app);
}
public void registerDesktop(DockTabDesktopPaneHolder dockTabDesktopPaneHolder)
{
_dockTabDesktopPaneHolders.add(dockTabDesktopPaneHolder);
}
public void selectDesktop(DockTabDesktopPaneHolder dockTabDesktopPaneHolder)
{
if(dockTabDesktopPaneHolder == _curSelectedDockTabDesktopPaneHolder)
{
return;
}
_curSelectedDockTabDesktopPaneHolder.setSelected(false);
_curSelectedDockTabDesktopPaneHolder = dockTabDesktopPaneHolder;
_curSelectedDockTabDesktopPaneHolder.setSelected(true);
}
public void registerMainFrame(final DockTabDesktopPane mainDesktop)
{
_mainDockTabDesktopPaneHolder = new DockTabDesktopPaneHolder()
{
@Override
public void setSelected(boolean b)
{
onSelectMainDesktop(b, mainDesktop);
}
@Override
public void tabDragedAndDroped()
{
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(_mainDockTabDesktopPaneHolder);
_curSelectedDockTabDesktopPaneHolder = _mainDockTabDesktopPaneHolder;
_app.getMainFrame().addWindowFocusListener(new WindowFocusListener()
{
@Override
public void windowGainedFocus(WindowEvent e)
{
selectDesktop(_mainDockTabDesktopPaneHolder);
}
@Override
public void windowLostFocus(WindowEvent e)
{
}
});
}
private void onTabDragedAndDroped(DockTabDesktopPane mainDesktop)
{
adjustSessionMenu(mainDesktop);
}
private void onSelectMainDesktop(boolean b, DockTabDesktopPane mainDesktop)
{
mainDesktop.setSelected(b);
adjustSessionMenu(mainDesktop);
}
private void adjustSessionMenu(DockTabDesktopPane mainDesktop)
{
if(null == mainDesktop.getSelectedWidget())
{
_app.getWindowManager().setEnabledSessionMenu(false);
}
else
{
_app.getWindowManager().setEnabledSessionMenu(true);
}
}
public void unregisterDesktop(DockTabDesktopPaneHolder dockTabDesktopPaneHolder)
{
_dockTabDesktopPaneHolders.remove(dockTabDesktopPaneHolder);
_outwardDndTabbedPaneChanel.removeListener(dockTabDesktopPaneHolder);
}
public OutwardDndTabbedPaneChanel getOutwardDndTabbedPaneChanel()
{
return _outwardDndTabbedPaneChanel;
}
public DockTabDesktopPaneHolder getDockTabDesktopPaneOfTabbedPane(JTabbedPane tabbedPane)
{
for (DockTabDesktopPaneHolder dockTabDesktopPaneHolder : _dockTabDesktopPaneHolders)
{
if(dockTabDesktopPaneHolder.isMyTabbedPane(tabbedPane))
{
return dockTabDesktopPaneHolder;
}
}
throw new IllegalArgumentException("Could not find DockTabDesktopPane for TabbedPane " + tabbedPane);
}
public DockTabDesktopPaneHolder getMainDockTabDesktopHolder()
{
return _mainDockTabDesktopPaneHolder;
}
}