source: sasview/src/sas/sasgui/guiframe/report_image_handler.py @ fa412df

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

Simplify calling image handler and add documentation.

  • Property mode set to 100644
File size: 2.4 KB
Line 
1import wx
2
3
4class ReportImageHandler:
5    # Singleton class that manages all report plot images
6    # To call the handler, call the static method set_figs
7
8    class _ReportImageHandler:
9
10        def __init__(self):
11            self.img_holder = wx.MemoryFSHandler()
12            wx.FileSystem.AddHandler(wx.MemoryFSHandler())
13            self.refs = {}
14            self.indices = []
15
16        def set_figs(self, figs, bitmaps, perspective):
17            """
18            Save figures and images to memory and return refernces
19            :param figs: A list of matplotlib Figures
20            :param bitmaps: A list of bitmaps
21            :param perspective: A String with the perspective name
22            :return: A tuple of a list of Figures and a list of memory refs
23            """
24            imgs = []
25            refs = []
26            if figs is None or len(figs) == 0:
27                figs = [None]
28            for fig in figs:
29                if fig is not None:
30                    ind = figs.index(fig)
31                    bitmap = bitmaps[ind]
32
33                # name of the fig
34                name = self.create_unique_name(perspective)
35                # AddFile, image can be retrieved with 'memory:filename'
36                ref = 'memory:' + name
37                self.refs[ref] = fig
38                self.img_holder.AddFile(name, bitmap, wx.BITMAP_TYPE_PNG)
39                refs.append(ref)
40                imgs.append(fig)
41            return imgs, refs
42
43        def create_unique_name(self, perspective, index=None):
44            """
45            Create a unique key for each item in memory
46            :param perspective: The perspective name as a string
47            :param index: The base index used for incrementing the name
48            :return: A unique file name not currently in use
49            """
50            if not index:
51                index = len(self.indices)
52            if index in self.indices:
53                name = self.create_unique_name(index + 1)
54            else:
55                self.indices.append(index)
56                name = 'img_{}_{:03d}.png'.format(str(perspective), index)
57            return name
58
59    instance = None
60
61    @staticmethod
62    def set_figs(figs, bitmaps, perspective):
63        if not ReportImageHandler.instance:
64            ReportImageHandler.instance = ReportImageHandler._ReportImageHandler()
65        return ReportImageHandler.instance.set_figs(figs, bitmaps, perspective)
Note: See TracBrowser for help on using the repository browser.