Risiko94

SwingerUI.java

Oct 19th, 2021 (edited)
109
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package swingerclub;
  2.  
  3. import java.awt.EventQueue;
  4.  
  5. import javax.swing.JFrame;
  6. import javax.swing.JButton;
  7. import javax.swing.JPanel;
  8. import javax.swing.JTextPane;
  9. import javax.swing.JLabel;
  10. import javax.swing.JCheckBox;
  11. import javax.swing.JFileChooser;
  12. import javax.swing.border.EtchedBorder;
  13. import javax.swing.JRadioButton;
  14. import java.awt.Font;
  15. import main.DemoUtils;
  16. import main.Format;
  17. import main.TheGlue;
  18.  
  19. import javax.swing.ButtonGroup;
  20. import java.awt.event.ActionListener;
  21. import java.io.File;
  22. import java.io.IOException;
  23. import java.util.ArrayList;
  24. import java.awt.event.ActionEvent;
  25. import javax.swing.JScrollPane;
  26. import javax.swing.JTextArea;
  27.  
  28. public class SwingerUI {
  29.    
  30.     File[] files = new File[0];
  31.     private JFrame frmMainPanel;
  32.     private final ButtonGroup buttonGroup = new ButtonGroup();
  33.  
  34.     /**
  35.      * Launch the application.
  36.      */
  37.     public static void main(String[] args) {
  38.         EventQueue.invokeLater(new Runnable() {
  39.             public void run() {
  40.                 try {
  41.                     SwingerUI window = new SwingerUI();
  42.                     window.frmMainPanel.setVisible(true);
  43.                 } catch (Exception e) {
  44.                     e.printStackTrace();
  45.                 }
  46.             }
  47.         });
  48.     }
  49.  
  50.     /**
  51.      * Create the application.
  52.      */
  53.     public SwingerUI() {
  54.         initialize();
  55.     }
  56.  
  57.     /**
  58.      * Initialize the contents of the frame.
  59.      */
  60.     private void initialize() {
  61.         this.frmMainPanel = new JFrame();
  62.         this.frmMainPanel.setResizable(false);
  63.         this.frmMainPanel.setTitle("PRdemo file analyzer");
  64.         this.frmMainPanel.setBounds(100, 100, 445, 490);
  65.         this.frmMainPanel.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  66.         this.frmMainPanel.getContentPane().setLayout(null);
  67.  
  68.         JPanel panelData = new JPanel();
  69.         panelData.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
  70.         panelData.setBounds(20, 20, 180, 200);
  71.         this.frmMainPanel.getContentPane().add(panelData);
  72.         panelData.setLayout(null);
  73.  
  74.         JLabel lblInludedData = new JLabel("Inluded Data:");
  75.         lblInludedData.setFont(new Font("Tahoma", Font.PLAIN, 17));
  76.         lblInludedData.setBounds(10, 10, 160, 20);
  77.         panelData.add(lblInludedData);
  78.  
  79.         JCheckBox chckbxDecompressing = new JCheckBox("Decompressing Info");
  80.         chckbxDecompressing.addActionListener(new ActionListener() {
  81.             public void actionPerformed(ActionEvent e) {
  82.                 SwingerUI.this.buttonGroup.clearSelection();
  83.             }
  84.         });
  85.         chckbxDecompressing.setToolTipText("Show filepath & size before/after decompressing");
  86.         chckbxDecompressing.setBounds(10, 34, 140, 20);
  87.         chckbxDecompressing.setSelected(true);
  88.         panelData.add(chckbxDecompressing);
  89.  
  90.         JCheckBox chckbxServerdetails = new JCheckBox("Details of server");
  91.         chckbxServerdetails.addActionListener(new ActionListener() {
  92.             public void actionPerformed(ActionEvent e) {
  93.                 SwingerUI.this.buttonGroup.clearSelection();
  94.             }
  95.         });
  96.         chckbxServerdetails.setBounds(10, 57, 140, 20);
  97.         chckbxServerdetails.setSelected(true);
  98.         panelData.add(chckbxServerdetails);
  99.  
  100.         JCheckBox chckbxPlayer = new JCheckBox("Player joins/leaves");
  101.         chckbxPlayer.addActionListener(new ActionListener() {
  102.             public void actionPerformed(ActionEvent e) {
  103.                 SwingerUI.this.buttonGroup.clearSelection();
  104.             }
  105.         });
  106.         chckbxPlayer.setBounds(10, 80, 140, 20);
  107.         chckbxPlayer.setSelected(true);
  108.         panelData.add(chckbxPlayer);
  109.  
  110.         JCheckBox chckbxChat = new JCheckBox("Chat");
  111.         chckbxChat.addActionListener(new ActionListener() {
  112.             public void actionPerformed(ActionEvent e) {
  113.                 SwingerUI.this.buttonGroup.clearSelection();
  114.             }
  115.         });
  116.         chckbxChat.setBounds(10, 103, 140, 20);
  117.         chckbxChat.setSelected(true);
  118.         panelData.add(chckbxChat);
  119.  
  120.         JCheckBox chckbxKills = new JCheckBox("Kills");
  121.         chckbxKills.addActionListener(new ActionListener() {
  122.             public void actionPerformed(ActionEvent e) {
  123.                 SwingerUI.this.buttonGroup.clearSelection();
  124.             }
  125.         });
  126.         chckbxKills.setToolTipText("\"PlayerX killed PlayerY with WeaponZ\" Teamkills are not marked as such.");
  127.         chckbxKills.setBounds(10, 126, 140, 20);
  128.         chckbxKills.setSelected(true);
  129.         panelData.add(chckbxKills);
  130.  
  131.         JCheckBox chckbxTimestamps = new JCheckBox("Timestamps");
  132.         chckbxTimestamps.setToolTipText("not implemented");
  133.         chckbxTimestamps.setEnabled(false);
  134.         chckbxTimestamps.setBounds(10, 172, 140, 20);
  135.         panelData.add(chckbxTimestamps);
  136.        
  137.         JCheckBox chckbxRevives = new JCheckBox("Revives");
  138.         chckbxRevives.addActionListener(new ActionListener() {
  139.             public void actionPerformed(ActionEvent e) {
  140.                 SwingerUI.this.buttonGroup.clearSelection();
  141.             }
  142.         });
  143.         chckbxRevives.setBounds(10, 149, 97, 23);
  144.         chckbxRevives.setSelected(true);
  145.         panelData.add(chckbxRevives);
  146.  
  147.         JPanel panelFiles = new JPanel();
  148.         panelFiles.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
  149.         panelFiles.setBounds(20, 240, 400, 160);
  150.         this.frmMainPanel.getContentPane().add(panelFiles);
  151.         panelFiles.setLayout(null);
  152.  
  153.         JScrollPane scrollPane = new JScrollPane();
  154.         scrollPane.setBounds(10, 40, 380, 109);
  155.         panelFiles.add(scrollPane);
  156.  
  157.         JTextPane textListFiles = new JTextPane();
  158.         scrollPane.setViewportView(textListFiles);
  159.         textListFiles.setEditable(false);
  160.         textListFiles.setFont(new Font("Consolas", Font.PLAIN, 9));
  161.         textListFiles.setText("Found files appear here...");
  162.  
  163.         JButton btnSelectInputFolder = new JButton("Select inputfolder");
  164.         btnSelectInputFolder.addActionListener(new ActionListener() {
  165.             public void actionPerformed(ActionEvent e) {               
  166.                 JFileChooser chooser = new JFileChooser(System.getProperty("user.dir"));
  167.                 chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
  168.                 if (chooser.showOpenDialog(SwingerUI.this.frmMainPanel) == JFileChooser.APPROVE_OPTION) {
  169.                     String text = "";
  170.                     File[] selectedFiles = chooser.getSelectedFile().listFiles();
  171.                     ArrayList<File> myfiles = new ArrayList<File>();
  172.                     for (File i : selectedFiles){          
  173.                         if (DemoUtils.isCorrectFile(i)) {
  174.                             myfiles.add(i);
  175.                         }
  176.                     }
  177.                     SwingerUI.this.files = myfiles.toArray(new File[0]);
  178.                     for (File i : SwingerUI.this.files) {
  179.                         text += i.getName() + "\n";
  180.                     }
  181.                     textListFiles.setText(selectedFiles.length + " total files, " + SwingerUI.this.files.length + " PRdemo files found\n" + text);
  182.                 }
  183.  
  184.             }
  185.         });
  186.         btnSelectInputFolder.setBounds(10, 10, 160, 23);
  187.         panelFiles.add(btnSelectInputFolder);
  188.  
  189.         JButton btnSelectFiles = new JButton("Select files");
  190.         btnSelectFiles.addActionListener(new ActionListener() {
  191.             public void actionPerformed(ActionEvent e) {
  192.                 JFileChooser chooser = new JFileChooser(System.getProperty("user.dir"));
  193.                 chooser.setMultiSelectionEnabled(true);
  194.                 if (chooser.showOpenDialog(SwingerUI.this.frmMainPanel) == JFileChooser.APPROVE_OPTION) {
  195.                     String text = "";
  196.                     File[] selectedFiles = chooser.getSelectedFiles();
  197.                     ArrayList<File> myfiles = new ArrayList<File>();
  198.                     for (File i : selectedFiles){          
  199.                         if (DemoUtils.isCorrectFile(i)) {
  200.                             myfiles.add(i);
  201.                         }
  202.                     }
  203.                     SwingerUI.this.files = myfiles.toArray(new File[0]);
  204.                     for (File i : SwingerUI.this.files) {
  205.                         text += i.getName() + "\n";
  206.                     }
  207.                     textListFiles.setText(selectedFiles.length + " total files, " + SwingerUI.this.files.length + " PRdemo files found\n" + text);
  208.                 }
  209.             }
  210.         });
  211.         btnSelectFiles.setBounds(230, 10, 160, 23);
  212.         panelFiles.add(btnSelectFiles);
  213.  
  214.         JLabel lblOr = new JLabel("or");
  215.         lblOr.setFont(new Font("Tahoma", Font.PLAIN, 17));
  216.         lblOr.setBounds(192, 12, 16, 23);
  217.         panelFiles.add(lblOr);
  218.  
  219.         JPanel panelOptions = new JPanel();
  220.         panelOptions.setBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null));
  221.         panelOptions.setBounds(240, 20, 180, 200);
  222.         this.frmMainPanel.getContentPane().add(panelOptions);
  223.         panelOptions.setLayout(null);
  224.  
  225.         JLabel lblAdvancedOptions = new JLabel("Advanced Options:");
  226.         lblAdvancedOptions.setFont(new Font("Tahoma", Font.PLAIN, 17));
  227.         lblAdvancedOptions.setBounds(10, 10, 160, 20);
  228.         panelOptions.add(lblAdvancedOptions);
  229.  
  230.         JRadioButton rdbtnOnlyDecompress = new JRadioButton("Only decompress");
  231.         rdbtnOnlyDecompress.addActionListener(new ActionListener() {
  232.             public void actionPerformed(ActionEvent e) {
  233.                 chckbxDecompressing.setSelected(false);
  234.                 chckbxServerdetails.setSelected(false);
  235.                 chckbxPlayer.setSelected(false);
  236.                 chckbxChat.setSelected(false);
  237.                 chckbxKills.setSelected(false);
  238.                 chckbxRevives.setSelected(false);
  239.             }
  240.         });
  241.         this.buttonGroup.add(rdbtnOnlyDecompress);
  242.         rdbtnOnlyDecompress.setToolTipText("Do not create outputtextfiles. Instead create decompressed versions of the selected files.");
  243.         rdbtnOnlyDecompress.setBounds(10, 34, 160, 20);
  244.         panelOptions.add(rdbtnOnlyDecompress);
  245.  
  246.         JRadioButton rdbtnMaximumVerbosity = new JRadioButton("Verbose (VERY SLOW)");
  247.         rdbtnMaximumVerbosity.addActionListener(new ActionListener() {
  248.             public void actionPerformed(ActionEvent e) {
  249.                 chckbxDecompressing.setSelected(false);
  250.                 chckbxServerdetails.setSelected(false);
  251.                 chckbxPlayer.setSelected(false);
  252.                 chckbxChat.setSelected(false);
  253.                 chckbxKills.setSelected(false);
  254.                 chckbxRevives.setSelected(false);
  255.             }
  256.         });
  257.         this.buttonGroup.add(rdbtnMaximumVerbosity);
  258.         rdbtnMaximumVerbosity.setToolTipText("Output every information. Unknown messages will consist of an identifier and the data in bytes. ");
  259.         rdbtnMaximumVerbosity.setBounds(10, 57, 160, 20);
  260.         panelOptions.add(rdbtnMaximumVerbosity);
  261.        
  262.         JRadioButton rdbtnVerboseclean = new JRadioButton("Less verbose (SLOW)");
  263.         rdbtnVerboseclean.setToolTipText("skip Tick, Player_update, Vehicle_update & Projectiles");
  264.         rdbtnVerboseclean.addActionListener(new ActionListener() {
  265.             public void actionPerformed(ActionEvent e) {
  266.                 chckbxDecompressing.setSelected(false);
  267.                 chckbxServerdetails.setSelected(false);
  268.                 chckbxPlayer.setSelected(false);
  269.                 chckbxChat.setSelected(false);
  270.                 chckbxKills.setSelected(false);
  271.                 chckbxRevives.setSelected(false);
  272.             }
  273.         });
  274.         this.buttonGroup.add(rdbtnVerboseclean);
  275.         rdbtnVerboseclean.setBounds(10, 80, 160, 20);
  276.         panelOptions.add(rdbtnVerboseclean);
  277.  
  278.         JButton btnStart = new JButton("Start extracting");
  279.         btnStart.addActionListener(new ActionListener() {
  280.             public void actionPerformed(ActionEvent e) {
  281.                 try {
  282.                     if (SwingerUI.this.files.length > 0) {
  283.                         Format.showDecompressinginfo = chckbxDecompressing.isSelected();
  284.                         Format.showServerdetails = chckbxServerdetails.isSelected();
  285.                         Format.showChat = chckbxChat.isSelected();
  286.                         Format.showKills = chckbxKills.isSelected();
  287.                         Format.showPlayers = chckbxPlayer.isSelected();
  288.                         Format.showRevives = chckbxRevives.isSelected();
  289.                         Format.onlyDecompress = rdbtnOnlyDecompress.isSelected();
  290.                         Format.verbose = rdbtnMaximumVerbosity.isSelected();
  291.                         Format.cleanverbose = rdbtnVerboseclean.isSelected();
  292.                         TheGlue.derp(SwingerUI.this.files);
  293.                     }
  294.                 } catch (IOException e1) {
  295.                     e1.printStackTrace();
  296.                 }
  297.             }
  298.         });
  299.         btnStart.setFont(new Font("Tahoma", Font.PLAIN, 17));
  300.         btnStart.setBounds(20, 411, 160, 36);
  301.         this.frmMainPanel.getContentPane().add(btnStart);
  302.  
  303.         JButton btnExit = new JButton("Exit");
  304.         btnExit.addActionListener(new ActionListener() {
  305.             public void actionPerformed(ActionEvent arg0) {
  306.                 System.exit(0);
  307.             }
  308.         });
  309.         btnExit.setFont(new Font("Tahoma", Font.PLAIN, 17));
  310.         btnExit.setBounds(260, 411, 160, 36);
  311.         this.frmMainPanel.getContentPane().add(btnExit);
  312.     }
  313. }
  314.  
RAW Paste Data