package edu.colorado.phet.movingman.ladybug

import _root_.edu.colorado.phet.common.phetcommon.model.Resettable
import edu.colorado.phet.common.phetcommon.view.ControlPanel
import edu.colorado.phet.common.phetcommon.view.ResetAllButton
import edu.colorado.phet.common.phetcommon.view.util.PhetFont
import scala.swing._
import scala.swing.event.ButtonClicked
import java.awt.Dimension
import java.awt.event.{ActionEvent, ActionListener}
import javax.swing.{Box, JButton, JRadioButton, JLabel}
import LadybugMotionModel._
import LadybugUtil._

class LadybugControlPanel(module: LadybugModule) extends ControlPanel(module) {
  val myModule = module;
  def createBox = Box.createRigidArea(new Dimension(10, 4))

  class VectorControlPanel(m: VectorVisibilityModel) extends BoxPanel(Orientation.Vertical) {
    contents += new MyRadioButton("Show velocity vector", {
      m.velocityVectorVisible = true
      m.accelerationVectorVisible = false
    }
      , m.velocityVectorVisible && !m.accelerationVectorVisible,
      m)

    contents += new MyRadioButton("Show acceleration vector", {
      m.velocityVectorVisible = false
      m.accelerationVectorVisible = true
    }
      , !m.velocityVectorVisible && m.accelerationVectorVisible,
      m)

    contents += new MyRadioButton("Show both", {
      m.velocityVectorVisible = true
      m.accelerationVectorVisible = true
    }
      , m.velocityVectorVisible && m.accelerationVectorVisible,
      m)

    contents += new MyRadioButton("Hide Vectors", {
      m.velocityVectorVisible = false
      m.accelerationVectorVisible = false
    }
      , !m.velocityVectorVisible && !m.accelerationVectorVisible,
      m)
  }
  addControl(new VectorControlPanel(module.getVectorVisibilityModel))

  class MotionControlPanel(m: LadybugMotionModel) extends BoxPanel(Orientation.Vertical) {
    contents += new Label("Choose Motion          ") {font = new PhetFont(14, true)}

    contents += new MyRadioButton("Manual", m.motion = MANUAL, m.motion == MANUAL, m)
    contents += new MyRadioButton("Linear", m.motion = LINEAR, m.motion == LINEAR, m)
    contents += new MyRadioButton("Circular", m.motion = CIRCULAR, m.motion == CIRCULAR, m)
    contents += new MyRadioButton("Ellipse", m.motion = ELLIPSE, m.motion == ELLIPSE, m)
  }
  addControl(new MotionControlPanel(module.getLadybugMotionModel))
  addControl(createBox)

  class TraceControlPanel(m: PathVisibilityModel) extends BoxPanel(Orientation.Vertical) {
    contents += new Label("Trace") {font = new PhetFont(14, true)}
    contents += new MyRadioButton("Solid", {
      m.lineVisible = true
      m.dotsVisible = false
    }
      , m.lineVisible && !m.dotsVisible,
      m)

    contents += new MyRadioButton("Dots", {
      m.lineVisible = false
      m.dotsVisible = true
    }
      , !m.lineVisible && m.dotsVisible,
      m)

    contents += new MyRadioButton("Off", {
      m.lineVisible = false
      m.dotsVisible = false
    }
      , !m.lineVisible && !m.dotsVisible,
      m)
  }
  val f = new FlowPanel
  f.contents += new TraceControlPanel(module.getPathVisibilityModel)
  f.contents += new Button("Clear Trace") {reactions += {case ButtonClicked(_) => module.clearTrace}}
  addControl(f)
  addControl(createBox)

  val remoteControl = new RemoteControl(module.model, () => {module.model.startRecording()})
  addControl(remoteControl)
  addControl(createBox)
  val resetAllButton = new ResetAllButton(new Resettable() {
    def reset = {module.resetAll()}
  }, this)
  addControl(resetAllButton)

  def resetAll() = {
    remoteControl.resetAll()
  }
}