Hello all,<div><br></div><div>Just an update to the problems i was having.</div><div>Regarding the problem with layer ordering it was a programmatic mistake because i was using setLayerZindex method instead of setLayerIndex. Changing to this method solved the issue.</div>
<div><br></div><div>Regarding printing with legends but removing the vector layers from the request, i was able to achieve this, but not through an elegant way. Nevertheless it works. I created a fake GeoExt.LegendPanel and i remove the vector from this panel instead of the main panel through the following:</div>
<div><br></div><div>var legendPanel = new GeoExt.LegendPanel(...); //my main legend panel</div><div><br></div><div><div>var cloneLegLayerStore = new GeoExt.data.LayerStore();</div><div>var cloneLegPanel = new GeoExt.LegendPanel({</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>layerStore: cloneLegLayerStore</div><div>});</div></div><div><br></div><div>then, in the print button handler i do:</div><div><br></div><div><div>var legLayers = legendPanel.layerStore;</div>
<div>var cloneLegLayers = new Array();</div><div>legLayers.each(function(record){</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>var layerRec = record.get(&#39;layer&#39;);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>if (layerRec.CLASS_NAME == &#39;OpenLayers.Layer.WMS&#39;){</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>cloneLegLayers.push(record);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>});</div><div>cloneLegLayerStore.add(cloneLegLayers);</div>
<div><br></div><div>And with this, only my WMS layers legends are being printed.</div><div><br></div><div>Thanks a lot for all the comments and help, Geoffrey and Christian.</div><div>Cheers,</div><div><br></div><div>Hugo</div>
<br><div class="gmail_quote">On Fri, Oct 7, 2011 at 4:05 PM, gbrun <span dir="ltr">&lt;<a href="mailto:gbrun@myopera.com">gbrun@myopera.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
I would say, your legendPanel is not really cloned. In fact, the same javascript object relies upon your both variables (&quot;legendPanel&quot; and &quot;cloneLegPanel&quot;). It may exist a way allowing to really copy a javascript object and &quot;paste&quot; it in an other variable. In your case, it subsists a link between your two variables: when you modify the object represented by one of them, it also affects the other. Unfortunately, I don&#39;t know how to solve this problem. For layers, in GeoExt, it exists a &quot;clone&quot; function for the &quot;LayerRecord&quot; class that cleanly clones layers. It might be possible to do something similar with your legend.<br>

<br>
An other idea: if it doesn&#39;t work with the &quot;beforeprint&quot; function, you can try the &quot;beforeencodelayer&quot; function. In my app, I use this function to change layers url before they are printed (because of some problem with GeoWebCache layers). It works for layers: maybe there is a way to use this function for legend?<br>

<br>
Geoffrey<br>
<br>
<br>
<br>
Le Fri, 07 Oct 2011 16:38:25 +0200, Hugo &lt;<a href="mailto:hfpmartins@gmail.com" target="_blank">hfpmartins@gmail.com</a>&gt; a écrit:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div></div><div class="h5">
Hi,<br>
<br>
After testing a little bit more, i found that if i use this code in the<br>
beforeprint listener it still complains about the encoding itself. So, i<br>
moved this code to the handler of a print button before calling the print<br>
method. Using this approach it works somehow but it removes all my vector<br>
layers from the map. As you told, i have cloned the legendPanel (using<br>
Ext.apply) and still get the same issue, all my vector layers are gone.<br>
<br>
Here is the current code:<br>
<br>
var cloneLegPanel = {};<br>
Ext.apply(cloneLegPanel, legendPanel);<br>
var legLayerStore = cloneLegPanel.layerStore;<br>
legLayerStore.each(function(<u></u>record){<br>
var layerRec = record.get(&#39;layer&#39;);<br>
if (layerRec.CLASS_NAME == &#39;OpenLayers.Layer.Vector&#39;){<br>
legLayerStore.remove(record);<br>
}<br>
});<br>
printProvider.print(mapPanel, printPage, {legend: cloneLegPanel});<br>
<br>
With this code i get the legends in the mapfish print pdf but i cannot print<br>
vector layers and they are removed from the map.<br>
What would you suggest? The thing i don&#39;t understand is why my vectors<br>
layers are being removed when i&#39;m using a cloned object of the GeoExt Legend<br>
Panel. Any ideas?<br>
<br>
Thanks once again,<br>
Hugo<br>
<br>
On Fri, Oct 7, 2011 at 2:09 PM, gbrun &lt;<a href="mailto:gbrun@myopera.com" target="_blank">gbrun@myopera.com</a>&gt; wrote:<br>
<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div></div><div class="h5">
Hum, looking at your code, it might work! What does it happen with this<br>
code? Vector layers are completely removed from the map, not only from the<br>
legend panel? In this case, you should indeed clone your legend. Then, you<br>
could remove vector layers from this cloned legend. A the end, you can<br>
replace the old legend by the new one in your print function.<br>
<br>
I have never gone into this problem, so I have no ready-made solution! In<br>
my app, I have deactivated the &quot;print legend&quot; capabilities when a vector<br>
layer is contained in a map.<br>
<br>
Geoffrey<br>
<br>
<br>
<br>
Le Fri, 07 Oct 2011 14:49:34 +0200, Hugo &lt;<a href="mailto:hfpmartins@gmail.com" target="_blank">hfpmartins@gmail.com</a>&gt; a écrit:<br>
<br>
<br>
 Hello Geoffrey,<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div></div><div class="h5">
<br>
Thanks a lot for your comments but my problem is exactly at destroying the<br>
legend printing for the vector layers. I have no idea on how to do this. I<br>
have tried the following but without success:<br>
<br>
beforeprint: function(printProv, printMap, printPages, printOpt){<br></div></div>
var includeLegend = Ext.getCmp(&#39;includeleg&#39;).**<u></u>getValue();<div class="im"><br>
if (includeLegend == true){<br>
var legOpt = printOpt.legend;<br>
var legLayerStore = legOpt.layerStore;<br></div>
legLayerStore.each(function(**<u></u>layerRec){<div class="im"><br>
var layerDef = layerRec.get(&#39;layer&#39;);<br>
if (layerDef.ClASS_NAME == &#39;OpenLayers.Layer.Vector&#39;){<br></div>
legLayerStore.remove(layerRec)<u></u>**;<div><div></div><div class="h5"><br>
}<br>
})<br>
}<br>
}<br>
<br>
So my question would be, how can i tell the printprovider to not print the<br>
legend for this type of layers?<br>
<br>
Thanks a lot,<br>
Hugo<br>
<br>
On Fri, Oct 7, 2011 at 8:37 AM, gbrun &lt;<a href="mailto:gbrun@myopera.com" target="_blank">gbrun@myopera.com</a>&gt; wrote:<br>
<br>
 Hi!<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div></div><div class="h5">
<br>
I would rather use the &quot;beforeprint&quot; or the &quot;beforeencodelayer&quot; function<br>
 from the &quot;printProvider&quot; class. This function allows you to change some<br>
parameters before layers are printed. So, trough this function, you can<br>
test if your map contains vector layers. In this case, you can probably<br>
find a way to destroy their relative legend from the print process. You<br>
will find below an example:<br>
<br>
      printProvider = new GeoExt.data.PrintProvider({<br>
              method: &#39;POST&#39;, // &#39;POST&#39; recommended for production use<br>
(&#39;GET&#39; for<br>
development)<br>
              capabilities: printCapabilities, // from the info.json<br>
script in the html<br>
              listeners:{<br>
                      beforeprint: function(){<br>
                              // test each layer<br>
                                      // if the layer is vector, remove<br>
it<br>
from the printed legend<br>
                      }, // or use the &quot;beforeencodelayer&quot; function<br>
                      beforeencodelayer: function (printProvider, layer){<br>
                              // test each layer (easy with the layer<br>
parameter provided by this<br>
function!)<br>
                                      // if the layer is vector, remove<br>
it<br>
from the printed legend<br>
                      }<br>
              }<br>
      });<br>
<br>
I hope it might help you!<br>
<br>
Geoffrey<br>
<br>
<br>
Le Thu, 06 Oct 2011 20:17:20 +0200, Hugo &lt;<a href="mailto:hfpmartins@gmail.com" target="_blank">hfpmartins@gmail.com</a>&gt; a écrit:<br>
<br>
&gt; Hello once again,<br>
&gt;<br>
&gt; One more question though... If i still want to print legends without<br>
wfs<br>
&gt; and<br>
&gt; vector layers, how can i avoid these layers being passed in the<br>
request?<br>
&gt;<br>
&gt; At the moment i have:<br>
&gt; printProvider.print(mapPanel, printPage, {legend: legendPanel});<br>
&gt;<br>
&gt; So i suppose i have to clone my legendPanel and set some properties for<br>
&gt; the<br>
&gt; layers i don&#39;t want to include in the legend. What would be the<br>
approach<br>
&gt; to<br>
&gt; follow?<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Hugo<br>
&gt;<br>
&gt; On Thu, Oct 6, 2011 at 2:48 PM, Hugo &lt;<a href="mailto:hfpmartins@gmail.com" target="_blank">hfpmartins@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;&gt; Hello Chris and Geoffrey,<br>
&gt;&gt;<br>
&gt;&gt; Thanks a lot for your replies. I will look further into your<br>
suggestions<br>
&gt;&gt; and come back with feedback.<br>
&gt;&gt; Cheers,<br>
&gt;&gt;<br>
&gt;&gt; Hugo<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Tue, Oct 4, 2011 at 8:15 PM, Christian Mayer<br>
&gt;&gt; &lt;<a href="mailto:mayer@terrestris.de" target="_blank">mayer@terrestris.de</a>&gt;wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; **<br>
&gt;&gt;&gt; Hello Hugo,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; for your second problem you may use the beforeprint event of the<br>
&gt;&gt;&gt; PrintProvider class, with the<br>
&gt;&gt;&gt; listener arguments:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;    - printProvider -<br>
&gt;&gt;&gt; GeoExt.data.PrintProvider&lt;<br>
</div></div><a href="http://geoext.org/lib/GeoExt/**data/PrintProvider.html#**" target="_blank">http://geoext.org/lib/GeoExt/*<u></u>*data/PrintProvider.html#**</a><div class="im"><br>
GeoExt.data.PrintProvider&lt;<a href="http://geoext.org/lib/GeoExt/data/PrintProvider.html#GeoExt.data.PrintProvider" target="_blank">http<u></u>://geoext.org/lib/GeoExt/data/<u></u>PrintProvider.html#GeoExt.<u></u>data.PrintProvider</a>&gt;<br>

&gt;this<br>
&gt;&gt;&gt; PrintProvider<br>
&gt;&gt;&gt;    - map - OpenLayers.Map the map being printed<br>
&gt;&gt;&gt;    - pages - Array of<br>
&gt;&gt;&gt; GeoExt.data.PrintPage&lt;<br>
</div><a href="http://geoext.org/lib/GeoExt/**data/PrintPage.html#GeoExt.**" target="_blank">http://geoext.org/lib/GeoExt/*<u></u>*data/PrintPage.html#GeoExt.**</a><div class="im"><br>
data.PrintPage&lt;<a href="http://geoext.org/lib/GeoExt/data/PrintPage.html#GeoExt.data.PrintPage" target="_blank">http://geoext.<u></u>org/lib/GeoExt/data/PrintPage.<u></u>html#GeoExt.data.PrintPage</a>&gt;<br>
&gt;the<br>
&gt;&gt;&gt; print pages being printed<br>
&gt;&gt;&gt;    - options - Object the options to the print command<br>
&gt;&gt;&gt;<br></div>
&gt;&gt;&gt; see: <a href="http://geoext.org/lib/GeoExt/**data/PrintProvider.html" target="_blank">http://geoext.org/lib/GeoExt/*<u></u>*data/PrintProvider.html</a>&lt;<a href="http://geoext.org/lib/GeoExt/data/PrintProvider.html" target="_blank">http:<u></u>//geoext.org/lib/GeoExt/data/<u></u>PrintProvider.html</a>&gt;<div>
<div></div><div class="h5"><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Maybe you check and rearrange your map object here.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Best regards,<br>
&gt;&gt;&gt; Chris<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Am 04.10.2011 19:58, schrieb gbrun:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Hi Hugo,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; As far as I know, printing vector legend is not supported in the<br>
&gt;&gt;&gt; current<br>
&gt;&gt;&gt; GeoExt trunk.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; No idea for your second problem!<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Geoffrey<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Le Tue, 04 Oct 2011 17:15:01 +0200, Hugo &lt;<a href="mailto:hfpmartins@gmail.com" target="_blank">hfpmartins@gmail.com</a>&gt;<br>
&gt;&gt;&gt; &lt;<a href="mailto:hfpmartins@gmail.com" target="_blank">hfpmartins@gmail.com</a>&gt; a écrit:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;  Hello all,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I was able to implement printing using printprovider, printpage and<br>
the<br>
&gt;&gt;&gt; printextent plugin. However i have some small bugs which, untill now,<br>
i<br>
&gt;&gt;&gt; wasn&#39;t able to solve.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; The first problem i&#39;m having is related with printing legends when<br>
&gt;&gt;&gt; having<br>
&gt;&gt;&gt; WFS layers on the map (firebuf is always showing: encFn is<br>
undefined).<br>
&gt;&gt;&gt; I<br>
&gt;&gt;&gt; have checked the encoders part of the prinProvider.js and in fact i<br>
&gt;&gt;&gt; don&#39;t<br>
&gt;&gt;&gt; see WFS there. However there is an encoder for vector layers. So my<br>
&gt;&gt;&gt; first<br>
&gt;&gt;&gt; question would be is it possible to print legends with WFS?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; My second problem is related with layer order. When the app is<br>
loaded,<br>
&gt;&gt;&gt; there<br>
&gt;&gt;&gt; are some initial layers that are loaded (WMS, WFS and TileCache). I<br>
&gt;&gt;&gt; also<br>
&gt;&gt;&gt; have the functionality to allow user to add additional layers<br>
returned<br>
&gt;&gt;&gt; by<br>
&gt;&gt;&gt; WMS capabilities of geoserver. Because i wnated to keep all layers<br>
that<br>
&gt;&gt;&gt; were<br>
&gt;&gt;&gt; initially loaded above all others i&#39;m setting layers ZIndex<br>
dynamically<br>
&gt;&gt;&gt; in<br>
&gt;&gt;&gt; the app. All is working fine when viewing and adding new layers (i<br>
&gt;&gt;&gt; always<br>
&gt;&gt;&gt; get inital loaded layers on top of the added ones). However, when<br>
&gt;&gt;&gt; trying<br>
&gt;&gt;&gt; to<br>
&gt;&gt;&gt; print, the added layers from wms capabilities are always on the top<br>
of<br>
&gt;&gt;&gt; all<br>
&gt;&gt;&gt; others. More interesting is that, after printing, all layers are<br>
&gt;&gt;&gt; magically<br>
&gt;&gt;&gt; rearranged and in fact, the added layers become on top of all the<br>
&gt;&gt;&gt; others.<br>
&gt;&gt;&gt; What property am i missing here???<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Kind regards,<br>
&gt;&gt;&gt; Hugo<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br></div></div>
&gt;&gt;&gt;  ______________________________<u></u>**_________________<br>
&gt;&gt;&gt; Users mailing<br>
&gt;&gt;&gt; listUsers@geoext.orghttp://<br>
<a href="http://www.geoext.org/cgi-bin/**mailman/listinfo/users" target="_blank">www.geoext.org/cgi-bin/**<u></u>mailman/listinfo/users</a>&lt;<a href="http://www.geoext.org/cgi-bin/mailman/listinfo/users" target="_blank">http://<u></u>www.geoext.org/cgi-bin/<u></u>mailman/listinfo/users</a>&gt;<div class="im">
<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; --<br>
&gt;&gt;&gt; Dipl.-Ing.(FH) Christian Mayer<br>
&gt;&gt;&gt;   - Anwendungsentwickler -<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;   terrestris GmbH &amp; Co. KG<br>
&gt;&gt;&gt;   Irmintrudisstraße 17<br>
&gt;&gt;&gt;   53111 Bonn<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;   Tel:    <a href="tel:%2B%2B49%20%280%29228%20%2F%2096%2028%2099%20-53" value="+4922896289953" target="_blank">++49 (0)228 / 96 28 99 -53</a><br>
&gt;&gt;&gt;   Fax:    <a href="tel:%2B%2B49%20%280%29228%20%2F%2096%2028%2099%20-57" value="+4922896289957" target="_blank">++49 (0)228 / 96 28 99 -57</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;   Email:  <a href="mailto:mayer@terrestris.de" target="_blank">mayer@terrestris.de</a><br>
&gt;&gt;&gt;   Web:    <a href="http://www.terrestris.de" target="_blank">http://www.terrestris.de</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;   Amtsgericht Bonn, HRA 6835<br>
&gt;&gt;&gt;   Komplementärin:  terrestris Verwaltungsgesellschaft mbH<br>
&gt;&gt;&gt;   vertreten durch: Hinrich Paulsen, Till Adams<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br></div>
&gt;&gt;&gt; ______________________________<u></u>**_________________<br>
&gt;&gt;&gt; Users mailing list<br>
&gt;&gt;&gt; <a href="mailto:Users@geoext.org" target="_blank">Users@geoext.org</a><br>
&gt;&gt;&gt; <a href="http://www.geoext.org/cgi-bin/**mailman/listinfo/users" target="_blank">http://www.geoext.org/cgi-bin/<u></u>**mailman/listinfo/users</a>&lt;<a href="http://www.geoext.org/cgi-bin/mailman/listinfo/users" target="_blank">http:<u></u>//www.geoext.org/cgi-bin/<u></u>mailman/listinfo/users</a>&gt;<div class="im">
<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; Hugo Martins<br>
&gt;&gt; LabNT - ISEGI UNL<br>
&gt;&gt; Campus de Campolide<br>
&gt;&gt; 1070-312 Lisboa<br>
&gt;&gt; N 38°43&#39;56.84&quot;, W 9°9&#39;35.74&quot;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
<br>
--<br>
--<br>
Geoffrey BRUN<br>
<br>
Étudiant en master SIGMA<br>
Stagiaire au PNR du Haut-Languedoc<br>
<br>
Hameau de Brassac<br>
Saint-Pons de Thomières<br>
<a href="tel:%2B33%20%280%29%206%2077%2074%2044%2016" value="+33677744416" target="_blank">+33 (0) 6 77 74 44 16</a><br></div>
______________________________<u></u>**_________________<br>
Users mailing list<br>
<a href="mailto:Users@geoext.org" target="_blank">Users@geoext.org</a><br>
<a href="http://www.geoext.org/cgi-bin/**mailman/listinfo/users" target="_blank">http://www.geoext.org/cgi-bin/<u></u>**mailman/listinfo/users</a>&lt;<a href="http://www.geoext.org/cgi-bin/mailman/listinfo/users" target="_blank">http:<u></u>//www.geoext.org/cgi-bin/<u></u>mailman/listinfo/users</a>&gt;<br>

<br>
<br>
</blockquote>
<br>
<br>
<br>
</blockquote><div class="im">
<br>
--<br>
--<br>
Geoffrey BRUN<br>
<br>
Étudiant en master SIGMA<br>
Stagiaire au PNR du Haut-Languedoc<br>
<br>
Hameau de Brassac<br>
Saint-Pons de Thomières<br>
<a href="tel:%2B33%20%280%29%206%2077%2074%2044%2016" value="+33677744416" target="_blank">+33 (0) 6 77 74 44 16</a><br>
<br>
</div></blockquote>
<br>
<br>
<br>
</blockquote>
<br>
<br>
-- <br><div><div></div><div class="h5">
-- <br>
Geoffrey BRUN<br>
<br>
Étudiant en master SIGMA<br>
Stagiaire au PNR du Haut-Languedoc<br>
<br>
Hameau de Brassac<br>
Saint-Pons de Thomières<br>
<a href="tel:%2B33%20%280%29%206%2077%2074%2044%2016" value="+33677744416" target="_blank">+33 (0) 6 77 74 44 16</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Hugo Martins<br>LabNT - ISEGI UNL<br>Campus de Campolide<br>1070-312 Lisboa<br>N 38°43&#39;56.84&quot;, W 9°9&#39;35.74&quot;<br>
</div>