Package orxanimeditor.ui.frameeditor

Source Code of orxanimeditor.ui.frameeditor.FrameEditor

package orxanimeditor.ui.frameeditor;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

import javax.print.attribute.HashAttributeSet;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JSlider;
import javax.swing.JTabbedPane;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import javax.swing.border.BevelBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;

import orxanimeditor.data.v1.Frame;
import orxanimeditor.ui.SelectionListener;
import orxanimeditor.ui.ToolBar;
import orxanimeditor.ui.mainwindow.EditorMainWindow;
import orxanimeditor.ui.mainwindow.AreaInfoProxy;

public class FrameEditor extends JPanel implements SelectionListener, ActionListener {
  EditorMainWindow editor;
  JTabbedPane views;
  ToolBar toolbar;
  JSlider SnapSlider;
  LockRectangleButton lockRectButton;
  JToggleButton editRectButton;
  JToggleButton setPivotButton;
  JToggleButton setOffsetButton;
  JToggleButton relativeOffsetButton;
  TemporaryPivotButton temporaryPivotOffsetButton;
  AreaInfoProxy  infoProxy;
  ButtonGroup group;


  Map<File, JScrollPane> openedFiles = new HashMap<File, JScrollPane>();
  public FrameEditor(EditorMainWindow editorFrame) {
    editor = editorFrame;
    views = new JTabbedPane();
    infoProxy = editor.getInfoProxy();
    prepareToolbar();
    setLayout(new BorderLayout());
    add(toolbar,BorderLayout.NORTH);
    add(views,BorderLayout.CENTER);
    setMinimumSize(new Dimension(200, 200));
    setPreferredSize(getMinimumSize());
    editor.addSelectionListener(this);
    setInfo();
    setTransferHandler(new FrameEditorViewTransferHandler());
   
  }

  private void setInfo() {
    if(editor.animationManager.getSelectedFrame()==null)
      infoProxy.setInfo("Select a frame to edit");
    else if(isEditingRectangle())
      infoProxy.setInfo("Right click & drag: Draw the rectangle for the selected frame");
    else if(isRectangleLocked())
      infoProxy.setInfo("Right click: Set the rectangle for the selected frame to the saved rectangle");
    else if(isSettingPivot())
      infoProxy.setInfo("Right click: Set the pivot of the selected frame");
    else if(isSettingOffsetDirectly())
      infoProxy.setInfo("Right click: Set the offset for this frame from a point");
    else if(isSettingOffsetWithRelativePos())
      infoProxy.setInfo("Right click & drag: Set the offset for this frame as the vector between two arbitrary points");
    else if(isSettingOffsetWithTemporaryPivot())
      {} //The relevant button handles the info message
    else
      infoProxy.setInfo("Choose an editing mode from the frame editor toolbar");
   
  }


  private void prepareToolbar() {
    toolbar = new ToolBar();

    SnapSlider = new JSlider(JSlider.HORIZONTAL, 1, 36, 1);
    SnapSlider.setOpaque(false);
    SnapSlider.setMajorTickSpacing(5);
    SnapSlider.setMinorTickSpacing(1);
    SnapSlider.setPaintTicks(true);
    SnapSlider.setPaintLabels(true);
    SnapSlider.setSnapToTicks(true);   

    SnapSlider.setToolTipText("<html>Change the snap size:<br>" +
        "The snap size is used while modifying <br>" +
        "the rectangle for a frame, if the snap <br>" +
        "size is n, the editing will snap to the nth pixel.</html>");   
    toolbar.add(SnapSlider);

    toolbar.addSeparator();
       
    group = new ButtonGroup();

    editRectButton = new JToggleButton(editor.getImageIcon("icons/EditRectangle.png"));
    toolbar.add(editRectButton);
    editRectButton.setToolTipText("Edit the frame rectangle");
    group.add(editRectButton);
    editRectButton.addActionListener(this);

    lockRectButton = new LockRectangleButton(editor.getImageIcon("icons/LockRectangle.png"),
             editor.getImageIcon("icons/UnlockRectangle.png"));
    toolbar.add(lockRectButton);
    group.add(lockRectButton);
    editor.addSelectionListener(lockRectButton);
    lockRectButton.addActionListener(this);
   
    toolbar.addSeparator();

    setPivotButton = new JToggleButton(editor.getImageIcon("icons/SetPivot.png"));
    toolbar.add(setPivotButton);
    setPivotButton.setToolTipText("Set the frame pivot");
    group.add(setPivotButton);
    setPivotButton.addActionListener(this);
   
    toolbar.addSeparator();

    setOffsetButton = new JToggleButton(editor.getImageIcon("icons/SetOffset.png"));
    toolbar.add(setOffsetButton);
    setOffsetButton.setToolTipText("Set the frame offset vector");
    group.add(setOffsetButton);
    setOffsetButton.addActionListener(this);

    relativeOffsetButton = new JToggleButton(editor.getImageIcon("icons/RelativeOffset.png"));
    toolbar.add(relativeOffsetButton);
    relativeOffsetButton.setToolTipText(
        "<html>Set the frame offset vector as a relative" +
        "<br>" +
        "position between two arbitrary points </html>"
        );
    group.add(relativeOffsetButton);
    relativeOffsetButton.addActionListener(this);


    temporaryPivotOffsetButton = new TemporaryPivotButton(editor,group,infoProxy,editor.getImageIcon("icons/TemporaryPivotOffset.png"));
    toolbar.add(temporaryPivotOffsetButton);
    group.add(temporaryPivotOffsetButton);
    temporaryPivotOffsetButton.addActionListener(this);
    editor.addSelectionListener(temporaryPivotOffsetButton);
   
  }

  boolean isEditingRectangle() {return editRectButton.isSelected();}
  boolean isRectangleLocked() {return lockRectButton.isSelected();}
  boolean isSettingPivot() {return setPivotButton.isSelected();}
  boolean isSettingOffsetDirectly() {return setOffsetButton.isSelected();}
  boolean isSettingOffsetWithRelativePos() {return relativeOffsetButton.isSelected();}
  boolean isSettingOffsetWithTemporaryPivot() {return temporaryPivotOffsetButton.isSelected();}

  public void openImage(Frame frame) {
    if(frame!=null && frame.getImageFile()!=null)
      editor.frameEditor.openImage(frame.getImageFile().getAbsoluteFile());
  }
 
  public void openImage(File file) {
    if(file==null) return;
    if(openedFiles.containsKey(file)) {
      views.setSelectedComponent(openedFiles.get(file));
    } else {
      FrameEditorView editorPanel = new FrameEditorView(file, editor);
      JScrollPane newPanel = new JScrollPane(editorPanel);
      views.add(newPanel,file.getName());
      openedFiles.put(file, newPanel);
      editorPanel.addMouseListener(infoProxy);
    }
  }

  @Override
  public void selectionChanged(Object selectedObject) {
    setInfo();
    repaint(20);
  }


  @Override
  public void actionPerformed(ActionEvent e) {
    // An editing button is pressed
    setInfo();
    repaint(20);
  }

}
TOP

Related Classes of orxanimeditor.ui.frameeditor.FrameEditor

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.