source: sasview/src/sas/sasgui/guiframe/report_dialog.py @ 2a24d55

magnetic_scattrelease-4.2.2ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249unittest-saveload
Last change on this file since 2a24d55 was 2a24d55, checked in by wojciech, 6 years ago

Removing report button from OSX

  • Property mode set to 100644
File size: 4.1 KB
RevLine 
[e8bb5b6]1"""
2    Base class for reports. Child classes will need to implement
3    the onSave() method.
4"""
5import wx
6import logging
7import sys
8import wx.html as html
9
[463e7ffc]10logger = logging.getLogger(__name__)
[c155a16]11
[e8bb5b6]12ISPDF = False
13if sys.platform == "win32":
14    _STATICBOX_WIDTH = 450
[69a6897]15    PANEL_WIDTH = 500
[e8bb5b6]16    PANEL_HEIGHT = 700
17    FONT_VARIANT = 0
18    ISPDF = True
[6dd6e32]19# For OSX and everything else
20else:
[e8bb5b6]21    _STATICBOX_WIDTH = 480
22    PANEL_WIDTH = 530
23    PANEL_HEIGHT = 700
24    FONT_VARIANT = 1
25    ISPDF = True
26
27class BaseReportDialog(wx.Dialog):
[69a6897]28
[e8bb5b6]29    def __init__(self, report_list, *args, **kwds):
30        """
31        Initialization. The parameters added to Dialog are:
[69a6897]32
[e8bb5b6]33        :param report_list: list of html_str, text_str, image for report
34        """
35        kwds["style"] = wx.RESIZE_BORDER|wx.DEFAULT_DIALOG_STYLE
36        super(BaseReportDialog, self).__init__(*args, **kwds)
37        kwds["image"] = 'Dynamic Image'
38
39        # title
40        self.SetTitle("Report")
41        # size
42        self.SetSize((720, 650))
43        # font size
44        self.SetWindowVariant(variant=FONT_VARIANT)
45        # check if tit is MAC
46        self.is_pdf = ISPDF
47        # report string
48        self.report_list = report_list
49        # wild card
[69a6897]50        if self.is_pdf:  # pdf writer is available
51            self.wild_card = 'PDF files (*.pdf)|*.pdf|'
[e8bb5b6]52            self.index_offset = 0
53        else:
54            self.wild_card = ''
55            self.index_offset = 1
56        self.wild_card += 'HTML files (*.html)|*.html|'
57        self.wild_card += 'Text files (*.txt)|*.txt'
58
59    def _setup_layout(self):
60        """
61        Set up layout
62        """
63        hbox = wx.BoxSizer(wx.HORIZONTAL)
[69a6897]64
[e8bb5b6]65        # buttons
66        button_close = wx.Button(self, wx.ID_OK, "Close")
67        button_close.SetToolTipString("Close this report window.")
68        hbox.Add(button_close)
69        button_close.SetFocus()
70
71        button_print = wx.Button(self, wx.NewId(), "Print")
72        button_print.SetToolTipString("Print this report.")
73        button_print.Bind(wx.EVT_BUTTON, self.onPrint,
74                          id=button_print.GetId())
75        hbox.Add(button_print)
[69a6897]76
[2a24d55]77        if sys.platform == "win32":
78            button_save = wx.Button(self, wx.NewId(), "Save")
79            button_save.SetToolTipString("Save this report.")
80            button_save.Bind(wx.EVT_BUTTON, self.onSave, id=button_save.GetId())
81            hbox.Add(button_save)
[69a6897]82
[e8bb5b6]83        # panel for report page
84        vbox = wx.BoxSizer(wx.VERTICAL)
85        # html window
86        self.hwindow = html.HtmlWindow(self, style=wx.BORDER)
87        # set the html page with the report string
88        self.hwindow.SetPage(self.report_html)
[69a6897]89
[e8bb5b6]90        # add panels to boxsizers
91        vbox.Add(hbox)
92        vbox.Add(self.hwindow, 1, wx.EXPAND|wx.ALL,0)
93
94        self.SetSizer(vbox)
95        self.Centre()
96        self.Show(True)
97
98    def onPreview(self, event=None):
99        """
100        Preview
101        : event: Preview button event
102        """
103        previewh = html.HtmlEasyPrinting(name="Printing", parentWindow=self)
104        previewh.PreviewText(self.report_html)
[69a6897]105
[e8bb5b6]106    def onPrint(self, event=None):
107        """
108        Print
109        : event: Print button event
110        """
111        printh = html.HtmlEasyPrinting(name="Printing", parentWindow=self)
112        printh.PrintText(self.report_html)
113
114    def OnClose(self, event=None):
115        """
116        Close the Dialog
117        : event: Close button event
118        """
119        self.Close()
[69a6897]120
[e8bb5b6]121    def HTML2PDF(self, data, filename):
122        """
123        Create a PDF file from html source string.
[69a6897]124        Returns True is the file creation was successful.
[e8bb5b6]125        : data: html string
126        : filename: name of file to be saved
127        """
128        try:
129            from xhtml2pdf import pisa
130            # open output file for writing (truncated binary)
131            resultFile = open(filename, "w+b")
132            # convert HTML to PDF
133            pisaStatus = pisa.CreatePDF(data, dest=resultFile)
134            # close output file
135            resultFile.close()
136            self.Update()
137            return pisaStatus.err
[69a6897]138        except Exception:
[c155a16]139            logger.error("Error creating pdf: %s" % sys.exc_value)
[e8bb5b6]140        return False
Note: See TracBrowser for help on using the repository browser.