Skip to content

Commit

Permalink
settings panel split to several tabes
Browse files Browse the repository at this point in the history
  • Loading branch information
judovana committed Oct 6, 2023
1 parent 0e82b3f commit 982cb02
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public class AgentSettingsPanel extends JPanel implements ChangeReporter {
private JFileChooser chooser;

AgentSettingsPanel(String initialAgentPath) {
this.setName("Agent settings");
agentPathTextField = new JTextField();
agentPathTextField.setToolTipText(
BytecodeDecompilerView.styleTooltip() + "Select a path to the Decompiler Agent.<br />" +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public CompilationSettingsPanel(
boolean initialOverwriteStValue
) {
compilationSettingsLabel = new JLabel("Compilation settings");
this.setName(compilationSettingsLabel.getText());
useHostSystemClassesCheckBox =
new JCheckBox("Use host system classes during compilation phase of class overwrite", initialUseHostSystemClasses);
useHostJavaLangObjectCheckBox =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,16 @@
import org.jrd.frontend.frame.filesystem.NewFsVmView;
import org.jrd.frontend.frame.main.decompilerview.BytecodeDecompilerView;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
Expand All @@ -30,29 +33,31 @@ public MiscellaneousSettingsPanel(
boolean detectAutocompletion
) {
miscSettingsLabel = new JLabel("Miscellaneous settings");
this.setName(miscSettingsLabel.getText());
useJavapSignaturesCheckBox = new JCheckBox("Use Javap signatures in Agent API insertion menu", initialUseJavapSignatures);
detectAutocompletionCheckBox = new JCheckBox("Detect and enable autocompletion in text editor", detectAutocompletion);
detectAutocompletionCheckBox.setToolTipText(
BytecodeDecompilerView.styleTooltip() + "for assemblers, the bytecode will be loaded.<br/>" + "For byteman, byteman.<br/>" +
"But for java, it depends on editor - in JRD it will runtime modification api"
);
this.setLayout(new GridBagLayout());
JPanel mainPanel = this;
mainPanel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets(5, 5, 5, 5);
gbc.gridwidth = 2;
gbc.weightx = 1; // required or else contents are centered

this.add(miscSettingsLabel, gbc);
mainPanel.add(miscSettingsLabel, gbc);

gbc.gridy = 1;
this.add(useJavapSignaturesCheckBox, gbc);
mainPanel.add(useJavapSignaturesCheckBox, gbc);
gbc.gridy = 2;
this.add(detectAutocompletionCheckBox, gbc);
mainPanel.add(detectAutocompletionCheckBox, gbc);
dependenceNumbers = new JComboBox(Config.DepndenceNumbers.values());
gbc.gridy = 3;
this.add(dependenceNumbers, gbc);
mainPanel.add(dependenceNumbers, gbc);
dependenceNumbers.addActionListener(a -> {
dependenceNumbers.setToolTipText(
BytecodeDecompilerView.styleTooltip() + ((Config.DepndenceNumbers) (dependenceNumbers.getSelectedItem())).description
Expand All @@ -74,14 +79,14 @@ public MiscellaneousSettingsPanel(
" it is good habit to have original source available."
);
srcPath.setToolTipText(aspl.getToolTipText());
this.add(aspl, gbc);
mainPanel.add(aspl, gbc);
gbc.gridy = 5;
this.add(srcPath, gbc);
mainPanel.add(srcPath, gbc);
gbc.weightx = 0;
gbc.gridwidth = 1;
gbc.gridx = 2;
JButton selectSrcPath = new JButton("...");
this.add(selectSrcPath, gbc);
mainPanel.add(selectSrcPath, gbc);
gbc.weightx = 0;
gbc.gridwidth = 1;
gbc.gridx = 1;
Expand All @@ -94,18 +99,42 @@ public MiscellaneousSettingsPanel(
"In addition, this classpath is used in standalone text editor's code completion"
);
classPath.setToolTipText(acpl.getToolTipText());
this.add(acpl, gbc);
mainPanel.add(acpl, gbc);
gbc.gridy = 7;
this.add(classPath, gbc);
mainPanel.add(classPath, gbc);
gbc.weightx = 0;
gbc.gridwidth = 1;
gbc.gridx = 2;
JButton selectClassPath = new JButton("...");
this.add(selectClassPath, gbc);

mainPanel.add(selectClassPath, gbc);
selectSrcPath.addActionListener(actionEvent -> NewFsVmView.CpNamePanel.selectCp(srcPath, selectSrcPath));
selectClassPath.addActionListener(actionEvent -> NewFsVmView.CpNamePanel.selectCp(classPath, selectClassPath));

gbc.weightx = 0;
gbc.gridwidth = 1;
gbc.gridx = 1;
gbc.gridy = 8;
JLabel additionalAgents = new JLabel("Byteman companion/additional agents:");
mainPanel.add(additionalAgents, gbc);
JRadioButton nothing = new JRadioButton("do nothing");
JRadioButton add = new JRadioButton("add them to remote vms");
JRadioButton ask = new JRadioButton("ask");
JRadioButton addAndSave = new JRadioButton("add them to remote vms and save");
gbc.weightx = 0;
gbc.gridwidth = 2;
gbc.gridx = 1;
gbc.gridy = 9;
JPanel radioPanel = new JPanel(new FlowLayout());
radioPanel.add(nothing);
radioPanel.add(ask);
radioPanel.add(add);
radioPanel.add(addAndSave);
ButtonGroup additionalAgentPlace = new ButtonGroup();
additionalAgentPlace.add(nothing);
additionalAgentPlace.add(ask);
additionalAgentPlace.add(add);
additionalAgentPlace.add(addAndSave);
ask.setSelected(true);
mainPanel.add(radioPanel, gbc);
}

public boolean shouldUseJavapSignatures() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public class NestedJarsSettingsPanel extends JPanel implements ChangeReporter {
this.setLayout(new GridBagLayout());

nestedJars = new JLabel("Nested Jars Settings:");
this.setName(nestedJars.getText());
newExtensionsTextField = new JTextField();
newExtensionsTextField.addKeyListener(new KeyAdapter() {
@Override
Expand Down Expand Up @@ -84,7 +85,7 @@ public void addAll(Collection<? extends String> c) {
}
});

useDefaults = new JCheckBox("Use default extensions");
useDefaults = new JCheckBox("Use default extensions for nested jars");
ActionListener a = new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
Expand All @@ -26,7 +28,8 @@

public class SettingsView extends JDialog {

private final JPanel mainPanel;
private final JPanel mainPanelWrapper;
private final JTabbedPane mainPanel;
private final AgentSettingsPanel agentSettingsPanel;
private final CompilationSettingsPanel compilationSettingsPanel;
private final NestedJarsSettingsPanel nestedJarsSettingsPanel;
Expand Down Expand Up @@ -67,29 +70,26 @@ public void actionPerformed(ActionEvent actionEvent) {

okCancelPanel = new JPanel(new GridBagLayout());
okCancelPanel.setPreferredSize(new Dimension(0, 60));
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.EAST;
gbc.fill = GridBagConstraints.BOTH;

gbc.gridy = 0;
gbc.weightx = 1;
okCancelPanel.add(Box.createHorizontalGlue(), gbc);

gbc.weightx = 0;
gbc.gridx = 1;
okCancelPanel.add(okButton, gbc);

gbc.gridx = 2;
okCancelPanel.add(Box.createHorizontalStrut(15), gbc);

gbc.gridx = 3;
okCancelPanel.add(cancelButton, gbc);
GridBagConstraints okGbc = new GridBagConstraints();
okGbc.anchor = GridBagConstraints.EAST;
okGbc.fill = GridBagConstraints.BOTH;
okGbc.gridy = 0;
okGbc.weightx = 1;
okCancelPanel.add(Box.createHorizontalGlue(), okGbc);
okGbc.weightx = 0;
okGbc.gridx = 1;
okCancelPanel.add(okButton, okGbc);
okGbc.gridx = 2;
okCancelPanel.add(Box.createHorizontalStrut(15), okGbc);
okGbc.gridx = 3;
okCancelPanel.add(cancelButton, okGbc);

agentSettingsPanel = new AgentSettingsPanel(config.getAgentRawPath());
compilationSettingsPanel = new CompilationSettingsPanel(
config.doUseHostSystemClasses(), config.getCompilerArgsString(), config.doUseHostJavaLangObject(), config.doOverwriteST()
);
nestedJarsSettingsPanel = new NestedJarsSettingsPanel();
nestedJarsSettingsPanel.setMinimumSize(new Dimension(200,200));
miscSettingsPanel = new MiscellaneousSettingsPanel(
config.doUseJavapSignatures(), config.doDepndenceNumbers(), config.getAdditionalCP(), config.getAdditionalSP(),
config.doAutocompletion()
Expand All @@ -102,46 +102,28 @@ public void actionPerformed(ActionEvent actionEvent) {
panel.setChangeReporter(e -> isChanged = true);
}

mainPanel = new JPanel(new GridBagLayout());
mainPanel.setBorder(new EmptyBorder(0, 15, 0, 15));
gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.BOTH;
gbc.anchor = GridBagConstraints.NORTHWEST;
gbc.insets = new Insets(10, 0, 10, 0);
gbc.weightx = 1;
mainPanelWrapper = new JPanel(new BorderLayout());
mainPanelWrapper.setBorder(new EmptyBorder(0, 15, 0, 15));
mainPanel = new JTabbedPane();

JTextField thisSettings = new JTextField(Config.getConfig().getConfFile().getAbsolutePath());
thisSettings.setEditable(false);
thisSettings.setFont(new Font("Monospaced", thisSettings.getFont().getStyle(), (thisSettings.getFont().getSize() * 2) / 3));
mainPanel.add(thisSettings, gbc);

gbc.gridy = 1;
mainPanel.add(agentSettingsPanel, gbc);

gbc.gridy = 2;
mainPanel.add(compilationSettingsPanel, gbc);

gbc.gridy = 3;
gbc.weighty = 1;
mainPanel.add(nestedJarsSettingsPanel, gbc);

gbc.gridy = 4;
gbc.weighty = 0;
mainPanel.add(miscSettingsPanel, gbc);

gbc.gridy = 5;
mainPanel.add(Box.createVerticalGlue(), gbc);

gbc.gridy = 6;
mainPanel.add(okCancelPanel, gbc);
mainPanelWrapper.add(thisSettings, BorderLayout.NORTH);
mainPanel.add(agentSettingsPanel);
mainPanel.add(compilationSettingsPanel);
mainPanel.add(nestedJarsSettingsPanel);
mainPanel.add(miscSettingsPanel);
mainPanelWrapper.add(mainPanel);
mainPanelWrapper.add(okCancelPanel, BorderLayout.SOUTH);

this.setTitle("Settings");
this.setSize(new Dimension(800, 850));
this.setSize(new Dimension(800, 600));
this.setMinimumSize(new Dimension(250, 600));
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setLocationRelativeTo(mainFrameView);
this.setModalityType(ModalityType.APPLICATION_MODAL);
this.add(mainPanel);
this.add(mainPanelWrapper);
//this.pack(); this would kill the layout due to nested jars suffxes big box
this.setVisible(true);
}
Expand Down

0 comments on commit 982cb02

Please sign in to comment.