Bug 464382 - Add support to show lightweight dialogs
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WCompositePart.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WCompositePart.java
index 82251e8..6dcd818 100644
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WCompositePart.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WCompositePart.java
@@ -22,7 +22,7 @@
* @param <N>
* the native widget
*/
-public interface WCompositePart<N> extends WLayoutedWidget<MCompositePart> {
+public interface WCompositePart<N> extends WLayoutedWidget<MCompositePart>, WDialogHost {
/**
* PersistatedState Key to fix the layout.
* <p>
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WPart.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WPart.java
index 46e9a76..2a32960 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WPart.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WPart.java
@@ -23,7 +23,7 @@
* @param <M>
* the menu widget
*/
-public interface WPart<N, T, M> extends WLayoutedWidget<MPart> {
+public interface WPart<N, T, M> extends WLayoutedWidget<MPart>, WDialogHost {
/**
* Set a toolbar
*
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WPerspective.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WPerspective.java
index ad34941..3002279 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WPerspective.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/widget/WPerspective.java
@@ -23,7 +23,7 @@
* @param <N>
* the native
*/
-public interface WPerspective<N> extends WLayoutedWidget<MPerspective> {
+public interface WPerspective<N> extends WLayoutedWidget<MPerspective>, WDialogHost {
/**
* Append widgets
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefCompositePartRenderer.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefCompositePartRenderer.java
index 3fa5d39..7737560 100644
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefCompositePartRenderer.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefCompositePartRenderer.java
@@ -27,6 +27,7 @@
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
+import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javax.inject.Inject;
@@ -219,7 +220,35 @@
}
static class WFixedSashImpl extends AbstractCompositePartImpl<GridLayoutPane> {
-
+ private StackPane overlayContainer;
+
+ @Override
+ public void setDialog(Object dialogNode) {
+ @NonNull
+ Pane staticLayoutNode = (@NonNull Pane) getStaticLayoutNode();
+ if (dialogNode == null) {
+ if (this.overlayContainer != null) {
+ ((Pane) staticLayoutNode).getChildren().remove(this.overlayContainer);
+ this.overlayContainer.getChildren().clear();
+ }
+ } else {
+ if (this.overlayContainer == null) {
+ this.overlayContainer = new StackPane();
+ this.overlayContainer.getStyleClass().add("overlay-container"); //$NON-NLS-1$
+ this.overlayContainer.setManaged(false);
+ this.overlayContainer.setMouseTransparent(false);
+ staticLayoutNode.layoutBoundsProperty().addListener( o -> {
+ staticLayoutNode.layoutBoundsProperty().get();
+ this.overlayContainer.resize(staticLayoutNode.getWidth(), staticLayoutNode.getHeight());
+ });
+ }
+
+ this.overlayContainer.resize(staticLayoutNode.getWidth(), staticLayoutNode.getHeight());
+ this.overlayContainer.getChildren().setAll((Node)dialogNode);
+ ((Pane) staticLayoutNode).getChildren().add(this.overlayContainer);
+ }
+ }
+
private static @NonNull GridData toGridData(Map<String, String> dataMap) {
GridData gd = new GridData();
if (dataMap.containsKey(WCompositePart.FIXED_LAYOUT_WIDTH)) {
@@ -355,6 +384,35 @@
static class WResizableSashImpl extends AbstractCompositePartImpl<SplitPane> {
private List<WLayoutedWidget<MPartSashContainerElement>> items = new ArrayList<WLayoutedWidget<MPartSashContainerElement>>();
+ private StackPane overlayContainer;
+
+ @Override
+ public void setDialog(Object dialogNode) {
+ @NonNull
+ Pane staticLayoutNode = (@NonNull Pane) getStaticLayoutNode();
+ if (dialogNode == null) {
+ if (this.overlayContainer != null) {
+ ((Pane) staticLayoutNode).getChildren().remove(this.overlayContainer);
+ this.overlayContainer.getChildren().clear();
+ }
+ } else {
+ if (this.overlayContainer == null) {
+ this.overlayContainer = new StackPane();
+ this.overlayContainer.getStyleClass().add("overlay-container"); //$NON-NLS-1$
+ this.overlayContainer.setManaged(false);
+ this.overlayContainer.setMouseTransparent(false);
+ staticLayoutNode.layoutBoundsProperty().addListener( o -> {
+ staticLayoutNode.layoutBoundsProperty().get();
+ this.overlayContainer.resize(staticLayoutNode.getWidth(), staticLayoutNode.getHeight());
+ });
+ }
+
+ this.overlayContainer.resize(staticLayoutNode.getWidth(), staticLayoutNode.getHeight());
+ this.overlayContainer.getChildren().setAll((Node)dialogNode);
+ ((Pane) staticLayoutNode).getChildren().add(this.overlayContainer);
+ }
+ }
+
ChangeListener<Number> listener = new ChangeListener<Number>() {
boolean queueing;
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefPartRenderer.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefPartRenderer.java
index 5fa1aa2..3f039b4 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefPartRenderer.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefPartRenderer.java
@@ -113,6 +113,8 @@
private WMenu<Node> viewMenuWidget;
private WToolBar<Node> viewToolbarWidget;
+ private StackPane overlayContainer;
+
@Override
protected Pane createWidget() {
Pane tmp = CustomContainerSupport.createContainerPane(this.logger, this.context);
@@ -294,6 +296,33 @@
public @Nullable WToolBar<Node> getToolbar() {
return this.viewToolbarWidget;
}
+
+ @Override
+ public void setDialog(Object dialogNode) {
+ @NonNull
+ Pane staticLayoutNode = (@NonNull Pane) getStaticLayoutNode();
+ if (dialogNode == null) {
+ if (this.overlayContainer != null) {
+ ((Pane) staticLayoutNode).getChildren().remove(this.overlayContainer);
+ this.overlayContainer.getChildren().clear();
+ }
+ } else {
+ if (this.overlayContainer == null) {
+ this.overlayContainer = new StackPane();
+ this.overlayContainer.getStyleClass().add("overlay-container"); //$NON-NLS-1$
+ this.overlayContainer.setManaged(false);
+ this.overlayContainer.setMouseTransparent(false);
+ staticLayoutNode.layoutBoundsProperty().addListener( o -> {
+ staticLayoutNode.layoutBoundsProperty().get();
+ this.overlayContainer.resize(staticLayoutNode.getWidth(), staticLayoutNode.getHeight());
+ });
+ }
+
+ this.overlayContainer.resize(staticLayoutNode.getWidth(), staticLayoutNode.getHeight());
+ this.overlayContainer.getChildren().setAll((Node)dialogNode);
+ ((Pane) staticLayoutNode).getChildren().add(this.overlayContainer);
+ }
+ }
}
static class HandleGroup extends Group {
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefPerspectiveRenderer.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefPerspectiveRenderer.java
index 038e0c0..73135d2 100755
--- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefPerspectiveRenderer.java
+++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefPerspectiveRenderer.java
@@ -14,6 +14,8 @@
import java.util.List;
import javafx.scene.Node;
+import javafx.scene.layout.Pane;
+import javafx.scene.layout.StackPane;
import org.eclipse.e4.ui.model.application.ui.MUIElement;
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
@@ -23,19 +25,21 @@
import org.eclipse.fx.ui.workbench.renderers.base.widget.WLayoutedWidget;
import org.eclipse.fx.ui.workbench.renderers.base.widget.WPerspective;
import org.eclipse.fx.ui.workbench.renderers.fx.widget.WLayoutedWidgetImpl;
+import org.eclipse.jdt.annotation.NonNull;
/**
* default renderer for {@link MPerspective}
*/
public class DefPerspectiveRenderer extends BasePerspectiveRenderer<FillLayoutPane> {
-
+
@Override
protected Class<? extends WPerspective<FillLayoutPane>> getWidgetClass(MPerspective perspective) {
return PerspectiveWidgetImpl.class;
}
static class PerspectiveWidgetImpl extends WLayoutedWidgetImpl<FillLayoutPane, FillLayoutPane, MPerspective> implements WPerspective<FillLayoutPane> {
-
+ private StackPane overlayContainer;
+
@Override
protected FillLayoutPane getWidgetNode() {
return getWidget();
@@ -65,5 +69,32 @@
getWidget().getChildren().remove(widget.getStaticLayoutNode());
}
+ @Override
+ public void setDialog(Object dialogNode) {
+ @NonNull
+ Pane staticLayoutNode = (@NonNull Pane) getStaticLayoutNode();
+ if (dialogNode == null) {
+ if (this.overlayContainer != null) {
+ ((Pane) staticLayoutNode).getChildren().remove(this.overlayContainer);
+ this.overlayContainer.getChildren().clear();
+ }
+ } else {
+ if (this.overlayContainer == null) {
+ this.overlayContainer = new StackPane();
+ this.overlayContainer.getStyleClass().add("overlay-container"); //$NON-NLS-1$
+ this.overlayContainer.setManaged(false);
+ this.overlayContainer.setMouseTransparent(false);
+ staticLayoutNode.layoutBoundsProperty().addListener( o -> {
+ staticLayoutNode.layoutBoundsProperty().get();
+ this.overlayContainer.resize(staticLayoutNode.getWidth(), staticLayoutNode.getHeight());
+ });
+ }
+
+ this.overlayContainer.resize(staticLayoutNode.getWidth(), staticLayoutNode.getHeight());
+ this.overlayContainer.getChildren().setAll((Node)dialogNode);
+ ((Pane) staticLayoutNode).getChildren().add(this.overlayContainer);
+ }
+ }
+
}
}