Package ch.ethz.prose.tools

Source Code of ch.ethz.prose.tools.JWorksheetProseClientPane$MyJPSurrogateRenderer

//
//  This file is part of the prose package.
//
//  The contents of this file are subject to the Mozilla Public License
//  Version 1.1 (the "License"); you may not use this file except in
//  compliance with the License. You may obtain a copy of the License at
//  http://www.mozilla.org/MPL/
//
//  Software distributed under the License is distributed on an "AS IS" basis,
//  WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
//  for the specific language governing rights and limitations under the
//  License.
//
//  The Original Code is prose.
//
//  The Initial Developer of the Original Code is Andrei Popovici. Portions
//  created by Andrei Popovici are Copyright (C) 2002 Andrei Popovici.
//  All Rights Reserved.
//
//  Contributor(s):
//  $Id: JWorksheetProseClientPane.java,v 1.3 2008/11/18 11:43:39 anicoara Exp $
//  ==============================================================
//

package ch.ethz.prose.tools;

import java.awt.Dimension;
import java.awt.Point;
import java.awt.event.InputEvent;

import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;

import javax.swing.BorderFactory;
import java.awt.Color;

/**
* @author  pschoch
*/
public class JWorksheetProseClientPane extends javax.swing.JSplitPane {

  private static final long serialVersionUID = 4050765991929655860L;

  public static final int ASPECT_COL_INDEX = 0;
  public static final int JOINPOINT_COL_INDEX = 2;
  public static final Color SEL_COLOR = new Color(255, 204, 204);
  public static final Color NOT_SEL_COLOR = new Color(153, 153, 153);
  public static final Color WHITE_COLOR = new Color(255, 255, 255);
  public static final Color SEL_TABCELL_COLOR = new Color(204, 204, 255);


  private javax.swing.JScrollPane tableScrollPaneRight;
  private javax.swing.JScrollPane tableScrollPaneLeft;

  private javax.swing.JTable leftTable;
  private javax.swing.JTable rightTable;

  private JMultipleProseClient parent = null;
  private MultipleClientModel myModel = null;
  private String proseName   = null;
  private String url         = null;
  private String host        = null;
  private String port        = null;
  private JTable activeTable = null; // will be either the left or the right table

  /** Creates new form BeanForm */
  public JWorksheetProseClientPane() {}
  public JWorksheetProseClientPane(JMultipleProseClient parent, String name, String host, String port)
  throws IllegalUserInputException {
    //    setOrientation(VERTICAL_SPLIT);
    this.parent = parent;
    this.myModel = parent.getModel();
    this.proseName = name;
    this.url = host + ":" + port;
    this.host = host;
    this.port = port;
    initComponents();

    setActiveTable(leftTable);
  }

  public String getHost() {
    return host;
  }

  public String getPort() {
    return port;
  }


  /** This method is called from within the constructor to
   * initialize the form.
   * WARNING: Do NOT modify this code. The content of this method is
   * always regenerated by the Form Editor.
   */
  private void initComponents() throws IllegalUserInputException {
    tableScrollPaneLeft = new javax.swing.JScrollPane();
    leftTable = new JToolTipTable();
    tableScrollPaneRight = new javax.swing.JScrollPane();
    rightTable = new JToolTipTable();

    setPreferredSize(new java.awt.Dimension(802, 452));
    setMinimumSize(new java.awt.Dimension(2, 2));
    setDividerLocation(0.5);

    tableScrollPaneLeft.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    tableScrollPaneLeft.setPreferredSize(new java.awt.Dimension(400, 450));
    tableScrollPaneLeft.setName("scrollPane");
    tableScrollPaneLeft.setMinimumSize(new java.awt.Dimension(0, 0));
    leftTable.setModel(myModel.createTableModel(proseName,host,port,true));

    tableScrollPaneLeft.setBorder(BorderFactory.createTitledBorder("REAL ASPECT MANAGER"));
    tableScrollPaneRight.setBorder(BorderFactory.createTitledBorder("TEST ASPECT MANAGER"));
    leftTable.setIntercellSpacing(new java.awt.Dimension(2, 2));
    leftTable.setColumnSelectionAllowed(true);
    leftTable.setTableHeader(new JTableHeader(leftTable.getColumnModel()));
    leftTable.getTableHeader().setBackground(NOT_SEL_COLOR);
    leftTable.getTableHeader().addMouseListener(new java.awt.event.MouseAdapter() {
      public void mousePressed(java.awt.event.MouseEvent evt) {
        onMousePressed(evt);
      }
    });

    leftTable.setPreferredSize(new Dimension(this.getWidth(), ((WorksheetSingleClientModel)leftTable.getModel()).getRowCount()
        * leftTable.getRowHeight()));
    leftTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
    leftTable.setMaximumSize(new java.awt.Dimension(32767, 32767));
    leftTable.setName("leftTable");
    leftTable.setAutoCreateColumnsFromModel(false);
    leftTable.setMinimumSize(new java.awt.Dimension(450, 100));
    leftTable.setPreferredSize(new java.awt.Dimension(450, 400));
    customizeTable(leftTable);
    leftTable.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mouseClicked(java.awt.event.MouseEvent evt) {
        tableMouseClicked(evt);
        tableMouseRightClicked(evt);
      }
    });

    tableScrollPaneLeft.setViewportView(leftTable);

    setLeftComponent(tableScrollPaneLeft);

    tableScrollPaneRight.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    tableScrollPaneRight.setPreferredSize(new java.awt.Dimension(400, 450));
    tableScrollPaneRight.setName("scrollPane");
    tableScrollPaneRight.setMinimumSize(new java.awt.Dimension(0, 0));
    rightTable.setModel(myModel.createTableModel(proseName,host,port,false));
    rightTable.setIntercellSpacing(new java.awt.Dimension(2, 2));
    rightTable.setColumnSelectionAllowed(true);
    rightTable.setTableHeader(new JTableHeader(rightTable.getColumnModel()));
    rightTable.getTableHeader().setBackground(NOT_SEL_COLOR);
    rightTable.getTableHeader().addMouseListener(new java.awt.event.MouseAdapter() {
      public void mousePressed(java.awt.event.MouseEvent evt) {
        onMousePressed(evt);
      }
    });
    rightTable.setPreferredSize(new Dimension(this.getWidth(), ((WorksheetSingleClientModel)rightTable.getModel()).getRowCount()
        * rightTable.getRowHeight()));
    rightTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
    rightTable.setMaximumSize(new java.awt.Dimension(32767, 32767));
    rightTable.setPreferredSize(new java.awt.Dimension(450, 400));
    rightTable.setName("rightTable");
    rightTable.setAutoCreateColumnsFromModel(false);
    rightTable.setMinimumSize(new java.awt.Dimension(450, 100));
    customizeTable(rightTable);
    rightTable.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mouseClicked(java.awt.event.MouseEvent evt) {
        tableMouseClicked(evt);
        tableMouseRightClicked(evt);
      }
    });

    tableScrollPaneRight.setViewportView(rightTable);

    setRightComponent(tableScrollPaneRight);

  }//GEN-END:initComponents

  private void tableMouseRightClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMouseRightClicked
    if (!((evt.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK))
      return;
    JTable myTable = (JTable)evt.getSource();
    Object value = myTable.getModel().getValueAt(myTable.rowAtPoint(evt.getPoint()), myTable.columnAtPoint(evt.getPoint()));
    if (value == null)
      return;
    ((JMultipleProseClient)getTopLevelAncestor()).newTextAreaContent(value.toString());
  }//GEN-LAST:event_tableMouseRightClicked

  private void tableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tableMouseClicked
    JTable myTable = (JTable)evt.getSource();
    if (isActive(myTable))
      return;
    setActiveTable(myTable);
    ((WorksheetSingleClientModel)myTable.getModel()).setSelectedCells(new int[] { myTable.rowAtPoint(evt.getPoint()) });
    ((WorksheetSingleClientModel)myTable.getModel()).setSelectedColumn(myTable.columnAtPoint(evt.getPoint()));
  }//GEN-LAST:event_tableMouseClicked

  private void onMousePressed(java.awt.event.MouseEvent evt) {
    JTable myTable = ((JTableHeader)evt.getComponent()).getTable();
    if (isActive(myTable))
      return;
    setActiveTable(myTable);
  }

  public void select() {
    myModel.setActualTableModel((WorksheetSingleClientModel)activeTable.getModel());
  }

  private void setActiveTable(JTable myTable) {

    if (activeTable != null) {
      activeTable.getTableHeader().setBackground(NOT_SEL_COLOR);
      activeTable.setSelectionBackground(WHITE_COLOR);
    }

    if (!myTable.equals(activeTable)) {
      activeTable = myTable;
      activeTable.getTableHeader().setBackground(SEL_COLOR);
      activeTable.setSelectionBackground(SEL_TABCELL_COLOR);
      myModel.setActualTableModel((WorksheetSingleClientModel)activeTable.getModel());
    }
  }

  public JTable getActiveTable() {
    return activeTable;
  }

  public boolean isActive(JTable table) {
    return table.equals(activeTable);
  }

  public JTable getLeftTable() {
    return leftTable;
  }

  public JTable getRightTable() {
    return rightTable;
  }

  public String getProseName() {
    return proseName;
  }

  public String getProseURL() {
    return url;
  }

  public String toString() {
    return ("JWorksheetProseClientPane: " + proseName);
  }


  protected void customizeTable(JTable table) throws IllegalUserInputException {
    setActiveTable(table);
    ((WorksheetSingleClientModel)table.getModel()).addTableModelListener(new TableModelListener() {
      public void tableChanged(TableModelEvent e) {
        try
        {
          getActiveTable().setPreferredSize(new java.awt.Dimension(getActiveTable().getWidth(),
              myModel.getActualTableModel().getRowCount() *
              getActiveTable().getRowHeight()));
        }
        catch (IllegalUserInputException e1)
        {/*cannot happen */}
      }
    });

    table.getTableHeader().setReorderingAllowed(false);
    //assign selection model for row selection and for column selection
    table.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    table.getColumnModel().getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
      public void valueChanged(ListSelectionEvent e) {
        try {
          // install the ListSelectionListener that listens on row selection changes
          if (e.getValueIsAdjusting())
            return;

          myModel.getActualTableModel().setSelectedCells(getActiveTable().getSelectedRows());

          if (getActiveTable().getSelectedRowCount() > 0) {
            if (getActiveTable().getSelectedColumnCount() == 1)
              myModel.getActualTableModel().setSelectedColumn(getActiveTable().getSelectedColumn());
          }
          else
            myModel.getActualTableModel().setSelectedColumn(-1);
        }
        catch (IllegalUserInputException e2)
        {/*cannot happen */}
      }
    });

    table.getColumnModel().getSelectionModel().addListSelectionListener(new ListSelectionListener() {
      public void valueChanged(ListSelectionEvent e) {
        try {
          // install the ListSelectionListener that listens on column selection changes
          if (e.getValueIsAdjusting())
            return;

          myModel.getActualTableModel().setSelectedColumn(getActiveTable().getSelectedColumn());
        }
        catch (IllegalUserInputException e3)
        {/*cannot happen */}
      }
    });

    table.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mousePressed(java.awt.event.MouseEvent evt) {
        try {
          // to indicate the selected cells correctly. By default the forground color is omitted every second time.
          if (getActiveTable().getColumnModel().getColumnIndexAtX(evt.getX()) == myModel.getActualTableModel().getSelectedColumn())
            getActiveTable().getColumnModel().getSelectionModel().setSelectionInterval(
                myModel.getActualTableModel().getSelectedColumn(), myModel.getActualTableModel().getSelectedColumn());
        }
        catch (IllegalUserInputException e4)
        {/*cannot happen */}
      }
    });

    table.getColumnModel().getColumn(JOINPOINT_COL_INDEX).setCellRenderer(new MyJPSurrogateRenderer());
  }


  public static class JToolTipTable extends JTable {

    private static final long serialVersionUID = 3544395807361872688L;

    public String getToolTipText(java.awt.event.MouseEvent e) {
      Point p = e.getPoint();
      Object value = getValueAt(rowAtPoint(p), columnAtPoint(p));
      if (value != null)
        return value.toString();
      else
        return "";
    }
  }

  public class MyJPSurrogateRenderer extends DefaultTableCellRenderer {

    private static final long serialVersionUID = 3256437023534627123L;

    public java.awt.Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
      java.awt.Component component = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
      int [] pastedCells = ((WorksheetSingleClientModel)table.getModel()).pastedCells;
      if ((pastedCells != null) && (row >= pastedCells[0]) &&
          (row <= pastedCells[pastedCells.length-1])) {
        this.setFont(new java.awt.Font("Dialog", java.awt.Font.ITALIC, 12));
      }
      return component;
    }
  }

}
TOP

Related Classes of ch.ethz.prose.tools.JWorksheetProseClientPane$MyJPSurrogateRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.