Consolidated point-handling modules in hooke.ui.gui into gui.dialog.points
[hooke.git] / hooke / ui / gui / playlist.py
index 9b7af3f9fa9773e0a422b68b99ab09bdcdcb17ba..530049fc1dc1498127315a9beb697e4c43eaa46d 100644 (file)
-#!/usr/bin/env python\r
-\r
-'''\r
-playlist.py\r
-\r
-Playlist class for Hooke.\r
-\r
-Copyright 2010 by Dr. Rolf Schmidt (Concordia University, Canada)\r
-\r
-This program is released under the GNU General Public License version 2.\r
-'''\r
-\r
-import os.path\r
-import xml.dom.minidom\r
-\r
-import lib.libhooke\r
-import lib.file\r
-\r
-class Playlist(object):\r
-\r
-    def __init__(self, filename=None):\r
-        self._saved = False\r
-        self.count = 0\r
-        self.figure = None\r
-        self.files = []\r
-        self.generics_dict = {}\r
-        self.hidden_attributes = ['curve', 'data', 'driver', 'fits', 'name', 'plot', 'plots']\r
-        self.index = -1\r
-        self.name = None\r
-        self.path = None\r
-        self.plot_panel = None\r
-        self.plot_tab = None\r
-        if filename is None:\r
-            self.filename = None\r
-        else:\r
-            self.load(filename)\r
-\r
-    def add_file(self, filename):\r
-        if os.path.isfile(filename):\r
-            file_to_add = lib.file.File(filename)\r
-            self.files.append(file_to_add)\r
-            self._saved = False\r
-        self.count = len(self.files)\r
-\r
-    def delete_file(self, name):\r
-        for index, item in enumerate(self.files):\r
-            if item.name == name:\r
-                del self.files[index]\r
-                self.index = index\r
-        self.count = len(self.files)\r
-        if self.index > self.count - 1:\r
-            self.index = 0\r
-\r
-    def filter_curves(self, curves_to_keep=[]):\r
-        playlist = Playlist()\r
-        for curve_index in curves_to_keep:\r
-            playlist.files.append(self.files[curve_index])\r
-        playlist.count = len(playlist.files)\r
-        playlist.index = 0\r
-        return playlist\r
-\r
-    def get_active_file(self):\r
-        return self.files[self.index]\r
-\r
-    #def get_active_plot(self):\r
-        ##TODO: is this the only active (or default?) plot?\r
-        #return self.files[self.index].plots[0]\r
-\r
-    def load(self, filename):\r
-        '''\r
-        Loads a playlist file\r
-        '''\r
-        self.filename = filename\r
-        self.path, self.name = os.path.split(filename)\r
-        playlist_file = lib.libhooke.delete_empty_lines_from_xmlfile(filename)\r
-        self.xml = xml.dom.minidom.parseString(playlist_file)\r
-        #TODO: rename 'element' to 'curve' or something in hkp file\r
-        #TODO: rename 'path' to 'filename'\r
-        #TODO: switch from attributes to nodes, it's cleaner XML in my eyes\r
-\r
-        element_list = self.xml.getElementsByTagName('element')\r
-        #populate playlist with files\r
-        for index, element in enumerate(element_list):\r
-            #rebuild a data structure from the xml attributes\r
-            #the next two lines are here for backwards compatibility, newer playlist files use 'filename' instead of 'path'\r
-            if element.hasAttribute('path'):\r
-                #path, name = os.path.split(element.getAttribute('path'))\r
-                #path = path.split(os.sep)\r
-                #filename = lib.libhooke.get_file_path(name, path)\r
-                filename = element.getAttribute('path')\r
-            if element.hasAttribute('filename'):\r
-                #path, name = os.path.split(element.getAttribute('filename'))\r
-                #path = path.split(os.sep)\r
-                #filename = lib.libhooke.get_file_path(name, path)\r
-                filename = element.getAttribute('filename')\r
-            if os.path.isfile(filename):\r
-                data_file = lib.file.File(filename)\r
-                if element.hasAttribute('note'):\r
-                    data_file.note = element.getAttribute('note')\r
-                self.files.append(data_file)\r
-        self.count = len(self.files)\r
-        if self.count > 0:\r
-            #populate generics\r
-            genericsDict = {}\r
-            generics_list = self.xml.getElementsByTagName('generics')\r
-            if generics_list:\r
-                for attribute in generics_list[0].attributes.keys():\r
-                    genericsDict[attribute] = generics_list[0].getAttribute(attribute)\r
-            if genericsDict.has_key('pointer'):\r
-                index = int(genericsDict['pointer'])\r
-                if index >= 0 and index < self.count:\r
-                    self.index = index\r
-                else:\r
-                    index = 0\r
-            self._saved = True\r
-\r
-    def next(self):\r
-        self.index += 1\r
-        if self.index > self.count - 1:\r
-            self.index = 0\r
-\r
-    def previous(self):\r
-        self.index -= 1\r
-        if self.index < 0:\r
-            self.index = self.count - 1\r
-\r
-    def reset(self):\r
-        if self.count > 0:\r
-            self.index = 0\r
-        else:\r
-            self.index = -1\r
-\r
-    def save(self, filename):\r
-        '''\r
-        Saves a playlist from a list of files.\r
-        A playlist is an XML document with the following syntax:\r
-        <playlist>\r
-        <element path="/my/file/path/"/ attribute="attribute">\r
-        <element path="...">\r
-        </playlist>\r
-        '''\r
-        try:\r
-            output_file = file(filename, 'w')\r
-        except IOError:\r
-            self.AppendToOutput('Cannot save playlist. Wrong path or filename')\r
-            return\r
-        #create the output playlist, a simple XML document\r
-        implementation = xml.dom.minidom.getDOMImplementation()\r
-        #create the document DOM object and the root element\r
-        self.xml = implementation.createDocument(None, 'playlist', None)\r
-        root = self.xml.documentElement\r
-\r
-        #save generics variables\r
-        playlist_generics = self.xml.createElement('generics')\r
-        root.appendChild(playlist_generics)\r
-        self.generics_dict['pointer'] = self.index\r
-        for key in self.generics_dict.keys():\r
-        #for key in generics.keys():\r
-            self.xml.createAttribute(key)\r
-            playlist_generics.setAttribute(key, str(self.generics_dict[key]))\r
-\r
-        #save files and their attributes\r
-        for item in self.files:\r
-            #playlist_element=newdoc.createElement("file")\r
-            playlist_element = self.xml.createElement('element')\r
-            root.appendChild(playlist_element)\r
-            for key in item.__dict__:\r
-                if not (key in self.hidden_attributes):\r
-                    self.xml.createAttribute(key)\r
-                    playlist_element.setAttribute(key, str(item.__dict__[key]))\r
-        self._saved = False\r
-\r
-        self.xml.writexml(output_file, indent='\n')\r
-        output_file.close()\r
-        self._saved = True\r
+#!/usr/bin/env python
+
+'''
+playlist.py
+
+Playlist class for Hooke.
+
+Copyright 2010 by Dr. Rolf Schmidt (Concordia University, Canada)
+
+This program is released under the GNU General Public License version 2.
+'''
+
+import os.path
+import xml.dom.minidom
+
+import lib.libhooke
+import lib.file
+
+class Playlist(object):
+
+    def __init__(self, filename=None):
+        self._saved = False
+        self.count = 0
+        self.figure = None
+        self.files = []
+        self.generics_dict = {}
+        self.hidden_attributes = ['curve', 'data', 'driver', 'fits', 'name', 'plot', 'plots']
+        self.index = -1
+        self.name = None
+        self.path = None
+        self.plot_panel = None
+        self.plot_tab = None
+        if filename is None:
+            self.filename = None
+        else:
+            self.load(filename)
+
+    def add_file(self, filename):
+        if os.path.isfile(filename):
+            file_to_add = lib.file.File(filename)
+            self.files.append(file_to_add)
+            self._saved = False
+        self.count = len(self.files)
+
+    def delete_file(self, name):
+        for index, item in enumerate(self.files):
+            if item.name == name:
+                del self.files[index]
+                self.index = index
+        self.count = len(self.files)
+        if self.index > self.count - 1:
+            self.index = 0
+
+    def filter_curves(self, curves_to_keep=[]):
+        playlist = Playlist()
+        for curve_index in curves_to_keep:
+            playlist.files.append(self.files[curve_index])
+        playlist.count = len(playlist.files)
+        playlist.index = 0
+        return playlist
+
+    def get_active_file(self):
+        return self.files[self.index]
+
+    #def get_active_plot(self):
+        ##TODO: is this the only active (or default?) plot?
+        #return self.files[self.index].plots[0]
+
+    def load(self, filename):
+        '''
+        Loads a playlist file
+        '''
+        self.filename = filename
+        self.path, self.name = os.path.split(filename)
+        playlist_file = lib.libhooke.delete_empty_lines_from_xmlfile(filename)
+        self.xml = xml.dom.minidom.parseString(playlist_file)
+        #TODO: rename 'element' to 'curve' or something in hkp file
+        #TODO: rename 'path' to 'filename'
+        #TODO: switch from attributes to nodes, it's cleaner XML in my eyes
+
+        element_list = self.xml.getElementsByTagName('element')
+        #populate playlist with files
+        for index, element in enumerate(element_list):
+            #rebuild a data structure from the xml attributes
+            #the next two lines are here for backwards compatibility, newer playlist files use 'filename' instead of 'path'
+            if element.hasAttribute('path'):
+                #path, name = os.path.split(element.getAttribute('path'))
+                #path = path.split(os.sep)
+                #filename = lib.libhooke.get_file_path(name, path)
+                filename = element.getAttribute('path')
+            if element.hasAttribute('filename'):
+                #path, name = os.path.split(element.getAttribute('filename'))
+                #path = path.split(os.sep)
+                #filename = lib.libhooke.get_file_path(name, path)
+                filename = element.getAttribute('filename')
+            if os.path.isfile(filename):
+                data_file = lib.file.File(filename)
+                if element.hasAttribute('note'):
+                    data_file.note = element.getAttribute('note')
+                self.files.append(data_file)
+        self.count = len(self.files)
+        if self.count > 0:
+            #populate generics
+            genericsDict = {}
+            generics_list = self.xml.getElementsByTagName('generics')
+            if generics_list:
+                for attribute in generics_list[0].attributes.keys():
+                    genericsDict[attribute] = generics_list[0].getAttribute(attribute)
+            if genericsDict.has_key('pointer'):
+                index = int(genericsDict['pointer'])
+                if index >= 0 and index < self.count:
+                    self.index = index
+                else:
+                    index = 0
+            self._saved = True
+
+    def next(self):
+        self.index += 1
+        if self.index > self.count - 1:
+            self.index = 0
+
+    def previous(self):
+        self.index -= 1
+        if self.index < 0:
+            self.index = self.count - 1
+
+    def reset(self):
+        if self.count > 0:
+            self.index = 0
+        else:
+            self.index = -1
+
+    def save(self, filename):
+        '''
+        Saves a playlist from a list of files.
+        A playlist is an XML document with the following syntax:
+        <playlist>
+        <element path="/my/file/path/"/ attribute="attribute">
+        <element path="...">
+        </playlist>
+        '''
+        try:
+            output_file = file(filename, 'w')
+        except IOError:
+            self.AppendToOutput('Cannot save playlist. Wrong path or filename')
+            return
+        #create the output playlist, a simple XML document
+        implementation = xml.dom.minidom.getDOMImplementation()
+        #create the document DOM object and the root element
+        self.xml = implementation.createDocument(None, 'playlist', None)
+        root = self.xml.documentElement
+
+        #save generics variables
+        playlist_generics = self.xml.createElement('generics')
+        root.appendChild(playlist_generics)
+        self.generics_dict['pointer'] = self.index
+        for key in self.generics_dict.keys():
+        #for key in generics.keys():
+            self.xml.createAttribute(key)
+            playlist_generics.setAttribute(key, str(self.generics_dict[key]))
+
+        #save files and their attributes
+        for item in self.files:
+            #playlist_element=newdoc.createElement("file")
+            playlist_element = self.xml.createElement('element')
+            root.appendChild(playlist_element)
+            for key in item.__dict__:
+                if not (key in self.hidden_attributes):
+                    self.xml.createAttribute(key)
+                    playlist_element.setAttribute(key, str(item.__dict__[key]))
+        self._saved = False
+
+        self.xml.writexml(output_file, indent='\n')
+        output_file.close()
+        self._saved = True