MGG Progress Documentation
public class MGGCytoPanel extends JPanel implements CytoPanelComponent2, SetCurrentNetworkListener, SelectedNodesAndEdgesListener { final MGGManager manager; // Define new colors public static final Color[] MY_COLORS = new Color[] { Color.BLACK, Color.RED, Color.BLUE, Color.YELLOW }; // Create a Font object private static final Font myFont = new Font("Arial", Font.PLAIN, 16); private JTabbedPane tabs; //private StringNodePanel nodePanel; private MGGEdgePanel edgePanel; private boolean registered = false; private static final Icon icon = new TextIcon(new String[] { "MGG" }, new Font[] { myFont }, MY_COLORS, 16, 16); public MGGCytoPanel(final MGGManager manager) { this.manager = manager; this.setLayout(new BorderLayout()); tabs = new JTabbedPane(JTabbedPane.BOTTOM); //nodePanel = new StringNodePanel(manager); //tabs.add("Nodes", nodePanel); edgePanel = new MGGEdgePanel(manager); tabs.add("Edges", edgePanel); this.add(tabs, BorderLayout.CENTER); manager.setCytoPanel(this); manager.registerService(this, SetCurrentNetworkListener.class, new Properties()); manager.registerService(this, SelectedNodesAndEdgesListener.class, new Properties()); registered = true; revalidate(); repaint(); } public void showCytoPanel() { // System.out.println("show panel"); CySwingApplication swingApplication = manager.getService(CySwingApplication.class); CytoPanel cytoPanel = swingApplication.getCytoPanel(CytoPanelName.EAST); if (!registered) { manager.registerService(this, CytoPanelComponent.class, new Properties()); registered = true; } if (cytoPanel.getState() == CytoPanelState.HIDE) cytoPanel.setState(CytoPanelState.DOCK); // Tell tabs //nodePanel.networkChanged(manager.getCurrentNetwork()); edgePanel.networkChanged(manager.getCurrentNetwork()); } public void reinitCytoPanel() { CySwingApplication swingApplication = manager.getService(CySwingApplication.class); CytoPanel cytoPanel = swingApplication.getCytoPanel(CytoPanelName.EAST); if (!registered) { manager.registerService(this, CytoPanelComponent.class, new Properties()); registered = true; } if (cytoPanel.getState() == CytoPanelState.HIDE) cytoPanel.setState(CytoPanelState.DOCK); // Tell tabs & remove/undo filters CyNetwork current = manager.getCurrentNetwork(); //nodePanel.removeFilters(current); //nodePanel.undoFilters(); //nodePanel.networkChanged(current); edgePanel.removeFilters(current); edgePanel.undoFilters(); edgePanel.networkChanged(current); } public void hideCytoPanel() { manager.unregisterService(this, CytoPanelComponent.class); registered = false; } public String getIdentifier() { return "be.kuleuven.mgG.internal.MGG"; } public Component getComponent() { // TODO Auto-generated method stub return this; } public CytoPanelName getCytoPanelName() { // TODO Auto-generated method stub return CytoPanelName.EAST; } public Icon getIcon() { return icon; } public String getTitle() { return "MGG"; } public void updateControls() { //nodePanel.updateControls(); edgePanel.updateScore(); //edgePanel.updateSubPanel(); } @Override public void handleEvent(SelectedNodesAndEdgesEvent event) { if (!registered) return; // Pass selected nodes to nodeTab //nodePanel.selectedNodes(event.getSelectedNodes()); // Pass selected edges to edgeTab edgePanel.selectedEdges(event.getSelectedEdges()); } @Override public void handleEvent(SetCurrentNetworkEvent event) { CyNetwork network = event.getNetwork(); if (network == null) { hideCytoPanel(); return; } // Check for the existence of the "flashweave-score" attribute on edges boolean hasFlashweaveScore = network.getRow(network).get("flashweave-score",Double.class) != null; // Based on the above checks, decide whether to show the CytoPanel if (hasFlashweaveScore) { if (!registered) { showCytoPanel(); } // Inform the tabs // nodePanel.networkChanged(network); edgePanel.networkChanged(network); } else { hideCytoPanel(); } }}
public abstract class AbstractMggPanel extends JPanel { protected final MGGManager manager; protected final OpenBrowser openBrowser; protected final Font iconFont; protected final Font labelFont; protected final Font textFont; protected CyNetwork currentNetwork; protected Map<CyNetwork, Map<String,Map<String, Double>>> filters; public AbstractMggPanel(final MGGManager manager) { this.manager = manager; this.openBrowser = manager.getService(OpenBrowser.class); this.currentNetwork = manager.getCurrentNetwork(); IconManager iconManager = manager.getService(IconManager.class); iconFont = iconManager.getIconFont(17.0f); labelFont = new Font("SansSerif", Font.BOLD, 10); textFont = new Font("SansSerif", Font.PLAIN, 10); filters = new HashMap<>(); filters.put(currentNetwork, new HashMap<>()); } abstract void doFilter(String type); abstract void undoFilters(); abstract double initFilter(String type, String text); protected JComponent createFilterSlider(String type, String text, CyNetwork network, boolean labels, double max) { double value = 0.0; if (filters.containsKey(network) && filters.get(network).containsKey(type) && filters.get(network).get(type).containsKey(text)) { value = filters.get(network).get(type).get(text); // System.out.println("value = "+value); } else { value = initFilter(type, text); } Box box = Box.createHorizontalBox(); if (labels) { JLabel label = new JLabel(text); label.setFont(labelFont); label.setPreferredSize(new Dimension(100,20)); box.add(Box.createRigidArea(new Dimension(10,0))); box.add(label); box.add(Box.createHorizontalGlue()); } JSlider slider; slider = new JSlider(0,(int)max,(int)(value*100)); slider.setToolTipText("Filter ranges between 0.0 and " + max/100); slider.setPreferredSize(new Dimension(150,20)); box.add(slider); // box.add(Box.createHorizontalGlue()); JTextField textField; textField = new JTextField(String.format("%.2f",value),4); textField.setPreferredSize(new Dimension(30,20)); textField.setMaximumSize(new Dimension(30,20)); textField.setFont(textFont); box.add(textField); // Hook it up addChangeListeners(type, text, slider, textField, max); box.setAlignmentX(Component.LEFT_ALIGNMENT); return box; } protected void addChangeListeners(String type, String label, JSlider slider, JTextField textField, double max) { slider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { JSlider sl = (JSlider)e.getSource(); int value = sl.getValue(); double v = ((double)value)/100.0; textField.setText(String.format("%.2f",v)); addFilter(type, label, v); doFilter(type); } }); textField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JTextField field = (JTextField)e.getSource(); String text = field.getText(); slider.setValue((int)(Double.parseDouble(text)*100.0)); } }); } protected void addFilter(String type, String label, double value) { Map<String,Double> filter = filters.get(currentNetwork).get(type); filter.put(label, value); if (value == 0) filter.remove(label); } protected void removeFilters(CyNetwork network) { if (network != null && filters.containsKey(network)) filters.remove(network); } }