In many use cases it is desirable to provide customized versions of Slicer that remove clutter from the user interface and only expose the set of functionality that is needed.
Based on original design ideas from Bea, at the 2015 Winter Project Week Steve, Francois, and Jc brainstormed about what is needed and how we might accomplish it.
Some goals were:
- Single click download for end users, customized logo and application name
- Cross-platform support
- Ability to configure:
- Included extensions
- Excluded modules
- Application settings (layout, toolbar, home module...)
- Easy to generate and update and create new versions
- Create Prototype ProfileWizard as scripted module in a custom Extension
- Offer a list of modules with checkboxes
- Create a new output application directory containing only selected modules
- Test this on the TMJ-OA craniofacial use cases
- Review how to map to batch mode
- Define configuration format
- Determine how to access all directories and other info in order to automate download and packaging cross-platform
Issues to sort out
- How to make a custom application icon (currently app icons are stored as read-only resources inside the application executable).
- How to tell slicer to use the extensions.
- Could copy all extension executables and shared libraries into lib/Slicer-4.4/cli-modules, but on Mac the paths are 'fixed up' meaning they are hard coded to be in extension subdirectories. They do not work if copied into the core.
- Could find a way to customize the settings file to set module path and mimic the behavior of the extension manager.
- Could provide a scripted module that finishes the installation of the Custom Slicer application the first time it is run on a client machine (this might be the best option).
- How to remove module menu groups like "Diffusion" when they are empty.
A new extension has been created: https://github.com/pieper/CustomSlicerGenerator
As of late February 2015 it mostly works and creates a custom application with the modules specified by a configuration script. The resulting custom application runs, but it uses the settings from Slicer because the application name is hard-coded in Slicer's Main.cxx.