├── settings.gradle ├── .gitignore ├── documentation └── images │ ├── logo.png │ ├── structure.png │ ├── dark-example.jpg │ ├── light-example.jpg │ ├── docknode-example.jpg │ ├── docknode-borderbutton-example.jpg │ ├── docknode-positionmenu-example.jpg │ ├── docknode-viewmodemenu-example.jpg │ ├── docknode-borderbutton-positionmenu-example.jpg │ └── docknode-borderbutton-viewmodemenu-example.jpg ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── src ├── test │ ├── resources │ │ └── icons │ │ │ ├── pdf.png │ │ │ ├── picture.png │ │ │ ├── youtube.png │ │ │ └── facebook.png │ └── java │ │ └── com │ │ └── dansoftware │ │ └── dock │ │ └── DockSystemTest.java └── main │ ├── resources │ └── com │ │ └── dansoftware │ │ └── dock │ │ ├── image │ │ ├── hide_black.png │ │ ├── hide_white.png │ │ ├── options_black.png │ │ ├── options_white.png │ │ ├── pos │ │ │ ├── top_left_black.png │ │ │ ├── top_left_white.png │ │ │ ├── bottom_left_black.png │ │ │ ├── bottom_left_white.png │ │ │ ├── top_right_black.png │ │ │ ├── top_right_white.png │ │ │ ├── bottom_right_black.png │ │ │ └── bottom_right_white.png │ │ └── view_mode │ │ │ ├── float_black.png │ │ │ ├── float_white.png │ │ │ ├── docked_black.png │ │ │ ├── docked_white.png │ │ │ ├── window_black.png │ │ │ └── window_white.png │ │ ├── DefaultValues.properties │ │ ├── light-style.css │ │ └── dark-style.css │ └── java │ └── com │ └── dansoftware │ └── dock │ ├── viewmode │ ├── event │ │ ├── SceneChangeEventHandler.java │ │ └── SceneChangedEvent.java │ ├── ViewModeStrategy.java │ ├── DockStrategy.java │ ├── ViewMode.java │ ├── FloatStrategy.java │ └── WindowStrategy.java │ ├── util │ ├── DockTool.java │ └── ListObserver.java │ ├── position │ ├── strategy │ │ ├── PositioningStrategy.java │ │ ├── TopLeftStrategy.java │ │ ├── TopRightStrategy.java │ │ ├── RightTopStrategy.java │ │ ├── RightBottomStrategy.java │ │ ├── BottomRightStrategy.java │ │ ├── BottomLeftStrategy.java │ │ ├── LeftBottomStrategy.java │ │ └── LeftTopStrategy.java │ └── DockPosition.java │ ├── docknode │ ├── DockNodeI18N.java │ ├── DockTitleBar.java │ ├── DockNodeToolBar.java │ ├── DockNodeMenu.java │ └── DockNode.java │ ├── border │ ├── DockFrame.java │ ├── BorderEdge.java │ ├── toolbar │ │ └── BorderToolbar.java │ └── BorderButton.java │ └── docksystem │ ├── DockSystem.java │ └── SplitPaneSystem.java ├── README.MD └── LICENSE /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'DockSystemFX' 2 | 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .gradle 3 | gradlew 4 | gradlew.bat 5 | build 6 | out 7 | model.pptx 8 | ~$model.pptx -------------------------------------------------------------------------------- /documentation/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/documentation/images/logo.png -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /src/test/resources/icons/pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/test/resources/icons/pdf.png -------------------------------------------------------------------------------- /documentation/images/structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/documentation/images/structure.png -------------------------------------------------------------------------------- /src/test/resources/icons/picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/test/resources/icons/picture.png -------------------------------------------------------------------------------- /src/test/resources/icons/youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/test/resources/icons/youtube.png -------------------------------------------------------------------------------- /documentation/images/dark-example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/documentation/images/dark-example.jpg -------------------------------------------------------------------------------- /documentation/images/light-example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/documentation/images/light-example.jpg -------------------------------------------------------------------------------- /src/test/resources/icons/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/test/resources/icons/facebook.png -------------------------------------------------------------------------------- /documentation/images/docknode-example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/documentation/images/docknode-example.jpg -------------------------------------------------------------------------------- /documentation/images/docknode-borderbutton-example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/documentation/images/docknode-borderbutton-example.jpg -------------------------------------------------------------------------------- /documentation/images/docknode-positionmenu-example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/documentation/images/docknode-positionmenu-example.jpg -------------------------------------------------------------------------------- /documentation/images/docknode-viewmodemenu-example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/documentation/images/docknode-viewmodemenu-example.jpg -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/hide_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/hide_black.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/hide_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/hide_white.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/options_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/options_black.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/options_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/options_white.png -------------------------------------------------------------------------------- /documentation/images/docknode-borderbutton-positionmenu-example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/documentation/images/docknode-borderbutton-positionmenu-example.jpg -------------------------------------------------------------------------------- /documentation/images/docknode-borderbutton-viewmodemenu-example.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/documentation/images/docknode-borderbutton-viewmodemenu-example.jpg -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/pos/top_left_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/pos/top_left_black.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/pos/top_left_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/pos/top_left_white.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/pos/bottom_left_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/pos/bottom_left_black.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/pos/bottom_left_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/pos/bottom_left_white.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/pos/top_right_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/pos/top_right_black.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/pos/top_right_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/pos/top_right_white.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/view_mode/float_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/view_mode/float_black.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/view_mode/float_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/view_mode/float_white.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/pos/bottom_right_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/pos/bottom_right_black.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/pos/bottom_right_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/pos/bottom_right_white.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/view_mode/docked_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/view_mode/docked_black.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/view_mode/docked_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/view_mode/docked_white.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/view_mode/window_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/view_mode/window_black.png -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/image/view_mode/window_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dansoftowner/DockSystemFX/HEAD/src/main/resources/com/dansoftware/dock/image/view_mode/window_white.png -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.1-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/viewmode/event/SceneChangeEventHandler.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.viewmode.event; 2 | 3 | import javafx.event.EventHandler; 4 | 5 | public interface SceneChangeEventHandler extends EventHandler { 6 | SceneChangeEventHandler EMPTY = event -> { 7 | //do nothing 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/viewmode/ViewModeStrategy.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.viewmode; 2 | 3 | import com.dansoftware.dock.docknode.DockNode; 4 | import javafx.stage.Stage; 5 | 6 | import java.util.function.Supplier; 7 | 8 | public interface ViewModeStrategy { 9 | 10 | void show(DockNode dockNode, Supplier stageFactory); 11 | 12 | void hide(DockNode dockNode); 13 | 14 | default void show(DockNode dockNode) { 15 | show(dockNode, Stage::new); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/resources/com/dansoftware/dock/DefaultValues.properties: -------------------------------------------------------------------------------- 1 | dock.options.view.mode=View Mode 2 | dock.options.view.docked=Docked 3 | dock.options.view.float=Float 4 | dock.options.view.window=Window 5 | dock.options.pos=Position 6 | dock.options.pos.left.top=Left top 7 | dock.options.pos.left.bottom=Left bottom 8 | dock.options.pos.bottom.left=Bottom left 9 | dock.options.pos.bottom.right=Bottom right 10 | dock.options.pos.right.top=Right top 11 | dock.options.pos.right.bottom=Right bottom 12 | dock.options.pos.top.right=Top right 13 | dock.options.pos.top.left=Top left -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/util/DockTool.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.util; 2 | 3 | import java.util.ResourceBundle; 4 | 5 | public final class DockTool { 6 | 7 | public static final String DARK_STYLE_SHEET = "/com/dansoftware/dock/dark-style.css"; 8 | public static final String LIGHT_STYLE_SHEET = "/com/dansoftware/dock/light-style.css"; 9 | 10 | public static ResourceBundle getDefaultBundle() { 11 | return ResourceBundle.getBundle("com.dansoftware.dock.DefaultValues"); 12 | } 13 | 14 | private DockTool() { 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/position/strategy/PositioningStrategy.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.position.strategy; 2 | 3 | import com.dansoftware.dock.border.BorderButton; 4 | import com.dansoftware.dock.border.DockFrame; 5 | import com.dansoftware.dock.docknode.DockNode; 6 | import com.dansoftware.dock.docksystem.SplitPaneSystem; 7 | 8 | public interface PositioningStrategy { 9 | void posDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode); 10 | void unPosDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode); 11 | 12 | void posBorderButton(DockFrame frame, BorderButton borderButton); 13 | void unPosBorderButton(DockFrame frame, BorderButton borderButton); 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/viewmode/event/SceneChangedEvent.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.viewmode.event; 2 | 3 | import javafx.event.Event; 4 | import javafx.event.EventType; 5 | import javafx.scene.Scene; 6 | 7 | public class SceneChangedEvent extends Event { 8 | public static final EventType ANY = new EventType<>("SCENE_CHANGED"); 9 | 10 | private final Scene scene; 11 | 12 | public SceneChangedEvent(Scene scene) { 13 | super(ANY); 14 | this.scene = scene; 15 | } 16 | 17 | public Scene getScene() { 18 | return scene; 19 | } 20 | 21 | public static SceneChangedEvent create(Scene scene) { 22 | return new SceneChangedEvent(scene); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/docknode/DockNodeI18N.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.docknode; 2 | 3 | import com.dansoftware.dock.docksystem.DockSystem; 4 | import javafx.scene.Node; 5 | 6 | public class DockNodeI18N extends DockNode { 7 | public DockNodeI18N(DockSystem dockSystem, String title) { 8 | super(dockSystem, dockSystem.getResourceBundle().getString(title)); 9 | } 10 | 11 | public DockNodeI18N(DockSystem dockSystem, Node graphic, String title) { 12 | super(dockSystem, dockSystem.getResourceBundle().getString(title), graphic); 13 | } 14 | 15 | public DockNodeI18N(DockSystem dockSystem, Node graphic, String title, Node content) { 16 | super(dockSystem, dockSystem.getResourceBundle().getString(title), graphic, content); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/viewmode/DockStrategy.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.viewmode; 2 | 3 | import com.dansoftware.dock.docknode.DockNode; 4 | import com.dansoftware.dock.docksystem.DockSystem; 5 | import javafx.stage.Stage; 6 | 7 | import java.util.function.Supplier; 8 | 9 | public class DockStrategy implements ViewModeStrategy { 10 | @Override 11 | public void show(DockNode dockNode, Supplier stageFactory) { 12 | DockSystem dockSystem = dockNode.getDockSystem(); 13 | dockSystem.dock(dockNode.getDockPosition(), dockNode, true); 14 | } 15 | 16 | @Override 17 | public void hide(DockNode dockNode) { 18 | DockSystem dockSystem = dockNode.getDockSystem(); 19 | dockSystem.hide(dockNode.getDockPosition(), dockNode); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/util/ListObserver.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.util; 2 | 3 | import javafx.beans.binding.Bindings; 4 | import javafx.beans.binding.BooleanBinding; 5 | import javafx.collections.ObservableList; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | import java.util.function.Consumer; 10 | 11 | public class ListObserver { 12 | private final List observables; 13 | 14 | public ListObserver(int initialCapacity) { 15 | this.observables = new ArrayList<>(initialCapacity); 16 | } 17 | 18 | public void observeEmpty(ObservableList items, Consumer handler) { 19 | BooleanBinding binding = Bindings.isEmpty(items); 20 | binding.addListener((observable, oldValue, newValue) -> handler.accept(newValue)); 21 | observables.add(binding); 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/docknode/DockTitleBar.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.docknode; 2 | 3 | import javafx.scene.control.Label; 4 | import javafx.scene.layout.BorderPane; 5 | import javafx.scene.layout.StackPane; 6 | 7 | import java.util.Objects; 8 | 9 | public class DockTitleBar extends BorderPane { 10 | 11 | private static final String STYLE_CLASS_NAME = "dock-title-bar"; 12 | 13 | private final DockNode dockNode; 14 | 15 | public DockTitleBar(DockNode dockNode) { 16 | this.dockNode = Objects.requireNonNull(dockNode, "The dockNode mustn't be null!"); 17 | 18 | this.setRight(new DockNodeToolBar(this.dockNode)); 19 | this.setLeft(new StackPane(createLabel())); 20 | 21 | this.getStyleClass().add(STYLE_CLASS_NAME); 22 | } 23 | 24 | private Label createLabel() { 25 | Label label = new Label(); 26 | label.textProperty().bind(this.dockNode.titleProperty()); 27 | return label; 28 | } 29 | 30 | public DockNode getDockNode() { 31 | return dockNode; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/viewmode/ViewMode.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.viewmode; 2 | 3 | import java.util.function.Supplier; 4 | 5 | public enum ViewMode { 6 | PINNED("pinned","dock.options.view.docked", DockStrategy::new), 7 | FLOAT("float","dock.options.view.float", FloatStrategy::new), 8 | WINDOW("window","dock.options.view.window", WindowStrategy::new); 9 | 10 | public static final String NAME_LOCALE_KEY = "dock.options.view.mode"; 11 | 12 | private final String id; 13 | private final String localeKey; 14 | private final Supplier viewModeStrategySupplier; 15 | 16 | ViewMode(String id, String localeKey, Supplier viewModeStrategySupplier) { 17 | this.id = id; 18 | this.localeKey = localeKey; 19 | this.viewModeStrategySupplier = viewModeStrategySupplier; 20 | } 21 | 22 | public String getLocaleKey() { 23 | return localeKey; 24 | } 25 | 26 | public String getId() { 27 | return id; 28 | } 29 | 30 | public Supplier getViewModeStrategySupplier() { 31 | return viewModeStrategySupplier; 32 | } 33 | 34 | public ViewModeStrategy getViewModeStrategy() { 35 | return viewModeStrategySupplier.get(); 36 | } 37 | } -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/position/strategy/TopLeftStrategy.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.position.strategy; 2 | 3 | import com.dansoftware.dock.border.BorderButton; 4 | import com.dansoftware.dock.border.DockFrame; 5 | import com.dansoftware.dock.docknode.DockNode; 6 | import com.dansoftware.dock.docksystem.SplitPaneSystem; 7 | 8 | public class TopLeftStrategy implements PositioningStrategy{ 9 | @Override 10 | public void posDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 11 | splitPaneSystem 12 | .getTopHorizontal() 13 | .getItems() 14 | .add(0, dockNode); 15 | } 16 | 17 | @Override 18 | public void unPosDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 19 | splitPaneSystem 20 | .getTopHorizontal() 21 | .getItems() 22 | .remove(dockNode); 23 | } 24 | 25 | @Override 26 | public void posBorderButton(DockFrame frame, BorderButton borderButton) { 27 | frame.getTopEdge().getToolBar0().addBorderButton(borderButton); 28 | } 29 | 30 | @Override 31 | public void unPosBorderButton(DockFrame frame, BorderButton borderButton) { 32 | frame.getTopEdge().getToolBar0().removeBorderButton(borderButton); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/position/strategy/TopRightStrategy.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.position.strategy; 2 | 3 | import com.dansoftware.dock.border.BorderButton; 4 | import com.dansoftware.dock.border.DockFrame; 5 | import com.dansoftware.dock.docknode.DockNode; 6 | import com.dansoftware.dock.docksystem.SplitPaneSystem; 7 | 8 | public class TopRightStrategy implements PositioningStrategy { 9 | @Override 10 | public void posDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 11 | splitPaneSystem 12 | .getTopHorizontal() 13 | .getItems() 14 | .add(dockNode); 15 | } 16 | 17 | @Override 18 | public void unPosDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 19 | splitPaneSystem 20 | .getTopHorizontal() 21 | .getItems() 22 | .remove(dockNode); 23 | } 24 | 25 | @Override 26 | public void posBorderButton(DockFrame frame, BorderButton borderButton) { 27 | frame.getTopEdge().getToolBar1().addBorderButton(borderButton); 28 | } 29 | 30 | @Override 31 | public void unPosBorderButton(DockFrame frame, BorderButton borderButton) { 32 | frame.getTopEdge().getToolBar1().removeBorderButton(borderButton); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/position/strategy/RightTopStrategy.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.position.strategy; 2 | 3 | import com.dansoftware.dock.border.BorderButton; 4 | import com.dansoftware.dock.border.DockFrame; 5 | import com.dansoftware.dock.docknode.DockNode; 6 | import com.dansoftware.dock.docksystem.SplitPaneSystem; 7 | 8 | public class RightTopStrategy implements PositioningStrategy { 9 | @Override 10 | public void posDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 11 | splitPaneSystem 12 | .getRightVertical() 13 | .getItems() 14 | .add(0, dockNode); 15 | } 16 | 17 | @Override 18 | public void unPosDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 19 | splitPaneSystem 20 | .getRightVertical() 21 | .getItems() 22 | .remove(dockNode); 23 | } 24 | 25 | @Override 26 | public void posBorderButton(DockFrame frame, BorderButton borderButton) { 27 | frame.getRightEdge().getToolBar0().addBorderButton(borderButton); 28 | } 29 | 30 | @Override 31 | public void unPosBorderButton(DockFrame frame, BorderButton borderButton) { 32 | frame.getRightEdge().getToolBar0().removeBorderButton(borderButton); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/position/strategy/RightBottomStrategy.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.position.strategy; 2 | 3 | import com.dansoftware.dock.border.BorderButton; 4 | import com.dansoftware.dock.border.DockFrame; 5 | import com.dansoftware.dock.docknode.DockNode; 6 | import com.dansoftware.dock.docksystem.SplitPaneSystem; 7 | 8 | public class RightBottomStrategy implements PositioningStrategy { 9 | @Override 10 | public void posDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 11 | splitPaneSystem 12 | .getRightVertical() 13 | .getItems() 14 | .add(dockNode); 15 | } 16 | 17 | @Override 18 | public void unPosDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 19 | splitPaneSystem 20 | .getRightVertical() 21 | .getItems() 22 | .remove(dockNode); 23 | } 24 | 25 | @Override 26 | public void posBorderButton(DockFrame frame, BorderButton borderButton) { 27 | frame.getRightEdge().getToolBar1().addBorderButton(borderButton); 28 | } 29 | 30 | @Override 31 | public void unPosBorderButton(DockFrame frame, BorderButton borderButton) { 32 | frame.getRightEdge().getToolBar1().removeBorderButton(borderButton); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/position/strategy/BottomRightStrategy.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.position.strategy; 2 | 3 | import com.dansoftware.dock.border.BorderButton; 4 | import com.dansoftware.dock.border.DockFrame; 5 | import com.dansoftware.dock.docknode.DockNode; 6 | import com.dansoftware.dock.docksystem.SplitPaneSystem; 7 | 8 | public class BottomRightStrategy implements PositioningStrategy { 9 | @Override 10 | public void posDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 11 | splitPaneSystem 12 | .getBottomHorizontal() 13 | .getItems() 14 | .add(dockNode); 15 | } 16 | 17 | @Override 18 | public void unPosDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 19 | splitPaneSystem 20 | .getBottomHorizontal() 21 | .getItems() 22 | .remove(dockNode); 23 | } 24 | 25 | @Override 26 | public void posBorderButton(DockFrame frame, BorderButton borderButton) { 27 | frame.getBottomEdge().getToolBar1().addBorderButton(borderButton); 28 | } 29 | 30 | @Override 31 | public void unPosBorderButton(DockFrame frame, BorderButton borderButton) { 32 | frame.getBottomEdge().getToolBar1().removeBorderButton(borderButton); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/position/strategy/BottomLeftStrategy.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.position.strategy; 2 | 3 | import com.dansoftware.dock.border.BorderButton; 4 | import com.dansoftware.dock.border.DockFrame; 5 | import com.dansoftware.dock.docknode.DockNode; 6 | import com.dansoftware.dock.docksystem.SplitPaneSystem; 7 | 8 | public class BottomLeftStrategy implements PositioningStrategy { 9 | @Override 10 | public void posDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 11 | splitPaneSystem 12 | .getBottomHorizontal() 13 | .getItems() 14 | .add(0, dockNode); 15 | } 16 | 17 | @Override 18 | public void unPosDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 19 | splitPaneSystem 20 | .getBottomHorizontal() 21 | .getItems() 22 | .remove(dockNode); 23 | } 24 | 25 | @Override 26 | public void posBorderButton(DockFrame frame, BorderButton borderButton) { 27 | frame.getBottomEdge().getToolBar0().addBorderButton(borderButton); 28 | } 29 | 30 | @Override 31 | public void unPosBorderButton(DockFrame frame, BorderButton borderButton) { 32 | frame.getBottomEdge().getToolBar0().removeBorderButton(borderButton); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/position/strategy/LeftBottomStrategy.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.position.strategy; 2 | 3 | import com.dansoftware.dock.border.BorderButton; 4 | import com.dansoftware.dock.border.DockFrame; 5 | import com.dansoftware.dock.docknode.DockNode; 6 | import com.dansoftware.dock.docksystem.SplitPaneSystem; 7 | 8 | public class LeftBottomStrategy implements PositioningStrategy { 9 | @Override 10 | public void posDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 11 | splitPaneSystem 12 | .getLeftVertical() 13 | .getItems() 14 | .add(dockNode); 15 | } 16 | 17 | @Override 18 | public void unPosDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 19 | splitPaneSystem 20 | .getLeftVertical() 21 | .getItems() 22 | .remove(dockNode); 23 | } 24 | 25 | @Override 26 | public void posBorderButton(DockFrame frame, BorderButton borderButton) { 27 | frame.getLeftEdge().getToolBar1().addBorderButton(borderButton); 28 | } 29 | 30 | @Override 31 | public void unPosBorderButton(DockFrame frame, BorderButton borderButton) { 32 | //frame.getLeftEdge().getToolBar0().removeBorderButton(borderButton); 33 | frame.getLeftEdge().getToolBar1().removeBorderButton(borderButton); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/position/strategy/LeftTopStrategy.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.position.strategy; 2 | 3 | import com.dansoftware.dock.border.BorderButton; 4 | import com.dansoftware.dock.border.DockFrame; 5 | import com.dansoftware.dock.docknode.DockNode; 6 | import com.dansoftware.dock.docksystem.SplitPaneSystem; 7 | 8 | public class LeftTopStrategy implements PositioningStrategy { 9 | @Override 10 | public void posDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 11 | splitPaneSystem 12 | .getLeftVertical() 13 | .getItems() 14 | .add(0, dockNode); 15 | } 16 | 17 | @Override 18 | public void unPosDockNode(SplitPaneSystem splitPaneSystem, DockNode dockNode) { 19 | splitPaneSystem 20 | .getLeftVertical() 21 | .getItems() 22 | .remove(dockNode); 23 | } 24 | 25 | @Override 26 | public void posBorderButton(DockFrame frame, BorderButton borderButton) { 27 | frame.getLeftEdge().getToolBar0().addBorderButton(borderButton); 28 | } 29 | 30 | @Override 31 | public void unPosBorderButton(DockFrame frame, BorderButton borderButton) { 32 | frame.getLeftEdge().getToolBar0().removeBorderButton(borderButton); 33 | //frame.getLeftEdge().getToolBar1().removeBorderButton(borderButton); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/viewmode/FloatStrategy.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.viewmode; 2 | 3 | import com.dansoftware.dock.docknode.DockNode; 4 | import com.goxr3plus.fxborderlessscene.borderless.BorderlessScene; 5 | import javafx.css.PseudoClass; 6 | import javafx.scene.Scene; 7 | import javafx.scene.layout.StackPane; 8 | import javafx.stage.StageStyle; 9 | import javafx.stage.Window; 10 | 11 | public class FloatStrategy extends WindowStrategy { 12 | 13 | private static final PseudoClass FLOAT_PSEUDO_CLASS = PseudoClass.getPseudoClass("float"); 14 | 15 | @Override 16 | public void show(DockNode dockNode) { 17 | super.show(dockNode); 18 | dockNode.pseudoClassStateChanged(FLOAT_PSEUDO_CLASS, Boolean.TRUE); 19 | } 20 | 21 | @Override 22 | public void hide(DockNode dockNode) { 23 | super.hide(dockNode); 24 | dockNode.pseudoClassStateChanged(FLOAT_PSEUDO_CLASS, Boolean.FALSE); 25 | } 26 | 27 | @Override 28 | protected Scene getScene(DockNode dockNode) { 29 | return new BorderlessSceneImpl(dockNode); 30 | } 31 | 32 | @Override 33 | protected Window getOwner(DockNode dockNode) { 34 | return dockNode.getDockSystem().getScene().getWindow(); 35 | } 36 | 37 | private class BorderlessSceneImpl extends BorderlessScene { 38 | public BorderlessSceneImpl(DockNode dockNode) { 39 | super(getFloatingStage(), StageStyle.UNDECORATED, new StackPane(dockNode), 100, 100); 40 | this.removeDefaultCSS(); 41 | this.setMoveControl(dockNode.getDockTitleBar()); 42 | this.snapProperty().set(false); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/position/DockPosition.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.position; 2 | 3 | import com.dansoftware.dock.position.strategy.*; 4 | 5 | /** 6 | * A DockPosition represents a paricular position on a {@link com.dansoftware.dock.docksystem.DockSystem} 7 | */ 8 | public enum DockPosition { 9 | TOP_RIGHT("dock.options.pos.top.right", new TopRightStrategy()), 10 | 11 | TOP_LEFT("dock.options.pos.top.left", new TopLeftStrategy()), 12 | 13 | LEFT_TOP("dock.options.pos.left.top", new LeftTopStrategy()), 14 | 15 | LEFT_BOTTOM("dock.options.pos.left.bottom", new LeftBottomStrategy()), 16 | 17 | BOTTOM_LEFT("dock.options.pos.bottom.left", new BottomLeftStrategy()), 18 | 19 | BOTTOM_RIGHT("dock.options.pos.bottom.right", new BottomRightStrategy()), 20 | 21 | RIGHT_TOP("dock.options.pos.right.top", new RightTopStrategy()), 22 | 23 | RIGHT_BOTTOM("dock.options.pos.right.bottom", new RightBottomStrategy()); 24 | 25 | public static final String NAME_LOCALE_KEY = "dock.options.pos"; 26 | 27 | private final String id; 28 | private final String localeKey; 29 | private final PositioningStrategy posStrategy; 30 | 31 | DockPosition(String localeKey, PositioningStrategy posStrategy) { 32 | this.localeKey = localeKey; 33 | this.posStrategy = posStrategy; 34 | this.id = this.toString().toLowerCase().replace('_', '-'); 35 | } 36 | 37 | public String getLocaleKey() { 38 | return localeKey; 39 | } 40 | 41 | public PositioningStrategy getPosStrategy() { 42 | return this.posStrategy; 43 | } 44 | 45 | public String getId() { 46 | return id; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/com/dansoftware/dock/docknode/DockNodeToolBar.java: -------------------------------------------------------------------------------- 1 | package com.dansoftware.dock.docknode; 2 | 3 | import javafx.collections.ObservableList; 4 | import javafx.scene.control.Button; 5 | import javafx.scene.control.ContentDisplay; 6 | import javafx.scene.control.Separator; 7 | import javafx.scene.control.ToolBar; 8 | import javafx.scene.input.MouseButton; 9 | 10 | import java.util.Objects; 11 | 12 | public class DockNodeToolBar extends ToolBar { 13 | 14 | private final DockNode dockNode; 15 | 16 | public DockNodeToolBar(DockNode dockNode) { 17 | this.dockNode = Objects.requireNonNull(dockNode, "The dockNode mustn't be null"); 18 | this.setStyle("-fx-background-color: transparent; -fx-padding: 0;"); 19 | this.createDefaultButtons(); 20 | } 21 | 22 | public void addCustomButtons(ObservableList