75 lines
2.0 KiB
Java
75 lines
2.0 KiB
Java
package the.bytecode.club.bytecodeviewer.gui.resourceviewer;
|
|
|
|
import com.github.weisj.darklaf.components.CloseButton;
|
|
import the.bytecode.club.bytecodeviewer.gui.components.listeners.MouseClickedListener;
|
|
import the.bytecode.club.bytecodeviewer.translation.TranslatedStrings;
|
|
|
|
import javax.swing.*;
|
|
import java.awt.*;
|
|
|
|
public class CloseButtonComponent extends JPanel {
|
|
|
|
private final JTabbedPane pane;
|
|
|
|
public CloseButtonComponent(final JTabbedPane pane) {
|
|
super(new FlowLayout(FlowLayout.LEFT, 0, 0));
|
|
if (pane == null) {
|
|
throw new NullPointerException("TabbedPane is null");
|
|
}
|
|
|
|
this.pane = pane;
|
|
setOpaque(false);
|
|
JLabel label = new JLabel() {
|
|
public String getText() {
|
|
int i = pane.indexOfTabComponent(CloseButtonComponent.this);
|
|
if (i != -1) {
|
|
return pane.getTitleAt(i);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
};
|
|
|
|
add(label);
|
|
label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
|
|
JButton button = new CloseButton();
|
|
add(button);
|
|
|
|
JPopupMenu rightClickMenu = new JPopupMenu();
|
|
JMenuItem closeAllTabs = new JMenuItem(String.valueOf(TranslatedStrings.CLOSE_ALL_BUT_THIS));
|
|
JMenuItem closeTab = new JMenuItem(String.valueOf(TranslatedStrings.CLOSE_TAB));
|
|
|
|
rightClickMenu.add(closeAllTabs);
|
|
rightClickMenu.add(closeTab);
|
|
button.setComponentPopupMenu(rightClickMenu);
|
|
|
|
button.addMouseListener(new MouseClickedListener(e ->
|
|
{
|
|
if (pane.indexOfTabComponent(CloseButtonComponent.this) != -1)
|
|
pane.remove(pane.indexOfTabComponent(CloseButtonComponent.this));
|
|
}));
|
|
|
|
closeTab.addActionListener(e ->
|
|
{
|
|
if (pane.indexOfTabComponent(CloseButtonComponent.this) != -1)
|
|
pane.remove(pane.indexOfTabComponent(CloseButtonComponent.this));
|
|
});
|
|
closeAllTabs.addActionListener(e ->
|
|
{
|
|
|
|
while (true) {
|
|
if (pane.getTabCount() <= 1)
|
|
return;
|
|
|
|
if (pane.indexOfTabComponent(CloseButtonComponent.this) != 0)
|
|
pane.remove(0);
|
|
else
|
|
pane.remove(1);
|
|
}
|
|
});
|
|
|
|
setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));
|
|
}
|
|
|
|
}
|