package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale; import javax.swing.*; import javax.swing.table.JTableHeader; import javax.swing.table.TableColumnModel; import java.awt.*; import java.awt.event.*; import java.util.prefs.Preferences; public class DataScaleTableColumnWidthsPersister { private static final int DEFAULT_COL_WIDTH_COLUMN = 100; private static final int DEFAULT_COL_WIDTH_DATA = 1000; private static final String PREF_KEY_COL_WIDTH_COLUMN = "Squirrel.overview.colWidthColumn"; private static final String PREF_KEY_COL_WIDTH_DATA = "Squirrel.overview.colWidthData"; private final Timer _timer; private JTableHeader _tableHeader; public DataScaleTableColumnWidthsPersister(final JTableHeader tableHeader) { _tableHeader = tableHeader; tableHeader.addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseDragged(MouseEvent e) { onMouseDraggedOnTableHeader(e); } }); tableHeader.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if(2 == e.getClickCount() && _tableHeader.getCursor().getType() == Cursor.E_RESIZE_CURSOR) { onMouseDraggedOnTableHeader(e); } } }); _timer = new Timer(200, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { saveColumnWidths(); } }); _timer.setRepeats(false); } private void onMouseDraggedOnTableHeader(MouseEvent e) { _timer.restart(); } public static int getColumnWidthForColName(String colName) { if(DataScaleTableModel.COL_NAME_COLUMN.equals(colName)) { return Preferences.userRoot().getInt(PREF_KEY_COL_WIDTH_COLUMN, DEFAULT_COL_WIDTH_COLUMN); } else if(DataScaleTableModel.COL_NAME_DATA.equals(colName)) { return Preferences.userRoot().getInt(PREF_KEY_COL_WIDTH_DATA, DEFAULT_COL_WIDTH_DATA); } else { throw new IllegalArgumentException("Unknown column name " + colName); } } private void saveColumnWidths() { TableColumnModel columnModel = _tableHeader.getColumnModel(); int wColumn = DEFAULT_COL_WIDTH_COLUMN; int wData = DEFAULT_COL_WIDTH_DATA; for (int i = 0; i < columnModel.getColumnCount(); i++) { if(DataScaleTableModel.COL_NAME_COLUMN.equals(columnModel.getColumn(i).getHeaderValue())) { wColumn = columnModel.getColumn(i).getWidth(); } else if(DataScaleTableModel.COL_NAME_DATA.equals(columnModel.getColumn(i).getHeaderValue())) { wData = columnModel.getColumn(i).getWidth(); } } Preferences.userRoot().putInt(PREF_KEY_COL_WIDTH_COLUMN, wColumn); Preferences.userRoot().putInt(PREF_KEY_COL_WIDTH_DATA, wData); //System.out.println("DataScaleTableColumnWidthsPersister.saveColumnWidths wC=" + wColumn + "; wD=" +wData); } }