Package com.intellij.util.ui.treetable

Source Code of com.intellij.util.ui.treetable.StripedTreeTable

/*
* Copyright 2000-2007 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.util.ui.treetable;

import com.intellij.util.ui.UIUtil;

import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreeCellRenderer;
import java.awt.*;

/**
* User: anna
* Date: 02-Dec-2005
*/
public class StripedTreeTable extends TreeTable{
  private Color myStripeColor1;
  private Color myStripeColor2;

  public StripedTreeTable(final TreeTableModel treeTableModel, Color stripeColor1) {
    this(treeTableModel, stripeColor1, Color.white);
  }

  public StripedTreeTable(final TreeTableModel treeTableModel, Color stripeColor1, Color stripeColor2) {
    super(treeTableModel);
    myStripeColor1 = stripeColor1;
    myStripeColor2 = stripeColor2;
    setOpaque(false);
    getTree().setOpaque(false);
    getTree().getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
      public void valueChanged(TreeSelectionEvent e) {
        final int[] selectionRows = getTree().getSelectionRows();
        if (selectionRows != null && selectionRows.length > 0) {
          addColumnSelectionInterval(0, getColumnCount() - 1);
        }
      }
    });
    for(int i = 0; i < getColumnCount(); i++){
      final TableColumn column = getColumn(getColumnName(i));
      final TableCellRenderer cellRenderer = getCellRenderer(i);
      if (cellRenderer != null) {
        column.setCellRenderer(new TableCellRenderer() {
          public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
            Component component = cellRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
            drawStripe(isSelected, component, row, UIUtil.getTableSelectionBackground(), UIUtil.getTableBackground());
            return component;
          }
        });
      }
    }
    final TreeCellRenderer treeRenderer = getTreeRenderer();
    if (treeRenderer != null) {
      getTree().setCellRenderer(new DefaultTreeCellRenderer(){
        public Component getTreeCellRendererComponent(JTree tree,
                                                      Object value,
                                                      boolean selected,
                                                      boolean expanded,
                                                      boolean leaf,
                                                      int row,
                                                      boolean hasFocus) {
          final Component component = treeRenderer.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
          drawStripe(selected, component, row, UIUtil.getTreeSelectionBackground(), UIUtil.getTreeTextBackground());
          return component;
        }
      });
    }
  }



  protected TableCellRenderer getCellRenderer(int column){
    return null;
  }

  protected TreeCellRenderer getTreeRenderer(){
    return null;
  }

  public void paint(Graphics g) {
    final Color color = g.getColor();
    for (int i = 0; i < getRowCount(); i++){
      if (getSelectedRow() == i){
        drawStripe(g, i, UIUtil.getTableSelectionBackground());
      } else if (i % 2 == 0){
        drawStripe(g, i, myStripeColor1);
      } else {
        drawStripe(g, i, myStripeColor2);
      }
    }
    g.setColor(color);
    super.paint(g);
  }

  private void drawStripe(final Graphics g, final int i, final Color color) {
    g.setColor(color);
    final Rectangle cellRect = getCellRect(i, 0, true);
    g.fillRect(cellRect.x, cellRect.y, cellRect.width, cellRect.height);
  }

  private void drawStripe(final boolean isSelected,
                          final Component component,
                          final int row,
                          final Color selectionColor,
                          final Color bgColor) {
    if (isSelected){
      component.setBackground(selectionColor);
    } else {
      if (row % 2 == 0) {
        component.setBackground(myStripeColor1);
      } else {
        component.setBackground(bgColor);
      }
    }
  }


}
TOP

Related Classes of com.intellij.util.ui.treetable.StripedTreeTable

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.