// (c) Matti Katila package gzz.modules.pp; import gzz.*; import gzz.vob.VobScene; import gzz.vob.impl.*; import gzz.view.AbstractViewContext; import gzz.client.AbstractUpdateManager; import java.awt.event.*; /** Event handling, event objects.. */ public class PPMouseEvents { public static boolean dbg = false; private static void pa(String s) { System.out.println(s); } private PPView2 ppv; PPActions ppactions; Space space; private PPMouseEvents m_ev; // set from outside public VobScene vs; public AbstractViewContext context; public PPMouseEvents(PPView2 pv, PPActions pa, Space s) { this.ppv = pv; this.ppactions = pa; this.space = s; this.m_ev = this; // press state saving EventHandling.i().when_pressed = new SavePressState(); // Buttons EventHandling.i().assign("Add new paper", new NewPaper() ); EventHandling.i().assign("Delete paper", new DeletePaper() ); // Shortcut papers EventHandling.i().assign("Shortcut link", new ShortCutLink() ); // Link paper EventHandling.i().assign("Link CLICK", new LinkPaper() ); EventHandling.i().assign("Assoc link", new AssocLink() ); // Main paper EventHandling.i().assign("Click MAINVP", new SetCursorToMain() ); EventHandling.i().assign("Drag MAINVP", new DragMainVP() ); } /* Save press state * ================ */ protected float last_zoom, last_panx, last_pany; public class SavePressState implements EventHandling.EventMouseObj { public void event(MouseEvent ev, EventHandling.MousePressState p_state, Object[] obs) { m_ev.last_zoom = ppv.zoom; m_ev.last_panx = ppv.panx; m_ev.last_pany = ppv.pany; } } /* CLICKS! * ======= */ public class NewPaper implements EventHandling.EventMouseObj { public void event(MouseEvent ev, EventHandling.MousePressState p_state, Object[] obs) { try { pa("Add new paper!"); ppactions.newPaper(); } catch (Exception e) { pa(e.getMessage()); } AbstractUpdateManager.chg(); } } public class DeletePaper implements EventHandling.EventMouseObj { public void event(MouseEvent ev, EventHandling.MousePressState p_state, Object[] obs) { try { pa("Deleting paper!"); Cell c = context.getAccursed(); if (space.getHomeCell() != c) { ppactions.deletePaper(c.getId() ); context.setAccursed(space.getHomeCell()); } } catch (Exception e) { pa(e.getMessage()); } AbstractUpdateManager.chg(); } } public class ShortCutLink implements EventHandling.EventMouseObj { public void event(MouseEvent ev, EventHandling.MousePressState p_state, Object[] obs) { context.setAccursed((Cell)obs[0]); AbstractUpdateManager.chg(); } } public class LinkPaper implements EventHandling.EventMouseObj { public void event(MouseEvent ev, EventHandling.MousePressState p_state, Object[] obs) { context.setAccursed((Cell)obs[0]); AbstractUpdateManager.chg(); } } public class AssocLink implements EventHandling.EventMouseObj { public void event(MouseEvent ev, EventHandling.MousePressState p_state, Object[] obs) { // obs{ otherNote, Integer(dir) } try { pa("Assoc to paper!"); ppactions.assocNotes(context.getAccursed().getId(), ((Integer)obs[1]).intValue(), ((Cell)obs[0]).getId()); ppv.showLinkbuoys = false; } catch (Exception e) { pa(e.getMessage()); } AbstractUpdateManager.chg(); } } public class SetCursorToMain implements EventHandling.EventMouseObj { public void event(MouseEvent ev, EventHandling.MousePressState p_state, Object[] obs) { // obs{ mainctr, frame } int frameCS = ((Integer)obs[1]).intValue(); int mainctrCS = ((Integer)obs[0]).intValue(); float[] hit = new float[2]; int vobcs = vs.coords.getCSAt( frameCS, ev.getX(), ev.getY(), hit); if(vobcs < 0) { // No hit --> go to root paper cell, set pan context.setAccursed(context.getAccursed().h(ppv.d.contains)); float[] pt = new float[] { ev.getX(), ev.getY(), 0 }; // We must transform into Frame, and then the C2F coordinate system int frame = ((DefaultVobMatcher)vs.matcher).getCS(mainctrCS, "frame"); int c2f = ((DefaultVobMatcher)vs.matcher).getCS(mainctrCS, "C2F"); if(frame < 0 || c2f < 0) throw new Error("No cs point!"+frame+" "+c2f); // XXX vp, not frame! vs.coords.inverseTransformPoints3(mainctrCS, pt, pt); vs.coords.inverseTransformPoints3(c2f, pt, pt); ppv.panx = pt[0]; ppv.pany = pt[1]; AbstractUpdateManager.chg(); return ; } Object k = vs.matcher.getKey(vobcs); pa("Hit: "+vobcs+" "+k+" "+hit[0]+" "+hit[1]); if(!(k instanceof Cell)) { pa("Not a cell?!"); return ; } context.setAccursed((Cell)k); context.setCursorOffset(ppv.style.getOffsetInText(((Cell)k).t(), 1, hit[0])); AbstractUpdateManager.chg(); } } /* DRAGGING! * ========= */ public class DragMainVP implements EventHandling.EventMouseObj { public void event(MouseEvent ev, EventHandling.MousePressState p_state, Object[] obs) { if (p_state.getButtons() == ev.BUTTON3_MASK) { ppv.zoom = m_ev.last_zoom * (float) Math.exp((p_state.getY() - ev.getY())/150.0); pa(""+ppv.zoom); } else if (p_state.getButtons() == ev.BUTTON1_MASK) { ppv.panx = m_ev.last_panx - (ev.getX() - p_state.getX()); ppv.pany = m_ev.last_pany - (ev.getY() - p_state.getY()); } else return; /* if self.but == ev.BUTTON3_MASK: self.ppv.zoom = self.pzoom * math.exp( (self.press[1] - ev.getY())/150.0) print self.ppv.zoom elif self.but == ev.BUTTON1_MASK: self.ppv.panx = self.poffset[0] - (ev.getX() - self.press[0]) self.ppv.pany = self.poffset[1] - (ev.getY() - self.press[1]) else: return self.ppv.setZoomPan(self.vs) replaceNewScene(self.vs) AbstractUpdateManager.setNoAnimation() AbstractUpdateManager.chg() */ ppv.setZoomPan(vs); AbstractUpdateManager.setNoAnimation(); AbstractUpdateManager.chg(); } } }