Enregistrement des métadonnées des patients.
[minwii.git] / src / minwii / logapp.py
index 950a478..a97e849 100755 (executable)
@@ -15,6 +15,7 @@ from os.path import basename
 from os.path import getsize
 import os.path
 from minwii.loganalyse import LogFileAnalyser
+from minwii.config import LOGS_DIR
 from pprint import pprint
 
 class Application(Frame) :
@@ -24,10 +25,11 @@ class Application(Frame) :
         self.createWidgets()
         self.logDir = ''
         self.logFiles = []
+        self.currentFilePath = ''
         self.resultsFrame = None
         
-        # debug
-        #self.chooseDirDialog(dir='/Users/pinbe/minwii_logs')
+        if os.path.exists(LOGS_DIR) :
+            self.chooseDirDialog(dir=LOGS_DIR)
     
     def configureStretching(self) :
         top=self.winfo_toplevel()
@@ -100,12 +102,14 @@ class Application(Frame) :
     def loadLogFile(self, nav) :
         index = nav.index - 1
         filepath = self.logFiles[index]
-        filename = basename(filepath)
-        self.identFrame.setFileName(filename)
+        self.currentFilePath = filepath
+        lfa = LogFileAnalyser(self.currentFilePath)
+        self.identFrame.refresh(lfa)
         if self.resultsFrame :
             self.resultsFrame.destroy()
-        self.resultsFrame = ResultsFrame(self.dataFrame, filepath)
-        self.resultsFrame.layResults()
+        self.resultsFrame = ResultsFrame(self.dataFrame)
+        self.resultsFrame.layResults(lfa)
+        lfa.close()
         self.resultsFrame.grid()
 
 
@@ -169,10 +173,19 @@ class Identification(Frame) :
     def __init__(self, master=None) :
         Frame.__init__(self, master)
         self.fileName = StringVar()
+        self.patientName = StringVar()
         self.createWidgets()
     
-    def setFileName(self, name) :
-        self.fileName.set(name)
+    #def setFileName(self, name) :
+    #    self.fileName.set(name)
+    
+    def refresh(self, lfa) :
+        filename = basename(lfa.logfile.name)
+        self.fileName.set(filename)
+        metadata = lfa.getMetadata()
+        self.patientName.set(metadata.get('PatientName', ''))
+        self.commentsText.delete(1.0, END)
+        self.commentsText.insert(1.0, metadata.get('Comments', ''))
     
     def createWidgets(self) :
         fileLbl = Label(self, text='Fichier :')
@@ -184,7 +197,7 @@ class Identification(Frame) :
         nameLbl = Label(self, text='Patient :')
         nameLbl.grid(row=1, column=0, sticky=E)
         
-        self.nameEntry = Entry(self, width=40)
+        self.nameEntry = Entry(self, width=40, textvariable=self.patientName)
         self.nameEntry.grid(row=1, column=1, sticky=W)
         
         commentsLbl = Label(self, text='Commentaires :')
@@ -192,14 +205,24 @@ class Identification(Frame) :
         
         self.commentsText = Text(self, width=40, height=4, undo=True, wrap=WORD)
         self.commentsText.grid(row=2, column=1, sticky=W)
+        
+        self.saveBtn = Button(self, text='Enregistrer', command=self.saveMetadata)
+        self.saveBtn.grid(row=3, column=1, sticky=E)
+    
+    def saveMetadata(self):
+        app = self.master.master
+        filepath = app.currentFilePath
+        lfa = LogFileAnalyser(filepath, mode='r+')
+        patientName = '%s\n' % self.nameEntry.get().replace('\n', ' ').strip()
+        comments = '%s\n' % self.commentsText.get(1.0, END).replace('\n', ' ').strip()
+        metadata = (('PatientName', self.nameEntry.get()),
+                    ('Comments', comments))
+        lfa.setMetadata(metadata)
+
 
 class ResultsFrame(Frame) :
-    def __init__(self, master, logFilePath) :
-        Frame.__init__(self, master)
-        self.logFilePath = logFilePath
     
-    def layResults(self) :
-        lfa = LogFileAnalyser(self.logFilePath)
+    def layResults(self, lfa) :
         results = lfa.analyse()
         if results :
             for i, kv in enumerate(results) :