[Qgis-developer] the new Plugin Manager
Marco Hugentobler
marco.hugentobler at sourcepole.ch
Wed Jun 5 00:15:37 PDT 2013
>I can merge the new plugin installer tonight if your happy with that
Perfect, thanks.
Marco
On 05.06.2013 09:12, Nathan Woodrow wrote:
> Marco,
>
> I can merge the new plugin installer tonight if your happy with that.
> I'm not sure I will merge the SIP stuff in just yet but I will review
> and see where to go from there.
>
> Regards,
> Nathan
>
>
> On Wed, Jun 5, 2013 at 5:09 PM, Marco Hugentobler
> <marco.hugentobler at sourcepole.ch
> <mailto:marco.hugentobler at sourcepole.ch>> wrote:
>
> Hi Nathan
>
> I'm away today and can merge earliest late evening or probably in
> the morning.
> Alternatively, to not block your progress with the new API, you
> could do the plugin manager merge / SIP update / python part
> update and the const things can be easily added later.
>
> Regards,
> Marco
>
> On 05.06.2013 08:53, Nathan Woodrow wrote:
>> Marco,
>>
>> As Borys is away would you be able to merge it tonight. I can
>> then merge the SIP update once that is done, just need to check
>> the status. I'll take care of updating the python part of the
>> installer to the new API once it's merged into master.
>>
>> Regards,
>> Nathan
>>
>>
>> On Wed, Jun 5, 2013 at 4:48 PM, Marco Hugentobler
>> <marco.hugentobler at sourcepole.ch
>> <mailto:marco.hugentobler at sourcepole.ch>> wrote:
>>
>> Hi Borys
>>
>> I tested the newpluginmanager branch and I must say the new
>> plugin manager / installer is really a great user experience.
>> And it is good that the plugin manager also works without the
>> python bindings (handy e.g. in the server case).
>> Codewise, I have few suggestion on detail level:
>>
>> QgsPluginRegistry: isLoaded(), isPythonPlugin(),
>> isPluginCompatible() can be const
>>
>> QgsPluginManager: pluginMetadata() returns a pointer to the
>> map. This function should be const and return either const
>> pointer or a copy (kind of similar issue like recently with
>> the layer registry)
>>
>> It might be worth thinking if QgsPluginRegistry should be in
>> core and accessible by third party apps / plugins. Like that
>> it would e.g. be possible to use functions from one plugin in
>> another and load the required plugin if not already there.
>> The plugin registry could also emit an unload signal to
>> notify the dependent plugin. I'm not 100% sure it is a good
>> idea, but maybe it would be handy for sextante (e.g. WPS
>> plugin requires a loaded sextante)?
>>
>> All in all great work. I'm proposing that you merge the
>> branch to master.
>>
>> Regards,
>> Marco
>>
>>
>> On 27.05.2013 14:23, Borys Jurgiel wrote:
>>
>> Hi All,
>>
>> The new manager is ready. Here is a screenshot for
>> impatient ones :)
>> http://tmp.borysjurgiel.pl/manager4.png
>>
>> The code is in a branch "newmanager":
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771
>>
>> As it affects a number of classes, please review the
>> architecture summary
>> below and if there is no veto, it's ready to be merged to
>> master. Otherewise I'll
>> make requested changes before merging.
>>
>>
>> *QgsPluginItem*
>> ==========
>> Removed. It only used in the old manager and wasn't
>> usefull anymore.
>>
>>
>>
>> *QgsDetailedItemData, QgsDetailedItemDelegate and
>> QgsDetailedItemWidget*
>> ==========
>> Untouched. It was used in the old manager and Grass
>> Plugin, now it's used
>> exclusively by Grass Plugin.
>>
>>
>>
>> *QgsPluginMedatadata*
>> ==========
>> Untouched, however I propose to rename it to
>> QgsPluginItem or QgsPluginRegistryItem
>> for consistency. It's only used in QgsPluginRegistry and
>> it mainly conatains
>> pointers to loaded plugins instances, while its name may
>> imply a rich metadata
>> map. If some day during QGIS 2.x lifetime the Manager
>> will need a separate class
>> for storing rich metadata (now QMap is enough), and it
>> would be nice to use this name.
>>
>>
>>
>> *QgsPluginRegistry*
>> ==========
>> Info: This class is a registry for instances of lodaded
>> plugins. It has nothing to to
>> with metadata and it works independently from the
>> manager, just by restoring
>> session plugins from QSettings. Manager only calls its
>> method to load and unload plugins.
>>
>> Small change: as it already had methods loadCppPlugin()
>> and loadPythonPlugin(),
>> I've added also unloadCppPlugin() and
>> unloadPythonPlugin() too keep the
>> loading/unloading stuff in one place.
>>
>> Diff:
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgspluginregistry.h
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgspluginregistry.cpp
>>
>>
>>
>> *QgsPluginManager*
>> ==========
>> Completely rewritten and moved to src/app/pluginmanager/
>> subdirectory
>> class for the dialog window. Important facts:
>>
>> 1) It keeps plugin metadata registry just in nested QMap:
>> QMap< QString, QMap<QString,QString> > mPlugins;
>>
>> where the first key is library/module basename, and the
>> second one is attribute
>> name. There was no need to create a separate class for
>> storing metadata,
>> however, some day it may become convinient to create a
>> class called QgsPluginMedatadata.
>> For this reason I propose to rename the current
>> QgsPluginMedatadata
>> (what actually has nothing to do with metadata) before
>> releasing QGIS 2.0.
>> The list of used attributes is provided in the "metadata"
>> file and it's an unification
>> of existing fields from repository xml, metadata.txt, the
>> old installer and c++ plugins.
>> QgsPluginManager populates this field (let's call it
>> metadata registry) with
>> c++ plugins when the window is opened. On the contrary,
>> Python plugins
>> are handled on Python's side and they are appended to
>> mPlugins by API.
>>
>> 2) The plugin list view uses QStandardItemModel populated
>> from mPlugins
>> and also QgsPluginSortFilterProxyModel for filtering and
>> sorting.
>>
>> 3) The html metadata browser is quite simple, and we can
>> extend it in QGIS 2.1.
>> For example, some tags can be clickable and set a new
>> filter (filter by clicked
>> author/tag/status). Also the separate buttons
>> Install/Uninstall can be
>> implemented by html "buttonsm", and the popup dialog with
>> installation progress
>> can be replaced by animated image (this way we don't
>> freeze the gui when installing).
>>
>> Code:
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgspluginmanager.h
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgspluginmanager.cpp
>>
>>
>>
>> *QgsPluginSortFilterProxyModel*
>> ==========
>> New class: just a sort-filter proxy for the metadata.
>> Filtering is done by status
>> in the left list as well as name/description/tags/author
>> in the filter input line.
>> Sorting is done by rightclicking on the list. Foltering
>> and sorting is based
>> on a few user data roles. I tried to read necessary data
>> from mPlugins everytime,
>> but it affected the performance too much.
>>
>> Code:
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgspluginsortfilterproxymodel.h
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgspluginsortfilterproxymodel.cpp
>>
>>
>>
>> *QgsAppPluginManagerInterface, QgsPluginManagerInterface
>> and SIP binding*
>> ==========
>> New classes: just the interface to QgsPluginManager. Is's
>> exactly based
>> on the existing Qgs(App)LegendInterface
>>
>> Code:
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/python/gui/qgspluginmanagerinterface.sip
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/gui/qgspluginmanagerinterface.h
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/gui/qgspluginmanagerinterface.cpp
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgsapppluginmanagerinterface.h
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgsapppluginmanagerinterface.cpp
>>
>>
>>
>> QgisApp
>> ==========
>> Small change: initialize the QgsPluginManager and Python
>> module
>> pyplugin_installer in the constructor. Only open the
>> QgsPluginManager window
>> when called from the main menu.
>>
>> Diff:
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgisapp.h
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgisapp.cpp
>>
>>
>> QgisAppInterface and QgisInterface and SIP binding
>> ==========
>> Small change: instantiate Qgs(App)PluginManagerInterface
>> exactly the same way as Qgs(App)LegendInterface
>>
>> Diff:
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgisappinterface.h
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgisappinterface.cpp
>>
>>
>>
>> pyplugin_installer Python module
>> ==========
>> New python module in python/pyplugin_installer. It
>> contains just slightly refactored
>> code of the old plugin_installer plugin and provides
>> backend for handling Python
>> plugis, e.g.: fetching remote repositories, loading
>> installed plugin metadata, finding
>> upgradeable plugins, (un)installing python plugins etc.
>> It's methods are called from
>> QgsPluginManager and it calls QgsPluginManager methods
>> via QgsPluginManagerInterface.
>>
>> Code:
>> http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/show/python/pyplugin_installer
>>
>>
>> _______________________________________________
>> Qgis-developer mailing list
>> Qgis-developer at lists.osgeo.org
>> <mailto:Qgis-developer at lists.osgeo.org>
>> http://lists.osgeo.org/mailman/listinfo/qgis-developer
>>
>>
>>
>> --
>> Dr. Marco Hugentobler
>> Sourcepole - Linux & Open Source Solutions
>> Weberstrasse 5, CH-8004 Zürich, Switzerland
>> marco.hugentobler at sourcepole.ch
>> <mailto:marco.hugentobler at sourcepole.ch> http://www.sourcepole.ch
>> Technical Advisor QGIS Project Steering Committee
>>
>>
>> _______________________________________________
>> Qgis-developer mailing list
>> Qgis-developer at lists.osgeo.org
>> <mailto:Qgis-developer at lists.osgeo.org>
>> http://lists.osgeo.org/mailman/listinfo/qgis-developer
>>
>>
>
--
Dr. Marco Hugentobler
Sourcepole - Linux & Open Source Solutions
Weberstrasse 5, CH-8004 Zürich, Switzerland
marco.hugentobler at sourcepole.ch http://www.sourcepole.ch
Technical Advisor QGIS Project Steering Committee
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20130605/ce8f03c7/attachment-0001.html>
More information about the Qgis-developer
mailing list