64da1496616c5dad8ed30f2262f4c070e649645a
[idea/community.git] / platform / platform-api / src / com / intellij / ide / GeneralSettings.java
1 /*
2  * Copyright 2000-2014 JetBrains s.r.o.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 package com.intellij.ide;
17
18 import com.intellij.ide.util.PropertiesComponent;
19 import com.intellij.openapi.components.*;
20 import com.intellij.openapi.util.text.StringUtil;
21 import com.intellij.util.xmlb.XmlSerializerUtil;
22 import com.intellij.util.xmlb.annotations.OptionTag;
23 import com.intellij.util.xmlb.annotations.Transient;
24 import org.intellij.lang.annotations.MagicConstant;
25 import org.jetbrains.annotations.NonNls;
26 import org.jetbrains.annotations.Nullable;
27
28 import java.beans.PropertyChangeListener;
29 import java.beans.PropertyChangeSupport;
30
31 @State(
32   name = "GeneralSettings",
33   storages = @Storage(file = StoragePathMacros.APP_CONFIG + "/ide.general.xml")
34 )
35 public class GeneralSettings implements PersistentStateComponent<GeneralSettings> {
36   public static final int OPEN_PROJECT_ASK = -1;
37   public static final int OPEN_PROJECT_NEW_WINDOW = 0;
38   public static final int OPEN_PROJECT_SAME_WINDOW = 1;
39
40   @NonNls public static final String PROP_INACTIVE_TIMEOUT = "inactiveTimeout";
41
42   private String myBrowserPath = BrowserUtil.getDefaultAlternativeBrowserPath();
43   private boolean myShowTipsOnStartup = true;
44   private boolean myReopenLastProject = true;
45   private boolean mySyncOnFrameActivation = true;
46   private boolean mySaveOnFrameDeactivation = true;
47   private boolean myAutoSaveIfInactive = false;  // If true the IDEA automatically saves files if it is inactive for some seconds
48   private int myInactiveTimeout; // Number of seconds of inactivity after which IDEA automatically saves all files
49   private boolean myUseSafeWrite = true;
50   private final PropertyChangeSupport myPropertyChangeSupport;
51   private boolean myUseDefaultBrowser = true;
52   private boolean mySearchInBackground;
53   private boolean myConfirmExit = true;
54   private int myConfirmOpenNewProject = OPEN_PROJECT_ASK;
55
56   public static GeneralSettings getInstance(){
57     return ServiceManager.getService(GeneralSettings.class);
58   }
59
60   public GeneralSettings() {
61     myInactiveTimeout = 15;
62     myPropertyChangeSupport = new PropertyChangeSupport(this);
63   }
64
65   public void addPropertyChangeListener(PropertyChangeListener listener){
66     myPropertyChangeSupport.addPropertyChangeListener(listener);
67   }
68
69   public void removePropertyChangeListener(PropertyChangeListener listener){
70     myPropertyChangeSupport.removePropertyChangeListener(listener);
71   }
72
73   public String getBrowserPath() {
74     return myBrowserPath;
75   }
76
77   @SuppressWarnings("unused")
78   @Deprecated
79   /**
80    * Use RecentProjectsManagerBase
81    */
82   public String getLastProjectCreationLocation() {
83     return null;
84   }
85
86   @SuppressWarnings("unused")
87   @Deprecated
88   /**
89    * Use RecentProjectsManagerBase
90    */
91   public void setLastProjectCreationLocation(String lastProjectLocation) {
92   }
93
94   public void setBrowserPath(String browserPath) {
95     myBrowserPath = browserPath;
96   }
97
98   @SuppressWarnings("unused")
99   @Deprecated
100   public boolean showTipsOnStartup() {
101     return isShowTipsOnStartup();
102   }
103
104   public boolean isShowTipsOnStartup() {
105     return myShowTipsOnStartup;
106   }
107
108   public void setShowTipsOnStartup(boolean b) {
109     myShowTipsOnStartup = b;
110   }
111
112   @Transient
113   public int getLastTip() {
114     return StringUtil.parseInt(PropertiesComponent.getInstance().getValue("lastTip"), 0);
115   }
116
117   public void setLastTip(int i) {
118     PropertiesComponent.getInstance().setValue("lastTip", Integer.toString(i), "0");
119   }
120
121   public boolean isReopenLastProject() {
122     return myReopenLastProject;
123   }
124
125   public void setReopenLastProject(boolean reopenLastProject) {
126     myReopenLastProject = reopenLastProject;
127   }
128
129   @OptionTag("autoSyncFiles")
130   public boolean isSyncOnFrameActivation() {
131     return mySyncOnFrameActivation;
132   }
133
134   public void setSyncOnFrameActivation(boolean syncOnFrameActivation) {
135     mySyncOnFrameActivation = syncOnFrameActivation;
136   }
137
138   @OptionTag("autoSaveFiles")
139   public boolean isSaveOnFrameDeactivation() {
140     return mySaveOnFrameDeactivation;
141   }
142
143   public void setSaveOnFrameDeactivation(boolean saveOnFrameDeactivation) {
144     mySaveOnFrameDeactivation = saveOnFrameDeactivation;
145   }
146
147   /**
148    * @return <code>true</code> if IDEA saves all files after "idle" timeout.
149    */
150   public boolean isAutoSaveIfInactive(){
151     return myAutoSaveIfInactive;
152   }
153
154   public void setAutoSaveIfInactive(boolean autoSaveIfInactive) {
155     myAutoSaveIfInactive = autoSaveIfInactive;
156   }
157
158   /**
159    * @return timeout in seconds after which IDEA saves all files if there was no user activity.
160    * The method always return non positive (more then zero) value.
161    */
162   public int getInactiveTimeout(){
163     return myInactiveTimeout;
164   }
165
166   public void setInactiveTimeout(int inactiveTimeout) {
167     int oldInactiveTimeout = myInactiveTimeout;
168
169     myInactiveTimeout = inactiveTimeout;
170     myPropertyChangeSupport.firePropertyChange(
171         PROP_INACTIVE_TIMEOUT, Integer.valueOf(oldInactiveTimeout), Integer.valueOf(inactiveTimeout)
172     );
173   }
174
175   public boolean isUseSafeWrite() {
176     return myUseSafeWrite;
177   }
178
179   public void setUseSafeWrite(final boolean useSafeWrite) {
180     myUseSafeWrite = useSafeWrite;
181   }
182
183   @Nullable
184   @Override
185   public GeneralSettings getState() {
186     return this;
187   }
188
189   @Override
190   public void loadState(GeneralSettings state) {
191     XmlSerializerUtil.copyBean(state, this);
192   }
193
194   public boolean isUseDefaultBrowser() {
195     return myUseDefaultBrowser;
196   }
197
198   public void setUseDefaultBrowser(boolean value) {
199     myUseDefaultBrowser = value;
200   }
201
202   @SuppressWarnings("unused")
203   @Transient
204   @Deprecated
205   public boolean isConfirmExtractFiles() {
206     return true;
207   }
208
209   @SuppressWarnings("unused")
210   @Deprecated
211   public void setConfirmExtractFiles(boolean value) {
212   }
213
214   public boolean isConfirmExit() {
215     return myConfirmExit;
216   }
217
218   public void setConfirmExit(boolean confirmExit) {
219     myConfirmExit = confirmExit;
220   }
221
222   @MagicConstant(intValues = {OPEN_PROJECT_ASK, OPEN_PROJECT_NEW_WINDOW, OPEN_PROJECT_SAME_WINDOW})
223   @interface OpenNewProjectOption {}
224   /**
225    * @return
226    * <ul>
227    * <li>{@link GeneralSettings#OPEN_PROJECT_NEW_WINDOW} if new project should be opened in new window
228    * <li>{@link GeneralSettings#OPEN_PROJECT_SAME_WINDOW} if new project should be opened in same window
229    * <li>{@link GeneralSettings#OPEN_PROJECT_ASK} if a confirmation dialog should be shown
230    * </ul>
231    */
232   @OpenNewProjectOption
233   @OptionTag("confirmOpenNewProject2")
234   public int getConfirmOpenNewProject() {
235     return myConfirmOpenNewProject;
236   }
237
238   public void setConfirmOpenNewProject(@OpenNewProjectOption int confirmOpenNewProject) {
239     myConfirmOpenNewProject = confirmOpenNewProject;
240   }
241
242   public boolean isSearchInBackground() {
243     return mySearchInBackground;
244   }
245
246   public void setSearchInBackground(final boolean searchInBackground) {
247     mySearchInBackground = searchInBackground;
248   }
249 }