7 |
import org.nongnu.storm as storm |
import org.nongnu.storm as storm |
8 |
from java.lang import Math |
from java.lang import Math |
9 |
from org.fenfire.vocab import RDF |
from org.fenfire.vocab import RDF |
10 |
|
from org.fenfire.vocab import STRUCTLINK as STRUCT |
11 |
|
from org.fenfire.vocab.lava import MINDSTRUCT as MIND |
12 |
from org.fenfire.util import Pair |
from org.fenfire.util import Pair |
13 |
|
|
14 |
# save and load |
# save and load |
15 |
from com.hp.hpl.mesa.rdf.jena.mem import ModelMem |
from com.hp.hpl.mesa.rdf.jena.mem import ModelMem |
16 |
import os.path |
import os.path |
17 |
|
|
18 |
|
# storm pool directory and mindmap file |
19 |
DIR = 'myFenfire/' |
DIR = 'myFenfire/' |
20 |
FILE = DIR+'mindmap.rdf' |
FILE = DIR+'mindmap.rdf' |
21 |
|
|
23 |
pool = storm.impl.DirPool(java.io.File(DIR), java.util.HashSet()) |
pool = storm.impl.DirPool(java.io.File(DIR), java.util.HashSet()) |
24 |
myalph = alph.impl.StormAlph(pool) |
myalph = alph.impl.StormAlph(pool) |
25 |
|
|
26 |
|
# set flag to load an old graph or creating new |
27 |
do_load_graph = 0 |
do_load_graph = 0 |
|
# automatic system for previous |
|
28 |
if os.path.isfile(FILE): |
if os.path.isfile(FILE): |
29 |
print 'Loading the RDF graph from the file %s' % (FILE) |
print 'Loading the RDF graph from the file %s.' % (FILE) |
30 |
do_load_graph = 1 |
do_load_graph = 1 |
31 |
else: |
else: |
32 |
print 'Creating a new RDF graph' |
print 'Creating a new RDF graph.' |
33 |
do_load_graph = 0 |
do_load_graph = 0 |
34 |
|
|
35 |
fen = ff.Fen() |
fen = ff.Fen() |
54 |
def p(*s): |
def p(*s): |
55 |
print "mind.py::", s |
print "mind.py::", s |
56 |
|
|
|
M = ff.vocab.lava.MINDSTRUCT() |
|
|
|
|
57 |
def rotatelist(list): |
def rotatelist(list): |
58 |
list.append(list.pop(0)) |
list.append(list.pop(0)) |
59 |
|
|
64 |
|
|
65 |
def insertText(self, text): |
def insertText(self, text): |
66 |
if self._acc == None: |
if self._acc == None: |
67 |
self.setAccursed(ff.util.RDFUtil.N(fen.graph, M.Data)) |
self.setAccursed(ff.util.RDFUtil.N(fen.graph, MIND.Data)) |
68 |
self.offset = 0 |
self.offset = 0 |
69 |
alphContent.insertText(self._acc, self.offset, text, 1) |
alphContent.insertText(self._acc, self.offset, text, 1) |
70 |
self.offset += len(text) |
self.offset += len(text) |
77 |
self.offset -= 1 |
self.offset -= 1 |
78 |
l = len(alphContent.getText(fen.graph, self._acc)) |
l = len(alphContent.getText(fen.graph, self._acc)) |
79 |
if self.offset == 0 and l == 0: |
if self.offset == 0 and l == 0: |
80 |
fen.graph.rm_111(self._acc, RDF.type, M.Data) |
fen.graph.rm_111(self._acc, RDF.type, MIND.Data) |
81 |
# try: |
try: |
82 |
# self.setAaccursed( |
self.setAaccursed( |
83 |
# fen.graph.findN_X11_Iter(RDF.type, M.Data).next()) |
fen.graph.findN_X11_Iter(RDF.type, MIND.Data).next()) |
84 |
# except: |
except: |
85 |
self.setAccursed(None) |
print "ei löytynyt" |
86 |
|
self.setAccursed(None) |
87 |
if dbg: p('offs:', self.offset, l) |
if dbg: p('offs:', self.offset, l) |
88 |
|
|
89 |
def setAccursed(self, node): |
def setAccursed(self, node): |
97 |
return self._acc |
return self._acc |
98 |
|
|
99 |
def rmLinkTo(self, obj, with): |
def rmLinkTo(self, obj, with): |
100 |
iter = fen.graph.findN_11X_Iter(obj, M.link) |
iter = fen.graph.findN_11X_Iter(obj, STRUCT.linkedTo) |
101 |
try: |
try: |
102 |
while (iter.hasNext()): |
while (iter.hasNext()): |
103 |
if with == iter.next(): |
if with == iter.next(): |
104 |
fen.graph.rm_111(obj, M.link, with) |
fen.graph.rm_111(obj, STRUCT.linkedTo, with) |
105 |
iter = fen.graph.findN_11X_Iter(with, M.link) |
iter = fen.graph.findN_11X_Iter(with, STRUCT.linkedTo) |
106 |
while (iter.hasNext()): |
while (iter.hasNext()): |
107 |
if obj == iter.next(): |
if obj == iter.next(): |
108 |
fen.graph.rm_111(with, M.link, obj) |
fen.graph.rm_111(with, STRUCT.linkedTo, obj) |
109 |
except: pass |
except: pass |
110 |
|
|
111 |
def isLinked(self, obj): |
def isLinked(self, obj): |
112 |
iter = fen.graph.findN_11X_Iter(obj, M.link) |
iter = fen.graph.findN_11X_Iter(obj, STRUCT.linkedTo) |
113 |
if iter.hasNext(): return 1 |
if iter.hasNext(): return 1 |
114 |
iter = fen.graph.findN_X11_Iter(M.link, obj) |
iter = fen.graph.findN_X11_Iter(STRUCT.linkedTo, obj) |
115 |
if iter.hasNext(): return 1 |
if iter.hasNext(): return 1 |
116 |
return 0 |
return 0 |
117 |
|
|
118 |
def isLinkedTo(self, obj, obj2): |
def isLinkedTo(self, obj, obj2): |
119 |
iter = fen.graph.findN_11X_Iter(obj, M.link) |
iter = fen.graph.findN_11X_Iter(obj, STRUCT.linkedTo) |
120 |
while (iter.hasNext()): |
while (iter.hasNext()): |
121 |
if obj2 == iter.next(): return 1 |
if obj2 == iter.next(): return 1 |
122 |
iter = fen.graph.findN_11X_Iter(obj2, M.link) |
iter = fen.graph.findN_11X_Iter(obj2, STRUCT.linkedTo) |
123 |
while (iter.hasNext()): |
while (iter.hasNext()): |
124 |
if obj == iter.next(): return 1 |
if obj == iter.next(): return 1 |
125 |
return 0 |
return 0 |
130 |
self.mm = MindMap() |
self.mm = MindMap() |
131 |
if do_load_graph: |
if do_load_graph: |
132 |
print "Setting accursed node." |
print "Setting accursed node." |
133 |
self.center = fen.graph.findN_X1A_Iter(M.link).next() |
self.center = fen.graph.findN_X1A_Iter(STRUCT.linkedTo).next() |
134 |
else: self.center = None |
else: self.center = None |
135 |
self.scumm = [ 'go', 'link', 'unlink' ] |
self.scumm = [ 'go', 'link', 'unlink' ] |
136 |
|
|
170 |
elif self.mm.isLinkedTo(obj, self.center): |
elif self.mm.isLinkedTo(obj, self.center): |
171 |
pass |
pass |
172 |
else: |
else: |
173 |
fen.graph.add(self.center, M.link, obj) |
fen.graph.add(self.center, STRUCT.linkedTo, obj) |
174 |
pass |
pass |
175 |
elif c == 'unlink': |
elif c == 'unlink': |
176 |
if obj == self.center: |
if obj == self.center: |
187 |
elif key == 'Backspace': |
elif key == 'Backspace': |
188 |
if self.mm.getAccursed() != None: |
if self.mm.getAccursed() != None: |
189 |
self.mm.deleteText() |
self.mm.deleteText() |
190 |
if self.mm.getAccursed() == None: |
# if self.mm.getAccursed() == None: |
191 |
self.center = None |
# self.center = None |
192 |
elif key == "Ctrl-S": |
elif key == "Ctrl-S": |
193 |
p("going to save"); |
p("going to save"); |
194 |
|
|
217 |
vs.put(background((1, 1, 1))) |
vs.put(background((1, 1, 1))) |
218 |
|
|
219 |
unused = [] |
unused = [] |
220 |
iter = fen.graph.findN_X11_Iter(RDF.type, M.Data) |
iter = fen.graph.findN_X11_Iter(RDF.type, MIND.Data) |
221 |
while (iter.hasNext()): |
while (iter.hasNext()): |
222 |
obj = iter.next() |
obj = iter.next() |
223 |
if self.mm.isLinked(obj): continue |
if self.mm.isLinked(obj): continue |
244 |
|
|
245 |
def doMindMap(self, vs, node, x, y, deepnes = 0): |
def doMindMap(self, vs, node, x, y, deepnes = 0): |
246 |
links = [] |
links = [] |
247 |
iter = fen.graph.findN_11X_Iter(node, M.link) |
iter = fen.graph.findN_11X_Iter(node, STRUCT.linkedTo) |
248 |
while iter.hasNext(): |
while iter.hasNext(): |
249 |
links.append(iter.next()) |
links.append(iter.next()) |
250 |
iter = fen.graph.findN_X11_Iter(M.link, node) |
iter = fen.graph.findN_X11_Iter(STRUCT.linkedTo, node) |
251 |
while iter.hasNext(): |
while iter.hasNext(): |
252 |
links.append(iter.next()) |
links.append(iter.next()) |
253 |
|
|
320 |
|
|
321 |
class MindData: |
class MindData: |
322 |
def place(self, mm, key, vs, cs, rect=0): |
def place(self, mm, key, vs, cs, rect=0): |
323 |
wi, h = vs.size.width, vs.size.height |
p = nodeview.f(fen.graph, key) |
324 |
x0,y0 = wi/2.0, h/2.0 |
|
325 |
|
# wi, h = vs.size.width, vs.size.height |
326 |
|
# x0,y0 = wi/2.0, h/2.0 |
327 |
box = jarray.zeros(2, 'f') |
box = jarray.zeros(2, 'f') |
328 |
vs.coords.getSqSize(cs, box) |
vs.coords.getSqSize(cs, box) |
329 |
bx, by = box[0], box[1] |
bx, by = box[0], box[1] |
343 |
# put the text |
# put the text |
344 |
cs = vs.translateCS(cs, "TR", 0, by*0.3 ) |
cs = vs.translateCS(cs, "TR", 0, by*0.3 ) |
345 |
|
|
|
p = nodeview.f(fen.graph, key) |
|
|
|
|
346 |
# text = vob.vobs.TextVob(textstyle, alphContent |
# text = vob.vobs.TextVob(textstyle, alphContent |
347 |
# .getText(fen.graph,key), 0, |
# .getText(fen.graph,key), 0, |
348 |
# color) |
# color) |