diff options
author | Tom Schindl | 2013-05-29 09:19:13 +0000 |
---|---|---|
committer | Tom Schindl | 2013-05-29 09:19:13 +0000 |
commit | 3248e341b6e9b94fa360bf6a5ebe286be19a1e46 (patch) | |
tree | 78e9b9eaed1120c66700a461c257c3b583a1e9f2 /bundles | |
parent | f32fdd009bb6bdb2b0487df02614cdeb9dde0108 (diff) | |
download | org.eclipse.efxclipse-3248e341b6e9b94fa360bf6a5ebe286be19a1e46.tar.gz org.eclipse.efxclipse-3248e341b6e9b94fa360bf6a5ebe286be19a1e46.tar.xz org.eclipse.efxclipse-3248e341b6e9b94fa360bf6a5ebe286be19a1e46.zip |
NEW - bug 409340: [e4] Add support for min/max
Diffstat (limited to 'bundles')
6 files changed, 281 insertions, 20 deletions
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/BaseStackRenderer.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/BaseStackRenderer.java index d603e16a2..e17c2e14a 100755 --- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/BaseStackRenderer.java +++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.base/src/org/eclipse/fx/ui/workbench/renderers/base/BaseStackRenderer.java @@ -39,6 +39,7 @@ import org.eclipse.fx.ui.workbench.renderers.base.widget.WCallback; import org.eclipse.fx.ui.workbench.renderers.base.widget.WLayoutedWidget; import org.eclipse.fx.ui.workbench.renderers.base.widget.WPlaceholderWidget; import org.eclipse.fx.ui.workbench.renderers.base.widget.WStack; +import org.eclipse.fx.ui.workbench.renderers.base.widget.WMinMaxableWidget.WMinMaxState; import org.eclipse.fx.ui.workbench.renderers.base.widget.WStack.WStackItem; import org.osgi.service.event.Event; import org.osgi.service.event.EventHandler; @@ -138,6 +139,7 @@ public abstract class BaseStackRenderer<N, I, IC> extends BaseRenderer<MPartStac @Override protected void initWidget(final MPartStack element, final WStack<N, I, IC> widget) { super.initWidget(element, widget); +// widget.setMinMaxState(WMinMaxState.MAXIMIZED); widget.setMouseSelectedItemCallback(new WCallback<WStackItem<I, IC>, Void>() { @Override diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/META-INF/MANIFEST.MF b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/META-INF/MANIFEST.MF index 7d1c279cf..09243d219 100755 --- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/META-INF/MANIFEST.MF +++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/META-INF/MANIFEST.MF @@ -24,12 +24,14 @@ Require-Bundle: org.eclipse.e4.ui.model.workbench;bundle-version="0.10.1", org.eclipse.fx.core;bundle-version="0.8.1", org.eclipse.fx.ui.dialogs;bundle-version="0.8.1", org.eclipse.emf.common;bundle-version="2.9.0", - org.eclipse.emf.ecore;bundle-version="2.9.0" + org.eclipse.emf.ecore;bundle-version="2.9.0", + org.eclipse.fx.osgi.util;bundle-version="0.8.1" Import-Package: javafx.application, javafx.beans;version="2.0.0", javafx.beans.property, javafx.beans.value, javafx.collections, + javafx.css;version="8.0.0", javafx.event, javafx.geometry, javafx.scene, diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefStackRenderer.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefStackRenderer.java index 70d64ea18..3057050d3 100755 --- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefStackRenderer.java +++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/DefStackRenderer.java @@ -25,6 +25,8 @@ import javafx.scene.control.TabPane; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.KeyEvent; +import javafx.scene.layout.Pane; +import javafx.scene.layout.StackPane; import javafx.util.Callback; import javax.annotation.PostConstruct; @@ -43,6 +45,7 @@ import org.eclipse.fx.ui.workbench.renderers.base.BaseStackRenderer; import org.eclipse.fx.ui.workbench.renderers.base.widget.WCallback; import org.eclipse.fx.ui.workbench.renderers.base.widget.WStack; import org.eclipse.fx.ui.workbench.renderers.base.widget.WStack.WStackItem; +import org.eclipse.fx.ui.workbench.renderers.fx.widget.MinMaxGroup; import org.eclipse.fx.ui.workbench.renderers.fx.widget.PaginationItem; import org.eclipse.fx.ui.workbench.renderers.fx.widget.WLayoutedWidgetImpl; @@ -63,12 +66,26 @@ public class DefStackRenderer extends BaseStackRenderer<Node,Object, Node> { private WCallback<WStackItem<Object, Node>, Void> mouseSelectedItemCallback; private WCallback<WStackItem<Object, Node>, Void> keySelectedItemCallback; -// private WCallback<WMinMaxState, Void> minMaxCallback; + private WCallback<WMinMaxState, Void> minMaxCallback; + private MinMaxGroup minMaxGroup; private boolean inKeyTraversal; // @Inject // private EModelService modelService; + @Override + protected Pane createStaticPane() { + return new StackPane() { + @Override + protected void layoutChildren() { + super.layoutChildren(); + if( minMaxGroup != null ) { + + } + } + }; + } + public void setMouseSelectedItemCallback(WCallback<WStackItem<Object, Node>, Void> mouseSelectedItemCallback) { this.mouseSelectedItemCallback = mouseSelectedItemCallback; } @@ -94,27 +111,27 @@ public class DefStackRenderer extends BaseStackRenderer<Node,Object, Node> { @Override public void setMinMaxCallback(WCallback<WMinMaxState, Void> minMaxCallback) { -// this.minMaxCallback = minMaxCallback; + this.minMaxCallback = minMaxCallback; } @Override public void setMinMaxState(WMinMaxState state) { -// MinMaxState t = MinMaxState.RESTORED; -// switch (state) { -// case MAXIMIZED: -// t = MinMaxState.MAXIMIZED; -// break; -// case MINIMIZED: -// t = MinMaxState.MINIMIZED; -// break; -// case RESTORED: -// t = MinMaxState.RESTORED; -// break; -// case NONE: -// t = MinMaxState.NONE; -// break; -// } -// getWidget().setMinMaxState(t); + if( state == WMinMaxState.NONE ) { + if( minMaxGroup != null ) { + ((Pane)getStaticLayoutNode()).getChildren().remove(minMaxGroup); + minMaxGroup = null; + } + } else { + if( minMaxGroup == null ) { + minMaxGroup = new MinMaxGroup(); + minMaxGroup.setManaged(false); + minMaxGroup.setState(state); + ((Pane)getStaticLayoutNode()).getChildren().add(minMaxGroup); + } else { + minMaxGroup.setState(state); + ((Pane)getStaticLayoutNode()).requestLayout(); + } + } } @Override diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/widget/MinMaxGroup.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/widget/MinMaxGroup.java new file mode 100644 index 000000000..3ad9d29df --- /dev/null +++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/widget/MinMaxGroup.java @@ -0,0 +1,141 @@ +/*******************************************************************************
+ * Copyright (c) 2013 BestSolution.at and others.
+ * All rights reserved. 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:
+ * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.ui.workbench.renderers.fx.widget;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.SimpleObjectProperty;
+import javafx.scene.Group;
+import javafx.scene.Node;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.scene.layout.HBox;
+import javafx.scene.paint.Color;
+import javafx.scene.shape.Rectangle;
+
+import org.eclipse.fx.core.log.Logger;
+import org.eclipse.fx.osgi.util.LoggerCreator;
+import org.eclipse.fx.ui.workbench.renderers.base.widget.WMinMaxableWidget.WMinMaxState;
+
+public class MinMaxGroup extends HBox {
+
+ protected ObjectProperty<Node> maximizeGraphic = new SimpleObjectProperty<>(this,"maximizeGraphic");
+ protected ObjectProperty<Node> minimizeGraphic = new SimpleObjectProperty<>(this,"minimizeGraphic");
+ protected ObjectProperty<Node> restoreGraphic = new SimpleObjectProperty<>(this,"restoreGraphic");
+
+ private static Logger LOGGER = LoggerCreator.createLogger(MinMaxGroup.class);
+
+ /**
+ *
+ */
+ public MinMaxGroup() {
+ maximizeGraphic.set(createMaxIcon());
+ minimizeGraphic.set(createMinIcon());
+ restoreGraphic.set(createRestoreIcon());
+
+ getChildren().setAll(minimizeGraphic.get(), maximizeGraphic.get());
+
+ }
+
+ private Node createMaxIcon() {
+ Group g = new Group();
+
+ Rectangle r = new Rectangle(10,10,Color.WHITE);
+ r.setStrokeWidth(1.0);
+ r.setStroke(Color.BLACK);
+ g.getChildren().add(r);
+
+ r = new Rectangle(10,2,Color.WHITE);
+ r.setStrokeWidth(1.0);
+ r.setStroke(Color.BLACK);
+ g.getChildren().add(r);
+
+ return g;
+ }
+
+ private Node createMinIcon() {
+ Rectangle r = new Rectangle(10,3,Color.WHITE);
+ r.setStrokeWidth(1.0);
+ r.setStroke(Color.BLACK);
+ return r;
+ }
+
+ private Node createRestoreIcon() {
+ Group g = new Group();
+
+ Rectangle r = new Rectangle(5,0,5,5);
+ r.setFill(Color.WHITE);
+ r.setStrokeWidth(1.0);
+ r.setStroke(Color.BLACK);
+ g.getChildren().add(r);
+
+ r = new Rectangle(5,0,5,1);
+ r.setFill(Color.BLACK);
+ r.setStroke(Color.BLACK);
+ g.getChildren().add(r);
+
+ r = new Rectangle(3,3,5,5);
+ r.setFill(Color.WHITE);
+ r.setStrokeWidth(1.0);
+ r.setStroke(Color.BLACK);
+ g.getChildren().add(r);
+
+ r = new Rectangle(3,3,5,1);
+ r.setFill(Color.BLACK);
+ r.setStroke(Color.BLACK);
+ g.getChildren().add(r);
+
+ return g;
+ }
+
+ private static final Node getImageView(String iconName) {
+ String path = "/icons/"+iconName+".png";
+ try(InputStream in = MinMaxGroup.class.getResourceAsStream(path)) {
+ return new ImageView(new Image(in));
+ } catch (IOException e) {
+ LOGGER.error("Unable to load '"+path+"'", e);
+ }
+ return null;
+ }
+
+ public ObjectProperty<Node> maximizeGraphicProperty() {
+ return maximizeGraphic;
+ }
+
+ public ObjectProperty<Node> minimizeGraphicProperty() {
+ return minimizeGraphic;
+ }
+
+ public ObjectProperty<Node> restoreGraphicProperty() {
+ return restoreGraphic;
+ }
+
+ public void setState(WMinMaxState state) {
+ switch (state) {
+ case NONE:
+ getChildren().clear();
+ break;
+ case MAXIMIZED:
+ getChildren().setAll(minimizeGraphic.get(), restoreGraphic.get());
+ break;
+ case MINIMIZED:
+ getChildren().setAll(restoreGraphic.get());
+ break;
+ case RESTORED:
+ getChildren().setAll(minimizeGraphic.get(), maximizeGraphic.get());
+ break;
+ default:
+ break;
+ }
+ }
+}
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/widget/StyleableMinMaxGroup.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/widget/StyleableMinMaxGroup.java new file mode 100644 index 000000000..5f00b5fe7 --- /dev/null +++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/widget/StyleableMinMaxGroup.java @@ -0,0 +1,94 @@ +/*******************************************************************************
+ * Copyright (c) 2013 BestSolution.at and others.
+ * All rights reserved. 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:
+ * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.ui.workbench.renderers.fx.widget;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javafx.beans.property.StringProperty;
+import javafx.css.CssMetaData;
+import javafx.css.StyleConverter;
+import javafx.css.Styleable;
+import javafx.css.StyleableProperty;
+import javafx.css.StyleableStringProperty;
+import javafx.scene.layout.StackPane;
+
+/**
+ * @author tomschindl
+ *
+ */
+public class StyleableMinMaxGroup extends MinMaxGroup {
+ private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
+
+ private static final CssMetaData<StyleableMinMaxGroup,String> MAXIMIZE_GRAPHIC =
+ new CssMetaData<StyleableMinMaxGroup,String>("-fx-graphic",
+ StringConverter.INSTANCE) {
+
+ @Override
+ public boolean isSettable(StyleableMinMaxGroup n) {
+ // Note that we care about the graphic, not imageUrl
+ return n.maximizeGraphic == null || !n.maximizeGraphic.isBound();
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public StyleableProperty<String> getStyleableProperty(StyleableMinMaxGroup n) {
+ return (StyleableProperty<String>)n.maximizeUrlProperty();
+ }
+ };
+
+ static {
+ final List<CssMetaData<? extends Styleable, ?>> styleables =
+ new ArrayList<CssMetaData<? extends Styleable, ?>>(StackPane.getClassCssMetaData());
+ STYLEABLES = Collections.unmodifiableList(styleables);
+ }
+
+ @Override
+ public List<CssMetaData<? extends Styleable, ?>> getCssMetaData() {
+ return STYLEABLES;
+ }
+
+ private StringProperty maximizeUrl;
+
+ private StringProperty maximizeUrlProperty() {
+ if( maximizeUrl == null ) {
+ maximizeUrl = new StyleableStringProperty() {
+
+ @Override
+ public CssMetaData<? extends Styleable, String> getCssMetaData() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Object getBean() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getName() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ };
+ }
+ return maximizeUrl;
+ }
+
+
+
+ static class StringConverter extends StyleConverter<String, String> {
+ final static StringConverter INSTANCE = new StringConverter();
+ }
+}
diff --git a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/widget/WLayoutedWidgetImpl.java b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/widget/WLayoutedWidgetImpl.java index 31e063219..b39f51da8 100755 --- a/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/widget/WLayoutedWidgetImpl.java +++ b/bundles/runtime/org.eclipse.fx.ui.workbench.renderers.fx/src/org/eclipse/fx/ui/workbench/renderers/fx/widget/WLayoutedWidgetImpl.java @@ -13,6 +13,7 @@ package org.eclipse.fx.ui.workbench.renderers.fx.widget; import java.util.List; import javafx.scene.Node; +import javafx.scene.layout.Pane; import javafx.scene.layout.StackPane; import javax.inject.Inject; @@ -47,7 +48,7 @@ public abstract class WLayoutedWidgetImpl<N,NN extends Node,M extends MUIElement } protected Node createStaticLayoutNode() { - StackPane staticLayoutGroup = new StackPane(); + Pane staticLayoutGroup = createStaticPane(); Node n = getWidgetNode(); if( n != null ) { staticLayoutGroup.getChildren().add(n); @@ -57,6 +58,10 @@ public abstract class WLayoutedWidgetImpl<N,NN extends Node,M extends MUIElement return staticLayoutGroup; } + protected Pane createStaticPane() { + return new StackPane(); + } + @Override public void addStyleClasses(List<String> classnames) { getWidgetNode().getStyleClass().addAll(classnames); |