package modmanager.gui.developing;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import modmanager.gui.l10n.L10n;
import javax.swing.JPanel;
import javax.swing.RowSorter.SortKey;
import modmanager.controller.Manager;
import modmanager.business.ManagerOptions;
import modmanager.business.Mod;
import java.awt.Toolkit;
import java.awt.event.ActionListener;
import java.net.URL;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JDialog;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import org.apache.log4j.Logger;
import javax.swing.UIManager;
import modmanager.business.modactions.Action;
import modmanager.business.modactions.ActionRequirement;
import modmanager.gui.ManagerAboutBox;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Iterator;
import javax.swing.ButtonGroup;
import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.UIManager.LookAndFeelInfo;
import org.jdesktop.application.Application;
import org.jdesktop.application.Task;
import modmanager.utility.BBCode;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JEditorPane;
import javax.swing.JRootPane;
import javax.swing.JScrollPane;
import javax.swing.JToggleButton;
/**
* Main form of the ModManager. This class is the 'view' part of the MVC framework
*
* @author Shirkit, Kovo
*/
public class ManagerGUI1 extends javax.swing.JFrame implements Observer {
// Model for this View (part of MVC pattern)
private static ManagerGUI1 instance = null;
private Manager controller;
private ManagerOptions model;
private static Logger logger = Logger.getLogger(ManagerGUI1.class.getPackage().getName());
// Column names of the mod list table
private String[] columnNames = new String[]{
"",
L10n.getString("table.modname"),
L10n.getString("table.modauthor"),
L10n.getString("table.modversion"),
L10n.getString("table.modstatus")
};
private Object[][] tableData;
boolean animating = false;
public boolean fullyLoaded = false;
private static final String DETAILS_VIEW_IDENT = "DETAILS_VIEW_IDENT",
DETAILS_ICON_VIEW_IDENT = "DETAILS_ICON_VIEW_IDENT",
ICONS_VIEW_IDENT = "ICONS_VIEW_IDENT";
/**
* Creates the main form
* @param model model part of the MVC framework
*/
private ManagerGUI1() {
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. This will not be localized
comboBoxChooseLanguage.addItem(new Language("English", "en"));
//comboBoxChooseLanguage.addItem(new Language("Slovak", "sk"));
// 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();
System.exit(0);
}
});
// Disallow changing columns order and allow sorting
getModListTable().getTableHeader().setReorderingAllowed(false);
getModListTable().setAutoCreateRowSorter(true);
getModListTable().getRowSorter().toggleSortOrder(1);
getModListTable().addMouseListener(new PopupListener());
getModListList().addMouseListener(new PopupListener());
getProgressBar().setStringPainted(false);
getModListTable().setFocusable(true);
getModListList().setFocusable(true);
}
/**
* This method is used to get the running instance of the ManagerGUI class.
* @return the instance.
* @see get()
*/
public static ManagerGUI1 getInstance() {
if (instance == null) {
instance = new ManagerGUI1();
}
return instance;
}
/** 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();
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();
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();
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();
panelFooter = new javax.swing.JPanel();
progressBar = new javax.swing.JProgressBar(0,100);
buttonApplyMods = new javax.swing.JButton();
buttonAddMod = new javax.swing.JButton();
buttonLaunchHon = new javax.swing.JButton();
labelStatus = new javax.swing.JLabel();
panelModListViews = new javax.swing.JPanel();
scrollPaneTableModList = new javax.swing.JScrollPane();
tableModList = new javax.swing.JTable();
scrollPaneListModList = new javax.swing.JScrollPane();
listModList = new javax.swing.JList();
panelModOreview = new javax.swing.JPanel();
labelModIcon = new javax.swing.JLabel();
labelModName = new javax.swing.JLabel();
labelModAuthor = new javax.swing.JLabel();
scrollPaneAreaModDesc = new javax.swing.JScrollPane();
areaModDesc = new javax.swing.JTextArea();
buttonEnableMod = new javax.swing.JButton();
buttonViewModDetails1 = new javax.swing.JButton();
panelModChangelog = new javax.swing.JPanel();
labelModIcon1 = new javax.swing.JLabel();
labelModName1 = new javax.swing.JLabel();
labelModAuthor1 = new javax.swing.JLabel();
buttonViewModDetails = new javax.swing.JButton();
scrollPaneAreaModChangelog = new javax.swing.JScrollPane();
areaModChangelog = new javax.swing.JEditorPane();
panelModDetails = new javax.swing.JPanel();
labelRequirements = new javax.swing.JLabel();
scrollPaneListRequirements = new javax.swing.JScrollPane();
listRequirements = new javax.swing.JList();
buttonUpdateMod = new javax.swing.JButton();
buttonVisitWebsite = new javax.swing.JButton();
buttonViewChagelog = new javax.swing.JButton();
buttonViewModOreview = new javax.swing.JButton();
labelModIcon2 = new javax.swing.JLabel();
labelModName2 = new javax.swing.JLabel();
labelModAuthor2 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jLabel1 = new javax.swing.JLabel();
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();
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();
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.setAutoscrolls(true);
labelHonFolder.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
labelHonFolder.setName("labelHonFolder"); // NOI18N
textFieldHonFolder.setName("textFieldHonFolder"); // NOI18N
buttonHonFolder.setText(L10n.getString("prefs.button.change"));
buttonHonFolder.setName("buttonHonFolder"); // NOI18N
comboBoxLafs.setName("comboBoxLafs"); // NOI18N
buttonApplyLaf.setText(L10n.getString("prefs.button.apply"));
buttonApplyLaf.setName("buttonApplyLaf"); // NOI18N
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
buttonModsFolder.setText(L10n.getString("prefs.button.change"));
buttonModsFolder.setName("buttonModsFolder"); // NOI18N
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
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.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)
.addComponent(checkBoxIgnoreGameVersion, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(checkBoxAutoUpdate, 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))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(textFieldHonFolder, javax.swing.GroupLayout.DEFAULT_SIZE, 354, Short.MAX_VALUE)
.addComponent(comboBoxChooseLanguage, javax.swing.GroupLayout.Alignment.LEADING, 0, 354, Short.MAX_VALUE)
.addComponent(textFieldModsFolder, javax.swing.GroupLayout.DEFAULT_SIZE, 354, Short.MAX_VALUE)
.addComponent(comboBoxLafs, javax.swing.GroupLayout.Alignment.LEADING, 0, 354, Short.MAX_VALUE)
.addComponent(textFieldCLArguments, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 354, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(buttonModsFolder, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(buttonHonFolder, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addComponent(buttonApplyLaf, 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))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(dialogOptionsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(labelModsFolder)
.addComponent(buttonModsFolder)
.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))
.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))
.addGap(18, 18, 18)
.addComponent(checkBoxIgnoreGameVersion)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(checkBoxAutoUpdate)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(checkBoxDeveloperMode)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 55, 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(720, 630));
setName("Form"); // NOI18N
addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentShown(java.awt.event.ComponentEvent evt) {
formComponentShown(evt);
}
});
panelFooter.setMinimumSize(new java.awt.Dimension(700, 32));
panelFooter.setName("panelFooter"); // NOI18N
panelFooter.setPreferredSize(new java.awt.Dimension(700, 32));
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
buttonLaunchHon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/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
javax.swing.GroupLayout panelFooterLayout = new javax.swing.GroupLayout(panelFooter);
panelFooter.setLayout(panelFooterLayout);
panelFooterLayout.setHorizontalGroup(
panelFooterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelFooterLayout.createSequentialGroup()
.addContainerGap()
.addComponent(buttonApplyMods, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(buttonAddMod, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(labelStatus, javax.swing.GroupLayout.DEFAULT_SIZE, 150, 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)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, 276, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
panelFooterLayout.setVerticalGroup(
panelFooterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelFooterLayout.createSequentialGroup()
.addGroup(panelFooterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(progressBar, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonLaunchHon, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(panelFooterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(buttonApplyMods, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonAddMod, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(labelStatus, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
panelModListViews.setMinimumSize(new java.awt.Dimension(378, 518));
panelModListViews.setName("panelModListViews"); // NOI18N
panelModListViews.setPreferredSize(new java.awt.Dimension(378, 518));
panelModListViews.setLayout(new java.awt.CardLayout());
scrollPaneTableModList.setName("scrollPaneTableModList"); // NOI18N
tableModList.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
this.columnNames
) {
Class[] types = new Class [] {
java.lang.Boolean.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, javax.swing.ImageIcon.class
};
boolean[] canEdit = new boolean [] {
true, false, false, false, false, false, false, false
};
public Class getColumnClass(int columnIndex) {
return types[columnIndex];
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
tableModList.setFocusable(false);
tableModList.setName("tableModList"); // NOI18N
tableModList.setRowHeight(22);
tableModList.setSelectionBackground(new java.awt.Color(80, 167, 254));
tableModList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
scrollPaneTableModList.setViewportView(tableModList);
panelModListViews.add(scrollPaneTableModList, "DETAILS_VIEW_IDENT");
scrollPaneListModList.setName("scrollPaneListModList"); // NOI18N
listModList.setCellRenderer(new IconsListCellRenderer());
listModList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
listModList.setAutoscrolls(false);
listModList.setLayoutOrientation(javax.swing.JList.HORIZONTAL_WRAP);
listModList.setName("listModList"); // NOI18N
listModList.addHierarchyBoundsListener(new java.awt.event.HierarchyBoundsListener() {
public void ancestorMoved(java.awt.event.HierarchyEvent evt) {
}
public void ancestorResized(java.awt.event.HierarchyEvent evt) {
listModListAncestorResized(evt);
}
});
scrollPaneListModList.setViewportView(listModList);
panelModListViews.add(scrollPaneListModList, "ICONS_VIEW_IDENT");
panelModOreview.setMinimumSize(new java.awt.Dimension(317, 523));
panelModOreview.setName("panelModOreview"); // NOI18N
panelModOreview.setPreferredSize(new java.awt.Dimension(317, 523));
labelModIcon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/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
scrollPaneAreaModDesc.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
scrollPaneAreaModDesc.setName("scrollPaneAreaModDesc"); // NOI18N
areaModDesc.setBackground(new java.awt.Color(240, 240, 240));
areaModDesc.setColumns(20);
areaModDesc.setEditable(false);
areaModDesc.setFont(buttonAddMod.getFont());
areaModDesc.setLineWrap(true);
areaModDesc.setRows(5);
areaModDesc.setText("mod desc");
areaModDesc.setWrapStyleWord(true);
areaModDesc.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
areaModDesc.setMargin(new java.awt.Insets(5, 5, 5, 5));
areaModDesc.setName("areaModDesc"); // NOI18N
scrollPaneAreaModDesc.setViewportView(areaModDesc);
buttonEnableMod.setText(L10n.getString("button.enablemod"));
buttonEnableMod.setToolTipText(L10n.getString("tooltip.mod.button.enable"));
buttonEnableMod.setName("buttonEnableMod"); // NOI18N
buttonViewModDetails1.setText(L10n.getString("button.viewmoddetails"));
buttonViewModDetails1.setToolTipText("Return to the Mod details view");
buttonViewModDetails1.setName("buttonViewModDetails1"); // NOI18N
javax.swing.GroupLayout panelModOreviewLayout = new javax.swing.GroupLayout(panelModOreview);
panelModOreview.setLayout(panelModOreviewLayout);
panelModOreviewLayout.setHorizontalGroup(
panelModOreviewLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelModOreviewLayout.createSequentialGroup()
.addContainerGap()
.addGroup(panelModOreviewLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(buttonEnableMod, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(panelModOreviewLayout.createSequentialGroup()
.addGap(6, 6, 6)
.addComponent(labelModIcon)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panelModOreviewLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(labelModAuthor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(labelModName, javax.swing.GroupLayout.DEFAULT_SIZE, 219, Short.MAX_VALUE)))
.addComponent(scrollPaneAreaModDesc, javax.swing.GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE))
.addContainerGap())
.addGroup(panelModOreviewLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelModOreviewLayout.createSequentialGroup()
.addContainerGap(175, Short.MAX_VALUE)
.addComponent(buttonViewModDetails1, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap()))
);
panelModOreviewLayout.setVerticalGroup(
panelModOreviewLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelModOreviewLayout.createSequentialGroup()
.addGap(13, 13, 13)
.addGroup(panelModOreviewLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(labelModIcon)
.addGroup(panelModOreviewLayout.createSequentialGroup()
.addComponent(labelModName)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(labelModAuthor)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(scrollPaneAreaModDesc, javax.swing.GroupLayout.DEFAULT_SIZE, 410, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(buttonEnableMod)
.addContainerGap())
.addGroup(panelModOreviewLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelModOreviewLayout.createSequentialGroup()
.addContainerGap(485, Short.MAX_VALUE)
.addComponent(buttonViewModDetails1)
.addContainerGap()))
);
panelModChangelog.setMinimumSize(new java.awt.Dimension(317, 523));
panelModChangelog.setName("panelModChangelog"); // NOI18N
panelModChangelog.setPreferredSize(new java.awt.Dimension(317, 523));
labelModIcon1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/gui/resources/icon.png"))); // NOI18N
labelModIcon1.setName("labelModIcon1"); // NOI18N
labelModName1.setFont(labelModName1.getFont().deriveFont(labelModName1.getFont().getStyle() | java.awt.Font.BOLD, labelModName1.getFont().getSize()+1));
labelModName1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
labelModName1.setText("mod name");
labelModName1.setToolTipText("This is the Mod's name"); // NOI18N
labelModName1.setName("labelModName1"); // NOI18N
labelModAuthor1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
labelModAuthor1.setText("mod author");
labelModAuthor1.setToolTipText("This is the Mod's author"); // NOI18N
labelModAuthor1.setName("labelModAuthor1"); // NOI18N
buttonViewModDetails.setText(L10n.getString("button.viewmoddetails"));
buttonViewModDetails.setToolTipText("Return to the Mod details view");
buttonViewModDetails.setName("buttonViewModDetails"); // NOI18N
scrollPaneAreaModChangelog.setName("scrollPaneAreaModChangelog"); // NOI18N
areaModChangelog.setContentType("text/html");
areaModChangelog.setEditable(false);
areaModChangelog.setName("areaModChangelog"); // NOI18N
scrollPaneAreaModChangelog.setViewportView(areaModChangelog);
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(scrollPaneAreaModChangelog, javax.swing.GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE)
.addGroup(panelModChangelogLayout.createSequentialGroup()
.addComponent(labelModIcon1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panelModChangelogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(labelModAuthor1, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE)
.addComponent(labelModName1, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE)))
.addComponent(buttonViewModDetails, javax.swing.GroupLayout.DEFAULT_SIZE, 293, 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(labelModIcon1)
.addGroup(panelModChangelogLayout.createSequentialGroup()
.addComponent(labelModName1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(labelModAuthor1)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(scrollPaneAreaModChangelog, javax.swing.GroupLayout.DEFAULT_SIZE, 423, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(buttonViewModDetails)
.addContainerGap())
);
panelModDetails.setMinimumSize(new java.awt.Dimension(317, 523));
panelModDetails.setName("panelModDetails"); // NOI18N
panelModDetails.setPreferredSize(new java.awt.Dimension(317, 523));
labelRequirements.setFont(labelRequirements.getFont().deriveFont(labelRequirements.getFont().getStyle() | java.awt.Font.BOLD));
labelRequirements.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
labelRequirements.setText(L10n.getString("label.requires"));
scrollPaneListRequirements.setName("scrollPaneListRequirements"); // 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));
scrollPaneListRequirements.setViewportView(listRequirements);
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
buttonViewModOreview.setText("Mod Oreview");
buttonViewModOreview.setName("buttonViewModOreview"); // NOI18N
labelModIcon2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/gui/resources/icon.png"))); // NOI18N
labelModIcon2.setName("labelModIcon2"); // NOI18N
labelModName2.setFont(labelModName2.getFont().deriveFont(labelModName2.getFont().getStyle() | java.awt.Font.BOLD, labelModName2.getFont().getSize()+1));
labelModName2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
labelModName2.setText("mod name");
labelModName2.setToolTipText("This is the Mod's name"); // NOI18N
labelModName2.setName("labelModName2"); // NOI18N
labelModAuthor2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
labelModAuthor2.setText("mod author");
labelModAuthor2.setToolTipText("This is the Mod's author"); // NOI18N
labelModAuthor2.setName("labelModAuthor2"); // NOI18N
jTextField1.setText("jTextField1");
jTextField1.setName("jTextField1"); // NOI18N
jLabel1.setText("eseeubotar um texto grande");
jLabel1.setName("jLabel1"); // 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)
.addComponent(scrollPaneListRequirements, javax.swing.GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE)
.addGroup(panelModDetailsLayout.createSequentialGroup()
.addGroup(panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(buttonViewModOreview, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(buttonUpdateMod, javax.swing.GroupLayout.PREFERRED_SIZE, 130, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 33, Short.MAX_VALUE)
.addGroup(panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(buttonVisitWebsite, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(buttonViewChagelog, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(labelRequirements, javax.swing.GroupLayout.DEFAULT_SIZE, 293, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelModDetailsLayout.createSequentialGroup()
.addComponent(labelModIcon2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(labelModAuthor2, javax.swing.GroupLayout.PREFERRED_SIZE, 238, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(labelModName2, javax.swing.GroupLayout.PREFERRED_SIZE, 238, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(panelModDetailsLayout.createSequentialGroup()
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 179, Short.MAX_VALUE)))
.addContainerGap())
);
panelModDetailsLayout.setVerticalGroup(
panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelModDetailsLayout.createSequentialGroup()
.addContainerGap()
.addGroup(panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(labelModIcon2)
.addGroup(panelModDetailsLayout.createSequentialGroup()
.addComponent(labelModName2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(labelModAuthor2)))
.addGap(71, 71, 71)
.addGroup(panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 224, Short.MAX_VALUE)
.addComponent(labelRequirements)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(scrollPaneListRequirements, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(buttonUpdateMod)
.addComponent(buttonVisitWebsite))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panelModDetailsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(buttonViewChagelog)
.addComponent(buttonViewModOreview))
.addContainerGap())
);
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);
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.setSelected(true);
itemViewDetails.setText(L10n.getString("menu.view.details"));
itemViewDetails.setName("itemViewDetails"); // NOI18N
menuView.add(itemViewDetails);
viewModesGroup.add(itemViewIcons);
itemViewIcons.setMnemonic(L10n.getMnemonic("menu.view.icons"));
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);
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)
.addGroup(layout.createSequentialGroup()
.addComponent(panelModListViews, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGap(5, 5, 5)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panelModChangelog, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(panelModDetails, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(panelModOreview, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(panelFooter, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panelModListViews, javax.swing.GroupLayout.DEFAULT_SIZE, 523, Short.MAX_VALUE)
.addComponent(panelModChangelog, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(panelModDetails, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(panelModOreview, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(7, 7, 7)
.addComponent(panelFooter, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-718)/2, (screenSize.height-633)/2, 718, 633);
}// </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);
}
checkBoxIgnoreGameVersion.setSelected(ManagerOptions.getInstance().isIgnoreGameVersion());
checkBoxAutoUpdate.setSelected(ManagerOptions.getInstance().isAutoUpdate());
checkBoxDeveloperMode.setSelected(ManagerOptions.getInstance().isDeveloperMode());
dialogOptions.setSize(600, 410);
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 listModListAncestorResized(java.awt.event.HierarchyEvent evt) {//GEN-FIRST:event_listModListAncestorResized
listModList.setVisibleRowCount(-1);
}//GEN-LAST:event_listModListAncestorResized
/**
* 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);
}
/**
* Custom table model of the mod list table
*/
private class ModTableModel extends DefaultTableModel {
Class[] types = new Class[]{
java.lang.Boolean.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
};
boolean[] canEdit = new boolean[]{
true, false, false, false, false
};
public ModTableModel(Object[][] data, Object[] columnNames) {
super(data, columnNames);
}
@Override
public Class<?> getColumnClass(int columnIndex) {
if (getRowCount() > 0 && getValueAt(0, columnIndex) != null) {
return getValueAt(0, columnIndex).getClass();
}
return super.getColumnClass(columnIndex);
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit[columnIndex];
}
}
public void deleteSelectedMod() {
Mod mod = null;
if (model.getViewType() == ManagerOptions.ViewType.ICONS) {
mod = (Mod) listModList.getSelectedValue();
} else {
int selectedRow = tableModList.getSelectedRow();
try {
mod = (Mod) tableData[selectedRow][5];
} catch (IndexOutOfBoundsException e) {
if (selectedRow != -1) {
logger.error("Cannot delete mod at index " + selectedRow);
}
return;
}
}
model.getAppliedMods().remove(mod);
model.getMods().remove(mod);
if (model.getViewType() == ManagerOptions.ViewType.DETAILS) {
((DefaultTableModel) tableModList.getModel()).removeRow(tableModList.getSelectedRow());
}
updateModTable();
}
/**
* Update table with the list of mods
*
* @param mods list of mods to display
*/
public void updateModTable() {
/*
animating = false;
int enabled = 0, disabled = 0, applied = 0;
// Store how the table is currently sorted
if (model.getViewType() == ManagerOptions.ViewType.ICONS) {
int preserve = listModList.getSelectedIndex();
((CardLayout) panelModListViews.getLayout()).show(panelModListViews, ICONS_VIEW_IDENT);
DefaultListModel modsListModel = new DefaultListModel();
ArrayList<Mod> mods = ManagerOptions.getInstance().getMods();
for (int i = 0; i < mods.size(); ++i) {
modsListModel.addElement(mods.get(i));
if (mods.get(i).isEnabled()) {
if (ManagerOptions.getInstance().getAppliedMods().contains(mods.get(i))) {
applied++;
} else {
enabled++;
}
} else {
disabled++;
}
}
listModList.setModel(modsListModel);
listModList.setLayoutOrientation(JList.HORIZONTAL_WRAP);
// This essentially "packs" all of the icons.
listModList.setVisibleRowCount(-1);
listModList.setSelectedIndex(preserve);
} else {
((CardLayout) panelModListViews.getLayout()).show(panelModListViews, DETAILS_VIEW_IDENT);
Object o = tableModList.getRowSorter().getSortKeys();
ArrayList<Mod> mods = ManagerOptions.getInstance().getMods();
// Save current selected row
int selectedRow = tableModList.getSelectedRow();
if (selectedRow == -1) {
selectedRow = 0;
}
this.tableData = new Object[mods.size()][];
// Display all mods
for (int i = 0; i < mods.size(); i++) {
// new space for mod
this.tableData[i] = new Object[6];
Mod mod = mods.get(i);
this.tableData[i][0] = (Boolean) mod.isEnabled();
this.tableData[i][1] = (String) mod.getName();
this.tableData[i][2] = (String) mod.getAuthor();
this.tableData[i][3] = (String) mod.getVersion();
// Storing mod into the data for sorting
if (mod.isEnabled()) {
if (ManagerOptions.getInstance().getAppliedMods().contains(mod)) {
this.tableData[i][4] = (String) L10n.getString("table.modstatus.applied");
applied++;
} else {
this.tableData[i][4] = (String) L10n.getString("table.modstatus.enabled");
enabled++;
}
} else {
this.tableData[i][4] = (String) L10n.getString("table.modstatus.disabled");
disabled++;
}
this.tableData[i][5] = (Mod) mod;
}
// Update table model
DefaultTableModel dtm = (DefaultTableModel) tableModList.getModel();
dtm.setDataVector(this.tableData, this.columnNames);
if (model.getViewType() == ManagerOptions.ViewType.ICONS) {
Object[] iconsData = new Object[mods.size()];
for (int i = 0; i < mods.size(); i++) {
Mod mod = mods.get(i);
iconsData[i] = (ImageIcon) mod.getIcon();
}
dtm.addColumn("Icons", iconsData);
tableModList.setRowHeight(mods.get(0).getIcon().getIconHeight());
} else {
//TableCellRenderer renderer = tableModList.getCellRenderer(0, 0);
// TODO: Make this get the correct height from the table cell
// renderers.
tableModList.setRowHeight(25);
}
// Restore the sort
tableModList.getRowSorter().setSortKeys((List<? extends SortKey>) o);
ArrayList<Integer> temp = new ArrayList<Integer>();
try {
for (int i = 0; i < ManagerOptions.getInstance().getColumnsWidth().size(); i++) {
temp.add(new Integer(ManagerOptions.getInstance().getColumnsWidth().get(i)));
}
} catch (NullPointerException e) {
// I really don't know why is this throwing NullPointException when there is no managerOptions.xml file, but this will solve for now
// TODO: fix this bug
}
try {
if (model.getColumnsWidth() != null) {
if (model.getColumnsWidth().size() != tableModList.getColumnModel().getColumnCount()) {
// If we change the interface (columns number from one version to another), nothing else will need to be done =]
model.setColumnsWidth(null);
model.setColumnsOrder(null);
} else {
tableModList.deserializeColumnOrder(model.getColumnsOrder());
int i = 0;
Iterator<Integer> it = model.getColumnsWidth().iterator();
while (it.hasNext()) {
Integer integer = it.next();
tableModList.getColumnModel().getColumn(i).setWidth(integer);
tableModList.getColumnModel().getColumn(i).setPreferredWidth(integer);
i++;
}
}
}
} catch (NullPointerException e) {
// I really don't know why is this throwing NullPointException when there is no managerOptions.xml file, but this will solve for now
// TODO: fix this bug
}
if (model.getViewType() == ManagerOptions.ViewType.ICONS) {
tableModList.getColumnModel().getColumn(5).setWidth(mods.get(0).getIcon().getIconWidth());
tableModList.getColumnModel().getColumn(5).setPreferredWidth(mods.get(0).getIcon().getIconWidth());
}
// Restore selected row
tableModList.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tableModList.getSelectionModel().setSelectionInterval(0, selectedRow);
}
// Display details of selected mod
displayModDetail();
setStatusMessage("<html><font color=#009900>" + (enabled + applied) + "</font>/<font color=#0033cc>" + (enabled + disabled + applied) + "</font> " + L10n.getString("status.modsenabled") + "</html>", false);
*/
}
/**
* Highlight the mods that is required to enable before or disable before the current select mod do
*/
public void highlightRequiredMods() {
int selectedRow = tableModList.getSelectedRow();
if (selectedRow == -1) {
return;
}
}
/**
* Display details of the selected mod in the right panel
*/
public void displayModDetail() {
panelModChangelog.setVisible(false);
panelModOreview.setVisible(true);
// Update for the sorting (this is really overhead)
for (int i = 0; i < tableModList.getRowCount(); i++) {
String modName = (String) getModListTable().getValueAt(i, 1);
for (int k = 0; k < tableData.length; k++) {
if (((String) tableData[k][1]).equals(modName)) {
Object[] o = tableData[k];
tableData[k] = tableData[i];
tableData[i] = (Object[]) o;
}
}
}
// 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) {
buttonVisitWebsite.setEnabled(false);
} else {
buttonVisitWebsite.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);
labelModAuthor1.setText(labelModAuthor.getText());
labelModName1.setText(labelModName.getText());
labelModIcon1.setIcon(labelModIcon.getIcon());
areaModChangelog.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();
highlightRequiredMods();
}
}
/**
* 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);
scrollPaneListRequirements.setVisible(visible);
}
/**
* This method calls in all the components the setEanbled method to avoid input on the screen.
*/
public void setInputEnabled(boolean enabled) {
tableModList.setEnabled(enabled);
panelFooter.setEnabled(enabled);
mainMenu.setEnabled(enabled);
}
public void setStatusMessage(String status, boolean animate) {
animating = animate;
labelStatus.setText(status);
if (animate) {
Task task = new Task<Void, Void>(Application.getInstance()) {
private long date;
private int dots = 0;
private String originalMessage;
@Override
protected Void doInBackground() throws Exception {
originalMessage = labelStatus.getText();
while (animating) {
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 void buttonEnableModAddActionListener(ActionListener al) {
buttonEnableMod.addActionListener(al);
}
/*public void labelVisitWebsiteAddMouseListener(MouseListener ml) {
//labelVisitWebsite.addMouseListener(ml);
}*/
public void tableRemoveListSelectionListener(ListSelectionListener sl) {
tableModList.getSelectionModel().removeListSelectionListener(sl);
tableModList.getColumnModel().getSelectionModel().removeListSelectionListener(sl);
}
public void tableAddListSelectionListener(ListSelectionListener sl) {
tableModList.getSelectionModel().addListSelectionListener(sl);
tableModList.getColumnModel().getSelectionModel().addListSelectionListener(sl);
}
public void iconsListAddListSelectionListener(ListSelectionListener sl) {
listModList.getSelectionModel().addListSelectionListener(sl);
}
public void tableAddModelListener(TableModelListener tml) {
tableModList.getModel().addTableModelListener(tml);
}
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);
}
public void itemExitAddActionListener(ActionListener al) {
itemExit.addActionListener(al);
}
public void buttonApplyLafAddActionListener(ActionListener al) {
buttonApplyLaf.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 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 String getSelectedLafClass() {
return ((LaF) comboBoxLafs.getSelectedItem()).getLafClass();
}
public String getSelectedLanguage() {
return ((Language) comboBoxChooseLanguage.getSelectedItem()).getCode();
}
public JDialog getPrefsDialog() {
return dialogOptions;
}
public JPanel getPanelModDetails() {
return panelModOreview;
}
public JPanel getPanelModChangelog() {
return panelModChangelog;
}
public JButton getButtonViewModDetails() {
return buttonViewModDetails;
}
public JButton getButtonViewChagelog() {
return buttonViewChagelog;
}
public JTable getModListTable() {
return this.tableModList;
}
public JList getModListList() {
return this.listModList;
}
public Mod getSelectedMod() {
Mod mod = null;
if (model.getViewType() == ManagerOptions.ViewType.ICONS) {
mod = (Mod) listModList.getSelectedValue();
} else {
int selectedRow = tableModList.getSelectedRow();
try {
mod = (Mod) tableData[selectedRow][5];
} catch (IndexOutOfBoundsException e) {
}
}
if (mod == null && !model.getMods().isEmpty()) {
mod = model.getMods().get(0);
}
return mod;
}
public String getSelectedHonFolder() {
return textFieldHonFolder.getText();
}
public JButton getButtonLaunchHon() {
return buttonLaunchHon;
}
public JButton getButtonApplyMods() {
return buttonApplyMods;
}
public String getCLArguments() {
return textFieldCLArguments.getText();
}
private long date = 0;
/**
* 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 the pop-up right click menu in the JTable
*/
class PopupListener extends MouseAdapter {
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
if (model.getViewType() == ManagerOptions.ViewType.DETAILS) {
tableModList.setRowSelectionInterval(tableModList.rowAtPoint(e.getPoint()),
tableModList.rowAtPoint(e.getPoint()));
} else if (model.getViewType() == ManagerOptions.ViewType.ICONS) {
// JList doesn't have a fancy "rowAtPoint" like JTable, so work
// through the visible items ourselves.
int lim = listModList.getLastVisibleIndex();
for (int i = listModList.getFirstVisibleIndex(); i <= lim; ++i) {
if (listModList.getCellBounds(i, i).contains(e.getPoint())) {
listModList.setSelectedIndex(i);
break;
}
}
}
showPopup(e);
}
private void showPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
Mod mod = getSelectedMod();
if (mod.isEnabled()) {
popupItemMenuEnableDisableMod.setText(L10n.getString("button.disablemod"));
} else {
popupItemMenuEnableDisableMod.setText(L10n.getString("button.enablemod"));
}
popupItemMenuUpdateMod.setActionCommand(mod.getName());
popupItemMenuEnableDisableMod.setActionCommand(mod.getName());
if (mod.getChangelog() == null) {
popupItemMenuViewChangelog.setEnabled(false);
} else {
popupItemMenuViewChangelog.setEnabled(true);
popupItemMenuViewChangelog.setActionCommand("display changelog");
}
rightClickTableMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
}
/**
* Class to renderer cells in the Icons View list.
*/
private class IconsListCellRenderer extends DefaultListCellRenderer {
public IconsListCellRenderer() {
}
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
JLabel data = (JLabel) super.getListCellRendererComponent(list,
value, index, isSelected, cellHasFocus);
data.setIcon(((Mod) value).getIcon());
data.setText(((Mod) value).getName());
// Grays out the icons
data.setEnabled(((Mod) value).isEnabled());
return data;
}
}
/**
* 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;
}
public static void main(String[] args) {
try {
L10n.load();
ManagerGUI1 gui = new ManagerGUI1();
gui.fullyLoaded = true;
gui.setVisible(true);
gui.panelModChangelog.setVisible(false);
gui.panelModOreview.setVisible(false);
gui.panelModDetails.setVisible(true);
} catch (IOException ex) {
java.util.logging.Logger.getLogger(ManagerGUI1.class.getName()).log(Level.SEVERE, null, ex);
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JEditorPane areaModChangelog;
private javax.swing.JTextArea areaModDesc;
private javax.swing.JButton buttonAddMod;
private javax.swing.JButton buttonApplyLaf;
private javax.swing.JButton buttonApplyMods;
private javax.swing.JButton buttonCancel;
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 buttonViewModDetails1;
private javax.swing.JButton buttonViewModOreview;
private javax.swing.JButton buttonVisitWebsite;
private javax.swing.JCheckBox checkBoxAutoUpdate;
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 itemImportFromOldModManager;
private javax.swing.JMenuItem itemOpenModFolder;
private javax.swing.JMenuItem itemOpenPreferences;
private javax.swing.JMenuItem itemRefresh;
private javax.swing.JMenuItem itemUnapplyAllMods;
private javax.swing.JRadioButtonMenuItem itemViewDetails;
private javax.swing.JRadioButtonMenuItem itemViewIcons;
private javax.swing.JMenuItem itemVisitForumThread;
private javax.swing.JLabel jLabel1;
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.JTextField jTextField1;
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 labelModAuthor1;
private javax.swing.JLabel labelModAuthor2;
private javax.swing.JLabel labelModIcon;
private javax.swing.JLabel labelModIcon1;
private javax.swing.JLabel labelModIcon2;
private javax.swing.JLabel labelModName;
private javax.swing.JLabel labelModName1;
private javax.swing.JLabel labelModName2;
private javax.swing.JLabel labelModsFolder;
private javax.swing.JLabel labelRequirements;
private javax.swing.JLabel labelStatus;
private javax.swing.JList listModList;
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 javax.swing.JPanel panelFooter;
private javax.swing.JPanel panelModChangelog;
private javax.swing.JPanel panelModDetails;
private javax.swing.JPanel panelModListViews;
private javax.swing.JPanel panelModOreview;
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.JScrollPane scrollPaneAreaModChangelog;
private javax.swing.JScrollPane scrollPaneAreaModDesc;
private javax.swing.JScrollPane scrollPaneListModList;
private javax.swing.JScrollPane scrollPaneListRequirements;
private javax.swing.JScrollPane scrollPaneTableModList;
private javax.swing.JTable tableModList;
private javax.swing.JTextField textFieldCLArguments;
private javax.swing.JTextField textFieldHonFolder;
private javax.swing.JTextField textFieldModsFolder;
// End of variables declaration//GEN-END:variables
}