Changeset 631 for AE/installer2/src


Ignore:
Timestamp:
Jan 18, 2013, 4:45:11 PM (12 years ago)
Author:
alloc
Message:

AEI2 0.90:

  • Added blank persist.dat for UnlockLevel to always work
  • Made local paths use the sanitized mod-name
  • Added mod-state column to mod table
Location:
AE/installer2/src/net/oni2/aeinstaller
Files:
5 added
1 deleted
8 edited

Legend:

Unmodified
Added
Removed
  • AE/installer2/src/net/oni2/aeinstaller/AEInstaller.properties

    r630 r631  
    11appname=AE Installer 2
    2 appversion=0.89
     2appversion=0.90
  • AE/installer2/src/net/oni2/aeinstaller/backend/mods/Mod.java

    r623 r631  
    216216        }
    217217
     218        private String getSanitizedPathName() {
     219                return name.replaceAll("[^a-zA-Z0-9_.-]", "_");
     220        }
     221
    218222        /**
    219223         * @return Path to local mod folder
     
    233237                }
    234238
    235                 return new File(Paths.getModsPath(), folderStart);
     239                return new File(Paths.getModsPath(), folderStart
     240                                + getSanitizedPathName());
    236241        }
    237242
     
    254259
    255260        /**
     261         * @return Is mod installed?
     262         */
     263        public boolean isInstalled() {
     264                return ModManager.getInstance().isModInstalled(this);
     265        }
     266
     267        /**
    256268         * @return Name of mod
    257269         */
     
    376388                return exeFile;
    377389        }
     390
    378391        /**
    379392         * @return Icon file of this tool
  • AE/installer2/src/net/oni2/aeinstaller/backend/mods/ModManager.java

    r626 r631  
    334334         * @return Is mod installed?
    335335         */
    336         public boolean isModInstalled(Mod m) {
     336        boolean isModInstalled(Mod m) {
    337337                return currentlyInstalled.contains(m.getPackageNumber());
    338338        }
  • AE/installer2/src/net/oni2/aeinstaller/backend/oni/Installer.java

    r625 r631  
    88import java.io.FilenameFilter;
    99import java.io.IOException;
     10import java.io.InputStream;
    1011import java.io.PrintWriter;
    1112import java.text.SimpleDateFormat;
     
    1920import java.util.Vector;
    2021
     22import net.oni2.aeinstaller.AEInstaller2;
    2123import net.oni2.aeinstaller.backend.Paths;
    2224import net.oni2.aeinstaller.backend.Settings;
     
    244246                combineBSLFolders(mods, listener);
    245247
    246                 if (Settings.getInstance().get("copyintro", false)) {
    247                         File src = new File(Paths.getVanillaGDF(), "intro.bik");
    248                         if (src.exists()) {
    249                                 try {
    250                                         FileUtils.copyFileToDirectory(src, Paths.getEditionGDF());
    251                                 } catch (IOException e) {
    252                                         e.printStackTrace();
    253                                 }
    254                         }
    255                 }
    256                 if (Settings.getInstance().get("copyoutro", true)) {
    257                         File src = new File(Paths.getVanillaGDF(), "outro.bik");
    258                         if (src.exists()) {
    259                                 try {
    260                                         FileUtils.copyFileToDirectory(src, Paths.getEditionGDF());
    261                                 } catch (IOException e) {
    262                                         e.printStackTrace();
    263                                 }
    264                         }
    265                 }
     248                copyVideos();
    266249
    267250                if (unlockLevels.size() > 0) {
    268                         File dat = new File(Paths.getEditionBasePath(), "persist.dat");
    269                         if (dat.exists()) {
    270                                 PersistDat save = new PersistDat(dat);
    271                                 HashSet<Integer> currentlyUnlocked = save.getUnlockedLevels();
    272                                 currentlyUnlocked.addAll(unlockLevels);
    273                                 save.setUnlockedLevels(currentlyUnlocked);
    274                                 save.close();
    275                         } else {
    276                                 // TODO: what if persist.dat does not exist?
    277                         }
     251                        unlockLevels(unlockLevels);
    278252                }
    279253        }
     
    445419        }
    446420
     421        private static void copyVideos() {
     422                if (Settings.getInstance().get("copyintro", false)) {
     423                        File src = new File(Paths.getVanillaGDF(), "intro.bik");
     424                        if (src.exists()) {
     425                                try {
     426                                        FileUtils.copyFileToDirectory(src, Paths.getEditionGDF());
     427                                } catch (IOException e) {
     428                                        e.printStackTrace();
     429                                }
     430                        }
     431                }
     432                if (Settings.getInstance().get("copyoutro", true)) {
     433                        File src = new File(Paths.getVanillaGDF(), "outro.bik");
     434                        if (src.exists()) {
     435                                try {
     436                                        FileUtils.copyFileToDirectory(src, Paths.getEditionGDF());
     437                                } catch (IOException e) {
     438                                        e.printStackTrace();
     439                                }
     440                        }
     441                }
     442        }
     443
     444        private static void unlockLevels(HashSet<Integer> unlockLevels) {
     445                File dat = new File(Paths.getEditionBasePath(), "persist.dat");
     446                if (!dat.exists()) {
     447                        InputStream is = AEInstaller2.class.getResourceAsStream("/net/oni2/aeinstaller/resources/persist.dat");
     448                        try {
     449                                FileUtils.copyInputStreamToFile(is, dat);
     450                        } catch (IOException e) {
     451                                // TODO Auto-generated catch block
     452                                e.printStackTrace();
     453                        }
     454                }
     455                PersistDat save = new PersistDat(dat);
     456                HashSet<Integer> currentlyUnlocked = save.getUnlockedLevels();
     457                currentlyUnlocked.addAll(unlockLevels);
     458                save.setUnlockedLevels(currentlyUnlocked);
     459                save.close();
     460        }
     461
    447462        /**
    448463         * Initializes the Edition core
  • AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.java

    r630 r631  
    44import java.awt.Desktop;
    55import java.awt.event.ActionEvent;
    6 import java.awt.event.ActionListener;
    76import java.awt.event.ItemEvent;
    87import java.awt.event.ItemListener;
    9 import java.awt.event.MouseAdapter;
    10 import java.awt.event.MouseEvent;
    118import java.io.File;
    129import java.io.IOException;
    1310import java.net.URL;
    14 import java.util.ArrayList;
    1511import java.util.HashMap;
    1612import java.util.HashSet;
    17 import java.util.List;
    1813import java.util.ResourceBundle;
    1914import java.util.TreeMap;
     
    2722import javax.swing.JCheckBox;
    2823import javax.swing.JComboBox;
    29 import javax.swing.JComponent;
    3024import javax.swing.JFileChooser;
    3125import javax.swing.JFrame;
     
    3529import javax.swing.JOptionPane;
    3630import javax.swing.JPanel;
    37 import javax.swing.JPopupMenu;
    3831import javax.swing.JRadioButton;
    3932import javax.swing.JSplitPane;
    40 import javax.swing.JTable;
    41 import javax.swing.ListSelectionModel;
    42 import javax.swing.RowSorter;
    43 import javax.swing.SortOrder;
    4433import javax.swing.SwingUtilities;
    45 import javax.swing.event.ListSelectionEvent;
    46 import javax.swing.event.ListSelectionListener;
     34import javax.swing.ToolTipManager;
    4735import javax.swing.filechooser.FileFilter;
    48 import javax.swing.table.TableRowSorter;
    4936
    5037import net.oni2.aeinstaller.AEInstaller2;
     
    6855import net.oni2.aeinstaller.gui.downloadwindow.Downloader;
    6956import net.oni2.aeinstaller.gui.modtable.DownloadSizeListener;
    70 import net.oni2.aeinstaller.gui.modtable.ModTableFilter;
    71 import net.oni2.aeinstaller.gui.modtable.ModTableModel;
     57import net.oni2.aeinstaller.gui.modtable.ModSelectionListener;
     58import net.oni2.aeinstaller.gui.modtable.ModTable;
    7259import net.oni2.aeinstaller.gui.settings.SettingsDialog;
    7360import net.oni2.aeinstaller.gui.toolmanager.ToolManager;
     
    8471 */
    8572public class MainWin extends JFrame implements ApplicationListener,
    86                 DownloadSizeListener {
     73                DownloadSizeListener, ModSelectionListener {
    8774        private static final long serialVersionUID = -4027395051382659650L;
    8875
     
    10390        private JRadioButton radOnline;
    10491        private JRadioButton radLocal;
    105         private JTable tblMods;
    106         private ModTableModel model;
    107         private TableRowSorter<ModTableModel> sorter;
     92        private ModTable tblMods;
    10893        private JLabel lblDownloadSizeVal;
    10994
     
    136121
    137122                contents.setDividerLocation(400);
     123                contents.setResizeWeight(0.4);
    138124
    139125                if (Settings.getPlatform() == Platform.MACOS) {
    140126                        mainMenu.setVisible(false);
    141127                }
     128
     129                ToolTipManager.sharedInstance().setInitialDelay(250);
    142130
    143131                getRootPane().setDefaultButton(btnInstall);
    144132                lblDownloadSizeVal.setText(SizeFormatter.format(0, 2));
    145133                radAll.setSelected(true);
     134
     135                tblMods.addModSelectionListener(this);
     136                tblMods.addDownloadSizeListener(this);
    146137        }
    147138
     
    158149                }
    159150                cmbModTypes.setSelectedIndex(0);
    160         }
    161 
    162         private void initTable() {
    163                 tblMods.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    164                 tblMods.getSelectionModel().addListSelectionListener(
    165                                 new ListSelectionListener() {
    166                                         @Override
    167                                         public void valueChanged(ListSelectionEvent e) {
    168                                                 int viewRow = tblMods.getSelectedRow();
    169                                                 if (viewRow < 0) {
    170                                                         modSelection(null);
    171                                                 } else {
    172                                                         int modelRow = tblMods
    173                                                                         .convertRowIndexToModel(viewRow);
    174                                                         Mod mod = (Mod) model.getValueAt(modelRow, -1);
    175                                                         modSelection(mod);
    176                                                 }
    177                                         }
    178                                 });
    179                 tblMods.addMouseListener(new MouseAdapter() {
    180                         private void common(MouseEvent e) {
    181                                 int r = tblMods.rowAtPoint(e.getPoint());
    182                                 if (r >= 0 && r < tblMods.getRowCount())
    183                                         tblMods.setRowSelectionInterval(r, r);
    184                                 else
    185                                         tblMods.clearSelection();
    186 
    187                                 int rowindex = tblMods.getSelectedRow();
    188                                 if (rowindex >= 0) {
    189                                         if (e.isPopupTrigger()
    190                                                         && e.getComponent() instanceof JTable) {
    191                                                 int modelRow = tblMods.convertRowIndexToModel(rowindex);
    192                                                 final Mod mod = (Mod) model.getValueAt(modelRow, -1);
    193 
    194                                                 if (mod.isLocalAvailable()) {
    195                                                         JPopupMenu popup = new JPopupMenu();
    196                                                         JMenuItem openModFolder = new JMenuItem(bundle
    197                                                                         .getString("openModFolder.text"));
    198                                                         openModFolder
    199                                                                         .addActionListener(new ActionListener() {
    200                                                                                 @Override
    201                                                                                 public void actionPerformed(
    202                                                                                                 ActionEvent arg0) {
    203                                                                                         try {
    204                                                                                                 Desktop.getDesktop().open(
    205                                                                                                                 mod.getLocalPath());
    206                                                                                         } catch (IOException e) {
    207                                                                                                 e.printStackTrace();
    208                                                                                         }
    209                                                                                 }
    210                                                                         });
    211                                                         popup.add(openModFolder);
    212                                                         popup.show(e.getComponent(), e.getX(), e.getY());
    213                                                 }
    214                                         }
    215                                 }
    216                         }
    217 
    218                         @Override
    219                         public void mousePressed(MouseEvent e) {
    220                                 common(e);
    221                         }
    222 
    223                         @Override
    224                         public void mouseReleased(MouseEvent e) {
    225                                 common(e);
    226                         }
    227                 });
    228                 // To get checkbox-cells with background of row
    229                 ((JComponent) tblMods.getDefaultRenderer(Boolean.class))
    230                                 .setOpaque(true);
    231 
    232                 model = new ModTableModel();
    233                 model.addDownloadSizeListener(this);
    234 
    235                 tblMods.setModel(model);
    236 
    237                 sorter = new TableRowSorter<ModTableModel>(model);
    238                 tblMods.setRowSorter(sorter);
    239 
    240                 sorter.setRowFilter(new ModTableFilter(null, 0));
    241 
    242                 List<RowSorter.SortKey> sortKeys = new ArrayList<RowSorter.SortKey>();
    243                 sortKeys.add(new RowSorter.SortKey(1, SortOrder.ASCENDING));
    244                 sorter.setSortKeys(sortKeys);
    245 
    246                 for (int i = 0; i < model.getColumnCount(); i++) {
    247                         model.setColumnConstraints(i, tblMods.getColumnModel().getColumn(i));
    248                 }
    249151        }
    250152
     
    279181                }
    280182                ModManager.getInstance().init();
    281                 initTable();
     183                tblMods.reloadData();
    282184                initModTypeBox();
    283185
     
    430332                if (res == JFileChooser.APPROVE_OPTION) {
    431333                        if (fc.getSelectedFile().exists())
    432                                 model.reloadSelection(fc.getSelectedFile());
     334                                tblMods.reloadSelection(fc.getSelectedFile());
    433335                }
    434336        }
     
    443345                                f = new File(f.getParentFile(), f.getName() + ".xml");
    444346                        ModManager.getInstance().saveModSelection(f,
    445                                         model.getSelectedMods());
     347                                        tblMods.getSelectedMods());
    446348                }
    447349        }
     
    500402        @SuppressWarnings("unused")
    501403        private void revertSelection() {
    502                 model.revertSelection();
     404                tblMods.revertSelection();
    503405        }
    504406
     
    548450                TreeSet<Mod> mods = new TreeSet<Mod>();
    549451                mods.addAll(ModManager.getInstance().getMandatoryMods());
    550                 mods.addAll(model.getSelectedMods());
     452                mods.addAll(tblMods.getSelectedMods());
    551453
    552454                boolean instReady = false;
     
    644546        }
    645547
    646         private void modSelection(Mod m) {
     548        @Override
     549        public void modSelectionChanged(ModTable source, Mod m) {
    647550                lblSubmitterVal.setText("");
    648551                lblCreatorVal.setText("");
     
    678581                if (radLocal.isSelected())
    679582                        downloadState = 2;
    680                 sorter.setRowFilter(new ModTableFilter(t, downloadState));
     583                tblMods.setFilter(t, downloadState);
    681584        }
    682585
  • AE/installer2/src/net/oni2/aeinstaller/gui/MainWin.yml

    r630 r631  
    5656            - ButtonGroup: [radAll,radOnline,radLocal]
    5757            - JScrollPane(name=scrollMods, vScrollBar=always, hScrollBar=never):
    58                 JTable(name=tblMods, visible=false)
     58                ModTable(name=tblMods, visible=false)
    5959            - JButton(name=btnRevertSelection, icon=img.undo16, text=btnRevertSelection.text, toolTipText=btnRevertSelection.tooltip, onAction=[revertSelection])
    6060            - JButton(name=btnInstall, icon=img.install, text=btnInstall.text, toolTipText=btnInstall.tooltip, onAction=[install,installDone])
  • AE/installer2/src/net/oni2/aeinstaller/gui/modtable/ModTableModel.java

    r630 r631  
    2121
    2222        private ResourceBundle bundle = ResourceBundle
    23                         .getBundle("net.oni2.aeinstaller.localization."
    24                                         + getClass().getSimpleName());
     23                        .getBundle("net.oni2.aeinstaller.localization.ModTable");
    2524
    2625        private Vector<Mod> items = new Vector<Mod>();
     
    3332         */
    3433        public ModTableModel() {
    35                 reloadData();
    3634        }
    3735
     
    5048                        case 3:
    5149                                return mod.getCreator();
     50                        case 4:
     51                                String res = "";
     52                                res += (install.get(row) ? "I" : "_");
     53                                res += (mod.isLocalAvailable() && mod.isNewerAvailable() ? "U"
     54                                                : "_");
     55                                res += (mod.isLocalAvailable() ? "D" : "_");
     56                                return res;
    5257                }
    5358                return null;
     
    6570                        case 3:
    6671                                return bundle.getString("mod.creator");
     72                        case 4:
     73                                return bundle.getString("mod.state");
    6774                }
    6875                return null;
     
    7683        @Override
    7784        public int getColumnCount() {
    78                 return 4;
     85                return 5;
    7986        }
    8087
     
    8996                                return String.class;
    9097                        case 3:
     98                                return String.class;
     99                        case 4:
    91100                                return String.class;
    92101                }
     
    123132                                col.setPreferredWidth(90);
    124133                                break;
     134                        case 4:
     135                                w = 55;
     136                                col.setPreferredWidth(w);
     137                                col.setMinWidth(w);
     138                                col.setMaxWidth(w);
     139                                break;
    125140                }
    126141        }
     
    141156                install.clear();
    142157                for (int i = 0; i < items.size(); i++) {
    143                         install.add(i, ModManager.getInstance()
    144                                         .isModInstalled(items.get(i)));
     158                        install.add(i, items.get(i).isInstalled());
    145159                }
    146160                fireTableDataChanged();
  • AE/installer2/src/net/oni2/aeinstaller/localization/MainWin.properties

    r630 r631  
    4242lblDownloadSize.text=Size of files to download:
    4343
    44 openModFolder.text=Open mod folder
    45 
    4644lblSubmitter.text=Submitter:
    4745lblCreator.text=Creator:
Note: See TracChangeset for help on using the changeset viewer.