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;
}
}
}