1 import cgi
2
3 import vqt.main as vq_main
4 import vqt.colors as vq_colors
5 import envi.qt.html as e_q_html
6 import envi.memcanvas as e_memcanvas
7
8 qt_horizontal = 1
9 qt_vertical = 2
10
11 from PyQt4 import QtCore, QtGui, QtWebKit
12 from vqt.main import idlethread, idlethreadsync
13
14
15
16
17 KEY_BACKSPACE = 0x1000003
20
21 - def __init__(self, mem, syms=None, parent=None):
22 QtWebKit.QWebView.__init__(self, parent=parent)
23 e_memcanvas.MemoryCanvas.__init__(self, mem, syms=syms)
24
25 self.setContent(e_q_html.template, 'application/xhtml+xml')
26
27 frame = self.page().mainFrame()
28 self._canv_cache = None
29 self._canv_rend_middle = False
30
31 self._canv_curva = None
32 self._canv_rendtagid = '#memcanvas'
33 self._canv_hotkeys = {}
34
35 self.page().mainFrame().addToJavaScriptWindowObject('vnav', self)
36
38 key = event.key()
39 txt = str(event.text())
40
41
42 handler = self._canv_hotkeys.get(txt)
43 if handler == None:
44 handler = self._canv_hotkeys.get(key)
45
46 if handler != None:
47 handler(self, key)
48 event.accept()
49
50 return QtWebKit.QWebView.keyPressEvent(self, event)
51
54
56
57 if self._canv_rend_middle:
58 vmap = self.mem.getMemoryMap(va)
59 origva = va
60 va = max(va - size, vmap[0])
61 size += size
62
63 ret = e_memcanvas.MemoryCanvas.renderMemory(self, va, size, rend=rend)
64
65 if self._canv_rend_middle:
66 self._scrollToVa(origva)
67
68 return ret
69
70 @idlethread
74
77
83
85 self._add_raw('<a name="viv:0x%.8x" id="a_%.8x">' % (va,va))
86
89
91
92 self._canv_cache = ''
93 frame = self.page().mainFrame()
94 elem = frame.findFirstElement('a#a_%.8x' % valist[0][0])
95 elem.prependOutside('<update id="updatetmp"></update>')
96
97 for va,size in valist:
98 elem = frame.findFirstElement('a#a_%.8x' % va)
99 elem.removeFromDocument()
100
102 elem = self.page().mainFrame().findFirstElement('update#updatetmp')
103 elem.appendOutside(self._canv_cache)
104 elem.removeFromDocument()
105 self._canv_cache = None
106
108 self._canv_cache = ''
109 self._canv_ppjump = self._canv_rendvas[0][0]
110
112 frame = self.page().mainFrame()
113 elem = frame.findFirstElement(self._canv_rendtagid)
114 elem.prependInside(self._canv_cache)
115 self._canv_cache = None
116 self._scrollToVa(self._canv_ppjump)
117
119 self._canv_cache = ''
120
122 frame = self.page().mainFrame()
123 elem = frame.findFirstElement(self._canv_rendtagid)
124 elem.appendInside(self._canv_cache)
125 self._canv_cache = None
126
135
137
138 return ('<va class="va_0x%.8x" ondblclick="vagoto(this)" oncontextmenu="vaclick(this)" onclick="vaclick(this)">' % va, '</va>')
139
140 @QtCore.pyqtSlot(str)
142
143 if self._canv_navcallback:
144 self._canv_navcallback(expr)
145
146 @QtCore.pyqtSlot(str)
148 self._canv_curva = int(str(vastr), 0)
149
150
151 @idlethread
153 frame = self.page().mainFrame()
154 elem = frame.findFirstElement(self._canv_rendtagid)
155 elem.appendInside(text)
156
157 @idlethread
162
164
165 if self._canv_cache != None:
166 self._canv_cache += text
167 return
168
169 self._appendInside(text)
170 if self._canv_scrolled:
171 self._scrollToEnd()
172
173 - def addText(self, text, tag=None):
174 text = cgi.escape(text)
175 text = text.replace('\n','<br/>')
176 text = text.replace(' ', ' ')
177
178 if tag != None:
179 otag, ctag = tag
180 text = otag + text + ctag
181
182 self._add_raw(text)
183
184 @idlethreadsync
186 frame = self.page().mainFrame()
187 elem = frame.findFirstElement(self._canv_rendtagid)
188 elem.setInnerXml('')
189