Search in sources :

Example 1 with JTabbedPaneEnhanced

use of org.vcell.util.gui.JTabbedPaneEnhanced in project vcell by virtualcell.

the class ApplicationSubPanel method initialize.

protected void initialize() {
    tabbedPane = new JTabbedPaneEnhanced();
    tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
    setLayout(new BorderLayout());
    add(tabbedPane, BorderLayout.CENTER);
    tabbedPane.addChangeListener(eventHandler);
}
Also used : BorderLayout(java.awt.BorderLayout) JTabbedPaneEnhanced(org.vcell.util.gui.JTabbedPaneEnhanced)

Example 2 with JTabbedPaneEnhanced

use of org.vcell.util.gui.JTabbedPaneEnhanced in project vcell by virtualcell.

the class BioModelEditorApplicationPanel method initialize.

private void initialize() {
    applicationGeometryPanel = new ApplicationGeometryPanel();
    applicationProtocolsPanel = new ApplicationProtocolsPanel();
    applicationSpecificationsPanel = new ApplicationSpecificationsPanel();
    applicationSimulationsPanel = new ApplicationSimulationsPanel();
    parameterEstimationPanel = new ParameterEstimationPanel();
    tabbedPane = new JTabbedPaneEnhanced();
    tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
    appPanelTabs[ApplicationPanelTabID.geometry.ordinal()] = new ApplicationPanelTab(ApplicationPanelTabID.geometry, applicationGeometryPanel, VCellIcons.geometryIcon);
    appPanelTabs[ApplicationPanelTabID.settings.ordinal()] = new ApplicationPanelTab(ApplicationPanelTabID.settings, applicationSpecificationsPanel, VCellIcons.settingsIcon);
    appPanelTabs[ApplicationPanelTabID.protocols.ordinal()] = new ApplicationPanelTab(ApplicationPanelTabID.protocols, applicationProtocolsPanel, VCellIcons.protocolsIcon);
    appPanelTabs[ApplicationPanelTabID.simulations.ordinal()] = new ApplicationPanelTab(ApplicationPanelTabID.simulations, applicationSimulationsPanel, VCellIcons.simulationIcon);
    appPanelTabs[ApplicationPanelTabID.parameterEstimation.ordinal()] = new ApplicationPanelTab(ApplicationPanelTabID.parameterEstimation, parameterEstimationPanel, VCellIcons.fittingIcon);
    tabbedPane.addChangeListener(eventHandler);
    for (ApplicationPanelTab tab : appPanelTabs) {
        tab.component.setBorder(GuiConstants.TAB_PANEL_BORDER);
        tabbedPane.addTab(tab.id.title, tab.icon, tab.component);
    }
    setLayout(new BorderLayout());
    add(tabbedPane, BorderLayout.CENTER);
}
Also used : BorderLayout(java.awt.BorderLayout) JTabbedPaneEnhanced(org.vcell.util.gui.JTabbedPaneEnhanced)

Example 3 with JTabbedPaneEnhanced

use of org.vcell.util.gui.JTabbedPaneEnhanced in project vcell by virtualcell.

the class DocumentEditor method initialize.

/**
 * Initialize the class.
 */
private void initialize() {
    try {
        setLayout(new BorderLayout());
        getToolkit().addAWTEventListener(new AWTEventListener() {

            public void eventDispatched(AWTEvent event) {
                try {
                    switch(event.getID()) {
                        case KeyEvent.KEY_RELEASED:
                            documentEditor_eventDispatched(event);
                            break;
                        case MouseEvent.MOUSE_RELEASED:
                            documentEditor_eventDispatched(event);
                            break;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                // consume any exception ... don't screw up the swing event queue.
                }
            }
        }, AWTEvent.KEY_EVENT_MASK | AWTEvent.MOUSE_EVENT_MASK);
        documentEditorTree = new javax.swing.JTree() {

            @Override
            public boolean isPathEditable(TreePath path) {
                Object object = path.getLastPathComponent();
                return (object instanceof BioModelNode) && (((BioModelNode) object).getUserObject() instanceof SimulationContext);
            }
        };
        documentEditorTree.setEditable(true);
        documentEditorTree.setLargeModel(true);
        documentEditorTreeCellEditor = new DocumentEditorTreeCellEditor(documentEditorTree);
        documentEditorTree.setCellEditor(documentEditorTreeCellEditor);
        documentEditorTree.setName("bioModelEditorTree");
        ToolTipManager.sharedInstance().registerComponent(documentEditorTree);
        int rowHeight = documentEditorTree.getRowHeight();
        if (rowHeight < 10) {
            rowHeight = 20;
        }
        documentEditorTree.setRowHeight(rowHeight + 2);
        documentEditorTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        JSplitPane leftSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
        databaseWindowPanel = new DatabaseWindowPanel(false, false);
        leftBottomTabbedPane = new JTabbedPaneEnhanced();
        leftBottomTabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
        leftBottomTabbedPane.addTab("VCell DB", databaseWindowPanel);
        JScrollPane treePanel = new javax.swing.JScrollPane(documentEditorTree);
        leftSplitPane.setTopComponent(treePanel);
        leftBottomTabbedPane.setMinimumSize(new java.awt.Dimension(198, 148));
        leftSplitPane.setBottomComponent(leftBottomTabbedPane);
        leftSplitPane.setResizeWeight(0.5);
        leftSplitPane.setDividerLocation(300);
        leftSplitPane.setDividerSize(8);
        leftSplitPane.setOneTouchExpandable(true);
        rightSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
        rightSplitPane.setResizeWeight(0.7);
        rightSplitPane.setDividerLocation(400);
        rightSplitPane.setDividerSize(8);
        rightSplitPane.setOneTouchExpandable(true);
        rightBottomEmptyPanel = new JPanel(new GridBagLayout());
        rightBottomEmptyPanel.setBackground(Color.white);
        rightBottomEmptyPanel.setName("ObjectProperties");
        treeNodeDescriptionLabel = new JLabel(generalTreeNodeDescription);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.insets = new Insets(10, 10, 4, 4);
        gbc.gridy = 0;
        gbc.weighty = 1.0;
        gbc.weightx = 1.0;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.anchor = GridBagConstraints.PAGE_START;
        rightBottomEmptyPanel.add(treeNodeDescriptionLabel, gbc);
        rightBottomEmptyAnnotationsPanel = new JPanel(new GridBagLayout());
        rightBottomEmptyAnnotationsPanel.setBackground(Color.white);
        rightBottomEmptyAnnotationsPanel.setName("Annotations");
        treeNodeDescriptionLabel2 = new JLabel(generalTreeNodeDescription2);
        gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.insets = new Insets(10, 10, 4, 4);
        gbc.gridy = 0;
        gbc.weighty = 1.0;
        gbc.weightx = 1.0;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.anchor = GridBagConstraints.PAGE_START;
        rightBottomEmptyAnnotationsPanel.add(treeNodeDescriptionLabel2, gbc);
        issuePanel = new IssuePanel();
        rightBottomTabbedPane = new JTabbedPaneEnhanced();
        rightBottomTabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
        rightBottomEmptyPanel.setBorder(GuiConstants.TAB_PANEL_BORDER);
        rightBottomEmptyAnnotationsPanel.setBorder(GuiConstants.TAB_PANEL_BORDER);
        issuePanel.setBorder(GuiConstants.TAB_PANEL_BORDER);
        rightBottomTabbedPane.addTab(TAB_TITLE_OBJECT_PROPERTIES, rightBottomEmptyPanel);
        rightBottomTabbedPane.addTab(TAB_TITLE_ANNOTATIONS, rightBottomEmptyAnnotationsPanel);
        rightBottomTabbedPane.addTab(TAB_TITLE_PROBLEMS, issuePanel);
        rightBottomTabbedPane.setMinimumSize(new java.awt.Dimension(198, 148));
        rightSplitPane.setBottomComponent(rightBottomTabbedPane);
        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
        splitPane.setDividerLocation(270);
        splitPane.setOneTouchExpandable(true);
        splitPane.setResizeWeight(0.3);
        splitPane.setDividerSize(8);
        splitPane.setLeftComponent(leftSplitPane);
        splitPane.setRightComponent(rightSplitPane);
        add(splitPane, BorderLayout.CENTER);
        issueManager.addIssueEventListener(eventHandler);
        selectionManager.addPropertyChangeListener(eventHandler);
        databaseWindowPanel.setSelectionManager(selectionManager);
        documentEditorTree.addTreeSelectionListener(eventHandler);
        documentEditorTree.addMouseListener(eventHandler);
        bioModelMetaDataPanel = new BioModelMetaDataPanel();
        bioModelMetaDataPanel.setSelectionManager(selectionManager);
        mathModelMetaDataPanel = new MathModelMetaDataPanel();
        mathModelMetaDataPanel.setSelectionManager(selectionManager);
        geometryMetaDataPanel = new GeometryMetaDataPanel();
        geometryMetaDataPanel.setSelectionManager(selectionManager);
        issuePanel.setSelectionManager(selectionManager);
        issuePanel.setIssueManager(issueManager);
    } 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) AWTEventListener(java.awt.event.AWTEventListener) GeometryMetaDataPanel(cbit.vcell.desktop.GeometryMetaDataPanel) BioModelNode(cbit.vcell.desktop.BioModelNode) JTabbedPaneEnhanced(org.vcell.util.gui.JTabbedPaneEnhanced) BorderLayout(java.awt.BorderLayout) MathModelMetaDataPanel(cbit.vcell.desktop.MathModelMetaDataPanel) AWTEvent(java.awt.AWTEvent) JScrollPane(javax.swing.JScrollPane) BioModelMetaDataPanel(cbit.vcell.desktop.BioModelMetaDataPanel) JLabel(javax.swing.JLabel) JTree(javax.swing.JTree) SimulationContext(cbit.vcell.mapping.SimulationContext) Point(java.awt.Point) TreePath(javax.swing.tree.TreePath) DatabaseWindowPanel(cbit.vcell.client.desktop.DatabaseWindowPanel) JSplitPane(javax.swing.JSplitPane)

Example 4 with JTabbedPaneEnhanced

use of org.vcell.util.gui.JTabbedPaneEnhanced in project vcell by virtualcell.

the class BioModelParametersPanel method initialize.

private void initialize() {
    addNewButton = new JButton("New Global Parameter");
    addNewButton.addActionListener(eventHandler);
    addNewButton2 = new JButton("New Application Parameter");
    // addNewButton2.setIcon(downArrow);
    addNewButton2.setHorizontalTextPosition(SwingConstants.LEFT);
    addNewButton2.addActionListener(eventHandler);
    deleteButton = new JButton("Delete");
    deleteButton.setEnabled(false);
    deleteButton.addActionListener(eventHandler);
    changeUnitsButton = new JButton("Change Unit System");
    changeUnitsButton.addActionListener(eventHandler);
    textFieldSearch = new JTextField(10);
    textFieldSearch.getDocument().addDocumentListener(eventHandler);
    textFieldSearch.putClientProperty("JTextField.variant", "search");
    parametersFunctionsTable = new EditorScrollTable();
    parametersFunctionsTableModel = new BioModelParametersTableModel(parametersFunctionsTable);
    parametersFunctionsTable.setModel(parametersFunctionsTableModel);
    globalParametersCheckBox = new JCheckBox("Global");
    globalParametersCheckBox.setSelected(true);
    globalParametersCheckBox.addActionListener(eventHandler);
    reactionsCheckBox = new JCheckBox("Reactions and Rules");
    reactionsCheckBox.setSelected(true);
    reactionsCheckBox.addActionListener(eventHandler);
    applicationsCheckBox = new JCheckBox("Applications");
    applicationsCheckBox.setSelected(true);
    applicationsCheckBox.addActionListener(eventHandler);
    applicationComboBox = new JComboBox<ApplicationSelection>();
    applicationComboBox.setSelectedItem("All");
    applicationComboBox.addActionListener(eventHandler);
    applicationComboBox.setModel(applicationComboBoxModel);
    applicationComboBox.setRenderer(new ApplicationComboBoxRenderer());
    constantsCheckBox = new JCheckBox("Parameters");
    constantsCheckBox.setSelected(true);
    constantsCheckBox.addActionListener(eventHandler);
    functionsCheckBox = new JCheckBox("Functions");
    functionsCheckBox.setSelected(true);
    functionsCheckBox.addActionListener(eventHandler);
    predefinedSymbolsTable = new EditorScrollTable();
    predefinedSymbolsTableModel = new PredefinedSymbolsTableModel(predefinedSymbolsTable);
    predefinedSymbolsTable.setModel(predefinedSymbolsTableModel);
    GuiUtils.flexResizeTableColumns(predefinedSymbolsTable);
    modelUnitSystemTable = new EditorScrollTable();
    modelUnitSystemTableModel = new ModelUnitSystemTableModel(modelUnitSystemTable);
    modelUnitSystemTable.setModel(modelUnitSystemTableModel);
    GuiUtils.flexResizeTableColumns(modelUnitSystemTable);
    tabbedPane = new JTabbedPaneEnhanced();
    tabbedPane.addChangeListener(eventHandler);
    ParametersPanelTab[] parametersPanelTabs = new ParametersPanelTab[ParametersPanelTabID.values().length];
    parametersPanelTabs[ParametersPanelTabID.parameters_functions.ordinal()] = new ParametersPanelTab(ParametersPanelTabID.parameters_functions, getParametersFunctionsPanel(), null);
    parametersPanelTabs[ParametersPanelTabID.predefined.ordinal()] = new ParametersPanelTab(ParametersPanelTabID.predefined, getPredefinedSymbolsPanel(), null);
    parametersPanelTabs[ParametersPanelTabID.modelUnitSystem.ordinal()] = new ParametersPanelTab(ParametersPanelTabID.modelUnitSystem, getModelUnitSystemPanel(), null);
    for (ParametersPanelTab tab : parametersPanelTabs) {
        tab.component.setBorder(GuiConstants.TAB_PANEL_BORDER);
        tabbedPane.addTab(tab.id.title, tab.icon, tab.component);
    }
    JPanel buttonPanel = new JPanel(new GridBagLayout());
    int gridy = 0;
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = gridy;
    gbc.insets = new Insets(4, 4, 4, 4);
    gbc.anchor = GridBagConstraints.LINE_END;
    buttonPanel.add(addNewButton, gbc);
    gbc = new GridBagConstraints();
    gbc.gridx = GridBagConstraints.RELATIVE;
    gbc.insets = new Insets(4, 4, 4, 4);
    gbc.gridy = gridy;
    gbc.anchor = GridBagConstraints.LINE_END;
    buttonPanel.add(addNewButton2, gbc);
    gbc = new GridBagConstraints();
    gbc.gridx = GridBagConstraints.RELATIVE;
    gbc.insets = new Insets(4, 4, 4, 4);
    gbc.gridy = gridy;
    gbc.anchor = GridBagConstraints.LINE_END;
    buttonPanel.add(deleteButton, gbc);
    gbc = new GridBagConstraints();
    gbc.gridx = GridBagConstraints.RELATIVE;
    gbc.insets = new Insets(4, 4, 4, 4);
    gbc.gridy = gridy;
    gbc.anchor = GridBagConstraints.LINE_END;
    buttonPanel.add(changeUnitsButton, gbc);
    gbc = new GridBagConstraints();
    gbc.gridx = GridBagConstraints.RELATIVE;
    gbc.gridy = gridy;
    gbc.anchor = GridBagConstraints.LINE_END;
    gbc.insets = new Insets(4, 50, 4, 4);
    buttonPanel.add(new JLabel("Search"), gbc);
    gbc = new GridBagConstraints();
    gbc.gridx = GridBagConstraints.RELATIVE;
    gbc.gridy = gridy;
    gbc.weightx = 1.0;
    gbc.gridwidth = 2;
    gbc.anchor = GridBagConstraints.LINE_START;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.insets = new Insets(4, 4, 4, 4);
    buttonPanel.add(textFieldSearch, gbc);
    setLayout(new BorderLayout());
    add(tabbedPane, BorderLayout.CENTER);
    add(buttonPanel, BorderLayout.SOUTH);
    parametersFunctionsTable.getSelectionModel().addListSelectionListener(eventHandler);
    parametersFunctionsTable.setDefaultRenderer(NameScope.class, new DefaultScrollTableCellRenderer() {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (value instanceof NameScope) {
                NameScope nameScope = (NameScope) value;
                String text = nameScope.getPathDescription();
                setText(text);
            }
            return this;
        }
    });
    DefaultScrollTableCellRenderer nameTableCellRenderer = new DefaultScrollTableCellRenderer() {

        final Color lightBlueBackground = new Color(214, 234, 248);

        int PADDING = 3;

        @Override
        public void setBounds(int x, int y, int width, int height) {
            super.setBounds(x, y, width, height);
            if (getIcon() != null) {
                int textWidth = getFontMetrics(getFont()).stringWidth(getText());
                Insets insets = getInsets();
                // TODO: check that the text width is not bigger than the cell width and truncate the name
                int iconTextGap = width - textWidth - getIcon().getIconWidth() - insets.left - insets.right - PADDING;
                setIconTextGap(iconTextGap);
            } else {
                setIconTextGap(0);
            }
        }

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (table.getModel() instanceof BioModelParametersTableModel) {
                BioModelParametersTableModel tableModel = (BioModelParametersTableModel) table.getModel();
                Object selectedObject = tableModel.getValueAt(row);
                setToolTipText(null);
                if (selectedObject instanceof ModelParameter || selectedObject instanceof SpeciesContext) {
                    SymbolTableEntry ste = (SymbolTableEntry) selectedObject;
                    RateRule rr = null;
                    AssignmentRule ar = null;
                    for (SimulationContext simContext : bioModel.getSimulationContexts()) {
                        rr = simContext.getRateRule(ste);
                        ar = simContext.getAssignmentRule(ste);
                        if (rr != null || ar != null) {
                            break;
                        }
                    }
                    Icon icon = null;
                    if (rr != null) {
                        String text = "<html>The default value of this entity is being overriden by a Rate Rule in one or more applications</html>";
                        icon = VCellIcons.ruleRateIcon;
                        setToolTipText(text);
                    } else if (ar != null) {
                        String text = "<html>The default value of this entity is being overriden by an Assignment Rule in one or more applications</html>";
                        icon = VCellIcons.ruleAssignIcon;
                        setToolTipText(text);
                    }
                    setIcon(icon);
                    this.setHorizontalTextPosition(SwingConstants.LEFT);
                    if (isSelected) {
                        setBackground(lightBlueBackground);
                        setForeground(Color.BLACK);
                    }
                }
            }
            return this;
        }
    };
    parametersFunctionsTable.getColumnModel().getColumn(BioModelParametersTableModel.COLUMN_NAME).setCellRenderer(nameTableCellRenderer);
    {
        // make double click on units panel bring up editing box
        JPanel p = getModelUnitSystemPanel();
        VCAssert.assertValid(p);
        EditorScrollTable est = GuiUtils.findFirstChild(p, EditorScrollTable.class);
        VCAssert.assertValid(est);
        MouseListener ml = new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() == 2) {
                    changeUnitsButtonPressed();
                }
            }
        };
        est.addMouseListener(ml);
    }
}
Also used : JPanel(javax.swing.JPanel) GridBagConstraints(java.awt.GridBagConstraints) Insets(java.awt.Insets) GridBagLayout(java.awt.GridBagLayout) JButton(javax.swing.JButton) SpeciesContext(cbit.vcell.model.SpeciesContext) JTextField(javax.swing.JTextField) JTabbedPaneEnhanced(org.vcell.util.gui.JTabbedPaneEnhanced) SymbolTableEntry(cbit.vcell.parser.SymbolTableEntry) EditableSymbolTableEntry(cbit.vcell.model.EditableSymbolTableEntry) MouseListener(java.awt.event.MouseListener) BorderLayout(java.awt.BorderLayout) RateRule(cbit.vcell.mapping.RateRule) Component(java.awt.Component) JComponent(javax.swing.JComponent) MouseEvent(java.awt.event.MouseEvent) NameScope(cbit.vcell.parser.NameScope) AssignmentRule(cbit.vcell.mapping.AssignmentRule) Color(java.awt.Color) MouseAdapter(java.awt.event.MouseAdapter) JLabel(javax.swing.JLabel) SimulationContext(cbit.vcell.mapping.SimulationContext) JCheckBox(javax.swing.JCheckBox) ModelParameter(cbit.vcell.model.Model.ModelParameter) JTable(javax.swing.JTable) DefaultScrollTableCellRenderer(org.vcell.util.gui.DefaultScrollTableCellRenderer) EditorScrollTable(org.vcell.util.gui.EditorScrollTable) Icon(javax.swing.Icon) DownArrowIcon(org.vcell.util.gui.DownArrowIcon)

Example 5 with JTabbedPaneEnhanced

use of org.vcell.util.gui.JTabbedPaneEnhanced in project vcell by virtualcell.

the class BioModelEditorModelPanel method initialize.

private void initialize() {
    newButton = new JButton("New");
    newButton2 = new JButton("New Rule");
    newMemButton = new JButton("New Membrane");
    deleteButton = new JButton("Delete");
    duplicateButton = new JButton("Duplicate");
    pathwayButton = new JButton("Pathway Links", new DownArrowIcon());
    pathwayButton.setHorizontalTextPosition(SwingConstants.LEFT);
    textFieldSearch = new JTextField();
    textFieldSearch.putClientProperty("JTextField.variant", "search");
    structuresTable = new EditorScrollTable();
    reactionsTable = new EditorScrollTable();
    speciesTable = new EditorScrollTable();
    molecularTypeTable = new EditorScrollTable();
    observablesTable = new EditorScrollTable();
    structureTableModel = new BioModelEditorStructureTableModel(structuresTable);
    reactionTableModel = new BioModelEditorReactionTableModel(reactionsTable);
    speciesTableModel = new BioModelEditorSpeciesTableModel(speciesTable);
    molecularTypeTableModel = new MolecularTypeTableModel(molecularTypeTable);
    observableTableModel = new ObservableTableModel(observablesTable);
    structuresTable.setModel(structureTableModel);
    reactionsTable.setModel(reactionTableModel);
    speciesTable.setModel(speciesTableModel);
    molecularTypeTable.setModel(molecularTypeTableModel);
    observablesTable.setModel(observableTableModel);
    reactionCartoonEditorPanel = new ReactionCartoonEditorPanel();
    reactionCartoonEditorPanel.addPropertyChangeListener(eventHandler);
    reactionCartoonEditorPanel.getReactionCartoonFull().addPropertyChangeListener(eventHandler);
    reactionCartoonEditorPanel.getReactionCartoonMolecule().addPropertyChangeListener(eventHandler);
    reactionCartoonEditorPanel.getReactionCartoonRule().addPropertyChangeListener(eventHandler);
    // cartoonEditorPanel  = new CartoonEditorPanelFixed();
    // cartoonEditorPanel.getStructureCartoon().addPropertyChangeListener(eventHandler);
    /* button panel */
    buttonPanel = new JPanel();
    buttonPanel.setLayout(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.insets = new Insets(4, 4, 4, 4);
    gbc.anchor = GridBagConstraints.LINE_END;
    buttonPanel.add(newButton, gbc);
    gbc = new GridBagConstraints();
    gbc.gridx = 1;
    gbc.gridy = 0;
    gbc.insets = new Insets(4, 4, 4, 4);
    gbc.anchor = GridBagConstraints.LINE_END;
    buttonPanel.add(newButton2, gbc);
    gbc = new GridBagConstraints();
    gbc.gridx = 2;
    gbc.gridy = 0;
    gbc.insets = new Insets(4, 4, 4, 4);
    gbc.anchor = GridBagConstraints.LINE_END;
    buttonPanel.add(newMemButton, gbc);
    gbc = new GridBagConstraints();
    gbc.gridx = 3;
    gbc.insets = new Insets(4, 4, 4, 4);
    gbc.gridy = 0;
    gbc.anchor = GridBagConstraints.LINE_END;
    buttonPanel.add(duplicateButton, gbc);
    gbc = new GridBagConstraints();
    gbc.gridx = 4;
    gbc.insets = new Insets(4, 4, 4, 4);
    gbc.gridy = 0;
    gbc.anchor = GridBagConstraints.LINE_END;
    buttonPanel.add(deleteButton, gbc);
    gbc = new GridBagConstraints();
    gbc.gridx = 5;
    gbc.insets = new Insets(4, 4, 4, 4);
    gbc.gridy = 0;
    gbc.anchor = GridBagConstraints.LINE_END;
    buttonPanel.add(pathwayButton, gbc);
    gbc = new GridBagConstraints();
    gbc.gridx = 6;
    gbc.gridy = 0;
    gbc.weightx = 0.5;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.insets = new Insets(4, 4, 4, 4);
    buttonPanel.add(Box.createRigidArea(new Dimension(5, 5)), gbc);
    gbc = new GridBagConstraints();
    gbc.gridx = 7;
    gbc.gridy = 0;
    gbc.anchor = GridBagConstraints.LINE_END;
    gbc.insets = new Insets(4, 4, 4, 4);
    buttonPanel.add(new JLabel("Search "), gbc);
    gbc = new GridBagConstraints();
    gbc.gridx = 8;
    gbc.gridy = 0;
    gbc.weightx = 1.5;
    gbc.anchor = GridBagConstraints.LINE_START;
    gbc.fill = GridBagConstraints.HORIZONTAL;
    gbc.insets = new Insets(4, 4, 4, 4);
    buttonPanel.add(textFieldSearch, gbc);
    /* button panel */
    tabbedPane = new JTabbedPaneEnhanced();
    tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
    modelPanelTabs[ModelPanelTabID.reaction_diagram.ordinal()] = new ModelPanelTab(ModelPanelTabID.reaction_diagram, reactionCartoonEditorPanel, VCellIcons.diagramIcon);
    // modelPanelTabs[ModelPanelTabID.structure_diagram.ordinal()] = new ModelPanelTab(ModelPanelTabID.structure_diagram, cartoonEditorPanel, VCellIcons.structureIcon);
    modelPanelTabs[ModelPanelTabID.reaction_table.ordinal()] = new ModelPanelTab(ModelPanelTabID.reaction_table, reactionsTable.getEnclosingScrollPane(), VCellIcons.tableIcon);
    modelPanelTabs[ModelPanelTabID.structure_table.ordinal()] = new ModelPanelTab(ModelPanelTabID.structure_table, structuresTable.getEnclosingScrollPane(), VCellIcons.tableIcon);
    modelPanelTabs[ModelPanelTabID.species_table.ordinal()] = new ModelPanelTab(ModelPanelTabID.species_table, speciesTable.getEnclosingScrollPane(), VCellIcons.tableIcon);
    modelPanelTabs[ModelPanelTabID.species_definitions_table.ordinal()] = new ModelPanelTab(ModelPanelTabID.species_definitions_table, molecularTypeTable.getEnclosingScrollPane(), VCellIcons.tableIcon);
    modelPanelTabs[ModelPanelTabID.observables_table.ordinal()] = new ModelPanelTab(ModelPanelTabID.observables_table, observablesTable.getEnclosingScrollPane(), VCellIcons.tableIcon);
    tabbedPane.addChangeListener(eventHandler);
    tabbedPane.addMouseListener(eventHandler);
    for (ModelPanelTab tab : modelPanelTabs) {
        tab.getComponent().setBorder(GuiConstants.TAB_PANEL_BORDER);
        tabbedPane.addTab(tab.getName(), tab.getIcon(), tab.getComponent());
    }
    // tabbedPane.addChangeListener(changeListener);
    setLayout(new BorderLayout());
    add(tabbedPane, BorderLayout.CENTER);
    add(buttonPanel, BorderLayout.SOUTH);
    newButton.addActionListener(eventHandler);
    newButton2.addActionListener(eventHandler);
    newMemButton.addActionListener(eventHandler);
    duplicateButton.addActionListener(eventHandler);
    duplicateButton.setEnabled(false);
    deleteButton.addActionListener(eventHandler);
    deleteButton.setEnabled(false);
    pathwayButton.addActionListener(eventHandler);
    pathwayButton.setEnabled(false);
    textFieldSearch.addActionListener(eventHandler);
    textFieldSearch.getDocument().addDocumentListener(eventHandler);
    structuresTable.getSelectionModel().addListSelectionListener(eventHandler);
    reactionsTable.getSelectionModel().addListSelectionListener(eventHandler);
    speciesTable.getSelectionModel().addListSelectionListener(eventHandler);
    molecularTypeTable.getSelectionModel().addListSelectionListener(eventHandler);
    observablesTable.getSelectionModel().addListSelectionListener(eventHandler);
    DefaultScrollTableCellRenderer tableRenderer = new DefaultScrollTableCellRenderer() {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (value instanceof Structure) {
                setText(((Structure) value).getName());
            } else if (value instanceof Kinetics) {
                setText(((Kinetics) value).getKineticsDescription().getDescription());
            } else if (value instanceof RbmKineticLaw) {
                setText(((RbmKineticLaw) value).getRateLawType().name());
            }
            return this;
        }
    };
    RbmTableRenderer rbmTableRenderer = new RbmTableRenderer();
    structuresTable.setDefaultRenderer(Structure.class, tableRenderer);
    speciesTable.setDefaultRenderer(Structure.class, tableRenderer);
    reactionsTable.setDefaultRenderer(Structure.class, tableRenderer);
    reactionsTable.setDefaultRenderer(Kinetics.class, tableRenderer);
    reactionsTable.setDefaultRenderer(RbmKineticLaw.class, tableRenderer);
    reactionsTable.setDefaultRenderer(ModelProcessDynamics.class, tableRenderer);
    // Link to biopax object Table Cell Renderer
    DefaultScrollTableCellRenderer linkTableCellRenderer = new DefaultScrollTableCellRenderer() {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            BioModelEntityObject bioModelEntityObject = null;
            if (table.getModel() instanceof VCellSortTableModel<?>) {
                if (table.getModel() == reactionTableModel && reactionTableModel.getValueAt(row) instanceof BioModelEntityObject) {
                    bioModelEntityObject = (BioModelEntityObject) reactionTableModel.getValueAt(row);
                } else if (table.getModel() == speciesTableModel) {
                    bioModelEntityObject = speciesTableModel.getValueAt(row);
                } else if (table.getModel() == molecularTypeTableModel) {
                    bioModelEntityObject = molecularTypeTableModel.getValueAt(row);
                }
                if (bioModelEntityObject != null) {
                    Set<RelationshipObject> relationshipSet = bioModel.getRelationshipModel().getRelationshipObjects(bioModelEntityObject);
                    if (relationshipSet.size() > 0) {
                        StringBuilder tooltip = new StringBuilder("<html>Links to Pathway objects:<br>");
                        for (RelationshipObject ro : relationshipSet) {
                            tooltip.append("<li>" + ro.getBioPaxObject() + "</li>");
                        }
                        if (!isSelected) {
                            setForeground(Color.blue);
                        }
                        String finalName = null;
                        BioPaxObject bioPaxObject = relationshipSet.iterator().next().getBioPaxObject();
                        if (bioPaxObject instanceof EntityImpl && ((EntityImpl) bioPaxObject).getName() != null && ((EntityImpl) bioPaxObject).getName().size() > 0) {
                            finalName = ((EntityImpl) bioPaxObject).getName().get(0);
                        } else if (bioPaxObject instanceof Conversion) {
                            Conversion mp = (Conversion) bioPaxObject;
                            finalName = "[" + bioPaxObject.getIDShort() + "]";
                        } else {
                            finalName = bioModelEntityObject.getName();
                        }
                        final int LIMIT = 40;
                        final String DOTS = "...";
                        if (finalName != null && finalName.length() > LIMIT) {
                            finalName = finalName.substring(0, LIMIT - DOTS.length() - 1) + DOTS;
                        }
                        setText("<html><u>" + finalName + "</u></html>");
                        setToolTipText(tooltip.toString());
                    }
                }
            }
            return this;
        }
    };
    // Annotations icon column renderer
    DefaultScrollTableCellRenderer annotationTableCellRenderer = new DefaultScrollTableCellRenderer() {

        final Color lightBlueBackground = new Color(214, 234, 248);

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            Identifiable entity = null;
            if (table.getModel() instanceof VCellSortTableModel<?>) {
                if (table.getModel() == reactionTableModel) {
                    entity = (BioModelEntityObject) reactionTableModel.getValueAt(row);
                } else if (table.getModel() == speciesTableModel) {
                    entity = speciesTableModel.getValueAt(row);
                } else if (table.getModel() == molecularTypeTableModel) {
                    entity = molecularTypeTableModel.getValueAt(row);
                } else if (table.getModel() == observableTableModel) {
                    entity = observableTableModel.getValueAt(row);
                } else if (table.getModel() == structureTableModel) {
                    entity = structureTableModel.getValueAt(row);
                }
                if (entity != null) {
                    if (isSelected) {
                        setBackground(lightBlueBackground);
                    }
                    Identifiable identifiable = AnnotationsPanel.getIdentifiable(entity);
                    String freeText = bioModel.getVCMetaData().getFreeTextAnnotation(identifiable);
                    MiriamManager miriamManager = bioModel.getVCMetaData().getMiriamManager();
                    TreeMap<Identifiable, Map<MiriamRefGroup, MIRIAMQualifier>> miriamDescrHeir = miriamManager.getMiriamTreeMap();
                    Map<MiriamRefGroup, MIRIAMQualifier> refGroupMap = miriamDescrHeir.get(identifiable);
                    Icon icon1 = VCellIcons.issueGoodIcon;
                    Icon icon2 = VCellIcons.issueGoodIcon;
                    if (freeText != null && !freeText.isEmpty()) {
                        icon2 = VCellIcons.noteIcon;
                    // icon = VCellIcons.bookmarkIcon;
                    // icon = VCellIcons.addIcon(icon, VCellIcons.linkIcon);
                    // icon = VCellIcons.addIcon(icon, VCellIcons.certificateIcon);
                    // icon = VCellIcons.addIcon(icon, VCellIcons.noteIcon);
                    }
                    if (refGroupMap != null && !refGroupMap.isEmpty()) {
                        icon1 = VCellIcons.linkIcon;
                    }
                    Icon icon = VCellIcons.addIcon(icon1, icon2);
                    setIcon(icon);
                }
            }
            return this;
        }
    };
    DefaultScrollTableCellRenderer rbmReactionExpressionCellRenderer = new DefaultScrollTableCellRenderer() {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (table.getModel() instanceof VCellSortTableModel<?>) {
                Object selectedObject = null;
                if (table.getModel() == reactionTableModel) {
                    selectedObject = reactionTableModel.getValueAt(row);
                }
                if (selectedObject != null) {
                    if (selectedObject instanceof ReactionRule && value instanceof ModelProcessEquation) {
                        String text = "<html>";
                        text += "Reaction Rule";
                        text += "</html>";
                        setText(text);
                    } else {
                        // plain reaction, check if reactants have species pattern
                        ReactionStep rs = (ReactionStep) selectedObject;
                        String text = "<html>";
                        for (int i = 0; i < rs.getNumReactants(); i++) {
                            Reactant p = rs.getReactant(i);
                            if (p.getSpeciesContext().hasSpeciesPattern()) {
                                text += p.getStoichiometry() > 1 ? (p.getStoichiometry() + "") : "";
                                // text += "<b>" + p.getName() + "</b>";
                                text += p.getName();
                            } else {
                                text += p.getStoichiometry() > 1 ? (p.getStoichiometry() + "") : "";
                                text += p.getName();
                            }
                            if (i < rs.getNumReactants() - 1) {
                                text += " + ";
                            }
                        }
                        text += " -&gt; ";
                        for (int i = 0; i < rs.getNumProducts(); i++) {
                            Product p = rs.getProduct(i);
                            if (p.getSpeciesContext().hasSpeciesPattern()) {
                                text += p.getStoichiometry() > 1 ? (p.getStoichiometry() + "") : "";
                                // text += "<b>" + p.getName() + "</b>";
                                text += p.getName();
                            } else {
                                text += p.getStoichiometry() > 1 ? (p.getStoichiometry() + "") : "";
                                text += p.getName();
                            }
                            if (i < rs.getNumProducts() - 1) {
                                text += " + ";
                            }
                        }
                        text += "</html>";
                        setText(text);
                    }
                }
            }
            return this;
        }
    };
    DefaultScrollTableCellRenderer rbmReactionDefinitionCellRenderer = new DefaultScrollTableCellRenderer() {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (table.getModel() instanceof VCellSortTableModel<?>) {
                Object selectedObject = null;
                if (table.getModel() == reactionTableModel) {
                    selectedObject = reactionTableModel.getValueAt(row);
                }
                if (selectedObject != null) {
                    if (selectedObject instanceof ReactionRule && value instanceof ModelProcessEquation) {
                        ReactionRule rr = (ReactionRule) selectedObject;
                        String text = "<html>";
                        for (int i = 0; i < rr.getReactantPatterns().size(); i++) {
                            ReactantPattern rp = rr.getReactantPattern(i);
                            if (rp.getStructure() != null && !rp.getSpeciesPattern().getMolecularTypePatterns().isEmpty()) {
                                text += "@" + rp.getStructure().getName() + ":";
                            }
                            text += RbmUtils.toBnglString(rp.getSpeciesPattern(), null, CompartmentMode.hide, 0);
                            // text += RbmTableRenderer.toHtml(rp.getSpeciesPattern(), isSelected);
                            if (i < rr.getReactantPatterns().size() - 1) {
                                text += "+";
                            }
                        }
                        if (rr.isReversible()) {
                            // &lt;-&gt;  <->
                            text += " &lt;-&gt; ";
                        } else {
                            text += " -&gt; ";
                        }
                        for (int i = 0; i < rr.getProductPatterns().size(); i++) {
                            ProductPattern pp = rr.getProductPattern(i);
                            if (pp.getStructure() != null && !pp.getSpeciesPattern().getMolecularTypePatterns().isEmpty()) {
                                text += "@" + pp.getStructure().getName() + ":";
                            }
                            text += RbmUtils.toBnglString(pp.getSpeciesPattern(), null, CompartmentMode.hide, 0);
                            if (i < rr.getProductPatterns().size() - 1) {
                                text += "+";
                            }
                        }
                        text += "</html>";
                        setText(text);
                    } else {
                        // plain reaction, check if reactants have species pattern
                        ReactionStep rs = (ReactionStep) selectedObject;
                        String text = "<html>";
                        for (int i = 0; i < rs.getNumReactants(); i++) {
                            Reactant p = rs.getReactant(i);
                            if (p.getSpeciesContext().hasSpeciesPattern()) {
                                text += p.getStoichiometry() > 1 ? (p.getStoichiometry() + "") : "";
                                text += p.getName();
                            } else {
                                text += p.getStoichiometry() > 1 ? (p.getStoichiometry() + "") : "";
                                text += p.getName();
                            }
                            if (i < rs.getNumReactants() - 1) {
                                text += " + ";
                            }
                        }
                        if (rs.isReversible()) {
                            // &lt;-&gt;  <->
                            text += " &lt;-&gt; ";
                        } else {
                            text += " -&gt; ";
                        }
                        for (int i = 0; i < rs.getNumProducts(); i++) {
                            Product p = rs.getProduct(i);
                            if (p.getSpeciesContext().hasSpeciesPattern()) {
                                text += p.getStoichiometry() > 1 ? (p.getStoichiometry() + "") : "";
                                text += p.getName();
                            } else {
                                text += p.getStoichiometry() > 1 ? (p.getStoichiometry() + "") : "";
                                text += p.getName();
                            }
                            if (i < rs.getNumProducts() - 1) {
                                text += " + ";
                            }
                        }
                        text += "</html>";
                        setText(text);
                    }
                }
            }
            return this;
        }
    };
    DefaultScrollTableCellRenderer rbmObservablePatternCellRenderer = new DefaultScrollTableCellRenderer() {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (table.getModel() instanceof VCellSortTableModel<?>) {
                Object selectedObject = null;
                if (table.getModel() == observableTableModel) {
                    selectedObject = observableTableModel.getValueAt(row);
                }
                if (selectedObject != null) {
                    if (selectedObject instanceof RbmObservable && value instanceof String) {
                        RbmObservable o = (RbmObservable) selectedObject;
                        String text = "<html>";
                        for (int i = 0; i < o.getSpeciesPatternList().size(); i++) {
                            SpeciesPattern sp = o.getSpeciesPattern(i);
                            text += RbmTableRenderer.toHtml(sp, isSelected);
                            if (i < o.getSpeciesPatternList().size() - 1) {
                                text += " ";
                            }
                        }
                        text = RbmUtils.appendSequence(text, o);
                        text += "</html>";
                        setText(text);
                    }
                }
            }
            return this;
        }
    };
    DefaultScrollTableCellRenderer rbmSpeciesNameCellRenderer = new DefaultScrollTableCellRenderer() {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (table.getModel() instanceof VCellSortTableModel<?>) {
                Object selectedObject = null;
                if (table.getModel() == speciesTableModel) {
                    selectedObject = speciesTableModel.getValueAt(row);
                }
                if (selectedObject != null) {
                    if (selectedObject instanceof SpeciesContext) {
                        SpeciesContext sc = (SpeciesContext) selectedObject;
                        String text = "<html>";
                        if (sc.hasSpeciesPattern()) {
                            text += "<b>" + sc.getName() + "</b>";
                        } else {
                            text += sc.getName();
                        }
                        text += "</html>";
                        setText(text);
                    }
                }
            }
            return this;
        }
    };
    DefaultScrollTableCellRenderer reactionNameCellRenderer = new DefaultScrollTableCellRenderer() {

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (table.getModel() instanceof VCellSortTableModel<?>) {
                Object selectedObject = null;
                if (table.getModel() == reactionTableModel) {
                    selectedObject = reactionTableModel.getValueAt(row);
                }
                setToolTipText(null);
                if (selectedObject != null) {
                    if (selectedObject instanceof ReactionStep) {
                        ReactionStep rs = (ReactionStep) selectedObject;
                        String sbmlName = rs.getSbmlName();
                        if (sbmlName != null && !sbmlName.isEmpty()) {
                            String text = "<html>";
                            text += sbmlName;
                            text += "</html>";
                            setToolTipText(text);
                        } else {
                            setToolTipText(rs.getDisplayName());
                        }
                    } else if (selectedObject instanceof ReactionRule) {
                        ReactionRule rr = (ReactionRule) selectedObject;
                        setToolTipText(rr.getDisplayName());
                    }
                }
            }
            return this;
        }
    };
    // 
    // this renderer only paints the molecular type small shape in the MolecularType Table
    // 
    DefaultScrollTableCellRenderer rbmMolecularTypeShapeDepictionCellRenderer = new DefaultScrollTableCellRenderer() {

        MolecularTypeSmallShape stls = null;

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (table.getModel() instanceof VCellSortTableModel<?>) {
                Object selectedObject = null;
                if (table.getModel() == molecularTypeTableModel) {
                    selectedObject = molecularTypeTableModel.getValueAt(row);
                }
                if (selectedObject != null) {
                    if (selectedObject instanceof MolecularType) {
                        MolecularType mt = (MolecularType) selectedObject;
                        Graphics cellContext = table.getGraphics();
                        if (mt != null) {
                            stls = new MolecularTypeSmallShape(4, 3, mt, null, cellContext, mt, null, issueManager);
                        }
                    }
                } else {
                    stls = null;
                }
            }
            return this;
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (stls != null) {
                stls.paintSelf(g);
            }
        }
    };
    // painting of species patterns small shapes inside the species context table
    DefaultScrollTableCellRenderer rbmSpeciesShapeDepictionCellRenderer = new DefaultScrollTableCellRenderer() {

        SpeciesPatternSmallShape spss = null;

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (table.getModel() instanceof VCellSortTableModel<?>) {
                Object selectedObject = null;
                if (table.getModel() == speciesTableModel) {
                    selectedObject = speciesTableModel.getValueAt(row);
                }
                if (selectedObject != null) {
                    if (selectedObject instanceof SpeciesContext) {
                        SpeciesContext sc = (SpeciesContext) selectedObject;
                        // sp may be null for "plain" species contexts
                        SpeciesPattern sp = sc.getSpeciesPattern();
                        Graphics panelContext = table.getGraphics();
                        spss = new SpeciesPatternSmallShape(4, 2, sp, panelContext, sc, isSelected, issueManager);
                    }
                } else {
                    spss = null;
                }
            }
            setText("");
            return this;
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (spss != null) {
                spss.paintSelf(g);
            }
        }
    };
    // ---------------------------------------------------------------------------------------------------------------------------------
    DefaultScrollTableCellRenderer rbmReactionShapeDepictionCellRenderer = new DefaultScrollTableCellRenderer() {

        List<SpeciesPatternSmallShape> spssList = new ArrayList<SpeciesPatternSmallShape>();

        SpeciesPatternSmallShape spss = null;

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (table.getModel() instanceof VCellSortTableModel<?>) {
                Object selectedObject = null;
                if (table.getModel() == reactionTableModel) {
                    selectedObject = reactionTableModel.getValueAt(row);
                }
                if (selectedObject != null) {
                    if (selectedObject instanceof ReactionRule) {
                        ReactionRule rr = (ReactionRule) selectedObject;
                        Graphics panelContext = table.getGraphics();
                        spssList.clear();
                        List<ReactantPattern> rpList = rr.getReactantPatterns();
                        int xPos = 4;
                        for (int i = 0; i < rpList.size(); i++) {
                            SpeciesPattern sp = rr.getReactantPattern(i).getSpeciesPattern();
                            spss = new SpeciesPatternSmallShape(xPos, 2, sp, null, panelContext, rr, isSelected, issueManager);
                            if (i < rpList.size() - 1) {
                                spss.addEndText("+");
                            } else {
                                if (rr.isReversible()) {
                                    spss.addEndText("<->");
                                    xPos += 7;
                                } else {
                                    spss.addEndText("->");
                                }
                            }
                            xPos += spss.getWidth() + 15;
                            spssList.add(spss);
                        }
                        List<ProductPattern> ppList = rr.getProductPatterns();
                        xPos += 7;
                        for (int i = 0; i < ppList.size(); i++) {
                            SpeciesPattern sp = rr.getProductPattern(i).getSpeciesPattern();
                            spss = new SpeciesPatternSmallShape(xPos, 2, sp, null, panelContext, rr, isSelected, issueManager);
                            if (i < ppList.size() - 1) {
                                spss.addEndText("+");
                            }
                            xPos += spss.getWidth() + 15;
                            spssList.add(spss);
                        }
                    } else {
                        ReactionStep rs = (ReactionStep) selectedObject;
                        Graphics panelContext = table.getGraphics();
                        spssList.clear();
                        int xPos = 4;
                        int extraSpace = 0;
                        for (int i = 0; i < rs.getNumReactants(); i++) {
                            SpeciesPattern sp = rs.getReactant(i).getSpeciesContext().getSpeciesPattern();
                            spss = new SpeciesPatternSmallShape(xPos, 2, sp, panelContext, rs, isSelected, issueManager);
                            if (i < rs.getNumReactants() - 1) {
                                spss.addEndText("+");
                            } else {
                                if (rs.isReversible()) {
                                    spss.addEndText("<->");
                                    extraSpace += 7;
                                } else {
                                    spss.addEndText("->");
                                }
                            }
                            int offset = sp == null ? 17 : 15;
                            offset += extraSpace;
                            int w = spss.getWidth();
                            xPos += w + offset;
                            spssList.add(spss);
                        }
                        xPos += 8;
                        for (int i = 0; i < rs.getNumProducts(); i++) {
                            SpeciesPattern sp = rs.getProduct(i).getSpeciesContext().getSpeciesPattern();
                            if (i == 0 && rs.getNumReactants() == 0) {
                                xPos += 14;
                            }
                            spss = new SpeciesPatternSmallShape(xPos, 2, sp, panelContext, rs, isSelected, issueManager);
                            if (i == 0 && rs.getNumReactants() == 0) {
                                spss.addStartText("->");
                            }
                            if (i < rs.getNumProducts() - 1) {
                                spss.addEndText("+");
                            }
                            int offset = sp == null ? 17 : 15;
                            int w = spss.getWidth();
                            xPos += w + offset;
                            spssList.add(spss);
                        }
                    }
                } else {
                    spssList.clear();
                }
            }
            setText("");
            return this;
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            for (SpeciesPatternSmallShape spss : spssList) {
                if (spss == null) {
                    continue;
                }
                spss.paintSelf(g);
            }
        }
    };
    // -------------------------------------------------------------------------------------------------------------------------------
    DefaultScrollTableCellRenderer rbmObservableShapeDepictionCellRenderer = new DefaultScrollTableCellRenderer() {

        List<SpeciesPatternSmallShape> spssList = new ArrayList<SpeciesPatternSmallShape>();

        SpeciesPatternSmallShape spss = null;

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (table.getModel() instanceof VCellSortTableModel<?>) {
                Object selectedObject = null;
                if (table.getModel() == observableTableModel) {
                    selectedObject = observableTableModel.getValueAt(row);
                }
                if (selectedObject != null) {
                    if (selectedObject instanceof RbmObservable) {
                        RbmObservable observable = (RbmObservable) selectedObject;
                        Graphics panelContext = table.getGraphics();
                        int xPos = 4;
                        spssList.clear();
                        for (int i = 0; i < observable.getSpeciesPatternList().size(); i++) {
                            SpeciesPattern sp = observable.getSpeciesPatternList().get(i);
                            spss = new SpeciesPatternSmallShape(xPos, 2, sp, panelContext, observable, isSelected, issueManager);
                            xPos += spss.getWidth() + 6;
                            spssList.add(spss);
                        }
                    }
                } else {
                    spssList.clear();
                }
            }
            setText("");
            return this;
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            for (SpeciesPatternSmallShape spss : spssList) {
                if (spss == null) {
                    continue;
                }
                spss.paintSelf(g);
            }
        }
    };
    // TODO: here are the renderers associated with the columns
    reactionsTable.getColumnModel().getColumn(BioModelEditorReactionTableModel.COLUMN_NAME).setCellRenderer(reactionNameCellRenderer);
    reactionsTable.getColumnModel().getColumn(BioModelEditorReactionTableModel.COLUMN_LINK).setCellRenderer(linkTableCellRenderer);
    reactionsTable.getColumnModel().getColumn(BioModelEditorReactionTableModel.COLUMN_EQUATION).setCellRenderer(rbmReactionExpressionCellRenderer);
    reactionsTable.getColumnModel().getColumn(BioModelEditorReactionTableModel.COLUMN_DEFINITION).setCellRenderer(rbmReactionDefinitionCellRenderer);
    reactionsTable.getColumnModel().getColumn(BioModelEditorReactionTableModel.COLUMN_NOTES).setCellRenderer(annotationTableCellRenderer);
    speciesTable.getColumnModel().getColumn(BioModelEditorSpeciesTableModel.COLUMN_NAME).setCellRenderer(rbmSpeciesNameCellRenderer);
    speciesTable.getColumnModel().getColumn(BioModelEditorSpeciesTableModel.COLUMN_LINK).setCellRenderer(linkTableCellRenderer);
    speciesTable.getColumnModel().getColumn(BioModelEditorSpeciesTableModel.COLUMN_NOTES).setCellRenderer(annotationTableCellRenderer);
    molecularTypeTable.getColumnModel().getColumn(MolecularTypeTableModel.Column.link.ordinal()).setCellRenderer(linkTableCellRenderer);
    molecularTypeTable.getColumnModel().getColumn(MolecularTypeTableModel.Column.notes.ordinal()).setCellRenderer(annotationTableCellRenderer);
    observablesTable.getColumnModel().getColumn(ObservableTableModel.Column.species_pattern.ordinal()).setCellRenderer(rbmObservablePatternCellRenderer);
    observablesTable.getColumnModel().getColumn(ObservableTableModel.Column.structure.ordinal()).setCellRenderer(tableRenderer);
    observablesTable.getColumnModel().getColumn(ObservableTableModel.Column.notes.ordinal()).setCellRenderer(annotationTableCellRenderer);
    structuresTable.getColumnModel().getColumn(BioModelEditorStructureTableModel.COLUMN_NOTES).setCellRenderer(annotationTableCellRenderer);
    // fixed width columns
    final int notesWidth = 65;
    molecularTypeTable.getColumnModel().getColumn(MolecularTypeTableModel.Column.depiction.ordinal()).setMaxWidth(180);
    molecularTypeTable.getColumnModel().getColumn(MolecularTypeTableModel.Column.notes.ordinal()).setPreferredWidth(notesWidth);
    molecularTypeTable.getColumnModel().getColumn(MolecularTypeTableModel.Column.notes.ordinal()).setMaxWidth(notesWidth);
    speciesTable.getColumnModel().getColumn(BioModelEditorSpeciesTableModel.COLUMN_NOTES).setPreferredWidth(notesWidth);
    speciesTable.getColumnModel().getColumn(BioModelEditorSpeciesTableModel.COLUMN_NOTES).setMaxWidth(notesWidth);
    observablesTable.getColumnModel().getColumn(ObservableTableModel.Column.notes.ordinal()).setPreferredWidth(notesWidth);
    observablesTable.getColumnModel().getColumn(ObservableTableModel.Column.notes.ordinal()).setMaxWidth(notesWidth);
    reactionsTable.getColumnModel().getColumn(BioModelEditorReactionTableModel.COLUMN_DEPICTION).setPreferredWidth(180);
    reactionsTable.getColumnModel().getColumn(BioModelEditorReactionTableModel.COLUMN_NOTES).setPreferredWidth(notesWidth);
    reactionsTable.getColumnModel().getColumn(BioModelEditorReactionTableModel.COLUMN_NOTES).setMaxWidth(notesWidth);
    structuresTable.getColumnModel().getColumn(BioModelEditorStructureTableModel.COLUMN_NOTES).setPreferredWidth(notesWidth);
    structuresTable.getColumnModel().getColumn(BioModelEditorStructureTableModel.COLUMN_NOTES).setMaxWidth(notesWidth);
    // all "depictions" have their own renderer
    molecularTypeTable.getColumnModel().getColumn(MolecularTypeTableModel.Column.depiction.ordinal()).setCellRenderer(rbmMolecularTypeShapeDepictionCellRenderer);
    speciesTable.getColumnModel().getColumn(BioModelEditorSpeciesTableModel.COLUMN_DEPICTION).setCellRenderer(rbmSpeciesShapeDepictionCellRenderer);
    speciesTable.getColumnModel().getColumn(BioModelEditorSpeciesTableModel.COLUMN_DEFINITION).setCellRenderer(rbmTableRenderer);
    observablesTable.getColumnModel().getColumn(ObservableTableModel.Column.depiction.ordinal()).setCellRenderer(rbmObservableShapeDepictionCellRenderer);
    reactionsTable.getColumnModel().getColumn(BioModelEditorReactionTableModel.COLUMN_DEPICTION).setCellRenderer(rbmReactionShapeDepictionCellRenderer);
    observablesTable.getColumnModel().getColumn(ObservableTableModel.Column.type.ordinal()).setCellEditor(observableTableModel.getObservableTypeComboBoxEditor());
    observableTableModel.updateObservableTypeComboBox();
    reactionsTable.addMouseListener(eventHandler);
    reactionsTable.addKeyListener(eventHandler);
    speciesTable.addMouseListener(eventHandler);
    speciesTable.addKeyListener(eventHandler);
    molecularTypeTable.addMouseListener(eventHandler);
    molecularTypeTable.addKeyListener(eventHandler);
    observablesTable.addMouseListener(eventHandler);
    observablesTable.addKeyListener(eventHandler);
    structuresTable.addMouseListener(eventHandler);
    structuresTable.addKeyListener(eventHandler);
}
Also used : JPanel(javax.swing.JPanel) GridBagConstraints(java.awt.GridBagConstraints) Product(cbit.vcell.model.Product) SpeciesContext(cbit.vcell.model.SpeciesContext) RelationshipObject(org.vcell.relationship.RelationshipObject) Reactant(cbit.vcell.model.Reactant) JTabbedPaneEnhanced(org.vcell.util.gui.JTabbedPaneEnhanced) BorderLayout(java.awt.BorderLayout) ArrayList(java.util.ArrayList) List(java.util.List) JList(javax.swing.JList) EntityImpl(org.vcell.pathway.EntityImpl) Color(java.awt.Color) RbmObservable(cbit.vcell.model.RbmObservable) BioModelEntityObject(cbit.vcell.model.BioModelEntityObject) Conversion(org.vcell.pathway.Conversion) Identifiable(org.vcell.util.document.Identifiable) ReactionCartoonEditorPanel(cbit.vcell.graph.gui.ReactionCartoonEditorPanel) MolecularType(org.vcell.model.rbm.MolecularType) JTable(javax.swing.JTable) ReactionStep(cbit.vcell.model.ReactionStep) RelationshipObject(org.vcell.relationship.RelationshipObject) BioModelEntityObject(cbit.vcell.model.BioModelEntityObject) BioPaxObject(org.vcell.pathway.BioPaxObject) EditorScrollTable(org.vcell.util.gui.EditorScrollTable) Kinetics(cbit.vcell.model.Kinetics) DownArrowIcon(org.vcell.util.gui.DownArrowIcon) Icon(javax.swing.Icon) StructureToolShapeIcon(cbit.vcell.graph.gui.StructureToolShapeIcon) Map(java.util.Map) LinkedHashMap(java.util.LinkedHashMap) TreeMap(java.util.TreeMap) MIRIAMQualifier(org.vcell.sybil.models.miriam.MIRIAMQualifier) MiriamManager(cbit.vcell.biomodel.meta.MiriamManager) Insets(java.awt.Insets) GridBagLayout(java.awt.GridBagLayout) SpeciesPatternSmallShape(cbit.vcell.graph.SpeciesPatternSmallShape) BioPaxObject(org.vcell.pathway.BioPaxObject) JButton(javax.swing.JButton) JTextField(javax.swing.JTextField) SpeciesPattern(org.vcell.model.rbm.SpeciesPattern) Structure(cbit.vcell.model.Structure) MiriamRefGroup(cbit.vcell.biomodel.meta.MiriamManager.MiriamRefGroup) ReactantPattern(cbit.vcell.model.ReactantPattern) ReactionRule(cbit.vcell.model.ReactionRule) ProductPattern(cbit.vcell.model.ProductPattern) JLabel(javax.swing.JLabel) Dimension(java.awt.Dimension) RbmKineticLaw(cbit.vcell.model.RbmKineticLaw) Graphics(java.awt.Graphics) MolecularTypeSmallShape(cbit.vcell.graph.MolecularTypeSmallShape) DownArrowIcon(org.vcell.util.gui.DownArrowIcon) ModelProcessEquation(cbit.gui.ModelProcessEquation) DefaultScrollTableCellRenderer(org.vcell.util.gui.DefaultScrollTableCellRenderer)

Aggregations

JTabbedPaneEnhanced (org.vcell.util.gui.JTabbedPaneEnhanced)7 BorderLayout (java.awt.BorderLayout)6 GridBagConstraints (java.awt.GridBagConstraints)4 GridBagLayout (java.awt.GridBagLayout)4 Insets (java.awt.Insets)4 JLabel (javax.swing.JLabel)4 JPanel (javax.swing.JPanel)4 JButton (javax.swing.JButton)3 JTable (javax.swing.JTable)3 JTextField (javax.swing.JTextField)3 DefaultScrollTableCellRenderer (org.vcell.util.gui.DefaultScrollTableCellRenderer)3 DownArrowIcon (org.vcell.util.gui.DownArrowIcon)3 SimulationContext (cbit.vcell.mapping.SimulationContext)2 BioModelEntityObject (cbit.vcell.model.BioModelEntityObject)2 SpeciesContext (cbit.vcell.model.SpeciesContext)2 Color (java.awt.Color)2 Component (java.awt.Component)2 BioPaxObject (org.vcell.pathway.BioPaxObject)2 RelationshipObject (org.vcell.relationship.RelationshipObject)2 ModelProcessEquation (cbit.gui.ModelProcessEquation)1