package org.herac.tuxguitar.gui; import java.applet.Applet; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Frame; import java.awt.Graphics; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.URL; import javax.swing.SwingUtilities; import org.herac.tuxguitar.gui.system.config.TGConfig; import org.herac.tuxguitar.io.base.TGFileFormatManager; import org.herac.tuxguitar.song.models.TGSong; import org.herac.tuxguitar.util.TGSynchronizer; import org.herac.tuxguitar.util.TGSynchronizer.TGSynchronizerTask; public class TGApplet extends Applet{ public TGApplet(){ super(); } public void init(){ applicationInit(); } public void destroy(){ applicationDestroy(); } public void start(){ this.setFocus(); this.repaint(); } public void repaint(){ super.repaint(); } public void update(Graphics g){ this.paint(g); } public void applicationInit() { this.initConfig(); this.initSynchronizer(); TuxGuitar.instance().setShell(this); this.setLayout(new BorderLayout()); this.add( TuxGuitar.instance().getToolBar().getPanel() ,BorderLayout.NORTH); this.add( TuxGuitar.instance().getTablatureEditor().getPanel(),BorderLayout.CENTER); this.add( TuxGuitar.instance().getTablatureEditor().getScrollBar(),BorderLayout.EAST); this.setVisible(true); this.setFocus(); this.load(); } public void applicationDestroy(){ TuxGuitar.instance().lock(); TuxGuitar.instance().getPlayer().close(); TuxGuitar.instance().getTablatureEditor().dispose(); TuxGuitar.instance().getSongManager().clearSong(); TuxGuitar.instance().unlock(); this.removeAll(); } public Frame getFrame(){ Container parent = this; while(parent != null){ if (parent instanceof Frame){ return (Frame)parent; } parent = parent.getParent(); } return null; } public void setFocus(){ this.setFocusable(true); this.requestFocus(); } private void initSynchronizer(){ TGSynchronizer.instance().setController(new TGSynchronizer.TGSynchronizerController() { public void execute(final TGSynchronizer.TGSynchronizerTask task) { try{ // Just excecute the task if it is on the same thread. if( SwingUtilities.isEventDispatchThread() ){ task.run(); }else{ SwingUtilities.invokeAndWait(new Runnable() { public void run() { task.run(); } }); } }catch(Throwable throwable){ throwable.printStackTrace(); } } public void executeLater(final TGSynchronizerTask task) { SwingUtilities.invokeLater(new Runnable() { public void run() { task.run(); } }); } }); } private void initConfig(){ TGConfig.SONG_URL = getParameter("song_url_download"); TGConfig.SOUNDBANK_URL = getParameter("soundbank_url_download"); TGConfig.LOOK_FEEL = getParameter("look_and_feel"); TGConfig.MIDI_PORT = getParameter("midi_port"); } public void load(){ new Thread(new Runnable() { public void run() { TuxGuitar.instance().getTablatureEditor().loadTablature(); TuxGuitar.instance().getkeyBindingManager().appendListenersTo( TGApplet.this ); loadSong(); TuxGuitar.instance().getTablatureEditor().start(); } }).start(); } public void loadSong(){ try{ if(TGConfig.SONG_URL != null){ URL url = new URL(TGConfig.SONG_URL); InputStream stream = getInputStream(url.openStream()); TGSong song = TGFileFormatManager.instance().getLoader().load(TuxGuitar.instance().getSongManager().getFactory(),stream); TuxGuitar.instance().fireNewSong(song); } }catch(Throwable t){ t.printStackTrace(); TuxGuitar.instance().newSong(); } } private InputStream getInputStream(InputStream in)throws Throwable { ByteArrayOutputStream out = new ByteArrayOutputStream(); int read = 0; while((read = in.read()) != -1){ out.write(read); } byte[] bytes = out.toByteArray(); in.close(); out.close(); out.flush(); return new ByteArrayInputStream(bytes); } }