From 119a45bec5df58e8ccb5c44f1e8492aceded3624 Mon Sep 17 00:00:00 2001 From: DanVanAtta Date: Tue, 28 Nov 2023 19:40:31 -0800 Subject: [PATCH 1/5] Simplify: inline LobbyGameTable.java --- .../lobby/client/ui/LobbyGamePanel.java | 34 ++++++++++++++++- .../lobby/client/ui/LobbyGameTable.java | 38 ------------------- 2 files changed, 32 insertions(+), 40 deletions(-) delete mode 100644 game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGameTable.java diff --git a/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java b/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java index d30d86d4e8..11a9249d70 100644 --- a/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java +++ b/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java @@ -6,6 +6,8 @@ import games.strategy.engine.lobby.client.ui.action.FetchChatHistory; import games.strategy.engine.lobby.client.ui.action.ShowPlayersAction; import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Font; import java.awt.event.MouseEvent; import java.net.URI; import java.util.Collection; @@ -20,7 +22,12 @@ import javax.swing.JTable; import javax.swing.JToolBar; import javax.swing.ListSelectionModel; +import javax.swing.RowSorter; +import javax.swing.SortOrder; import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableRowSorter; import org.triplea.lobby.common.GameDescription; import org.triplea.swing.MouseListenerBuilder; import org.triplea.swing.SwingAction; @@ -31,8 +38,8 @@ class LobbyGamePanel extends JPanel { private final JButton joinGame; private final LobbyGameTableModel gameTableModel; private final LobbyClient lobbyClient; - private final JTable gameTable; private final URI lobbyUri; + private final JTable gameTable; LobbyGamePanel( final JFrame parent, @@ -47,7 +54,30 @@ class LobbyGamePanel extends JPanel { final JButton hostGame = new JButton("Host Game"); joinGame = new JButton("Join Game"); - gameTable = new LobbyGameTable(gameTableModel); + gameTable = + new JTable(gameTableModel) { + @Override + // Custom renderer to show 'bot' rows in italic font + public Component prepareRenderer( + final TableCellRenderer renderer, final int rowIndex, final int colIndex) { + + final Component component = super.prepareRenderer(renderer, rowIndex, colIndex); + final GameDescription gameDescription = + lobbyGameTableModel.get(convertRowIndexToModel(rowIndex)); + component.setFont( + gameDescription.isBot() + ? UIManager.getDefaults().getFont("Table.font").deriveFont(Font.ITALIC) + : UIManager.getDefaults().getFont("Table.font")); + return component; + } + }; + + final TableRowSorter tableSorter = new TableRowSorter<>(gameTableModel); + // by default, sort by host + final int hostColumn = gameTableModel.getColumnIndex(LobbyGameTableModel.Column.Host); + tableSorter.setSortKeys(List.of(new RowSorter.SortKey(hostColumn, SortOrder.DESCENDING))); + gameTable.setRowSorter(tableSorter); + // only allow one row to be selected gameTable.setColumnSelectionAllowed(false); gameTable.setCellSelectionEnabled(false); diff --git a/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGameTable.java b/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGameTable.java deleted file mode 100644 index 22e7bcd30b..0000000000 --- a/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGameTable.java +++ /dev/null @@ -1,38 +0,0 @@ -package games.strategy.engine.lobby.client.ui; - -import java.awt.Component; -import java.awt.Font; -import java.util.List; -import javax.swing.JTable; -import javax.swing.RowSorter; -import javax.swing.SortOrder; -import javax.swing.UIManager; -import javax.swing.table.TableCellRenderer; -import javax.swing.table.TableRowSorter; -import org.triplea.lobby.common.GameDescription; - -class LobbyGameTable extends JTable { - private static final long serialVersionUID = 8632519876114231003L; - private static final Font DEFAULT_FONT = UIManager.getDefaults().getFont("Table.font"); - private static final Font ITALIC_FONT = DEFAULT_FONT.deriveFont(Font.ITALIC); - - LobbyGameTable(final LobbyGameTableModel gameTableModel) { - super(gameTableModel); - final TableRowSorter tableSorter = new TableRowSorter<>(gameTableModel); - // by default, sort by host - final int hostColumn = gameTableModel.getColumnIndex(LobbyGameTableModel.Column.Host); - tableSorter.setSortKeys(List.of(new RowSorter.SortKey(hostColumn, SortOrder.DESCENDING))); - setRowSorter(tableSorter); - } - - @Override - public Component prepareRenderer( - final TableCellRenderer renderer, final int rowIndex, final int colIndex) { - final Component component = super.prepareRenderer(renderer, rowIndex, colIndex); - final LobbyGameTableModel lobbyGameTableModel = (LobbyGameTableModel) getModel(); - final GameDescription gameDescription = - lobbyGameTableModel.get(convertRowIndexToModel(rowIndex)); - component.setFont(gameDescription.isBot() ? ITALIC_FONT : DEFAULT_FONT); - return component; - } -} From cbf1638010a019c6d2c417373cf84a7ca85c2ec8 Mon Sep 17 00:00:00 2001 From: DanVanAtta Date: Tue, 28 Nov 2023 19:44:27 -0800 Subject: [PATCH 2/5] Group related code together & rename --- .../lobby/client/ui/LobbyGamePanel.java | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java b/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java index 11a9249d70..91ac844289 100644 --- a/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java +++ b/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java @@ -51,7 +51,7 @@ class LobbyGamePanel extends JPanel { this.gameTableModel = lobbyGameTableModel; this.lobbyUri = lobbyUri; - final JButton hostGame = new JButton("Host Game"); + final JButton hostGameButton = new JButton("Host Game"); joinGame = new JButton("Join Game"); gameTable = @@ -71,6 +71,19 @@ public Component prepareRenderer( return component; } }; + gameTable + .getSelectionModel() + .addListSelectionListener( + e -> { + final boolean selected = gameTable.getSelectedRow() >= 0; + joinGame.setEnabled(selected); + }); + gameTable.addMouseListener( + new MouseListenerBuilder() + .mouseClicked(this::mouseClicked) + .mousePressed(this::mousePressed) + .mouseReleased(this::mouseOnGamesList) + .build()); final TableRowSorter tableSorter = new TableRowSorter<>(gameTableModel); // by default, sort by host @@ -123,26 +136,14 @@ public Component prepareRenderer( setLayout(new BorderLayout()); add(scroll, BorderLayout.CENTER); final JToolBar toolBar = new JToolBar(); - toolBar.add(hostGame); + toolBar.add(hostGameButton); toolBar.add(joinGame); toolBar.setFloatable(false); add(toolBar, BorderLayout.SOUTH); - hostGame.addActionListener(e -> hostGame(lobbyUri)); + hostGameButton.addActionListener(e -> hostGame(lobbyUri)); joinGame.addActionListener(e -> joinGame()); - gameTable - .getSelectionModel() - .addListSelectionListener( - e -> { - final boolean selected = gameTable.getSelectedRow() >= 0; - joinGame.setEnabled(selected); - }); - gameTable.addMouseListener( - new MouseListenerBuilder() - .mouseClicked(this::mouseClicked) - .mousePressed(this::mousePressed) - .mouseReleased(this::mouseOnGamesList) - .build()); + } private void mouseClicked(final MouseEvent mouseEvent) { From 2c8079ba51a6bc08b8453956f07a5cb5c977e97d Mon Sep 17 00:00:00 2001 From: DanVanAtta Date: Tue, 28 Nov 2023 19:45:00 -0800 Subject: [PATCH 3/5] Rename --- .../engine/lobby/client/ui/LobbyGamePanel.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java b/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java index 91ac844289..a59ba80da0 100644 --- a/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java +++ b/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java @@ -35,7 +35,7 @@ class LobbyGamePanel extends JPanel { private static final long serialVersionUID = -2576314388949606337L; private final JFrame parent; - private final JButton joinGame; + private final JButton joinGameButton; private final LobbyGameTableModel gameTableModel; private final LobbyClient lobbyClient; private final URI lobbyUri; @@ -52,7 +52,7 @@ class LobbyGamePanel extends JPanel { this.lobbyUri = lobbyUri; final JButton hostGameButton = new JButton("Host Game"); - joinGame = new JButton("Join Game"); + joinGameButton = new JButton("Join Game"); gameTable = new JTable(gameTableModel) { @@ -76,7 +76,7 @@ public Component prepareRenderer( .addListSelectionListener( e -> { final boolean selected = gameTable.getSelectedRow() >= 0; - joinGame.setEnabled(selected); + joinGameButton.setEnabled(selected); }); gameTable.addMouseListener( new MouseListenerBuilder() @@ -137,12 +137,12 @@ public Component prepareRenderer( add(scroll, BorderLayout.CENTER); final JToolBar toolBar = new JToolBar(); toolBar.add(hostGameButton); - toolBar.add(joinGame); + toolBar.add(joinGameButton); toolBar.setFloatable(false); add(toolBar, BorderLayout.SOUTH); hostGameButton.addActionListener(e -> hostGame(lobbyUri)); - joinGame.addActionListener(e -> joinGame()); + joinGameButton.addActionListener(e -> joinGame()); } From b5a5ef549d3026b52af7f5f91b06b41505097cd9 Mon Sep 17 00:00:00 2001 From: DanVanAtta Date: Tue, 28 Nov 2023 19:47:25 -0800 Subject: [PATCH 4/5] Inline method --- .../engine/lobby/client/ui/LobbyGamePanel.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java b/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java index a59ba80da0..a5e54cef92 100644 --- a/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java +++ b/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java @@ -194,11 +194,12 @@ private void mouseOnGamesList(final MouseEvent mouseEvent) { .forEach(menu::add); if (lobbyClient.isModerator()) { - final Collection generalAdminActions = getGeneralAdminGamesListContextActions(); - if (!generalAdminActions.isEmpty()) { - menu.addSeparator(); - generalAdminActions.forEach(menu::add); - } + menu.addSeparator(); + List.of( + SwingAction.of("Show Chat History", e -> showChatHistory()), + SwingAction.of("Boot Game", e -> bootGame()), + SwingAction.of("Shutdown", e -> shutdown())) + .forEach(menu::add); } if (menu.getComponentCount() > 0) { @@ -206,13 +207,6 @@ private void mouseOnGamesList(final MouseEvent mouseEvent) { } } - private Collection getGeneralAdminGamesListContextActions() { - return List.of( - SwingAction.of("Show Chat History", e -> showChatHistory()), - SwingAction.of("Boot Game", e -> bootGame()), - SwingAction.of("Shutdown", e -> shutdown())); - } - private void joinGame() { final int selectedIndex = gameTable.getSelectedRow(); if (selectedIndex == -1) { From f73429e7731ef6b751d850fc69b7f9721bfa4e89 Mon Sep 17 00:00:00 2001 From: DanVanAtta Date: Wed, 29 Nov 2023 11:50:12 -0800 Subject: [PATCH 5/5] Formatting --- .../games/strategy/engine/lobby/client/ui/LobbyGamePanel.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java b/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java index a5e54cef92..fcc5802f99 100644 --- a/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java +++ b/game-app/game-headed/src/main/java/games/strategy/engine/lobby/client/ui/LobbyGamePanel.java @@ -10,9 +10,7 @@ import java.awt.Font; import java.awt.event.MouseEvent; import java.net.URI; -import java.util.Collection; import java.util.List; -import javax.swing.Action; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; @@ -143,7 +141,6 @@ public Component prepareRenderer( hostGameButton.addActionListener(e -> hostGame(lobbyUri)); joinGameButton.addActionListener(e -> joinGame()); - } private void mouseClicked(final MouseEvent mouseEvent) {