lpcmanager

Parents ae2e6ec83a7d
Children efce7f4e7452
Added option to disable checking for big projects to load faster.
  • +98 -0
    LPCManager.py
  • --- a/LPCManager.py Wed Apr 05 13:03:42 2017 +0200
    +++ b/LPCManager.py Wed Apr 05 13:20:35 2017 +0200
    @@ -15,6 +15,7 @@
    _lpcmanager_path = os.path.split(__file__)[0]
    _dist_folder = os.path.split(sys.path[0])[0]
    _beremiz_folder = os.path.join(_dist_folder, "beremiz")
    +_checkBlocks = 1
    sys.path.append(_beremiz_folder)
    if __name__ == '__main__':
    @@ -139,8 +140,33 @@
    from editors.ProjectNodeEditor import ProjectNodeEditor
    from editors.CodeFileEditor import VariablesTable
    from editors.CodeFileEditor import VariablesEditor
    +from editors.TextViewer import TextViewer, EditorPanel
    +from controls.CustomStyledTextCtrl import GetCursorPos
    from WampOptionsEditor import WampOptionsEditor
    from VariableExporter import VariableWriter
    +from PLCControler import PLCControler
    +
    +
    +def GetFunctionBlockTypes(self, tagname="", debug=False):
    + project = self.GetProject(debug)
    + words = tagname.split("::")
    + name = None
    + if project is not None and words[0] in ["P", "T", "A"]:
    + name = words[1]
    + blocktypes = []
    + for blocks in self.TotalTypesDict.itervalues():
    + for sectioname, block in blocks:
    + if block["type"] == "functionBlock":
    + blocktypes.append(block["name"])
    + if project is not None:
    + global _checkBlocks
    + if _checkBlocks:
    + blocktypes.extend([pou.getname() for pou in project.getpous(name, ["functionBlock"]) if (name is None or len(self.GetInstanceList(pou, name, debug)) == 0)])
    + else:
    + blocktypes.extend([pou.getname() for pou in project.getpous(name, ["functionBlock"])])
    + return blocktypes
    +
    +PLCControler.GetFunctionBlockTypes = GetFunctionBlockTypes
    def LeftClick(self, event):
    if event.GetCol() == self.grid.GetNumberCols()-1:
    @@ -166,6 +192,56 @@
    VariablesTable.LeftClick = LeftClick
    +def RefreshView(self, variablepanel=True):
    + EditorPanel.RefreshView(self, variablepanel)
    +
    + if self.Controler is not None:
    + self.ResetBuffer()
    + self.DisableEvents = True
    + old_cursor_pos = self.GetCurrentPos()
    + line = self.Editor.GetFirstVisibleLine()
    + column = self.Editor.GetXOffset()
    + old_text = self.GetText()
    + new_text = self.Controler.GetEditedElementText(self.TagName, self.Debug)
    + if old_text != new_text:
    + self.SetText(new_text)
    + new_cursor_pos = GetCursorPos(old_text, new_text)
    + self.Editor.LineScroll(column, line)
    + if new_cursor_pos != None:
    + self.Editor.GotoPos(new_cursor_pos)
    + else:
    + self.Editor.GotoPos(old_cursor_pos)
    + self.RefreshJumpList()
    + self.Editor.EmptyUndoBuffer()
    + self.DisableEvents = False
    +
    + self.RefreshVariableTree()
    +
    + self.TypeNames = [typename.upper() for typename in self.Controler.GetDataTypes(self.TagName, True, self.Debug)]
    + self.EnumeratedValues = [value.upper() for value in self.Controler.GetEnumeratedDataValues()]
    +
    + self.Functions = {}
    + global _checkBlocks
    + if _checkBlocks:
    + for category in self.Controler.GetBlockTypes(self.TagName, self.Debug):
    + for blocktype in category["list"]:
    + blockname = blocktype["name"].upper()
    + if blocktype["type"] == "function" and blockname not in self.Keywords and blockname not in self.Variables.keys():
    + interface = dict([(name, {}) for name, type, modifier in blocktype["inputs"] + blocktype["outputs"] if name != ''])
    + for param in ["EN", "ENO"]:
    + if not interface.has_key(param):
    + interface[param] = {}
    + if self.Functions.has_key(blockname):
    + self.Functions[blockname]["interface"].update(interface)
    + self.Functions[blockname]["extensible"] |= blocktype["extensible"]
    + else:
    + self.Functions[blockname] = {"interface": interface,
    + "extensible": blocktype["extensible"]}
    +
    + self.Colourise(0, -1)
    +
    +TextViewer.RefreshView = RefreshView
    +
    def VariablesEditorSetCollSize(self):
    ColSizes = [20, 150] + [130] * (len(self.VariablesDefaultValue) - 2) + [300]
    for col in range(self.Table.GetNumberCols()):
    @@ -245,6 +321,7 @@
    SCROLLBAR_UNIT = 10
    ID_EXPORT = 7500
    +ID_CHECK = 7501
    WINDOW_COLOUR = wx.Colour(240, 240, 240)
    TITLE_COLOUR = wx.Colour(200, 200, 220)
    CHANGED_TITLE_COLOUR = wx.Colour(220, 200, 220)
    @@ -1342,6 +1419,14 @@
    export = True
    else:
    export = False
    + checker = str(config.Read("Checker"))
    + if checker == "":
    + config.Write("Checker", '0')
    + checker = '0'
    + if checker == '1':
    + checker = True
    + else:
    + checker = False
    AppendMenu(parent, help='', id=wx.ID_SAVE,
    kind=wx.ITEM_NORMAL, text=_(u'Save\tCTRL+S'))
    AppendMenu(parent, help='', id=wx.ID_CLOSE,
    @@ -1357,6 +1442,9 @@
    if export:
    AppendMenu(parent, help='', id=ID_EXPORT,
    kind=wx.ITEM_NORMAL, text=_(u'Export'))
    + if checker:
    + parent.AppendCheckItem(ID_CHECK, u'Disable checking')
    + if (export or checker):
    parent.AppendSeparator()
    AppendMenu(parent, help='', id=wx.ID_EXIT,
    kind=wx.ITEM_NORMAL, text=_(u'Quit\tCTRL+Q'))
    @@ -1368,6 +1456,7 @@
    self.Bind(wx.EVT_MENU, self.OnPrintMenu, id=wx.ID_PRINT)
    if export:
    self.Bind(wx.EVT_MENU, lambda event: VariableWriter(self, event, self.CTR.ProjectPath), id=ID_EXPORT)
    + self.Bind(wx.EVT_MENU, lambda event: self.CheckEnabler(event), id=ID_CHECK)
    self.Bind(wx.EVT_MENU, self.OnQuitMenu, id=wx.ID_EXIT)
    self.AddToMenuToolBar([(wx.ID_SAVE, "save", _(u'Save'), None),
    @@ -1386,6 +1475,15 @@
    def Show(self):
    wx.Frame.Show(self)
    + def CheckEnabler(self, event):
    + global _checkBlocks
    + if event.Selection == 1:
    + _checkBlocks = 0
    + else:
    + _checkBlocks = 1
    +
    +
    +
    def OnCloseFrame(self, event):
    global frame