package com.itgorillaz.lnk2pwn.view.form; import javax.annotation.PostConstruct; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.alee.laf.combobox.WebComboBox; import com.alee.laf.label.WebLabel; import com.alee.laf.panel.WebPanel; import com.alee.laf.text.WebTextField; import com.itgorillaz.lnk2pwn.model.Shortcut; import net.miginfocom.swing.MigLayout; @Component public class ShortcutInfoPanel extends WebPanel implements DocumentListener, ChangeListener { private static final long serialVersionUID = 4663408720514745622L; private final String DEFAULT_TARGET_PATH = "C:\\Windows\\System32\\cmd.exe"; private final String DEFAULT_WORKING_DIR = "C:\\Windows\\System32"; private final String DEFAULT_ARGUMENTS = "/c notepad.exe"; private final String DEFAULT_FAKE_EXTENSION = ".txt"; private final String DEFAULT_ICON_DLL = "C:\\Windows\\System32\\notepad.exe"; private final String[] WINDOW_STYLES = {"MINIMIZED", "MAXIMIZED", "NORMAL"}; private WebTextField targetPathField = new WebTextField(); private WebTextField workingDirField = new WebTextField(); private WebTextField argumentsField = new WebTextField(); private WebTextField shortcutFileNameField = new WebTextField(); private WebTextField fakeExtensionField = new WebTextField(); private WebTextField iconPathField = new WebTextField(); private WebTextField iconIndexField = new WebTextField(); private WebComboBox windowStyleComboBox = new WebComboBox(WINDOW_STYLES); @Autowired private Shortcut shortcut; @PostConstruct private void initComponents() { this.setLayout(new MigLayout("", "[grow]", "")); targetPathField.getDocument().addDocumentListener(this); workingDirField.getDocument().addDocumentListener(this); argumentsField.getDocument().addDocumentListener(this); shortcutFileNameField.getDocument().addDocumentListener(this); fakeExtensionField.getDocument().addDocumentListener(this); iconPathField.getDocument().addDocumentListener(this); iconIndexField.getDocument().addDocumentListener(this); targetPathField.setText(DEFAULT_TARGET_PATH); workingDirField.setText(DEFAULT_WORKING_DIR); argumentsField.setText(DEFAULT_ARGUMENTS); fakeExtensionField.setText(DEFAULT_FAKE_EXTENSION); iconPathField.setText(DEFAULT_ICON_DLL); WebPanel targetAndWorkingDirPanel = createTargetPathAndWorkingDirPanel(); WebPanel argumentsPanel = createArgumentsPanel(); WebPanel shortcutDetailsPanel = createShortcutDetailsPanel(); this.add(targetAndWorkingDirPanel, "grow,wrap"); this.add(argumentsPanel, "grow,wrap"); this.add(shortcutDetailsPanel, "grow,wrap"); } private WebPanel createTargetPathAndWorkingDirPanel() { MigLayout layout = new MigLayout("", "[grow][grow]", ""); WebPanel panel = new WebPanel(); panel.setLayout(layout); panel.add(new WebLabel("Target Path")); panel.add(new WebLabel("Working Dir"), "wrap"); panel.add(targetPathField, "grow"); panel.add(workingDirField, "grow"); return panel; } private WebPanel createArgumentsPanel() { MigLayout layout = new MigLayout("", "[grow]", ""); WebPanel panel = new WebPanel(); panel.setLayout(layout); panel.add(new WebLabel("Arguments"), "wrap"); panel.add(argumentsField, "grow"); return panel; } private WebPanel createShortcutDetailsPanel() { MigLayout layout = new MigLayout("", "[grow][grow][grow][][grow]", ""); WebPanel panel = new WebPanel(); panel.setLayout(layout); panel.add(new WebLabel("File Name")); panel.add(new WebLabel("Fake Extension")); panel.add(new WebLabel("Icon Location")); panel.add(new WebLabel("Icon Index")); panel.add(new WebLabel("Window Style"), "wrap"); panel.add(shortcutFileNameField, "grow"); panel.add(fakeExtensionField, "grow"); panel.add(iconPathField, "grow"); panel.add(iconIndexField, "grow"); panel.add(windowStyleComboBox, "grow"); return panel; } @Override public void changedUpdate(DocumentEvent arg0) { updateModel(); } @Override public void insertUpdate(DocumentEvent arg0) { updateModel(); } @Override public void removeUpdate(DocumentEvent arg0) { updateModel(); } @Override public void stateChanged(ChangeEvent arg0) { updateModel(); } private void updateModel() { Integer iconIndex = null; try { iconIndex = Integer.parseInt(iconIndexField.getText()); } catch(NumberFormatException e) { // do nothing } shortcut.setTargetPath(targetPathField.getText()); shortcut.setWorkingDir(workingDirField.getText()); shortcut.setArguments(argumentsField.getText()); shortcut.setFileName(shortcutFileNameField.getText()); shortcut.setFakeExtension(fakeExtensionField.getText()); shortcut.setIconLocation(iconPathField.getText()); shortcut.setIconIndex(iconIndex); shortcut.setWindowStyle(String.valueOf(windowStyleComboBox.getSelectedItem())); } }