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
;
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 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());
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 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
);
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();
101 myExisitingsCombo
.setEnabled(false);
102 myNewListPanel
.setEnabled(true);
103 myNewListPanel
.requestFocus();
105 if (myProject
!= null) {
106 myNewListPanel
.nameChangedImpl(myProject
, null);
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"));
123 if (myRbExisting
.isSelected()) {
124 return (LocalChangeList
)myExisitingsCombo
.getSelectedItem();
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();
138 public void setDefaultSelection(final ChangeList defaultSelection
) {
139 if (defaultSelection
== null) {
140 myExisitingsCombo
.setSelectedIndex(0);
143 myExisitingsCombo
.setSelectedItem(defaultSelection
);
147 if (defaultSelection
!= null) {
148 myRbExisting
.setSelected(true);
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
) {
165 protected void nameChanged(String errorMessage
) {
166 if (myRbExisting
.isSelected()) {
167 myOkEnabledListener
.consume(null);
169 myOkEnabledListener
.consume(errorMessage
);