Open folder dialog style change to Macish
[idea/community.git] / plugins / github / src / org / jetbrains / plugins / github / ui / GithubCloneProjectPane.java
1 package org.jetbrains.plugins.github.ui;
2
3 import com.intellij.ide.ui.ListCellRendererWrapper;
4 import com.intellij.openapi.fileChooser.FileChooser;
5 import com.intellij.openapi.fileChooser.FileChooserDescriptor;
6 import com.intellij.openapi.ui.TextFieldWithBrowseButton;
7 import com.intellij.openapi.vfs.LocalFileSystem;
8 import com.intellij.openapi.vfs.VirtualFile;
9 import com.intellij.util.Consumer;
10 import org.jetbrains.annotations.Nullable;
11 import org.jetbrains.plugins.github.RepositoryInfo;
12
13 import javax.swing.*;
14 import javax.swing.event.DocumentEvent;
15 import javax.swing.event.DocumentListener;
16 import java.awt.event.ActionEvent;
17 import java.awt.event.ActionListener;
18 import java.awt.event.ItemEvent;
19 import java.awt.event.ItemListener;
20 import java.util.List;
21
22 /**
23  * @author oleg
24  * @date 10/20/10
25  */
26 public class GithubCloneProjectPane {
27   private JPanel myPanel;
28   private JComboBox mySelectRepositoryComboBox;
29   private TextFieldWithBrowseButton myTextFieldWithBrowseButton;
30   private JTextField myProjectNameText;
31   private final GithubCloneProjectDialog myDialog;
32
33   public GithubCloneProjectPane(final GithubCloneProjectDialog dialog) {
34     myDialog = dialog;
35     mySelectRepositoryComboBox.setRenderer(new ListCellRendererWrapper<RepositoryInfo>(mySelectRepositoryComboBox.getRenderer()){
36       @Override
37       public void customize(final JList list, final RepositoryInfo value, final int index, final boolean selected, final boolean cellHasFocus) {
38         setText(value.getOwner() + "/" + value.getName());
39       }
40     });
41     mySelectRepositoryComboBox.addItemListener(new ItemListener() {
42       @Override
43       public void itemStateChanged(final ItemEvent e) {
44         final RepositoryInfo repositoryInfo = (RepositoryInfo)e.getItem();
45         if (repositoryInfo != null) {
46           myProjectNameText.setText(repositoryInfo.getName());
47           myDialog.updateOkButton();
48         }
49       }
50     });
51
52     final DocumentListener updateOkButtonListener = new DocumentListener() {
53       // update Ok button state depending on the current state of the fields
54       public void insertUpdate(final DocumentEvent e) {
55         myDialog.updateOkButton();
56       }
57
58       public void removeUpdate(final DocumentEvent e) {
59         myDialog.updateOkButton();
60       }
61
62       public void changedUpdate(final DocumentEvent e) {
63         myDialog.updateOkButton();
64       }
65     };
66     myProjectNameText.getDocument().addDocumentListener(updateOkButtonListener);
67     myTextFieldWithBrowseButton.getChildComponent().getDocument().addDocumentListener(updateOkButtonListener);
68   }
69
70   public JComponent getPanel() {
71     return myPanel;
72   }
73
74   public JComponent getPreferrableFocusComponent() {
75     return mySelectRepositoryComboBox;
76   }
77
78   public RepositoryInfo getSelectedRepository(){
79     return (RepositoryInfo) mySelectRepositoryComboBox.getModel().getSelectedItem();
80   }
81
82   public String getSelectedPath(){
83     return myTextFieldWithBrowseButton.getText();
84   }
85
86   public String getProjectName(){
87     return myProjectNameText.getText();
88   }
89
90   private void createUIComponents() {
91     myTextFieldWithBrowseButton = new TextFieldWithBrowseButton(new ActionListener() {
92       @Override
93       public void actionPerformed(final ActionEvent e) {
94         final FileChooserDescriptor fileChooserDescriptor = new FileChooserDescriptor(false, true, false, false, false, false) {
95           public String getName(final VirtualFile virtualFile) {
96             return virtualFile.getName();
97           }
98
99           @Nullable
100           public String getComment(final VirtualFile virtualFile) {
101             return virtualFile.getPresentableUrl();
102           }
103         };
104         fileChooserDescriptor.setTitle("Select project destination folder");
105
106         final String preselectedFolderPath = myTextFieldWithBrowseButton.getText();
107         final VirtualFile preselectedFolder = LocalFileSystem.getInstance().findFileByPath(preselectedFolderPath);
108
109         FileChooser.chooseFilesWithSlideEffect(fileChooserDescriptor, null, preselectedFolder,
110                                                new Consumer<VirtualFile[]>() {
111                                                  @Override
112                                                  public void consume(VirtualFile[] files) {
113                                                    if (files.length > 0) {
114                                                      myTextFieldWithBrowseButton.setText(files[0].getPath());
115                                                    }
116                                                  }
117                                                });
118       }
119     });
120   }
121
122   public void setAvailableRepos(final List<RepositoryInfo> repos) {
123     mySelectRepositoryComboBox.setModel(new DefaultComboBoxModel(repos.toArray(new Object[repos.size()])));
124     final RepositoryInfo preselectedRepository = (RepositoryInfo)mySelectRepositoryComboBox.getSelectedItem();
125     if (preselectedRepository != null) {
126       myProjectNameText.setText(preselectedRepository.getName());
127     }
128   }
129
130   public void setSelectedPath(final String path) {
131     myTextFieldWithBrowseButton.setText(path);
132   }
133 }