Revision: 6712
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=6712&view=rev
Author: gerdwagner
Date: 2012-11-11 21:12:19 +0000 (Sun, 11 Nov 2012)
Log Message:
-----------
Result table search --> First step
Modified Paths:
--------------
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/IResultTab.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultFrame.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultTab.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScale.java
trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/squirrel.properties
trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/session/mainpanel/I18NStrings.properties
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/DataSetViewerTablePanel.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/PopupEditableIOPanel.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/cellcomponent/CellComponentFactory.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/resources/LibraryResources.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/util/StringUtilities.java
trunk/sql12/fw/src/main/resources/net/sourceforge/squirrel_sql/fw/resources/LibraryResources.properties
Added Paths:
-----------
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/QueryInfoPanel.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/TabButton.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetFindPanel.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetFindPanelController.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetFindPanelListener.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetViewerFindDecorator.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DefaultFindService.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/FindMarkColor.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/FindService.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/FindServiceCellRendererDecorator.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/FindServiceRenderCallBack.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/FindTrace.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/TableTraverser.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/util/SquirrelConstants.java
trunk/sql12/fw/src/main/resources/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/
trunk/sql12/fw/src/main/resources/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/I18NStrings.properties
trunk/sql12/fw/src/main/resources/net/sourceforge/squirrel_sql/fw/resources/images/hide.png
trunk/sql12/fw/src/main/resources/net/sourceforge/squirrel_sql/fw/resources/images/hide_sel.png
trunk/sql12/fw/src/main/resources/net/sourceforge/squirrel_sql/fw/resources/images/marked_to_new_table.png
trunk/sql12/fw/src/main/resources/net/sourceforge/squirrel_sql/fw/resources/images/table_clean.png
trunk/sql12/fw/src/main/resources/net/sourceforge/squirrel_sql/fw/resources/images/table_marked.png
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java 2012-11-07 18:17:21 UTC (rev 6711)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -17,10 +17,11 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-import java.net.URL;
import net.sourceforge.squirrel_sql.fw.util.Resources;
+import java.net.URL;
+
public class SquirrelResources extends Resources
{
public final static int S_SPLASH_IMAGE_BACKGROUND = 0xAEB0C5;
@@ -29,7 +30,7 @@
private final String _defaultsPath;
- public interface IMenuResourceKeys
+ public interface IMenuResourceKeys
{
String ALIASES = "aliases";
String CLOSE_ALL_SQL_RESULTS = "close_all_sql_results";
@@ -93,6 +94,13 @@
String AGG_XY = "aggXy";
String AGG_MIN = "aggMin";
String AGG_MAX = "aggMax";
+
+ String ARROW_DOWN = "next_nav";
+ String ARROW_UP = "prev_nav";
+
+ String UNMARK = "unmark";
+ String TABLE = "table";
+ String HIDE = "hide";
}
public SquirrelResources(String rsrcBundleBaseName)
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/IResultTab.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/IResultTab.java 2012-11-07 18:17:21 UTC (rev 6711)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/IResultTab.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -87,4 +87,6 @@
IIdentifier getIdentifier();
TableState getResultSortableTableState();
+
+ void toggleShowFindPanel();
}
\ No newline at end of file
Added: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/QueryInfoPanel.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/QueryInfoPanel.java (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/QueryInfoPanel.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -0,0 +1,103 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel;
+
+import net.sourceforge.squirrel_sql.client.session.SQLExecutionInfo;
+import net.sourceforge.squirrel_sql.fw.gui.MultipleLineLabel;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+import net.sourceforge.squirrel_sql.fw.util.StringUtilities;
+
+import javax.swing.*;
+import java.awt.*;
+import java.text.NumberFormat;
+
+public class QueryInfoPanel extends JPanel
+{
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(QueryInfoPanel.class);
+
+ private MultipleLineLabel _queryLbl = new MultipleLineLabel();
+ private JLabel _rowCountLbl = new JLabel();
+ private JLabel _executedLbl = new JLabel();
+ private JLabel _elapsedLbl = new JLabel();
+
+ QueryInfoPanel()
+ {
+ createGUI();
+ }
+
+ void load(int rowCount,
+ SQLExecutionInfo exInfo)
+ {
+ _queryLbl.setText(StringUtilities.cleanString(exInfo.getSQL()));
+ _rowCountLbl.setText(String.valueOf(rowCount));
+ _executedLbl.setText(exInfo.getSQLExecutionStartTime().toString());
+ _elapsedLbl.setText(formatElapsedTime(exInfo));
+ }
+
+ private String formatElapsedTime(SQLExecutionInfo exInfo)
+ {
+ final NumberFormat nbrFmt = NumberFormat.getNumberInstance();
+ double executionLength = exInfo.getSQLExecutionElapsedMillis() / 1000.0;
+ double outputLength = exInfo.getResultsProcessingElapsedMillis() / 1000.0;
+
+ String totalTime = nbrFmt.format(executionLength + outputLength);
+ String queryTime = nbrFmt.format(executionLength);
+ String outputTime = nbrFmt.format(outputLength);
+
+ // i18n[ResultTab.elapsedTime=Total: {0}, SQL query: {1}, Building output: {2}]
+ String elapsedTime =
+ s_stringMgr.getString("ResultTab.elapsedTime",
+ new String[] { totalTime,
+ queryTime,
+ outputTime});
+ return elapsedTime;
+ }
+
+ private void createGUI()
+ {
+ setLayout(new GridBagLayout());
+ GridBagConstraints gbc = new GridBagConstraints();
+
+ gbc.anchor = GridBagConstraints.NORTHWEST;
+ gbc.gridwidth = 1;
+ gbc.weightx = 0;
+
+ gbc.gridx = 0;
+ gbc.gridy = 0;
+ gbc.insets = new Insets(5, 10, 5, 10);
+ gbc.fill = GridBagConstraints.HORIZONTAL;
+ // i18n[ResultTab.executedLabel=Executed:]
+ String label = s_stringMgr.getString("ResultTab.executedLabel");
+ add(new JLabel(label, SwingConstants.RIGHT), gbc);
+
+ ++gbc.gridy;
+ // i18n[ResultTab.rowCountLabel=Row Count:]
+ label = s_stringMgr.getString("ResultTab.rowCountLabel");
+ add(new JLabel(label, SwingConstants.RIGHT), gbc);
+
+ ++gbc.gridy;
+ // i18n[ResultTab.statementLabel=SQL:]
+ label = s_stringMgr.getString("ResultTab.statementLabel");
+ add(new JLabel(label, SwingConstants.RIGHT), gbc);
+
+ ++gbc.gridy;
+ // i18n[ResultTab.elapsedTimeLabel=Elapsed Time (seconds):]
+ label = s_stringMgr.getString("ResultTab.elapsedTimeLabel");
+ add(new JLabel(label, SwingConstants.RIGHT), gbc);
+
+ gbc.gridwidth = GridBagConstraints.REMAINDER;
+ gbc.weightx = 1;
+
+ gbc.gridx = 1;
+ gbc.gridy = 0;
+ add(_executedLbl, gbc);
+
+ ++gbc.gridy;
+ add(_rowCountLbl, gbc);
+
+ ++gbc.gridy;
+ add(_queryLbl, gbc);
+
+ ++gbc.gridy;
+ add(_elapsedLbl, gbc);
+ }
+}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultFrame.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultFrame.java 2012-11-07 18:17:21 UTC (rev 6711)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultFrame.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -61,6 +61,7 @@
private ResultTabFactory _resultTabFactory;
private ResultFrameListener _resultFrameListener;
private JButton _btnReturnToTab;
+ private TabButton _btnToggleFind;
private JCheckBox _chkOnTop;
private JButton _btnReRun;
private JPanel _centerPanel;
@@ -117,12 +118,26 @@
}
});
+ _btnToggleFind.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onFind();
+ }
+ });
+
if (false == isOnRerun)
{
showFrame(this, false);
}
}
+ private void onFind()
+ {
+ _tab.toggleShowFindPanel();
+ }
+
private void onRerun()
{
_btnReturnToTab.setEnabled(false);
@@ -265,10 +280,15 @@
gbc = new GridBagConstraints(2,0,1,1,1,0,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0,5,0,5), 0,0);
pnlButtons.add(new JPanel(), gbc);
- ImageIcon icon = session.getApplication().getResources().getIcon(SquirrelResources.IImageNames.RERUN);
- _btnReRun = new JButton(icon);
+ ImageIcon iconFind = session.getApplication().getResources().getIcon(SquirrelResources.IImageNames.FIND);
+ _btnToggleFind = new TabButton(iconFind);
+ gbc = new GridBagConstraints(3,0,1,1,0,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0);
+ pnlButtons.add(_btnToggleFind, gbc);
+
+ ImageIcon iconReRun = session.getApplication().getResources().getIcon(SquirrelResources.IImageNames.RERUN);
+ _btnReRun = new TabButton(iconReRun);
_btnReRun.setToolTipText(s_stringMgr.getString("ResultFrame.rerun"));
- gbc = new GridBagConstraints(3,0,1,1,0,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,5,0,5), 0,0);
+ gbc = new GridBagConstraints(4,0,1,1,0,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,5), 0,0);
pnlButtons.add(_btnReRun, gbc);
return pnlButtons;
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultTab.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultTab.java 2012-11-07 18:17:21 UTC (rev 6711)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultTab.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -24,14 +24,10 @@
*/
import java.awt.BorderLayout;
import java.awt.Component;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
import java.awt.GridLayout;
-import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
-import java.text.NumberFormat;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
@@ -40,7 +36,7 @@
import net.sourceforge.squirrel_sql.client.session.*;
import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.OverviewCtrl;
import net.sourceforge.squirrel_sql.fw.datasetviewer.*;
-import net.sourceforge.squirrel_sql.fw.gui.MultipleLineLabel;
+import net.sourceforge.squirrel_sql.fw.datasetviewer.tablefind.DataSetViewerFindDecorator;
import net.sourceforge.squirrel_sql.fw.id.IHasIdentifier;
import net.sourceforge.squirrel_sql.fw.id.IIdentifier;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
@@ -52,34 +48,35 @@
import net.sourceforge.squirrel_sql.client.gui.builders.UIFactory;
import net.sourceforge.squirrel_sql.client.session.properties.SessionProperties;
import net.sourceforge.squirrel_sql.fw.util.Utilities;
+import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
+import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
public class ResultTab extends JPanel implements IHasIdentifier, IResultTab
{
- private static final long serialVersionUID = 1L;
-
/** Uniquely identifies this ResultTab. */
private IIdentifier _id;
/** Current session. */
- transient private ISession _session;
+ private ISession _session;
/** SQL Execution information. */
- transient private SQLExecutionInfo _exInfo;
+ private SQLExecutionInfo _exInfo;
/** Panel displaying the SQL results. */
- transient private IDataSetViewer _resultSetOutput;
+ private DataSetViewerFindDecorator _resultSetOutput;
/** Panel displaying the SQL results meta data. */
- transient private IDataSetViewer _metaDataOutput;
+ private IDataSetViewer _metaDataOutput;
/** Scroll pane for <TT>_resultSetOutput</TT>. */
- private JScrollPane _resultSetSp = new JScrollPane();
+ // SCROLL
+ // private JScrollPane _resultSetSp = new JScrollPane();
/** Scroll pane for <TT>_metaDataOutput</TT>. */
private JScrollPane _metaDataSp = new JScrollPane();
/** Tabbed pane containing the SQL results the the results meta data. */
- private JTabbedPane _tp;
+ private JTabbedPane _tabResultTabs;
/** <TT>SQLExecuterPanel</TT> that this tab is showing results for. */
private SQLResultExecuterPanelFacade _sqlResultExecuterPanelFacade;
@@ -96,15 +93,19 @@
/** Listener to the sessions properties. */
private PropertyChangeListener _propsListener;
- private boolean _allowEditing;
+ private boolean _allowEditing;
+
+ private IDataSetUpdateableTableModel _creator;
+
+ private ResultSetDataSet _rsds;
- transient private IDataSetUpdateableTableModel _creator;
-
- transient private ResultSetDataSet _rsds;
-
/** Internationalized strings for this class. */
- private static final StringManager s_stringMgr =
- StringManagerFactory.getStringManager(ResultTab.class);
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(ResultTab.class);
+
+ private static ILogger s_log = LoggerController.createLogger(ResultTab.class);
+
+
+
private ResultTabListener _resultTabListener;
/**
@@ -169,7 +170,8 @@
if (_allowEditing)
{
- _resultSetOutput = BaseDataSetViewerDestination.getInstance(props.getSQLResultsOutputClassName(), _creator, new DefaultDataModelImplementationDetails(_session));
+ IDataSetViewer dataSetViewer = BaseDataSetViewerDestination.getInstance(props.getSQLResultsOutputClassName(), _creator, new DefaultDataModelImplementationDetails(_session));
+ _resultSetOutput = new DataSetViewerFindDecorator(dataSetViewer, _session.getApplication().getMessageHandler());
}
else
@@ -179,13 +181,16 @@
// and it becomes difficult to know which table (or tables!) an
// edited column belongs to. Therefore limit the output
// to be read-only
- _resultSetOutput = BaseDataSetViewerDestination.getInstance(
- props.getReadOnlySQLResultsOutputClassName(), null, new DefaultDataModelImplementationDetails(_session));
+ IDataSetViewer dataSetViewer = BaseDataSetViewerDestination.getInstance(
+ props.getReadOnlySQLResultsOutputClassName(), null, new DefaultDataModelImplementationDetails(_session));
+
+ _resultSetOutput = new DataSetViewerFindDecorator(dataSetViewer, _session.getApplication().getMessageHandler());
}
- _resultSetSp.setViewportView(_resultSetOutput.getComponent());
- _resultSetSp.setRowHeader(null);
+ // SCROLL
+ // _resultSetSp.setViewportView(_resultSetOutput.getComponent());
+ // _resultSetSp.setRowHeader(null);
if (_session.getProperties().getShowResultsMetaData())
{
@@ -238,10 +243,10 @@
_sql = StringUtilities.cleanString(exInfo.getSQL());
// Display the result set.
- _resultSetOutput.show(rsds, null);
+ _resultSetOutput.getDataSetViewer().show(rsds, null);
_rsds = rsds;
- final int rowCount = _resultSetOutput.getRowCount();
+ final int rowCount = _resultSetOutput.getDataSetViewer().getRowCount();
final int maxRows =_exInfo.getMaxRows();
String escapedSql = Utilities.escapeHtmlChars(_sql);
@@ -279,7 +284,7 @@
}
if (_resultSetOutput != null)
{
- _resultSetOutput.clear();
+ _resultSetOutput.getDataSetViewer().clear();
}
_exInfo = null;
_currentSqlLbl.setText("");
@@ -320,7 +325,7 @@
*/
public void closeTab()
{
- add(_tp, BorderLayout.CENTER);
+ add(_tabResultTabs, BorderLayout.CENTER);
_sqlResultExecuterPanelFacade.closeResultTab(this);
}
@@ -329,13 +334,13 @@
*/
public void returnToTabbedPane()
{
- add(_tp, BorderLayout.CENTER);
+ add(_tabResultTabs, BorderLayout.CENTER);
_sqlResultExecuterPanelFacade.returnToTabbedPane(this);
}
public Component getOutputComponent()
{
- return _tp;
+ return _tabResultTabs;
}
/**
@@ -357,7 +362,7 @@
|| evt.getPropertyName().equals(
SessionProperties.IPropertyNames.SQL_RESULTS_TAB_PLACEMENT))
{
- _tp.setTabPlacement(props.getSQLResultsTabPlacement());
+ _tabResultTabs.setTabPlacement(props.getSQLResultsTabPlacement());
}
}
@@ -370,15 +375,20 @@
{
if (_allowEditing)
{
- TableState resultSortableTableState = getTableState(_resultSetOutput);
+ TableState resultSortableTableState = getTableState(_resultSetOutput.getDataSetViewer());
- _resultSetOutput = BaseDataSetViewerDestination.getInstance(SessionProperties.IDataSetDestinations.EDITABLE_TABLE, _creator, new DefaultDataModelImplementationDetails(_session));
- _resultSetSp.setViewportView(_resultSetOutput.getComponent());
- _resultSetSp.setRowHeader(null);
+ IDataSetViewer dataSetViewer = BaseDataSetViewerDestination.getInstance(SessionProperties.IDataSetDestinations.EDITABLE_TABLE, _creator, new DefaultDataModelImplementationDetails(_session));
+ // _resultSetOutput = new DataSetViewerFindDecorator(dataSetViewer);
+ _resultSetOutput.replaceDataSetViewer(dataSetViewer);
+
+ // SCROLL
+ // _resultSetSp.setViewportView(_resultSetOutput.getComponent());
+ // _resultSetSp.setRowHeader(null);
+
_rsds.resetCursor();
- _resultSetOutput.show(_rsds, null);
+ _resultSetOutput.getDataSetViewer().show(_rsds, null);
- restoreTableState(resultSortableTableState, _resultSetOutput);
+ restoreTableState(resultSortableTableState, _resultSetOutput.getDataSetViewer());
}
else
{
@@ -393,15 +403,21 @@
String readOnlyOutput = props.getReadOnlySQLResultsOutputClassName();
- TableState resultSortableTableState = getTableState(_resultSetOutput);
+ TableState resultSortableTableState = getTableState(_resultSetOutput.getDataSetViewer());
- _resultSetOutput = BaseDataSetViewerDestination.getInstance(readOnlyOutput, _creator, new DefaultDataModelImplementationDetails(_session));
- _resultSetSp.setViewportView(_resultSetOutput.getComponent());
- _resultSetSp.setRowHeader(null);
+ IDataSetViewer dataSetViewer = BaseDataSetViewerDestination.getInstance(readOnlyOutput, _creator, new DefaultDataModelImplementationDetails(_session));
+ // _resultSetOutput = new DataSetViewerFindDecorator(dataSetViewer);
+ _resultSetOutput.replaceDataSetViewer(dataSetViewer);
+
+
+ // SCROLL
+ // _resultSetSp.setViewportView(_resultSetOutput.getComponent());
+ // _resultSetSp.setRowHeader(null);
+
_rsds.resetCursor();
- _resultSetOutput.show(_rsds, null);
+ _resultSetOutput.getDataSetViewer().show(_rsds, null);
- restoreTableState(resultSortableTableState, _resultSetOutput);
+ restoreTableState(resultSortableTableState, _resultSetOutput.getDataSetViewer());
}
}
catch (DataSetException e)
@@ -435,26 +451,27 @@
setLayout(new BorderLayout());
int sqlResultsTabPlacement = _session.getProperties().getSQLResultsTabPlacement();
- _tp = UIFactory.getInstance().createTabbedPane(sqlResultsTabPlacement);
+ _tabResultTabs = UIFactory.getInstance().createTabbedPane(sqlResultsTabPlacement);
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
panel2.setLayout(new GridLayout(1, 3, 0, 0));
panel2.add(new TabButton(new RerunAction(_session.getApplication())));
+ panel2.add(new TabButton(new FindInResultAction(_session.getApplication())));
panel2.add(new TabButton(new CreateResultTabFrameAction(_session.getApplication())));
panel2.add(new TabButton(new CloseAction()));
panel1.setLayout(new BorderLayout());
panel1.add(panel2, BorderLayout.EAST);
panel1.add(_currentSqlLbl, BorderLayout.CENTER);
add(panel1, BorderLayout.NORTH);
- add(_tp, BorderLayout.CENTER);
+ add(_tabResultTabs, BorderLayout.CENTER);
- _resultSetSp.setBorder(BorderFactory.createEmptyBorder());
+ // SCROLL _resultSetSp.setBorder(BorderFactory.createEmptyBorder());
// i18n[ResultTab.resultsTabTitle=Results]
String resultsTabTitle =
s_stringMgr.getString("ResultTab.resultsTabTitle");
- _tp.addTab(resultsTabTitle, _resultSetSp);
+ _tabResultTabs.addTab(resultsTabTitle, _resultSetOutput.getComponent()); // SCROLL
if (_session.getProperties().getShowResultsMetaData())
{
@@ -463,7 +480,7 @@
// i18n[ResultTab.metadataTabTitle=MetaData]
String metadataTabTitle =
s_stringMgr.getString("ResultTab.metadataTabTitle");
- _tp.addTab(metadataTabTitle, _metaDataSp);
+ _tabResultTabs.addTab(metadataTabTitle, _metaDataSp);
}
final JScrollPane sp = new JScrollPane(_queryInfoPanel);
@@ -472,19 +489,19 @@
// i18n[ResultTab.infoTabTitle=Info]
String infoTabTitle =
s_stringMgr.getString("ResultTab.infoTabTitle");
- _tp.addTab(infoTabTitle, sp);
+ _tabResultTabs.addTab(infoTabTitle, sp);
- final int overViewIx = _tp.getTabCount();
+ final int overViewIx = _tabResultTabs.getTabCount();
final OverviewCtrl ctrl = new OverviewCtrl(_session);
- _tp.addTab(ctrl.getTitle(), ctrl.getPanel());
+ _tabResultTabs.addTab(ctrl.getTitle(), ctrl.getPanel());
- _tp.addChangeListener(new ChangeListener()
+ _tabResultTabs.addChangeListener(new ChangeListener()
{
- @Override
+ @Override
public void stateChanged(ChangeEvent e)
{
- if (overViewIx == _tp.getSelectedIndex())
+ if (overViewIx == _tabResultTabs.getSelectedIndex())
{
ctrl.init(_rsds);
}
@@ -493,19 +510,8 @@
}
- private final class TabButton extends JButton
+ private class CloseAction extends SquirrelAction
{
- TabButton(Action action)
- {
- super(action);
- setMargin(new Insets(0, 0, 0, 0));
- setBorderPainted(false);
- setText("");
- }
- }
-
- private class CloseAction extends SquirrelAction
- {
CloseAction()
{
super(
@@ -545,7 +551,30 @@
}
}
+ public class FindInResultAction extends SquirrelAction
+ {
+ FindInResultAction(IApplication app)
+ {
+ super(app, app.getResources());
+ }
+ public void actionPerformed(ActionEvent evt)
+ {
+ toggleShowFindPanel();
+ }
+ }
+
+ @Override
+ public void toggleShowFindPanel()
+ {
+ if(false == _resultSetOutput.toggleShowFindPanel())
+ {
+ _session.getApplication().getMessageHandler().showWarningMessage(s_stringMgr.getString("ResultTab.tableSearchNotSupported"));
+ s_log.warn(s_stringMgr.getString("ResultTab.tableSearchNotSupported"));
+ }
+ }
+
+
/**
* @see net.sourceforge.squirrel_sql.client.session.mainpanel.IResultTab#getIdentifier()
*/
@@ -557,104 +586,13 @@
@Override
public TableState getResultSortableTableState()
{
- return _resultSetOutput.getResultSortableTableState();
+ return _resultSetOutput.getDataSetViewer().getResultSortableTableState();
}
public void applyResultSortableTableState(TableState sortableTableState)
{
- _resultSetOutput.applyResultSortableTableState(sortableTableState);
+ _resultSetOutput.getDataSetViewer().applyResultSortableTableState(sortableTableState);
}
- private static class QueryInfoPanel extends JPanel
- {
-
- private MultipleLineLabel _queryLbl = new MultipleLineLabel();
- private JLabel _rowCountLbl = new JLabel();
- private JLabel _executedLbl = new JLabel();
- private JLabel _elapsedLbl = new JLabel();
-
- QueryInfoPanel()
- {
- super();
- createGUI();
- }
-
- void load(int rowCount,
- SQLExecutionInfo exInfo)
- {
- _queryLbl.setText(StringUtilities.cleanString(exInfo.getSQL()));
- _rowCountLbl.setText(String.valueOf(rowCount));
- _executedLbl.setText(exInfo.getSQLExecutionStartTime().toString());
- _elapsedLbl.setText(formatElapsedTime(exInfo));
- }
-
- private String formatElapsedTime(SQLExecutionInfo exInfo)
- {
- final NumberFormat nbrFmt = NumberFormat.getNumberInstance();
- double executionLength = exInfo.getSQLExecutionElapsedMillis() / 1000.0;
- double outputLength = exInfo.getResultsProcessingElapsedMillis() / 1000.0;
-
- String totalTime = nbrFmt.format(executionLength + outputLength);
- String queryTime = nbrFmt.format(executionLength);
- String outputTime = nbrFmt.format(outputLength);
-
- // i18n[ResultTab.elapsedTime=Total: {0}, SQL query: {1}, Building output: {2}]
- String elapsedTime =
- s_stringMgr.getString("ResultTab.elapsedTime",
- new String[] { totalTime,
- queryTime,
- outputTime});
- return elapsedTime;
- }
-
- private void createGUI()
- {
- setLayout(new GridBagLayout());
- GridBagConstraints gbc = new GridBagConstraints();
-
- gbc.anchor = GridBagConstraints.NORTHWEST;
- gbc.gridwidth = 1;
- gbc.weightx = 0;
-
- gbc.gridx = 0;
- gbc.gridy = 0;
- gbc.insets = new Insets(5, 10, 5, 10);
- gbc.fill = GridBagConstraints.HORIZONTAL;
- // i18n[ResultTab.executedLabel=Executed:]
- String label = s_stringMgr.getString("ResultTab.executedLabel");
- add(new JLabel(label, SwingConstants.RIGHT), gbc);
-
- ++gbc.gridy;
- // i18n[ResultTab.rowCountLabel=Row Count:]
- label = s_stringMgr.getString("ResultTab.rowCountLabel");
- add(new JLabel(label, SwingConstants.RIGHT), gbc);
-
- ++gbc.gridy;
- // i18n[ResultTab.statementLabel=SQL:]
- label = s_stringMgr.getString("ResultTab.statementLabel");
- add(new JLabel(label, SwingConstants.RIGHT), gbc);
-
- ++gbc.gridy;
- // i18n[ResultTab.elapsedTimeLabel=Elapsed Time (seconds):]
- label = s_stringMgr.getString("ResultTab.elapsedTimeLabel");
- add(new JLabel(label, SwingConstants.RIGHT), gbc);
-
- gbc.gridwidth = GridBagConstraints.REMAINDER;
- gbc.weightx = 1;
-
- gbc.gridx = 1;
- gbc.gridy = 0;
- add(_executedLbl, gbc);
-
- ++gbc.gridy;
- add(_rowCountLbl, gbc);
-
- ++gbc.gridy;
- add(_queryLbl, gbc);
-
- ++gbc.gridy;
- add(_elapsedLbl, gbc);
- }
- }
}
Added: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/TabButton.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/TabButton.java (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/TabButton.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -0,0 +1,26 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class TabButton extends JButton
+{
+ TabButton(Action action)
+ {
+ super(action);
+ setMargin(new Insets(0, 0, 0, 0));
+ setBorderPainted(false);
+ setText("");
+ }
+
+ TabButton()
+ {
+ this((Action) null);
+ }
+
+ public TabButton(ImageIcon icon)
+ {
+ this((Action) null);
+ setIcon(icon);
+ }
+}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScale.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScale.java 2012-11-07 18:17:21 UTC (rev 6711)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScale.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -1,6 +1,7 @@
package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;
import net.sourceforge.squirrel_sql.fw.datasetviewer.ColumnDisplayDefinition;
+import net.sourceforge.squirrel_sql.fw.util.SquirrelConstants;
import javax.swing.*;
import java.awt.*;
@@ -188,7 +189,7 @@
{
if(btn == intervalButtonClicked)
{
- btn.setBackground(Color.yellow);
+ btn.setBackground(SquirrelConstants.TRACE_COLOR);
}
else
{
Modified: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/squirrel.properties
===================================================================
--- trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/squirrel.properties 2012-11-07 18:17:21 UTC (rev 6711)
+++ trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/squirrel.properties 2012-11-11 21:12:19 UTC (rev 6712)
@@ -81,7 +81,11 @@
aggMin.image=aggmin.png
aggMax.image=aggmax.png
+next_nav.image=eclipse/next_nav.gif
+prev_nav.image=eclipse/prev_nav.gif
+
+
########
# icons displayed in the drivers list indicating whether
# or not driver could be loaded.
@@ -545,6 +549,10 @@
action.net.sourceforge.squirrel_sql.client.session.mainpanel.ResultTab$RerunAction.name=Rerun
action.net.sourceforge.squirrel_sql.client.session.mainpanel.ResultTab$RerunAction.tooltip=Rerun this tab's SQL Query
+action.net.sourceforge.squirrel_sql.client.session.mainpanel.ResultTab$FindInResultAction.image=find.gif
+action.net.sourceforge.squirrel_sql.client.session.mainpanel.ResultTab$FindInResultAction.name=Find in result
+action.net.sourceforge.squirrel_sql.client.session.mainpanel.ResultTab$FindInResultAction.tooltip=Find in this tab's result
+
action.net.sourceforge.squirrel_sql.client.session.mainpanel.ErrorPanel$CloseAction.image=jc/close.gif
action.net.sourceforge.squirrel_sql.client.session.mainpanel.ErrorPanel$CloseAction.name=Close
action.net.sourceforge.squirrel_sql.client.session.mainpanel.ErrorPanel$CloseAction.tooltip=Close Tab
Modified: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/session/mainpanel/I18NStrings.properties
===================================================================
--- trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/session/mainpanel/I18NStrings.properties 2012-11-07 18:17:21 UTC (rev 6711)
+++ trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/session/mainpanel/I18NStrings.properties 2012-11-11 21:12:19 UTC (rev 6712)
@@ -89,3 +89,5 @@
SQLResultExecuterPanel.executingFor=Elapsed execution time:
SQLResultExecuterPanel.execMillis=milli seconds
+ResultTab.tableSearchNotSupported=Table search is not supported for this result display
+
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/DataSetViewerTablePanel.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/DataSetViewerTablePanel.java 2012-11-07 18:17:21 UTC (rev 6711)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/DataSetViewerTablePanel.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -43,6 +43,7 @@
import net.sourceforge.squirrel_sql.fw.datasetviewer.cellcomponent.CellComponentFactory;
import net.sourceforge.squirrel_sql.fw.datasetviewer.cellcomponent.RestorableJTextField;
+import net.sourceforge.squirrel_sql.fw.datasetviewer.tablefind.*;
import net.sourceforge.squirrel_sql.fw.gui.ButtonTableHeader;
import net.sourceforge.squirrel_sql.fw.gui.RectangleSelectionHandler;
import net.sourceforge.squirrel_sql.fw.gui.SortableTableModel;
@@ -78,7 +79,6 @@
public DataSetViewerTablePanel()
{
- super();
}
public void init(IDataSetUpdateableModel updateableModel)
@@ -239,13 +239,17 @@
throw new IllegalStateException("No col with header: " + header);
}
+ public net.sourceforge.squirrel_sql.fw.datasetviewer.tablefind.FindService createFindService()
+ {
+ return new DefaultFindService(_table);
+ }
+
/*
* The JTable used for displaying all DB ResultSet info.
*/
protected final class MyJTable extends JTable
{
- private static final long serialVersionUID = 1L;
private final int _multiplier;
private static final String data = "THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG";
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/PopupEditableIOPanel.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/PopupEditableIOPanel.java 2012-11-07 18:17:21 UTC (rev 6711)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/PopupEditableIOPanel.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -18,8 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Dimension;
+ import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
@@ -50,10 +49,7 @@
import net.sourceforge.squirrel_sql.fw.datasetviewer.cellcomponent.RestorableJTextArea;
import net.sourceforge.squirrel_sql.fw.gui.TextPopupMenu;
import net.sourceforge.squirrel_sql.fw.gui.action.BaseAction;
-import net.sourceforge.squirrel_sql.fw.util.IOUtilities;
-import net.sourceforge.squirrel_sql.fw.util.IOUtilitiesImpl;
-import net.sourceforge.squirrel_sql.fw.util.StringManager;
-import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+ import net.sourceforge.squirrel_sql.fw.util.*;
/**
* @author gwg
@@ -154,7 +150,7 @@
if (isEditable) {
_ta.setEditable(true);
- _ta.setBackground(Color.yellow); // tell user it is editable
+ _ta.setBackground(SquirrelConstants.CELL_EDITABLE_COLOR); // tell user it is editable
}
else {
_ta.setEditable(false);
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/cellcomponent/CellComponentFactory.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/cellcomponent/CellComponentFactory.java 2012-11-07 18:17:21 UTC (rev 6711)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/cellcomponent/CellComponentFactory.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -1,6 +1,5 @@
package net.sourceforge.squirrel_sql.fw.datasetviewer.cellcomponent;
-import java.awt.Color;
import java.awt.Component;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -28,6 +27,7 @@
import net.sourceforge.squirrel_sql.fw.dialects.DialectType;
import net.sourceforge.squirrel_sql.fw.gui.OkJPanel;
import net.sourceforge.squirrel_sql.fw.sql.ISQLDatabaseMetaData;
+import net.sourceforge.squirrel_sql.fw.util.SquirrelConstants;
import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
@@ -273,7 +273,7 @@
_dataTypeObject.isEditableInPopup(value) == true) {
// Use a CYAN background to indicate that the cell is
// editable in the popup
- setBackground(Color.cyan);
+ setBackground(SquirrelConstants.MULTI_LINE_CELL_COLOR);
}
else {
// since the previous entry might have changed the color,
@@ -379,7 +379,7 @@
// When changing the backgroud color, it helps to set the inner component's border to zero. Otherwise,
// the border can obscure the text and make it hard to see. This is especially seen when using the
// kunstoff l&f.
- textField.setBackground(Color.yellow);
+ textField.setBackground(SquirrelConstants.CELL_EDITABLE_COLOR);
textField.setBorder(new EmptyBorder(0,0,0,0));
ed = new CellEditorUsingRenderer(textField, dataTypeObject);
Added: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetFindPanel.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetFindPanel.java (rev 0)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetFindPanel.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -0,0 +1,117 @@
+package net.sourceforge.squirrel_sql.fw.datasetviewer.tablefind;
+
+import net.sourceforge.squirrel_sql.fw.resources.LibraryResources;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class DataSetFindPanel extends JPanel
+{
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(DataSetFindPanel.class);
+
+ JComboBox cboMatchType;
+ JCheckBox chkCaseSensitive;
+ JTextField txtString;
+
+ JButton btnDown;
+ JButton btnUp;
+ JButton btnUnhighlightResult;
+ JButton btnHideFindPanel;
+ JButton btnHighlightFindResult;
+ JButton btnShowFoundRowsInTable;
+
+ public DataSetFindPanel()
+ {
+ setLayout(new GridBagLayout());
+
+ GridBagConstraints gbc;
+
+
+
+ gbc = new GridBagConstraints(0,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5), 0,0);
+ cboMatchType = new JComboBox(MatchTypeCboItem.values());
+ cboMatchType.setSelectedIndex(0);
+ add(cboMatchType, gbc);
+
+ gbc = new GridBagConstraints(1,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5), 0,0);
+ chkCaseSensitive = new JCheckBox(s_stringMgr.getString("DataSetFindPanel.caseSensitive"));
+ add(chkCaseSensitive, gbc);
+
+ gbc = new GridBagConstraints(2,0,1,1,1,0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5,5,5,5), 0,0);
+ txtString = new JTextField();
+ add(txtString, gbc);
+
+
+ LibraryResources rsrc = new LibraryResources();
+
+
+ gbc = new GridBagConstraints(3,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5), 0,0);
+ btnDown = new JButton(rsrc.getIcon(LibraryResources.IImageNames.TABLE_DESCENDING));
+ btnDown.setToolTipText(s_stringMgr.getString("DataSetFindPanel.findNext"));
+ btnDown.setBorder(BorderFactory.createEtchedBorder());
+ add(btnDown, gbc);
+
+ gbc = new GridBagConstraints(4,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5), 0,0);
+ btnUp = new JButton(rsrc.getIcon(LibraryResources.IImageNames.TABLE_ASCENDING));
+ btnUp.setToolTipText(s_stringMgr.getString("DataSetFindPanel.findPrevious"));
+ btnUp.setBorder(BorderFactory.createEtchedBorder());
+ add(btnUp, gbc);
+
+ gbc = new GridBagConstraints(5,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5), 0,0);
+ btnHighlightFindResult = new JButton(rsrc.getIcon(LibraryResources.IImageNames.TABLE_MARKED));
+ btnHighlightFindResult.setToolTipText(s_stringMgr.getString("DataSetFindPanel.markFindResult"));
+ btnHighlightFindResult.setBorder(BorderFactory.createEtchedBorder());
+ add(btnHighlightFindResult, gbc);
+
+ gbc = new GridBagConstraints(6,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5), 0,0);
+ btnUnhighlightResult = new JButton(rsrc.getIcon(LibraryResources.IImageNames.TABLE_CLEAN));
+ btnUnhighlightResult.setToolTipText(s_stringMgr.getString("DataSetFindPanel.unmarkFindResult"));
+ btnUnhighlightResult.setBorder(BorderFactory.createEtchedBorder());
+ add(btnUnhighlightResult, gbc);
+
+ gbc = new GridBagConstraints(7,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5), 0,0);
+ btnShowFoundRowsInTable = new JButton(rsrc.getIcon(LibraryResources.IImageNames.MARKED_TO_NEW_TABLE));
+ btnShowFoundRowsInTable.setToolTipText(s_stringMgr.getString("DataSetFindPanel.showFoundRowsInTable"));
+ btnShowFoundRowsInTable.setBorder(BorderFactory.createEtchedBorder());
+ add(btnShowFoundRowsInTable, gbc);
+
+ gbc = new GridBagConstraints(8,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5), 0,0);
+ btnHideFindPanel = new JButton(rsrc.getIcon(LibraryResources.IImageNames.HIDE));
+ btnHideFindPanel.setPressedIcon(rsrc.getIcon(LibraryResources.IImageNames.HIDE_SELECTED));
+ btnHideFindPanel.setToolTipText(s_stringMgr.getString("DataSetFindPanel.hideFind"));
+ btnHideFindPanel.setBorder(BorderFactory.createEtchedBorder());
+ add(btnHideFindPanel, gbc);
+
+ }
+
+ static enum MatchTypeCboItem
+ {
+ // i18n[DataSetFindPanel.filterCboContains=contains]
+ CONTAINS (s_stringMgr.getString("DataSetFindPanel.filterCboContains")),
+
+ // i18n[DataSetFindPanel.filterCboStartsWith=starts with]
+ STARTS_WITH (s_stringMgr.getString("DataSetFindPanel.filterCboStartsWith")),
+
+ // i18n[DataSetFindPanel.filterCboEndsWith=ends with]
+ ENDS_WITH (s_stringMgr.getString("DataSetFindPanel.filterCboEndsWith")),
+
+ // i18n[DataSetFindPanel.filterCboRegEx=regular exp]
+ REG_EX (s_stringMgr.getString("DataSetFindPanel.filterCboRegEx"));
+ private String _name;
+
+
+ MatchTypeCboItem(String name)
+ {
+ _name = name;
+ }
+
+
+ public String toString()
+ {
+ return _name;
+ }
+ }
+
+}
Added: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetFindPanelController.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetFindPanelController.java (rev 0)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetFindPanelController.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -0,0 +1,262 @@
+package net.sourceforge.squirrel_sql.fw.datasetviewer.tablefind;
+
+import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetViewerTablePanel;
+import net.sourceforge.squirrel_sql.fw.util.*;
+import org.apache.commons.lang.StringUtils;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+public class DataSetFindPanelController
+{
+
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(DataSetFindPanelController.class);
+
+
+ private DataSetFindPanel _dataSetFindPanel;
+
+ private TableTraverser _tableTraverser = new TableTraverser();
+ private DataSetViewerTablePanel _dataSetViewerTablePanel;
+ private FindService _findService;
+
+ private FindMarkColor _currentColor = new FindMarkColor(SquirrelConstants.TRACE_COLOR);
+ private FindMarkColor _traceColor = new FindMarkColor(SquirrelConstants.TRACE_COLOR_CURRENT);
+ private FindTrace _trace = new FindTrace();
+ private String _currentSearchString = null;
+ private IMessageHandler _messageHandler;
+
+ private static enum FindMode
+ {
+ FORWARD, BACKWARD, HIGHLIGHT
+ }
+
+ public DataSetFindPanelController(IMessageHandler messageHandler, final DataSetFindPanelListener dataSetFindPanelListener)
+ {
+ _messageHandler = messageHandler;
+ _dataSetFindPanel = new DataSetFindPanel();
+
+ _dataSetFindPanel.btnDown.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onFind(FindMode.FORWARD);
+ }
+ });
+
+ _dataSetFindPanel.btnUp.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onFind(FindMode.BACKWARD);
+ }
+ });
+
+ _dataSetFindPanel.btnHighlightFindResult.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onFind(FindMode.HIGHLIGHT);
+ }
+ });
+
+ _dataSetFindPanel.btnUnhighlightResult.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onUnhighlightResult();
+ }
+ });
+
+
+
+
+ _dataSetFindPanel.btnHideFindPanel.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ dataSetFindPanelListener.hideFindPanel();
+ }
+ });
+
+ }
+
+
+ public void wasHidden()
+ {
+ onUnhighlightResult();
+ }
+
+
+ private void onUnhighlightResult()
+ {
+ _trace.clear();
+ _findService.repaintAll();
+ _tableTraverser.reset();
+ }
+
+ private void onFind(FindMode findMode)
+ {
+ checkDataSetViewerPanel();
+
+ if(null == _findService)
+ {
+ _findService = _dataSetViewerTablePanel.createFindService();
+
+ _findService.setFindServiceRenderCallBack(new FindServiceRenderCallBack()
+ {
+ @Override
+ public FindMarkColor getBackgroundColor(int viewRow, int viewColumn)
+ {
+ return onGetBackgroundColor(viewRow, viewColumn);
+ }
+ });
+
+ _tableTraverser.setFindService(_findService);
+
+ }
+
+
+ String searchString = _dataSetFindPanel.txtString.getText();
+
+
+ if(false == StringUtils.equals(searchString, _currentSearchString))
+ {
+ _trace.clear();
+ _findService.repaintAll();
+ _tableTraverser.reset();
+ }
+
+ _currentSearchString = searchString;
+
+ if(null == _currentSearchString || false == _tableTraverser.hasRows() || StringUtilities.isEmpty(_currentSearchString))
+ {
+ return;
+ }
+
+ boolean matchFound = false;
+ for(int i=0; i < _tableTraverser.getCellCount(); ++i)
+ {
+ if (FindMode.FORWARD == findMode || FindMode.HIGHLIGHT == findMode)
+ {
+ _tableTraverser.forward();
+ }
+ else
+ {
+ _tableTraverser.backward();
+ }
+
+ if(matches(_currentSearchString, _findService.getViewDataAsString(_tableTraverser.getRow(), _tableTraverser.getCol())))
+ {
+ matchFound = true;
+
+ if (FindMode.HIGHLIGHT != findMode)
+ {
+ _findService.scrollToVisible(_tableTraverser.getRow(), _tableTraverser.getCol());
+ }
+
+ _findService.repaintCell(_tableTraverser.getRow(), _tableTraverser.getCol());
+
+ if (null != _trace.getCurrent())
+ {
+ _findService.repaintCell(_trace.getCurrent().x, _trace.getCurrent().y);
+ }
+ _trace.add(_tableTraverser.getRow(), _tableTraverser.getCol());
+
+ if (FindMode.HIGHLIGHT != findMode)
+ {
+ return;
+ }
+ }
+ }
+
+ if (false == matchFound)
+ {
+ _messageHandler.showMessage(s_stringMgr.getString("DataSetFindPanelController.noOccurenceFoundOf", _currentSearchString));
+ }
+
+ }
+
+
+
+ private void checkDataSetViewerPanel()
+ {
+ if(null == _dataSetViewerTablePanel)
+ {
+ throw new IllegalStateException("Find panel should not be visible when _dataSetViewerTablePanel is null");
+ }
+ }
+
+ private boolean matches(String toMatchAgainst, String viewDataAsString)
+ {
+ DataSetFindPanel.MatchTypeCboItem sel = (DataSetFindPanel.MatchTypeCboItem) _dataSetFindPanel.cboMatchType.getSelectedItem();
+
+ if(false == _dataSetFindPanel.chkCaseSensitive.isSelected())
+ {
+ if (DataSetFindPanel.MatchTypeCboItem.REG_EX != sel)
+ {
+ toMatchAgainst = toMatchAgainst.toLowerCase();
+ }
+ viewDataAsString = viewDataAsString.toLowerCase();
+ }
+
+ switch (sel)
+ {
+ case CONTAINS:
+ return viewDataAsString.contains(toMatchAgainst);
+ case STARTS_WITH:
+ return viewDataAsString.startsWith(toMatchAgainst);
+ case ENDS_WITH:
+ return viewDataAsString.endsWith(toMatchAgainst);
+ case REG_EX:
+ return viewDataAsString.matches(toMatchAgainst);
+ }
+
+ throw new IllegalArgumentException("Unknown match type " + sel);
+ }
+
+ public DataSetFindPanel getPanel()
+ {
+ return _dataSetFindPanel;
+ }
+
+
+ public void setDataSetViewerTablePanel(DataSetViewerTablePanel dataSetViewerTablePanel)
+ {
+ _dataSetViewerTablePanel = dataSetViewerTablePanel;
+ _findService = null;
+ _trace.clear();
+ }
+
+ private FindMarkColor onGetBackgroundColor(int viewRow, int viewColumn)
+ {
+ String searchString = _dataSetFindPanel.txtString.getText();
+ if(null == searchString)
+ {
+ return null;
+ }
+
+
+ if(_trace.contains(viewRow, viewColumn))
+ {
+ if (_trace.isCurrent(viewRow, viewColumn))
+ {
+ return _currentColor;
+ }
+ else
+ {
+ return _traceColor;
+ }
+ }
+ else
+ {
+ return null;
+ }
+
+ }
+
+}
Added: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetFindPanelListener.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetFindPanelListener.java (rev 0)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetFindPanelListener.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -0,0 +1,7 @@
+package net.sourceforge.squirrel_sql.fw.datasetviewer.tablefind;
+
+public interface DataSetFindPanelListener
+{
+ void hideFindPanel();
+
+}
Added: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetViewerFindDecorator.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetViewerFindDecorator.java (rev 0)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DataSetViewerFindDecorator.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -0,0 +1,127 @@
+package net.sourceforge.squirrel_sql.fw.datasetviewer.tablefind;
+
+import net.sourceforge.squirrel_sql.fw.datasetviewer.DataSetViewerTablePanel;
+import net.sourceforge.squirrel_sql.fw.datasetviewer.IDataSetViewer;
+import net.sourceforge.squirrel_sql.fw.util.IMessageHandler;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class DataSetViewerFindDecorator
+{
+ private IDataSetViewer _dataSetViewer;
+ private boolean _putTableInScrollpane;
+ private final JSplitPane _split;
+ private boolean _findPanelOpen;
+
+ private JScrollPane _scrollPane;
+ private DataSetFindPanelController _dataSetFindPanelController;
+
+
+ public DataSetViewerFindDecorator(IDataSetViewer dataSetViewer, IMessageHandler messageHandler)
+ {
+ this(dataSetViewer, true, messageHandler);
+ }
+
+ public DataSetViewerFindDecorator(IDataSetViewer dataSetViewer, boolean putTableInScrollpane, IMessageHandler messageHandler)
+ {
+ _dataSetViewer = dataSetViewer;
+ _putTableInScrollpane = putTableInScrollpane;
+
+ _split = new JSplitPane();
+ _split.setDividerSize(0);
+ _split.setOrientation(JSplitPane.VERTICAL_SPLIT);
+ _split.setDividerLocation(0);
+
+ DataSetFindPanelListener dataSetFindPanelListener = new DataSetFindPanelListener()
+ {
+ @Override
+ public void hideFindPanel()
+ {
+ toggleShowFindPanel();
+ }
+ };
+ _dataSetFindPanelController = new DataSetFindPanelController(messageHandler, dataSetFindPanelListener);
+
+ _split.setLeftComponent(_dataSetFindPanelController.getPanel());
+
+ if (_dataSetViewer instanceof DataSetViewerTablePanel)
+ {
+ _dataSetFindPanelController.setDataSetViewerTablePanel((DataSetViewerTablePanel) _dataSetViewer);
+ }
+ else
+ {
+ _split.setLeftComponent(new JPanel());
+ }
+
+
+ if (putTableInScrollpane)
+ {
+ _scrollPane = new JScrollPane();
+ _scrollPane.setBorder(BorderFactory.createEmptyBorder());
+ _scrollPane.setViewportView(_dataSetViewer.getComponent());
+ _split.setRightComponent(_scrollPane);
+
+ }
+ else
+ {
+ _split.setRightComponent(_dataSetViewer.getComponent());
+ }
+ }
+
+
+ public IDataSetViewer getDataSetViewer()
+ {
+ return _dataSetViewer;
+ }
+
+ public Component getComponent()
+ {
+ return _split;
+ }
+
+ public boolean toggleShowFindPanel()
+ {
+ if (false == _dataSetViewer instanceof DataSetViewerTablePanel)
+ {
+ return false;
+ }
+
+
+ _findPanelOpen = !_findPanelOpen;
+ if (_findPanelOpen)
+ {
+ _split.setDividerLocation(_dataSetFindPanelController.getPanel().getPreferredSize().height);
+ }
+ else
+ {
+ _split.setDividerLocation(0);
+ _dataSetFindPanelController.wasHidden();
+ }
+
+ return true;
+ }
+
+ public void replaceDataSetViewer(IDataSetViewer dataSetViewer)
+ {
+ _dataSetViewer = dataSetViewer;
+ if (_putTableInScrollpane)
+ {
+ _scrollPane.setViewportView(dataSetViewer.getComponent());
+ _scrollPane.setRowHeader(null);
+ }
+ else
+ {
+ _split.setRightComponent(dataSetViewer.getComponent());
+ }
+
+ if (_dataSetViewer instanceof DataSetViewerTablePanel)
+ {
+ _dataSetFindPanelController.setDataSetViewerTablePanel((DataSetViewerTablePanel) _dataSetViewer);
+ }
+ else
+ {
+ _dataSetFindPanelController.setDataSetViewerTablePanel(null);
+ }
+ }
+}
Added: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DefaultFindService.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DefaultFindService.java (rev 0)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/DefaultFindService.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -0,0 +1,71 @@
+package net.sourceforge.squirrel_sql.fw.datasetviewer.tablefind;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class DefaultFindService implements FindService
+{
+ private JTable _table;
+
+ public DefaultFindService(JTable table)
+ {
+ _table = table;
+ }
+
+ @Override
+ public int getRowCount()
+ {
+ return _table.getRowCount();
+ }
+
+ @Override
+ public int getColCount()
+ {
+ return _table.getColumnCount();
+ }
+
+ @Override
+ public String getViewDataAsString(int row, int col)
+ {
+ Object value = _table.getValueAt(row, col);
+ if (value instanceof String)
+ {
+ return (String) value;
+ }
+ else
+ {
+ return "" + value;
+ }
+ }
+
+ @Override
+ public void scrollToVisible(int viewRow, int viewCol)
+ {
+ Rectangle cellRect = _table.getCellRect(viewRow, viewCol, true);
+ _table.scrollRectToVisible(cellRect);
+ _table.repaint(cellRect);
+ }
+
+ @Override
+ public void repaintCell(int viewRow, int viewCol)
+ {
+ Rectangle cellRect = _table.getCellRect(viewRow, viewCol, true);
+ _table.repaint(cellRect);
+ }
+
+ @Override
+ public void repaintAll()
+ {
+ _table.repaint();
+ }
+
+ @Override
+ public void setFindServiceRenderCallBack(FindServiceRenderCallBack findServiceRenderCallBack)
+ {
+
+ for (int i = 0; i < _table.getColumnModel().getColumnCount(); i++)
+ {
+ _table.getColumnModel().getColumn(i).setCellRenderer(new FindServiceCellRendererDecorator(_table.getColumnModel().getColumn(i).getCellRenderer(), findServiceRenderCallBack));
+ }
+ }
+}
Added: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/FindMarkColor.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/FindMarkColor.java (rev 0)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/FindMarkColor.java 2012-11-11 21:12:19 UTC (rev 6712)
@@ -0,0 +1,11 @@
+package net.sourceforge.squirrel_sql.fw.datasetviewer.tablefind;
+
+import java.awt.*;
+
+public class FindMarkColor extends Color
+{
+ FindMarkColor(Color myColor)
+ {
+ super(myColor.getRGB());
+ }
+}
Added: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/tablefind/FindService.java
===================...
[truncated message content] |