interface/ButtonToolAdd.js

/*
 * Created by yvesb on 13/04/2017.
 */
/*
 * MathGraph32 Javascript : Software for animating online dynamic mathematics figures
 * https://www.mathgraph32.org/
 * @Author Yves Biton (yves.biton@sesamath.net)
 * @License: GNU AGPLv3 https://www.gnu.org/licenses/agpl-3.0.html
 */
import ButtonTool from './ButtonTool'
import OutilAddDlg from '../dialogs/OutilAddDlg'
import OutilAddByListDlg from '../dialogs/OutilAddByListDlg'

export default ButtonToolAdd

/**
 * Bouton rajouté à l'extrémité droite de certains menus déroulants.
 * Quand on clique sur un de ces boutons, une boîte de dialogue propose d'activer des outils supplémentaires (à usage unique).
 * @param {MtgApp} app  L'application proprétaire
 * @param {boolean} byList true si le choix de l'outil se fait dans une liste (création de macros)
 * @param {Outil} outilAdd  Un outil du type OutilAdd qui contient un tableau contenant la liste des outils à proposer
 * @param {string} tip le tip au survol de la souris
 * @param {string} title  Le titre de la boîte de dialogue quand on clique sur le bouton
 * @param {string} [iconName=null] null ou le nom de l'icône qu"on souhaite associer
 * @constructor
 * @extends Button
 */
function ButtonToolAdd (app, byList, outilAdd, tip, title = 'ChoixOutil', iconName = null) {
  ButtonTool.call(this, app, iconName || 'Add', 'left', false, 0, tip)
  this.byList = byList
  this.outilAdd = outilAdd
  this.title = title
}

ButtonToolAdd.prototype = new ButtonTool()

ButtonToolAdd.prototype.singleClickAction = function () {
  const nameEditor = this.app.nameEditor
  // Si un éditeur de nom de point ou droite est en cours, on le masque à ce niveau
  if (nameEditor.isVisible) nameEditor.montre(false)
  this.app.unFoldExpandableBars()
  // Tous les outils lancés par l'icône d'outils supplémentaires n'ont pas d'icône et activent l'outil de capture après
  // qu'ils aient été utilisés. Si un autre outil était actif avant l'utilisation d'un tel outil, il faut donc le désactiver
  // pour l'outi de capture
  this.app.activeOutilCapt()
  // On ouvre une boîte de dialogue présentant les outils suppémentaires dont le nom est inclus dans toolArray
  if (this.byList) new OutilAddByListDlg(this.app, this.outilAdd, this.title)
  else new OutilAddDlg(this.app, this.outilAdd, this.title)
}

ButtonToolAdd.prototype.doubleClickAction = function () {
  this.singleClickAction()
}