/* * RapidMiner * * Copyright (C) 2001-2008 by Rapid-I and the contributors * * Complete list of developers available at our web site: * * http://rapid-i.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.gui.look.ui; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import javax.swing.JComponent; import javax.swing.JSlider; import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicSliderUI; import com.rapidminer.gui.look.RapidLookTools; import com.rapidminer.gui.tools.SwingTools; /** * The UI for sliders. * * @author Ingo Mierswa * @version $Id: SliderUI.java,v 1.3 2008/05/09 19:22:42 ingomierswa Exp $ */ public class SliderUI extends BasicSliderUI { private class ThumbListener extends MouseAdapter { @Override public void mousePressed(MouseEvent e) { if (getThumbBounds().contains(e.getX(), e.getY())) { SliderUI.this.thumbIsPressed = true; getSlider().repaint(); } } @Override public void mouseReleased(MouseEvent e) { SliderUI.this.thumbIsPressed = false; getSlider().repaint(); } } private boolean thumbIsPressed = false; private MouseListener thumbPressedListener; public static ComponentUI createUI(JComponent jcomponent) { return new SliderUI((JSlider) jcomponent); } public SliderUI(JSlider jSlider) { super(jSlider); } @Override public void installUI(JComponent c) { super.installUI(c); } @Override public void paintThumb(Graphics g) { g.translate(this.thumbRect.x, this.thumbRect.y); Image sliderImage = RapidLookTools.getColors().getSliderImage().getImage(); if (sliderImage == null) { sliderImage = new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB); Graphics2D gr = ((BufferedImage)sliderImage).createGraphics(); gr.setColor(SwingTools.LIGHT_BLUE); gr.fillOval(0, 0, 10, 10); gr.setColor(Color.BLACK); gr.drawOval(0, 0, 10, 10); } if (this.slider.getOrientation() == SwingConstants.HORIZONTAL) { //horizonal if (this.slider.isEnabled()) { if (this.thumbIsPressed) { g.drawImage(sliderImage, 0, 0, null); } else { g.drawImage(sliderImage, 0, 0, null); } } else { g.drawImage(sliderImage, 0, 0, null); } } else { //vertical if (this.slider.isEnabled()) { if (this.thumbIsPressed) { g.drawImage(sliderImage, 0, 0, null); } else { g.drawImage(sliderImage, 0, 0, null); } } else { g.drawImage(sliderImage, 0, 0, null); } } g.translate(-this.thumbRect.x, -this.thumbRect.y); } @Override public void paintTrack(Graphics g) { if (this.slider.getOrientation() == SwingConstants.HORIZONTAL) { int trackTop = (int) this.trackRect.getY() + 2; int w = this.slider.getWidth(); g.setColor(new ColorUIResource(170, 170, 170)); g.drawRect(2, trackTop, w - 6, 6); if (this.slider.isEnabled()) { g.setColor(new ColorUIResource(220, 220, 220)); g.drawLine(3, trackTop + 1, w - 5, trackTop + 1); g.setColor(new ColorUIResource(230, 230, 230)); g.drawLine(3, trackTop + 2, w - 5, trackTop + 2); g.setColor(new ColorUIResource(240, 240, 240)); g.drawLine(3, trackTop + 3, w - 5, trackTop + 3); g.setColor(new ColorUIResource(245, 245, 245)); g.drawLine(3, trackTop + 4, w - 5, trackTop + 4); g.setColor(new ColorUIResource(250, 250, 250)); g.drawLine(3, trackTop + 5, w - 5, trackTop + 5); } else { g.setColor(new ColorUIResource(240, 240, 240)); g.drawLine(3, trackTop + 1, w - 5, trackTop + 1); g.drawLine(3, trackTop + 2, w - 5, trackTop + 2); g.drawLine(3, trackTop + 3, w - 5, trackTop + 3); g.drawLine(3, trackTop + 4, w - 5, trackTop + 4); g.drawLine(3, trackTop + 5, w - 5, trackTop + 5); } g.setColor(new ColorUIResource(210, 210, 210)); g.drawLine(2, trackTop, 3, trackTop); g.setColor(new ColorUIResource(210, 210, 210)); g.drawLine(2, trackTop + 6, 3, trackTop + 6); g.setColor(new ColorUIResource(190, 190, 190)); g.drawLine(2, trackTop + 1, 2, trackTop + 1); g.setColor(new ColorUIResource(190, 190, 190)); g.drawLine(2, trackTop + 5, 2, trackTop + 5); g.setColor(new ColorUIResource(210, 210, 210)); g.drawLine(w - 4, trackTop, w - 5, trackTop); g.setColor(new ColorUIResource(210, 210, 210)); g.drawLine(w - 4, trackTop + 6, w - 5, trackTop + 6); g.setColor(new ColorUIResource(190, 190, 190)); g.drawLine(w - 4, trackTop + 1, w - 4, trackTop + 1); g.setColor(new ColorUIResource(190, 190, 190)); g.drawLine(w - 4, trackTop + 5, w - 4, trackTop + 5); } else { int trackLeft = (int) this.trackRect.getX() + 2; int h = this.slider.getHeight(); g.setColor(new ColorUIResource(170, 170, 170)); g.drawRect(trackLeft, 2, 6, h - 6); if (this.slider.isEnabled()) { g.setColor(new ColorUIResource(220, 220, 220)); g.drawLine(trackLeft + 1, 3, trackLeft + 1, h - 5); g.setColor(new ColorUIResource(230, 230, 230)); g.drawLine(trackLeft + 2, 3, trackLeft + 2, h - 5); g.setColor(new ColorUIResource(240, 240, 240)); g.drawLine(trackLeft + 3, 3, trackLeft + 3, h - 5); g.setColor(new ColorUIResource(245, 245, 245)); g.drawLine(trackLeft + 4, 3, trackLeft + 4, h - 5); g.setColor(new ColorUIResource(250, 250, 250)); g.drawLine(trackLeft + 5, 3, trackLeft + 5, h - 5); } else { g.setColor(new ColorUIResource(240, 240, 240)); g.drawLine(trackLeft + 1, 3, trackLeft + 1, h - 5); g.drawLine(trackLeft + 2, 3, trackLeft + 2, h - 5); g.drawLine(trackLeft + 3, 3, trackLeft + 3, h - 5); g.drawLine(trackLeft + 4, 3, trackLeft + 4, h - 5); g.drawLine(trackLeft + 5, 3, trackLeft + 5, h - 5); } g.setColor(new ColorUIResource(210, 210, 210)); g.drawLine(trackLeft, 2, trackLeft, 3); g.setColor(new ColorUIResource(210, 210, 210)); g.drawLine(trackLeft + 6, 2, trackLeft + 6, 3); g.setColor(new ColorUIResource(190, 190, 190)); g.drawLine(trackLeft + 1, 2, trackLeft + 1, 2); g.setColor(new ColorUIResource(190, 190, 190)); g.drawLine(trackLeft + 5, 2, trackLeft + 5, 2); g.setColor(new ColorUIResource(210, 210, 210)); g.drawLine(trackLeft, h - 4, trackLeft, h - 5); g.setColor(new ColorUIResource(210, 210, 210)); g.drawLine(trackLeft + 6, h - 4, trackLeft + 6, h - 5); g.setColor(new ColorUIResource(190, 190, 190)); g.drawLine(trackLeft + 1, h - 4, trackLeft + 1, h - 4); g.setColor(new ColorUIResource(190, 190, 190)); g.drawLine(trackLeft + 5, h - 4, trackLeft + 5, h - 4); } } @Override public void paintFocus(Graphics g) {} @Override public void paintLabels(Graphics g) { super.paintLabels(g); } @Override protected void calculateThumbSize() { Dimension size = new Dimension(14, 14); this.thumbRect.setSize(size.width, size.height); } private Rectangle getThumbBounds() { return this.thumbRect; } private JSlider getSlider() { return this.slider; } protected MouseListener createThumbPressedListener() { return new ThumbListener(); } @Override protected void installListeners(JSlider slider) { super.installListeners(slider); if ((this.thumbPressedListener = createThumbPressedListener()) != null) { slider.addMouseListener(this.thumbPressedListener); } } @Override protected void uninstallListeners(JSlider slider) { if (this.thumbPressedListener != null) { slider.removeMouseListener(this.thumbPressedListener); this.thumbPressedListener = null; } super.uninstallListeners(slider); } @Override protected void paintMinorTickForHorizSlider(Graphics g, Rectangle tickBounds, int x) { if (this.slider.isEnabled()) { g.setColor((Color) UIManager.get("Slider.minorColor")); } else { g.setColor((Color) UIManager.get("Slider.minorDisabledColor")); } g.drawLine(x, 0, x, tickBounds.height / 2 - 1); } @Override protected void paintMajorTickForHorizSlider(Graphics g, Rectangle tickBounds, int x) { if (this.slider.isEnabled()) { g.setColor((Color) UIManager.get("Slider.majorColor")); } else { g.setColor((Color) UIManager.get("Slider.majorDisabledColor")); } g.drawLine(x, 0, x, tickBounds.height - 2); } @Override protected void paintMinorTickForVertSlider(Graphics g, Rectangle tickBounds, int y) { if (this.slider.isEnabled()) { g.setColor((Color) UIManager.get("Slider.minorColor")); } else { g.setColor((Color) UIManager.get("Slider.minorDisabledColor")); } g.drawLine(0, y, tickBounds.width / 2 - 1, y); } @Override protected void paintMajorTickForVertSlider(Graphics g, Rectangle tickBounds, int y) { if (this.slider.isEnabled()) { g.setColor((Color) UIManager.get("Slider.majorColor")); } else { g.setColor((Color) UIManager.get("Slider.majorDisabledColor")); } g.drawLine(0, y, tickBounds.width - 2, y); } }