mirror of
https://github.com/bancika/diy-layout-creator
synced 2026-11-10 17:22:09 +10:00
fixed dynamic loading
This commit is contained in:
@@ -21,12 +21,16 @@
|
|||||||
*/
|
*/
|
||||||
package org.diylc.core;
|
package org.diylc.core;
|
||||||
|
|
||||||
|
import org.diylc.common.PropertyWrapper;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public interface IDynamicPropertySource {
|
public interface IDynamicPropertySource {
|
||||||
|
|
||||||
void setComponent(IDIYComponent<?> component);
|
void setProperties(List<PropertyWrapper> properties);
|
||||||
|
|
||||||
|
void setComponent(IDIYComponent<?> ownerObject);
|
||||||
|
|
||||||
List<Object> getAvailableValues();
|
List<Object> getAvailableValues();
|
||||||
|
|
||||||
|
|||||||
@@ -1,38 +0,0 @@
|
|||||||
package org.diylc.core;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
public class SwitchPositionPropertyValueSource implements IDynamicPropertySource {
|
|
||||||
|
|
||||||
private IDIYComponent<?> component;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setComponent(IDIYComponent<?> component) {
|
|
||||||
this.component = component;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<Object> getAvailableValues() {
|
|
||||||
if (component == null) {
|
|
||||||
throw new RuntimeException("Component not set");
|
|
||||||
}
|
|
||||||
if (!(component instanceof ISwitch sw)) {
|
|
||||||
return List.of();
|
|
||||||
}
|
|
||||||
int positionCount = sw.getPositionCount();
|
|
||||||
List<Object> res = new ArrayList<>();
|
|
||||||
res.add(null);
|
|
||||||
for (int i = 0; i < positionCount; i++) {
|
|
||||||
res.add(i);
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getDisplayValue(Object value) {
|
|
||||||
if (value == null) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
return "#" + (((Integer)value) + 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -397,20 +397,7 @@ public class LeverSwitch extends AbstractAngledComponent<LeverSwitch.LeverSwitch
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getPositionCount() {
|
public int getPositionCount() {
|
||||||
switch (type) {
|
return type.getPositionCount();
|
||||||
case DP3T:
|
|
||||||
return 3;
|
|
||||||
case DP4T:
|
|
||||||
return 4;
|
|
||||||
case DP3T_5pos:
|
|
||||||
case DP3T_5pos_Import:
|
|
||||||
case DP5T:
|
|
||||||
case _4P5T:
|
|
||||||
return 5;
|
|
||||||
case _6_WAY_OG:
|
|
||||||
return 6;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -522,7 +509,7 @@ public class LeverSwitch extends AbstractAngledComponent<LeverSwitch.LeverSwitch
|
|||||||
) // position 6
|
) // position 6
|
||||||
);
|
);
|
||||||
|
|
||||||
@DynamicEditableProperty(source = SwitchPositionPropertyValueSource.class)
|
@DynamicEditableProperty(source = LeverSwitchPositionPropertyValueSource.class)
|
||||||
@EditableProperty(name = "Selected Position")
|
@EditableProperty(name = "Selected Position")
|
||||||
@Override
|
@Override
|
||||||
public Integer getSelectedPosition() {
|
public Integer getSelectedPosition() {
|
||||||
@@ -550,15 +537,26 @@ public class LeverSwitch extends AbstractAngledComponent<LeverSwitch.LeverSwitch
|
|||||||
|
|
||||||
public static enum LeverSwitchType {
|
public static enum LeverSwitchType {
|
||||||
|
|
||||||
DP3T("DP3T (Standard 3-Position Strat)"), DP3T_5pos("DP3T (Standard 5-Position Strat)"), DP3T_5pos_Import("DP3T (Import 5-Position Strat)"),
|
DP3T("DP3T (Standard 3-Position Strat)", 3),
|
||||||
_4P5T("4P5T (Super/Mega)"), DP4T("DP4T (4-Position Tele)"), _6_WAY_OG("DP4T (6-Position Oak Grigsby)"), DP5T("DP5T");
|
DP3T_5pos("DP3T (Standard 5-Position Strat)", 5),
|
||||||
|
DP3T_5pos_Import("DP3T (Import 5-Position Strat)", 5),
|
||||||
|
_4P5T("4P5T (Super/Mega)", 5),
|
||||||
|
DP4T("DP4T (4-Position Tele)", 4),
|
||||||
|
_6_WAY_OG("DP4T (6-Position Oak Grigsby)", 6),
|
||||||
|
DP5T("DP5T", 5);
|
||||||
|
|
||||||
|
private final int positionCount;
|
||||||
private String title;
|
private String title;
|
||||||
|
|
||||||
private LeverSwitchType(String title) {
|
private LeverSwitchType(String title, int positionCount) {
|
||||||
|
this.positionCount = positionCount;
|
||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getPositionCount() {
|
||||||
|
return positionCount;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return title;
|
return title;
|
||||||
|
|||||||
+61
@@ -0,0 +1,61 @@
|
|||||||
|
package org.diylc.components.guitar;
|
||||||
|
|
||||||
|
import org.diylc.common.PropertyWrapper;
|
||||||
|
import org.diylc.core.IDIYComponent;
|
||||||
|
import org.diylc.core.IDynamicPropertySource;
|
||||||
|
import org.diylc.core.ISwitch;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class LeverSwitchPositionPropertyValueSource implements IDynamicPropertySource {
|
||||||
|
|
||||||
|
private List<PropertyWrapper> properties;
|
||||||
|
private IDIYComponent<?> component;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProperties(List<PropertyWrapper> properties) {
|
||||||
|
this.properties = properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setComponent(IDIYComponent<?> component) {
|
||||||
|
this.component = component;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Object> getAvailableValues() {
|
||||||
|
if (properties == null) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
Optional<PropertyWrapper> optionalPropertyWrapper = this.properties.stream().filter(p -> {
|
||||||
|
try {
|
||||||
|
return p.getGetter().getName().equals("getValue");
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}).findFirst();
|
||||||
|
if (optionalPropertyWrapper.isEmpty()) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
LeverSwitch.LeverSwitchType
|
||||||
|
switchType = (LeverSwitch.LeverSwitchType) optionalPropertyWrapper.get().getValue();
|
||||||
|
int positionCount = switchType.getPositionCount();
|
||||||
|
List<Object> res = new ArrayList<>();
|
||||||
|
res.add(null);
|
||||||
|
for (int i = 0; i < positionCount; i++) {
|
||||||
|
res.add(i);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDisplayValue(Object value) {
|
||||||
|
if (value == null) {
|
||||||
|
return "None";
|
||||||
|
}
|
||||||
|
if (component instanceof ISwitch sw) {
|
||||||
|
return sw.getPositionName((Integer)value);
|
||||||
|
}
|
||||||
|
return "#" + (((Integer)value) + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -71,29 +71,35 @@ public class DynamicValueEditor extends JComboBox<Object> {
|
|||||||
public Component getListCellRendererComponent(JList<?> list, Object value, int index,
|
public Component getListCellRendererComponent(JList<?> list, Object value, int index,
|
||||||
boolean isSelected, boolean cellHasFocus) {
|
boolean isSelected, boolean cellHasFocus) {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
return super.getListCellRendererComponent(list, value == null ? null : LangUtil.translate(dynamicPropertySource.getDisplayValue(value)),
|
return super.getListCellRendererComponent(list, LangUtil.translate(dynamicPropertySource.getDisplayValue(value)),
|
||||||
index, isSelected, cellHasFocus);
|
index, isSelected, cellHasFocus);
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
setSelectedItem(property.getValue());
|
setSelectedItem(property.getValue());
|
||||||
|
|
||||||
addPopupMenuListener(new PopupMenuListener() {
|
// Create a shared refresh action
|
||||||
@Override
|
final Runnable refreshAction = () -> {
|
||||||
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
|
|
||||||
// Schedule the update just after the popup becomes visible
|
|
||||||
SwingUtilities.invokeLater(() -> {
|
|
||||||
if (getModel() instanceof DynamicComboBoxModel model) {
|
if (getModel() instanceof DynamicComboBoxModel model) {
|
||||||
model.refreshValues();
|
model.refreshValues();
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
|
||||||
|
addPopupMenuListener(new PopupMenuListener() {
|
||||||
|
@Override
|
||||||
|
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
|
||||||
|
refreshAction.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
|
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void popupMenuCanceled(PopupMenuEvent e) {}
|
public void popupMenuCanceled(PopupMenuEvent e) {
|
||||||
|
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
addItemListener(new ItemListener() {
|
addItemListener(new ItemListener() {
|
||||||
|
|||||||
@@ -76,6 +76,13 @@ public class PropertyEditorDialog extends ButtonDialog {
|
|||||||
this.properties = properties;
|
this.properties = properties;
|
||||||
this.defaultedProperties = new HashSet<PropertyWrapper>();
|
this.defaultedProperties = new HashSet<PropertyWrapper>();
|
||||||
|
|
||||||
|
// update dynamic property sources
|
||||||
|
// TODO consider better way to do this
|
||||||
|
properties.stream()
|
||||||
|
.map(x -> x.getDynamicPropertySource())
|
||||||
|
.filter(x -> x != null)
|
||||||
|
.forEach(source -> source.setProperties(properties));
|
||||||
|
|
||||||
setMinimumSize(new Dimension(240, 40));
|
setMinimumSize(new Dimension(240, 40));
|
||||||
|
|
||||||
layoutGui();
|
layoutGui();
|
||||||
|
|||||||
Reference in New Issue
Block a user