home *** CD-ROM | disk | FTP | other *** search
| Java Source | 1997-11-13 | 5.1 KB | 215 lines |
- import java.awt.*;
- import java.util.*;
- import PGNViewFrame;
-
- public class GameFrame extends Frame
- {
- protected Button m_nextButton = new Button("Next Game");
- protected Button m_prevButton = new Button("Prev Game");
- protected Label m_gameLabel = new Label("Game 0 of 0");
- protected TextArea m_tagsText = new TextArea();
- protected TextArea m_srcText = new TextArea();
- protected PGNViewFrame m_mainFrame = null;
- protected Vector m_games = null;
- protected int m_curGameIdx;
-
- public GameFrame(PGNViewFrame parent)
- {
- super("Games in this PGN file");
-
- m_mainFrame = parent;
-
- setBackground(Color.lightGray);
- setForeground(Color.black);
-
- m_tagsText.setEditable(false);
- m_srcText.setEditable(false);
-
- //setup the other components
- GridBagLayout layout = new GridBagLayout();
- setLayout(layout);
- GridBagConstraints gbc = new GridBagConstraints();
-
- // add the enxt and previous game buttons
- gbc.weightx = 0;
- gbc.fill = GridBagConstraints.HORIZONTAL;
- gbc.ipadx = 20;
- layout.setConstraints(m_prevButton, gbc);
- add(m_prevButton);
-
-
- layout.setConstraints(m_nextButton, gbc);
- add(m_nextButton);
-
- // add the label that displays the current game
- gbc.ipadx = 0;
- gbc.gridwidth = GridBagConstraints.REMAINDER;
- gbc.weightx = 1;
- gbc.insets = new Insets(0,0,0,20);
- gbc.anchor = GridBagConstraints.EAST;
-
- m_gameLabel.setAlignment(Label.RIGHT);
- layout.setConstraints(m_gameLabel, gbc);
- add(m_gameLabel);
-
- // setup the tags area
- gbc.insets = new Insets(0,0,0,0);
- gbc.fill = GridBagConstraints.BOTH;
- gbc.anchor = GridBagConstraints.NORTHWEST;
- gbc.weighty = 0;
- gbc.weightx = 0;
-
- Label label = new Label("Game Information");
- layout.setConstraints(label, gbc);
- add(label);
-
- gbc.weighty = 1;
- gbc.weightx = 1;
- layout.setConstraints(m_tagsText, gbc);
- add(m_tagsText);
-
- // setup the game source text area
- gbc.weighty = 0;
- gbc.weightx = 0;
- label = new Label("Game MoveText");
- layout.setConstraints(label, gbc);
- add(label);
-
- gbc.weighty = 1;
- gbc.weightx = 1;
- layout.setConstraints(m_srcText, gbc);
- add(m_srcText);
-
- pack();
-
- }
-
- public boolean handleEvent(Event evt)
- {
- switch (evt.id)
- {
- case Event.WINDOW_DESTROY:
- hide();
- // uncheck the viewGame in the main frame
- m_mainFrame.m_fileGame.setState(false);
- return true;
-
- default:
- return super.handleEvent(evt);
- }
- }
-
- public boolean action(Event evt, Object what) {
- if (evt.target == m_nextButton) {
- Next();
- return true;
- }
- else if (evt.target == m_prevButton) {
- Prev();
- return true;
- }
-
- return false;
- }
-
- void Next() {
- // if we're at the last game do nothing
- if (m_curGameIdx >= m_games.size())
- return;
-
- // display the next game
- m_curGameIdx++;
- ResetButtons();
- m_mainFrame.SetGame((Game)m_games.elementAt(m_curGameIdx));
- m_mainFrame.ResetGame();
- }
-
- void Prev() {
- // if there is no previous game do nothing
- if (m_curGameIdx <= 0)
- return;
-
- // display the previous game
- m_curGameIdx--;
- ResetButtons();
- m_mainFrame.SetGame((Game)m_games.elementAt(m_curGameIdx));
- m_mainFrame.ResetGame();
- }
-
-
- void ResetButtons() {
- // set the game label text
- m_gameLabel.setText("Game " + (m_curGameIdx + 1) + " of " + m_games.size());
- SetText((Game)m_games.elementAt(m_curGameIdx));
-
- // enable/disable the next and prev buttons
- if (m_curGameIdx > 0)
- m_prevButton.enable();
- else
- m_prevButton.disable();
-
- if (m_curGameIdx < m_games.size() - 1)
- m_nextButton.enable();
- else
- m_nextButton.disable();
- }
-
- // set the text inside the tags and source text areas
- protected void SetText(Game game) {
-
- // set the tags text
- m_tagsText.setText("");
- Enumeration tags = game.m_tags.elements();
- while(tags.hasMoreElements()){
- m_tagsText.appendText((String)tags.nextElement());
- m_tagsText.appendText("\n");
- }
-
- // set the source text
- m_srcText.setText(WrapString(game.m_src,40));
- }
-
- // utility function to wrap a string to fit into a certain number of columns
- public static String WrapString(String str, int cols) {
- StringBuffer buffer = new StringBuffer();
-
- char[] chars = str.toCharArray();
-
- int left = chars.length;
- int start = 0;
- int end = 0;
-
- while (left > 0 ) {
- if (cols > left) {
- buffer.append(chars,start,left);
- return buffer.toString();
- }
- end = start + cols;
- while (chars[end] != ' ') {
- end--;
- if (end <= start) {
- end = start + cols;
- break;
- }
- }
- buffer.append(chars,start,end-start);
- buffer.append("\r\n");
- left -= (end - start);
- start += (end - start);
- }
- return buffer.toString();
- }
-
- public void SetGames(Vector games) {
- m_games = games;
- m_curGameIdx = 0;
- if (games == null ) {
- // !!! do something smart
- }
- m_mainFrame.SetGame((Game)m_games.elementAt(m_curGameIdx));
- ResetButtons();
- }
-
- }
-
-