123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- /*
- * OptionsTool.js
- *
- * @author realor
- */
- import { Tool } from './Tool.js'
- import { Application } from '../ui/Application.js'
- import { Controls } from '../ui/Controls.js'
- import { I18N } from '../i18n/I18N.js'
- class OptionsTool extends Tool {
- constructor(application, options) {
- super(application)
- this.name = 'options'
- this.label = 'tool.options.label'
- this.help = 'tool.options.help'
- this.className = 'options'
- this.setOptions(options)
- this.createPanel()
- }
- createPanel() {
- const application = this.application
- this.panel = application.createPanel(this.label, 'left', 'panel_options')
- // Language
- // const i18n = this.application.i18n
- // this.languageSelect = Controls.addSelectField(this.panel.bodyElem, 'language', 'label.language')
- // this.languageSelect.parentElement.className = 'option_block inline'
- // this.languageSelect.addEventListener('change', () => {
- // let userLanguage = this.languageSelect.value
- // i18n.userLanguages = userLanguage
- // i18n.updateTree(this.application.element)
- // window.localStorage.setItem('bimrocket.language', userLanguage)
- // })
- // Units
- this.unitsSelect = Controls.addSelectField(this.panel.bodyElem, 'units', 'label.units', Application.UNITS)
- this.unitsSelect.parentElement.className = 'option_block inline'
- this.unitsSelect.addEventListener('change', () => (application.units = this.unitsSelect.value))
- // Decimals
- this.decimalsElem = Controls.addNumberField(this.panel.bodyElem, 'decimals', 'label.decimals')
- this.decimalsElem.parentElement.className = 'option_block inline'
- this.decimalsElem.min = 0
- this.decimalsElem.max = 15
- this.decimalsElem.addEventListener('change', () => (application.decimals = parseInt(this.decimalsElem.value)))
- // Frame rate divisor
- const frdElem = document.createElement('div')
- frdElem.className = 'option_block'
- this.panel.bodyElem.appendChild(frdElem)
- const frdValueDiv = document.createElement('div')
- frdElem.appendChild(frdValueDiv)
- const frdLabel = document.createElement('label')
- I18N.set(frdLabel, 'innerHTML', 'label.fr_divisor')
- frdLabel.htmlFor = 'frd_range'
- frdValueDiv.appendChild(frdLabel)
- this.frdValue = document.createElement('span')
- this.frdValue.innerHTML = ''
- this.frdValue.id = 'frd_value'
- this.frdValue.innerHTML = application.frameRateDivisor
- this.frdValue.style.marginLeft = '4px'
- frdValueDiv.appendChild(this.frdValue)
- this.frdRange = document.createElement('input')
- this.frdRange.id = 'frd_range'
- this.frdRange.type = 'range'
- this.frdRange.min = 1
- this.frdRange.max = 10
- this.frdRange.step = 1
- this.frdRange.style.display = 'inline-block'
- this.frdRange.style.width = '80%'
- this.frdRange.style.marginLeft = 'auto'
- this.frdRange.style.marginRight = 'auto'
- frdElem.appendChild(this.frdRange)
- this.frdRange.addEventListener('input', () => (this.frdValue.innerHTML = this.frdRange.value), false)
- this.frdRange.addEventListener('change', () => (application.frameRateDivisor = parseInt(this.frdRange.value)), false)
- // Selection Paint mode
- this.selPaintModeSelect = Controls.addSelectField(
- this.panel.bodyElem,
- 'selpaint_mode',
- 'label.sel_paint_mode',
- [
- [Application.EDGES_SELECTION, 'option.edges'],
- [Application.FACES_SELECTION, 'option.faces']
- ],
- null,
- 'option_block inline'
- )
- this.selPaintModeSelect.addEventListener('change', event => {
- application.selectionPaintMode = this.selPaintModeSelect.value
- application.updateSelection()
- })
- // Enable/disable deep selection visualization
- this.deepSelCheckBox = Controls.addCheckBoxField(this.panel.bodyElem, 'deep_sel', 'label.show_deep_sel', false, 'option_block')
- this.deepSelCheckBox.addEventListener('change', event => (application.showDeepSelection = this.deepSelCheckBox.checked))
- // Enable/disable local axes visualization
- this.localAxesCheckBox = Controls.addCheckBoxField(this.panel.bodyElem, 'local_axes', 'label.show_local_axes', false, 'option_block')
- this.localAxesCheckBox.addEventListener('change', event => (application.showLocalAxes = this.localAxesCheckBox.checked))
- // Enable/disable shadows
- this.shadowsCheckBox = Controls.addCheckBoxField(this.panel.bodyElem, 'shadows', 'label.cast_shadows', false, 'option_block')
- this.shadowsCheckBox.addEventListener('change', event => (application.shadowsEnabled = this.shadowsCheckBox.checked))
- // Background color
- this.backSelect = Controls.addSelectField(
- this.panel.bodyElem,
- 'backcolor_sel',
- 'label.background_color',
- [
- ['solid', 'option.solid'],
- ['gradient', 'option.gradient']
- ],
- null,
- 'option_block stack'
- )
- const backColorElem = this.backSelect.parentElement
- this.backSelect.addEventListener(
- 'change',
- event => {
- if (this.backSelect.value === 'solid') {
- this.backColorInput2.style.display = 'none'
- application.backgroundColor = this.backColorInput1.value
- } else {
- this.backColorInput2.style.display = ''
- application.backgroundColor1 = this.backColorInput1.value
- application.backgroundColor2 = this.backColorInput2.value
- }
- },
- false
- )
- this.backColorInput1 = document.createElement('input')
- this.backColorInput1.id = 'back_color1'
- this.backColorInput1.type = 'color'
- this.backColorInput1.className = 'back_color'
- backColorElem.appendChild(this.backColorInput1)
- this.backColorInput2 = document.createElement('input')
- this.backColorInput2.id = 'back_color2'
- this.backColorInput2.type = 'color'
- this.backColorInput2.className = 'back_color'
- backColorElem.appendChild(this.backColorInput2)
- this.backColorInput1.addEventListener(
- 'input',
- event => {
- if (this.backSelect.value === 'solid') {
- application.backgroundColor = this.backColorInput1.value
- } else {
- application.backgroundColor1 = this.backColorInput1.value
- }
- },
- false
- )
- this.backColorInput2.addEventListener('input', event => (application.backgroundColor2 = this.backColorInput2.value), false)
- this.panelOpacityRange = Controls.addInputField(this.panel.bodyElem, 'range', 'panelopac_range', 'label.panel_opacity', null, 'option_block stack')
- this.panelOpacityRange.min = 1
- this.panelOpacityRange.max = 100
- this.panelOpacityRange.step = 1
- this.panelOpacityRange.style.display = 'inline-block'
- this.panelOpacityRange.style.width = '80%'
- this.panelOpacityRange.style.marginLeft = 'auto'
- this.panelOpacityRange.style.marginRight = 'auto'
- this.panelOpacityRange.addEventListener('input', () => (application.panelOpacity = 0.01 * parseInt(this.panelOpacityRange.value)), false)
- }
- activate() {
- this.panel.visible = true
- const application = this.application
- this.backColorInput1.value = application.backgroundColor1
- this.backColorInput2.value = application.backgroundColor2
- if (application.backgroundColor1 === application.backgroundColor2) {
- this.backSelect.value = 'solid'
- this.backColorInput2.style.display = 'none'
- } else {
- this.backSelect.value = 'gradient'
- this.backColorInput2.style.display = ''
- }
- // const i18n = application.i18n
- // let supportedLanguages = Array.from(i18n.supportedLanguages)
- // let userLanguage = i18n.requestedLanguages[0]
- // let intl = new Intl.DisplayNames([userLanguage], { type: 'language' })
- // supportedLanguages = supportedLanguages.map(lang => [lang, intl.of(lang)])
- // Controls.setSelectOptions(this.languageSelect, supportedLanguages)
- // this.languageSelect.value = userLanguage
- this.unitsSelect.value = application.units
- this.decimalsElem.value = application.decimals
- this.frdValue.innerHTML = application.frameRateDivisor
- this.frdRange.value = application.frameRateDivisor
- this.selPaintModeSelect.value = application.selectionPaintMode
- this.deepSelCheckBox.checked = application.showDeepSelection
- this.localAxesCheckBox.checked = application.showLocalAxes
- this.shadowsCheckBox.checked = application.shadowsEnabled
- this.panelOpacityRange.value = 100 * application.panelOpacity
- }
- deactivate() {
- this.panel.visible = false
- }
- }
- export { OptionsTool }
|