/* * DataImportOptionsUiCsvLocale.java * * Copyright (C) 2009-16 by RStudio, Inc. * * Unless you have received this program directly from RStudio pursuant * to the terms of a commercial license agreement with RStudio, then * this program is licensed to you under the terms of version 3 of the * GNU Affero General Public License. This program is distributed WITHOUT * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT, * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details. * */ package org.rstudio.studio.client.workbench.views.environment.dataimport; import org.rstudio.core.client.widget.ModalDialog; import org.rstudio.core.client.widget.OperationWithInput; import org.rstudio.studio.client.RStudioGinjector; import org.rstudio.studio.client.common.GlobalDisplay; import org.rstudio.studio.client.common.HelpLink; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.resources.client.CssResource; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; public class DataImportOptionsUiCsvLocale extends ModalDialog<DataImportOptionsCsvLocale> { interface Binder extends UiBinder<Widget, DataImportOptionsUiCsvLocale> {} public interface DataImportOptionsUiCsvLocaleStyle extends CssResource { String dialog(); } @Inject private void initialize(GlobalDisplay globalDisplay) { globalDisplay_ = globalDisplay; } public DataImportOptionsUiCsvLocale( OperationWithInput<DataImportOptionsCsvLocale> operation, DataImportOptionsCsvLocale locale) { super("Configure Locale", operation); widget_ = GWT.<Binder> create(Binder.class).createAndBindUi(this); initialLocale_ = locale; RStudioGinjector.INSTANCE.injectMembers(this); } private void assignLocale(DataImportOptionsCsvLocale locale) { if (locale == null) return; int fixedEncodings = encoding_.getItemCount(); for (int idxEncoding = 0; idxEncoding < fixedEncodings; idxEncoding ++) { if (encoding_.getValue(idxEncoding) == locale.getEncoding()) { encoding_.setSelectedIndex(idxEncoding); break; } if (idxEncoding == fixedEncodings - 1) { addOtherEncodingItem(idxEncoding, locale.getEncoding()); } } dateName_.setText(locale.getDateName()); dateFormat_.setText(locale.getDateFormat()); timeFormat_.setText(locale.getTimeFormat()); decimalMark_.setText(locale.getDecimalMark()); groupingMark_.setText(locale.getGroupingMark()); timeZone_.setText(locale.getTZ()); asciify_.setValue(locale.getAsciify()); } @Override protected void onDialogShown() { super.onDialogShown(); initializeDefaults(); initializeEvents(); assignLocale(initialLocale_); setOkButtonCaption("Configure"); HelpLink helpLink = new HelpLink( "Locales in readr", "readr_locales", false); addLeftWidget(helpLink); } @Override protected Widget createMainWidget() { return widget_; } @Override protected DataImportOptionsCsvLocale collectInput() { return DataImportOptionsCsvLocale.createLocale( dateName_.getText(), dateFormat_.getText(), timeFormat_.getText(), decimalMark_.getText(), groupingMark_.getText(), timeZone_.getText(), encoding_.getSelectedValue(), asciify_.getValue() ); } private void initializeDefaults() { // load .rs.iconvcommon() encoding_.addItem("ASCII", "ASCII"); encoding_.addItem("UTF-8", "UTF-8"); encoding_.addItem("ISO-8859-1", "ISO-8859-1"); encoding_.addItem("WINDOWS-1252", "WINDOWS-1252"); encoding_.addItem("SHIFT-JIS", "SHIFT-JIS"); encoding_.addItem("ISO-2022-JP", "ISO-2022-JP"); encoding_.addItem("BIG5", "BIG5"); encoding_.addItem("ISO-2022-KR", "ISO-2022-KR"); encoding_.addItem("ISO-8859-7", "ISO-8859-7"); encoding_.addItem("GB2312", "GB2312"); encoding_.addItem("GB18030", "GB18030"); encoding_.addItem("ISO-8859-2", "ISO-8859-2"); encoding_.addItem(otherLabel, ""); encoding_.setSelectedIndex(1); } private void addOtherEncodingItem(int selectedIndex, String otherEncoding) { encoding_.insertItem(otherEncoding, otherEncoding, selectedIndex); encoding_.setSelectedIndex(selectedIndex); } private void initializeEvents() { ChangeHandler encodingChangeHandler = new ChangeHandler() { @Override public void onChange(ChangeEvent arg0) { if (encoding_.getSelectedItemText() == otherLabel) { globalDisplay_.promptForText( "Encoding Identifier", "Please enter an encoding identifier. For a list of valid encodings run iconvlist().", encoding_.getSelectedValue(), new OperationWithInput<String>() { @Override public void execute(final String otherEncoding) { for (int idxEncoding = 0; idxEncoding < encoding_.getItemCount(); idxEncoding++) { if (encoding_.getValue(idxEncoding) == otherEncoding) { encoding_.setSelectedIndex(idxEncoding); return; } } int selectedIndex = encoding_.getSelectedIndex(); addOtherEncodingItem(selectedIndex - 1, otherEncoding); } } ); } } }; encoding_.addChangeHandler(encodingChangeHandler); } @UiField TextBox dateName_; @UiField ListBox encoding_; @UiField TextBox dateFormat_; @UiField TextBox timeFormat_; @UiField TextBox decimalMark_; @UiField TextBox groupingMark_; @UiField TextBox timeZone_; @UiField CheckBox asciify_; private Widget widget_; private DataImportOptionsCsvLocale initialLocale_; private GlobalDisplay globalDisplay_; private final String otherLabel = "Other..."; }