CodeFileTreeNode.py
author Laurent Bessard
Tue, 24 Sep 2013 00:44:06 +0200
changeset 1322 0a9227f743b3
parent 1315 ff14a66bbd12
child 1330 96b242e4c59d
permissions -rw-r--r--
Fixed xmlclass for working with included files, adding support for SimpleType elements and solving ambiguity in extension class when different elements share the same name and parent name
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
     1
import os, re
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
     2
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
     3
from copy import deepcopy
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
     4
from lxml import etree
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
     5
from xmlclass import GenerateParserFromXSDstring
401
8106a853a7c7 Adding support for displaying plugins available variable into Beremiz plugin tree
laurent
parents: 361
diff changeset
     6
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
     7
from PLCControler import UndoBuffer
630
91b2ae63ea3d Including external tools for editing plugin informations into Beremiz window
laurent
parents: 610
diff changeset
     8
1124
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
     9
CODEFILE_XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?>
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    10
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    11
            xmlns:xhtml="http://www.w3.org/1999/xhtml">
1124
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    12
  <xsd:element name="%(codefile_name)s">
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    13
    <xsd:complexType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    14
      <xsd:sequence>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    15
        %(includes_section)s
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    16
        <xsd:element name="variables">
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    17
          <xsd:complexType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    18
            <xsd:sequence>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    19
              <xsd:element name="variable" minOccurs="0" maxOccurs="unbounded">
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    20
                <xsd:complexType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    21
                  <xsd:attribute name="name" type="xsd:string" use="required"/>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    22
                  <xsd:attribute name="type" type="xsd:string" use="required"/>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    23
                  <xsd:attribute name="class" use="optional">
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    24
                    <xsd:simpleType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    25
                      <xsd:restriction base="xsd:string">
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    26
                        <xsd:enumeration value="input"/>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    27
                        <xsd:enumeration value="memory"/>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    28
                        <xsd:enumeration value="output"/>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    29
                      </xsd:restriction>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    30
                    </xsd:simpleType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    31
                  </xsd:attribute>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    32
                  <xsd:attribute name="initial" type="xsd:string" use="optional" default=""/>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    33
                </xsd:complexType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    34
              </xsd:element>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    35
            </xsd:sequence>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    36
          </xsd:complexType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    37
        </xsd:element>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    38
        %(sections)s
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    39
      </xsd:sequence>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    40
    </xsd:complexType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    41
  </xsd:element>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    42
  <xsd:complexType name="CodeText">
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    43
    <xsd:annotation>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    44
      <xsd:documentation>Formatted text according to parts of XHTML 1.1</xsd:documentation>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    45
    </xsd:annotation>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    46
    <xsd:sequence>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    47
      <xsd:any namespace="http://www.w3.org/1999/xhtml" processContents="lax"/>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    48
    </xsd:sequence>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    49
  </xsd:complexType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    50
</xsd:schema>"""
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    51
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    52
SECTION_TAG_ELEMENT = "<xsd:element name=\"%s\" type=\"CodeText\"/>"
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
    53
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
    54
class CodeFile:
656
c1792dfc8c7e Fixing bug integrated plugin editors not closed when removing corresponding plugin
laurent
parents: 651
diff changeset
    55
    
1124
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    56
    CODEFILE_NAME = "CodeFile"
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    57
    SECTIONS_NAMES = []
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    58
    
31
33b38700d0db added basic C Code extention plugin
etisserant
parents:
diff changeset
    59
    def __init__(self):
1124
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    60
        sections_str = {"codefile_name": self.CODEFILE_NAME}
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    61
        if "includes" in self.SECTIONS_NAMES:
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    62
            sections_str["includes_section"] = SECTION_TAG_ELEMENT % "includes"
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    63
        else:
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    64
            sections_str["includes_section"] = ""
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    65
        sections_str["sections"] = "\n".join(
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    66
            [SECTION_TAG_ELEMENT % name
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    67
             for name in self.SECTIONS_NAMES if name != "includes"])
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    68
        
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    69
        self.CodeFileParser = GenerateParserFromXSDstring(
1124
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    70
            CODEFILE_XSD % sections_str)
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    71
        self.CodeFileVariables = etree.XPath("variables/variable")
1124
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    72
        
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
    73
        filepath = self.CodeFileName()
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
    74
        
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
    75
        if os.path.isfile(filepath):
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
    76
            xmlfile = open(filepath, 'r')
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    77
            codefile_xml = xmlfile.read()
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
    78
            xmlfile.close()
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
    79
            
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    80
            codefile_xml = codefile_xml.replace(
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    81
                '<%s>' % self.CODEFILE_NAME, 
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    82
                '<%s xmlns:xhtml="http://www.w3.org/1999/xhtml">' % self.CODEFILE_NAME)
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    83
            for cre, repl in [
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    84
                (re.compile("(?<!<xhtml:p>)(?:<!\[CDATA\[)"), "<xhtml:p><![CDATA["),
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    85
                (re.compile("(?:]]>)(?!</xhtml:p>)"), "]]></xhtml:p>")]:
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    86
                codefile_xml = cre.sub(repl, codefile_xml)
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    87
            self.CodeFile = etree.fromstring(codefile_xml, self.CodeFileParser)    
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    88
            self.CreateCodeFileBuffer(True)
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    89
        
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
    90
        else:
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    91
            self.CodeFile = self.CodeFileParser.CreateRoot()
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
    92
            self.CreateCodeFileBuffer(False)
718
5d4dc150b956 refactoring
Edouard Tisserant
parents: 717
diff changeset
    93
            self.OnCTNSave()
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
    94
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
    95
    def GetBaseTypes(self):
718
5d4dc150b956 refactoring
Edouard Tisserant
parents: 717
diff changeset
    96
        return self.GetCTRoot().GetBaseTypes()
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
    97
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
    98
    def GetDataTypes(self, basetypes = False):
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
    99
        return self.GetCTRoot().GetDataTypes(basetypes=basetypes)
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   100
1146
510d1ea1f6c1 Fixed variable panel in CodeFileEditor
Laurent Bessard
parents: 1124
diff changeset
   101
    def GenerateNewName(self, format, start_idx):
510d1ea1f6c1 Fixed variable panel in CodeFileEditor
Laurent Bessard
parents: 1124
diff changeset
   102
        return self.GetCTRoot().GenerateNewName(
510d1ea1f6c1 Fixed variable panel in CodeFileEditor
Laurent Bessard
parents: 1124
diff changeset
   103
            None, None, format, start_idx,
1153
5bdd82497925 Fixed bug in New variable name generated in CodeFileEditor Variable Panel
Laurent Bessard
parents: 1146
diff changeset
   104
            dict([(var.getname().upper(), True) 
1146
510d1ea1f6c1 Fixed variable panel in CodeFileEditor
Laurent Bessard
parents: 1124
diff changeset
   105
                  for var in self.CodeFile.variables.getvariable()]))
510d1ea1f6c1 Fixed variable panel in CodeFileEditor
Laurent Bessard
parents: 1124
diff changeset
   106
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   107
    def SetVariables(self, variables):
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   108
        self.CodeFile.variables.setvariable([])
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   109
        for var in variables:
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   110
            variable = self.CodeFileParser.CreateElement("variable", "variables")
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   111
            variable.setname(var["Name"])
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   112
            variable.settype(var["Type"])
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   113
            variable.setinitial(var["Initial"])
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   114
            self.CodeFile.variables.appendvariable(variable)
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   115
    
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   116
    def GetVariables(self):
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   117
        datas = []
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   118
        for var in self.CodeFileVariables(self.CodeFile):
1124
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
   119
            datas.append({"Name" : var.getname(), 
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
   120
                          "Type" : var.gettype(), 
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
   121
                          "Initial" : var.getinitial()})
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   122
        return datas
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   123
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   124
    def SetTextParts(self, parts):
1124
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
   125
        for section in self.SECTIONS_NAMES:
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
   126
            section_code = parts.get(section)
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
   127
            if section_code is not None:
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   128
                getattr(self.CodeFile, section).setanyText(section_code)
1124
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
   129
    
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   130
    def GetTextParts(self):
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   131
        return dict([(section, getattr(self.CodeFile, section).getanyText())
1124
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
   132
                     for section in self.SECTIONS_NAMES])
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
   133
            
718
5d4dc150b956 refactoring
Edouard Tisserant
parents: 717
diff changeset
   134
    def CTNTestModified(self):
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   135
        return self.ChangesToSave or not self.CodeFileIsSaved()    
630
91b2ae63ea3d Including external tools for editing plugin informations into Beremiz window
laurent
parents: 610
diff changeset
   136
1061
02f371f3e063 Fixed Save As... function in Beremiz
Laurent Bessard
parents: 953
diff changeset
   137
    def OnCTNSave(self, from_project_path=None):
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   138
        filepath = self.CodeFileName()
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   139
        
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   140
        xmlfile = open(filepath,"w")
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   141
        xmlfile.write(etree.tostring(
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   142
            self.CodeFile, 
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   143
            pretty_print=True, 
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   144
            xml_declaration=True, 
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   145
            encoding='utf-8'))
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   146
        xmlfile.close()
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   147
        
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   148
        self.MarkCodeFileAsSaved()
31
33b38700d0db added basic C Code extention plugin
etisserant
parents:
diff changeset
   149
        return True
33b38700d0db added basic C Code extention plugin
etisserant
parents:
diff changeset
   150
1095
a73fde048749 Move C_ext file for merging with py_ext
Laurent Bessard
parents: 1061
diff changeset
   151
    def CTNGlobalInstances(self):
a73fde048749 Move C_ext file for merging with py_ext
Laurent Bessard
parents: 1061
diff changeset
   152
        current_location = self.GetCurrentLocation()
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   153
        return [(variable.getname(),
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   154
                 variable.gettype(),
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   155
                 variable.getinitial())
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   156
                for variable in self.CodeFileVariables(self.CodeFile)]
656
c1792dfc8c7e Fixing bug integrated plugin editors not closed when removing corresponding plugin
laurent
parents: 651
diff changeset
   157
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   158
#-------------------------------------------------------------------------------
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   159
#                      Current Buffering Management Functions
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   160
#-------------------------------------------------------------------------------
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   161
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   162
    """
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   163
    Return a copy of the codefile model
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   164
    """
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   165
    def Copy(self, model):
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   166
        return deepcopy(model)
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   167
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   168
    def CreateCodeFileBuffer(self, saved):
658
94417ab25510 Fixing some issues in c_ext plugin
laurent
parents: 656
diff changeset
   169
        self.Buffering = False
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   170
        self.CodeFileBuffer = UndoBuffer(self.CodeFileParser.Dumps(self.CodeFile), saved)
651
cbeb769b0a56 Adding support for unifying grid table control elements
laurent
parents: 630
diff changeset
   171
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   172
    def BufferCodeFile(self):
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   173
        self.CodeFileBuffer.Buffering(self.CodeFileParser.Dumps(self.CodeFile))
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   174
    
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   175
    def StartBuffering(self):
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   176
        self.Buffering = True
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   177
        
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   178
    def EndBuffering(self):
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   179
        if self.Buffering:
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   180
            self.CodeFileBuffer.Buffering(self.CodeFileParser.Dumps(self.CodeFile))
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   181
            self.Buffering = False
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   182
    
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   183
    def MarkCodeFileAsSaved(self):
651
cbeb769b0a56 Adding support for unifying grid table control elements
laurent
parents: 630
diff changeset
   184
        self.EndBuffering()
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   185
        self.CodeFileBuffer.CurrentSaved()
651
cbeb769b0a56 Adding support for unifying grid table control elements
laurent
parents: 630
diff changeset
   186
    
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   187
    def CodeFileIsSaved(self):
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   188
        return self.CodeFileBuffer.IsCurrentSaved() and not self.Buffering
658
94417ab25510 Fixing some issues in c_ext plugin
laurent
parents: 656
diff changeset
   189
        
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   190
    def LoadPrevious(self):
651
cbeb769b0a56 Adding support for unifying grid table control elements
laurent
parents: 630
diff changeset
   191
        self.EndBuffering()
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   192
        self.CodeFile = self.CodeFileParser.Loads(self.CodeFileBuffer.Previous())
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   193
    
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   194
    def LoadNext(self):
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   195
        self.CodeFile = self.CodeFileParser.Loads(self.CodeFileBuffer.Next())
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   196
    
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   197
    def GetBufferState(self):
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   198
        first = self.CodeFileBuffer.IsFirst() and not self.Buffering
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   199
        last = self.CodeFileBuffer.IsLast()
145
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   200
        return not first, not last
94855f7b08a9 Improving c_ext plugin by adding an XML file format for saving C files and an graphical interface for editing this file
lbessard
parents: 137
diff changeset
   201