Commit 33bc526299f3b69f7847fd75417eac68a72a5f50

Authored by Thiago Franco de Moraes
1 parent eb0e9272

Adpated InVesalius to run in wxpython3

Fixed problems with sizers, colors ans panel sizes.

Created functions to calculate panel sizes inside foldpanelbar

Showing the left-down panel where masks and surfaces info are showed

applyied the patches from Olly Betts to run in wxpython3

The gradient widget is working

The comboboxes from mask properties are working now.

The problem was that combobox must not empty.

Surface task is working again

Putting combobox thresholds presets in a new line

putting the import pil inside a try except

expanding the label 'set predefined or manual threshold'

showing the buttons when importing a dicom

better layout to task_slice

the size of the data_notebook

the size of the buttons inside of data_notebook

the size of the volume viewer icons

solved the problem with position of statusbar using idle event

Solved the problem with left icons

Added Olly Betts as contributor

Added Olly Betts as contributor

Calculating best size to data notebook

Removed the background colors

Better sizing, but not completed.

Tests

data notebook with better size

Better sizings

Removed some unused codes

Fixed the problems with backgroundcolour from statictext in the taskbar

better spacings

Align button "Create surface" to the right
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",
@@ -973,7 +974,7 @@ def ExportPicture(type_=""): @@ -973,7 +974,7 @@ def ExportPicture(type_=""):
973 "", # last used directory 974 "", # last used directory
974 project_name, # filename 975 project_name, # filename
975 WILDCARD_SAVE_PICTURE, 976 WILDCARD_SAVE_PICTURE,
976 - wx.SAVE|wx.OVERWRITE_PROMPT) 977 + wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
977 dlg.SetFilterIndex(1) # default is VTI 978 dlg.SetFilterIndex(1) # default is VTI
978 979
979 if dlg.ShowModal() == wx.ID_OK: 980 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