| package com.intellij.ui; |
| |
| import com.intellij.openapi.Disposable; |
| import com.intellij.ui.TabbedPaneWrapper; |
| import org.jetbrains.annotations.Nullable; |
| |
| import javax.swing.*; |
| import javax.swing.event.ChangeListener; |
| import java.awt.*; |
| |
| public class HeaderlessTabbedPane extends JPanel { |
| |
| private final TabbedPaneWrapper myTabbedPane; |
| |
| @Nullable |
| private JComponent myTabContent; |
| |
| @Nullable |
| private String myTabTitle; |
| |
| public HeaderlessTabbedPane(Disposable disposable) { |
| super(new BorderLayout()); |
| myTabbedPane = new TabbedPaneWrapper(disposable); |
| add(myTabbedPane.getComponent(), BorderLayout.CENTER); |
| } |
| |
| public void addTab(String title, JComponent component) { |
| if (myTabContent != null) { |
| throw new IllegalStateException("Please show header before changing tabs"); |
| } |
| myTabbedPane.addTab(title, component); |
| } |
| |
| public void setSelectedIndex(int index) { |
| if (myTabContent != null) { |
| if (index != 0) { |
| throw new IllegalArgumentException("Invalid index"); |
| } |
| return; |
| } |
| myTabbedPane.setSelectedIndex(index); |
| } |
| |
| public int getTabCount() { |
| if (myTabContent != null) { |
| return 0; |
| } |
| else { |
| return myTabbedPane.getTabCount(); |
| } |
| } |
| |
| public void addChangeListener(ChangeListener listener) { |
| myTabbedPane.addChangeListener(listener); |
| } |
| |
| public int indexOfComponent(JComponent component) { |
| if (myTabContent != null) { |
| return component == myTabContent ? 0 : -1; |
| } |
| return myTabbedPane.indexOfComponent(component); |
| } |
| |
| public void removeTabAt(int index) { |
| if (myTabContent != null) { |
| throw new IllegalStateException("Please show header before changing tabs"); |
| } |
| myTabbedPane.removeTabAt(index); |
| } |
| |
| public int getSelectedIndex() { |
| if (myTabContent != null) { |
| return 0; |
| } |
| else { |
| return myTabbedPane.getSelectedIndex(); |
| } |
| } |
| |
| public void setHeaderVisible(boolean visible) { |
| if (visible == (myTabContent == null)) { |
| return; |
| } |
| |
| if (visible) { |
| remove(myTabContent); |
| myTabbedPane.addTab(myTabTitle, myTabContent); |
| add(myTabbedPane.getComponent()); |
| myTabTitle = null; |
| myTabContent = null; |
| } |
| else { |
| if (myTabbedPane.getTabCount() != 1) { |
| throw new IllegalStateException("Please leave one tab before hiding header, now we have " + myTabbedPane.getTabCount() + " tabs"); |
| } |
| |
| add(myTabbedPane.getComponent(), BorderLayout.CENTER); |
| myTabContent = myTabbedPane.getComponentAt(0); |
| myTabTitle = myTabbedPane.getTitleAt(0); |
| myTabbedPane.removeTabAt(0); |
| remove(myTabbedPane.getComponent()); |
| add(myTabContent, BorderLayout.CENTER); |
| } |
| } |
| } |