MT4j/examples/flickrMT/StartExample.java

package flickrMT;
 
import org.mt4j.MTApplication;
 
 
public class StartExample extends MTApplication{
	private static final long serialVersionUID = 1L;
 
	public static void main(String args[]){
		initialize();
	}
 
	@Override
	public void startUp(){
		this.addScene(new FlickrScene(this, "Flickr Scene"));
	}
}

MT4j/examples/flickrMT/FlickrScene.java

package flickrMT;
 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
 
import org.mt4j.MTApplication;
import org.mt4j.components.MTComponent;
import org.mt4j.components.TransformSpace;
import org.mt4j.components.visibleComponents.font.FontManager;
import org.mt4j.components.visibleComponents.shapes.AbstractShape;
import org.mt4j.components.visibleComponents.widgets.MTImage;
import org.mt4j.components.visibleComponents.widgets.MTTextArea;
import org.mt4j.components.visibleComponents.widgets.buttons.MTImageButton;
import org.mt4j.components.visibleComponents.widgets.buttons.MTSvgButton;
import org.mt4j.components.visibleComponents.widgets.keyboard.MTKeyboard;
import org.mt4j.components.visibleComponents.widgets.progressBar.MTProgressBar;
import org.mt4j.input.IMTEventListener;
import org.mt4j.input.MTEvent;
import org.mt4j.input.gestureAction.DefaultLassoAction;
import org.mt4j.input.gestureAction.DefaultPanAction;
import org.mt4j.input.gestureAction.DefaultZoomAction;
import org.mt4j.input.inputProcessors.componentProcessors.dragProcessor.DragProcessor;
import org.mt4j.input.inputProcessors.componentProcessors.lassoProcessor.LassoProcessor;
import org.mt4j.input.inputProcessors.componentProcessors.panProcessor.PanProcessorTwoFingers;
import org.mt4j.input.inputProcessors.componentProcessors.rotateProcessor.RotateProcessor;
import org.mt4j.input.inputProcessors.componentProcessors.scaleProcessor.ScaleProcessor;
import org.mt4j.input.inputProcessors.componentProcessors.tapProcessor.TapEvent;
import org.mt4j.input.inputProcessors.componentProcessors.tapProcessor.TapProcessor;
import org.mt4j.input.inputProcessors.componentProcessors.zoomProcessor.ZoomProcessor;
import org.mt4j.sceneManagement.AbstractScene;
import org.mt4j.sceneManagement.IPreDrawAction;
import org.mt4j.util.ConstantsAndSettings;
import org.mt4j.util.camera.MTCamera;
import org.mt4j.util.math.Tools3D;
import org.mt4j.util.math.Vector3D;
 
import processing.core.PGraphics;
import processing.core.PImage;
 
import com.aetrion.flickr.photos.SearchParameters;
 
public class FlickrScene extends AbstractScene {
	private MTApplication app;
	private MTProgressBar progressBar;
 
	private MTComponent pictureLayer;
	private LassoProcessor lassoProcessor;
 
	public FlickrScene(MTApplication mtAppl, String name) {
		super(mtAppl, name);
		this.app = mtAppl;
 
		this.setClearColor(135, 206, 250, 255);
 
		lassoProcessor	= new LassoProcessor(app, this.getCanvas(), this.getSceneCam());
		this.getCanvas().registerInputProcessor(lassoProcessor);
		this.getCanvas().addGestureListener(LassoProcessor.class, new DefaultLassoAction(app, this.getCanvas().getClusterManager(), this.getCanvas()));
 
		this.getCanvas().registerInputProcessor(new PanProcessorTwoFingers(app));
		this.getCanvas().addGestureListener(PanProcessorTwoFingers.class, new DefaultPanAction());
 
		this.getCanvas().registerInputProcessor(new ZoomProcessor(app));
		this.getCanvas().addGestureListener(ZoomProcessor.class, new DefaultZoomAction());
 
		pictureLayer = new MTComponent(app);
 
		MTComponent topLayer = new MTComponent(app, "top layer group", new MTCamera(app));
 
		final MTImageButton keyboardButton;
		PImage keyboardImg = app.loadImage(System.getProperty("user.dir")+File.separator + "data"+ File.separator +"textures"+ File.separator + "keyb2.png");
		keyboardButton = new MTImageButton(keyboardImg, app);
		keyboardButton.setName("KeyboardButton");
		keyboardButton.setUseDirectGL(true);
		keyboardButton.setNoStroke(true);
		keyboardButton.translateGlobal(new Vector3D(5,5,0));
		topLayer.addChild(keyboardButton);
 
		progressBar = new MTProgressBar(app, app.loadFont(System.getProperty("user.dir") + File.separator + "data" + File.separator+ "Ziggurat.vlw"));
		progressBar.setDepthBufferDisabled(true);
		progressBar.setVisible(false);
		topLayer.addChild(progressBar);
 
		keyboardButton.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent ae) {
				switch (ae.getID()) {
				case TapEvent.BUTTON_CLICKED:
					//Flickr Keyboard
			        MTKeyboard keyb = new MTKeyboard(app);
			        keyb.setFillColor(50, 50, 50, 190);
 
			        final MTTextArea t = new MTTextArea(app, FontManager.getInstance().createFont(app, "arial.ttf", 50, 0,0,0,255, 0, 0, 0, 255));
					t.setStrokeColor(0,0 , 0, 255);
					t.setFillColor(205,200,177, 255);
					t.setGestureAllowance(DragProcessor.class, false);
					t.setGestureAllowance(RotateProcessor.class, false);
					t.setGestureAllowance(ScaleProcessor.class, false);
					t.setGestureAllowance(TapProcessor.class, false);
					t.setEnableCaret(true);
					t.snapToKeyboard(keyb);
					keyb.setTextInputAcceptor(t);
					keyb.addChild(t);
 
			        //Flickr Button for the keyboard
			        MTSvgButton flickrButton = new MTSvgButton(System.getProperty("user.dir")+File.separator+"examples"+File.separator+"flickrMT"+File.separator +"data"+File.separator
							+ "Flickr_Logo.svg", app);
			        flickrButton.scale(0.4f, 0.4f, 1, new Vector3D(0,0,0), TransformSpace.LOCAL);
			        flickrButton.translate(new Vector3D(0, 15,0));
			        flickrButton.setBoundsPickingBehaviour(AbstractShape.BOUNDS_ONLY_CHECK);
 
			        //Add actionlistener to flickr button
			        flickrButton.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent arg0) {
							if (arg0.getSource() instanceof MTComponent){
								//MTBaseComponent clickedComp = (MTBaseComponent)arg0.getSource();
								switch (arg0.getID()) {
								case TapEvent.BUTTON_CLICKED:
									//Get current search parameters
							        SearchParameters sp = new SearchParameters();
							        //sp.setSafeSearch("213on");
							        /*
							        DateFormat dateFormat = new SimpleDateFormat ("yyyy/MM/dd HH:mm:ss");
							        java.util.Date date = new java.util.Date ();
							        String dateStr = dateFormat.format (date);
							        System.out.println("Date: " + dateStr);
							        try{
							        	Date date2 = dateFormat.parse (dateStr);
							        	sp.setInterestingnessDate(date2);
							        }catch(ParseException pe){
							        	pe.printStackTrace();
							        }
							        */
 
							        //sp.setMachineTags(new String[]{"geo:locality=\"san francisco\""});
							        sp.setText(t.getText());
							        //sp.setTags(new String[]{t.getText()});
							        sp.setSort(SearchParameters.RELEVANCE);
 
							        System.out.println("Flickr search for: \"" + t.getText() + "\"");
 
							        //Load flickr api key from file
							        String flickrApiKey = "";
							        String flickrSecret = "";
							        Properties properties = new Properties();
								    try {
								        properties.load(new FileInputStream(System.getProperty("user.dir") +File.separator+"examples"+File.separator+"flickrMT"+File.separator +"data"+File.separator + "FlickrApiKey.txt"));
								        flickrApiKey = properties.getProperty("FlickrApiKey", " ");
								        flickrSecret = properties.getProperty("FlickrSecret", " ");
								    } catch (Exception e) {
								    	System.err.println("Error while loading Settings.txt file. Using defaults.");
								    }
 
							        //Create flickr loader thread
							        final FlickrMTFotoLoader flickrLoader = new FlickrMTFotoLoader(app, flickrApiKey, flickrSecret, sp, 300);
							        flickrLoader.setFotoLoadCount(5);
							        //Define action when loader thread finished
							        flickrLoader.addProgressFinishedListener(new IMTEventListener(){
										public void processMTEvent(MTEvent mtEvent) {
											//Add the loaded fotos in the main drawing thread to
											//avoid threading problems
											registerPreDrawAction(new IPreDrawAction(){
												public void processAction() {
													MTImage[] fotos = flickrLoader.getMtFotos();
													for (int i = 0; i < fotos.length; i++) {
														MTImage card = fotos[i];
														card.setUseDirectGL(true);
														card.setDisplayCloseButton(true);
														card.setPositionGlobal(new Vector3D(Tools3D.getRandom(10, ConstantsAndSettings.getInstance().getScreenWidth()-100), Tools3D.getRandom(10, ConstantsAndSettings.getInstance().getScreenHeight()-50),0 )  );
														lassoProcessor.addClusterable(card); //make fotos lasso-able
														pictureLayer.addChild(card);
													}
													progressBar.setVisible(false);
												}
 
												public boolean isLoop() {
													return false;
												}
											});
										}
							        });
							        progressBar.setProgressInfoProvider(flickrLoader);
							        progressBar.setVisible(true);
							        //Run the thread
							        flickrLoader.start();
							        //Clear textarea
							        t.clear();
									break;
								default:
									break;
								}
							}
						}
					});
					keyb.addChild(flickrButton);
			        getCanvas().addChild(0, keyb);
					break;
				default:
					break;
				}
			}
		});
		this.getCanvas().addChild(pictureLayer);
		this.getCanvas().addChild(topLayer);
	}
 
 
 
 
	@Override
	public void drawAndUpdate(PGraphics graphics, long timeDelta) {
		super.drawAndUpdate(graphics, timeDelta);
	}
 
	@Override
	public void init() {
		app.registerKeyEvent(this);
	}
 
	@Override
	public void shutDown() {
		app.unregisterKeyEvent(this);
	}
 
	/**
	 * 
	 * @param e
	 */
	public void keyEvent(KeyEvent e){
		int evtID = e.getID();
		if (evtID != KeyEvent.KEY_PRESSED)
			return;
 
		switch (e.getKeyCode()){
		case KeyEvent.VK_BACK_SPACE:
			app.popScene();
			break;
			default:
				break;
		}
	}
}
Powered by MediaWiki contact