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 <[email protected] <mailto:[email protected]>> 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
        [email protected]
        <mailto:[email protected]>
        http://lists.osgeo.org/mailman/listinfo/qgis-developer



-- Dr. Marco Hugentobler
    Sourcepole -  Linux & Open Source Solutions
    Weberstrasse 5, CH-8004 Zürich, Switzerland
    [email protected]
    <mailto:[email protected]> http://www.sourcepole.ch
    Technical Advisor QGIS Project Steering Committee


    _______________________________________________
    Qgis-developer mailing list
    [email protected] <mailto:[email protected]>
    http://lists.osgeo.org/mailman/listinfo/qgis-developer




--
Dr. Marco Hugentobler
Sourcepole -  Linux & Open Source Solutions
Weberstrasse 5, CH-8004 Zürich, Switzerland
[email protected] http://www.sourcepole.ch
Technical Advisor QGIS Project Steering Committee

_______________________________________________
Qgis-developer mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to