--- a/eric6/Templates/TemplateViewer.py Thu Jan 28 13:18:55 2021 +0100 +++ b/eric6/Templates/TemplateViewer.py Thu Jan 28 13:19:22 2021 +0100 @@ -24,6 +24,8 @@ import UI.PixmapCache import Utilities +from .TemplatesFile import TemplatesFile + class TemplateGroup(QTreeWidgetItem): """ @@ -432,6 +434,8 @@ self.__activating = False self.__dirty = False + self.__templatesFile = TemplatesFile(self) + self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.__showContextMenu) self.itemActivated.connect(self.__templateItemActivated) @@ -563,7 +567,9 @@ self, self.tr("Import Templates"), "", - self.tr("Templates Files (*.e4c);; All Files (*)")) + self.tr("Templates Files (*.ecj);;" + "XML Templates Files (*.e4c);;" + "All Files (*)")) if fn: self.readTemplates(fn) @@ -577,7 +583,9 @@ self, self.tr("Export Templates"), "", - self.tr("Templates Files (*.e4c);; All Files (*)"), + self.tr("Templates Files (*.ecj);;" + "XML Templates Files (*.e4c);;" + "All Files (*)"), "", E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) @@ -949,61 +957,77 @@ tmpl.setTemplateText(template) self.__resort() - # TODO: do the JSON templates def writeTemplates(self, filename=None): """ - Public method to write the templates data to an XML file (.e4c). + Public method to write the templates data to a JSON file (.ecj). - @param filename name of a templates file to read (string) - @return flag indicating success (boolean) + @param filename name of a templates file to write + @type str + @return flag indicating success + @rtype bool """ if filename is None: filename = os.path.join( - Utilities.getConfigDir(), "eric6templates.e4c") - f = QFile(filename) - ok = f.open(QIODevice.WriteOnly) - if not ok: - E5MessageBox.critical( - self, - self.tr("Save templates"), - self.tr( - "<p>The templates file <b>{0}</b> could not be" - " written.</p>") - .format(filename)) - return False + Utilities.getConfigDir(), "eric6templates.ecj") + if filename.endswith(".ecj"): + # new JSON based file + res = self.__templatesFile.writeFile(filename) + else: + # old XML based file + f = QFile(filename) + ok = f.open(QIODevice.WriteOnly) + if not ok: + E5MessageBox.critical( + self, + self.tr("Save Templates"), + self.tr( + "<p>The templates file <b>{0}</b> could not be" + " written.</p>") + .format(filename)) + res = False + else: + from E5XML.TemplatesWriter import TemplatesWriter + TemplatesWriter(f, self).writeXML() + f.close() + res = True - from E5XML.TemplatesWriter import TemplatesWriter - TemplatesWriter(f, self).writeXML() - f.close() - - return True + return res - # TODO: do the JSON templates def readTemplates(self, filename=None): """ Public method to read in the templates file (.e4c). - @param filename name of a templates file to read (string) + @param filename name of a templates file to read + @type str """ if filename is None: + # new JSON based file first filename = os.path.join( - Utilities.getConfigDir(), "eric6templates.e4c") + Utilities.getConfigDir(), "eric6templates.ecj") if not os.path.exists(filename): - return + # old XML based file second + filename = os.path.join( + Utilities.getConfigDir(), "eric6templates.e4c") + if not os.path.exists(filename): + return - f = QFile(filename) - if f.open(QIODevice.ReadOnly): - from E5XML.TemplatesReader import TemplatesReader - reader = TemplatesReader(f, viewer=self) - reader.readXML() - f.close() + if filename.endswith(".ecj"): + self.__templatesFile.readFile(filename) else: - E5MessageBox.critical( - self, - self.tr("Read templates"), - self.tr( - "<p>The templates file <b>{0}</b> could not be read.</p>") - .format(filename)) + f = QFile(filename) + if f.open(QIODevice.ReadOnly): + from E5XML.TemplatesReader import TemplatesReader + reader = TemplatesReader(f, viewer=self) + reader.readXML() + f.close() + else: + E5MessageBox.critical( + self, + self.tr("Read Templates"), + self.tr( + "<p>The templates file <b>{0}</b> could not be read." + "</p>") + .format(filename)) def __configure(self): """