6f6a1a3ba9bdd0ee807a5771b125bf4ca0d32f25
[idea/community.git] / plugins / hg4idea / src / org / zmlx / hg4idea / ui / HgSwitchDialog.java
1 // Copyright 2008-2010 Victor Iacoban
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software distributed under
10 // the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
11 // either express or implied. See the License for the specific language governing permissions and
12 // limitations under the License.
13 package org.zmlx.hg4idea.ui;
14
15 import com.intellij.openapi.project.Project;
16 import com.intellij.openapi.ui.DialogWrapper;
17 import com.intellij.openapi.vfs.VirtualFile;
18 import com.intellij.util.Consumer;
19 import org.zmlx.hg4idea.command.HgTagBranch;
20 import org.zmlx.hg4idea.command.HgTagBranchCommand;
21
22 import javax.swing.*;
23 import javax.swing.event.ChangeEvent;
24 import javax.swing.event.ChangeListener;
25 import java.awt.event.ActionEvent;
26 import java.awt.event.ActionListener;
27 import java.util.Collection;
28 import java.util.List;
29
30 public class HgSwitchDialog extends DialogWrapper {
31
32   private final Project project;
33
34   private JPanel contentPanel;
35   private JRadioButton branchOption;
36   private JRadioButton revisionOption;
37   private JTextField revisionTxt;
38   private JCheckBox cleanCbx;
39   private JComboBox branchSelector;
40   private JRadioButton tagOption;
41   private JComboBox tagSelector;
42   private HgRepositorySelectorComponent hgRepositorySelectorComponent;
43
44   public HgSwitchDialog(Project project) {
45     super(project, false);
46     this.project = project;
47     hgRepositorySelectorComponent.setTitle("Select repository to switch");
48     hgRepositorySelectorComponent.addActionListener(new ActionListener() {
49       public void actionPerformed(ActionEvent e) {
50         updateRepository();
51       }
52     });
53
54     ChangeListener changeListener = new ChangeListener() {
55       public void stateChanged(ChangeEvent e) {
56         update();
57       }
58     };
59     branchOption.addChangeListener(changeListener);
60     tagOption.addChangeListener(changeListener);
61     revisionOption.addChangeListener(changeListener);
62
63     setTitle("Switch working directory");
64     init();
65   }
66
67   public void setRoots(Collection<VirtualFile> repos) {
68     hgRepositorySelectorComponent.setRoots(repos);
69     updateRepository();
70   }
71
72   public VirtualFile getRepository() {
73     return hgRepositorySelectorComponent.getRepository();
74   }
75
76   public HgTagBranch getTag() {
77     return (HgTagBranch) tagSelector.getSelectedItem();
78   }
79
80   public boolean isTagSelected() {
81     return tagOption.isSelected();
82   }
83
84   public HgTagBranch getBranch() {
85     return (HgTagBranch) branchSelector.getSelectedItem();
86   }
87
88   public boolean isBranchSelected() {
89     return branchOption.isSelected();
90   }
91
92   public String getRevision() {
93     return revisionTxt.getText();
94   }
95
96   public boolean isRevisionSelected() {
97     return revisionOption.isSelected();
98   }
99
100   public boolean isRemoveLocalChanges() {
101     return cleanCbx.isSelected();
102   }
103
104   private void update() {
105     setOKActionEnabled(validateOptions());
106     revisionTxt.setEnabled(revisionOption.isSelected());
107     branchSelector.setEnabled(branchOption.isSelected());
108     tagSelector.setEnabled(tagOption.isSelected());
109   }
110
111   private void updateRepository() {
112     VirtualFile repo = hgRepositorySelectorComponent.getRepository();
113     loadBranches(repo);
114     loadTags(repo);
115     update();
116   }
117
118   private void loadBranches(VirtualFile root) {
119     new HgTagBranchCommand(project, root).listBranches(new Consumer<List<HgTagBranch>>() {
120       @Override
121       public void consume(List<HgTagBranch> branches) {
122         branchSelector.setModel(new DefaultComboBoxModel(branches.toArray()));
123       }
124     });
125   }
126
127   private void loadTags(VirtualFile root) {
128     new HgTagBranchCommand(project, root).listTags(new Consumer<List<HgTagBranch>>() {
129       @Override
130       public void consume(List<HgTagBranch> tags) {
131         tagSelector.setModel(new DefaultComboBoxModel(tags.toArray()));
132       }
133     });
134   }
135
136   private boolean validateOptions() {
137     return true;
138   }
139
140   protected JComponent createCenterPanel() {
141     return contentPanel;
142   }
143
144   @Override
145   protected String getHelpId() {
146     return "reference.mercurial.switch.working.directory";
147   }
148 }