package net.sourceforge.squirrel_sql.client.gui.desktopcontainer.docktabdesktop;
import net.sourceforge.squirrel_sql.client.IApplication;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.prefs.Preferences;
public class DockHandle
{
private String _title;
private DockFrame _dockFrame;
private JToggleButton _btn;
private ArrayList<DockHandleListener> _dockHandleListeners = new ArrayList<DockHandleListener>();
private static final String PREFS_KEY_DOCK_DIVIDER_LOC = "squirrelSql_dock_divider_loc." ;
private IApplication _app;
public DockHandle(IApplication app, Container comp, String title, JToggleButton btn)
{
_app = app;
_dockFrame = new DockFrame(_app, comp, title);
_title = title;
_btn = btn;
_dockFrame.getMinimizeButton().addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
closeDock();
}
});
_btn.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
fireDockHandleEvent(e);
}
});
}
private void fireDockHandleEvent(ActionEvent e)
{
DockHandleListener[] clone = _dockHandleListeners.toArray(new DockHandleListener[_dockHandleListeners.size()]);
for (int i = 0; i < clone.length; i++)
{
if(_btn.isSelected())
{
clone[i].dockOpened(new DockHandleEvent(e));
}
else
{
clone[i].dockClosing(new DockHandleEvent(e));
}
}
}
public DockFrame getDockFrame()
{
return _dockFrame;
}
public int getDividerLocation()
{
return Preferences.userRoot().getInt(PREFS_KEY_DOCK_DIVIDER_LOC + _title, 150);
}
public void storeDividerLocation(int dividerLocation)
{
Preferences.userRoot().putInt(PREFS_KEY_DOCK_DIVIDER_LOC + _title, dividerLocation);
}
public void addDockHandleListener(DockHandleListener dockHandleListener)
{
_dockHandleListeners.add(dockHandleListener);
}
public void removeDockHandleListener(DockHandleListener dockHandleListener)
{
_dockHandleListeners.remove(dockHandleListener);
}
public void openDock()
{
if(false == _btn.isSelected())
{
_btn.doClick();
}
}
public void closeDock()
{
if(true == _btn.isSelected())
{
_btn.doClick();
}
}
public void wasClosedByOtherButton(ActionEvent otherButtonEvent)
{
fireDockHandleEvent(otherButtonEvent);
}
public boolean isClosed()
{
return !_btn.isSelected();
}
public void mayAutoHide()
{
if(_dockFrame.isAutoHide())
{
closeDock();
}
}
}