1 package org.jetbrains.plugins.github.ui;
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;
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;
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;
33 public GithubCloneProjectPane(final GithubCloneProjectDialog dialog) {
35 mySelectRepositoryComboBox.setRenderer(new ListCellRendererWrapper<RepositoryInfo>(mySelectRepositoryComboBox.getRenderer()){
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());
41 mySelectRepositoryComboBox.addItemListener(new ItemListener() {
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();
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();
58 public void removeUpdate(final DocumentEvent e) {
59 myDialog.updateOkButton();
62 public void changedUpdate(final DocumentEvent e) {
63 myDialog.updateOkButton();
66 myProjectNameText.getDocument().addDocumentListener(updateOkButtonListener);
67 myTextFieldWithBrowseButton.getChildComponent().getDocument().addDocumentListener(updateOkButtonListener);
70 public JComponent getPanel() {
74 public JComponent getPreferrableFocusComponent() {
75 return mySelectRepositoryComboBox;
78 public RepositoryInfo getSelectedRepository(){
79 return (RepositoryInfo) mySelectRepositoryComboBox.getModel().getSelectedItem();
82 public String getSelectedPath(){
83 return myTextFieldWithBrowseButton.getText();
86 public String getProjectName(){
87 return myProjectNameText.getText();
90 private void createUIComponents() {
91 myTextFieldWithBrowseButton = new TextFieldWithBrowseButton(new ActionListener() {
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();
100 public String getComment(final VirtualFile virtualFile) {
101 return virtualFile.getPresentableUrl();
104 fileChooserDescriptor.setTitle("Select project destination folder");
106 final String preselectedFolderPath = myTextFieldWithBrowseButton.getText();
107 final VirtualFile preselectedFolder = LocalFileSystem.getInstance().findFileByPath(preselectedFolderPath);
109 FileChooser.chooseFilesWithSlideEffect(fileChooserDescriptor, null, preselectedFolder,
110 new Consumer<VirtualFile[]>() {
112 public void consume(VirtualFile[] files) {
113 if (files.length > 0) {
114 myTextFieldWithBrowseButton.setText(files[0].getPath());
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());
130 public void setSelectedPath(final String path) {
131 myTextFieldWithBrowseButton.setText(path);