/*
* TimelineToolBar.java
* Eisenkraut
*
* Copyright (c) 2004-2016 Hanns Holger Rutz. All rights reserved.
*
* This software is published under the GNU General Public License v3+
*
*
* For further information, please contact Hanns Holger Rutz at
* contact@sciss.de
*/
package de.sciss.eisenkraut.timeline;
import de.sciss.app.AbstractApplication;
import de.sciss.app.Application;
import de.sciss.eisenkraut.gui.BlendingAction;
import de.sciss.eisenkraut.gui.CatchAction;
import de.sciss.eisenkraut.gui.EditModeAction;
import de.sciss.eisenkraut.gui.ToolAction;
import de.sciss.eisenkraut.gui.ToolBar;
import de.sciss.eisenkraut.session.Session;
import de.sciss.gui.DoClickAction;
import de.sciss.gui.GUIUtil;
import de.sciss.util.Disposable;
import javax.swing.*;
import java.awt.event.KeyEvent;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.prefs.Preferences;
/**
* A palette of tools for editing
* objects in the timeline frame. Window
* key commands are installed: F1 to F6
* for the tools and caps lock for toggling
* the blending option.
*/
@SuppressWarnings("serial")
public class TimelineToolBar
extends ToolBar
implements Disposable {
private final Map<Integer, JToggleButton> mapToolButtons = new HashMap<Integer, JToggleButton>();
private static void createKeyAction2(AbstractButton comp, int i) {
final Action a = new DoClickAction(comp);
final InputMap im = comp.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
final ActionMap am = comp.getActionMap();
final KeyStroke ks1 = KeyStroke.getKeyStroke(KeyEvent.VK_F1 + i, 0);
final KeyStroke ks2 = KeyStroke.getKeyStroke(KeyEvent.VK_1 + i, 0);
im.put(ks1, "shortcut");
im.put(ks2, "shortcut");
am.put("shortcut", a);
}
/**
* Creates a tool palette with
* default buttons for editing the timeline frame.
*/
public TimelineToolBar(Session doc) {
super(SwingConstants.HORIZONTAL);
final Application app = AbstractApplication.getApplication();
final Preferences prefs = app.getUserPrefs();
final CatchAction actionCatch;
final EditModeAction actionEditMode;
final AbstractButton button;
final BlendingAction actionBlending;
ToolAction toolAction;
JToggleButton toggle;
ButtonGroup bg;
Enumeration<AbstractButton> en;
actionCatch = new CatchAction(prefs); // .node( PrefsUtil.NODE_SHARED ));
toggle = actionCatch.getButton();
GUIUtil.createKeyAction(toggle, KeyStroke.getKeyStroke(KeyEvent.VK_V, 0));
addToggleButton(toggle, 2);
addSeparator();
actionEditMode = new EditModeAction(doc);
bg = actionEditMode.getButtons();
en = bg.getElements();
for (int i = 0; en.hasMoreElements(); i++) {
toggle = (JToggleButton) en.nextElement();
createKeyAction2(toggle, i);
addToggleButton(toggle, 3);
}
addSeparator();
toolAction = new ToolAction(ToolAction.POINTER);
toggle = new JToggleButton(toolAction);
toggle.setToolTipText(app.getResourceString("ttTimelinePointer"));
toolAction.setIcons(toggle);
createKeyAction2(toggle, 4);
addToggleButton(toggle, 0);
mapToolButtons.put(toolAction.getID(), toggle);
toolAction = new ToolAction(ToolAction.ZOOM);
toggle = new JToggleButton(toolAction);
toggle.setToolTipText(app.getResourceString("ttTimelineZoom"));
toolAction.setIcons(toggle);
createKeyAction2(toggle, 5);
addToggleButton(toggle, 0);
mapToolButtons.put(toolAction.getID(), toggle);
addSeparator();
actionBlending = doc.getBlendingAction();
button = actionBlending.getButton();
button.setToolTipText(app.getResourceString("ttTimelineBlending"));
// N.B. caps-lock doesn't work nicely on linux with respect to release.
GUIUtil.createKeyAction(button, KeyStroke.getKeyStroke(KeyEvent.VK_B /* VK_CAPS_LOCK */, 0));
add(actionBlending.mkComboBox());
}
public void selectTool(int toolID) {
final AbstractButton b = mapToolButtons.get(toolID);
if (b != null) b.doClick();
}
public void dispose() {
/* empty */
}
}