| /* |
| * Copyright 2000-2013 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.jetbrains.plugins.github.ui; |
| |
| import com.intellij.openapi.ui.ComboBox; |
| import com.intellij.openapi.util.text.StringUtil; |
| import com.intellij.ui.DocumentAdapter; |
| import com.intellij.ui.SortedComboBoxModel; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| import org.jetbrains.plugins.github.api.GithubFullPath; |
| |
| import javax.swing.*; |
| import javax.swing.event.DocumentEvent; |
| import javax.swing.event.DocumentListener; |
| import java.util.Collection; |
| import java.util.Comparator; |
| |
| import static org.jetbrains.plugins.github.GithubCreatePullRequestWorker.BranchInfo; |
| import static org.jetbrains.plugins.github.GithubCreatePullRequestWorker.ForkInfo; |
| |
| /** |
| * @author Aleksey Pivovarov |
| */ |
| public class GithubCreatePullRequestPanel { |
| private JTextField myTitleTextField; |
| private JTextArea myDescriptionTextArea; |
| private ComboBox myBranchComboBox; |
| private SortedComboBoxModel<ForkInfo> myForkModel; |
| private SortedComboBoxModel<BranchInfo> myBranchModel; |
| private JPanel myPanel; |
| private JButton myShowDiffButton; |
| private JButton mySelectForkButton; |
| private JLabel myForkLabel; |
| private ComboBox myForkComboBox; |
| |
| private boolean myTitleDescriptionUserModified = false; |
| |
| public GithubCreatePullRequestPanel() { |
| myDescriptionTextArea.setBorder(BorderFactory.createEtchedBorder()); |
| |
| myBranchModel = new SortedComboBoxModel<BranchInfo>(new Comparator<BranchInfo>() { |
| @Override |
| public int compare(BranchInfo o1, BranchInfo o2) { |
| return StringUtil.naturalCompare(o1.getRemoteName(), o2.getRemoteName()); |
| } |
| }); |
| myBranchComboBox.setModel(myBranchModel); |
| |
| myForkModel = new SortedComboBoxModel<ForkInfo>(new Comparator<ForkInfo>() { |
| @Override |
| public int compare(ForkInfo o1, ForkInfo o2) { |
| return StringUtil.naturalCompare(o1.getPath().getUser(), o2.getPath().getUser()); |
| } |
| }); |
| myForkComboBox.setModel(myForkModel); |
| |
| DocumentListener userModifiedDocumentListener = new DocumentAdapter() { |
| @Override |
| protected void textChanged(DocumentEvent e) { |
| myTitleDescriptionUserModified = true; |
| } |
| }; |
| myTitleTextField.getDocument().addDocumentListener(userModifiedDocumentListener); |
| myDescriptionTextArea.getDocument().addDocumentListener(userModifiedDocumentListener); |
| } |
| |
| @NotNull |
| public String getTitle() { |
| return myTitleTextField.getText(); |
| } |
| |
| @NotNull |
| public String getDescription() { |
| return myDescriptionTextArea.getText(); |
| } |
| |
| @Nullable |
| public ForkInfo getSelectedFork() { |
| return myForkModel.getSelectedItem(); |
| } |
| |
| @Nullable |
| public BranchInfo getSelectedBranch() { |
| return myBranchModel.getSelectedItem(); |
| } |
| |
| public void setSelectedFork(@Nullable GithubFullPath path) { |
| if (path != null) { |
| for (ForkInfo info : myForkModel.getItems()) { |
| if (path.equals(info.getPath())) { |
| myForkModel.setSelectedItem(info); |
| return; |
| } |
| } |
| } |
| |
| if (myForkModel.getSize() > 0) myForkModel.setSelectedItem(myForkModel.get(0)); |
| } |
| |
| public void setSelectedBranch(@Nullable String branch) { |
| if (branch != null) { |
| for (BranchInfo info : myBranchModel.getItems()) { |
| if (branch.equals(info.getRemoteName())) { |
| myBranchModel.setSelectedItem(info); |
| return; |
| } |
| } |
| } |
| |
| if (myBranchModel.getSize() > 0) myBranchModel.setSelectedItem(myBranchModel.get(0)); |
| } |
| |
| public void setForks(@NotNull Collection<ForkInfo> forks) { |
| myForkModel.setSelectedItem(null); |
| myForkModel.setAll(forks); |
| } |
| |
| public void setBranches(@NotNull Collection<BranchInfo> branches) { |
| myBranchModel.setSelectedItem(null); |
| myBranchModel.setAll(branches); |
| } |
| |
| public void setTitle(@Nullable String title) { |
| myTitleTextField.setText(title); |
| myTitleDescriptionUserModified = false; |
| } |
| |
| public void setDescription(@Nullable String title) { |
| myDescriptionTextArea.setText(title); |
| myTitleDescriptionUserModified = false; |
| } |
| |
| public boolean isTitleDescriptionEmptyOrNotModified() { |
| return !myTitleDescriptionUserModified || |
| (StringUtil.isEmptyOrSpaces(myTitleTextField.getText()) && StringUtil.isEmptyOrSpaces(myDescriptionTextArea.getText())); |
| } |
| |
| public void setDiffEnabled(boolean enabled) { |
| myShowDiffButton.setEnabled(enabled); |
| } |
| |
| @NotNull |
| public JComponent getTitleTextField() { |
| return myTitleTextField; |
| } |
| |
| @NotNull |
| public JButton getSelectForkButton() { |
| return mySelectForkButton; |
| } |
| |
| @NotNull |
| public JButton getShowDiffButton() { |
| return myShowDiffButton; |
| } |
| |
| @NotNull |
| public ComboBox getForkComboBox() { |
| return myForkComboBox; |
| } |
| |
| @NotNull |
| public ComboBox getBranchComboBox() { |
| return myBranchComboBox; |
| } |
| |
| public JPanel getPanel() { |
| return myPanel; |
| } |
| |
| @NotNull |
| public JComponent getPreferredComponent() { |
| return myTitleTextField; |
| } |
| } |