IDEA-81134 'Untracked Files Preventing Checkout': add action to delete files
[idea/community.git] / platform / vcs-impl / src / com / intellij / openapi / vcs / changes / ui / AbstractSelectFilesDialog.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package com.intellij.openapi.vcs.changes.ui;
18
19 import com.intellij.CommonBundle;
20 import com.intellij.openapi.actionSystem.*;
21 import com.intellij.openapi.project.Project;
22 import com.intellij.openapi.ui.DialogWrapper;
23 import com.intellij.openapi.ui.MultiLineLabelUI;
24 import com.intellij.openapi.vcs.VcsShowConfirmationOption;
25 import org.jetbrains.annotations.NotNull;
26 import org.jetbrains.annotations.Nullable;
27
28 import javax.swing.*;
29 import javax.swing.border.EmptyBorder;
30 import java.awt.*;
31
32 /**
33  * @author yole
34  */
35 public abstract class AbstractSelectFilesDialog<T> extends DialogWrapper {
36   protected JCheckBox myDoNotShowCheckbox;
37   protected final VcsShowConfirmationOption myConfirmationOption;
38   private final String myPrompt;
39   private final boolean myShowDoNotAskOption;
40
41   public AbstractSelectFilesDialog(Project project, boolean canBeParent, final VcsShowConfirmationOption confirmationOption,
42                                    final String prompt, boolean showDoNotAskOption) {
43     super(project, canBeParent);
44     myConfirmationOption = confirmationOption;
45     myPrompt = prompt;
46     myShowDoNotAskOption = showDoNotAskOption;
47   }
48
49   @NotNull
50   protected abstract ChangesTreeList getFileList();
51
52   @Nullable
53   private JLabel createPromptLabel() {
54     if (myPrompt != null) {
55       final JLabel label = new JLabel(myPrompt);
56       label.setUI(new MultiLineLabelUI());
57       label.setBorder(new EmptyBorder(5, 1, 5, 1));
58       return label;
59     }
60     return null;
61   }
62
63   @Override
64   protected JComponent createNorthPanel() {
65     return createPromptLabel();
66   }
67
68   protected void doOKAction() {
69   if (myDoNotShowCheckbox != null && myDoNotShowCheckbox.isSelected()) {
70       myConfirmationOption.setValue(VcsShowConfirmationOption.Value.DO_ACTION_SILENTLY);
71     }
72     super.doOKAction();
73   }
74
75   @Override
76   public void doCancelAction() {
77     if (myDoNotShowCheckbox != null && myDoNotShowCheckbox.isSelected()) {
78         myConfirmationOption.setValue(VcsShowConfirmationOption.Value.DO_NOTHING_SILENTLY);
79       }
80     super.doCancelAction();
81   }
82
83   @Override
84   public JComponent getPreferredFocusedComponent() {
85     return getFileList();
86   }
87
88   @Nullable
89   protected JComponent createCenterPanel() {
90     JPanel panel = new JPanel(new BorderLayout());
91     panel.add(createToolbar(), BorderLayout.NORTH);
92
93     panel.add(getFileList(), BorderLayout.CENTER);
94
95     if (myShowDoNotAskOption) {
96       myDoNotShowCheckbox = new JCheckBox(CommonBundle.message("dialog.options.do.not.ask"));
97       panel.add(myDoNotShowCheckbox, BorderLayout.SOUTH);
98     }
99     return panel;
100   }
101
102   private JComponent createToolbar() {
103     DefaultActionGroup group = createToolbarActions();
104     ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar(ActionPlaces.UNKNOWN, group, true);
105     return toolbar.getComponent();
106   }
107
108   @NotNull
109   protected DefaultActionGroup createToolbarActions() {
110     DefaultActionGroup group = new DefaultActionGroup();
111     final AnAction[] actions = getFileList().getTreeActions();
112     for(AnAction action: actions) {
113       group.add(action);
114     }
115     return group;
116   }
117 }