/**
  * Gets called when clicking the save button. Puts data back into Worker and fires
  * ListSelectionEvent in Worker, so that the 3D View is updated.
  */
 public void save() {
   short[] tmpFrame = frame;
   changedStateSinceSave = false;
   short reihe = 0;
   for (int j = 0; j < 8; j++) {
     for (int i = 0; i < 8; i++) {
       reihe += ((short) Math.pow(2, i)) * ledStatus[i][j];
     }
     tmpFrame[(8 * (li + 1) + j) - 8] = reihe;
     reihe = 0;
   }
   frame = tmpFrame;
   worker.getAnimation(animI).getFrame(frameI).setData(frame);
   ListSelectionEvent layerChanged =
       new ListSelectionEvent(
           LedFrame.frameList,
           LedFrame.frameList.getSelectedIndex(),
           LedFrame.frameList.getSelectedIndex(),
           false);
   LedFrame.valueChanged(layerChanged);
   dispose();
 }
  /**
   * Create a new layer editor.
   *
   * @param animIndex Current animation
   * @param frameIndex Current frame
   * @param layerIndex Layer to edit
   * @param work the cubeWorker containing the data
   * @param LEDframe Used to call valueChanged, to trigger 3D View update
   */
  public layerEditFrame(
      int animIndex, int frameIndex, int layerIndex, cubeWorker work, Frame LEDframe) {
    // Frame-Initialisierung
    super("Layer Edit");
    worker = work;
    LedFrame = LEDframe;
    animI = animIndex;
    frameI = frameIndex;
    // frame = byteToShortArray(worker.getFrame(animIndex, frameIndex));
    frame = worker.getAnimation(animIndex).getFrame(frameIndex).getData();
    li = layerIndex;
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 180;
    int frameHeight = 230;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);

    for (int i = 0; i < 8; i++) {
      for (int j = 0; j < 8; j++) {
        final int finalI = i;
        final int finalJ = j;
        ledPanels[i][j] = new JButton(on);
        ledPanels[i][j].setBounds((i * 20) + 5, (j * 20) + 5, 15, 15);
        ledPanels[i][j].addActionListener(
            new ActionListener() {
              public void actionPerformed(ActionEvent evt) {
                btnClicked(finalI, finalJ);
              }
            });
        ledPanels[i][j].setVisible(true);
        cp.add(ledPanels[i][j]);
      }
    }
    loadData();
    JButton saveBtn = new JButton("Save");
    JButton cancelBtn = new JButton("Cancel");

    saveBtn.setBounds(5, 170, 70, 25);
    saveBtn.setFont(new Font("Dialog", Font.PLAIN, 13));
    cp.add(saveBtn);
    cancelBtn.setBounds(80, 170, 80, 25);
    cancelBtn.setFont(new Font("Dialog", Font.PLAIN, 13));
    cp.add(cancelBtn);
    setVisible(true);

    saveBtn.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent evt) {
            save();
          }
        });

    cancelBtn.addActionListener(
        new ActionListener() {
          public void actionPerformed(ActionEvent evt) {
            cancel();
          }
        });

    addWindowListener(
        new WindowAdapter() {
          public void windowClosing(WindowEvent evt) {
            if (changedStateSinceSave) {
              saveExitDialog();
            }
            dispose();
          }
        });
  }