9 |
|
|
10 |
def p(*s): |
def p(*s): |
11 |
print 'ff.fenpdf.events.mousemenu::', s |
print 'ff.fenpdf.events.mousemenu::', s |
12 |
|
|
13 |
|
|
14 |
class MouseMenu: |
class MouseMenu: |
15 |
|
|
16 |
def __init__(self, fenPDF, states): |
def __init__(self, fenPDF, states): |
17 |
self.fenPDF = fenPDF |
self.fenPDF = fenPDF |
18 |
self.states = states |
self.states = states |
19 |
self.style = vob.GraphicsAPI.getInstance().getTextStyle('sans', 0, 12) |
self.style = vob.GraphicsAPI.getInstance().getTextStyle('sans', 0, 12) |
|
self.link = 0 |
|
20 |
self.makeMainList() |
self.makeMainList() |
|
self.isHide = 1 |
|
21 |
self.hideList() |
self.hideList() |
22 |
|
|
23 |
def makeMainList(self): |
def makeMainList(self): |
25 |
if self.states.selection.hasSelection(): |
if self.states.selection.hasSelection(): |
26 |
self.selectListVob.add('Transclude selection (PDF to canvas only)', |
self.selectListVob.add('Transclude selection (PDF to canvas only)', |
27 |
lambda: self.fenPDF.actions.menu.transclude()) |
lambda: self.fenPDF.actions.menu.transclude()) |
28 |
if self.link: |
if self.fenPDF.uistate.menu.originatingNode: |
29 |
self.selectListVob.add('Link node to left', |
self.selectListVob.add('<----- Link node to left', |
30 |
lambda: self.fenPDF.actions.menu.structLinkNodes(-1)) |
lambda: self.fenPDF.actions.menu.structLinkNodes(-1)) |
31 |
self.selectListVob.add('Link node to right', |
self.selectListVob.add('Link node to right ----->', |
32 |
lambda: self.fenPDF.actions.menu.structLinkNodes(1)) |
lambda: self.fenPDF.actions.menu.structLinkNodes(1)) |
|
self.selectListVob.add('Destroy this canvas', |
|
|
lambda: self.fenPDF.actions.menu.killPlane()) |
|
|
if self.link: |
|
33 |
self.selectListVob.add('Delete this node', |
self.selectListVob.add('Delete this node', |
34 |
lambda: self.fenPDF.actions.menu.deleteNode()) |
lambda: self.fenPDF.actions.menu.deleteNode()) |
35 |
|
|
36 |
|
self.selectListVob.add('Destroy this canvas', |
37 |
|
lambda: self.fenPDF.actions.menu.killPlane()) |
38 |
|
|
39 |
def makeBuoyList(self): |
def makeBuoyList(self): |
40 |
self.selectListVob = vob.vobs.SelectListVob(self.style) |
self.selectListVob = vob.vobs.SelectListVob(self.style) |
41 |
self.selectListVob.add('Unlink buoy', |
self.selectListVob.add('Unlink buoy', |
42 |
lambda: self.fenPDF.actions.menu.unlinkBuoy()) |
lambda: self.fenPDF.actions.menu.unlinkBuoy()) |
|
self.selectListVob.add('Go to home', 'home') |
|
43 |
|
|
44 |
def render(self, vs): |
def render(self, vs): |
45 |
cs = vs.orthoBoxCS(0, 'MOUSE_MENU',-100, self.x, self.y-self.h/2, |
cs = vs.orthoBoxCS(0, 'MOUSE_MENU',-100, self.x, self.y-self.h/2, |
47 |
vs.put(self.selectListVob, cs) |
vs.put(self.selectListVob, cs) |
48 |
|
|
49 |
def showList(self, x, y, who): |
def showList(self, x, y, who): |
50 |
|
p("showList") |
51 |
if who == 'buoymenu': |
if who == 'buoymenu': |
52 |
self.makeBuoyList() |
self.makeBuoyList() |
53 |
elif who == 'mainmenu': |
elif who == 'mainmenu': |
59 |
|
|
60 |
self.w, self.h = self.selectListVob.width, self.selectListVob.height |
self.w, self.h = self.selectListVob.width, self.selectListVob.height |
61 |
self.x, self.y = x, y |
self.x, self.y = x, y |
62 |
self.isHide = 0 |
self.fenPDF.uistate.menu.shown = 1 |
63 |
|
|
64 |
def hideList(self): |
def hideList(self): |
65 |
|
p("Hidelist") |
66 |
if hasattr(self.states, 'lastEvent'): |
if hasattr(self.states, 'lastEvent'): |
67 |
self.x, self.y = self.states.lastEvent.getX(), self.states.lastEvent.getY() |
self.x, self.y = self.states.lastEvent.getX(), self.states.lastEvent.getY() |
68 |
else: self.x, self.y = 0,0 |
else: self.x, self.y = 0,0 |
69 |
self.w, self.h = .0, .0 |
self.w, self.h = .0, .0 |
70 |
self.isHide = 1 |
self.fenPDF.uistate.menu.shown = 0 |
71 |
|
self.fenPDF.animation.regenerateVS() |
72 |
|
self.fenPDF.animation.noAnimation() |
73 |
|
vob.AbstractUpdateManager.chg() |
74 |
|
|
75 |
def mouse(self, ev): |
def getCSKey(self, ev): |
76 |
if self.isHide: return 0 |
if not self.fenPDF.uistate.menu.shown : return None |
77 |
vs = self.fenPDF.animation.lastVs |
vs = self.fenPDF.animation.lastVs |
78 |
|
|
79 |
cs = vs.matcher.getCS(0, 'MOUSE_MENU') |
cs = vs.matcher.getCS(0, 'MOUSE_MENU') |
80 |
p('cs:', cs) |
p('cs:', cs) |
81 |
key = vs.getKeyAt(cs, ev.getX(), ev.getY(), None) |
key = vs.getKeyAt(cs, ev.getX(), ev.getY(), None) |
82 |
|
return key |
83 |
|
|
84 |
|
def mousePressed(self, ev): |
85 |
|
"""A mouse pressed event was received. |
86 |
|
|
87 |
|
If it's outside the menu, pop the menu away. |
88 |
|
|
89 |
|
Returns: 1 if it was inside a menu, |
90 |
|
and should be eaten. |
91 |
|
""" |
92 |
|
key = self.getCSKey(ev) |
93 |
|
if self.fenPDF.uistate.menu.shown: |
94 |
|
if key == None: |
95 |
|
self.hideList() |
96 |
|
return 1 |
97 |
|
else: |
98 |
|
return 1 |
99 |
|
else: |
100 |
|
return 0 |
101 |
|
|
102 |
|
def mouseClicked(self, ev): |
103 |
|
"""A mouse clicked event was received. |
104 |
|
If it's in the menu, react, otherwise |
105 |
|
remove the menu. |
106 |
|
|
107 |
|
Returns: 1 if the event was consumed. |
108 |
|
""" |
109 |
|
key = self.getCSKey(ev) |
110 |
if key != None: |
if key != None: |
111 |
try: |
try: |
112 |
p('context menu hit!') |
p('context menu hit!') |
113 |
self.selectListVob.colorize(key, java.awt.Color.red) |
self.selectListVob.colorize(key, java.awt.Color.red) |
114 |
key = key.object |
key = key.object |
|
self.states.oldVS = vs |
|
115 |
key() |
key() |
|
self.states.oldVS = None |
|
116 |
self.hideList() |
self.hideList() |
117 |
finally: # If there's an error, we still need a new scene |
finally: # If there's an error, we still need a new scene |
118 |
self.fenPDF.animation.regenerateVS() |
self.fenPDF.animation.regenerateVS() |
119 |
return 1 |
return 1 |
120 |
return 0 |
else: |
121 |
|
if self.fenPDF.uistate.menu.shown: |
122 |
|
self.hideList() |
123 |
|
# We return 1 here too, since the button press |
124 |
|
# outside the menu should be eaten. |
125 |
|
return 1 |
126 |
|
return 0 |
127 |
|
|
128 |
|
|