package jetbrains.mps.ide.java.platform.refactorings; /*Generated by MPS */ import javax.swing.JPanel; import jetbrains.mps.baseLanguage.util.plugin.refactorings.ExtractMethodRefactoringParameters; import java.awt.GridBagLayout; import javax.swing.JTable; import com.intellij.ui.table.JBTable; import javax.swing.JButton; import javax.swing.ListSelectionModel; import java.awt.Dimension; import javax.swing.event.ListSelectionListener; import javax.swing.event.ListSelectionEvent; import jetbrains.mps.internal.collections.runtime.ListSequence; import javax.swing.JCheckBox; import javax.swing.event.TableModelListener; import javax.swing.event.TableModelEvent; import javax.swing.JScrollPane; import javax.swing.ScrollPaneConstants; import java.awt.GridBagConstraints; import java.awt.Insets; import javax.swing.table.TableColumn; import javax.swing.table.TableCellRenderer; import java.awt.Component; import javax.swing.table.TableCellEditor; import javax.swing.JComponent; import javax.swing.AbstractAction; import java.awt.event.ActionEvent; /*package*/ class ParametersPanel extends JPanel { private static final int MINIMUM_TABLE_COLUMN_WIDTH = 50; private ExtractMethodRefactoringParameters myModel; private ParametersTableModel myTableModel; /*package*/ ParametersPanel(ExtractMethodRefactoringParameters params) { super(); this.myModel = params; this.myTableModel = new ParametersTableModel(this.myModel.getParameters()); this.initPanel(); } private void initPanel() { this.setLayout(new GridBagLayout()); final JTable parametersTable = new JBTable(this.myTableModel); JPanel buttonsPanel = new JPanel(new GridBagLayout()); final JButton upButton = this.createParametersRowMoveButton(parametersTable, "Move up", -1, 0, buttonsPanel); final JButton downButton = this.createParametersRowMoveButton(parametersTable, "Move down", 1, 1, buttonsPanel); parametersTable.setShowGrid(false); parametersTable.setCellSelectionEnabled(false); parametersTable.setRowSelectionAllowed(true); parametersTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); parametersTable.setIntercellSpacing(new Dimension(0, 0)); parametersTable.setTableHeader(null); parametersTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent p0) { int s = parametersTable.getSelectedRow(); upButton.setEnabled(s > 0); downButton.setEnabled(s != 0 && s < ListSequence.fromList(ParametersPanel.this.myModel.getParameters()).count() - 1); } }); this.fitTableColumns(parametersTable); parametersTable.getColumnModel().getColumn(1).setCellEditor(this.createCellEditor()); parametersTable.getColumnModel().getColumn(0).setMaxWidth(new JCheckBox().getPreferredSize().width); this.myTableModel.addTableModelListener(new TableModelListener() { @Override public void tableChanged(TableModelEvent p0) { ParametersPanel.this.fitTableColumns(parametersTable); } }); parametersTable.setPreferredScrollableViewportSize(new Dimension(parametersTable.getPreferredScrollableViewportSize().width, parametersTable.getRowHeight() * 7)); JScrollPane scrollPane = new JScrollPane(parametersTable, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); GridBagConstraints c = new GridBagConstraints(0, 0, 1, 1, 1, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0); this.add(scrollPane, c); c.gridx = 1; c.weightx = 0; c.fill = GridBagConstraints.NONE; this.add(buttonsPanel, c); } /*package*/ ParametersTableModel getTableModel() { return this.myTableModel; } /*package*/ void fitTableColumns(JTable table) { for (int i = 0; i < table.getColumnModel().getColumnCount(); i++) { TableColumn column = table.getColumnModel().getColumn(i); int max = MINIMUM_TABLE_COLUMN_WIDTH; for (int j = 0; j < table.getRowCount(); j++) { TableCellRenderer r = table.getCellRenderer(j, i); Component c = r.getTableCellRendererComponent(table, table.getValueAt(j, i), false, false, j, i); int width = c.getPreferredSize().width; if (width > max) { max = width; } } column.setPreferredWidth(max); } } /*package*/ TableCellEditor createCellEditor() { return new ParameterTypeCellEditor(this.myModel); } private JButton createParametersRowMoveButton(final JTable parametersTable, String name, final int dr, int y, JComponent component) { GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets(2, 10, 2, 10); c.fill = GridBagConstraints.HORIZONTAL; c.gridx = 1; c.gridy = y; c.weightx = 0; c.weighty = 0; c.anchor = GridBagConstraints.PAGE_END; JButton button = new JButton(new AbstractAction(name) { @Override public void actionPerformed(ActionEvent e) { int row = parametersTable.getSelectedRow(); ParametersPanel.this.myTableModel.swapRows(row, row + dr); parametersTable.getSelectionModel().setSelectionInterval(row + dr, row + dr); } }); button.setEnabled(false); component.add(button, c); return button; } }