diff --git a/apps/spreadsheeteditor/main/app/controller/Toolbar.js b/apps/spreadsheeteditor/main/app/controller/Toolbar.js index 31d8620b5..6c128246a 100644 --- a/apps/spreadsheeteditor/main/app/controller/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/controller/Toolbar.js @@ -50,7 +50,8 @@ define([ 'spreadsheeteditor/main/app/view/TableOptionsDialog', 'spreadsheeteditor/main/app/view/NamedRangeEditDlg', 'spreadsheeteditor/main/app/view/NamedRangePasteDlg', - 'spreadsheeteditor/main/app/view/NameManagerDlg' + 'spreadsheeteditor/main/app/view/NameManagerDlg', + 'spreadsheeteditor/main/app/view/FormatSettingsDialog' ], function () { 'use strict'; SSE.Controllers.Toolbar = Backbone.Controller.extend(_.extend({ @@ -102,8 +103,7 @@ define([ fontsize: undefined, multiselect: false, sparklines_disabled: false, - numformattype: undefined, - langId: 0x0409 + numformattype: undefined }; var checkInsertAutoshape = function(e, action) { @@ -256,6 +256,8 @@ define([ toolbar.listStyles.on('click', _.bind(this.onListStyleSelect, this)); toolbar.cmbNumberFormat.on('selected', _.bind(this.onNumberFormatSelect, this)); toolbar.cmbNumberFormat.on('show:before', _.bind(this.onNumberFormatOpenBefore, this, true)); + if (toolbar.cmbNumberFormat.cmpEl) + toolbar.cmbNumberFormat.cmpEl.on('click', '#id-toolbar-mnu-item-more-formats a', _.bind(this.onNumberFormatSelect, this)); toolbar.btnCurrencyStyle.menu.on('item:click', _.bind(this.onNumberFormatMenu, this)); if (toolbar.mnuitemCompactToolbar) toolbar.mnuitemCompactToolbar.on('toggle', _.bind(this.onChangeViewMode, this)); $('#id-toolbar-menu-new-fontcolor').on('click', _.bind(this.onNewTextColor, this)); @@ -883,9 +885,22 @@ define([ }, onNumberFormatSelect: function(combo, record) { - if (this.api) - this.api.asc_setCellFormat(record.format); - + if (record) { + if (this.api) + this.api.asc_setCellFormat(record.format); + } else { + var me = this; + (new SSE.Views.FormatSettingsDialog({ + api: me.api, + handler: function(result, settings) { + if (settings) { + me.api.asc_setCellFormat(settings.format); + } + Common.NotificationCenter.trigger('edit:complete', me.toolbar); + }, + props : {} + })).show(); + } Common.NotificationCenter.trigger('edit:complete', this.toolbar); Common.component.Analytics.trackEvent('ToolBar', 'Number Format'); }, @@ -895,7 +910,7 @@ define([ var me = this, info = me.api.asc_getCellInfo(); me.toolbar.numFormatData.forEach( function(item, index) { - item.exampleval = me.api.asc_getLocaleExample2(item.format, null, me._state.langId); + item.exampleval = me.api.asc_getLocaleExample2(item.format); }); me.toolbar.cmbNumberFormat.setData(me.toolbar.numFormatData); me.toolbar.cmbNumberFormat.setValue(me._state.numformattype, me.toolbar.txtCustom); @@ -2560,12 +2575,6 @@ define([ for (var i=0; i', + '
', + '
', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '
', + '', + '
', + '
', + '', + '', + '
', + '', + '
', + '
', + '', + '
', + '
', + '
', + '
', + '', + '
', + '
', + '', + '
', + '
', + '', + '
', + '
', + '
', + '
', + '', + '
', + '' + ].join('') + }, options); + + this.api = options.api; + this.handler = options.handler; + this.props = options.props; + + Common.Views.AdvancedSettingsWindow.prototype.initialize.call(this, this.options); + + this.FormatType = Asc.c_oAscNumFormatType.General; + this.Format = this.ascFormatOptions.General; + }, + + render: function() { + Common.Views.AdvancedSettingsWindow.prototype.render.call(this); + var me = this; + + this.cmbFormat = new Common.UI.ComboBox({ + el: $('#format-settings-combo-format'), + cls: 'input-group-nr', + menuStyle: 'min-width: 140px;', + editable: false, + data: this.numFormatData + }); + this.cmbFormat.setValue(this.FormatType); + this.cmbFormat.on('selected', _.bind(this.onFormatSelect, this)); + + this.cmbNegative = new Common.UI.ComboBox({ + el: $('#format-settings-combo-negative'), + cls: 'input-group-nr', + menuStyle: 'min-width: 140px;', + editable: false, + data: [] + }); + this.cmbNegative.on('selected', _.bind(this.onNegativeSelect, this)); + + this.spnDecimal = new Common.UI.MetricSpinner({ + el: $('#format-settings-spin-decimal'), + step: 1, + width: 45, + defaultUnit : "", + value: 2, + maxValue: 30, + minValue: 0, + allowDecimal: false + }); + this.spnDecimal.on('change', _.bind(this.onDecimalChange, this)); + + this.chSeparator = new Common.UI.CheckBox({ + el: $('#format-settings-checkbox-separator'), + labelText: this.textSeparator + }); + this.chSeparator.on('change', _.bind(this.onSeparatorChange, this)); + + this.cmbSymbols = new Common.UI.ComboBox({ + el: $('#format-settings-combo-symbols'), + cls: 'input-group-nr', + menuStyle: 'min-width: 140px;', + editable: false, + data: [ + { displayValue: this.txtDollar, value: 0 }, + { displayValue: this.txtEuro, value: 1 }, + { displayValue: this.txtPound, value: 2 }, + { displayValue: this.txtRouble, value: 3 }, + { displayValue: this.txtYen, value: 4 } + ] + }); + this.cmbSymbols.setValue(0); + this.cmbSymbols.on('selected', _.bind(this.onSymbolsSelect, this)); + + this.cmbType = new Common.UI.ComboBox({ + el: $('#format-settings-combo-type'), + cls: 'input-group-nr', + menuStyle: 'min-width: 140px;', + editable: false, + data: [] + }); + this.cmbType.setValue(-1); + this.cmbType.on('selected', _.bind(this.onTypeSelect, this)); + + this.cmbCode = new Common.UI.ComboBox({ + el: $('#format-settings-combo-code'), + cls: 'input-group-nr', + menuStyle: 'min-width: 310px;', + editable: false, + data: [] + }); + // this.cmbCode.on('selected', _.bind(this.onCodeSelect, this)); + + this._decimalPanel = this.$window.find('.format-decimal'); + this._negativePanel = this.$window.find('.format-negative'); + this._separatorPanel = this.$window.find('.format-separator'); + this._typePanel = this.$window.find('.format-type'); + this._symbolsPanel = this.$window.find('.format-symbols'); + this._codePanel = this.$window.find('.format-code'); + + this.lblExample = this.$window.find('#format-settings-label-example'); + + this.afterRender(); + }, + + afterRender: function() { + this._setDefaults(this.props); + }, + + show: function() { + Common.Views.AdvancedSettingsWindow.prototype.show.apply(this, arguments); + }, + + _setDefaults: function (props) { + if (props) { + // var val = props.get_NumFormat(); + // this.cmbFormat.setValue(val); + this.onFormatSelect(this.cmbFormat, this.cmbFormat.getSelectedRecord()); + } + }, + + getSettings: function () { + return {format: ''}; + }, + + onDlgBtnClick: function(event) { + var me = this; + var state = (typeof(event) == 'object') ? event.currentTarget.attributes['result'].value : event; + if (state == 'ok') { + this.handler && this.handler.call(this, state, (state == 'ok') ? this.getSettings() : undefined); + } + + this.close(); + }, + + onPrimary: function() { + return true; + }, + + onNegativeSelect: function(combo, record) { + this.Format = record.value; + this.lblExample.text(this.api.asc_getLocaleExample2(this.Format)); + }, + + onSymbolsSelect: function(combo, record) { + var info = new Asc.asc_CFormatCellsInfo(); + info.asc_setType(this.FormatType); + info.asc_setDecimalPlaces(this.spnDecimal.getNumberValue()); + info.asc_setSeparator(false); + info.asc_setSymbol(record.value); + + var format = this.api.asc_getFormatCells(info); + if (this.FormatType == Asc.c_oAscNumFormatType.Currency) { + this.cmbNegative.setData(format); + this.cmbNegative.selectRecord(this.cmbNegative.store.at(0)); + this.Format = format[0]; + } else { + this.Format = format; + } + + this.lblExample.text(this.api.asc_getLocaleExample2(this.Format)); + }, + + onDecimalChange: function(field, newValue, oldValue, eOpts){ + var info = new Asc.asc_CFormatCellsInfo(); + info.asc_setType(this.FormatType); + info.asc_setDecimalPlaces(field.getNumberValue()); + info.asc_setSeparator((this.FormatType == Asc.c_oAscNumFormatType.Number) ? this.chSeparator.getValue()=='checked' : false); + info.asc_setSymbol((this.FormatType == Asc.c_oAscNumFormatType.Currency || this.FormatType == Asc.c_oAscNumFormatType.Accounting) ? this.cmbSymbols.getValue() : false); + + var format = this.api.asc_getFormatCells(info); + if (this.FormatType == Asc.c_oAscNumFormatType.Number || this.FormatType == Asc.c_oAscNumFormatType.Currency) { + this.cmbNegative.setData(format); + this.cmbNegative.selectRecord(this.cmbNegative.store.at(0)); + this.Format = format[0]; + } else { + this.Format = format; + } + + this.lblExample.text(this.api.asc_getLocaleExample2(this.Format)); + }, + + onSeparatorChange: function(field, newValue, oldValue, eOpts){ + var info = new Asc.asc_CFormatCellsInfo(); + info.asc_setType(this.FormatType); + info.asc_setDecimalPlaces(this.spnDecimal.getNumberValue()); + info.asc_setSeparator(field.getValue()=='checked'); + + var format = this.api.asc_getFormatCells(info); + this.cmbNegative.setData(format); + this.cmbNegative.selectRecord(this.cmbNegative.store.at(0)); + this.Format = format[0]; + + this.lblExample.text(this.api.asc_getLocaleExample2(this.Format)); + }, + + onTypeSelect: function(combo, record){ + var info = new Asc.asc_CFormatCellsInfo(); + info.asc_setType(this.FormatType); + info.asc_setDecimalPlaces(0); + info.asc_setSeparator(false); + + if (this.FormatType == Asc.c_oAscNumFormatType.Fraction) { + // info.asc_setFraction(record.value); + this.Format = this.api.asc_getFormatCells(info); + } else { + this.Format = record.value; + } + + this.lblExample.text(this.api.asc_getLocaleExample2(this.Format)); + }, + + onCodeSelect: function(combo, record){ + this.Format = record.value; + this.lblExample.text(this.api.asc_getLocaleExample2(this.Format)); + }, + + onFormatSelect: function(combo, record) { + if (!record) return; + + this.FormatType = record.value; + + var hasDecimal = (record.value == Asc.c_oAscNumFormatType.Number || record.value == Asc.c_oAscNumFormatType.Scientific || record.value == Asc.c_oAscNumFormatType.Accounting || + record.value == Asc.c_oAscNumFormatType.Currency || record.value == Asc.c_oAscNumFormatType.Percent), + hasNegative = (record.value == Asc.c_oAscNumFormatType.Number || record.value == Asc.c_oAscNumFormatType.Currency), + hasSeparator = (record.value == Asc.c_oAscNumFormatType.Number), + hasType = (record.value == Asc.c_oAscNumFormatType.Date || record.value == Asc.c_oAscNumFormatType.Time || record.value == Asc.c_oAscNumFormatType.Fraction), + hasSymbols = (record.value == Asc.c_oAscNumFormatType.Accounting || record.value == Asc.c_oAscNumFormatType.Currency), + hasCode = (record.value == -1); + + if (record.value !== -1) { + var info = new Asc.asc_CFormatCellsInfo(); + info.asc_setType(record.value); + info.asc_setDecimalPlaces(hasDecimal ? this.spnDecimal.getNumberValue() : 0); + info.asc_setSeparator(hasSeparator ? this.chSeparator.getValue()=='checked' : false); + info.asc_setSymbol(hasSymbols ? this.cmbSymbols.getValue() : false); + + if (hasNegative || record.value == Asc.c_oAscNumFormatType.Date || record.value == Asc.c_oAscNumFormatType.Time) { + var formatsarr = this.api.asc_getFormatCells(info); + if (hasNegative) { + this.cmbNegative.setData(formatsarr); + this.cmbNegative.selectRecord(this.cmbNegative.store.at(0)); + } else { + this.cmbType.setData(formatsarr); + this.cmbType.selectRecord(this.cmbType.store.at(0)); + } + this.Format = formatsarr[0]; + } else { + if (record.value == Asc.c_oAscNumFormatType.Fraction) { + this.cmbType.setData(this.FractionData); + this.cmbType.setValue(0); + // info.asc_setFraction(this.cmbType.getValue()); + } + this.Format = this.api.asc_getFormatCells(info); + } + + } else { + var formatsarr = this.api.asc_getFormatCells(null); + this.cmbCode.setData(formatsarr); + this.cmbCode.setValue(this.Format); + } + + // this.lblExample.text(this.api.asc_getLocaleExample2(this.Format)); + + this._decimalPanel.toggleClass('hidden', !hasDecimal); + this._negativePanel.css('visibility', hasNegative ? '' : 'hidden'); + this._separatorPanel.toggleClass('hidden', !hasSeparator); + this._typePanel.toggleClass('hidden', !hasType); + this._symbolsPanel.toggleClass('hidden', !hasSymbols); + this._codePanel.toggleClass('hidden', !hasCode); + }, + + textTitle: 'Number Format', + textSample: 'Sample', + textDecimal: 'Decimal', + textNegative: 'Negative numbers', + textSeparator: 'Use 1000 separator', + textType: 'Type', + textSymbols: 'Symbols', + textCode: 'Code', + textCancel: 'Cancel', + textOk: 'OK', + txtGeneral: 'General', + txtNumber: 'Number', + txtCustom: 'Custom', + txtCurrency: 'Currency', + txtAccounting: 'Accounting', + txtDate: 'Date', + txtTime: 'Time', + txtPercentage: 'Percentage', + txtFraction: 'Fraction', + txtScientific: 'Scientific', + txtText: 'Text', + txtDollar: '$ Dollar', + txtEuro: '€ Euro', + txtRouble: 'р. Rouble', + txtPound: '£ Pound', + txtYen: '¥ Yen', + txtUpto1: 'Up to one digit', + txtUpto2: 'Up to two digits', + txtUpto3: 'Up to three digits', + txtAs2: 'As halfs', + txtAs8: 'As eighths', + txtAs4: 'As fourths', + txtAs16: 'As sixteenths', + txtAs10: 'As tenths', + txtAs100: 'As hundredths' + + + }, SSE.Views.FormatSettingsDialog || {})) +}); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js index 420a5ced0..353981382 100644 --- a/apps/spreadsheeteditor/main/app/view/Toolbar.js +++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js @@ -657,7 +657,9 @@ define([ '
<%= scope.getDisplayValue(item) %>
', '
<%= item.exampleval ? item.exampleval : "" %>
', '
', - '<% }); %>' + '<% }); %>', + '
  • ', + '
  • ' + me.textMoreFormats + '
  • ' ].join('')); me.cmbNumberFormat = new Common.UI.ComboBox({ @@ -2112,6 +2114,7 @@ define([ tipInsertEquation: 'Insert Equation', textCharts: 'Charts', textSparks: 'Sparklines', - tipInsertChartSpark: 'Insert Chart or Sparkline' + tipInsertChartSpark: 'Insert Chart or Sparkline', + textMoreFormats: 'More formats' }, SSE.Views.Toolbar || {})); }); \ No newline at end of file diff --git a/apps/spreadsheeteditor/main/locale/en.json b/apps/spreadsheeteditor/main/locale/en.json index 5c9560616..fdd164c11 100644 --- a/apps/spreadsheeteditor/main/locale/en.json +++ b/apps/spreadsheeteditor/main/locale/en.json @@ -1625,6 +1625,7 @@ "SSE.Views.Toolbar.textLineSpark": "Line", "SSE.Views.Toolbar.textColumnSpark": "Column", "SSE.Views.Toolbar.textWinLossSpark": "Win/Loss", + "SSE.Views.Toolbar.textMoreFormats": "More formats", "SSE.Views.Top10FilterDialog.cancelButtonText": "Cancel", "SSE.Views.Top10FilterDialog.okButtonText": "OK", "SSE.Views.Top10FilterDialog.textType": "Show",