ProjectController.py
changeset 782 6f0e10085df9
parent 781 cdc6393705ce
child 784 a1d970365e41
equal deleted inserted replaced
781:cdc6393705ce 782:6f0e10085df9
    15 import targets
    15 import targets
    16 import connectors
    16 import connectors
    17 from util.misc import CheckPathPerm, GetClassImporter
    17 from util.misc import CheckPathPerm, GetClassImporter
    18 from util.MiniTextControler import MiniTextControler
    18 from util.MiniTextControler import MiniTextControler
    19 from util.ProcessLogger import ProcessLogger
    19 from util.ProcessLogger import ProcessLogger
       
    20 from util.FileManagementPanel import FileManagementPanel
    20 from PLCControler import PLCControler
    21 from PLCControler import PLCControler
    21 from TextViewer import TextViewer
    22 from TextViewer import TextViewer
    22 from plcopen.structures import IEC_KEYWORDS
    23 from plcopen.structures import IEC_KEYWORDS
    23 from targets.typemapping import DebugTypesSize
    24 from targets.typemapping import DebugTypesSize
    24 from util.discovery import DiscoveryDialog
    25 from util.discovery import DiscoveryDialog
    25 from ConfigTreeNode import ConfigTreeNode
    26 from ConfigTreeNode import ConfigTreeNode
    26 from ProjectNodeEditor import ProjectNodeEditor
    27 from ProjectNodeEditor import ProjectNodeEditor
       
    28 from utils.BitmapLibrary import GetBitmap
    27 
    29 
    28 base_folder = os.path.split(sys.path[0])[0]
    30 base_folder = os.path.split(sys.path[0])[0]
    29 
    31 
    30 MATIEC_ERROR_MODEL = re.compile(".*\.st:(\d+)-(\d+)\.\.(\d+)-(\d+): error : (.*)$")
    32 MATIEC_ERROR_MODEL = re.compile(".*\.st:(\d+)-(\d+)\.\.(\d+)-(\d+): error : (.*)$")
    31 
    33 
   930         self._OpenView("IEC code")
   932         self._OpenView("IEC code")
   931 
   933 
   932     _IECRawCodeView = None
   934     _IECRawCodeView = None
   933     def _editIECrawcode(self):
   935     def _editIECrawcode(self):
   934         self._OpenView("IEC raw code")
   936         self._OpenView("IEC raw code")
   935 
   937     
   936     def _OpenView(self, name=None):
   938     _ProjectFilesView = None
       
   939     def _OpenProjectFiles(self):
       
   940         self._OpenView("Project files")
       
   941     
       
   942     def _OpenView(self, name=None, onlyopened=False):
   937         if name == "IEC code":
   943         if name == "IEC code":
   938             if self._IEC_code_viewer is None:
   944             if self._IECCodeView is None:
   939                 plc_file = self._getIECcodepath()
   945                 plc_file = self._getIECcodepath()
   940             
   946             
   941                 self._IECCodeView = TextViewer(self.AppFrame.TabsOpened, "", None, None, instancepath=name)
   947                 self._IECCodeView = TextViewer(self.AppFrame.TabsOpened, "", None, None, instancepath=name)
   942                 #self._IECCodeViewr.Enable(False)
   948                 #self._IECCodeView.Enable(False)
   943                 self._IECCodeView.SetTextSyntax("ALL")
   949                 self._IECCodeView.SetTextSyntax("ALL")
   944                 self._IECCodeView.SetKeywords(IEC_KEYWORDS)
   950                 self._IECCodeView.SetKeywords(IEC_KEYWORDS)
   945                 try:
   951                 try:
   946                     text = file(plc_file).read()
   952                     text = file(plc_file).read()
   947                 except:
   953                 except:
   948                     text = '(* No IEC code have been generated at that time ! *)'
   954                     text = '(* No IEC code have been generated at that time ! *)'
   949                 self._IECCodeView.SetText(text = text)
   955                 self._IECCodeView.SetText(text = text)
   950                 self._IECCodeView.SetIcon(self.AppFrame.GenerateBitmap("ST"))
   956                 self._IECCodeView.SetIcon(GetBitmap("ST"))
   951                     
   957             
   952                 self.AppFrame.EditProjectElement(self._IECCodeView, name)
   958                 self.AppFrame.EditProjectElement(self._IECCodeView, name)
   953                 
   959             
       
   960             elif onlyopened:
       
   961                 self.AppFrame.EditProjectElement(self._IECCodeView, name, onlyopened)
       
   962             
   954             return self._IECCodeView
   963             return self._IECCodeView
   955         
   964         
   956         elif name == "IEC raw code":
   965         elif name == "IEC raw code":
   957             if self.IEC_raw_code_viewer is None:
   966             if self._IECRawCodeView is None:
   958                 controler = MiniTextControler(self._getIECrawcodepath())
   967                 controler = MiniTextControler(self._getIECrawcodepath())
   959                 
   968                 
   960                 self.IEC_raw_code_viewer = TextViewer(self.AppFrame.TabsOpened, "", None, controler, instancepath=name)
   969                 self._IECRawCodeView = TextViewer(self.AppFrame.TabsOpened, "", None, controler, instancepath=name)
   961                 #self.IEC_raw_code_viewer.Enable(False)
   970                 #self._IECRawCodeView.Enable(False)
   962                 self.IEC_raw_code_viewer.SetTextSyntax("ALL")
   971                 self._IECRawCodeView.SetTextSyntax("ALL")
   963                 self.IEC_raw_code_viewer.SetKeywords(IEC_KEYWORDS)
   972                 self._IECRawCodeView.SetKeywords(IEC_KEYWORDS)
   964                 self.IEC_raw_code_viewer.RefreshView()
   973                 self._IECRawCodeView.RefreshView()
   965                 self.IEC_raw_code_viewer.SetIcon(self.AppFrame.GenerateBitmap("ST"))
   974                 self._IECRawCodeView.SetIcon(GetBitmap("ST"))
   966                     
   975                     
   967                 self.AppFrame.EditProjectElement(self.IEC_raw_code_viewer, name)
   976                 self.AppFrame.EditProjectElement(self._IECRawCodeView, name)
   968 
   977             
   969             return self.IEC_raw_code_viewer
   978             elif onlyopened:
   970         
   979                 self.AppFrame.EditProjectElement(self._IECRawCodeView, name, onlyopened)
       
   980             
       
   981             return self._IECRawCodeView
       
   982         
       
   983         elif name == "Project files":
       
   984             if self._ProjectFilesView is None:
       
   985                 self._ProjectFilesView = FileManagementPanel(self.AppFrame.TabsOpened, self, name, self._getProjectFilesPath(), True)
       
   986                 
       
   987                 self.AppFrame.EditProjectElement(self._ProjectFilesView, name)
       
   988             
       
   989             elif onlyopened:
       
   990                 self.AppFrame.EditProjectElement(self._ProjectFilesView, name, onlyopened)
       
   991             
       
   992             return self._ProjectFilesView
       
   993            
   971         else:
   994         else:
   972             return ConfigTreeNode._OpenView(self, name)
   995             return ConfigTreeNode._OpenView(self, name, onlyopened)
   973 
   996 
   974     def OnCloseEditor(self, view):
   997     def OnCloseEditor(self, view):
   975         ConfigTreeNode.OnCloseEditor(self, view)
   998         ConfigTreeNode.OnCloseEditor(self, view)
   976         if self._IECCodeView == view:
   999         if self._IECCodeView == view:
   977             self._IECCodeView = None
  1000             self._IECCodeView = None
   978         if self._IECRawCodeView == view:
  1001         if self._IECRawCodeView == view:
   979             self._IECRawCodeView = None
  1002             self._IECRawCodeView = None
       
  1003         if self._ProjectFilesView == view:
       
  1004             self._ProjectFilesView = None
   980 
  1005 
   981     def _Clean(self):
  1006     def _Clean(self):
   982         self._CloseView(self._IECCodeView)
  1007         self._CloseView(self._IECCodeView)
   983         if os.path.isdir(os.path.join(self._getBuildPath())):
  1008         if os.path.isdir(os.path.join(self._getBuildPath())):
   984             self.logger.write(_("Cleaning the build directory\n"))
  1009             self.logger.write(_("Cleaning the build directory\n"))
  1411                     self.logger.write_error(_("Transfer failed\n"))
  1436                     self.logger.write_error(_("Transfer failed\n"))
  1412             else:
  1437             else:
  1413                 self.logger.write_error(_("No PLC to transfer (did build succeed ?)\n"))
  1438                 self.logger.write_error(_("No PLC to transfer (did build succeed ?)\n"))
  1414 
  1439 
  1415         wx.CallAfter(self.UpdateMethodsFromPLCStatus)
  1440         wx.CallAfter(self.UpdateMethodsFromPLCStatus)
  1416 
       
  1417     def _ImportProjectFile(self):
       
  1418         dialog = wx.FileDialog(self.AppFrame, _("Choose a file"), os.getcwd(), "",  _("All files|*.*"), wx.OPEN)
       
  1419         if dialog.ShowModal() == wx.ID_OK:
       
  1420             filepath = dialog.GetPath()
       
  1421             if os.path.isfile(filepath):
       
  1422                 shutil.copy(filepath, self._getProjectFilesPath())
       
  1423             else:
       
  1424                 self.logger.write_error(_("No such file: %s\n") % filepath)
       
  1425         dialog.Destroy()  
       
  1426 
  1441 
  1427     StatusMethods = [
  1442     StatusMethods = [
  1428         {"bitmap" : "Build",
  1443         {"bitmap" : "Build",
  1429          "name" : _("Build"),
  1444          "name" : _("Build"),
  1430          "tooltip" : _("Build project into build folder"),
  1445          "tooltip" : _("Build project into build folder"),
  1468     ConfNodeMethods = [
  1483     ConfNodeMethods = [
  1469         {"bitmap" : "editIECrawcode",
  1484         {"bitmap" : "editIECrawcode",
  1470          "name" : _("Raw IEC code"),
  1485          "name" : _("Raw IEC code"),
  1471          "tooltip" : _("Edit raw IEC code added to code generated by PLCGenerator"),
  1486          "tooltip" : _("Edit raw IEC code added to code generated by PLCGenerator"),
  1472          "method" : "_editIECrawcode"},
  1487          "method" : "_editIECrawcode"},
  1473         {"bitmap" : "ImportFile",
  1488         {"bitmap" : "ManageFolder",
  1474          "name" : _("Import file"),
  1489          "name" : _("Project Files"),
  1475          "tooltip" : _("Import into project a file to be transfered with PLC"),
  1490          "tooltip" : _("Open a file explorer to manage project files"),
  1476          "method" : "_ImportProjectFile"},
  1491          "method" : "_OpenProjectFiles"},
  1477     ]
  1492     ]
  1478 
  1493 
  1479 
  1494 
  1480     def EnableMethod(self, method, value):
  1495     def EnableMethod(self, method, value):
  1481         for d in self.StatusMethods:
  1496         for d in self.StatusMethods: