/* * Created on Jan 19, 2006 * * Copyright (c) 2006 P.J.Leonard * * http://www.frinika.com * * This file is part of Frinika. * * Frinika 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. * Frinika 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 Frinika; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package com.frinika.sequencer.gui; import java.awt.Cursor; import java.awt.FlowLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Vector; import javax.sound.midi.Sequence; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JPanel; import javax.swing.JToggleButton; import javax.swing.JToolBar; import com.frinika.gui.ToolbarSeperator; import com.frinika.project.ProjectContainer; import static com.frinika.gui.util.ButtonFactory.makePressButton; import static com.frinika.gui.util.ButtonFactory.makeToggleButton; import static com.frinika.localization.CurrentLocale.getMessage; public class ItemRollToolBar extends JToolBar implements ActionListener { private static final long serialVersionUID = 1L; Insets insets = new Insets(0, 0, 0, 0); Cursor writeCursor; JToggleButton zoomBut = null; // need to rememebr the zoom button to // deselect after zooming JToggleButton follow; JToggleButton quantize; JPanel zoom; Vector<ItemPanel> clients; ProjectContainer project; private JButton quantizeSet; JPanel tools; ButtonGroup toolGroup; public ItemRollToolBar(Vector<ItemPanel> cli, ProjectContainer project) { this.setMargin(new Insets(0, 0, 0, 0)); this.project = project; FlowLayout layout = new FlowLayout(FlowLayout.CENTER, 0, 0); this.clients = cli; for (ItemPanel client : clients) client.setToolBar(this); tools = new JPanel(layout); tools.setBorder(BorderFactory.createEmptyBorder(4,4,4,4)); tools.setOpaque(false); toolGroup = new ButtonGroup(); JToggleButton but = makeToggleButton("select", "select", getMessage("seqeuncer.toolbar.select_tip"), this, toolGroup, tools); but.setMargin(insets); // Toolkit.getDefaultToolkit().createCustomCursor( // icon.getImage(), new Point(2,icon.getIconHeight()-2), "select"); // selectTool = makeToggleButton("pencil", "write",getMessage("seqeuncer.toolbar.write_tip"), this, toolGroup, tools) .setMargin(insets); makeToggleButton("eraser", "erase", getMessage("seqeuncer.toolbar.erase_tip"), this, toolGroup, tools) .setMargin(insets); makeToggleButton("hand", "dragview", getMessage("seqeuncer.toolbar.dragclick_tip"), this, toolGroup, tools).setMargin(insets); add(tools); add(new ToolbarSeperator()); JPanel settings = new JPanel(layout); //settings.setBorder(BorderFactory.createEtchedBorder()); settings.setBorder(BorderFactory.createEmptyBorder(4,4,4,4)); settings.setOpaque(false); follow = makeFollowSongButton(this,settings); follow.setSelected(clients.firstElement().isFollowSong()); follow.setMargin(insets); quantize = makeToggleButton("quantize", "snaptoON", getMessage("sequencer.toolbar.snapto_toggle_tip"), this, null, settings); quantize.setMargin(insets); quantize.setSelected(clients.firstElement().isSnapQuantized()); quantizeSet = makeSnapToButton(clients,settings,project.getSequence()); quantizeSet.setMargin(insets); // this assumes action listneres are notify in the order they are added add(settings); add(new ToolbarSeperator()); zoom = new JPanel(layout); // zoom.setMargin(insets); //zoom.setBorder(BorderFactory.createEtchedBorder()); zoom.setBorder(BorderFactory.createEmptyBorder(4,4,4,4)); zoom.setOpaque(false); zoomBut=makeToggleButton("viewmagfit", "magrect", getMessage("sequencer.toolbar.zoomtorect_tip"), this, null, zoom); zoomBut.setMargin(insets); makePressButton("viewmag+", "zoomin", getMessage("sequencer.toolbar.zoomin_tip"), this, zoom).setMargin( insets); makePressButton("viewmag-", "zoomout", getMessage("sequencer.toolbar.zoomout_tip"), this, zoom) .setMargin(insets); // makePressButton("extend", "extend", "Extend project", this, zoom) // .setMargin(insets); add(zoom); add(new ToolbarSeperator()); // JPanel trans = new TransportPanel(pianoRoll.sequencer); // trans.setBorder(BorderFactory.createEtchedBorder()); // add(trans); but.setSelected(true); for (ItemPanel client : clients) client.setTool("select"); // buttonPressed("select"); } public void addButtonToTools(String icon,String cmd,String popup){ makeToggleButton(icon, cmd, popup, this, toolGroup, tools) .setMargin(insets); } public static JToggleButton makeFollowSongButton(ActionListener actionListener,JPanel panel) { return makeToggleButton(getMessage("sequencer.play.follow"), getMessage("sequencer.play.follow"), getMessage("sequencer.play.follow_song"), actionListener, null, panel); } public static JButton makeSnapToButton(final Vector clients, JPanel panel, final Sequence sequence) { final JButton snapToButton = makePressButton("music_quarternote", "snaptoSET", getMessage("sequencer.toolbar.snaptolength_tip"), null, panel); snapToButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new NoteLengthPopup(snapToButton, clients, sequence).show(snapToButton, 0, 0); } }); NoteLengthPopup.updateButton(snapToButton, clients, sequence); return snapToButton; } public void rectZoomFinished() { for (ItemPanel client : clients) client.setTool("origtool"); zoomBut.setSelected(false); } public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); // System.out.println(" PRollToolPanel " + cmd); if (cmd.equals("zoomin")) { // TODO keep it still for (ItemPanel client : clients) client.zoomIn(); return; } else if (cmd.equals("zoomout")) { for (ItemPanel client : clients) client.zoomOut(); return; } else if (cmd.equals("follow")) { for (ItemPanel client : clients) client.followSong(follow.isSelected()); return; } else if (cmd.equals("extend")) { project.setEndTick(project.getEndTick()+project.getSequence().getResolution()*8); return; } else if (cmd.equals("snaptoON")) { for (ItemPanel client : clients) client.setSnapQuantized(quantize.isSelected()); return; } else { for (ItemPanel client : clients) { client.setTool(cmd); } // setTool(tool); } } public JPanel getZoomPanel() { return zoom; } public JPanel getToolsPanel() { return tools; } }