Index: src/sas/sasgui/perspectives/invariant/report_dialog.py
===================================================================
--- src/sas/sasgui/perspectives/invariant/report_dialog.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
+++ src/sas/sasgui/perspectives/invariant/report_dialog.py	(revision d85c194ea2f78cb2b9b3de9c969e1b8ebea6b6d2)
@@ -0,0 +1,124 @@
+
+################################################################################
+# This software was developed by the University of Tennessee as part of the
+# Distributed Data Analysis of Neutron Scattering Experiments (DANSE)
+# project funded by the US National Science Foundation.
+#
+# See the license text in license.txt
+#
+# copyright 2009, University of Tennessee
+################################################################################
+
+"""
+Dialog report panel to show and summarize the results of
+the invariant calculation.
+"""
+import wx
+import os
+import sys
+import logging
+
+from sas.sasgui.guiframe.report_dialog import BaseReportDialog
+
+class ReportDialog(BaseReportDialog):
+    """
+    The report dialog box.
+    """
+
+    def __init__(self, report_list, *args, **kwds):
+        """
+        Initialization. The parameters added to Dialog are:
+
+        :param report_list: list of html_str, text_str, image
+        from invariant_state
+        """
+        super(ReportDialog, self).__init__(report_list, *args, **kwds)
+
+        # title
+        self.SetTitle("Report: Invariant computaion")
+
+        # put image path in the report string
+        self.report_html = self.report_list[0] % "memory:img_inv.png"
+        # layout
+        self._setup_layout()
+
+    def onSave(self, event=None):
+        """
+        Save
+        """
+        # todo: complete saving fig file and as a txt file
+        dlg = wx.FileDialog(self, "Choose a file",
+                            wildcard=self.wild_card,
+                            style=wx.SAVE | wx.OVERWRITE_PROMPT | wx.CHANGE_DIR)
+        dlg.SetFilterIndex(0)  # Set .html files to be default
+
+        if dlg.ShowModal() != wx.ID_OK:
+            dlg.Destroy()
+            return
+
+        fName = dlg.GetPath()
+        ext_num = dlg.GetFilterIndex()
+        # set file extensions
+        if ext_num == (0 + 2 * self.index_offset):
+            # TODO: Sort this case out
+            ext = '.pdf'
+            img_ext = '_img.png'
+            fName = os.path.splitext(fName)[0] + ext
+            dlg.Destroy()
+
+            # pic (png) file path/name
+            pic_fname = os.path.splitext(fName)[0] + img_ext
+            # save the image for use with pdf writer
+            self.report_list[2].savefig(pic_fname)
+
+            # put the image file path in the html data
+            html = self.report_list[0] % str(pic_fname)
+
+            # make/open file in case of absence
+            f = open(fName, 'w')
+            f.close()
+            # write pdf as a pdf file
+            pdf = self.HTML2PDF(data=html, filename=fName)
+
+            # open pdf
+            if pdf:
+                try:
+                    # Windows
+                    os.startfile(str(fName))
+                except:
+                    try:
+                        # Mac
+                        os.system("open %s" % fName)
+                    except:
+                        # DO not open
+                        logging.error("Could not open file: %s" % sys.exc_value)
+            # delete image file
+            os.remove(pic_fname)
+            return
+        elif ext_num == (1 - self.index_offset):
+            ext = '.html'
+            img_ext = '_img4html.png'
+            report_frame = self.report_list[0]
+        elif ext_num == (2 - self.index_offset):
+            ext = '.txt'
+            # changing the image extension actually changes the image
+            # format on saving
+            img_ext = '_img4txt.pdf'
+            report = self.report_list[1]
+        else:
+            return
+
+        # file name
+        fName = os.path.splitext(fName)[0] + ext
+        dlg.Destroy()
+        # pic (png) file path/name
+        pic_fname = os.path.splitext(fName)[0] + img_ext
+        # put the image path in html string
+        if ext_num == (1 - self.index_offset):
+            report = report_frame % os.path.basename(pic_fname)
+
+        f = open(fName, 'w')
+        f.write(report)
+        f.close()
+        # save png file using pic_fname
+        self.report_list[2].savefig(pic_fname)
