提交 8e89a2ef 编写于 作者: M MrIkso 提交者: skylot

feat(gui): added option to always select opened file/class

上级 316c2fdd
......@@ -42,7 +42,7 @@ public class JadxSettings extends JadxCLIArgs {
private static final Path USER_HOME = Paths.get(System.getProperty("user.home"));
private static final int RECENT_PROJECTS_COUNT = 15;
private static final int CURRENT_SETTINGS_VERSION = 12;
private static final int CURRENT_SETTINGS_VERSION = 13;
private static final Font DEFAULT_FONT = new RSyntaxTextArea().getFont();
......@@ -68,6 +68,7 @@ public class JadxSettings extends JadxCLIArgs {
private boolean autoSaveProject = false;
private boolean showHeapUsageBar = false;
private boolean alwaysSelectOpened = false;
private Map<String, WindowLocation> windowPos = new HashMap<>();
private int mainWindowExtendedState = JFrame.NORMAL;
......@@ -242,6 +243,15 @@ public class JadxSettings extends JadxCLIArgs {
partialSync(settings -> settings.showHeapUsageBar = showHeapUsageBar);
}
public boolean isAlwaysSelectOpened() {
return alwaysSelectOpened;
}
public void setAlwaysSelectOpened(boolean showHeapUsageBar) {
this.alwaysSelectOpened = showHeapUsageBar;
partialSync(settings -> settings.alwaysSelectOpened = alwaysSelectOpened);
}
public String getExcludedPackages() {
return excludedPackages;
}
......@@ -607,6 +617,10 @@ public class JadxSettings extends JadxCLIArgs {
inlineMethods = true;
fromVersion++;
}
if (fromVersion == 12) {
alwaysSelectOpened = false;
fromVersion++;
}
if (fromVersion != CURRENT_SETTINGS_VERSION) {
throw new JadxRuntimeException("Incorrect settings upgrade");
}
......
......@@ -745,7 +745,7 @@ public class MainWindow extends JFrame {
return null;
}
private void syncWithEditor() {
public void syncWithEditor() {
ContentPanel selectedContentPanel = tabbedPane.getSelectedCodePanel();
if (selectedContentPanel == null) {
return;
......@@ -861,6 +861,12 @@ public class MainWindow extends JFrame {
heapUsageBar.setVisible(settings.isShowHeapUsageBar());
});
JCheckBoxMenuItem alwaysSelectOpened = new JCheckBoxMenuItem(NLS.str("menu.alwaysSelectOpened"));
alwaysSelectOpened.setState(settings.isAlwaysSelectOpened());
alwaysSelectOpened.addActionListener(event -> {
settings.setAlwaysSelectOpened(!settings.isAlwaysSelectOpened());
});
Action syncAction = new AbstractAction(NLS.str("menu.sync"), ICON_SYNC) {
@Override
public void actionPerformed(ActionEvent e) {
......@@ -999,6 +1005,7 @@ public class MainWindow extends JFrame {
view.add(flatPkgMenuItem);
view.add(syncAction);
view.add(heapUsageBarMenuItem);
view.add(alwaysSelectOpened);
JMenu nav = new JMenu(NLS.str("menu.navigation"));
nav.setMnemonic(KeyEvent.VK_N);
......
......@@ -51,9 +51,8 @@ public class TabComponent extends JPanel {
}
private void init() {
JPanel panel = this;
panel.setLayout(new FlowLayout(FlowLayout.CENTER, 3, 0));
panel.setOpaque(false);
setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
setOpaque(false);
JNode node = contentPanel.getNode();
String tabTitle;
......@@ -93,18 +92,18 @@ public class TabComponent extends JPanel {
menu.show(e.getComponent(), e.getX(), e.getY());
} else if (SwingUtilities.isLeftMouseButton(e)) {
if (tabbedPane.getSelectedComponent() != contentPanel) {
tabbedPane.setSelectedComponent(contentPanel);
tabbedPane.selectTab(contentPanel);
}
}
}
};
panel.addMouseListener(clickAdapter);
addMouseListener(clickAdapter);
label.addMouseListener(clickAdapter);
closeBtn.addMouseListener(clickAdapter);
panel.add(label);
panel.add(closeBtn);
panel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
add(label);
add(closeBtn);
setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
}
private JPopupMenu createTabPopupMenu(final ContentPanel contentPanel) {
......
......@@ -100,7 +100,7 @@ public class TabbedPane extends JTabbedPane {
}
}
if (doSwitch) {
setSelectedComponent(lastTab);
selectTab(lastTab);
}
}
} else if (consume && (e.getModifiersEx() & ctrlDown) == 0) {
......@@ -168,7 +168,7 @@ public class TabbedPane extends JTabbedPane {
return;
}
SwingUtilities.invokeLater(() -> {
setSelectedComponent(contentPanel);
selectTab(contentPanel);
AbstractCodeArea codeArea = contentPanel.getCodeArea();
int pos = jumpPos.getPos();
if (pos > 0) {
......@@ -206,7 +206,14 @@ public class TabbedPane extends JTabbedPane {
if (contentPanel == null) {
return;
}
SwingUtilities.invokeLater(() -> setSelectedComponent(contentPanel));
SwingUtilities.invokeLater(() -> selectTab(contentPanel));
}
public void selectTab(ContentPanel contentPanel) {
setSelectedComponent(contentPanel);
if (mainWindow.getSettings().isAlwaysSelectOpened()) {
mainWindow.syncWithEditor();
}
}
public void codeJump(JNode node) {
......@@ -231,7 +238,7 @@ public class TabbedPane extends JTabbedPane {
throw new JadxRuntimeException("Failed to open panel for JClass: " + cls);
}
} else {
setSelectedComponent(panel);
selectTab(panel);
}
ClassCodeContentPanel codePane = ((ClassCodeContentPanel) panel);
codePane.showSmaliPane();
......
......@@ -8,6 +8,7 @@ menu.preferences=Präferenzen
menu.sync=Mit Editor synchronisieren
menu.flatten=Codepaket erweitern
menu.heapUsageBar=Speicherverbrauchsleiste anzeigen
#menu.alwaysSelectOpened=Always Select Opened File/Class
menu.navigation=Navigation
menu.text_search=Textsuche
menu.class_search=Klassen-Suche
......
......@@ -8,6 +8,7 @@ menu.preferences=Preferences
menu.sync=Sync with editor
menu.flatten=Show flatten packages
menu.heapUsageBar=Show memory usage bar
menu.alwaysSelectOpened=Always Select Opened File/Class
menu.navigation=Navigation
menu.text_search=Text search
menu.class_search=Class search
......
......@@ -8,6 +8,7 @@ menu.preferences=Preferencias
menu.sync=Sincronizar con el editor
menu.flatten=Mostrar paquetes en vista plana
#menu.heapUsageBar=
#menu.alwaysSelectOpened=Always Select Opened File/Class
menu.navigation=Navegación
menu.text_search=Buscar texto
menu.class_search=Buscar clase
......
......@@ -8,6 +8,7 @@ menu.preferences=설정
menu.sync=에디터와 동기화
menu.flatten=플랫 패키지 표시
menu.heapUsageBar=메모리 사용량 표시
#menu.alwaysSelectOpened=Always Select Opened File/Class
menu.navigation=네비게이션
menu.text_search=텍스트 검색
menu.class_search=클래스 검색
......
......@@ -8,6 +8,7 @@ menu.preferences=首选项
menu.sync=与编辑器同步
menu.flatten=展开显示代码包
menu.heapUsageBar=显示内存使用栏
#menu.alwaysSelectOpened=Always Select Opened File/Class
menu.navigation=导航
menu.text_search=搜索文本
menu.class_search=搜索类
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册