Search in sources :

Example 11 with SpeciesPatternLargeShape

use of cbit.vcell.graph.SpeciesPatternLargeShape in project vcell by virtualcell.

the class ViewObservablesMapPanel method updateShapeSpecies.

public void updateShapeSpecies(int selectedRow) {
    GeneratedSpeciesTableRow speciesTableRow = speciesTableModel.getValueAt(selectedRow);
    String inputString = speciesTableRow.getExpression();
    // System.out.println(selectedRows[0] + ": " + inputString);
    Model tempModel = null;
    try {
        tempModel = new Model("MyTempModel");
        tempModel.addFeature("c0");
    } catch (ModelException | PropertyVetoException e1) {
        e1.printStackTrace();
    }
    if (owner != null && owner.getSimulationContext() != null) {
        List<MolecularType> mtList = owner.getSimulationContext().getModel().getRbmModelContainer().getMolecularTypeList();
        try {
            tempModel.getRbmModelContainer().setMolecularTypeList(mtList);
        } catch (PropertyVetoException e1) {
            e1.printStackTrace();
            throw new RuntimeException("Unexpected exception setting " + MolecularType.typeName + " list: " + e1.getMessage(), e1);
        }
    } else {
        System.out.println("something is wrong, we just do nothing rather than crash");
        return;
    }
    try {
        String strStructure = null;
        if (inputString.contains(RbmUtils.SiteStruct)) {
            // we are in the mode where we emulate compartments by adding the compartment name as a fake site
            Pair<List<String>, String> p = RbmUtils.extractCompartment(inputString);
            // we'll just assume there's only one, may want to throw exception if more
            strStructure = p.one.get(0);
            inputString = p.two;
        } else {
            // should be the normal @comp:expression format - if it's not it will return null
            strStructure = RbmUtils.parseCompartment(inputString, tempModel);
        }
        Structure structure;
        if (strStructure != null) {
            if (tempModel.getStructure(strStructure) == null) {
                if (owner.getSimulationContext().getModel().getStructure(strStructure).getTypeName().equals(Structure.TYPE_NAME_MEMBRANE)) {
                    tempModel.addMembrane(strStructure);
                } else {
                    tempModel.addFeature(strStructure);
                }
            }
            structure = tempModel.getStructure(strStructure);
        } else {
            structure = tempModel.getStructure(0);
        }
        SpeciesPattern sp = (SpeciesPattern) RbmUtils.parseSpeciesPattern(inputString, tempModel);
        sp.resolveBonds();
        SpeciesContext sc = new SpeciesContext(new Species("a", ""), structure, sp);
        spls = new SpeciesPatternLargeShape(20, 20, -1, sp, shapePanelSpecies, sc, issueManager);
    } catch (ParseException | PropertyVetoException | ModelException e1) {
        e1.printStackTrace();
        // error (red circle)
        spls = new SpeciesPatternLargeShape(20, 20, -1, shapePanelSpecies, true, issueManager);
        shapePanelSpecies.repaint();
    }
    int xOffset = spls.getRightEnd() + 45;
    Dimension preferredSize = new Dimension(xOffset + 90, 50);
    shapePanelSpecies.setPreferredSize(preferredSize);
    shapePanelSpecies.repaint();
}
Also used : ModelException(cbit.vcell.model.ModelException) SpeciesContext(cbit.vcell.model.SpeciesContext) Dimension(java.awt.Dimension) SpeciesPatternLargeShape(cbit.vcell.graph.SpeciesPatternLargeShape) SpeciesPattern(org.vcell.model.rbm.SpeciesPattern) Point(java.awt.Point) PropertyVetoException(java.beans.PropertyVetoException) MolecularType(org.vcell.model.rbm.MolecularType) Model(cbit.vcell.model.Model) ObservableTableModel(cbit.vcell.client.desktop.biomodel.ObservableTableModel) VCellSortTableModel(cbit.vcell.client.desktop.biomodel.VCellSortTableModel) List(java.util.List) ArrayList(java.util.ArrayList) ParseException(org.vcell.model.bngl.ParseException) Structure(cbit.vcell.model.Structure) Species(cbit.vcell.model.Species) BNGSpecies(cbit.vcell.bionetgen.BNGSpecies)

Example 12 with SpeciesPatternLargeShape

use of cbit.vcell.graph.SpeciesPatternLargeShape in project vcell by virtualcell.

the class ReactionRuleEditorPropertiesPanel method initialize.

private void initialize() {
    try {
        shapePanel = new RulesShapePanel() {

            @Override
            public void paintComponent(Graphics g) {
                super.paintComponent(g);
                reactantShape.paintSelf(g);
                productShape.paintSelf(g);
            }
        };
        shapePanel.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                if (getViewSingleRowButton().isSelected()) {
                    return;
                }
                if (e.getButton() == 1) {
                    // left click selects the object (we highlight it)
                    Point whereClicked = e.getPoint();
                    PointLocationInShapeContext locationContext = new PointLocationInShapeContext(whereClicked);
                    reactantShape.setPointLocationInShapeContext(locationContext);
                    productShape.setPointLocationInShapeContext(locationContext);
                    manageMouseActivity(locationContext);
                } else if (e.getButton() == 3) {
                    // right click invokes popup menu (only if the object is highlighted)
                    Point whereClicked = e.getPoint();
                    PointLocationInShapeContext locationContext = new PointLocationInShapeContext(whereClicked);
                    reactantShape.setPointLocationInShapeContext(locationContext);
                    productShape.setPointLocationInShapeContext(locationContext);
                    manageMouseActivity(locationContext);
                    if (locationContext.getDeepestShape() != null && !locationContext.getDeepestShape().isHighlighted()) {
                    // TODO: (maybe) add code here to highlight the shape if it's not highlighted already but don't show the menu
                    // return;
                    }
                    showPopupMenu(e, locationContext);
                }
            }

            private void manageMouseActivity(PointLocationInShapeContext locationContext) {
                Graphics g = shapePanel.getGraphics();
                reactantShape.turnHighlightOffRecursive(g);
                productShape.turnHighlightOffRecursive(g);
                boolean found = false;
                if (reactantShape.contains(locationContext)) {
                    found = true;
                }
                if (!found) {
                    if (productShape.contains(locationContext)) {
                        // we just need to initialize the location context with the proper shapes under the cursor by calling "contains"
                        ;
                    }
                }
                locationContext.highlightDeepestShape();
                // if(locationContext.getDeepestShape() == null) {
                // // nothing selected means all the reactant bar or all the product bar is selected
                int xExtent = SpeciesPatternLargeShape.calculateXExtent(shapePanel);
                Rectangle2D reactantRectangle = new Rectangle2D.Double(xOffsetInitial - xExtent, yOffsetReactantInitial - 3, 3000, 80 - 2 + GraphConstants.ReactionRuleDisplay_ReservedSpaceForNameOnYAxis);
                Rectangle2D productRectangle = new Rectangle2D.Double(xOffsetInitial - xExtent, yOffsetProductInitial - 3, 3000, 80 - 2 + GraphConstants.ReactionRuleDisplay_ReservedSpaceForNameOnYAxis);
                if (locationContext.isInside(reactantRectangle)) {
                    reactantShape.paintSelf(g, true);
                } else if (locationContext.isInside(productRectangle)) {
                    productShape.paintSelf(g, true);
                // } else {
                // 
                // }
                // } else {
                // locationContext.paintDeepestShape(g);
                }
            }
        });
        shapePanel.addMouseMotionListener(new MouseMotionAdapter() {

            public void mouseMoved(MouseEvent e) {
                if (getViewSingleRowButton().isSelected()) {
                    shapePanel.setToolTipText("Single Row is view-only. To edit, unselect the 'Single Row Viewer' check box.");
                    return;
                }
                Point overWhat = e.getPoint();
                PointLocationInShapeContext locationContext = new PointLocationInShapeContext(overWhat);
                boolean inReactant = reactantShape.contains(locationContext);
                boolean inProduct = productShape.contains(locationContext);
                HighlightableShapeInterface hsi = locationContext.getDeepestShape();
                if (hsi == null) {
                    shapePanel.setToolTipText(null);
                } else {
                    shapePanel.setToolTipText("Right click for " + hsi.getDisplayType() + " menus");
                }
                List<SpeciesPatternLargeShape> spsList = null;
                if (inReactant) {
                    spsList = reactantShape.getSpeciesPatternShapeList();
                } else if (inProduct) {
                    spsList = productShape.getSpeciesPatternShapeList();
                }
                if (spsList != null) {
                    for (SpeciesPatternLargeShape sps : spsList) {
                        for (MolecularTypeLargeShape mtls : sps.getMolecularTypeLargeShapes()) {
                            Rectangle r = mtls.getAnchorHotspot();
                            if (r != null && r.contains(overWhat)) {
                                mtls.getMolecularType();
                                shapePanel.setToolTipText(mtls.getAnchorsHTML());
                                break;
                            }
                        }
                    }
                }
            }
        });
        shapePanel.setLayout(new GridBagLayout());
        shapePanel.setBackground(Color.white);
        shapePanel.zoomSmaller();
        shapePanel.zoomSmaller();
        getZoomSmallerButton().setEnabled(true);
        getZoomLargerButton().setEnabled(true);
        scrollPane = new JScrollPane(shapePanel);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        isReversibleCheckBox = new JCheckBox("Reversible");
        isReversibleCheckBox.setHorizontalTextPosition(SwingConstants.LEFT);
        isReversibleCheckBox.addActionListener(eventHandler);
        isReversibleCheckBox.setEnabled(true);
        JPanel optionsPanel = new JPanel();
        optionsPanel.setPreferredSize(new Dimension(156, 200));
        optionsPanel.setLayout(new GridBagLayout());
        int gridy = 0;
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = gridy;
        gbc.insets = new Insets(6, 1, 2, 2);
        gbc.anchor = GridBagConstraints.WEST;
        optionsPanel.add(isReversibleCheckBox, gbc);
        gbc = new GridBagConstraints();
        gbc.gridx = 1;
        gbc.gridy = gridy;
        gbc.insets = new Insets(0, 0, 0, 0);
        // empty cell to take all available horizontal space and push the next 2 buttons to the right
        gbc.weightx = 1;
        gbc.anchor = GridBagConstraints.WEST;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        optionsPanel.add(new JLabel(""), gbc);
        gbc = new GridBagConstraints();
        gbc.gridx = 2;
        gbc.gridy = gridy;
        gbc.insets = new Insets(6, 2, 2, 2);
        gbc.anchor = GridBagConstraints.EAST;
        optionsPanel.add(getZoomLargerButton(), gbc);
        gbc = new GridBagConstraints();
        gbc.gridx = 3;
        gbc.gridy = gridy;
        gbc.insets = new Insets(6, 2, 2, 4);
        gbc.anchor = GridBagConstraints.EAST;
        optionsPanel.add(getZoomSmallerButton(), gbc);
        gridy++;
        gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = gridy;
        gbc.gridwidth = 4;
        // top, left bottom, right
        gbc.insets = new Insets(4, 4, 2, 4);
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.anchor = GridBagConstraints.NORTHWEST;
        optionsPanel.add(getAddReactantButton(), gbc);
        gridy++;
        gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = gridy;
        gbc.gridwidth = 4;
        gbc.insets = new Insets(2, 4, 4, 4);
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.anchor = GridBagConstraints.NORTHWEST;
        optionsPanel.add(getAddProductButton(), gbc);
        gridy++;
        gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = gridy;
        gbc.gridwidth = 4;
        gbc.weightx = 1;
        // fake cell used for filling all the vertical empty space
        gbc.weighty = 1;
        gbc.anchor = GridBagConstraints.WEST;
        gbc.insets = new Insets(4, 4, 4, 10);
        optionsPanel.add(new JLabel(""), gbc);
        // -----------------------------------------------------------
        gridy++;
        gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = gridy;
        gbc.gridwidth = 4;
        gbc.insets = new Insets(2, 4, 0, 4);
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.anchor = GridBagConstraints.SOUTHWEST;
        optionsPanel.add(getViewSingleRowButton(), gbc);
        gridy++;
        gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = gridy;
        gbc.gridwidth = 4;
        gbc.insets = new Insets(0, 4, 4, 4);
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.anchor = GridBagConstraints.SOUTHWEST;
        optionsPanel.add(getShowMoleculeColorButton(), gbc);
        gridy++;
        gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = gridy;
        gbc.gridwidth = 4;
        gbc.insets = new Insets(0, 4, 4, 4);
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.anchor = GridBagConstraints.SOUTHWEST;
        optionsPanel.add(getShowNonTrivialButton(), gbc);
        gridy++;
        gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = gridy;
        gbc.gridwidth = 3;
        gbc.insets = new Insets(0, 4, 4, 4);
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.anchor = GridBagConstraints.SOUTHWEST;
        optionsPanel.add(getShowDifferencesButton(), gbc);
        // set initial buttons' state
        getViewSingleRowButton().setSelected(false);
        getShowMoleculeColorButton().setSelected(true);
        getShowNonTrivialButton().setSelected(true);
        getShowDifferencesButton().setSelected(false);
        shapePanel.setViewSingleRow(getViewSingleRowButton().isSelected());
        shapePanel.setShowMoleculeColor(getShowMoleculeColorButton().isSelected());
        shapePanel.setShowNonTrivialOnly(getShowNonTrivialButton().isSelected());
        shapePanel.setShowDifferencesOnly(getShowDifferencesButton().isSelected());
        // ----------------------------------------------------------
        containerOfScrollPanel = new JPanel();
        containerOfScrollPanel.setLayout(new BorderLayout());
        containerOfScrollPanel.add(optionsPanel, BorderLayout.WEST);
        containerOfScrollPanel.add(scrollPane, BorderLayout.CENTER);
        reactantTree = new BioModelNodeEditableTree();
        reactantTreeModel = new ReactionRulePropertiesTreeModel(reactantTree, ReactionRuleParticipantType.Reactant);
        reactantTree.setModel(reactantTreeModel);
        productTree = new BioModelNodeEditableTree();
        productTreeModel = new ReactionRulePropertiesTreeModel(productTree, ReactionRuleParticipantType.Product);
        productTree.setModel(productTreeModel);
        setLayout(new BorderLayout());
        add(containerOfScrollPanel, BorderLayout.CENTER);
        setBackground(Color.white);
    } catch (java.lang.Throwable ivjExc) {
        handleException(ivjExc);
    }
}
Also used : JPanel(javax.swing.JPanel) GridBagConstraints(java.awt.GridBagConstraints) Insets(java.awt.Insets) GridBagLayout(java.awt.GridBagLayout) Rectangle(java.awt.Rectangle) SpeciesPatternLargeShape(cbit.vcell.graph.SpeciesPatternLargeShape) RulesShapePanel(cbit.vcell.graph.gui.RulesShapePanel) MolecularTypeLargeShape(cbit.vcell.graph.MolecularTypeLargeShape) BorderLayout(java.awt.BorderLayout) List(java.util.List) ArrayList(java.util.ArrayList) JScrollPane(javax.swing.JScrollPane) MouseEvent(java.awt.event.MouseEvent) MouseAdapter(java.awt.event.MouseAdapter) Rectangle2D(java.awt.geom.Rectangle2D) HighlightableShapeInterface(cbit.vcell.graph.HighlightableShapeInterface) JLabel(javax.swing.JLabel) Point(java.awt.Point) Dimension(java.awt.Dimension) PointLocationInShapeContext(cbit.vcell.graph.PointLocationInShapeContext) Point(java.awt.Point) Graphics(java.awt.Graphics) JCheckBox(javax.swing.JCheckBox) MouseMotionAdapter(java.awt.event.MouseMotionAdapter)

Example 13 with SpeciesPatternLargeShape

use of cbit.vcell.graph.SpeciesPatternLargeShape in project vcell by virtualcell.

the class ReactionRuleEditorPropertiesPanel method showPopupMenu.

private void showPopupMenu(MouseEvent e, PointLocationInShapeContext locationContext) {
    if (popupFromShapeMenu == null) {
        popupFromShapeMenu = new JPopupMenu();
    }
    if (popupFromShapeMenu.isShowing()) {
        return;
    }
    popupFromShapeMenu.removeAll();
    Point mousePoint = e.getPoint();
    final Object deepestShape = locationContext.getDeepestShape();
    final RbmObject selectedObject;
    if (deepestShape == null) {
        selectedObject = null;
        // when cursor is outside any species pattern we offer to add a new one
        System.out.println("outside");
    // popupFromShapeMenu.add(getAddSpeciesPatternFromShapeMenuItem());
    } else if (deepestShape instanceof ComponentStateLargeShape) {
        System.out.println("inside state");
        if (((ComponentStateLargeShape) deepestShape).isHighlighted()) {
            selectedObject = ((ComponentStateLargeShape) deepestShape).getComponentStatePattern();
        } else {
            return;
        }
    } else if (deepestShape instanceof MolecularComponentLargeShape) {
        System.out.println("inside component");
        if (((MolecularComponentLargeShape) deepestShape).isHighlighted()) {
            selectedObject = ((MolecularComponentLargeShape) deepestShape).getMolecularComponentPattern();
        } else {
            return;
        }
    } else if (deepestShape instanceof MolecularTypeLargeShape) {
        System.out.println("inside molecule");
        if (((MolecularTypeLargeShape) deepestShape).isHighlighted()) {
            selectedObject = ((MolecularTypeLargeShape) deepestShape).getMolecularTypePattern();
        } else {
            return;
        }
    } else if (deepestShape instanceof SpeciesPatternLargeShape) {
        System.out.println("inside species pattern");
        if (((SpeciesPatternLargeShape) deepestShape).isHighlighted()) {
            selectedObject = ((SpeciesPatternLargeShape) deepestShape).getSpeciesPattern();
        } else {
            return;
        }
    } else if (deepestShape instanceof ReactionRulePatternLargeShape) {
        System.out.println("inside reactant line or products line");
        if (((ReactionRulePatternLargeShape) deepestShape).isHighlighted()) {
            selectedObject = ((ReactionRulePatternLargeShape) deepestShape).getReactionRule();
        } else {
            return;
        }
    } else {
        selectedObject = null;
        System.out.println("inside something else?");
        return;
    }
    boolean bReactantsZone = false;
    int xExtent = SpeciesPatternLargeShape.calculateXExtent(shapePanel);
    Rectangle2D reactantRectangle = new Rectangle2D.Double(xOffsetInitial - xExtent, yOffsetReactantInitial - 3, 3000, 80 - 2 + GraphConstants.ReactionRuleDisplay_ReservedSpaceForNameOnYAxis);
    Rectangle2D productRectangle = new Rectangle2D.Double(xOffsetInitial - xExtent, yOffsetProductInitial - 3, 3000, 80 - 2 + GraphConstants.ReactionRuleDisplay_ReservedSpaceForNameOnYAxis);
    if (locationContext.isInside(reactantRectangle)) {
        // clicked inside the reactant rectangle (above yOffsetProductInitial)
        bReactantsZone = true;
    } else if (locationContext.isInside(productRectangle)) {
        // clicked inside the product rectangle (below yOffsetProductInitial)
        bReactantsZone = false;
    } else {
        return;
    }
    // -------------------------------- reactant zone --------------------------------------------------------
    if (bReactantsZone) {
        if (selectedObject == null) {
            return;
        } else if (selectedObject instanceof ReactionRule) {
            // add reactant pattern
            JMenuItem addMenuItem = new JMenuItem("Add Reactant");
            addMenuItem.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    reactionRule.addReactant(new ReactantPattern(new SpeciesPattern(), reactionRule.getStructure()));
                    shapePanel.repaint();
                }
            });
            popupFromShapeMenu.add(addMenuItem);
        } else if (selectedObject instanceof SpeciesPattern) {
            // delete (pattern) / specify molecule
            final SpeciesPattern sp = (SpeciesPattern) selectedObject;
            JMenuItem deleteMenuItem = new JMenuItem("Delete");
            deleteMenuItem.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    for (ReactantPattern rp : reactionRule.getReactantPatterns()) {
                        if (rp.getSpeciesPattern() == sp) {
                            reactionRule.removeReactant(rp);
                            Structure st = rp.getStructure();
                            if (reactionRule.getReactantPatterns().isEmpty()) {
                                reactionRule.addReactant(new ReactantPattern(new SpeciesPattern(), st));
                                shapePanel.repaint();
                            }
                        }
                    }
                }
            });
            popupFromShapeMenu.add(deleteMenuItem);
            JMenu addMenuItem = new JMenu(VCellErrorMessages.SpecifyMolecularTypes);
            popupFromShapeMenu.add(addMenuItem);
            addMenuItem.removeAll();
            for (final MolecularType mt : bioModel.getModel().getRbmModelContainer().getMolecularTypeList()) {
                JMenuItem menuItem = new JMenuItem(mt.getName());
                Graphics gc = shapePanel.getGraphics();
                Icon icon = new MolecularTypeSmallShape(1, 4, mt, null, gc, mt, null, issueManager);
                menuItem.setIcon(icon);
                addMenuItem.add(menuItem);
                menuItem.addActionListener(new ActionListener() {

                    public void actionPerformed(ActionEvent e) {
                        MolecularTypePattern molecularTypePattern = new MolecularTypePattern(mt);
                        for (MolecularComponentPattern mcp : molecularTypePattern.getComponentPatternList()) {
                            mcp.setBondType(BondType.Possible);
                        }
                        sp.addMolecularTypePattern(molecularTypePattern);
                        shapePanel.repaint();
                    }
                });
            }
            JMenu compartmentMenuItem = new JMenu("Specify structure");
            popupFromShapeMenu.add(compartmentMenuItem);
            if (sp.getMolecularTypePatterns().isEmpty()) {
                compartmentMenuItem.setEnabled(false);
            }
            compartmentMenuItem.removeAll();
            for (final Structure struct : bioModel.getModel().getStructures()) {
                JMenuItem menuItem = new JMenuItem(struct.getName());
                compartmentMenuItem.add(menuItem);
                for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
                    MolecularType mt = mtp.getMolecularType();
                    if (mt.isAnchorAll()) {
                        // no restrictions (no anchor exclusion) for this molecular type
                        continue;
                    }
                    if (!mt.getAnchors().contains(struct)) {
                        // sp can't be in this struct if any of its molecules is excluded (not anchored)
                        menuItem.setEnabled(false);
                        break;
                    }
                }
                menuItem.addActionListener(new ActionListener() {

                    public void actionPerformed(ActionEvent e) {
                        String nameStruct = e.getActionCommand();
                        Structure struct = bioModel.getModel().getStructure(nameStruct);
                        ReactantPattern rp = reactionRule.getReactantPattern(sp);
                        rp.setStructure(struct);
                        productTreeModel.populateTree();
                        shapePanel.repaint();
                    }
                });
            }
        } else if (selectedObject instanceof MolecularTypePattern) {
            // move left / right / delete molecule / reassign match
            MolecularTypePattern mtp = (MolecularTypePattern) selectedObject;
            int numMtp = locationContext.sps.getSpeciesPattern().getMolecularTypePatterns().size();
            String moveRightMenuText = "Move <b>" + "right" + "</b>";
            moveRightMenuText = "<html>" + moveRightMenuText + "</html>";
            JMenuItem moveRightMenuItem = new JMenuItem(moveRightMenuText);
            Icon icon = VCellIcons.moveRightIcon;
            moveRightMenuItem.setIcon(icon);
            moveRightMenuItem.setEnabled(numMtp < 2 ? false : true);
            moveRightMenuItem.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    MolecularTypePattern from = (MolecularTypePattern) selectedObject;
                    SpeciesPattern sp = locationContext.sps.getSpeciesPattern();
                    sp.shiftRight(from);
                    reactantTreeModel.populateTree();
                    productTreeModel.populateTree();
                    shapePanel.repaint();
                }
            });
            popupFromShapeMenu.add(moveRightMenuItem);
            String moveLeftMenuText = "Move <b>" + "left" + "</b>";
            moveLeftMenuText = "<html>" + moveLeftMenuText + "</html>";
            JMenuItem moveLeftMenuItem = new JMenuItem(moveLeftMenuText);
            icon = VCellIcons.moveLeftIcon;
            moveLeftMenuItem.setIcon(icon);
            moveLeftMenuItem.setEnabled(numMtp < 2 ? false : true);
            moveLeftMenuItem.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    MolecularTypePattern from = (MolecularTypePattern) selectedObject;
                    SpeciesPattern sp = locationContext.sps.getSpeciesPattern();
                    sp.shiftLeft(from);
                    reactantTreeModel.populateTree();
                    productTreeModel.populateTree();
                    shapePanel.repaint();
                }
            });
            popupFromShapeMenu.add(moveLeftMenuItem);
            popupFromShapeMenu.add(new JSeparator());
            String deleteMenuText = "Delete <b>" + mtp.getMolecularType().getName() + "</b>";
            deleteMenuText = "<html>" + deleteMenuText + "</html>";
            JMenuItem deleteMenuItem = new JMenuItem(deleteMenuText);
            deleteMenuItem.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    MolecularTypePattern mtp = (MolecularTypePattern) selectedObject;
                    SpeciesPattern sp = locationContext.sps.getSpeciesPattern();
                    sp.removeMolecularTypePattern(mtp);
                    shapePanel.repaint();
                }
            });
            popupFromShapeMenu.add(deleteMenuItem);
            if (mtp.hasExplicitParticipantMatch()) {
                String newKey = mtp.getParticipantMatchLabel();
                List<String> keyCandidates = new ArrayList<String>();
                List<MolecularTypePattern> mtpReactantList = reactionRule.populateMaps(mtp.getMolecularType(), ReactionRuleParticipantType.Reactant);
                List<MolecularTypePattern> mtpProductList = reactionRule.populateMaps(mtp.getMolecularType(), ReactionRuleParticipantType.Product);
                for (MolecularTypePattern mtpCandidate : mtpReactantList) {
                    // we can look for indexes in any list, we should find the same
                    if (mtpCandidate.hasExplicitParticipantMatch() && !mtpCandidate.getParticipantMatchLabel().equals(newKey)) {
                        keyCandidates.add(mtpCandidate.getParticipantMatchLabel());
                    }
                }
                if (!keyCandidates.isEmpty()) {
                    JMenu reassignMatchMenuItem = new JMenu();
                    reassignMatchMenuItem.setText("Reassign match to");
                    for (int i = 0; i < keyCandidates.size(); i++) {
                        JMenuItem menuItem = new JMenuItem(keyCandidates.get(i));
                        reassignMatchMenuItem.add(menuItem);
                        menuItem.addActionListener(new ActionListener() {

                            public void actionPerformed(ActionEvent e) {
                                String oldKey = e.getActionCommand();
                                MolecularTypePattern orphanReactant = reactionRule.findMatch(oldKey, mtpReactantList);
                                mtp.setParticipantMatchLabel(oldKey);
                                orphanReactant.setParticipantMatchLabel(newKey);
                                // TODO: replace the populate tree with reactantPatternShapeList.update() and productPatternShapeList.update()
                                // when the tree will be gone
                                reactantTreeModel.populateTree();
                                productTreeModel.populateTree();
                                shapePanel.repaint();
                                SwingUtilities.invokeLater(new Runnable() {

                                    public void run() {
                                        reactantShape.flash(oldKey);
                                        productShape.flash(oldKey);
                                    }
                                });
                            }
                        });
                    }
                    popupFromShapeMenu.add(reassignMatchMenuItem);
                }
            }
        } else if (selectedObject instanceof MolecularComponentPattern) {
            // edit bond / edit state
            manageComponentPatternFromShape(selectedObject, locationContext, reactantTreeModel, ShowWhat.ShowBond, bReactantsZone);
        } else if (selectedObject instanceof ComponentStatePattern) {
            // edit state
            MolecularComponentPattern mcp = ((ComponentStateLargeShape) deepestShape).getMolecularComponentPattern();
            manageComponentPatternFromShape(mcp, locationContext, reactantTreeModel, ShowWhat.ShowState, bReactantsZone);
        }
    // ---------------------------------------- product zone ---------------------------------------------
    } else if (!bReactantsZone) {
        if (selectedObject == null) {
            return;
        } else if (selectedObject instanceof ReactionRule) {
            // add product pattern
            JMenuItem addMenuItem = new JMenuItem("Add Product");
            addMenuItem.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    reactionRule.addProduct(new ProductPattern(new SpeciesPattern(), reactionRule.getStructure()));
                    shapePanel.repaint();
                }
            });
            popupFromShapeMenu.add(addMenuItem);
        } else if (selectedObject instanceof SpeciesPattern) {
            // delete (pattern) / specify molecule
            final SpeciesPattern sp = (SpeciesPattern) selectedObject;
            JMenuItem deleteMenuItem = new JMenuItem("Delete");
            deleteMenuItem.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    for (ProductPattern pp : reactionRule.getProductPatterns()) {
                        if (pp.getSpeciesPattern() == sp) {
                            reactionRule.removeProduct(pp);
                            Structure st = pp.getStructure();
                            if (reactionRule.getProductPatterns().isEmpty()) {
                                reactionRule.addProduct(new ProductPattern(new SpeciesPattern(), st));
                                shapePanel.repaint();
                            }
                        }
                    }
                }
            });
            popupFromShapeMenu.add(deleteMenuItem);
            JMenu addMenuItem = new JMenu(VCellErrorMessages.SpecifyMolecularTypes);
            popupFromShapeMenu.add(addMenuItem);
            addMenuItem.removeAll();
            for (final MolecularType mt : bioModel.getModel().getRbmModelContainer().getMolecularTypeList()) {
                JMenuItem menuItem = new JMenuItem(mt.getName());
                Graphics gc = shapePanel.getGraphics();
                Icon icon = new MolecularTypeSmallShape(1, 4, mt, null, gc, mt, null, issueManager);
                menuItem.setIcon(icon);
                addMenuItem.add(menuItem);
                menuItem.addActionListener(new ActionListener() {

                    public void actionPerformed(ActionEvent e) {
                        MolecularTypePattern molecularTypePattern = new MolecularTypePattern(mt);
                        for (MolecularComponentPattern mcp : molecularTypePattern.getComponentPatternList()) {
                            mcp.setBondType(BondType.Possible);
                        }
                        sp.addMolecularTypePattern(molecularTypePattern);
                        shapePanel.repaint();
                    }
                });
            }
            // specify structure
            JMenu compartmentMenuItem = new JMenu("Specify structure");
            popupFromShapeMenu.add(compartmentMenuItem);
            compartmentMenuItem.removeAll();
            if (sp.getMolecularTypePatterns().isEmpty()) {
                compartmentMenuItem.setEnabled(false);
            }
            for (final Structure struct : bioModel.getModel().getStructures()) {
                JMenuItem menuItem = new JMenuItem(struct.getName());
                compartmentMenuItem.add(menuItem);
                for (MolecularTypePattern mtp : sp.getMolecularTypePatterns()) {
                    MolecularType mt = mtp.getMolecularType();
                    if (mt.isAnchorAll()) {
                        // no restrictions for this molecular type
                        continue;
                    }
                    if (!mt.getAnchors().contains(struct)) {
                        // sp can't be in this struct if any of its molecules is excluded (not anchored)
                        menuItem.setEnabled(false);
                        break;
                    }
                }
                menuItem.addActionListener(new ActionListener() {

                    public void actionPerformed(ActionEvent e) {
                        String nameStruct = e.getActionCommand();
                        Structure struct = bioModel.getModel().getStructure(nameStruct);
                        ProductPattern pp = reactionRule.getProductPattern(sp);
                        pp.setStructure(struct);
                        productTreeModel.populateTree();
                        shapePanel.repaint();
                    }
                });
            }
        } else if (selectedObject instanceof MolecularTypePattern) {
            // move left / right / delete molecule / reassign match
            MolecularTypePattern mtp = (MolecularTypePattern) selectedObject;
            int numMtp = locationContext.sps.getSpeciesPattern().getMolecularTypePatterns().size();
            String moveRightMenuText = "Move <b>" + "right" + "</b>";
            moveRightMenuText = "<html>" + moveRightMenuText + "</html>";
            JMenuItem moveRightMenuItem = new JMenuItem(moveRightMenuText);
            Icon icon = VCellIcons.moveRightIcon;
            moveRightMenuItem.setIcon(icon);
            moveRightMenuItem.setEnabled(numMtp < 2 ? false : true);
            moveRightMenuItem.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    MolecularTypePattern from = (MolecularTypePattern) selectedObject;
                    SpeciesPattern sp = locationContext.sps.getSpeciesPattern();
                    sp.shiftRight(from);
                    reactantTreeModel.populateTree();
                    productTreeModel.populateTree();
                    shapePanel.repaint();
                }
            });
            popupFromShapeMenu.add(moveRightMenuItem);
            String moveLeftMenuText = "Move <b>" + "left" + "</b>";
            moveLeftMenuText = "<html>" + moveLeftMenuText + "</html>";
            JMenuItem moveLeftMenuItem = new JMenuItem(moveLeftMenuText);
            icon = VCellIcons.moveLeftIcon;
            moveLeftMenuItem.setIcon(icon);
            moveLeftMenuItem.setEnabled(numMtp < 2 ? false : true);
            moveLeftMenuItem.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    MolecularTypePattern from = (MolecularTypePattern) selectedObject;
                    SpeciesPattern sp = locationContext.sps.getSpeciesPattern();
                    sp.shiftLeft(from);
                    reactantTreeModel.populateTree();
                    productTreeModel.populateTree();
                    shapePanel.repaint();
                }
            });
            popupFromShapeMenu.add(moveLeftMenuItem);
            popupFromShapeMenu.add(new JSeparator());
            String deleteMenuText = "Delete <b>" + mtp.getMolecularType().getName() + "</b>";
            deleteMenuText = "<html>" + deleteMenuText + "</html>";
            JMenuItem deleteMenuItem = new JMenuItem(deleteMenuText);
            deleteMenuItem.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    MolecularTypePattern mtp = (MolecularTypePattern) selectedObject;
                    SpeciesPattern sp = locationContext.sps.getSpeciesPattern();
                    sp.removeMolecularTypePattern(mtp);
                    shapePanel.repaint();
                }
            });
            popupFromShapeMenu.add(deleteMenuItem);
            if (mtp.hasExplicitParticipantMatch()) {
                String newKey = mtp.getParticipantMatchLabel();
                List<String> keyCandidates = new ArrayList<String>();
                List<MolecularTypePattern> mtpReactantList = reactionRule.populateMaps(mtp.getMolecularType(), ReactionRuleParticipantType.Reactant);
                List<MolecularTypePattern> mtpProductList = reactionRule.populateMaps(mtp.getMolecularType(), ReactionRuleParticipantType.Product);
                for (MolecularTypePattern mtpCandidate : mtpReactantList) {
                    // we can look for indexes in any list, we should find the same
                    if (mtpCandidate.hasExplicitParticipantMatch() && !mtpCandidate.getParticipantMatchLabel().equals(newKey)) {
                        keyCandidates.add(mtpCandidate.getParticipantMatchLabel());
                    }
                }
                if (!keyCandidates.isEmpty()) {
                    JMenu reassignMatchMenuItem = new JMenu();
                    reassignMatchMenuItem.setText("Reassign match to");
                    for (int i = 0; i < keyCandidates.size(); i++) {
                        JMenuItem menuItem = new JMenuItem(keyCandidates.get(i));
                        reassignMatchMenuItem.add(menuItem);
                        menuItem.addActionListener(new ActionListener() {

                            public void actionPerformed(ActionEvent e) {
                                String oldKey = e.getActionCommand();
                                MolecularTypePattern orphanProduct = reactionRule.findMatch(oldKey, mtpProductList);
                                mtp.setParticipantMatchLabel(oldKey);
                                orphanProduct.setParticipantMatchLabel(newKey);
                                // TODO: replace the populate tree with reactantPatternShapeList.update() and productPatternShapeList.update()
                                // when the tree will be gone
                                reactantTreeModel.populateTree();
                                productTreeModel.populateTree();
                                shapePanel.repaint();
                                SwingUtilities.invokeLater(new Runnable() {

                                    public void run() {
                                        reactantShape.flash(oldKey);
                                        productShape.flash(oldKey);
                                    }
                                });
                            }
                        });
                    }
                    popupFromShapeMenu.add(reassignMatchMenuItem);
                }
            }
        } else if (selectedObject instanceof MolecularComponentPattern) {
            // edit bond / edit state
            manageComponentPatternFromShape(selectedObject, locationContext, productTreeModel, ShowWhat.ShowBond, bReactantsZone);
        } else if (selectedObject instanceof ComponentStatePattern) {
            // edit state
            MolecularComponentPattern mcp = ((ComponentStateLargeShape) deepestShape).getMolecularComponentPattern();
            manageComponentPatternFromShape(mcp, locationContext, productTreeModel, ShowWhat.ShowState, bReactantsZone);
        }
    }
    popupFromShapeMenu.show(e.getComponent(), mousePoint.x, mousePoint.y);
}
Also used : ActionEvent(java.awt.event.ActionEvent) ArrayList(java.util.ArrayList) SpeciesPatternLargeShape(cbit.vcell.graph.SpeciesPatternLargeShape) SpeciesPattern(org.vcell.model.rbm.SpeciesPattern) JSeparator(javax.swing.JSeparator) MolecularTypeLargeShape(cbit.vcell.graph.MolecularTypeLargeShape) List(java.util.List) ArrayList(java.util.ArrayList) JMenuItem(javax.swing.JMenuItem) Structure(cbit.vcell.model.Structure) MolecularComponentLargeShape(cbit.vcell.graph.MolecularComponentLargeShape) ReactantPattern(cbit.vcell.model.ReactantPattern) ReactionRule(cbit.vcell.model.ReactionRule) ProductPattern(cbit.vcell.model.ProductPattern) MolecularComponentPattern(org.vcell.model.rbm.MolecularComponentPattern) ComponentStatePattern(org.vcell.model.rbm.ComponentStatePattern) Rectangle2D(java.awt.geom.Rectangle2D) Point(java.awt.Point) JPopupMenu(javax.swing.JPopupMenu) Point(java.awt.Point) MolecularType(org.vcell.model.rbm.MolecularType) Graphics(java.awt.Graphics) MolecularTypeSmallShape(cbit.vcell.graph.MolecularTypeSmallShape) ActionListener(java.awt.event.ActionListener) ComponentStateLargeShape(cbit.vcell.graph.MolecularComponentLargeShape.ComponentStateLargeShape) RbmObject(org.vcell.model.rbm.RbmObject) RbmObject(org.vcell.model.rbm.RbmObject) Icon(javax.swing.Icon) ZoomShapeIcon(cbit.vcell.graph.gui.ZoomShapeIcon) MolecularTypePattern(org.vcell.model.rbm.MolecularTypePattern) ReactionRulePatternLargeShape(cbit.vcell.graph.ReactionRulePatternLargeShape) JMenu(javax.swing.JMenu)

Example 14 with SpeciesPatternLargeShape

use of cbit.vcell.graph.SpeciesPatternLargeShape in project vcell by virtualcell.

the class ObservablePropertiesPanel method showPopupMenu.

private void showPopupMenu(MouseEvent e, PointLocationInShapeContext locationContext) {
    if (popupFromShapeMenu == null) {
        popupFromShapeMenu = new JPopupMenu();
    }
    if (popupFromShapeMenu.isShowing()) {
        return;
    }
    boolean bDelete = false;
    boolean bAdd = false;
    boolean bEdit = false;
    boolean bRename = false;
    popupFromShapeMenu.removeAll();
    Point mousePoint = e.getPoint();
    final Object deepestShape = locationContext.getDeepestShape();
    final RbmElementAbstract selectedObject;
    if (deepestShape == null) {
        selectedObject = null;
        // when cursor is outside any species pattern we offer to add a new one
        System.out.println("outside");
        popupFromShapeMenu.add(getAddSpeciesPatternFromShapeMenuItem());
    } else if (deepestShape instanceof ComponentStateLargeShape) {
        System.out.println("inside state");
        if (((ComponentStateLargeShape) deepestShape).isHighlighted()) {
            selectedObject = ((ComponentStateLargeShape) deepestShape).getComponentStatePattern();
        } else {
            return;
        }
    } else if (deepestShape instanceof MolecularComponentLargeShape) {
        System.out.println("inside component");
        if (((MolecularComponentLargeShape) deepestShape).isHighlighted()) {
            selectedObject = ((MolecularComponentLargeShape) deepestShape).getMolecularComponentPattern();
        } else {
            return;
        }
    } else if (deepestShape instanceof MolecularTypeLargeShape) {
        System.out.println("inside molecule");
        if (((MolecularTypeLargeShape) deepestShape).isHighlighted()) {
            selectedObject = ((MolecularTypeLargeShape) deepestShape).getMolecularTypePattern();
        } else {
            return;
        }
    } else if (deepestShape instanceof SpeciesPatternLargeShape) {
        System.out.println("inside species pattern");
        if (((SpeciesPatternLargeShape) deepestShape).isHighlighted()) {
            selectedObject = ((SpeciesPatternLargeShape) deepestShape).getSpeciesPattern();
        } else {
            return;
        }
    } else {
        selectedObject = null;
        System.out.println("inside something else?");
        return;
    }
    if (selectedObject instanceof SpeciesPattern) {
        getAddFromShapeMenu().setText(VCellErrorMessages.AddMolecularTypes);
        getAddFromShapeMenu().removeAll();
        for (final MolecularType mt : bioModel.getModel().getRbmModelContainer().getMolecularTypeList()) {
            JMenuItem menuItem = new JMenuItem(mt.getName());
            Graphics gc = splitPaneHorizontal.getGraphics();
            Icon icon = new MolecularTypeSmallShape(4, 4, mt, null, gc, mt, null, issueManager);
            menuItem.setIcon(icon);
            getAddFromShapeMenu().add(menuItem);
            menuItem.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    MolecularTypePattern molecularTypePattern = new MolecularTypePattern(mt);
                    ((SpeciesPattern) selectedObject).addMolecularTypePattern(molecularTypePattern);
                    SwingUtilities.invokeLater(new Runnable() {

                        public void run() {
                        }
                    });
                }
            });
        }
        JMenu compartmentMenuItem = new JMenu("Specify structure (for all)");
        compartmentMenuItem.removeAll();
        for (final Structure struct : bioModel.getModel().getStructures()) {
            JMenuItem menuItem = new JMenuItem(struct.getName());
            compartmentMenuItem.add(menuItem);
            menuItem.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    String nameStruct = e.getActionCommand();
                    Structure struct = bioModel.getModel().getStructure(nameStruct);
                    observable.setStructure(struct);
                    SwingUtilities.invokeLater(new Runnable() {

                        public void run() {
                            // repaint tree
                            observableTreeModel.populateTree();
                        // observableTree.scrollPathToVisible(path);	// scroll back up to show the observable
                        }
                    });
                }
            });
        }
        JMenuItem deleteMenuItem = new JMenuItem("Delete Species Pattern");
        deleteMenuItem.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                // observable.getSpeciesPatternList().remove((SpeciesPattern)selectedObject);
                observable.removeSpeciesPattern((SpeciesPattern) selectedObject);
                final TreePath path = observableTreeModel.findObjectPath(null, observable);
                observableTree.setSelectionPath(path);
                SwingUtilities.invokeLater(new Runnable() {

                    public void run() {
                        // repaint tree
                        observableTreeModel.populateTree();
                        // scroll back up to show the observable
                        observableTree.scrollPathToVisible(path);
                    }
                });
            }
        });
        popupFromShapeMenu.add(deleteMenuItem);
        popupFromShapeMenu.add(new JSeparator());
        popupFromShapeMenu.add(getAddFromShapeMenu());
        popupFromShapeMenu.add(compartmentMenuItem);
    } else if (selectedObject instanceof MolecularTypePattern) {
        MolecularTypePattern mtp = (MolecularTypePattern) selectedObject;
        String moveRightMenuText = "Move <b>" + "right" + "</b>";
        moveRightMenuText = "<html>" + moveRightMenuText + "</html>";
        JMenuItem moveRightMenuItem = new JMenuItem(moveRightMenuText);
        Icon icon = VCellIcons.moveRightIcon;
        moveRightMenuItem.setIcon(icon);
        moveRightMenuItem.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                MolecularTypePattern from = (MolecularTypePattern) selectedObject;
                SpeciesPattern sp = locationContext.sps.getSpeciesPattern();
                sp.shiftRight(from);
                observableTreeModel.populateTree();
            }
        });
        popupFromShapeMenu.add(moveRightMenuItem);
        String moveLeftMenuText = "Move <b>" + "left" + "</b>";
        moveLeftMenuText = "<html>" + moveLeftMenuText + "</html>";
        JMenuItem moveLeftMenuItem = new JMenuItem(moveLeftMenuText);
        icon = VCellIcons.moveLeftIcon;
        moveLeftMenuItem.setIcon(icon);
        moveLeftMenuItem.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                MolecularTypePattern from = (MolecularTypePattern) selectedObject;
                SpeciesPattern sp = locationContext.sps.getSpeciesPattern();
                sp.shiftLeft(from);
                observableTreeModel.populateTree();
            }
        });
        popupFromShapeMenu.add(moveLeftMenuItem);
        popupFromShapeMenu.add(new JSeparator());
        String deleteMenuText = "Delete <b>" + mtp.getMolecularType().getName() + "</b>";
        deleteMenuText = "<html>" + deleteMenuText + "</html>";
        JMenuItem deleteMenuItem = new JMenuItem(deleteMenuText);
        deleteMenuItem.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                MolecularTypePattern mtp = (MolecularTypePattern) selectedObject;
                SpeciesPattern sp = locationContext.sps.getSpeciesPattern();
                sp.removeMolecularTypePattern(mtp);
            }
        });
        popupFromShapeMenu.add(deleteMenuItem);
    } else if (selectedObject instanceof MolecularComponentPattern) {
        manageComponentPatternFromShape(selectedObject, locationContext, ShowWhat.ShowBond);
        bDelete = false;
    } else if (selectedObject instanceof ComponentStatePattern) {
        MolecularComponentPattern mcp = ((ComponentStateLargeShape) deepestShape).getMolecularComponentPattern();
        manageComponentPatternFromShape(mcp, locationContext, ShowWhat.ShowState);
    }
    if (bRename) {
        popupFromShapeMenu.add(getRenameFromShapeMenuItem());
    }
    if (bDelete) {
        popupFromShapeMenu.add(getDeleteFromShapeMenuItem());
    }
    if (bEdit) {
        popupFromShapeMenu.add(getEditFromShapeMenuItem());
    }
    if (bAdd) {
        popupFromShapeMenu.add(new JSeparator());
        popupFromShapeMenu.add(getAddFromShapeMenu());
    }
    popupFromShapeMenu.show(e.getComponent(), mousePoint.x, mousePoint.y);
}
Also used : ActionEvent(java.awt.event.ActionEvent) SpeciesPatternLargeShape(cbit.vcell.graph.SpeciesPatternLargeShape) SpeciesPattern(org.vcell.model.rbm.SpeciesPattern) JSeparator(javax.swing.JSeparator) MolecularTypeLargeShape(cbit.vcell.graph.MolecularTypeLargeShape) JMenuItem(javax.swing.JMenuItem) Structure(cbit.vcell.model.Structure) MolecularComponentLargeShape(cbit.vcell.graph.MolecularComponentLargeShape) MolecularComponentPattern(org.vcell.model.rbm.MolecularComponentPattern) ComponentStatePattern(org.vcell.model.rbm.ComponentStatePattern) Point(java.awt.Point) JPopupMenu(javax.swing.JPopupMenu) MolecularType(org.vcell.model.rbm.MolecularType) Graphics(java.awt.Graphics) MolecularTypeSmallShape(cbit.vcell.graph.MolecularTypeSmallShape) ActionListener(java.awt.event.ActionListener) TreePath(javax.swing.tree.TreePath) ComponentStateLargeShape(cbit.vcell.graph.MolecularComponentLargeShape.ComponentStateLargeShape) RbmElementAbstract(org.vcell.model.rbm.RbmElementAbstract) Icon(javax.swing.Icon) ZoomShapeIcon(cbit.vcell.graph.gui.ZoomShapeIcon) MolecularTypePattern(org.vcell.model.rbm.MolecularTypePattern) JMenu(javax.swing.JMenu)

Example 15 with SpeciesPatternLargeShape

use of cbit.vcell.graph.SpeciesPatternLargeShape in project vcell by virtualcell.

the class ObservablePropertiesPanel method updateShape.

private void updateShape() {
    spsList.clear();
    int maxXOffset = xOffsetInitial;
    int maxYOffset = 88 + SpeciesPatternLargeShape.defaultHeight;
    if (observable != null && observable.getSpeciesPatternList() != null && observable.getSpeciesPatternList().size() > 0) {
        for (int i = 0; i < observable.getSpeciesPatternList().size(); i++) {
            SpeciesPattern sp = observable.getSpeciesPatternList().get(i);
            SpeciesPatternLargeShape sps = new SpeciesPatternLargeShape(xOffsetInitial, 8 + (SpeciesPatternLargeShape.defaultHeight + GraphConstants.ObservableDisplay_ReservedSpaceForNameOnYAxis) * i, 80, sp, shapePanel, observable, issueManager);
            spsList.add(sps);
            int xOffset = sps.getRightEnd();
            maxXOffset = Math.max(maxXOffset, xOffset);
        }
        maxYOffset = Math.max(maxYOffset, 8 + (80 + GraphConstants.ObservableDisplay_ReservedSpaceForNameOnYAxis) * observable.getSpeciesPatternList().size() + SpeciesPatternLargeShape.defaultHeight);
    }
    Dimension preferredSize = new Dimension(maxXOffset + 200, maxYOffset);
    shapePanel.setPreferredSize(preferredSize);
    splitPaneHorizontal.repaint();
}
Also used : Dimension(java.awt.Dimension) SpeciesPatternLargeShape(cbit.vcell.graph.SpeciesPatternLargeShape) Point(java.awt.Point) SpeciesPattern(org.vcell.model.rbm.SpeciesPattern)

Aggregations

SpeciesPatternLargeShape (cbit.vcell.graph.SpeciesPatternLargeShape)15 Point (java.awt.Point)14 SpeciesPattern (org.vcell.model.rbm.SpeciesPattern)12 Dimension (java.awt.Dimension)11 MolecularType (org.vcell.model.rbm.MolecularType)7 MolecularTypeLargeShape (cbit.vcell.graph.MolecularTypeLargeShape)6 Graphics (java.awt.Graphics)6 MolecularTypePattern (org.vcell.model.rbm.MolecularTypePattern)6 MolecularComponentPattern (org.vcell.model.rbm.MolecularComponentPattern)5 VCellSortTableModel (cbit.vcell.client.desktop.biomodel.VCellSortTableModel)4 MolecularComponentLargeShape (cbit.vcell.graph.MolecularComponentLargeShape)4 ComponentStateLargeShape (cbit.vcell.graph.MolecularComponentLargeShape.ComponentStateLargeShape)4 SpeciesContext (cbit.vcell.model.SpeciesContext)4 Structure (cbit.vcell.model.Structure)4 ActionEvent (java.awt.event.ActionEvent)4 ActionListener (java.awt.event.ActionListener)4 ArrayList (java.util.ArrayList)4 List (java.util.List)4 Icon (javax.swing.Icon)4 JMenuItem (javax.swing.JMenuItem)4