Search in sources :

Example 1 with VisualLexiconNode

use of org.cytoscape.view.model.VisualLexiconNode in project cytoscape-impl by cytoscape.

the class DNodeView method getParentCustomGraphicsProperty.

@SuppressWarnings({ "rawtypes", "unchecked" })
private VisualProperty<CyCustomGraphics> getParentCustomGraphicsProperty(final VisualProperty<?> vp) {
    VisualProperty<CyCustomGraphics> parent = null;
    // Use the visual property tree to retrieve its parent.
    final VisualLexiconNode lexNode = lexicon.getVisualLexiconNode(vp);
    final Collection<VisualLexiconNode> leavs = lexNode.getParent().getChildren();
    for (VisualLexiconNode vlNode : leavs) {
        if (vlNode.getVisualProperty().getRange().getType().equals(CyCustomGraphics.class)) {
            parent = (VisualProperty<CyCustomGraphics>) vlNode.getVisualProperty();
            break;
        }
    }
    if (parent == null)
        logger.error("Associated CustomGraphics VisualProperty is missing for " + vp.getDisplayName());
    return parent;
}
Also used : CyCustomGraphics(org.cytoscape.view.presentation.customgraphics.CyCustomGraphics) VisualLexiconNode(org.cytoscape.view.model.VisualLexiconNode)

Example 2 with VisualLexiconNode

use of org.cytoscape.view.model.VisualLexiconNode in project cytoscape-impl by cytoscape.

the class AbstractDViewModel method propagateLockedVisualProperty.

@SuppressWarnings({ "rawtypes", "unchecked" })
private void propagateLockedVisualProperty(final VisualProperty parent, final Collection<VisualLexiconNode> roots, final Object value) {
    final LinkedList<VisualLexiconNode> nodes = new LinkedList<>();
    nodes.addAll(roots);
    while (!nodes.isEmpty()) {
        final VisualLexiconNode node = nodes.pop();
        final VisualProperty vp = node.getVisualProperty();
        if (!isDirectlyLocked(vp)) {
            if (parent.getClass() == vp.getClass()) {
                // Caller should already have write lock to modify this
                synchronized (getDGraphView().m_lock) {
                    allLocks.put(vp, value);
                }
                applyVisualProperty(vp, value);
            }
            nodes.addAll(node.getChildren());
        }
    }
}
Also used : VisualLexiconNode(org.cytoscape.view.model.VisualLexiconNode) VisualProperty(org.cytoscape.view.model.VisualProperty) LinkedList(java.util.LinkedList)

Example 3 with VisualLexiconNode

use of org.cytoscape.view.model.VisualLexiconNode in project cytoscape-impl by cytoscape.

the class AbstractDViewModel method setLockedValue.

@Override
public <T, V extends T> void setLockedValue(final VisualProperty<? extends T> vp, final V value) {
    synchronized (getDGraphView().m_lock) {
        directLocks.put(vp, value);
        allLocks.put(vp, value);
        applyVisualProperty(vp, value);
        VisualLexiconNode node = lexicon.getVisualLexiconNode(vp);
        propagateLockedVisualProperty(vp, node.getChildren(), value);
    }
    fireViewChangedEvent(vp, value, true);
}
Also used : VisualLexiconNode(org.cytoscape.view.model.VisualLexiconNode)

Example 4 with VisualLexiconNode

use of org.cytoscape.view.model.VisualLexiconNode in project cytoscape-impl by cytoscape.

the class VisualPropertySheet method createMenuItems.

private void createMenuItems() {
    final JPopupMenu rootMenu = getVpsMenu();
    // Remove previous menu items
    menuItemMap.clear();
    final int length = rootMenu.getSubElements() != null ? rootMenu.getSubElements().length : 0;
    for (int i = 0; i < length; i++) rootMenu.remove(i);
    // Add new menu items
    final VisualLexicon lexicon = model.getVisualLexicon();
    final VisualProperty<?> rootVp = model.getRootVisualProperty();
    final VisualLexiconNode rootNode = lexicon.getVisualLexiconNode(rootVp);
    // Menu Items for showing/hiding each VP Sheet Item
    // ------------------------------------------------
    // -- Visual Properties --
    final Queue<VisualLexiconNode> queue = new PriorityQueue<>(50, new Comparator<VisualLexiconNode>() {

        @Override
        public int compare(final VisualLexiconNode n1, final VisualLexiconNode n2) {
            final Collator collator = Collator.getInstance(Locale.getDefault());
            collator.setStrength(Collator.PRIMARY);
            return collator.compare(VisualPropertySheetItemModel.createTitle(n1.getVisualProperty()), VisualPropertySheetItemModel.createTitle(n2.getVisualProperty()));
        }
    });
    queue.addAll(rootNode.getChildren());
    final Map<VisualLexiconNode, JComponent> menuMap = new HashMap<>();
    menuMap.put(rootNode, rootMenu);
    final VisualStyle style = model.getVisualStyle();
    final Set<VisualProperty<?>> disabledProps = new HashSet<>();
    // final Set<VisualPropertyDependency<?>> depSet = style.getAllVisualPropertyDependencies();
    // for (final VisualPropertyDependency<?> dep : depSet) {
    // // To do the same as in Cytoscape v2.8, we only care about these dependencies
    // if (!dep.getIdString().equals("arrowColorMatchesEdge") && !dep.getIdString().equals("nodeSizeLocked"))
    // continue; // TODO: revisit these requirements and remove this workaround.
    // In general, the user should not be able to lock the child properties of an enabled dependency.
    // if (dep.isDependencyEnabled())
    // disabledProps.addAll(dep.getVisualProperties());
    // else
    // disabledProps.add(dep.getParentVisualProperty());
    // }
    final Set<VisualLexiconNode> nextNodes = new HashSet<>();
    while (!queue.isEmpty()) {
        final VisualLexiconNode curNode = queue.poll();
        final VisualProperty<?> vp = curNode.getVisualProperty();
        if (vp.getTargetDataType() == model.getTargetDataType()) {
            final Collection<VisualLexiconNode> children = curNode.getChildren();
            nextNodes.addAll(children);
            if (PropertySheetUtil.isCompatible(vp)) {
                VisualLexiconNode parentNode = curNode.getParent();
                boolean leaf = children.isEmpty();
                final VisualPropertySheetItem<?> vpSheetItem = getItem(vp);
                final String label = vpSheetItem != null ? vpSheetItem.getModel().getTitle() : VisualPropertySheetItemModel.createTitle(vp);
                if (!leaf) {
                    // Non-leaf visual property...
                    final JMenuItem nonLeafMenu = new JMenu(label);
                    menuMap.put(curNode, nonLeafMenu);
                    menuMap.get(parentNode).add(nonLeafMenu);
                    // So this VP can also be added as a child of itself
                    parentNode = curNode;
                }
                if (vpSheetItem != null) {
                    final JCheckBoxMenuItem mi = new JCheckBoxMenuItem(label, vpSheetItem.isVisible());
                    mi.addActionListener(evt -> {
                        // Show/hide the Visual Property Sheet Item
                        setVisible(vpSheetItem, !vpSheetItem.isVisible());
                    });
                    menuMap.get(parentNode).add(mi);
                    menuItemMap.put(vpSheetItem, mi);
                    if (parentNode == curNode)
                        menuMap.get(parentNode).add(new JSeparator());
                    // Should this visual property be disabled?
                    if (disabledProps.contains(vp))
                        mi.setEnabled(false);
                }
            }
        }
        queue.addAll(nextNodes);
        nextNodes.clear();
    }
    // -- Visual Property Dependencies --
    final TreeSet<VisualPropertyDependency<?>> depTreeSet = new TreeSet<>((VisualPropertyDependency<?> d1, VisualPropertyDependency<?> d2) -> {
        final Collator collator = Collator.getInstance(Locale.getDefault());
        collator.setStrength(Collator.PRIMARY);
        return collator.compare(d1.getDisplayName(), d2.getDisplayName());
    });
    depTreeSet.addAll(style.getAllVisualPropertyDependencies());
    for (final VisualPropertyDependency<?> dep : depTreeSet) {
        final VisualPropertySheetItem<?> vpSheetItem = getItem(dep);
        if (vpSheetItem != null) {
            final JCheckBoxMenuItem mi = new JCheckBoxMenuItem(dep.getDisplayName(), vpSheetItem.isVisible());
            mi.addActionListener(evt -> {
                // Show/hide the Visual Property Sheet Item
                setVisible(vpSheetItem, !vpSheetItem.isVisible());
            });
            final VisualLexiconNode parentNode = lexicon.getVisualLexiconNode(dep.getParentVisualProperty());
            JComponent parentMenu = menuMap.get(parentNode);
            if (// just add it directly to the popup menu
            parentMenu == null)
                parentMenu = rootMenu;
            parentMenu.add(mi);
            menuItemMap.put(vpSheetItem, mi);
        }
    }
    // ------------------------------------------------
    if (menuMap.size() > 1) {
        rootMenu.add(new JSeparator());
        {
            final JMenuItem mi = new JMenuItem("Show All");
            mi.addActionListener(evt -> {
                for (Entry<VisualPropertySheetItem<?>, JCheckBoxMenuItem> entry : menuItemMap.entrySet()) setVisible(entry.getKey(), true);
            });
            rootMenu.add(mi);
        }
        {
            final JMenuItem mi = new JMenuItem("Hide All");
            mi.addActionListener(evt -> {
                for (Entry<VisualPropertySheetItem<?>, JCheckBoxMenuItem> entry : menuItemMap.entrySet()) setVisible(entry.getKey(), false);
            });
            rootMenu.add(mi);
        }
        getVpsBtn().setEnabled(true);
    } else {
        getVpsBtn().setEnabled(false);
    }
}
Also used : SortedSet(java.util.SortedSet) PriorityQueue(java.util.PriorityQueue) VisualPropertyDependency(org.cytoscape.view.vizmap.VisualPropertyDependency) JCheckBoxMenuItem(javax.swing.JCheckBoxMenuItem) IconManager(org.cytoscape.util.swing.IconManager) Locale(java.util.Locale) CyNetwork(org.cytoscape.model.CyNetwork) Map(java.util.Map) MouseAdapter(java.awt.event.MouseAdapter) Font(java.awt.Font) Collection(java.util.Collection) Set(java.util.Set) JMenu(javax.swing.JMenu) VisualLexicon(org.cytoscape.view.model.VisualLexicon) NavigableSet(java.util.NavigableSet) BorderFactory(javax.swing.BorderFactory) GridBagConstraints(java.awt.GridBagConstraints) ComponentEvent(java.awt.event.ComponentEvent) Box(javax.swing.Box) Dimension(java.awt.Dimension) PopupMenuEvent(javax.swing.event.PopupMenuEvent) LookAndFeelUtil(org.cytoscape.util.swing.LookAndFeelUtil) JSeparator(javax.swing.JSeparator) Entry(java.util.Map.Entry) Queue(java.util.Queue) GridBagLayout(java.awt.GridBagLayout) JPanel(javax.swing.JPanel) VisualStyle(org.cytoscape.view.vizmap.VisualStyle) HashMap(java.util.HashMap) TreeSet(java.util.TreeSet) HashSet(java.util.HashSet) SwingUtilities(javax.swing.SwingUtilities) VisualLexiconNode(org.cytoscape.view.model.VisualLexiconNode) JMenuItem(javax.swing.JMenuItem) Collator(java.text.Collator) BoxLayout(javax.swing.BoxLayout) VisualProperty(org.cytoscape.view.model.VisualProperty) JComponent(javax.swing.JComponent) LookAndFeelUtil.isAquaLAF(org.cytoscape.util.swing.LookAndFeelUtil.isAquaLAF) JButton(javax.swing.JButton) Iterator(java.util.Iterator) JPopupMenu(javax.swing.JPopupMenu) PopupMenuListener(javax.swing.event.PopupMenuListener) MouseEvent(java.awt.event.MouseEvent) ComponentAdapter(java.awt.event.ComponentAdapter) JScrollPane(javax.swing.JScrollPane) JLabel(javax.swing.JLabel) ServicesUtil(org.cytoscape.view.vizmap.gui.internal.util.ServicesUtil) GroupLayout(javax.swing.GroupLayout) PropertySheetUtil(org.cytoscape.view.vizmap.gui.util.PropertySheetUtil) Comparator(java.util.Comparator) Collections(java.util.Collections) VisualLexicon(org.cytoscape.view.model.VisualLexicon) HashMap(java.util.HashMap) JSeparator(javax.swing.JSeparator) Collator(java.text.Collator) Entry(java.util.Map.Entry) TreeSet(java.util.TreeSet) VisualStyle(org.cytoscape.view.vizmap.VisualStyle) JMenuItem(javax.swing.JMenuItem) HashSet(java.util.HashSet) VisualLexiconNode(org.cytoscape.view.model.VisualLexiconNode) JComponent(javax.swing.JComponent) PriorityQueue(java.util.PriorityQueue) JPopupMenu(javax.swing.JPopupMenu) JCheckBoxMenuItem(javax.swing.JCheckBoxMenuItem) VisualPropertyDependency(org.cytoscape.view.vizmap.VisualPropertyDependency) VisualProperty(org.cytoscape.view.model.VisualProperty) JMenu(javax.swing.JMenu)

Example 5 with VisualLexiconNode

use of org.cytoscape.view.model.VisualLexiconNode in project cytoscape-impl by cytoscape.

the class AbstractApplyHandler method apply.

@Override
public void apply(final CyRow row, final View<T> view) {
    if (updateDependencyMaps)
        updateDependencyMaps();
    // Clear visual properties first
    view.clearVisualProperties();
    // Get current Visual Lexicon
    final CyApplicationManager appMgr = serviceRegistrar.getService(CyApplicationManager.class);
    final VisualLexicon lexicon = appMgr.getCurrentNetworkViewRenderer().getRenderingEngineFactory(NetworkViewRenderer.DEFAULT_CONTEXT).getVisualLexicon();
    final LinkedList<VisualLexiconNode> descendants = new LinkedList<VisualLexiconNode>();
    descendants.addAll(lexicon.getVisualLexiconNode(rootVisualProperty).getChildren());
    while (!descendants.isEmpty()) {
        final VisualLexiconNode node = descendants.pop();
        final VisualProperty<?> vp = node.getVisualProperty();
        if (vp.getTargetDataType() != targetDataType)
            // Because NETWORK has node/edge properties as descendants as well
            continue;
        final VisualMappingFunction<?, ?> mapping = style.getVisualMappingFunction(vp);
        final Object value = mapping != null ? mapping.getMappedValue(row) : null;
        if (value == null) {
            // Apply the default value...
            applyDefaultValue(view, vp, lexicon);
        } else {
            // Apply the mapped value...
            applyMappedValue(view, vp, value);
        }
        descendants.addAll(node.getChildren());
    }
}
Also used : CyApplicationManager(org.cytoscape.application.CyApplicationManager) BasicVisualLexicon(org.cytoscape.view.presentation.property.BasicVisualLexicon) VisualLexicon(org.cytoscape.view.model.VisualLexicon) VisualLexiconNode(org.cytoscape.view.model.VisualLexiconNode) LinkedList(java.util.LinkedList)

Aggregations

VisualLexiconNode (org.cytoscape.view.model.VisualLexiconNode)12 VisualProperty (org.cytoscape.view.model.VisualProperty)6 HashSet (java.util.HashSet)4 LinkedList (java.util.LinkedList)3 VisualLexicon (org.cytoscape.view.model.VisualLexicon)3 Map (java.util.Map)2 Dimension (java.awt.Dimension)1 Font (java.awt.Font)1 GridBagConstraints (java.awt.GridBagConstraints)1 GridBagLayout (java.awt.GridBagLayout)1 ComponentAdapter (java.awt.event.ComponentAdapter)1 ComponentEvent (java.awt.event.ComponentEvent)1 MouseAdapter (java.awt.event.MouseAdapter)1 MouseEvent (java.awt.event.MouseEvent)1 Collator (java.text.Collator)1 ArrayDeque (java.util.ArrayDeque)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 Collections (java.util.Collections)1 Comparator (java.util.Comparator)1