/* * @(#)CutView * * Copyright (c) 2005-2006 by dvb.matt, All Rights Reserved. * * This file is part of ProjectX, a free Java based demux utility. * By the authors, ProjectX is intended for educational purposes only, * as a non-commercial test project. * * * This program 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 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ package net.sourceforge.dvb.projectx.gui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.image.MemoryImageSource; import java.awt.Font; import java.util.Arrays; import javax.swing.JPanel; import javax.swing.JSlider; public class ScanView extends JPanel { private final int Top = 20; private final int Bottom = 184; private int[] image_data; private int width = 160; private int height = 90; private boolean matchingPoint = false; private boolean cut_top = true; private boolean cut_bottom = false; private boolean cut_match = false; private String string_bottom = "Next:"; private String string_top = "Prev:"; private String string_matchingpoint = ""; private String[] string_in_out = { " -IN- ", " -OUT- " }; private Image image_top; private Image image_bottom; private MemoryImageSource source_top; private MemoryImageSource source_bottom; private final Color BackgroundColor; private final Color RedColor; private final Font font; /** * */ public ScanView() { image_data = new int[width * height]; source_top = new MemoryImageSource(width, height, image_data, 0, width); source_top.setAnimated(true); image_top = createImage(source_top); source_bottom = new MemoryImageSource(width, height, image_data, 0, width); source_bottom.setAnimated(true); image_bottom = createImage(source_bottom); BackgroundColor = new Color(0, 35, 110); RedColor = new Color(255, 100, 100); font = new Font("Tahoma", Font.PLAIN, 14); setLayout(new BorderLayout()); add(buildScanViewPanel(), BorderLayout.SOUTH); setBackground(Color.black); setVisible(true); } /** * */ protected JPanel buildScanViewPanel() { JPanel panel = new JPanel(new BorderLayout()); JSlider scanSlider = new JSlider(); scanSlider.setMaximum(100); scanSlider.setMajorTickSpacing(10); scanSlider.setMinorTickSpacing(1); scanSlider.setPaintTicks(true); scanSlider.setValue(50); panel.add(scanSlider, BorderLayout.SOUTH); return panel; } /** * */ public int getTop() { return Top; } /** * */ public int getBottom() { return Bottom; } /** * */ public void clearViews() { matchingPoint = false; clearView(Top); clearView(Bottom); } /** * */ public void clearView(int position) { Arrays.fill(image_data, 0xFF505050); updateView(position); } /** * */ public void updateView(int position) { updateView(position, null, -1); } /** * */ public void updateView(int position, Object[] object, int index) { if (position < 100) { source_top.newPixels(); string_top = "Prev: " + (object != null ? "#" + index + " @ " + object[index] + string_in_out[index & 1] : "= Collection Begin"); cut_top = object != null ? (index & 1) == 0 : (!matchingPoint ? !cut_bottom : false); } else { source_bottom.newPixels(); string_bottom = "Next: " + (object != null ? "#" + index + " @ " + object[index] + string_in_out[index & 1] : "= Collection End"); cut_bottom = object != null ? (index & 1) == 0 : false; } repaint(); } /** * */ public void setImage(int[] data, Object[] object, int index, int position) { if (data == null) { clearView(position); return; } System.arraycopy(data, 0, image_data, 0 , data.length); updateView(position, object, index); } /** * */ public void setMatchingPoint(boolean b, Object[] object, int index) { matchingPoint = b; string_matchingpoint = matchingPoint ? "This: #" + index + " @ " + object[index] + string_in_out[index & 1] : ""; cut_match = (index & 1) == 0; } /** * */ public void paint2(Graphics g) { g.setColor(BackgroundColor); g.fillRect(0, 0, 900, 90); /** g.setFont(font); g.setColor(cut_top ? Color.green : RedColor); g.drawRect(0, Top - 1, width - 1, height + 1); g.drawString(string_top, 8, Top - 4); g.setColor(cut_bottom ? Color.green : RedColor); g.drawRect(Bottom, Top - 1, width - 1, height + 1); g.drawString(string_bottom, Bottom + 8, Top - 4); if (matchingPoint) { g.setColor(cut_match ? Color.green : RedColor); g.drawString(string_matchingpoint, 8, Bottom - 21); } g.drawImage(image_top, 0, Top, this); g.drawImage(image_bottom, Bottom, Top, this); **/ } }