mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-05 15:30:08 +08:00
[python] more cleanup
- pep8: 4spaces indentation - print_funtion - use 'in' instead of has_key for dicts - log stuff not tested...
This commit is contained in:
@@ -9,58 +9,57 @@ from ivy.std_api import *
|
||||
import logging
|
||||
|
||||
class Base:
|
||||
def __init__(self):
|
||||
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
||||
self.window.connect("destroy", self.destroy)
|
||||
def __init__(self):
|
||||
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
|
||||
self.window.connect("destroy", self.destroy)
|
||||
|
||||
self.entry = gtk.Entry()
|
||||
self.entry.set_width_chars(120)
|
||||
self.entry.connect("key-release-event", self.key_release_event)
|
||||
self.entry.show()
|
||||
self.entry = gtk.Entry()
|
||||
self.entry.set_width_chars(120)
|
||||
self.entry.connect("key-release-event", self.key_release_event)
|
||||
self.entry.show()
|
||||
|
||||
self.window.add(self.entry)
|
||||
self.window.show()
|
||||
self.ivy_init()
|
||||
self.ticks = 0
|
||||
self.window.add(self.entry)
|
||||
self.window.show()
|
||||
self.ivy_init()
|
||||
self.ticks = 0
|
||||
|
||||
def ontick(self):
|
||||
if self.ticks == 5:
|
||||
IvyStop()
|
||||
elif self.ticks <= 2:
|
||||
IvySendMsg("1 BAT " + self.text)
|
||||
self.ticks = self.ticks + 1
|
||||
def ontick(self):
|
||||
if self.ticks == 5:
|
||||
IvyStop()
|
||||
elif self.ticks <= 2:
|
||||
IvySendMsg("1 BAT " + self.text)
|
||||
self.ticks = self.ticks + 1
|
||||
|
||||
def ivy_init(self):
|
||||
logging.getLogger('Ivy').setLevel(logging.WARN)
|
||||
IvyInit("Log Annotate",
|
||||
"Annotate Ready Msg",
|
||||
0
|
||||
)
|
||||
def ivy_init(self):
|
||||
logging.getLogger('Ivy').setLevel(logging.WARN)
|
||||
IvyInit("Log Annotate",
|
||||
"Annotate Ready Msg",
|
||||
0)
|
||||
|
||||
def key_release_event(self, widget, event, data=None):
|
||||
if event.string == '\r': # Return
|
||||
self.text = self.entry.get_text()
|
||||
self.destroy(self, None)
|
||||
if event.string == '\033': # Escape
|
||||
self.destroy(self, None)
|
||||
return False
|
||||
def key_release_event(self, widget, event, data=None):
|
||||
if event.string == '\r': # Return
|
||||
self.text = self.entry.get_text()
|
||||
self.destroy(self, None)
|
||||
if event.string == '\033': # Escape
|
||||
self.destroy(self, None)
|
||||
return False
|
||||
|
||||
def delete_event(self, widget, event, data=None):
|
||||
return False
|
||||
def delete_event(self, widget, event, data=None):
|
||||
return False
|
||||
|
||||
def destroy(self, widget, data=None):
|
||||
gtk.main_quit()
|
||||
def destroy(self, widget, data=None):
|
||||
gtk.main_quit()
|
||||
|
||||
def main(self):
|
||||
IvyStart("")
|
||||
gtk.main()
|
||||
def main(self):
|
||||
IvyStart("")
|
||||
gtk.main()
|
||||
|
||||
if self.text:
|
||||
timerid = IvyTimerRepeatAfter(0, # number of time to be called
|
||||
100, # delay in ms between calls
|
||||
self.ontick # handler to call
|
||||
)
|
||||
IvyMainLoop()
|
||||
if self.text:
|
||||
timerid = IvyTimerRepeatAfter(0, # number of time to be called
|
||||
100, # delay in ms between calls
|
||||
self.ontick # handler to call
|
||||
)
|
||||
IvyMainLoop()
|
||||
|
||||
if __name__ == "__main__":
|
||||
base = Base()
|
||||
|
||||
@@ -16,74 +16,70 @@ import messages_xml_map
|
||||
|
||||
class OnboardLogTransformTool():
|
||||
def __init__(self):
|
||||
messages_xml_map.ParseMessages()
|
||||
self.data_types = { 'float' : ['f', 4],
|
||||
'uint8' : ['B', 1],
|
||||
'uint16' : ['H', 2],
|
||||
'uint32' : ['L', 4],
|
||||
'int8' : ['b', 1],
|
||||
'int16' : ['h', 2],
|
||||
'int32' : ['l', 4]
|
||||
}
|
||||
messages_xml_map.ParseMessages()
|
||||
self.data_types = { 'float' : ['f', 4],
|
||||
'uint8' : ['B', 1],
|
||||
'uint16' : ['H', 2],
|
||||
'uint32' : ['L', 4],
|
||||
'int8' : ['b', 1],
|
||||
'int16' : ['h', 2],
|
||||
'int32' : ['l', 4]
|
||||
}
|
||||
|
||||
def Unpack(self, data_fields, type, start, length):
|
||||
return struct.unpack(type, "".join(data_fields[start:start + length]))[0]
|
||||
|
||||
def ProcessLine(self, line):
|
||||
fields = line.strip().split(' ')
|
||||
[timestamp, pprz_tstamp, ac_id, msg_id] = fields[0:4]
|
||||
data_fields = map(lambda x: chr(int(x, 16)), fields[5:])
|
||||
ac_id = int(ac_id)
|
||||
timestamp = float(pprz_tstamp)
|
||||
msg_id = int(msg_id)
|
||||
fields = line.strip().split(' ')
|
||||
[timestamp, pprz_tstamp, ac_id, msg_id] = fields[0:4]
|
||||
data_fields = map(lambda x: chr(int(x, 16)), fields[5:])
|
||||
ac_id = int(ac_id)
|
||||
timestamp = float(pprz_tstamp)
|
||||
msg_id = int(msg_id)
|
||||
|
||||
# print "Next message: ", timestamp, pprz_tstamp, ac_id, msg_id
|
||||
# print messages_xml_map.message_dictionary_id_name.keys()
|
||||
# print messages_xml_map.message_dictionary_types.keys()
|
||||
|
||||
msg_name = messages_xml_map.message_dictionary_id_name['telemetry'][msg_id]
|
||||
msg_fields = messages_xml_map.message_dictionary_types['telemetry'][msg_id]
|
||||
# print "Next message: ", timestamp, pprz_tstamp, ac_id, msg_id
|
||||
# print messages_xml_map.message_dictionary_id_name.keys()
|
||||
# print messages_xml_map.message_dictionary_types.keys()
|
||||
|
||||
result = "%f %i %s " % (timestamp, ac_id, msg_name)
|
||||
msg_name = messages_xml_map.message_dictionary_id_name['telemetry'][msg_id]
|
||||
msg_fields = messages_xml_map.message_dictionary_types['telemetry'][msg_id]
|
||||
|
||||
field_offset = 0
|
||||
for field in msg_fields:
|
||||
if field[-2:] == "[]":
|
||||
baseType = field[:-2]
|
||||
array_length = int(self.Unpack(data_fields, 'B', field_offset, 1))
|
||||
field_offset = field_offset + 1
|
||||
for count in range(0, array_length):
|
||||
array_value = str(self.Unpack(data_fields, self.data_types[baseType][0], field_offset, self.data_types[baseType][1]))
|
||||
field_offset = field_offset + self.data_types[baseType][1]
|
||||
if (count == array_length - 1):
|
||||
result += array_value + " "
|
||||
else:
|
||||
result += array_value + ","
|
||||
else:
|
||||
result += str(self.Unpack(data_fields, self.data_types[field][0], field_offset, self.data_types[field][1])) + " "
|
||||
field_offset = field_offset + self.data_types[field][1]
|
||||
result = "%f %i %s " % (timestamp, ac_id, msg_name)
|
||||
|
||||
field_offset = 0
|
||||
for field in msg_fields:
|
||||
if field[-2:] == "[]":
|
||||
baseType = field[:-2]
|
||||
array_length = int(self.Unpack(data_fields, 'B', field_offset, 1))
|
||||
field_offset = field_offset + 1
|
||||
for count in range(0, array_length):
|
||||
array_value = str(self.Unpack(data_fields, self.data_types[baseType][0], field_offset, self.data_types[baseType][1]))
|
||||
field_offset = field_offset + self.data_types[baseType][1]
|
||||
if (count == array_length - 1):
|
||||
result += array_value + " "
|
||||
else:
|
||||
result += array_value + ","
|
||||
else:
|
||||
result += str(self.Unpack(data_fields, self.data_types[field][0], field_offset, self.data_types[field][1])) + " "
|
||||
field_offset = field_offset + self.data_types[field][1]
|
||||
|
||||
|
||||
if (field_offset > len(data_fields)):
|
||||
print "finished without parsing %s" % field
|
||||
break
|
||||
if (field_offset > len(data_fields)):
|
||||
print "finished without parsing %s" % field
|
||||
break
|
||||
|
||||
return result[:-1]
|
||||
return result[:-1]
|
||||
|
||||
def Run(self, logfile):
|
||||
# open log file
|
||||
INPUT = open(logfile, "r")
|
||||
for line in INPUT:
|
||||
print self.ProcessLine(line)
|
||||
|
||||
# print self.ProcessLine(line)
|
||||
# except:
|
||||
# pass
|
||||
INPUT.close()
|
||||
# open log file
|
||||
INPUT = open(logfile, "r")
|
||||
for line in INPUT:
|
||||
print self.ProcessLine(line)
|
||||
INPUT.close()
|
||||
|
||||
def main():
|
||||
log_transform = OnboardLogTransformTool()
|
||||
log_transform.Run(sys.argv[1])
|
||||
log_transform = OnboardLogTransformTool()
|
||||
log_transform.Run(sys.argv[1])
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
main()
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from __future__ import absolute_import, print_function
|
||||
|
||||
import wx
|
||||
import getopt
|
||||
import sys
|
||||
@@ -11,96 +13,96 @@ sys.path.append(os.getenv("PAPARAZZI_HOME") + "/sw/lib/python")
|
||||
import messages_tool
|
||||
|
||||
class MessagePicker(wx.Frame):
|
||||
def __init__(self, parent, callback, initIvy = True):
|
||||
wx.Frame.__init__(self, parent, name="MessagePicker", title=u'Message Picker', size=wx.Size(320,640))
|
||||
|
||||
self.aircrafts = {}
|
||||
self.callback = callback
|
||||
def __init__(self, parent, callback, initIvy = True):
|
||||
wx.Frame.__init__(self, parent, name="MessagePicker", title=u'Message Picker', size=wx.Size(320,640))
|
||||
|
||||
self.tree = wx.TreeCtrl(self)
|
||||
self.root = self.tree.AddRoot("Telemetry")
|
||||
self.tree.Bind(wx.EVT_LEFT_DCLICK, self.OnDoubleClick)
|
||||
self.tree.Bind(wx.EVT_CHAR, self.OnKeyChar)
|
||||
self.Bind( wx.EVT_CLOSE, self.OnClose)
|
||||
self.message_interface = messages_tool.IvyMessagesInterface(self.msg_recv, initIvy)
|
||||
self.aircrafts = {}
|
||||
self.callback = callback
|
||||
|
||||
def OnClose(self, event):
|
||||
self.message_interface.Stop()
|
||||
self.Destroy()
|
||||
self.tree = wx.TreeCtrl(self)
|
||||
self.root = self.tree.AddRoot("Telemetry")
|
||||
self.tree.Bind(wx.EVT_LEFT_DCLICK, self.OnDoubleClick)
|
||||
self.tree.Bind(wx.EVT_CHAR, self.OnKeyChar)
|
||||
self.Bind( wx.EVT_CLOSE, self.OnClose)
|
||||
self.message_interface = messages_tool.IvyMessagesInterface(self.msg_recv, initIvy)
|
||||
|
||||
def msg_recv(self, ac_id, name, values):
|
||||
self.tree.Expand(self.root)
|
||||
if not self.aircrafts.has_key(ac_id):
|
||||
ac_node = self.tree.AppendItem(self.root, str(ac_id))
|
||||
self.aircrafts[ac_id] = messages_tool.Aircraft(ac_id)
|
||||
self.aircrafts[ac_id].messages_book = ac_node
|
||||
def OnClose(self, event):
|
||||
self.message_interface.Stop()
|
||||
self.Destroy()
|
||||
|
||||
aircraft = self.aircrafts[ac_id]
|
||||
ac_node = aircraft.messages_book
|
||||
def msg_recv(self, ac_id, name, values):
|
||||
self.tree.Expand(self.root)
|
||||
if ac_id not in self.aircrafts:
|
||||
ac_node = self.tree.AppendItem(self.root, str(ac_id))
|
||||
self.aircrafts[ac_id] = messages_tool.Aircraft(ac_id)
|
||||
self.aircrafts[ac_id].messages_book = ac_node
|
||||
|
||||
if not aircraft.messages.has_key(name):
|
||||
msg_node = self.tree.AppendItem(ac_node, str(name))
|
||||
self.tree.SortChildren(ac_node)
|
||||
aircraft.messages[name] = messages_tool.Message("telemetry", name)
|
||||
for field in aircraft.messages[name].field_names:
|
||||
item = self.tree.AppendItem(msg_node, field)
|
||||
aircraft = self.aircrafts[ac_id]
|
||||
ac_node = aircraft.messages_book
|
||||
|
||||
def OnKeyChar(self, event):
|
||||
if event.GetKeyCode() != 13:
|
||||
return False
|
||||
node = self.tree.GetSelection()
|
||||
field_name = self.tree.GetItemText(node)
|
||||
if name not in aircraft.messages:
|
||||
msg_node = self.tree.AppendItem(ac_node, str(name))
|
||||
self.tree.SortChildren(ac_node)
|
||||
aircraft.messages[name] = messages_tool.Message("telemetry", name)
|
||||
for field in aircraft.messages[name].field_names:
|
||||
item = self.tree.AppendItem(msg_node, field)
|
||||
|
||||
parent = self.tree.GetItemParent(node)
|
||||
message_name = self.tree.GetItemText(parent)
|
||||
def OnKeyChar(self, event):
|
||||
if event.GetKeyCode() != 13:
|
||||
return False
|
||||
node = self.tree.GetSelection()
|
||||
field_name = self.tree.GetItemText(node)
|
||||
|
||||
grandparent = self.tree.GetItemParent(parent)
|
||||
ac_id = self.tree.GetItemText(grandparent)
|
||||
parent = self.tree.GetItemParent(node)
|
||||
message_name = self.tree.GetItemText(parent)
|
||||
|
||||
if node == self.root or parent == self.root or grandparent == self.root:
|
||||
# if not leaf, double click = expand
|
||||
if self.tree.IsExpanded(node):
|
||||
self.tree.Collapse(node)
|
||||
else:
|
||||
self.tree.Expand(node)
|
||||
return
|
||||
grandparent = self.tree.GetItemParent(parent)
|
||||
ac_id = self.tree.GetItemText(grandparent)
|
||||
|
||||
self.callback(int(ac_id), message_name, field_name)
|
||||
|
||||
def OnDoubleClick(self, event):
|
||||
node = self.tree.GetSelection()
|
||||
field_name = self.tree.GetItemText(node)
|
||||
if node == self.root or parent == self.root or grandparent == self.root:
|
||||
# if not leaf, double click = expand
|
||||
if self.tree.IsExpanded(node):
|
||||
self.tree.Collapse(node)
|
||||
else:
|
||||
self.tree.Expand(node)
|
||||
return
|
||||
|
||||
parent = self.tree.GetItemParent(node)
|
||||
message_name = self.tree.GetItemText(parent)
|
||||
self.callback(int(ac_id), message_name, field_name)
|
||||
|
||||
grandparent = self.tree.GetItemParent(parent)
|
||||
ac_id = self.tree.GetItemText(grandparent)
|
||||
def OnDoubleClick(self, event):
|
||||
node = self.tree.GetSelection()
|
||||
field_name = self.tree.GetItemText(node)
|
||||
|
||||
if node == self.root or parent == self.root or grandparent == self.root:
|
||||
# if not leaf, double click = expand
|
||||
if self.tree.IsExpanded(node):
|
||||
self.tree.Collapse(node)
|
||||
else:
|
||||
self.tree.Expand(node)
|
||||
return
|
||||
parent = self.tree.GetItemParent(node)
|
||||
message_name = self.tree.GetItemText(parent)
|
||||
|
||||
self.callback(int(ac_id), message_name, field_name)
|
||||
grandparent = self.tree.GetItemParent(parent)
|
||||
ac_id = self.tree.GetItemText(grandparent)
|
||||
|
||||
if node == self.root or parent == self.root or grandparent == self.root:
|
||||
# if not leaf, double click = expand
|
||||
if self.tree.IsExpanded(node):
|
||||
self.tree.Collapse(node)
|
||||
else:
|
||||
self.tree.Expand(node)
|
||||
return
|
||||
|
||||
self.callback(int(ac_id), message_name, field_name)
|
||||
|
||||
class TestApp(wx.App):
|
||||
def OnInit(self):
|
||||
self.main = MessagePicker(None, callback)
|
||||
self.main.Show()
|
||||
self.SetTopWindow(self.main)
|
||||
def OnInit(self):
|
||||
self.main = MessagePicker(None, callback)
|
||||
self.main.Show()
|
||||
self.SetTopWindow(self.main)
|
||||
|
||||
return True
|
||||
return True
|
||||
|
||||
def test():
|
||||
application = TestApp(0)
|
||||
application.MainLoop()
|
||||
|
||||
def callback(ac_id, message, field):
|
||||
print ac_id, message, field
|
||||
print(ac_id, message, field)
|
||||
|
||||
if __name__ == '__main__':
|
||||
test()
|
||||
|
||||
@@ -108,7 +108,7 @@ class PlotFrame(wx.Frame):
|
||||
|
||||
def __init__(self, parent):
|
||||
self._init_ctrls(parent)
|
||||
|
||||
|
||||
self.canvas = plotpanel.create(self.panel1, self)
|
||||
self.dynamic_menus = {}
|
||||
|
||||
@@ -128,21 +128,21 @@ class PlotFrame(wx.Frame):
|
||||
self.editMax.SetValue(str(max_))
|
||||
|
||||
def OnClose(self, event):
|
||||
# need to forward close to canvas so that ivy is shut down, otherwise ivy hangs the shutdown
|
||||
self.canvas.OnClose()
|
||||
self.Destroy()
|
||||
|
||||
# need to forward close to canvas so that ivy is shut down, otherwise ivy hangs the shutdown
|
||||
self.canvas.OnClose()
|
||||
self.Destroy()
|
||||
|
||||
def OnErase(self, event):
|
||||
pass
|
||||
|
||||
|
||||
def OnSize(self, event):
|
||||
self.canvas.OnSize( event.GetSize())
|
||||
self.canvas.OnSize( event.GetSize())
|
||||
|
||||
def OnSliderTimeCommandScroll(self, event):
|
||||
value = event.GetPosition()
|
||||
self.canvas.SetPlotInterval(value)
|
||||
self.editTime.SetValue( '%.3f' % (value/1000.0))
|
||||
|
||||
|
||||
def OnEditTimeTextEnter(self, event):
|
||||
try:
|
||||
value = int(float(event.GetString()) * 1000.0)
|
||||
@@ -169,7 +169,7 @@ class PlotFrame(wx.Frame):
|
||||
|
||||
def OnMenu1Item_pauseMenu(self, event):
|
||||
self.canvas.Pause(event.IsChecked())
|
||||
|
||||
|
||||
def AddCurve(self, menu_id, title, use_as_x = False):
|
||||
curveMenu = wx.Menu(title='')
|
||||
|
||||
@@ -186,7 +186,7 @@ class PlotFrame(wx.Frame):
|
||||
self.Bind(wx.EVT_MENU, self.OnMenuScaleCurve, id=menu_id*10+2)
|
||||
self.Bind(wx.EVT_MENU, self.OnMenuRealTime, id=menu_id*10+3)
|
||||
self.Bind(wx.EVT_MENU, self.OnMenuUseAsXAxis, id=menu_id*10+4)
|
||||
|
||||
|
||||
self.dynamic_menus[menu_id] = self.menuCurves.AppendSubMenu(submenu=curveMenu, text=title)
|
||||
|
||||
def OnMenuDeleteCurve(self, event):
|
||||
@@ -198,25 +198,25 @@ class PlotFrame(wx.Frame):
|
||||
|
||||
def OnMenuOffsetCurve(self, event):
|
||||
menu_id = (event.GetId()-1) / 10
|
||||
|
||||
|
||||
default_value = str(self.canvas.FindPlot(menu_id).offset)
|
||||
value = wx.GetTextFromUser("Enter a value to offset the plot", "Offset", default_value)
|
||||
try:
|
||||
value = float(value)
|
||||
self.canvas.OffsetPlot( menu_id, value)
|
||||
value = float(value)
|
||||
self.canvas.OffsetPlot( menu_id, value)
|
||||
except:
|
||||
pass
|
||||
pass
|
||||
|
||||
def OnMenuScaleCurve(self, event):
|
||||
menu_id = (event.GetId()-2) / 10
|
||||
|
||||
|
||||
default_value = str(self.canvas.FindPlot(menu_id).scale)
|
||||
value = wx.GetTextFromUser("Enter a factor to scale the plot", "Scale", default_value)
|
||||
try:
|
||||
value = float(value)
|
||||
self.canvas.ScalePlot( menu_id, value)
|
||||
value = float(value)
|
||||
self.canvas.ScalePlot( menu_id, value)
|
||||
except:
|
||||
pass
|
||||
pass
|
||||
|
||||
def OnMenuRealTime(self,event):
|
||||
menu_id = (event.GetId()-3) / 10
|
||||
@@ -227,15 +227,15 @@ class PlotFrame(wx.Frame):
|
||||
menu_id = (event_id-4) / 10
|
||||
value = event.IsChecked()
|
||||
|
||||
if value:
|
||||
# go through and clear the checks from any other curves
|
||||
for i in self.dynamic_menus:
|
||||
for item in self.dynamic_menus[i].GetSubMenu().GetMenuItems():
|
||||
if item.GetText() == u'_Use as X-axis' and event_id != item.GetId():
|
||||
item.Check(False)
|
||||
self.canvas.SetXAxis(menu_id)
|
||||
if value:
|
||||
# go through and clear the checks from any other curves
|
||||
for i in self.dynamic_menus:
|
||||
for item in self.dynamic_menus[i].GetSubMenu().GetMenuItems():
|
||||
if item.GetText() == u'_Use as X-axis' and event_id != item.GetId():
|
||||
item.Check(False)
|
||||
self.canvas.SetXAxis(menu_id)
|
||||
else:
|
||||
self.canvas.ClearXAxis()
|
||||
self.canvas.ClearXAxis()
|
||||
|
||||
|
||||
def OnEditMinText(self, event):
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,10 +7,10 @@ import sys
|
||||
import plotframe
|
||||
|
||||
modules ={u'PlotFrame': [1, 'Main frame of Application', u'plotframe.py'],
|
||||
u'messages_xml_map': [0, '', u'messages_xml_map.py'],
|
||||
u'plotpanel': [0, '', u'plotpanel.py'],
|
||||
u'realtimeplotapp': [0, '', u'realtimeplotapp.py'],
|
||||
u'textdroptarget': [0, '', u'textdroptarget.py']}
|
||||
u'messages_xml_map': [0, '', u'messages_xml_map.py'],
|
||||
u'plotpanel': [0, '', u'plotpanel.py'],
|
||||
u'realtimeplotapp': [0, '', u'realtimeplotapp.py'],
|
||||
u'textdroptarget': [0, '', u'textdroptarget.py']}
|
||||
|
||||
class RealTimePlotApp(wx.App):
|
||||
def OnInit(self):
|
||||
@@ -20,9 +20,9 @@ class RealTimePlotApp(wx.App):
|
||||
opts, args = getopt.getopt(sys.argv[1:], "p:",
|
||||
["plot"])
|
||||
for o,a in opts:
|
||||
if o in ("-p", "--plot"):
|
||||
[ac_id, message, field, color, use_x] = a.split(':')
|
||||
self.main.AddPlot(int(ac_id), message, field, color, bool(int(use_x)))
|
||||
if o in ("-p", "--plot"):
|
||||
[ac_id, message, field, color, use_x] = a.split(':')
|
||||
self.main.AddPlot(int(ac_id), message, field, color, bool(int(use_x)))
|
||||
return True
|
||||
|
||||
def main():
|
||||
|
||||
@@ -3,11 +3,11 @@ import wx
|
||||
class TextDropTarget(wx.TextDropTarget):
|
||||
""" This object implements Drop Target functionality for Text """
|
||||
def __init__(self, reference):
|
||||
""" Initialize the Drop Target, passing in the Object Reference to
|
||||
indicate what should receive the dropped text """
|
||||
wx.TextDropTarget.__init__(self)
|
||||
self.reference = reference
|
||||
|
||||
""" Initialize the Drop Target, passing in the Object Reference to
|
||||
indicate what should receive the dropped text """
|
||||
wx.TextDropTarget.__init__(self)
|
||||
self.reference = reference
|
||||
|
||||
def OnDropText(self, x, y, data):
|
||||
""" When text is dropped, send it to the object specified """
|
||||
self.reference.OnDropText(data)
|
||||
""" When text is dropped, send it to the object specified """
|
||||
self.reference.OnDropText(data)
|
||||
|
||||
Reference in New Issue
Block a user