package net.sourceforge.squirrel_sql.client.session.properties; import net.sourceforge.squirrel_sql.fw.gui.IntegerField; import net.sourceforge.squirrel_sql.fw.util.StringManager; import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; public class ResultLimitAndReadOnPanelSmallPanel extends JPanel { private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(SQLResultConfigCtrl.class); public static final String CBO_LIMIT_ROWS = s_stringMgr.getString("ResultLimitAndReadOnPanelSmallPanel.limitRows"); public static final String CBO_READ_ON_BLOCK_SIZE = s_stringMgr.getString("ResultLimitAndReadOnPanelSmallPanel.readOnWithBlockSize"); private JCheckBox _chkLimitRowsEnabled; private JComboBox _cboLimitOrReadOn; private IntegerField _txtLimitOrBlockSize; private SessionProperties _props; private boolean _inLoadData = false; private boolean _inEvent; public ResultLimitAndReadOnPanelSmallPanel() { createUI(); _chkLimitRowsEnabled.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { onChkLimitRowsEnabled(); } }); _cboLimitOrReadOn.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { onCboLimitOrReadOnChanged(e); } }); _txtLimitOrBlockSize.getDocument().addDocumentListener(new DocumentListener() { @Override public void insertUpdate(DocumentEvent e) { onLimitOrBlockSizeChanged(); } @Override public void removeUpdate(DocumentEvent e) { onLimitOrBlockSizeChanged(); } @Override public void changedUpdate(DocumentEvent e) { onLimitOrBlockSizeChanged(); } }); } private void onLimitOrBlockSizeChanged() { if(_inLoadData || _inEvent || 0 >= _txtLimitOrBlockSize.getInt()) { return; } try { _inEvent = true; if(CBO_LIMIT_ROWS == _cboLimitOrReadOn.getSelectedItem()) { _props.setSQLNbrRowsToShow(_txtLimitOrBlockSize.getInt()); } else { _props.setSQLReadOnBlockSize(_txtLimitOrBlockSize.getInt()); } } finally { _inEvent = false; } } private void onCboLimitOrReadOnChanged(ItemEvent e) { try { if(_inLoadData || _inEvent || ItemEvent.SELECTED != e.getStateChange()) { return; } _inEvent = true; if(CBO_READ_ON_BLOCK_SIZE == _cboLimitOrReadOn.getSelectedItem()) { _props.setSQLReadOn(true); _txtLimitOrBlockSize.setInt(_props.getSQLReadOnBlockSize()); } else { _props.setSQLReadOn(false); _txtLimitOrBlockSize.setInt(_props.getSQLNbrRowsToShow()); if(0 < _props.getSQLNbrRowsToShow()) { // If we switch the combo box back to limit rows, make sure the check box is selected. _props.setSQLLimitRows(true); } } } finally { _inEvent = false; } loadData(_props); } private void onChkLimitRowsEnabled() { if(_inLoadData || _inEvent) { return; } _props.setSQLLimitRows(_chkLimitRowsEnabled.isSelected()); loadData(_props); } private void createUI() { setLayout(new GridBagLayout()); GridBagConstraints gbc; gbc = new GridBagConstraints(0,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,2),0,0); _chkLimitRowsEnabled = new JCheckBox(); add(_chkLimitRowsEnabled, gbc); gbc = new GridBagConstraints(1,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,5),0,0); _cboLimitOrReadOn = new JComboBox(new Object[]{CBO_LIMIT_ROWS, CBO_READ_ON_BLOCK_SIZE}); add(_cboLimitOrReadOn, gbc); gbc = new GridBagConstraints(2,0,1,1,1,0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(0,0,0,5),0,0); _txtLimitOrBlockSize = new IntegerField(10); add(_txtLimitOrBlockSize, gbc); } public void loadData(SessionProperties props) { if(_inLoadData || _inEvent) { return; } try { _inLoadData = true; _props = props; if(_props.getSQLReadOn()) { _cboLimitOrReadOn.setSelectedItem(CBO_READ_ON_BLOCK_SIZE); _chkLimitRowsEnabled.setEnabled(false); _txtLimitOrBlockSize.setEnabled(true); _txtLimitOrBlockSize.setInt(_props.getSQLReadOnBlockSize()); _cboLimitOrReadOn.setToolTipText(s_stringMgr.getString("ResultLimitAndReadOnPanelSmallPanel.readOnWarningHtml")); } else { _cboLimitOrReadOn.setSelectedItem(CBO_LIMIT_ROWS); _chkLimitRowsEnabled.setEnabled(true); _chkLimitRowsEnabled.setSelected(_props.getSQLLimitRows()); _txtLimitOrBlockSize.setInt(_props.getSQLNbrRowsToShow()); _txtLimitOrBlockSize.setEnabled(_props.getSQLLimitRows()); _cboLimitOrReadOn.setToolTipText(null); } } finally { _inLoadData = false; } } public void propsChanged(SessionProperties props) { loadData(props); } }