package modmanager.gui;
import org.apache.log4j.Logger;
import org.jdesktop.application.Application;
import org.jdesktop.application.Task;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JEditorPane;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JToggleButton;
import javax.swing.ToolTipManager;
import javax.swing.JPanel;
import javax.swing.ButtonGroup;
import javax.swing.DefaultListModel;
import javax.swing.JProgressBar;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.JDialog;
import javax.swing.UIManager;
import java.awt.Toolkit;
import java.awt.event.ActionListener;
import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.BorderLayout;
import java.awt.Dimension;
import modmanager.controller.Manager;
import modmanager.business.ManagerOptions;
import modmanager.business.Mod;
import modmanager.business.modactions.Action;
import modmanager.business.modactions.ActionRequirement;
import modmanager.gui.l10n.L10n;
import java.awt.event.MouseEvent;
import java.io.File;
import modmanager.utility.BBCode;
import modmanager.utility.Game;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;
import java.util.Iterator;
import java.net.URL;
import modmanager.utility.Constants;
import modmanager.utility.OS;
/**
* Main form of the ModManager. This class is the 'view' part of the MVC framework
*
* @author Shirkit, Kovo
*/
public class ManagerGUI extends javax.swing.JFrame implements Observer {
// Model for this View (part of MVC pattern)
private static ManagerGUI instance = null;
private Manager controller;
private ManagerOptions model;
private static Logger logger = Logger.getLogger(ManagerGUI.class.getPackage().getName());
// Column names of the mod list table
boolean animating = false;
public boolean fullyLoaded = false;
/**
* Creates the main form
* @param model model part of the MVC framework
*/
private ManagerGUI() {
ToolTipManager tip = ToolTipManager.sharedInstance();
tip.setInitialDelay(20);
tip.setDismissDelay(10000);
logger.info("Initializing gui");
this.model = ManagerOptions.getInstance();
this.controller = Manager.getInstance();
ManagerOptions.getInstance().addObserver(this);
// Registration for Synthetica Look and Feel
//String[] li = {"Licensee=Pedro Torres", "LicenseRegistrationNumber=NCPT200729", "Product=Synthetica", "LicenseType=Non Commercial", "ExpireDate=--.--.----", "MaxVersion=2.999.999"};
//UIManager.put("Synthetica.license.info", li);
//UIManager.put("Synthetica.license.key", "644E94EB-97019D70-E7B56201-11EE0820-82B6C8DC");
initComponents();
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
// Set application icon
try {
URL urlImage = this.getClass().getResource("resources/icon.png");
this.setIconImage(Toolkit.getDefaultToolkit().getImage(urlImage));
dialogOptions.setIconImage(Toolkit.getDefaultToolkit().getImage(urlImage));
} catch (Exception e) {
logger.warn("Cannot find application icon");
}
// Set model of the language combo box. New languages need to be added here
comboBoxChooseLanguage.addItem(new Language("German", "de"));
comboBoxChooseLanguage.addItem(new Language("English", "en"));
comboBoxChooseLanguage.addItem(new Language("Spanish", "es"));
comboBoxChooseLanguage.addItem(new Language("Itallian", "it"));
comboBoxChooseLanguage.addItem(new Language("Norwegian", "no"));
comboBoxChooseLanguage.addItem(new Language("Polish", "pl"));
comboBoxChooseLanguage.addItem(new Language("Portuguese (Brazil)", "pt_BR"));
comboBoxChooseLanguage.addItem(new Language("Russian", "ru"));
comboBoxChooseLanguage.addItem(new Language("Slovak", "sk"));
comboBoxChooseLanguage.addItem(new Language("~Strings Code Table", "strings"));
comboBoxChooseLanguage.addItem(new Language("Swedish", "sv"));
comboBoxChooseLanguage.addItem(new Language("Turkish", "tr"));
//comboBoxChooseLanguage.addItem(new Language("Chinese (Traditional)", "zh"));
comboBoxChooseLanguage.addItem(new Language("~Local HonModMan.properties file", "file"));
// Set model of the LaF combobox. This will not be localized
//comboBoxLafs.addItem(new LaF("Default", UIManager.getSystemLookAndFeelClassName()));
//comboBoxLafs.addItem(new LaF("Metal", UIManager.getCrossPlatformLookAndFeelClassName()));
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
comboBoxLafs.addItem(new LaF(info.getName(), info.getClassName()));
}
//comboBoxLafs.addItem(new LaF("Synthetica", "de.javasoft.plaf.synthetica.SyntheticaStandardLookAndFeel"));
comboBoxLafs.addItem(new LaF("JGoodies PlasticXP", "com.jgoodies.looks.plastic.PlasticXPLookAndFeel"));
comboBoxLafs.addItem(new LaF("JGoodies Plastic", "com.jgoodies.looks.plastic.PlasticLookAndFeel"));
comboBoxLafs.addItem(new LaF("JGoodies Plastic3D", "com.jgoodies.looks.plastic.Plastic3DLookAndFeel"));
comboBoxLafs.addItem(new LaF("JGoodies Windows", "com.jgoodies.looks.windows.WindowsLookAndFeel"));
// Components on the Mod details panel are not visible by default
setDetailsVisible(false);
// This thing here is working along with formComponentShown to solve the fucking bug of not showing the correct size when running the app
this.setResizable(false);
// Change default close operation to this
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
itemExit.doClick();
}
});
// Disable the Export menu
jMenu1.setVisible(false);
getProgressBar().setStringPainted(false);
updateModTable();
}
/**
* This method is used to get the running instance of the ManagerGUI class.
* @return the instance.
* @see get()
*/
private static boolean instanceCreated = false;
public static ManagerGUI getInstance() {
// Using just "instance == null" leads to issues when code called from
// the constructor calls this method. So, I've replaced it with a
// static boolean.
if (!instanceCreated) {
instanceCreated = true;
instance = new ManagerGUI();
}
return instance;
}
public static ManagerGUI newInstance() {
instance = new ManagerGUI();
return instance;
}
/**
* Prepares the popup (right click) menu to appear for a given mod.
* @param mod the mod to prepare the popup for.
*/
public void preparePopupMenu(Mod mod) {
if (mod.isEnabled()) {
popupItemMenuEnableDisableMod.setText(L10n.getString("button.disablemod"));
} else {
popupItemMenuEnableDisableMod.setText(L10n.getString("button.enablemod"));
}
if (mod.getUpdateCheckUrl() == null || mod.getUpdateDownloadUrl() == null
|| mod.getUpdateCheckUrl().isEmpty() || mod.getUpdateDownloadUrl().isEmpty()) {
popupItemMenuUpdateMod.setEnabled(false);
} else {
popupItemMenuUpdateMod.setEnabled(true);
popupItemMenuUpdateMod.setActionCommand(mod.getName());
}
popupItemMenuEnableDisableMod.setActionCommand(mod.getName());
if (mod.getChangelog() == null || mod.getChangelog().isEmpty()) {
popupItemMenuViewChangelog.setEnabled(false);
} else {
popupItemMenuViewChangelog.setEnabled(true);
popupItemMenuViewChangelog.setActionCommand("display changelog");
}
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
dialogOptions = new javax.swing.JDialog();
labelHonFolder = new javax.swing.JLabel();
textFieldHonFolder = new javax.swing.JTextField();
buttonHonFolder = new javax.swing.JButton();
comboBoxLafs = new javax.swing.JComboBox() {
public void addItem(Object anObject) {
int size = ((DefaultComboBoxModel) dataModel).getSize();
Object obj;
boolean added = false;
for (int i=0; i<size; i++) {
obj = dataModel.getElementAt(i);
int compare = anObject.toString().compareToIgnoreCase(obj.toString());
if (compare <= 0) { // if anObject less than or equal obj
super.insertItemAt(anObject, i);
added = true;
break;
}
}
if (!added) {
super.addItem(anObject);
}
}
};
buttonApplyLaf = new javax.swing.JButton();
buttonCancel = new javax.swing.JButton();
buttonOk = new javax.swing.JButton();
labelChooseLanguage = new javax.swing.JLabel();
comboBoxChooseLanguage = new javax.swing.JComboBox(){
public void addItem(Object anObject) {
int size = ((DefaultComboBoxModel) dataModel).getSize();
Object obj;
boolean added = false;
for (int i=0; i<size; i++) {
obj = dataModel.getElementAt(i);
int compare = anObject.toString().compareToIgnoreCase(obj.toString());
if (compare <= 0) { // if anObject less than or equal obj
super.insertItemAt(anObject, i);
added = true;
break;
}
}
if (!added) {
super.addItem(anObject);
}
}
};
labelCLArguments = new javax.swing.JLabel();
textFieldCLArguments = new javax.swing.JTextField();
labelChangeLanguageImplication = new javax.swing.JLabel();
buttonModsFolder = new javax.swing.JButton();
labelModsFolder = new javax.swing.JLabel();
textFieldModsFolder = new javax.swing.JTextField();
labelChooseLookAndFeel = new javax.swing.JLabel();
checkBoxIgnoreGameVersion = new javax.swing.JCheckBox();
checkBoxAutoUpdate = new javax.swing.JCheckBox();
checkBoxDeveloperMode = new javax.swing.JCheckBox();
buttonApplyLanguage = new javax.swing.JButton();
checkBoxDeleteFolderTree = new javax.swing.JCheckBox();
textFieldDevelopingMod = new javax.swing.JTextField();
buttonDevelopingMod = new javax.swing.JButton();
rightClickTableMenu = new javax.swing.JPopupMenu();
popupItemMenuEnableDisableMod = new javax.swing.JMenuItem();
popupItemMenuUpdateMod = new javax.swing.JMenuItem();
popupItemMenuVisitWebsite = new javax.swing.JMenuItem();
popupItemMenuViewChangelog = new javax.swing.JMenuItem();
popupItemMenuDeleteMod = new javax.swing.JMenuItem();
panelModList = new javax.swing.JPanel();
progressBar = new javax.swing.JProgressBar(0,100);
buttonApplyMods = new javax.swing.JButton();
buttonAddMod = new javax.swing.JButton();
panelModChangelog = new javax.swing.JPanel();
panelChangelogLabelModIcon = new javax.swing.JLabel();
panelChangelogLabelModName = new javax.swing.JLabel();
panelChangelogLabelModAuthor = new javax.swing.JLabel();
buttonViewModDetails = new javax.swing.JButton();
panelChangelogScrollpaneChangelogEditorPane = new javax.swing.JScrollPane();
panelChangelogEditorPane = new javax.swing.JEditorPane();
panelModDetails = new javax.swing.JPanel();
labelModIcon = new javax.swing.JLabel();
labelModName = new javax.swing.JLabel();
labelModAuthor = new javax.swing.JLabel();
panelModDescription = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
areaModDesc = new javax.swing.JEditorPane();
labelRequirements = new javax.swing.JLabel();
jScrollPane3 = new javax.swing.JScrollPane();
listRequirements = new javax.swing.JList();
buttonEnableMod = new javax.swing.JButton();
buttonUpdateMod = new javax.swing.JButton();
buttonVisitWebsite = new javax.swing.JButton();
buttonViewChagelog = new javax.swing.JButton();
buttonLaunchHon = new javax.swing.JButton();
labelStatus = new javax.swing.JLabel();
modsTable = new modmanager.gui.ModsTable();
mainMenu = new javax.swing.JMenuBar();
menuFile = new javax.swing.JMenu();
itemApplyMods = new javax.swing.JMenuItem();
itemApplyAndLaunch = new javax.swing.JMenuItem();
itemUnapplyAllMods = new javax.swing.JMenuItem();
jSeparator1 = new javax.swing.JPopupMenu.Separator();
itemOpenModFolder = new javax.swing.JMenuItem();
itemImportFromOldModManager = new javax.swing.JMenuItem();
jSeparator3 = new javax.swing.JPopupMenu.Separator();
jMenu1 = new javax.swing.JMenu();
itemExportOverview = new javax.swing.JMenuItem();
jSeparator7 = new javax.swing.JPopupMenu.Separator();
itemDownloadModUpdates = new javax.swing.JMenuItem();
jSeparator2 = new javax.swing.JPopupMenu.Separator();
itemExit = new javax.swing.JMenuItem();
menuOptions = new javax.swing.JMenu();
itemOpenPreferences = new javax.swing.JMenuItem();
itemRefresh = new javax.swing.JMenuItem();
menuView = new javax.swing.JMenu();
ButtonGroup viewModesGroup = new ButtonGroup();
itemViewDetails = new javax.swing.JRadioButtonMenuItem();
itemViewIcons = new javax.swing.JRadioButtonMenuItem();
itemViewDetailedIcons = new javax.swing.JRadioButtonMenuItem();
itemViewTiles = new javax.swing.JRadioButtonMenuItem();
jSeparator6 = new javax.swing.JPopupMenu.Separator();
itemUseSmallIcons = new javax.swing.JCheckBoxMenuItem();
menuHelp = new javax.swing.JMenu();
itemVisitForumThread = new javax.swing.JMenuItem();
jSeparator4 = new javax.swing.JPopupMenu.Separator();
itemAbout = new javax.swing.JMenuItem();
dialogOptions.setTitle(L10n.getString("prefs.dialog.title"));
dialogOptions.setMinimumSize(new java.awt.Dimension(550, 300));
dialogOptions.setModal(true);
dialogOptions.setName("dialogOptions"); // NOI18N
dialogOptions.setResizable(false);
labelHonFolder.setText(L10n.getString("prefs.label.honfolder"));
labelHonFolder.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
labelHonFolder.setName("labelHonFolder"); // NOI18N
textFieldHonFolder.setName("textFieldHonFolder"); // NOI18N
buttonHonFolder.setText(L10n.getString("prefs.button.change"));
buttonHonFolder.setMinimumSize(new java.awt.Dimension(70, 25));
buttonHonFolder.setName("buttonHonFolder"); // NOI18N
buttonHonFolder.setPreferredSize(new java.awt.Dimension(70, 25));
comboBoxLafs.setName("comboBoxLafs"); // NOI18N
buttonApplyLaf.setText(L10n.getString("prefs.button.apply"));
buttonApplyLaf.setMinimumSize(new java.awt.Dimension(70, 25));
buttonApplyLaf.setName("buttonApplyLaf"); // NOI18N
buttonApplyLaf.setPreferredSize(new java.awt.Dimension(70, 25));
buttonCancel.setText(L10n.getString("button.cancel"));
buttonCancel.setName("buttonCancel"); // NOI18N
buttonOk.setText(L10n.getString("button.ok"));
buttonOk.setName("buttonOk"); // NOI18N
labelChooseLanguage.setText(L10n.getString("prefs.label.chooselanguage"));
labelChooseLanguage.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
labelChooseLanguage.setName("labelChooseLanguage"); // NOI18N
comboBoxChooseLanguage.setName("comboBoxChooseLanguage"); // NOI18N
labelCLArguments.setText(L10n.getString("prefs.label.clarguments"));
labelCLArguments.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
labelCLArguments.setName("labelCLArguments"); // NOI18N
textFieldCLArguments.setName("textFieldCLArguments"); // NOI18N
labelChangeLanguageImplication.setFont(new java.awt.Font("Tahoma", 0, 10));
labelChangeLanguageImplication.setText(L10n.getString("prefs.label.languagechanges"));
labelChangeLanguageImplication.setName("labelChangeLanguageImplication"); // NOI18N
labelChangeLanguageImplication.setVisible(false);
buttonModsFolder.setText(L10n.getString("prefs.button.change"));
buttonModsFolder.setMinimumSize(new java.awt.Dimension(70, 25));
buttonModsFolder.setName("buttonModsFolder"); // NOI18N
buttonModsFolder.setPreferredSize(new java.awt.Dimension(70, 25));
labelModsFolder.setText(L10n.getString("prefs.label.modsfolder"));
labelModsFolder.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
labelModsFolder.setName("labelModsFolder"); // NOI18N
textFieldModsFolder.setName("textFieldModsFolder"); // NOI18N
labelChooseLookAndFeel.setText(L10n.getString("prefs.label.lookandfeel"));
labelChooseLookAndFeel.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
labelChooseLookAndFeel.setName("labelChooseLookAndFeel"); // NOI18N
checkBoxIgnoreGameVersion.setText(L10n.getString("prefs.label.ignoregameversion"));
checkBoxIgnoreGameVersion.setToolTipText(L10n.getString("tooltip.prefs.ignoregameversion"));
checkBoxIgnoreGameVersion.setName("checkBoxIgnoreGameVersion"); // NOI18N
checkBoxAutoUpdate.setText(L10n.getString("prefs.label.autoupdate"));
checkBoxAutoUpdate.setName("checkBoxAutoUpdate"); // NOI18N
checkBoxDeveloperMode.setText(L10n.getString("prefs.label.developermode"));
checkBoxDeveloperMode.setToolTipText(L10n.getString("tooltip.prefs.developermode"));
checkBoxDeveloperMode.setName("checkBoxDeveloperMode"); // NOI18N
checkBoxDeveloperMode.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
checkBoxDeveloperModeActionPerformed(evt);
}
});
buttonApplyLanguage.setText(L10n.getString("prefs.button.apply"));
buttonApplyLanguage.setMinimumSize(new java.awt.Dimension(70, 25));
buttonApplyLanguage.setName("buttonApplyLanguage"); // NOI18N
buttonApplyLanguage.setPreferredSize(new java.awt.Dimension(70, 25));
checkBoxDeleteFolderTree.setText(L10n.getString("prefs.label.deletefoldertree"));
checkBoxDeleteFolderTree.setToolTipText(L10n.getString("tooltip.prefs.deletefoldertree"));
checkBoxDeleteFolderTree.setName("checkBoxDeleteFolderTree"); // NOI18N
checkBoxDeleteFolderTree.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
checkBoxDeleteFolderTreeMouseClicked(evt);
}
});
textFieldDevelopingMod.setToolTipText(L10n.getString("tooltip.prefs.developingmod"));
textFieldDevelopingMod.setName("textFieldDevelopingMod"); // NOI18N
buttonDevelopingMod.setText(L10n.getString("prefs.button.browse"));
buttonDevelopingMod.setName("buttonDevelopingMod"); // NOI18N
javax.swing.GroupLayout dialogOptionsLayout = new javax.swing.GroupLayout(dialogOptions.getContentPane());
dialogOptions.getContentPane().setLayout(dialogOptionsLayout);
dialogOptionsLayout.setHorizontalGroup(
dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(dialogOptionsLayout.createSequentialGroup()
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(dialogOptionsLayout.createSequentialGroup()
.addGap(24, 24, 24)
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(labelChangeLanguageImplication, javax.swing.GroupLayout.PREFERRED_SIZE, 479, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(dialogOptionsLayout.createSequentialGroup()
.addGap(307, 307, 307)
.addComponent(buttonOk, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(7, 7, 7)
.addComponent(buttonCancel, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGroup(dialogOptionsLayout.createSequentialGroup()
.addContainerGap()
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(dialogOptionsLayout.createSequentialGroup()
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(labelChooseLookAndFeel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(labelChooseLanguage, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(labelHonFolder, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(labelModsFolder, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(labelCLArguments, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 121, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(textFieldHonFolder, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
.addComponent(comboBoxChooseLanguage, javax.swing.GroupLayout.Alignment.LEADING, 0, 400, Short.MAX_VALUE)
.addComponent(textFieldModsFolder, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
.addComponent(comboBoxLafs, javax.swing.GroupLayout.Alignment.LEADING, 0, 400, Short.MAX_VALUE)
.addComponent(textFieldCLArguments, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)))
.addGroup(dialogOptionsLayout.createSequentialGroup()
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(checkBoxAutoUpdate, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(checkBoxIgnoreGameVersion, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 179, Short.MAX_VALUE)
.addComponent(checkBoxDeleteFolderTree, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(checkBoxDeveloperMode, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(textFieldDevelopingMod, javax.swing.GroupLayout.DEFAULT_SIZE, 344, Short.MAX_VALUE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(buttonApplyLanguage, javax.swing.GroupLayout.DEFAULT_SIZE, 135, Short.MAX_VALUE)
.addComponent(buttonModsFolder, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 135, Short.MAX_VALUE)
.addComponent(buttonHonFolder, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 135, Short.MAX_VALUE)
.addComponent(buttonApplyLaf, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 135, Short.MAX_VALUE)
.addComponent(buttonDevelopingMod, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
.addContainerGap())
);
dialogOptionsLayout.setVerticalGroup(
dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(dialogOptionsLayout.createSequentialGroup()
.addContainerGap()
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(labelHonFolder)
.addComponent(textFieldHonFolder, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonHonFolder, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(labelModsFolder)
.addComponent(buttonModsFolder, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(textFieldModsFolder, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(labelCLArguments)
.addComponent(textFieldCLArguments, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(labelChooseLookAndFeel)
.addComponent(comboBoxLafs, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonApplyLaf, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(labelChooseLanguage)
.addComponent(comboBoxChooseLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonApplyLanguage, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(20, 20, 20)
.addComponent(checkBoxIgnoreGameVersion)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(checkBoxAutoUpdate)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(checkBoxDeveloperMode)
.addComponent(textFieldDevelopingMod, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonDevelopingMod))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(checkBoxDeleteFolderTree)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 43, Short.MAX_VALUE)
.addComponent(labelChangeLanguageImplication)
.addGap(7, 7, 7)
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(buttonOk)
.addComponent(buttonCancel))
.addContainerGap())
);
rightClickTableMenu.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));
rightClickTableMenu.setName("rightClickTableMenu"); // NOI18N
popupItemMenuEnableDisableMod.setName("popupItemMenuEnableDisableMod"); // NOI18N
rightClickTableMenu.add(popupItemMenuEnableDisableMod);
popupItemMenuUpdateMod.setText(L10n.getString("button.updatemod"));
popupItemMenuUpdateMod.setName("popupItemMenuUpdateMod"); // NOI18N
rightClickTableMenu.add(popupItemMenuUpdateMod);
popupItemMenuVisitWebsite.setText(L10n.getString("button.visitwebsite"));
popupItemMenuVisitWebsite.setName("popupItemMenuVisitWebsite"); // NOI18N
rightClickTableMenu.add(popupItemMenuVisitWebsite);
popupItemMenuViewChangelog.setText(L10n.getString("button.viewchangelog"));
popupItemMenuViewChangelog.setName("popupItemMenuViewChangelog"); // NOI18N
rightClickTableMenu.add(popupItemMenuViewChangelog);
popupItemMenuDeleteMod.setText(L10n.getString("button.deletemod"));
popupItemMenuDeleteMod.setName("popupItemMenuDeleteMod"); // NOI18N
rightClickTableMenu.add(popupItemMenuDeleteMod);
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
setTitle(L10n.getString("application.title"));
setMinimumSize(new java.awt.Dimension(900, 650));
setName("Form"); // NOI18N
addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentShown(java.awt.event.ComponentEvent evt) {
formComponentShown(evt);
}
});
panelModList.setMinimumSize(new java.awt.Dimension(400, 250));
panelModList.setName("panelModList"); // NOI18N
panelModList.setPreferredSize(new java.awt.Dimension(925, 800));
progressBar.setStringPainted(true);
progressBar.setEnabled(false);
progressBar.setName("progressBar"); // NOI18N
buttonApplyMods.setText(L10n.getString("button.applymods"));
buttonApplyMods.setToolTipText(L10n.getString("tooltip.button.apply"));
buttonApplyMods.setName("buttonApplyMods"); // NOI18N
buttonAddMod.setText(L10n.getString("button.addmod"));
buttonAddMod.setToolTipText(L10n.getString("tooltip.button.addhonmod"));
buttonAddMod.setName("buttonAddMod"); // NOI18N
panelModChangelog.setBorder(javax.swing.BorderFactory.createTitledBorder(" "+L10n.getString("panel.details.label")+" "));
panelModChangelog.setMinimumSize(new java.awt.Dimension(0, 250));
panelModChangelog.setName("panelModChangelog"); // NOI18N
panelModChangelog.setPreferredSize(new java.awt.Dimension(450, 420));
panelChangelogLabelModIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/modmanager/gui/resources/icon.png"))); // NOI18N
panelChangelogLabelModIcon.setName("panelChangelogLabelModIcon"); // NOI18N
panelChangelogLabelModName.setFont(panelChangelogLabelModName.getFont().deriveFont(panelChangelogLabelModName.getFont().getStyle() | java.awt.Font.BOLD, panelChangelogLabelModName.getFont().getSize()+1));
panelChangelogLabelModName.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
panelChangelogLabelModName.setText("mod name");
panelChangelogLabelModName.setToolTipText("This is the Mod's name"); // NOI18N
panelChangelogLabelModName.setName("panelChangelogLabelModName"); // NOI18N
panelChangelogLabelModAuthor.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
panelChangelogLabelModAuthor.setText("mod author");
panelChangelogLabelModAuthor.setToolTipText("This is the Mod's author"); // NOI18N
panelChangelogLabelModAuthor.setName("panelChangelogLabelModAuthor"); // NOI18N
buttonViewModDetails.setText(L10n.getString("button.viewmoddetails"));
buttonViewModDetails.setToolTipText("Return to the Mod details view");
buttonViewModDetails.setName("buttonViewModDetails"); // NOI18N
panelChangelogScrollpaneChangelogEditorPane.setName("panelChangelogScrollpaneChangelogEditorPane"); // NOI18N
panelChangelogEditorPane.setContentType("text/html");
panelChangelogEditorPane.setEditable(false);
panelChangelogEditorPane.setName("panelChangelogEditorPane"); // NOI18N
panelChangelogScrollpaneChangelogEditorPane.setViewportView(panelChangelogEditorPane);
javax.swing.GroupLayout panelModChangelogLayout = new javax.swing.GroupLayout(panelModChangelog);
panelModChangelog.setLayout(panelModChangelogLayout);
panelModChangelogLayout.setHorizontalGroup(
panelModChangelogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelModChangelogLayout.createSequentialGroup()
.addContainerGap()
.addGroup(panelModChangelogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panelChangelogScrollpaneChangelogEditorPane, javax.swing.GroupLayout.DEFAULT_SIZE, 418, Short.MAX_VALUE)
.addGroup(panelModChangelogLayout.createSequentialGroup()
.addComponent(panelChangelogLabelModIcon)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panelModChangelogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panelChangelogLabelModAuthor, javax.swing.GroupLayout.PREFERRED_SIZE, 184, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(panelChangelogLabelModName, javax.swing.GroupLayout.PREFERRED_SIZE, 184, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(buttonViewModDetails, javax.swing.GroupLayout.DEFAULT_SIZE, 418, Short.MAX_VALUE))
.addContainerGap())
);
panelModChangelogLayout.setVerticalGroup(
panelModChangelogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelModChangelogLayout.createSequentialGroup()
.addGroup(panelModChangelogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panelChangelogLabelModIcon)
.addGroup(panelModChangelogLayout.createSequentialGroup()
.addComponent(panelChangelogLabelModName)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(panelChangelogLabelModAuthor)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(panelChangelogScrollpaneChangelogEditorPane, javax.swing.GroupLayout.DEFAULT_SIZE, 497, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(buttonViewModDetails)
.addContainerGap())
);
panelModDetails.setBorder(javax.swing.BorderFactory.createTitledBorder(" "+L10n.getString("panel.details.label")+" "));
panelModDetails.setMinimumSize(new java.awt.Dimension(0, 250));
panelModDetails.setName("panelModDetails"); // NOI18N
panelModDetails.setPreferredSize(new java.awt.Dimension(300, 420));
labelModIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/modmanager/gui/resources/icon.png"))); // NOI18N
labelModIcon.setName("labelModIcon"); // NOI18N
labelModName.setFont(labelModName.getFont().deriveFont(labelModName.getFont().getStyle() | java.awt.Font.BOLD, labelModName.getFont().getSize()+1));
labelModName.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
labelModName.setText("mod name"); // NOI18N
labelModName.setToolTipText(""); // NOI18N
labelModName.setName("labelModName"); // NOI18N
labelModAuthor.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
labelModAuthor.setText("mod author");
labelModAuthor.setToolTipText(""); // NOI18N
labelModAuthor.setName("labelModAuthor"); // NOI18N
panelModDescription.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
panelModDescription.setName("panelModDescription"); // NOI18N
panelModDescription.setOpaque(false);
jScrollPane2.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
jScrollPane2.setName("jScrollPane2"); // NOI18N
areaModDesc.setBackground(new java.awt.Color(240, 240, 240));
areaModDesc.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
areaModDesc.setContentType("text/html"); // NOI18N
areaModDesc.setEditable(false);
areaModDesc.setFont(buttonAddMod.getFont());
areaModDesc.setMargin(new java.awt.Insets(5, 5, 5, 5));
areaModDesc.setName("areaModDesc"); // NOI18N
jScrollPane2.setViewportView(areaModDesc);
labelRequirements.setFont(labelRequirements.getFont().deriveFont(labelRequirements.getFont().getStyle() | java.awt.Font.BOLD));
labelRequirements.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
labelRequirements.setText(L10n.getString("label.requires"));
jScrollPane3.setName("jScrollPane3"); // NOI18N
listRequirements.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
listRequirements.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
listRequirements.setName("listRequirements"); // NOI18N
listRequirements.setSelectionBackground(new java.awt.Color(212, 208, 200));
listRequirements.setSelectionForeground(new java.awt.Color(51, 51, 51));
jScrollPane3.setViewportView(listRequirements);
javax.swing.GroupLayout panelModDescriptionLayout = new javax.swing.GroupLayout(panelModDescription);
panelModDescription.setLayout(panelModDescriptionLayout);
panelModDescriptionLayout.setHorizontalGroup(
panelModDescriptionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(labelRequirements, javax.swing.GroupLayout.PREFERRED_SIZE, 236, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 270, Short.MAX_VALUE)
.addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 270, Short.MAX_VALUE)
);
panelModDescriptionLayout.setVerticalGroup(
panelModDescriptionLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelModDescriptionLayout.createSequentialGroup()
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 385, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(labelRequirements)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE))
);
buttonEnableMod.setText(L10n.getString("button.enablemod"));
buttonEnableMod.setToolTipText(L10n.getString("tooltip.mod.button.enable"));
buttonEnableMod.setName("buttonEnableMod"); // NOI18N
buttonUpdateMod.setForeground(new java.awt.Color(60, 119, 207));
buttonUpdateMod.setText(L10n.getString("button.updatemod"));
buttonUpdateMod.setToolTipText(L10n.getString("tooltip.mod.button.update"));
buttonUpdateMod.setName("buttonUpdateMod"); // NOI18N
buttonVisitWebsite.setForeground(new java.awt.Color(60, 119, 207));
buttonVisitWebsite.setText(L10n.getString("button.visitwebsite"));
buttonVisitWebsite.setToolTipText(L10n.getString("tooltip.mod.button.website"));
buttonVisitWebsite.setName("buttonVisitWebsite"); // NOI18N
buttonViewChagelog.setText(L10n.getString("button.viewchangelog"));
buttonViewChagelog.setToolTipText(L10n.getString("tooltip.mod.button.changelog"));
buttonViewChagelog.setName("buttonViewChagelog"); // NOI18N
javax.swing.GroupLayout panelModDetailsLayout = new javax.swing.GroupLayout(panelModDetails);
panelModDetails.setLayout(panelModDetailsLayout);
panelModDetailsLayout.setHorizontalGroup(
panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelModDetailsLayout.createSequentialGroup()
.addContainerGap()
.addGroup(panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelModDetailsLayout.createSequentialGroup()
.addComponent(labelModIcon)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(labelModAuthor, javax.swing.GroupLayout.PREFERRED_SIZE, 219, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(labelModName, javax.swing.GroupLayout.PREFERRED_SIZE, 219, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(panelModDetailsLayout.createSequentialGroup()
.addGroup(panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(buttonVisitWebsite, 0, 0, Short.MAX_VALUE)
.addComponent(buttonEnableMod, javax.swing.GroupLayout.PREFERRED_SIZE, 123, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(buttonUpdateMod, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonViewChagelog, javax.swing.GroupLayout.PREFERRED_SIZE, 144, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(panelModDescription, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
panelModDetailsLayout.setVerticalGroup(
panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelModDetailsLayout.createSequentialGroup()
.addGroup(panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(labelModIcon)
.addGroup(panelModDetailsLayout.createSequentialGroup()
.addComponent(labelModName)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(labelModAuthor)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(panelModDescription, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGap(18, 18, 18)
.addGroup(panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(buttonEnableMod)
.addComponent(buttonUpdateMod))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(buttonVisitWebsite)
.addComponent(buttonViewChagelog))
.addContainerGap())
);
buttonLaunchHon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/modmanager/gui/resources/icon2.png"))); // NOI18N
buttonLaunchHon.setToolTipText(L10n.getString("tooltip.button.applyandlaunch"));
buttonLaunchHon.setMaximumSize(new java.awt.Dimension(26, 25));
buttonLaunchHon.setMinimumSize(new java.awt.Dimension(26, 25));
buttonLaunchHon.setName("buttonLaunchHon"); // NOI18N
buttonLaunchHon.setPreferredSize(new java.awt.Dimension(26, 25));
labelStatus.setFont(new java.awt.Font("Tahoma", 0, 15));
labelStatus.setText("empty");
labelStatus.setFocusable(false);
labelStatus.setName("labelStatus"); // NOI18N
modsTable.setName("modsTable"); // NOI18N
javax.swing.GroupLayout panelModListLayout = new javax.swing.GroupLayout(panelModList);
panelModList.setLayout(panelModListLayout);
panelModListLayout.setHorizontalGroup(
panelModListLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelModListLayout.createSequentialGroup()
.addContainerGap()
.addGroup(panelModListLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelModListLayout.createSequentialGroup()
.addComponent(buttonApplyMods)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(buttonAddMod)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(labelStatus, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(buttonLaunchHon, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(modsTable, javax.swing.GroupLayout.DEFAULT_SIZE, 352, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(panelModListLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(progressBar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(panelModListLayout.createSequentialGroup()
.addComponent(panelModDetails, javax.swing.GroupLayout.DEFAULT_SIZE, 309, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(panelModChangelog, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGap(0, 0, 0))
);
panelModListLayout.setVerticalGroup(
panelModListLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelModListLayout.createSequentialGroup()
.addContainerGap()
.addGroup(panelModListLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(modsTable, javax.swing.GroupLayout.DEFAULT_SIZE, 618, Short.MAX_VALUE)
.addComponent(panelModDetails, javax.swing.GroupLayout.DEFAULT_SIZE, 618, Short.MAX_VALUE)
.addComponent(panelModChangelog, javax.swing.GroupLayout.DEFAULT_SIZE, 618, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panelModListLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelModListLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(panelModListLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(labelStatus, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(panelModListLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(buttonApplyMods, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(buttonAddMod, javax.swing.GroupLayout.DEFAULT_SIZE, 28, Short.MAX_VALUE)))
.addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(buttonLaunchHon, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
panelModDetails.getAccessibleContext().setAccessibleParent(panelModList);
mainMenu.setName("mainMenu"); // NOI18N
menuFile.setMnemonic(L10n.getMnemonic("menu.file"));
menuFile.setText(L10n.getString("menu.file"));
menuFile.setName("menuFile"); // NOI18N
itemApplyMods.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
itemApplyMods.setMnemonic(L10n.getMnemonic("menu.file.applymods"));
itemApplyMods.setText(L10n.getString("menu.file.applymods"));
itemApplyMods.setName("itemApplyMods"); // NOI18N
menuFile.add(itemApplyMods);
itemApplyAndLaunch.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
itemApplyAndLaunch.setMnemonic(L10n.getMnemonic("menu.file.applyandlaunch"));
itemApplyAndLaunch.setText(L10n.getString("menu.file.applyandlaunch"));
itemApplyAndLaunch.setName("itemApplyAndLaunch"); // NOI18N
menuFile.add(itemApplyAndLaunch);
itemUnapplyAllMods.setMnemonic(L10n.getMnemonic("menu.file.unapplymods"));
itemUnapplyAllMods.setText(L10n.getString("menu.file.unapplymods"));
itemUnapplyAllMods.setName("itemUnapplyAllMods"); // NOI18N
menuFile.add(itemUnapplyAllMods);
jSeparator1.setName("jSeparator1"); // NOI18N
menuFile.add(jSeparator1);
itemOpenModFolder.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F, java.awt.event.InputEvent.CTRL_MASK));
itemOpenModFolder.setMnemonic(L10n.getMnemonic("menu.file.openfolder"));
itemOpenModFolder.setText(L10n.getString("menu.file.openfolder"));
itemOpenModFolder.setName("itemOpenModFolder"); // NOI18N
menuFile.add(itemOpenModFolder);
itemImportFromOldModManager.setMnemonic(L10n.getMnemonic("menu.file.importoldmodmanager"));
itemImportFromOldModManager.setText(L10n.getString("menu.file.importoldmodmanager"));
itemImportFromOldModManager.setName("itemImportFromOldModManager"); // NOI18N
menuFile.add(itemImportFromOldModManager);
jSeparator3.setName("jSeparator3"); // NOI18N
menuFile.add(jSeparator3);
jMenu1.setMnemonic(L10n.getMnemonic("menu.file.export"));
jMenu1.setText(L10n.getString("menu.file.export"));
jMenu1.setName("itemExportMenu"); // NOI18N
jMenu1.setOpaque(true);
itemExportOverview.setMnemonic(L10n.getMnemonic("menu.file.export.overview"));
itemExportOverview.setText(L10n.getString("menu.file.export.overview"));
itemExportOverview.setName("itemExportOverview"); // NOI18N
jMenu1.add(itemExportOverview);
menuFile.add(jMenu1);
jSeparator7.setName("jSeparator7"); // NOI18N
menuFile.add(jSeparator7);
itemDownloadModUpdates.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_U, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK));
itemDownloadModUpdates.setMnemonic(L10n.getMnemonic("menu.file.downloadmodupdates"));
itemDownloadModUpdates.setText(L10n.getString("menu.file.downloadmodupdates"));
itemDownloadModUpdates.setName("itemDownloadModUpdates"); // NOI18N
menuFile.add(itemDownloadModUpdates);
jSeparator2.setName("jSeparator2"); // NOI18N
menuFile.add(jSeparator2);
itemExit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Q, java.awt.event.InputEvent.CTRL_MASK));
itemExit.setMnemonic(L10n.getMnemonic("menu.file.exit"));
itemExit.setText(L10n.getString("menu.file.exit"));
itemExit.setName("itemExit"); // NOI18N
menuFile.add(itemExit);
mainMenu.add(menuFile);
menuOptions.setMnemonic(L10n.getMnemonic("menu.options"));
menuOptions.setText(L10n.getString("menu.options"));
menuOptions.setName("menuOptions"); // NOI18N
itemOpenPreferences.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P, java.awt.event.InputEvent.CTRL_MASK));
itemOpenPreferences.setText(L10n.getString("menu.options.preferences"));
itemOpenPreferences.setName("itemOpenPreferences"); // NOI18N
itemOpenPreferences.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
itemOpenPreferencesActionPerformed(evt);
}
});
menuOptions.add(itemOpenPreferences);
itemRefresh.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F5, 0));
itemRefresh.setText(L10n.getString("menu.options.refresh"));
itemRefresh.setName("itemRefresh"); // NOI18N
menuOptions.add(itemRefresh);
mainMenu.add(menuOptions);
menuView.setMnemonic(L10n.getMnemonic("menu.view"));
menuView.setText(L10n.getString("menu.view"));
menuView.setName("menuView"); // NOI18N
viewModesGroup.add(itemViewDetails);
itemViewDetails.setMnemonic(L10n.getMnemonic("menu.view.details"));
itemViewDetails.setText(L10n.getString("menu.view.details"));
itemViewDetails.setName("itemViewDetails"); // NOI18N
itemViewDetails.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
itemViewDetailsActionPerformed(evt);
}
});
menuView.add(itemViewDetails);
viewModesGroup.add(itemViewIcons);
itemViewIcons.setMnemonic(L10n.getMnemonic("menu.view.icons"));
itemViewIcons.setSelected(true);
itemViewIcons.setText(L10n.getString("menu.view.icons"));
itemViewIcons.setName("itemViewIcons"); // NOI18N
itemViewIcons.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
itemViewIconsActionPerformed(evt);
}
});
menuView.add(itemViewIcons);
viewModesGroup.add(itemViewDetailedIcons);
itemViewDetailedIcons.setMnemonic(L10n.getMnemonic("menu.view.detailedicons"));
itemViewDetailedIcons.setText(L10n.getString("menu.view.detailedicons"));
menuView.add(itemViewDetailedIcons);
viewModesGroup.add(itemViewTiles);
itemViewTiles.setMnemonic(L10n.getMnemonic("menu.view.tiles"));
itemViewTiles.setSelected(false);
itemViewTiles.setText(L10n.getString("menu.view.tiles"));
itemViewTiles.setName("itemViewTiles"); // NOI18N
menuView.add(itemViewTiles);
jSeparator6.setName("jSeparator6"); // NOI18N
menuView.add(jSeparator6);
itemUseSmallIcons.setMnemonic(L10n.getMnemonic("menu.view.tiles"));
itemUseSmallIcons.setText(L10n.getString("menu.view.smallicons"));
itemUseSmallIcons.setName("itemUseSmallIcons"); // NOI18N
menuView.add(itemUseSmallIcons);
mainMenu.add(menuView);
menuHelp.setMnemonic(L10n.getMnemonic("menu.help"));
menuHelp.setText(L10n.getString("menu.help"));
menuHelp.setName("menuHelp"); // NOI18N
itemVisitForumThread.setMnemonic(L10n.getMnemonic("menu.help.website"));
itemVisitForumThread.setText(L10n.getString("menu.help.website"));
itemVisitForumThread.setName("itemVisitForumThread"); // NOI18N
menuHelp.add(itemVisitForumThread);
jSeparator4.setName("jSeparator4"); // NOI18N
menuHelp.add(jSeparator4);
itemAbout.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F1, 0));
itemAbout.setMnemonic(L10n.getMnemonic("menu.help.about"));
itemAbout.setText(L10n.getString("menu.help.about"));
itemAbout.setName("itemAbout"); // NOI18N
itemAbout.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
itemAboutActionPerformed(evt);
}
});
menuHelp.add(itemAbout);
mainMenu.add(menuHelp);
setJMenuBar(mainMenu);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panelModList, javax.swing.GroupLayout.DEFAULT_SIZE, 956, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panelModList, javax.swing.GroupLayout.DEFAULT_SIZE, 674, Short.MAX_VALUE)
);
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-972)/2, (screenSize.height-733)/2, 972, 733);
}// </editor-fold>//GEN-END:initComponents
/**
* Open Preferences dialog
*/
private void itemOpenPreferencesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemOpenPreferencesActionPerformed
// Set values in the options dialog
//prefs = Preferences.userNodeForPackage(L10n.class);
// Get selected language
//String lang = prefs.get(model.PREFS_LOCALE, "DUMMY_DEFAULT");
String lang = ManagerOptions.getInstance().getLanguage();
if (lang.isEmpty()) {
comboBoxChooseLanguage.setSelectedIndex(0);
} else {
comboBoxChooseLanguage.setSelectedItem(new Language("Language", lang));
}
// Get selected Laf
//prefs = Preferences.userNodeForPackage(Manager.class);
//String laf = prefs.get(model.PREFS_LAF, "DUMMY_DEFAULT");
String laf = ManagerOptions.getInstance().getLaf();
if (laf.isEmpty()) {
comboBoxLafs.setSelectedIndex(0);
} else {
comboBoxLafs.setSelectedItem(new LaF("LaF", laf));
}
// Get CL arguments
//String clArgs = prefs.get(model.PREFS_CLARGUMENTS, "DUMMY_DEFAULT");
String clArgs = ManagerOptions.getInstance().getCLArgs();
textFieldCLArguments.setText("");
if (clArgs.isEmpty()) {
} else {
textFieldCLArguments.setText(clArgs);
}
// Get HoN folder
//String honFolder = prefs.get(model.PREFS_HONFOLDER, "DUMMY_DEFAULT");
String honFolder = ManagerOptions.getInstance().getGamePath();
if (honFolder == null || honFolder.isEmpty()) {
textFieldHonFolder.setText("");
} else {
textFieldHonFolder.setText(honFolder);
}
// Get Mods Folder
String modsFolder = ManagerOptions.getInstance().getModPath();
if (modsFolder == null || modsFolder.isEmpty()) {
textFieldModsFolder.setText("");
} else {
textFieldModsFolder.setText(modsFolder);
}
String developingModFolder = ManagerOptions.getInstance().getDevelopingMod();
if (developingModFolder == null || developingModFolder.isEmpty()) {
textFieldDevelopingMod.setText("");
} else {
textFieldDevelopingMod.setText(developingModFolder);
}
checkBoxIgnoreGameVersion.setSelected(ManagerOptions.getInstance().isIgnoreGameVersion());
checkBoxAutoUpdate.setSelected(ManagerOptions.getInstance().isAutoUpdate());
checkBoxDeveloperMode.setSelected(ManagerOptions.getInstance().isDeveloperMode());
checkBoxDeleteFolderTree.setSelected(ManagerOptions.getInstance().isDeleteFolderTree());
textFieldDevelopingMod.setVisible(checkBoxDeveloperMode.isSelected());
buttonDevelopingMod.setVisible(checkBoxDeveloperMode.isSelected());
//dialogOptions.setSize(600, 500);
dialogOptions.setLocationRelativeTo(this);
dialogOptions.setVisible(true);
}//GEN-LAST:event_itemOpenPreferencesActionPerformed
/**
* Open About dialog
*/
private void itemAboutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemAboutActionPerformed
ManagerAboutBox about = new ManagerAboutBox(this, ManagerOptions.getInstance());
about.setLocation(this.getX() + 20, this.getY() + 20);
about.setVisible(true);
}//GEN-LAST:event_itemAboutActionPerformed
private void formComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
this.setResizable(true);
}//GEN-LAST:event_formComponentShown
private void itemViewIconsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemViewIconsActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_itemViewIconsActionPerformed
private void itemViewDetailsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_itemViewDetailsActionPerformed
}//GEN-LAST:event_itemViewDetailsActionPerformed
private void checkBoxDeleteFolderTreeMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_checkBoxDeleteFolderTreeMouseClicked
if (evt.getButton() == MouseEvent.BUTTON2 || evt.getButton() == MouseEvent.BUTTON3) {
String dest = null;
if (OS.isWindows() || OS.isLinux()) {
dest = ManagerOptions.getInstance().getGamePath() + File.separator + "game" + File.separator;
} else if (OS.isMac()) {
dest = System.getProperty("user.home") + "/Library/Application Support/Heroes of Newerth/game/";
}
String result = "<html>";
for (String s : Manager.getInstance().getResources0FolderTree()) {
result = result + dest + "<strong>" + s + "</strong>" + "<br/>";
}
JOptionPane.showMessageDialog(dialogOptions, result + "</html>", "", JOptionPane.PLAIN_MESSAGE);
}
}//GEN-LAST:event_checkBoxDeleteFolderTreeMouseClicked
private void checkBoxDeveloperModeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkBoxDeveloperModeActionPerformed
textFieldDevelopingMod.setVisible(checkBoxDeveloperMode.isSelected());
buttonDevelopingMod.setVisible(checkBoxDeveloperMode.isSelected());
}//GEN-LAST:event_checkBoxDeveloperModeActionPerformed
/**
* Display specified message to the user using JOptionPane
* @param message message to be displayed
* @param title title of the message dialog
* @param type type of the mesage, see JOptionPane for list of types
*/
public void showMessage(String message, String title, int type) {
JOptionPane.showMessageDialog(this, message, title, type);
}
public int confirmMessage(String message, String title, int type) {
return JOptionPane.showConfirmDialog(this, message, title, type, JOptionPane.QUESTION_MESSAGE);
}
public void showDetailedMessage(String message, String title, String details, int type) {
final JPanel panel = new JPanel(new BorderLayout(0, 10));
final JToggleButton buttonDetails = new JToggleButton(L10n.getString("button.showdetails"), false);
final JEditorPane detailsText = new JEditorPane();
final JScrollPane scrollPane = new JScrollPane(detailsText);
detailsText.setText(details);
Object[] objs = {message, " ", panel};
final JOptionPane pane = new JOptionPane(objs, type);
final JDialog dialog = pane.createDialog(this, title);
dialog.setResizable(true);
buttonDetails.setMaximumSize(buttonDetails.getSize());
panel.add(scrollPane, BorderLayout.PAGE_START);
panel.add(buttonDetails, BorderLayout.LINE_END);
detailsText.setVisible(false);
scrollPane.setVisible(false);
// TODO: Find a way to set a maximum size, and then the scrollpane will enter in action
scrollPane.setMaximumSize(new Dimension(9999, 100));
panel.setMaximumSize(new Dimension(dialog.getWidth(), 100));
dialog.pack();
buttonDetails.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (buttonDetails.isSelected()) {
buttonDetails.setText(L10n.getString("button.hidedetails"));
detailsText.setVisible(true);
scrollPane.setVisible(true);
} else {
buttonDetails.setText(L10n.getString("button.showdetails"));
detailsText.setVisible(false);
scrollPane.setVisible(false);
}
// Double pack is necessary to work, don't know why
dialog.pack();
panel.revalidate();
dialog.pack();
}
});
dialog.setVisible(true);
}
//TODO: Fix this for all views (icons, tiles and table).
public void deleteSelectedMod() {
Mod mod = getModsTable().getSelectedMod();
model.removeMod(mod);
updateModTable();
}
/**
* Update table with the list of mods
*/
public void updateModTable() {
animating = false;
getModsTable().setModsList(ManagerOptions.getInstance().getMods());
getModsTable().redraw();
displayModDetail();
}
/**
* Display details of the selected mod in the right panel
*/
public void displayModDetail() {
try {
setStatusMessage("<html>" + Constants.putColorNoHtml(model.getAppliedMods().size(), Constants.APPLIED_COLOR) + "/" + Constants.putColorNoHtml(model.getMods().size(), Constants.DISABLED_COLOR) + " - Version: " + Game.getInstance().getVersion() + "</html>", false);
} catch (Exception ex) {
setStatusMessage("<html>" + Constants.putColorNoHtml(model.getAppliedMods().size(), Constants.APPLIED_COLOR) + "/" + Constants.putColorNoHtml(model.getMods().size(), Constants.DISABLED_COLOR) + "</html>", false);
}
if (modsTable.isEnabled()) {
panelModChangelog.setVisible(false);
panelModDetails.setVisible(true);
// Make sure that items in the panel are visible
setDetailsVisible(true);
Mod mod = getSelectedMod();
if (mod != null) {
labelModName.setText(mod.getName());
labelModAuthor.setText(mod.getAuthor());
areaModDesc.setText(mod.getDescription());
//labelVisitWebsite.setToolTipText(mod.getWebLink());
if (mod.getUpdateCheckUrl() == null) {
buttonUpdateMod.setEnabled(false);
} else {
buttonUpdateMod.setEnabled(true);
}
if (mod.getWebLink() != null && !mod.getWebLink().isEmpty()) {
buttonVisitWebsite.setEnabled(true);
} else {
buttonVisitWebsite.setEnabled(false);
}
if (mod.getChangelog() != null && !mod.getChangelog().isEmpty()) {
buttonViewChagelog.setEnabled(true);
panelChangelogLabelModAuthor.setText(labelModAuthor.getText());
panelChangelogLabelModName.setText(labelModName.getText());
panelChangelogLabelModIcon.setIcon(labelModIcon.getIcon());
panelChangelogEditorPane.setText(BBCode.bbCodeToHtml(mod.getChangelog()));
} else {
buttonViewChagelog.setEnabled(false);
}
buttonViewChagelog.setActionCommand("display changelog");
buttonViewModDetails.setActionCommand("hide changelog");
labelModIcon.setIcon(mod.getIcon());
buttonUpdateMod.setActionCommand(mod.getName());
buttonEnableMod.setActionCommand(mod.getName());
if (mod.isEnabled()) {
buttonEnableMod.setForeground(Color.RED);
buttonEnableMod.setText(L10n.getString("button.disablemod"));
//labelModStatus.setText(L10n.getString("label.modstatus.enabled"));
} else {
buttonEnableMod.setForeground(new Color(0, 175, 0));
buttonEnableMod.setText(L10n.getString("button.enablemod"));
//labelModStatus.setText(L10n.getString("label.modstatus.disabled"));
}
// Display mod incompatibility
ArrayList<Action> reqs = new ArrayList<Action>();
reqs.addAll(mod.getActions(Action.REQUIREMENT));
DefaultListModel dlm = new DefaultListModel();
String elem;
for (Iterator actIter = reqs.iterator(); actIter.hasNext();) {
Action act = (Action) actIter.next();
if (act.getClass() == ActionRequirement.class) {
elem = ((ActionRequirement) act).getName();
if (((ActionRequirement) act).getVersion() != null) {
elem += " (ver. " + ((ActionRequirement) act).getVersion() + ")";
}
dlm.addElement(elem);
}
}
listRequirements.setModel(dlm);
} else {
setDetailsVisible(false);
}
}
}
/**
* Display details of the given mod in the right panel
* @param mod the mod to display in the details panel.
*/
public void displayModDetail(Mod mod) {
try {
setStatusMessage("<html><font color=#009900>" + (model.getAppliedMods().size()) + "</font>/<font color=#0033cc>" + (model.getMods().size()) + "</font> " + L10n.getString("status.modsenabled") + " - Version: " + Game.getInstance().getVersion() + "</html>", false);
} catch (Exception ex) {
setStatusMessage("<html><font color=#009900>" + (model.getAppliedMods().size()) + "</font>/<font color=#0033cc>" + (model.getMods().size()) + "</font> " + L10n.getString("status.modsenabled") + "</html>", false);
}
if (getModsTable().isEnabled()) {
panelModChangelog.setVisible(false);
panelModDetails.setVisible(true);
// Make sure that items in the panel are visible
setDetailsVisible(true);
labelModName.setText(mod.getName());
labelModAuthor.setText(mod.getAuthor());
areaModDesc.setText(mod.getDescription());
//labelVisitWebsite.setToolTipText(mod.getWebLink());
if (mod.getUpdateCheckUrl() == null) {
buttonUpdateMod.setEnabled(false);
} else {
buttonUpdateMod.setEnabled(true);
}
if (mod.getWebLink() != null && !mod.getWebLink().isEmpty()) {
buttonVisitWebsite.setEnabled(true);
} else {
buttonVisitWebsite.setEnabled(false);
}
if (mod.getChangelog() != null && !mod.getChangelog().isEmpty()) {
buttonViewChagelog.setEnabled(true);
panelChangelogLabelModAuthor.setText(labelModAuthor.getText());
panelChangelogLabelModName.setText(labelModName.getText());
panelChangelogLabelModIcon.setIcon(labelModIcon.getIcon());
panelChangelogEditorPane.setText(BBCode.bbCodeToHtml(mod.getChangelog()));
} else {
buttonViewChagelog.setEnabled(false);
}
buttonViewChagelog.setActionCommand("display changelog");
buttonViewModDetails.setActionCommand("hide changelog");
labelModIcon.setIcon(mod.getIcon());
buttonUpdateMod.setActionCommand(mod.getName());
buttonEnableMod.setActionCommand(mod.getName());
if (mod.isEnabled()) {
buttonEnableMod.setForeground(Color.RED);
buttonEnableMod.setText(L10n.getString("button.disablemod"));
//labelModStatus.setText(L10n.getString("label.modstatus.enabled"));
} else {
buttonEnableMod.setForeground(new Color(0, 175, 0));
buttonEnableMod.setText(L10n.getString("button.enablemod"));
//labelModStatus.setText(L10n.getString("label.modstatus.disabled"));
}
// Display mod incompatibility
ArrayList<Action> reqs = new ArrayList<Action>();
reqs.addAll(mod.getActions(Action.REQUIREMENT));
DefaultListModel dlm = new DefaultListModel();
String elem;
for (Iterator actIter = reqs.iterator(); actIter.hasNext();) {
Action act = (Action) actIter.next();
if (act.getClass() == ActionRequirement.class) {
elem = ((ActionRequirement) act).getName();
if (((ActionRequirement) act).getVersion() != null) {
elem += " (ver. " + ((ActionRequirement) act).getVersion() + ")";
}
dlm.addElement(elem);
}
}
listRequirements.setModel(dlm);
} else {
setDetailsVisible(false);
}
}
/**
* Method used for updating the view (called when the model has changed and
* notifyObservers() was called)
*/
public void update(Observable obs, Object obj) {
if (fullyLoaded) {
logger.info("List of mods has changed, updating...");
updateModTable();
}
}
/**
* Change visibility of components on the mod details panel
* @param visible true to make them visible, false to make them invisible
*/
public void setDetailsVisible(boolean visible) {
labelModIcon.setVisible(visible);
labelModName.setVisible(visible);
labelModAuthor.setVisible(visible);
areaModDesc.setVisible(visible);
labelRequirements.setVisible(visible);
listRequirements.setVisible(visible);
buttonUpdateMod.setVisible(visible);
buttonEnableMod.setVisible(visible);
buttonViewChagelog.setVisible(visible);
jScrollPane3.setVisible(visible);
}
/**
* This method calls in all the components the setEanbled method to avoid input on the screen.
*/
public void setInputEnabled(boolean enabled) {
panelModList.setEnabled(enabled);
mainMenu.setEnabled(enabled);
buttonAddMod.setEnabled(enabled);
buttonApplyMods.setEnabled(enabled);
buttonEnableMod.setEnabled(enabled);
buttonLaunchHon.setEnabled(enabled);
buttonUpdateMod.setEnabled(enabled);
buttonViewChagelog.setEnabled(enabled);
buttonViewModDetails.setEnabled(enabled);
buttonVisitWebsite.setEnabled(enabled);
itemAbout.setEnabled(enabled);
itemApplyAndLaunch.setEnabled(enabled);
itemApplyMods.setEnabled(enabled);
itemDownloadModUpdates.setEnabled(enabled);
itemExit.setEnabled(enabled);
itemImportFromOldModManager.setEnabled(enabled);
itemOpenModFolder.setEnabled(enabled);
itemOpenPreferences.setEnabled(enabled);
itemRefresh.setEnabled(enabled);
itemUnapplyAllMods.setEnabled(enabled);
itemViewDetails.setEnabled(enabled);
itemViewIcons.setEnabled(enabled);
itemVisitForumThread.setEnabled(enabled);
itemViewDetailedIcons.setEnabled(enabled);
itemViewTiles.setEnabled(enabled);
itemUseSmallIcons.setEnabled(enabled);
modsTable.setEnabled(enabled);
if (enabled && fullyLoaded) {
displayModDetail();
}
}
int msgControl = 0;
public void setStatusMessage(String status, boolean animate) {
animating = animate;
labelStatus.setText(status);
if (animate) {
Task task = new Task<Void, Void>(Application.getInstance()) {
private int dots = 0;
private String originalMessage;
@Override
protected Void doInBackground() throws Exception {
Thread.currentThread().setName("UpdateStatusMessage");
originalMessage = labelStatus.getText();
int myMessageControl = ++msgControl;
while (animating && myMessageControl == msgControl) {
if (dots < 3) {
labelStatus.setText(labelStatus.getText() + ".");
dots++;
} else {
labelStatus.setText(originalMessage);
dots = 0;
}
Thread.sleep(700);
}
return null;
}
};
task.execute();
}
}
/*
* The following methods add listeners to the UI components
*/
public void buttonAddModAddActionListener(ActionListener al) {
buttonAddMod.addActionListener(al);
}
public JMenuItem getItemRefreshManager() {
return itemRefresh;
}
public JMenuItem getItemViewDetailedIcons() {
return itemViewDetailedIcons;
}
public JMenuItem getItemViewDetails() {
return itemViewDetails;
}
public JMenuItem getItemViewIcons() {
return itemViewIcons;
}
public JMenuItem getItemViewTiles() {
return itemViewTiles;
}
public JCheckBoxMenuItem getItemUseSmallIcons() {
return itemUseSmallIcons;
}
public void setItemUseSmallIcons(JCheckBoxMenuItem itemUseSmallIcons) {
this.itemUseSmallIcons = itemUseSmallIcons;
}
public void buttonEnableModAddActionListener(ActionListener al) {
buttonEnableMod.addActionListener(al);
}
public void itemApplyModsAddActionListener(ActionListener al) {
itemApplyMods.addActionListener(al);
buttonApplyMods.addActionListener(al);
}
public void buttonVisitWebsiteAddActionListener(ActionListener al) {
buttonVisitWebsite.addActionListener(al);
}
public void itemApplyAndLaunchAddActionListener(ActionListener al) {
itemApplyAndLaunch.addActionListener(al);
}
public void itemUnapplyAllModsAddActionListener(ActionListener al) {
itemUnapplyAllMods.addActionListener(al);
}
public void buttonUpdateModActionListener(ActionListener al) {
buttonUpdateMod.addActionListener(al);
}
public void itemOpenModFolderAddActionListener(ActionListener al) {
itemOpenModFolder.addActionListener(al);
}
public void itemDownloadModUpdates(ActionListener al) {
itemDownloadModUpdates.addActionListener(al);
}
public void itemVisitForumThreadAddActionListener(ActionListener al) {
itemVisitForumThread.addActionListener(al);
}
public void itemViewDetailsAddActionListener(ActionListener al) {
itemViewDetails.addActionListener(al);
}
public void itemViewIconsAddActionListener(ActionListener al) {
itemViewIcons.addActionListener(al);
}
void itemViewDetailedIconsAddActionListener(ActionListener al) {
itemViewDetailedIcons.addActionListener(al);
}
void itemExportOverviewAddActionListener(ActionListener al) {
itemExportOverview.addActionListener(al);
}
public void itemViewTilesAddActionListener(ActionListener al) {
itemViewTiles.addActionListener(al);
}
public void itemUseSmallIconsAddActionListener(ActionListener al) {
itemUseSmallIcons.addActionListener(al);
}
public ModsTable getModsTable() {
return modsTable;
}
public void itemExitAddActionListener(ActionListener al) {
itemExit.addActionListener(al);
}
public void buttonApplyLafAddActionListener(ActionListener al) {
buttonApplyLaf.addActionListener(al);
}
public void buttonApplyLanguageAddActionListener(ActionListener al) {
buttonApplyLanguage.addActionListener(al);
}
public void buttonDevelopingModAddActionListener(ActionListener al) {
buttonDevelopingMod.addActionListener(al);
}
public void buttonOkAddActionListener(ActionListener al) {
buttonOk.addActionListener(al);
}
public void buttonCancelAddActionListener(ActionListener al) {
buttonCancel.addActionListener(al);
}
public void buttonHonFolderAddActionListener(ActionListener al) {
buttonHonFolder.addActionListener(al);
}
public void buttonModsFolderAddActionListener(ActionListener al) {
buttonModsFolder.addActionListener(al);
}
public void popupMenuItemEnableDisableModAddActionListener(ActionListener al) {
popupItemMenuEnableDisableMod.addActionListener(al);
}
public void popupMenuItemViewChangelogAddActionListener(ActionListener al) {
popupItemMenuViewChangelog.addActionListener(al);
}
public void popupMenuItemUpdateModAddActionListener(ActionListener al) {
popupItemMenuUpdateMod.addActionListener(al);
}
public void popupMenuItemVisitWebsiteAddActionListener(ActionListener al) {
popupItemMenuVisitWebsite.addActionListener(al);
}
public void popupItemMenuDeleteModAddActionListener(ActionListener al) {
popupItemMenuDeleteMod.addActionListener(al);
}
public void itemImportFromOldModManagerAddActionListener(ActionListener al) {
itemImportFromOldModManager.addActionListener(al);
}
public JProgressBar getProgressBar() {
return progressBar;
}
/*
* Various getters and setters
*/
public String getTextFieldHonFolder() {
return textFieldHonFolder.getText();
}
public void setTextFieldHonFolder(String txt) {
textFieldHonFolder.setText(txt);
}
public void setTextFieldDevelopingMod(String txt) {
textFieldDevelopingMod.setText(txt);
}
public void setTextFieldModsFolder(String txt) {
textFieldModsFolder.setText(txt);
}
public String getTextFieldModsFolder() {
return textFieldModsFolder.getText();
}
public boolean getIgnoreGameVersion() {
return checkBoxIgnoreGameVersion.isSelected();
}
public boolean getAutoUpdate() {
return checkBoxAutoUpdate.isSelected();
}
public boolean getDeveloperMode() {
return checkBoxDeveloperMode.isSelected();
}
public boolean getDeleteFolderTree() {
return checkBoxDeleteFolderTree.isSelected();
}
public String getSelectedLafClass() {
return ((LaF) comboBoxLafs.getSelectedItem()).getLafClass();
}
public String getSelectedLanguage() {
return ((Language) comboBoxChooseLanguage.getSelectedItem()).getCode();
}
public JDialog getPrefsDialog() {
return dialogOptions;
}
public JPanel getPanelModDetails() {
return panelModDetails;
}
public JMenuItem getItemOpenPreferences() {
return itemOpenPreferences;
}
public JPanel getPanelModChangelog() {
return panelModChangelog;
}
public JPopupMenu getRightClickTableMenu() {
return rightClickTableMenu;
}
public JButton getButtonViewModDetails() {
return buttonViewModDetails;
}
public JButton getButtonViewChagelog() {
return buttonViewChagelog;
}
public Mod getSelectedMod() {
return getModsTable().getSelectedMod();
}
public String getSelectedHonFolder() {
return textFieldHonFolder.getText();
}
public JButton getButtonLaunchHon() {
return buttonLaunchHon;
}
public JButton getButtonApplyMods() {
return buttonApplyMods;
}
public String getCLArguments() {
return textFieldCLArguments.getText();
}
/**
* Class of items in the Select LaF combo box on preferences dialog
*/
private class LaF {
private String name;
private String lafClass;
public LaF(String _name, String _lafClass) {
name = _name;
lafClass = _lafClass;
}
@Override
public String toString() {
return name;
}
public String getLafClass() {
return lafClass;
}
@Override
public boolean equals(Object laf) {
if (lafClass.equals(((LaF) laf).lafClass)) {
return true;
}
return false;
}
}
/**
* Class of items in the Select language combo box on preferences dialog
*/
private class Language {
private String name;
private String code;
public Language(String _name, String _code) {
name = _name;
code = _code;
}
@Override
public String toString() {
return name;
}
public String getCode() {
return code;
}
@Override
public boolean equals(Object lang) {
if (code.equals(((Language) lang).code)) {
return true;
}
return false;
}
}
public void setAnimating(boolean animating) {
this.animating = animating;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JEditorPane areaModDesc;
private javax.swing.JButton buttonAddMod;
private javax.swing.JButton buttonApplyLaf;
private javax.swing.JButton buttonApplyLanguage;
private javax.swing.JButton buttonApplyMods;
private javax.swing.JButton buttonCancel;
private javax.swing.JButton buttonDevelopingMod;
private javax.swing.JButton buttonEnableMod;
private javax.swing.JButton buttonHonFolder;
private javax.swing.JButton buttonLaunchHon;
private javax.swing.JButton buttonModsFolder;
private javax.swing.JButton buttonOk;
private javax.swing.JButton buttonUpdateMod;
private javax.swing.JButton buttonViewChagelog;
private javax.swing.JButton buttonViewModDetails;
private javax.swing.JButton buttonVisitWebsite;
private javax.swing.JCheckBox checkBoxAutoUpdate;
private javax.swing.JCheckBox checkBoxDeleteFolderTree;
private javax.swing.JCheckBox checkBoxDeveloperMode;
private javax.swing.JCheckBox checkBoxIgnoreGameVersion;
private javax.swing.JComboBox comboBoxChooseLanguage;
private javax.swing.JComboBox comboBoxLafs;
private javax.swing.JDialog dialogOptions;
private javax.swing.JMenuItem itemAbout;
private javax.swing.JMenuItem itemApplyAndLaunch;
private javax.swing.JMenuItem itemApplyMods;
private javax.swing.JMenuItem itemDownloadModUpdates;
private javax.swing.JMenuItem itemExit;
private javax.swing.JMenuItem itemExportOverview;
private javax.swing.JMenuItem itemImportFromOldModManager;
private javax.swing.JMenuItem itemOpenModFolder;
private javax.swing.JMenuItem itemOpenPreferences;
private javax.swing.JMenuItem itemRefresh;
private javax.swing.JMenuItem itemUnapplyAllMods;
private javax.swing.JCheckBoxMenuItem itemUseSmallIcons;
private javax.swing.JRadioButtonMenuItem itemViewDetailedIcons;
private javax.swing.JRadioButtonMenuItem itemViewDetails;
private javax.swing.JRadioButtonMenuItem itemViewIcons;
private javax.swing.JRadioButtonMenuItem itemViewTiles;
private javax.swing.JMenuItem itemVisitForumThread;
private javax.swing.JMenu jMenu1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JPopupMenu.Separator jSeparator1;
private javax.swing.JPopupMenu.Separator jSeparator2;
private javax.swing.JPopupMenu.Separator jSeparator3;
private javax.swing.JPopupMenu.Separator jSeparator4;
private javax.swing.JPopupMenu.Separator jSeparator6;
private javax.swing.JPopupMenu.Separator jSeparator7;
private javax.swing.JLabel labelCLArguments;
private javax.swing.JLabel labelChangeLanguageImplication;
private javax.swing.JLabel labelChooseLanguage;
private javax.swing.JLabel labelChooseLookAndFeel;
private javax.swing.JLabel labelHonFolder;
private javax.swing.JLabel labelModAuthor;
private javax.swing.JLabel labelModIcon;
private javax.swing.JLabel labelModName;
private javax.swing.JLabel labelModsFolder;
private javax.swing.JLabel labelRequirements;
private javax.swing.JLabel labelStatus;
private javax.swing.JList listRequirements;
private javax.swing.JMenuBar mainMenu;
private javax.swing.JMenu menuFile;
private javax.swing.JMenu menuHelp;
private javax.swing.JMenu menuOptions;
private javax.swing.JMenu menuView;
private modmanager.gui.ModsTable modsTable;
private javax.swing.JEditorPane panelChangelogEditorPane;
private javax.swing.JLabel panelChangelogLabelModAuthor;
private javax.swing.JLabel panelChangelogLabelModIcon;
private javax.swing.JLabel panelChangelogLabelModName;
private javax.swing.JScrollPane panelChangelogScrollpaneChangelogEditorPane;
private javax.swing.JPanel panelModChangelog;
private javax.swing.JPanel panelModDescription;
private javax.swing.JPanel panelModDetails;
private javax.swing.JPanel panelModList;
private javax.swing.JMenuItem popupItemMenuDeleteMod;
private javax.swing.JMenuItem popupItemMenuEnableDisableMod;
private javax.swing.JMenuItem popupItemMenuUpdateMod;
private javax.swing.JMenuItem popupItemMenuViewChangelog;
private javax.swing.JMenuItem popupItemMenuVisitWebsite;
private javax.swing.JProgressBar progressBar;
private javax.swing.JPopupMenu rightClickTableMenu;
private javax.swing.JTextField textFieldCLArguments;
private javax.swing.JTextField textFieldDevelopingMod;
private javax.swing.JTextField textFieldHonFolder;
private javax.swing.JTextField textFieldModsFolder;
// End of variables declaration//GEN-END:variables
}