2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com
.intellij
.openapi
.vcs
.configurable
;
18 import com
.intellij
.openapi
.options
.Configurable
;
19 import com
.intellij
.openapi
.options
.ConfigurationException
;
20 import com
.intellij
.openapi
.project
.Project
;
21 import com
.intellij
.openapi
.vcs
.VcsConfiguration
;
22 import com
.intellij
.openapi
.vcs
.VcsShowOptionsSettingImpl
;
23 import com
.intellij
.openapi
.vcs
.changes
.RemoteRevisionsCache
;
24 import com
.intellij
.openapi
.vcs
.changes
.committed
.CacheSettingsPanel
;
25 import org
.jetbrains
.annotations
.Nls
;
28 import java
.awt
.event
.ActionEvent
;
29 import java
.awt
.event
.ActionListener
;
30 import java
.util
.LinkedHashMap
;
33 public class VcsBackgroundOperationsConfigurationPanel
implements Configurable
{
35 private JPanel myPanel
;
37 private final Project myProject
;
38 Map
<VcsShowOptionsSettingImpl
, JCheckBox
> myPromptOptions
= new LinkedHashMap
<VcsShowOptionsSettingImpl
, JCheckBox
>();
39 private JCheckBox myCbUpdateInBackground
;
40 private JCheckBox myCbCommitInBackground
;
41 private JCheckBox myCbEditInBackground
;
42 private JCheckBox myCbAddRemoveInBackground
;
43 private JCheckBox myCbCheckoutInBackground
;
44 private JCheckBox myPerformRevertInBackgroundCheckBox
;
45 private JCheckBox myTrackChangedOnServer
;
46 private JCheckBox myEnableBackgroundProcesses
;
47 private JComponent myCachePanel
;
48 private JSpinner myChangedOnServerInterval
;
49 private JPanel myBackgroundProcesses
;
50 private JPanel myCachedCommittedChanges
;
51 private CacheSettingsPanel myCacheSettingsPanel
;
53 public VcsBackgroundOperationsConfigurationPanel(final Project project
) {
56 if (! myProject
.isDefault()) {
57 myEnableBackgroundProcesses
.addActionListener(new ActionListener() {
58 public void actionPerformed(ActionEvent e
) {
59 final boolean backgroundEnabled
= myEnableBackgroundProcesses
.isSelected();
60 if (! backgroundEnabled
) {
61 myCacheSettingsPanel
.setEnableCaching(false);
62 myTrackChangedOnServer
.setSelected(false);
64 myTrackChangedOnServer
.setEnabled(backgroundEnabled
);
65 myCacheSettingsPanel
.setEnabled(backgroundEnabled
);
68 myCacheSettingsPanel
.initPanel(project
);
69 myChangedOnServerInterval
.setModel(new SpinnerNumberModel(5, 5, 48 * 10 * 60, 5));
71 myBackgroundProcesses
.setVisible(! myProject
.isDefault());
74 public void apply() throws ConfigurationException
{
76 VcsConfiguration settings
= VcsConfiguration
.getInstance(myProject
);
78 settings
.PERFORM_COMMIT_IN_BACKGROUND
= myCbCommitInBackground
.isSelected();
79 settings
.PERFORM_UPDATE_IN_BACKGROUND
= myCbUpdateInBackground
.isSelected();
80 settings
.PERFORM_CHECKOUT_IN_BACKGROUND
= myCbCheckoutInBackground
.isSelected();
81 settings
.PERFORM_EDIT_IN_BACKGROUND
= myCbEditInBackground
.isSelected();
82 settings
.PERFORM_ADD_REMOVE_IN_BACKGROUND
= myCbAddRemoveInBackground
.isSelected();
83 settings
.PERFORM_ROLLBACK_IN_BACKGROUND
= myPerformRevertInBackgroundCheckBox
.isSelected();
85 if (! myProject
.isDefault()) {
86 if ((! settings
.CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND
) && myTrackChangedOnServer
.isSelected()) {
87 RemoteRevisionsCache
.getInstance(myProject
).startRefreshInBackground();
89 settings
.CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND
= myTrackChangedOnServer
.isSelected();
90 settings
.CHANGED_ON_SERVER_INTERVAL
= ((Number
) myChangedOnServerInterval
.getValue()).intValue();
91 settings
.ENABLE_BACKGROUND_PROCESSES
= myEnableBackgroundProcesses
.isSelected();
93 myCacheSettingsPanel
.apply();
96 for (VcsShowOptionsSettingImpl setting
: myPromptOptions
.keySet()) {
97 setting
.setValue(myPromptOptions
.get(setting
).isSelected());
101 public boolean isModified() {
103 VcsConfiguration settings
= VcsConfiguration
.getInstance(myProject
);
104 if (settings
.PERFORM_COMMIT_IN_BACKGROUND
!= myCbCommitInBackground
.isSelected()) {
108 if (settings
.PERFORM_UPDATE_IN_BACKGROUND
!= myCbUpdateInBackground
.isSelected()) {
112 if (settings
.PERFORM_CHECKOUT_IN_BACKGROUND
!= myCbCheckoutInBackground
.isSelected()) {
116 if (settings
.PERFORM_EDIT_IN_BACKGROUND
!= myCbEditInBackground
.isSelected()) {
119 if (settings
.PERFORM_ADD_REMOVE_IN_BACKGROUND
!= myCbAddRemoveInBackground
.isSelected()) {
122 if (settings
.PERFORM_ROLLBACK_IN_BACKGROUND
!= myPerformRevertInBackgroundCheckBox
.isSelected()) {
126 if (! myProject
.isDefault()) {
127 if (settings
.CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND
!= myTrackChangedOnServer
.isSelected()) {
130 if (settings
.ENABLE_BACKGROUND_PROCESSES
!= myEnableBackgroundProcesses
.isSelected()) return true;
131 if (myCacheSettingsPanel
.isModified()) return true;
132 if (settings
.CHANGED_ON_SERVER_INTERVAL
!= ((Number
) myChangedOnServerInterval
.getValue()).intValue()) return true;
137 public void reset() {
138 VcsConfiguration settings
= VcsConfiguration
.getInstance(myProject
);
139 myCbCommitInBackground
.setSelected(settings
.PERFORM_COMMIT_IN_BACKGROUND
);
140 myCbUpdateInBackground
.setSelected(settings
.PERFORM_UPDATE_IN_BACKGROUND
);
141 myCbCheckoutInBackground
.setSelected(settings
.PERFORM_CHECKOUT_IN_BACKGROUND
);
142 myCbEditInBackground
.setSelected(settings
.PERFORM_EDIT_IN_BACKGROUND
);
143 myCbAddRemoveInBackground
.setSelected(settings
.PERFORM_ADD_REMOVE_IN_BACKGROUND
);
144 myPerformRevertInBackgroundCheckBox
.setSelected(settings
.PERFORM_ROLLBACK_IN_BACKGROUND
);
145 for (VcsShowOptionsSettingImpl setting
: myPromptOptions
.keySet()) {
146 myPromptOptions
.get(setting
).setSelected(setting
.getValue());
149 if (! myProject
.isDefault()) {
150 myTrackChangedOnServer
.setSelected(settings
.CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND
);
151 myEnableBackgroundProcesses
.setSelected(settings
.ENABLE_BACKGROUND_PROCESSES
);
152 myChangedOnServerInterval
.setValue(settings
.CHANGED_ON_SERVER_INTERVAL
);
153 myCacheSettingsPanel
.reset();
157 public JComponent
getPanel() {
162 public String
getDisplayName() {
166 public Icon
getIcon() {
170 public String
getHelpTopic() {
171 return "project.propVCSSupport.Background";
174 public JComponent
createComponent() {
178 public void disposeUIResources() {
181 private void createUIComponents() {
182 myCacheSettingsPanel
= new CacheSettingsPanel();
183 myCachePanel
= myCacheSettingsPanel
.createComponent();