use of net.sourceforge.usbdm.peripherals.model.FieldModel in project usbdm-eclipse-plugins by podonoghue.
the class PeripheralsInformationPanel method updateContent.
/**
* Updates the peripheralsInformationPanel according to the current tree selection
*/
public void updateContent() {
// ITreeSelection selection = (ITreeSelection) fPeripheralsTreeViewer.getSelection();
// Object uModel = selection.getFirstElement();
// if ((uModel == null) || !(uModel instanceof BaseModel)) {
// return;
// }
// fCurrentModel = (BaseModel) uModel;
// System.err.println("PeripheralsInformationPanel.updateContent()");
setText("");
if (fCurrentModel == null) {
return;
}
String basicDescription = fCurrentModel.getDescription();
String valueString = "";
if (fCurrentModel instanceof RegisterModel) {
RegisterModel model = (RegisterModel) fCurrentModel;
valueString = String.format(" (%s,%s,%s)", model.getValueAsDecimalString(), model.getValueAsHexString(), model.getValueAsBinaryString());
} else if (fCurrentModel instanceof FieldModel) {
FieldModel model = (FieldModel) fCurrentModel;
valueString = String.format(" (%s,%s,%s)", model.getValueAsDecimalString(), model.getValueAsHexString(), model.getValueAsBinaryString());
}
StringBuffer description = new StringBuffer();
StyleRange valueStyleRange = null;
int splitAt = basicDescription.indexOf("\n");
if (!valueString.isEmpty()) {
if (splitAt != -1) {
description.append(basicDescription.substring(0, splitAt));
valueStyleRange = new StyleRange(description.length(), valueString.length(), Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE), null, SWT.NORMAL);
description.append(valueString);
description.append(basicDescription.substring(splitAt));
} else {
description.append(basicDescription);
valueStyleRange = new StyleRange(description.length(), valueString.length(), Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE), null, SWT.NORMAL);
description.append(valueString);
}
} else {
description.append(basicDescription);
}
StyleRange styleRange = new StyleRange(0, description.length(), null, null, SWT.BOLD);
if (fCurrentModel instanceof FieldModel) {
FieldModel uField = (FieldModel) fCurrentModel;
// Start of enumeration
int enumerationIndex = description.length();
// text
// Length of enumeration text
int enumerationlength = 0;
// Start of highlighted enumeration
int selectionIndex = 0;
// Length of highlighted enumeration
int selectionLength = 0;
long enumerationValue = 0;
boolean enumerationValid = false;
try {
enumerationValue = uField.getValue();
enumerationValid = true;
} catch (MemoryException e) {
}
for (Enumeration enumeration : uField.getEnumeratedDescription()) {
description.append("\n");
String enumerationValueDescription = enumeration.getName() + ": " + enumeration.getCDescription();
if ((selectionIndex == 0) && (enumerationValid && enumeration.isSelected(enumerationValue))) {
// Highlight first matching enumeration
selectionIndex = description.length();
selectionLength = enumerationValueDescription.length();
}
enumerationlength += enumerationValueDescription.length();
description.append(enumerationValueDescription);
}
setText(description.toString());
setStyleRange(styleRange);
if (valueStyleRange != null) {
setStyleRange(valueStyleRange);
}
styleRange = new StyleRange(enumerationIndex, enumerationlength, null, null, SWT.NORMAL);
setStyleRange(styleRange);
styleRange = new StyleRange(selectionIndex, selectionLength, Display.getCurrent().getSystemColor(SWT.COLOR_RED), null, SWT.NORMAL);
setStyleRange(styleRange);
} else {
setText(description.toString());
setStyleRange(styleRange);
if (valueStyleRange != null) {
setStyleRange(valueStyleRange);
}
}
}
use of net.sourceforge.usbdm.peripherals.model.FieldModel in project usbdm-eclipse-plugins by podonoghue.
the class PeripheralsInformationPanel method selectionChanged.
/**
* Handles changes in selection of peripheral, register or field in tree view
*
* Updates description in infoPanel
* Attaches change listener to selected element
*
* @param event
*/
public void selectionChanged(SelectionChangedEvent event) {
Object source = event.getSource();
// System.err.println("PeripheralsInformationPanel.selectionChanged(), source = " + source.getClass());
if (source == fPeripheralsTreeViewer) {
ITreeSelection selection = (ITreeSelection) fPeripheralsTreeViewer.getSelection();
Object uModel = selection.getFirstElement();
// Detach from current peripheral
if (fPeripheralModel != null) {
fPeripheralModel.removeListener(this);
fPeripheralModel = null;
}
if ((uModel == null) || !(uModel instanceof BaseModel)) {
fCurrentModel = null;
updateContent();
return;
}
// Save model element to get values/description from
fCurrentModel = (BaseModel) uModel;
// Find peripheral that owns selected model
BaseModel model = fCurrentModel;
if (model instanceof FieldModel) {
// System.err.println("PeripheralsInformationPanel.selectionChanged(), traversing field = " + model);
model = model.getParent();
}
if (model instanceof RegisterModel) {
// System.err.println("PeripheralsInformationPanel.selectionChanged(), traversing register = " + model);
model = model.getParent();
}
if (model instanceof PeripheralModel) {
// Attach listener to peripheral
fPeripheralModel = (PeripheralModel) model;
fPeripheralModel.addListener(this);
// System.err.println("PeripheralsInformationPanel.selectionChanged(), listening to = " + model);
}
// else {
// System.err.println("PeripheralsInformationPanel.selectionChanged(), ignoring = " + model);
// System.err.println("PeripheralsInformationPanel.selectionChanged(), ignoring = " + model.getClass());
// }
updateContent();
}
}
use of net.sourceforge.usbdm.peripherals.model.FieldModel in project usbdm-eclipse-plugins by podonoghue.
the class PeripheralsViewSorter method compare.
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
BaseModel element1 = (BaseModel) e1;
BaseModel element2 = (BaseModel) e2;
int diff = 0;
// Fields - sort by bitOffset then name
if (e1 instanceof FieldModel) {
diff = ((FieldModel) e2).getBitOffset() - ((FieldModel) e1).getBitOffset();
if (diff != 0) {
return diff;
}
diff = ((FieldModel) e2).getBitWidth() - ((FieldModel) e1).getBitWidth();
if (diff != 0) {
return diff;
}
diff = element1.getName().compareTo(element2.getName());
return diff;
}
// Registers sorted by address then name
if ((e1 instanceof RegisterModel) || (e1 instanceof ClusterModel)) {
if (element1.getAddress() > element2.getAddress()) {
diff = 1;
} else if (element1.getAddress() < element2.getAddress()) {
diff = -1;
} else {
diff = element1.getName().compareTo(element2.getName());
}
return diff;
}
// Sort criteria affects how peripherals are sorted only
switch(criteria) {
case PeripheralNameOrder:
// Sort by name then address (unlikely!)
diff = element1.getName().compareTo(element2.getName());
if (diff == 0) {
if (element1.getAddress() > element2.getAddress()) {
diff = 1;
} else if (element1.getAddress() < element2.getAddress()) {
diff = -1;
} else {
diff = element1.getName().compareTo(element2.getName());
}
}
break;
case AddressOrder:
// Sort by address then name
if (element1.getAddress() > element2.getAddress()) {
diff = 1;
} else if (element1.getAddress() < element2.getAddress()) {
diff = -1;
} else {
diff = element1.getName().compareTo(element2.getName());
}
break;
}
return diff;
}
use of net.sourceforge.usbdm.peripherals.model.FieldModel in project usbdm-eclipse-plugins by podonoghue.
the class PeripheralsViewCellModifier method modify.
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ICellModifier#modify(java.lang.Object, java.lang.String, java.lang.Object)
*/
@Override
public void modify(Object element, String property, Object value) {
// System.err.println("PeripheralsViewCellModifier.modify("+element.getClass()+", "+value.toString()+")");
if (element instanceof TreeItem) {
// Update element and tree model
TreeItem treeItem = (TreeItem) element;
Object treeItemData = treeItem.getData();
if (treeItemData instanceof RegisterModel) {
// System.err.println("PeripheralsViewCellModifier.modify(RegisterModel, "+value.toString()+")");
RegisterModel registerModel = (RegisterModel) treeItemData;
try {
String s = value.toString().trim();
if (s.startsWith("0b")) {
registerModel.setValue(Long.parseLong(s.substring(2, s.length()), 2));
} else {
registerModel.setValue(Long.decode(s));
}
} catch (NumberFormatException e) {
// System.err.println("PeripheralsViewCellModifier.modify(RegisterModel, ...) - format error");
}
} else if (treeItemData instanceof FieldModel) {
FieldModel fieldModel = (FieldModel) treeItemData;
try {
String s = value.toString().trim();
if (s.startsWith("0b")) {
fieldModel.setValue(Long.parseLong(s.substring(2, s.length()), 2));
} else {
fieldModel.setValue(Long.decode(s));
}
} catch (NumberFormatException e) {
// System.err.println("PeripheralsViewCellModifier.modify(FieldModel, ...) - format error");
}
}
}
}
Aggregations