/* * PreferencesDialog.java * * Copyright (C) 2009-17 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.prefs.views; import com.google.gwt.core.client.GWT; import com.google.inject.Inject; import com.google.inject.Provider; import org.rstudio.core.client.prefs.PreferencesDialogBase; import org.rstudio.core.client.widget.Operation; import org.rstudio.core.client.widget.ProgressIndicator; import org.rstudio.studio.client.RStudioGinjector; import org.rstudio.studio.client.common.SimpleRequestCallback; import org.rstudio.studio.client.server.ServerError; import org.rstudio.studio.client.server.Void; import org.rstudio.studio.client.workbench.model.Session; import org.rstudio.studio.client.workbench.model.WorkbenchServerOperations; import org.rstudio.studio.client.workbench.prefs.events.UiPrefsChangedEvent; import org.rstudio.studio.client.workbench.prefs.model.RPrefs; import org.rstudio.studio.client.workbench.prefs.model.UIPrefs; public class PreferencesDialog extends PreferencesDialogBase<RPrefs> { @Inject public PreferencesDialog(WorkbenchServerOperations server, Session session, PreferencesDialogResources res, Provider<GeneralPreferencesPane> pR, EditingPreferencesPane source, RMarkdownPreferencesPane rmarkdown, CompilePdfPreferencesPane compilePdf, AppearancePreferencesPane appearance, PaneLayoutPreferencesPane paneLayout, PackagesPreferencesPane packages, SourceControlPreferencesPane sourceControl, SpellingPreferencesPane spelling, PublishingPreferencesPane publishing, TerminalPreferencesPane terminal, UIPrefs uiPrefs) { super("Options", res.styles().panelContainer(), true, new PreferencesPane[] {pR.get(), source, appearance, paneLayout, packages, rmarkdown, compilePdf, spelling, sourceControl, publishing, terminal}); session_ = session; server_ = server; if (!session.getSessionInfo().getAllowVcs()) hidePane(SourceControlPreferencesPane.class); if (!session.getSessionInfo().getAllowPublish()) hidePane(PublishingPreferencesPane.class); else if (!session.getSessionInfo().getAllowExternalPublish() && !uiPrefs.enableRStudioConnect().getValue()) { hidePane(PublishingPreferencesPane.class); } if (!session.getSessionInfo().getAllowShell()) { hidePane(TerminalPreferencesPane.class); } } @Override protected RPrefs createEmptyPrefs() { return RPrefs.createEmpty(); } @Override protected void doSaveChanges(final RPrefs rPrefs, final Operation onCompleted, final ProgressIndicator progressIndicator, final boolean reload) { // save changes server_.setPrefs( rPrefs, session_.getSessionInfo().getUiPrefs(), new SimpleRequestCallback<Void>() { @Override public void onResponseReceived(Void response) { progressIndicator.onCompleted(); if (onCompleted != null) onCompleted.execute(); if (reload) reload(); } @Override public void onError(ServerError error) { progressIndicator.onError(error.getUserMessage()); } }); // broadcast UI pref changes to satellites RStudioGinjector.INSTANCE.getSatelliteManager().dispatchCrossWindowEvent( new UiPrefsChangedEvent(UiPrefsChangedEvent.Data.create( UiPrefsChangedEvent.GLOBAL_TYPE, session_.getSessionInfo().getUiPrefs()))); } public static void ensureStylesInjected() { GWT.<PreferencesDialogResources>create(PreferencesDialogResources.class).styles().ensureInjected(); } private final WorkbenchServerOperations server_; private final Session session_; }