Commit cc3c0dc398da96c2a62c6fe994fc6d60433a44bb

Authored by Paulo Henrique Junqueira Amorim
Committed by GitHub
1 parent bfaca5dc

Micro ct shift delete (#46)

* FIX: Removed vtk window warming from bitmap import

* NEW: Added support to multiple delete files with shift in import bmp files.

* NEW: Added support to multiple delete files with shift in import bmp files.

* ENH: Text align

* ENH: Removed print

* ENH: GUI improvements of import bitmap dialog

* ENH: Removed unused codes

* ENH: Removed unused codes and resized text in bitmap import error dialog
invesalius/gui/bitmap_preview_panel.py
... ... @@ -88,10 +88,8 @@ class BitmapInfo(object):
88 88 self.title = data[6]
89 89 self.data = data
90 90 self.pos = data[8]
91   - #self.subtitle = subtitle
92 91 self._preview = None
93 92 self.selected = False
94   - #self.filename = ""
95 93 self.thumbnail_path = data[1]
96 94  
97 95 @property
... ... @@ -187,50 +185,16 @@ class Preview(wx.Panel):
187 185  
188 186 def _bind_events(self):
189 187 self.Bind( wx.EVT_LEFT_DCLICK, self.OnDClick)
190   - #self.interactor.Bind( wx.EVT_LEFT_DCLICK, self.OnDClick)
191   - #self.panel.Bind( wx.EVT_LEFT_DCLICK, self.OnDClick)
192   - #self.title.Bind( wx.EVT_LEFT_DCLICK, self.OnDClick)
193   - #self.subtitle.Bind( wx.EVT_LEFT_DCLICK, self.OnDClick)
194   -
195 188 self.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter)
196   - #self.interactor.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter)
197   - #self.panel.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter)
198   - #self.title.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter)
199   - #self.subtitle.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter)
200   -
201 189 self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave)
202   - #self.interactor.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave)
203   - #self.panel.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave)
204   - #self.title.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave)
205   - #self.subtitle.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave)
206 190  
207 191 self.Bind(wx.EVT_LEFT_DOWN, self.OnSelect)
208 192 self.title.Bind(wx.EVT_LEFT_DOWN, self.OnSelect)
209 193 self.subtitle.Bind(wx.EVT_LEFT_DOWN, self.OnSelect)
210 194 self.image_viewer.Bind(wx.EVT_LEFT_DOWN, self.OnSelect)
211 195  
212   - #self.Bind(wx.EVT_SIZE, self.OnSize)
213 196  
214 197 def SetBitmapToPreview(self, bitmap_info):
215   - """
216   - Set a dicom to preview.
217   - """
218   -
219   - """
220   - self.dicom_info = dicom_info
221   - self.SetTitle(dicom_info.title)
222   - self.SetSubtitle(dicom_info.subtitle)
223   - self.ID = dicom_info.id
224   - dicom_info.size = self.image_viewer.GetSize()
225   - image = dicom_info.preview
226   - self.image_viewer.SetImage(image)
227   - self.data = dicom_info.id
228   - self.select_on = dicom_info.selected
229   - self.Select()
230   - self.Update()
231   - """
232   -
233   -
234 198  
235 199 if self.bitmap_info:
236 200 self.bitmap_info.release_thumbnail()
... ... @@ -239,12 +203,9 @@ class Preview(wx.Panel):
239 203 self.SetTitle(self.bitmap_info.title[-10:])
240 204 self.SetSubtitle('')
241 205  
242   - ##self.ID = bitmap_info.id
243   - ##bitmap_info.size = self.image_viewer.GetSize()
244 206 image = self.bitmap_info.preview
245 207  
246 208 self.image_viewer.SetImage(image)
247   - #self.data = bitmap_info.id
248 209 self.select_on = bitmap_info.selected
249 210 self.Select()
250 211 self.Update()
... ... @@ -257,7 +218,6 @@ class Preview(wx.Panel):
257 218  
258 219 def OnEnter(self, evt):
259 220 if not self.select_on:
260   - #c = wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DHILIGHT)
261 221 c = wx.SystemSettings_GetColour(wx.SYS_COLOUR_BTNFACE)
262 222 self.SetBackgroundColour(c)
263 223  
... ... @@ -286,8 +246,6 @@ class Preview(wx.Panel):
286 246 my_evt.SetEventObject(self)
287 247 self.GetEventHandler().ProcessEvent(my_evt)
288 248  
289   - print ">>>",self.bitmap_info.pos, self.bitmap_info.id, self.bitmap_info.data
290   -
291 249 Publisher.sendMessage('Set bitmap in preview panel', self.bitmap_info.pos)
292 250  
293 251 evt.Skip()
... ... @@ -320,8 +278,6 @@ class BitmapPreviewSeries(wx.Panel):
320 278 super(BitmapPreviewSeries, self).__init__(parent)
321 279 # TODO: 3 pixels between the previews is a good idea?
322 280 # I have to test.
323   - #self.sizer = wx.BoxSizer(wx.HORIZONTAL)
324   - #self.SetSizer(self.sizer)
325 281 self.displayed_position = 0
326 282 self.nhidden_last_display = 0
327 283 self.selected_dicom = None
... ... @@ -359,14 +315,10 @@ class BitmapPreviewSeries(wx.Panel):
359 315 for j in xrange(NCOLS):
360 316 p = Preview(self)
361 317 p.Bind(EVT_PREVIEW_CLICK, self.OnSelect)
362   - #if (i == j == 0):
363   - #self._show_shadow(p)
364   - #p.Hide()
  318 +
365 319 self.previews.append(p)
366 320 self.grid.Add(p, 1, flag=wx.EXPAND)
367 321  
368   - #def _show_shadow(self, preview):
369   - # preview.ShowShadow()
370 322  
371 323 def _bind_events(self):
372 324 # When the user scrolls the window
... ... @@ -375,7 +327,6 @@ class BitmapPreviewSeries(wx.Panel):
375 327  
376 328 def _bind_pub_sub_events(self):
377 329 Publisher.subscribe(self.RemovePanel, 'Remove preview panel')
378   - #Publisher.subscribe(self.GetBmpInfoIdByOrder, 'Set bitmap in thumbnail')
379 330  
380 331 def OnSelect(self, evt):
381 332 my_evt = SerieEvent(myEVT_CLICK_SERIE, self.GetId())
... ... @@ -393,7 +344,6 @@ class BitmapPreviewSeries(wx.Panel):
393 344 evt.Skip()
394 345  
395 346 def SetBitmapFiles(self, data):
396   - #self.files = data
397 347 self.files = []
398 348  
399 349 bitmap = bitmap_reader.BitmapData()
... ... @@ -431,65 +381,6 @@ class BitmapPreviewSeries(wx.Panel):
431 381  
432 382 if p.IsShown():
433 383 p.bitmap_info.pos = n
434   -
435   - #def GetBmpInfoIdByOrder(self, pub_sub):
436   - # order = pub_sub.data
437   - #
438   - # for p in self.previews:
439   - # if p.bitmap_info != None:
440   - # if p.select_on:
441   - # p.select_on = False
442   - # p.selected = False
443   -
444   - # c = (PREVIEW_BACKGROUND)
445   - # p.SetBackgroundColour(c)
446   -
447   -
448   - # for p in self.previews:
449   - # if p.bitmap_info != None:
450   - # if p.bitmap_info.pos == order:
451   -
452   - # p.select_on = True
453   - # p.selected = True
454   -
455   - # p.Select()
456   -
457   - # # Generating a EVT_PREVIEW_CLICK event
458   - # my_evt = SerieEvent(myEVT_PREVIEW_CLICK, p.GetId())
459   -
460   - # my_evt.SetSelectedID(p.bitmap_info.id)
461   - # my_evt.SetItemData(p.bitmap_info.data)
462   -
463   - # my_evt.SetShiftStatus(False)
464   - # my_evt.SetEventObject(p)
465   - # self.GetEventHandler().ProcessEvent(my_evt)
466   -
467   -
468   - # #c = wx.SystemSettings_GetColour(wx.SYS_COLOUR_BTNFACE)
469   - # #p.SetBackgroundColour(c)
470   -
471   - #return p.id
472   -
473   - #def SetPatientGroups(self, patient):
474   - # self.files = []
475   - # self.displayed_position = 0
476   - # self.nhidden_last_display = 0
477   - # group_list = patient.GetGroups()
478   - # self.group_list = group_list
479   - # n = 0
480   - # for group in group_list:
481   - # info = BitmapInfo((group.dicom.patient.id,
482   - # group.dicom.acquisition.serie_number),
483   - # group.dicom,
484   - # group.title,
485   - # _("%d images") %(group.nslices))
486   - # self.files.append(info)
487   - # n+=1
488   - # scroll_range = len(self.files)/NCOLS
489   - # if scroll_range * NCOLS < len(self.files):
490   - # scroll_range +=1
491   - # self.scroll.SetScrollbar(0, NROWS, scroll_range, NCOLS)
492   - # self._display_previews()
493 384  
494 385  
495 386 def _display_previews(self):
... ... @@ -767,233 +658,3 @@ class SingleImagePreview(wx.Panel):
767 658  
768 659 # Setting slider position
769 660 self.slider.SetValue(index)
770   -
771   -
772   -#class BitmapPreviewSlice(wx.Panel):
773   -# def __init__(self, parent):
774   -# super(BitmapPreviewSlice, self).__init__(parent)
775   -# # TODO: 3 pixels between the previews is a good idea?
776   -# # I have to test.
777   -# self.displayed_position = 0
778   -# self.nhidden_last_display = 0
779   -# self.selected_dicom = None
780   -# self.selected_panel = None
781   -# self.first_selection = None
782   -# self.last_selection = None
783   -# self._init_ui()
784   -#
785   -# def _init_ui(self):
786   -# scroll = wx.ScrollBar(self, -1, style=wx.SB_VERTICAL)
787   -# self.scroll = scroll
788   -#
789   -# self.grid = wx.GridSizer(rows=NROWS, cols=NCOLS, vgap=3, hgap=3)
790   -#
791   -# sizer = wx.BoxSizer(wx.HORIZONTAL)
792   -# sizer.AddSizer(self.grid, 1, wx.EXPAND|wx.GROW|wx.ALL, 2)
793   -#
794   -# background_sizer = wx.BoxSizer(wx.HORIZONTAL)
795   -# background_sizer.AddSizer(sizer, 1, wx.EXPAND|wx.GROW|wx.ALL, 2)
796   -# background_sizer.Add(scroll, 0, wx.EXPAND|wx.GROW)
797   -# self.SetSizer(background_sizer)
798   -# background_sizer.Fit(self)
799   -#
800   -# self.Layout()
801   -# self.Update()
802   -# self.SetAutoLayout(1)
803   -#
804   -# self.sizer = background_sizer
805   -#
806   -# self._Add_Panels_Preview()
807   -# self._bind_events()
808   -#
809   -# def _Add_Panels_Preview(self):
810   -# self.previews = []
811   -# for i in xrange(NROWS):
812   -# for j in xrange(NCOLS):
813   -# p = Preview(self)
814   -# p.Bind(EVT_PREVIEW_CLICK, self.OnPreviewClick)
815   -# #p.Hide()
816   -# self.previews.append(p)
817   -# self.grid.Add(p, 1, flag=wx.EXPAND)
818   -#
819   -# def _bind_events(self):
820   -# # When the user scrolls the window
821   -# self.Bind(wx.EVT_SCROLL, self.OnScroll)
822   -# self.Bind(wx.EVT_MOUSEWHEEL, self.OnWheel)
823   -#
824   -# def SetDicomDirectory(self, directory):
825   -# utils.debug("Setting Dicom Directory %s" % directory)
826   -# self.directory = directory
827   -# self.series = dicom_reader.GetSeries(directory)[0]
828   -#
829   -# def SetPatientGroups(self, patient):
830   -# self.group_list = patient.GetGroups()
831   -#
832   -#
833   -# #def SetDicomSerie(self, pos):
834   -# # self.files = []
835   -# # self.displayed_position = 0
836   -# # self.nhidden_last_display = 0
837   -# # group = self.group_list[pos]
838   -# # self.group = group
839   -# # #dicom_files = group.GetList()
840   -# # dicom_files = group.GetHandSortedList()
841   -# # n = 0
842   -# # for dicom in dicom_files:
843   -# # info = BitmapInfo(n, dicom,
844   -# # _("Image %d") % (dicom.image.number),
845   -# # "%.2f" % (dicom.image.position[2]))
846   -# # self.files.append(info)
847   -# # n+=1
848   -#
849   -# # scroll_range = len(self.files)/NCOLS
850   -# # if scroll_range * NCOLS < len(self.files):
851   -# # scroll_range +=1
852   -# # self.scroll.SetScrollbar(0, NROWS, scroll_range, NCOLS)
853   -#
854   -# # self._display_previews()
855   -#
856   -# #def SetDicomGroup(self, group):
857   -# # self.files = []
858   -# # self.displayed_position = 0
859   -# # self.nhidden_last_display = 0
860   -# # #dicom_files = group.GetList()
861   -# # dicom_files = group.GetHandSortedList()
862   -# # n = 0
863   -# # for dicom in dicom_files:
864   -# # info = BitmapInfo(n, dicom,
865   -# # _("Image %d") % (dicom.image.number),
866   -# # "%.2f" % (dicom.image.position[2]),
867   -# # )
868   -# # self.files.append(info)
869   -# # n+=1
870   -#
871   -# # scroll_range = len(self.files)/NCOLS
872   -# # if scroll_range * NCOLS < len(self.files):
873   -# # scroll_range +=1
874   -# # self.scroll.SetScrollbar(0, NROWS, scroll_range, NCOLS)
875   -#
876   -# # self._display_previews()
877   -#
878   -# #def SetDicomGroup(self, group):
879   -# # self.files = []
880   -# # self.displayed_position = 0
881   -# # self.nhidden_last_display = 0
882   -# # #dicom_files = group.GetList()
883   -# # dicom_files = group.GetHandSortedList()
884   -# # n = 0
885   -# # for dicom in dicom_files:
886   -# # info = BitmapInfo(n, dicom,
887   -# # _("Image %d") % (dicom.image.number),
888   -# # "%.2f" % (dicom.image.position[2]),
889   -# # )
890   -# # self.files.append(info)
891   -# # n+=1
892   -#
893   -# # scroll_range = len(self.files)/NCOLS
894   -# # if scroll_range * NCOLS < len(self.files):
895   -# # scroll_range +=1
896   -# # self.scroll.SetScrollbar(0, NROWS, scroll_range, NCOLS)
897   -#
898   -# # self._display_previews()
899   -#
900   -#
901   -# def _display_previews(self):
902   -# initial = self.displayed_position * NCOLS
903   -# final = initial + NUM_PREVIEWS
904   -# if len(self.files) < final:
905   -# for i in xrange(final-len(self.files)):
906   -# try:
907   -# self.previews[-i-1].Hide()
908   -# except IndexError:
909   -# utils.debug("doesn't exist!")
910   -# self.nhidden_last_display = final-len(self.files)
911   -# else:
912   -# if self.nhidden_last_display:
913   -# for i in xrange(self.nhidden_last_display):
914   -# try:
915   -# self.previews[-i-1].Show()
916   -# except IndexError:
917   -# utils.debug("doesn't exist!")
918   -# self.nhidden_last_display = 0
919   -#
920   -# for f, p in zip(self.files[initial:final], self.previews):
921   -# p.SetBitmapToPreview(f)
922   -# if f.selected:
923   -# self.selected_panel = p
924   -# #p.interactor.Render()
925   -#
926   -# for f, p in zip(self.files[initial:final], self.previews):
927   -# p.Show()
928   -#
929   -# def OnPreviewClick(self, evt):
930   -#
931   -# dicom_id = evt.GetSelectID()
932   -#
933   -# if self.first_selection is None:
934   -# self.first_selection = dicom_id
935   -#
936   -# if self.last_selection is None:
937   -# self.last_selection = dicom_id
938   -#
939   -#
940   -# if evt.GetPressedShift():
941   -#
942   -# if dicom_id < self.first_selection and dicom_id < self.last_selection:
943   -# self.first_selection = dicom_id
944   -# else:
945   -# self.last_selection = dicom_id
946   -# else:
947   -# self.first_selection = dicom_id
948   -# self.last_selection = dicom_id
949   -#
950   -# for i in xrange(len(self.files)):
951   -#
952   -# if i == dicom_id:
953   -# self.files[i].selected = True
954   -# else:
955   -# self.files[i].selected = False
956   -#
957   -#
958   -# my_evt = SerieEvent(myEVT_CLICK_SLICE, self.GetId())
959   -# my_evt.SetSelectedID(evt.GetSelectID())
960   -# my_evt.SetItemData(evt.GetItemData())
961   -#
962   -# if self.selected_dicom:
963   -# self.selected_dicom.selected = self.selected_dicom is \
964   -# evt.GetEventObject().bitmap_info
965   -# self.selected_panel.select_on = self.selected_panel is evt.GetEventObject()
966   -#
967   -# if self.first_selection != self.last_selection:
968   -# for i in xrange(len(self.files)):
969   -# if i >= self.first_selection and i <= self.last_selection:
970   -# self.files[i].selected = True
971   -# else:
972   -# self.files[i].selected = False
973   -#
974   -# else:
975   -# self.selected_panel.Select()
976   -#
977   -# self._display_previews()
978   -# self.selected_panel = evt.GetEventObject()
979   -# self.selected_dicom = self.selected_panel.bitmap_info
980   -# self.GetEventHandler().ProcessEvent(my_evt)
981   -#
982   -# #Publisher.sendMessage("Selected Import Images", [self.first_selection, \
983   -# # self.last_selection])
984   -#
985   -# def OnScroll(self, evt=None):
986   -# if evt:
987   -# if self.displayed_position != evt.GetPosition():
988   -# self.displayed_position = evt.GetPosition()
989   -# else:
990   -# if self.displayed_position != self.scroll.GetThumbPosition():
991   -# self.displayed_position = self.scroll.GetThumbPosition()
992   -# self._display_previews()
993   -#
994   -# def OnWheel(self, evt):
995   -# d = evt.GetWheelDelta() / evt.GetWheelRotation()
996   -# self.scroll.SetThumbPosition(self.scroll.GetThumbPosition() - d)
997   -# self.OnScroll()
998   -
999   -
... ...
invesalius/gui/dialogs.py
... ... @@ -1686,10 +1686,17 @@ class ReorientImageDialog(wx.Dialog):
1686 1686  
1687 1687  
1688 1688 class ImportBitmapParameters(wx.Dialog):
  1689 + from os import sys
1689 1690  
1690 1691 def __init__(self):
1691 1692 pre = wx.PreDialog()
1692   - pre.Create(wx.GetApp().GetTopWindow(), -1, _(u"Parameters"),size=wx.Size(380,230),\
  1693 +
  1694 + if sys.platform == 'win32':
  1695 + size=wx.Size(380,180)
  1696 + else:
  1697 + size=wx.Size(380,210)
  1698 +
  1699 + pre.Create(wx.GetApp().GetTopWindow(), -1, _(u"Create project from bitmap"),size=wx.Size(380,220),\
1693 1700 style=wx.DEFAULT_DIALOG_STYLE|wx.FRAME_FLOAT_ON_PARENT|wx.STAY_ON_TOP)
1694 1701  
1695 1702 self.interval = 0
... ... @@ -1710,27 +1717,31 @@ class ImportBitmapParameters(wx.Dialog):
1710 1717 | wx.CLIP_CHILDREN
1711 1718 | wx.FULL_REPAINT_ON_RESIZE)
1712 1719  
1713   - gbs_principal = self.gbs = wx.GridBagSizer(3,1)
  1720 + gbs_principal = self.gbs = wx.GridBagSizer(4,1)
  1721 +
  1722 + gbs = self.gbs = wx.GridBagSizer(5, 2)
  1723 +
  1724 + flag_labels = wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL
1714 1725  
1715   - gbs = self.gbs = wx.GridBagSizer(4, 2)
1716   -
1717 1726 stx_name = wx.StaticText(p, -1, _(u"Project name:"))
1718 1727 tx_name = self.tx_name = wx.TextCtrl(p, -1, "InVesalius Bitmap", size=wx.Size(220,-1))
1719 1728  
1720   - stx_orientation = wx.StaticText(p, -1, _(u"Slices orientation:"))
  1729 + stx_orientation = wx.StaticText(p, -1, _(u"Slices orientation:"),)
1721 1730 cb_orientation_options = [_(u'Axial'), _(u'Coronal'), _(u'Sagital')]
1722 1731 cb_orientation = self.cb_orientation = wx.ComboBox(p, value="Axial", choices=cb_orientation_options,\
1723 1732 size=wx.Size(160,-1), style=wx.CB_DROPDOWN|wx.CB_READONLY)
1724 1733  
1725 1734 stx_spacing = wx.StaticText(p, -1, _(u"Spacing (mm):"))
1726 1735  
1727   - gbs.Add(stx_name, (0,0))
  1736 + gbs.Add(stx_name, (0,0), flag=flag_labels)
1728 1737 gbs.Add(tx_name, (0,1))
  1738 + gbs.AddStretchSpacer((1,0))
1729 1739  
1730   - gbs.Add(stx_orientation, (1,0))
1731   - gbs.Add(cb_orientation, (1,1))
  1740 + gbs.Add(stx_orientation, (2,0), flag=flag_labels)
  1741 + gbs.Add(cb_orientation, (2,1))
1732 1742  
1733   - gbs.Add(stx_spacing, (2,0))
  1743 + gbs.Add(stx_spacing, (3,0))
  1744 + gbs.AddStretchSpacer((4,0))
1734 1745  
1735 1746 #--- spacing --------------
1736 1747 gbs_spacing = wx.GridBagSizer(2, 6)
... ... @@ -1739,6 +1750,7 @@ class ImportBitmapParameters(wx.Dialog):
1739 1750 fsp_spacing_x = self.fsp_spacing_x = FS.FloatSpin(p, -1, min_val=0,\
1740 1751 increment=0.25, value=1.0, digits=8)
1741 1752  
  1753 +
1742 1754 stx_spacing_y = stx_spacing_y = wx.StaticText(p, -1, _(u"Y:"))
1743 1755 fsp_spacing_y = self.fsp_spacing_y = FS.FloatSpin(p, -1, min_val=0,\
1744 1756 increment=0.25, value=1.0, digits=8)
... ... @@ -1762,33 +1774,34 @@ class ImportBitmapParameters(wx.Dialog):
1762 1774 except(AttributeError):
1763 1775 pass
1764 1776  
1765   - gbs_spacing.Add(stx_spacing_x, (0,0))
  1777 + gbs_spacing.Add(stx_spacing_x, (0,0), flag=flag_labels)
1766 1778 gbs_spacing.Add(fsp_spacing_x, (0,1))
1767 1779  
1768   - gbs_spacing.Add(stx_spacing_y, (0,2))
  1780 + gbs_spacing.Add(stx_spacing_y, (0,2), flag=flag_labels)
1769 1781 gbs_spacing.Add(fsp_spacing_y, (0,3))
1770 1782  
1771   - gbs_spacing.Add(stx_spacing_z, (0,4))
  1783 + gbs_spacing.Add(stx_spacing_z, (0,4), flag=flag_labels)
1772 1784 gbs_spacing.Add(fsp_spacing_z, (0,5))
1773 1785  
1774 1786 #----- buttons ------------------------
1775   - gbs_button = wx.GridBagSizer(1, 4)
  1787 + gbs_button = wx.GridBagSizer(2, 4)
1776 1788  
1777 1789 btn_ok = self.btn_ok= wx.Button(p, wx.ID_OK)
1778 1790 btn_ok.SetDefault()
1779 1791  
1780 1792 btn_cancel = wx.Button(p, wx.ID_CANCEL)
1781 1793  
  1794 + gbs_button.AddStretchSpacer((0,2))
1782 1795 gbs_button.Add(btn_cancel, (1,2))
1783 1796 gbs_button.Add(btn_ok, (1,3))
1784 1797  
1785   -
1786   - gbs_principal.Add(gbs, (0,0))
1787   - gbs_principal.Add(gbs_spacing, (1,0))
1788   - gbs_principal.Add(gbs_button, (2,0), flag = wx.ALIGN_RIGHT)
  1798 + gbs_principal.AddSizer(gbs, (0,0), flag = wx.ALL|wx.EXPAND)
  1799 + gbs_principal.AddSizer(gbs_spacing, (1,0), flag=wx.ALL|wx.EXPAND)
  1800 + gbs_principal.AddStretchSpacer((2,0))
  1801 + gbs_principal.AddSizer(gbs_button, (3,0), flag = wx.ALIGN_RIGHT)
1789 1802  
1790 1803 box = wx.BoxSizer()
1791   - box.Add(gbs_principal, 1, wx.ALL|wx.EXPAND, 10)
  1804 + box.AddSizer(gbs_principal, 1, wx.ALL|wx.EXPAND, 10)
1792 1805  
1793 1806 p.SetSizer(box)
1794 1807  
... ... @@ -1820,10 +1833,8 @@ class ImportBitmapParameters(wx.Dialog):
1820 1833  
1821 1834 def BitmapNotSameSize():
1822 1835  
1823   - dlg = wx.MessageDialog(None,_("All bitmaps files must be the same width and height size"), 'Error',\
1824   - wx.OK | wx.ICON_ERROR
1825   - #wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION
1826   - )
  1836 + dlg = wx.MessageDialog(None,_("All bitmaps files must be the same \n width and height size."), 'Error',\
  1837 + wx.OK | wx.ICON_ERROR)
1827 1838  
1828 1839 dlg.ShowModal()
1829 1840 dlg.Destroy()
... ...
invesalius/gui/import_bitmap_panel.py
... ... @@ -58,8 +58,7 @@ class SelectEvent(wx.PyCommandEvent):
58 58  
59 59 class Panel(wx.Panel):
60 60 def __init__(self, parent):
61   - wx.Panel.__init__(self, parent, pos=wx.Point(5, 5))#,
62   - #size=wx.Size(280, 656))
  61 + wx.Panel.__init__(self, parent, pos=wx.Point(5, 5))
63 62  
64 63 sizer = wx.BoxSizer(wx.VERTICAL)
65 64 sizer.Add(InnerPanel(self), 1, wx.EXPAND|wx.GROW|wx.ALL, 5)
... ... @@ -75,8 +74,7 @@ class Panel(wx.Panel):
75 74 # Inner fold panel
76 75 class InnerPanel(wx.Panel):
77 76 def __init__(self, parent):
78   - wx.Panel.__init__(self, parent, pos=wx.Point(5, 5))#,
79   - #size=wx.Size(680, 656))
  77 + wx.Panel.__init__(self, parent, pos=wx.Point(5, 5))
80 78  
81 79 self.patients = []
82 80 self.first_image_selection = None
... ... @@ -140,26 +138,12 @@ class InnerPanel(wx.Panel):
140 138 self.last_image_selection = pubsub_evt.data[1]
141 139  
142 140 def _bind_events(self):
143   - self.Bind(EVT_SELECT_SERIE, self.OnSelectSerie)
144 141 self.Bind(EVT_SELECT_SLICE, self.OnSelectSlice)
145 142 self.Bind(EVT_SELECT_PATIENT, self.OnSelectPatient)
146 143 self.btn_ok.Bind(wx.EVT_BUTTON, self.OnClickOk)
147 144 self.btn_cancel.Bind(wx.EVT_BUTTON, self.OnClickCancel)
148 145 self.text_panel.Bind(EVT_SELECT_SERIE_TEXT, self.OnDblClickTextPanel)
149 146  
150   - def OnSelectSerie(self, evt):
151   - #patient_id, serie_number = evt.GetSelectID()
152   - #self.text_panel.SelectSerie(evt.GetSelectID())
153   - #for patient in self.patients:
154   - # if patient_id == patient.GetDicomSample().patient.id:
155   - # for group in patient.GetGroups():
156   - # if serie_number == group.GetDicomSample().acquisition.serie_number:
157   - # self.image_panel.SetSerie(group)
158   -
159   - pass
160   -
161   -
162   -
163 147 def OnSelectSlice(self, evt):
164 148 pass
165 149  
... ... @@ -175,33 +159,10 @@ class InnerPanel(wx.Panel):
175 159 parm.SetInterval(self.combo_interval.GetSelection())
176 160 parm.ShowModal()
177 161  
178   - group = self.text_panel.GetSelection()
179   - if group:
180   - self.LoadDicom(group)
181 162  
182 163 def OnClickCancel(self, evt):
183 164 Publisher.sendMessage("Cancel DICOM load")
184 165  
185   - def LoadDicom(self, group):
186   - #interval = self.combo_interval.GetSelection()
187   - #if not isinstance(group, dcm.DicomGroup):
188   - # group = max(group.GetGroups(), key=lambda g: g.nslices)
189   -
190   - #slice_amont = group.nslices
191   - #if (self.first_image_selection != None) and (self.first_image_selection != self.last_image_selection):
192   - # slice_amont = (self.last_image_selection) - self.first_image_selection
193   - # slice_amont += 1
194   - # if slice_amont == 0:
195   - # slice_amont = group.nslices
196   -
197   - #nslices_result = slice_amont / (interval + 1)
198   - #if (nslices_result > 1):
199   - # Publisher.sendMessage('Open DICOM group', (group, interval,
200   - # [self.first_image_selection, self.last_image_selection]))
201   - #else:
202   - # dlg.MissingFilesForReconstruction()
203   - pass
204   -
205 166  
206 167 class TextPanel(wx.Panel):
207 168 def __init__(self, parent):
... ... @@ -213,7 +174,8 @@ class TextPanel(wx.Panel):
213 174 self.idserie_treeitem = {}
214 175 self.treeitem_idpatient = {}
215 176  
216   - self.selected_item = None
  177 + self.selected_items = None
  178 + self.shift_pressed = False
217 179  
218 180 self.__init_gui()
219 181 self.__bind_events_wx()
... ... @@ -233,7 +195,7 @@ class TextPanel(wx.Panel):
233 195 | wx.TR_ROW_LINES
234 196 | wx.TR_COLUMN_LINES
235 197 | wx.TR_FULL_ROW_HIGHLIGHT
236   - | wx.TR_SINGLE
  198 + | wx.TR_MULTIPLE
237 199 | wx.TR_HIDE_ROOT
238 200 )
239 201  
... ... @@ -250,31 +212,38 @@ class TextPanel(wx.Panel):
250 212 self.root = tree.AddRoot(_("InVesalius Database"))
251 213 self.tree = tree
252 214  
  215 +
  216 +
253 217 def OnKeyPress(self, evt):
254 218 key_code = evt.GetKeyCode()
  219 +
255 220 if key_code == wx.WXK_DELETE or key_code == wx.WXK_NUMPAD_DELETE:
256   - if self.selected_item != self.tree.GetRootItem():
257   - text_item = self.tree.GetItemText(self.selected_item)
258   -
259   - index = bpr.BitmapData().GetIndexByPath(text_item)
260   -
261   - bpr.BitmapData().RemoveFileByPath(text_item)
262   -
263   - data_size = len(bpr.BitmapData().GetData())
264   -
265   - if index >= 0 and index < data_size:
266   - Publisher.sendMessage('Set bitmap in preview panel', index)
267   - elif index == data_size and data_size > 0:
268   - Publisher.sendMessage('Set bitmap in preview panel', index - 1)
269   - elif data_size == 1:
270   - Publisher.sendMessage('Set bitmap in preview panel', 0)
271   - else:
272   - Publisher.sendMessage('Show black slice in single preview image')
273   -
274   - self.tree.Delete(self.selected_item)
275   - self.tree.Update()
276   - self.tree.Refresh()
277   - Publisher.sendMessage('Remove preview panel', text_item)
  221 +
  222 + for selected_item in self.selected_items:
  223 +
  224 + if selected_item != self.tree.GetRootItem():
  225 + text_item = self.tree.GetItemText(selected_item)
  226 +
  227 + index = bpr.BitmapData().GetIndexByPath(text_item)
  228 +
  229 + bpr.BitmapData().RemoveFileByPath(text_item)
  230 +
  231 + data_size = len(bpr.BitmapData().GetData())
  232 +
  233 + if index >= 0 and index < data_size:
  234 + Publisher.sendMessage('Set bitmap in preview panel', index)
  235 + elif index == data_size and data_size > 0:
  236 + Publisher.sendMessage('Set bitmap in preview panel', index - 1)
  237 + elif data_size == 1:
  238 + Publisher.sendMessage('Set bitmap in preview panel', 0)
  239 + else:
  240 + Publisher.sendMessage('Show black slice in single preview image')
  241 +
  242 + self.tree.Delete(selected_item)
  243 + self.tree.Update()
  244 + self.tree.Refresh()
  245 + Publisher.sendMessage('Remove preview panel', text_item)
  246 +
278 247 evt.Skip()
279 248  
280 249 def SelectSeries(self, pubsub_evt):
... ... @@ -288,18 +257,18 @@ class TextPanel(wx.Panel):
288 257 self.tree.SetItemText(parent, value[5], 2)
289 258  
290 259 tree.Expand(self.root)
291   - #tree.SelectItem(parent_select)
292 260 tree.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnActivate)
293 261 tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged)
294 262  
295 263 Publisher.sendMessage('Load bitmap into import panel', data)
296 264  
297 265 def OnSelChanged(self, evt):
298   - item = self.tree.GetSelection()
  266 + self.selected_items = self.tree.GetSelections()
  267 + item = self.selected_items[-1]
  268 +
299 269 if self._selected_by_user:
300   - self.selected_item = item
301   -
302   - text_item = self.tree.GetItemText(self.selected_item)
  270 +
  271 + text_item = self.tree.GetItemText(item)
303 272 index = bpr.BitmapData().GetIndexByPath(text_item)
304 273 Publisher.sendMessage('Set bitmap in preview panel', index)
305 274  
... ... @@ -360,12 +329,8 @@ class ImagePanel(wx.Panel):
360 329 self.SetAutoLayout(1)
361 330  
362 331 def _bind_events(self):
363   - self.text_panel.Bind(EVT_SELECT_SERIE, self.OnSelectSerie)
364 332 self.text_panel.Bind(EVT_SELECT_SLICE, self.OnSelectSlice)
365 333  
366   - def OnSelectSerie(self, evt):
367   - evt.Skip()
368   -
369 334 def OnSelectSlice(self, evt):
370 335 self.image_panel.bitmap_preview.ShowSlice(evt.GetSelectID())
371 336 evt.Skip()
... ... @@ -377,16 +342,12 @@ class ImagePanel(wx.Panel):
377 342 class SeriesPanel(wx.Panel):
378 343 def __init__(self, parent):
379 344 wx.Panel.__init__(self, parent, -1)
380   - #self.SetBackgroundColour((0,0,0))
381 345  
382 346 self.thumbnail_preview = bpp.BitmapPreviewSeries(self)
383   - #self.bitmap_preview = bpp.BitmapPreviewSlice(self)
384   - #self.bitmap_preview.Show(0)
385   -
  347 +
386 348  
387 349 self.sizer = wx.BoxSizer(wx.HORIZONTAL)
388 350 self.sizer.Add(self.thumbnail_preview, 1, wx.EXPAND | wx.ALL, 5)
389   - #self.sizer.Add(self.bitmap_preview, 1, wx.EXPAND | wx.ALL, 5)
390 351 self.sizer.Fit(self)
391 352  
392 353 self.SetSizer(self.sizer)
... ... @@ -399,21 +360,11 @@ class SeriesPanel(wx.Panel):
399 360 self._bind_gui_evt()
400 361  
401 362 def __bind_evt(self):
402   - #Publisher.subscribe(self.ShowDicomSeries, 'Load bitmap preview')
403   - #Publisher.subscribe(self.SetDicomSeries, 'Load group into import panel')
404 363 Publisher.subscribe(self.SetBitmapFiles, 'Load bitmap into import panel')
405 364  
406 365 def _bind_gui_evt(self):
407 366 self.thumbnail_preview.Bind(bpp.EVT_CLICK_SERIE, self.OnSelectSerie)
408   - #self.bitmap_preview.Bind(bpp.EVT_CLICK_SLICE, self.OnSelectSlice)
409 367  
410   - #def SetDicomSeries(self, pubsub_evt):
411   - # group = pubsub_evt.data
412   - # self.bitmap_preview.SetDicomGroup(group)
413   - # self.bitmap_preview.Show(1)
414   - # self.thumbnail_preview.Show(0)
415   - # self.sizer.Layout()
416   - # self.Update()
417 368  
418 369 def GetSelectedImagesRange(self):
419 370 return [self.bitmap_preview.first_selected, self.dicom_preview_last_selection]
... ... @@ -422,11 +373,9 @@ class SeriesPanel(wx.Panel):
422 373  
423 374  
424 375 bitmap = pubsub_evt.data
425   - #self.bitmap_preview.Show(0)
426 376 self.thumbnail_preview.Show(1)
427 377  
428 378 self.thumbnail_preview.SetBitmapFiles(bitmap)
429   - #self.bitmap_preview.SetPatientGroups(patient)
430 379  
431 380 self.Update()
432 381  
... ... @@ -437,9 +386,6 @@ class SeriesPanel(wx.Panel):
437 386 my_evt.SetItemData(evt.GetItemData())
438 387 self.GetEventHandler().ProcessEvent(my_evt)
439 388  
440   - #self.bitmap_preview.SetDicomGroup(data)
441   - #self.bitmap_preview.Show(1)
442   - #self.thumbnail_preview.Show(0)
443 389 self.sizer.Layout()
444 390 self.Show()
445 391 self.Update()
... ... @@ -451,12 +397,6 @@ class SeriesPanel(wx.Panel):
451 397 self.GetEventHandler().ProcessEvent(my_evt)
452 398  
453 399  
454   - #def ShowDicomSeries(self, pubsub_evt):
455   - # patient = pubsub_evt.data
456   - # if isinstance(patient, dcm.PatientGroup):
457   - # self.thumbnail_preview.SetPatientGroups(patient)
458   - # self.bitmap_preview.SetPatientGroups(patient)
459   -
460 400  
461 401 class SlicePanel(wx.Panel):
462 402 def __init__(self, parent):
... ... @@ -465,8 +405,6 @@ class SlicePanel(wx.Panel):
465 405 self.__bind_evt()
466 406  
467 407 def __bind_evt(self):
468   - #Publisher.subscribe(self.ShowDicomSeries, 'Load bitmap preview')
469   - #Publisher.subscribe(self.SetDicomSeries, 'Load group into import panel')
470 408 Publisher.subscribe(self.SetBitmapFiles, 'Load bitmap into import panel')
471 409  
472 410 def __init_gui(self):
... ... @@ -487,17 +425,3 @@ class SlicePanel(wx.Panel):
487 425 self.bitmap_preview.SetBitmapFiles(data)
488 426 self.sizer.Layout()
489 427 self.Update()
490   -
491   - #def SetDicomSeries(self, evt):
492   - # group = evt.data
493   - # self.bitmap_preview.SetDicomGroup(group)
494   - # self.sizer.Layout()
495   - # self.Update()
496   -
497   - #def ShowDicomSeries(self, pubsub_evt):
498   - # patient = pubsub_evt.data
499   - # group = patient.GetGroups()[0]
500   - # self.bitmap_preview.SetDicomGroup(group)
501   - # self.sizer.Layout()
502   - # self.Update()
503   -
... ...
invesalius/reader/bitmap_reader.py
... ... @@ -139,14 +139,10 @@ class LoadBitmap:
139 139 global vtk_error
140 140  
141 141 #----- verify extension ------------------
142   - #ex = self.filepath.split('.')[-1]
143   -
144 142 extension = VerifyDataType(self.filepath)
145 143  
146 144 file_name = self.filepath.split(os.path.sep)[-1]
147 145  
148   - #if extension == 'bmp':
149   - # reader = vtk.vtkBMPReader()
150 146 n_array = ReadBitmap(self.filepath)
151 147  
152 148 if not(isinstance(n_array, numpy.ndarray)):
... ... @@ -156,9 +152,6 @@ class LoadBitmap:
156 152 slice_number=1, orientation="AXIAL")
157 153  
158 154  
159   - #reader.SetFileName(self.filepath)
160   - #reader.Update()
161   -
162 155 dim = image.GetDimensions()
163 156 x = dim[0]
164 157 y = dim[1]
... ... @@ -229,7 +222,6 @@ def yGetBitmaps(directory, recursive=True, gui=True):
229 222 counter += 1
230 223 if gui:
231 224 yield (counter,nfiles)
232   - #LoadDicom(grouper, filepath)
233 225 LoadBitmap(bmp_file, filepath)
234 226 else:
235 227 dirpath, dirnames, filenames = os.walk(directory)
... ... @@ -238,16 +230,7 @@ def yGetBitmaps(directory, recursive=True, gui=True):
238 230 counter += 1
239 231 if gui:
240 232 yield (counter,nfiles)
241   - #q.put(filepath)
242   -
243   - #for t in threads:
244   - # q.put(0)
245   -
246   - #for t in threads:
247   - # t.join()
248 233  
249   - #TODO: Is this commented update necessary?
250   - #grouper.Update()
251 234 yield bmp_file.GetValues()
252 235  
253 236  
... ... @@ -275,13 +258,6 @@ class ProgressBitmapReader:
275 258  
276 259 def GetBitmaps(self, path, recursive):
277 260  
278   - #if not const.VTK_WARNING:
279   - # log_path = os.path.join(const.LOG_FOLDER, 'vtkoutput.txt')
280   - # fow = vtk.vtkFileOutputWindow()
281   - # fow.SetFileName(log_path)
282   - # ow = vtk.vtkOutputWindow()
283   - # ow.SetInstance(fow)
284   -
285 261 y = yGetBitmaps(path, recursive)
286 262 for value_progress in y:
287 263 if not self.running:
... ... @@ -318,7 +294,13 @@ def ScipyRead(filepath):
318 294 return False
319 295  
320 296 def VtkRead(filepath, t):
321   -
  297 + if not const.VTK_WARNING:
  298 + log_path = os.path.join(const.LOG_FOLDER, 'vtkoutput.txt')
  299 + fow = vtk.vtkFileOutputWindow()
  300 + fow.SetFileName(log_path)
  301 + ow = vtk.vtkOutputWindow()
  302 + ow.SetInstance(fow)
  303 +
322 304 global no_error
323 305  
324 306 if t == "bmp":
... ...