ENH: More work on in-Slicer Extension Wizard

Add some widgets to the 'edit extension' section to show basic
information about the selected extension, and hook up the ability to
select an extension. There is a not-yet-implemented 'edit metadata'
action that will likely be joined eventually by other actions.

Issue #3603

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23269 3bd1e089-480b-0410-8dfb-8563597acbee
BUG: Improve ExtensionDescription robustness

Fix ExtensionDescription to not fail in case of a git repository with no
commits, and/or a local git repository with no remotes.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23270 3bd1e089-480b-0410-8dfb-8563597acbee
STYLE: Use properties in CreateExtensionDialog

Change CreateExtensionDialog classes to subclass object, which is needed
to give them properties (they weren't originally as there seems to be
some problem if a module's primary classes derive from object). Change
accessor methods of the same to Python properties, which are slightly
more convenient and "more Pythonic".

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23271 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Create editable tree widget

Create utility widget class EditableTreeWidget, for extension wizard
module. This will be useful for editing extension metadata that takes
the form of lists, e.g. contributors.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23272 3bd1e089-480b-0410-8dfb-8563597acbee
BUG: More unicode support fixes

Add support for conversion-to-unicode to CMakeParser. Fix str conversion
to more explicitly avoid having unicode in the results. Add encoding
detection and support to ExtensionProject. This should make it possible
to work with non-ASCII unicode in an ExtensionProject.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23273 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Make ExtensionProject.project writable

Add a setter for the ExtensionProject.project property, allowing users
to change the name given to the project() call of a corresponding build
script (CMakeLists.txt).

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23274 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Implement editing of extension metadata

Create dialog for editing extension metadata and hook up to necessary
bi-directional manipulation of the same in the extension project and
description classes.

Issue #3603

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23275 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Use I-beam cursor for information fields

Tweak the read only line edits used to show information about the
currently selected extension in the Extension Wizard module to use the
I-beam cursor, to make it more obvious that the text can be selected.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23276 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Select from location of selected extension

Change extension selection in the extension wizard module to use the
location of the currently selected extension (when applicable) as the
initial directory for choosing another extension.

Issue #3603

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23277 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Implement creation of extension modules

Add ability to create modules for extensions to extension wizard module.
Refactor CreateExtensionDialog into more generic CreateComponentDialog
so that it can be shared for this purpose.

Issue #3603

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23278 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Prompt to load extension modules (WIP)

Create a dialog to prompt the user if they want to load modules
available from a selected extension. (Also used to ask the user if they
want to load a newly-created module immediately.) The UI is implemented,
but the actual loading requires changes to the C++ interfaces, and so is
not hooked up yet.

Issue #3603

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23279 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Allow loading modules [from Python]

Move qSlicerAbstractModuleFactoryManager::registerModule(QFileInfo) from
protected to public Q_INVOKABLE, so that users (Python users in
particular) can manually register additional modules at run time. Add
new (also public Q_INVOKABLE) method to qSlicerModuleFactoryManager
allowing users to request that a specific list of modules be loaded (and
instantiated, if necessary).

This allows e.g. a user at the Python console to dynamically load a
module that is not in the search paths at run time, without modifying
the search paths. In particular, this will be useful to the Extension
Wizard module.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23280 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Implement loading of extension modules

Hook up the loading of modules in the Extension Wizard when requesting
to do so. (See previous two commits.)

Issue #3603

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23281 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Create editable directory list

Create utility widget class DirectoryListWidget, which provides a
standard interface of supplemental buttons to support a user editable
qSlicerDirectoryListView. (Surprisingly, no such class previously
exists; existing occurrences of this pattern reimplement the
supplemental UI in the parent, for each occurrence!)

This will allow us to trivially create multiple instances of editable
lists.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23282 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Allow access to settings dialog from Python

Make qSlicerApplication::settingsDialog Q_INVOKABLE, in order to allow
access to the settings dialog from Python (e.g. scripted modules).

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23283 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Add UI for modifying template paths

Create a settings panel for the Extension Wizard module that allows
editing the list of paths used to find templates. Change how we read
settings to work with the way ctkSettingsPanel stores lists.

Issue #3603

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23284 3bd1e089-480b-0410-8dfb-8563597acbee
BUG: Don't choke on empty path value

Fix logic that loads list of template paths from settings to not choke
(i.e. throw an unexpected exception) in case the key value is None.
Also, remove some stray debugging statements that were accidentally
committed.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23285 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Expose Slicer share path

Make Slicer_SHARE_DIR accessible via a property on the
qSlicerCoreApplication, which makes it available via Python without
relying on the SLICER_SHARE_DIR environment variable.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23286 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Use installed templates, if available

Refactor template path handling in the Extension Wizard module to reduce
duplication of key literals. Add a helper function to try to get the
location of the "standard" templates (e.g. from an install), and use
these if available. Also, display this path (non-editable) in the
settings panel.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23287 3bd1e089-480b-0410-8dfb-8563597acbee
STYLE: Create icon for Extension Wizard module

Add icon images ("same" icon, multiple resolutions) and source SVG's for
the same for the Extension Wizard module. (The XSmall resolution is just
the Medium SVG rendered at 16x16, hence no source SVG.)

These aren't being used yet.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23288 3bd1e089-480b-0410-8dfb-8563597acbee