2 * Copyright 2000-2009 JetBrains s.r.o.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package com.intellij.openapi.vcs.changes.ui;
18 import com.intellij.openapi.project.Project;
19 import com.intellij.openapi.ui.Messages;
20 import com.intellij.openapi.vcs.VcsBundle;
21 import com.intellij.openapi.vcs.VcsConfiguration;
22 import com.intellij.openapi.vcs.changes.ChangeList;
23 import com.intellij.openapi.vcs.changes.ChangeListEditHandler;
24 import com.intellij.openapi.vcs.changes.ChangeListManager;
25 import com.intellij.openapi.vcs.changes.LocalChangeList;
26 import com.intellij.openapi.vcs.changes.issueLinks.IssueLinkRenderer;
27 import com.intellij.ui.HtmlListCellRenderer;
28 import com.intellij.ui.SimpleTextAttributes;
29 import com.intellij.util.Consumer;
30 import org.jetbrains.annotations.NotNull;
31 import org.jetbrains.annotations.Nullable;
35 import java.awt.event.ItemEvent;
36 import java.awt.event.ItemListener;
37 import java.util.Collection;
42 public class ChangeListChooserPanel extends JPanel {
43 private JPanel myPanel;
44 private JRadioButton myRbExisting;
45 private JRadioButton myRbNew;
46 private JComboBox myExistingListsCombo;
47 private EditChangelistPanel myNewListPanel;
48 @Nullable private final ChangeListEditHandler myHandler;
49 private final Consumer<String> myOkEnabledListener;
50 private Project myProject;
52 public ChangeListChooserPanel(@Nullable final ChangeListEditHandler handler, @NotNull final Consumer<String> okEnabledListener) {
53 super(new BorderLayout());
55 myOkEnabledListener = okEnabledListener;
56 add(myPanel, BorderLayout.CENTER);
58 myRbExisting.addItemListener(new ItemListener() {
59 public void itemStateChanged(ItemEvent e) {
65 public void init(final Project project) {
68 myExistingListsCombo.setRenderer(new HtmlListCellRenderer(myExistingListsCombo.getRenderer()) {
69 private final IssueLinkRenderer myLinkRenderer = new IssueLinkRenderer(project, this);
72 protected void doCustomize(JList list, Object value, int index, boolean selected, boolean hasFocus) {
73 if (value instanceof LocalChangeList) {
74 myLinkRenderer.appendTextWithLinks(((LocalChangeList)value).getName(),
75 ((LocalChangeList)value).isDefault() ? SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES
76 : SimpleTextAttributes.REGULAR_ATTRIBUTES);
80 myNewListPanel.init(project, null);
83 public void setChangeLists(Collection<? extends ChangeList> changeLists) {
84 final DefaultComboBoxModel model = new DefaultComboBoxModel();
85 for (ChangeList list : changeLists) {
86 model.addElement(list);
89 myExistingListsCombo.setModel(model);
92 public void setDefaultName(String name) {
93 myNewListPanel.setName(name);
96 private void updateEnabledItems() {
97 if (myRbExisting.isSelected()) {
98 myExistingListsCombo.setEnabled(true);
99 myNewListPanel.setEnabled(false);
100 myExistingListsCombo.requestFocus();
103 myExistingListsCombo.setEnabled(false);
104 myNewListPanel.setEnabled(true);
105 myNewListPanel.requestFocus();
107 if (myProject != null) {
108 myNewListPanel.nameChangedImpl(myProject, null);
113 public LocalChangeList getSelectedList(Project project) {
114 ChangeListManager manager = ChangeListManager.getInstance(project);
115 if (myRbNew.isSelected()) {
116 String newText = myNewListPanel.getName();
117 if (manager.findChangeList(newText) != null) {
118 Messages.showErrorDialog(project,
119 VcsBundle.message("changes.newchangelist.warning.already.exists.text", newText),
120 VcsBundle.message("changes.newchangelist.warning.already.exists.title"));
125 if (myRbExisting.isSelected()) {
126 return (LocalChangeList)myExistingListsCombo.getSelectedItem();
129 LocalChangeList changeList = manager.addChangeList(myNewListPanel.getName(), myNewListPanel.getDescription());
130 myNewListPanel.changelistCreatedOrChanged(changeList);
131 if (myNewListPanel.getMakeActiveCheckBox().isSelected()) {
132 manager.setDefaultChangeList(changeList);
134 VcsConfiguration.getInstance(project).MAKE_NEW_CHANGELIST_ACTIVE = myNewListPanel.getMakeActiveCheckBox().isSelected();
140 public void setDefaultSelection(final ChangeList defaultSelection) {
141 if (defaultSelection == null) {
142 myExistingListsCombo.setSelectedIndex(0);
145 myExistingListsCombo.setSelectedItem(defaultSelection);
149 if (defaultSelection != null) {
150 myRbExisting.setSelected(true);
153 myRbNew.setSelected(true);
156 updateEnabledItems();
159 public JComponent getPreferredFocusedComponent() {
160 return myRbExisting.isSelected() ? myExistingListsCombo : myNewListPanel.getPreferredFocusedComponent();
163 private void createUIComponents() {
164 myNewListPanel = new EditChangelistPanel(myHandler) {
167 protected void nameChanged(String errorMessage) {
168 if (myRbExisting.isSelected()) {
169 myOkEnabledListener.consume(null);
171 myOkEnabledListener.consume(errorMessage);