/*
* Copyright (c) 2007, 2011, 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* 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.tools.visualvm.profiling.presets;
import com.sun.tools.visualvm.core.ui.components.Spacer;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.ListCellRenderer;
import org.netbeans.lib.profiler.common.ProfilingSettings;
import org.openide.awt.Mnemonics;
import org.openide.util.NbBundle;
/**
*
* @author Jiri Sedlacek
*/
public abstract class SamplerMemoryPanel extends JPanel {
private JLabel refreshRateLabel;
private JLabel refreshUnitsLabel;
private JComboBox refreshCombo;
private boolean internalChange;
public SamplerMemoryPanel() {
this(false);
}
SamplerMemoryPanel(boolean mnemonics) {
initComponents(mnemonics);
}
public ProfilingSettings getSettings() {
return null;
}
public int getSamplingRate() {
return (Integer)refreshCombo.getSelectedItem();
}
public int getRefreshRate() {
return getSamplingRate();
}
public boolean settingsValid() { return true; }
public void loadFromPreset(ProfilerPreset preset) {
if (preset == null) return;
internalChange = true;
refreshCombo.setSelectedItem(preset.getSamplingRefreshRateS());
internalChange = false;
}
public void saveToPreset(ProfilerPreset preset) {
if (preset == null) return;
preset.setSamplingRefreshRateS((Integer)refreshCombo.getSelectedItem());
}
public abstract void settingsChanged();
private void syncUI() {
if (internalChange) return;
settingsChanged();
}
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
for (Component c : getComponents()) c.setEnabled(enabled);
}
private void initComponents(boolean mnemonics) {
setOpaque(false);
setLayout(new GridBagLayout());
GridBagConstraints constraints;
refreshRateLabel = new JLabel();
setText(refreshRateLabel, NbBundle.getMessage(SamplerMemoryPanel.class,
"LBL_Sampling_refresh"), mnemonics);
refreshRateLabel.setToolTipText(NbBundle.getMessage(SamplerMemoryPanel.class,
"TOOLTIP_Sampling_refresh")); // NOI18N
constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.anchor = GridBagConstraints.WEST;
constraints.fill = GridBagConstraints.NONE;
constraints.insets = new Insets(7, 10, 10, 5);
add(refreshRateLabel, constraints);
Integer[] refreshRates = new Integer[] { 100, 200, 500, 1000, 2000, 5000, 10000 };
refreshCombo = new JComboBox(refreshRates) {
public Dimension getMinimumSize() { return getPreferredSize(); }
public Dimension getMaximumSize() { return getPreferredSize(); }
};
refreshRateLabel.setLabelFor(refreshCombo);
refreshCombo.setToolTipText(NbBundle.getMessage(SamplerMemoryPanel.class,
"TOOLTIP_Sampling_refresh")); // NOI18N
refreshCombo.setEditable(false);
refreshCombo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { syncUI(); }
});
refreshCombo.setRenderer(new ComboRenderer(refreshCombo));
constraints = new GridBagConstraints();
constraints.gridx = 1;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.anchor = GridBagConstraints.WEST;
constraints.fill = GridBagConstraints.NONE;
constraints.insets = new Insets(7, 0, 10, 5);
add(refreshCombo, constraints);
refreshUnitsLabel = new JLabel(NbBundle.getMessage(SamplerMemoryPanel.class,
"LBL_units_ms")); // NOI18N
refreshUnitsLabel.setToolTipText(NbBundle.getMessage(SamplerMemoryPanel.class,
"TOOLTIP_Sampling_refresh")); // NOI18N
constraints = new GridBagConstraints();
constraints.gridx = 2;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.anchor = GridBagConstraints.WEST;
constraints.fill = GridBagConstraints.NONE;
constraints.insets = new Insets(7, 0, 10, 5);
add(refreshUnitsLabel, constraints);
constraints = new GridBagConstraints();
constraints.gridx = 3;
constraints.gridy = 0;
constraints.weightx = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.anchor = GridBagConstraints.WEST;
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.insets = new Insets(7, 0, 10, 0);
add(Spacer.create(), constraints);
constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 1;
constraints.weighty = 1;
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.anchor = GridBagConstraints.NORTHWEST;
constraints.fill = GridBagConstraints.BOTH;
constraints.insets = new Insets(0, 0, 0, 0);
add(Spacer.create(), constraints);
}
private static void setText(JLabel l, String text, boolean mnemonics) {
if (mnemonics) Mnemonics.setLocalizedText(l, text);
else l.setText(text.replace("&", "")); // NOI18N
}
private static class ComboRenderer implements ListCellRenderer {
private ListCellRenderer renderer;
ComboRenderer(JComboBox combo) {
renderer = combo.getRenderer();
if (renderer instanceof JLabel)
((JLabel)renderer).setHorizontalAlignment(JLabel.TRAILING);
}
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
return renderer.getListCellRendererComponent(list, NumberFormat.
getInstance().format(value), index, isSelected, cellHasFocus);
}
}
}