| /* |
| * 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(); |
| } |
| } |