diff --git a/apps/modes_gui b/apps/modes_gui index 11fb98a..985579e 100755 --- a/apps/modes_gui +++ b/apps/modes_gui @@ -31,6 +31,7 @@ from air_modes.gui_model import * import sqlite3 class mainwindow(QtGui.QMainWindow): + live_data_changed_signal = QtCore.pyqtSignal(QtCore.QString, name='liveDataChanged') def __init__(self): QtGui.QMainWindow.__init__(self) self.ui = Ui_MainWindow() @@ -116,6 +117,9 @@ class mainwindow(QtGui.QMainWindow): self.datamodel.dataChanged.connect(self.unmapped_widgets_dataChanged) self.ui.list_aircraft.selectionModel().currentRowChanged.connect(self.update_rssi_widget) + #hook up live data text box update signal + self.live_data_changed_signal.connect(self.on_append_live_data) + ############ widget update functions for non-mapped widgets ############ def update_heading_widget(self, index): if index.model() is not None: @@ -274,7 +278,7 @@ class mainwindow(QtGui.QMainWindow): self.livedata = air_modes.output_print(my_position) #add output for live data box #TODO: this doesn't handle large volumes of data well; i get segfaults. - #self.outputs.append(self.output_live_data) + self.outputs.append(self.output_live_data) #create SQL database for KML and dashboard displays self.dbwriter = air_modes.output_sql(my_position, self.dbname) @@ -304,11 +308,17 @@ class mainwindow(QtGui.QMainWindow): #self.kmlgen.join() #self.kmlgen = None + #slot to catch signal emitted by output_live_data (necessary for + #thread safety since output_live_data is called by another thread) + def on_append_live_data(self, msgstr): + self.ui.text_livedata.append(msgstr) + self.ui.text_livedata.verticalScrollBar().setSliderPosition(self.ui.text_livedata.verticalScrollBar().maximum()) + def output_live_data(self, msg): msgstr = self.livedata.parse(msg) if msgstr is not None: - self.ui.text_livedata.append(msgstr) - self.ui.text_livedata.verticalScrollBar().setSliderPosition(self.ui.text_livedata.verticalScrollBar().maximum()) + self.live_data_changed_signal.emit(msgstr) + #the output handler is a thread which runs the various registered output functions when there's a received message.