<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">>I can merge the new plugin
installer tonight if your happy with that<br>
<br>
Perfect, thanks.<br>
<br>
Marco<br>
<br>
On 05.06.2013 09:12, Nathan Woodrow wrote:<br>
</div>
<blockquote
cite="mid:CAAi8Yg_GNdP8Um9NbouDqg=ncnPexh7cOnaV5z9ZyPa65w=KSw@mail.gmail.com"
type="cite">
<div dir="ltr">Marco,
<div><br>
</div>
<div style="">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.</div>
<div style=""><br>
</div>
<div style="">Regards,</div>
<div style="">Nathan</div>
</div>
<div class="gmail_extra"><br>
<br>
<div class="gmail_quote">On Wed, Jun 5, 2013 at 5:09 PM, Marco
Hugentobler <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:marco.hugentobler@sourcepole.ch"
target="_blank">marco.hugentobler@sourcepole.ch</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
<div>Hi Nathan<br>
<br>
I'm away today and can merge earliest late evening or
probably in the morning.<br>
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.<br>
<br>
Regards,<br>
Marco <br>
<div>
<div class="h5"> <br>
On 05.06.2013 08:53, Nathan Woodrow wrote:<br>
</div>
</div>
</div>
<div>
<div class="h5">
<blockquote type="cite">
<div dir="ltr">Marco,
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>Regards,</div>
<div>Nathan</div>
</div>
<div class="gmail_extra"><br>
<br>
<div class="gmail_quote">On Wed, Jun 5, 2013 at
4:48 PM, Marco Hugentobler <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:marco.hugentobler@sourcepole.ch"
target="_blank">marco.hugentobler@sourcepole.ch</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0
0 0 .8ex;border-left:1px #ccc
solid;padding-left:1ex">Hi Borys<br>
<br>
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).<br>
Codewise, I have few suggestion on detail
level:<br>
<br>
QgsPluginRegistry: isLoaded(),
isPythonPlugin(), isPluginCompatible() can be
const<br>
<br>
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)<br>
<br>
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)?<br>
<br>
All in all great work. I'm proposing that you
merge the branch to master.<br>
<br>
Regards,<br>
Marco
<div>
<div><br>
<br>
On 27.05.2013 14:23, Borys Jurgiel wrote:<br>
<blockquote class="gmail_quote"
style="margin:0 0 0 .8ex;border-left:1px
#ccc solid;padding-left:1ex"> Hi All,<br>
<br>
The new manager is ready. Here is a
screenshot for impatient ones :)<br>
<a moz-do-not-send="true"
href="http://tmp.borysjurgiel.pl/manager4.png"
target="_blank">http://tmp.borysjurgiel.pl/manager4.png</a><br>
<br>
The code is in a branch "newmanager":<br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771</a><br>
<br>
As it affects a number of classes,
please review the architecture summary<br>
below and if there is no veto, it's
ready to be merged to master. Otherewise
I'll<br>
make requested changes before merging.<br>
<br>
<br>
*QgsPluginItem*<br>
==========<br>
Removed. It only used in the old manager
and wasn't usefull anymore.<br>
<br>
<br>
<br>
*QgsDetailedItemData,
QgsDetailedItemDelegate and
QgsDetailedItemWidget*<br>
==========<br>
Untouched. It was used in the old
manager and Grass Plugin, now it's used<br>
exclusively by Grass Plugin.<br>
<br>
<br>
<br>
*QgsPluginMedatadata*<br>
==========<br>
Untouched, however I propose to rename
it to QgsPluginItem or
QgsPluginRegistryItem<br>
for consistency. It's only used in
QgsPluginRegistry and it mainly
conatains<br>
pointers to loaded plugins instances,
while its name may imply a rich metadata<br>
map. If some day during QGIS 2.x
lifetime the Manager will need a
separate class<br>
for storing rich metadata (now QMap is
enough), and it would be nice to use
this name.<br>
<br>
<br>
<br>
*QgsPluginRegistry*<br>
==========<br>
Info: This class is a registry for
instances of lodaded plugins. It has
nothing to to<br>
with metadata and it works independently
from the manager, just by restoring<br>
session plugins from QSettings. Manager
only calls its method to load and unload
plugins.<br>
<br>
Small change: as it already had methods
loadCppPlugin() and loadPythonPlugin(),<br>
I've added also unloadCppPlugin() and
unloadPythonPlugin() too keep the<br>
loading/unloading stuff in one place.<br>
<br>
Diff:<br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgspluginregistry.h"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgspluginregistry.h</a><br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgspluginregistry.cpp"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgspluginregistry.cpp</a><br>
<br>
<br>
<br>
*QgsPluginManager*<br>
==========<br>
Completely rewritten and moved to
src/app/pluginmanager/ subdirectory<br>
class for the dialog window. Important
facts:<br>
<br>
1) It keeps plugin metadata registry
just in nested QMap:<br>
QMap< QString,
QMap<QString,QString> >
mPlugins;<br>
<br>
where the first key is library/module
basename, and the second one is
attribute<br>
name. There was no need to create a
separate class for storing metadata,<br>
however, some day it may become
convinient to create a class called
QgsPluginMedatadata.<br>
For this reason I propose to rename the
current QgsPluginMedatadata<br>
(what actually has nothing to do with
metadata) before releasing QGIS 2.0.<br>
The list of used attributes is provided
in the "metadata" file and it's an
unification<br>
of existing fields from repository xml,
metadata.txt, the old installer and c++
plugins.<br>
QgsPluginManager populates this field
(let's call it metadata registry) with<br>
c++ plugins when the window is opened.
On the contrary, Python plugins<br>
are handled on Python's side and they
are appended to mPlugins by API.<br>
<br>
2) The plugin list view uses
QStandardItemModel populated from
mPlugins<br>
and also QgsPluginSortFilterProxyModel
for filtering and sorting.<br>
<br>
3) The html metadata browser is quite
simple, and we can extend it in QGIS
2.1.<br>
For example, some tags can be clickable
and set a new filter (filter by clicked<br>
author/tag/status). Also the separate
buttons Install/Uninstall can be<br>
implemented by html "buttonsm", and the
popup dialog with installation progress<br>
can be replaced by animated image (this
way we don't freeze the gui when
installing).<br>
<br>
Code:<br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgspluginmanager.h"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgspluginmanager.h</a><br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgspluginmanager.cpp"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgspluginmanager.cpp</a><br>
<br>
<br>
<br>
*QgsPluginSortFilterProxyModel*<br>
==========<br>
New class: just a sort-filter proxy for
the metadata. Filtering is done by
status<br>
in the left list as well as
name/description/tags/author in the
filter input line.<br>
Sorting is done by rightclicking on the
list. Foltering and sorting is based<br>
on a few user data roles. I tried to
read necessary data from mPlugins
everytime,<br>
but it affected the performance too
much.<br>
<br>
Code:<br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgspluginsortfilterproxymodel.h"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgspluginsortfilterproxymodel.h</a><br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgspluginsortfilterproxymodel.cpp"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgspluginsortfilterproxymodel.cpp</a><br>
<br>
<br>
<br>
*QgsAppPluginManagerInterface,
QgsPluginManagerInterface and SIP
binding*<br>
==========<br>
New classes: just the interface to
QgsPluginManager. Is's exactly based<br>
on the existing Qgs(App)LegendInterface<br>
<br>
Code:<br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/python/gui/qgspluginmanagerinterface.sip"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/python/gui/qgspluginmanagerinterface.sip</a><br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/gui/qgspluginmanagerinterface.h"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/gui/qgspluginmanagerinterface.h</a><br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/gui/qgspluginmanagerinterface.cpp"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/gui/qgspluginmanagerinterface.cpp</a><br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgsapppluginmanagerinterface.h"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgsapppluginmanagerinterface.h</a><br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgsapppluginmanagerinterface.cpp"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/entry/src/app/pluginmanager/qgsapppluginmanagerinterface.cpp</a><br>
<br>
<br>
<br>
QgisApp<br>
==========<br>
Small change: initialize the
QgsPluginManager and Python module<br>
pyplugin_installer in the constructor.
Only open the QgsPluginManager window<br>
when called from the main menu.<br>
<br>
Diff:<br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgisapp.h"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgisapp.h</a><br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgisapp.cpp"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgisapp.cpp</a><br>
<br>
<br>
QgisAppInterface and QgisInterface and
SIP binding<br>
==========<br>
Small change: instantiate
Qgs(App)PluginManagerInterface<br>
exactly the same way as
Qgs(App)LegendInterface<br>
<br>
Diff:<br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgisappinterface.h"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgisappinterface.h</a><br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgisappinterface.cpp"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/diff/src/app/qgisappinterface.cpp</a><br>
<br>
<br>
<br>
pyplugin_installer Python module<br>
==========<br>
New python module in
python/pyplugin_installer. It contains
just slightly refactored<br>
code of the old plugin_installer plugin
and provides backend for handling Python<br>
plugis, e.g.: fetching remote
repositories, loading installed plugin
metadata, finding<br>
upgradeable plugins, (un)installing
python plugins etc. It's methods are
called from<br>
QgsPluginManager and it calls
QgsPluginManager methods via
QgsPluginManagerInterface.<br>
<br>
Code:<br>
<a moz-do-not-send="true"
href="http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/show/python/pyplugin_installer"
target="_blank">http://hub.qgis.org/projects/quantum-gis/repository/revisions/5ee09d362148c411047a0fc7bc22679d9989f771/show/python/pyplugin_installer</a><br>
<br>
<br>
_______________________________________________<br>
Qgis-developer mailing list<br>
<a moz-do-not-send="true"
href="mailto:Qgis-developer@lists.osgeo.org"
target="_blank">Qgis-developer@lists.osgeo.org</a><br>
<a moz-do-not-send="true"
href="http://lists.osgeo.org/mailman/listinfo/qgis-developer"
target="_blank">http://lists.osgeo.org/mailman/listinfo/qgis-developer</a><br>
</blockquote>
<br>
<br>
</div>
</div>
<span><font color="#888888"> -- <br>
Dr. Marco Hugentobler<br>
Sourcepole - Linux & Open Source
Solutions<br>
Weberstrasse 5, CH-8004 Zürich,
Switzerland<br>
<a moz-do-not-send="true"
href="mailto:marco.hugentobler@sourcepole.ch"
target="_blank">marco.hugentobler@sourcepole.ch</a>
<a moz-do-not-send="true"
href="http://www.sourcepole.ch"
target="_blank">http://www.sourcepole.ch</a><br>
Technical Advisor QGIS Project Steering
Committee</font></span>
<div>
<div><br>
<br>
_______________________________________________<br>
Qgis-developer mailing list<br>
<a moz-do-not-send="true"
href="mailto:Qgis-developer@lists.osgeo.org"
target="_blank">Qgis-developer@lists.osgeo.org</a><br>
<a moz-do-not-send="true"
href="http://lists.osgeo.org/mailman/listinfo/qgis-developer"
target="_blank">http://lists.osgeo.org/mailman/listinfo/qgis-developer</a><br>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">--
Dr. Marco Hugentobler
Sourcepole - Linux & Open Source Solutions
Weberstrasse 5, CH-8004 Zürich, Switzerland
<a class="moz-txt-link-abbreviated" href="mailto:marco.hugentobler@sourcepole.ch">marco.hugentobler@sourcepole.ch</a> <a class="moz-txt-link-freetext" href="http://www.sourcepole.ch">http://www.sourcepole.ch</a>
Technical Advisor QGIS Project Steering Committee </pre>
</body>
</html>