Author: jfuerth
Date: Thu Oct 16 08:35:07 2008
New Revision: 2780
Modified:
trunk/src/ca/sqlpower/architect/swingui/action/EditColumnAction.java
trunk/src/ca/sqlpower/architect/swingui/action/EditSelectedAction.java
trunk/src/ca/sqlpower/architect/swingui/action/messages.properties
Log:
Now you can edit the properties of multiple columns simultaneously. This is
mostly finished, but there are still a few loose ends to tie up.
Modified:
trunk/src/ca/sqlpower/architect/swingui/action/EditColumnAction.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/action/EditColumnAction.java
(original)
+++ trunk/src/ca/sqlpower/architect/swingui/action/EditColumnAction.java
Thu Oct 16 08:35:07 2008
@@ -18,15 +18,13 @@
*/
package ca.sqlpower.architect.swingui.action;
-import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
+import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
-import javax.swing.BorderFactory;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
-import javax.swing.JPanel;
import org.apache.log4j.Logger;
@@ -47,11 +45,8 @@
public class EditColumnAction extends AbstractArchitectAction implements
SelectionListener {
private static final Logger logger =
Logger.getLogger(EditColumnAction.class);
- private final ArchitectSwingSession session;
-
public EditColumnAction(ArchitectSwingSession session) {
super(session, Messages.getString("EditColumnAction.name"),
Messages.getString("EditColumnAction.description"), "edit_column");
//$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- this.session = session;
setEnabled(false);
playpen.addSelectionListener(this);
@@ -59,49 +54,56 @@
}
public void actionPerformed(ActionEvent evt) {
- List<PlayPenComponent> selection = playpen.getSelectedItems();
- logger.debug("selections length is: " + selection.size());
//$NON-NLS-1$
- if (selection.size() < 1) {
- JOptionPane.showMessageDialog(playpen,
Messages.getString("EditColumnAction.noColumnSelected")); //$NON-NLS-1$
- } else if (selection.size() > 1) {
- JOptionPane.showMessageDialog(playpen,
Messages.getString("EditColumnAction.multipleItemsSelected")); //$NON-NLS-1$
- } else if (selection.get(0) instanceof TablePane) {
- TablePane tp = (TablePane) selection.get(0);
- try {
- List<SQLColumn> selectedCols = tp.getSelectedItems();
- if (selectedCols.size() != 1) {
- JOptionPane.showMessageDialog(playpen,
Messages.getString("EditColumnAction.pleaseSelectOnlyOneColumn"));
//$NON-NLS-1$
- return;
- }
- int idx = tp.getSelectedItemIndex();
- if (idx < 0) { // header must have been selected
- throw new IllegalStateException("There was one selected
column but the selected item index was negative");
- } else {
- showDialog(tp.getModel(),idx);
- }
- } catch (ArchitectException e) {
- JOptionPane.showMessageDialog(playpen,
Messages.getString("EditColumnAction.errorFindingSelectedColumn"));
//$NON-NLS-1$
+ List<SQLColumn> selectedCols = new ArrayList<SQLColumn>();
+ for (PlayPenComponent ppc : playpen.getSelectedItems()) {
+ if (ppc instanceof TablePane) {
+ TablePane tp = (TablePane) ppc;
+ selectedCols.addAll(tp.getSelectedItems());
}
- } else {
- // One thing was selected, but it wasn't a tablepane
- JOptionPane.showMessageDialog(playpen,
Messages.getString("EditColumnAction.pleaseSelectColumn")); //$NON-NLS-1$
}
+
+ if (selectedCols.isEmpty()) {
+ JOptionPane.showMessageDialog(playpen,
Messages.getString("EditColumnAction.noColumnSelected")); //$NON-NLS-1$
+ return;
+ }
+
+ try {
+ ColumnEditPanel cep = new ColumnEditPanel(selectedCols,
session);
+ String dialogTitle;
+ if (selectedCols.size() == 1) {
+ SQLColumn column = selectedCols.get(0);
+ dialogTitle = Messages.getString(
+ "EditColumnAction.columnPropertiesDialogTitle",
column.getName());
+ } else {
+ dialogTitle =
Messages.getString("EditColumnAction.multiEditDialogTitle");
+ }
+ JDialog d = DataEntryPanelBuilder.createDataEntryPanelDialog(
+ cep, frame, dialogTitle,
Messages.getString("EditColumnAction.okOption"));
+ d.setLocationRelativeTo(frame);
+ d.setVisible(true);
+
+ } catch (ArchitectException ex) {
+ ASUtils.showExceptionDialog(session, "Failed to create column
property editor", ex);
+ }
+
}
+ // FIXME only used by InsertColumnAction
protected void showDialog(final SQLTable st, final int colIdx) throws
ArchitectException {
showDialog(st, colIdx, false, null);
}
- protected void showDialog(final SQLTable st, final int colIdx, final
boolean addToTable,
- final TablePane tp) throws ArchitectException {
+ // FIXME only used by InsertColumnAction
+ protected void showDialog(
+ final SQLTable st,
+ final int colIdx,
+ final boolean addToTable,
+ final TablePane tp)
+ throws ArchitectException {
logger.debug("Creating new column editor panel");
//$NON-NLS-1$
- JPanel panel = new JPanel();
- panel.setLayout(new BorderLayout(12,12));
-
panel.setBorder(BorderFactory.createEmptyBorder(12,12,12,12));
-
final SQLColumn column;
if (!addToTable) {
column = st.getColumn(colIdx);
@@ -114,7 +116,6 @@
}
final ColumnEditPanel columnEditPanel = new ColumnEditPanel(column,
session);
- panel.add(columnEditPanel.getPanel(),
BorderLayout.CENTER);
JDialog editDialog =
DataEntryPanelBuilder.createDataEntryPanelDialog(
columnEditPanel,
@@ -123,7 +124,6 @@
Messages.getString("EditColumnAction.okOption"), //$NON-NLS-1$
new Callable<Boolean>(){
public Boolean call() {
- EditColumnAction.this.putValue(SHORT_DESCRIPTION,
Messages.getString("EditColumnAction.specificColumnShortDescription",
columnEditPanel.getColName().getText())); //$NON-NLS-1$
if (addToTable) {
tp.getModel().startCompoundEdit("adding a new column '" +
columnEditPanel.getColName().getText() + "'"); //$NON-NLS-1$ //$NON-NLS-2$
try {
@@ -145,12 +145,15 @@
return Boolean.TRUE;
}
});
- panel.setOpaque(true);
editDialog.pack();
editDialog.setLocationRelativeTo(frame);
editDialog.setVisible(true);
}
+ /**
+ * Sets up the action's enabledness based on whether or not any columns
+ * are selected.
+ */
private void setupAction(List<PlayPenComponent> selectedItems) {
if (selectedItems.size() == 0) {
setEnabled(false);
@@ -189,7 +192,5 @@
public void itemDeselected(SelectionEvent e) {
setupAction(playpen.getSelectedItems());
}
-
-
}
Modified:
trunk/src/ca/sqlpower/architect/swingui/action/EditSelectedAction.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/action/EditSelectedAction.java
(original)
+++ trunk/src/ca/sqlpower/architect/swingui/action/EditSelectedAction.java
Thu Oct 16 08:35:07 2008
@@ -68,11 +68,8 @@
if (selectedCols.size() == 0) {
//look for the relation ship action commands
session.getArchitectFrame().getEditTableAction().actionPerformed(e);
- } else if (selectedCols.size() == 1) {
+ } else if (selectedCols.size() >= 1) {
session.getArchitectFrame().getEditColumnAction().actionPerformed(e);
- } else {
- JOptionPane.showMessageDialog(playpen,
Messages.getString("EditSelectedAction.selectOnlyOneItem")); //$NON-NLS-1$
- return;
}
} else if (selection.get(0) instanceof Relationship) {
session.getArchitectFrame().getEditRelationshipAction().actionPerformed(e);
Modified: trunk/src/ca/sqlpower/architect/swingui/action/messages.properties
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/action/messages.properties
(original)
+++ trunk/src/ca/sqlpower/architect/swingui/action/messages.properties Thu
Oct 16 08:35:07 2008
@@ -48,7 +48,7 @@
EditColumnAction.description=Column Properties
EditColumnAction.dialogTitle=Column Properties of {0}
EditColumnAction.errorFindingSelectedColumn=Error finding the selected
column
-EditColumnAction.multipleItemsSelected=You have selected multiple items,
but you can only edit one at a time.
+EditColumnAction.multiEditDialogTitle=Edit multiple column properties
EditColumnAction.name=Column Properties...
EditColumnAction.okOption=OK
EditColumnAction.pleaseSelectColumn=Please select the column you would
like to edit.