diff options
author | kmoore | 2008-04-15 19:41:10 +0000 |
---|---|---|
committer | kmoore | 2008-04-15 19:41:10 +0000 |
commit | f2de955d2ec2bc544708cb8b6449eea35f9c162c (patch) | |
tree | 1f45f5f89d190cadb12d41453c7c31e006f697fe /jpa/plugins/org.eclipse.jpt.ui | |
parent | ea7884c64bc11bf5ffcc005603507695736d594d (diff) | |
download | webtools.dali-f2de955d2ec2bc544708cb8b6449eea35f9c162c.tar.gz webtools.dali-f2de955d2ec2bc544708cb8b6449eea35f9c162c.tar.xz webtools.dali-f2de955d2ec2bc544708cb8b6449eea35f9c162c.zip |
222245 - patch from Pascal - JoinTable joinColumn buttons enabled incorrectly in orm.xml
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.ui')
19 files changed, 396 insertions, 136 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties b/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties index 32b366ecb1..e2522c6c79 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties +++ b/jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties @@ -13,6 +13,7 @@ Boolean_False=False NoneSelected=Default () DefaultWithoutValue=Default () DefaultWithValue=Default ({0}) +NoNameSet=<No name set> PersistentTypePage_UnmappedLabel=Unmapped PersistentTypePage_EntityLabel=Entity diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/details/JpaComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/details/JpaComposite.java index c0d8eef0bc..425aff2029 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/details/JpaComposite.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/details/JpaComposite.java @@ -3,7 +3,7 @@ * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. - * + * * Contributors: * Oracle - initial API and implementation ******************************************************************************/ @@ -14,7 +14,7 @@ import org.eclipse.swt.widgets.Control; /** * A {@link JpaComposite} defines the common behavior of the JPA related * widgets. - * + * * Provisional API: This interface is part of an interim API that is still * under development and expected to change significantly before reaching * stability. It is available at this early stage to solicit feedback from @@ -39,6 +39,14 @@ public interface JpaComposite<T> { Control getControl(); /** + * Changes the enablement state of the widgets of this pane. + * + * @param enabled <code>true</code> to enable the widgets or <code>false</code> + * to disable them + */ + void enableWidgets(boolean enabled); + + /** * Notifies this composite it should dispose any resources. */ void dispose(); diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentAttributeDetailsPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentAttributeDetailsPage.java index 8bb4e2d510..f405f2917f 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentAttributeDetailsPage.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentAttributeDetailsPage.java @@ -203,6 +203,9 @@ public abstract class PersistentAttributeDetailsPage<T extends PersistentAttribu return composite; } + protected void mappingPageChanged(JpaComposite<AttributeMapping> mappingComposite) { + } + private AttributeMappingUiProvider<? extends AttributeMapping> mappingUIProvider(String key) { if (this.subject().getMapping() == null || @@ -218,6 +221,7 @@ public abstract class PersistentAttributeDetailsPage<T extends PersistentAttribu // Nothing to update if (this.currentMappingKey == mappingKey) { + this.mappingPageChanged(this.currentMappingComposite); return; } // Dispose the existing mapping pane @@ -250,6 +254,7 @@ public abstract class PersistentAttributeDetailsPage<T extends PersistentAttribu this.currentMappingComposite.populate(); this.mappingPageBook.showPage(this.currentMappingComposite.getControl()); + this.mappingPageChanged(this.currentMappingComposite); this.repaintDetailsView(this.mappingPageBook); } catch (Exception e) { diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java index 1b2c22a3da..16c04e964d 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java @@ -163,6 +163,7 @@ public class JptUiMappingsMessages extends NLS { public static String NamedQueryPropertyComposite_queryHintsGroupBox; public static String NewNameStateObject_nameAlreadyExists; public static String NewNameStateObject_nameMustBeSpecified; + public static String NoNameSet; public static String NoneSelected; public static String NonOwningMapping_mappedByLabel; public static String NullAttributeMappingUiProvider_label; @@ -188,10 +189,10 @@ public class JptUiMappingsMessages extends NLS { public static String PersistentAttributePage_OneToOneLabel; public static String PersistentAttributePage_TransientLabel; public static String PersistentAttributePage_VersionLabel; - public static String PersistentTypePage_UnmappedLabel; public static String PersistentTypePage_EmbeddableLabel; public static String PersistentTypePage_EntityLabel; public static String PersistentTypePage_MappedSuperclassLabel; + public static String PersistentTypePage_UnmappedLabel; public static String PrimaryKeyJoinColumnDialog_addDescriptionTitle; public static String PrimaryKeyJoinColumnDialog_addTitle; public static String PrimaryKeyJoinColumnDialog_editDescriptionTitle; diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/ColumnComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/ColumnComposite.java index ace96e488c..5244341a7d 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/ColumnComposite.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/ColumnComposite.java @@ -9,7 +9,6 @@ ******************************************************************************/ package org.eclipse.jpt.ui.internal.mappings.details; -import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import org.eclipse.jpt.core.context.Column; @@ -19,11 +18,9 @@ import org.eclipse.jpt.ui.internal.JpaHelpContextIds; import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages; import org.eclipse.jpt.ui.internal.mappings.db.ColumnCombo; import org.eclipse.jpt.ui.internal.mappings.db.TableCombo; -import org.eclipse.jpt.ui.internal.util.ControlEnabler; import org.eclipse.jpt.ui.internal.util.LabeledControlUpdater; import org.eclipse.jpt.ui.internal.util.LabeledLabel; import org.eclipse.jpt.ui.internal.widgets.AbstractFormPane; -import org.eclipse.jpt.ui.internal.widgets.TriStateCheckBox; import org.eclipse.jpt.utility.internal.model.value.PropertyAspectAdapter; import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel; import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel; @@ -35,7 +32,6 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Spinner; -import org.eclipse.swt.widgets.Text; /** * Here the layout of this pane: @@ -87,9 +83,7 @@ import org.eclipse.swt.widgets.Text; * @version 2.0 * @since 1.0 */ -public class ColumnComposite extends AbstractFormPane<Column> -{ - private WritablePropertyValueModel<Boolean> enablementHolder; +public class ColumnComposite extends AbstractFormPane<Column> { /** * Creates a new <code>ColumnComposite</code>. @@ -672,30 +666,10 @@ public class ColumnComposite extends AbstractFormPane<Column> }; } - /* - * (non-Javadoc) - */ - @Override - public void enableWidgets(boolean enabled) { - super.enableWidgets(enabled); - enablementHolder.setValue(enabled); - } - - /* - * (non-Javadoc) - */ - @Override - protected void initialize() { - super.initialize(); - enablementHolder = new SimplePropertyValueModel<Boolean>(Boolean.TRUE); - } - private void initializeDetailsPane(Composite container) { - Collection<Control> widgets = new ArrayList<Control>(); - // Insertable tri-state check box - TriStateCheckBox insertableCheckBox = buildTriStateCheckBoxWithDefault( + buildTriStateCheckBoxWithDefault( buildSubPane(container, 4), JptUiMappingsMessages.ColumnComposite_insertable, buildInsertableHolder(), @@ -703,10 +677,8 @@ public class ColumnComposite extends AbstractFormPane<Column> JpaHelpContextIds.MAPPING_COLUMN_INSERTABLE ); - widgets.add(insertableCheckBox.getCheckBox()); - // Updatable tri-state check box - TriStateCheckBox updatableCheckBox = buildTriStateCheckBoxWithDefault( + buildTriStateCheckBoxWithDefault( container, JptUiMappingsMessages.ColumnComposite_updatable, buildUpdatableHolder(), @@ -714,10 +686,8 @@ public class ColumnComposite extends AbstractFormPane<Column> JpaHelpContextIds.MAPPING_COLUMN_UPDATABLE ); - widgets.add(updatableCheckBox.getCheckBox()); - // Unique tri-state check box - TriStateCheckBox uniqueCheckBox = buildTriStateCheckBoxWithDefault( + buildTriStateCheckBoxWithDefault( container, JptUiMappingsMessages.ColumnComposite_unique, buildUniqueHolder(), @@ -725,10 +695,8 @@ public class ColumnComposite extends AbstractFormPane<Column> JpaHelpContextIds.MAPPING_COLUMN_UNIQUE ); - widgets.add(uniqueCheckBox.getCheckBox()); - // Nullable tri-state check box - TriStateCheckBox nullableCheckBox = buildTriStateCheckBoxWithDefault( + buildTriStateCheckBoxWithDefault( container, JptUiMappingsMessages.ColumnComposite_nullable, buildNullableHolder(), @@ -736,8 +704,6 @@ public class ColumnComposite extends AbstractFormPane<Column> JpaHelpContextIds.MAPPING_COLUMN_NULLABLE ); - widgets.add(nullableCheckBox.getCheckBox()); - // Length widgets Spinner lengthSpinner = buildLabeledSpinner( container, @@ -750,7 +716,6 @@ public class ColumnComposite extends AbstractFormPane<Column> JpaHelpContextIds.MAPPING_COLUMN_LENGTH ); - widgets.add(lengthSpinner); updateGridData(container, lengthSpinner); // Precision widgets @@ -765,7 +730,6 @@ public class ColumnComposite extends AbstractFormPane<Column> JpaHelpContextIds.MAPPING_COLUMN_PRECISION ); - widgets.add(precisionSpinner); updateGridData(container, precisionSpinner); // Scale widgets @@ -780,19 +744,14 @@ public class ColumnComposite extends AbstractFormPane<Column> JpaHelpContextIds.MAPPING_COLUMN_SCALE ); - widgets.add(scaleSpinner); updateGridData(container, scaleSpinner); // Column Definition widgets - Text columnDefinitionText = buildLabeledText( + buildLabeledText( container, JptUiMappingsMessages.ColumnComposite_columnDefinition, buildColumnDefinitionHolder() ); - - widgets.add(columnDefinitionText); - - installControlEnabler(widgets); } /* @@ -833,10 +792,6 @@ public class ColumnComposite extends AbstractFormPane<Column> initializeDetailsPane(buildSubPane(container, 0, 16)); } - private void installControlEnabler(Collection<Control> widgets) { - new ControlEnabler(enablementHolder, widgets); - } - /** * Changes the layout of the given container by changing which widget will * grab the excess of horizontal space. By default, the center control grabs diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedAttributeOverridesComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedAttributeOverridesComposite.java index a3db042fbd..0534cb3ef7 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedAttributeOverridesComposite.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedAttributeOverridesComposite.java @@ -3,7 +3,7 @@ * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. - * + * * Contributors: * Oracle - initial API and implementation ******************************************************************************/ @@ -273,6 +273,7 @@ public class EmbeddedAttributeOverridesComposite extends AbstractFormPane<BaseEm buildOverrideDefaultAttributeOverrideHolder() ); + removeFromEnablementControl(overrideDefaultButton); installOverrideDefaultButtonEnabler(overrideDefaultButton); // Column widgets @@ -283,6 +284,7 @@ public class EmbeddedAttributeOverridesComposite extends AbstractFormPane<BaseEm ); installColumnCompositeEnabler(columnComposite); + removeFromEnablementControl(columnComposite.getControl()); } private void installColumnCompositeEnabler(ColumnComposite columnComposite) { diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnComposite.java index 731425777f..0eb9d0f334 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnComposite.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnComposite.java @@ -69,6 +69,7 @@ import org.eclipse.swt.widgets.Group; public class JoinColumnComposite extends AbstractFormPane<SingleRelationshipMapping> { private WritablePropertyValueModel<JoinColumn> joinColumnHolder; + private WritablePropertyValueModel<Boolean> joinColumnPaneEnablerHolder; /** * Creates a new <code>JoinColumnComposite</code>. @@ -189,6 +190,10 @@ public class JoinColumnComposite extends AbstractFormPane<SingleRelationshipMapp } } + private SimplePropertyValueModel<Boolean> buildJoinColumnPaneEnablerHolder() { + return new SimplePropertyValueModel<Boolean>(Boolean.FALSE); + } + private Adapter buildJoinColumnsAdapter() { return new AddRemovePane.AbstractAdapter() { @@ -260,6 +265,15 @@ public class JoinColumnComposite extends AbstractFormPane<SingleRelationshipMapp }; } + /* + * (non-Javadoc) + */ + @Override + protected void doPopulate() { + super.doPopulate(); + updateJoinColumnPaneEnablement(true); + } + private void editJoinColumn(ObjectListSelectionModel listSelectionModel) { JoinColumn joinColumn = (JoinColumn) listSelectionModel.selectedValue(); @@ -274,9 +288,20 @@ public class JoinColumnComposite extends AbstractFormPane<SingleRelationshipMapp * (non-Javadoc) */ @Override + public void enableWidgets(boolean enabled) { + super.enableWidgets(enabled); + updateJoinColumnPaneEnablement(enabled); + } + + /* + * (non-Javadoc) + */ + @Override protected void initialize() { super.initialize(); - joinColumnHolder = buildJoinColumnHolder(); + + joinColumnHolder = buildJoinColumnHolder(); + joinColumnPaneEnablerHolder = buildJoinColumnPaneEnablerHolder(); } /* @@ -311,13 +336,11 @@ public class JoinColumnComposite extends AbstractFormPane<SingleRelationshipMapp ); installJoinColumnsListPaneEnabler(joinColumnsListPane); + removeFromEnablementControl(joinColumnsListPane.getControl()); } private void installJoinColumnsListPaneEnabler(AddRemoveListPane<SingleRelationshipMapping> pane) { - new PaneEnabler( - buildOverrideDefaultJoinColumnHolder(), - pane - ); + new PaneEnabler(joinColumnPaneEnablerHolder, pane); } private void removeJoinColumn(ObjectListSelectionModel listSelectionModel) { @@ -333,6 +356,13 @@ public class JoinColumnComposite extends AbstractFormPane<SingleRelationshipMapp stateObject.updateJoinColumn(stateObject.getJoinColumn()); } + private void updateJoinColumnPaneEnablement(boolean enabled) { + + SingleRelationshipMapping subject = subject(); + enabled &= (subject != null) && subject.containsSpecifiedJoinColumns(); + joinColumnPaneEnablerHolder.setValue(enabled); + } + private void updateJoinColumns(boolean selected) { if (isPopulating()) { @@ -367,6 +397,8 @@ public class JoinColumnComposite extends AbstractFormPane<SingleRelationshipMapp subject.removeSpecifiedJoinColumn(index); } } + + updateJoinColumnPaneEnablement(selected); } finally { setPopulating(false); diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnsComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnsComposite.java index 19f50ce9df..5d0d973d66 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnsComposite.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnsComposite.java @@ -3,7 +3,7 @@ * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. - * + * * Contributors: * Oracle - initial API and implementation ******************************************************************************/ @@ -62,12 +62,6 @@ public class JoinColumnsComposite<T extends JpaNode> extends AbstractFormPane<T> private IJoinColumnsEditor<T> joinColumnsEditor; /** - * Keeps track of the list pane in order to update its enablement state when - * required. - */ - private AddRemoveListPane<T> joinColumnsListPane; - - /** * Creates a new <code>JoinColumnsComposite</code>. * * @param parentPane The parent controller of this one @@ -257,22 +251,13 @@ public class JoinColumnsComposite<T extends JpaNode> extends AbstractFormPane<T> * (non-Javadoc) */ @Override - public void enableWidgets(boolean enabled) { - super.enableWidgets(enabled); - joinColumnsListPane.enableWidgets(enabled); - } - - /* - * (non-Javadoc) - */ - @Override protected void initializeLayout(Composite container) { } private void initializeLayout2() { // Join Columns list pane - joinColumnsListPane = new AddRemoveListPane<T>( + AddRemoveListPane<T> listPane = new AddRemoveListPane<T>( this, getControl(), buildJoinColumnsAdapter(), @@ -281,6 +266,11 @@ public class JoinColumnsComposite<T extends JpaNode> extends AbstractFormPane<T> buildJoinColumnsListLabelProvider(), JpaHelpContextIds.MAPPING_JOIN_TABLE_COLUMNS ); + + // Remove the list pane from this pane's enablement control because its + // enablement is managed by a PaneEnabler registered with this pane + removeFromEnablementControl(listPane.getMainControl()); + removeFromEnablementControl(listPane); } /** diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java index 07b1a54881..8e99164894 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java @@ -19,6 +19,7 @@ import org.eclipse.jpt.ui.internal.JpaHelpContextIds; import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages; import org.eclipse.jpt.ui.internal.mappings.db.TableCombo; import org.eclipse.jpt.ui.internal.mappings.details.JoinColumnsComposite.IJoinColumnsEditor; +import org.eclipse.jpt.ui.internal.util.PaneEnabler; import org.eclipse.jpt.ui.internal.widgets.AbstractFormPane; import org.eclipse.jpt.ui.internal.widgets.PostExecution; import org.eclipse.jpt.utility.internal.model.value.SimplePropertyValueModel; @@ -72,8 +73,8 @@ import org.eclipse.swt.widgets.Group; */ public class JoinTableComposite extends AbstractFormPane<JoinTable> { - private JoinColumnsComposite<JoinTable> inverseJoinColumnsComposite; - private JoinColumnsComposite<JoinTable> joinColumnsComposite; + private WritablePropertyValueModel<Boolean> inverseJoinColumnsPaneEnablerHolder; + private WritablePropertyValueModel<Boolean> joinColumnsPaneEnablerHolder; private Button overrideDefaultInverseJoinColumnsCheckBox; private Button overrideDefaultJoinColumnsCheckBox; @@ -187,6 +188,10 @@ public class JoinTableComposite extends AbstractFormPane<JoinTable> return new JoinColumnsProvider(); } + private SimplePropertyValueModel<Boolean> buildJoinColumnsPaneEnablerHolder() { + return new SimplePropertyValueModel<Boolean>(Boolean.FALSE); + } + private WritablePropertyValueModel<Boolean> buildOverrideDefaultHolder() { return new SimplePropertyValueModel<Boolean>(); } @@ -257,16 +262,7 @@ public class JoinTableComposite extends AbstractFormPane<JoinTable> @Override protected void doPopulate() { super.doPopulate(); - - JoinTable subject = subject(); - boolean enabled = (subject != null) && subject.containsSpecifiedJoinColumns(); - boolean inverseEnabled = (subject != null) && subject.containsSpecifiedInverseJoinColumns(); - - overrideDefaultJoinColumnsCheckBox.setSelection(enabled); - overrideDefaultInverseJoinColumnsCheckBox.setSelection(inverseEnabled); - - joinColumnsComposite.enableWidgets(enabled); - inverseJoinColumnsComposite.enableWidgets(inverseEnabled); + updateJoinColumnPanesEnablement(true); } private void editInverseJoinColumn(InverseJoinColumnInJoinTableStateObject stateObject) { @@ -297,6 +293,26 @@ public class JoinTableComposite extends AbstractFormPane<JoinTable> * (non-Javadoc) */ @Override + public void enableWidgets(boolean enabled) { + super.enableWidgets(enabled); + updateJoinColumnPanesEnablement(enabled); + } + + /* + * (non-Javadoc) + */ + @Override + protected void initialize() { + super.initialize(); + + joinColumnsPaneEnablerHolder = buildJoinColumnsPaneEnablerHolder(); + inverseJoinColumnsPaneEnablerHolder = buildJoinColumnsPaneEnablerHolder(); + } + + /* + * (non-Javadoc) + */ + @Override protected void initializeLayout(Composite container) { int groupBoxMargin = groupBoxMargin(); @@ -328,12 +344,15 @@ public class JoinTableComposite extends AbstractFormPane<JoinTable> buildOverrideDefaultSelectionListener() ); - joinColumnsComposite = new JoinColumnsComposite<JoinTable>( + JoinColumnsComposite<JoinTable> joinColumnsComposite = new JoinColumnsComposite<JoinTable>( this, joinColumnGroupPane, buildJoinColumnsEditor() ); + installJoinColumnsPaneEnabler(joinColumnsComposite); + removeFromEnablementControl(joinColumnsComposite.getControl()); + // Inverse Join Columns group pane Group inverseJoinColumnGroupPane = buildTitledPane( container, @@ -351,11 +370,22 @@ public class JoinTableComposite extends AbstractFormPane<JoinTable> buildOverrideDefaultInverseSelectionListener() ); - inverseJoinColumnsComposite = new JoinColumnsComposite<JoinTable>( + JoinColumnsComposite<JoinTable> inverseJoinColumnsComposite = new JoinColumnsComposite<JoinTable>( this, inverseJoinColumnGroupPane, buildInverseJoinColumnsEditor() ); + + installInverseJoinColumnsPaneEnabler(inverseJoinColumnsComposite); + removeFromEnablementControl(inverseJoinColumnsComposite.getControl()); + } + + private void installInverseJoinColumnsPaneEnabler(JoinColumnsComposite<JoinTable> pane) { + new PaneEnabler(inverseJoinColumnsPaneEnablerHolder, pane); + } + + private void installJoinColumnsPaneEnabler(JoinColumnsComposite<JoinTable> pane) { + new PaneEnabler(joinColumnsPaneEnablerHolder, pane); } private void updateInverseJoinColumns() { @@ -366,7 +396,6 @@ public class JoinTableComposite extends AbstractFormPane<JoinTable> JoinTable joinTable = subject(); boolean selected = overrideDefaultInverseJoinColumnsCheckBox.getSelection(); - inverseJoinColumnsComposite.enableWidgets(selected); setPopulating(true); try { @@ -390,12 +419,27 @@ public class JoinTableComposite extends AbstractFormPane<JoinTable> joinTable.removeSpecifiedInverseJoinColumn(index); } } + + inverseJoinColumnsPaneEnablerHolder.setValue(selected); } finally { setPopulating(false); } } + private void updateJoinColumnPanesEnablement(boolean globalEnablement) { + + JoinTable subject = subject(); + boolean enabled = globalEnablement && (subject != null) && subject.containsSpecifiedJoinColumns(); + boolean inverseEnabled = globalEnablement && (subject != null) && subject.containsSpecifiedInverseJoinColumns(); + + overrideDefaultJoinColumnsCheckBox .setSelection(enabled); + overrideDefaultInverseJoinColumnsCheckBox.setSelection(inverseEnabled); + + joinColumnsPaneEnablerHolder .setValue(enabled); + inverseJoinColumnsPaneEnablerHolder.setValue(inverseEnabled); + } + private void updateJoinColumns() { if (isPopulating()) { @@ -404,7 +448,6 @@ public class JoinTableComposite extends AbstractFormPane<JoinTable> JoinTable joinTable = subject(); boolean selected = overrideDefaultJoinColumnsCheckBox.getSelection(); - joinColumnsComposite.enableWidgets(selected); setPopulating(true); try { @@ -428,6 +471,8 @@ public class JoinTableComposite extends AbstractFormPane<JoinTable> joinTable.removeSpecifiedJoinColumn(index); } } + + joinColumnsPaneEnablerHolder.setValue(selected); } finally { setPopulating(false); diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/MapAsComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/MapAsComposite.java index 6d64f0a97b..b4ec895d87 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/MapAsComposite.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/MapAsComposite.java @@ -24,6 +24,7 @@ import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jpt.ui.JptUiPlugin; import org.eclipse.jpt.ui.details.MappingUiProvider; import org.eclipse.jpt.ui.internal.JptUiMessages; +import org.eclipse.jpt.ui.internal.mappings.JptUiMappingsMessages; import org.eclipse.jpt.ui.internal.util.SWTUtil; import org.eclipse.jpt.ui.internal.widgets.AbstractPane; import org.eclipse.jpt.ui.internal.widgets.PostExecution; @@ -220,6 +221,25 @@ public abstract class MapAsComposite<T extends Model> extends AbstractPane<T> { * (non-Javadoc) */ @Override + public void enableWidgets(boolean enabled) { + super.enableWidgets(enabled); + + if (!styledText.isDisposed()) { + styledText.setEnabled(enabled); + + if (enabled) { + updateLinkRange(); + } + else { + clearStyleRange(); + } + } + } + + /* + * (non-Javadoc) + */ + @Override protected void initialize() { super.initialize(); this.mappingChangeHandler = buildMappingChangeHandler(); @@ -306,9 +326,13 @@ public abstract class MapAsComposite<T extends Model> extends AbstractPane<T> { * Updates the description by recreating the label. */ protected void updateDescription() { + clearStyleRange(); updateText(); - updateLinkRange(); + + if (styledText.isEnabled()) { + updateLinkRange(); + } } /** @@ -347,6 +371,11 @@ public abstract class MapAsComposite<T extends Model> extends AbstractPane<T> { protected void updateText() { String name = mappingChangeHandler.name(); + + if (name == null) { + name = JptUiMappingsMessages.NoNameSet; + } + String mappingType = mappingChangeHandler.mappingType(); String text = buildText(name, mappingType); diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/QueryHintsComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/QueryHintsComposite.java index 69ac28006d..acb346e8e9 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/QueryHintsComposite.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/QueryHintsComposite.java @@ -329,7 +329,7 @@ public class QueryHintsComposite extends AbstractPane<Query> helpId ); - Table table = getTable(); + Table table = getMainControl(); TableViewer tableViewer = new TableViewer(table); tableViewer.setCellEditors(buildCellEditors(table)); diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmJavaAttributeChooser.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmJavaAttributeChooser.java index 74463def4c..4a6652f2c0 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmJavaAttributeChooser.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmJavaAttributeChooser.java @@ -77,6 +77,18 @@ public class OrmJavaAttributeChooser extends AbstractFormPane<OrmAttributeMappin * (non-Javadoc) */ @Override + public void enableWidgets(boolean enabled) { + super.enableWidgets(enabled); + + if (!text.isDisposed()) { + text.setEnabled(enabled); + } + } + + /* + * (non-Javadoc) + */ + @Override protected void initializeLayout(Composite container) { text = buildLabeledText( diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmPersistentAttributeDetailsPage.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmPersistentAttributeDetailsPage.java index 6a275e8958..69ebbb3288 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmPersistentAttributeDetailsPage.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmPersistentAttributeDetailsPage.java @@ -9,6 +9,7 @@ ******************************************************************************/ package org.eclipse.jpt.ui.internal.orm.details; +import java.util.ArrayList; import java.util.Iterator; import org.eclipse.jpt.core.context.AttributeMapping; import org.eclipse.jpt.core.context.PersistentAttribute; @@ -16,16 +17,17 @@ import org.eclipse.jpt.core.context.orm.OrmAttributeMapping; import org.eclipse.jpt.core.context.orm.OrmPersistentAttribute; import org.eclipse.jpt.ui.WidgetFactory; import org.eclipse.jpt.ui.details.AttributeMappingUiProvider; +import org.eclipse.jpt.ui.details.JpaComposite; import org.eclipse.jpt.ui.internal.details.PersistentAttributeDetailsPage; import org.eclipse.jpt.ui.internal.mappings.details.OrmPersistentAttributeMapAsComposite; +import org.eclipse.jpt.ui.internal.util.PaneEnabler; +import org.eclipse.jpt.ui.internal.widgets.AbstractPane; import org.eclipse.jpt.utility.internal.CollectionTools; -import org.eclipse.jpt.utility.internal.iterators.ArrayIterator; import org.eclipse.jpt.utility.internal.model.value.TransformationPropertyValueModel; import org.eclipse.jpt.utility.model.value.PropertyValueModel; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; import org.eclipse.ui.part.PageBook; /** @@ -86,6 +88,15 @@ public class OrmPersistentAttributeDetailsPage extends PersistentAttributeDetail return CollectionTools.array(attributeMappingUiProviders(), new AttributeMappingUiProvider[CollectionTools.size(attributeMappingUiProviders())]); } + private PropertyValueModel<Boolean> buildPaneEnablerHolder() { + return new TransformationPropertyValueModel<OrmPersistentAttribute, Boolean>(getSubjectHolder()) { + @Override + protected Boolean transform_(OrmPersistentAttribute value) { + return !value.isVirtual(); + } + }; + } + /* * (non-Javadoc) */ @@ -102,15 +113,6 @@ public class OrmPersistentAttributeDetailsPage extends PersistentAttributeDetail return jpaPlatformUi().defaultOrmAttributeMappingUiProviders(); } - /* - * (non-Javadoc) - */ - @Override - protected void doPopulate() { - super.doPopulate(); - updateEnbabledState(); - } - private PropertyValueModel<OrmAttributeMapping> getMappingHolder() { return new TransformationPropertyValueModel<PersistentAttribute, OrmAttributeMapping>(getSubjectHolder()) { @Override @@ -126,14 +128,21 @@ public class OrmPersistentAttributeDetailsPage extends PersistentAttributeDetail @Override protected void initializeLayout(Composite container) { + ArrayList<AbstractPane<?>> panes = new ArrayList<AbstractPane<?>>(2); + // Map As composite - new OrmPersistentAttributeMapAsComposite( + OrmPersistentAttributeMapAsComposite mapAsPane = new OrmPersistentAttributeMapAsComposite( this, buildSubPane(container, 0, 0, 5, 0) ); + panes.add(mapAsPane); + // Entity type widgets - new OrmJavaAttributeChooser(this, getMappingHolder(), container); + OrmJavaAttributeChooser javaAttributePane = + new OrmJavaAttributeChooser(this, getMappingHolder(), container); + + panes.add(javaAttributePane); // Mapping properties pane PageBook attributePane = buildMappingPageBook(container); @@ -145,22 +154,25 @@ public class OrmPersistentAttributeDetailsPage extends PersistentAttributeDetail gridData.grabExcessVerticalSpace = true; attributePane.setLayoutData(gridData); + + installPaneEnabler(panes); } - public void updateEnabledState(boolean enabled, Control control) { - control.setEnabled(enabled); - if (control instanceof Composite) { - for (Iterator<Control> i = new ArrayIterator<Control>(((Composite) control).getChildren()); i.hasNext(); ) { - updateEnabledState(enabled, i.next()); - } - } + private void installPaneEnabler(ArrayList<AbstractPane<?>> panes) { + new PaneEnabler(buildPaneEnablerHolder(), panes); } - public void updateEnbabledState() { - if (subject() == null || subject().getParent() == null) { - return; + /* + * (non-Javadoc) + */ + @Override + protected void mappingPageChanged(JpaComposite<AttributeMapping> mappingComposite) { + boolean enabled = false; + + if (subject() != null && subject().getParent() != null) { + enabled = !subject().isVirtual(); } - boolean enabled = !subject().isVirtual(); - updateEnabledState(enabled, getControl()); + + mappingComposite.enableWidgets(enabled); } }
\ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/persistence/details/PersistenceUnitPropertiesComposite.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/persistence/details/PersistenceUnitPropertiesComposite.java index 7c344a0573..ed137d0195 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/persistence/details/PersistenceUnitPropertiesComposite.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/persistence/details/PersistenceUnitPropertiesComposite.java @@ -345,7 +345,7 @@ public class PersistenceUnitPropertiesComposite extends AbstractPane<Persistence helpId ); - Table table = getTable(); + Table table = getMainControl(); TableViewer tableViewer = new TableViewer(table); tableViewer.setCellEditors(buildCellEditors(table)); diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/util/PaneEnabler.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/util/PaneEnabler.java index b183f85aa8..63685b1b52 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/util/PaneEnabler.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/util/PaneEnabler.java @@ -3,7 +3,7 @@ * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. - * + * * Contributors: * Oracle - initial API and implementation ******************************************************************************/ @@ -15,6 +15,7 @@ import org.eclipse.jpt.ui.internal.widgets.AbstractPane; import org.eclipse.jpt.utility.internal.CollectionTools; import org.eclipse.jpt.utility.internal.iterators.TransformationIterator; import org.eclipse.jpt.utility.model.value.PropertyValueModel; +import org.eclipse.swt.widgets.Composite; /** * This <code>PaneEnabler</code> keeps the "enabled" state of a collection of @@ -167,7 +168,24 @@ public class PaneEnabler extends StateController } public void updateState(boolean state) { - this.pane.enableWidgets(state); + + Composite container = this.pane.getControl(); + + if (!container.isDisposed()) { + + // Remove the enablement from the pane's control since this enabler + // is responsible to manage its enablement state + boolean enablementManaged = this.pane.isEnablementManaged(container); + this.pane.addToEnablementControl(container); + + // Now we can change the enablement state of the pane's widgets + this.pane.enableWidgets(state); + + // Restore the enablement state + if (enablementManaged) { + this.pane.removeFromEnablementControl(container); + } + } } } }
\ No newline at end of file diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AbstractPane.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AbstractPane.java index 01db99331a..4376bf29ed 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AbstractPane.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AbstractPane.java @@ -53,7 +53,6 @@ import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Layout; @@ -103,6 +102,11 @@ public abstract class AbstractPane<T extends Model> private Composite container; /** + * + */ + private ArrayList<AbstractPane<?>> internalPanesForEnablementControl; + + /** * The aligner responsible to align the left controls. */ private ControlAligner leftControlAligner; @@ -141,6 +145,13 @@ public abstract class AbstractPane<T extends Model> private WidgetFactory widgetFactory; /** + * The collection of <code>Control</code>s that are displayed in this pane, + * which will have their enablement state updated when + * {@link #enableWidgets(boolean)} is called. + */ + private ArrayList<Control> widgets; + + /** * Creates a new <code>AbstractSubjectPane</code>. * * @category Constructor @@ -333,6 +344,19 @@ public abstract class AbstractPane<T extends Model> protected void addPropertyNames(Collection<String> propertyNames) { } + /** + * Indicates that the given <code>Control</code> has its enablement state + * managed by this pane, i.e. through {@link #enableWidgets(boolean)}. + * + * @param control The <code>Control</code> to manage its enablement state + * automatically + * + * @category Layout + */ + public final void addToEnablementControl(Control control) { + control.setData("enablement", null); + } + private PropertyChangeListener buildAspectChangeListener() { return new SWTPropertyChangeListenerWrapper(buildAspectChangeListener_()); } @@ -1352,9 +1376,11 @@ public abstract class AbstractPane<T extends Model> // Re-parent the left control to the new sub pane leftControl.setParent(container); this.leftControlAligner.add(leftControl); + this.widgets.add(leftControl); // Center control centerControl.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + this.widgets.add(centerControl); // Re-parent the center control to the new sub pane centerControl.setParent(container); @@ -1385,6 +1411,7 @@ public abstract class AbstractPane<T extends Model> rightControl.setLayoutData(gridData); this.rightControlAligner.add(rightControl); + this.widgets.add(rightControl); return container; } @@ -2707,6 +2734,7 @@ public abstract class AbstractPane<T extends Model> list.addSelectionListener(buildSelectionListener(selectionHolder)); list.setLayoutData(new GridData(GridData.FILL_BOTH)); + this.widgets.add(list); if (helpId != null) { helpSystem().setHelp(list, helpId); @@ -3400,6 +3428,7 @@ public abstract class AbstractPane<T extends Model> GridData gridData = new GridData(GridData.FILL_BOTH); gridData.heightHint = table.getItemHeight() * 4; table.setLayoutData(gridData); + this.widgets.add(table); if (helpId != null) { helpSystem().setHelp(table, helpId); @@ -3582,6 +3611,7 @@ public abstract class AbstractPane<T extends Model> button.setLayoutData(new GridData()); BooleanButtonModelAdapter.adapt(booleanHolder, button); + this.widgets.add(button); if (helpId != null) { helpSystem().setHelp(button, helpId); @@ -3638,6 +3668,8 @@ public abstract class AbstractPane<T extends Model> checkBox ); + this.widgets.add(checkBox.getCheckBox()); + if (helpId != null) { helpSystem().setHelp(checkBox.getCheckBox(), helpId); } @@ -3783,6 +3815,31 @@ public abstract class AbstractPane<T extends Model> } /** + * Changes the enablement state of the children <code>Control</code>s. + * + * @param enabled <code>true</code> to enable the widgets or <code>false</code> + * to disable them + * + * @category Layout + */ + private void enableChildren(boolean enabled) { + + // Only update the enablement state of the child widgets if this pane + // has its enablement managed by enableWidgets() (i.e. not done manually) + if (this.isEnablementManaged(container)) { + + for (Control control : this.widgets) { + + // Make sure to check if the child control doesn't have its + // enablement state manually managed + if (this.isEnablementManaged(control)) { + control.setEnabled(enabled); + } + } + } + } + + /** * Changes the enablement state of the widgets of this pane. * * @param enabled <code>true</code> to enable the widgets or <code>false</code> @@ -3793,11 +3850,12 @@ public abstract class AbstractPane<T extends Model> public void enableWidgets(boolean enabled) { if (!container.isDisposed()) { - - container.setEnabled(enabled); + this.enableChildren(enabled); for (AbstractPane<?> subPane : this.subPanes) { - subPane.enableWidgets(enabled); + if (this.isPaneEnablementManaged(subPane)) { + subPane.enableWidgets(enabled); + } } } } @@ -3868,9 +3926,9 @@ public abstract class AbstractPane<T extends Model> } /** - * Returns + * Returns the factory responsible for creating the widgets. * - * @return + * @return The factory used by this pane to create the widgets * * @category Layout */ @@ -3889,7 +3947,7 @@ public abstract class AbstractPane<T extends Model> * @category Layout */ protected final int groupBoxMargin() { - Group group = this.widgetFactory.createGroup(Display.getCurrent().getActiveShell(), ""); + Group group = this.widgetFactory.createGroup(SWTUtil.getShell(), ""); Rectangle clientArea = group.getClientArea(); group.dispose(); return clientArea.x + 5; @@ -3957,10 +4015,12 @@ public abstract class AbstractPane<T extends Model> this.subjectHolder = (PropertyValueModel<T>) subjectHolder; this.widgetFactory = widgetFactory; this.subPanes = new ArrayList<AbstractPane<?>>(); + this.widgets = new ArrayList<Control>(); this.leftControlAligner = new ControlAligner(); this.rightControlAligner = new ControlAligner(); this.subjectChangeListener = this.buildSubjectChangeListener(); this.aspectChangeListener = this.buildAspectChangeListener(); + this.internalPanesForEnablementControl = new ArrayList<AbstractPane<?>>(); this.initialize(); } @@ -3975,6 +4035,45 @@ public abstract class AbstractPane<T extends Model> protected abstract void initializeLayout(Composite container); /** + * Determines whether the enablement state is managed by this pane or is + * manually managed. + * + * @param control The <code>Control</code> to verify how its enablement state + * is managed + * @return <code>true</code> if the enablement state can be changed when + * {@link #enableWidgets(boolean)} is called; <code>false</code> if its + * enablement state is manually changed + */ + public final boolean isEnablementManaged(Control control) { + return control.getData("enablement") != Boolean.FALSE; + } + + /** + * Determines whether the given pane has its enablement state managed by this + * pane. + * + * @param subPane The sub-pane to verify how its enablement state is being + * managed + * @return <code>true</code> if the sub-pane's enablement state is managed by + * this state; <code>false</code> if it's manually managed + * + * @category Layout + */ + private boolean isPaneEnablementManaged(AbstractPane<?> subPane) { + + return // Test 1: This pane is being automatically managed and the + // sub-pane was registered has an internal pane, which means its + // enablement state is being managed automatically as well. A + // sub-pane is managed automatically only when PaneEnabler changes + // the enablement management checks + this.isEnablementManaged(container) && + this.internalPanesForEnablementControl.contains(subPane) || + + // Test 2: Check to see if the pane is automatically managed + this.isEnablementManaged(subPane.getControl()); + } + + /** * Determines whether * * @return @@ -4133,6 +4232,30 @@ public abstract class AbstractPane<T extends Model> } /** + * Removes the given <code>AbstractPane</code>'s <code>Control</code> from + * having its enablement state managed by this pane. However, if this pane + * has its enablement state modified, the given pane will receive that + * notification. + * + * @param pane The pane to have its enablement state not managed by this pane + */ + public void removeFromEnablementControl(AbstractPane<?> pane) { + this.removeFromEnablementControl(pane.getControl()); + this.internalPanesForEnablementControl.add(pane); + } + + /** + * Removes the given <code>Control</code> from having its enablement state + * being managed by this pane. + * + * @param control The <code>Control</code> that has its enablement state + * manually controlled + */ + public void removeFromEnablementControl(Control control) { + control.setData("enablement", Boolean.FALSE); + } + + /** * Removes the given pane's controls (those that were registered for * alignment) from this pane. * diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AddRemoveListPane.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AddRemoveListPane.java index e0d5967200..5797e748bd 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AddRemoveListPane.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AddRemoveListPane.java @@ -419,6 +419,14 @@ public class AddRemoveListPane<T extends Model> extends AddRemovePane<T> * (non-Javadoc) */ @Override + public Table getMainControl() { + return table; + } + + /* + * (non-Javadoc) + */ + @Override @SuppressWarnings("unchecked") protected void initializeMainComposite(Composite container, Adapter adapter, @@ -433,6 +441,8 @@ public class AddRemoveListPane<T extends Model> extends AddRemovePane<T> helpId ); + removeFromEnablementControl(table); + TableModelAdapter model = TableModelAdapter.adapt( (ListValueModel<Object>) listHolder, buildSelectedItemHolder(), diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AddRemovePane.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AddRemovePane.java index ed752c9079..b53f180057 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AddRemovePane.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AddRemovePane.java @@ -353,9 +353,15 @@ public abstract class AddRemovePane<T extends Model> extends AbstractPane<T> */ @Override public void enableWidgets(boolean enabled) { + super.enableWidgets(enabled); this.enabled = enabled; - updateButtons(); + + if (!this.getMainControl().isDisposed()) { + this.getMainControl().setEnabled(enabled); + } + + this.updateButtons(); } protected final Composite getContainer() { @@ -370,6 +376,13 @@ public abstract class AddRemovePane<T extends Model> extends AbstractPane<T> return listHolder; } + /** + * Returns + * + * @return + */ + public abstract Composite getMainControl(); + protected final WritablePropertyValueModel<Object> getSelectedItemHolder() { return selectedItemHolder; } @@ -430,6 +443,7 @@ public abstract class AddRemovePane<T extends Model> extends AbstractPane<T> // Add button addButton = buildAddButton(container); addAlignRight(addButton); + removeFromEnablementControl(addButton); // Custom button addCustomButtonAfterAddButton(container, helpId); @@ -437,6 +451,7 @@ public abstract class AddRemovePane<T extends Model> extends AbstractPane<T> // Optional button if (adapter.hasOptionalButton()) { optionalButton = buildOptionalButton(container); + removeFromEnablementControl(optionalButton); addAlignRight(optionalButton); } @@ -445,6 +460,7 @@ public abstract class AddRemovePane<T extends Model> extends AbstractPane<T> // Remove button removeButton = buildRemoveButton(container); + removeFromEnablementControl(removeButton); addAlignRight(removeButton); // Update the help topic ID diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AddRemoveTablePane.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AddRemoveTablePane.java index 7368abdfc4..4d16676401 100644 --- a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AddRemoveTablePane.java +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AddRemoveTablePane.java @@ -229,12 +229,11 @@ public abstract class AddRemoveTablePane<T extends Model> extends AddRemovePane< }; } - /** - * Gives access to the main widget of this add/remove pane. - * - * @return The main widget of this pane + /* + * (non-Javadoc) */ - protected Table getTable() { + @Override + public Table getMainControl() { return table; } @@ -253,6 +252,8 @@ public abstract class AddRemoveTablePane<T extends Model> extends AddRemovePane< table = buildTable(container, helpId); table.setHeaderVisible(true); + removeFromEnablementControl(table); + TableModelAdapter<Object> tableModel = TableModelAdapter.adapt( (ListValueModel<Object>) listHolder, buildSelectedItemHolder(), |