CodeFileTreeNode.py
author Edouard Tisserant
Sat, 28 Sep 2013 15:59:50 +0900
changeset 1333 7f264cc6e75d
parent 1332 ac7d39f4e376
child 1448 20ff66dcc31d
permissions -rw-r--r--
merged
1330
96b242e4c59d Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents: 1315
diff changeset
     1
import os, re, traceback
1315
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
1330
96b242e4c59d Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents: 1315
diff changeset
     8
from ConfigTreeNode import XSDSchemaErrorMessage
630
91b2ae63ea3d Including external tools for editing plugin informations into Beremiz window
laurent
parents: 610
diff changeset
     9
1124
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    10
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
    11
<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
    12
            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
    13
  <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
    14
    <xsd:complexType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    15
      <xsd:sequence>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    16
        %(includes_section)s
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    17
        <xsd:element name="variables">
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    18
          <xsd:complexType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    19
            <xsd:sequence>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    20
              <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
    21
                <xsd:complexType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    22
                  <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
    23
                  <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
    24
                  <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
    25
                    <xsd:simpleType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    26
                      <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
    27
                        <xsd:enumeration value="input"/>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    28
                        <xsd:enumeration value="memory"/>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    29
                        <xsd:enumeration value="output"/>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    30
                      </xsd:restriction>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    31
                    </xsd:simpleType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    32
                  </xsd:attribute>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    33
                  <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
    34
                </xsd:complexType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    35
              </xsd:element>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    36
            </xsd:sequence>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    37
          </xsd:complexType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    38
        </xsd:element>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    39
        %(sections)s
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    40
      </xsd:sequence>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    41
    </xsd:complexType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    42
  </xsd:element>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    43
  <xsd:complexType name="CodeText">
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    44
    <xsd:annotation>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    45
      <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
    46
    </xsd:annotation>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    47
    <xsd:sequence>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    48
      <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
    49
    </xsd:sequence>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    50
  </xsd:complexType>
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    51
</xsd:schema>"""
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    52
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    53
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
    54
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
    55
class CodeFile:
656
c1792dfc8c7e Fixing bug integrated plugin editors not closed when removing corresponding plugin
laurent
parents: 651
diff changeset
    56
    
1124
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    57
    CODEFILE_NAME = "CodeFile"
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    58
    SECTIONS_NAMES = []
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    59
    
31
33b38700d0db added basic C Code extention plugin
etisserant
parents:
diff changeset
    60
    def __init__(self):
1124
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    61
        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
    62
        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
    63
            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
    64
        else:
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    65
            sections_str["includes_section"] = ""
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    66
        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
    67
            [SECTION_TAG_ELEMENT % name
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    68
             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
    69
        
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    70
        self.CodeFileParser = GenerateParserFromXSDstring(
1124
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
    71
            CODEFILE_XSD % sections_str)
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    72
        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
    73
        
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
    74
        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
    75
        
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
        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
    77
            xmlfile = open(filepath, 'r')
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    78
            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
    79
            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
    80
            
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    81
            codefile_xml = codefile_xml.replace(
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    82
                '<%s>' % self.CODEFILE_NAME, 
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    83
                '<%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
    84
            for cre, repl in [
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    85
                (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
    86
                (re.compile("(?:]]>)(?!</xhtml:p>)"), "]]></xhtml:p>")]:
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    87
                codefile_xml = cre.sub(repl, codefile_xml)
1330
96b242e4c59d Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents: 1315
diff changeset
    88
            
96b242e4c59d Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents: 1315
diff changeset
    89
            try:
96b242e4c59d Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents: 1315
diff changeset
    90
                self.CodeFile, error = self.CodeFileParser.LoadXMLString(codefile_xml)
96b242e4c59d Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents: 1315
diff changeset
    91
                if error is not None:
96b242e4c59d Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents: 1315
diff changeset
    92
                    self.GetCTRoot().logger.write_warning(
1332
ac7d39f4e376 Fixed error message printed when error in XML files is detected
Laurent Bessard
parents: 1330
diff changeset
    93
                        XSDSchemaErrorMessage % ((self.CODEFILE_NAME,) + error))
1330
96b242e4c59d Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents: 1315
diff changeset
    94
                self.CreateCodeFileBuffer(True)
96b242e4c59d Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents: 1315
diff changeset
    95
            except Exception, exc:
96b242e4c59d Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents: 1315
diff changeset
    96
                self.GetCTRoot().logger.write_error(_("Couldn't load confnode parameters %s :\n %s") % (CTNName, unicode(exc)))
96b242e4c59d Added support for loading XML file even if not following XSD schema (but still following XML syntax), warning user of errors in XML file
Laurent Bessard
parents: 1315
diff changeset
    97
                self.GetCTRoot().logger.write_error(traceback.format_exc())
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
    98
        else:
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
    99
            self.CodeFile = self.CodeFileParser.CreateRoot()
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   100
            self.CreateCodeFileBuffer(False)
718
5d4dc150b956 refactoring
Edouard Tisserant
parents: 717
diff changeset
   101
            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
   102
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
   103
    def GetBaseTypes(self):
718
5d4dc150b956 refactoring
Edouard Tisserant
parents: 717
diff changeset
   104
        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
   105
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   106
    def GetDataTypes(self, basetypes = False):
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   107
        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
   108
1146
510d1ea1f6c1 Fixed variable panel in CodeFileEditor
Laurent Bessard
parents: 1124
diff changeset
   109
    def GenerateNewName(self, format, start_idx):
510d1ea1f6c1 Fixed variable panel in CodeFileEditor
Laurent Bessard
parents: 1124
diff changeset
   110
        return self.GetCTRoot().GenerateNewName(
510d1ea1f6c1 Fixed variable panel in CodeFileEditor
Laurent Bessard
parents: 1124
diff changeset
   111
            None, None, format, start_idx,
1153
5bdd82497925 Fixed bug in New variable name generated in CodeFileEditor Variable Panel
Laurent Bessard
parents: 1146
diff changeset
   112
            dict([(var.getname().upper(), True) 
1146
510d1ea1f6c1 Fixed variable panel in CodeFileEditor
Laurent Bessard
parents: 1124
diff changeset
   113
                  for var in self.CodeFile.variables.getvariable()]))
510d1ea1f6c1 Fixed variable panel in CodeFileEditor
Laurent Bessard
parents: 1124
diff changeset
   114
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
    def SetVariables(self, variables):
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   116
        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
   117
        for var in variables:
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   118
            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
   119
            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
   120
            variable.settype(var["Type"])
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   121
            variable.setinitial(var["Initial"])
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   122
            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
   123
    
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
   124
    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
   125
        datas = []
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   126
        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
   127
            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
   128
                          "Type" : var.gettype(), 
b1705000eba1 Fixed support for defining python runtime code using sections like in c_ext
Laurent Bessard
parents: 1100
diff changeset
   129
                          "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
   130
        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
   131
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   132
    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
   133
        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
   134
            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
   135
            if section_code is not None:
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   136
                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
   137
    
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   138
    def GetTextParts(self):
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   139
        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
   140
                     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
   141
            
718
5d4dc150b956 refactoring
Edouard Tisserant
parents: 717
diff changeset
   142
    def CTNTestModified(self):
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   143
        return self.ChangesToSave or not self.CodeFileIsSaved()    
630
91b2ae63ea3d Including external tools for editing plugin informations into Beremiz window
laurent
parents: 610
diff changeset
   144
1061
02f371f3e063 Fixed Save As... function in Beremiz
Laurent Bessard
parents: 953
diff changeset
   145
    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
   146
        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
   147
        
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
   148
        xmlfile = open(filepath,"w")
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   149
        xmlfile.write(etree.tostring(
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   150
            self.CodeFile, 
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   151
            pretty_print=True, 
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   152
            xml_declaration=True, 
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   153
            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
   154
        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
   155
        
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   156
        self.MarkCodeFileAsSaved()
31
33b38700d0db added basic C Code extention plugin
etisserant
parents:
diff changeset
   157
        return True
33b38700d0db added basic C Code extention plugin
etisserant
parents:
diff changeset
   158
1095
a73fde048749 Move C_ext file for merging with py_ext
Laurent Bessard
parents: 1061
diff changeset
   159
    def CTNGlobalInstances(self):
a73fde048749 Move C_ext file for merging with py_ext
Laurent Bessard
parents: 1061
diff changeset
   160
        current_location = self.GetCurrentLocation()
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   161
        return [(variable.getname(),
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   162
                 variable.gettype(),
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   163
                 variable.getinitial())
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   164
                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
   165
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
   166
#-------------------------------------------------------------------------------
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
#                      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
   168
#-------------------------------------------------------------------------------
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
   169
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
   170
    """
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   171
    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
   172
    """
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
   173
    def Copy(self, model):
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   174
        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
   175
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   176
    def CreateCodeFileBuffer(self, saved):
658
94417ab25510 Fixing some issues in c_ext plugin
laurent
parents: 656
diff changeset
   177
        self.Buffering = False
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   178
        self.CodeFileBuffer = UndoBuffer(self.CodeFileParser.Dumps(self.CodeFile), saved)
651
cbeb769b0a56 Adding support for unifying grid table control elements
laurent
parents: 630
diff changeset
   179
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   180
    def BufferCodeFile(self):
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   181
        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
   182
    
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
   183
    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
   184
        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
   185
        
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
   186
    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
   187
        if self.Buffering:
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   188
            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
   189
            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
   190
    
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   191
    def MarkCodeFileAsSaved(self):
651
cbeb769b0a56 Adding support for unifying grid table control elements
laurent
parents: 630
diff changeset
   192
        self.EndBuffering()
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   193
        self.CodeFileBuffer.CurrentSaved()
651
cbeb769b0a56 Adding support for unifying grid table control elements
laurent
parents: 630
diff changeset
   194
    
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   195
    def CodeFileIsSaved(self):
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   196
        return self.CodeFileBuffer.IsCurrentSaved() and not self.Buffering
658
94417ab25510 Fixing some issues in c_ext plugin
laurent
parents: 656
diff changeset
   197
        
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
   198
    def LoadPrevious(self):
651
cbeb769b0a56 Adding support for unifying grid table control elements
laurent
parents: 630
diff changeset
   199
        self.EndBuffering()
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   200
        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
   201
    
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
   202
    def LoadNext(self):
1315
ff14a66bbd12 Fixed Beremiz for working with new xmlclass support using lxml
Laurent Bessard
parents: 1153
diff changeset
   203
        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
   204
    
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
   205
    def GetBufferState(self):
1096
c9ace6a881c9 Fixed CFileEditor replacing folding panels by variable panel and STC
Laurent Bessard
parents: 1095
diff changeset
   206
        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
   207
        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
   208
        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
   209