[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ff-cvs] fenfire/org/fenfire fenpdf/fenpdf.py fenpdf/fen...
From: |
Tuomas J. Lukka |
Subject: |
[ff-cvs] fenfire/org/fenfire fenpdf/fenpdf.py fenpdf/fen... |
Date: |
Thu, 23 Oct 2003 15:09:58 -0400 |
CVSROOT: /cvsroot/fenfire
Module name: fenfire
Branch:
Changes by: Tuomas J. Lukka <address@hidden> 03/10/23 15:09:58
Modified files:
org/fenfire/fenpdf: fenpdf.py fenpdfcontext.py
org/fenfire/fenpdf/actions: menu.py mouse.py
org/fenfire/fenpdf/events: mousemenu.py
org/fenfire/structure: Ff.java ff.test
org/fenfire/util: AlphContent.java
org/fenfire/view: AreaSelectingView2D.java CanvasView2D.java
org/fenfire/view/buoy: AbstractMainNode2D.java
Added files:
org/fenfire/fenpdf/actions: eventgrabs.py
org/fenfire/functional: SuperLazyBase.java
Removed files:
org/fenfire/util: SuperLazyBase.java
Log message:
Arch sync
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/fenpdf.py.diff?tr1=1.16&tr2=1.17&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/fenpdfcontext.py.diff?tr1=1.35&tr2=1.36&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/actions/eventgrabs.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/actions/menu.py.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/actions/mouse.py.diff?tr1=1.10&tr2=1.11&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/fenpdf/events/mousemenu.py.diff?tr1=1.12&tr2=1.13&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/functional/SuperLazyBase.java?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/structure/Ff.java.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/structure/ff.test.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/util/AlphContent.java.diff?tr1=1.16&tr2=1.17&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/AreaSelectingView2D.java.diff?tr1=1.14&tr2=1.15&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/CanvasView2D.java.diff?tr1=1.32&tr2=1.33&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java.diff?tr1=1.50&tr2=1.51&r1=text&r2=text
Patches:
Index: fenfire/org/fenfire/fenpdf/actions/menu.py
diff -u fenfire/org/fenfire/fenpdf/actions/menu.py:1.5
fenfire/org/fenfire/fenpdf/actions/menu.py:1.6
--- fenfire/org/fenfire/fenpdf/actions/menu.py:1.5 Sat Oct 18 02:06:30 2003
+++ fenfire/org/fenfire/fenpdf/actions/menu.py Thu Oct 23 15:09:56 2003
@@ -134,21 +134,3 @@
self.fenPDF.structure.ff.setContent(node, obj)
- def beginTextScissor(self):
- """Begin to use scissor for text.
- """
- node = self.fenPDF.uistate.menu.originatingNode
- if node == None: return
- self.fenPDF.uistate.textScissor.setBegin(node,
self.fenPDF.uistate.menu.originatingTextOffset)
- if self.fenPDF.uistate.textScissor.end.node != node:
- self.fenPDF.uistate.textScissor.setEnd(None, None)
- p(self.fenPDF.uistate.textScissor.begin.node,
self.fenPDF.uistate.textScissor.begin.offset)
-
- def endTextScissor(self):
- """End to use scissor for text.
- """
- node = self.fenPDF.uistate.menu.originatingNode
- if node == None: return
- self.fenPDF.uistate.textScissor.setEnd(node,
self.fenPDF.uistate.menu.originatingTextOffset)
- if self.fenPDF.uistate.textScissor.begin.node != node:
- self.fenPDF.uistate.textScissor.setBegin(None, None)
Index: fenfire/org/fenfire/fenpdf/actions/mouse.py
diff -u fenfire/org/fenfire/fenpdf/actions/mouse.py:1.10
fenfire/org/fenfire/fenpdf/actions/mouse.py:1.11
--- fenfire/org/fenfire/fenpdf/actions/mouse.py:1.10 Tue Oct 14 10:21:40 2003
+++ fenfire/org/fenfire/fenpdf/actions/mouse.py Thu Oct 23 15:09:56 2003
@@ -44,6 +44,65 @@
def getOldVS():
return fenPDF.animation.lastVs
+ def getOffset(node, x,y):
+ """ Get the text offset in screen coordinates if placeable
+ is textplaceable.
+ """
+ viewFunction = fenPDF.views.getMultiplexerNodeContentFunction()
+ placeable = viewFunction.f(fenPDF.fen.graph, node)
+ if isinstance(placeable, vob.lava.placeable.TextPlaceable):
+ cs = getMainNode().getNodeCS(getOldVS(), node)
+ ptsIn = jarray.array([x,y,0], 'f')
+ ptsOut = jarray.zeros(3, 'f')
+ getOldVS().coords.inverseTransformPoints3(cs, ptsIn, ptsOut)
+ offs = placeable.getCursorPos(ptsOut[0], ptsOut[1])
+ return offs
+
+ def getOffsetXYY(node, canvasCS, offset):
+ """ Get the x, y top and t bottom of textplaceable offset
+ in canvas coordinates.
+ """
+ viewFunction = fenPDF.views.getMultiplexerNodeContentFunction()
+ placeable = viewFunction.f(fenPDF.fen.graph, node)
+ retArray = []
+ if isinstance(placeable, vob.lava.placeable.TextPlaceable):
+ cs = getMainNode().getNodeCS(getOldVS(), node)
+ xyy = jarray.zeros(3, 'f')
+ placeable.getCursorXYY(offset, xyy)
+ ptsIn = jarray.array([xyy[0],xyy[1],0], 'f')
+ ptsOut = jarray.zeros(3, 'f')
+ getOldVS().coords.transformPoints3(cs, ptsIn, ptsOut)
+ getOldVS().coords.inverseTransformPoints3(canvasCS, ptsOut, ptsOut)
+ retArray.append(ptsOut[0])
+ retArray.append(ptsOut[1])
+
+ ptsIn = jarray.array([xyy[0],xyy[2],0], 'f')
+ getOldVS().coords.transformPoints3(cs, ptsIn, ptsOut)
+ getOldVS().coords.inverseTransformPoints3(canvasCS, ptsOut, ptsOut)
+ #retArray.append(ptsOut[0])
+ retArray.append(ptsOut[1])
+ return retArray
+
+ def getTextWidthEdges(node, canvasCS):
+ """ Get left and rigth edges' coordinates of text placeable in
+ canvas coordinates.
+ """
+ viewFunction = fenPDF.views.getMultiplexerNodeContentFunction()
+ placeable = viewFunction.f(fenPDF.fen.graph, node)
+ retArray = []
+ if isinstance(placeable, vob.lava.placeable.TextPlaceable):
+ cs = getMainNode().getNodeCS(getOldVS(), node)
+ ptsOut = jarray.zeros(3, 'f')
+ ptsIn = jarray.array([0,0,0], 'f')
+ getOldVS().coords.transformPoints3(cs, ptsIn, ptsOut)
+ getOldVS().coords.inverseTransformPoints3(canvasCS, ptsOut, ptsOut)
+ retArray.append(ptsOut[0])
+
+ ptsIn = jarray.array([placeable.getWidth(),0,0], 'f')
+ getOldVS().coords.transformPoints3(cs, ptsIn, ptsOut)
+ getOldVS().coords.inverseTransformPoints3(canvasCS, ptsOut, ptsOut)
+ retArray.append(ptsOut[0])
+ return retArray
# Inside the action, we have the following symbols usable:
# fenPDF - the main FenPDF object
@@ -176,39 +235,50 @@
return self
def set(self, node, x,y):
self.evX, self.evY = x, y
- s = context.states
- self.node, self.pp, self.graph = node, s.ppActions, s.fen.graph
+ self.node = node
def changedRelative(self, x,y):
f = getMainNode().getFocus()
fX, fY = f.getPanX(), f.getPanY()
if self.node == None: raise 'No node!!!'
- g = self.graph
+ g = fenPDF.fen.graph
self.startPointX = ff.util.RDFUtil.getFloat(g, self.node,
CANVAS2D.x)
self.startPointY = ff.util.RDFUtil.getFloat(g, self.node,
CANVAS2D.y)
self.canvas = fenPDF.structure.canvas2d.getCanvas(self.node)
- fenPDF.events.eventHandler.eventGrabber =
self.theUltimateEventGrabberUtilToMoveNodesWhereEver
+ grabber = ff.fenpdf.actions.eventgrabs.Grabber()
# find out offset
viewFunction = fenPDF.views.getMultiplexerNodeContentFunction()
placeable = viewFunction.f(fenPDF.fen.graph, self.node)
if isinstance(placeable, vob.lava.placeable.TextPlaceable):
- p('text!')
cs = getMainNode().getNodeCS(getOldVS(), self.evX,self.evY)
- p('cs', cs)
ptsIn = jarray.array([self.evX,self.evY,0], 'f')
ptsOut = jarray.zeros(3, 'f')
getOldVS().coords.inverseTransformPoints3(cs, ptsIn, ptsOut)
offs = placeable.getCursorPos(ptsOut[0], ptsOut[1])
- p('offs', offs, ptsOut)
- if fenPDF.uistate.textScissor.isScissored(self.node, offs):
- p('shoul scissor now...')
- p('implement the scissoring here ;)')
+ if fenPDF.uistate.textScissors.isScissored(self.node, offs):
+ fenPDF.uistate.textScissors.fixOffset()
+ node = ff.swamp.Nodes.N()
+ enf = fenPDF.structure.ff \
+ .deleteRegion(self.node,
+
fenPDF.uistate.textScissors.begin.offset,
+ fenPDF.uistate.textScissors.end.offset)
+ fenPDF.structure.ff.setContent(node, enf)
+ grabber = ff.fenpdf.actions.eventgrabs.TextCloud(
+ fenPDF, self.canvas, self.node,
+ fenPDF.uistate.textScissors.begin.offset,
+ node)
+ fenPDF.uistate.textScissors.clear()
+ else:
+ grabber =
ff.fenpdf.actions.eventgrabs.NodeMoverActionGrabber(
+ fenPDF, self.startPointX, self.startPointY, self.node,
self.canvas)
+ else:
+ grabber = ff.fenpdf.actions.eventgrabs.NodeMoverActionGrabber(
+ fenPDF, self.startPointX, self.startPointY, self.node,
self.canvas)
+ fenPDF.events.eventHandler.eventGrabber = grabber.getEventGrabber()
- fenPDF.structure.canvas2d.removeNode(self.node)
- self.nodeCS = None
fenPDF.animation.noAnimation()
fenPDF.animation.regenerateVS()
@@ -230,32 +300,7 @@
vob.AbstractUpdateManager.chg()
return
- if ev.getType() == ev.MOUSE_DRAGGED:
- if dbg: p('drag')
- oldVS.coords.setTranslateParams(self.transCS, ev.getX(),
ev.getY())
- else:
- buoymanager = fenPDF.views.getBuoyManager()
- mainNode = buoymanager.findTopmostMainNode(oldVS, ev.getX(),
ev.getY())
- if mainNode == None or not
fenPDF.structure.canvas2d.isCanvas(mainNode.getPlane()):
- fenPDF.structure.canvas2d.placeOnCanvas(self.canvas,
self.node, self.startPointX, self.startPointY)
- else:
- xy = mainNode.getXYHit(getOldVS(), ev.getX(), ev.getY())
-
fenPDF.structure.canvas2d.placeOnCanvas(mainNode.getPlane(), self.node, xy[0],
xy[1])
- # temporarily solution, flush drags away...
- fenPDF.events.mouse.mainMouse.flush()
- fenPDF.events.eventHandler.eventGrabber = None
- fenPDF.animation.regenerateVS()
- vob.AbstractUpdateManager.chg()
-
- def createFlyingNode(self,oldVS):
- self.transCS = oldVS.translateCS(0,'NODE_CS', self.evX,self.evY)
- viewFunction = fenPDF.views.getMultiplexerNodeContentFunction()
- placeable = viewFunction.f(fenPDF.fen.graph, self.node)
- self.nodeCS = oldVS.orthoBoxCS(self.transCS,
- self.node, -1000,0,0, 1,1,
- placeable.getWidth(),
- placeable.getHeight())
- placeable.place(oldVS, self.nodeCS)
+
@@ -264,17 +309,40 @@
class SelectArea(vob.mouse.MouseDragListener,
vob.mouse.MousePressListener):
def pressed(self, x,y):
- """ dumb bersion of listener """
+ """ dumb version of listener """
return self
def startDrag(self, x,y):
self.oldxy = getMainNode().getXYHit(getOldVS(), x, y)
- p('old', self.oldxy)
+ self.node = getMainNode().getNodeOnPlane(getOldVS(), x,y)
+ offs = getOffset(self.node, x,y)
+ if dbg: p('old', self.oldxy, self.node, offs)
+ fenPDF.uistate.textScissors.setBegin(self.node, offs)
def drag(self, x, y):
+ if self.node != None:
+ offs = getOffset(self.node, x,y)
+ fenPDF.uistate.textScissors.setEnd(self.node, offs)
+ canvasCS = ff.view.CanvasView2D.getContainerCS(getOldVS(),
+
getMainNode().getBox2Screen())
+ canvasCS =
getOldVS().matcher.getCS(getMainNode().getBox2Screen(),
'AreaSelectingView_concat')
+ if dbg: p(getOffsetXYY(self.node, canvasCS, offs))
+
v = ff.util.lava.view.getView(getMainNode(),
ff.view.AreaSelectingView2D)
v.setCurrentPlane(getMainNode().getPlane())
xy = getMainNode().getXYHit(getOldVS(), x,y)
- v.setArea(self.oldxy[0], self.oldxy[1], xy[0], xy[1])
-
+ if not fenPDF.uistate.textScissors.isScissored(self.node):
+ v.setArea(self.oldxy[0], self.oldxy[1], xy[0], xy[1])
+ else:
+ if dbg: p('begin',fenPDF.uistate.textScissors.begin.offset,
+ 'end', fenPDF.uistate.textScissors.end.offset)
+ begin = getOffsetXYY(self.node, canvasCS,
+ fenPDF.uistate.textScissors.begin.offset)
+ end = getOffsetXYY(self.node, canvasCS,
+ fenPDF.uistate.textScissors.end.offset)
+ edge = getTextWidthEdges(self.node, canvasCS)
+ v.setTextArea(begin[0], begin[1], begin[2],
+ end[0], end[1], end[2],
+ edge[0], edge[1])
+
context.states.selection.setArea(
(self.oldxy[0], self.oldxy[1], xy[0], xy[1]),
getMainNode())
Index: fenfire/org/fenfire/fenpdf/events/mousemenu.py
diff -u fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.12
fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.13
--- fenfire/org/fenfire/fenpdf/events/mousemenu.py:1.12 Sat Oct 18 02:06:30 2003
+++ fenfire/org/fenfire/fenpdf/events/mousemenu.py Thu Oct 23 15:09:57 2003
@@ -45,11 +45,6 @@
if self.states.selection.hasSelection():
list.append(Item('Transclude selection (PDF to canvas only)',
lambda: self.fenPDF.actions.menu.transclude()))
- if self.fenPDF.uistate.menu.hasTextOffset():
- list.append(Item('Begin text scissor',
- lambda: self.fenPDF.actions.menu.beginTextScissor()))
- list.append(Item('End text scissor',
- lambda: self.fenPDF.actions.menu.endTextScissor()))
if self.fenPDF.uistate.menu.originatingNode:
list.append(Item('<----- Link node to left',
lambda: self.fenPDF.actions.menu.structLinkNodes(-1)))
Index: fenfire/org/fenfire/fenpdf/fenpdf.py
diff -u fenfire/org/fenfire/fenpdf/fenpdf.py:1.16
fenfire/org/fenfire/fenpdf/fenpdf.py:1.17
--- fenfire/org/fenfire/fenpdf/fenpdf.py:1.16 Sat Oct 18 02:06:29 2003
+++ fenfire/org/fenfire/fenpdf/fenpdf.py Thu Oct 23 15:09:56 2003
@@ -25,6 +25,9 @@
from org import fenfire as ff
import vob
+def p(*s):
+ print 'fenpdf.py::',s
+
class _Empty:
pass
@@ -120,9 +123,9 @@
self.__init__()
-class UIState_Scissor:
+class UIState_Scissors:
""" XXX
- States for text scissor
+ States for text scissors
begin
node
offset
@@ -134,28 +137,39 @@
Write only trough methods setBegin and setEnd.
"""
- class ScissorPoint:
+ class ScissorsPoint:
def __init__(self):
self.node = None
self.offset = None
def __init__(self):
- self.begin = self.ScissorPoint()
- self.end = self.ScissorPoint()
+ self.begin = self.ScissorsPoint()
+ self.end = self.ScissorsPoint()
+ def clear(self): self.__init__()
def setBegin(self, node, offset):
self.begin.node = node
self.begin.offset = offset
def setEnd(self, node, offset):
self.end.node = node
self.end.offset = offset
- def isScissored(self, node, offset):
+ def isScissored(self, node, offset=None):
if node == None: return 0
if self.begin.node == node and \
- self.end.node == node and \
- self.begin.offset <= offset and \
- self.end.offset >= offset:
- return 1
+ self.end.node == node:
+ if offset != None:
+ if self.begin.offset <= offset and \
+ self.end.offset >= offset or \
+ self.begin.offset >= offset and \
+ self.end.offset <= offset:
+ return 1
+ elif offset == None: return 1
return 0
+ def fixOffset(self):
+ if self.begin.node != None and self.begin.node == self.end.node:
+ if self.begin.offset > self.end.offset:
+ tmp = self.begin.offset
+ self.begin.offset = self.end.offset
+ self.end.offset = tmp
class FenPDF:
"""This class represents a complete fenpdf "application".
@@ -223,7 +237,7 @@
self.animation = AnimationState()
self.uistate = _Empty()
self.uistate.menu = UIState_Menu()
- self.uistate.textScissor = UIState_Scissor()
+ self.uistate.textScissors = UIState_Scissors()
self.structure.ff = structure_ff
Index: fenfire/org/fenfire/fenpdf/fenpdfcontext.py
diff -u fenfire/org/fenfire/fenpdf/fenpdfcontext.py:1.35
fenfire/org/fenfire/fenpdf/fenpdfcontext.py:1.36
--- fenfire/org/fenfire/fenpdf/fenpdfcontext.py:1.35 Sat Oct 18 02:06:29 2003
+++ fenfire/org/fenfire/fenpdf/fenpdfcontext.py Thu Oct 23 15:09:56 2003
@@ -132,8 +132,8 @@
height = 23
- # draw scissor points
- node = self.states.fenPDF.uistate.textScissor.begin.node
+ # draw scissors points
+ node = self.states.fenPDF.uistate.textScissors.begin.node
if node != None:
containerCS = canvas.getContainerCS(vs, into)
cs = vs.matcher.getCS(containerCS, node)
@@ -141,14 +141,14 @@
viewFunction =
self.states.fenPDF.views.getMultiplexerNodeContentFunction()
placeable = viewFunction.f(self.states.fen.graph, node)
- p('offset:',self.states.fenPDF.uistate.textScissor.begin.offset)
+ p('offset:',self.states.fenPDF.uistate.textScissors.begin.offset)
if isinstance(placeable, vob.lava.placeable.TextPlaceable):
-
placeable.getCursorXYY(self.states.fenPDF.uistate.textScissor.begin.offset, xy)
+
placeable.getCursorXYY(self.states.fenPDF.uistate.textScissors.begin.offset, xy)
- cs = vs.coords.ortho(cs, 0,xy[0],xy[2], height, -height)
+ cs = vs.coords.ortho(cs, 0,xy[0],xy[1], height, xy[1]-xy[2])
vs.put(vob.vobs.ContinuousLineVob(5, [.3,-.3,0 , 0,0,0 , 0,1,0
, .3,1.3,0], 0, 100, java.awt.Color.blue), cs)
- node = self.states.fenPDF.uistate.textScissor.end.node
+ node = self.states.fenPDF.uistate.textScissors.end.node
if node != None:
containerCS = canvas.getContainerCS(vs, into)
cs = vs.matcher.getCS(containerCS, node)
@@ -157,9 +157,9 @@
viewFunction =
self.states.fenPDF.views.getMultiplexerNodeContentFunction()
placeable = viewFunction.f(self.states.fen.graph, node)
if isinstance(placeable, vob.lava.placeable.TextPlaceable):
-
placeable.getCursorXYY(self.states.fenPDF.uistate.textScissor.end.offset, xy)
+
placeable.getCursorXYY(self.states.fenPDF.uistate.textScissors.end.offset, xy)
- cs = vs.coords.ortho(cs, 0,xy[0],xy[2], height, -height)
+ cs = vs.coords.ortho(cs, 0,xy[0],xy[1], height, xy[1]-xy[2])
vs.put(vob.vobs.ContinuousLineVob(5, [-.3,-.3,0 , 0,0,0 ,
0,1,0 , -.3,1.3,0], 0, 100, java.awt.Color.blue), cs)
Index: fenfire/org/fenfire/structure/Ff.java
diff -u fenfire/org/fenfire/structure/Ff.java:1.2
fenfire/org/fenfire/structure/Ff.java:1.3
--- fenfire/org/fenfire/structure/Ff.java:1.2 Sat Oct 18 02:06:31 2003
+++ fenfire/org/fenfire/structure/Ff.java Thu Oct 23 15:09:57 2003
@@ -104,6 +104,42 @@
return trIndex;
}
+
+ /** Insert an enfilade at the given index of node's current enfilade.
+ * @param node The node into whose enfilade to insert the given enfilade
+ * @param index index in node's enfilade.
+ * @param insertEnf The enfilade to insert.
+ */
+ public void insert(Object node, int index, Enfilade1D insertEnf) {
+ Enfilade1D old = getContent(node);
+ Enfilade1D enf = old.sub(0, index);
+ enf = enf.plus(insertEnf);
+ enf = enf.plus(old.sub(index));
+ setContent(node, enf);
+ }
+
+ /** Delete a region of a node's content enfilade and return
+ * the deleted region. Throws an error if begin index is
+ * bigger than end index.
+ * @param begin The beginning index of the region to be deleted.
+ * @param end The index after the region to be deleted.
+ * @return The deleted region of enfilade.
+ */
+ public Enfilade1D deleteRegion(Object node, int begin, int end) {
+ if (begin > end) throw new
+ Error("begin index '"+begin+"' bigger than end index '"+end+"'.");
+ Enfilade1D old = (Enfilade1D)getContent(node);
+ Enfilade1D enf = old.sub(0, begin);
+ enf = enf.plus(old.sub(end));
+
+ setContent(node, enf);
+
+ // return the "deleted" enfilade.
+ return old.sub(begin,end);
+ }
+
+
+
public void setContent(Object node, Enfilade1D enf) {
Literal lit = literalFromEnfilade(enf);
graph.set1_11X(node, FF.content, lit);
Index: fenfire/org/fenfire/structure/ff.test
diff -u fenfire/org/fenfire/structure/ff.test:1.2
fenfire/org/fenfire/structure/ff.test:1.3
--- fenfire/org/fenfire/structure/ff.test:1.2 Fri Sep 12 04:38:20 2003
+++ fenfire/org/fenfire/structure/ff.test Thu Oct 23 15:09:57 2003
@@ -1,3 +1,4 @@
+# -*-python-*-
#
# Copyright (c) 2003, Tuomas J. Lukka
# This file is part of Fenfire.
@@ -26,7 +27,8 @@
import java
def setUp():
- global graph, ffinstance, spanMaker, enfiladeMaker, enf1, enf2, node1,
node2
+ global graph, ffinstance, spanMaker, \
+ enfiladeMaker, enf1, enf2, node1, node2, sp1, sp3
graph = ff.swamp.impl.HashGraph()
@@ -63,3 +65,70 @@
# snc.set(node1, enf1)
# fen.model.getWriter("RDF/XML-ABBREV").write(fen.model,
# java.io.OutputStreamWriter(java.lang.System.out), None)
+
+def testInsert():
+ """ Test all enfilade insert cases.
+ """
+ # insert at index 0
+ ffinstance.setContent(node1, enf1)
+ ffinstance.insert(node1, 0, enf2)
+ assert ffinstance.getContent(node1) == \
+ enf2.plus(enf1)
+
+ # insert at index length
+ ffinstance.setContent(node1, enf1)
+ len = enf1.length()
+ ffinstance.insert(node1, len, enf2)
+ assert ffinstance.getContent(node1) == \
+ enf1.plus(enf2)
+
+ # insert at index length +1
+ ffinstance.setContent(node1, enf1)
+ len = enf1.length() + 1
+ test = 0
+ try:
+ ffinstance.insert(node1, len, enf2)
+ except:
+ test = 1
+ assert test == 1
+ assert ffinstance.getContent(node1) == enf1
+
+ # insert at index -1
+ ffinstance.setContent(node1, enf1)
+ test = 0
+ try:
+ ffinstance.insert(node1, -1, enf2)
+ except:
+ test = 1
+ assert test == 1
+ assert ffinstance.getContent(node1) == enf1
+
+
+def testDeleteRegion():
+ """ Test region deleting of enfilade
+ """
+ ffinstance.setContent(node1, enf1)
+
+ # begin > end
+ test = 0
+ try:
+ ffinstance.deleteRegion(node1, 2,1)
+ except:
+ test = 1
+ assert test == 1
+
+ # delete from beginning
+ ffinstance.setContent(node1, enf1)
+ len = enf1.length()
+ enf = ffinstance.deleteRegion(node1, 0, len)
+ assert enf == enf1
+ enf = ffinstance.getContent(node1)
+ assert enf.length() == 0
+
+ # delete "Foo"
+ ffinstance.setContent(node1, enf1)
+ enf = ffinstance.deleteRegion(node1, 0, 3)
+ assert enf == enfiladeMaker.makeEnfilade(sp1)
+ assert ffinstance.getContent(node1) == \
+ enfiladeMaker.makeEnfilade(sp3)
+
Index: fenfire/org/fenfire/util/AlphContent.java
diff -u fenfire/org/fenfire/util/AlphContent.java:1.16
fenfire/org/fenfire/util/AlphContent.java:1.17
--- fenfire/org/fenfire/util/AlphContent.java:1.16 Wed Sep 10 09:28:24 2003
+++ fenfire/org/fenfire/util/AlphContent.java Thu Oct 23 15:09:57 2003
@@ -37,7 +37,7 @@
*/
public class AlphContent {
public static boolean dbg = false;
- private static void pa(String s) { System.out.println("AlphContent:: "+s);
}
+ private static void p(String s) { System.out.println("AlphContent:: "+s); }
private Fen fen;
@@ -71,6 +71,7 @@
}
public void deleteText(Object node, int begin, int end) {
+ if (dbg) p("begin: "+begin+", end: "+end);
Enfilade1D old = (Enfilade1D)ff.getContent(node);
Enfilade1D enf = old.sub(0, begin);
enf = enf.plus(old.sub(end));
Index: fenfire/org/fenfire/view/AreaSelectingView2D.java
diff -u fenfire/org/fenfire/view/AreaSelectingView2D.java:1.14
fenfire/org/fenfire/view/AreaSelectingView2D.java:1.15
--- fenfire/org/fenfire/view/AreaSelectingView2D.java:1.14 Sun Aug 17
15:55:02 2003
+++ fenfire/org/fenfire/view/AreaSelectingView2D.java Thu Oct 23 15:09:57 2003
@@ -37,15 +37,148 @@
public static boolean dbg = false;
private static void p(String s) {
System.out.println("AreaSelectingView2D:: "+s); }
- public View2D getChildView2D() { return child; }
- protected View2D child;
+
+ private RectSelectionPainter rect = new RectSelectionPainter();
+ private TextSelectionPainter text = new TextSelectionPainter();
+ private SelectionPainter currentPainter = rect;
+
+ private interface SelectionPainter extends org.fenfire.view.lava.FastView {
+ void render(VobScene vs, int into);
+ void clear();
+ }
+
+ private class TextSelectionPainter implements SelectionPainter {
+ /* asfadasdfsadXXXXXXXXXX <-begin
+ * XXXXXXXXXXXXXXXXXXXXXX <-other
+ * XXXXasdfadsfasdfasdfsd <-end
+ * where X is selection
+ */
+
+ static private final String SELECT_BEGIN =
"AreaSelectingView_selection_end";
+ static private final String SELECT_OTHER =
"AreaSelectingView_selection";
+ static private final String SELECT_END =
"AreaSelectingView_selection_begin";
+
+ public void render(VobScene vs, int into) {
+ for (int i=0; i<pts.length; i++)
+ renderImpl(vs, into, i);
+ }
+ private int renderImpl(VobScene vs, int into, int index) {
+ int cs = -1;
+ switch(index) {
+ case 0: cs = vs.orthoCS(into, SELECT_BEGIN, 0, 1,2,3,4); break;
+ case 1: cs = vs.orthoCS(into, SELECT_OTHER, 0, 1,2,3,4); break;
+ case 2: cs = vs.orthoCS(into, SELECT_END, 0, 1,2,3,4); break;
+ default:
+ throw new Error("Impossible index!");
+ }
+ vs.put(pq, cs);
+ return cs;
+ }
+
+ public void chgFast(VobScene oldVS, int concatCs) {
+ int [] cs = new int[3];
+ cs[0] = oldVS.matcher.getCS(concatCs, SELECT_BEGIN);
+ cs[1] = oldVS.matcher.getCS(concatCs, SELECT_OTHER);
+ cs[2] = oldVS.matcher.getCS(concatCs, SELECT_END);
+
+ for (int i=0; i<cs.length; i++)
+ if (cs[i] < 1) {
+ if (dbg) p("index: "+i+", "+cs[i]+" is not possible!");
+ cs[i] = renderImpl(oldVS, concatCs, i);
+ }
+
+ for(int i=0; i<pts.length; i++)
+ oldVS.coords.setOrthoParams(cs[i], 0, pts[i][0], pts[i][1],
pts[i][2]-pts[i][0], pts[i][3]-pts[i][1]);
+ }
+
+ public void clear() {
+ for(int i=0; i<pts.length; i++)
+ for (int j=0; j<pts[i].length; j++) pts[i][j] = 0;
+ }
+
+ void set(float bx, float byTop, float byBot,
+ float ex, float eyTop, float eyBot,
+ float edgeL, float edgeR)
+ {
+ clear();
+ if (dbg) {
+ p("begin: "+bx+", "+byTop+", "+byBot);
+ p("end: "+ex+", "+eyTop+", "+eyBot);
+ p("edges: "+edgeL+", "+edgeR);
+ }
+ // keep up the good work
+ // we have at least two lines here..
+ if (byBot <= eyTop) {
+ if (dbg) p("at least two lines");
+ setArea(0,bx, byTop, edgeR, byBot);
+ setArea(1,edgeL,byBot,edgeR,eyTop);
+ setArea(2,edgeL, eyTop, ex, eyBot);
+ }
+ else if (eyBot <= byTop) {
+ setArea(0,ex, eyTop, edgeR, eyBot);
+ setArea(1,edgeL,eyBot,edgeR,byTop);
+ setArea(2,edgeL, byTop, bx, byBot);
+ }
+ // one line only
+ else {
+ if (dbg) p("one line");
+ setArea(0, bx,byTop, ex,eyBot);
+ }
+ }
+
+ private float[][] pts = new float[3][4];
+ private void setArea(int index, float x0, float y0, float x1, float y1)
{
+ pts[index][0] = x0; pts[index][1] = y0;
+ pts[index][2] = x1; pts[index][3] = y1;
+ }
+ }
+
+ private class RectSelectionPainter implements SelectionPainter {
+ static private final String SELECT = "AreaSelectingView_selection";
+
+ public void render(VobScene vs, int into) {
+ int cs = vs.orthoCS(into, SELECT, 0, 1,2,3,4);
+ vs.put(pq, cs);
+ }
+
+ public void clear() {
+ setArea(0,0,0,0);
+ }
+
+ public void chgFast(VobScene oldVS, int concatCs) {
+ int cs = oldVS.matcher.getCS(concatCs, SELECT);
+ if (cs < 1) throw new Error(cs+" is not possible!");
+ oldVS.coords.setOrthoParams(cs, 0, x0, y0, x1-x0, y1-y0);
+ }
+
+ private float x0,y0,x1,y1;
+ void setArea(float x0, float y0, float x1, float y1) {
+ this.x0 = x0; this.y0 = y0;
+ this.x1 = x1; this.y1 = y1;
+ }
+ }
+
+
+
- private float x0,y0,x1,y1;
+
+
+
+ /** Set text area.
+ * b prefix is begin, e prefix is end.
+ */
+ public void setTextArea(float bx, float byTop, float byBot,
+ float ex, float eyTop, float eyBot,
+ float edgeL, float edgeR) {
+ currentPainter = text;
+ text.set(bx,byTop, byBot, ex,eyTop,eyBot,edgeL, edgeR);
+ }
public void setArea(float x0, float y0, float x1, float y1) {
- this.x0 = x0; this.y0 = y0;
- this.x1 = x1; this.y1 = y1;
+ currentPainter = rect;
+ rect.setArea(x0,y0,x1,y1);
}
+
private Object current = null;
public void setCurrentPlane(Object obj) { current = obj; }
@@ -57,18 +190,12 @@
}
public AreaSelectingView2D(View2D child, java.awt.Color color) {
this.child = child;
- setArea(0,0,0,0);
-
paper = SpecialPapers.selectionPaper(color);
pq = GLRen.createFixedPaperQuad(paper, 0, 0, 1, 1, 0, 10, 10, 10);
}
- private final String CONCAT = "AreaSelectingView_concat";
- private final String SELECT = "AreaSelectingView_selection";
- public Object getSelectedObject(Object plane, float x, float y, float w,
float h) {
- return child.getSelectedObject(plane, x, y, w, h);
- }
+ static private final String CONCAT = "AreaSelectingView_concat";
public void render(VobScene vs, Object plane,
int matchingParent,
@@ -82,11 +209,10 @@
int paper2box = vs.invertCS(box2paper, "areaselectview_INv");
int paper2screen = vs.concatCS(box2screen, CONCAT,
paper2box);
- int cs = vs.orthoCS(paper2screen, SELECT, 0, 1,2,3,4);
- if (current != plane) setArea(0,0,0,0);
+ currentPainter.render(vs, paper2screen);
+ if (current != plane) currentPainter.clear();
chgFast(vs, box2screen);
- vs.put(pq, cs);
}
public void chgFast(VobScene oldVS, int parent) {
@@ -95,13 +221,16 @@
if (dbg) p("parent cs: "+parent);
int concatCs = oldVS.matcher.getCS(parent, CONCAT);
- int cs = oldVS.matcher.getCS(concatCs, SELECT);
- if (dbg) p("cs: "+cs);
-
- if (cs < 1) throw new Error(cs+" is not possible!");
+ if (dbg) p("conc: "+concatCs);
+ currentPainter.chgFast(oldVS, concatCs);
+ }
- oldVS.coords.setOrthoParams(cs, 0, x0,y0,x1-x0,y1-y0);
+ public Object getSelectedObject(Object plane, float x, float y, float w,
float h) {
+ return child.getSelectedObject(plane, x, y, w, h);
}
+
+ public View2D getChildView2D() { return child; }
+ protected View2D child;
public void getSize(Object plane, float[] wh) {
if(child != null)
Index: fenfire/org/fenfire/view/CanvasView2D.java
diff -u fenfire/org/fenfire/view/CanvasView2D.java:1.32
fenfire/org/fenfire/view/CanvasView2D.java:1.33
--- fenfire/org/fenfire/view/CanvasView2D.java:1.32 Tue Oct 14 10:21:41 2003
+++ fenfire/org/fenfire/view/CanvasView2D.java Thu Oct 23 15:09:57 2003
@@ -204,6 +204,19 @@
return oldvs.getCSAt(box2screen, x, y, xyout);
}
+ public int getNodeCS(VobScene oldVS,
+ Object node,
+ Object plane, int matchingParent,
+ int box2screen, int box2plane,
+ float[] xyout) {
+ int containerCS = getContainerCS(oldVS, box2screen);
+ int cs = oldVS.matcher.getCS(containerCS, node);
+ if (cs < 1) throw new Error(cs+" is not possible!");
+ return cs;
+ }
+
+
+
static public boolean hasCanvas(ConstGraph g, Object node) {
return g.find1_X11(CANVAS2D.contains, node) != null;
}
Index: fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java
diff -u fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java:1.50
fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java:1.51
--- fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java:1.50 Tue Oct 14
10:21:41 2003
+++ fenfire/org/fenfire/view/buoy/AbstractMainNode2D.java Thu Oct 23
15:09:58 2003
@@ -53,7 +53,8 @@
}
- /** The mouse controller associated with this main node. */
+ /** The mouse controller associated with this main node.
+ */
protected MouseMultiplexer mouseController;
/** An object representing a focus on a 2D plane.
@@ -103,6 +104,7 @@
}
+ public int getBox2Screen() { return box2screen; }
/** The box2screen coordinate system we set last.
*/
protected int box2screen = -1;
@@ -252,7 +254,32 @@
}
}
+ public int getNodeCS(VobScene oldVobScene, Object node) {
+
+ // XXX refactor me!
+
+ View2D view = getView2D();
+ while (view.getChildView2D() != null)
+ view = view.getChildView2D();
+
+ // XXX should this be in View2D?
+ if (view instanceof CanvasView2D) {
+
+ int cs = ((CanvasView2D)view)
+ .getNodeCS(oldVobScene, node,
+ plane, box2screen, box2screen,
+ box2paper, null);
+
+ if(dbg) p("CS is: "+cs);
+ return cs;
+ }
+ return -1;
+ }
+
public int getNodeCS(VobScene oldVobScene, float x, float y) {
+
+ // XXX refactor me!
+
View2D view = getView2D();
while (view.getChildView2D() != null)
view = view.getChildView2D();
@@ -272,6 +299,9 @@
}
public Object getNodeOnPlane(VobScene oldVobScene, float x, float y) {
+
+ // XXX refactor me!
+
int cs = getNodeCS(oldVobScene, x, y);
if(cs <= 1) return null;
Object obj = oldVobScene.matcher.getKey(cs);