Revision: 5640
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=5640&view=rev
Author: gerdwagner
Date: 2010-06-06 22:21:17 +0000 (Sun, 06 Jun 2010)
Log Message:
-----------
New way to view query results: There is an new tab inside a query result named "Overview".
It might need some trying out to understand what it does.
Modified Paths:
--------------
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/resources/squirrel.properties
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/IResultTab.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultTab.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/SQLResultExecuterPanel.java
trunk/sql12/doc/changes.txt
trunk/sql12/fw/src/net/sourceforge/squirrel_sql/fw/datasetviewer/ResultSetDataSet.java
trunk/sql12/fw/src/net/sourceforge/squirrel_sql/fw/gui/ButtonTableHeader.java
trunk/sql12/fw/src/net/sourceforge/squirrel_sql/fw/gui/SortableTableModel.java
trunk/sql12/fw/src/net/sourceforge/squirrel_sql/fw/util/Utilities.java
Added Paths:
-----------
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/resources/images/next.png
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/resources/images/prev.png
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/I18NStrings.properties
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewDataSet.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewFrame.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewHolder.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewCtrl.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewPanel.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/BooleanIndexedColumn.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/Calculator.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/CharRange.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScale.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleButton.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleLayout.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleListener.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScalePanel.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleTable.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleTableCellEditor.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleTableModel.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleTablePopupHandler.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DoubleIndexedColumn.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/I18NStrings.properties
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/IndexedColumn.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/IndexedColumnFactory.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/IntegerIndexedColumn.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/Interval.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/NoIx.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/ScaleFactory.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/ScaleTableState.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/StringCalculator.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/StringIndexedColumn.java
trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/TimestampIndexedColumn.java
trunk/sql12/fw/src/net/sourceforge/squirrel_sql/fw/gui/SortingListener.java
Modified: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java 2010-05-30 23:16:33 UTC (rev 5639)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -77,6 +77,8 @@
String AUTOHIDE_OFF = "autohideOff";
String MINIMIZE = "minimize";
+ String PREV_SCALE = "prevScale";
+ String NEXT_SCALE = "nextScale";
}
public SquirrelResources(String rsrcBundleBaseName)
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/resources/images/next.png
===================================================================
(Binary files differ)
Property changes on: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/resources/images/next.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/resources/images/prev.png
===================================================================
(Binary files differ)
Property changes on: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/resources/images/prev.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/resources/squirrel.properties
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/resources/squirrel.properties 2010-05-30 23:16:33 UTC (rev 5639)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/resources/squirrel.properties 2010-06-06 22:21:17 UTC (rev 5640)
@@ -62,7 +62,11 @@
autohideOff.image=autohideOff.gif
minimize.image=minimize.gif
+prevScale.image=prev.png
+nextScale.image=next.png
+
+
########
# icons displayed in the drivers list indicating whether
# or not driver could be loaded.
Modified: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/IResultTab.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/IResultTab.java 2010-05-30 23:16:33 UTC (rev 5639)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/IResultTab.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -30,8 +30,6 @@
public interface IResultTab {
- void reInit(IDataSetUpdateableTableModel creator, SQLExecutionInfo exInfo);
-
/**
* Show the results from the passed <TT>IDataSet</TT>.
*
Modified: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultTab.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultTab.java 2010-05-30 23:16:33 UTC (rev 5639)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultTab.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -34,7 +34,10 @@
import java.text.NumberFormat;
import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.OverwiewCtrl;
import net.sourceforge.squirrel_sql.fw.datasetviewer.*;
import net.sourceforge.squirrel_sql.fw.gui.MultipleLineLabel;
import net.sourceforge.squirrel_sql.fw.id.IHasIdentifier;
@@ -150,7 +153,7 @@
/**
* @see net.sourceforge.squirrel_sql.client.session.mainpanel.IResultTab#reInit(net.sourceforge.squirrel_sql.fw.datasetviewer.IDataSetUpdateableTableModel, net.sourceforge.squirrel_sql.client.session.SQLExecutionInfo)
*/
- public void reInit(IDataSetUpdateableTableModel creator, SQLExecutionInfo exInfo)
+ private void reInit(IDataSetUpdateableTableModel creator, SQLExecutionInfo exInfo)
{
_creator = creator;
_creator.addListener(new DataSetUpdateableTableModelListener()
@@ -460,6 +463,24 @@
String infoTabTitle =
s_stringMgr.getString("ResultTab.infoTabTitle");
_tp.addTab(infoTabTitle, sp);
+
+
+ final int overViewIx = _tp.getTabCount();
+ final OverwiewCtrl ctrl = new OverwiewCtrl(_session);
+ _tp.addTab(ctrl.getTitle(), ctrl.getPanel());
+
+ _tp.addChangeListener(new ChangeListener()
+ {
+ @Override
+ public void stateChanged(ChangeEvent e)
+ {
+ if (overViewIx == _tp.getSelectedIndex())
+ {
+ ctrl.init(_rsds);
+ }
+ }
+ });
+
}
private final class TabButton extends JButton
Modified: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/SQLResultExecuterPanel.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/SQLResultExecuterPanel.java 2010-05-30 23:16:33 UTC (rev 5639)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/SQLResultExecuterPanel.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -130,10 +130,6 @@
private Map<IIdentifier,ResultTabInfo> _allTabs =
new HashMap<IIdentifier,ResultTabInfo>();
- /**
- * Pool of <TT>ResultTabInfo</TT> objects available for use.
- */
- private List<ResultTabInfo> _availableTabs = new ArrayList<ResultTabInfo>();
/**
* Pool of <TT>ResultTabInfo</TT> objects currently being used.
@@ -506,7 +502,6 @@
tab.clear();
_tabbedExecutionsPanel.remove(tab);
ResultTabInfo tabInfo = _allTabs.get(tab.getIdentifier());
- _availableTabs.add(tabInfo);
_usedTabs.remove(tabInfo);
tabInfo._resultFrame = null;
fireTabRemovedEvent(tab);
@@ -759,32 +754,21 @@
final IResultTab resultTabToReplace)
{
final ResultTab tab;
- if (_availableTabs.size() > 0)
- {
- ResultTabInfo ti = _availableTabs.remove(0);
- _usedTabs.add(ti);
- tab = ti._tab;
- tab.reInit(creator, exInfo);
- s_log.debug("Using tab " + tab.getIdentifier().toString()
- + " for results.");
- }
- else
- {
- ResultTabListener resultTabListener = new ResultTabListener()
+
+ ResultTabListener resultTabListener = new ResultTabListener()
+ {
+ public void rerunSQL(String sql, IResultTab resultTab)
{
- public void rerunSQL(String sql, IResultTab resultTab)
- {
- onRerunSQL(sql, resultTab);
- }
- };
+ onRerunSQL(sql, resultTab);
+ }
+ };
- tab = new ResultTab(_session, this, _idFactory.createIdentifier(), exInfo, creator, resultTabListener);
- ResultTabInfo ti = new ResultTabInfo(tab);
- _allTabs.put(tab.getIdentifier(), ti);
- _usedTabs.add(ti);
- s_log.debug("Created new tab " + tab.getIdentifier().toString()
- + " for results.");
- }
+ tab = new ResultTab(_session, this, _idFactory.createIdentifier(), exInfo, creator, resultTabListener);
+ ResultTabInfo ti = new ResultTabInfo(tab);
+ _allTabs.put(tab.getIdentifier(), ti);
+ _usedTabs.add(ti);
+ s_log.debug("Created new tab " + tab.getIdentifier().toString()
+ + " for results.");
try
{
Copied: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/I18NStrings.properties (from rev 5579, trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/I18NStrings.properties)
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/I18NStrings.properties (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/I18NStrings.properties 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,18 @@
+OverwiewCtrl.title=Overview
+
+OverwiewPanel.prevOverview=Previous overview
+OverwiewPanel.nextOverview=Next overview
+
+OverwiewPanel.showInTable=As table
+OverwiewPanel.showInTableToolTip=Show this overview as table
+OverwiewPanel.showTableInWin=As table in new window
+OverwiewPanel.showTableInWinToolTip=Show this overview as table in a new window
+
+
+OverwiewPanel.saveColumnWidth=Remember widths
+OverwiewPanel.saveColumnWidthToolTip=Remember current column widths
+
+
+OverviewFrame.title=Overview table window
+
+OverviewFrame.stayOnTop=Stay on top
\ No newline at end of file
Copied: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewDataSet.java (from rev 5579, trunk/sql12/plugins/hibernate/src/net/sourceforge/squirrel_sql/plugins/hibernate/viewobjects/ResultDataSet.java)
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewDataSet.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewDataSet.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,43 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+import net.sourceforge.squirrel_sql.fw.datasetviewer.ColumnDisplayDefinition;
+import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetDefinition;
+import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetException;
+import net.sourceforge.squirrel_sql.fw.datasetviewer.IDataSet;
+import net.sourceforge.squirrel_sql.fw.util.IMessageHandler;
+
+import java.util.List;
+
+public class OverviewDataSet implements IDataSet
+{
+ private int _curIx = -1;
+ private ColumnDisplayDefinition[] _columnDisplayDefinitions;
+ private List<Object[]> _allRows;
+
+
+ public OverviewDataSet(List<Object[]> allRows, ColumnDisplayDefinition[] columnDisplayDefinitions)
+ {
+ _allRows = allRows;
+ _columnDisplayDefinitions = columnDisplayDefinitions;
+ }
+
+ public int getColumnCount() throws DataSetException
+ {
+ return _columnDisplayDefinitions.length;
+ }
+
+ public DataSetDefinition getDataSetDefinition() throws DataSetException
+ {
+ return new DataSetDefinition(_columnDisplayDefinitions);
+ }
+
+ public boolean next(IMessageHandler msgHandler) throws DataSetException
+ {
+ return ++_curIx < _allRows.size();
+ }
+
+ public Object get(int columnIndex) throws DataSetException
+ {
+ return _allRows.get(_curIx)[columnIndex];
+ }
+}
\ No newline at end of file
Copied: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewFrame.java (from rev 5579, trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultFrame.java)
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewFrame.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewFrame.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,109 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+import net.sourceforge.squirrel_sql.client.IApplication;
+import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.DialogWidget;
+import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.WidgetAdapter;
+import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.WidgetEvent;
+import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetViewerTablePanel;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.prefs.Preferences;
+
+public class OverviewFrame extends DialogWidget
+{
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(OverviewFrame.class);
+
+ private static final String PREF_KEY_OVERVIEW_FRAME_WIDTH = "Squirrel.overview.FrameWidth";
+ private static final String PREF_KEY_OVERVIEW_FRAME_HIGHT = "Squirrel.overview.FrameHight";
+
+
+ private JCheckBox _chkOnTop;
+
+ public OverviewFrame(DataSetViewerTablePanel simpleTable, IApplication app)
+ {
+ super(s_stringMgr.getString("OverviewFrame.title"), true, true, true, true, app);
+
+ setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
+
+ final Container cont = getContentPane();
+ cont.setLayout(new BorderLayout());
+
+ if (app.getDesktopStyle().supportsLayers())
+ {
+ JPanel pnlButtons = new JPanel(new GridBagLayout());
+ GridBagConstraints gbc;
+
+
+ // i18n[resultFrame.stayOnTop=Stay on top]
+ _chkOnTop = new JCheckBox(s_stringMgr.getString("OverviewFrame.stayOnTop"));
+ gbc = new GridBagConstraints(1,0,1,1,0,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,5,0,5), 0,0);
+ pnlButtons.add(_chkOnTop, gbc);
+ _chkOnTop.setSelected(true);
+
+
+ _chkOnTop.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ onStayOnTopChanged();
+ }
+ });
+
+ gbc = new GridBagConstraints(2,0,1,1,1,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,5,0,5), 0,0);
+ pnlButtons.add(new JPanel(), gbc);
+ cont.add(pnlButtons, BorderLayout.NORTH);
+ }
+
+
+ cont.add(new JScrollPane(simpleTable.getComponent()), BorderLayout.CENTER);
+
+
+ int width = Preferences.userRoot().getInt(PREF_KEY_OVERVIEW_FRAME_WIDTH, 300);
+ int hight = Preferences.userRoot().getInt(PREF_KEY_OVERVIEW_FRAME_HIGHT, 300);
+
+ setSize(new Dimension(width, hight));
+
+
+ addWidgetListener(new WidgetAdapter()
+ {
+ @Override
+ public void widgetClosing(WidgetEvent evt)
+ {
+ onWidgetClosing();
+ }
+ });
+ }
+
+ private void onWidgetClosing()
+ {
+ Dimension size = getSize();
+
+ Preferences.userRoot().putInt(PREF_KEY_OVERVIEW_FRAME_WIDTH, size.width);
+ Preferences.userRoot().putInt(PREF_KEY_OVERVIEW_FRAME_HIGHT, size.height);
+ }
+
+
+ private void onStayOnTopChanged()
+ {
+ if(_chkOnTop.isSelected())
+ {
+ setLayer(JLayeredPane.PALETTE_LAYER.intValue());
+ }
+ else
+ {
+ setLayer(JLayeredPane.DEFAULT_LAYER.intValue());
+ }
+
+ // Needs to be done in both cases because if the window goes back to
+ // the default layer it goes back behind all other windows too.
+ toFront();
+ }
+
+
+
+}
\ No newline at end of file
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewHolder.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewHolder.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewHolder.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,162 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.DataScaleTable;
+import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetViewerTablePanel;
+
+import java.awt.*;
+
+public class OverviewHolder
+{
+ private DataScaleTable _dataScaleTable;
+ private SimpleTable _simpleTable;
+
+ public DataScaleTable getDataScaleTable()
+ {
+ return _dataScaleTable;
+ }
+
+ public boolean isEmpty()
+ {
+ return null == _dataScaleTable && null == _simpleTable;
+ }
+
+ public void setOverview(DataScaleTable dataScaleTable)
+ {
+
+ if(null != _dataScaleTable)
+ {
+ dataScaleTable.setParentScaleTable(_dataScaleTable);
+ }
+ _dataScaleTable = dataScaleTable;
+
+ _simpleTable = null;
+ }
+
+
+ public void setOverview(DataSetViewerTablePanel simpleTable)
+ {
+ _simpleTable = new SimpleTable(simpleTable, _dataScaleTable);
+ _dataScaleTable = null;
+ }
+
+ public void setParent()
+ {
+ if(null != _simpleTable)
+ {
+ _dataScaleTable = _simpleTable.getParent();
+ _simpleTable = null;
+ return;
+ }
+
+ if(null != _dataScaleTable)
+ {
+ _dataScaleTable = _dataScaleTable.getParentScaleTable();
+ _simpleTable = null;
+ return;
+ }
+ }
+
+ public void setKid()
+ {
+ if (null != _dataScaleTable.getKidScaleTable())
+ {
+ _dataScaleTable = _dataScaleTable.getKidScaleTable();
+ _simpleTable = null;
+ }
+ else
+ {
+ _simpleTable = new SimpleTable(_dataScaleTable.getKidSimpleTable(), _dataScaleTable);
+ _dataScaleTable = null;
+ }
+ }
+
+
+ public boolean hasParent()
+ {
+ if(null != _simpleTable)
+ {
+ return true;
+ }
+
+ if(null != _dataScaleTable)
+ {
+ return null != _dataScaleTable.getParentScaleTable();
+ }
+
+ throw new IllegalStateException("Either _simpleTable or _dataScaleTable must be initialized");
+ }
+
+ public boolean hasKid()
+ {
+ if(null != _simpleTable)
+ {
+ return false;
+ }
+
+ if(null != _dataScaleTable)
+ {
+ return null != _dataScaleTable.getKidScaleTable() || null != _dataScaleTable.getKidSimpleTable();
+ }
+
+ throw new IllegalStateException("Either _simpleTable or _dataScaleTable must be initialized");
+ }
+
+ public Component getComponent()
+ {
+ if(null != _simpleTable)
+ {
+ return _simpleTable.getComponent();
+ }
+
+ if(null != _dataScaleTable)
+ {
+ return _dataScaleTable;
+ }
+
+ throw new IllegalStateException("Either _simpleTable or _dataScaleTable must be initialized");
+ }
+
+ public boolean canShowInSimpleTable()
+ {
+ return null != _dataScaleTable;
+ }
+
+ public boolean isScaleTable()
+ {
+ return null != _dataScaleTable;
+ }
+
+
+ private static class SimpleTable
+ {
+ private DataScaleTable _parent;
+ private DataSetViewerTablePanel _simpleTable;
+
+ public SimpleTable(DataSetViewerTablePanel simpleTable, DataScaleTable parent)
+ {
+ _simpleTable = simpleTable;
+ _parent = parent;
+ _parent.setKidSimpleTable(_simpleTable);
+ }
+
+ public DataScaleTable getParent()
+ {
+ return _parent;
+ }
+
+ public Component getComponent()
+ {
+ return _simpleTable.getComponent();
+ }
+ }
+
+// private void stopCellEditing(DataScaleTable dataScaleTable)
+// {
+// TableCellEditor tableCellEditor = dataScaleTable.getCellEditor();
+// if (null != tableCellEditor)
+// {
+// tableCellEditor.stopCellEditing();
+// tableCellEditor.cancelCellEditing();
+// }
+// }
+}
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewCtrl.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewCtrl.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewCtrl.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,282 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+import net.sourceforge.squirrel_sql.client.IApplication;
+import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.DialogWidget;
+import net.sourceforge.squirrel_sql.client.session.ISession;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.*;
+import net.sourceforge.squirrel_sql.fw.datasetviewer.*;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+import javax.swing.*;
+import javax.swing.table.DefaultTableColumnModel;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableColumnModel;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.List;
+
+public class OverwiewCtrl
+{
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(OverwiewCtrl.class);
+
+ private OverviewHolder _overviewHolder = new OverviewHolder();
+ private OverwiewPanel _overwiewPanel;
+ private IApplication _app;
+
+ public OverwiewCtrl(final ISession session)
+ {
+ _app = session.getApplication();
+ _overwiewPanel = new OverwiewPanel(_app.getResources());
+
+ _overwiewPanel.btnNext.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onNext();
+ }
+ });
+
+ _overwiewPanel.btnPrev.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onPrev();
+ }
+ });
+
+ _overwiewPanel.btnShowInTable.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onShowInTable();
+ }
+ });
+
+
+ _overwiewPanel.btnShowInTableWin.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onShowInTableWin();
+ }
+ });
+
+ _overwiewPanel.btnSaveColumnWidth.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onSaveColumnWidths();
+ }
+ });
+
+ }
+
+ private void onSaveColumnWidths()
+ {
+ _overviewHolder.getDataScaleTable().saveColumnWidths();
+ }
+
+
+ private void onShowInTableWin()
+ {
+ DataSetViewerTablePanel simpleTable = createSimpleTable();
+ openWindowForTable(simpleTable);
+ }
+
+ private void openWindowForTable(DataSetViewerTablePanel simpleTable)
+ {
+ OverviewFrame overviewFrame = new OverviewFrame(simpleTable, _app);
+ _app.getMainFrame().addWidget(overviewFrame);
+ overviewFrame.setLayer(JLayeredPane.PALETTE_LAYER);
+ overviewFrame.setVisible(true);
+ DialogWidget.centerWithinDesktop(overviewFrame);
+ }
+
+ private void onShowInTable()
+ {
+ _overviewHolder.setOverview(createSimpleTable());
+ initGui();
+ }
+
+
+ private void onShowIntervalInTable(Interval interval)
+ {
+ List<Object[]> rows = interval.getResultRows();
+ ColumnDisplayDefinition[] columnDisplayDefinitions = _overviewHolder.getDataScaleTable().getColumnDisplayDefinitions();
+
+ _overviewHolder.setOverview(createSimpleTable(rows, columnDisplayDefinitions));
+ initGui();
+ }
+
+ private void onShowIntervalInTableWin(Interval interval)
+ {
+ List<Object[]> rows = interval.getResultRows();
+ ColumnDisplayDefinition[] columnDisplayDefinitions = _overviewHolder.getDataScaleTable().getColumnDisplayDefinitions();
+
+ openWindowForTable(createSimpleTable(rows, columnDisplayDefinitions));
+ }
+
+
+ private DataSetViewerTablePanel createSimpleTable()
+ {
+ List<Object[]> allRows = _overviewHolder.getDataScaleTable().getAllRows();
+ ColumnDisplayDefinition[] columnDisplayDefinitions = _overviewHolder.getDataScaleTable().getColumnDisplayDefinitions();
+
+ return createSimpleTable(allRows, columnDisplayDefinitions);
+ }
+
+ private DataSetViewerTablePanel createSimpleTable(List<Object[]> allRows, ColumnDisplayDefinition[] columnDisplayDefinitions)
+ {
+ try
+ {
+ OverviewDataSet ods = new OverviewDataSet(allRows, columnDisplayDefinitions);
+
+ DataSetViewerTablePanel dsv = new DataSetViewerTablePanel();
+ dsv.init(null);
+ dsv.show(ods);
+ return dsv;
+ }
+ catch (DataSetException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ private void onPrev()
+ {
+ _overviewHolder.setParent();
+ initGui();
+
+ }
+
+ private void onNext()
+ {
+ _overviewHolder.setKid();
+ initGui();
+ }
+
+ public String getTitle()
+ {
+ return s_stringMgr.getString("OverwiewCtrl.title");
+ }
+
+ public Component getPanel()
+ {
+ return _overwiewPanel;
+ }
+
+ public void init(ResultSetDataSet rsds)
+ {
+ if(false == _overviewHolder.isEmpty())
+ {
+ return;
+ }
+
+
+ List<Object[]> rows = rsds.getAllDataForReadOnly();
+ DataSetDefinition dataSetDefinition = rsds.getDataSetDefinition();
+ ColumnDisplayDefinition[] columnDefinitions = dataSetDefinition.getColumnDefinitions();
+
+ initScales(rows, columnDefinitions);
+ }
+
+ private void onIntervalSelected(Interval interval, ColumnDisplayDefinition[] columnDefinitions)
+ {
+ if (false == interval.containsAllRows())
+ {
+ List<Object[]> rows = interval.getResultRows();
+ initScales(rows, columnDefinitions);
+ }
+ }
+
+
+ private void initScales(List<Object[]> rows, final ColumnDisplayDefinition[] columnDefinitions)
+ {
+ if(0 == rows.size())
+ {
+ initScaleTable(new DataScale[0], rows, columnDefinitions);
+ return;
+ }
+
+
+ DataScale[] scales = new DataScale[columnDefinitions.length];
+
+ DataScaleListener dataScaleListener = new DataScaleListener()
+ {
+ @Override
+ public void intervalSelected(Interval interval)
+ {
+ onIntervalSelected(interval, columnDefinitions);
+ }
+
+ @Override
+ public void showInTableWin(Interval interval)
+ {
+ onShowIntervalInTableWin(interval);
+ }
+
+ @Override
+ public void showInTable(Interval interval)
+ {
+ onShowIntervalInTable(interval);
+ }
+ };
+
+
+ for (int i = 0; i < columnDefinitions.length; i++)
+ {
+ scales[i] = new ScaleFactory(rows, i, columnDefinitions[i]).createScale(dataScaleListener);
+ }
+
+ initScaleTable(scales, rows, columnDefinitions);
+ }
+
+ private void initScaleTable(DataScale[] scales, List<Object[]> rows, ColumnDisplayDefinition[] columnDefinitions)
+ {
+ DataScaleTableModel dataScaleTableModel = new DataScaleTableModel(scales);
+ DataScaleTable dataScaleTable = new DataScaleTable(dataScaleTableModel, rows, columnDefinitions);
+
+ TableColumnModel tcm = new DefaultTableColumnModel();
+ dataScaleTable.setColumnModel(tcm);
+
+ for (int i = 0; i < DataScaleTableModel.getColumnNames().length; i++)
+ {
+ TableColumn col = new TableColumn(i);
+ col.setHeaderValue(DataScaleTableModel.getColumnNames()[i]);
+ if (DataScaleTableModel.COL_NAME_COLUMN.equals(DataScaleTableModel.getColumnNames()[i]))
+ {
+ col.setPreferredWidth(dataScaleTableModel.getColumnWidthForColName(DataScaleTableModel.COL_NAME_COLUMN));
+ }
+ else if (DataScaleTableModel.COL_NAME_DATA.equals(DataScaleTableModel.getColumnNames()[i]))
+ {
+ col.setPreferredWidth(dataScaleTableModel.getColumnWidthForColName(DataScaleTableModel.COL_NAME_DATA));
+ }
+ tcm.addColumn(col);
+ }
+
+ _overviewHolder.setOverview(dataScaleTable);
+ initGui();
+
+ }
+
+ private void initGui()
+ {
+ _overwiewPanel.btnPrev.setEnabled(_overviewHolder.hasParent());
+ _overwiewPanel.btnNext.setEnabled(_overviewHolder.hasKid());
+
+ _overwiewPanel.btnShowInTable.setEnabled(_overviewHolder.canShowInSimpleTable());
+ _overwiewPanel.btnShowInTableWin.setEnabled(_overviewHolder.canShowInSimpleTable());
+
+ _overwiewPanel.btnSaveColumnWidth.setEnabled(_overviewHolder.isScaleTable());
+
+ _overwiewPanel.scrollPane.setViewportView(_overviewHolder.getComponent());
+ }
+}
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewPanel.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewPanel.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewPanel.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,84 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+import net.sourceforge.squirrel_sql.client.resources.SquirrelResources;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.DataScaleTable;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class OverwiewPanel extends JPanel
+{
+ JScrollPane scrollPane = new JScrollPane();
+
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(OverwiewPanel.class);
+
+
+ JButton btnPrev;
+ JButton btnNext;
+
+ JButton btnShowInTableWin;
+ JButton btnShowInTable;
+ JButton btnSaveColumnWidth;
+
+ public OverwiewPanel(SquirrelResources rsrc)
+ {
+ setLayout(new GridBagLayout());
+
+ GridBagConstraints gbc;
+
+ gbc = new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.HORIZONTAL, new Insets(5,5,5,5),0,0);
+ createButtonPanel(rsrc);
+ add(createButtonPanel(rsrc), gbc);
+
+ gbc = new GridBagConstraints(0,1,1,1,1,1,GridBagConstraints.NORTHEAST, GridBagConstraints.BOTH, new Insets(5,5,5,5),0,0);
+ add(scrollPane, gbc);
+ }
+
+ private JPanel createButtonPanel(SquirrelResources rsrc)
+ {
+ JPanel ret = new JPanel(new GridBagLayout());
+
+ GridBagConstraints gbc;
+
+ gbc = new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,0,0,5),0,0);
+ btnPrev = new JButton(rsrc.getIcon(SquirrelResources.IImageNames.PREV_SCALE));
+ btnPrev.setToolTipText(s_stringMgr.getString("OverwiewPanel.prevOverview"));
+ btnPrev.setEnabled(false);
+ ret.add(btnPrev, gbc);
+
+
+ gbc = new GridBagConstraints(1,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,0,0,20),0,0);
+ btnNext = new JButton(rsrc.getIcon(SquirrelResources.IImageNames.NEXT_SCALE));
+ btnNext.setToolTipText(s_stringMgr.getString("OverwiewPanel.nextOverview"));
+ btnNext.setEnabled(false);
+ ret.add(btnNext, gbc);
+
+ gbc = new GridBagConstraints(2,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,0,0,5),0,0);
+ btnShowInTable = new JButton(s_stringMgr.getString("OverwiewPanel.showInTable"));
+ btnShowInTable.setToolTipText(s_stringMgr.getString("OverwiewPanel.showInTableToolTip"));
+ ret.add(btnShowInTable, gbc);
+
+ gbc = new GridBagConstraints(3,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,0,0,0),0,0);
+ btnShowInTableWin = new JButton(s_stringMgr.getString("OverwiewPanel.showTableInWin"));
+ btnShowInTableWin.setToolTipText(s_stringMgr.getString("OverwiewPanel.showTableInWinToolTip"));
+ ret.add(btnShowInTableWin, gbc);
+
+ gbc = new GridBagConstraints(4,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,20,0,0),0,0);
+ btnSaveColumnWidth = new JButton(s_stringMgr.getString("OverwiewPanel.saveColumnWidth"));
+ btnSaveColumnWidth.setToolTipText(s_stringMgr.getString("OverwiewPanel.saveColumnWidthToolTip"));
+ ret.add(btnSaveColumnWidth, gbc);
+
+
+ gbc = new GridBagConstraints(5,0,1,1,1,1,GridBagConstraints.NORTHEAST, GridBagConstraints.HORIZONTAL, new Insets(5,5,5,5),0,0);
+ ret.add(new JPanel(), gbc);
+
+ return ret;
+ }
+
+ public void setTable(DataScaleTable dataScaleTable)
+ {
+ scrollPane.setViewportView(dataScaleTable);
+ }
+}
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/BooleanIndexedColumn.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/BooleanIndexedColumn.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/BooleanIndexedColumn.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,103 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;
+
+import net.sourceforge.squirrel_sql.fw.datasetviewer.ColumnDisplayDefinition;
+
+import java.util.Comparator;
+import java.util.List;
+
+public class BooleanIndexedColumn extends IndexedColumn
+{
+
+ public BooleanIndexedColumn(List<Object[]> rows, int colIx, ColumnDisplayDefinition colDef)
+ {
+ super(rows, colIx, colDef);
+
+ Comparator comparator = new Comparator<Object>()
+ {
+ @Override
+ public int compare(Object ix1, Object ix2)
+ {
+ if( ix1 instanceof NoIx && ix2 instanceof NoIx)
+ {
+ return compareBoolean(((NoIx) ix1).get(), ((NoIx) ix2).get());
+ }
+ else if(ix1 instanceof NoIx)
+ {
+ return compareBoolean(((NoIx) ix1).get(), getRow((Integer) ix2));
+ }
+ else if(ix2 instanceof NoIx)
+ {
+ return compareBoolean(getRow((Integer) ix1), ((NoIx) ix2).get());
+ }
+ else
+ {
+ return compareBoolean(getRow((Integer) ix1), getRow((Integer) ix2));
+ }
+ }
+ };
+
+ sortIx(comparator);
+
+ }
+
+
+ private int compareBoolean(Object o1, Object o2)
+ {
+ Boolean b1 = asBoolean(o1);
+
+ Boolean b2 = asBoolean(o2);
+
+
+ if(b1 == null && b2 != null)
+ {
+ return -1;
+ }
+ else if(b1 != null && b2 == null)
+ {
+ return 1;
+ }
+ else if(b1 == null && b2 == null)
+ {
+ return 0;
+ }
+
+ return b1.compareTo(b2);
+
+ }
+
+ private Boolean asBoolean(Object o)
+ {
+ Boolean b = null;
+ if (null != o)
+ {
+ if(o instanceof Number)
+ {
+ b = 0 != ((Number)o).intValue();
+ }
+ else
+ {
+ b = (Boolean)o;
+ }
+ }
+ return b;
+ }
+
+
+ @Override
+ public Calculator getCalculator()
+ {
+ return new Calculator()
+ {
+ @Override
+ public Object getMid(Object min, Object max)
+ {
+ return onGetMid(min, max);
+ }
+ };
+ }
+
+ private Object onGetMid(Object min, Object max)
+ {
+ return asBoolean(min) && asBoolean(max);
+ }
+}
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/Calculator.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/Calculator.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/Calculator.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,6 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;
+
+public interface Calculator<T>
+{
+ T getMid(T min, T max);
+}
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/CharRange.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/CharRange.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/CharRange.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,61 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;
+
+public class CharRange
+{
+ private int _minChar = ' ';
+ private int _maxChar = '~';
+
+ private boolean _isInit;
+ private boolean _initializing;
+
+ public char getRange()
+ {
+ return (char) (_maxChar - _minChar + 1);
+ }
+
+ public void init(String s)
+ {
+ if(false == _initializing)
+ {
+ return;
+ }
+
+ if(null == s || 0 == s.length())
+ {
+ return;
+ }
+
+ if(false == _isInit)
+ {
+ _minChar = s.charAt(0);
+ _maxChar = s.charAt(0);
+ _isInit = true;
+ }
+
+ for (int i = 0; i < s.length(); i++)
+ {
+ _minChar = Math.min(_minChar, s.charAt(i));
+ _maxChar = Math.max(_maxChar, s.charAt(i));
+ }
+ }
+
+ void beginInit()
+ {
+ _initializing = true;
+ }
+
+ void endInit()
+ {
+ _initializing = false;
+ }
+
+ public char getMinChar()
+ {
+ return (char) _minChar;
+ }
+
+ public char getMaxChar()
+ {
+ return (char) _maxChar;
+ }
+}
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScale.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScale.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScale.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,135 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+public class DataScale implements Comparable<DataScale>
+{
+ private DataScalePanel _panel;
+
+ private ArrayList<Interval> _intervals = new ArrayList<Interval>();
+ private String _column;
+ private DataScaleListener _dataScaleListener;
+ private int _columnIndex;
+ private HashMap<JButton, Interval> _intervalByButton = new HashMap<JButton, Interval>();
+
+ public DataScale(String column, DataScaleListener dataScaleListener, int columnIndex)
+ {
+ _column = column;
+ _dataScaleListener = dataScaleListener;
+
+ // Needed just to define reasonable sorting of data column in overview table
+ _columnIndex = columnIndex;
+ }
+
+ public String getColumn()
+ {
+ return _column;
+ }
+
+ public void addInterval(Interval interval)
+ {
+ _intervals.add(interval);
+ }
+
+
+ public DataScalePanel getPanel()
+ {
+ if(null == _panel)
+ {
+ double[] wights = new double[_intervals.size()];
+
+ for (int i = 0; i < _intervals.size(); i++)
+ {
+ wights[i] = _intervals.get(i).getWight();
+ }
+
+ _panel = new DataScalePanel(new DataScaleLayout(wights));
+
+ for (int i = 0; i < _intervals.size(); i++)
+ {
+ _panel.add(createButton(i));
+ }
+ }
+
+ return _panel;
+ }
+
+ private JButton createButton(final int intervalIx)
+ {
+ final String text = _intervals.get(intervalIx).getLabel();
+
+ final JButton ret = new JButton(text);
+ ret.setToolTipText(_intervals.get(intervalIx).getToolTip());
+
+ ret.setBorder(BorderFactory.createLineBorder(Color.black));
+
+ ret.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onButtonPressed(_intervals.get(intervalIx));
+ }
+ });
+
+ _intervalByButton.put(ret, _intervals.get(intervalIx));
+
+ return ret;
+ }
+
+ private void onButtonPressed(Interval interval)
+ {
+ _dataScaleListener.intervalSelected(interval);
+ }
+
+
+ public double getSumWeights()
+ {
+ double ret = 0;
+
+ for (Interval interval : _intervals)
+ {
+ ret += interval.getWight();
+ }
+
+ return ret;
+ }
+
+ public int getSumLens()
+ {
+ int ret = 0;
+
+ for (Interval interval : _intervals)
+ {
+ ret += interval.getLen();
+ }
+ return ret;
+
+ }
+
+ @Override
+ public int compareTo(DataScale other)
+ {
+ return ((Integer)_columnIndex).compareTo(other._columnIndex);
+ }
+
+ void showInTableSelected(JButton buttonPopupWasOpenedAt)
+ {
+ _dataScaleListener.showInTable(_intervalByButton.get(buttonPopupWasOpenedAt));
+ }
+
+ void showInTableWin(JButton buttonPopupWasOpenedAt)
+ {
+ _dataScaleListener.showInTableWin(_intervalByButton.get(buttonPopupWasOpenedAt));
+ }
+
+ public JButton[] getButtons()
+ {
+ return _intervalByButton.keySet().toArray(new JButton[_intervalByButton.keySet().size()]);
+ }
+}
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleButton.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleButton.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleButton.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,11 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;
+
+import javax.swing.*;
+
+public class DataScaleButton extends JButton
+{
+ public DataScaleButton(DataScale dataScale, int wightAndLabelIx)
+ {
+ //To change body of created methods use File | Settings | File Templates.
+ }
+}
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleLayout.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleLayout.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleLayout.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,84 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;
+
+import java.awt.*;
+
+class DataScaleLayout extends GridLayout
+{
+
+ private Dimension buf = new Dimension();
+
+ private double[] _renormedWeights;
+
+ public DataScaleLayout(double[] weights)
+ {
+ super(1, weights.length);
+ createRenormedWeights(weights);
+ }
+
+ /**
+ * Renorming is done to make sure very small intervals become visible.
+ */
+ private void createRenormedWeights(double[] weights)
+ {
+ double[] buf = new double[weights.length];
+
+
+ double sumRenormed = 0;
+ for (int i = 0; i < weights.length; i++)
+ {
+ //System.out.println("weight = " + weights[i]);
+
+ buf[i] = Math.max(weights[i], 1d/60d);
+ sumRenormed += buf[i];
+ }
+
+ _renormedWeights = new double[buf.length];
+ for (int i = 0; i < buf.length; i++)
+ {
+ _renormedWeights[i] = buf[i] / sumRenormed;
+
+ //System.out.println("_renormedWeight = " + _renormedWeights[i]);
+ }
+ }
+
+
+ @Override
+ public void layoutContainer(Container parent)
+ {
+ synchronized (parent.getTreeLock())
+ {
+ Insets insets = parent.getInsets();
+
+ if (_renormedWeights.length == 0)
+ {
+ return;
+ }
+
+ Dimension pSize = parent.getSize(buf);
+
+ int pw = pSize.width - (insets.left + insets.right);
+ int h = pSize.height - (insets.top + insets.bottom);
+
+ int y = insets.top;
+ int x = insets.left;
+
+
+ int pwLeftOver = pw;
+ for (int i = 0; i < _renormedWeights.length; i++)
+ {
+ if ( i < _renormedWeights.length - 1)
+ {
+ int width = (int) (_renormedWeights[i] * (double) pw + 0.5);
+ parent.getComponent(i).setBounds(x, y, width, h);
+ x += width;
+
+ pwLeftOver -= width;
+ }
+ else
+ {
+ parent.getComponent(i).setBounds(x, y, pwLeftOver, h);
+ }
+ }
+ }
+ }
+}
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleListener.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleListener.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleListener.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,10 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;
+
+public interface DataScaleListener
+{
+ void intervalSelected(Interval interval);
+
+ void showInTableWin(Interval interval);
+
+ void showInTable(Interval interval);
+}
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScalePanel.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScalePanel.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScalePanel.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,47 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.MouseEvent;
+
+public class DataScalePanel extends JPanel
+{
+
+ private Point pBuf = new Point();
+ private Dimension dBuf = new Dimension();
+
+ public DataScalePanel(DataScaleLayout dataScaleLayout)
+ {
+ super(dataScaleLayout);
+ }
+
+
+ @Override
+ public String getToolTipText(MouseEvent event)
+ {
+
+ JButton button = getButtonAt(event.getX());
+
+ if (null == button)
+ {
+ return super.getToolTipText(event);
+ }
+ else
+ {
+ return button.getToolTipText();
+ }
+ }
+
+ public JButton getButtonAt(int x)
+ {
+ for (Component component : getComponents())
+ {
+ if(component.getLocation(pBuf).x < x && x < component.getLocation(pBuf).x + component.getSize(dBuf).width)
+ {
+ return (JButton) component;
+ }
+ }
+
+ return null;
+ }
+}
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleTable.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleTable.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleTable.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,163 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;
+
+import net.sourceforge.squirrel_sql.fw.datasetviewer.ColumnDisplayDefinition;
+import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetViewerTablePanel;
+import net.sourceforge.squirrel_sql.fw.gui.SortableTable;
+import net.sourceforge.squirrel_sql.fw.gui.SortableTableModel;
+
+import javax.swing.*;
+import javax.swing.table.TableCellEditor;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableModel;
+import java.awt.*;
+import java.util.List;
+
+public class DataScaleTable extends SortableTable
+{
+
+
+ private List<Object[]> _allRows;
+ private ColumnDisplayDefinition[] _columnDefinitions;
+
+ private DataScaleTable _parent;
+ private DataScaleTable _kid;
+ private DataSetViewerTablePanel _kidSimpleTable;
+
+ public DataScaleTable(DataScaleTableModel dataScaleTableModel, List<Object[]> allRows, ColumnDisplayDefinition[] columnDefinitions)
+ {
+ super(dataScaleTableModel);
+ _allRows = allRows;
+ _columnDefinitions = columnDefinitions;
+
+ setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+
+ setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+
+ new DataScaleTablePopupHandler(this);
+ }
+
+
+ @Override
+ public TableCellRenderer getCellRenderer(int row, int column)
+ {
+ String headerValue = (String) getColumnModel().getColumn(column).getHeaderValue();
+ if(DataScaleTableModel.COL_NAME_COLUMN.equals(headerValue))
+ {
+ return super.getCellRenderer(row, column);
+ }
+ else
+ {
+ DataScaleTableModel model = getDataScaleTableModel();
+ return createScaleDataCellRenderer(model);
+ }
+ }
+
+ @Override
+ public TableCellEditor getCellEditor(int row, int column)
+ {
+ String headerValue = (String) getColumnModel().getColumn(column).getHeaderValue();
+ if(DataScaleTableModel.COL_NAME_COLUMN.equals(headerValue))
+ {
+ return super.getCellEditor(row, column);
+ }
+ else
+ {
+ DataScaleTableModel model = getDataScaleTableModel();
+
+ SortableTableModel sortableTableModel = (SortableTableModel) getModel();
+ return new DataScaleTableCellEditor(model.getDataScaleAt(sortableTableModel.transfromToModelRow(row)));
+ }
+ }
+
+ DataScaleTableModel getDataScaleTableModel()
+ {
+ TableModel ret = ((SortableTableModel) getModel()).getActualModel();
+
+ while(ret instanceof SortableTableModel)
+ {
+ ret = ((SortableTableModel)ret).getActualModel();
+ }
+
+ return (DataScaleTableModel) ret;
+ }
+
+
+ private TableCellRenderer createScaleDataCellRenderer(final DataScaleTableModel dataScaleTableModel)
+ {
+ return new TableCellRenderer()
+ {
+ @Override
+ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
+ {
+ SortableTableModel sortableTableModel = (SortableTableModel) getModel();
+ return dataScaleTableModel.getDataScaleAt(sortableTableModel.transfromToModelRow(row)).getPanel();
+ }
+ };
+ }
+
+ public List<Object[]> getAllRows()
+ {
+ return _allRows;
+ }
+
+ public ColumnDisplayDefinition[] getColumnDisplayDefinitions()
+ {
+ return _columnDefinitions;
+ }
+
+ public void setParentScaleTable(DataScaleTable parent)
+ {
+ ScaleTableState st = new ScaleTableState(parent);
+ st.apply(this);
+
+ _parent = parent;
+
+ _parent.setKidScaleTable(this);
+ }
+
+ public void setKidScaleTable(DataScaleTable kid)
+ {
+ _kid = kid;
+ _kidSimpleTable = null;
+ }
+
+ public DataScaleTable getKidScaleTable()
+ {
+ return _kid;
+ }
+
+ public DataScaleTable getParentScaleTable()
+ {
+ return _parent;
+ }
+
+ public void setKidSimpleTable(DataSetViewerTablePanel simpleTable)
+ {
+ _kidSimpleTable = simpleTable;
+ _kid = null;
+ }
+
+ public DataSetViewerTablePanel getKidSimpleTable()
+ {
+ return _kidSimpleTable;
+ }
+
+ public void saveColumnWidths()
+ {
+ int wColumn = DataScaleTableModel.DEFAULT_COL_WIDTH_COLUMN;
+ int wData = DataScaleTableModel.DEFAULT_COL_WIDTH_DATA;
+ for (int i = 0; i < getColumnModel().getColumnCount(); i++)
+ {
+ if(DataScaleTableModel.COL_NAME_COLUMN.equals(getColumnModel().getColumn(i).getHeaderValue()))
+ {
+ wColumn = getColumnModel().getColumn(i).getWidth();
+ }
+ else if(DataScaleTableModel.COL_NAME_DATA.equals(getColumnModel().getColumn(i).getHeaderValue()))
+ {
+ wData = getColumnModel().getColumn(i).getWidth();
+ }
+
+ DataScaleTableModel.saveColumWidhts(wColumn, wData);
+ }
+ }
+}
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleTableCellEditor.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleTableCellEditor.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleTableCellEditor.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,65 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;
+
+import javax.swing.*;
+import javax.swing.event.CellEditorListener;
+import javax.swing.table.TableCellEditor;
+import java.awt.*;
+import java.util.EventObject;
+
+
+public class DataScaleTableCellEditor implements TableCellEditor
+{
+ private DataScale _dataScale;
+
+ public DataScaleTableCellEditor(DataScale dataScale)
+ {
+ _dataScale = dataScale;
+ }
+
+
+ @Override
+ public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
+ {
+ DataScale ds = (DataScale) value;
+ return ds.getPanel();
+ }
+
+ @Override
+ public Object getCellEditorValue()
+ {
+ return _dataScale;
+ }
+
+ @Override
+ public boolean isCellEditable(EventObject anEvent)
+ {
+ return true;
+ }
+
+ @Override
+ public boolean shouldSelectCell(EventObject anEvent)
+ {
+ return true; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public boolean stopCellEditing()
+ {
+ return true; //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+ @Override
+ public void cancelCellEditing()
+ {
+ }
+
+ @Override
+ public void addCellEditorListener(CellEditorListener l)
+ {
+ }
+
+ @Override
+ public void removeCellEditorListener(CellEditorListener l)
+ {
+ }
+}
Added: trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleTableModel.java
===================================================================
--- trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleTableModel.java (rev 0)
+++ trunk/sql12/app/src/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScaleTableModel.java 2010-06-06 22:21:17 UTC (rev 5640)
@@ -0,0 +1,96 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;
+
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+import javax.swing.table.AbstractTableModel;
+import java.util.prefs.Preferences;
+
+public class DataScaleTableModel extends AbstractTableModel
+{
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(DataScaleTableModel.class);
+
+ private static final String PREF_KEY_...
[truncated message content] |