package net.sourceforge.squirrel_sql.client.gui.mainframe;
import net.sourceforge.squirrel_sql.client.session.MessagePanel;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.util.prefs.Preferences;
public class SplitPnResizeHandler
{
private static final StringManager s_stringMgr =
StringManagerFactory.getStringManager(SplitPnResizeHandler.class);
private static final String PREFS_KEY_MESSAGEPANEL_HEIGHT = "squirrelSql_msgPanel_height";
private boolean m_hasBeenVisible;
private JSplitPane _splitPn;
private MessagePanel _msgPnl;
public SplitPnResizeHandler(JSplitPane splitPn, MessagePanel msgPnl)
{
_splitPn = splitPn;
_msgPnl = msgPnl;
String key;
//i18n[MainFrame.saveSize=Save size]
key = s_stringMgr.getString("MainFrame.saveSize");
Action saveSplitDividerLocAction = new AbstractAction(key)
{
public void actionPerformed(ActionEvent e)
{
int msgPanelHeight = _splitPn.getBottomComponent().getSize().height;
Preferences.userRoot().putInt(PREFS_KEY_MESSAGEPANEL_HEIGHT, msgPanelHeight);
}
};
_msgPnl.addToMessagePanelPopup(saveSplitDividerLocAction);
//i18n[MainFrame.saveSize0=Save size 0]
key = s_stringMgr.getString("MainFrame.saveSize0");
Action save0SplitDividerLocAction = new AbstractAction(key)
{
public void actionPerformed(ActionEvent e)
{
Preferences.userRoot().putInt(PREFS_KEY_MESSAGEPANEL_HEIGHT, 0);
setUnexpanded();
}
};
_msgPnl.addToMessagePanelPopup(save0SplitDividerLocAction);
key = s_stringMgr.getString("MainFrame.restoreSize");
Action setSplitDividerLocAction = new AbstractAction(key)
{
public void actionPerformed(ActionEvent e)
{
int prefMsgPanelHeight = Preferences.userRoot().getInt(PREFS_KEY_MESSAGEPANEL_HEIGHT, -1);
if(-1 != prefMsgPanelHeight)
{
if (0 == prefMsgPanelHeight)
{
setUnexpanded();
}
else
{
int divLoc = getDividerLocation(prefMsgPanelHeight, _splitPn);
_splitPn.setDividerLocation(divLoc);
}
}
}
};
_msgPnl.addToMessagePanelPopup(setSplitDividerLocAction);
}
private void setUnexpanded()
{
_splitPn.setDividerLocation(_splitPn.getMaximumDividerLocation() + 100);
}
void resizeSplitOnStartup()
{
if(false == m_hasBeenVisible)
{
m_hasBeenVisible = true;
final int prefMsgPanelHeight = Preferences.userRoot().getInt(PREFS_KEY_MESSAGEPANEL_HEIGHT, -1);
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
if (-1 == prefMsgPanelHeight)
{
int divLoc = getDividerLocation(50, _splitPn);
_splitPn.setDividerLocation(divLoc);
}
else
{
if (0 == prefMsgPanelHeight)
{
tryForceUnexpanded();
}
else
{
int divLoc = getDividerLocation(prefMsgPanelHeight, _splitPn);
_splitPn.setDividerLocation(divLoc);
}
}
}
});
}
}
/**
* Used at startup and almost always makes it to hide the Message panel at startup
*/
private void tryForceUnexpanded()
{
setUnexpanded();
Runnable runnable = new Runnable()
{
public void run()
{
setUnexpanded();
}
};
SwingUtilities.invokeLater(runnable);
}
private int getDividerLocation(int wantedBottomComponentHeight, JSplitPane splitPn)
{
int splitBarSize =
splitPn.getSize().height -
splitPn.getBottomComponent().getSize().height -
splitPn.getTopComponent().getSize().height - 1;
int divLoc = splitPn.getSize().height - wantedBottomComponentHeight - splitBarSize;
return divLoc;
}
}