Skip to content

Commit 66b8749

Browse files
authored
Merge pull request #462 from Bl3nd/master
Tab dragging
2 parents 99112cb + ae69116 commit 66b8749

6 files changed

Lines changed: 772 additions & 236 deletions

File tree

src/main/java/the/bytecode/club/bytecodeviewer/BytecodeViewer.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,6 @@
129129

130130
public class BytecodeViewer
131131
{
132-
//TODO fix this for tab dragging & better tab controls
133-
public static boolean EXPERIMENTAL_TAB_CODE = false;
134132

135133
//the launch args called on BCV
136134
public static String[] launchArgs;
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package the.bytecode.club.bytecodeviewer.gui.resourceviewer;
2+
3+
import com.android.tools.r8.internal.Cl;
4+
import com.github.weisj.darklaf.components.CloseButton;
5+
import com.github.weisj.darklaf.listener.MouseClickListener;
6+
import the.bytecode.club.bytecodeviewer.gui.components.listeners.MouseClickedListener;
7+
import the.bytecode.club.bytecodeviewer.translation.TranslatedStrings;
8+
9+
import javax.swing.*;
10+
import java.awt.*;
11+
import java.awt.event.ActionEvent;
12+
import java.awt.event.ActionListener;
13+
import java.awt.event.MouseEvent;
14+
import java.awt.event.MouseListener;
15+
16+
public class CloseButtonComponent extends JPanel {
17+
18+
private final JTabbedPane pane;
19+
20+
String title = "";
21+
22+
public CloseButtonComponent(final JTabbedPane pane) {
23+
super(new FlowLayout(FlowLayout.LEFT, 0, 0));
24+
if (pane == null) {
25+
throw new NullPointerException("TabbedPane is null");
26+
}
27+
28+
this.pane = pane;
29+
setOpaque(false);
30+
JLabel label = new JLabel() {
31+
public String getText() {
32+
int i = pane.indexOfTabComponent(CloseButtonComponent.this);
33+
if (i != -1) {
34+
return pane.getTitleAt(i);
35+
}
36+
37+
return null;
38+
}
39+
};
40+
41+
add(label);
42+
label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
43+
JButton button = new CloseButton();
44+
add(button);
45+
46+
JPopupMenu rightClickMenu = new JPopupMenu();
47+
JMenuItem closeAllTabs = new JMenuItem(String.valueOf(TranslatedStrings.CLOSE_ALL_BUT_THIS));
48+
JMenuItem closeTab = new JMenuItem(String.valueOf(TranslatedStrings.CLOSE_TAB));
49+
50+
rightClickMenu.add(closeAllTabs);
51+
rightClickMenu.add(closeTab);
52+
button.setComponentPopupMenu(rightClickMenu);
53+
54+
button.addMouseListener(new MouseClickedListener(e ->
55+
{
56+
if (pane.indexOfTabComponent(CloseButtonComponent.this) != -1)
57+
pane.remove(pane.indexOfTabComponent(CloseButtonComponent.this));
58+
}));
59+
60+
closeTab.addActionListener(e ->
61+
{
62+
if (pane.indexOfTabComponent(CloseButtonComponent.this) != -1)
63+
pane.remove(pane.indexOfTabComponent(CloseButtonComponent.this));
64+
});
65+
closeAllTabs.addActionListener(e ->
66+
{
67+
68+
while (true) {
69+
if (pane.getTabCount() <= 1)
70+
return;
71+
72+
if (pane.indexOfTabComponent(CloseButtonComponent.this) != 0)
73+
pane.remove(0);
74+
else
75+
pane.remove(1);
76+
}
77+
});
78+
79+
setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));
80+
}
81+
82+
}

0 commit comments

Comments
 (0)