View Issue Details

IDProjectCategoryView StatusLast Update
0002145Slicer4Core: Extensionspublic2017-06-10 08:51
Reporterjcfr Assigned Tomatthew-woehlke  
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
Product Version 
Target VersionSlicer 4.4.0Fixed in VersionSlicer 4.4.0 
Summary0002145: Provide a mechanism allowing to easily install extension given the location of the package

Different aspect could be considered:

1) After dropping the extension package within the Extension install folder, this one could be automatically extracted and installed at Slicer start.

2) A input box or more specialized widget added to the extension manager dialog could allow to the user to select an extension package and install it.

3) Installing a package could be exposed to the python API.

TagsNo tags attached.


related to 0003089 closedjcfr SlicerAppStore website is broken 
related to 0003093 closedhina-shah Explain user how to download extension associated with a specific Slicer revision 
related to 0003730 closedjcfr Additional launcher setting are not added to the environment 




2012-05-31 15:15

administrator   ~0004715

Last edited: 2012-05-31 15:21


Also back-ported to 4.1.1 - See



2014-03-07 10:21

administrator   ~0011377

Fixed in



2014-05-12 19:39

administrator   ~0011737

@Matt: Since I don't want to interfere in the work you are currently doing with the extension infrastructure, I delegate the final step regarding topic [1]. After installing the extension given an archive, the user should be given the option to "force" the revision and ensure Slicer won't complain the extension is not compatible at the next startup.




2014-06-05 06:39

administrator   ~0012030


As explained here [1], when extension are installed using the extension manager, launcher setting are updated to consider Slicer modules location and also standard location like "/path/to/extension/{bin, lib/Slicer-4.2}" [2][3]. (Note that the value of these paths is abstracted using Slicer_BIN_DIR and Slicer_LIB_DIR).

But when you manually add the module path through the settings ... launcher settings are not updated. This will be fixed as part of issue 2145 [3]

It means that after the user install your extension, launcher setting will be automatically updated.

If you would like to help us improving the system so that launcher settings can be updated after manually adding module path to the settings, let me know and I would be happy to provide guidance.








2014-06-05 11:08

developer   ~0012031

This is implemented by

Some notes:

  • Installing via Python should work, in theory (the relevant method in qSlicerExtensionsManagerModel is public and Q_INVOKABLE).

  • The extension is assumed to be compatible with currently running Slicer. That is, the arch, os and slicer_revision for the installed extension are set to those of the currently running Slicer. Since the extension is useless without this step, I don't see a purpose to giving the user an option as opposed to just doing it always. (Note that the extension itself does not specify any of these attributes anyway - they come from the extension server and the related automated build system - so we're not ignoring anything that was provided by the extension file.)

  • There are also actions related to 0002089 currently visible but not implemented (as parts of the UI came from changes that were started to implement that feature). If 0002089 is not implemented by release, we should probably hide these (e.g. by commenting out the lines to add them to the menu).



2014-06-06 09:12

administrator   ~0012033

Last edited: 2014-06-06 09:12

It works well. I like the menu in the extension manager.

Few remarks:

a) When installing an extension archive, is it possible to:

  • (if the extension manager page is loaded and visible) display a midas notice by exposing a function qSlicerExtensionManagerModel::info/critical/.... See [1][2].
    In case the user selected the "Manage tab" and install the extension from file .... a popup should be displayed.

    In both case ... info should be printed in the log.

    If installed from python, not popup should be displayed.

b) If installing an extension that has slicerRevision different from the current running Slicer, would it be possible to remind the user he did so. (the slicerRevision associated with the installed extension is in the bundled description file)

c) In case of dependent extension, since the dependency are also stored in the bundled description file. We should let the user know which dependency are missing.

d) It should be possible to pass a list of extension archives. If passed in the right order, no warning about missing extension should be displayed.





2014-06-17 15:26

developer   ~0012085

(a) Done.

(b) The .s4ext in the archive does not currently contain the slicer revision. (I'm not sure how I feel about relying on the name of the archive for that purpose. I guess it would be okay to do so if it is just a warning.)

(c) AFAIK Just Works (and "already" did; see 0002912).

(d) How to specify the list, and install order, is potentially non-trivial. We decided not to do this at this time.



2014-06-17 17:03

administrator   ~0012086

Before we integrate "2145-install-extension-from-package", is it possible to also add the "theme" tweak ? Similarly to what has been done for [1]




2014-06-30 14:51

administrator   ~0012114

Fixed by r23398 -> r23404


Related Changesets

Import 2017-06-07 23:51:09: master fc739771

2014-06-30 17:18:28


Details Diff
ENH: Initial refactoring of extension manager UI

Refactor right corner area of extension manager into a .ui file, similar
to how the left corner area (navigation buttons) is already handled.
This allows us to have separate search widgets per tab (allowing for
independent search states, if/when support for searching installed
extensions is added), and also to add a 'configure' button (which we do)
that provides independent menus per tab.

The menus are created, but not yet functional. Icons (from the Public
Domain Tango theme) are also added. (The 'check for updates' icon uses
the theme pixmaps. Tango does not provide a 'configure' icon as such, so
the modified svg from which the pixmaps were generated is also being

Issue 0002089
Issue 0002145

git-svn-id: 3bd1e089-480b-0410-8dfb-8563597acbee
mod - Base/QTGUI/CMakeLists.txt Diff File
add - Base/QTGUI/Resources/Icons/Large/SlicerCheckForUpdates.png Diff File
add - Base/QTGUI/Resources/Icons/Large/SlicerConfigure.png Diff File
add - Base/QTGUI/Resources/Icons/Medium/SlicerCheckForUpdates.png Diff File
add - Base/QTGUI/Resources/Icons/Medium/SlicerConfigure.png Diff File
add - Base/QTGUI/Resources/Icons/Scalable/SlicerConfigure.svg Diff File
add - Base/QTGUI/Resources/Icons/Small/SlicerCheckForUpdates.png Diff File
add - Base/QTGUI/Resources/Icons/Small/SlicerConfigure.png Diff File
add - Base/QTGUI/Resources/Icons/XLarge/SlicerCheckForUpdates.png Diff File
add - Base/QTGUI/Resources/Icons/XLarge/SlicerConfigure.png Diff File
add - Base/QTGUI/Resources/Icons/XSmall/SlicerCheckForUpdates.png Diff File
add - Base/QTGUI/Resources/Icons/XSmall/SlicerConfigure.png Diff File
mod - Base/QTGUI/Resources/UI/qSlicerExtensionsActionsWidget.ui Diff File
mod - Base/QTGUI/Resources/UI/qSlicerExtensionsManagerWidget.ui Diff File
add - Base/QTGUI/Resources/UI/qSlicerExtensionsToolsWidget.ui Diff File
mod - Base/QTGUI/qSlicerExtensionsManagerWidget.cxx Diff File

Import 2017-06-07 23:51:09: master 7fed1f7c

2014-06-30 17:18:32


Details Diff
ENH: Add ability to install extension from file

Hook up 'install from file' action in extension manager. Create an
overload of qSlicerExtensionsManagerModel::installExtension taking only
an archive file name, which uses the new list_archive method to
determine the extension name and then hands off to the existing method.
Modify the existing overload to cope with the lack of server metadata
that occurs in this case, and to fill in a sufficient subset from common
information (i.e. the os/arch/revision of currently running Slicer) and
the description file provided in the extension archive.

This should allow users to install extensions from externally obtained
archives of the same (e.g. manually downloading from the server with an
external web browser).

Issue 0002145

git-svn-id: 3bd1e089-480b-0410-8dfb-8563597acbee
mod - Base/QTCore/qSlicerExtensionsManagerModel.cxx Diff File
mod - Base/QTCore/qSlicerExtensionsManagerModel.h Diff File
mod - Base/QTGUI/qSlicerExtensionsManagerWidget.cxx Diff File
mod - Base/QTGUI/qSlicerExtensionsManagerWidget.h Diff File

Issue History

Date Modified Username Field Change
2012-05-31 13:18 jcfr New Issue
2012-05-31 13:18 jcfr Status new => assigned
2012-05-31 13:18 jcfr Assigned To => jcfr
2012-05-31 13:18 jcfr Target Version => Slicer 4.2.0 - Sept 1st 2012
2012-05-31 13:18 jcfr Summary Provide a mechanism to easily install extension given the location of the package => Provide a mechanism allowing to easily install extension given the location of the package
2012-05-31 15:15 jcfr Note Added: 0004715
2012-05-31 15:21 jcfr Note Edited: 0004715
2012-08-20 10:13 jcfr Target Version Slicer 4.2.0 - Feature freeze Sept 1st 2012 => Slicer 4.2.5
2012-08-21 09:40 jcfr Target Version Slicer 4.2.5 => Slicer 4.3.0
2013-04-26 11:58 jcfr Relationship added related to 0003089
2013-04-26 14:50 jcfr Relationship added related to 0003093
2013-08-30 13:57 jcfr Target Version Slicer 4.3.0 => Slicer 4.3.1
2013-10-01 11:50 jcfr Target Version Slicer 4.3.1 => Slicer 4.3.2
2014-03-06 10:15 nicole Target Version Slicer 4.3.2 => Slicer 4.4.0
2014-03-07 10:21 jcfr Note Added: 0011377
2014-05-12 19:37 jcfr Assigned To jcfr => matthew-woehlke
2014-05-12 19:39 jcfr Note Added: 0011737
2014-06-05 06:39 jcfr Note Added: 0012030
2014-06-05 06:57 jcfr Relationship added related to 0003730
2014-06-05 11:08 matthew-woehlke Note Added: 0012031
2014-06-05 11:08 matthew-woehlke Status assigned => feedback
2014-06-06 09:12 jcfr Note Added: 0012033
2014-06-06 09:12 jcfr Note Edited: 0012033
2014-06-17 15:26 matthew-woehlke Note Added: 0012085
2014-06-17 17:03 jcfr Note Added: 0012086
2014-06-30 14:51 jcfr Note Added: 0012114
2014-06-30 14:51 jcfr Status feedback => resolved
2014-06-30 14:51 jcfr Fixed in Version => Slicer 4.4.0
2014-06-30 14:51 jcfr Resolution open => fixed
2014-07-14 09:19 jcfr Status resolved => closed
2017-06-10 08:51 Changeset attached => Slicer master 7fed1f7c
2017-06-10 08:51 Changeset attached => Slicer master fc739771