Changeset a76ff72


Ignore:
Timestamp:
Jul 19, 2010, 10:18:08 AM (8 years ago)
Author:
Michael Seifert <mseifert@…>
Branches:
master
Children:
af96e56
Parents:
062a7a9
Message:

APM are now displayed for all players. They appear in a separate tab;

Added javadoc comments

Location:
src/main/java/de/erichseifert/warp
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/main/java/de/erichseifert/warp/WARP.java

    r062a7a9 ra76ff72  
    5151        private final ReplayParserGUI gui;
    5252
     53        /**
     54         * Class that parses all files in a directory and subdirectories.
     55         */
    5356        private class ParserThread extends Thread {
    5457                private final File dir;
    55                 private final ProgressListener listener;
    56 
    57                 public ParserThread(File dir, ProgressListener listener) {
     58                private final ProgressListener[] listeners;
     59
     60                /**
     61                 * Creates a <code>ParserThread</code> object parsing the
     62                 * specified directory and notfying the specified listeners.
     63                 * This thread also descends into subfolders.
     64                 * @param dir Directory to be searched for parsable files.
     65                 * @param listeners Listeners to be notified.
     66                 */
     67                public ParserThread(File dir, ProgressListener... listeners) {
    5868                        this.dir = dir;
    59                         this.listener = listener;
     69                        this.listeners = listeners;
    6070                }
    6171
     
    6878                                if (storage.contains(replayFile)) {
    6979                                        elementsProcessed++;
    70                                         listener.progressUpdated(elementsProcessed, replayFiles.size());
     80                                        for (ProgressListener listener : listeners) {
     81                                                listener.progressUpdated(elementsProcessed, replayFiles.size());
     82                                        }
    7183                                        continue;
    7284                                }
     
    7587                                elementsProcessed++;
    7688
    77                                 listener.progressUpdated(elementsProcessed, replayFiles.size());
     89                                for (ProgressListener listener : listeners) {
     90                                        listener.progressUpdated(elementsProcessed, replayFiles.size());
     91                                }
    7892                        }
    7993
     
    165179        }
    166180
     181        /**
     182         * Removes the replay with the specified id from the storage.
     183         * @param id Id of the replay.
     184         */
    167185        public void remove(long id) {
    168186                storage.delete(id);
    169187        }
    170188
     189        /**
     190         * Returns all replays that match the specified queries and the
     191         * according ranges in the specified search mode.
     192         * @param queries Queries to be searched for.
     193         * @param ranges Ranges of the queries.
     194         * @param mode Search mode.
     195         * @return Search results.
     196         */
    171197        public Set<ReplayDescriptor> search(Map<String, Object> query, Map<String, Range> ranges, SearchMode mode) {
    172198                return storage.search(query, ranges, mode);
    173199        }
    174200
     201        /**
     202         * Returns the names of all search indices.
     203         * @return Index names.
     204         */
    175205        public Set<String> getIndexNames() {
    176206                return storage.getIndexNames();
  • src/main/java/de/erichseifert/warp/gui/DefaultPlayerRenderer.java

    r062a7a9 ra76ff72  
    2323
    2424import java.awt.Component;
    25 import java.awt.Dimension;
    2625import java.awt.FlowLayout;
    2726import java.awt.Graphics2D;
    28 import java.awt.Insets;
    2927import java.awt.Shape;
    30 import java.awt.Window;
    31 import java.awt.event.ActionEvent;
    32 import java.awt.event.ActionListener;
    3328import java.awt.event.MouseAdapter;
    3429import java.awt.event.MouseEvent;
     
    4136
    4237import javax.swing.ImageIcon;
    43 import javax.swing.JButton;
    4438import javax.swing.JCheckBox;
    45 import javax.swing.JDialog;
    4639import javax.swing.JLabel;
    4740import javax.swing.JPanel;
     
    6154                private final JLabel playerLabel;
    6255                private final Shape colorShape;
    63                 private final JButton infoButton;
    6456
    6557                public DefaultPlayerComponent(T player) {
     
    8981
    9082                        colorShape = new Rectangle2D.Double(0, 0, 20, 20);
    91 
    92                         infoButton = new JButton("?");
    93                         infoButton.setMargin(new Insets(0, 0, 0, 0));
    94                         infoButton.setMinimumSize(new Dimension(0, 0));
    95                         infoButton.setMaximumSize(new Dimension(0, 0));
    96                         infoButton.setPreferredSize(new Dimension(16, 16));
    97                         infoButton.addActionListener(new ActionListener() {
    98                                 @Override
    99                                 public void actionPerformed(ActionEvent e) {
    100                                         JDialog infoDialog = new JDialog((Window)null, "APM chart");
    101                                         infoDialog.getContentPane().add(new APMChart(DefaultPlayerComponent.this.player));
    102                                         infoDialog.setVisible(true);
    103                                         infoDialog.setSize(1024, 768);
    104                                         infoDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    105                                 }
    106                         });
    107                         add(infoButton);
    10883
    10984                        if (player == null) {
  • src/main/java/de/erichseifert/warp/gui/ReplayParserGUI.java

    r062a7a9 ra76ff72  
    6060import javax.swing.JScrollPane;
    6161import javax.swing.JSplitPane;
     62import javax.swing.JTabbedPane;
    6263import javax.swing.JTable;
    6364import javax.swing.JTextField;
     
    6566import javax.swing.ListSelectionModel;
    6667import javax.swing.RowFilter;
     68import javax.swing.SingleSelectionModel;
    6769import javax.swing.SwingConstants;
    6870import javax.swing.border.EmptyBorder;
     71import javax.swing.event.ChangeEvent;
     72import javax.swing.event.ChangeListener;
    6973import javax.swing.event.ListSelectionEvent;
    7074import javax.swing.event.ListSelectionListener;
     
    7579import javax.swing.table.TableRowSorter;
    7680
     81import de.erichseifert.warp.Player;
    7782import de.erichseifert.warp.ProgressListener;
    7883import de.erichseifert.warp.Replay;
     
    157162        private final JComboBox filterMode;
    158163        private final JTextField filterField;
    159         private final JSplitPane splitPane;
     164        private final JTabbedPane infoDisplay;
    160165        private final SC2ReplayRenderer replayRenderer;
    161166        private final DefaultTableModel replayTableModel;
     
    168173
    169174        private File parsedDir;
     175        private Replay selectedReplay;
    170176
    171177        /**
     
    345351                toolbar.add(filterField);
    346352
    347                 splitPane = new JSplitPane();
    348                 JPanel emptyPanel = new JPanel();
    349                 splitPane.setLeftComponent(emptyPanel);
     353                JSplitPane splitPane = new JSplitPane();
     354                infoDisplay = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.WRAP_TAB_LAYOUT);
     355                infoDisplay.addTab("General", null);
     356                infoDisplay.addTab("APM", null);
     357                infoDisplay.addChangeListener(new ChangeListener() {
     358                        @Override
     359                        public void stateChanged(ChangeEvent e) {
     360                                int selectionIndex = infoDisplay.getSelectedIndex();
     361                                if (selectionIndex == 0 && infoDisplay.getComponentAt(0) == null) {
     362                                        infoDisplay.setComponentAt(0, replayRenderer.getRendererComponent((SC2Replay) selectedReplay));
     363                                }
     364                                else if (selectionIndex == 1 && infoDisplay.getComponentAt(1) == null) {
     365                                        Player[] players = new Player[selectedReplay.getPlayerCount()];
     366                                        selectedReplay.getPlayers().toArray(players);
     367                                        Component apmChart = new APMChart(players);
     368                                        infoDisplay.setComponentAt(1, apmChart);
     369                                }
     370                        }
     371                });
     372                splitPane.setLeftComponent(infoDisplay);
    350373                getContentPane().add(splitPane, BorderLayout.CENTER);
    351374                splitPane.setDividerLocation(470);
     
    409432                                                ReplayDescriptor replayDescriptor = (ReplayDescriptor) replayTable.getValueAt(selectedIndex, 0);
    410433                                                Replay replay = ReplayParserGUI.this.warp.getReplay(replayDescriptor);
    411                                                 splitPane.setLeftComponent(replayRenderer.getRendererComponent((SC2Replay) replay));
     434                                                setSelectedReplay(replay);
    412435                                                // FIXME: Find better solution
    413436                                                System.gc();
     
    566589                }
    567590        }
     591
     592        private void setSelectedReplay(Replay replay) {
     593                infoDisplay.setComponentAt(0, null);
     594                infoDisplay.setComponentAt(1, null);
     595
     596                selectedReplay = replay;
     597
     598                // Select last selected tab
     599                int selectedIndex = infoDisplay.getSelectedIndex();
     600                SingleSelectionModel selectionModel = infoDisplay.getModel();
     601                selectionModel.clearSelection();
     602                selectionModel.setSelectedIndex(selectedIndex);
     603        }
    568604}
Note: See TracChangeset for help on using the changeset viewer.