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: |