blob: 7530fa524e5283288fb8979bbef50452a671510c [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed 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 com.intellij.debugger.ui.breakpoints;
import com.intellij.openapi.project.Project;
import com.intellij.util.ui.Table;
import com.intellij.xdebugger.XDebuggerBundle;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
/**
* @author Eugene Zhuravlev
* Date: May 23, 2005
*/
public class BreakpointTable extends Table {
public BreakpointTable(final Project project) {
super(new BreakpointTableModel(project));
setColumnSelectionAllowed(false);
InputMap inputMap = getInputMap();
ActionMap actionMap = getActionMap();
Object o = inputMap.get(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0));
if (o == null) {
//noinspection HardCodedStringLiteral
o = "enable_disable";
inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), o);
}
actionMap.put(o, new AbstractAction() {
public void actionPerformed(ActionEvent e) {
if (isEditing()) {
return;
}
int[] indices = getSelectedRows();
boolean currentlyMarked = true;
for (int i = 0; i < indices.length; i++) {
final Boolean isMarked = (Boolean)getValueAt(indices[i], BreakpointTableModel.ENABLED_STATE);
currentlyMarked = isMarked != null? isMarked.booleanValue() : false;
if (!currentlyMarked) {
break;
}
}
final Boolean valueToSet = currentlyMarked ? Boolean.FALSE : Boolean.TRUE;
for (int i = 0; i < indices.length; i++) {
setValueAt(valueToSet, indices[i], BreakpointTableModel.ENABLED_STATE);
}
}
});
setShowGrid(false);
setIntercellSpacing(new Dimension(0, 0));
setTableHeader(null);
setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
setColumnSelectionAllowed(false);
int width = new JCheckBox().getPreferredSize().width;
TableColumnModel columnModel = getColumnModel();
TableColumn enabledStateColumn = columnModel.getColumn(BreakpointTableModel.ENABLED_STATE);
enabledStateColumn.setPreferredWidth(width);
enabledStateColumn.setMaxWidth(width);
final Class enabledStateColumnClass = getModel().getColumnClass(BreakpointTableModel.ENABLED_STATE);
final TableCellRenderer delegateRenderer = getDefaultRenderer(enabledStateColumnClass);
setDefaultRenderer(enabledStateColumnClass, new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
final Component component = delegateRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (component instanceof JComponent) {
((JComponent)component).setBorder(null);
}
return component;
}
});
columnModel.getColumn(BreakpointTableModel.NAME).setCellRenderer(new BreakpointNameCellRenderer());
getEmptyText().setText(XDebuggerBundle.message("debugger.no.breakpoints"));
}
public BreakpointTableModel getModel() {
return (BreakpointTableModel)super.getModel();
}
public void setBreakpoints(Breakpoint[] breakpoints) {
getModel().setBreakpoints(breakpoints);
}
public final java.util.List<Breakpoint> getBreakpoints() {
return getModel().getBreakpoints();
}
public Breakpoint[] getSelectedBreakpoints() {
if (getRowCount() == 0) {
return Breakpoint.EMPTY_ARRAY;
}
int[] rows = getSelectedRows();
if (rows.length == 0) {
return Breakpoint.EMPTY_ARRAY;
}
Breakpoint[] rv = new Breakpoint[rows.length];
for (int idx = 0; idx < rows.length; idx++) {
rv[idx] = getModel().getBreakpoint(rows[idx]);
}
return rv;
}
}