Search in sources :

Example 1 with FieldModel

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);
        }
    }
}
Also used : RegisterModel(net.sourceforge.usbdm.peripherals.model.RegisterModel) MemoryException(net.sourceforge.usbdm.peripherals.model.MemoryException) Enumeration(net.sourceforge.usbdm.peripheralDatabase.Enumeration) StyleRange(org.eclipse.swt.custom.StyleRange) FieldModel(net.sourceforge.usbdm.peripherals.model.FieldModel)

Example 2 with FieldModel

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();
    }
}
Also used : RegisterModel(net.sourceforge.usbdm.peripherals.model.RegisterModel) ITreeSelection(org.eclipse.jface.viewers.ITreeSelection) BaseModel(net.sourceforge.usbdm.peripherals.model.BaseModel) PeripheralModel(net.sourceforge.usbdm.peripherals.model.PeripheralModel) FieldModel(net.sourceforge.usbdm.peripherals.model.FieldModel)

Example 3 with FieldModel

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;
}
Also used : RegisterModel(net.sourceforge.usbdm.peripherals.model.RegisterModel) ClusterModel(net.sourceforge.usbdm.peripherals.model.ClusterModel) BaseModel(net.sourceforge.usbdm.peripherals.model.BaseModel) FieldModel(net.sourceforge.usbdm.peripherals.model.FieldModel)

Example 4 with FieldModel

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");
            }
        }
    }
}
Also used : RegisterModel(net.sourceforge.usbdm.peripherals.model.RegisterModel) TreeItem(org.eclipse.swt.widgets.TreeItem) FieldModel(net.sourceforge.usbdm.peripherals.model.FieldModel)

Aggregations

FieldModel (net.sourceforge.usbdm.peripherals.model.FieldModel)4 RegisterModel (net.sourceforge.usbdm.peripherals.model.RegisterModel)4 BaseModel (net.sourceforge.usbdm.peripherals.model.BaseModel)2 Enumeration (net.sourceforge.usbdm.peripheralDatabase.Enumeration)1 ClusterModel (net.sourceforge.usbdm.peripherals.model.ClusterModel)1 MemoryException (net.sourceforge.usbdm.peripherals.model.MemoryException)1 PeripheralModel (net.sourceforge.usbdm.peripherals.model.PeripheralModel)1 ITreeSelection (org.eclipse.jface.viewers.ITreeSelection)1 StyleRange (org.eclipse.swt.custom.StyleRange)1 TreeItem (org.eclipse.swt.widgets.TreeItem)1