001/* 002 * Copyright 2006 - 2013 003 * Stefan Balev <stefan.balev@graphstream-project.org> 004 * Julien Baudry <julien.baudry@graphstream-project.org> 005 * Antoine Dutot <antoine.dutot@graphstream-project.org> 006 * Yoann Pigné <yoann.pigne@graphstream-project.org> 007 * Guilhelm Savin <guilhelm.savin@graphstream-project.org> 008 * 009 * This file is part of GraphStream <http://graphstream-project.org>. 010 * 011 * GraphStream is a library whose purpose is to handle static or dynamic 012 * graph, create them from scratch, file or any source and display them. 013 * 014 * This program is free software distributed under the terms of two licenses, the 015 * CeCILL-C license that fits European law, and the GNU Lesser General Public 016 * License. You can use, modify and/ or redistribute the software under the terms 017 * of the CeCILL-C license as circulated by CEA, CNRS and INRIA at the following 018 * URL <http://www.cecill.info> or under the terms of the GNU LGPL as published by 019 * the Free Software Foundation, either version 3 of the License, or (at your 020 * option) any later version. 021 * 022 * This program is distributed in the hope that it will be useful, but WITHOUT ANY 023 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 024 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. 025 * 026 * You should have received a copy of the GNU Lesser General Public License 027 * along with this program. If not, see <http://www.gnu.org/licenses/>. 028 * 029 * The fact that you are presently reading this means that you have had 030 * knowledge of the CeCILL-C and LGPL licenses and that you accept their terms. 031 */ 032package org.graphstream.ui.swingViewer.util; 033 034import java.awt.event.KeyEvent; 035 036import org.graphstream.ui.geom.Point3; 037import org.graphstream.ui.graphicGraph.GraphicGraph; 038import org.graphstream.ui.swingViewer.View; 039 040public class DefaultShortcutManager implements ShortcutManager { 041 // Attributes 042 043 /** 044 * The viewer to control. 045 */ 046 protected View view; 047 048 protected double viewPercent = 1; 049 050 protected Point3 viewPos = new Point3(); 051 052 protected double rotation = 0; 053 054 // Construction 055 056 public void init(GraphicGraph graph, View view) { 057 this.view = view; 058 view.addKeyListener(this); 059 } 060 061 public void release() { 062 view.removeKeyListener(this); 063 } 064 065 // Events 066 067 /** 068 * A key has been pressed. 069 * 070 * @param event 071 * The event that generated the key. 072 */ 073 public void keyPressed(KeyEvent event) { 074 Camera camera = view.getCamera(); 075 076 if (event.getKeyCode() == KeyEvent.VK_PAGE_UP) { 077 camera.setViewPercent(Math.max(0.0001f, 078 camera.getViewPercent() * 0.9f)); 079 } else if (event.getKeyCode() == KeyEvent.VK_PAGE_DOWN) { 080 camera.setViewPercent(camera.getViewPercent() * 1.1f); 081 } else if (event.getKeyCode() == KeyEvent.VK_LEFT) { 082 if ((event.getModifiers() & KeyEvent.ALT_MASK) != 0) { 083 double r = camera.getViewRotation(); 084 camera.setViewRotation(r - 5); 085 } else { 086 double delta = 0; 087 088 if ((event.getModifiers() & KeyEvent.SHIFT_MASK) != 0) 089 delta = camera.getGraphDimension() * 0.1f; 090 else 091 delta = camera.getGraphDimension() * 0.01f; 092 093 delta *= camera.getViewPercent(); 094 095 Point3 p = camera.getViewCenter(); 096 camera.setViewCenter(p.x - delta, p.y, 0); 097 } 098 } else if (event.getKeyCode() == KeyEvent.VK_RIGHT) { 099 if ((event.getModifiers() & KeyEvent.ALT_MASK) != 0) { 100 double r = camera.getViewRotation(); 101 camera.setViewRotation(r + 5); 102 } else { 103 double delta = 0; 104 105 if ((event.getModifiers() & KeyEvent.SHIFT_MASK) != 0) 106 delta = camera.getGraphDimension() * 0.1f; 107 else 108 delta = camera.getGraphDimension() * 0.01f; 109 110 delta *= camera.getViewPercent(); 111 112 Point3 p = camera.getViewCenter(); 113 camera.setViewCenter(p.x + delta, p.y, 0); 114 } 115 } else if (event.getKeyCode() == KeyEvent.VK_UP) { 116 double delta = 0; 117 118 if ((event.getModifiers() & KeyEvent.SHIFT_MASK) != 0) 119 delta = camera.getGraphDimension() * 0.1f; 120 else 121 delta = camera.getGraphDimension() * 0.01f; 122 123 delta *= camera.getViewPercent(); 124 125 Point3 p = camera.getViewCenter(); 126 camera.setViewCenter(p.x, p.y + delta, 0); 127 } else if (event.getKeyCode() == KeyEvent.VK_DOWN) { 128 double delta = 0; 129 130 if ((event.getModifiers() & KeyEvent.SHIFT_MASK) != 0) 131 delta = camera.getGraphDimension() * 0.1f; 132 else 133 delta = camera.getGraphDimension() * 0.01f; 134 135 delta *= camera.getViewPercent(); 136 137 Point3 p = camera.getViewCenter(); 138 camera.setViewCenter(p.x, p.y - delta, 0); 139 } 140 } 141 142 /** 143 * A key has been pressed. 144 * 145 * @param event 146 * The event that generated the key. 147 */ 148 public void keyReleased(KeyEvent event) { 149 } 150 151 /** 152 * A key has been typed. 153 * 154 * @param event 155 * The event that generated the key. 156 */ 157 public void keyTyped(KeyEvent event) { 158 if (event.getKeyChar() == 'R') { 159 view.getCamera().resetView(); 160 } 161 // else if( event.getKeyChar() == 'B' ) 162 // { 163 // view.setModeFPS( ! view.getModeFPS() ); 164 // } 165 } 166}