Commit f68939cd6cc3bfe95a2b5e61a1d2a217af24ee3a

Authored by Thiago Franco de Moraes
2 parents 2ba9347b 33bc5262

Merge pull request #30 from tfmoraes/wxgtk3

Adpated InVesalius to run in wxpython3
invesalius/gui/data_notebook.py
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 -# -*- coding: UTF-8 -*- 2 +# -*- coding: UTF-8 -*-
3 #-------------------------------------------------------------------------- 3 #--------------------------------------------------------------------------
4 # Software: InVesalius - Software de Reconstrucao 3D de Imagens Medicas 4 # Software: InVesalius - Software de Reconstrucao 3D de Imagens Medicas
5 # Copyright: (C) 2001 Centro de Pesquisas Renato Archer 5 # Copyright: (C) 2001 Centro de Pesquisas Renato Archer
@@ -22,9 +22,9 @@ import sys @@ -22,9 +22,9 @@ import sys
22 import platform 22 import platform
23 23
24 try: 24 try:
25 - from PIL import Image  
26 -except(ImportError):  
27 import Image 25 import Image
  26 +except ImportError:
  27 + from PIL import Image
28 28
29 import wx 29 import wx
30 import wx.grid 30 import wx.grid
@@ -54,9 +54,8 @@ LOCATION = {const.SURFACE: _(u"3D"), @@ -54,9 +54,8 @@ LOCATION = {const.SURFACE: _(u"3D"),
54 # Panel that initializes notebook and related tabs 54 # Panel that initializes notebook and related tabs
55 class NotebookPanel(wx.Panel): 55 class NotebookPanel(wx.Panel):
56 def __init__(self, parent): 56 def __init__(self, parent):
57 - wx.Panel.__init__(self, parent, pos=wx.Point(0, 50),  
58 - size=wx.Size(256, 200))  
59 - 57 + wx.Panel.__init__(self, parent)
  58 +
60 book = wx.Notebook(self, -1,style= wx.BK_DEFAULT) 59 book = wx.Notebook(self, -1,style= wx.BK_DEFAULT)
61 # TODO: check under Windows and Linux 60 # TODO: check under Windows and Linux
62 # this was necessary under cOS: 61 # this was necessary under cOS:
@@ -68,13 +67,13 @@ class NotebookPanel(wx.Panel): @@ -68,13 +67,13 @@ class NotebookPanel(wx.Panel):
68 book.AddPage(SurfacePage(book), _("3D surfaces")) 67 book.AddPage(SurfacePage(book), _("3D surfaces"))
69 book.AddPage(MeasurePage(book), _("Measures")) 68 book.AddPage(MeasurePage(book), _("Measures"))
70 #book.AddPage(AnnotationsListCtrlPanel(book), _("Notes")) 69 #book.AddPage(AnnotationsListCtrlPanel(book), _("Notes"))
71 - 70 +
72 book.SetSelection(0) 71 book.SetSelection(0)
73 - 72 +
74 sizer = wx.BoxSizer(wx.VERTICAL) 73 sizer = wx.BoxSizer(wx.VERTICAL)
75 - sizer.Add(book, 1, wx.EXPAND) 74 + sizer.Add(book, 0, wx.EXPAND)
76 self.SetSizer(sizer) 75 self.SetSizer(sizer)
77 - 76 +
78 book.Refresh() 77 book.Refresh()
79 self.book = book 78 self.book = book
80 79
@@ -117,8 +116,7 @@ class MeasurePage(wx.Panel): @@ -117,8 +116,7 @@ class MeasurePage(wx.Panel):
117 Page related to mask items. 116 Page related to mask items.
118 """ 117 """
119 def __init__(self, parent): 118 def __init__(self, parent):
120 - wx.Panel.__init__(self, parent, pos=wx.Point(0, 50),  
121 - size=wx.Size(256, 140)) 119 + wx.Panel.__init__(self, parent)
122 self.__init_gui() 120 self.__init_gui()
123 121
124 def __init_gui(self): 122 def __init_gui(self):
@@ -148,7 +146,7 @@ class MeasureButtonControlPanel(wx.Panel): @@ -148,7 +146,7 @@ class MeasureButtonControlPanel(wx.Panel):
148 self.__init_gui() 146 self.__init_gui()
149 147
150 def __init_gui(self): 148 def __init_gui(self):
151 - 149 +
152 # Bitmaps to be used in plate buttons 150 # Bitmaps to be used in plate buttons
153 BMP_NEW = wx.Bitmap("../icons/data_new.png", 151 BMP_NEW = wx.Bitmap("../icons/data_new.png",
154 wx.BITMAP_TYPE_PNG) 152 wx.BITMAP_TYPE_PNG)
@@ -162,16 +160,16 @@ class MeasureButtonControlPanel(wx.Panel): @@ -162,16 +160,16 @@ class MeasureButtonControlPanel(wx.Panel):
162 button_new = pbtn.PlateButton(self, BTN_NEW, "", 160 button_new = pbtn.PlateButton(self, BTN_NEW, "",
163 BMP_NEW, 161 BMP_NEW,
164 style=button_style, 162 style=button_style,
165 - size = wx.Size(18, 18)) 163 + size = wx.Size(24, 20))
166 self.button_new = button_new 164 self.button_new = button_new
167 button_remove = pbtn.PlateButton(self, BTN_REMOVE, "", 165 button_remove = pbtn.PlateButton(self, BTN_REMOVE, "",
168 BMP_REMOVE, 166 BMP_REMOVE,
169 style=button_style, 167 style=button_style,
170 - size = wx.Size(18, 18)) 168 + size = wx.Size(24, 20))
171 button_duplicate = pbtn.PlateButton(self, BTN_DUPLICATE, "", 169 button_duplicate = pbtn.PlateButton(self, BTN_DUPLICATE, "",
172 BMP_DUPLICATE, 170 BMP_DUPLICATE,
173 style=button_style, 171 style=button_style,
174 - size = wx.Size(18, 18)) 172 + size = wx.Size(24, 20))
175 button_duplicate.Disable() 173 button_duplicate.Disable()
176 174
177 # Add all controls to gui 175 # Add all controls to gui
@@ -206,7 +204,7 @@ class MeasureButtonControlPanel(wx.Panel): @@ -206,7 +204,7 @@ class MeasureButtonControlPanel(wx.Panel):
206 204
207 def OnNew(self): 205 def OnNew(self):
208 self.PopupMenu(self.menu) 206 self.PopupMenu(self.menu)
209 - 207 +
210 def OnMenu(self, evt): 208 def OnMenu(self, evt):
211 id = evt.GetId() 209 id = evt.GetId()
212 if id == const.MEASURE_LINEAR: 210 if id == const.MEASURE_LINEAR:
@@ -222,7 +220,7 @@ class MeasureButtonControlPanel(wx.Panel): @@ -222,7 +220,7 @@ class MeasureButtonControlPanel(wx.Panel):
222 if selected_items: 220 if selected_items:
223 Publisher.sendMessage('Duplicate measurement', selected_items) 221 Publisher.sendMessage('Duplicate measurement', selected_items)
224 else: 222 else:
225 - dlg.MaskSelectionRequiredForDuplication() 223 + dlg.MaskSelectionRequiredForDuplication()
226 224
227 225
228 226
@@ -233,8 +231,7 @@ class MaskPage(wx.Panel): @@ -233,8 +231,7 @@ class MaskPage(wx.Panel):
233 Page related to mask items. 231 Page related to mask items.
234 """ 232 """
235 def __init__(self, parent): 233 def __init__(self, parent):
236 - wx.Panel.__init__(self, parent, pos=wx.Point(0, 50),  
237 - size=wx.Size(256, 140)) 234 + wx.Panel.__init__(self, parent)
238 self.__init_gui() 235 self.__init_gui()
239 236
240 def __init_gui(self): 237 def __init_gui(self):
@@ -262,7 +259,7 @@ class ButtonControlPanel(wx.Panel): @@ -262,7 +259,7 @@ class ButtonControlPanel(wx.Panel):
262 self.__init_gui() 259 self.__init_gui()
263 260
264 def __init_gui(self): 261 def __init_gui(self):
265 - 262 +
266 # Bitmaps to be used in plate buttons 263 # Bitmaps to be used in plate buttons
267 BMP_NEW = wx.Bitmap("../icons/data_new.png", 264 BMP_NEW = wx.Bitmap("../icons/data_new.png",
268 wx.BITMAP_TYPE_PNG) 265 wx.BITMAP_TYPE_PNG)
@@ -276,15 +273,15 @@ class ButtonControlPanel(wx.Panel): @@ -276,15 +273,15 @@ class ButtonControlPanel(wx.Panel):
276 button_new = pbtn.PlateButton(self, BTN_NEW, "", 273 button_new = pbtn.PlateButton(self, BTN_NEW, "",
277 BMP_NEW, 274 BMP_NEW,
278 style=button_style, 275 style=button_style,
279 - size = wx.Size(18, 18)) 276 + size = wx.Size(24, 20))
280 button_remove = pbtn.PlateButton(self, BTN_REMOVE, "", 277 button_remove = pbtn.PlateButton(self, BTN_REMOVE, "",
281 BMP_REMOVE, 278 BMP_REMOVE,
282 style=button_style, 279 style=button_style,
283 - size = wx.Size(18, 18)) 280 + size = wx.Size(24, 20))
284 button_duplicate = pbtn.PlateButton(self, BTN_DUPLICATE, "", 281 button_duplicate = pbtn.PlateButton(self, BTN_DUPLICATE, "",
285 BMP_DUPLICATE, 282 BMP_DUPLICATE,
286 style=button_style, 283 style=button_style,
287 - size = wx.Size(18, 18)) 284 + size = wx.Size(24, 20))
288 285
289 # Add all controls to gui 286 # Add all controls to gui
290 sizer = wx.BoxSizer(wx.HORIZONTAL) 287 sizer = wx.BoxSizer(wx.HORIZONTAL)
@@ -332,17 +329,17 @@ class ButtonControlPanel(wx.Panel): @@ -332,17 +329,17 @@ class ButtonControlPanel(wx.Panel):
332 if selected_items: 329 if selected_items:
333 Publisher.sendMessage('Duplicate masks', selected_items) 330 Publisher.sendMessage('Duplicate masks', selected_items)
334 else: 331 else:
335 - dlg.MaskSelectionRequiredForDuplication() 332 + dlg.MaskSelectionRequiredForDuplication()
336 333
337 class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): 334 class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
338 335
339 def __init__(self, parent, ID=-1, pos=wx.DefaultPosition, 336 def __init__(self, parent, ID=-1, pos=wx.DefaultPosition,
340 size=wx.DefaultSize, style=wx.LC_REPORT): 337 size=wx.DefaultSize, style=wx.LC_REPORT):
341 - 338 +
342 # native look and feel for MacOS 339 # native look and feel for MacOS
343 #if wx.Platform == "__WXMAC__": 340 #if wx.Platform == "__WXMAC__":
344 # wx.SystemOptions.SetOptionInt("mac.listctrl.always_use_generic", 0) 341 # wx.SystemOptions.SetOptionInt("mac.listctrl.always_use_generic", 0)
345 - 342 +
346 wx.ListCtrl.__init__(self, parent, ID, pos, size, style=wx.LC_REPORT) 343 wx.ListCtrl.__init__(self, parent, ID, pos, size, style=wx.LC_REPORT)
347 listmix.TextEditMixin.__init__(self) 344 listmix.TextEditMixin.__init__(self)
348 self.mask_list_index = {} 345 self.mask_list_index = {}
@@ -351,13 +348,13 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -351,13 +348,13 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
351 self.__init_image_list() 348 self.__init_image_list()
352 self.__bind_events_wx() 349 self.__bind_events_wx()
353 self.__bind_events() 350 self.__bind_events()
354 - 351 +
355 def __bind_events_wx(self): 352 def __bind_events_wx(self):
356 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated) 353 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated)
357 self.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnEditLabel) 354 self.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnEditLabel)
358 self.Bind(wx.EVT_KEY_UP, self.OnKeyEvent) 355 self.Bind(wx.EVT_KEY_UP, self.OnKeyEvent)
359 356
360 - 357 +
361 def __bind_events(self): 358 def __bind_events(self):
362 Publisher.subscribe(self.AddMask, 'Add mask') 359 Publisher.subscribe(self.AddMask, 'Add mask')
363 Publisher.subscribe(self.EditMaskThreshold, 360 Publisher.subscribe(self.EditMaskThreshold,
@@ -376,7 +373,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -376,7 +373,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
376 self.RemoveMasks() 373 self.RemoveMasks()
377 elif (keycode == wx.WXK_DELETE): 374 elif (keycode == wx.WXK_DELETE):
378 self.RemoveMasks() 375 self.RemoveMasks()
379 - 376 +
380 def RemoveMasks(self): 377 def RemoveMasks(self):
381 """ 378 """
382 Remove selected items. 379 Remove selected items.
@@ -403,7 +400,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -403,7 +400,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
403 new_dict[i-1] = old_dict[i] 400 new_dict[i-1] = old_dict[i]
404 old_dict = new_dict 401 old_dict = new_dict
405 self.mask_list_index = new_dict 402 self.mask_list_index = new_dict
406 - 403 +
407 if new_dict: 404 if new_dict:
408 if index == self.current_index: 405 if index == self.current_index:
409 self.SetItemImage(0, 1) 406 self.SetItemImage(0, 1)
@@ -421,7 +418,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -421,7 +418,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
421 def OnCloseProject(self, pubsub_evt): 418 def OnCloseProject(self, pubsub_evt):
422 self.DeleteAllItems() 419 self.DeleteAllItems()
423 self.mask_list_index = {} 420 self.mask_list_index = {}
424 - 421 +
425 def OnChangeCurrentMask(self, pubsub_evt): 422 def OnChangeCurrentMask(self, pubsub_evt):
426 mask_index = pubsub_evt.data 423 mask_index = pubsub_evt.data
427 try: 424 try:
@@ -439,15 +436,15 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -439,15 +436,15 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
439 self.SetItemImage(self.current_index, 0) 436 self.SetItemImage(self.current_index, 0)
440 437
441 def __init_columns(self): 438 def __init_columns(self):
442 - 439 +
443 self.InsertColumn(0, "", wx.LIST_FORMAT_CENTER) 440 self.InsertColumn(0, "", wx.LIST_FORMAT_CENTER)
444 self.InsertColumn(1, _("Name")) 441 self.InsertColumn(1, _("Name"))
445 self.InsertColumn(2, _("Threshold"), wx.LIST_FORMAT_RIGHT) 442 self.InsertColumn(2, _("Threshold"), wx.LIST_FORMAT_RIGHT)
446 -  
447 - self.SetColumnWidth(0, 20) 443 +
  444 + self.SetColumnWidth(0, 25)
448 self.SetColumnWidth(1, 120) 445 self.SetColumnWidth(1, 120)
449 self.SetColumnWidth(2, 90) 446 self.SetColumnWidth(2, 90)
450 - 447 +
451 def __init_image_list(self): 448 def __init_image_list(self):
452 self.imagelist = wx.ImageList(16, 16) 449 self.imagelist = wx.ImageList(16, 16)
453 450
@@ -466,7 +463,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -466,7 +463,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
466 self.SetImageList(self.imagelist,wx.IMAGE_LIST_SMALL) 463 self.SetImageList(self.imagelist,wx.IMAGE_LIST_SMALL)
467 464
468 self.image_gray = Image.open("../icons/object_colour.jpg") 465 self.image_gray = Image.open("../icons/object_colour.jpg")
469 - 466 +
470 def OnEditLabel(self, evt): 467 def OnEditLabel(self, evt):
471 Publisher.sendMessage('Change mask name', 468 Publisher.sendMessage('Change mask name',
472 (evt.GetIndex(), evt.GetLabel())) 469 (evt.GetIndex(), evt.GetLabel()))
@@ -474,7 +471,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -474,7 +471,7 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
474 471
475 def OnItemActivated(self, evt): 472 def OnItemActivated(self, evt):
476 self.ToggleItem(evt.m_itemIndex) 473 self.ToggleItem(evt.m_itemIndex)
477 - 474 +
478 def OnCheckItem(self, index, flag): 475 def OnCheckItem(self, index, flag):
479 if flag: 476 if flag:
480 for key in self.mask_list_index.keys(): 477 for key in self.mask_list_index.keys():
@@ -505,22 +502,22 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -505,22 +502,22 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
505 def InsertNewItem(self, index=0, label=_("Mask"), threshold="(1000, 4500)", 502 def InsertNewItem(self, index=0, label=_("Mask"), threshold="(1000, 4500)",
506 colour=None): 503 colour=None):
507 self.InsertStringItem(index, "") 504 self.InsertStringItem(index, "")
508 - self.SetStringItem(index, 1, label,  
509 - imageId=self.mask_list_index[index]) 505 + self.SetStringItem(index, 1, label,
  506 + imageId=self.mask_list_index[index])
510 self.SetStringItem(index, 2, threshold) 507 self.SetStringItem(index, 2, threshold)
511 self.SetItemImage(index, 1) 508 self.SetItemImage(index, 1)
512 for key in self.mask_list_index.keys(): 509 for key in self.mask_list_index.keys():
513 if key != index: 510 if key != index:
514 self.SetItemImage(key, 0) 511 self.SetItemImage(key, 0)
515 self.current_index = index 512 self.current_index = index
516 - 513 +
517 def AddMask(self, pubsub_evt): 514 def AddMask(self, pubsub_evt):
518 index, mask_name, threshold_range, colour = pubsub_evt.data 515 index, mask_name, threshold_range, colour = pubsub_evt.data
519 image = self.CreateColourBitmap(colour) 516 image = self.CreateColourBitmap(colour)
520 image_index = self.imagelist.Add(image) 517 image_index = self.imagelist.Add(image)
521 self.mask_list_index[index] = image_index 518 self.mask_list_index[index] = image_index
522 self.InsertNewItem(index, mask_name, str(threshold_range)) 519 self.InsertNewItem(index, mask_name, str(threshold_range))
523 - 520 +
524 def EditMaskThreshold(self, pubsub_evt): 521 def EditMaskThreshold(self, pubsub_evt):
525 index, threshold_range = pubsub_evt.data 522 index, threshold_range = pubsub_evt.data
526 self.SetStringItem(index, 2, str(threshold_range)) 523 self.SetStringItem(index, 2, str(threshold_range))
@@ -553,8 +550,7 @@ class SurfacePage(wx.Panel): @@ -553,8 +550,7 @@ class SurfacePage(wx.Panel):
553 Page related to mask items. 550 Page related to mask items.
554 """ 551 """
555 def __init__(self, parent): 552 def __init__(self, parent):
556 - wx.Panel.__init__(self, parent, pos=wx.Point(0, 50),  
557 - size=wx.Size(256, 140)) 553 + wx.Panel.__init__(self, parent)
558 self.__init_gui() 554 self.__init_gui()
559 555
560 def __init_gui(self): 556 def __init_gui(self):
@@ -581,7 +577,7 @@ class SurfaceButtonControlPanel(wx.Panel): @@ -581,7 +577,7 @@ class SurfaceButtonControlPanel(wx.Panel):
581 self.__init_gui() 577 self.__init_gui()
582 578
583 def __init_gui(self): 579 def __init_gui(self):
584 - 580 +
585 # Bitmaps to be used in plate buttons 581 # Bitmaps to be used in plate buttons
586 BMP_NEW = wx.Bitmap("../icons/data_new.png", 582 BMP_NEW = wx.Bitmap("../icons/data_new.png",
587 wx.BITMAP_TYPE_PNG) 583 wx.BITMAP_TYPE_PNG)
@@ -595,15 +591,15 @@ class SurfaceButtonControlPanel(wx.Panel): @@ -595,15 +591,15 @@ class SurfaceButtonControlPanel(wx.Panel):
595 button_new = pbtn.PlateButton(self, BTN_NEW, "", 591 button_new = pbtn.PlateButton(self, BTN_NEW, "",
596 BMP_NEW, 592 BMP_NEW,
597 style=button_style, 593 style=button_style,
598 - size = wx.Size(18, 18)) 594 + size = wx.Size(24, 20))
599 button_remove = pbtn.PlateButton(self, BTN_REMOVE, "", 595 button_remove = pbtn.PlateButton(self, BTN_REMOVE, "",
600 BMP_REMOVE, 596 BMP_REMOVE,
601 style=button_style, 597 style=button_style,
602 - size = wx.Size(18, 18)) 598 + size = wx.Size(24, 20))
603 button_duplicate = pbtn.PlateButton(self, BTN_DUPLICATE, "", 599 button_duplicate = pbtn.PlateButton(self, BTN_DUPLICATE, "",
604 BMP_DUPLICATE, 600 BMP_DUPLICATE,
605 style=button_style, 601 style=button_style,
606 - size = wx.Size(18, 18)) 602 + size = wx.Size(24, 20))
607 603
608 # Add all controls to gui 604 # Add all controls to gui
609 sizer = wx.BoxSizer(wx.HORIZONTAL) 605 sizer = wx.BoxSizer(wx.HORIZONTAL)
@@ -627,7 +623,7 @@ class SurfaceButtonControlPanel(wx.Panel): @@ -627,7 +623,7 @@ class SurfaceButtonControlPanel(wx.Panel):
627 623
628 def OnNew(self): 624 def OnNew(self):
629 sl = slice_.Slice() 625 sl = slice_.Slice()
630 - dialog = dlg.SurfaceCreationDialog(None, -1, 626 + dialog = dlg.SurfaceCreationDialog(None, -1,
631 _('New surface'), 627 _('New surface'),
632 mask_edited=sl.current_mask.was_edited) 628 mask_edited=sl.current_mask.was_edited)
633 try: 629 try:
@@ -653,18 +649,18 @@ class SurfaceButtonControlPanel(wx.Panel): @@ -653,18 +649,18 @@ class SurfaceButtonControlPanel(wx.Panel):
653 if selected_items: 649 if selected_items:
654 Publisher.sendMessage('Duplicate surfaces', selected_items) 650 Publisher.sendMessage('Duplicate surfaces', selected_items)
655 else: 651 else:
656 - dlg.SurfaceSelectionRequiredForDuplication() 652 + dlg.SurfaceSelectionRequiredForDuplication()
657 653
658 654
659 class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): 655 class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
660 656
661 def __init__(self, parent, ID=-1, pos=wx.DefaultPosition, 657 def __init__(self, parent, ID=-1, pos=wx.DefaultPosition,
662 size=wx.DefaultSize, style=wx.LC_REPORT): 658 size=wx.DefaultSize, style=wx.LC_REPORT):
663 - 659 +
664 # native look and feel for MacOS 660 # native look and feel for MacOS
665 #if wx.Platform == "__WXMAC__": 661 #if wx.Platform == "__WXMAC__":
666 # wx.SystemOptions.SetOptionInt("mac.listctrl.always_use_generic", 0) 662 # wx.SystemOptions.SetOptionInt("mac.listctrl.always_use_generic", 0)
667 - 663 +
668 wx.ListCtrl.__init__(self, parent, ID, pos, size, style=wx.LC_REPORT) 664 wx.ListCtrl.__init__(self, parent, ID, pos, size, style=wx.LC_REPORT)
669 listmix.TextEditMixin.__init__(self) 665 listmix.TextEditMixin.__init__(self)
670 666
@@ -686,7 +682,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -686,7 +682,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
686 Publisher.subscribe(self.OnHideSurface, 'Hide surface items') 682 Publisher.subscribe(self.OnHideSurface, 'Hide surface items')
687 683
688 Publisher.subscribe(self.OnShowSingle, 'Show single surface') 684 Publisher.subscribe(self.OnShowSingle, 'Show single surface')
689 - Publisher.subscribe(self.OnShowMultiple, 'Show multiple surfaces') 685 + Publisher.subscribe(self.OnShowMultiple, 'Show multiple surfaces')
690 686
691 def __bind_events_wx(self): 687 def __bind_events_wx(self):
692 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated) 688 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated)
@@ -730,7 +726,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -730,7 +726,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
730 726
731 Publisher.sendMessage('Remove surfaces', selected_items) 727 Publisher.sendMessage('Remove surfaces', selected_items)
732 else: 728 else:
733 - dlg.SurfaceSelectionRequiredForRemoval() 729 + dlg.SurfaceSelectionRequiredForRemoval()
734 730
735 def OnCloseProject(self, pubsub_evt): 731 def OnCloseProject(self, pubsub_evt):
736 self.DeleteAllItems() 732 self.DeleteAllItems()
@@ -762,17 +758,17 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -762,17 +758,17 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
762 return selected 758 return selected
763 759
764 def __init_columns(self): 760 def __init_columns(self):
765 - 761 +
766 self.InsertColumn(0, "", wx.LIST_FORMAT_CENTER) 762 self.InsertColumn(0, "", wx.LIST_FORMAT_CENTER)
767 self.InsertColumn(1, _("Name")) 763 self.InsertColumn(1, _("Name"))
768 self.InsertColumn(2, _(u"Volume (mm³)")) 764 self.InsertColumn(2, _(u"Volume (mm³)"))
769 self.InsertColumn(3, _("Transparency"), wx.LIST_FORMAT_RIGHT) 765 self.InsertColumn(3, _("Transparency"), wx.LIST_FORMAT_RIGHT)
770 -  
771 - self.SetColumnWidth(0, 20) 766 +
  767 + self.SetColumnWidth(0, 25)
772 self.SetColumnWidth(1, 85) 768 self.SetColumnWidth(1, 85)
773 self.SetColumnWidth(2, 85) 769 self.SetColumnWidth(2, 85)
774 self.SetColumnWidth(3, 80) 770 self.SetColumnWidth(3, 80)
775 - 771 +
776 def __init_image_list(self): 772 def __init_image_list(self):
777 self.imagelist = wx.ImageList(16, 16) 773 self.imagelist = wx.ImageList(16, 16)
778 774
@@ -787,7 +783,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -787,7 +783,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
787 bitmap.SetWidth(16) 783 bitmap.SetWidth(16)
788 bitmap.SetHeight(16) 784 bitmap.SetHeight(16)
789 img_check = self.imagelist.Add(bitmap) 785 img_check = self.imagelist.Add(bitmap)
790 - 786 +
791 self.SetImageList(self.imagelist,wx.IMAGE_LIST_SMALL) 787 self.SetImageList(self.imagelist,wx.IMAGE_LIST_SMALL)
792 788
793 self.image_gray = Image.open("../icons/object_colour.jpg") 789 self.image_gray = Image.open("../icons/object_colour.jpg")
@@ -795,13 +791,13 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -795,13 +791,13 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
795 def OnEditLabel(self, evt): 791 def OnEditLabel(self, evt):
796 Publisher.sendMessage('Change surface name', (evt.GetIndex(), evt.GetLabel())) 792 Publisher.sendMessage('Change surface name', (evt.GetIndex(), evt.GetLabel()))
797 evt.Skip() 793 evt.Skip()
798 - 794 +
799 def OnItemActivated(self, evt): 795 def OnItemActivated(self, evt):
800 self.ToggleItem(evt.m_itemIndex) 796 self.ToggleItem(evt.m_itemIndex)
801 evt.Skip() 797 evt.Skip()
802 - 798 +
803 def OnCheckItem(self, index, flag): 799 def OnCheckItem(self, index, flag):
804 - Publisher.sendMessage('Show surface', (index, flag)) 800 + Publisher.sendMessage('Show surface', (index, flag))
805 801
806 def OnShowSingle(self, pubsub_evt): 802 def OnShowSingle(self, pubsub_evt):
807 index, visibility = pubsub_evt.data 803 index, visibility = pubsub_evt.data
@@ -809,7 +805,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -809,7 +805,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
809 if key != index: 805 if key != index:
810 self.SetItemImage(key, not visibility) 806 self.SetItemImage(key, not visibility)
811 Publisher.sendMessage('Show surface', 807 Publisher.sendMessage('Show surface',
812 - (key, not visibility)) 808 + (key, not visibility))
813 self.SetItemImage(index, visibility) 809 self.SetItemImage(index, visibility)
814 Publisher.sendMessage('Show surface', 810 Publisher.sendMessage('Show surface',
815 (index, visibility)) 811 (index, visibility))
@@ -820,7 +816,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -820,7 +816,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
820 if key not in index_list: 816 if key not in index_list:
821 self.SetItemImage(key, not visibility) 817 self.SetItemImage(key, not visibility)
822 Publisher.sendMessage('Show surface', 818 Publisher.sendMessage('Show surface',
823 - (key, not visibility)) 819 + (key, not visibility))
824 for index in index_list: 820 for index in index_list:
825 self.SetItemImage(index, visibility) 821 self.SetItemImage(index, visibility)
826 Publisher.sendMessage('Show surface', 822 Publisher.sendMessage('Show surface',
@@ -832,7 +828,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -832,7 +828,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
832 colour = pubsub_evt.data[2] 828 colour = pubsub_evt.data[2]
833 volume = "%.3f"%pubsub_evt.data[3] 829 volume = "%.3f"%pubsub_evt.data[3]
834 transparency = "%d%%"%(int(100*pubsub_evt.data[4])) 830 transparency = "%d%%"%(int(100*pubsub_evt.data[4]))
835 - 831 +
836 if index not in self.surface_list_index: 832 if index not in self.surface_list_index:
837 image = self.CreateColourBitmap(colour) 833 image = self.CreateColourBitmap(colour)
838 image_index = self.imagelist.Add(image) 834 image_index = self.imagelist.Add(image)
@@ -849,7 +845,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -849,7 +845,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
849 transparency="0%%", colour=None): 845 transparency="0%%", colour=None):
850 self.InsertStringItem(index, "") 846 self.InsertStringItem(index, "")
851 self.SetStringItem(index, 1, label, 847 self.SetStringItem(index, 1, label,
852 - imageId = self.surface_list_index[index]) 848 + imageId = self.surface_list_index[index])
853 self.SetStringItem(index, 2, volume) 849 self.SetStringItem(index, 2, volume)
854 self.SetStringItem(index, 3, transparency) 850 self.SetStringItem(index, 3, transparency)
855 self.SetItemImage(index, 1) 851 self.SetItemImage(index, 1)
@@ -857,11 +853,11 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -857,11 +853,11 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
857 def UpdateItemInfo(self, index=0, label="Surface 1", volume="0 mm3", 853 def UpdateItemInfo(self, index=0, label="Surface 1", volume="0 mm3",
858 transparency="0%%", colour=None): 854 transparency="0%%", colour=None):
859 self.SetStringItem(index, 1, label, 855 self.SetStringItem(index, 1, label,
860 - imageId = self.surface_list_index[index]) 856 + imageId = self.surface_list_index[index])
861 self.SetStringItem(index, 2, volume) 857 self.SetStringItem(index, 2, volume)
862 self.SetStringItem(index, 3, transparency) 858 self.SetStringItem(index, 3, transparency)
863 self.SetItemImage(index, 1) 859 self.SetItemImage(index, 1)
864 - 860 +
865 def CreateColourBitmap(self, colour): 861 def CreateColourBitmap(self, colour):
866 """ 862 """
867 Create a wx Image with a mask colour. 863 Create a wx Image with a mask colour.
@@ -887,7 +883,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -887,7 +883,7 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
887 """ 883 """
888 index, value = pubsub_evt.data 884 index, value = pubsub_evt.data
889 self.SetStringItem(index, 3, "%d%%"%(int(value*100))) 885 self.SetStringItem(index, 3, "%d%%"%(int(value*100)))
890 - 886 +
891 def EditSurfaceColour(self, pubsub_evt): 887 def EditSurfaceColour(self, pubsub_evt):
892 """ 888 """
893 """ 889 """
@@ -905,11 +901,11 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -905,11 +901,11 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
905 901
906 def __init__(self, parent, ID=-1, pos=wx.DefaultPosition, 902 def __init__(self, parent, ID=-1, pos=wx.DefaultPosition,
907 size=wx.DefaultSize, style=wx.LC_REPORT): 903 size=wx.DefaultSize, style=wx.LC_REPORT):
908 - 904 +
909 # native look and feel for MacOS 905 # native look and feel for MacOS
910 #if wx.Platform == "__WXMAC__": 906 #if wx.Platform == "__WXMAC__":
911 # wx.SystemOptions.SetOptionInt("mac.listctrl.always_use_generic", 0) 907 # wx.SystemOptions.SetOptionInt("mac.listctrl.always_use_generic", 0)
912 - 908 +
913 wx.ListCtrl.__init__(self, parent, ID, pos, size, style=wx.LC_REPORT) 909 wx.ListCtrl.__init__(self, parent, ID, pos, size, style=wx.LC_REPORT)
914 listmix.TextEditMixin.__init__(self) 910 listmix.TextEditMixin.__init__(self)
915 911
@@ -927,7 +923,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -927,7 +923,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
927 'Set measurement colour') 923 'Set measurement colour')
928 Publisher.subscribe(self.OnCloseProject, 'Close project data') 924 Publisher.subscribe(self.OnCloseProject, 'Close project data')
929 Publisher.subscribe(self.OnShowSingle, 'Show single measurement') 925 Publisher.subscribe(self.OnShowSingle, 'Show single measurement')
930 - Publisher.subscribe(self.OnShowMultiple, 'Show multiple measurements') 926 + Publisher.subscribe(self.OnShowMultiple, 'Show multiple measurements')
931 Publisher.subscribe(self.OnLoadData, 'Load measurement dict') 927 Publisher.subscribe(self.OnLoadData, 'Load measurement dict')
932 928
933 def __bind_events_wx(self): 929 def __bind_events_wx(self):
@@ -1007,13 +1003,13 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -1007,13 +1003,13 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
1007 self.InsertColumn(2, _("Location")) 1003 self.InsertColumn(2, _("Location"))
1008 self.InsertColumn(3, _("Type")) 1004 self.InsertColumn(3, _("Type"))
1009 self.InsertColumn(4, _("Value"), wx.LIST_FORMAT_RIGHT) 1005 self.InsertColumn(4, _("Value"), wx.LIST_FORMAT_RIGHT)
1010 -  
1011 - self.SetColumnWidth(0, 20) 1006 +
  1007 + self.SetColumnWidth(0, 25)
1012 self.SetColumnWidth(1, 65) 1008 self.SetColumnWidth(1, 65)
1013 self.SetColumnWidth(2, 55) 1009 self.SetColumnWidth(2, 55)
1014 self.SetColumnWidth(3, 50) 1010 self.SetColumnWidth(3, 50)
1015 self.SetColumnWidth(4, 75) 1011 self.SetColumnWidth(4, 75)
1016 - 1012 +
1017 def __init_image_list(self): 1013 def __init_image_list(self):
1018 self.imagelist = wx.ImageList(16, 16) 1014 self.imagelist = wx.ImageList(16, 16)
1019 1015
@@ -1028,7 +1024,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -1028,7 +1024,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
1028 bitmap.SetWidth(16) 1024 bitmap.SetWidth(16)
1029 bitmap.SetHeight(16) 1025 bitmap.SetHeight(16)
1030 img_check = self.imagelist.Add(bitmap) 1026 img_check = self.imagelist.Add(bitmap)
1031 - 1027 +
1032 self.SetImageList(self.imagelist,wx.IMAGE_LIST_SMALL) 1028 self.SetImageList(self.imagelist,wx.IMAGE_LIST_SMALL)
1033 1029
1034 self.image_gray = Image.open("../icons/object_colour.jpg") 1030 self.image_gray = Image.open("../icons/object_colour.jpg")
@@ -1037,14 +1033,14 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -1037,14 +1033,14 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
1037 def OnEditLabel(self, evt): 1033 def OnEditLabel(self, evt):
1038 Publisher.sendMessage('Change measurement name', (evt.GetIndex(), evt.GetLabel())) 1034 Publisher.sendMessage('Change measurement name', (evt.GetIndex(), evt.GetLabel()))
1039 evt.Skip() 1035 evt.Skip()
1040 - 1036 +
1041 def OnItemActivated(self, evt): 1037 def OnItemActivated(self, evt):
1042 self.ToggleItem(evt.m_itemIndex) 1038 self.ToggleItem(evt.m_itemIndex)
1043 evt.Skip() 1039 evt.Skip()
1044 1040
1045 - 1041 +
1046 def OnCheckItem(self, index, flag): 1042 def OnCheckItem(self, index, flag):
1047 - Publisher.sendMessage('Show measurement', (index, flag)) 1043 + Publisher.sendMessage('Show measurement', (index, flag))
1048 1044
1049 def OnShowSingle(self, pubsub_evt): 1045 def OnShowSingle(self, pubsub_evt):
1050 index, visibility = pubsub_evt.data 1046 index, visibility = pubsub_evt.data
@@ -1052,7 +1048,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -1052,7 +1048,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
1052 if key != index: 1048 if key != index:
1053 self.SetItemImage(key, not visibility) 1049 self.SetItemImage(key, not visibility)
1054 Publisher.sendMessage('Show measurement', 1050 Publisher.sendMessage('Show measurement',
1055 - (key, not visibility)) 1051 + (key, not visibility))
1056 self.SetItemImage(index, visibility) 1052 self.SetItemImage(index, visibility)
1057 Publisher.sendMessage('Show measurement', 1053 Publisher.sendMessage('Show measurement',
1058 (index, visibility)) 1054 (index, visibility))
@@ -1063,7 +1059,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -1063,7 +1059,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
1063 if key not in index_list: 1059 if key not in index_list:
1064 self.SetItemImage(key, not visibility) 1060 self.SetItemImage(key, not visibility)
1065 Publisher.sendMessage('Show measurement', 1061 Publisher.sendMessage('Show measurement',
1066 - (key, not visibility)) 1062 + (key, not visibility))
1067 for index in index_list: 1063 for index in index_list:
1068 self.SetItemImage(index, visibility) 1064 self.SetItemImage(index, visibility)
1069 Publisher.sendMessage('Show measurement', 1065 Publisher.sendMessage('Show measurement',
@@ -1078,7 +1074,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -1078,7 +1074,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
1078 m = items_dict[i] 1074 m = items_dict[i]
1079 image = self.CreateColourBitmap(m.colour) 1075 image = self.CreateColourBitmap(m.colour)
1080 image_index = self.imagelist.Add(image) 1076 image_index = self.imagelist.Add(image)
1081 - 1077 +
1082 index_list = self._list_index.keys() 1078 index_list = self._list_index.keys()
1083 self._list_index[m.index] = image_index 1079 self._list_index[m.index] = image_index
1084 1080
@@ -1105,7 +1101,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -1105,7 +1101,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
1105 if index not in self._list_index: 1101 if index not in self._list_index:
1106 image = self.CreateColourBitmap(colour) 1102 image = self.CreateColourBitmap(colour)
1107 image_index = self.imagelist.Add(image) 1103 image_index = self.imagelist.Add(image)
1108 - 1104 +
1109 index_list = self._list_index.keys() 1105 index_list = self._list_index.keys()
1110 self._list_index[index] = image_index 1106 self._list_index[index] = image_index
1111 1107
@@ -1120,7 +1116,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -1120,7 +1116,7 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
1120 location="SURFACE", type_="LINEAR", value="0 mm"): 1116 location="SURFACE", type_="LINEAR", value="0 mm"):
1121 self.InsertStringItem(index, "") 1117 self.InsertStringItem(index, "")
1122 self.SetStringItem(index, 1, label, 1118 self.SetStringItem(index, 1, label,
1123 - imageId = self._list_index[index]) 1119 + imageId = self._list_index[index])
1124 self.SetStringItem(index, 2, location) 1120 self.SetStringItem(index, 2, location)
1125 self.SetStringItem(index, 3, type_) 1121 self.SetStringItem(index, 3, type_)
1126 self.SetStringItem(index, 4, value) 1122 self.SetStringItem(index, 4, value)
@@ -1130,13 +1126,13 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -1130,13 +1126,13 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
1130 def UpdateItemInfo(self, index=0, label="Measurement 1", colour=None, 1126 def UpdateItemInfo(self, index=0, label="Measurement 1", colour=None,
1131 type_="LINEAR", location="SURFACE", value="0 mm"): 1127 type_="LINEAR", location="SURFACE", value="0 mm"):
1132 self.SetStringItem(index, 1, label, 1128 self.SetStringItem(index, 1, label,
1133 - imageId = self._list_index[index]) 1129 + imageId = self._list_index[index])
1134 self.SetStringItem(index, 2, type_) 1130 self.SetStringItem(index, 2, type_)
1135 self.SetStringItem(index, 3, location) 1131 self.SetStringItem(index, 3, location)
1136 self.SetStringItem(index, 4, value) 1132 self.SetStringItem(index, 4, value)
1137 self.SetItemImage(index, 1) 1133 self.SetItemImage(index, 1)
1138 self.Refresh() 1134 self.Refresh()
1139 - 1135 +
1140 def CreateColourBitmap(self, colour): 1136 def CreateColourBitmap(self, colour):
1141 """ 1137 """
1142 Create a wx Image with a mask colour. 1138 Create a wx Image with a mask colour.
@@ -1169,41 +1165,41 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -1169,41 +1165,41 @@ class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
1169 #******************************************************************* 1165 #*******************************************************************
1170 #******************************************************************* 1166 #*******************************************************************
1171 1167
1172 - 1168 +
1173 class AnnotationsListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): 1169 class AnnotationsListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
1174 # TODO: Remove edimixin, allow only visible and invisible 1170 # TODO: Remove edimixin, allow only visible and invisible
1175 def __init__(self, parent, ID=-1, pos=wx.DefaultPosition, 1171 def __init__(self, parent, ID=-1, pos=wx.DefaultPosition,
1176 size=wx.DefaultSize, style=wx.LC_REPORT): 1172 size=wx.DefaultSize, style=wx.LC_REPORT):
1177 - 1173 +
1178 # native look and feel for MacOS 1174 # native look and feel for MacOS
1179 #if wx.Platform == "__WXMAC__": 1175 #if wx.Platform == "__WXMAC__":
1180 # wx.SystemOptions.SetOptionInt("mac.listctrl.always_use_generic", 0) 1176 # wx.SystemOptions.SetOptionInt("mac.listctrl.always_use_generic", 0)
1181 - 1177 +
1182 wx.ListCtrl.__init__(self, parent, ID, pos, size, style=wx.LC_REPORT) 1178 wx.ListCtrl.__init__(self, parent, ID, pos, size, style=wx.LC_REPORT)
1183 listmix.TextEditMixin.__init__(self) 1179 listmix.TextEditMixin.__init__(self)
1184 1180
1185 self.__init_columns() 1181 self.__init_columns()
1186 self.__init_image_list() 1182 self.__init_image_list()
1187 self.__init_evt() 1183 self.__init_evt()
1188 - 1184 +
1189 # just testing 1185 # just testing
1190 self.Populate() 1186 self.Populate()
1191 - 1187 +
1192 def __init_evt(self): 1188 def __init_evt(self):
1193 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated) 1189 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated)
1194 1190
1195 def __init_columns(self): 1191 def __init_columns(self):
1196 - 1192 +
1197 self.InsertColumn(0, "", wx.LIST_FORMAT_CENTER) 1193 self.InsertColumn(0, "", wx.LIST_FORMAT_CENTER)
1198 self.InsertColumn(1, _("Name")) 1194 self.InsertColumn(1, _("Name"))
1199 self.InsertColumn(2, _("Type"), wx.LIST_FORMAT_CENTER) 1195 self.InsertColumn(2, _("Type"), wx.LIST_FORMAT_CENTER)
1200 self.InsertColumn(3, _("Value")) 1196 self.InsertColumn(3, _("Value"))
1201 -  
1202 - self.SetColumnWidth(0, 20) 1197 +
  1198 + self.SetColumnWidth(0, 25)
1203 self.SetColumnWidth(1, 90) 1199 self.SetColumnWidth(1, 90)
1204 self.SetColumnWidth(2, 50) 1200 self.SetColumnWidth(2, 50)
1205 self.SetColumnWidth(3, 120) 1201 self.SetColumnWidth(3, 120)
1206 - 1202 +
1207 def __init_image_list(self): 1203 def __init_image_list(self):
1208 self.imagelist = wx.ImageList(16, 16) 1204 self.imagelist = wx.ImageList(16, 16)
1209 1205
@@ -1212,7 +1208,7 @@ class AnnotationsListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -1212,7 +1208,7 @@ class AnnotationsListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
1212 bitmap.SetWidth(16) 1208 bitmap.SetWidth(16)
1213 bitmap.SetHeight(16) 1209 bitmap.SetHeight(16)
1214 img_check = self.imagelist.Add(bitmap) 1210 img_check = self.imagelist.Add(bitmap)
1215 - 1211 +
1216 image = wx.Image("../icons/object_invisible.jpg") 1212 image = wx.Image("../icons/object_invisible.jpg")
1217 bitmap = wx.BitmapFromImage(image.Scale(16, 16)) 1213 bitmap = wx.BitmapFromImage(image.Scale(16, 16))
1218 bitmap.SetWidth(16) 1214 bitmap.SetWidth(16)
@@ -1224,13 +1220,13 @@ class AnnotationsListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -1224,13 +1220,13 @@ class AnnotationsListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
1224 bitmap.SetWidth(16) 1220 bitmap.SetWidth(16)
1225 bitmap.SetHeight(16) 1221 bitmap.SetHeight(16)
1226 self.img_colour = self.imagelist.Add(bitmap) 1222 self.img_colour = self.imagelist.Add(bitmap)
1227 - 1223 +
1228 self.SetImageList(self.imagelist,wx.IMAGE_LIST_SMALL) 1224 self.SetImageList(self.imagelist,wx.IMAGE_LIST_SMALL)
1229 1225
1230 - 1226 +
1231 def OnItemActivated(self, evt): 1227 def OnItemActivated(self, evt):
1232 self.ToggleItem(evt.m_itemIndex) 1228 self.ToggleItem(evt.m_itemIndex)
1233 - 1229 +
1234 def OnCheckItem(self, index, flag): 1230 def OnCheckItem(self, index, flag):
1235 # TODO: use pubsub to communicate to models 1231 # TODO: use pubsub to communicate to models
1236 if flag: 1232 if flag:
@@ -1241,10 +1237,10 @@ class AnnotationsListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin): @@ -1241,10 +1237,10 @@ class AnnotationsListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
1241 def InsertNewItem(self, index=0, name="Axial 1", type_="2d", 1237 def InsertNewItem(self, index=0, name="Axial 1", type_="2d",
1242 value="bla", colour=None): 1238 value="bla", colour=None):
1243 self.InsertStringItem(index, "") 1239 self.InsertStringItem(index, "")
1244 - self.SetStringItem(index, 1, name, imageId = self.img_colour) 1240 + self.SetStringItem(index, 1, name, imageId = self.img_colour)
1245 self.SetStringItem(index, 2, type_) 1241 self.SetStringItem(index, 2, type_)
1246 self.SetStringItem(index, 3, value) 1242 self.SetStringItem(index, 3, value)
1247 - 1243 +
1248 def Populate(self): 1244 def Populate(self):
1249 dict = ((0, "Axial 1", "2D", "blalbalblabllablalbla"), 1245 dict = ((0, "Axial 1", "2D", "blalbalblabllablalbla"),
1250 (1, "Coronal 1", "2D", "hello here we are again"), 1246 (1, "Coronal 1", "2D", "hello here we are again"),
invesalius/gui/default_tasks.py
@@ -100,32 +100,47 @@ class Panel(wx.Panel): @@ -100,32 +100,47 @@ class Panel(wx.Panel):
100 wx.Panel.__init__(self, parent, pos=wx.Point(5, 5), 100 wx.Panel.__init__(self, parent, pos=wx.Point(5, 5),
101 size=wx.Size(280, 656)) 101 size=wx.Size(280, 656))
102 102
103 - sizer = wx.BoxSizer(wx.VERTICAL) 103 + #sizer = wx.BoxSizer(wx.VERTICAL)
  104 + gbs = wx.GridBagSizer(5,5)
104 #sizer.Add(UpperTaskPanel(self), 5, wx.EXPAND|wx.GROW) 105 #sizer.Add(UpperTaskPanel(self), 5, wx.EXPAND|wx.GROW)
105 - sizer.Add(UpperTaskPanel(self), 16, wx.EXPAND|wx.GROW) 106 + gbs.Add(UpperTaskPanel(self), (0, 0), flag=wx.EXPAND)
106 107
107 #sizer.Add(LowerTaskPanel(self), 3, wx.EXPAND|wx.GROW) 108 #sizer.Add(LowerTaskPanel(self), 3, wx.EXPAND|wx.GROW)
108 - sizer.Add(LowerTaskPanel(self), 6, wx.EXPAND|wx.GROW) 109 + gbs.Add(LowerTaskPanel(self), (1, 0), flag=wx.EXPAND | wx.ALIGN_BOTTOM)
  110 +
  111 + gbs.AddGrowableCol(0)
109 112
  113 + gbs.AddGrowableRow(0, 1)
  114 + gbs.AddGrowableRow(1, 0)
  115 +
  116 + sizer = wx.BoxSizer(wx.VERTICAL)
  117 + sizer.Add(gbs, 1, wx.EXPAND)
110 118
  119 + self.gbs = gbs
  120 +
  121 + #self.SetSizerAndFit(sizer)
111 self.SetSizer(sizer) 122 self.SetSizer(sizer)
112 123
  124 +
113 # Lower fold panel 125 # Lower fold panel
114 class LowerTaskPanel(wx.Panel): 126 class LowerTaskPanel(wx.Panel):
115 def __init__(self, parent): 127 def __init__(self, parent):
116 - wx.Panel.__init__(self, parent, pos=wx.Point(5, 5),  
117 - # size=wx.Size(280, 700))  
118 - size=wx.Size(280, 420)) 128 + wx.Panel.__init__(self, parent, size=(150, -1))
  129 + fold_panel = fpb.FoldPanelBar(self, -1,
  130 + style=FPB_DEFAULT_STYLE,
  131 + agwStyle=fpb.FPB_COLLAPSE_TO_BOTTOM)
119 132
120 - fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition,  
121 - self.GetSize(),FPB_DEFAULT_STYLE,  
122 - fpb.FPB_COLLAPSE_TO_BOTTOM) 133 + self.fold_panel = fold_panel
123 134
124 self.enable_items = [] 135 self.enable_items = []
125 self.overwrite = False 136 self.overwrite = False
126 137
  138 + gbs = wx.GridBagSizer(5,5)
  139 + gbs.AddGrowableCol(0, 1)
  140 + self.gbs = gbs
  141 +
127 sizer = wx.BoxSizer(wx.VERTICAL) 142 sizer = wx.BoxSizer(wx.VERTICAL)
128 - sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND) 143 + sizer.Add(gbs, 1, wx.GROW|wx.EXPAND)
129 self.SetSizer(sizer) 144 self.SetSizer(sizer)
130 145
131 image_list = wx.ImageList(16,16) 146 image_list = wx.ImageList(16,16)
@@ -139,27 +154,50 @@ class LowerTaskPanel(wx.Panel): @@ -139,27 +154,50 @@ class LowerTaskPanel(wx.Panel):
139 col = style.GetFirstColour() 154 col = style.GetFirstColour()
140 self.enable_items.append(item) 155 self.enable_items.append(item)
141 156
142 - fold_panel.AddFoldPanelWindow(item, nb.NotebookPanel(item), #Spacing= 0, 157 + #npanel = wx.Panel(self, -1)
  158 + self.npanel = nb.NotebookPanel(item)
  159 +
  160 + self.__calc_best_size(self.npanel)
  161 +
  162 + fold_panel.AddFoldPanelWindow(item, self.npanel, #fpb.FPB_ALIGN_WIDTH, #Spacing= 0,
143 leftSpacing=0, rightSpacing=0) 163 leftSpacing=0, rightSpacing=0)
144 - fold_panel.Expand(fold_panel.GetFoldPanel(0))  
145 164
146 - # Fold 2 - Tools  
147 - # Measures  
148 - # Text Annotations  
149 - #item = fold_panel.AddFoldPanel(_("Tools"), collapsed=False,  
150 - # foldIcons=image_list)  
151 - #style = fold_panel.GetCaptionStyle(item)  
152 - #col = style.GetFirstColour()  
153 - #elf.enable_items.append(item)  
154 - #  
155 - #fold_panel.AddFoldPanelWindow(item, tools.TaskPanel(item), Spacing= 0,  
156 - # leftSpacing=0, rightSpacing=0)  
157 - #fold_panel.Expand(fold_panel.GetFoldPanel(1)) 165 + gbs.AddGrowableRow(0, 1)
  166 + gbs.Add(fold_panel, (0, 0), flag=wx.EXPAND)
  167 + gbs.Layout()
  168 + item.ResizePanel()
  169 +
  170 + sizer.Fit(self)
  171 + self.Fit()
158 172
159 self.SetStateProjectClose() 173 self.SetStateProjectClose()
160 self.__bind_events() 174 self.__bind_events()
161 175
162 176
  177 + def __calc_best_size(self, panel):
  178 + parent = panel.GetParent()
  179 + panel.Reparent(self)
  180 +
  181 + gbs = self.gbs
  182 + fold_panel = self.fold_panel
  183 +
  184 + # Calculating the size
  185 + gbs.AddGrowableRow(1, 1)
  186 + #gbs.AddGrowableRow(0, 1)
  187 + gbs.Add(fold_panel, (0, 0), flag=wx.EXPAND)
  188 + gbs.Add(panel, (1, 0), flag=wx.EXPAND)
  189 + gbs.Layout()
  190 + self.Fit()
  191 + size = panel.GetSize()
  192 +
  193 + gbs.Remove(1)
  194 + gbs.Remove(0)
  195 + gbs.RemoveGrowableRow(1)
  196 +
  197 + panel.Reparent(parent)
  198 + panel.SetInitialSize(size)
  199 + self.SetInitialSize(self.GetSize())
  200 +
163 def __bind_events(self): 201 def __bind_events(self):
164 Publisher.subscribe(self.OnEnableState, "Enable state project") 202 Publisher.subscribe(self.OnEnableState, "Enable state project")
165 203
@@ -178,20 +216,20 @@ class LowerTaskPanel(wx.Panel): @@ -178,20 +216,20 @@ class LowerTaskPanel(wx.Panel):
178 for item in self.enable_items: 216 for item in self.enable_items:
179 item.Enable() 217 item.Enable()
180 218
  219 + def ResizeFPB(self):
  220 + sizeNeeded = self.fold_panel.GetPanelsLength(0, 0)[2]
  221 + self.fold_panel.SetMinSize((self.fold_panel.GetSize()[0], sizeNeeded ))
  222 + self.fold_panel.SetSize((self.fold_panel.GetSize()[0], sizeNeeded))
  223 +
181 224
182 # Upper fold panel 225 # Upper fold panel
183 class UpperTaskPanel(wx.Panel): 226 class UpperTaskPanel(wx.Panel):
184 def __init__(self, parent): 227 def __init__(self, parent):
185 - wx.Panel.__init__(self, parent, pos=wx.Point(5, 5),  
186 - size=wx.Size(280, 656))  
187 - 228 + wx.Panel.__init__(self, parent)
188 fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition, 229 fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition,
189 - self.GetSize(),FPB_DEFAULT_STYLE, 230 + wx.DefaultSize,FPB_DEFAULT_STYLE,
190 fpb.FPB_SINGLE_FOLD) 231 fpb.FPB_SINGLE_FOLD)
191 232
192 - #self.SetBackgroundColour((0,255,0))  
193 -  
194 -  
195 sizer = wx.BoxSizer(wx.VERTICAL) 233 sizer = wx.BoxSizer(wx.VERTICAL)
196 sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND) 234 sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND)
197 self.SetSizer(sizer) 235 self.SetSizer(sizer)
@@ -210,7 +248,8 @@ class UpperTaskPanel(wx.Panel): @@ -210,7 +248,8 @@ class UpperTaskPanel(wx.Panel):
210 tasks = [(_("Load data"), importer.TaskPanel), 248 tasks = [(_("Load data"), importer.TaskPanel),
211 (_("Select region of interest"), slice_.TaskPanel), 249 (_("Select region of interest"), slice_.TaskPanel),
212 (_("Configure 3D surface"), surface.TaskPanel), 250 (_("Configure 3D surface"), surface.TaskPanel),
213 - (_("Export data"), exporter.TaskPanel)] 251 + (_("Export data"), exporter.TaskPanel)
  252 + ]
214 elif int(session.mode) == const.MODE_NAVIGATOR: 253 elif int(session.mode) == const.MODE_NAVIGATOR:
215 tasks = [(_("Load data"), importer.TaskPanel), 254 tasks = [(_("Load data"), importer.TaskPanel),
216 (_("Select region of interest"), slice_.TaskPanel), 255 (_("Select region of interest"), slice_.TaskPanel),
@@ -300,3 +339,9 @@ class UpperTaskPanel(wx.Panel): @@ -300,3 +339,9 @@ class UpperTaskPanel(wx.Panel):
300 339
301 340
302 evt.Skip() 341 evt.Skip()
  342 + wx.CallAfter(self.ResizeFPB)
  343 +
  344 + def ResizeFPB(self):
  345 + sizeNeeded = self.fold_panel.GetPanelsLength(0, 0)[2]
  346 + self.fold_panel.SetMinSize((self.fold_panel.GetSize()[0], sizeNeeded ))
  347 + self.fold_panel.SetSize((self.fold_panel.GetSize()[0], sizeNeeded))
invesalius/gui/default_viewers.py
@@ -330,7 +330,7 @@ class VolumeViewerCover(wx.Panel): @@ -330,7 +330,7 @@ class VolumeViewerCover(wx.Panel):
330 330
331 class VolumeToolPanel(wx.Panel): 331 class VolumeToolPanel(wx.Panel):
332 def __init__(self, parent): 332 def __init__(self, parent):
333 - wx.Panel.__init__(self, parent, size = (10,100)) 333 + wx.Panel.__init__(self, parent)
334 334
335 # VOLUME RAYCASTING BUTTON 335 # VOLUME RAYCASTING BUTTON
336 BMP_RAYCASTING = wx.Bitmap("../icons/volume_raycasting.png", 336 BMP_RAYCASTING = wx.Bitmap("../icons/volume_raycasting.png",
@@ -346,15 +346,15 @@ class VolumeToolPanel(wx.Panel): @@ -346,15 +346,15 @@ class VolumeToolPanel(wx.Panel):
346 346
347 button_raycasting = pbtn.PlateButton(self, BUTTON_RAYCASTING,"", 347 button_raycasting = pbtn.PlateButton(self, BUTTON_RAYCASTING,"",
348 BMP_RAYCASTING, style=pbtn.PB_STYLE_SQUARE, 348 BMP_RAYCASTING, style=pbtn.PB_STYLE_SQUARE,
349 - size=(24,24)) 349 + size=(32,32))
350 350
351 button_stereo = pbtn.PlateButton(self, BUTTON_3D_STEREO,"", 351 button_stereo = pbtn.PlateButton(self, BUTTON_3D_STEREO,"",
352 BMP_3D_STEREO, style=pbtn.PB_STYLE_SQUARE, 352 BMP_3D_STEREO, style=pbtn.PB_STYLE_SQUARE,
353 - size=(24,24)) 353 + size=(32,32))
354 354
355 button_slice_plane = self.button_slice_plane = pbtn.PlateButton(self, BUTTON_SLICE_PLANE,"", 355 button_slice_plane = self.button_slice_plane = pbtn.PlateButton(self, BUTTON_SLICE_PLANE,"",
356 BMP_SLICE_PLANE, style=pbtn.PB_STYLE_SQUARE, 356 BMP_SLICE_PLANE, style=pbtn.PB_STYLE_SQUARE,
357 - size=(24,24)) 357 + size=(32,32))
358 358
359 self.button_raycasting = button_raycasting 359 self.button_raycasting = button_raycasting
360 self.button_stereo = button_stereo 360 self.button_stereo = button_stereo
@@ -363,13 +363,13 @@ class VolumeToolPanel(wx.Panel): @@ -363,13 +363,13 @@ class VolumeToolPanel(wx.Panel):
363 BMP_FRONT = wx.Bitmap(ID_TO_BMP[const.VOL_FRONT][1], 363 BMP_FRONT = wx.Bitmap(ID_TO_BMP[const.VOL_FRONT][1],
364 wx.BITMAP_TYPE_PNG) 364 wx.BITMAP_TYPE_PNG)
365 button_view = pbtn.PlateButton(self, BUTTON_VIEW, "", 365 button_view = pbtn.PlateButton(self, BUTTON_VIEW, "",
366 - BMP_FRONT, size=(24,24), 366 + BMP_FRONT, size=(32,32),
367 style=pbtn.PB_STYLE_SQUARE) 367 style=pbtn.PB_STYLE_SQUARE)
368 self.button_view = button_view 368 self.button_view = button_view
369 369
370 # VOLUME COLOUR BUTTON 370 # VOLUME COLOUR BUTTON
371 if sys.platform == 'linux2': 371 if sys.platform == 'linux2':
372 - size = (28,28) 372 + size = (32,32)
373 sp = 2 373 sp = 2
374 else: 374 else:
375 size = (24,24) 375 size = (24,24)
invesalius/gui/dialogs.py
@@ -215,7 +215,7 @@ def ShowOpenProjectDialog(): @@ -215,7 +215,7 @@ def ShowOpenProjectDialog():
215 dlg = wx.FileDialog(None, message=_("Open InVesalius 3 project..."), 215 dlg = wx.FileDialog(None, message=_("Open InVesalius 3 project..."),
216 defaultDir="", 216 defaultDir="",
217 defaultFile="", wildcard=WILDCARD_OPEN, 217 defaultFile="", wildcard=WILDCARD_OPEN,
218 - style=wx.OPEN|wx.CHANGE_DIR) 218 + style=wx.FD_OPEN|wx.FD_CHANGE_DIR)
219 219
220 # inv3 filter is default 220 # inv3 filter is default
221 dlg.SetFilterIndex(0) 221 dlg.SetFilterIndex(0)
@@ -243,7 +243,7 @@ def ShowOpenAnalyzeDialog(): @@ -243,7 +243,7 @@ def ShowOpenAnalyzeDialog():
243 dlg = wx.FileDialog(None, message=_("Open Analyze file"), 243 dlg = wx.FileDialog(None, message=_("Open Analyze file"),
244 defaultDir="", 244 defaultDir="",
245 defaultFile="", wildcard=WILDCARD_ANALYZE, 245 defaultFile="", wildcard=WILDCARD_ANALYZE,
246 - style=wx.OPEN|wx.CHANGE_DIR) 246 + style=wx.FD_OPEN|wx.FD_CHANGE_DIR)
247 247
248 # inv3 filter is default 248 # inv3 filter is default
249 dlg.SetFilterIndex(0) 249 dlg.SetFilterIndex(0)
@@ -313,7 +313,7 @@ def ShowSaveAsProjectDialog(default_filename=None): @@ -313,7 +313,7 @@ def ShowSaveAsProjectDialog(default_filename=None):
313 "", # last used directory 313 "", # last used directory
314 default_filename, 314 default_filename,
315 _("InVesalius project (*.inv3)|*.inv3"), 315 _("InVesalius project (*.inv3)|*.inv3"),
316 - wx.SAVE|wx.OVERWRITE_PROMPT) 316 + wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
317 #dlg.SetFilterIndex(0) # default is VTI 317 #dlg.SetFilterIndex(0) # default is VTI
318 318
319 filename = None 319 filename = None
@@ -780,7 +780,8 @@ def ShowAboutDialog(parent): @@ -780,7 +780,8 @@ def ShowAboutDialog(parent):
780 "Tatiana Al-Chueyr (former)", 780 "Tatiana Al-Chueyr (former)",
781 "Guilherme Cesar Soares Ruppert (former)", 781 "Guilherme Cesar Soares Ruppert (former)",
782 "Fabio de Souza Azevedo (former)", 782 "Fabio de Souza Azevedo (former)",
783 - "Bruno Lara Bottazzini (contributor)"] 783 + "Bruno Lara Bottazzini (contributor)",
  784 + "Olly Betts (patches to support wxPython3)"]
784 785
785 info.Translators = ["Alex P. Natsios", 786 info.Translators = ["Alex P. Natsios",
786 "Andreas Loupasakis", 787 "Andreas Loupasakis",
@@ -974,7 +975,7 @@ def ExportPicture(type_=""): @@ -974,7 +975,7 @@ def ExportPicture(type_=""):
974 "", # last used directory 975 "", # last used directory
975 project_name, # filename 976 project_name, # filename
976 WILDCARD_SAVE_PICTURE, 977 WILDCARD_SAVE_PICTURE,
977 - wx.SAVE|wx.OVERWRITE_PROMPT) 978 + wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
978 dlg.SetFilterIndex(1) # default is VTI 979 dlg.SetFilterIndex(1) # default is VTI
979 980
980 if dlg.ShowModal() == wx.ID_OK: 981 if dlg.ShowModal() == wx.ID_OK:
invesalius/gui/frame.py
@@ -85,6 +85,7 @@ class Frame(wx.Frame): @@ -85,6 +85,7 @@ class Frame(wx.Frame):
85 if sys.platform != 'darwin': 85 if sys.platform != 'darwin':
86 self.Maximize() 86 self.Maximize()
87 87
  88 + self.sizeChanged = True
88 #Necessary update AUI (statusBar in special) 89 #Necessary update AUI (statusBar in special)
89 #when maximized in the Win 7 and XP 90 #when maximized in the Win 7 and XP
90 self.SetSize(self.GetSize()) 91 self.SetSize(self.GetSize())
@@ -132,6 +133,7 @@ class Frame(wx.Frame): @@ -132,6 +133,7 @@ class Frame(wx.Frame):
132 Bind normal events from wx (except pubsub related). 133 Bind normal events from wx (except pubsub related).
133 """ 134 """
134 self.Bind(wx.EVT_SIZE, self.OnSize) 135 self.Bind(wx.EVT_SIZE, self.OnSize)
  136 + self.Bind(wx.EVT_IDLE, self.OnIdle)
135 self.Bind(wx.EVT_MENU, self.OnMenuClick) 137 self.Bind(wx.EVT_MENU, self.OnMenuClick)
136 self.Bind(wx.EVT_CLOSE, self.OnClose) 138 self.Bind(wx.EVT_CLOSE, self.OnClose)
137 #self.Bind(wx.EVT_MOVE, self.OnMove) 139 #self.Bind(wx.EVT_MOVE, self.OnMove)
@@ -404,8 +406,17 @@ class Frame(wx.Frame): @@ -404,8 +406,17 @@ class Frame(wx.Frame):
404 """ 406 """
405 Refresh GUI when frame is resized. 407 Refresh GUI when frame is resized.
406 """ 408 """
407 - Publisher.sendMessage(('ProgressBar Reposition'))  
408 evt.Skip() 409 evt.Skip()
  410 + self.Reposition()
  411 + self.sizeChanged = True
  412 +
  413 + def OnIdle(self, evt):
  414 + if self.sizeChanged:
  415 + self.Reposition()
  416 +
  417 + def Reposition(self):
  418 + Publisher.sendMessage(('ProgressBar Reposition'))
  419 + self.sizeChanged = False
409 420
410 421
411 def OnMove(self, evt): 422 def OnMove(self, evt):
@@ -596,13 +607,13 @@ class MenuBar(wx.MenuBar): @@ -596,13 +607,13 @@ class MenuBar(wx.MenuBar):
596 607
597 file_edit_item_undo = wx.MenuItem(file_edit, wx.ID_UNDO, _("Undo\tCtrl+Z")) 608 file_edit_item_undo = wx.MenuItem(file_edit, wx.ID_UNDO, _("Undo\tCtrl+Z"))
598 file_edit_item_undo.SetBitmap(self.BMP_UNDO) 609 file_edit_item_undo.SetBitmap(self.BMP_UNDO)
599 - file_edit_item_undo.Enable(False)  
600 file_edit.AppendItem(file_edit_item_undo) 610 file_edit.AppendItem(file_edit_item_undo)
  611 + file_edit_item_undo.Enable(False)
601 612
602 file_edit_item_redo = wx.MenuItem(file_edit, wx.ID_REDO, _("Redo\tCtrl+Y")) 613 file_edit_item_redo = wx.MenuItem(file_edit, wx.ID_REDO, _("Redo\tCtrl+Y"))
603 file_edit_item_redo.SetBitmap(self.BMP_REDO) 614 file_edit_item_redo.SetBitmap(self.BMP_REDO)
604 - file_edit_item_redo.Enable(False)  
605 file_edit.AppendItem(file_edit_item_redo) 615 file_edit.AppendItem(file_edit_item_redo)
  616 + file_edit_item_redo.Enable(False)
606 else: 617 else:
607 file_edit.Append(wx.ID_UNDO, _("Undo\tCtrl+Z")).Enable(False) 618 file_edit.Append(wx.ID_UNDO, _("Undo\tCtrl+Z")).Enable(False)
608 file_edit.Append(wx.ID_REDO, _("Redo\tCtrl+Y")).Enable(False) 619 file_edit.Append(wx.ID_REDO, _("Redo\tCtrl+Y")).Enable(False)
@@ -732,9 +743,10 @@ class ProgressBar(wx.Gauge): @@ -732,9 +743,10 @@ class ProgressBar(wx.Gauge):
732 """ 743 """
733 Compute new size and position, according to parent resize 744 Compute new size and position, according to parent resize
734 """ 745 """
735 - rect = self.parent.GetFieldRect(2) 746 + rect = self.Parent.GetFieldRect(2)
736 self.SetPosition((rect.x + 2, rect.y + 2)) 747 self.SetPosition((rect.x + 2, rect.y + 2))
737 self.SetSize((rect.width - 4, rect.height - 4)) 748 self.SetSize((rect.width - 4, rect.height - 4))
  749 + self.Show()
738 750
739 def SetPercentage(self, value): 751 def SetPercentage(self, value):
740 """ 752 """
invesalius/gui/import_panel.py
@@ -110,16 +110,16 @@ class InnerPanel(wx.Panel): @@ -110,16 +110,16 @@ class InnerPanel(wx.Panel):
110 110
111 sizer = wx.BoxSizer(wx.VERTICAL) 111 sizer = wx.BoxSizer(wx.VERTICAL)
112 sizer.Add(splitter, 20, wx.EXPAND) 112 sizer.Add(splitter, 20, wx.EXPAND)
113 - sizer.Add(panel, 1, wx.EXPAND|wx.LEFT, 90)  
114 -  
115 - self.SetSizer(sizer)  
116 - sizer.Fit(self) 113 + sizer.Add(panel, 0, wx.EXPAND|wx.LEFT, 90)
117 114
118 self.text_panel = TextPanel(splitter) 115 self.text_panel = TextPanel(splitter)
119 splitter.AppendWindow(self.text_panel, 250) 116 splitter.AppendWindow(self.text_panel, 250)
120 117
121 self.image_panel = ImagePanel(splitter) 118 self.image_panel = ImagePanel(splitter)
122 splitter.AppendWindow(self.image_panel, 250) 119 splitter.AppendWindow(self.image_panel, 250)
  120 +
  121 + self.SetSizer(sizer)
  122 + sizer.Fit(self)
123 123
124 self.Layout() 124 self.Layout()
125 self.Update() 125 self.Update()
invesalius/gui/task_exporter.py
@@ -44,7 +44,7 @@ WILDCARD_SAVE_3D = "Inventor (*.iv)|*.iv|"\ @@ -44,7 +44,7 @@ WILDCARD_SAVE_3D = "Inventor (*.iv)|*.iv|"\
44 "VTK PolyData (*.vtp)|*.vtp|"\ 44 "VTK PolyData (*.vtp)|*.vtp|"\
45 "Wavefront (*.obj)|*.obj|"\ 45 "Wavefront (*.obj)|*.obj|"\
46 "X3D (*.x3d)|*.x3d" 46 "X3D (*.x3d)|*.x3d"
47 - 47 +
48 INDEX_TO_TYPE_3D = {0: const.FILETYPE_IV, 48 INDEX_TO_TYPE_3D = {0: const.FILETYPE_IV,
49 1: const.FILETYPE_PLY, 49 1: const.FILETYPE_PLY,
50 2: const.FILETYPE_RIB, 50 2: const.FILETYPE_RIB,
@@ -86,7 +86,7 @@ class TaskPanel(wx.Panel): @@ -86,7 +86,7 @@ class TaskPanel(wx.Panel):
86 86
87 inner_panel = InnerTaskPanel(self) 87 inner_panel = InnerTaskPanel(self)
88 88
89 - sizer = wx.BoxSizer(wx.HORIZONTAL) 89 + sizer = wx.BoxSizer(wx.VERTICAL)
90 sizer.Add(inner_panel, 1, wx.EXPAND | wx.GROW | wx.BOTTOM | wx.RIGHT | 90 sizer.Add(inner_panel, 1, wx.EXPAND | wx.GROW | wx.BOTTOM | wx.RIGHT |
91 wx.LEFT, 7) 91 wx.LEFT, 7)
92 sizer.Fit(self) 92 sizer.Fit(self)
@@ -99,7 +99,8 @@ class InnerTaskPanel(wx.Panel): @@ -99,7 +99,8 @@ class InnerTaskPanel(wx.Panel):
99 99
100 def __init__(self, parent): 100 def __init__(self, parent):
101 wx.Panel.__init__(self, parent) 101 wx.Panel.__init__(self, parent)
102 - self.SetBackgroundColour(wx.Colour(255,255,255)) 102 + backgroud_colour = wx.Colour(255,255,255)
  103 + self.SetBackgroundColour(backgroud_colour)
103 self.SetAutoLayout(1) 104 self.SetAutoLayout(1)
104 105
105 # Counter for projects loaded in current GUI 106 # Counter for projects loaded in current GUI
@@ -109,7 +110,9 @@ class InnerTaskPanel(wx.Panel): @@ -109,7 +110,9 @@ class InnerTaskPanel(wx.Panel):
109 link_export_picture = hl.HyperLinkCtrl(self, -1, 110 link_export_picture = hl.HyperLinkCtrl(self, -1,
110 _("Export picture...")) 111 _("Export picture..."))
111 link_export_picture.SetUnderlines(False, False, False) 112 link_export_picture.SetUnderlines(False, False, False)
  113 + link_export_picture.SetBold(True)
112 link_export_picture.SetColours("BLACK", "BLACK", "BLACK") 114 link_export_picture.SetColours("BLACK", "BLACK", "BLACK")
  115 + link_export_picture.SetBackgroundColour(self.GetBackgroundColour())
113 link_export_picture.SetToolTip(tooltip) 116 link_export_picture.SetToolTip(tooltip)
114 link_export_picture.AutoBrowse(False) 117 link_export_picture.AutoBrowse(False)
115 link_export_picture.UpdateLink() 118 link_export_picture.UpdateLink()
@@ -119,7 +122,9 @@ class InnerTaskPanel(wx.Panel): @@ -119,7 +122,9 @@ class InnerTaskPanel(wx.Panel):
119 tooltip = wx.ToolTip(_("Export 3D surface")) 122 tooltip = wx.ToolTip(_("Export 3D surface"))
120 link_export_surface = hl.HyperLinkCtrl(self, -1,_("Export 3D surface...")) 123 link_export_surface = hl.HyperLinkCtrl(self, -1,_("Export 3D surface..."))
121 link_export_surface.SetUnderlines(False, False, False) 124 link_export_surface.SetUnderlines(False, False, False)
  125 + link_export_surface.SetBold(True)
122 link_export_surface.SetColours("BLACK", "BLACK", "BLACK") 126 link_export_surface.SetColours("BLACK", "BLACK", "BLACK")
  127 + link_export_surface.SetBackgroundColour(self.GetBackgroundColour())
123 link_export_surface.SetToolTip(tooltip) 128 link_export_surface.SetToolTip(tooltip)
124 link_export_surface.AutoBrowse(False) 129 link_export_surface.AutoBrowse(False)
125 link_export_surface.UpdateLink() 130 link_export_surface.UpdateLink()
@@ -160,26 +165,28 @@ class InnerTaskPanel(wx.Panel): @@ -160,26 +165,28 @@ class InnerTaskPanel(wx.Panel):
160 if sys.platform == 'darwin': 165 if sys.platform == 'darwin':
161 BMP_EXPORT_SURFACE = wx.Bitmap(\ 166 BMP_EXPORT_SURFACE = wx.Bitmap(\
162 "../icons/surface_export_original.png", 167 "../icons/surface_export_original.png",
163 - wx.BITMAP_TYPE_PNG) 168 + wx.BITMAP_TYPE_PNG).ConvertToImage()\
  169 + .Rescale(25, 25).ConvertToBitmap()
164 BMP_TAKE_PICTURE = wx.Bitmap(\ 170 BMP_TAKE_PICTURE = wx.Bitmap(\
165 "../icons/tool_photo_original.png", 171 "../icons/tool_photo_original.png",
166 - wx.BITMAP_TYPE_PNG) 172 + wx.BITMAP_TYPE_PNG).ConvertToImage()\
  173 + .Rescale(25, 25).ConvertToBitmap()
  174 +
167 #BMP_EXPORT_MASK = wx.Bitmap("../icons/mask.png", 175 #BMP_EXPORT_MASK = wx.Bitmap("../icons/mask.png",
168 # wx.BITMAP_TYPE_PNG) 176 # wx.BITMAP_TYPE_PNG)
169 else: 177 else:
170 BMP_EXPORT_SURFACE = wx.Bitmap("../icons/surface_export.png", 178 BMP_EXPORT_SURFACE = wx.Bitmap("../icons/surface_export.png",
171 - wx.BITMAP_TYPE_PNG) 179 + wx.BITMAP_TYPE_PNG).ConvertToImage()\
  180 + .Rescale(25, 25).ConvertToBitmap()
  181 +
172 BMP_TAKE_PICTURE = wx.Bitmap("../icons/tool_photo.png", 182 BMP_TAKE_PICTURE = wx.Bitmap("../icons/tool_photo.png",
173 - wx.BITMAP_TYPE_PNG) 183 + wx.BITMAP_TYPE_PNG).ConvertToImage()\
  184 + .Rescale(25, 25).ConvertToBitmap()
  185 +
174 #BMP_EXPORT_MASK = wx.Bitmap("../icons/mask_small.png", 186 #BMP_EXPORT_MASK = wx.Bitmap("../icons/mask_small.png",
175 # wx.BITMAP_TYPE_PNG) 187 # wx.BITMAP_TYPE_PNG)
176 188
177 189
178 - bmp_list = [BMP_TAKE_PICTURE, BMP_EXPORT_SURFACE]#,  
179 - # BMP_EXPORT_MASK]  
180 - for bmp in bmp_list:  
181 - bmp.SetWidth(25)  
182 - bmp.SetHeight(25)  
183 190
184 # Buttons related to hyperlinks 191 # Buttons related to hyperlinks
185 button_style = pbtn.PB_STYLE_SQUARE | pbtn.PB_STYLE_DEFAULT 192 button_style = pbtn.PB_STYLE_SQUARE | pbtn.PB_STYLE_DEFAULT
@@ -187,11 +194,13 @@ class InnerTaskPanel(wx.Panel): @@ -187,11 +194,13 @@ class InnerTaskPanel(wx.Panel):
187 button_picture = pbtn.PlateButton(self, BTN_PICTURE, "", 194 button_picture = pbtn.PlateButton(self, BTN_PICTURE, "",
188 BMP_TAKE_PICTURE, 195 BMP_TAKE_PICTURE,
189 style=button_style) 196 style=button_style)
  197 + button_picture.SetBackgroundColour(self.GetBackgroundColour())
190 self.button_picture = button_picture 198 self.button_picture = button_picture
191 199
192 button_surface = pbtn.PlateButton(self, BTN_SURFACE, "", 200 button_surface = pbtn.PlateButton(self, BTN_SURFACE, "",
193 BMP_EXPORT_SURFACE, 201 BMP_EXPORT_SURFACE,
194 style=button_style) 202 style=button_style)
  203 + button_surface.SetBackgroundColour(self.GetBackgroundColour())
195 #button_mask = pbtn.PlateButton(self, BTN_MASK, "", 204 #button_mask = pbtn.PlateButton(self, BTN_MASK, "",
196 # BMP_EXPORT_MASK, 205 # BMP_EXPORT_MASK,
197 # style=button_style) 206 # style=button_style)
@@ -232,7 +241,7 @@ class InnerTaskPanel(wx.Panel): @@ -232,7 +241,7 @@ class InnerTaskPanel(wx.Panel):
232 self.__init_menu() 241 self.__init_menu()
233 242
234 def __init_menu(self): 243 def __init_menu(self):
235 - 244 +
236 245
237 menu = wx.Menu() 246 menu = wx.Menu()
238 self.id_to_name = {const.AXIAL:_("Axial slice"), 247 self.id_to_name = {const.AXIAL:_("Axial slice"),
@@ -244,23 +253,23 @@ class InnerTaskPanel(wx.Panel): @@ -244,23 +253,23 @@ class InnerTaskPanel(wx.Panel):
244 item = wx.MenuItem(menu, id, self.id_to_name[id]) 253 item = wx.MenuItem(menu, id, self.id_to_name[id])
245 menu.AppendItem(item) 254 menu.AppendItem(item)
246 255
247 - self.menu_picture = menu 256 + self.menu_picture = menu
248 menu.Bind(wx.EVT_MENU, self.OnMenuPicture) 257 menu.Bind(wx.EVT_MENU, self.OnMenuPicture)
249 258
250 def OnMenuPicture(self, evt): 259 def OnMenuPicture(self, evt):
251 - print "OnMenuPicture" 260 + print "OnMenuPicture"
252 id = evt.GetId() 261 id = evt.GetId()
253 value = dlg.ExportPicture(self.id_to_name[id]) 262 value = dlg.ExportPicture(self.id_to_name[id])
254 if value: 263 if value:
255 - filename, filetype = value 264 + filename, filetype = value
256 Publisher.sendMessage('Export picture to file', 265 Publisher.sendMessage('Export picture to file',
257 (id, filename, filetype)) 266 (id, filename, filetype))
258 - 267 +
259 268
260 269
261 def OnLinkExportPicture(self, evt=None): 270 def OnLinkExportPicture(self, evt=None):
262 self.button_picture.PopupMenu(self.menu_picture) 271 self.button_picture.PopupMenu(self.menu_picture)
263 - 272 +
264 273
265 def OnLinkExportMask(self, evt=None): 274 def OnLinkExportMask(self, evt=None):
266 project = proj.Project() 275 project = proj.Project()
@@ -276,9 +285,9 @@ class InnerTaskPanel(wx.Panel): @@ -276,9 +285,9 @@ class InnerTaskPanel(wx.Panel):
276 "", # last used directory 285 "", # last used directory
277 project_name, # filename 286 project_name, # filename
278 WILDCARD_SAVE_MASK, 287 WILDCARD_SAVE_MASK,
279 - wx.SAVE|wx.OVERWRITE_PROMPT) 288 + wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
280 dlg.SetFilterIndex(0) # default is VTI 289 dlg.SetFilterIndex(0) # default is VTI
281 - 290 +
282 if dlg.ShowModal() == wx.ID_OK: 291 if dlg.ShowModal() == wx.ID_OK:
283 filename = dlg.GetPath() 292 filename = dlg.GetPath()
284 print "filename", filename 293 print "filename", filename
@@ -312,9 +321,9 @@ class InnerTaskPanel(wx.Panel): @@ -312,9 +321,9 @@ class InnerTaskPanel(wx.Panel):
312 "", # last used directory 321 "", # last used directory
313 project_name, # filename 322 project_name, # filename
314 WILDCARD_SAVE_3D, 323 WILDCARD_SAVE_3D,
315 - wx.SAVE|wx.OVERWRITE_PROMPT) 324 + wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
316 dlg.SetFilterIndex(3) # default is STL 325 dlg.SetFilterIndex(3) # default is STL
317 - 326 +
318 if dlg.ShowModal() == wx.ID_OK: 327 if dlg.ShowModal() == wx.ID_OK:
319 filetype_index = dlg.GetFilterIndex() 328 filetype_index = dlg.GetFilterIndex()
320 filetype = INDEX_TO_TYPE_3D[filetype_index] 329 filetype = INDEX_TO_TYPE_3D[filetype_index]
invesalius/gui/task_importer.py
@@ -51,7 +51,10 @@ class TaskPanel(wx.Panel): @@ -51,7 +51,10 @@ class TaskPanel(wx.Panel):
51 class InnerTaskPanel(wx.Panel): 51 class InnerTaskPanel(wx.Panel):
52 def __init__(self, parent): 52 def __init__(self, parent):
53 wx.Panel.__init__(self, parent) 53 wx.Panel.__init__(self, parent)
54 - self.SetBackgroundColour(wx.Colour(255,255,255)) 54 +
  55 + backgroud_colour = wx.Colour(255,255,255)
  56 +
  57 + self.SetBackgroundColour(backgroud_colour)
55 self.SetAutoLayout(1) 58 self.SetAutoLayout(1)
56 59
57 # Counter for projects loaded in current GUI 60 # Counter for projects loaded in current GUI
@@ -64,7 +67,9 @@ class InnerTaskPanel(wx.Panel): @@ -64,7 +67,9 @@ class InnerTaskPanel(wx.Panel):
64 tooltip = wx.ToolTip(_("Select DICOM or Analyze files to be reconstructed")) 67 tooltip = wx.ToolTip(_("Select DICOM or Analyze files to be reconstructed"))
65 link_import_local = hl.HyperLinkCtrl(self, -1, _("Import medical images...")) 68 link_import_local = hl.HyperLinkCtrl(self, -1, _("Import medical images..."))
66 link_import_local.SetUnderlines(False, False, False) 69 link_import_local.SetUnderlines(False, False, False)
  70 + link_import_local.SetBold(True)
67 link_import_local.SetColours("BLACK", "BLACK", "BLACK") 71 link_import_local.SetColours("BLACK", "BLACK", "BLACK")
  72 + link_import_local.SetBackgroundColour(backgroud_colour)
68 link_import_local.SetToolTip(tooltip) 73 link_import_local.SetToolTip(tooltip)
69 link_import_local.AutoBrowse(False) 74 link_import_local.AutoBrowse(False)
70 link_import_local.UpdateLink() 75 link_import_local.UpdateLink()
@@ -82,7 +87,9 @@ class InnerTaskPanel(wx.Panel): @@ -82,7 +87,9 @@ class InnerTaskPanel(wx.Panel):
82 tooltip = wx.ToolTip(_("Open an existing InVesalius project...")) 87 tooltip = wx.ToolTip(_("Open an existing InVesalius project..."))
83 link_open_proj = hl.HyperLinkCtrl(self,-1,_("Open an existing project...")) 88 link_open_proj = hl.HyperLinkCtrl(self,-1,_("Open an existing project..."))
84 link_open_proj.SetUnderlines(False, False, False) 89 link_open_proj.SetUnderlines(False, False, False)
  90 + link_open_proj.SetBold(True)
85 link_open_proj.SetColours("BLACK", "BLACK", "BLACK") 91 link_open_proj.SetColours("BLACK", "BLACK", "BLACK")
  92 + link_open_proj.SetBackgroundColour(backgroud_colour)
86 link_open_proj.SetToolTip(tooltip) 93 link_open_proj.SetToolTip(tooltip)
87 link_open_proj.AutoBrowse(False) 94 link_open_proj.AutoBrowse(False)
88 link_open_proj.UpdateLink() 95 link_open_proj.UpdateLink()
@@ -94,9 +101,9 @@ class InnerTaskPanel(wx.Panel): @@ -94,9 +101,9 @@ class InnerTaskPanel(wx.Panel):
94 BMP_OPEN_PROJECT = wx.Bitmap("../icons/file_open.png", wx.BITMAP_TYPE_PNG) 101 BMP_OPEN_PROJECT = wx.Bitmap("../icons/file_open.png", wx.BITMAP_TYPE_PNG)
95 102
96 bmp_list = [BMP_IMPORT, BMP_NET, BMP_OPEN_PROJECT] 103 bmp_list = [BMP_IMPORT, BMP_NET, BMP_OPEN_PROJECT]
97 - for bmp in bmp_list:  
98 - bmp.SetWidth(25)  
99 - bmp.SetHeight(25) 104 + #for bmp in bmp_list:
  105 + #bmp.SetWidth(25)
  106 + #bmp.SetHeight(25)
100 107
101 # Buttons related to hyperlinks 108 # Buttons related to hyperlinks
102 button_style = pbtn.PB_STYLE_SQUARE | pbtn.PB_STYLE_DEFAULT 109 button_style = pbtn.PB_STYLE_SQUARE | pbtn.PB_STYLE_DEFAULT
@@ -105,8 +112,10 @@ class InnerTaskPanel(wx.Panel): @@ -105,8 +112,10 @@ class InnerTaskPanel(wx.Panel):
105 # style=button_style) 112 # style=button_style)
106 button_import_local = pbtn.PlateButton(self, BTN_IMPORT_LOCAL, "", 113 button_import_local = pbtn.PlateButton(self, BTN_IMPORT_LOCAL, "",
107 BMP_IMPORT, style=button_style) 114 BMP_IMPORT, style=button_style)
  115 + button_import_local.SetBackgroundColour(self.GetBackgroundColour())
108 button_open_proj = pbtn.PlateButton(self, BTN_OPEN_PROJECT, "", 116 button_open_proj = pbtn.PlateButton(self, BTN_OPEN_PROJECT, "",
109 BMP_OPEN_PROJECT, style=button_style) 117 BMP_OPEN_PROJECT, style=button_style)
  118 + button_open_proj.SetBackgroundColour(self.GetBackgroundColour())
110 119
111 # When using PlaneButton, it is necessary to bind events from parent win 120 # When using PlaneButton, it is necessary to bind events from parent win
112 self.Bind(wx.EVT_BUTTON, self.OnButton) 121 self.Bind(wx.EVT_BUTTON, self.OnButton)
@@ -185,6 +194,7 @@ class InnerTaskPanel(wx.Panel): @@ -185,6 +194,7 @@ class InnerTaskPanel(wx.Panel):
185 proj_link = hl.HyperLinkCtrl(self, -1, label) 194 proj_link = hl.HyperLinkCtrl(self, -1, label)
186 proj_link.SetUnderlines(False, False, False) 195 proj_link.SetUnderlines(False, False, False)
187 proj_link.SetColours("BLACK", "BLACK", "BLACK") 196 proj_link.SetColours("BLACK", "BLACK", "BLACK")
  197 + proj_link.SetBackgroundColour(self.GetBackgroundColour())
188 proj_link.AutoBrowse(False) 198 proj_link.AutoBrowse(False)
189 proj_link.UpdateLink() 199 proj_link.UpdateLink()
190 proj_link.Bind(hl.EVT_HYPERLINK_LEFT, 200 proj_link.Bind(hl.EVT_HYPERLINK_LEFT,
@@ -201,7 +211,7 @@ class InnerTaskPanel(wx.Panel): @@ -201,7 +211,7 @@ class InnerTaskPanel(wx.Panel):
201 def OnLinkImport(self, event): 211 def OnLinkImport(self, event):
202 self.ImportDicom() 212 self.ImportDicom()
203 event.Skip() 213 event.Skip()
204 - 214 +
205 def OnLinkImportPACS(self, event): 215 def OnLinkImportPACS(self, event):
206 self.ImportPACS() 216 self.ImportPACS()
207 event.Skip() 217 event.Skip()
@@ -210,7 +220,7 @@ class InnerTaskPanel(wx.Panel): @@ -210,7 +220,7 @@ class InnerTaskPanel(wx.Panel):
210 self.OpenProject() 220 self.OpenProject()
211 event.Skip() 221 event.Skip()
212 222
213 - 223 +
214 def ImportPACS(self): 224 def ImportPACS(self):
215 print "TODO: Send Signal - Import DICOM files from PACS" 225 print "TODO: Send Signal - Import DICOM files from PACS"
216 226
invesalius/gui/task_slice.py
@@ -65,17 +65,19 @@ class TaskPanel(wx.Panel): @@ -65,17 +65,19 @@ class TaskPanel(wx.Panel):
65 class InnerTaskPanel(wx.Panel): 65 class InnerTaskPanel(wx.Panel):
66 def __init__(self, parent): 66 def __init__(self, parent):
67 wx.Panel.__init__(self, parent) 67 wx.Panel.__init__(self, parent)
68 - self.SetBackgroundColour(wx.Colour(255,255,255)) 68 + backgroud_colour = wx.Colour(255,255,255)
  69 + self.SetBackgroundColour(backgroud_colour)
69 self.SetAutoLayout(1) 70 self.SetAutoLayout(1)
70 71
71 # Image(s) for buttons 72 # Image(s) for buttons
72 BMP_ADD = wx.Bitmap("../icons/object_add.png", wx.BITMAP_TYPE_PNG) 73 BMP_ADD = wx.Bitmap("../icons/object_add.png", wx.BITMAP_TYPE_PNG)
73 - BMP_ADD.SetWidth(25)  
74 - BMP_ADD.SetHeight(25) 74 + #BMP_ADD.SetWidth(25)
  75 + #BMP_ADD.SetHeight(25)
75 76
76 # Button for creating new surface 77 # Button for creating new surface
77 button_new_mask = pbtn.PlateButton(self, BTN_NEW, "", BMP_ADD, style=\ 78 button_new_mask = pbtn.PlateButton(self, BTN_NEW, "", BMP_ADD, style=\
78 pbtn.PB_STYLE_SQUARE | pbtn.PB_STYLE_DEFAULT) 79 pbtn.PB_STYLE_SQUARE | pbtn.PB_STYLE_DEFAULT)
  80 + button_new_mask.SetBackgroundColour(self.GetBackgroundColour())
79 self.Bind(wx.EVT_BUTTON, self.OnButton) 81 self.Bind(wx.EVT_BUTTON, self.OnButton)
80 82
81 83
@@ -83,7 +85,9 @@ class InnerTaskPanel(wx.Panel): @@ -83,7 +85,9 @@ class InnerTaskPanel(wx.Panel):
83 tooltip = wx.ToolTip(_("Create mask for slice segmentation and editing")) 85 tooltip = wx.ToolTip(_("Create mask for slice segmentation and editing"))
84 link_new_mask = hl.HyperLinkCtrl(self, -1, _("Create new mask")) 86 link_new_mask = hl.HyperLinkCtrl(self, -1, _("Create new mask"))
85 link_new_mask.SetUnderlines(False, False, False) 87 link_new_mask.SetUnderlines(False, False, False)
  88 + link_new_mask.SetBold(True)
86 link_new_mask.SetColours("BLACK", "BLACK", "BLACK") 89 link_new_mask.SetColours("BLACK", "BLACK", "BLACK")
  90 + link_new_mask.SetBackgroundColour(self.GetBackgroundColour())
87 link_new_mask.SetToolTip(tooltip) 91 link_new_mask.SetToolTip(tooltip)
88 link_new_mask.AutoBrowse(False) 92 link_new_mask.AutoBrowse(False)
89 link_new_mask.UpdateLink() 93 link_new_mask.UpdateLink()
@@ -117,20 +121,23 @@ class InnerTaskPanel(wx.Panel): @@ -117,20 +121,23 @@ class InnerTaskPanel(wx.Panel):
117 check_box.SetWindowVariant(wx.WINDOW_VARIANT_SMALL) 121 check_box.SetWindowVariant(wx.WINDOW_VARIANT_SMALL)
118 button_next.Bind(wx.EVT_BUTTON, self.OnButtonNextTask) 122 button_next.Bind(wx.EVT_BUTTON, self.OnButtonNextTask)
119 123
  124 + next_btn_sizer = wx.BoxSizer(wx.VERTICAL)
  125 + next_btn_sizer.Add(button_next, 1, wx.ALIGN_RIGHT)
  126 +
120 line_sizer = wx.BoxSizer(wx.HORIZONTAL) 127 line_sizer = wx.BoxSizer(wx.HORIZONTAL)
121 - line_sizer.Add(check_box, 1, wx.ALIGN_LEFT|wx.RIGHT|wx.LEFT|wx.BOTTOM, 5)  
122 - line_sizer.Add(button_next, 0,  
123 - wx.ALIGN_RIGHT|wx.RIGHT|wx.LEFT|wx.BOTTOM, 5) 128 + line_sizer.Add(check_box, 0, wx.ALIGN_LEFT|wx.RIGHT|wx.LEFT, 5)
  129 + line_sizer.Add(next_btn_sizer, 1, wx.EXPAND|wx.ALIGN_RIGHT|wx.RIGHT|wx.LEFT, 5)
124 line_sizer.Fit(self) 130 line_sizer.Fit(self)
125 131
126 # Add line sizers into main sizer 132 # Add line sizers into main sizer
127 main_sizer = wx.BoxSizer(wx.VERTICAL) 133 main_sizer = wx.BoxSizer(wx.VERTICAL)
128 main_sizer.Add(line_new, 0,wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5) 134 main_sizer.Add(line_new, 0,wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5)
129 - main_sizer.Add(fold_panel, 6, wx.GROW|wx.EXPAND|wx.ALL, 5)  
130 - main_sizer.AddSizer(line_sizer, 1, wx.GROW|wx.EXPAND) 135 + main_sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND|wx.ALL, 5)
  136 + main_sizer.AddSizer(line_sizer, 0, wx.GROW|wx.EXPAND)
  137 + main_sizer.AddSpacer(5)
131 main_sizer.Fit(self) 138 main_sizer.Fit(self)
132 139
133 - self.SetSizer(main_sizer) 140 + self.SetSizerAndFit(main_sizer)
134 self.Update() 141 self.Update()
135 self.SetAutoLayout(1) 142 self.SetAutoLayout(1)
136 143
@@ -161,7 +168,7 @@ class InnerTaskPanel(wx.Panel): @@ -161,7 +168,7 @@ class InnerTaskPanel(wx.Panel):
161 168
162 if to_generate: 169 if to_generate:
163 mask_index = sl.current_mask.index 170 mask_index = sl.current_mask.index
164 - method = {'algorithm': algorithm, 171 + method = {'algorithm': algorithm,
165 'options': options} 172 'options': options}
166 srf_options = {"index": mask_index, 173 srf_options = {"index": mask_index,
167 "name": '', 174 "name": '',
@@ -170,7 +177,7 @@ class InnerTaskPanel(wx.Panel): @@ -170,7 +177,7 @@ class InnerTaskPanel(wx.Panel):
170 "keep_largest": False, 177 "keep_largest": False,
171 "overwrite": overwrite} 178 "overwrite": overwrite}
172 179
173 - Publisher.sendMessage('Create surface from index', 180 + Publisher.sendMessage('Create surface from index',
174 {'method': method, 'options': srf_options}) 181 {'method': method, 'options': srf_options})
175 Publisher.sendMessage('Fold surface task') 182 Publisher.sendMessage('Fold surface task')
176 183
@@ -200,8 +207,7 @@ class InnerTaskPanel(wx.Panel): @@ -200,8 +207,7 @@ class InnerTaskPanel(wx.Panel):
200 207
201 class FoldPanel(wx.Panel): 208 class FoldPanel(wx.Panel):
202 def __init__(self, parent): 209 def __init__(self, parent):
203 - wx.Panel.__init__(self, parent, size=(50,50))  
204 - self.SetBackgroundColour(wx.Colour(0,255,0)) 210 + wx.Panel.__init__(self, parent)
205 211
206 inner_panel = InnerFoldPanel(self) 212 inner_panel = InnerFoldPanel(self)
207 213
@@ -209,7 +215,7 @@ class FoldPanel(wx.Panel): @@ -209,7 +215,7 @@ class FoldPanel(wx.Panel):
209 sizer.Add(inner_panel, 1, wx.EXPAND|wx.GROW, 2) 215 sizer.Add(inner_panel, 1, wx.EXPAND|wx.GROW, 2)
210 sizer.Fit(self) 216 sizer.Fit(self)
211 217
212 - self.SetSizer(sizer) 218 + self.SetSizerAndFit(sizer)
213 self.Update() 219 self.Update()
214 self.SetAutoLayout(1) 220 self.SetAutoLayout(1)
215 221
@@ -231,8 +237,24 @@ class InnerFoldPanel(wx.Panel): @@ -231,8 +237,24 @@ class InnerFoldPanel(wx.Panel):
231 # is not working properly in this panel. It might be on some child or 237 # is not working properly in this panel. It might be on some child or
232 # parent panel. Perhaps we need to insert the item into the sizer also... 238 # parent panel. Perhaps we need to insert the item into the sizer also...
233 # Study this. 239 # Study this.
  240 + #gbs = wx.GridBagSizer()
  241 +
  242 + #gbs.AddGrowableRow(0, 1)
  243 + #gbs.AddGrowableCol(0, 1)
  244 +
  245 + #self.gbs = gbs
  246 +
  247 + self.last_size = None
  248 +
  249 + # Panel sizer to expand fold panel
  250 + sizer = wx.BoxSizer(wx.VERTICAL)
  251 + #sizer.Add(gbs, 1, wx.GROW|wx.EXPAND)
  252 + self.SetSizer(sizer)
  253 +
234 fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition, 254 fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition,
235 - (10, 220), 0,fpb.FPB_SINGLE_FOLD) 255 + wx.DefaultSize, 0,fpb.FPB_SINGLE_FOLD)
  256 + self.fold_panel = fold_panel
  257 +
236 258
237 # Fold panel style 259 # Fold panel style
238 style = fpb.CaptionBarStyle() 260 style = fpb.CaptionBarStyle()
@@ -243,35 +265,38 @@ class InnerFoldPanel(wx.Panel): @@ -243,35 +265,38 @@ class InnerFoldPanel(wx.Panel):
243 # Fold 1 - Mask properties 265 # Fold 1 - Mask properties
244 item = fold_panel.AddFoldPanel(_("Mask properties"), collapsed=True) 266 item = fold_panel.AddFoldPanel(_("Mask properties"), collapsed=True)
245 self.mask_prop_panel = MaskProperties(item) 267 self.mask_prop_panel = MaskProperties(item)
  268 +
246 fold_panel.ApplyCaptionStyle(item, style) 269 fold_panel.ApplyCaptionStyle(item, style)
247 fold_panel.AddFoldPanelWindow(item, self.mask_prop_panel, Spacing= 0, 270 fold_panel.AddFoldPanelWindow(item, self.mask_prop_panel, Spacing= 0,
248 leftSpacing=0, rightSpacing=0) 271 leftSpacing=0, rightSpacing=0)
249 - fold_panel.Expand(fold_panel.GetFoldPanel(0))  
250 272
251 # Fold 2 - Advanced edition tools 273 # Fold 2 - Advanced edition tools
252 item = fold_panel.AddFoldPanel(_("Advanced editing tools"), collapsed=True) 274 item = fold_panel.AddFoldPanel(_("Advanced editing tools"), collapsed=True)
  275 + etw = EditionTools(item)
  276 +
253 fold_panel.ApplyCaptionStyle(item, style) 277 fold_panel.ApplyCaptionStyle(item, style)
254 - fold_panel.AddFoldPanelWindow(item, EditionTools(item), Spacing= 0, 278 + fold_panel.AddFoldPanelWindow(item, etw, Spacing= 0,
255 leftSpacing=0, rightSpacing=0) 279 leftSpacing=0, rightSpacing=0)
256 self.__id_editor = item.GetId() 280 self.__id_editor = item.GetId()
257 self.last_panel_opened = None 281 self.last_panel_opened = None
258 282
259 # Fold 3 - Watershed 283 # Fold 3 - Watershed
260 item = fold_panel.AddFoldPanel(_("Watershed"), collapsed=True) 284 item = fold_panel.AddFoldPanel(_("Watershed"), collapsed=True)
  285 + wtw = WatershedTool(item)
  286 +
261 fold_panel.ApplyCaptionStyle(item, style) 287 fold_panel.ApplyCaptionStyle(item, style)
262 - fold_panel.AddFoldPanelWindow(item, WatershedTool(item), Spacing= 0, 288 + fold_panel.AddFoldPanelWindow(item, wtw, Spacing= 0,
263 leftSpacing=0, rightSpacing=0) 289 leftSpacing=0, rightSpacing=0)
264 self.__id_watershed = item.GetId() 290 self.__id_watershed = item.GetId()
265 291
266 - #fold_panel.Expand(fold_panel.GetFoldPanel(1)) 292 + sizer.Add(fold_panel, 1, wx.EXPAND)
267 293
268 - # Panel sizer to expand fold panel  
269 - sizer = wx.BoxSizer(wx.VERTICAL)  
270 - sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND)  
271 - sizer.Fit(self)  
272 - self.SetSizer(sizer)  
273 - self.Update()  
274 - self.SetAutoLayout(1) 294 + fold_panel.Expand(fold_panel.GetFoldPanel(2))
  295 + self.ResizeFPB()
  296 + fold_panel.Expand(fold_panel.GetFoldPanel(0))
  297 +
  298 + sizer.Layout()
  299 + self.Fit()
275 300
276 self.fold_panel = fold_panel 301 self.fold_panel = fold_panel
277 self.last_style = None 302 self.last_style = None
@@ -279,6 +304,39 @@ class InnerFoldPanel(wx.Panel): @@ -279,6 +304,39 @@ class InnerFoldPanel(wx.Panel):
279 self.__bind_evt() 304 self.__bind_evt()
280 self.__bind_pubsub_evt() 305 self.__bind_pubsub_evt()
281 306
  307 + def __calc_best_size(self, panel):
  308 + print "Best size", self.GetSize()
  309 + parent = panel.GetParent()
  310 + q = panel.Reparent(self)
  311 +
  312 + #gbs = self.gbs
  313 + fold_panel = self.fold_panel
  314 +
  315 + # Calculating the size
  316 + #gbs.AddGrowableRow(0, 1)
  317 + #gbs.AddGrowableRow(0, 1)
  318 + #gbs.Add(panel, (0, 0), flag=wx.EXPAND)
  319 + self.GetSizer().Add(panel, 1, wx.EXPAND)
  320 + #self.SetSizerAndFit(self.GetSizer())
  321 + self.GetSizer().Layout()
  322 + self.GetSizer().Fit(self)
  323 + #gbs.Layout()
  324 + #self.Fit()
  325 + #self.GetSizer().Layout()
  326 + size = panel.GetSize()
  327 +
  328 + #gbs.Remove(0)
  329 + #gbs.RemoveGrowableRow(0)
  330 +
  331 + self.GetSizer().Remove(0)
  332 + panel.Reparent(parent)
  333 + panel.SetInitialSize(size)
  334 +
  335 + #if self.last_size is None or self.last_size.GetHeight() < size.GetHeight():
  336 + #self.SetInitialSize(size)
  337 +
  338 + print "Best size", size, self.GetSize(), self.GetClientSize(), q
  339 +
282 def __bind_evt(self): 340 def __bind_evt(self):
283 self.fold_panel.Bind(fpb.EVT_CAPTIONBAR, self.OnFoldPressCaption) 341 self.fold_panel.Bind(fpb.EVT_CAPTIONBAR, self.OnFoldPressCaption)
284 342
@@ -313,6 +371,13 @@ class InnerFoldPanel(wx.Panel): @@ -313,6 +371,13 @@ class InnerFoldPanel(wx.Panel):
313 self.last_style = None 371 self.last_style = None
314 372
315 evt.Skip() 373 evt.Skip()
  374 + wx.CallAfter(self.ResizeFPB)
  375 +
  376 +
  377 + def ResizeFPB(self):
  378 + sizeNeeded = self.fold_panel.GetPanelsLength(0, 0)[2]
  379 + self.fold_panel.SetMinSize((self.fold_panel.GetSize()[0], sizeNeeded ))
  380 + self.fold_panel.SetSize((self.fold_panel.GetSize()[0], sizeNeeded))
316 381
317 def OnRetrieveStyle(self, pubsub_evt): 382 def OnRetrieveStyle(self, pubsub_evt):
318 if (self.last_style == const.SLICE_STATE_EDITOR): 383 if (self.last_style == const.SLICE_STATE_EDITOR):
@@ -331,14 +396,14 @@ class InnerFoldPanel(wx.Panel): @@ -331,14 +396,14 @@ class InnerFoldPanel(wx.Panel):
331 396
332 class MaskProperties(wx.Panel): 397 class MaskProperties(wx.Panel):
333 def __init__(self, parent): 398 def __init__(self, parent):
334 - wx.Panel.__init__(self, parent, size=(50,240)) 399 + wx.Panel.__init__(self, parent)
335 400
336 ## LINE 1 401 ## LINE 1
337 402
338 # Combo related to mask naem 403 # Combo related to mask naem
339 combo_mask_name = wx.ComboBox(self, -1, "", choices= MASK_LIST, 404 combo_mask_name = wx.ComboBox(self, -1, "", choices= MASK_LIST,
340 style=wx.CB_DROPDOWN|wx.CB_READONLY) 405 style=wx.CB_DROPDOWN|wx.CB_READONLY)
341 - combo_mask_name.SetSelection(0) # wx.CB_SORT 406 + #combo_mask_name.SetSelection(0) # wx.CB_SORT
342 if sys.platform != 'win32': 407 if sys.platform != 'win32':
343 combo_mask_name.SetWindowVariant(wx.WINDOW_VARIANT_SMALL) 408 combo_mask_name.SetWindowVariant(wx.WINDOW_VARIANT_SMALL)
344 self.combo_mask_name = combo_mask_name 409 self.combo_mask_name = combo_mask_name
@@ -350,21 +415,23 @@ class MaskProperties(wx.Panel): @@ -350,21 +415,23 @@ class MaskProperties(wx.Panel):
350 # Sizer which represents the first line 415 # Sizer which represents the first line
351 line1 = wx.BoxSizer(wx.HORIZONTAL) 416 line1 = wx.BoxSizer(wx.HORIZONTAL)
352 line1.Add(combo_mask_name, 1, wx.EXPAND|wx.GROW|wx.TOP|wx.RIGHT, 2) 417 line1.Add(combo_mask_name, 1, wx.EXPAND|wx.GROW|wx.TOP|wx.RIGHT, 2)
353 - line1.Add(button_colour, 0, wx.TOP|wx.LEFT|wx.RIGHT, 2) 418 + line1.Add(button_colour, 0, wx.TOP|wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL , 2)
354 419
355 - ## LINE 2 420 + ### LINE 2
356 text_thresh = wx.StaticText(self, -1, 421 text_thresh = wx.StaticText(self, -1,
357 _("Set predefined or manual threshold:")) 422 _("Set predefined or manual threshold:"))
358 423
359 - ## LINE 3  
360 - combo_thresh = wx.ComboBox(self, -1, "", size=(15,-1),  
361 - choices=[],#THRESHOLD_LIST 424 + ### LINE 3
  425 + THRESHOLD_LIST = ["",]
  426 + combo_thresh = wx.ComboBox(self, -1, "", #size=(15,-1),
  427 + choices=THRESHOLD_LIST,
362 style=wx.CB_DROPDOWN|wx.CB_READONLY) 428 style=wx.CB_DROPDOWN|wx.CB_READONLY)
363 combo_thresh.SetSelection(0) 429 combo_thresh.SetSelection(0)
364 if sys.platform != 'win32': 430 if sys.platform != 'win32':
365 combo_thresh.SetWindowVariant(wx.WINDOW_VARIANT_SMALL) 431 combo_thresh.SetWindowVariant(wx.WINDOW_VARIANT_SMALL)
366 self.combo_thresh = combo_thresh 432 self.combo_thresh = combo_thresh
367 433
  434 +
368 ## LINE 4 435 ## LINE 4
369 gradient = grad.GradientCtrl(self, -1, -5000, 5000, 0, 5000, 436 gradient = grad.GradientCtrl(self, -1, -5000, 5000, 0, 5000,
370 (0, 255, 0, 100)) 437 (0, 255, 0, 100))
@@ -372,13 +439,21 @@ class MaskProperties(wx.Panel): @@ -372,13 +439,21 @@ class MaskProperties(wx.Panel):
372 439
373 # Add all lines into main sizer 440 # Add all lines into main sizer
374 sizer = wx.BoxSizer(wx.VERTICAL) 441 sizer = wx.BoxSizer(wx.VERTICAL)
375 - sizer.Add(line1, 1, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5)  
376 - sizer.Add(text_thresh, 1, wx.GROW|wx.EXPAND|wx.ALL, 5)  
377 - sizer.Add(combo_thresh, 1, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT, 5)  
378 - sizer.Add(gradient, 1, wx.EXPAND|wx.TOP|wx.LEFT|wx.RIGHT|wx.BOTTOM, 6) 442 + sizer.AddSpacer(7)
  443 + sizer.Add(line1, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
  444 +
  445 + sizer.AddSpacer(5)
  446 + sizer.Add(text_thresh, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
  447 + sizer.AddSpacer(2)
  448 + sizer.Add(combo_thresh, 0, wx.EXPAND|wx.GROW|wx.LEFT|wx.RIGHT, 5)
  449 +
  450 + sizer.AddSpacer(5)
  451 + sizer.Add(gradient, 1, wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
  452 + sizer.AddSpacer(7)
  453 +
379 sizer.Fit(self) 454 sizer.Fit(self)
380 455
381 - self.SetSizer(sizer) 456 + self.SetSizerAndFit(sizer)
382 self.Update() 457 self.Update()
383 self.SetAutoLayout(1) 458 self.SetAutoLayout(1)
384 459
@@ -417,7 +492,7 @@ class MaskProperties(wx.Panel): @@ -417,7 +492,7 @@ class MaskProperties(wx.Panel):
417 n = self.combo_thresh.GetCount() 492 n = self.combo_thresh.GetCount()
418 for i in xrange(n-1, -1, -1): 493 for i in xrange(n-1, -1, -1):
419 self.combo_thresh.Delete(i) 494 self.combo_thresh.Delete(i)
420 - 495 +
421 def OnRemoveMasks(self, pubsub_evt): 496 def OnRemoveMasks(self, pubsub_evt):
422 print "OnRemoveMasks" 497 print "OnRemoveMasks"
423 list_index = pubsub_evt.data 498 list_index = pubsub_evt.data
@@ -457,7 +532,7 @@ class MaskProperties(wx.Panel): @@ -457,7 +532,7 @@ class MaskProperties(wx.Panel):
457 thresh = (thresh_min, thresh_max) 532 thresh = (thresh_min, thresh_max)
458 if thresh in Project().threshold_modes.values(): 533 if thresh in Project().threshold_modes.values():
459 preset_name = Project().threshold_modes.get_key(thresh)[0] 534 preset_name = Project().threshold_modes.get_key(thresh)[0]
460 - index = self.threshold_modes_names.index(preset_name) 535 + index = self.threshold_modes_names.index(preset_name)
461 self.combo_thresh.SetSelection(index) 536 self.combo_thresh.SetSelection(index)
462 else: 537 else:
463 index = self.threshold_modes_names.index(_("Custom")) 538 index = self.threshold_modes_names.index(_("Custom"))
@@ -471,7 +546,7 @@ class MaskProperties(wx.Panel): @@ -471,7 +546,7 @@ class MaskProperties(wx.Panel):
471 thresh = (thresh_min, thresh_max) 546 thresh = (thresh_min, thresh_max)
472 if thresh in Project().threshold_modes.values(): 547 if thresh in Project().threshold_modes.values():
473 preset_name = Project().threshold_modes.get_key(thresh)[0] 548 preset_name = Project().threshold_modes.get_key(thresh)[0]
474 - index = self.threshold_modes_names.index(preset_name) 549 + index = self.threshold_modes_names.index(preset_name)
475 self.combo_thresh.SetSelection(index) 550 self.combo_thresh.SetSelection(index)
476 else: 551 else:
477 index = self.threshold_modes_names.index(_("Custom")) 552 index = self.threshold_modes_names.index(_("Custom"))
@@ -515,7 +590,7 @@ class MaskProperties(wx.Panel): @@ -515,7 +590,7 @@ class MaskProperties(wx.Panel):
515 590
516 elif default_thresh in proj.threshold_modes.values(): 591 elif default_thresh in proj.threshold_modes.values():
517 preset_name = proj.threshold_modes.get_key(default_thresh)[0] 592 preset_name = proj.threshold_modes.get_key(default_thresh)[0]
518 - index = self.threshold_modes_names.index(preset_name) 593 + index = self.threshold_modes_names.index(preset_name)
519 self.combo_thresh.SetSelection(index) 594 self.combo_thresh.SetSelection(index)
520 thresh_min, thresh_max = default_thresh 595 thresh_min, thresh_max = default_thresh
521 else: 596 else:
@@ -569,7 +644,7 @@ class MaskProperties(wx.Panel): @@ -569,7 +644,7 @@ class MaskProperties(wx.Panel):
569 644
570 class EditionTools(wx.Panel): 645 class EditionTools(wx.Panel):
571 def __init__(self, parent): 646 def __init__(self, parent):
572 - wx.Panel.__init__(self, parent, size=(50,240)) 647 + wx.Panel.__init__(self, parent)
573 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR) 648 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR)
574 self.SetBackgroundColour(default_colour) 649 self.SetBackgroundColour(default_colour)
575 650
@@ -599,7 +674,12 @@ class EditionTools(wx.Panel): @@ -599,7 +674,12 @@ class EditionTools(wx.Panel):
599 btn_brush_format.SetMenu(menu) 674 btn_brush_format.SetMenu(menu)
600 self.btn_brush_format = btn_brush_format 675 self.btn_brush_format = btn_brush_format
601 676
602 - spin_brush_size = wx.SpinCtrl(self, -1, "", (20, 50)) 677 + # To calculate best width to spinctrl
  678 + dc = wx.WindowDC(self)
  679 + dc.SetFont(self.GetFont())
  680 + width, height = dc.GetTextExtent("MMM")
  681 +
  682 + spin_brush_size = wx.SpinCtrl(self, -1, "", size=(width + 20, -1))
603 spin_brush_size.SetRange(1,100) 683 spin_brush_size.SetRange(1,100)
604 spin_brush_size.SetValue(const.BRUSH_SIZE) 684 spin_brush_size.SetValue(const.BRUSH_SIZE)
605 spin_brush_size.Bind(wx.EVT_TEXT, self.OnBrushSize) 685 spin_brush_size.Bind(wx.EVT_TEXT, self.OnBrushSize)
@@ -615,9 +695,9 @@ class EditionTools(wx.Panel): @@ -615,9 +695,9 @@ class EditionTools(wx.Panel):
615 695
616 # Sizer which represents the second line 696 # Sizer which represents the second line
617 line2 = wx.BoxSizer(wx.HORIZONTAL) 697 line2 = wx.BoxSizer(wx.HORIZONTAL)
618 - line2.Add(btn_brush_format, 0, wx.EXPAND|wx.GROW|wx.TOP|wx.RIGHT, 0)  
619 - line2.Add(spin_brush_size, 0, wx.RIGHT, 5)  
620 - line2.Add(combo_brush_op, 1, wx.EXPAND|wx.TOP|wx.RIGHT|wx.LEFT, 5) 698 + line2.Add(btn_brush_format, 0, wx.EXPAND|wx.GROW|wx.RIGHT, 5)
  699 + line2.Add(spin_brush_size, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 5)
  700 + line2.Add(combo_brush_op, 1, wx.RIGHT|wx.LEFT|wx.ALIGN_CENTER_VERTICAL, 5)
621 701
622 ## LINE 3 702 ## LINE 3
623 text_thresh = wx.StaticText(self, -1, _("Brush threshold range:")) 703 text_thresh = wx.StaticText(self, -1, _("Brush threshold range:"))
@@ -630,14 +710,18 @@ class EditionTools(wx.Panel): @@ -630,14 +710,18 @@ class EditionTools(wx.Panel):
630 710
631 # Add lines into main sizer 711 # Add lines into main sizer
632 sizer = wx.BoxSizer(wx.VERTICAL) 712 sizer = wx.BoxSizer(wx.VERTICAL)
633 - sizer.Add(text1, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5)  
634 - sizer.Add(line2, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5)  
635 - sizer.Add(text_thresh, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5)  
636 - sizer.Add(gradient_thresh, 0, wx.EXPAND|wx.TOP|wx.LEFT|wx.RIGHT|  
637 - wx.BOTTOM, 6) 713 + sizer.AddSpacer(7)
  714 + sizer.Add(text1, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
  715 + sizer.AddSpacer(2)
  716 + sizer.Add(line2, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
  717 + sizer.AddSpacer(5)
  718 + sizer.Add(text_thresh, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
  719 + sizer.AddSpacer(5)
  720 + sizer.Add(gradient_thresh, 0, wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
  721 + sizer.AddSpacer(7)
638 sizer.Fit(self) 722 sizer.Fit(self)
639 723
640 - self.SetSizer(sizer) 724 + self.SetSizerAndFit(sizer)
641 self.Update() 725 self.Update()
642 self.SetAutoLayout(1) 726 self.SetAutoLayout(1)
643 727
@@ -715,7 +799,7 @@ class EditionTools(wx.Panel): @@ -715,7 +799,7 @@ class EditionTools(wx.Panel):
715 799
716 class WatershedTool(EditionTools): 800 class WatershedTool(EditionTools):
717 def __init__(self, parent): 801 def __init__(self, parent):
718 - wx.Panel.__init__(self, parent, size=(50,150)) 802 + wx.Panel.__init__(self, parent)
719 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR) 803 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR)
720 self.SetBackgroundColour(default_colour) 804 self.SetBackgroundColour(default_colour)
721 805
@@ -745,7 +829,12 @@ class WatershedTool(EditionTools): @@ -745,7 +829,12 @@ class WatershedTool(EditionTools):
745 btn_brush_format.SetMenu(menu) 829 btn_brush_format.SetMenu(menu)
746 self.btn_brush_format = btn_brush_format 830 self.btn_brush_format = btn_brush_format
747 831
748 - spin_brush_size = wx.SpinCtrl(self, -1, "", (20, 50)) 832 + # To calculate best width to spinctrl
  833 + dc = wx.WindowDC(self)
  834 + dc.SetFont(self.GetFont())
  835 + width, height = dc.GetTextExtent("MMM")
  836 +
  837 + spin_brush_size = wx.SpinCtrl(self, -1, "", size=(width + 20, -1))
749 spin_brush_size.SetRange(1,100) 838 spin_brush_size.SetRange(1,100)
750 spin_brush_size.SetValue(const.BRUSH_SIZE) 839 spin_brush_size.SetValue(const.BRUSH_SIZE)
751 spin_brush_size.Bind(wx.EVT_TEXT, self.OnBrushSize) 840 spin_brush_size.Bind(wx.EVT_TEXT, self.OnBrushSize)
@@ -763,9 +852,9 @@ class WatershedTool(EditionTools): @@ -763,9 +852,9 @@ class WatershedTool(EditionTools):
763 852
764 # Sizer which represents the second line 853 # Sizer which represents the second line
765 line2 = wx.BoxSizer(wx.HORIZONTAL) 854 line2 = wx.BoxSizer(wx.HORIZONTAL)
766 - line2.Add(btn_brush_format, 0, wx.EXPAND|wx.GROW|wx.TOP|wx.RIGHT, 0)  
767 - line2.Add(spin_brush_size, 0, wx.RIGHT, 5)  
768 - line2.Add(combo_brush_op, 1, wx.EXPAND|wx.TOP|wx.RIGHT|wx.LEFT, 5) 855 + line2.Add(btn_brush_format, 0, wx.EXPAND|wx.GROW|wx.RIGHT, 5)
  856 + line2.Add(spin_brush_size, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 5)
  857 + line2.Add(combo_brush_op, 1, wx.RIGHT|wx.LEFT|wx.ALIGN_CENTER_VERTICAL, 5)
769 858
770 ## LINE 3 859 ## LINE 3
771 860
@@ -790,14 +879,20 @@ class WatershedTool(EditionTools): @@ -790,14 +879,20 @@ class WatershedTool(EditionTools):
790 879
791 # Add lines into main sizer 880 # Add lines into main sizer
792 sizer = wx.BoxSizer(wx.VERTICAL) 881 sizer = wx.BoxSizer(wx.VERTICAL)
793 - sizer.Add(text1, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5)  
794 - sizer.Add(line2, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5)  
795 - sizer.Add(check_box, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5)  
796 - sizer.Add(ww_wl_cbox, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5) 882 + sizer.AddSpacer(7)
  883 + sizer.Add(text1, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
  884 + sizer.AddSpacer(2)
  885 + sizer.Add(line2, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
  886 + sizer.AddSpacer(5)
  887 + sizer.Add(check_box, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
  888 + sizer.AddSpacer(2)
  889 + sizer.Add(ww_wl_cbox, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
  890 + sizer.AddSpacer(5)
797 sizer.Add(sizer_btns, 0, wx.EXPAND) 891 sizer.Add(sizer_btns, 0, wx.EXPAND)
  892 + sizer.AddSpacer(7)
798 sizer.Fit(self) 893 sizer.Fit(self)
799 894
800 - self.SetSizer(sizer) 895 + self.SetSizerAndFit(sizer)
801 self.Update() 896 self.Update()
802 self.SetAutoLayout(1) 897 self.SetAutoLayout(1)
803 898
invesalius/gui/task_surface.py
@@ -49,8 +49,8 @@ class TaskPanel(wx.Panel): @@ -49,8 +49,8 @@ class TaskPanel(wx.Panel):
49 49
50 inner_panel = InnerTaskPanel(self) 50 inner_panel = InnerTaskPanel(self)
51 51
52 - sizer = wx.BoxSizer(wx.HORIZONTAL)  
53 - sizer.Add(inner_panel, 1, wx.EXPAND | wx.GROW | wx.BOTTOM | wx.RIGHT | 52 + sizer = wx.BoxSizer(wx.VERTICAL)
  53 + sizer.Add(inner_panel, 0, wx.EXPAND | wx.GROW | wx.BOTTOM | wx.RIGHT |
54 wx.LEFT, 7) 54 wx.LEFT, 7)
55 sizer.Fit(self) 55 sizer.Fit(self)
56 56
@@ -68,24 +68,28 @@ class InnerTaskPanel(wx.Panel): @@ -68,24 +68,28 @@ class InnerTaskPanel(wx.Panel):
68 def __init__(self, parent): 68 def __init__(self, parent):
69 wx.Panel.__init__(self, parent) 69 wx.Panel.__init__(self, parent)
70 default_colour = self.GetBackgroundColour() 70 default_colour = self.GetBackgroundColour()
71 - self.SetBackgroundColour(wx.Colour(255,255,255)) 71 + backgroud_colour = wx.Colour(255,255,255)
  72 + self.SetBackgroundColour(backgroud_colour)
72 self.SetAutoLayout(1) 73 self.SetAutoLayout(1)
73 74
74 75
75 BMP_ADD = wx.Bitmap("../icons/object_add.png", wx.BITMAP_TYPE_PNG) 76 BMP_ADD = wx.Bitmap("../icons/object_add.png", wx.BITMAP_TYPE_PNG)
76 - BMP_ADD.SetWidth(25)  
77 - BMP_ADD.SetHeight(25) 77 + #BMP_ADD.SetWidth(25)
  78 + #BMP_ADD.SetHeight(25)
78 79
79 # Button for creating new surface 80 # Button for creating new surface
80 button_new_surface = pbtn.PlateButton(self, BTN_NEW, "", BMP_ADD, style=\ 81 button_new_surface = pbtn.PlateButton(self, BTN_NEW, "", BMP_ADD, style=\
81 pbtn.PB_STYLE_SQUARE | pbtn.PB_STYLE_DEFAULT) 82 pbtn.PB_STYLE_SQUARE | pbtn.PB_STYLE_DEFAULT)
  83 + button_new_surface.SetBackgroundColour(self.GetBackgroundColour())
82 self.Bind(wx.EVT_BUTTON, self.OnButton) 84 self.Bind(wx.EVT_BUTTON, self.OnButton)
83 85
84 # Fixed hyperlink items 86 # Fixed hyperlink items
85 tooltip = wx.ToolTip(_("Create 3D surface based on a mask")) 87 tooltip = wx.ToolTip(_("Create 3D surface based on a mask"))
86 link_new_surface = hl.HyperLinkCtrl(self, -1, _("Create new 3D surface")) 88 link_new_surface = hl.HyperLinkCtrl(self, -1, _("Create new 3D surface"))
87 link_new_surface.SetUnderlines(False, False, False) 89 link_new_surface.SetUnderlines(False, False, False)
  90 + link_new_surface.SetBold(True)
88 link_new_surface.SetColours("BLACK", "BLACK", "BLACK") 91 link_new_surface.SetColours("BLACK", "BLACK", "BLACK")
  92 + link_new_surface.SetBackgroundColour(self.GetBackgroundColour())
89 link_new_surface.SetToolTip(tooltip) 93 link_new_surface.SetToolTip(tooltip)
90 link_new_surface.AutoBrowse(False) 94 link_new_surface.AutoBrowse(False)
91 link_new_surface.UpdateLink() 95 link_new_surface.UpdateLink()
@@ -109,13 +113,13 @@ class InnerTaskPanel(wx.Panel): @@ -109,13 +113,13 @@ class InnerTaskPanel(wx.Panel):
109 # Add line sizers into main sizer 113 # Add line sizers into main sizer
110 main_sizer = wx.BoxSizer(wx.VERTICAL) 114 main_sizer = wx.BoxSizer(wx.VERTICAL)
111 main_sizer.Add(line_new, 0,wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5) 115 main_sizer.Add(line_new, 0,wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5)
112 - main_sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND|wx.ALL, 5) 116 + main_sizer.Add(fold_panel, 0, wx.GROW|wx.EXPAND|wx.ALL, 5)
113 main_sizer.Add(button_next, 0, wx.ALIGN_RIGHT|wx.RIGHT|wx.BOTTOM, 5) 117 main_sizer.Add(button_next, 0, wx.ALIGN_RIGHT|wx.RIGHT|wx.BOTTOM, 5)
114 main_sizer.Fit(self) 118 main_sizer.Fit(self)
115 119
116 - self.SetSizer(main_sizer) 120 + self.SetSizerAndFit(main_sizer)
117 self.Update() 121 self.Update()
118 - self.SetAutoLayout(1) 122 + #self.SetAutoLayout(1)
119 123
120 self.sizer = main_sizer 124 self.sizer = main_sizer
121 125
@@ -132,7 +136,7 @@ class InnerTaskPanel(wx.Panel): @@ -132,7 +136,7 @@ class InnerTaskPanel(wx.Panel):
132 def OnLinkNewSurface(self, evt=None): 136 def OnLinkNewSurface(self, evt=None):
133 #import gui.dialogs as dlg 137 #import gui.dialogs as dlg
134 sl = slice_.Slice() 138 sl = slice_.Slice()
135 - dialog = dlg.SurfaceCreationDialog(None, -1, 139 + dialog = dlg.SurfaceCreationDialog(None, -1,
136 _('New surface'), 140 _('New surface'),
137 mask_edited=sl.current_mask.was_edited) 141 mask_edited=sl.current_mask.was_edited)
138 142
@@ -176,15 +180,14 @@ class InnerTaskPanel(wx.Panel): @@ -176,15 +180,14 @@ class InnerTaskPanel(wx.Panel):
176 class FoldPanel(wx.Panel): 180 class FoldPanel(wx.Panel):
177 def __init__(self, parent): 181 def __init__(self, parent):
178 wx.Panel.__init__(self, parent, size=(50,700)) 182 wx.Panel.__init__(self, parent, size=(50,700))
179 - self.SetBackgroundColour(wx.Colour(0,255,0))  
180 183
181 inner_panel = InnerFoldPanel(self) 184 inner_panel = InnerFoldPanel(self)
182 185
183 sizer = wx.BoxSizer(wx.VERTICAL) 186 sizer = wx.BoxSizer(wx.VERTICAL)
184 - sizer.Add(inner_panel, 1, wx.EXPAND|wx.GROW, 2) 187 + sizer.Add(inner_panel, 0, wx.EXPAND|wx.GROW, 2)
185 sizer.Fit(self) 188 sizer.Fit(self)
186 189
187 - self.SetSizer(sizer) 190 + self.SetSizerAndFit(sizer)
188 self.Update() 191 self.Update()
189 self.SetAutoLayout(1) 192 self.SetAutoLayout(1)
190 193
@@ -201,7 +204,7 @@ class InnerFoldPanel(wx.Panel): @@ -201,7 +204,7 @@ class InnerFoldPanel(wx.Panel):
201 # parent panel. Perhaps we need to insert the item into the sizer also... 204 # parent panel. Perhaps we need to insert the item into the sizer also...
202 # Study this. 205 # Study this.
203 fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition, 206 fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition,
204 - (10, 140), 0,fpb.FPB_SINGLE_FOLD) 207 + wx.DefaultSize, 0,fpb.FPB_SINGLE_FOLD)
205 208
206 # Fold panel style 209 # Fold panel style
207 style = fpb.CaptionBarStyle() 210 style = fpb.CaptionBarStyle()
@@ -214,7 +217,6 @@ class InnerFoldPanel(wx.Panel): @@ -214,7 +217,6 @@ class InnerFoldPanel(wx.Panel):
214 fold_panel.ApplyCaptionStyle(item, style) 217 fold_panel.ApplyCaptionStyle(item, style)
215 fold_panel.AddFoldPanelWindow(item, SurfaceProperties(item), Spacing= 0, 218 fold_panel.AddFoldPanelWindow(item, SurfaceProperties(item), Spacing= 0,
216 leftSpacing=0, rightSpacing=0) 219 leftSpacing=0, rightSpacing=0)
217 - fold_panel.Expand(fold_panel.GetFoldPanel(0))  
218 220
219 # Fold 2 - Surface tools 221 # Fold 2 - Surface tools
220 item = fold_panel.AddFoldPanel(_("Advanced options"), collapsed=True) 222 item = fold_panel.AddFoldPanel(_("Advanced options"), collapsed=True)
@@ -226,6 +228,9 @@ class InnerFoldPanel(wx.Panel): @@ -226,6 +228,9 @@ class InnerFoldPanel(wx.Panel):
226 # leftSpacing=0, rightSpacing=0) 228 # leftSpacing=0, rightSpacing=0)
227 #fold_panel.Expand(fold_panel.GetFoldPanel(1)) 229 #fold_panel.Expand(fold_panel.GetFoldPanel(1))
228 230
  231 + self.fold_panel = fold_panel
  232 + self.__bind_evt()
  233 +
229 # Panel sizer to expand fold panel 234 # Panel sizer to expand fold panel
230 sizer = wx.BoxSizer(wx.VERTICAL) 235 sizer = wx.BoxSizer(wx.VERTICAL)
231 sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND) 236 sizer.Add(fold_panel, 1, wx.GROW|wx.EXPAND)
@@ -235,12 +240,29 @@ class InnerFoldPanel(wx.Panel): @@ -235,12 +240,29 @@ class InnerFoldPanel(wx.Panel):
235 self.Update() 240 self.Update()
236 self.SetAutoLayout(1) 241 self.SetAutoLayout(1)
237 242
  243 +
  244 + fold_panel.Expand(fold_panel.GetFoldPanel(1))
  245 + self.ResizeFPB()
  246 + fold_panel.Expand(fold_panel.GetFoldPanel(0))
  247 +
  248 + def __bind_evt(self):
  249 + self.fold_panel.Bind(fpb.EVT_CAPTIONBAR, self.OnFoldPressCaption)
  250 +
  251 + def OnFoldPressCaption(self, evt):
  252 + evt.Skip()
  253 + wx.CallAfter(self.ResizeFPB)
  254 +
  255 + def ResizeFPB(self):
  256 + sizeNeeded = self.fold_panel.GetPanelsLength(0, 0)[2]
  257 + self.fold_panel.SetMinSize((self.fold_panel.GetSize()[0], sizeNeeded ))
  258 + self.fold_panel.SetSize((self.fold_panel.GetSize()[0], sizeNeeded))
  259 +
238 BTN_LARGEST = wx.NewId() 260 BTN_LARGEST = wx.NewId()
239 BTN_SPLIT = wx.NewId() 261 BTN_SPLIT = wx.NewId()
240 BTN_SEEDS = wx.NewId() 262 BTN_SEEDS = wx.NewId()
241 class SurfaceTools(wx.Panel): 263 class SurfaceTools(wx.Panel):
242 def __init__(self, parent): 264 def __init__(self, parent):
243 - wx.Panel.__init__(self, parent, size=(50,400)) 265 + wx.Panel.__init__(self, parent)
244 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR) 266 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR)
245 self.SetBackgroundColour(default_colour) 267 self.SetBackgroundColour(default_colour)
246 268
@@ -327,9 +349,8 @@ class SurfaceTools(wx.Panel): @@ -327,9 +349,8 @@ class SurfaceTools(wx.Panel):
327 main_sizer.Add(fixed_sizer, 0, wx.GROW|wx.EXPAND|wx.TOP, 5) 349 main_sizer.Add(fixed_sizer, 0, wx.GROW|wx.EXPAND|wx.TOP, 5)
328 350
329 # Update main sizer and panel layout 351 # Update main sizer and panel layout
330 - self.SetSizer(main_sizer) 352 + self.SetSizerAndFit(main_sizer)
331 self.Update() 353 self.Update()
332 - self.SetAutoLayout(1)  
333 self.sizer = main_sizer 354 self.sizer = main_sizer
334 355
335 def OnLinkLargest(self, evt): 356 def OnLinkLargest(self, evt):
@@ -375,7 +396,7 @@ class SurfaceTools(wx.Panel): @@ -375,7 +396,7 @@ class SurfaceTools(wx.Panel):
375 396
376 class SurfaceProperties(wx.Panel): 397 class SurfaceProperties(wx.Panel):
377 def __init__(self, parent): 398 def __init__(self, parent):
378 - wx.Panel.__init__(self, parent, size=(50,400)) 399 + wx.Panel.__init__(self, parent)
379 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR) 400 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR)
380 self.SetBackgroundColour(default_colour) 401 self.SetBackgroundColour(default_colour)
381 402
@@ -384,7 +405,8 @@ class SurfaceProperties(wx.Panel): @@ -384,7 +405,8 @@ class SurfaceProperties(wx.Panel):
384 ## LINE 1 405 ## LINE 1
385 406
386 # Combo related to mask naem 407 # Combo related to mask naem
387 - combo_surface_name = wx.ComboBox(self, -1, "", choices= self.surface_dict.keys(), 408 + combo_surface_name = wx.ComboBox(self, -1, "", choices=
  409 + self.surface_dict.keys() or ["", ],
388 style=wx.CB_DROPDOWN|wx.CB_READONLY) 410 style=wx.CB_DROPDOWN|wx.CB_READONLY)
389 combo_surface_name.SetSelection(0) 411 combo_surface_name.SetSelection(0)
390 if sys.platform != 'win32': 412 if sys.platform != 'win32':
@@ -436,9 +458,9 @@ class SurfaceProperties(wx.Panel): @@ -436,9 +458,9 @@ class SurfaceProperties(wx.Panel):
436 #sizer.Add(cb, 0, wx.GROW|wx.EXPAND|wx.RIGHT|wx.LEFT|wx.TOP|wx.BOTTOM, 5) 458 #sizer.Add(cb, 0, wx.GROW|wx.EXPAND|wx.RIGHT|wx.LEFT|wx.TOP|wx.BOTTOM, 5)
437 sizer.Fit(self) 459 sizer.Fit(self)
438 460
439 - self.SetSizer(sizer) 461 + self.SetSizerAndFit(sizer)
440 self.Update() 462 self.Update()
441 - self.SetAutoLayout(1) 463 + #self.SetAutoLayout(1)
442 464
443 self.__bind_events() 465 self.__bind_events()
444 466
@@ -499,7 +521,7 @@ class SurfaceProperties(wx.Panel): @@ -499,7 +521,7 @@ class SurfaceProperties(wx.Panel):
499 self.button_colour.SetColour(colour) 521 self.button_colour.SetColour(colour)
500 self.slider_transparency.SetValue(transparency) 522 self.slider_transparency.SetValue(transparency)
501 self.combo_surface_name.SetSelection(index) 523 self.combo_surface_name.SetSelection(index)
502 - Publisher.sendMessage('Update surface data', (index)) 524 + Publisher.sendMessage('Update surface data', (index))
503 525
504 def OnComboName(self, evt): 526 def OnComboName(self, evt):
505 surface_name = evt.GetString() 527 surface_name = evt.GetString()
@@ -527,13 +549,15 @@ class SurfaceProperties(wx.Panel): @@ -527,13 +549,15 @@ class SurfaceProperties(wx.Panel):
527 class QualityAdjustment(wx.Panel): 549 class QualityAdjustment(wx.Panel):
528 def __init__(self, parent): 550 def __init__(self, parent):
529 import constants as const 551 import constants as const
530 - wx.Panel.__init__(self, parent, size=(50,240)) 552 + wx.Panel.__init__(self, parent)
531 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR) 553 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR)
532 self.SetBackgroundColour(default_colour) 554 self.SetBackgroundColour(default_colour)
533 555
534 # LINE 1 556 # LINE 1
535 557
536 - combo_quality = wx.ComboBox(self, -1, "", choices=const.SURFACE_QUALITY.keys(), 558 + combo_quality = wx.ComboBox(self, -1, "",
  559 + choices=const.SURFACE_QUALITY.keys() or
  560 + ["", ],
537 style=wx.CB_DROPDOWN|wx.CB_READONLY) 561 style=wx.CB_DROPDOWN|wx.CB_READONLY)
538 combo_quality.SetSelection(3) 562 combo_quality.SetSelection(3)
539 combo_quality.SetWindowVariant(wx.WINDOW_VARIANT_SMALL) 563 combo_quality.SetWindowVariant(wx.WINDOW_VARIANT_SMALL)
invesalius/invesalius.py
@@ -30,8 +30,9 @@ if sys.platform == &#39;win32&#39;: @@ -30,8 +30,9 @@ if sys.platform == &#39;win32&#39;:
30 else: 30 else:
31 if sys.platform != 'darwin': 31 if sys.platform != 'darwin':
32 import wxversion 32 import wxversion
33 - wxversion.ensureMinimal('2.8-unicode', optionsRequired=True)  
34 - wxversion.select('2.8-unicode', optionsRequired=True) 33 + #wxversion.ensureMinimal('2.8-unicode', optionsRequired=True)
  34 + #wxversion.select('2.8-unicode', optionsRequired=True)
  35 + wxversion.ensureMinimal('3.0')
35 36
36 import wx 37 import wx
37 #from wx.lib.pubsub import setupv1 #new wx 38 #from wx.lib.pubsub import setupv1 #new wx