Revision: 6699
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=6699&view=rev
Author: gerdwagner
Date: 2012-10-24 20:52:53 +0000 (Wed, 24 Oct 2012)
Log Message:
-----------
Sorting can now be returned to natural order by clicking on a column header a third time. (First time is asc, second time desc and third time natural)
Modified Paths:
--------------
trunk/sql12/doc/src/main/resources/changes.txt
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/TableState.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/ButtonTableHeader.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/SortableTableModel.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/SortingListener.java
Added Paths:
-----------
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/ColumnOrder.java
Modified: trunk/sql12/doc/src/main/resources/changes.txt
===================================================================
--- trunk/sql12/doc/src/main/resources/changes.txt 2012-10-24 19:51:59 UTC (rev 6698)
+++ trunk/sql12/doc/src/main/resources/changes.txt 2012-10-24 20:52:53 UTC (rev 6699)
@@ -8,6 +8,8 @@
Enhancements:
+Sorting can now be returned to natural order by clicking on a column header a third time. (First time is asc, second time desc and third time natural)
+
Execution time passed is shown during SQL execution.
Session tabs can be detached in separate windows. The tabs can be arbitrarily moved between the main and separated windows using drag and drop.
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/TableState.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/TableState.java 2012-10-24 19:51:59 UTC (rev 6698)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/TableState.java 2012-10-24 20:52:53 UTC (rev 6699)
@@ -1,6 +1,6 @@
package net.sourceforge.squirrel_sql.fw.datasetviewer;
-import net.sourceforge.squirrel_sql.fw.gui.SortableTable;
+import net.sourceforge.squirrel_sql.fw.gui.ColumnOrder;
import net.sourceforge.squirrel_sql.fw.gui.SortableTableModel;
import javax.swing.*;
@@ -14,7 +14,7 @@
private boolean _applySorting;
private int _sortedColumn;
- private boolean _sortedAscending;
+ private ColumnOrder _columnOrder;
private Rectangle _visibleRect;
private HashMap<Integer, Integer> _columnWidthsByModelIndex = new HashMap<Integer, Integer>();
private HashMap<Integer, Integer> _columnIndexByModelIndex = new HashMap<Integer, Integer>();
@@ -27,7 +27,7 @@
{
_applySorting = true;
_sortedColumn = ((SortableTableModel)table.getModel()).getSortedColumn();
- _sortedAscending = ((SortableTableModel)table.getModel()).isSortedAscending();
+ _columnOrder = ((SortableTableModel)table.getModel()).getColumnOrder();
}
@@ -78,7 +78,7 @@
{
if(-1 != _sortedColumn)
{
- ((SortableTableModel)table.getModel()).sortByColumn(_sortedColumn, _sortedAscending);
+ ((SortableTableModel)table.getModel()).sortByColumn(_sortedColumn, _columnOrder);
}
}
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/ButtonTableHeader.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/ButtonTableHeader.java 2012-10-24 19:51:59 UTC (rev 6698)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/ButtonTableHeader.java 2012-10-24 20:52:53 UTC (rev 6699)
@@ -117,27 +117,31 @@
_sortingListener = new SortingListener()
{
@Override
- public void sortingDone(int modelColumnIx, boolean ascending)
+ public void sortingDone(int modelColumnIx, ColumnOrder columnOrder)
{
- onSortingDone(modelColumnIx, ascending);
+ onSortingDone(modelColumnIx, columnOrder);
}
};
}
- private void onSortingDone(int modelColumnIx, boolean ascending)
+ private void onSortingDone(int modelColumnIx, ColumnOrder columnOrder)
{
int viewColumnIndex = getViewColumnIndex(modelColumnIx);
- if (ascending)
+ if (ColumnOrder.ASC == columnOrder)
{
_currentSortedColumnIcon = s_ascIcon;
}
- else
+ else if (ColumnOrder.DESC == columnOrder)
{
_currentSortedColumnIcon = s_descIcon;
}
+ else
+ {
+ _currentSortedColumnIcon = null;
+ }
_currentlySortedModelIdx = modelColumnIx;
_pressedViewColumnIdx = viewColumnIndex;
@@ -320,7 +324,14 @@
Rectangle2D bounds = headerFontMetrics.getStringBounds("" + column.getHeaderValue(), headerComp.getGraphics());
- newWidth = Math.max(newWidth, bounds.getBounds().width);
+ int width = bounds.getBounds().width;
+ if(-1 != _currentlySortedModelIdx && colIx == getViewColumnIndex(_currentlySortedModelIdx) && null != _currentSortedColumnIcon)
+ {
+ width += _currentSortedColumnIcon.getIconWidth();
+ }
+
+
+ newWidth = Math.max(newWidth, width);
}
@@ -438,14 +449,18 @@
&& tm instanceof SortableTableModel)
{
((SortableTableModel) tm).sortByColumn(column);
- if (((SortableTableModel)tm).isSortedAscending())
+ if (ColumnOrder.ASC == ((SortableTableModel)tm).getColumnOrder())
{
_currentSortedColumnIcon = s_ascIcon;
}
- else
+ else if (ColumnOrder.DESC == ((SortableTableModel)tm).getColumnOrder())
{
_currentSortedColumnIcon = s_descIcon;
}
+ else
+ {
+ _currentSortedColumnIcon = null;
+ }
_currentlySortedModelIdx = column;
}
repaint();
Added: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/ColumnOrder.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/ColumnOrder.java (rev 0)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/ColumnOrder.java 2012-10-24 20:52:53 UTC (rev 6699)
@@ -0,0 +1,18 @@
+package net.sourceforge.squirrel_sql.fw.gui;
+
+public enum ColumnOrder
+{
+ NATURAL, ASC, DESC;
+
+ public ColumnOrder next()
+ {
+ switch(this)
+ {
+ case NATURAL: return ASC;
+ case ASC: return DESC;
+ case DESC: return NATURAL;
+ default: throw new IllegalStateException("Unknown ColumnOrder " + this);
+ }
+
+ }
+}
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/SortableTableModel.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/SortableTableModel.java 2012-10-24 19:51:59 UTC (rev 6698)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/SortableTableModel.java 2012-10-24 20:52:53 UTC (rev 6699)
@@ -24,7 +24,6 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
-import java.util.List;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
@@ -41,7 +40,7 @@
/** Column currently being sorted by. -1 means unsorted. */
private int _sortedColumn = -1;
- private boolean _ascending;
+ private ColumnOrder _columnOrder = ColumnOrder.NATURAL;
/** The actual model that this model is wrapped around. */
private TableModel _actualModel;
@@ -216,15 +215,15 @@
* was last sorted and then inverted that mode. If the column was not
* the previous sorted column then it will be sorted in ascending mode.
*/
- public boolean sortByColumn(int column)
+ public ColumnOrder sortByColumn(int column)
{
- boolean b = true;
+ ColumnOrder newOrder = ColumnOrder.ASC;
if (column == _sortedColumn)
{
- b = !_ascending;
+ newOrder = _columnOrder.next();
}
- sortByColumn(column, b);
- return b;
+ sortByColumn(column, newOrder);
+ return newOrder;
}
/**
@@ -233,32 +232,41 @@
* @param column column to sort by
* @param ascending sort ascending if <TT>true</TT> else descending.
*/
- public void sortByColumn(int column, boolean ascending)
+ public void sortByColumn(int column, ColumnOrder newOrder)
{
_sortedColumn = column;
- _ascending = ascending;
- TableModelComparator comparator = new TableModelComparator(column, ascending);
- // Should the data be first cloned so that the sorting doesn't take place
- // on the array that is used in getValue()
- // TODO: This is a must if sorting is done in a thread! ??
- Arrays.sort(_indexes, comparator);
- fireTableDataChanged();
- fireSortingListeners(column, ascending);
+ _columnOrder = newOrder;
+ if (ColumnOrder.NATURAL != newOrder)
+ {
+ TableModelComparator comparator = new TableModelComparator(column, newOrder);
+ // Should the data be first cloned so that the sorting doesn't take place
+ // on the array that is used in getValue()
+ Arrays.sort(_indexes, comparator);
+ }
+ else
+ {
+ for (int i = 0; i < _indexes.length; i++)
+ {
+ _indexes[i] = i;
+ }
+ }
+ fireTableDataChanged();
+ fireSortingListeners(column, _columnOrder);
}
- private void fireSortingListeners(int column, boolean ascending)
+ private void fireSortingListeners(int column, ColumnOrder columnOrder)
{
SortingListener[] listeners = _sortingListeners.toArray(new SortingListener[_sortingListeners.size()]);
for (SortingListener listener : listeners)
{
- listener.sortingDone(column, ascending);
+ listener.sortingDone(column, columnOrder);
}
}
- public boolean isSortedAscending()
+ public ColumnOrder getColumnOrder()
{
- return _ascending;
+ return _columnOrder;
}
public void tableChanged()
@@ -267,7 +275,7 @@
if(-1 != _sortedColumn)
{
- sortByColumn(_sortedColumn, _ascending);
+ sortByColumn(_sortedColumn, _columnOrder);
}
else
{
@@ -314,24 +322,19 @@
class TableModelComparator implements Comparator<Integer>
{
- private int _iColumn;
- private int _iAscending;
- private final Collator _collator = Collator.getInstance();
- private boolean _allDataIsString = true;
+ private int _iColumn;
+ private int _iAscending;
+ private final Collator _collator = Collator.getInstance();
+ private boolean _allDataIsString = true;
- public TableModelComparator(int iColumn)
+ public TableModelComparator(int iColumn, ColumnOrder compColumnOrder)
{
- this(iColumn, true);
- }
-
- public TableModelComparator(int iColumn, boolean ascending)
- {
_iColumn = iColumn;
- if (ascending)
+ if (ColumnOrder.ASC == compColumnOrder)
{
_iAscending = 1;
}
- else
+ else if (ColumnOrder.DESC == compColumnOrder)
{
_iAscending = -1;
}
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/SortingListener.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/SortingListener.java 2012-10-24 19:51:59 UTC (rev 6698)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/SortingListener.java 2012-10-24 20:52:53 UTC (rev 6699)
@@ -2,5 +2,5 @@
public interface SortingListener
{
- void sortingDone(int modelColumnIx, boolean ascending);
+ void sortingDone(int modelColumnIx, ColumnOrder columnOrder);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|