blob: 6b23766b9038772d91dc309bd3d6a763bfd6f5a2 [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.openapi.vcs.configurable;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SearchableConfigurable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vcs.VcsConfiguration;
import com.intellij.openapi.vcs.VcsShowOptionsSettingImpl;
import com.intellij.openapi.vcs.changes.RemoteRevisionsCache;
import com.intellij.openapi.vcs.changes.committed.CacheSettingsPanel;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedHashMap;
import java.util.Map;
public class VcsBackgroundOperationsConfigurationPanel {
private JPanel myPanel;
private final Project myProject;
Map<VcsShowOptionsSettingImpl, JCheckBox> myPromptOptions = new LinkedHashMap<VcsShowOptionsSettingImpl, JCheckBox>();
private JCheckBox myCbUpdateInBackground;
private JCheckBox myCbCommitInBackground;
private JCheckBox myCbEditInBackground;
private JCheckBox myCbAddRemoveInBackground;
private JCheckBox myCbCheckoutInBackground;
private JCheckBox myPerformRevertInBackgroundCheckBox;
private JCheckBox myTrackChangedOnServer;
private JComponent myCachePanel;
private JSpinner myChangedOnServerInterval;
private CacheSettingsPanel myCacheSettingsPanel;
public VcsBackgroundOperationsConfigurationPanel(final Project project) {
myProject = project;
if (! myProject.isDefault()) {
myCacheSettingsPanel.initPanel(project);
final VcsConfiguration settings = VcsConfiguration.getInstance(myProject);
myChangedOnServerInterval.setModel(new SpinnerNumberModel(settings.CHANGED_ON_SERVER_INTERVAL, 5, 48 * 10 * 60, 5));
myTrackChangedOnServer.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
myChangedOnServerInterval.setEnabled(myTrackChangedOnServer.isSelected());
}
});
}
}
public void apply() throws ConfigurationException {
VcsConfiguration settings = VcsConfiguration.getInstance(myProject);
settings.PERFORM_COMMIT_IN_BACKGROUND = myCbCommitInBackground.isSelected();
settings.PERFORM_UPDATE_IN_BACKGROUND = myCbUpdateInBackground.isSelected();
settings.PERFORM_CHECKOUT_IN_BACKGROUND = myCbCheckoutInBackground.isSelected();
settings.PERFORM_EDIT_IN_BACKGROUND = myCbEditInBackground.isSelected();
settings.PERFORM_ADD_REMOVE_IN_BACKGROUND = myCbAddRemoveInBackground.isSelected();
settings.PERFORM_ROLLBACK_IN_BACKGROUND = myPerformRevertInBackgroundCheckBox.isSelected();
boolean remoteCacheStateChanged = settings.CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND != myTrackChangedOnServer.isSelected();
if (! myProject.isDefault()) {
settings.CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND = myTrackChangedOnServer.isSelected();
settings.CHANGED_ON_SERVER_INTERVAL = ((Number) myChangedOnServerInterval.getValue()).intValue();
myCacheSettingsPanel.apply();
}
for (VcsShowOptionsSettingImpl setting : myPromptOptions.keySet()) {
setting.setValue(myPromptOptions.get(setting).isSelected());
}
// will check if should + was started -> inside
RemoteRevisionsCache.getInstance(myProject).updateAutomaticRefreshAlarmState(remoteCacheStateChanged);
}
public boolean isModified() {
VcsConfiguration settings = VcsConfiguration.getInstance(myProject);
if (settings.PERFORM_COMMIT_IN_BACKGROUND != myCbCommitInBackground.isSelected()) {
return true;
}
if (settings.PERFORM_UPDATE_IN_BACKGROUND != myCbUpdateInBackground.isSelected()) {
return true;
}
if (settings.PERFORM_CHECKOUT_IN_BACKGROUND != myCbCheckoutInBackground.isSelected()) {
return true;
}
if (settings.PERFORM_EDIT_IN_BACKGROUND != myCbEditInBackground.isSelected()) {
return true;
}
if (settings.PERFORM_ADD_REMOVE_IN_BACKGROUND != myCbAddRemoveInBackground.isSelected()) {
return true;
}
if (settings.PERFORM_ROLLBACK_IN_BACKGROUND != myPerformRevertInBackgroundCheckBox.isSelected()) {
return true;
}
if (! myProject.isDefault()) {
if (settings.CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND != myTrackChangedOnServer.isSelected()) {
return true;
}
if (myCacheSettingsPanel.isModified()) return true;
if (settings.CHANGED_ON_SERVER_INTERVAL != ((Number) myChangedOnServerInterval.getValue()).intValue()) return true;
}
return false;
}
public void reset() {
VcsConfiguration settings = VcsConfiguration.getInstance(myProject);
myCbCommitInBackground.setSelected(settings.PERFORM_COMMIT_IN_BACKGROUND);
myCbUpdateInBackground.setSelected(settings.PERFORM_UPDATE_IN_BACKGROUND);
myCbCheckoutInBackground.setSelected(settings.PERFORM_CHECKOUT_IN_BACKGROUND);
myCbEditInBackground.setSelected(settings.PERFORM_EDIT_IN_BACKGROUND);
myCbAddRemoveInBackground.setSelected(settings.PERFORM_ADD_REMOVE_IN_BACKGROUND);
myPerformRevertInBackgroundCheckBox.setSelected(settings.PERFORM_ROLLBACK_IN_BACKGROUND);
for (VcsShowOptionsSettingImpl setting : myPromptOptions.keySet()) {
myPromptOptions.get(setting).setSelected(setting.getValue());
}
if (! myProject.isDefault()) {
myTrackChangedOnServer.setSelected(settings.CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND);
myChangedOnServerInterval.setValue(settings.CHANGED_ON_SERVER_INTERVAL);
myChangedOnServerInterval.setEnabled(myTrackChangedOnServer.isSelected());
myCacheSettingsPanel.reset();
}
}
public JComponent getPanel() {
return myPanel;
}
private void createUIComponents() {
myCacheSettingsPanel = new CacheSettingsPanel();
myCachePanel = myCacheSettingsPanel.createComponent();
}
}