Changeset 29769 in osm for applications/editors/josm/plugins/videomapping/src/org
- Timestamp:
- 2013-07-24T18:01:58+02:00 (11 years ago)
- Location:
- applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/VideoPlugin.java
r29536 r29769 48 48 //Here we manage properties and start the other classes 49 49 public class VideoPlugin extends Plugin implements LayerChangeListener{ 50 51 52 50 private JMenu VMenu,VDeinterlacer; 51 private JosmAction VAdd,/*VRemove,*/VStart,Vbackward,Vforward,VJump,Vfaster,Vslower,Vloop; 52 private JRadioButtonMenuItem VIntBob,VIntNone,VIntLinear; 53 53 private JCheckBoxMenuItem VCenterIcon,VSubTitles; 54 54 private JMenuItem VJumpLength,VLoopLength; … … 61 61 private Integer jumpLength,loopLength; 62 62 private String mostRecentFolder; 63 private GpxLayer gpsLayer; 64 private VideoPositionLayer videoPositionLayer; 65 private GPSVideoPlayer gpsVideoPlayer; 66 67 public static String VLC_VERSION = "2.0.x"; 68 69 public VideoPlugin(PluginInformation info) { 70 super(info); 71 VideoEngine.setupPlayer(); 72 MapView.addLayerChangeListener(this); 73 createMenusAndShortCuts(); 74 enableVideoControlMenus(false); 75 setDefaults(); 76 loadProperties(); 77 } 78 79 private void createMenusAndShortCuts() { 80 VMenu = Main.main.menu.addMenu(marktr("Video"), KeyEvent.VK_D, Main.main.menu.defaultMenuPos,ht("/Plugin/Videomapping")); 81 VMenu.setEnabled(false); 82 VAdd= new JosmAction(tr("Import Video"),"videomapping",tr("Sync a video against this GPS track"),null,false) { 83 public void actionPerformed(ActionEvent arg0) { 63 private GpxLayer gpsLayer; 64 private VideoPositionLayer videoPositionLayer; 65 private GPSVideoPlayer gpsVideoPlayer; 66 67 public static String VLC_VERSION = "2.0.x"; 68 69 public VideoPlugin(PluginInformation info) { 70 super(info); 71 VideoEngine.setupPlayer(); 72 MapView.addLayerChangeListener(this); 73 createMenusAndShortCuts(); 74 enableVideoControlMenus(false); 75 setDefaults(); 76 loadProperties(); 77 } 78 79 private void createMenusAndShortCuts() { 80 boolean oldMenu = org.openstreetmap.josm.data.Version.getInstance().getVersion() < 6082; 81 VMenu = Main.main.menu.addMenu(marktr("Video"), oldMenu?KeyEvent.VK_D: KeyEvent.VK_Q, Main.main.menu.defaultMenuPos,ht("/Plugin/Videomapping")); 82 VMenu.setEnabled(false); 83 VAdd= new JosmAction(tr("Import Video"),"videomapping",tr("Sync a video against this GPS track"),null,false) { 84 @Override public void actionPerformed(ActionEvent arg0) { 84 85 importVideoFile(); 85 86 } 86 87 }; 87 88 /*VRemove=*/ new JosmAction(tr("Remove Video"),"videomapping",tr("removes current video from layer"),null,false) { 88 public void actionPerformed(ActionEvent arg0) { 89 @Override public void actionPerformed(ActionEvent arg0) { 89 90 } 90 91 }; 91 92 VStart = new JosmAction(tr("Play/Pause"), "audio-playpause", tr("starts/pauses video playback"), 92 93 Shortcut.registerShortcut("videomapping:startstop",tr("Video: {0}", tr("Play/Pause")),KeyEvent.VK_NUMPAD5, Shortcut.DIRECT), false, "vm_play_pause",false) { 93 public void actionPerformed(ActionEvent e) { 94 @Override public void actionPerformed(ActionEvent e) { 94 95 if (gpsVideoPlayer != null) { 95 96 gpsVideoPlayer.pause(); … … 99 100 Vbackward = new JosmAction(tr("Backward"), "audio-prev", tr("jumps n sec back"), 100 101 Shortcut.registerShortcut("videomapping:backward",tr("Video: {0}", tr("Backward")),KeyEvent.VK_NUMPAD4, Shortcut.DIRECT), false, "vm_prev",false) { 101 public void actionPerformed(ActionEvent e) { 102 @Override public void actionPerformed(ActionEvent e) { 102 103 if (gpsVideoPlayer != null) { 103 104 gpsVideoPlayer.backward(); … … 107 108 Vforward= new JosmAction(tr("Forward"), "audio-next", tr("jumps n sec forward"), 108 109 Shortcut.registerShortcut("videomapping:forward",tr("Video: {0}", tr("Forward")),KeyEvent.VK_NUMPAD6, Shortcut.DIRECT), false, "vm_next",false) { 109 public void actionPerformed(ActionEvent e) { 110 @Override public void actionPerformed(ActionEvent e) { 110 111 if (gpsVideoPlayer != null) { 111 112 gpsVideoPlayer.forward(); … … 116 117 Shortcut.registerShortcut("videomapping:faster",tr("Video: {0}", tr("Faster")),KeyEvent.VK_NUMPAD8, Shortcut.DIRECT), false, "vm_faster",false) { 117 118 118 public void actionPerformed(ActionEvent e) { 119 @Override public void actionPerformed(ActionEvent e) { 119 120 if (gpsVideoPlayer != null) { 120 121 gpsVideoPlayer.setSpeed(gpsVideoPlayer.getSpeed()+20); … … 125 126 Shortcut.registerShortcut("videomapping:slower",tr("Video: {0}", tr("Slower")),KeyEvent.VK_NUMPAD2, Shortcut.DIRECT), false, "vm_slower",false) { 126 127 127 public void actionPerformed(ActionEvent e) { 128 @Override public void actionPerformed(ActionEvent e) { 128 129 if (gpsVideoPlayer != null) { 129 130 gpsVideoPlayer.setSpeed(gpsVideoPlayer.getSpeed()-20); … … 132 133 }; 133 134 VJump= new JosmAction(tr("Jump To"), "jumpto", tr("jumps to the entered gps time"),null, false) { 134 public void actionPerformed(ActionEvent e) { 135 @Override public void actionPerformed(ActionEvent e) { 135 136 showJumpTo(); 136 137 } … … 140 141 Vloop= new JosmAction(tr("Loop"), "loop", tr("loops n sec around current position"), 141 142 Shortcut.registerShortcut("videomapping:loop",tr("Video: {0}", tr("Loop")),KeyEvent.VK_NUMPAD7, Shortcut.DIRECT), false) { 142 public void actionPerformed(ActionEvent e) { 143 @Override public void actionPerformed(ActionEvent e) { 143 144 if (gpsVideoPlayer != null) { 144 145 gpsVideoPlayer.toggleLooping(); … … 149 150 //now the options menu 150 151 VCenterIcon = new JCheckBoxMenuItem(new JosmAction(tr("Keep centered"), (String)null, tr("follows the video icon automaticly"),null, false,"vm_keepcentered",false) { 151 public void actionPerformed(ActionEvent e) { 152 @Override public void actionPerformed(ActionEvent e) { 152 153 if (videoPositionLayer != null) { 153 154 videoPositionLayer.setAutoCenter(VCenterIcon.isSelected()); … … 157 158 158 159 VSubTitles = new JCheckBoxMenuItem(new JosmAction(tr("Subtitles"), (String)null, tr("Show subtitles in video"),null, false,"vm_subtitles",false) { 159 public void actionPerformed(ActionEvent e) { 160 @Override public void actionPerformed(ActionEvent e) { 160 161 if (gpsVideoPlayer != null) { 161 162 gpsVideoPlayer.setSubtitles(VSubTitles.isSelected()); … … 165 166 166 167 VJumpLength = new JMenuItem(new JosmAction(tr("Jump length"), (String)null, tr("Set the length of a jump"),null, false,"vm_jumplen",false) { 167 public void actionPerformed(ActionEvent e) { 168 @Override public void actionPerformed(ActionEvent e) { 168 169 Object[] possibilities = {"200", "500", "1000", "2000", "10000"}; 169 170 String s = (String)JOptionPane.showInputDialog(Main.parent,tr("Jump in video for x ms"),tr("Jump length"),JOptionPane.QUESTION_MESSAGE,null,possibilities,jumpLength); … … 174 175 175 176 VLoopLength = new JMenuItem(new JosmAction(tr("Loop length"), (String)null, tr("Set the length around a looppoint"),null, false,"vm_looplen",false) { 176 public void actionPerformed(ActionEvent e) { 177 @Override public void actionPerformed(ActionEvent e) { 177 178 Object[] possibilities = {"500", "1000", "3000", "5000", "10000"}; 178 179 String s = (String)JOptionPane.showInputDialog(Main.parent,tr("Jump in video for x ms"),tr("Loop length"),JOptionPane.QUESTION_MESSAGE,null,possibilities,loopLength); … … 184 185 VDeinterlacer= new JMenu("Deinterlacer"); 185 186 VIntNone= new JRadioButtonMenuItem(new JosmAction(tr("none"), (String)null, tr("no deinterlacing"),null, false,"vm_deinterlacer",false) { 186 public void actionPerformed(ActionEvent e) { 187 @Override public void actionPerformed(ActionEvent e) { 187 188 if (gpsVideoPlayer != null) { 188 189 gpsVideoPlayer.setDeinterlacer(null); … … 191 192 }); 192 193 VIntBob= new JRadioButtonMenuItem(new JosmAction("bob", (String)null, tr("deinterlacing using line doubling"),null, false,"vm_bobdeinterlace",false) { 193 public void actionPerformed(ActionEvent e) { 194 @Override public void actionPerformed(ActionEvent e) { 194 195 if (gpsVideoPlayer != null) { 195 196 gpsVideoPlayer.setDeinterlacer(DeinterlaceMode.BOB); … … 198 199 }); 199 200 VIntLinear= new JRadioButtonMenuItem(new JosmAction("linear", (String)null, tr("deinterlacing using linear interpolation"),null, false,"vm_lineardeinterlace",false) { 200 public void actionPerformed(ActionEvent e) { 201 @Override public void actionPerformed(ActionEvent e) { 201 202 if (gpsVideoPlayer != null) { 202 203 gpsVideoPlayer.setDeinterlacer(DeinterlaceMode.LINEAR); … … 223 224 } 224 225 225 226 226 protected void importVideoFile() { 227 JFileChooser fc = new JFileChooser(mostRecentFolder); 227 228 fc.setSelectedFile(new File(mostRecentFolder)); 228 229 if (fc.showOpenDialog(Main.parent) != JFileChooser.CANCEL_OPTION) { 229 230 231 232 233 234 235 236 237 238 239 240 230 mostRecentFolder=fc.getSelectedFile().getAbsolutePath(); 231 saveProperties(); 232 if (videoPositionLayer == null && gpsLayer != null) { 233 videoPositionLayer = new VideoPositionLayer(gpsLayer); 234 gpsVideoPlayer = new GPSVideoPlayer(new SimpleDateFormat("hh:mm:ss") ,videoPositionLayer); 235 gpsVideoPlayer.setJumpLength(jumpLength); 236 gpsVideoPlayer.setLoopLength(loopLength); 237 enableVideoControlMenus(true); 238 } 239 if (gpsVideoPlayer != null && gpsVideoPlayer.isCorrectlyInitiliazed()) { 240 gpsVideoPlayer.addVideo(fc.getSelectedFile()); 241 } else { 241 242 JOptionPane.showMessageDialog(Main.parent, 242 tr("VLC library is not correctly initialized."+ 243 " Please check that VLC {0} is correctly installed on your system."+ 244 " Its architecture (32/64 bits) must also be the same as the JRE that runs JOSM.", VLC_VERSION), 245 tr("Error"), JOptionPane.ERROR_MESSAGE 246 ); 247 } 243 tr("VLC library is not correctly initialized."+ 244 " Please check that VLC {0} is correctly installed on your system."+ 245 " Its architecture (32/64 bits) must also be the same as the JRE that runs JOSM.", VLC_VERSION), 246 tr("Error"), JOptionPane.ERROR_MESSAGE); 247 } 248 248 } 249 250 251 252 249 } 250 251 private void enableVideoControlMenus(boolean b) { 252 VStart.setEnabled(b); 253 253 Vbackward.setEnabled(b); 254 254 Vforward.setEnabled(b); … … 257 257 Vslower.setEnabled(b); 258 258 VJump.setEnabled(b); 259 259 } 260 260 261 262 261 private void setDefaults() { 262 autoCenter=false; 263 263 // deinterlacer=""; 264 265 266 267 264 jumpLength=1000; 265 loopLength=6000; 266 mostRecentFolder=System.getProperty("user.home"); 267 } 268 268 269 269 private void loadProperties() { 270 270 String temp; 271 271 temp=Main.pref.get(PROP_AUTOCENTER); … … 283 283 } 284 284 285 285 private void saveProperties(){ 286 286 Main.pref.put(PROP_AUTOCENTER, autoCenter); 287 287 Main.pref.put(PROP_JUMPLENGTH, jumpLength.toString()); … … 290 290 } 291 291 292 293 294 try {295 JOptionPane d=new JOptionPane(tr("Jump to"), JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION); 296 SimpleDateFormatgpsTimeFormat= new SimpleDateFormat("HH:mm:ss");297 Stringtimerange=gpsTimeFormat.format(videoPositionLayer.getFirstWayPoint().getTime())+" - ";298 =timerange+gpsTimeFormat.format(videoPositionLayer.getLastWayPoint().getTime());299 d.add(new JLabel(timerange)); //TODO for some reason this doesn't work -> use dialog 300 final JFormattedTextField inp = new JFormattedTextField(new MaskFormatter("##:##:##"));301 Text(gpsTimeFormat.format( videoPositionLayer.getGPSDate()));302 inp.setInputVerifier(new InputVerifier() { 303 @Override 304 public boolean verify(JComponent input) { 305 return false; 306 } 307 }); 308 //hack to set the focus 309 SwingUtilities.invokeLater(new Runnable() { 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 292 private void showJumpTo() { 293 try { 294 JOptionPane d=new JOptionPane(tr("Jump to"), JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION); 295 SimpleDateFormat gpsTimeFormat= new SimpleDateFormat("HH:mm:ss"); 296 String timerange=gpsTimeFormat.format(videoPositionLayer.getFirstWayPoint().getTime())+" - "; 297 timerange=timerange+gpsTimeFormat.format(videoPositionLayer.getLastWayPoint().getTime()); 298 d.add(new JLabel(timerange)); //TODO for some reason this doesn't work -> use dialog 299 final JFormattedTextField inp = new JFormattedTextField(new MaskFormatter("##:##:##")); 300 inp.setText(gpsTimeFormat.format( videoPositionLayer.getGPSDate())); 301 inp.setInputVerifier(new InputVerifier() { 302 @Override 303 public boolean verify(JComponent input) { 304 return false; 305 } 306 }); 307 //hack to set the focus 308 SwingUtilities.invokeLater(new Runnable() { 309 @Override 310 public void run() { 311 inp.requestFocus(); 312 inp.setCaretPosition(0); 313 } 314 }); 315 if (JOptionPane.showConfirmDialog(Main.panel,inp, tr("Jump to GPS time"),JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) 316 { 317 //add the day to the time 318 Date t = gpsTimeFormat.parse(inp.getText()); 319 Calendar time = Calendar.getInstance(); 320 Calendar date = Calendar.getInstance(); 321 time.setTime(t); 322 date.setTime(videoPositionLayer.getFirstWayPoint().getTime()); 323 time.set(date.get(Calendar.YEAR), date.get(Calendar.MONTH), date.get(Calendar.DATE)); 324 if (t!=null) 325 { 326 videoPositionLayer.jump(time.getTime()); 327 } 328 } 329 329 } catch (ParseException e1) { 330 330 e1.printStackTrace(); 331 331 } 332 333 334 335 332 } 333 334 @Override 335 public void activeLayerChange(Layer oldLayer, Layer newLayer) { 336 336 VMenu.setEnabled(true); 337 337 if (newLayer instanceof GpxLayer) … … 343 343 } 344 344 345 public void layerAdded(Layer arg0) { 346 activeLayerChange(null,arg0); 347 348 349 350 public void layerRemoved(Layer arg0) { 351 if(arg0 instanceof VideoPositionLayer) 352 enableVideoControlMenus(false); 353 activeLayerChange(null,arg0);354 355 345 @Override 346 public void layerAdded(Layer arg0) { 347 activeLayerChange(null,arg0); 348 } 349 350 @Override 351 public void layerRemoved(Layer arg0) { 352 if(arg0 instanceof VideoPositionLayer) 353 enableVideoControlMenus(false); 354 activeLayerChange(null,arg0); 355 } 356 356 } -
applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/GPSVideoPlayer.java
r28949 r29769 42 42 syncButton.setBackground(Color.RED); 43 43 syncButton.addActionListener(new ActionListener() { 44 @Override 44 45 public void actionPerformed(ActionEvent e) { 45 46 resync(e); -
applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/VideoEngine.java
r28924 r29769 319 319 } 320 320 321 public void backward(MediaPlayer arg0) { 322 323 } 321 @Override 322 public void backward(MediaPlayer arg0) { } 324 323 /* 325 324 public void buffering(MediaPlayer arg0) { … … 327 326 } 328 327 */ 329 public void error(MediaPlayer arg0) { 330 331 } 332 333 public void finished(MediaPlayer arg0) { 334 335 } 336 337 public void forward(MediaPlayer arg0) { 338 339 } 340 341 public void lengthChanged(MediaPlayer arg0, long arg1) { 342 343 } 328 @Override 329 public void error(MediaPlayer arg0) { } 330 331 @Override 332 public void finished(MediaPlayer arg0) { } 333 334 @Override 335 public void forward(MediaPlayer arg0) { } 336 337 @Override 338 public void lengthChanged(MediaPlayer arg0, long arg1) { } 344 339 /* 345 340 public void mediaChanged(MediaPlayer arg0) { … … 353 348 } 354 349 */ 355 public void opening(MediaPlayer arg0) { 356 357 } 358 359 public void pausableChanged(MediaPlayer arg0, int arg1) { 360 361 } 362 363 public void paused(MediaPlayer arg0) { 364 365 } 366 367 public void playing(MediaPlayer arg0) { 368 369 } 370 371 public void positionChanged(MediaPlayer arg0, float arg1) { 372 373 } 374 375 public void seekableChanged(MediaPlayer arg0, int arg1) { 376 377 } 378 379 public void snapshotTaken(MediaPlayer arg0, String arg1) { 380 381 } 382 383 public void stopped(MediaPlayer arg0) { 384 385 } 386 387 public void timeChanged(MediaPlayer arg0, long arg1) { 388 389 } 390 391 public void titleChanged(MediaPlayer arg0, int arg1) { 392 393 } 350 @Override 351 public void opening(MediaPlayer arg0) { } 352 353 @Override 354 public void pausableChanged(MediaPlayer arg0, int arg1) { } 355 356 @Override 357 public void paused(MediaPlayer arg0) { } 358 359 @Override 360 public void playing(MediaPlayer arg0) { } 361 362 @Override 363 public void positionChanged(MediaPlayer arg0, float arg1) { } 364 365 @Override 366 public void seekableChanged(MediaPlayer arg0, int arg1) { } 367 368 @Override 369 public void snapshotTaken(MediaPlayer arg0, String arg1) { } 370 371 @Override 372 public void stopped(MediaPlayer arg0) { } 373 374 @Override 375 public void timeChanged(MediaPlayer arg0, long arg1) { } 376 377 @Override 378 public void titleChanged(MediaPlayer arg0, int arg1) { } 394 379 395 380 public boolean isNoVideoPlaying() { -
applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/VideoPlayer.java
r29536 r29769 30 30 import uk.co.caprica.vlcj.player.DeinterlaceMode; 31 31 32 //basic UI of a videoplayer for multiple videos incl. notifications 32 /** basic UI of a videoplayer for multiple videos incl. notifications 33 */ 33 34 public class VideoPlayer extends JFrame implements WindowListener, VideosObserver, VideoPlayerObserver { 34 35 private static final int notificationIntervall = 500; … … 205 206 206 207 play.addActionListener(new ActionListener() { 207 public void actionPerformed(ActionEvent arg0) { 208 @Override public void actionPerformed(ActionEvent arg0) { 208 209 pause(); 209 210 } … … 212 213 back.addActionListener(new ActionListener() { 213 214 214 public void actionPerformed(ActionEvent arg0) { 215 @Override public void actionPerformed(ActionEvent arg0) { 215 216 backward(); 216 217 } … … 219 220 forward.addActionListener(new ActionListener() { 220 221 221 public void actionPerformed(ActionEvent arg0) { 222 @Override public void actionPerformed(ActionEvent arg0) { 222 223 forward(); 223 224 } … … 226 227 loop.addActionListener(new ActionListener() { 227 228 228 public void actionPerformed(ActionEvent arg0) { 229 @Override public void actionPerformed(ActionEvent arg0) { 229 230 toggleLooping(); 230 231 } … … 233 234 mute.addActionListener(new ActionListener() { 234 235 235 public void actionPerformed(ActionEvent arg0) { 236 @Override public void actionPerformed(ActionEvent arg0) { 236 237 mute(); 237 238 } … … 239 240 240 241 timeline.addChangeListener(new ChangeListener() { 242 @Override 241 243 public void stateChanged(ChangeEvent e) { 242 244 //skip events, fired by this sliede, one cycle ago … … 252 254 253 255 speed.addChangeListener(new ChangeListener() { 256 @Override 254 257 public void stateChanged(ChangeEvent arg0) { 255 258 if(!speed.getValueIsAdjusting()) … … 311 314 } 312 315 313 public void windowActivated(WindowEvent arg0) { 314 // TODO Auto-generated method stub 315 316 } 317 318 public void windowClosed(WindowEvent arg0) { 319 320 } 321 316 @Override 317 public void windowActivated(WindowEvent arg0) { } 318 319 @Override 320 public void windowClosed(WindowEvent arg0) { } 321 322 @Override 322 323 public void windowClosing(WindowEvent arg0) { 323 324 videoengine.unload(); 324 325 } 325 326 326 public void windowDeactivated(WindowEvent arg0) { 327 // TODO Auto-generated method stub 328 329 } 330 331 public void windowDeiconified(WindowEvent arg0) { 332 // TODO Auto-generated method stub 333 334 } 335 336 public void windowIconified(WindowEvent arg0) { 337 // TODO Auto-generated method stub 338 339 } 340 341 public void windowOpened(WindowEvent arg0) { 342 // TODO Auto-generated method stub 343 344 } 345 327 @Override 328 public void windowDeactivated(WindowEvent arg0) { } 329 330 @Override 331 public void windowDeiconified(WindowEvent arg0) { } 332 333 @Override 334 public void windowIconified(WindowEvent arg0) { } 335 336 @Override 337 public void windowOpened(WindowEvent arg0) { } 338 339 @Override 346 340 public void update(VideoObserversEvents event) { 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 341 switch (event) 342 { 343 case resizing: 344 { 345 pack(); 346 break; 347 } 348 case speeding: 349 { 350 speed.setValue(videoengine.getSpeed()); 351 break; 352 } 353 case jumping: 354 { 355 break; 356 } 357 } 364 358 } 365 359 366 360 //keep internal controls up to date during playback 361 @Override 367 362 public void update_plays() { 368 363 timeline.setValue(videoengine.getPosition()); -
applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/VideoPlayerObserver.java
r25896 r29769 1 1 package org.openstreetmap.josm.plugins.videomapping.video; 2 2 3 //update mechanism for GPS position, title bar,... 3 /** Update mechanism for GPS position, title bar,... 4 */ 4 5 public interface VideoPlayerObserver { 5 6 public void update_plays(); 6 7 7 } -
applications/editors/josm/plugins/videomapping/src/org/openstreetmap/josm/plugins/videomapping/video/VideosObserver.java
r25896 r29769 1 1 package org.openstreetmap.josm.plugins.videomapping.video; 2 2 3 //getting basic control informations per video 3 /** Getting basic control informations per video 4 */ 4 5 public interface VideosObserver { 5 6 6 void update(VideoObserversEvents event); 7 8 7 }
Note:
See TracChangeset
for help on using the changeset viewer.