Package com.gitblit.client

Source Code of com.gitblit.client.ClosableTabComponent

/*
* Copyright 2011 gitblit.com.
*
* 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.gitblit.client;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.AbstractButton;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.plaf.basic.BasicButtonUI;

/**
* Closable tab control.
*/
public class ClosableTabComponent extends JPanel {

  private static final long serialVersionUID = 1L;

  private static final MouseListener BUTTON_MOUSE_LISTENER = new MouseAdapter() {
    @Override
    public void mouseEntered(MouseEvent e) {
      Component component = e.getComponent();
      if (component instanceof AbstractButton) {
        AbstractButton button = (AbstractButton) component;
        button.setBorderPainted(true);
      }
    }

    @Override
    public void mouseExited(MouseEvent e) {
      Component component = e.getComponent();
      if (component instanceof AbstractButton) {
        AbstractButton button = (AbstractButton) component;
        button.setBorderPainted(false);
      }
    }
  };

  private final JTabbedPane pane;
  private final JLabel label;
  private final JButton button = new TabButton();

  private final CloseTabListener closeListener;

  public interface CloseTabListener {
    void closeTab(Component c);
  }

  public ClosableTabComponent(String title, ImageIcon icon, JTabbedPane pane,
      CloseTabListener closeListener) {
    super(new FlowLayout(FlowLayout.LEFT, 0, 0));
    this.closeListener = closeListener;

    if (pane == null) {
      throw new NullPointerException("TabbedPane is null");
    }
    this.pane = pane;
    setOpaque(false);
    label = new JLabel(title);
    if (icon != null) {
      label.setIcon(icon);
    }

    add(label);
    label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
    add(button);
    setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));
  }

  private class TabButton extends JButton implements ActionListener {

    private static final long serialVersionUID = 1L;

    public TabButton() {
      int size = 17;
      setPreferredSize(new Dimension(size, size));
      setToolTipText("Close");
      setUI(new BasicButtonUI());
      setContentAreaFilled(false);
      setFocusable(false);
      setBorder(BorderFactory.createEtchedBorder());
      setBorderPainted(false);
      addMouseListener(BUTTON_MOUSE_LISTENER);
      setRolloverEnabled(true);
      addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
      int i = pane.indexOfTabComponent(ClosableTabComponent.this);
      Component c = pane.getComponentAt(i);
      if (i != -1) {
        pane.remove(i);
      }
      if (closeListener != null) {
        closeListener.closeTab(c);
      }
    }

    @Override
    public void updateUI() {
    }

    @Override
    protected void paintComponent(Graphics g) {
      super.paintComponent(g);
      Graphics2D g2 = (Graphics2D) g;
      Stroke stroke = g2.getStroke();
      g2.setStroke(new BasicStroke(2));
      g.setColor(Color.BLACK);
      if (getModel().isRollover()) {
        Color highlight = new Color(0, 51, 153);
        g.setColor(highlight);
      }
      int delta = 5;
      g.drawLine(delta, delta, getWidth() - delta - 1, getHeight() - delta - 1);
      g.drawLine(getWidth() - delta - 1, delta, delta, getHeight() - delta - 1);
      g2.setStroke(stroke);

      int i = pane.indexOfTabComponent(ClosableTabComponent.this);
      pane.setTitleAt(i, label.getText());
    }
  }
}
TOP

Related Classes of com.gitblit.client.ClosableTabComponent

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.