# HG changeset patch # User Mario Torre # Date 1418294708 -3600 # Node ID 4552784dedb6e1fa4d1d3226c7706869562e4cd4 # Parent 421d652d113d7a59e7e5789550b1dbb0dff747b2 Add legend back to timelines review-thread: http://icedtea.classpath.org/pipermail/thermostat/2014-December/012167.html reviewed-by: omajid diff -r 421d652d113d -r 4552784dedb6 thread/client-common/src/main/java/com/redhat/thermostat/thread/client/common/chart/ChartColors.java --- a/thread/client-common/src/main/java/com/redhat/thermostat/thread/client/common/chart/ChartColors.java Thu Dec 11 11:45:07 2014 +0100 +++ b/thread/client-common/src/main/java/com/redhat/thermostat/thread/client/common/chart/ChartColors.java Thu Dec 11 11:45:08 2014 +0100 @@ -55,15 +55,15 @@ switch (state) { case TIMED_WAITING: - result = Palette.PALE_RED; + result = Palette.GRANITA_ORANGE; break; case NEW: - result = Palette.POMP_AND_POWER_VIOLET; + result = Palette.GREEN; break; case RUNNABLE: - result = Palette.PRUSSIAN_BLUE; + result = Palette.ADWAITA_BLU; break; case TERMINATED: @@ -75,11 +75,11 @@ break; case WAITING: - result = Palette.GRANITA_ORANGE; + result = Palette.PALE_RED; break; default: - result = Palette.BLACK; + result = Palette.LIGHT_GRAY; break; } return result; diff -r 421d652d113d -r 4552784dedb6 thread/client-common/src/main/java/com/redhat/thermostat/thread/client/common/model/timeline/TimelineFactory.java --- a/thread/client-common/src/main/java/com/redhat/thermostat/thread/client/common/model/timeline/TimelineFactory.java Thu Dec 11 11:45:07 2014 +0100 +++ b/thread/client-common/src/main/java/com/redhat/thermostat/thread/client/common/model/timeline/TimelineFactory.java Thu Dec 11 11:45:08 2014 +0100 @@ -37,6 +37,7 @@ package com.redhat.thermostat.thread.client.common.model.timeline; import com.redhat.thermostat.client.ui.Palette; +import com.redhat.thermostat.thread.client.common.chart.ChartColors; import com.redhat.thermostat.thread.model.ThreadState; /** @@ -46,34 +47,8 @@ public static TimelineProbe createTimelineProbe(ThreadState state) { - Palette color = null; - Thread.State threadState = Thread.State.valueOf(state.getState()); - switch (threadState) { - case NEW: - color = Palette.GREEN; - break; - - case RUNNABLE: - color = Palette.ADWAITA_BLU; - break; - - case BLOCKED: - color = Palette.VIOLET; - break; - - case WAITING: - color = Palette.GRANITA_ORANGE; - break; - - case TIMED_WAITING: - color = Palette.ADWAITA_BLU; - break; - - case TERMINATED: - color = Palette.LIGHT_GRAY; - break; - } + Palette color = ChartColors.getPaletteColor(threadState); return new TimelineProbe(color, state.getState(), state.getTimeStamp()); } } diff -r 421d652d113d -r 4552784dedb6 thread/client-swing/src/main/java/com/redhat/thermostat/thread/client/swing/impl/ThreadTimelineLegendPanel.java --- a/thread/client-swing/src/main/java/com/redhat/thermostat/thread/client/swing/impl/ThreadTimelineLegendPanel.java Thu Dec 11 11:45:07 2014 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -/* - * Copyright 2012-2014 Red Hat, Inc. - * - * This file is part of Thermostat. - * - * Thermostat is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published - * by the Free Software Foundation; either version 2, or (at your - * option) any later version. - * - * Thermostat 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 for more details. - * - * You should have received a copy of the GNU General Public License - * along with Thermostat; see the file COPYING. If not see - * . - * - * Linking this code with other modules is making a combined work - * based on this code. Thus, the terms and conditions of the GNU - * General Public License cover the whole combination. - * - * As a special exception, the copyright holders of this code give - * you permission to link this code with independent modules to - * produce an executable, regardless of the license terms of these - * independent modules, and to copy and distribute the resulting - * executable under terms of your choice, provided that you also - * meet, for each linked independent module, the terms and conditions - * of the license of that module. An independent module is a module - * which is not derived from or based on this code. If you modify - * this code, you may extend this exception to your version of the - * library, but you are not obligated to do so. If you do not wish - * to do so, delete this exception statement from your version. - */ - -package com.redhat.thermostat.thread.client.swing.impl; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.Graphics; -import java.awt.Graphics2D; - -import javax.swing.Icon; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; - -import com.redhat.thermostat.client.swing.GraphicsUtils; -import com.redhat.thermostat.thread.client.common.chart.ChartColors; - -@SuppressWarnings("serial") -public class ThreadTimelineLegendPanel extends JPanel { - - public ThreadTimelineLegendPanel() { - setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10)); - setPreferredSize(new Dimension(getWidth(), 40)); - - for (Thread.State state : Thread.State.values()) { - - Color color = ChartColors.getColor(state); - // no chart is black, it's just the default colour - if (!color.equals(Color.BLACK)) { - JLabel label = new JLabel(new ColorIcon(color), SwingConstants.LEFT); - label.setText(state.toString()); - add(label); - } - } - } - - private class ColorIcon implements Icon { - - private Color color; - private ColorIcon(Color color) { - this.color = color; - } - - @Override - public int getIconHeight() { - return 16; - } - - @Override - public int getIconWidth() { - return 16; - } - - @Override - public void paintIcon(Component c, Graphics g, int x, int y) { - Graphics2D graphics = GraphicsUtils.getInstance().createAAGraphics(g); - graphics.setColor(color); - graphics.fillRect(x, y, getIconWidth(), getIconHeight()); - graphics.dispose(); - } - } - - public static void main(String[] args) { - SwingUtilities.invokeLater(new Runnable() { - - @Override - public void run() { - JFrame frame = new JFrame(); - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - - ThreadTimelineLegendPanel panel = new ThreadTimelineLegendPanel(); - - frame.add(panel); - frame.setSize(800, 150); - - frame.setVisible(true); - } - }); - } -} - diff -r 421d652d113d -r 4552784dedb6 thread/client-swing/src/main/java/com/redhat/thermostat/thread/client/swing/impl/timeline/TimelineViewComponent.java --- a/thread/client-swing/src/main/java/com/redhat/thermostat/thread/client/swing/impl/timeline/TimelineViewComponent.java Thu Dec 11 11:45:07 2014 +0100 +++ b/thread/client-swing/src/main/java/com/redhat/thermostat/thread/client/swing/impl/timeline/TimelineViewComponent.java Thu Dec 11 11:45:08 2014 +0100 @@ -41,6 +41,7 @@ import com.redhat.thermostat.client.swing.components.ThermostatScrollPane; import com.redhat.thermostat.common.model.Range; import com.redhat.thermostat.thread.client.swing.experimental.components.ContentPane; +import com.redhat.thermostat.thread.client.swing.impl.timeline.model.LegendPanel; import com.redhat.thermostat.thread.client.swing.impl.timeline.model.RangeChangeEvent; import com.redhat.thermostat.thread.client.swing.impl.timeline.model.RangeChangeListener; import com.redhat.thermostat.thread.client.swing.impl.timeline.model.RatioChangeEvent; @@ -68,6 +69,8 @@ public void initComponents() { + ContentPane contentPane = new ContentPane(); + this.model = new TimelineModel(); viewport = new TimelineViewport(); @@ -80,19 +83,24 @@ header.initComponents(); scrollPane.setColumnHeaderView(header); - add(scrollPane, BorderLayout.CENTER); + contentPane.add(scrollPane, BorderLayout.CENTER); scrollBar = new ThermostatScrollBar(ThermostatScrollBar.HORIZONTAL); model.setScrollBarModel(scrollBar.getModel()); scrollBar.addAdjustmentListener(new TimelineAdjustmentListener(model)); - add(scrollBar, BorderLayout.SOUTH); + contentPane.add(scrollBar, BorderLayout.SOUTH); scrollBar.setEnabled(false); scrollBar.setVisible(false); header.setControlsEnabled(false); + add(contentPane, BorderLayout.CENTER); + + LegendPanel legend = new LegendPanel(uiDefaults); + add(legend, BorderLayout.SOUTH); + model.addRatioChangeListener(new RatioChangeListener() { @Override public void ratioChanged(RatioChangeEvent event) { diff -r 421d652d113d -r 4552784dedb6 thread/client-swing/src/main/java/com/redhat/thermostat/thread/client/swing/impl/timeline/model/LegendPanel.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/thread/client-swing/src/main/java/com/redhat/thermostat/thread/client/swing/impl/timeline/model/LegendPanel.java Thu Dec 11 11:45:08 2014 +0100 @@ -0,0 +1,101 @@ +/* + * Copyright 2012-2014 Red Hat, Inc. + * + * This file is part of Thermostat. + * + * Thermostat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation; either version 2, or (at your + * option) any later version. + * + * Thermostat 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 for more details. + * + * You should have received a copy of the GNU General Public License + * along with Thermostat; see the file COPYING. If not see + * . + * + * Linking this code with other modules is making a combined work + * based on this code. Thus, the terms and conditions of the GNU + * General Public License cover the whole combination. + * + * As a special exception, the copyright holders of this code give + * you permission to link this code with independent modules to + * produce an executable, regardless of the license terms of these + * independent modules, and to copy and distribute the resulting + * executable under terms of your choice, provided that you also + * meet, for each linked independent module, the terms and conditions + * of the license of that module. An independent module is a module + * which is not derived from or based on this code. If you modify + * this code, you may extend this exception to your version of the + * library, but you are not obligated to do so. If you do not wish + * to do so, delete this exception statement from your version. + */ + +package com.redhat.thermostat.thread.client.swing.impl.timeline.model; + +import com.redhat.thermostat.client.swing.GraphicsUtils; +import com.redhat.thermostat.client.swing.UIDefaults; +import com.redhat.thermostat.thread.client.common.chart.ChartColors; +import com.redhat.thermostat.thread.client.swing.experimental.components.DataPane; +import com.redhat.thermostat.thread.client.swing.experimental.components.Separator; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Graphics; +import java.awt.Graphics2D; +import javax.swing.Icon; +import javax.swing.JLabel; +import javax.swing.SwingConstants; + +/** + * + */ +public class LegendPanel extends DataPane { + + public LegendPanel(UIDefaults defaults) { + setBorder(new Separator(defaults, Separator.Side.TOP.TOP, Separator.Type.SOLID)); + setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 6)); + setPreferredSize(new Dimension(getWidth(), 30)); + + for (Thread.State state : Thread.State.values()) { + + Color color = ChartColors.getColor(state); + // no chart is black, it's just the default colour + if (!color.equals(Color.BLACK)) { + JLabel label = new JLabel(new ColorIcon(color), SwingConstants.LEFT); + label.setText(state.toString()); + add(label); + } + } + } + + private class ColorIcon implements Icon { + + private Color color; + private ColorIcon(Color color) { + this.color = color; + } + + @Override + public int getIconHeight() { + return 12; + } + + @Override + public int getIconWidth() { + return 12; + } + + @Override + public void paintIcon(Component c, Graphics g, int x, int y) { + Graphics2D graphics = GraphicsUtils.getInstance().createAAGraphics(g); + graphics.setColor(color); + graphics.fillRect(x, y, getIconWidth(), getIconHeight()); + graphics.dispose(); + } + } +}