Changeset ab9d8bb


Ignore:
Timestamp:
Mar 14, 2010, 2:18:38 PM (11 years ago)
Author:
Michael Seifert <mseifert@…>
Branches:
master
Children:
fe30c80
Parents:
d454ce4
Message:

Support for hiding and showing chat messages of a certain player;
Created RendererComponent? interface which should be used by every renderer;
Renamed ReplayRenderer? to SC2ReplayRenderer and moved it to another package in order to guarantee modularity for the planned plugin structure (= parsing different replay formats)

Location:
src/main/java/de/erichseifert/warp/gui
Files:
2 added
2 edited
1 moved

Legend:

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

    rd454ce4 rab9d8bb  
    2222package de.erichseifert.warp.gui;
    2323
    24 import java.awt.GridLayout;
     24import java.awt.BorderLayout;
     25import java.util.HashMap;
     26import java.util.List;
     27import java.util.Map;
    2528
    2629import javax.swing.JEditorPane;
     
    3033import de.erichseifert.warp.ChatMessage;
    3134import de.erichseifert.warp.Player;
    32 import de.erichseifert.warp.replays.sc2replay.SC2Replay;
    3335import de.erichseifert.warp.util.GUIUtil;
    3436
     
    3638 * Class that represents a renderer for the chat messages of a replay.
    3739 */
    38 public class ChatRenderer extends JPanel {
    39         private SC2Replay value;
     40public class ChatRenderer extends JPanel implements RendererComponent<List<? extends ChatMessage>> {
     41        private List<? extends ChatMessage> value;
    4042
     43        private final Map<Player, Boolean> playerVisibility;
    4144        private final JEditorPane messageDisplay;
    4245
     
    4548         */
    4649        public ChatRenderer() {
    47                 super(new GridLayout());
     50                super(new BorderLayout());
     51                playerVisibility = new HashMap<Player, Boolean>();
     52
    4853                messageDisplay = new JEditorPane();
    4954                messageDisplay.setContentType("text/html");
    5055                messageDisplay.setEditable(false);
    5156                JScrollPane chatAreaScroller = new JScrollPane(messageDisplay);
    52                 add(chatAreaScroller);
     57                add(chatAreaScroller, BorderLayout.CENTER);
    5358        }
    5459
    55         /**
    56          * Returns the currently rendered value.
    57          * @return Rendered object.
    58          */
    59         public SC2Replay getValue() {
     60        @Override
     61        public List<? extends ChatMessage> getValue() {
    6062                return value;
    6163        }
    6264
    63         /**
    64          * Sets the rendered object to the specified value, using the specified player information.
    65          * @param value Value to display.
    66          * @param playerInformation Information on the players.
    67          */
    68         public void setValue(SC2Replay value) {
     65        @Override
     66        public void setValue(List<? extends ChatMessage> value) {
    6967                this.value = value;
     68                playerVisibility.clear();
     69
     70                refresh();
     71        }
     72
     73        public void setPlayerVisible(Player player, boolean visible) {
     74                playerVisibility.put(player, visible);
    7075                refresh();
    7176        }
     
    7681        private void refresh() {
    7782                // Clear components
    78                 messageDisplay.setText("");
    79 
    80                 if (value == null || value.getMessages() == null) {
     83                if (value == null || value.isEmpty()) {
     84                        messageDisplay.setText("");
    8185                        return;
    8286                }
     
    8488                // Renew messages
    8589                String chat = "";
    86                 for (ChatMessage message : value.getMessages()) {
     90                for (ChatMessage message : value) {
     91                        // Add any new player to the cache
     92                        Player player = message.getPlayer();
     93                        Boolean visibilty = playerVisibility.get(player);
     94                        if (visibilty != null && !visibilty) {
     95                                continue;
     96                        }
     97
     98                        // Convert message
    8799                        chat += messageToHTML(message);
    88100                }
  • src/main/java/de/erichseifert/warp/gui/ReplayParserGUI.java

    rd454ce4 rab9d8bb  
    5656
    5757import de.erichseifert.warp.Replay;
     58import de.erichseifert.warp.gui.renderers.sc2replay.SC2ReplayRenderer;
    5859import de.erichseifert.warp.replays.sc2replay.SC2Replay;
    5960
     
    6465 */
    6566public class ReplayParserGUI extends JFrame {
    66         private File replayDir;
    67 
    68         private final ReplayRenderer replayRenderer;
     67        private final SC2ReplayRenderer replayRenderer;
    6968        private final DefaultTableModel replayTableModel;
    7069        private final JTable replayTable;
     
    131130
    132131                // Left side: Replay renderer
    133                 replayRenderer = new ReplayRenderer();
     132                replayRenderer = new SC2ReplayRenderer();
    134133                splitPane.add(replayRenderer, JSplitPane.LEFT);
    135134
     
    242241         */
    243242        private void setReplayDir(File replayDir) {
    244                 this.replayDir = replayDir;
    245 
    246243                // Refresh replay table
    247244                replayTableModel.setRowCount(0);
  • src/main/java/de/erichseifert/warp/gui/renderers/sc2replay/SC2ReplayRenderer.java

    rd454ce4 rab9d8bb  
    2020 */
    2121
    22 package de.erichseifert.warp.gui;
     22package de.erichseifert.warp.gui.renderers.sc2replay;
    2323
    2424import java.awt.BorderLayout;
    25 import java.awt.Graphics2D;
     25import java.awt.FlowLayout;
    2626import java.awt.GridLayout;
    27 import java.awt.geom.Rectangle2D;
    28 import java.awt.image.BufferedImage;
     27import java.awt.event.ActionEvent;
     28import java.awt.event.ActionListener;
    2929
    30 import javax.swing.ImageIcon;
     30import javax.swing.JCheckBox;
    3131import javax.swing.JLabel;
    3232import javax.swing.JPanel;
     
    3434import javax.swing.border.EmptyBorder;
    3535
     36import de.erichseifert.warp.Player;
     37import de.erichseifert.warp.gui.ChatRenderer;
     38import de.erichseifert.warp.gui.PlayerRenderer;
     39import de.erichseifert.warp.gui.RendererComponent;
    3640import de.erichseifert.warp.replays.sc2replay.SC2Player;
    3741import de.erichseifert.warp.replays.sc2replay.SC2Replay;
     
    4246 * the players' names, their race, and color.
    4347 */
    44 public class ReplayRenderer extends JPanel {
     48public class SC2ReplayRenderer extends JPanel implements RendererComponent<SC2Replay> {
    4549        private final JLabel replayDescription;
    4650        private final JLabel mapPreviewLabel;
     
    5054        private SC2Replay value;
    5155
     56        private class PlayerVisibilityEditor extends JPanel implements RendererComponent<Player> {
     57                private Player value;
     58
     59                private final PlayerRenderer playerRenderer;
     60                private final JCheckBox visiblityBox;
     61
     62                public PlayerVisibilityEditor(Player value) {
     63                        super(new FlowLayout(FlowLayout.LEADING));
     64                        this.value = value;
     65
     66                        playerRenderer = new PlayerRenderer();
     67                        add(playerRenderer);
     68
     69                        visiblityBox = new JCheckBox();
     70                        visiblityBox.setSelected(true);
     71                        add(visiblityBox);
     72
     73                        refresh();
     74                }
     75
     76                public void addActionListener(ActionListener listener) {
     77                        visiblityBox.addActionListener(listener);
     78                }
     79
     80                public void removeActionListener(ActionListener listener) {
     81                        visiblityBox.removeActionListener(listener);
     82                }
     83
     84                public boolean isSelected() {
     85                        return visiblityBox.isSelected();
     86                }
     87
     88                @Override
     89                public Player getValue() {
     90                        return value;
     91                }
     92
     93                @Override
     94                public void setValue(Player value) {
     95                        this.value = value;
     96                        refresh();
     97                }
     98
     99                private void refresh() {
     100                        playerRenderer.setValue(value);
     101                        if (value != null) {
     102                                visiblityBox.setSelected(true);
     103                        }
     104                }
     105        }
     106
    52107        /**
    53108         * Creates a <code>ReplayRenderer</code> object without rendering target.
    54109         */
    55         public ReplayRenderer() {
     110        public SC2ReplayRenderer() {
    56111                this(null);
    57112        }
     
    61116         * @param value Value to be displayed.
    62117         */
    63         public ReplayRenderer(SC2Replay value) {
     118        public SC2ReplayRenderer(SC2Replay value) {
    64119                super(new GridLayout(2, 1));
    65120                this.value = value;
     
    89144        }
    90145
    91         /**
    92          * Sets the rendered object to the specified value.
    93          * @param value Replay to be displayed.
    94          */
     146        @Override
    95147        public void setValue(SC2Replay value) {
    96148                this.value = value;
     
    114166                // Refresh players
    115167                playerLabels.setLayout(new GridLayout(value.getMetaData().getPlayers().size(), 1, 0, 5));
    116                 for (SC2Player player : value.getMetaData().getPlayers()) {
    117                         String labelString = player.getName()+" ("+player.getRace()+")";
    118                         BufferedImage colorIcon = new BufferedImage(20, 20, BufferedImage.TYPE_INT_ARGB);
    119                         Graphics2D colorIconGfx = colorIcon.createGraphics();
    120                         colorIconGfx.setColor(player.getColor());
    121                         colorIconGfx.fill(new Rectangle2D.Double(0, 0, 20, 20));
    122                         JLabel playerLabel = new JLabel(labelString, new ImageIcon(colorIcon), SwingConstants.LEFT);
     168                for (final SC2Player player : value.getMetaData().getPlayers()) {
     169                        final PlayerVisibilityEditor playerLabel = new PlayerVisibilityEditor(player);
     170                        playerLabel.addActionListener(new ActionListener() {
     171                                @Override
     172                                public void actionPerformed(ActionEvent e) {
     173                                        chatRenderer.setPlayerVisible(player, playerLabel.isSelected());
     174                                }
     175                        });
    123176                        playerLabels.add(playerLabel);
    124177                }
    125178                // Refresh chat log
    126                 chatRenderer.setValue(value);
     179                chatRenderer.setValue(value.getMessages());
    127180                // Redraw the component
    128181                playerLabels.revalidate();
     
    135188                return String.format("%d:%02d", mins, secs);
    136189        }
     190
     191        @Override
     192        public SC2Replay getValue() {
     193                return value;
     194        }
    137195}
Note: See TracChangeset for help on using the changeset viewer.