Package hexenschach.gui

Source Code of hexenschach.gui.LoadDialog

package hexenschach.gui;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.border.LineBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import hexenschach.gameplay.Gameplay;
import hexenschach.gui.resources.Images;

/**
* Dialog zum Speichern des aktuellen Spielstandes.
* @author Tobias Marquardt
*/
public class LoadDialog extends HexenschachDialog {
  private static final long serialVersionUID = 2814453676448167177L;
  // Liste für die Spielstände
  private JList list;
  // Buttons
  DialogButton loadButton;
  DialogButton deleteButton;
  DialogButton cancelButton;
  // Größe des Eingabefeldes
  static final int xSizeList = 320;
  static final int ySizeList = 270;
  private Background background;
 
  /**
   * Erzeugt einen neuen LadenDialog
   * @param parent  Das GUI zu dem der Dialog gehört
   */
  LoadDialog(GUI parent) {
    super(parent, 400, 420);
    initListener();
  }
  @Override
  public void initComponents() {
    // Hintergrundbild
    background = new Background(Images.getLoadDialogBackground(), xSize, ySize);
    // Label
    JLabel prompt = new JLabel(Dictionary.LoadDialogPrompt);
    prompt.setForeground(new Color(236, 182, 74));
    prompt.setBounds(40, 10, 320, 60);
    background.add(prompt);
    // Liste
    list = getSavegameList();
    list.setBackground(new Color(170, 71, 12, 255));
    list.setForeground(new Color(236, 182, 74, 255));
    list.setFont(new Font("Dialog", Font.PLAIN, 15));
    list.setBorder(new LineBorder(new Color(236, 182, 74, 255)));
    list.setPreferredSize(new Dimension(xSizeList, ySizeList));
    list.setBounds(40, 70, xSizeList, ySizeList);
    background.add(list);
    // Buttons
    loadButton = new DialogButton("", Images.getDialogLoadButtonDefaultImage(), Images.getDialogLoadButtonRolloverImage(), Images.getDialogLoadButtonPressedImage(), Images.getDialogLoadButtonDisabledImage());
    loadButton.setBounds(40, 360, DialogButton.xSize, DialogButton.ySize);
    loadButton.setEnabled(false);
    deleteButton = new DialogButton("", Images.getDialogDeleteButtonDefaultImage(), Images.getDialogDeleteButtonRolloverImage(), Images.getDialogDeleteButtonPressedImage(), Images.getDialogDeleteButtonDisabledImage());
    deleteButton.setBounds(160, 360, DialogButton.xSize, DialogButton.ySize);
    deleteButton.setEnabled(false);
    cancelButton = new DialogButton("", Images.getDialogCancelButtonDefaultImage(), Images.getDialogCancelButtonRolloverImage(), Images.getDialogCancelButtonPressedImage());
    cancelButton.setBounds(280, 360, DialogButton.xSize, DialogButton.ySize);
    background.add(loadButton);
    background.add(deleteButton);
    background.add(cancelButton);
    add(background);
  }
  /**
   * Gibt eine Liste mit allen Spielständen zurück..
   * @return JList mit Namen aller gespeicherten Spielstände
   */
  private JList getSavegameList() {
    ArrayList<String> savegamesList = parent.getPersistence().getSaveGames();
    String[] savegames = new String[savegamesList.size()];
    savegamesList.toArray(savegames);
    JList l = new JList(savegames);
    return l;   
  }
  /**
   * Refreshed die angezeigte Liste der Spielstände
   */
  private void refreshSavegameList() {
    list.setVisible(false);
    list = getSavegameList();
    list.setBackground(new Color(170, 71, 12, 255));
    list.setForeground(new Color(236, 182, 74, 255));
    list.setFont(new Font("Dialog", Font.PLAIN, 15));
    list.setBorder(new LineBorder(new Color(236, 182, 74, 255)));
    list.setPreferredSize(new Dimension(xSizeList, ySizeList));
    list.setBounds(40, 70, xSizeList, ySizeList);
    background.add(list);
  }
  @Override
  public void initLayout() {}

  private void initListener() {
    loadButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        loadButtonClicked();
      }
    });
    deleteButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        deleteButtonClicked();
      }
    });
    cancelButton.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        cancelButtonClicked();
      }
    });
    list.addListSelectionListener(new ListSelectionListener() {
      @Override
      public void valueChanged(ListSelectionEvent e) {
        // Nur wenn ein Eintrag in der Liste ausgewählt ist,
        // kann der Laden-Button geklickt werden.
        if(list.getSelectedValue() != null) {
          loadButton.setEnabled(true);
          deleteButton.setEnabled(true);
        }
        else {
          loadButton.setEnabled(false);
          deleteButton.setEnabled(false);
        }
      }
    });
  }
  /**
   * Enthält die Aktion, die beim Klick auf den
   * Löschen-Button ausgeführt werden soll.
   */
  protected void deleteButtonClicked() {
    QuestionDialog reallyDelete = new QuestionDialog(parent, Dictionary.loadDialogDeleteQuestion) {
      private static final long serialVersionUID = 4119349047659189682L;
      @Override
      public void yesButtonClicked() {
        parent.getPersistence().deleteSaveGame(list.getSelectedValue().toString());
        setVisible(false);
        refreshSavegameList();
      }
      @Override
      public void noButtonClicked() {
        setVisible(false);
      }
     
      @Override
      public void cancelButtonClicked() {
        setVisible(false);
      }
    };
    reallyDelete.setVisible(true);
  }
  /**
   * Enthält die Aktion, die beim Klick auf den
   * Abbrechen-Button ausgeführt werden soll.
   */
  protected void cancelButtonClicked() {
    // Fenster schließen
    setVisible(false);
  }
  /**
   * Enthält die Aktion, die beim Klick auf den
   * Laden-Button ausgeführt werden soll.
   */
  protected void loadButtonClicked() {
    Gameplay loadedGame = parent.getPersistence().loadGame(list.getSelectedValue().toString(), parent);
    parent.setGameplay(loadedGame);
    setVisible(false);
  }
}
TOP

Related Classes of hexenschach.gui.LoadDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.