Package org.jwildfire.create.tina.swing

Source Code of org.jwildfire.create.tina.swing.AbstractControlsDelegate

/*
  JWildfire - an image and animation processor written in Java
  Copyright (C) 1995-2014 Andreas Maschke

  This is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser
  General Public License as published by the Free Software Foundation; either version 2.1 of the
  License, or (at your option) any later version.
  This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public License along with this software;
  if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jwildfire.create.tina.swing;

import java.awt.event.ActionEvent;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;

import org.jwildfire.create.tina.base.Flame;
import org.jwildfire.create.tina.base.motion.MotionCurve;
import org.jwildfire.envelope.Envelope;

public abstract class AbstractControlsDelegate {
  protected final TinaController owner;
  protected final TinaControllerData data;
  protected final JTabbedPane rootTabbedPane;
  protected final boolean useUndoManager;

  public abstract String getEditingTitle(JWFNumberField sender);

  public abstract MotionCurve getCurveToEdit(String pPropName);

  public abstract double getInitialValue(String pPropName);

  public abstract boolean isEnabled();

  public AbstractControlsDelegate(TinaController pOwner, TinaControllerData pData, JTabbedPane pRootTabbedPane, boolean pUseUndoManager) {
    owner = pOwner;
    data = pData;
    rootTabbedPane = pRootTabbedPane;
    useUndoManager = pUseUndoManager;
  }

  public void editMotionCurve(ActionEvent e) {
    JWFNumberField sender = ((JWFNumberField.JWFNumberFieldButton) e.getSource()).getOwner();
    editMotionCurve(sender);
  }

  public void editMotionCurve(JWFNumberField sender) {
    String propName = sender.getMotionPropertyName();
    editMotionCurve(propName, getEditingTitle(sender));
    enableControl(sender, false);
  }

  protected void editMotionCurve(MotionCurve pCurve, double pInitialValue, String pPropName, String pLabel) {
    Envelope envelope = pCurve.toEnvelope();
    if (envelope.getX().length == 0) {
      int[] x = new int[] { 0 };
      if (pInitialValue <= envelope.getViewYMin() + 1) {
        envelope.setViewYMin(pInitialValue - 1.0);
      }
      if (pInitialValue >= envelope.getViewYMax() - 1) {
        envelope.setViewYMax(pInitialValue + 1.0);
      }
      double[] y = new double[] { pInitialValue };
      envelope.setValues(x, y);
    }

    EnvelopeDialog dlg = new EnvelopeDialog(SwingUtilities.getWindowAncestor(rootTabbedPane), owner.getErrorHandler(), envelope, true);
    dlg.setFlameToPreview(EnvelopeDialogFlamePreviewType.MOTION_CURVE, owner.getCurrFlame(), pCurve);

    dlg.setTitle("Editing " + pLabel);
    dlg.setModal(true);
    dlg.setVisible(true);
    if (dlg.isConfirmed()) {
      Flame flame = owner.getCurrFlame();
      if (useUndoManager) {
        owner.undoManager.saveUndoPoint(flame);
      }
      if (dlg.isRemoved()) {
        pCurve.setEnabled(false);
      }
      else {
        pCurve.assignFromEnvelope(envelope);
        pCurve.setEnabled(true);
      }
      owner.refreshFlameImage(false);
    }
  }

  protected void editMotionCurve(String pPropName, String pLabel) {
    MotionCurve curve = getCurveToEdit(pPropName);
    double initialValue;
    try {
      initialValue = getInitialValue(pPropName);
    }
    catch (Exception ex) {
      initialValue = 0.0;
    }
    editMotionCurve(curve, initialValue, pPropName, pLabel);
  }

  public void enableControl(JButton pMainButton, JButton pCurveBtn, String pPropertyName, boolean pDisabled) {
    boolean controlEnabled = false;
    boolean curveBtnEnabled = false;
    boolean mainButtonEnabled = false;
    boolean hasCurve = false;
    if (!pDisabled && isEnabled()) {
      controlEnabled = true;
      if (pPropertyName != null && pPropertyName.length() > 0) {
        MotionCurve curve = getCurveToEdit(pPropertyName);
        curveBtnEnabled = true;
        mainButtonEnabled = !curve.isEnabled();
        hasCurve = curve.isEnabled();
      }
      else {
        curveBtnEnabled = false;
        mainButtonEnabled = true;
      }
    }
    pMainButton.setEnabled(controlEnabled && mainButtonEnabled);
    if (hasCurve)
      pCurveBtn.setIcon(new ImageIcon(getClass().getResource("/org/jwildfire/swing/icons/new/curve-money2a.png")));
    else
      pCurveBtn.setIcon(new ImageIcon(getClass().getResource("/org/jwildfire/swing/icons/new/curve-money2.png")));
    pCurveBtn.setEnabled(controlEnabled && curveBtnEnabled);
  }

  public void enableControl(JWFNumberField pSender, String pPropertyName, boolean pDisabled) {
    boolean controlEnabled = false;
    boolean curveBtnEnabled = false;
    boolean spinnerEnabled = false;
    boolean hasCurve = false;
    if (!pDisabled && isEnabled()) {
      controlEnabled = true;
      if (pPropertyName != null && pPropertyName.length() > 0) {
        MotionCurve curve = getCurveToEdit(pPropertyName);
        curveBtnEnabled = true;
        spinnerEnabled = !curve.isEnabled();
        hasCurve = curve.isEnabled();
      }
      else {
        curveBtnEnabled = false;
        spinnerEnabled = true;
      }
    }
    pSender.setEnabled(controlEnabled);
    pSender.enableMotionCurveBtn(controlEnabled && curveBtnEnabled);
    pSender.enableSpinnerField(controlEnabled && spinnerEnabled);
    setupStyle(pSender, hasCurve);
    if (pSender.getLinkedMotionControl() != null) {
      pSender.getLinkedMotionControl().setEnabled(controlEnabled && spinnerEnabled);
    }
  }

  private void setupStyle(JWFNumberField pSender, boolean pHasCurve) {
    pSender.setHasCurve(pHasCurve);
  }

  public void enableControl(JWFNumberField pSender, MotionCurve pCurve, boolean pDisabled) {
    boolean controlEnabled = false;
    boolean curveBtnEnabled = false;
    boolean spinnerEnabled = false;
    boolean hasCurve = false;
    if (!pDisabled && isEnabled()) {
      controlEnabled = true;
      if (pCurve != null) {
        curveBtnEnabled = true;
        spinnerEnabled = !pCurve.isEnabled();
        hasCurve = pCurve.isEnabled();
      }
      else {
        curveBtnEnabled = false;
        spinnerEnabled = true;
      }
    }
    pSender.setEnabled(controlEnabled);
    pSender.enableMotionCurveBtn(controlEnabled && curveBtnEnabled);
    pSender.enableSpinnerField(controlEnabled && spinnerEnabled);
    setupStyle(pSender, hasCurve);
    if (pSender.getLinkedMotionControl() != null) {
      pSender.getLinkedMotionControl().setEnabled(controlEnabled && spinnerEnabled);
    }
  }

  public void enableControl(JWFNumberField pSender, boolean pDisabled) {
    enableControl(pSender, pSender.getMotionPropertyName(), pDisabled);
  }

  public void enableControl(JCheckBox pSender, boolean pDisabled) {
    pSender.setEnabled(!pDisabled && owner.getCurrFlame() != null);
  }

  public void enableControl(JComboBox pSender, boolean pDisabled) {
    pSender.setEnabled(!pDisabled && owner.getCurrFlame() != null);
  }

}
TOP

Related Classes of org.jwildfire.create.tina.swing.AbstractControlsDelegate

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.