Commit 44c3f4faa7b99bb5acb455955ac41b89673e11b6

Authored by tfmoraes
1 parent 2b02528b

ENH: The images in the dicom preview expand to follow the preview panel size

Showing 1 changed file with 33 additions and 9 deletions   Show diff stats
invesalius/gui/dicom_preview_panel.py
... ... @@ -57,11 +57,27 @@ class DicomInfo(object):
57 57 self.title = title
58 58 self.subtitle = subtitle
59 59 self._preview = None
  60 + self._size = (70, 70)
60 61 self.selected = False
  62 + self.resized = False
  63 +
  64 + @property
  65 + def size(self):
  66 + return self._size
  67 +
  68 + @size.setter
  69 + def size(self, size):
  70 + if size != self._size:
  71 + self._size = size
  72 + self.resized = True
61 73  
62 74 @property
63 75 def preview(self):
64 76 if self._preview:
  77 + if self.resized:
  78 + self.resized = False
  79 + s_img = self.img.Scale(*self._size).Mirror(False)
  80 + self._preview = wx.BitmapFromImage(s_img)
65 81 return self._preview
66 82 else:
67 83 colorer = vtk.vtkImageMapToWindowLevelColors()
... ... @@ -75,9 +91,9 @@ class DicomInfo(object):
75 91  
76 92 r = colorer.GetOutput().GetPointData().GetScalars()
77 93 ni = numpy_support.vtk_to_numpy(r)
78   - img = wx.ImageFromBuffer(width, height, ni)
79   - img = img.Rescale(PREVIEW_WIDTH, PREVIEW_HEIGTH).Mirror(False)
80   - self._preview = wx.BitmapFromImage(img)
  94 + self.img = wx.ImageFromBuffer(width, height, ni)
  95 + s_img = self.img.Scale(*self._size).Mirror(False)
  96 + self._preview = wx.BitmapFromImage(s_img)
81 97 return self._preview
82 98  
83 99  
... ... @@ -89,24 +105,24 @@ class Preview(wx.Panel):
89 105 super(Preview, self).__init__(parent)
90 106 # Will it be white?
91 107 self.select_on = False
  108 + self.dicom_info = None
92 109 self._init_ui()
93 110 self._bind_events()
94 111  
95 112 def _init_ui(self):
  113 + self.SetBackgroundColour(PREVIEW_BACKGROUND)
  114 +
96 115 self.title = wx.StaticText(self, -1, _("Image"))
97 116 self.subtitle = wx.StaticText(self, -1, _("Image"))
98   - self.image_viewer = wx.StaticBitmap(self, -1, size=(70, 70))
99   -
100   - #self.panel = wx.Panel(self, -1)
101   -
102   - self.SetBackgroundColour(PREVIEW_BACKGROUND)
  117 + self.image_viewer = wx.StaticBitmap(self, -1)
103 118  
104 119 self.sizer = wx.BoxSizer(wx.VERTICAL)
105 120 self.sizer.Add(self.title, 0,
106 121 wx.ALIGN_CENTER_HORIZONTAL)
107 122 self.sizer.Add(self.subtitle, 0,
108 123 wx.ALIGN_CENTER_HORIZONTAL)
109   - self.sizer.Add(self.image_viewer, 0, wx.ALIGN_CENTER_HORIZONTAL)
  124 + self.sizer.Add(self.image_viewer, 1, wx.ALIGN_CENTRE_HORIZONTAL \
  125 + | wx.SHAPED | wx.ALL, 5)
110 126 self.sizer.Fit(self)
111 127  
112 128 self.SetSizer(self.sizer)
... ... @@ -141,6 +157,8 @@ class Preview(wx.Panel):
141 157 #self.title.Bind(wx.EVT_LEFT_DOWN, self.OnSelect)
142 158 #self.subtitle.Bind(wx.EVT_LEFT_DOWN, self.OnSelect)
143 159  
  160 + self.Bind(wx.EVT_SIZE, self.OnSize)
  161 +
144 162 def SetDicomToPreview(self, dicom_info):
145 163 """
146 164 Set a dicom to preview.
... ... @@ -149,6 +167,7 @@ class Preview(wx.Panel):
149 167 self.SetTitle(dicom_info.title)
150 168 self.SetSubtitle(dicom_info.subtitle)
151 169 self.ID = dicom_info.id
  170 + dicom_info.size = self.image_viewer.GetSize()
152 171 image = dicom_info.preview
153 172 self.image_viewer.SetBitmap(image)
154 173 self.data = dicom_info.id
... ... @@ -191,6 +210,11 @@ class Preview(wx.Panel):
191 210 #self.SetBackgroundColour(c)
192 211 self.Select()
193 212  
  213 + def OnSize(self, evt):
  214 + if self.dicom_info:
  215 + self.SetDicomToPreview(self.dicom_info)
  216 + evt.Skip()
  217 +
194 218 def Select(self, on=True):
195 219 if self.select_on:
196 220 c = wx.SystemSettings_GetColour(wx.SYS_COLOUR_HIGHLIGHT)
... ...