blob: 82100f479fc96fcf0fc746bcb3455933e2fadbd5 [file] [log] [blame]
/*
* 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.
*/
/*
* SelectEventsPanel.java
*
* Created on Aug 28, 2011, 8:37:25 PM
*/
package org.netbeans.modules.debugger.jpda.visual.models;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.util.Collection;
import java.util.EventObject;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.swing.DefaultListModel;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JList;
import javax.swing.JTable;
import javax.swing.ListCellRenderer;
import javax.swing.event.CellEditorListener;
import javax.swing.event.TableModelListener;
import javax.swing.event.TreeModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.tree.AbstractLayoutCache;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import org.netbeans.swing.outline.CheckRenderDataProvider;
import org.netbeans.swing.outline.DefaultOutlineModel;
import org.netbeans.swing.outline.Outline;
import org.netbeans.swing.outline.OutlineModel;
import org.netbeans.swing.outline.RowModel;
import org.netbeans.swing.outline.TreePathSupport;
/**
*
* @author martin
*/
public class SelectEventsPanel extends javax.swing.JPanel {
private final List<Event> events = new LinkedList<Event>();
/** Creates new form SelectEventsPanel */
public SelectEventsPanel() {
initComponents();
}
public void setData(String[] names, boolean[] logging) {
int n = names.length;
for (int i = 0; i < n; i++) {
Event e = new Event(names[i], logging[i]);
events.add(e);
}
OutlineModel om = DefaultOutlineModel.createOutlineModel(new EventsTreeModel(events), new EventsRowModel(events));
table.setModel(om);
((Outline) table).setRenderDataProvider(new EventsDataProvider(events));
table.setShowHorizontalLines(false);
table.setTableHeader(null);
((Outline) table).setRootVisible(false);
}
public boolean[] getLoggingData() {
int n = events.size();
boolean[] logging = new boolean[n];
int i = 0;
for (Event e : events) {
logging[i++] = e.isLogging;
}
return logging;
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
selectLabel = new javax.swing.JLabel();
jScrollPane1 = new javax.swing.JScrollPane();
table = new Outline();
selectLabel.setText(org.openide.util.NbBundle.getMessage(SelectEventsPanel.class, "SelectEventsPanel.selectLabel.text")); // NOI18N
jScrollPane1.setViewportView(table);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE)
.addComponent(selectLabel))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(selectLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 267, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel selectLabel;
private javax.swing.JTable table;
// End of variables declaration//GEN-END:variables
private static class Event {
private String clazz;
private boolean isLogging;
private Event(String clazz, boolean isLogging) {
this.clazz = clazz;
this.isLogging = isLogging;
}
}
private static final class EventsRowModel implements RowModel {
private final List<Event> events;
private EventsRowModel(List<Event> events) {
this.events = events;
}
@Override
public int getColumnCount() {
return 0;
}
@Override
public Object getValueFor(Object node, int column) {
return null;
}
@Override
public Class getColumnClass(int column) {
return null;
}
@Override
public boolean isCellEditable(Object node, int column) {
return false;
}
@Override
public void setValueFor(Object node, int column, Object value) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public String getColumnName(int column) {
return "";
}
}
private static final class EventsTreeModel implements TreeModel {
private List<Event> events;
public EventsTreeModel(List<Event> events) {
this.events = events;
}
@Override
public Object getRoot() {
return "ROOT";
}
@Override
public Object getChild(Object parent, int index) {
return events.get(index);
}
@Override
public int getChildCount(Object parent) {
if (parent == "ROOT") {
return events.size();
} else {
return 0;
}
}
@Override
public boolean isLeaf(Object node) {
return !("ROOT".equals(node));
}
@Override
public void valueForPathChanged(TreePath path, Object newValue) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public int getIndexOfChild(Object parent, Object child) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void addTreeModelListener(TreeModelListener l) {
}
@Override
public void removeTreeModelListener(TreeModelListener l) {
}
}
private static final class EventsDataProvider implements CheckRenderDataProvider {
private static final Icon EMPTY_ICON = new EmptyIcon();
private List<Event> events;
public EventsDataProvider(List<Event> events) {
this.events = events;
}
@Override
public boolean isCheckable(Object o) {
return true;
}
@Override
public boolean isCheckEnabled(Object o) {
return true;
}
@Override
public Boolean isSelected(Object o) {
return ((Event) o).isLogging;
}
@Override
public void setSelected(Object o, Boolean selected) {
((Event) o).isLogging = selected;
}
@Override
public String getDisplayName(Object o) {
return ((Event) o).clazz;
}
@Override
public boolean isHtmlDisplayName(Object o) {
return false;
}
@Override
public Color getBackground(Object o) {
return null;
}
@Override
public Color getForeground(Object o) {
return null;
}
@Override
public String getTooltipText(Object o) {
return null;
}
@Override
public Icon getIcon(Object o) {
return EMPTY_ICON;
}
}
private static final class EmptyIcon implements Icon {
public EmptyIcon() {
}
@Override
public int getIconHeight() {
return 0;
}
@Override
public int getIconWidth() {
return 0;
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
}
}
}