1'''
2Code for raster displays using wxPython.
3'''
4
5from __future__ import absolute_import, division, print_function, unicode_literals
6
7import logging
8import wx
9from spectral.graphics.graphics import SpyWindow
10
11logger = logging.getLogger('spectral')
12
13class RasterWindow(wx.Frame, SpyWindow):
14    '''
15    RasterWindow is the primary wxWindows object for displaying SPy
16    images.  The frames also handle left double-click events by
17    displaying an x-y plot of the spectrum for the associated pixel.
18    '''
19    def __init__(self, parent, index, rgb, **kwargs):
20        if 'title' in kwargs:
21            title = kwargs['title']
22        else:
23            title = 'SPy Image'
24#        wxFrame.__init__(self, parent, index, "SPy Frame")
25#        wxScrolledWindow.__init__(self, parent, index, style = wxSUNKEN_BORDER)
26
27        img = wx.EmptyImage(rgb.shape[0], rgb.shape[1])
28        img = wx.EmptyImage(rgb.shape[1], rgb.shape[0])
29        img.SetData(rgb.tostring())
30        self.bmp = img.ConvertToBitmap()
31        self.kwargs = kwargs
32        wx.Frame.__init__(self, parent, index, title,
33                          wx.DefaultPosition)
34        self.SetClientSizeWH(self.bmp.GetWidth(), self.bmp.GetHeight())
35        wx.EVT_PAINT(self, self.on_paint)
36        wx.EVT_LEFT_DCLICK(self, self.left_double_click)
37
38    def on_paint(self, e):
39        dc = wx.PaintDC(self)
40        self.paint(dc)
41
42    def paint(self, dc):
43
44        dc.BeginDrawing()
45        dc.DrawBitmap(self.bmp, 0, 0)
46        # dc.Blit(0,0, bmp.GetWidth(), bmp.GetHeight(), mDC, 0, 0)
47        dc.EndDrawing()
48
49    def left_double_click(self, evt):
50        from spectral import settings
51        if "data source" in self.kwargs:
52            logger.info('{}'.format((evt.GetY(), evt.GetX()))),
53            settings.plotter.plot(self.kwargs["data source"],
54                                  [evt.GetY(), evt.GetX()],
55                                  source=self.kwargs["data source"])
56