/*
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.max.ins.memory;
import java.awt.*;
import javax.swing.*;
import com.sun.max.ins.*;
import com.sun.max.ins.gui.*;
/**
* A table cell renderer for tables with rows representing memory locations in VM memory: displays in the cell
* a memory address with a tooltip specified as a byte offset from some origin.
*/
public final class MemoryAddressLocationTableCellRenderer extends InspectorTableCellRenderer {
private final InspectorTable inspectorTable;
private final InspectorMemoryTableModel tableModel;
// This kind of label has no interaction state, so we only need one, which we set up on demand.
private final LocationLabel.AsAddressWithByteOffset label;
private final InspectorLabel[] labels = new InspectorLabel[1];
public MemoryAddressLocationTableCellRenderer(Inspection inspection, InspectorTable inspectorTable, InspectorMemoryTableModel tableModel) {
super(inspection);
this.inspectorTable = inspectorTable;
this.tableModel = tableModel;
this.label = new LocationLabel.AsAddressWithByteOffset(inspection);
this.labels[0] = this.label;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
label.setToolTipPrefix(tableModel.getRowDescription(row) + " location<br>Address = ");
label.setValue(tableModel.getOffset(row), tableModel.getOrigin());
if (inspectorTable.isBoundaryRow(row)) {
label.setBorder(preference().style().defaultPaneTopBorder());
} else {
label.setBorder(null);
}
label.setForeground(inspectorTable.cellForegroundColor(row, column));
label.setBackground(inspectorTable.cellBackgroundColor());
return label;
}
@Override
protected InspectorLabel[] getLabels() {
return labels;
}
}