Skip to content

Commit

Permalink
Experimental change to properly track the type of a docking property.
Browse files Browse the repository at this point in the history
There are still some tasks to complete. This new version does not save/load properties to xml files property and can no longer read old files (which it should be able to do).
  • Loading branch information
andrewauclair committed Jan 6, 2024
1 parent b4d9756 commit 6aa617b
Show file tree
Hide file tree
Showing 13 changed files with 576 additions and 63 deletions.
11 changes: 8 additions & 3 deletions demo-single-app/src/basic/MainFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ of this software and associated documentation files (the "Software"), to deal
package basic;

import ModernDocking.*;
import ModernDocking.api.WindowLayoutBuilderAPI;
import ModernDocking.app.*;
import ModernDocking.exception.DockingLayoutException;
import ModernDocking.layouts.ApplicationLayout;
Expand Down Expand Up @@ -267,7 +268,7 @@ public void setVisible(boolean visible) {
gbc.weighty = 0;
gbc.fill = GridBagConstraints.NONE;

ApplicationLayout defaultLayout = new WindowLayoutBuilder(alwaysDisplayed.getPersistentID())
WindowLayoutBuilderAPI layoutBuilder = new WindowLayoutBuilder(alwaysDisplayed.getPersistentID())
.dock(one.getPersistentID(), alwaysDisplayed.getPersistentID())
.dock(two.getPersistentID(), one.getPersistentID(), DockingRegion.SOUTH)
.dockToRoot(three.getPersistentID(), DockingRegion.WEST)
Expand All @@ -276,8 +277,12 @@ public void setVisible(boolean visible) {
.dockToRoot(output.getPersistentID(), DockingRegion.SOUTH)
.dockToRoot(themes.getPersistentID(), DockingRegion.EAST)
.dock(explorer.getPersistentID(), themes.getPersistentID(), DockingRegion.CENTER)
.display(themes.getPersistentID())
.buildApplicationLayout();
.display(themes.getPersistentID());

layoutBuilder.setProperty(one.getPersistentID(), SimplePanel.STRING_TEST_PROP, "value");
layoutBuilder.setProperty(one.getPersistentID(), SimplePanel.TEST_INT_1_PROP, 100);

ApplicationLayout defaultLayout = layoutBuilder.buildApplicationLayout();

DockingLayouts.addLayout("default", defaultLayout);
AppState.setDefaultApplicationLayout(defaultLayout);
Expand Down
14 changes: 14 additions & 0 deletions demo-single-app/src/basic/SimplePanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ of this software and associated documentation files (the "Software"), to deal
import java.util.Random;

public class SimplePanel extends BasePanel {
public static final String STRING_TEST_PROP = "test";
public static final String STRING_TEST1_PROP = "test1";
public static final String TEST_INT_1_PROP = "test_int_1";

private String tabText = "";

public boolean limitToRoot = false;
Expand Down Expand Up @@ -68,9 +72,14 @@ public class SimplePanel extends BasePanel {
@DockingProperty(name = "test_int_1", defaultValue = "5")
private int test_int_1;

@DockingProperty(name = "test_int_2", defaultValue = "15")
private int test_int_2;

// @DockingProperty(name = "toolbar_location", defaultValue = "1")
// private DockableToolbar.Location toolbarLocation;

private final JLabel test_int_label = new JLabel();

private static final Random rand = new Random();
private DockingHeaderUI headerUI;

Expand All @@ -82,6 +91,9 @@ public SimplePanel(String title, String persistentID) {

GridBagConstraints gbc = new GridBagConstraints();

add(test_int_label, gbc);
gbc.gridy++;

int numberOfControls = rand.nextInt(15);

for (int i = 0; i < numberOfControls; i++) {
Expand Down Expand Up @@ -182,5 +194,7 @@ public void updateProperties() {
System.out.println(test10);
System.out.println(test11);
System.out.println(test_int_1);

test_int_label.setText(String.valueOf(test_int_1));
}
}
252 changes: 252 additions & 0 deletions docking-api/src/ModernDocking/Property.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,252 @@
package ModernDocking;

// TODO might have to expose this to the applications
// TODO not sure how we go about converting to the right type without forcing separate calls
public abstract class Property {
public abstract Class<?> getType();

public abstract boolean isNull();

public static class ByteProperty extends Property {
private final byte value;

public ByteProperty(byte value) {
this.value = value;
}

@Override
public Class<?> getType() {
return byte.class;
}

@Override
public boolean isNull() {
return false;
}

@Override
public String toString() {
return Byte.toString(value);
}

public byte getValue() {
return value;
}
}

public static class ShortProperty extends Property {
private final short value;

public ShortProperty(short value) {
this.value = value;
}

@Override
public Class<?> getType() {
return short.class;
}

@Override
public boolean isNull() {
return false;
}

@Override
public String toString() {
return Short.toString(value);
}

public short getValue() {
return value;
}
}

public static class IntProperty extends Property {
private final int value;

public IntProperty(int value) {
this.value = value;
}

@Override
public Class<?> getType() {
return int.class;
}

@Override
public boolean isNull() {
return false;
}

@Override
public String toString() {
return Integer.toString(value);
}

public int getValue() {
return value;
}
}

public static class LongProperty extends Property {
private final long value;

public LongProperty(long value) {
this.value = value;
}

@Override
public Class<?> getType() {
return long.class;
}

@Override
public boolean isNull() {
return false;
}

@Override
public String toString() {
return Long.toString(value);
}

public long getValue() {
return value;
}
}

public static class FloatProperty extends Property {
private final float value;

public FloatProperty(float value) {
this.value = value;
}

@Override
public Class<?> getType() {
return float.class;
}

@Override
public boolean isNull() {
return false;
}

@Override
public String toString() {
return Float.toString(value);
}

public float getValue() {
return value;
}
}

public static class DoubleProperty extends Property {
private final double value;

public DoubleProperty(double value) {
this.value = value;
}

@Override
public Class<?> getType() {
return double.class;
}

@Override
public boolean isNull() {
return false;
}

@Override
public String toString() {
return Double.toString(value);
}

public double getValue() {
return value;
}
}

public static class CharacterProperty extends Property {
private final char value;

public CharacterProperty(char value) {
this.value = value;
}

@Override
public Class<?> getType() {
return char.class;
}

@Override
public boolean isNull() {
return false;
}

@Override
public String toString() {
return Character.toString(value);
}

public char getValue() {
return value;
}
}

public static class BooleanProperty extends Property {
private final boolean value;

public BooleanProperty(boolean value) {
this.value = value;
}

@Override
public Class<?> getType() {
return boolean.class;
}

@Override
public boolean isNull() {
return false;
}

@Override
public String toString() {
return Boolean.toString(value);
}

public boolean getValue() {
return value;
}
}

public static class StringProperty extends Property {
private final String value;

public StringProperty(String value) {
this.value = value;
}

@Override
public Class<?> getType() {
return String.class;
}

@Override
public boolean isNull() {
return value == null;
}

@Override
public String toString() {
return value;
}

public String getValue() {
return value;
}
}
}
6 changes: 4 additions & 2 deletions docking-api/src/ModernDocking/api/AppStateAPI.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,13 @@ of this software and associated documentation files (the "Software"), to deal
package ModernDocking.api;

import ModernDocking.Dockable;
import ModernDocking.Property;
import ModernDocking.exception.DockingLayoutException;
import ModernDocking.internal.DockableWrapper;
import ModernDocking.internal.DockingInternal;
import ModernDocking.layouts.ApplicationLayout;
import ModernDocking.layouts.DockingLayouts;
import ModernDocking.layouts.DockingSimplePanelNode;

import javax.swing.*;
import java.awt.event.ActionEvent;
Expand Down Expand Up @@ -209,13 +211,13 @@ public void setDefaultApplicationLayout(ApplicationLayout layout) {
defaultAppLayout = layout;
}

public String getProperty(Dockable dockable, String propertyName) {
public Property getProperty(Dockable dockable, String propertyName) {
DockableWrapper wrapper = DockingInternal.get(docking).getWrapper(dockable);

return wrapper.getProperty(propertyName);
}

public void setProperty(Dockable dockable, String propertyName, String value) {
public void setProperty(Dockable dockable, String propertyName, Property value) {
DockableWrapper wrapper = DockingInternal.get(docking).getWrapper(dockable);

wrapper.setProperty(propertyName, value);
Expand Down
Loading

0 comments on commit 6aa617b

Please sign in to comment.