use of org.cytoscape.view.vizmap.VisualStyle in project cytoscape-impl by cytoscape.
the class FitLabelMappingGenerator method generateMap.
@Override
public <T> Map<T, V> generateMap(final Set<T> tableValues) {
// Generate map for the current network view.
final CyApplicationManager appMgr = servicesUtil.get(CyApplicationManager.class);
final CyNetworkView networkView = appMgr.getCurrentNetworkView();
// If current view is not available, simply return empty map.
if (networkView == null)
return Collections.emptyMap();
// If given set is empty, return empty map.
if (tableValues == null || tableValues.isEmpty())
return Collections.emptyMap();
// This only works with NAME column.
final T testName = tableValues.iterator().next();
if (testName instanceof String == false)
throw new IllegalArgumentException("This generator only works with 'name' column.");
final CyNetwork network = networkView.getModel();
final CyTable nodeTable = networkView.getModel().getDefaultNodeTable();
final VisualMappingManager vmMgr = servicesUtil.get(VisualMappingManager.class);
final VisualStyle style = vmMgr.getCurrentVisualStyle();
// Check label size mapping exists or not
final VisualMappingFunction<?, Integer> fontSizeMapping = style.getVisualMappingFunction(BasicVisualLexicon.NODE_LABEL_FONT_SIZE);
// Use default label width for checking. TODO: should we use mapping?
final Double maxLabelWidth = style.getDefaultValue(BasicVisualLexicon.NODE_LABEL_WIDTH);
final Map<T, V> valueMap = new HashMap<T, V>();
for (final T attrVal : tableValues) {
final Collection<CyRow> rows = nodeTable.getMatchingRows(CyNetwork.NAME, attrVal);
CyRow row = null;
if (rows.isEmpty() == false)
row = rows.iterator().next();
else
continue;
final Long suid = row.get(CyIdentifiable.SUID, Long.class);
final View<CyNode> nodeView = networkView.getNodeView(network.getNode(suid));
if (nodeView == null)
continue;
final String labelText = nodeView.getVisualProperty(BasicVisualLexicon.NODE_LABEL);
final int textLen = labelText.length();
final int fontSize;
if (fontSizeMapping == null)
fontSize = style.getDefaultValue(BasicVisualLexicon.NODE_LABEL_FONT_SIZE);
else
fontSize = nodeView.getVisualProperty(BasicVisualLexicon.NODE_LABEL_FONT_SIZE);
final Double width = fontSize * textLen * 0.7;
if (maxLabelWidth > width)
valueMap.put(attrVal, (V) width);
else
valueMap.put(attrVal, (V) maxLabelWidth);
}
return valueMap;
}
use of org.cytoscape.view.vizmap.VisualStyle 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);
}
}
use of org.cytoscape.view.vizmap.VisualStyle in project cytoscape-impl by cytoscape.
the class VizMapperProxy method handleEvent.
// --- Cytoscape EVENTS ---
@Override
public void handleEvent(final VisualStyleAddedEvent e) {
synchronized (lock) {
if (!cytoscapeStarted || ignoreStyleEvents)
return;
}
final VisualStyle vs = e.getVisualStyleAdded();
boolean changed = false;
synchronized (lock) {
changed = visualStyles.add(vs);
}
if (changed && !loadingSession)
sendNotification(VISUAL_STYLE_ADDED, vs);
}
use of org.cytoscape.view.vizmap.VisualStyle in project cytoscape-impl by cytoscape.
the class CreateLegendTask method run.
@Override
public void run(final TaskMonitor monitor) throws Exception {
// Should be executed in EDT!
invokeOnEDT(() -> {
final VisualMappingManager vmMgr = servicesUtil.get(VisualMappingManager.class);
final VisualStyle selectedStyle = vmMgr.getCurrentVisualStyle();
final LegendDialog ld = new LegendDialog(selectedStyle, servicesUtil);
ld.showDialog(null);
});
}
use of org.cytoscape.view.vizmap.VisualStyle in project cytoscape-impl by cytoscape.
the class GenerateNetworkViewsTask method createNetworkView.
private void createNetworkView(final CyNetwork network) {
final VisualMappingManager vmManager = serviceRegistrar.getService(VisualMappingManager.class);
// get the current style before registering the views!
final VisualStyle curStyle = vmManager.getCurrentVisualStyle();
final CyNetworkView view = viewReader.buildCyNetworkView(network);
final VisualStyle viewStyle = vmManager.getVisualStyle(view);
serviceRegistrar.getService(CyNetworkViewManager.class).addNetworkView(view, false);
// This allows the CyNetworkReader implementation to set the desired style itself.
if (viewStyle != null && !viewStyle.equals(vmManager.getDefaultVisualStyle())) {
viewStyle.apply(view);
} else {
vmManager.setVisualStyle(curStyle, view);
curStyle.apply(view);
}
if (!view.isSet(BasicVisualLexicon.NETWORK_CENTER_X_LOCATION) && !view.isSet(BasicVisualLexicon.NETWORK_CENTER_Y_LOCATION) && !view.isSet(BasicVisualLexicon.NETWORK_CENTER_Z_LOCATION))
view.fitContent();
results.add(view);
}
Aggregations