b0cef140f4d4cee586337c610356580693beb3d5
[idea/community.git] / platform / platform-impl / src / com / intellij / openapi / fileChooser / impl / FileChooserFactoryImpl.java
1 /*
2  * Copyright 2000-2009 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.openapi.fileChooser.impl;
17
18 import com.intellij.openapi.Disposable;
19 import com.intellij.openapi.application.ApplicationManager;
20 import com.intellij.openapi.application.PathMacros;
21 import com.intellij.openapi.fileChooser.*;
22 import com.intellij.openapi.fileChooser.ex.FileChooserDialogImpl;
23 import com.intellij.openapi.fileChooser.ex.FileSaverDialogImpl;
24 import com.intellij.openapi.fileChooser.ex.FileTextFieldImpl;
25 import com.intellij.openapi.project.Project;
26 import com.intellij.openapi.util.SystemInfo;
27 import com.intellij.openapi.util.registry.Registry;
28 import com.intellij.ui.mac.MacFileChooserDialog;
29
30 import javax.swing.*;
31 import java.awt.*;
32 import java.util.HashMap;
33 import java.util.Map;
34 import java.util.Set;
35
36 public class FileChooserFactoryImpl extends FileChooserFactory {
37   public FileChooserDialog createFileChooser(FileChooserDescriptor descriptor, Project project) {
38     if (SystemInfo.isMac && (System.getProperty("idea.use.native.mac.filechooser", Boolean.FALSE.toString()).equals(Boolean.TRUE.toString())
39       || Registry.is("ide.use.native.mac.filechooser"))) {
40       return new MacFileChooserDialog(descriptor, project);
41     }
42
43     return new FileChooserDialogImpl(descriptor, project);
44   }
45
46   public FileChooserDialog createFileChooser(FileChooserDescriptor descriptor, Component parent) {
47     if (SystemInfo.isMac && (System.getProperty("idea.use.native.mac.filechooser", Boolean.FALSE.toString()).equals(Boolean.TRUE.toString())
48     || Registry.is("ide.use.native.mac.filechooser"))) {
49       return new MacFileChooserDialog(descriptor, parent);
50     }
51
52     return new FileChooserDialogImpl(descriptor, parent);
53   }
54
55   public FileTextField createFileTextField(final FileChooserDescriptor descriptor, final boolean showHidden, Disposable parent) {
56     return new FileTextFieldImpl.Vfs(descriptor, showHidden, new JTextField(), getMacroMap(), parent);
57   }
58
59   public FileTextField createFileTextField(final FileChooserDescriptor descriptor, Disposable parent) {
60     return createFileTextField(descriptor, true, parent);
61   }
62
63   public void installFileCompletion(final JTextField field, final FileChooserDescriptor descriptor, final boolean showHidden,
64                                     final Disposable parent) {
65     if (ApplicationManager.getApplication().isUnitTestMode() || ApplicationManager.getApplication().isHeadlessEnvironment()) return;
66
67     FileTextFieldImpl.Vfs vfsField = new FileTextFieldImpl.Vfs(descriptor, showHidden, field, getMacroMap(), parent);
68   }
69
70   public static Map<String, String> getMacroMap() {
71     final PathMacros macros = PathMacros.getInstance();
72     final Set<String> allNames = macros.getAllMacroNames();
73     final HashMap<String, String> map = new HashMap<String, String>();
74     for (String eachMacroName : allNames) {
75       map.put("$" + eachMacroName + "$", macros.getValue(eachMacroName));
76     }
77
78     return map;
79   }
80
81   public FileSaverDialog createSaveFileDialog(FileSaverDescriptor descriptor, Project project) {
82     return new FileSaverDialogImpl(descriptor, project);
83   }
84 }