Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions sample.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,16 @@
<slider divisions="5" />
</hints>
</int>
<int size="2">
<name>Immediate-write integer slider</name>
<description>Doesn't do anything either</description>
<min>0</min>
<max>1000</max>
<default>12</default>
<hints>
<slider divisions="5" immediate="yes" />
</hints>
</int>
</segment>

<segment origin="128" space="1">
Expand Down
2 changes: 2 additions & 0 deletions src/org/openlcb/cdi/CdiRep.java
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ public static interface IntegerRep extends Item {
public int getSize();

public boolean isSliderHint();
// Does the slider itself immediately write its value on change?
public boolean isSliderImmediate();
public int getSliderDivisions();
}

Expand Down
12 changes: 12 additions & 0 deletions src/org/openlcb/cdi/jdom/JdomCdiRep.java
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,18 @@ public boolean isSliderHint() {
return true;
}

@Override
public boolean isSliderImmediate() {
Element hints = e.getChild("hints");
if (hints == null) return false;
Element slider = hints.getChild("slider");
if (slider == null) return false;
Attribute immediate = slider.getAttribute("immediate");
if (immediate == null) return false;
if (! immediate.getValue().toLowerCase().equals("yes")) return false;
return true;
}

@Override
public int getSliderDivisions() {
Element hints = e.getChild("hints");
Expand Down
49 changes: 42 additions & 7 deletions src/org/openlcb/cdi/swing/CdiPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ComboBoxModel;
import javax.swing.InputVerifier;
import javax.swing.JButton;
import javax.swing.JComboBox;
Expand Down Expand Up @@ -1971,6 +1972,12 @@ public void actionPerformed(ActionEvent actionEvent) {
updateColor();
}
});
} else if (textComponent instanceof JSlider) {
((JSlider) textComponent).addChangeListener(new javax.swing.event.ChangeListener(){
public void stateChanged(javax.swing.event.ChangeEvent e) {
updateColor();
}
});
}
entryListener = new PropertyChangeListener() {
@Override
Expand Down Expand Up @@ -2367,6 +2374,7 @@ private class IntPane extends EntryPane {
JSlider slider = null;
CdiRep.Map map = null;
private final ConfigRepresentation.IntegerEntry entry;
boolean first = true; // used to suppress slider output on initial change


IntPane(ConfigRepresentation.IntegerEntry e) {
Expand All @@ -2389,16 +2397,35 @@ public java.awt.Dimension getMaximumSize() {
if (entry.rep.isSliderHint()) {
// display a slider
slider = new JSlider((int)entry.rep.getMin(), (int)entry.rep.getMax());
slider.setOpaque(true); // so you can color it
if (entry.rep.getSliderDivisions() > 1) {
// display divisions on the slider
int divisionSpacing =
((int)(entry.rep.getMax()-entry.rep.getMin()))/entry.rep.getSliderDivisions();
(int)Math.round(
(entry.rep.getMax()-entry.rep.getMin()+0.0) // force float calculation
/entry.rep.getSliderDivisions()
);
slider.setMajorTickSpacing(divisionSpacing);
slider.setLabelTable(slider.createStandardLabels(divisionSpacing));
slider.setPaintTicks(true);
slider.setPaintLabels(true);
}

// (optionally) listen for changes and immediately write
if (entry.rep.isSliderImmediate()) {
slider.addChangeListener(new javax.swing.event.ChangeListener(){
public void stateChanged(javax.swing.event.ChangeEvent e) {
if (!slider.getValueIsAdjusting()) {
if (!first) writeDisplayTextToNode();
first = false;
}
}
});
}

textComponent = slider;

// set the tooltip to min and max values
if (entry.rep.getMin() < 0) {
slider.setToolTipText("Signed integer from "
+entry.rep.getMin()+" to "+entry.rep.getMax()
Expand Down Expand Up @@ -2443,7 +2470,7 @@ protected void writeDisplayTextToNode() {
} else {
// have to get key from stored map value
String entry = (String) box.getSelectedItem();
String key = map.getKey(entry);
String key = map.getKey(entry);
value = Long.parseLong(key);
}
entry.setValue(value);
Expand All @@ -2461,12 +2488,21 @@ protected void updateDisplayText(@NonNull String value) {
if (! box.getSelectedItem().equals(value)) {
// not present per-se, see if need to add as reserved?
String newValue = "Reserved value: "+value;
box.setSelectedItem(newValue);
if ( ! box.getSelectedItem().equals(newValue)) {

ComboBoxModel model = box.getModel();
int size = model.getSize();
boolean absent = true;
for(int i=0;i<size;i++) {
String element = (String) model.getElementAt(i);
if (newValue == element) absent = false;
}

if (absent) {
// add new reserved element
box.addItem(newValue);
box.setSelectedItem(newValue);
map.addItemToMap(newValue, value);
map.addItemToMap(value, newValue);
}
box.setSelectedItem(newValue);
}
}
}
Expand Down Expand Up @@ -2666,7 +2702,6 @@ protected void writeDisplayTextToNode() {
// if not OK, silently skip; if OK, act
if (result == 0) {
entry.setValue((long)(entry.rep.getValue()));
System.out.println(entry.rep.getValue());
_changeMade = true;
notifyTabColorRefresh();
}
Expand Down
12 changes: 10 additions & 2 deletions src/org/openlcb/swing/MemorySpaceSelector.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public class MemorySpaceSelector extends JTextField {
*/
public MemorySpaceSelector(int initialValue) {
super();
setText(""+initialValue);
setText("0x"+Integer.toHexString(initialValue).toUpperCase());
}

/**
Expand All @@ -39,7 +39,15 @@ public MemorySpaceSelector() {
*
*/
public int getMemorySpace() {
int value = Integer.parseInt(getText());
int value = 0;
String input = getText().trim().toLowerCase();
if (input.startsWith("0x")) {
// hexadecimal case
value = Integer.parseInt(input.substring(2), 16);
} else {
// decimal case
value = Integer.parseInt(input);
}
if (value < 0 ) {
value = 0;
setText(""+value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ void addLine(JComponent j, String name) {
JTextField writeDataField = new JTextField(80);
JTextField configNumberField = new JTextField("40");
JTextField configAddressField = new JTextField("000000");
MemorySpaceSelector addrSpace = new MemorySpaceSelector(255);
MemorySpaceSelector addrSpace = new MemorySpaceSelector(0xfF);

/**
* To be invoked after Swing component installation is complete,
Expand Down