nice dotted border
[fedora-idea.git] / platform / util / src / com / intellij / ui / OptionalChooserComponent.java
blobfb6ca56b5d28b2fc7fd7f02e94e11997f293295e
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.ui;
18 import com.intellij.openapi.util.Pair;
19 import org.jetbrains.annotations.NotNull;
21 import javax.swing.*;
22 import java.util.ArrayList;
23 import java.util.List;
25 /**
26 * @author oleg
27 * This component represents a list of checkboxes.
29 public abstract class OptionalChooserComponent implements CheckBoxListListener {
30 private JPanel myContentPane;
31 private CheckBoxList myList;
32 private DefaultListModel myListModel;
33 private List<Pair<String, Boolean>> myInitialList;
34 private ArrayList<Pair<String, Boolean>> myWorkingList;
36 public OptionalChooserComponent(@NotNull final List<Pair<String, Boolean>> list) {
37 myInitialList = list;
38 myWorkingList = new ArrayList<Pair<String, Boolean>>(myInitialList);
40 // fill list
41 reset();
44 public JPanel getContentPane() {
45 return myContentPane;
48 public void checkBoxSelectionChanged(int index, boolean value) {
49 final Pair<String, Boolean> pair = myWorkingList.remove(index);
50 myWorkingList.add(index, Pair.create(pair.first, value));
53 private void createUIComponents() {
54 myListModel = new DefaultListModel();
55 myList = new CheckBoxList(myListModel, this);
58 public void reset() {
59 myWorkingList = new ArrayList<Pair<String, Boolean>>(myInitialList);
60 update();
63 public abstract JCheckBox createCheckBox(final String path, final boolean checked);
65 public boolean isModified() {
66 return !myWorkingList.equals(myInitialList);
69 public ArrayList<Pair<String, Boolean>> getValue() {
70 return myWorkingList;
73 public void apply() {
74 myInitialList.clear();
75 myInitialList.addAll(myWorkingList);
78 public void update() {
79 myListModel.clear();
80 for (Pair<String, Boolean> pair : myWorkingList) {
81 myListModel.addElement(createCheckBox(pair.first, pair.second));