E5XML/ShortcutsWriter.py

changeset 595
7d2c8346021c
parent 411
99409cddaaa9
child 791
9ec2ac20e54e
--- a/E5XML/ShortcutsWriter.py	Sun Sep 12 13:56:03 2010 +0200
+++ b/E5XML/ShortcutsWriter.py	Sun Sep 12 15:02:07 2010 +0200
@@ -11,22 +11,22 @@
 
 from E5Gui.E5Application import e5App
 
-from .XMLWriterBase import XMLWriterBase
+from .XMLStreamWriterBase import XMLStreamWriterBase
 from .Config import shortcutsFileFormatVersion
 
 import Preferences
 
-class ShortcutsWriter(XMLWriterBase):
+class ShortcutsWriter(XMLStreamWriterBase):
     """
     Class implementing the writer class for writing an XML shortcuts file.
     """
-    def __init__(self, file):
+    def __init__(self, device):
         """
         Constructor
         
-        @param file open file (like) object for writing
+        @param device reference to the I/O device to write to (QIODevice)
         """
-        XMLWriterBase.__init__(self, file)
+        XMLStreamWriterBase.__init__(self, device)
         
         self.email = Preferences.getUser("Email")
         
@@ -34,151 +34,69 @@
         """
         Public method to write the XML to the file.
         """
-        XMLWriterBase.writeXML(self)
+        XMLStreamWriterBase.writeXML(self)
         
-        self._write('<!DOCTYPE Shortcuts SYSTEM "Shortcuts-{0}.dtd">'.format(
+        self.writeDTD('<!DOCTYPE Shortcuts SYSTEM "Shortcuts-{0}.dtd">'.format(
             shortcutsFileFormatVersion))
         
         # add some generation comments
-        self._write("<!-- Eric5 keyboard shortcuts -->")
-        self._write("<!-- Saved: {0} -->".format(time.strftime('%Y-%m-%d, %H:%M:%S')))
-        self._write("<!-- Author: {0} -->".format(self.escape("{0}".format(self.email))))
+        self.writeComment(" Eric5 keyboard shortcuts ")
+        self.writeComment(" Saved: {0}".format(time.strftime('%Y-%m-%d, %H:%M:%S')))
+        self.writeComment(" Author: {0} ".format(self.email))
         
         # add the main tag
-        self._write('<Shortcuts version="{0}">'.format(shortcutsFileFormatVersion))
-        
-        for act in e5App().getObject("Project").getActions():
-            self._write('  <Shortcut category="Project">')
-            self._write('    <Name>{0}</Name>'.format(act.objectName()))
-            self._write('    <Accel>{0}</Accel>'.format(
-                self.escape("{0}".format(act.shortcut().toString()))))
-            self._write('    <AltAccel>{0}</AltAccel>' \
-               .format(self.escape("{0}".format(act.alternateShortcut().toString()))))
-            self._write('  </Shortcut>')
-        
-        for act in e5App().getObject("UserInterface").getActions('ui'):
-            self._write('  <Shortcut category="General">')
-            self._write('    <Name>{0}</Name>'.format(act.objectName()))
-            self._write('    <Accel>{0}</Accel>'.format(
-                self.escape("{0}".format(act.shortcut().toString()))))
-            self._write('    <AltAccel>{0}</AltAccel>'.format(
-                self.escape("{0}".format(act.alternateShortcut().toString()))))
-            self._write('  </Shortcut>')
-        
-        for act in e5App().getObject("UserInterface").getActions('wizards'):
-            self._write('  <Shortcut category="Wizards">')
-            self._write('    <Name>{0}</Name>'.format(act.objectName()))
-            self._write('    <Accel>{0}</Accel>'.format(
-                self.escape("{0}".format(act.shortcut().toString()))))
-            self._write('    <AltAccel>{0}</AltAccel>'.format(
-                self.escape("{0}".format(act.alternateShortcut().toString()))))
-            self._write('  </Shortcut>')
-        
-        for act in e5App().getObject("DebugUI").getActions():
-            self._write('  <Shortcut category="Debug">')
-            self._write('    <Name>{0}</Name>'.format(act.objectName()))
-            self._write('    <Accel>{0}</Accel>'.format(
-                self.escape("{0}".format(act.shortcut().toString()))))
-            self._write('    <AltAccel>{0}</AltAccel>'.format(
-                self.escape("{0}".format(act.alternateShortcut().toString()))))
-            self._write('  </Shortcut>')
-        
-        for act in e5App().getObject("ViewManager").getActions('edit'):
-            self._write('  <Shortcut category="Edit">')
-            self._write('    <Name>{0}</Name>'.format(act.objectName()))
-            self._write('    <Accel>{0}</Accel>'.format(
-                self.escape("{0}".format(act.shortcut().toString()))))
-            self._write('    <AltAccel>{0}</AltAccel>'.format(
-                self.escape("{0}".format(act.alternateShortcut().toString()))))
-            self._write('  </Shortcut>')
+        self.writeStartElement("Shortcuts")
+        self.writeAttribute("version", shortcutsFileFormatVersion)
         
-        for act in e5App().getObject("ViewManager").getActions('file'):
-            self._write('  <Shortcut category="File">')
-            self._write('    <Name>{0}</Name>'.format(act.objectName()))
-            self._write('    <Accel>{0}</Accel>'.format(
-                self.escape("{0}".format(act.shortcut().toString()))))
-            self._write('    <AltAccel>{0}</AltAccel>'.format(
-                self.escape("{0}".format(act.alternateShortcut().toString()))))
-            self._write('  </Shortcut>')
-        
-        for act in e5App().getObject("ViewManager").getActions('search'):
-            self._write('  <Shortcut category="Search">')
-            self._write('    <Name>{0}</Name>'.format(act.objectName()))
-            self._write('    <Accel>{0}</Accel>'.format(
-                self.escape("{0}".format(act.shortcut().toString()))))
-            self._write('    <AltAccel>{0}</AltAccel>'.format(
-                self.escape("{0}".format(act.alternateShortcut().toString()))))
-            self._write('  </Shortcut>')
-        
-        for act in e5App().getObject("ViewManager").getActions('view'):
-            self._write('  <Shortcut category="View">')
-            self._write('    <Name>{0}</Name>'.format(act.objectName()))
-            self._write('    <Accel>{0}</Accel>'.format(
-                self.escape("{0}".format(act.shortcut().toString()))))
-            self._write('    <AltAccel>{0}</AltAccel>'.format(
-                self.escape("{0}".format(act.alternateShortcut().toString()))))
-            self._write('  </Shortcut>')
-        
-        for act in e5App().getObject("ViewManager").getActions('macro'):
-            self._write('  <Shortcut category="Macro">')
-            self._write('    <Name>{0}</Name>'.format(act.objectName()))
-            self._write('    <Accel>{0}</Accel>'.format(
-                self.escape("{0}".format(act.shortcut().toString()))))
-            self._write('    <AltAccel>{0}</AltAccel>'.format(
-                self.escape("{0}".format(act.alternateShortcut().toString()))))
-            self._write('  </Shortcut>')
-        
-        for act in e5App().getObject("ViewManager").getActions('bookmark'):
-            self._write('  <Shortcut category="Bookmarks">')
-            self._write('    <Name>{0}</Name>'.format(act.objectName()))
-            self._write('    <Accel>{0}</Accel>'.format(
-                self.escape("{0}".format(act.shortcut().toString()))))
-            self._write('    <AltAccel>{0}</AltAccel>'.format(
-                self.escape("{0}".format(act.alternateShortcut().toString()))))
-            self._write('  </Shortcut>')
-        
-        for act in e5App().getObject("ViewManager").getActions('spelling'):
-            self._write('  <Shortcut category="Spelling">')
-            self._write('    <Name>{0}</Name>'.format(act.objectName()))
-            self._write('    <Accel>{0}</Accel>'.format(
-                self.escape("{0}".format(act.shortcut().toString()))))
-            self._write('    <AltAccel>{0}</AltAccel>'.format(
-                self.escape("{0}".format(act.alternateShortcut().toString()))))
-            self._write('  </Shortcut>')
-        
-        actions = e5App().getObject("ViewManager").getActions('window')
-        for act in actions:
-            self._write('  <Shortcut category="Window">')
-            self._write('    <Name>{0}</Name>'.format(act.objectName()))
-            self._write('    <Accel>{0}</Accel>'.format(
-                self.escape("{0}".format(act.shortcut().toString()))))
-            self._write('    <AltAccel>{0}</AltAccel>'.format(
-                self.escape("{0}".format(act.alternateShortcut().toString()))))
-            self._write('  </Shortcut>')
+        self.__writeActions("Project", 
+            e5App().getObject("Project").getActions())
+        self.__writeActions("General", 
+            e5App().getObject("UserInterface").getActions('ui'))
+        self.__writeActions("Wizards", 
+            e5App().getObject("UserInterface").getActions('wizards'))
+        self.__writeActions("Debug", 
+            e5App().getObject("DebugUI").getActions())
+        self.__writeActions("Edit", 
+            e5App().getObject("ViewManager").getActions('edit'))
+        self.__writeActions("File", 
+            e5App().getObject("ViewManager").getActions('file'))
+        self.__writeActions("Search", 
+            e5App().getObject("ViewManager").getActions('search'))
+        self.__writeActions("View", 
+            e5App().getObject("ViewManager").getActions('view'))
+        self.__writeActions("Macro", 
+            e5App().getObject("ViewManager").getActions('macro'))
+        self.__writeActions("Bookmarks", 
+            e5App().getObject("ViewManager").getActions('bookmark'))
+        self.__writeActions("Spelling", 
+            e5App().getObject("ViewManager").getActions('spelling'))
+        self.__writeActions("Window", 
+            e5App().getObject("ViewManager").getActions('window'))
         
         for category, ref in e5App().getPluginObjects():
             if hasattr(ref, "getActions"):
-                actions = ref.getActions()
-                for act in actions:
-                    if act.objectName():
-                        # shortcuts are only exported, if their objectName is set
-                        self._write('  <Shortcut category="{0}">'.format(category))
-                        self._write('    <Name>{0}</Name>'.format(act.objectName()))
-                        self._write('    <Accel>{0}</Accel>'.format(
-                            self.escape("{0}".format(act.shortcut().toString()))))
-                        self._write('    <AltAccel>{0}</AltAccel>'\
-                            .format(self.escape("{0}".format(
-                                act.alternateShortcut().toString()))))
-                        self._write('  </Shortcut>')
+                self.__writeActions(category, ref.getActions())
     
-        for act in e5App().getObject("DummyHelpViewer").getActions():
-            self._write('  <Shortcut category="HelpViewer">')
-            self._write('    <Name>{0}</Name>'.format(act.objectName()))
-            self._write('    <Accel>{0}</Accel>'.format(
-                self.escape("{0}".format(act.shortcut().toString()))))
-            self._write('    <AltAccel>{0}</AltAccel>' \
-               .format(self.escape("{0}".format(act.alternateShortcut().toString()))))
-            self._write('  </Shortcut>')
+        self.__writeActions("HelpViewer", 
+            e5App().getObject("DummyHelpViewer").getActions())
     
         # add the main end tag
-        self._write("</Shortcuts>", newline = False)
+        self.writeEndElement()
+        self.writeEndDocument()
+    
+    def __writeActions(self, category, actions):
+        """
+        Private method to write the shortcuts for the given actions.
+        
+        @param category category the actions belong to (string)
+        @param actions list of actions to write (E5Action)
+        """
+        for act in actions:
+            if act.objectName():
+                # shortcuts are only exported, if their objectName is set
+                self.writeStartElement("Shortcut")
+                self.writeAttribute("category", category)
+                self.writeTextElement("Name", act.objectName())
+                self.writeTextElement("Accel", act.shortcut().toString())
+                self.writeTextElement("AltAccel", act.alternateShortcut().toString())
+                self.writeEndElement()

eric ide

mercurial