IDEA-27603 (Indicate which branch is being worked on)
[fedora-idea.git] / platform / vcs-impl / src / com / intellij / openapi / vcs / changes / ui / ChangeListChooserPanel.java
bloba74e309a53a35a7038272ad7fe50d9774f2030c4
1 /*
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.ColoredListCellRenderer;
28 import com.intellij.ui.SimpleTextAttributes;
29 import com.intellij.util.Consumer;
30 import org.jetbrains.annotations.NotNull;
31 import org.jetbrains.annotations.Nullable;
33 import javax.swing.*;
34 import java.awt.*;
35 import java.awt.event.ItemEvent;
36 import java.awt.event.ItemListener;
37 import java.util.Collection;
39 /**
40 * @author yole
42 public class ChangeListChooserPanel extends JPanel {
43 private JPanel myPanel;
44 private JRadioButton myRbExisting;
45 private JRadioButton myRbNew;
46 private JComboBox myExisitingsCombo;
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());
54 myHandler = handler;
55 myOkEnabledListener = okEnabledListener;
56 add(myPanel, BorderLayout.CENTER);
58 myRbExisting.addItemListener(new ItemListener() {
59 public void itemStateChanged(ItemEvent e) {
60 updateEnabledItems();
62 });
65 public void init(final Project project) {
66 myProject = project;
68 myExisitingsCombo.setRenderer(new ColoredListCellRenderer() {
70 private final IssueLinkRenderer myLinkRenderer = new IssueLinkRenderer(project, this);
71 protected void customizeCellRenderer(JList list, Object value, int index, boolean selected, boolean hasFocus) {
72 if (value instanceof LocalChangeList) {
73 myLinkRenderer.appendTextWithLinks(((LocalChangeList)value).getName(),
74 ((LocalChangeList)value).isDefault() ? SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES : SimpleTextAttributes.REGULAR_ATTRIBUTES);
77 });
78 myNewListPanel.init(project, null);
81 public void setChangeLists(Collection<? extends ChangeList> changeLists) {
82 final DefaultComboBoxModel model = new DefaultComboBoxModel();
83 for (ChangeList list : changeLists) {
84 model.addElement(list);
87 myExisitingsCombo.setModel(model);
90 public void setDefaultName(String name) {
91 myNewListPanel.setName(name);
94 private void updateEnabledItems() {
95 if (myRbExisting.isSelected()) {
96 myExisitingsCombo.setEnabled(true);
97 myNewListPanel.setEnabled(false);
98 myExisitingsCombo.requestFocus();
100 else {
101 myExisitingsCombo.setEnabled(false);
102 myNewListPanel.setEnabled(true);
103 myNewListPanel.requestFocus();
105 if (myProject != null) {
106 myNewListPanel.nameChangedImpl(myProject, null);
110 @Nullable
111 public LocalChangeList getSelectedList(Project project) {
112 ChangeListManager manager = ChangeListManager.getInstance(project);
113 if (myRbNew.isSelected()) {
114 String newText = myNewListPanel.getName();
115 if (manager.findChangeList(newText) != null) {
116 Messages.showErrorDialog(project,
117 VcsBundle.message("changes.newchangelist.warning.already.exists.text", newText),
118 VcsBundle.message("changes.newchangelist.warning.already.exists.title"));
119 return null;
123 if (myRbExisting.isSelected()) {
124 return (LocalChangeList)myExisitingsCombo.getSelectedItem();
126 else {
127 LocalChangeList changeList = manager.addChangeList(myNewListPanel.getName(), myNewListPanel.getDescription());
128 myNewListPanel.changelistCreatedOrChanged(changeList);
129 if (myNewListPanel.getMakeActiveCheckBox().isSelected()) {
130 manager.setDefaultChangeList(changeList);
132 VcsConfiguration.getInstance(project).MAKE_NEW_CHANGELIST_ACTIVE = myNewListPanel.getMakeActiveCheckBox().isSelected();
134 return changeList;
138 public void setDefaultSelection(final ChangeList defaultSelection) {
139 if (defaultSelection == null) {
140 myExisitingsCombo.setSelectedIndex(0);
142 else {
143 myExisitingsCombo.setSelectedItem(defaultSelection);
147 if (defaultSelection != null) {
148 myRbExisting.setSelected(true);
150 else {
151 myRbNew.setSelected(true);
154 updateEnabledItems();
157 public JComponent getPreferredFocusedComponent() {
158 return myRbExisting.isSelected() ? myExisitingsCombo : myNewListPanel.getPrefferedFocusedComponent();
161 private void createUIComponents() {
162 myNewListPanel = new EditChangelistPanel(myHandler) {
164 @Override
165 protected void nameChanged(String errorMessage) {
166 if (myRbExisting.isSelected()) {
167 myOkEnabledListener.consume(null);
168 } else {
169 myOkEnabledListener.consume(errorMessage);