Commit 4fba6729 authored by Stephan Gerhard's avatar Stephan Gerhard Committed by Andreas Tille

Import Debian changes 2.1.0-1

connectomeviewer (2.1.0-1) unstable; urgency=low

  * Namespace transition for Enthought Packages
    - added python-traits (>= 4) into Build-Depends to not build
      for older platforms
  * Flexible direct data loading for various neuroimaging data types
  * Adjusted debian/copyright to match DEP-5 1.0
parents 98a1204a 9c10aa49
......@@ -5,10 +5,10 @@
# Modified BSD License
# Enthought library imports
from enthought.pyface.action.api import Action
from enthought.traits.ui.api import auto_close_message
from enthought.mayavi.preferences.api import preference_manager
from enthought.pyface.image_resource import ImageResource
from pyface.action.api import Action
from traitsui.api import auto_close_message
from mayavi.preferences.api import preference_manager
from pyface.image_resource import ImageResource
# Connectome Viewer imports
from common import IMAGE_PATH
......
......@@ -9,11 +9,11 @@
import os.path
# Enthought library imports
from enthought.io.api import File
from enthought.traits.api import Str, Bool
from enthought.pyface.action.api import Action
from enthought.pyface.api import FileDialog, OK
from enthought.pyface.image_resource import ImageResource
from apptools.io.api import File
from traits.api import Str, Bool
from pyface.action.api import Action
from pyface.api import FileDialog, OK
from pyface.image_resource import ImageResource
# Connectome Viewer imports
from common import IMAGE_PATH
......@@ -24,7 +24,112 @@ import cfflib
import logging
logger = logging.getLogger('root.'+__name__)
class OpenFile(Action):
name = "Open file"
description = "Open the File Dialog where you can select a neuroimaging file"
tooltip = "Open file"
path = Str("MenuBar/File/LoadDataMenu")
image = ImageResource("cff-open.png", search_path=[IMAGE_PATH])
# Is the action enabled?
enabled = Bool(True)
# Is the action visible?
visible = Bool(True)
###########################################################################
# 'Action' interface.
###########################################################################
def perform(self, event, cfile=None):
""" Performs the action. """
logger.info('Performing open connectome file action')
# helper variable to use this function not only in the menubar
exec_as_funct = True
if cfile is None:
# get the instance of the current CFile
# with the help of the Service Registry
cfile = self.window.application.get_service('cviewer.plugins.cff2.cfile.CFile')
exec_as_funct = False
wildcard = "All files (*.*)|*.*" \
"Nifti-1 (*.nii.gz)|*.nii.gz|" \
"Gifti (*.gii)|*.gii|" \
"TrackVis tracks (*.trk)|*.trk|" \
"Network Pickle (*.gpickle)|*.gpickle|" \
"Network GraphML (*.graphml)|*.graphml|" \
"Numpy Data (*.npy)|*.npy|" \
"Pickle Data (*.pkl)|*.pkl|" \
"Text Data (*.txt)|*.txt|" \
"CSV Data (*.csv)|*.csv|"
dlg = FileDialog(wildcard=wildcard,title="Choose a file",\
resizeable=False, \
default_directory=preference_manager.cviewerui.cffpath,)
if dlg.open() == OK:
if not os.path.isfile(dlg.path):
logger.error("File '%s' does not exist!"%dlg.path)
return
logger.info('Read file: %s'%dlg.path)
fname = os.path.split(dlg.paths[0])[-1]
if os.path.exists(dlg.paths[0]) and (fname.endswith('.nii.gz') or
fname.endswith('.nii')):
cvol = cfflib.CVolume.create_from_nifti(
name = fname,nii_filename = dlg.paths[0])
cfile.obj.add_connectome_volume(cvol)
elif os.path.exists(dlg.paths[0]) and fname.endswith('.gii'):
csurf = cfflib.CSurface.create_from_gifti(
name = fname, gii_filename = dlg.paths[0])
cfile.obj.add_connectome_surface(csurf)
elif os.path.exists(dlg.paths[0]) and fname.endswith('.trk'):
ctrk = cfflib.CTrack(
name = fname, src = dlg.paths[0])
cfile.obj.add_connectome_track(ctrk)
elif os.path.exists(dlg.paths[0]) and fname.endswith('.gpickle'):
ctrk = cfflib.CNetwork(name = fname, src = dlg.paths[0],
fileformat="NXGPickle")
cfile.obj.add_connectome_network(ctrk)
elif os.path.exists(dlg.paths[0]) and fname.endswith('.graphml'):
ctrk = cfflib.CNetwork.create_from_graphml(name = fname,
ml_filename = dlg.paths[0])
cfile.obj.add_connectome_network(ctrk)
elif os.path.exists(dlg.paths[0]) and fname.endswith('.npy'):
cdat = cfflib.CData(name = fname, src = dlg.paths[0],
fileformat = 'NumPy')
cfile.obj.add_connectome_data(cdat)
elif os.path.exists(dlg.paths[0]) and fname.endswith('.csv'):
cdat = cfflib.CData(name = fname, src = dlg.paths[0],
fileformat = 'CSV')
cfile.obj.add_connectome_data(cdat)
elif os.path.exists(dlg.paths[0]) and fname.endswith('.txt'):
cdat = cfflib.CData(name = fname, src = dlg.paths[0],
fileformat = 'TXT')
cfile.obj.add_connectome_data(cdat)
elif os.path.exists(dlg.paths[0]) and fname.endswith('.pkl'):
cdat = cfflib.CData(name = fname, src = dlg.paths[0],
fileformat = 'Pickle')
cfile.obj.add_connectome_data(cdat)
else:
logger.info('Could not load file: '+ dlg.paths)
cfile.update_children()
######################################################################
# `OpenCFFFile` class.
######################################################################
......@@ -50,48 +155,49 @@ class OpenCFile(Action):
def perform(self, event, cfile=None):
""" Performs the action. """
logger.info('Performing open connectome file action')
# helper variable to use this function not only in the menubar
exec_as_funct = True
if cfile is None:
# get the instance of the current CFile
# with the help of the Service Registry
cfile = self.window.application.get_service('cviewer.plugins.cff2.cfile.CFile')
exec_as_funct = False
wildcard = "Connectome Markup File v2.0 (meta.cml)|meta.cml|" \
"Connectome File Format v2.0 (*.cff)|*.cff|" \
"All files (*.*)|*.*"
dlg = FileDialog(wildcard=wildcard,title="Choose a Connectome File",\
resizeable=False, \
default_directory=preference_manager.cviewerui.cffpath,)
if dlg.open() == OK:
if not os.path.isfile(dlg.path):
logger.error("File '%s' does not exist!"%dlg.path)
return
# if file exists and has .cff ending
if os.path.exists(dlg.paths[0]) and (dlg.paths[0]).endswith('.cff'):
# close the cfile if one is currently loaded
cfile.close_cfile()
# load cfile data
cfile.load_cfile(dlg.paths[0])
self.window.status_bar_manager.message=''
elif os.path.exists(dlg.paths[0]) and (dlg.paths[0]).endswith('meta.cml'):
cfile.close_cfile()
cfile.load_cfile(dlg.paths[0], ismetacml = True)
else:
logger.info('Could not load file: '+ dlg.paths)
class SaveCFile(Action):
""" An action that save aconnectome file """
......
......@@ -5,20 +5,20 @@
#
# Modified BSD License
# Adapted from enthought.mayavi.action.save_load
# Adapted from mayavi.action.save_load
# Standard library imports.
import sys
from os.path import isfile, dirname
# Enthought library imports.
from enthought.pyface.api import FileDialog, OK
from enthought.pyface.action.api import Action
from pyface.api import FileDialog, OK
from pyface.action.api import Action
from cviewer.plugins.ui.preference_manager import preference_manager
# Local imports
from enthought.mayavi.plugins.script import get_imayavi
from enthought.mayavi.core.common import error, exception
from mayavi.plugins.script import get_imayavi
from mayavi.core.common import error, exception
######################################################################
# `RunScript` class.
......
......@@ -15,10 +15,10 @@ import os.path
import os
# Enthought library imports
from enthought.traits.api import (HasTraits, Instance, Int, on_trait_change)
from enthought.etsconfig.api import ETSConfig
from traits.api import (HasTraits, Instance, Int, on_trait_change)
from traits.etsconfig.api import ETSConfig
from enthought.logger.api import LogFileHandler, FORMATTER
from apptools.logger.api import LogFileHandler, FORMATTER
# ConnectomeViewer imports
from cviewer.cviewer_workbench_application import CViewerWorkbenchApplication
......@@ -28,10 +28,10 @@ from cviewer.info import version as ver
# Logger imports
import logging, logging.handlers
logger = logging.getLogger('root')
logger_envisage = logging.getLogger('enthought.envisage.plugin')
logger_ipython = logging.getLogger('enthought.plugins.ipython_shell.view.ipython_shell_view')
logger_pyface = logging.getLogger('enthought.pyface.ui.wx.workbench.editor_set_structure_handler')
logger_pyfaceview = logging.getLogger('enthought.pyface.workbench.i_view')
logger_envisage = logging.getLogger('envisage.plugin')
logger_ipython = logging.getLogger('envisage.plugins.ipython_shell.view.ipython_shell_view')
logger_pyface = logging.getLogger('pyface.ui.wx.workbench.editor_set_structure_handler')
logger_pyfaceview = logging.getLogger('pyface.workbench.i_view')
def setup_logger(logger, fname, stream=True, mode=logging.ERROR):
"""Setup a log file and the logger.
......@@ -105,7 +105,7 @@ def setup_logger(logger, fname, stream=True, mode=logging.ERROR):
logger_envisage.addHandler(filehandler)
# does this fix the
# no handlers could be found for logger "enthought.envisage.plugin"
# no handlers could be found for logger "envisage.plugin"
logger_ipython.addHandler(filehandler)
logger_pyface.addHandler(filehandler)
......@@ -131,10 +131,10 @@ def setup_logger(logger, fname, stream=True, mode=logging.ERROR):
def get_non_gui_plugin_classes():
"""Get list of basic mayavi plugin classes that do not add any views or
actions."""
from enthought.envisage.core_plugin import CorePlugin
from enthought.envisage.ui.workbench.workbench_plugin import WorkbenchPlugin
from enthought.tvtk.plugins.scene.scene_plugin import ScenePlugin
from enthought.mayavi.plugins.mayavi_plugin import MayaviPlugin
from envisage.core_plugin import CorePlugin
from envisage.ui.workbench.workbench_plugin import WorkbenchPlugin
from tvtk.plugins.scene.scene_plugin import ScenePlugin
from mayavi.plugins.mayavi_plugin import MayaviPlugin
plugins = [CorePlugin,
WorkbenchPlugin,
......@@ -152,9 +152,9 @@ def get_plugin_classes():
"""Get list of default plugin classes to use for Connectome Viewer."""
# Force the selection of a toolkit:
from enthought.traits.ui.api import toolkit
from traitsui.api import toolkit
toolkit()
from enthought.etsconfig.api import ETSConfig
from traits.etsconfig.api import ETSConfig
try_use_ipython = preference_manager.cviewerui.useipython
use_ipython = False
......@@ -162,19 +162,19 @@ def get_plugin_classes():
try:
# If the right versions of IPython, EnvisagePlugins and
# Pyface are not installed, this import will fail.
from enthought.plugins.ipython_shell.view.ipython_shell_view \
from envisage.plugins.ipython_shell.view.ipython_shell_view \
import IPythonShellView
use_ipython = True
except: pass
if use_ipython:
from enthought.plugins.ipython_shell.ipython_shell_plugin import \
from envisage.plugins.ipython_shell.ipython_shell_plugin import \
IPythonShellPlugin
PythonShellPlugin = IPythonShellPlugin
else:
from enthought.plugins.python_shell.python_shell_plugin import PythonShellPlugin
from envisage.plugins.python_shell.python_shell_plugin import PythonShellPlugin
from enthought.tvtk.plugins.scene.ui.scene_ui_plugin import SceneUIPlugin
from tvtk.plugins.scene.ui.scene_ui_plugin import SceneUIPlugin
from cviewer.plugins.text_editor.text_editor_plugin import TextEditorPlugin
plugins = get_non_gui_plugin_classes()
......@@ -252,10 +252,10 @@ class CViewer(HasTraits):
"""The Connectome Viewer application class. """
# The main envisage application.
application = Instance('enthought.envisage.ui.workbench.api.WorkbenchApplication')
application = Instance('envisage.ui.workbench.api.WorkbenchApplication')
# The MayaVi Script instance.
script = Instance('enthought.mayavi.plugins.script.Script')
script = Instance('mayavi.plugins.script.Script')
# The logging mode.
log_mode = Int(logging.ERROR, desc='the logging mode to use')
......@@ -302,7 +302,7 @@ class CViewer(HasTraits):
def setup_logger(self):
""" Setting up the root logger """
from enthought.etsconfig.api import ETSConfig
from traits.etsconfig.api import ETSConfig
path = os.path.join(ETSConfig.application_data,
'ch.connectome.viewer', 'cviewer.log')
......
......@@ -7,11 +7,11 @@
# Modified BSD License
# Standard library imports
from enthought.traits.api import Bool
from traits.api import Bool
# Enthought library import
from enthought.envisage.ui.workbench.api import WorkbenchApplication
from enthought.pyface.api import AboutDialog, ImageResource, SplashScreen
from envisage.ui.workbench.api import WorkbenchApplication
from pyface.api import AboutDialog, ImageResource, SplashScreen
# ConnectomeViewer imports
from cviewer.plugins.ui.preference_manager import preference_manager
......
......@@ -2,7 +2,7 @@
This script should do no imports. It only defines variables.
'''
version = '2.0.0'
version = '2.1.0'
is_release = False
long_description = \
......@@ -65,7 +65,7 @@ envisageplugins_min_version = '3.1.1' # python-envisageplugins
traitsbackendwx_min_version = '3.2.0' # python-traitsbackendwx
traitsbackendqt_min_version = '3.2.0' # python-traitsbackendqt
traitsgui_min_version = '3.1.0' # python-traitsgui
traits_min_version = '3.2.0' # python-traits
traits_min_version = '4.0.0' # python-traits
python_enthought_traits_ui = '3.1.0' # python-enthought-traits-ui
enthoughtbase_min_version = '3.0.3' # python-enthoughtbase
......
......@@ -7,9 +7,9 @@
# Modified BSD License
# Enthought library imports
from enthought.envisage.api import Plugin
from enthought.traits.api import List
from enthought.envisage.api import Service
from envisage.api import Plugin
from traits.api import List
from envisage.api import Service
# Logging imports
import logging
......@@ -18,7 +18,7 @@ logger = logging.getLogger('root.'+__name__)
class BindingsPlugin(Plugin):
""" A plugin that binds some names to values in the Python Shell View. """
bindings = List(contributes_to='enthought.plugins.python_shell.bindings')
bindings = List(contributes_to='envisage.plugins.python_shell.bindings')
# The plugin's unique identifier.
id = 'connectome.bindings'
......
import logging
from enthought.io.api import File
from enthought.pyface.api import FileDialog, OK
from enthought.pyface.action.api import Action
from enthought.traits.api import Any
from apptools.io.api import File
from pyface.api import FileDialog, OK
from pyface.action.api import Action
from traits.api import Any
from cviewer.plugins.text_editor.editor.text_editor import TextEditor
......
......@@ -7,9 +7,9 @@
# Standard library imports
# Enthought library imports
from enthought.traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
from traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
List, Instance, DelegatesTo, Property
from enthought.traits.ui.api import View, Item, auto_close_message, message
from traitsui.api import View, Item, auto_close_message, message
import cfflib
......@@ -33,7 +33,7 @@ class CBase(HasTraits):
# data = Property(Any, depends_on = ['obj'] )
# active window
window = Instance('enthought.pyface.workbench.api.WorkbenchWindow')
window = Instance('pyface.workbench.api.WorkbenchWindow')
# private traits
###########
......@@ -76,8 +76,8 @@ class CBase(HasTraits):
self.dname = "%s [Loaded]" % n
if not self.window is None:
#from enthought.pyface.timer.api import do_later
from enthought.pyface.api import GUI
#from pyface.timer.api import do_later
from pyface.api import GUI
GUI.invoke_later(self.window.status_bar_manager.set, message = '')
else:
......
......@@ -8,9 +8,9 @@
import os
# Enthought library imports
from enthought.traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
from traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
List, Instance, DelegatesTo, Property
from enthought.traits.ui.api import View, Item, auto_close_message, message
from traitsui.api import View, Item, auto_close_message, message
import cfflib
......
......@@ -5,8 +5,8 @@
# Modified BSD License
# Enthough library imports
from enthought.traits.api import List
from enthought.envisage.api import Plugin, ServiceOffer, ExtensionPoint
from traits.api import List
from envisage.api import Plugin, ServiceOffer, ExtensionPoint
# ConnectomeViewer imports
......@@ -23,9 +23,9 @@ CFFVIEW = 'cviewer.plugins.cff2.ui.cff_view.CFFView'
class ConnectomeFile2Plugin(Plugin):
# Extension points we contribute to.
VIEWS = 'enthought.envisage.ui.workbench.views'
VIEWS = 'envisage.ui.workbench.views'
#- for application scope and
SERVICE_OFFERS = 'enthought.envisage.service_offers'
SERVICE_OFFERS = 'envisage.service_offers'
#### Extension points offered by this plugin ##############################
......@@ -94,7 +94,7 @@ class ConnectomeFile2Plugin(Plugin):
def _cfile_view_factory(self, window, **traits):
""" Factory method for connectome file views. """
from enthought.pyface.workbench.traits_ui_view import \
from pyface.workbench.traits_ui_view import \
TraitsUIView
from cviewer.plugins.cff2.ui.cff_view import CFFView
......
......@@ -12,7 +12,7 @@ import tempfile
from threading import Thread
# Enthought library imports
from enthought.traits.api import HasTraits, Instance, Any, Str, File, List, Bool, Property, cached_property
from traits.api import HasTraits, Instance, Any, Str, File, List, Bool, Property, cached_property
# ConnectomeViewer imports
from cmetadata import CMetadata
......@@ -60,7 +60,7 @@ class CFile(HasTraits):
# reference to the current window for statusbar updates
# not nice MVC-style
_workbenchwin = Instance('enthought.pyface.workbench.api.WorkbenchWindow')
_workbenchwin = Instance('pyface.workbench.api.WorkbenchWindow')
connectome_meta = Property(Any)
connectome_network = Property(List)
......@@ -195,6 +195,8 @@ class CFile(HasTraits):
self._connectome_data = None
self._connectome_script = None
self._connectome_imagestack = None
self.obj = cfflib.connectome()
def load_cfile(self, filepath, ismetacml = False):
......
......@@ -8,9 +8,9 @@
import os
# Enthought library imports
from enthought.traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
from traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
List, Instance, DelegatesTo, Property
from enthought.traits.ui.api import View, Item, auto_close_message, message
from traitsui.api import View, Item, auto_close_message, message
import cfflib
......
......@@ -9,9 +9,9 @@ import os
import subprocess
# Enthought library imports
from enthought.traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
from traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
List, Instance, DelegatesTo, Property
from enthought.traits.ui.api import View, Item, auto_close_message, message
from traitsui.api import View, Item, auto_close_message, message
import cfflib
from cviewer.plugins.ui.preference_manager import preference_manager
......
......@@ -8,9 +8,9 @@
import os
# Enthought library imports
from enthought.traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
from traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
List, Instance, DelegatesTo, Property
from enthought.traits.ui.api import View, Item, auto_close_message, message
from traitsui.api import View, Item, auto_close_message, message
# ConnectomeViewer imports
......
......@@ -8,9 +8,9 @@
import os
# Enthought library imports
from enthought.traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
from traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
List, Instance, DelegatesTo, Property, Code
from enthought.traits.ui.api import View, Item, auto_close_message, message
from traitsui.api import View, Item, auto_close_message, message
import cfflib
......
......@@ -8,9 +8,9 @@
import os
# Enthought library imports
from enthought.traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
from traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
List, Instance, DelegatesTo, Property
from enthought.traits.ui.api import View, Item, auto_close_message, message
from traitsui.api import View, Item, auto_close_message, message
# ConnectomeViewer imports
from cviewer.plugins.ui.preference_manager import preference_manager
......
......@@ -8,9 +8,9 @@
import os
# Enthought library imports
from enthought.traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
from traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
List, Instance, DelegatesTo, Property
from enthought.traits.ui.api import View, Item, auto_close_message, message
from traitsui.api import View, Item, auto_close_message, message
# ConnectomeViewer imports
......
......@@ -8,9 +8,9 @@
import os
# Enthought library imports
from enthought.traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
from traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
List, Instance, DelegatesTo, Property
from enthought.traits.ui.api import View, Item, auto_close_message, message
from traitsui.api import View, Item, auto_close_message, message
import cfflib
......
......@@ -9,9 +9,9 @@ import os
import subprocess
# Enthought library imports
from enthought.traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
from traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
List, Instance, DelegatesTo, Property
from enthought.traits.ui.api import View, Item, auto_close_message, message
from traitsui.api import View, Item, auto_close_message, message
import cfflib
from cviewer.plugins.ui.preference_manager import preference_manager
......
......@@ -8,9 +8,9 @@
import os
# Enthought library imports
from enthought.traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
from traits.api import HasTraits, Str, Bool, CBool, Any, Dict, implements, \
List, Instance, DelegatesTo, Property
from enthought.traits.ui.api import View, Item, auto_close_message, message
from traitsui.api import View, Item, auto_close_message, message
import cfflib
......
......@@ -8,9 +8,9 @@
import os
# Enthought library imports
from enthought.traits.api import Instance, Str, Any
from enthought.traits.ui.api import TreeNode
from enthought.traits.ui.menu import Menu, Action, Separator
from traits.api import Instance, Str, Any
from traitsui.api import TreeNode
from traitsui.menu import Menu, Action, Separator
# ConnectomeViewer imports
from cviewer.plugins.cff2.cdata import CData
......
......@@ -8,12 +8,12 @@
import os, os.path
# Enthought library imports
from enthought.traits.api import Instance, HasTraits, Any, Delegate, List, Either, Property
from enthought.pyface.image_cache import ImageCache
from enthought.traits.ui.api import (Item, TreeEditor, TreeNode, View, Handler, UIInfo)
from enthought.pyface.image_resource import ImageResource
from enthought.pyface.api import FileDialog, OK
from enthought.pyface.action.api import Action
from traits.api import Instance, HasTraits, Any, Delegate, List, Either, Property
from pyface.image_cache import ImageCache
from traitsui.api import (Item, TreeEditor, TreeNode, View, Handler, UIInfo)
from pyface.image_resource import ImageResource
from pyface.api import FileDialog, OK
from pyface.action.api import Action
# ConnectomeViewer imports
from cviewer.plugins.cff2.cnetwork import CNetwork
......@@ -97,6 +97,7 @@ class CFFView(HasTraits):
def __init__(self, **traits):
super(CFFView, self).__init__(**traits)
###########################################################################
# `HasTraits` interface.
###########################################################################
......
......@@ -8,9 +8,9 @@
import os
# Enthought library imports
from enthought.traits.api import Instance, Str, Any
from enthought.traits.ui.api import TreeNode
from enthought.traits.ui.menu import Menu, Action, Separator
from traits.api import Instance, Str, Any
from traitsui.api import TreeNode
from traitsui.menu import Menu, Action, Separator
# ConnectomeViewer imports
from cviewer.plugins.cff2.cfile import CFile
......
......@@ -8,9 +8,9 @@
import os
# Enthought library imports
from enthought.traits.api import Instance, Str, Any
from enthought.traits.ui.api import TreeNode
from enthought.traits.ui.menu import Menu, Action, Separator
from traits.api import Instance, Str, Any
from traitsui.api import TreeNode
from traitsui.menu import Menu, Action, Separator
# ConnectomeViewer imports
from cviewer.plugins.cff2.cimagestack import CImagestack
......