GameListPanel.niceness++ :D
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@538 72836036-5685-4462-b002-a69064685172
This commit is contained in:
parent
c708a0b648
commit
71aae25108
3 changed files with 83 additions and 37 deletions
|
@ -176,7 +176,7 @@ public class MockView implements IView {
|
|||
}
|
||||
|
||||
public void showQuitWarningPanel(boolean show) {
|
||||
isQuitWarningPanelVisible =show;
|
||||
isQuitWarningPanelVisible = show;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -6,11 +6,12 @@ import java.awt.GridBagConstraints;
|
|||
import java.awt.GridBagLayout;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.Box;
|
||||
import javax.swing.DefaultListModel;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JList;
|
||||
|
@ -20,6 +21,8 @@ import javax.swing.ListCellRenderer;
|
|||
import javax.swing.border.CompoundBorder;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import javax.swing.border.LineBorder;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import javax.swing.event.ListSelectionListener;
|
||||
|
||||
import jrummikub.model.PlayerSettings;
|
||||
import jrummikub.model.PlayerSettings.Type;
|
||||
|
@ -28,6 +31,7 @@ import jrummikub.util.Event1;
|
|||
import jrummikub.util.GameData;
|
||||
import jrummikub.util.IEvent;
|
||||
import jrummikub.util.IEvent1;
|
||||
import jrummikub.util.Pair;
|
||||
import jrummikub.view.IGameListPanel;
|
||||
|
||||
class GameListPanel extends JPanel implements IGameListPanel {
|
||||
|
@ -60,35 +64,66 @@ class GameListPanel extends JPanel implements IGameListPanel {
|
|||
|
||||
add(Box.createVerticalStrut(3), c);
|
||||
|
||||
gameList = new JList();
|
||||
gameList.setCellRenderer(new GameDataCellRenderer());
|
||||
c.weighty = 1;
|
||||
add(new JScrollPane(gameList, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
|
||||
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER), c);
|
||||
createGameList();
|
||||
|
||||
c.weighty = 0;
|
||||
add(Box.createVerticalStrut(3), c);
|
||||
|
||||
addButtons(c);
|
||||
|
||||
setBorder(new CompoundBorder(new LineBorder(Color.BLACK),
|
||||
new EmptyBorder(10, 10, 10, 10)));
|
||||
setBorder(new CompoundBorder(new LineBorder(Color.BLACK), new EmptyBorder(
|
||||
10, 10, 10, 10)));
|
||||
}
|
||||
|
||||
private void createGameList() {
|
||||
GridBagConstraints c = new GridBagConstraints();
|
||||
c.fill = GridBagConstraints.BOTH;
|
||||
c.gridwidth = GridBagConstraints.REMAINDER;
|
||||
c.weightx = 1;
|
||||
c.weighty = 1;
|
||||
|
||||
gameList = new JList();
|
||||
gameList.setCellRenderer(new GameDataCellRenderer());
|
||||
|
||||
gameList.addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
if (e.getClickCount() == 2) {
|
||||
join();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
gameList.addListSelectionListener(new ListSelectionListener() {
|
||||
@Override
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
Object data = gameList.getSelectedValue();
|
||||
|
||||
if (data instanceof GameData) {
|
||||
GameData gameData = (GameData) data;
|
||||
Pair<Integer, Integer> playerSlotCount = getPlayerSlotCount(gameData);
|
||||
joinButton.setEnabled(playerSlotCount.getFirst() < playerSlotCount
|
||||
.getSecond());
|
||||
} else {
|
||||
joinButton.setEnabled(false);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
add(new JScrollPane(gameList, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
|
||||
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER), c);
|
||||
}
|
||||
|
||||
private void addButtons(GridBagConstraints c) {
|
||||
joinButton = new JButton("Beitreten");
|
||||
c.gridwidth = 1;
|
||||
add(joinButton, c);
|
||||
joinButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Object data = gameList.getSelectedValue();
|
||||
|
||||
if (data instanceof GameData) {
|
||||
joinEvent.emit((GameData) data);
|
||||
}
|
||||
join();
|
||||
}
|
||||
});
|
||||
joinButton.setEnabled(false);
|
||||
add(joinButton, c);
|
||||
|
||||
c.weightx = 0;
|
||||
add(Box.createHorizontalStrut(10), c);
|
||||
|
@ -99,7 +134,6 @@ class GameListPanel extends JPanel implements IGameListPanel {
|
|||
openNewGameButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent arg0) {
|
||||
// TODO Auto-generated method stub
|
||||
openNewGameEvent.emit();
|
||||
}
|
||||
});
|
||||
|
@ -135,14 +169,12 @@ class GameListPanel extends JPanel implements IGameListPanel {
|
|||
|
||||
Object currentGame = gameList.getSelectedValue();
|
||||
|
||||
DefaultListModel model = new DefaultListModel();
|
||||
for (GameData game : games) {
|
||||
model.addElement(game);
|
||||
}
|
||||
gameList.setModel(model);
|
||||
gameList.setListData(games.toArray());
|
||||
|
||||
if (games.contains(currentGame)) {
|
||||
gameList.setSelectedValue(currentGame, false);
|
||||
} else if (!games.isEmpty()) {
|
||||
gameList.setSelectedIndex(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -161,6 +193,27 @@ class GameListPanel extends JPanel implements IGameListPanel {
|
|||
return cancelEvent;
|
||||
}
|
||||
|
||||
private void join() {
|
||||
Object data = gameList.getSelectedValue();
|
||||
|
||||
if (data instanceof GameData) {
|
||||
joinEvent.emit((GameData) data);
|
||||
}
|
||||
}
|
||||
|
||||
private static Pair<Integer, Integer> getPlayerSlotCount(GameData gameData) {
|
||||
int total = gameData.getGameSettings().getPlayerList().size();
|
||||
int occupied = total;
|
||||
|
||||
for (PlayerSettings player : gameData.getGameSettings().getPlayerList()) {
|
||||
if (player.getType() == Type.VACANT) {
|
||||
occupied--;
|
||||
}
|
||||
}
|
||||
|
||||
return new Pair<Integer, Integer>(occupied, total);
|
||||
}
|
||||
|
||||
private static class GameDataCellRenderer extends JPanel implements
|
||||
ListCellRenderer {
|
||||
private static final long serialVersionUID = -892701906163443927L;
|
||||
|
@ -197,17 +250,10 @@ class GameListPanel extends JPanel implements IGameListPanel {
|
|||
GameData gameData = (GameData) value;
|
||||
|
||||
host = gameData.getHost();
|
||||
int total = gameData.getGameSettings().getPlayerList().size();
|
||||
int occupied = total;
|
||||
Pair<Integer, Integer> playerSlotCount = getPlayerSlotCount(gameData);
|
||||
|
||||
for (PlayerSettings player : gameData.getGameSettings()
|
||||
.getPlayerList()) {
|
||||
if (player.getType() == Type.VACANT) {
|
||||
occupied--;
|
||||
}
|
||||
}
|
||||
|
||||
playerCount = occupied + "/" + total;
|
||||
playerCount = playerSlotCount.getFirst() + "/"
|
||||
+ playerSlotCount.getSecond();
|
||||
} else {
|
||||
host = String.valueOf(value);
|
||||
}
|
||||
|
|
|
@ -459,7 +459,7 @@ public class View extends JFrame implements IView {
|
|||
|
||||
rescaleSubpanel(settingsPanel, 1 / 2.0, 1 / 2.0, 475, 300);
|
||||
rescaleSubpanel(scorePanel, 3 / 4.0, 1 / 2.0, 450, 300);
|
||||
rescaleSubpanel(loginPanel, 1 / 3.0, 1 / 3.0, 200, 200);
|
||||
rescaleSubpanel(loginPanel, 1 / 3.0, 1 / 3.0, 350, 200);
|
||||
rescaleSubpanel(gameListPanel, 1 / 2.0, 1 / 2.0, 475, 300);
|
||||
rescaleSubpanel(quitWarningPanel, 1 / 2.0, 1 / 6.0, 400, 150);
|
||||
quitWarningPanel.setLocation(0, 0);
|
||||
|
|
Reference in a new issue