/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ro.nextreports.designer.ui.list; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import javax.swing.DefaultListModel; import javax.swing.JList; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.UIManager; /** * @author Decebal Suiu */ public class CheckListBox extends JList { public static Dimension tableDim = new Dimension(200, 150); public CheckListBox() { super(new DefaultListModel()); this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); this.setDoubleBuffered(true); this.setCellRenderer(new CheckListBoxCellRenderer()); this.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent event) { if (!SwingUtilities.isLeftMouseButton(event)) { return; } int index = locationToIndex(event.getPoint()); if (index == -1) { return; } CheckListItem item = (CheckListItem) getModel().getElementAt(index); if (item == null) { return; } final int checkBoxWidth = UIManager.getIcon("CheckBox.icon").getIconWidth() + 2; if (event.getPoint().x < getLocation().x + checkBoxWidth) { onCheck(item); } } }); } public CheckListItem addItem(String label, Object object) { DefaultListModel model = (DefaultListModel) this.getModel(); CheckListItem item = new CheckListItem(label, object); model.addElement(item); return item; } @Override public void removeAll() { DefaultListModel model = (DefaultListModel) this.getModel(); model.removeAllElements(); } public boolean isSelected(int index) { DefaultListModel model = (DefaultListModel) this.getModel(); CheckListItem item = (CheckListItem) (model.getElementAt(index)); return item.isSelected(); } public void setSelected(int index, boolean b) { DefaultListModel model = (DefaultListModel) this.getModel(); CheckListItem item = (CheckListItem) (model.getElementAt(index)); item.setSelected(b); repaint(); } public void setSelected(String label, boolean b) { DefaultListModel model = (DefaultListModel) this.getModel(); for (int i = 0; i < model.size(); i++) { CheckListItem item = (CheckListItem) (model.getElementAt(i)); if (item.getText().equals(label)) { setSelected(i, b); return; } } } public List getSelected() { return getSelected(false); } @SuppressWarnings("unchecked") public List getSelected(boolean onlyEnabled) { DefaultListModel model = (DefaultListModel) this.getModel(); List selectedObjects = new ArrayList(); for (int i = 0; i < model.size(); i++) { CheckListItem item = (CheckListItem) model.getElementAt(i); if (item.isSelected()) { if (!onlyEnabled) { selectedObjects.add(item.getText()); } else if (item.isEnabled()) { selectedObjects.add(item.getText()); } } } return selectedObjects; } public List getSelectedObjects() { return getSelectedObjects(false); } @SuppressWarnings("unchecked") public List getSelectedObjects(boolean onlyEnabled) { DefaultListModel model = (DefaultListModel) this.getModel(); List selectedObjects = new ArrayList(); for (int i = 0; i < model.size(); i++) { CheckListItem item = (CheckListItem) model.getElementAt(i); if (item.isSelected()) { if (!onlyEnabled) { selectedObjects.add(item.getObject()); } else if (item.isEnabled()) { selectedObjects.add(item.getObject()); } } } return selectedObjects; } public void setSelected(boolean b) { DefaultListModel model = (DefaultListModel) this.getModel(); int size = model.size(); for (int i = 0; i < size; i++) { CheckListItem item = (CheckListItem) model.getElementAt(i); item.setSelected(b); } repaint(); } public void selectRow(int index) { this.setSelectedIndex(index); } public boolean isEnabled(int index) { DefaultListModel model = (DefaultListModel) this.getModel(); CheckListItem item = (CheckListItem) model.getElementAt(index); return item.isEnabled(); } public void setEnabled(int index, boolean b) { DefaultListModel model = (DefaultListModel) this.getModel(); CheckListItem item = (CheckListItem) model.getElementAt(index); item.setEnabled(b); repaint(); } public void setEnabledAll(boolean b) { DefaultListModel model = (DefaultListModel) this.getModel(); int size = model.size(); for (int i = 0; i < size; i++) { CheckListItem item = (CheckListItem) model.getElementAt(i); item.setEnabled(b); } repaint(); } public Object getObject(int index) { DefaultListModel model = (DefaultListModel) this.getModel(); CheckListItem item = (CheckListItem) model.getElementAt(index); return item.getObject(); } public void setObject(Object object, int index) { DefaultListModel model = (DefaultListModel) this.getModel(); CheckListItem item = (CheckListItem) model.getElementAt(index); item.setObject(object); } public int sizeCheck() { DefaultListModel model = (DefaultListModel) this.getModel(); int size = model.size(); if (size == 0) { return 0; } int sizeCheck = 0; for (int i = 0; i < size; i++) { CheckListItem item = (CheckListItem) model.getElementAt(i); if (item.isSelected()) { sizeCheck++; } } return sizeCheck; } public int sizeList() { DefaultListModel model = (DefaultListModel) this.getModel(); return model.getSize(); } protected void onCheck(CheckListItem item) { item.setSelected(!item.isSelected()); DefaultListModel model = (DefaultListModel) this.getModel(); int index = model.indexOf(item); Rectangle r = getCellBounds(index, index); CheckListBox.this.repaint(r); } }