| /* |
| * Copyright 2000-2014 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.zmlx.hg4idea.ui; |
| |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.ui.DialogWrapper; |
| import com.intellij.openapi.ui.ValidationInfo; |
| import com.intellij.openapi.util.text.StringUtil; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| import org.zmlx.hg4idea.repo.HgRepository; |
| import org.zmlx.hg4idea.util.HgUtil; |
| |
| import javax.swing.*; |
| import javax.swing.event.ChangeEvent; |
| import javax.swing.event.ChangeListener; |
| import java.awt.event.ActionEvent; |
| import java.awt.event.ActionListener; |
| import java.util.Collection; |
| |
| import static org.zmlx.hg4idea.util.HgUtil.TIP_REFERENCE; |
| |
| public class HgCommonDialogWithChoices extends DialogWrapper { |
| |
| |
| private JPanel contentPanel; |
| private JRadioButton branchOption; |
| private JRadioButton revisionOption; |
| private JRadioButton tagOption; |
| private JRadioButton bookmarkOption; |
| private JTextField revisionTxt; |
| protected JCheckBox cleanCbx; |
| private JComboBox branchSelector; |
| private JComboBox tagSelector; |
| private JComboBox bookmarkSelector; |
| protected HgRepositorySelectorComponent hgRepositorySelectorComponent; |
| protected JPanel myBranchesBorderPanel; |
| |
| public HgCommonDialogWithChoices(@NotNull Project project, @NotNull Collection<HgRepository> repositories, @Nullable HgRepository selectedRepo) { |
| super(project, false); |
| hgRepositorySelectorComponent.addActionListener(new ActionListener() { |
| public void actionPerformed(ActionEvent e) { |
| updateRepository(); |
| } |
| }); |
| |
| ChangeListener changeListener = new ChangeListener() { |
| public void stateChanged(ChangeEvent e) { |
| update(); |
| } |
| }; |
| branchOption.addChangeListener(changeListener); |
| tagOption.addChangeListener(changeListener); |
| bookmarkOption.addChangeListener(changeListener); |
| revisionOption.addChangeListener(changeListener); |
| cleanCbx.setVisible(false); |
| setRoots(repositories, selectedRepo); |
| init(); |
| } |
| |
| public void setRoots(Collection<HgRepository> repos, |
| @Nullable HgRepository selectedRepo) { |
| hgRepositorySelectorComponent.setRoots(repos); |
| hgRepositorySelectorComponent.setSelectedRoot(selectedRepo); |
| updateRepository(); |
| } |
| |
| public HgRepository getRepository() { |
| return hgRepositorySelectorComponent.getRepository(); |
| } |
| |
| public String getTag() { |
| return (String)tagSelector.getSelectedItem(); |
| } |
| |
| public boolean isTagSelected() { |
| return tagOption.isSelected(); |
| } |
| |
| public String getBranch() { |
| return (String)branchSelector.getSelectedItem(); |
| } |
| |
| public boolean isBranchSelected() { |
| return branchOption.isSelected(); |
| } |
| |
| public String getBookmark() { |
| return (String)bookmarkSelector.getSelectedItem(); |
| } |
| |
| public boolean isBookmarkSelected() { |
| return bookmarkOption.isSelected(); |
| } |
| |
| public String getRevision() { |
| return revisionTxt.getText(); |
| } |
| |
| private void update() { |
| revisionTxt.setEnabled(revisionOption.isSelected()); |
| branchSelector.setEnabled(branchOption.isSelected()); |
| tagSelector.setEnabled(tagOption.isSelected()); |
| bookmarkSelector.setEnabled(bookmarkOption.isSelected()); |
| } |
| |
| private void updateRepository() { |
| HgRepository repo = hgRepositorySelectorComponent.getRepository(); |
| branchSelector.setModel(new DefaultComboBoxModel(repo.getOpenedBranches().toArray())); |
| DefaultComboBoxModel tagComboBoxModel = new DefaultComboBoxModel(HgUtil.getNamesWithoutHashes(repo.getTags()).toArray()); |
| tagComboBoxModel |
| .addElement(TIP_REFERENCE); //HgRepository does not store 'tip' tag because it is internal and not included in tags file |
| tagSelector.setModel(tagComboBoxModel); |
| bookmarkSelector.setModel(new DefaultComboBoxModel(HgUtil.getNamesWithoutHashes(repo.getBookmarks()).toArray())); |
| update(); |
| } |
| |
| protected JComponent createCenterPanel() { |
| return contentPanel; |
| } |
| |
| @Override |
| protected String getDimensionServiceKey() { |
| return getClass().getName(); |
| } |
| |
| protected void createUIComponents() { |
| } |
| |
| public String getTargetValue() { |
| return isBranchSelected() ? getBranch() : isBookmarkSelected() ? getBookmark() : isTagSelected() ? getTag() : getRevision(); |
| } |
| |
| protected ValidationInfo doValidate() { |
| String message = "You have to specify appropriate name or revision."; |
| return StringUtil.isEmptyOrSpaces(getTargetValue()) ? new ValidationInfo(message, myBranchesBorderPanel) : null; |
| } |
| } |