diff -r 0ba3d9cd61e8 -r 3290eff761f1 ProjectController.py --- a/ProjectController.py Wed Mar 13 12:34:25 2013 +0900 +++ b/ProjectController.py Wed Mar 13 23:17:30 2013 +0100 @@ -85,9 +85,9 @@ PLCControler.__init__(self) self.MandatoryParams = None - self.SetAppFrame(frame, logger) self._builder = None self._connector = None + self.SetAppFrame(frame, logger) self.iec2c_path = os.path.join(base_folder, "matiec", "iec2c"+(".exe" if wx.Platform == '__WXMSW__' else "")) self.ieclib_path = os.path.join(base_folder, "matiec", "lib") @@ -113,7 +113,6 @@ self.DebugThread = None self.debug_break = False self.previous_plcstate = None - self.previous_log_count = [None]*LogLevelsCount # copy ConfNodeMethods so that it can be later customized self.StatusMethods = [dic.copy() for dic in self.StatusMethods] @@ -137,6 +136,8 @@ self.StatusTimer = None if frame is not None: + frame.LogViewer.SetLogSource(self._connector) + # Timer to pull PLC status ID_STATUSTIMER = wx.NewId() self.StatusTimer = wx.Timer(self.AppFrame, ID_STATUSTIMER) @@ -281,7 +282,7 @@ """ if os.path.basename(ProjectPath) == "": ProjectPath = os.path.dirname(ProjectPath) - # Verify that project contains a PLCOpen program + # Verify that project contains a PLCOpen program plc_file = os.path.join(ProjectPath, "plc.xml") if not os.path.isfile(plc_file): return _("Chosen folder doesn't contain a program. It's not a valid project!") @@ -1077,36 +1078,10 @@ self.CompareLocalAndRemotePLC() def UpdatePLCLog(self, log_count): - if log_count : - to_console = [] - for level, count, prev in zip(xrange(LogLevelsCount), log_count,self.previous_log_count): - if count is not None and prev != count: - # XXX replace dump to console with dedicated log panel. - dump_end = max( # request message sent after the last one we already got - prev - 1 if prev is not None else -1, - count - 100) # 100 is purely arbitrary number - # dedicated panel should only ask for a small range, - # depending on how user navigate in the panel - # and only ask for last one in follow mode - for msgidx in xrange(count-1, dump_end,-1): - answer = self._connector.GetLogMessage(level, msgidx) - if answer is not None : - msg, tick, tv_sec, tv_nsec = answer - to_console.insert(0,( - (tv_sec, tv_nsec), - '%d|%s.%9.9d|%s(%s)'%( - int(tick), - str(datetime.fromtimestamp(tv_sec)), - tv_nsec, - msg, - LogLevels[level]))) - else: - break; - self.previous_log_count[level] = count - if to_console: - to_console.sort() - self.logger.write("\n".join(zip(*to_console)[1]+('',))) - + if log_count: + if self.AppFrame is not None: + self.AppFrame.LogViewer.SetLogCounters(log_count) + def UpdateMethodsFromPLCStatus(self): status = None if self._connector is not None: @@ -1115,7 +1090,7 @@ status, log_count = PLCstatus self.UpdatePLCLog(log_count) if status is None: - self._connector = None + self._SetConnector(None) status = "Disconnected" if(self.previous_plcstate != status): for args in { @@ -1303,6 +1278,7 @@ else: plc_status = None debug_getvar_retry += 1 + #print [dict.keys() for IECPath, (dict, log, status, fvalue) in self.IECdebug_datas.items()] if plc_status == "Started": self.IECdebug_lock.acquire() if len(debug_vars) == len(self.TracedIECPath): @@ -1341,7 +1317,6 @@ def _connect_debug(self): self.previous_plcstate = None - self.previous_log_count = [None]*LogLevelsCount if self.AppFrame: self.AppFrame.ResetGraphicViewers() self.RegisterDebugVarToConnector() @@ -1373,6 +1348,11 @@ wx.CallAfter(self.UpdateMethodsFromPLCStatus) + def _SetConnector(self, connector): + self._connector = connector + if self.AppFrame is not None: + self.AppFrame.LogViewer.SetLogSource(connector) + def _Connect(self): # don't accept re-connetion if already connected if self._connector is not None: @@ -1417,7 +1397,7 @@ # Get connector from uri try: - self._connector = connectors.ConnectorFactory(uri, self) + self._SetConnector(connectors.ConnectorFactory(uri, self)) except Exception, msg: self.logger.write_error(_("Exception while connecting %s!\n")%uri) self.logger.write_error(traceback.format_exc()) @@ -1477,7 +1457,7 @@ def _Disconnect(self): - self._connector = None + self._SetConnector(None) self.StatusTimer.Stop() wx.CallAfter(self.UpdateMethodsFromPLCStatus) @@ -1522,8 +1502,6 @@ else: self.logger.write_error(_("No PLC to transfer (did build succeed ?)\n")) - self.previous_log_count = [None]*LogLevelsCount - wx.CallAfter(self.UpdateMethodsFromPLCStatus) StatusMethods = [