Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkmoore2008-04-15 19:41:10 +0000
committerkmoore2008-04-15 19:41:10 +0000
commitf2de955d2ec2bc544708cb8b6449eea35f9c162c (patch)
tree1f45f5f89d190cadb12d41453c7c31e006f697fe /jpa/plugins/org.eclipse.jpt.ui
parentea7884c64bc11bf5ffcc005603507695736d594d (diff)
downloadwebtools.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')
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/property_files/jpt_ui_mappings.properties1
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/details/JpaComposite.java12
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/details/PersistentAttributeDetailsPage.java5
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/JptUiMappingsMessages.java3
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/ColumnComposite.java57
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/EmbeddedAttributeOverridesComposite.java4
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnComposite.java42
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinColumnsComposite.java24
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/JoinTableComposite.java77
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/MapAsComposite.java31
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/mappings/details/QueryHintsComposite.java2
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmJavaAttributeChooser.java12
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/orm/details/OrmPersistentAttributeDetailsPage.java62
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/persistence/details/PersistenceUnitPropertiesComposite.java2
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/util/PaneEnabler.java22
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AbstractPane.java137
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AddRemoveListPane.java10
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AddRemovePane.java18
-rw-r--r--jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/widgets/AddRemoveTablePane.java11
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(),

Back to the top