PushButtonController.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * PushButtonController.js
  3. *
  4. * @author realor
  5. */
  6. import { PanelController } from './PanelController.js'
  7. import { Controller } from './Controller.js'
  8. class PushButtonController extends PanelController {
  9. constructor(object, name) {
  10. super(object, name)
  11. this.output = 0
  12. this.valueUp = 0
  13. this.valueDown = 1
  14. this.label = 'PUSH'
  15. this.buttonClass = 'rounded_button'
  16. this.height = 150
  17. this._onPointerDown = this.onPointerDown.bind(this)
  18. this._onPointerUp = this.onPointerUp.bind(this)
  19. this._pressed = false
  20. }
  21. createPanel() {
  22. super.createPanel('left', 150)
  23. let buttonElem = document.createElement('div')
  24. this.buttonElem = buttonElem
  25. buttonElem.addEventListener('pointerdown', this._onPointerDown, false)
  26. buttonElem.addEventListener('pointerup', this._onPointerUp, false)
  27. this.panel.bodyElem.appendChild(buttonElem)
  28. this.update()
  29. }
  30. onPointerDown(event) {
  31. this._pressed = true
  32. this.output = this.valueDown
  33. this.application.notifyObjectsChanged(this.object, this)
  34. }
  35. onPointerUp(event) {
  36. this._pressed = false
  37. this.output = this.valueUp
  38. this.application.notifyObjectsChanged(this.object, this)
  39. }
  40. onNodeChanged(event) {
  41. if (event.type === 'nodeChanged' && this.hasChanged(event)) {
  42. this.update()
  43. }
  44. }
  45. update() {
  46. this.panel.title = this.title || ''
  47. this.buttonElem.innerHTML = this.label || 'PUSH'
  48. this.buttonElem.className = this.buttonClass || 'rounded_button'
  49. let output = this._pressed ? this.valueDown : this.valueUp
  50. if (output !== this.output) {
  51. this.output = output
  52. this.application.notifyObjectsChanged(this.object, this)
  53. }
  54. }
  55. }
  56. Controller.addClass(PushButtonController)
  57. export { PushButtonController }