Package jmri.jmrit.symbolicprog
Class SplitVariableValue
- java.lang.Object
-
- jmri.jmrit.symbolicprog.AbstractValue
-
- jmri.jmrit.symbolicprog.VariableValue
-
- jmri.jmrit.symbolicprog.SplitVariableValue
-
- All Implemented Interfaces:
java.awt.event.ActionListener,java.awt.event.FocusListener,java.beans.PropertyChangeListener,java.util.EventListener
- Direct Known Subclasses:
SplitDateTimeVariableValue,SplitHexVariableValue,SplitHundredsVariableValue,SplitTextVariableValue
public class SplitVariableValue extends VariableValue implements java.awt.event.ActionListener, java.awt.event.FocusListener
Extends VariableValue to represent a variable split across multiple CVs.
Themaskattribute represents the part of the value that's present in each CV; higher-order bits are loaded to subsequent CVs.
It is possible to assign a specific mask for each CV by providing a space separated list of masks, starting with the lowest, and matching the order of CVs
The original use was for addresses of stationary (accessory) decoders.
The original version only allowed two CVs, with the second CV specified by the attributeshighCVandupperMask.
The preferred technique is now to specify all CVs in theCVattribute alone, as documented atexpandCvList(String).
Optional attributesfactorandoffsetare applied when going from the variable value to the CV values, or vice-versa:Value to put in CVs = ((value in text field) -
offset)/factorValue to put in text field = ((value in CVs) *factor) +offset
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classSplitVariableValue.CvItemClass to hold CV parameters for CVs used.classSplitVariableValue.VarTextField-
Nested classes/interfaces inherited from class jmri.jmrit.symbolicprog.AbstractValue
AbstractValue.ValueState
-
-
Field Summary
Fields Modifier and Type Field Description (package private) int_columns(package private) java.lang.String_cvNum(package private) java.awt.Color_defaultColor(package private) boolean_fieldShrink(package private) java.lang.String_mask(package private) java.lang.String[]_maskArray(package private) long_maxVal(package private) long_minVal(package private) java.lang.String_name(package private) javax.swing.JTextField_textField(package private) java.lang.String_uppermask(package private) intcurrentOffset(package private) intcvCount(package private) java.util.List<SplitVariableValue.CvItem>cvList(package private) intmFactor(package private) intmOffset(package private) java.lang.StringmSecondCV(package private) java.lang.StringoldContents(package private) java.util.List<java.awt.Component>reps-
Fields inherited from class jmri.jmrit.symbolicprog.VariableValue
_cvMap, _status, _tooltipText
-
Fields inherited from class jmri.jmrit.symbolicprog.AbstractValue
prop
-
-
Constructor Summary
Constructors Constructor Description SplitVariableValue(java.lang.String name, java.lang.String comment, java.lang.String cvName, boolean readOnly, boolean infoOnly, boolean writeOnly, boolean opsOnly, java.lang.String cvNum, java.lang.String mask, int minVal, int maxVal, java.util.HashMap<java.lang.String,CvValue> v, javax.swing.JLabel status, java.lang.String stdname, java.lang.String pSecondCV, int pFactor, int pOffset, java.lang.String uppermask, java.lang.String extra1, java.lang.String extra2, java.lang.String extra3, java.lang.String extra4)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidactionPerformed(java.awt.event.ActionEvent e)ActionListener implementation.voiddispose()Dispose of the object.(package private) voidenterField()Saves contents of _textField to oldContents.(package private) voidexitField()Contains numeric-value specific code.voidfocusGained(java.awt.event.FocusEvent e)FocusListener implementations.voidfocusLost(java.awt.event.FocusEvent e)java.awt.ComponentgetCommonRep()Get a display representationObjectof this variable.java.lang.StringgetCvDescription()Provide a user-readable description of the CVs accessed by this variable.java.lang.StringgetCvNum()(package private) int[]getCvValsFromTextField()intgetIntValue()Get the value as a single integer.longgetLongValue()Get the value as an unsigned long.java.lang.StringgetMask()Multiple masks can be defined for the CVs accessed by this variable.protected java.lang.StringgetMask(int i)Access a specific mask, used in testsjava.awt.ComponentgetNewRep(java.lang.String format)Creates a newObjectrepresentation for display purposes, using the specified format.(package private) java.lang.StringgetTextFromValue(long v)(package private) longgetValueFromText(java.lang.String s)java.lang.ObjectgetValueObject()java.lang.StringgetValueString()booleanisChanged()Determine whether this Variable is "changed", so that "read changes" and "write changes" will act on it.booleanisToRead()Ask whether this object needs to be read.booleanisToWrite()Ask whether this object needs to be written.(package private) intpriorityValue(AbstractValue.ValueState state)Assigns a priority value to a given state.voidpropertyChange(java.beans.PropertyChangeEvent e)java.lang.ObjectrangeVal()Gets a (usually text) description of the variable type and range.voidreadAll()Always read the contents of this Variable.voidreadChanges()Read the contents of this Variable if it's in a state that indicates it was "changed".voidsetAvailable(boolean a)Sets the availability status of the object.(package private) voidsetColor(java.awt.Color c)Method to handle color changes for states.voidsetCvState(AbstractValue.ValueState state)Notify the connected CVs of a state change from abovevoidsetIntValue(int i)Set the value from a single number.voidsetLongValue(long value)voidsetToolTipText(java.lang.String t)Set tooltip text to be used by both the "value" and representations of this Variable.voidsetValue(java.lang.String value)Set value from a String value.voidstepOneActions(java.lang.String name, java.lang.String comment, java.lang.String cvName, boolean readOnly, boolean infoOnly, boolean writeOnly, boolean opsOnly, java.lang.String cvNum, java.lang.String mask, int minVal, int maxVal, java.util.HashMap<java.lang.String,CvValue> v, javax.swing.JLabel status, java.lang.String stdname, java.lang.String pSecondCV, int pFactor, int pOffset, java.lang.String uppermask, java.lang.String extra1, java.lang.String extra2, java.lang.String extra3, java.lang.String extra4)Subclasses can override this to pick up constructor-specific attributes and perform other actions before cvList has been built.voidstepTwoActions()Subclasses can override this to invoke further actions after cvList has been built.(package private) voidupdatedTextField()This should be overridden by any implementation.(package private) voidupdateVariableValue(int[] intVals)Contains numeric-value specific code.CvValue[]usesCVs()Provide access to CVs used by this Variable.voidwriteAll()Always write the contents of this Variable.voidwriteChanges()Write the contents of this Variable if it's in a state that indicates it was "changed".-
Methods inherited from class jmri.jmrit.symbolicprog.VariableValue
confirmAll, considerChanged, cvName, getComment, getCvName, getInfoOnly, getMaxMask, getOpsOnly, getReadOnly, getState, getTextValue, getValueInCV, getWriteOnly, isBitMask, isBusy, item, label, maskValAsInt, offsetVal, setBusy, setState, setToRead, setToWrite, setValueInCV, simplifyMask, updateRepresentation
-
Methods inherited from class jmri.jmrit.symbolicprog.AbstractValue
addPropertyChangeListener, getAvailable, removePropertyChangeListener
-
-
-
-
Field Detail
-
mSecondCV
java.lang.String mSecondCV
-
_uppermask
java.lang.String _uppermask
-
mFactor
int mFactor
-
mOffset
int mOffset
-
_name
java.lang.String _name
-
_mask
java.lang.String _mask
-
_maskArray
java.lang.String[] _maskArray
-
_cvNum
java.lang.String _cvNum
-
cvList
java.util.List<SplitVariableValue.CvItem> cvList
-
cvCount
int cvCount
-
currentOffset
int currentOffset
-
_minVal
long _minVal
-
_maxVal
long _maxVal
-
oldContents
java.lang.String oldContents
-
_fieldShrink
boolean _fieldShrink
-
_defaultColor
java.awt.Color _defaultColor
-
_columns
int _columns
-
reps
java.util.List<java.awt.Component> reps
-
_textField
javax.swing.JTextField _textField
-
-
Constructor Detail
-
SplitVariableValue
public SplitVariableValue(java.lang.String name, java.lang.String comment, java.lang.String cvName, boolean readOnly, boolean infoOnly, boolean writeOnly, boolean opsOnly, java.lang.String cvNum, java.lang.String mask, int minVal, int maxVal, java.util.HashMap<java.lang.String,CvValue> v, javax.swing.JLabel status, java.lang.String stdname, java.lang.String pSecondCV, int pFactor, int pOffset, java.lang.String uppermask, java.lang.String extra1, java.lang.String extra2, java.lang.String extra3, java.lang.String extra4)
-
-
Method Detail
-
stepOneActions
public void stepOneActions(java.lang.String name, java.lang.String comment, java.lang.String cvName, boolean readOnly, boolean infoOnly, boolean writeOnly, boolean opsOnly, java.lang.String cvNum, java.lang.String mask, int minVal, int maxVal, java.util.HashMap<java.lang.String,CvValue> v, javax.swing.JLabel status, java.lang.String stdname, java.lang.String pSecondCV, int pFactor, int pOffset, java.lang.String uppermask, java.lang.String extra1, java.lang.String extra2, java.lang.String extra3, java.lang.String extra4)
Subclasses can override this to pick up constructor-specific attributes and perform other actions before cvList has been built.- Parameters:
name- name.comment- comment.cvName- cv name.readOnly- true for read only, else false.infoOnly- true for info only, else false.writeOnly- true for write only, else false.opsOnly- true for ops only, else false.cvNum- cv number.mask- cv mask.minVal- minimum value.maxVal- maximum value.v- hashmap of string and cv value.status- status.stdname- std name.pSecondCV- second cv (no longer preferred, specify in cv)pFactor- factor.pOffset- offset.uppermask- upper mask (no longer preferred, specify in mask)extra1- extra 1.extra2- extra 2.extra3- extra 3.extra4- extra 4.
-
stepTwoActions
public void stepTwoActions()
Subclasses can override this to invoke further actions after cvList has been built.
-
usesCVs
public CvValue[] usesCVs()
Description copied from class:VariableValueProvide access to CVs used by this Variable.- Specified by:
usesCVsin classVariableValue- Returns:
- an array of CVs used by this Variable
-
getMask
public java.lang.String getMask()
Multiple masks can be defined for the CVs accessed by this variable.
Actual individual masks are returned ingetCvDescription().- Overrides:
getMaskin classVariableValue- Returns:
- The legacy two-CV mask if
highCVis specified.
ThemaskifhighCVis not specified.
-
getMask
protected java.lang.String getMask(int i)
Access a specific mask, used in tests- Parameters:
i- index of CV in variable- Returns:
- a single mask as string in the form XXXXVVVV, or empty string if index out of bounds
-
getCvDescription
public java.lang.String getCvDescription()
Provide a user-readable description of the CVs accessed by this variable.
Actual individual masks are added to CVs if more are present.- Overrides:
getCvDescriptionin classVariableValue- Returns:
- A user-friendly CV(s) and bitmask(s) description
-
getCvNum
public java.lang.String getCvNum()
- Overrides:
getCvNumin classVariableValue- Returns:
- the CV number
-
setToolTipText
public void setToolTipText(java.lang.String t)
Description copied from class:VariableValueSet tooltip text to be used by both the "value" and representations of this Variable.This is expected to be overridden in subclasses to change their internal info.
- Overrides:
setToolTipTextin classVariableValue- Parameters:
t- the tooltip text to be used- See Also:
VariableValue.updateRepresentation(javax.swing.JComponent)
-
rangeVal
public java.lang.Object rangeVal()
Description copied from class:VariableValueGets a (usually text) description of the variable type and range.- Specified by:
rangeValin classVariableValue- Returns:
- description of the variable type and range
-
getValueFromText
long getValueFromText(java.lang.String s)
-
getTextFromValue
java.lang.String getTextFromValue(long v)
-
getCvValsFromTextField
int[] getCvValsFromTextField()
-
updateVariableValue
void updateVariableValue(int[] intVals)
Contains numeric-value specific code.
Calculates new value for _textField and invokessetLongValue(newVal)to make and notify the change- Parameters:
intVals- array of new CV values
-
enterField
void enterField()
Saves contents of _textField to oldContents.
-
exitField
void exitField()
Contains numeric-value specific code.
firePropertyChange for "Value" with new and old contents of _textField
-
updatedTextField
void updatedTextField()
Description copied from class:VariableValueThis should be overridden by any implementation.- Overrides:
updatedTextFieldin classVariableValue
-
actionPerformed
public void actionPerformed(java.awt.event.ActionEvent e)
ActionListener implementation.Invokes
exitField()- Specified by:
actionPerformedin interfacejava.awt.event.ActionListener- Parameters:
e- the action event
-
focusGained
public void focusGained(java.awt.event.FocusEvent e)
FocusListener implementations.- Specified by:
focusGainedin interfacejava.awt.event.FocusListener
-
focusLost
public void focusLost(java.awt.event.FocusEvent e)
- Specified by:
focusLostin interfacejava.awt.event.FocusListener
-
getValueString
public java.lang.String getValueString()
- Specified by:
getValueStringin classVariableValue- Returns:
- String that can (usually) be interpreted as an integer
-
setValue
public void setValue(java.lang.String value)
Set value from a String value.- Overrides:
setValuein classVariableValue- Parameters:
value- a string representing the Long value to be set
-
setIntValue
public void setIntValue(int i)
Description copied from class:VariableValueSet the value from a single number.In some cases, e.g. speed tables, this will result in complex behavior, where setIntValue(getIntValue()) results in something unexpected.
- Specified by:
setIntValuein classVariableValue- Parameters:
i- the integer value to set
-
getIntValue
public int getIntValue()
Description copied from class:VariableValueGet the value as a single integer.In some cases, e.g. speed tables, this will result in complex behavior, where setIntValue(getIntValue()) results in something unexpected.
- Specified by:
getIntValuein classVariableValue- Returns:
- the value as an integer
-
getLongValue
public long getLongValue()
Get the value as an unsigned long.- Overrides:
getLongValuein classVariableValue- Returns:
- the value as a long
-
getValueObject
public java.lang.Object getValueObject()
- Specified by:
getValueObjectin classVariableValue- Returns:
- Value as a native-form Object
-
getCommonRep
public java.awt.Component getCommonRep()
Description copied from class:VariableValueGet a display representationObjectof this variable.
The actual stored value of a variable is not the most interesting thing. Instead, you usually get anObjectrepresentation for display in a table, etc. Modification of the state of that object then gets reflected back, causing the underlying CV objects to change.- Specified by:
getCommonRepin classVariableValue- Returns:
- the
Objectrepresentation for display purposes
-
setLongValue
public void setLongValue(long value)
-
setColor
void setColor(java.awt.Color c)
Description copied from class:AbstractValueMethod to handle color changes for states.- Specified by:
setColorin classAbstractValue- Parameters:
c- the desired colour
-
getNewRep
public java.awt.Component getNewRep(java.lang.String format)
Description copied from class:VariableValueCreates a newObjectrepresentation for display purposes, using the specified format.- Specified by:
getNewRepin classVariableValue- Parameters:
format- a name representing- Returns:
- an
Objectrepresentation for display purposes
-
setAvailable
public void setAvailable(boolean a)
Description copied from class:AbstractValueSets the availability status of the object.- Overrides:
setAvailablein classAbstractValue- Parameters:
a-trueif the object should be made available,falseif should be made unavailable
-
setCvState
public void setCvState(AbstractValue.ValueState state)
Notify the connected CVs of a state change from above- Specified by:
setCvStatein classVariableValue- Parameters:
state- The new state
-
isChanged
public boolean isChanged()
Description copied from class:VariableValueDetermine whether this Variable is "changed", so that "read changes" and "write changes" will act on it.- Specified by:
isChangedin classVariableValue- Returns:
- true if Variable is "changed"
- See Also:
VariableValue.considerChanged(jmri.jmrit.symbolicprog.CvValue)
-
isToRead
public boolean isToRead()
Description copied from class:VariableValueAsk whether this object needs to be read.Simple implementation for the case of a single CV. Intended to be sufficient for many subclasses.
- Overrides:
isToReadin classVariableValue- Returns:
- true if the object needs to be read, false otherwise
- See Also:
AbstractValue
-
isToWrite
public boolean isToWrite()
Description copied from class:VariableValueAsk whether this object needs to be written.Simple implementation for the case of a single CV. Intended to be sufficient for many subclasses.
- Overrides:
isToWritein classVariableValue- Returns:
- true if the object needs to be written, false otherwise
- See Also:
AbstractValue
-
readChanges
public void readChanges()
Description copied from class:VariableValueRead the contents of this Variable if it's in a state that indicates it was "changed".- Specified by:
readChangesin classVariableValue- See Also:
VariableValue.isChanged()
-
writeChanges
public void writeChanges()
Description copied from class:VariableValueWrite the contents of this Variable if it's in a state that indicates it was "changed".- Specified by:
writeChangesin classVariableValue- See Also:
VariableValue.isChanged()
-
readAll
public void readAll()
Description copied from class:VariableValueAlways read the contents of this Variable.- Specified by:
readAllin classVariableValue
-
writeAll
public void writeAll()
Description copied from class:VariableValueAlways write the contents of this Variable.- Specified by:
writeAllin classVariableValue
-
priorityValue
int priorityValue(AbstractValue.ValueState state)
Assigns a priority value to a given state.- Parameters:
state- State to be converted to a priority value- Returns:
- Priority value from state, with UNKNOWN numerically highest
-
propertyChange
public void propertyChange(java.beans.PropertyChangeEvent e)
- Specified by:
propertyChangein interfacejava.beans.PropertyChangeListener- Specified by:
propertyChangein classVariableValue
-
dispose
public void dispose()
Description copied from class:VariableValueDispose of the object.- Specified by:
disposein classVariableValue
-
-