Package org.pentaho.reporting.designer.core.settings.ui

Source Code of org.pentaho.reporting.designer.core.settings.ui.ButtonTabbedPane$ScrollablePanel

/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.reporting.designer.core.settings.ui;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.LayoutManager;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.ButtonGroup;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JToggleButton;
import javax.swing.Scrollable;

/**
* User: Martin Date: 12.03.2005 Time: 13:57:59
*/
public class ButtonTabbedPane extends JPanel
{
  private static class ScrollablePanel extends JPanel implements Scrollable
  {
    private ScrollablePanel(final LayoutManager layout)
    {
      super(layout);
    }


    public Dimension getPreferredScrollableViewportSize()
    {
      return getPreferredSize();
    }


    public int getScrollableUnitIncrement(final Rectangle visibleRect, final int orientation, final int direction)
    {
      return 20;
    }


    public int getScrollableBlockIncrement(final Rectangle visibleRect, final int orientation, final int direction)
    {
      return 20;
    }


    public boolean getScrollableTracksViewportWidth()
    {
      return true;
    }


    public boolean getScrollableTracksViewportHeight()
    {
      return false;
    }
  }

  private class SelectPanelAction implements ActionListener
  {
    private final String magicKey;

    public SelectPanelAction(final String magicKey)
    {
      this.magicKey = magicKey;
    }

    public void actionPerformed(final ActionEvent e)
    {
      cardLayout.show(cardPanel, magicKey);
    }
  }

  private ArrayList<Component> settingPlugins;
  private ArrayList<JToggleButton> settingsButtons;
  private JPanel buttonPanel;
  private JPanel cardPanel;
  private CardLayout cardLayout;
  private ButtonGroup panelButtons;

  public ButtonTabbedPane()
  {
    settingPlugins = new ArrayList<Component>();
    settingsButtons = new ArrayList<JToggleButton>();
   
    setLayout(new BorderLayout(0, 0));

    buttonPanel = new JPanel(new GridLayout(0, 1));

    panelButtons = new ButtonGroup();
    cardLayout = new CardLayout();
    cardPanel = new JPanel(cardLayout);

    final JPanel buttonHelperPanel = new ScrollablePanel(new BorderLayout());
    buttonHelperPanel.setOpaque(true);
    buttonHelperPanel.add(buttonPanel, BorderLayout.NORTH);

    final JScrollPane scrollPane = new JScrollPane(buttonHelperPanel);
    scrollPane.setOpaque(false);
    scrollPane.setBorder(null);
    scrollPane.getViewport().setBorder(null);
    scrollPane.getViewport().setOpaque(false);
   
    final JPanel buttonArea = new JPanel(new BorderLayout());
    buttonArea.add(scrollPane, BorderLayout.CENTER);

    final JPanel helperPanel = new JPanel(new BorderLayout());
    helperPanel.add(buttonArea, BorderLayout.WEST);
    helperPanel.add(Box.createHorizontalStrut(5), BorderLayout.CENTER);
    add(helperPanel, BorderLayout.WEST);
    add(cardPanel, BorderLayout.CENTER);
  }

  public void showFirst()
  {
    if (settingsButtons.isEmpty() == false)
    {
      settingsButtons.get(0).setSelected(true);
      cardLayout.first(cardPanel);
    }
  }

  public void addTab(final Icon icon, final String title, final JComponent component)
  {
    final String magicKey = String.valueOf(settingPlugins.size());
    settingPlugins.add(component);
    cardPanel.add(component, magicKey);

    final JToggleButton toggleButton = new JToggleButton(title, icon);
    toggleButton.setHorizontalTextPosition(JToggleButton.CENTER);
    toggleButton.setVerticalTextPosition(JToggleButton.BOTTOM);
    toggleButton.addActionListener(new SelectPanelAction(magicKey));

    panelButtons.add(toggleButton);
    settingsButtons.add(toggleButton);

    final JPanel helperPanel = new JPanel(new BorderLayout());
    helperPanel.setOpaque(false);
    helperPanel.setBorder(BorderFactory.createEmptyBorder(2, 4, 2, 4));
    helperPanel.add(toggleButton, BorderLayout.CENTER);
    buttonPanel.add(helperPanel);
  }

  public int getCardCount()
  {
    return settingPlugins.size();
  }
}
TOP

Related Classes of org.pentaho.reporting.designer.core.settings.ui.ButtonTabbedPane$ScrollablePanel

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.