package net.minecraft.launcher.ui.tabs; import net.minecraft.launcher.Launcher; import net.minecraft.launcher.OperatingSystem; import net.minecraft.launcher.events.RefreshedVersionsListener; import net.minecraft.launcher.locale.LocaleHelper; import net.minecraft.launcher.updater.VersionManager; import net.minecraft.launcher.updater.VersionSyncInfo; import net.minecraft.launcher.versions.CompleteVersion; import net.minecraft.launcher.versions.Version; import javax.swing.*; import javax.swing.table.AbstractTableModel; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.util.*; public class VersionListTab extends JScrollPane implements RefreshedVersionsListener { private ResourceBundle resourceBundle = LocaleHelper.getMessages(); private static final int COLUMN_NAME = 0; private static final int COLUMN_TYPE = 1; private static final int COLUMN_RELEASE_DATE = 2; private static final int COLUMN_UPDATE_DATE = 3; private static final int COLUMN_LIBRARIES = 4; private static final int COLUMN_STATUS = 5; private static final int NUM_COLUMNS = 6; private final Launcher launcher; private final VersionTableModel dataModel = new VersionTableModel(); private final JTable table = new JTable(this.dataModel); private final JPopupMenu popupMenu = new JPopupMenu(); private final JMenuItem browseVersionFolder = new JMenuItem("Open Versions Folder"); public VersionListTab(Launcher launcher) { this.launcher = launcher; setViewportView(this.table); createInterface(); launcher.getVersionManager().addRefreshedVersionsListener(this); } protected void createInterface() { this.popupMenu.add(this.browseVersionFolder); this.table.setComponentPopupMenu(this.popupMenu); this.table.setFillsViewportHeight(true); this.browseVersionFolder.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { OperatingSystem.openFolder(new File(VersionListTab.this.launcher.getWorkingDirectory(), "/versions/")); } }); } public Launcher getLauncher() { return this.launcher; } public void onVersionsRefreshed(VersionManager manager) { this.dataModel.setVersions(manager.getLocalVersionList().getVersions()); } public boolean shouldReceiveEventsInUIThread() { return true; } private class VersionTableModel extends AbstractTableModel { private final List<Version> versions = new ArrayList(); private VersionTableModel() { } public int getRowCount() { return this.versions.size(); } public int getColumnCount() { return 6; } public Class<?> getColumnClass(int columnIndex) { if ((columnIndex == 3) || (columnIndex == 2)) { return Date.class; } return String.class; } public String getColumnName(int column) { switch (column) { case 3: return resourceBundle.getString("last.modified"); case 1: return resourceBundle.getString("version.type"); case 4: return resourceBundle.getString("library.count"); case 0: return resourceBundle.getString("version.name"); case 5: return resourceBundle.getString("sync.status"); case 2: return resourceBundle.getString("release.date"); } return super.getColumnName(column); } public Object getValueAt(int rowIndex, int columnIndex) { Version version = (Version) this.versions.get(rowIndex); switch (columnIndex) { case 0: return version.getId(); case 3: return version.getUpdatedTime(); case 4: if ((version instanceof CompleteVersion)) { CompleteVersion complete = (CompleteVersion) version; int total = complete.getLibraries().size(); int relevant = complete.getRelevantLibraries().size(); //int relevant = complete.getRelevantLibraries(OperatingSystem.getCurrentPlatform()).size(); if (total == relevant) { return Integer.valueOf(total); } return String.format("%d (%d relevant to %s)", new Object[]{Integer.valueOf(total), Integer.valueOf(relevant), OperatingSystem.getCurrentPlatform().getName()}); } return "?"; case 5: VersionSyncInfo syncInfo = VersionListTab.this.launcher.getVersionManager().getVersionSyncInfo(version); if (syncInfo.isOnRemote()) { if (syncInfo.isUpToDate()) { return resourceBundle.getString("up.to.date.with.remote"); } return resourceBundle.getString("update.avail.from.remote"); } return resourceBundle.getString("local.only"); case 1: return version.getType().getName(); case 2: return version.getReleaseTime(); } return null; } public void setVersions(Collection<Version> versions) { this.versions.clear(); this.versions.addAll(versions); fireTableDataChanged(); } } }