1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
package jrummikub.view.impl;
import java.awt.Color;
import java.awt.Insets;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.util.Collection;
import javax.swing.JFrame;
import javax.swing.border.MatteBorder;
import jrummikub.model.Stone;
import jrummikub.util.IEvent;
import jrummikub.view.IPlayerPanel;
import jrummikub.view.ITablePanel;
import jrummikub.view.IView;
/**
* Implementation of the top-level view interface
*/
@SuppressWarnings("serial")
public class View extends JFrame implements IView {
private TablePanel table;
private PlayerPanel playerPanel;
private StartTurnPanel startTurnPanel;
private WinPanel winPanel;
private final static float PLAYER_PANEL_RATIO = 0.14f;
private final static int PLAYER_PANEL_BORDER_WIDTH = 1;
private final static int PLAYER_PANEL_MAX_HEIGHT = 180 + PLAYER_PANEL_BORDER_WIDTH;
private static int even(double d) {
return 2 * (int) (d / 2);
}
@Override
public ITablePanel getTablePanel() {
return table;
}
@Override
public IPlayerPanel getPlayerPanel() {
return playerPanel;
}
/**
* Create a new instance of the view
*/
public View() {
super("JRummikub");
setLayout(null);
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
table = new TablePanel();
add(table);
playerPanel = new PlayerPanel();
playerPanel.setBorder(new MatteBorder(PLAYER_PANEL_BORDER_WIDTH, 0, 0,
0, Color.BLACK));
add(playerPanel);
startTurnPanel = new StartTurnPanel();
startTurnPanel.setVisible(false);
add(startTurnPanel);
winPanel = new WinPanel();
winPanel.setVisible(false);
add(winPanel);
addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
Insets insets = getInsets();
int width = getWidth() - insets.left - insets.right, height = getHeight()
- insets.top - insets.bottom;
int playerPanelHeight = even(Math.pow((double) width * width
* height, 1 / 3.0)
* PLAYER_PANEL_RATIO)
+ PLAYER_PANEL_BORDER_WIDTH;
if (playerPanelHeight > PLAYER_PANEL_MAX_HEIGHT)
playerPanelHeight = PLAYER_PANEL_MAX_HEIGHT;
int tableHeight = height - playerPanelHeight;
table.setBounds(0, 0, width, tableHeight);
table.validate();
playerPanel.setBounds(0, tableHeight, width, playerPanelHeight);
startTurnPanel.setBounds(0, tableHeight, width,
playerPanelHeight);
winPanel.setBounds(0, tableHeight, width, playerPanelHeight);
}
});
setVisible(true);
}
@Override
public void setSelectedStones(Collection<Stone> stones) {
table.setSelectedStones(stones);
playerPanel.getHandPanel().setSelectedStones(stones);
}
@Override
public void enableStartTurnPanel(boolean enable) {
playerPanel.setVisible(!enable);
startTurnPanel.setVisible(enable);
winPanel.setVisible(false);
}
@Override
public void enableWinPanel(boolean enable) {
playerPanel.setVisible(!enable);
startTurnPanel.setVisible(false);
winPanel.setVisible(enable);
}
@Override
public void setCurrentPlayerName(String playerName) {
playerPanel.setCurrentPlayerName(playerName);
startTurnPanel.setCurrentPlayerName(playerName);
}
@Override
public IEvent getStartTurnEvent() {
return startTurnPanel.getStartTurnEvent();
}
@Override
public IEvent getNewGameEvent() {
return winPanel.getNewGameEvent();
}
@Override
public IEvent getQuitEvent() {
return winPanel.getQuitEvent();
}
}
|