/*
* Copyright (c) 2007, 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.gui;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import com.sun.max.ins.*;
import com.sun.max.ins.util.*;
/**
* An adaptor for specifying styles in the VM Inspector.
*/
public abstract class InspectorStyleAdapter extends AbstractInspectionHolder implements InspectorStyle {
protected InspectorStyleAdapter(Inspection inspection) {
super(inspection);
}
// Window, Frame, Desktop attributes
public Color defaultBackgroundColor() {
return InspectorStyle.White;
}
public Color defaultBorderColor() {
return InspectorStyle.Black;
}
public Color frameBorderFlashColor() {
return InspectorStyle.Red;
}
private Border defaultPaneBorder = BorderFactory.createMatteBorder(1, 1, 1, 1, defaultBorderColor());
public Border defaultPaneBorder() {
return defaultPaneBorder;
}
private Border defaultPaneTopBorder = BorderFactory.createMatteBorder(2, 0, 0, 0, defaultBorderColor());
public Border defaultPaneTopBorder() {
return defaultPaneTopBorder;
}
private Border defaultPaneBottomBorder = BorderFactory.createMatteBorder(0, 0, 2, 0, defaultBorderColor());
public Border defaultPaneBottomBorder() {
return defaultPaneBottomBorder;
}
// Default text
public Color defaultTextColor() {
return InspectorStyle.Black;
}
public Color defaultErrorTextColor() {
return InspectorStyle.Red;
}
public Color defaultErrorTextBackgroundColor() {
return InspectorStyle.Yellow;
}
// Plain text labels
public Font textLabelFont() {
return defaultFont();
}
// Defaults for integers displayed in decimal
public Font decimalDataFont() {
return defaultFont();
}
// Defaults for integers displayed in hex
public Font hexDataFont() {
return defaultFont();
}
public Font sizeDataFont() {
return defaultFont();
}
// Special styles for interpreted machine word values
public Font defaultWordDataFont() {
return hexDataFont();
}
public Color wordNullDataColor() {
return null;
}
public Color wordValidObjectReferenceDataColor() {
return null;
}
public Color wordUncheckedReferenceDataColor() {
return null;
}
public Color wordForwardingReferenceDataColor() {
return null;
}
public Color wordInvalidObjectReferenceDataColor() {
return null;
}
public Color wordInvalidDataColor() {
return null;
}
public Color wordStackLocationDataColor() {
return null;
}
public Color wordCallEntryPointColor() {
return null;
}
public Color wordCallReturnPointColor() {
return null;
}
public Color wordUncheckedCallPointColor() {
return null;
}
public Font wordAlternateTextFont() {
return defaultFont();
}
public Color wordSelectedColor() {
return null;
}
public Font wordFlagsFont() {
return defaultFont();
}
// Display of primitive Java data
public Font primitiveDataFont() {
return defaultFont();
}
public Color primitiveDataColor() {
return null;
}
// Display of char values
public Font charDataFont() {
return defaultFont();
}
public int maxStringFromCharArrayDisplayLength() {
return 200;
}
// Names for Java entities
public Font javaNameFont() {
return defaultFont();
}
public Color javaUnresolvedNameColor() {
return null;
}
// Default display of any kind of code
private static final Icon codeViewCloseIcon = IconFactory.createCrossIcon(16, 16);
public Icon codeViewCloseIcon() {
return codeViewCloseIcon;
}
// Display of machine code
// Display of bytecodes
public Font bytecodeMnemonicFont() {
return bytecodeOperandFont();
}
public Font bytecodeOperandFont() {
return null;
}
public int maxBytecodeOperandDisplayLength() {
return 100;
}
public Color bytecodeMethodEntryColor() {
return null;
}
// Debugger interaction
private static final Dimension debugTagIconSize = new Dimension(16, 12);
public Color debugSelectedCodeBorderColor() {
return Color.black;
}
public Color debugDefaultTagColor() {
return InspectorStyle.Black;
}
private static final Border debugEnabledBreakpointTagBorder = BorderFactory.createLineBorder(Color.black, 2);
public Border debugEnabledMachineCodeBreakpointTagBorder() {
return debugEnabledBreakpointTagBorder;
}
private static final Border debugDisabledBreakpointTagBorder = BorderFactory.createLineBorder(Color.black, 1);
public Border debugDisabledMachineCodeBreakpointTagBorder() {
return debugDisabledBreakpointTagBorder;
}
public Border debugEnabledBytecodeBreakpointTagBorder() {
return debugEnabledMachineCodeBreakpointTagBorder();
}
public Border debugDisabledBytecodeBreakpointTagBorder() {
return debugDisabledMachineCodeBreakpointTagBorder();
}
public Border watchpointTagBorder() {
return debugEnabledBreakpointTagBorder;
}
public Color debugIPTextColor() {
return null;
}
public Color debugIPTagColor() {
return InspectorStyle.Black;
}
private static final Icon debugIPTagIcon = IconFactory.createRightArrow(debugTagIconSize);
public Icon debugIPTagIcon() {
return debugIPTagIcon;
}
public Color debugCallReturnTextColor() {
return null;
}
public Color debugCallReturnTagColor() {
return InspectorStyle.Black;
}
private static final Icon debugCallReturnTagIcon = IconFactory.createLeftArrow(debugTagIconSize);
public Icon debugCallReturnTagIcon() {
return debugCallReturnTagIcon;
}
private final Icon debugPauseButtonIcon = createImageIcon("/NB3Pause.gif", "Continue");
private final Icon debugContinueButtonIcon = createImageIcon("/NB3Continue.gif", "Continue");
private final Icon debugRunToCursorButtonIcon = createImageIcon("/NB3RunToCursor.gif", "Continue");
private final Icon debugStepInButtonIcon = createImageIcon("/NB3StepIn.gif", "Step In");
private final Icon debugStepOutButtonIcon = createImageIcon("/NB3StepOut.gif", "Step In");
private final Icon debugStepOverButtonIcon = createImageIcon("/NB3StepOver.gif", "Step In");
private final Icon debugToggleBreakpointButtonIcon = createImageIcon("/NB3ToggleBreakpoint.gif", "Step In");
public Icon debugPauseButtonIcon() {
return debugPauseButtonIcon;
}
public Icon debugContinueButtonIcon() {
return debugContinueButtonIcon;
}
public Icon debugRunToCursorButtonIcon() {
return debugRunToCursorButtonIcon;
}
public Icon debugStepInButtonIcon() {
return debugStepInButtonIcon;
}
public Icon debugStepOutButtonIcon() {
return debugStepOutButtonIcon;
}
public Icon debugStepOverButtonIcon() {
return debugStepOverButtonIcon;
}
public Icon debugToggleBreakpointbuttonIcon() {
return debugToggleBreakpointButtonIcon;
}
private final Icon generalAboutIcon = createImageIcon("/toolbarButtonGraphics/general/About16.gif", "About");
public Icon generalAboutIcon() {
return generalAboutIcon;
}
private final Icon generalCopyIcon = createImageIcon("/toolbarButtonGraphics/general/Copy16.gif", "Copy");
public Icon generalCopyIcon() {
return generalCopyIcon;
}
private final Icon generalCutIcon = createImageIcon("/toolbarButtonGraphics/general/Cut16.gif", "Cut");
public Icon generalCutIcon() {
return generalCutIcon;
}
private final Icon generalDeleteIcon = createImageIcon("/toolbarButtonGraphics/general/Delete16.gif", "Delete");
public Icon generalDeleteIcon() {
return generalDeleteIcon;
}
private final Icon generalEditIcon = createImageIcon("/toolbarButtonGraphics/general/Edit16.gif", "Edit");
public Icon generalEditIcon() {
return generalEditIcon;
}
private final Icon generalFindIcon = createImageIcon("/toolbarButtonGraphics/general/Find16.gif", "Find");
public Icon generalFindIcon() {
return generalFindIcon;
}
private final Icon generalFindAgainIcon = createImageIcon("/toolbarButtonGraphics/general/FindAgain16.gif", "FindAgain");
public Icon generalFindAgainIcon() {
return generalFindAgainIcon;
}
private final Icon generalHelpIcon = createImageIcon("/toolbarButtonGraphics/general/Help16.gif", "Help");
public Icon generalHelpIcon() {
return generalHelpIcon;
}
private final Icon generalInformationIcon = createImageIcon("/toolbarButtonGraphics/general/Information16.gif", "Information");
public Icon generalInformationIcon() {
return generalInformationIcon;
}
private final Icon generalPreferencesIcon = createImageIcon("/toolbarButtonGraphics/general/Preferences16.gif", "Preferences");
public Icon generalPreferencesIcon() {
return generalPreferencesIcon;
}
private final Icon generalRedoIcon = createImageIcon("/toolbarButtonGraphics/general/Redo16.gif", "Redo");
public Icon generalRedoIcon() {
return generalRedoIcon;
}
private final Icon generalRefreshIcon = createImageIcon("/toolbarButtonGraphics/general/Refresh16.gif", "Refresh");
public Icon generalRefreshIcon() {
return generalRefreshIcon;
}
private final Icon generalRemoveIcon = createImageIcon("/toolbarButtonGraphics/general/Remove16.gif", "Remove");
public Icon generalRemoveIcon() {
return generalRemoveIcon;
}
private final Icon generalReplaceIcon = createImageIcon("/toolbarButtonGraphics/general/Replace16.gif", "Replace");
public Icon generalReplaceIcon() {
return generalReplaceIcon;
}
private final Icon generalUndoIcon = createImageIcon("/toolbarButtonGraphics/general/Undo16.gif", "Undo");
public Icon generalUndoIcon() {
return generalUndoIcon;
}
private final Icon navigationUpIcon = createImageIcon("/toolbarButtonGraphics/navigation/Up16.gif", "Move up");
private final Icon navigationDownIcon = createImageIcon("/toolbarButtonGraphics/navigation/Down16.gif", "Move down");
private final Icon navigationForwardIcon = createImageIcon("/toolbarButtonGraphics/navigation/Forward16.gif", "Move forward");
private final Icon navigationBackIcon = createImageIcon("/toolbarButtonGraphics/navigation/Back16.gif", "Move back");
private final Icon navigationHomeIcon = createImageIcon("/toolbarButtonGraphics/navigation/Home16.gif", "Move home");
public Icon navigationUpIcon() {
return navigationUpIcon;
}
public Icon navigationDownIcon() {
return navigationDownIcon;
}
public Icon navigationForwardIcon() {
return navigationForwardIcon;
}
public Icon navigationBackIcon() {
return navigationBackIcon;
}
public Icon navigationHomeIcon() {
return navigationHomeIcon;
}
private final Icon mediaStepBackIcon = createImageIcon("/toolbarButtonGraphics/media/StepBack16.gif", "Step back");
private final Icon mediaStepForwardIcon = createImageIcon("/toolbarButtonGraphics/media/StepForward16.gif", "Step forward");
public Icon mediaStepBackIcon() {
return mediaStepBackIcon;
}
public Icon mediaStepForwardIcon() {
return mediaStepForwardIcon;
}
private final Icon debugActiveRowButtonIcon = IconFactory.createRightArrow(16, 16);
public Icon debugActiveRowButtonIcon() {
return debugActiveRowButtonIcon;
}
// Display of memory locations: object fields, array elements, thread locals, etc.
// The standard approach is to mimic the way code displays work.
public Color memorySelectedAddressBorderColor() {
return debugSelectedCodeBorderColor();
}
public Color memoryDefaultTagTextColor() {
return InspectorStyle.Black;
}
public Color memoryRegisterTagTextColor() {
//return debugCallReturnTextColor();
// the above would be more consistent,
// but for now opt for consistency with the memory word view
// the current colors for return value aren't too good anyway
return wordSelectedColor();
}
public Border memoryEnabledWatchpointTagBorder() {
return debugEnabledMachineCodeBreakpointTagBorder();
}
public Border memoryDisabledWatchpointTagBorder() {
return debugDisabledMachineCodeBreakpointTagBorder();
}
public Color memoryWatchpointTextColor() {
return debugIPTextColor();
}
public Color markedWhiteBackgroundColor() {
return Color.WHITE;
}
public Color markedGrayBackgroundColor() {
return CoolGray2;
}
public Color markedBlackBackgroundColor() {
return Color.BLACK;
}
public Color markInvalidBackgroundColor() {
return Color.RED;
}
// Search related
public Icon searchNextMatchButtonIcon() {
return navigationForwardIcon();
}
public Icon searchPreviousMatchButtonIcon() {
return navigationBackIcon();
}
public Color searchFailedBackground() {
return Color.red;
}
public Color searchMatchedBackground() {
return SunYellow3;
}
// Table-display related
private final Dimension zeroTableIntercellSpacing = new Dimension(0, 0);
public Dimension zeroTableIntercellSpacing() {
return zeroTableIntercellSpacing;
}
private final Dimension defaultTableIntercellSpacing = new Dimension(1, 1);
public Dimension defaultTableIntercellSpacing() {
return defaultTableIntercellSpacing;
}
private final int defaultTableRowHeight = 20;
public int defaultTableRowHeight() {
return defaultTableRowHeight;
}
private final boolean defaultTableShowHorizontalLines = true;
public boolean defaultTableShowHorizontalLines() {
return defaultTableShowHorizontalLines;
}
private final boolean defaultTableShowVertictalLines = true;
public boolean defaultTableShowVerticalLines() {
return defaultTableShowVertictalLines;
}
public Dimension memoryTableIntercellSpacing() {
return defaultTableIntercellSpacing();
}
public int memoryTableRowHeight() {
return defaultTableRowHeight();
}
public boolean memoryTableShowHorizontalLines() {
return defaultTableShowHorizontalLines();
}
public boolean memoryTableShowVerticalLines() {
return defaultTableShowVerticalLines();
}
public int memoryTableMaxDisplayRows() {
return 20;
}
public Dimension codeTableIntercellSpacing() {
return defaultTableIntercellSpacing();
}
public int codeTableRowHeight() {
return defaultTableRowHeight();
}
public boolean codeTableShowHorizontalLines() {
return defaultTableShowHorizontalLines();
}
public boolean codeTableShowVerticalLines() {
return defaultTableShowVerticalLines();
}
private static final double DARKEN1_FACTOR = 0.95;
public Color darken1(Color color) {
return new Color(Math.max((int) (color.getRed() * DARKEN1_FACTOR), 0),
Math.max((int) (color.getGreen() * DARKEN1_FACTOR), 0),
Math.max((int) (color.getBlue() * DARKEN1_FACTOR), 0));
}
private static final double DARKEN2_FACTOR = 0.8;
public Color darken2(Color color) {
return new Color(Math.max((int) (color.getRed() * DARKEN2_FACTOR), 0),
Math.max((int) (color.getGreen() * DARKEN2_FACTOR), 0),
Math.max((int) (color.getBlue() * DARKEN2_FACTOR), 0));
}
private static final double BRIGHTEN1_FACTOR = 1.05;
public Color brighten1(Color color) {
return new Color(Math.min((int) (color.getRed() * BRIGHTEN1_FACTOR), 255),
Math.min((int) (color.getGreen() * BRIGHTEN1_FACTOR), 255),
Math.min((int) (color.getBlue() * BRIGHTEN1_FACTOR), 255));
}
/** Returns an ImageIcon, or null if the path was invalid. */
protected ImageIcon createImageIcon(String path, String description) {
final java.net.URL imgURL = getClass().getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL, description);
}
InspectorWarning.message(null, "Couldn't find file: " + path);
return null;
}
}