I've had a look at updating invesalius for wxpython3.0, and made some
progress.

However, the startup still isn't clean - the splash screen throws up
several errors - see invesalius.wxpy3.0.log - and once the app fires up,
there are clearly issues with the sizing of widgets, to the extent that
it isn't usable.  I'm not sure if these are as a result of the splash
screen errors or not.

The logic in the splashscreen code seems hard to follow, relying on
several different delayed callbacks.  I wonder if it's just inherently
racy, and a timing difference causes the failures with wxpython 3.0.

Anyway, I'm giving up on this one for the moment, but thought I should
at least send the patch I have so far to avoid duplicated effort if you
were also looking at it.

Cheers,
    Olly
diff -Nru invesalius-3.0~b5/debian/changelog invesalius-3.0~b5/debian/changelog
--- invesalius-3.0~b5/debian/changelog	2014-06-16 09:01:59.000000000 -0300
+++ invesalius-3.0~b5/debian/changelog	2014-09-09 21:00:48.000000000 -0300
@@ -1,3 +1,11 @@
+invesalius (3.0~b5-3.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * Update for wxPython 3.0 (Closes: #759060):
+    + New patch: wxpython3.0.patch
+
+ -- Olly Betts <o...@survex.com>  Wed, 10 Sep 2014 00:00:33 +0000
+
 invesalius (3.0~b5-3) unstable; urgency=low
 
   [ Thiago Franco de Moraes ]
diff -Nru invesalius-3.0~b5/debian/control invesalius-3.0~b5/debian/control
--- invesalius-3.0~b5/debian/control	2014-06-16 09:00:44.000000000 -0300
+++ invesalius-3.0~b5/debian/control	2014-09-09 20:03:09.000000000 -0300
@@ -22,7 +22,7 @@
          ${misc:Depends},
          python-numpy,
          python-scipy,
-         python-wxgtk2.8 (>= 2.8.12),
+         python-wxgtk3.0,
          python-imaging,
          python-vtk,
          python-gdcm,
diff -Nru invesalius-3.0~b5/debian/patches/series invesalius-3.0~b5/debian/patches/series
--- invesalius-3.0~b5/debian/patches/series	2014-04-28 13:21:20.000000000 -0300
+++ invesalius-3.0~b5/debian/patches/series	2014-09-09 20:03:43.000000000 -0300
@@ -1,2 +1,3 @@
 10_sample_path.patch
 10_import_mips.patch
+wxpython3.0.patch
diff -Nru invesalius-3.0~b5/debian/patches/wxpython3.0.patch invesalius-3.0~b5/debian/patches/wxpython3.0.patch
--- invesalius-3.0~b5/debian/patches/wxpython3.0.patch	1969-12-31 21:00:00.000000000 -0300
+++ invesalius-3.0~b5/debian/patches/wxpython3.0.patch	2014-09-09 21:00:03.000000000 -0300
@@ -0,0 +1,114 @@
+Description: Update for wxPython 3.0
+ These changes should remain compatible with wxPython 2.8, aside from the
+ wxversion change in the last hunk.
+ .
+ We can't simply drop the wxversion.select() call and use
+ .
+ wxversion.ensureMinimal('2.8-unicode', optionsRequired=True)
+ .
+ because 3.0 is always Unicode, and the "-unicode" option has been dropped,
+ but wxversion isn't smart enough to know to allow for this when matching
+ options.
+Bug-Debian: https://bugs.debian.org/759060
+Forwarded: no
+Last-Update: 2014-09-09
+
+--- invesalius-3.0~b5.orig/invesalius/gui/dialogs.py
++++ invesalius-3.0~b5/invesalius/gui/dialogs.py
+@@ -214,7 +214,7 @@ def ShowOpenProjectDialog():
+     dlg = wx.FileDialog(None, message=_("Open InVesalius 3 project..."),
+                         defaultDir="",
+                         defaultFile="", wildcard=WILDCARD_OPEN,
+-                        style=wx.OPEN|wx.CHANGE_DIR)
++                        style=wx.FD_OPEN|wx.FD_CHANGE_DIR)
+ 
+     # inv3 filter is default
+     dlg.SetFilterIndex(0)
+@@ -242,7 +242,7 @@ def ShowOpenAnalyzeDialog():
+     dlg = wx.FileDialog(None, message=_("Open Analyze file"),
+                         defaultDir="",
+                         defaultFile="", wildcard=WILDCARD_ANALYZE,
+-                        style=wx.OPEN|wx.CHANGE_DIR)
++                        style=wx.FD_OPEN|wx.FD_CHANGE_DIR)
+ 
+     # inv3 filter is default
+     dlg.SetFilterIndex(0)
+@@ -312,7 +312,7 @@ def ShowSaveAsProjectDialog(default_file
+                         "", # last used directory
+                         default_filename,
+                         _("InVesalius project (*.inv3)|*.inv3"),
+-                        wx.SAVE|wx.OVERWRITE_PROMPT)
++                        wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
+     #dlg.SetFilterIndex(0) # default is VTI
+ 
+     filename = None
+@@ -972,7 +972,7 @@ def ExportPicture(type_=""):
+                         "", # last used directory
+                         project_name, # filename
+                         WILDCARD_SAVE_PICTURE,
+-                        wx.SAVE|wx.OVERWRITE_PROMPT)
++                        wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
+     dlg.SetFilterIndex(1) # default is VTI
+ 
+     if dlg.ShowModal() == wx.ID_OK:
+--- invesalius-3.0~b5.orig/invesalius/gui/task_exporter.py
++++ invesalius-3.0~b5/invesalius/gui/task_exporter.py
+@@ -276,7 +276,7 @@ class InnerTaskPanel(wx.Panel):
+                             "", # last used directory
+                             project_name, # filename
+                             WILDCARD_SAVE_MASK,
+-                            wx.SAVE|wx.OVERWRITE_PROMPT)
++                            wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
+         dlg.SetFilterIndex(0) # default is VTI
+                                 
+         if dlg.ShowModal() == wx.ID_OK:
+@@ -312,7 +312,7 @@ class InnerTaskPanel(wx.Panel):
+                                 "", # last used directory
+                                 project_name, # filename
+                                 WILDCARD_SAVE_3D,
+-                                wx.SAVE|wx.OVERWRITE_PROMPT)
++                                wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
+             dlg.SetFilterIndex(3) # default is STL
+                                 
+             if dlg.ShowModal() == wx.ID_OK:
+--- invesalius-3.0~b5.orig/invesalius/gui/widgets/platebtn.py
++++ invesalius-3.0~b5/invesalius/gui/widgets/platebtn.py
+@@ -626,7 +626,7 @@ class PlateButton(wx.PyControl):
+ 
+     def SetPressColor(self, color):
+         """Set the color used for highlighting the pressed state
+-        @param color: wx.Color
++        @param color: wx.Colour
+         @note: also resets all text colours as necessary
+ 
+         """
+--- invesalius-3.0~b5.orig/invesalius/invesalius.py
++++ invesalius-3.0~b5/invesalius/invesalius.py
+@@ -30,8 +30,7 @@ if sys.platform == 'win32':
+ else:
+     if sys.platform != 'darwin':
+         import wxversion
+-        wxversion.ensureMinimal('2.8-unicode', optionsRequired=True)
+-        wxversion.select('2.8-unicode', optionsRequired=True)
++        wxversion.ensureMinimal('3.0')
+         
+ import wx
+ #from wx.lib.pubsub import setupv1 #new wx
+--- invesalius-3.0~b5.orig/invesalius/gui/frame.py
++++ invesalius-3.0~b5/invesalius/gui/frame.py
+@@ -560,13 +560,13 @@
+ 
+             file_edit_item_undo = wx.MenuItem(file_edit, wx.ID_UNDO,  _("Undo\tCtrl+Z"))
+             file_edit_item_undo.SetBitmap(self.BMP_UNDO)
+-            file_edit_item_undo.Enable(False)
+             file_edit.AppendItem(file_edit_item_undo)
++            file_edit_item_undo.Enable(False)
+ 
+             file_edit_item_redo = wx.MenuItem(file_edit, wx.ID_REDO,  _("Redo\tCtrl+Y"))
+             file_edit_item_redo.SetBitmap(self.BMP_REDO)
+-            file_edit_item_redo.Enable(False)
+             file_edit.AppendItem(file_edit_item_redo)
++            file_edit_item_redo.Enable(False)
+         else:
+             file_edit.Append(wx.ID_UNDO, _("Undo\tCtrl+Z")).Enable(False)
+             file_edit.Append(wx.ID_REDO, _("Redo\tCtrl+Y")).Enable(False)
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/wx-3.0-gtk2/wx/_misc.py", line 1367, 
in Notify
    self.notify()
  File "/usr/lib/python2.7/dist-packages/wx-3.0-gtk2/wx/_core.py", line 16869, 
in Notify
    self.result = self.callable(*self.args, **self.kwargs)
  File "invesalius.py", line 177, in Startup
    self.main = Frame(None)
  File "/usr/share/invesalius/invesalius/gui/frame.py", line 85, in __init__
    self.__init_aui()
  File "/usr/share/invesalius/invesalius/gui/frame.py", line 140, in __init_aui
    aui_manager.AddPane(viewers.Panel(self), wx.aui.AuiPaneInfo().
  File "/usr/share/invesalius/invesalius/gui/default_viewers.py", line 41, in 
__init__
    self.__init_aui_manager()
  File "/usr/share/invesalius/invesalius/gui/default_viewers.py", line 77, in 
__init_aui_manager
    p1 = slice_viewer.Viewer(self, "AXIAL")
  File "/usr/share/invesalius/invesalius/data/viewer_slice.py", line 184, in 
__init__
    self.__init_gui()
  File "/usr/share/invesalius/invesalius/data/viewer_slice.py", line 205, in 
__init_gui
    self.interactor = wxVTKRenderWindowInteractor(self, -1, size=self.GetSize())
  File "/usr/lib/pymodules/python2.7/vtk/wx/wxVTKRenderWindowInteractor.py", 
line 175, in __init__
    attribList=attribList)
  File "/usr/lib/python2.7/dist-packages/wx-3.0-gtk2/wx/glcanvas.py", line 106, 
in __init__
    _glcanvas.GLCanvas_swiginit(self,_glcanvas.new_GLCanvas(*args, **kwargs))
TypeError: Argument given by name ('attribList') and position (3)
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/wx-3.0-gtk2/wx/_misc.py", line 1367, 
in Notify
    self.notify()
  File "/usr/lib/python2.7/dist-packages/wx-3.0-gtk2/wx/_core.py", line 16869, 
in Notify
    self.result = self.callable(*self.args, **self.kwargs)
  File "invesalius.py", line 81, in Startup2
    self.control = self.splash.control
AttributeError: 'SplashScreen' object has no attribute 'control'
Traceback (most recent call last):
  File "invesalius.py", line 196, in OnClose
    if self.fc.IsRunning():
AttributeError: 'SplashScreen' object has no attribute 'fc'

Reply via email to