Skip to content

Commit 9c4dffb

Browse files
committed
added painting component registry.
1 parent bac8365 commit 9c4dffb

File tree

9 files changed

+149
-46
lines changed

9 files changed

+149
-46
lines changed

src/main/java/com/ss/editor/plugin/EditorPlugin.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package com.ss.editor.plugin;
22

3-
import com.ss.editor.annotation.FxThread;
43
import com.ss.editor.annotation.FromAnyThread;
4+
import com.ss.editor.annotation.FxThread;
55
import com.ss.editor.annotation.JmeThread;
66
import com.ss.editor.file.converter.FileConverterRegistry;
77
import com.ss.editor.manager.FileIconManager;
88
import com.ss.editor.plugin.api.settings.SettingsProviderRegistry;
99
import com.ss.editor.ui.component.asset.tree.AssetTreeContextMenuFillerRegistry;
1010
import com.ss.editor.ui.component.creator.FileCreatorRegistry;
1111
import com.ss.editor.ui.component.editor.EditorRegistry;
12+
import com.ss.editor.ui.component.painting.PaintingComponentRegistry;
1213
import com.ss.editor.ui.control.property.builder.PropertyBuilderRegistry;
1314
import com.ss.editor.ui.control.tree.node.factory.TreeNodeFactoryRegistry;
1415
import com.ss.editor.ui.css.CssRegistry;
@@ -122,6 +123,15 @@ public void register(@NotNull final FilePreviewFactoryRegistry registry) {
122123
public void register(@NotNull final SettingsProviderRegistry registry) {
123124
}
124125

126+
/**
127+
* Register this plugin's own painting component's constructors.
128+
*
129+
* @param registry the registry of painting component's constructors.
130+
*/
131+
@FxThread
132+
public void register(@NotNull final PaintingComponentRegistry registry) {
133+
}
134+
125135
/**
126136
* Do some things before when jME context will be created.
127137
*

src/main/java/com/ss/editor/ui/component/editor/impl/scene/AbstractSceneFileEditor.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@
5252
import com.ss.editor.ui.component.editor.state.impl.BaseEditorSceneEditorState;
5353
import com.ss.editor.ui.component.painting.PaintingComponent;
5454
import com.ss.editor.ui.component.painting.PaintingComponentContainer;
55-
import com.ss.editor.ui.component.painting.terrain.TerrainEditingComponent;
5655
import com.ss.editor.ui.component.tab.EditorToolComponent;
5756
import com.ss.editor.ui.control.model.ModelNodeTree;
5857
import com.ss.editor.ui.control.model.ModelPropertyEditor;
@@ -189,10 +188,10 @@ public static void registerPostSaveHandler(@NotNull Consumer<Spatial> handler) {
189188
private ModelPropertyEditor modelPropertyEditor;
190189

191190
/**
192-
* The container of editing components.
191+
* The container of painting components.
193192
*/
194193
@Nullable
195-
private PaintingComponentContainer editingComponentContainer;
194+
private PaintingComponentContainer paintingComponentContainer;
196195

197196
/**
198197
* The scripting component.
@@ -293,11 +292,13 @@ public AbstractSceneFileEditor() {
293292
}
294293

295294
/**
296-
* @return the container of editing components.
295+
* Get the container of painting components.
296+
*
297+
* @return the container of painting components.
297298
*/
298299
@FxThread
299-
private @NotNull PaintingComponentContainer getEditingComponentContainer() {
300-
return notNull(editingComponentContainer);
300+
private @NotNull PaintingComponentContainer getPaintingComponentContainer() {
301+
return notNull(paintingComponentContainer);
301302
}
302303

303304
/**
@@ -464,7 +465,7 @@ protected void loadState() {
464465
transformModeComboBox.getSelectionModel()
465466
.select(TransformationMode.valueOf(editorState.getTransformationMode()));
466467

467-
final Array<PaintingComponent> components = editingComponentContainer.getComponents();
468+
final Array<PaintingComponent> components = paintingComponentContainer.getComponents();
468469
components.forEach(editorState, PaintingComponent::loadState);
469470

470471
final TransformType transformType = TransformType.valueOf(editorState.getTransformationType());
@@ -591,7 +592,7 @@ public void notifyFxChangeProperty(@Nullable final Object parent, @NotNull final
591592
modelNodeTree.refresh(object);
592593
}
593594

594-
final PaintingComponentContainer editingComponentContainer = getEditingComponentContainer();
595+
final PaintingComponentContainer editingComponentContainer = getPaintingComponentContainer();
595596
editingComponentContainer.notifyChangeProperty(object, propertyName);
596597
}
597598

@@ -767,7 +768,7 @@ public void selectNodeFromTree(@Nullable final Object object) {
767768
final ModelPropertyEditor modelPropertyEditor = getModelPropertyEditor();
768769
modelPropertyEditor.buildFor(element, parent);
769770

770-
final PaintingComponentContainer editingComponentContainer = getEditingComponentContainer();
771+
final PaintingComponentContainer editingComponentContainer = getPaintingComponentContainer();
771772
editingComponentContainer.showComponentFor(element);
772773
}
773774

@@ -996,8 +997,7 @@ protected void createContent(@NotNull final StackPane root) {
996997
modelNodeTreeEditingContainer = new VBox();
997998
modelNodeTreeObjectsContainer = new VBox();
998999

999-
editingComponentContainer = new PaintingComponentContainer(this, this);
1000-
editingComponentContainer.addComponent(new TerrainEditingComponent());
1000+
paintingComponentContainer = new PaintingComponentContainer(this, this);
10011001

10021002
scriptingComponent = new EditorScriptingComponent(this::refreshTree);
10031003
scriptingComponent.prefHeightProperty().bind(root.heightProperty());
@@ -1028,7 +1028,7 @@ protected void createToolComponents(@NotNull final EditorToolComponent container
10281028

10291029
container.addComponent(buildSplitComponent(getModelNodeTreeObjectsContainer(), getPropertyEditorObjectsContainer(), root),
10301030
Messages.SCENE_FILE_EDITOR_TOOL_OBJECTS);
1031-
container.addComponent(buildSplitComponent(getModelNodeTreeEditingContainer(), getEditingComponentContainer(), root),
1031+
container.addComponent(buildSplitComponent(getModelNodeTreeEditingContainer(), getPaintingComponentContainer(), root),
10321032
Messages.SCENE_FILE_EDITOR_TOOL_EDITING);
10331033
container.addComponent(getScriptingComponent(), Messages.SCENE_FILE_EDITOR_TOOL_SCRIPTING);
10341034
}
@@ -1056,7 +1056,7 @@ protected void processChangeTool(@Nullable final Number oldValue, @NotNull final
10561056

10571057
final ModelNodeTree modelNodeTree = getModelNodeTree();
10581058
final ModelPropertyEditor modelPropertyEditor = getModelPropertyEditor();
1059-
final PaintingComponentContainer editingComponentContainer = getEditingComponentContainer();
1059+
final PaintingComponentContainer editingComponentContainer = getPaintingComponentContainer();
10601060

10611061
final VBox propertyEditorParent = (VBox) modelPropertyEditor.getParent();
10621062
final VBox modelNodeTreeParent = (VBox) modelNodeTree.getParent();

src/main/java/com/ss/editor/ui/component/painting/PaintingComponent.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@
1414
public interface PaintingComponent extends HasName {
1515

1616
/**
17-
* Init this component to process in a container.
17+
* Get the name of this component.
1818
*
19-
* @param container the container.
19+
* @return the name of this component.
2020
*/
21-
@FxThread
22-
default void initFor(@NotNull Object container) {
21+
@Override
22+
@FromAnyThread
23+
default @NotNull String getName() {
24+
return getClass().getSimpleName();
2325
}
2426

2527
/**

src/main/java/com/ss/editor/ui/component/painting/PaintingComponentContainer.java

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@
66
import com.ss.editor.model.editor.Editor3DProvider;
77
import com.ss.editor.model.undo.editor.ModelChangeConsumer;
88
import com.ss.editor.ui.FXConstants;
9+
import com.ss.editor.ui.control.property.PropertyControl;
910
import com.ss.editor.ui.css.CssClasses;
1011
import com.ss.rlib.ui.util.FXUtils;
1112
import com.ss.rlib.util.array.Array;
12-
import com.ss.rlib.util.array.ArrayFactory;
1313
import javafx.collections.ObservableList;
1414
import javafx.scene.Node;
15+
import javafx.scene.control.ComboBox;
16+
import javafx.scene.control.Label;
1517
import javafx.scene.control.ScrollPane;
18+
import javafx.scene.layout.HBox;
1619
import javafx.scene.layout.VBox;
1720
import org.jetbrains.annotations.NotNull;
1821
import org.jetbrains.annotations.Nullable;
@@ -24,6 +27,15 @@
2427
*/
2528
public class PaintingComponentContainer extends ScrollPane {
2629

30+
/**
31+
* The constant LABEL_PERCENT.
32+
*/
33+
public static final double LABEL_PERCENT = 1D - PropertyControl.CONTROL_WIDTH_PERCENT_2;
34+
/**
35+
* The constant FIELD_PERCENT.
36+
*/
37+
public static final double FIELD_PERCENT = PropertyControl.CONTROL_WIDTH_PERCENT_2;
38+
2739
/**
2840
* The change consumer.
2941
*/
@@ -48,6 +60,12 @@ public class PaintingComponentContainer extends ScrollPane {
4860
@NotNull
4961
protected final VBox container;
5062

63+
/**
64+
* The components box.
65+
*/
66+
@NotNull
67+
protected final ComboBox<PaintingComponent> componentBox;
68+
5169
/**
5270
* The flag of showing this container.
5371
*/
@@ -56,26 +74,34 @@ public class PaintingComponentContainer extends ScrollPane {
5674
public PaintingComponentContainer(@NotNull final ModelChangeConsumer changeConsumer, @NotNull final Editor3DProvider provider) {
5775
this.changeConsumer = changeConsumer;
5876
this.provider = provider;
59-
this.components = ArrayFactory.newArray(PaintingComponent.class);
6077
this.container = new VBox();
6178
this.container.prefWidthProperty()
6279
.bind(widthProperty().subtract(FXConstants.PROPERTY_LIST_OFFSET));
6380

64-
setContent(container);
81+
final HBox horContainer = new HBox();
82+
horContainer.prefWidthProperty()
83+
.bind(widthProperty().subtract(FXConstants.PROPERTY_LIST_OFFSET));
6584

85+
final Label label = new Label("Painting tool:");
86+
label.maxWidthProperty().bind(horContainer.widthProperty()
87+
.multiply(LABEL_PERCENT));
88+
89+
componentBox = new ComboBox<>();
90+
componentBox.prefWidthProperty().bind(horContainer.widthProperty()
91+
.multiply(FIELD_PERCENT));
92+
93+
final VBox resultContainer = new VBox();
94+
95+
setContent(resultContainer);
96+
97+
FXUtils.addToPane(label, componentBox, horContainer);
98+
FXUtils.addToPane(horContainer, container, resultContainer);
6699
FXUtils.addClassTo(container, CssClasses.DEF_VBOX);
67-
FXUtils.addClassTo(this, CssClasses.PROCESSING_COMPONENT_CONTAINER);
68-
}
100+
FXUtils.addClassTo(horContainer, CssClasses.DEF_HBOX);
101+
FXUtils.addClassTo(resultContainer, CssClasses.PAINTING_COMPONENT_ROOT);
69102

70-
/**
71-
* Add the new painting component.
72-
*
73-
* @param component the painting component.
74-
*/
75-
@FxThread
76-
public void addComponent(@NotNull final PaintingComponent component) {
77-
components.add(component);
78-
component.initFor(this);
103+
final PaintingComponentRegistry registry = PaintingComponentRegistry.getInstance();
104+
this.components = registry.createComponents(this);
79105
}
80106

81107
/**
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.ss.editor.ui.component.painting;
2+
3+
import com.ss.editor.annotation.FromAnyThread;
4+
import com.ss.editor.annotation.FxThread;
5+
import com.ss.editor.ui.component.painting.terrain.TerrainEditingComponent;
6+
import com.ss.rlib.util.array.Array;
7+
import com.ss.rlib.util.array.ArrayFactory;
8+
import org.jetbrains.annotations.NotNull;
9+
10+
import java.util.function.Function;
11+
12+
/**
13+
* The registry of all painting components.
14+
*
15+
* @author JavaSaBr
16+
*/
17+
public class PaintingComponentRegistry {
18+
19+
private static final PaintingComponentRegistry INSTANCE = new PaintingComponentRegistry();
20+
21+
@FromAnyThread
22+
public static @NotNull PaintingComponentRegistry getInstance() {
23+
return INSTANCE;
24+
}
25+
26+
/**
27+
* The list of painting component's constructors.
28+
*/
29+
@NotNull
30+
private final Array<Function<PaintingComponentContainer, PaintingComponent>> constructors;
31+
32+
private PaintingComponentRegistry() {
33+
this.constructors = ArrayFactory.newArray(Function.class);
34+
register(TerrainEditingComponent::new);
35+
}
36+
37+
/**
38+
* Register the new painting component's constructor.
39+
*
40+
* @param constructor the new painting component's constructor.
41+
*/
42+
@FxThread
43+
public void register(@NotNull final Function<PaintingComponentContainer, PaintingComponent> constructor) {
44+
this.constructors.add(constructor);
45+
}
46+
47+
/**
48+
* Create all available painting components.
49+
*
50+
* @param container painting component's container.
51+
* @return all available painting components.
52+
*/
53+
@FxThread
54+
public @NotNull Array<PaintingComponent> createComponents(@NotNull final PaintingComponentContainer container) {
55+
final Array<PaintingComponent> result = ArrayFactory.newArray(PaintingComponent.class);
56+
constructors.forEach(result, container, (constructor, components, cont) -> components.add(constructor.apply(cont)));
57+
return result;
58+
}
59+
}

src/main/java/com/ss/editor/ui/component/painting/impl/AbstractPaintingComponent.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,9 @@ public abstract class AbstractPaintingComponent<T, S extends AdditionalEditorSta
5353
*/
5454
protected boolean showed;
5555

56-
public AbstractPaintingComponent() {
56+
public AbstractPaintingComponent(@NotNull final PaintingComponentContainer container) {
57+
this.container = container;
5758
createComponents();
58-
}
59-
60-
@Override
61-
@FxThread
62-
public void initFor(@NotNull final Object container) {
63-
this.container = unsafeCast(container);
6459
prefWidthProperty().bind(widthProperty());
6560
}
6661

src/main/java/com/ss/editor/ui/component/painting/terrain/TerrainEditingComponent.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.ss.editor.model.undo.editor.ModelChangeConsumer;
1717
import com.ss.editor.ui.Icons;
1818
import com.ss.editor.ui.component.editor.state.EditorState;
19+
import com.ss.editor.ui.component.painting.PaintingComponentContainer;
1920
import com.ss.editor.ui.component.painting.impl.AbstractPaintingComponent;
2021
import com.ss.editor.ui.component.painting.terrain.paint.TextureLayerSettings;
2122
import com.ss.editor.ui.control.property.PropertyControl;
@@ -331,10 +332,9 @@ public class TerrainEditingComponent extends AbstractPaintingComponent<TerrainQu
331332
*/
332333
private boolean ignoreListeners;
333334

334-
/**
335-
* Instantiates a new Terrain editing component.
336-
*/
337-
public TerrainEditingComponent() {
335+
public TerrainEditingComponent(@NotNull final PaintingComponentContainer container) {
336+
super(container);
337+
338338
this.buttonToControl = DictionaryFactory.newObjectDictionary();
339339
this.buttonToSettings = DictionaryFactory.newObjectDictionary();
340340
this.raiseLowerToolControl = new RaiseLowerTerrainToolControl(this);

src/main/java/com/ss/editor/ui/css/CssClasses.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public interface CssClasses {
5151
@NotNull String BUTTON_WITHOUT_LEFT_RIGHT_BORDER = "button-without-left-right-border";
5252
@NotNull String BUTTON_WITHOUT_RIGHT_BORDER = "button-without-right-border";
5353

54-
@NotNull String PROCESSING_COMPONENT_CONTAINER = "processing-component-container";
54+
@NotNull String PAINTING_COMPONENT_ROOT = "painting-component-root";
5555
@NotNull String PROCESSING_COMPONENT_TERRAIN_EDITOR = "processing-component-terrain-editor";
5656
@NotNull String PROCESSING_COMPONENT_TERRAIN_EDITOR_TEXTURE_LAYER = "processing-component-terrain-layer";
5757
@NotNull String PROCESSING_COMPONENT_TERRAIN_EDITOR_LAYERS_SETTINGS_BUTTONS = "processing-component-terrain-texture-layers-settings-buttons";

src/main/resources/ui/css/custom_classes.css

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -950,11 +950,22 @@
950950

951951
/*******************************************************************************
952952
* *
953-
* Paint Processing *
953+
* Painting Components *
954954
* *
955955
******************************************************************************/
956956

957-
.processing-component-container {
957+
.painting-component-root {
958+
-fx-spacing: 2px;
959+
}
960+
961+
.painting-component-root > .hbox {
962+
-fx-background-color: red;
963+
-fx-padding: 2px 0 2px 0;
964+
-fx-alignment: center-right;
965+
}
966+
967+
.painting-component-root > .vbox {
968+
-fx-background-color: pink;
958969
}
959970

960971
.processing-component-terrain-editor {

0 commit comments

Comments
 (0)