mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-01 00:46:20 -05:00
Merge branch 'master' of github.com:qgis/Quantum-GIS
This commit is contained in:
commit
32ea8f9772
@ -29,6 +29,7 @@ Giuseppe Sucameli
|
||||
Horst Duester
|
||||
Hyao (IRC nickname)
|
||||
Ivan Lucena
|
||||
Jaka Kranjc (lynxlynxlynx)
|
||||
Jean-Denis Giguere
|
||||
Jeremy Palmer
|
||||
Jerrit Collord
|
||||
|
@ -1,45 +1,45 @@
|
||||
<style>table {font-size:80%;}th {text-align:left; }.bartodo{ background-color:red;width:100px;height:20px;}.bardone{ background-color:green;width:80px;height:20px;font-size:80%;text-align:center;padding-top:4px;height:16px;color:white;}</style><table><tr><th colspan="2" style="width:250px;">Language</th><th>Finished %</th><th>Translators</th></tr>
|
||||
|
||||
<tr><td><img src="qrc:/images/flags/de.png"></td><td>German</td><td><div title="finished:8385 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:99px">99.6</div></div></td><td>Jürgen E. Fischer, Stephan Holl, Otto Dassau, Werner Macho</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/gl_ES.png"></td><td>Galician (Spain)</td><td><div title="finished:8111 unfinished:114 untranslated:195" class="bartodo"><div class="bardone" style="width:97px">97.0</div></div></td><td>Xan Vieiro</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/it.png"></td><td>Italian</td><td><div title="finished:7741 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:91px">91.9</div></div></td><td>Paolo Cavallini, Flavio Rigolon, Maurizio Napolitano, Roberto Angeletti, Alessandro Fanna, Michele Beneventi, Marco Braida, Luca Casagrande, Luca Delucchi, Anne Gishla</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/ja.png"></td><td>Japanese</td><td><div title="finished:7741 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:91px">91.9</div></div></td><td>BABA Yoshihiko, Yoichi Kayama</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/nl.png"></td><td>Dutch</td><td><div title="finished:7741 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:91px">91.9</div></div></td><td>Richard Duivenvoorde, Raymond Nijssen, Carlo van Rijswijk</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/pl_PL.png"></td><td>Polish (Poland)</td><td><div title="finished:7741 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:91px">91.9</div></div></td><td>Robert Szczepanek, Milena Nowotarska, Borys Jurgiel, Mateusz Loskot, Tomasz Paul, Andrzej Swiader </td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/pt_BR.png"></td><td>Portuguese (Brazil)</td><td><div title="finished:7741 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:91px">91.9</div></div></td><td>Arthur Nanni</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/ru.png"></td><td>Russian</td><td><div title="finished:7741 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:91px">91.9</div></div></td><td>Artem Popov</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/fr.png"></td><td>French</td><td><div title="finished:7736 unfinished:0 untranslated:5" class="bartodo"><div class="bardone" style="width:91px">91.9</div></div></td><td>Eve Rousseau, Marc Monnerat, Lionel Roubeyrie, Jean Roc Morreale, Benjamin Bohard, Jeremy Garniaux, Yves Jacolin, Benjamin Lerre, Stéphane Morel, Marie Silvestre, Tahir Tamba, Xavier M, Mayeul Kauffmann, Mehdi Semchaoui, Robin Cura, Etienne Tourigny, Mathieu Bossaert</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/et_EE.png"></td><td>Estonian (Estonia)</td><td><div title="finished:7639 unfinished:159 untranslated:92" class="bartodo"><div class="bardone" style="width:91px">91.7</div></div></td><td>Veiko Viil</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/es.png"></td><td>Spanish</td><td><div title="finished:7686 unfinished:1 untranslated:54" class="bartodo"><div class="bardone" style="width:91px">91.3</div></div></td><td>Carlos Dávila, Javier César Aldariz, Gabriela Awad, Edwin Amado, Mayeul Kauffmann</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/cs_CZ.png"></td><td>Czech (Czech Republic)</td><td><div title="finished:7666 unfinished:0 untranslated:75" class="bartodo"><div class="bardone" style="width:91px">91.0</div></div></td><td>Martin Landa, Peter Antolik, Martin Dzurov, Jan Helebrant</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/hu.png"></td><td>Hungarian</td><td><div title="finished:7576 unfinished:6 untranslated:159" class="bartodo"><div class="bardone" style="width:90px">90.0</div></div></td><td>Zoltan Siki</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/ko_KR.png"></td><td>Korean (Korea, Republic of)</td><td><div title="finished:7432 unfinished:149 untranslated:271" class="bartodo"><div class="bardone" style="width:89px">89.2</div></div></td><td>BJ Jang</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/sl_SI.png"></td><td>Slovenian (Slovenia)</td><td><div title="finished:7214 unfinished:16 untranslated:511" class="bartodo"><div class="bardone" style="width:85px">85.8</div></div></td><td>Jože Detečnik, Dejan Gregor</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/zh_CN.png"></td><td>Chinese (China)</td><td><div title="finished:6676 unfinished:99 untranslated:1211" class="bartodo"><div class="bardone" style="width:79px">79.9</div></div></td><td>Calvin Ngei, Zhang Jun</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/lv.png"></td><td>Latvian</td><td><div title="finished:6053 unfinished:437 untranslated:1496" class="bartodo"><div class="bardone" style="width:74px">74.5</div></div></td><td>Maris Nartiss, Pēteris Brūns</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/id.png"></td><td>Indonesian</td><td><div title="finished:5027 unfinished:588 untranslated:2126" class="bartodo"><div class="bardone" style="width:63px">63.2</div></div></td><td>Januar V. Simarmata, I Made Anombawa</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/hr_HR.png"></td><td>Croatian (Croatia)</td><td><div title="finished:5157 unfinished:172 untranslated:2412" class="bartodo"><div class="bardone" style="width:62px">62.3</div></div></td><td>Zoran Jankovic</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/sr_CS-Latn.png"></td><td>Serbian ()</td><td><div title="finished:4776 unfinished:844 untranslated:2121" class="bartodo"><div class="bardone" style="width:61px">61.7</div></div></td><td></td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/th.png"></td><td>Thai</td><td><div title="finished:4321 unfinished:800 untranslated:2620" class="bartodo"><div class="bardone" style="width:56px">56.1</div></div></td><td>Man Chao</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/pt_PT.png"></td><td>Portuguese (Portugal)</td><td><div title="finished:2634 unfinished:3944 untranslated:1640" class="bartodo"><div class="bardone" style="width:54px">54.7</div></div></td><td>Giovanni Manghi, Joana Simoes, Duarte Carreira, Alexandre Neto, Pedro Pereira, Pedro Palheiro</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/uk.png"></td><td>Ukrainian</td><td><div title="finished:3710 unfinished:1008 untranslated:3023" class="bartodo"><div class="bardone" style="width:50px">50.0</div></div></td><td>Сергей Якунин</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/tr.png"></td><td>Turkish</td><td><div title="finished:3875 unfinished:613 untranslated:3253" class="bartodo"><div class="bardone" style="width:49px">49.7</div></div></td><td>Osman Yilmaz</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/zh_TW.png"></td><td>Chinese (Taiwan, Province of China)</td><td><div title="finished:2545 unfinished:2466 untranslated:2903" class="bartodo"><div class="bardone" style="width:44px">44.9</div></div></td><td>Nung-yao Lin</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/vi.png"></td><td>Vietnamese</td><td><div title="finished:2936 unfinished:1309 untranslated:3496" class="bartodo"><div class="bardone" style="width:42px">42.6</div></div></td><td>Bùi Hữu Mạnh</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/el_GR.png"></td><td>Greek, Modern (1453-) (Greece)</td><td><div title="finished:3053 unfinished:730 untranslated:3958" class="bartodo"><div class="bardone" style="width:40px">40.6</div></div></td><td>Evripidis Argyropoulos, Mike Pegnigiannis, Nikos Ves</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/is.png"></td><td>Icelandic</td><td><div title="finished:2966 unfinished:418 untranslated:4357" class="bartodo"><div class="bardone" style="width:37px">37.7</div></div></td><td>Thordur Ivarsson</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/mn.png"></td><td>Mongolian</td><td><div title="finished:2609 unfinished:861 untranslated:4271" class="bartodo"><div class="bardone" style="width:36px">36.1</div></div></td><td>Bayarmaa Enkhtur</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/sv.png"></td><td>Swedish</td><td><div title="finished:1938 unfinished:1582 untranslated:4787" class="bartodo"><div class="bardone" style="width:32px">32.4</div></div></td><td>Lars Luthman, Magnus Homann</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/fi.png"></td><td>Finnish</td><td><div title="finished:1586 unfinished:1085 untranslated:5070" class="bartodo"><div class="bardone" style="width:25px">25.3</div></div></td><td>Marko Jarvenpaa</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/da_DK.png"></td><td>Danish (Denmark)</td><td><div title="finished:1767 unfinished:708 untranslated:5511" class="bartodo"><div class="bardone" style="width:25px">25.2</div></div></td><td>Preben Lisby</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/ka_GE.png"></td><td>Georgian (Georgia)</td><td><div title="finished:1372 unfinished:1296 untranslated:5073" class="bartodo"><div class="bardone" style="width:23px">24.0</div></div></td><td>Shota Murtskhvaladze, George Machitidze</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/bg.png"></td><td>Bulgarian</td><td><div title="finished:1075 unfinished:1513 untranslated:5458" class="bartodo"><div class="bardone" style="width:21px">21.8</div></div></td><td>Захари Савов, Jordan Tzvetkov</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/sk.png"></td><td>Slovak</td><td><div title="finished:770 unfinished:1865 untranslated:5106" class="bartodo"><div class="bardone" style="width:20px">20.2</div></div></td><td>Lubos Balazovic</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/sq_AL.png"></td><td>Albanian (Albania)</td><td><div title="finished:883 unfinished:1228 untranslated:5630" class="bartodo"><div class="bardone" style="width:17px">17.8</div></div></td><td></td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/lo.png"></td><td>Lao</td><td><div title="finished:437 unfinished:1547 untranslated:5757" class="bartodo"><div class="bardone" style="width:14px">14.4</div></div></td><td>Anousak Souphavanh</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/de.png"></td><td>German</td><td><div title="finished:8454 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:100px">100.0</div></div></td><td>Jürgen E. Fischer, Stephan Holl, Otto Dassau, Werner Macho</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/gl_ES.png"></td><td>Galician (Spain)</td><td><div title="finished:8111 unfinished:114 untranslated:195" class="bartodo"><div class="bardone" style="width:96px">96.6</div></div></td><td>Xan Vieiro</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/it.png"></td><td>Italian</td><td><div title="finished:7741 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:91px">91.6</div></div></td><td>Paolo Cavallini, Flavio Rigolon, Maurizio Napolitano, Roberto Angeletti, Alessandro Fanna, Michele Beneventi, Marco Braida, Luca Casagrande, Luca Delucchi, Anne Gishla</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/ja.png"></td><td>Japanese</td><td><div title="finished:7741 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:91px">91.6</div></div></td><td>BABA Yoshihiko, Yoichi Kayama</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/nl.png"></td><td>Dutch</td><td><div title="finished:7741 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:91px">91.6</div></div></td><td>Richard Duivenvoorde, Raymond Nijssen, Carlo van Rijswijk</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/pl_PL.png"></td><td>Polish (Poland)</td><td><div title="finished:7741 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:91px">91.6</div></div></td><td>Robert Szczepanek, Milena Nowotarska, Borys Jurgiel, Mateusz Loskot, Tomasz Paul, Andrzej Swiader </td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/pt_BR.png"></td><td>Portuguese (Brazil)</td><td><div title="finished:7741 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:91px">91.6</div></div></td><td>Arthur Nanni</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/ru.png"></td><td>Russian</td><td><div title="finished:7741 unfinished:0 untranslated:0" class="bartodo"><div class="bardone" style="width:91px">91.6</div></div></td><td>Artem Popov</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/fr.png"></td><td>French</td><td><div title="finished:7736 unfinished:0 untranslated:5" class="bartodo"><div class="bardone" style="width:91px">91.5</div></div></td><td>Eve Rousseau, Marc Monnerat, Lionel Roubeyrie, Jean Roc Morreale, Benjamin Bohard, Jeremy Garniaux, Yves Jacolin, Benjamin Lerre, Stéphane Morel, Marie Silvestre, Tahir Tamba, Xavier M, Mayeul Kauffmann, Mehdi Semchaoui, Robin Cura, Etienne Tourigny, Mathieu Bossaert</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/et_EE.png"></td><td>Estonian (Estonia)</td><td><div title="finished:7639 unfinished:159 untranslated:92" class="bartodo"><div class="bardone" style="width:91px">91.3</div></div></td><td>Veiko Viil</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/es.png"></td><td>Spanish</td><td><div title="finished:7686 unfinished:1 untranslated:54" class="bartodo"><div class="bardone" style="width:90px">90.9</div></div></td><td>Carlos Dávila, Javier César Aldariz, Gabriela Awad, Edwin Amado, Mayeul Kauffmann</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/cs_CZ.png"></td><td>Czech (Czech Republic)</td><td><div title="finished:7666 unfinished:0 untranslated:75" class="bartodo"><div class="bardone" style="width:90px">90.7</div></div></td><td>Martin Landa, Peter Antolik, Martin Dzurov, Jan Helebrant</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/hu.png"></td><td>Hungarian</td><td><div title="finished:7576 unfinished:6 untranslated:159" class="bartodo"><div class="bardone" style="width:89px">89.6</div></div></td><td>Zoltan Siki</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/ko_KR.png"></td><td>Korean (Korea, Republic of)</td><td><div title="finished:7432 unfinished:149 untranslated:271" class="bartodo"><div class="bardone" style="width:88px">88.8</div></div></td><td>BJ Jang</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/sl_SI.png"></td><td>Slovenian (Slovenia)</td><td><div title="finished:7214 unfinished:16 untranslated:511" class="bartodo"><div class="bardone" style="width:85px">85.4</div></div></td><td>Jože Detečnik, Dejan Gregor</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/zh_CN.png"></td><td>Chinese (China)</td><td><div title="finished:6676 unfinished:99 untranslated:1211" class="bartodo"><div class="bardone" style="width:79px">79.6</div></div></td><td>Calvin Ngei, Zhang Jun</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/lv.png"></td><td>Latvian</td><td><div title="finished:6053 unfinished:437 untranslated:1496" class="bartodo"><div class="bardone" style="width:74px">74.2</div></div></td><td>Maris Nartiss, Pēteris Brūns</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/id.png"></td><td>Indonesian</td><td><div title="finished:5027 unfinished:588 untranslated:2126" class="bartodo"><div class="bardone" style="width:62px">62.9</div></div></td><td>Januar V. Simarmata, I Made Anombawa</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/hr_HR.png"></td><td>Croatian (Croatia)</td><td><div title="finished:5157 unfinished:172 untranslated:2412" class="bartodo"><div class="bardone" style="width:62px">62.0</div></div></td><td>Zoran Jankovic</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/sr_CS-Latn.png"></td><td>Serbian ()</td><td><div title="finished:4776 unfinished:844 untranslated:2121" class="bartodo"><div class="bardone" style="width:61px">61.5</div></div></td><td></td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/th.png"></td><td>Thai</td><td><div title="finished:4321 unfinished:800 untranslated:2620" class="bartodo"><div class="bardone" style="width:55px">55.8</div></div></td><td>Man Chao</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/pt_PT.png"></td><td>Portuguese (Portugal)</td><td><div title="finished:2634 unfinished:3944 untranslated:1640" class="bartodo"><div class="bardone" style="width:54px">54.5</div></div></td><td>Giovanni Manghi, Joana Simoes, Duarte Carreira, Alexandre Neto, Pedro Pereira, Pedro Palheiro</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/uk.png"></td><td>Ukrainian</td><td><div title="finished:3710 unfinished:1008 untranslated:3023" class="bartodo"><div class="bardone" style="width:49px">49.8</div></div></td><td>Сергей Якунин</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/tr.png"></td><td>Turkish</td><td><div title="finished:3875 unfinished:613 untranslated:3253" class="bartodo"><div class="bardone" style="width:49px">49.5</div></div></td><td>Osman Yilmaz</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/zh_TW.png"></td><td>Chinese (Taiwan, Province of China)</td><td><div title="finished:2545 unfinished:2466 untranslated:2903" class="bartodo"><div class="bardone" style="width:44px">44.7</div></div></td><td>Nung-yao Lin</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/vi.png"></td><td>Vietnamese</td><td><div title="finished:2936 unfinished:1309 untranslated:3496" class="bartodo"><div class="bardone" style="width:42px">42.5</div></div></td><td>Bùi Hữu Mạnh</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/el_GR.png"></td><td>Greek, Modern (1453-) (Greece)</td><td><div title="finished:3053 unfinished:730 untranslated:3958" class="bartodo"><div class="bardone" style="width:40px">40.4</div></div></td><td>Evripidis Argyropoulos, Mike Pegnigiannis, Nikos Ves</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/is.png"></td><td>Icelandic</td><td><div title="finished:2966 unfinished:418 untranslated:4357" class="bartodo"><div class="bardone" style="width:37px">37.6</div></div></td><td>Thordur Ivarsson</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/mn.png"></td><td>Mongolian</td><td><div title="finished:2609 unfinished:861 untranslated:4271" class="bartodo"><div class="bardone" style="width:35px">36.0</div></div></td><td>Bayarmaa Enkhtur</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/sv.png"></td><td>Swedish</td><td><div title="finished:1938 unfinished:1582 untranslated:4787" class="bartodo"><div class="bardone" style="width:32px">32.3</div></div></td><td>Lars Luthman, Magnus Homann</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/fi.png"></td><td>Finnish</td><td><div title="finished:1586 unfinished:1085 untranslated:5070" class="bartodo"><div class="bardone" style="width:25px">25.2</div></div></td><td>Marko Jarvenpaa</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/da_DK.png"></td><td>Danish (Denmark)</td><td><div title="finished:1767 unfinished:708 untranslated:5511" class="bartodo"><div class="bardone" style="width:25px">25.1</div></div></td><td>Preben Lisby</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/ka_GE.png"></td><td>Georgian (Georgia)</td><td><div title="finished:1372 unfinished:1296 untranslated:5073" class="bartodo"><div class="bardone" style="width:23px">23.9</div></div></td><td>Shota Murtskhvaladze, George Machitidze</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/bg.png"></td><td>Bulgarian</td><td><div title="finished:1075 unfinished:1513 untranslated:5458" class="bartodo"><div class="bardone" style="width:21px">21.7</div></div></td><td>Захари Савов, Jordan Tzvetkov</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/sk.png"></td><td>Slovak</td><td><div title="finished:770 unfinished:1865 untranslated:5106" class="bartodo"><div class="bardone" style="width:20px">20.1</div></div></td><td>Lubos Balazovic</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/sq_AL.png"></td><td>Albanian (Albania)</td><td><div title="finished:883 unfinished:1228 untranslated:5630" class="bartodo"><div class="bardone" style="width:17px">17.7</div></div></td><td></td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/lo.png"></td><td>Lao</td><td><div title="finished:437 unfinished:1547 untranslated:5757" class="bartodo"><div class="bardone" style="width:14px">14.3</div></div></td><td>Anousak Souphavanh</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/ro.png"></td><td>Romanian</td><td><div title="finished:218 unfinished:966 untranslated:6557" class="bartodo"><div class="bardone" style="width:8px">8.3</div></div></td><td>Lonut Losifescu-Enescu</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/fa.png"></td><td>Persian</td><td><div title="finished:255 unfinished:291 untranslated:7195" class="bartodo"><div class="bardone" style="width:4px">4.8</div></div></td><td>Mola Pahnadayan</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/af.png"></td><td>Afrikaans</td><td><div title="finished:0 unfinished:337 untranslated:7404" class="bartodo"><div class="bardone" style="width:2px">2.0</div></div></td><td>Hendrik Bosman</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/fa.png"></td><td>Persian</td><td><div title="finished:255 unfinished:291 untranslated:7195" class="bartodo"><div class="bardone" style="width:4px">4.7</div></div></td><td>Mola Pahnadayan</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/af.png"></td><td>Afrikaans</td><td><div title="finished:0 unfinished:337 untranslated:7404" class="bartodo"><div class="bardone" style="width:1px">2.0</div></div></td><td>Hendrik Bosman</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/ar.png"></td><td>Arabic</td><td><div title="finished:49 unfinished:234 untranslated:7458" class="bartodo"><div class="bardone" style="width:1px">2.0</div></div></td><td>Assem Kamal, Latif Jalil</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/lt.png"></td><td>Lithuanian</td><td><div title="finished:6 unfinished:107 untranslated:7628" class="bartodo"><div class="bardone" style="width:0px">0.7</div></div></td><td>Kestas M</td></tr>
|
||||
<tr><td><img src="qrc:/images/flags/ca_ES.png"></td><td>Catalan (Spain)</td><td><div title="finished:10 unfinished:1 untranslated:7730" class="bartodo"><div class="bardone" style="width:0px">0.1</div></div></td><td>Xavi</td></tr>
|
||||
|
3331
i18n/qgis_de.ts
3331
i18n/qgis_de.ts
File diff suppressed because it is too large
Load Diff
@ -56,7 +56,7 @@ class QgsRectangle
|
||||
//! Scale the rectangle around its center point
|
||||
void scale(double, const QgsPoint *c =0);
|
||||
//! Expand the rectangle to support zoom out scaling
|
||||
// @deprecated use scale instead
|
||||
// @deprecated in 1.9 use scale instead
|
||||
void expand(double, const QgsPoint *c = 0) /Deprecated/;
|
||||
//! return the intersection with the given rectangle
|
||||
QgsRectangle intersect(const QgsRectangle *rect);
|
||||
|
19
resources/function_help/coalesce-en_US
Normal file
19
resources/function_help/coalesce-en_US
Normal file
@ -0,0 +1,19 @@
|
||||
<h3>coalesce() function</h3>
|
||||
Returns the first non-NULL value from the expression list.
|
||||
<br>
|
||||
This function can take any number of arguments.
|
||||
<h4>Syntax</h4>
|
||||
<code>coalesce(expression1, expression2 ...)</code><br>
|
||||
|
||||
<h4>Arguments</h4>
|
||||
<code>expression</code> - any valid expression or value, irregardless of type.
|
||||
<br>
|
||||
|
||||
<h4>Example</h4>
|
||||
<!-- Show example of function.-->
|
||||
<code>coalesce(NULL, 2) → 2</code><br>
|
||||
<code>coalesce(NULL, 2, 3) → 2</code><br>
|
||||
<code>coalesce(7, NULL, 3*2) → 7</code><br><br>
|
||||
<code>coalesce("fieldA", "fallbackField", 'ERROR') → value of fieldA if it is non-NULL
|
||||
else the value of "fallbackField" or the string 'ERROR' if both are NULL</code><br>
|
||||
|
@ -219,7 +219,7 @@ void QwtPolarCanvas::drawContents( QPainter *painter )
|
||||
}
|
||||
|
||||
/*!
|
||||
Draw the the canvas
|
||||
Draw the canvas
|
||||
|
||||
Paints all plot items to the canvasRect, using QwtPolarPlot::drawCanvas
|
||||
and updates the paint cache.
|
||||
|
@ -117,13 +117,13 @@ class QWT_POLAR_EXPORT QwtPolarCurve: public QwtPolarItem
|
||||
PrivateData *d_data;
|
||||
};
|
||||
|
||||
//! \return the the curve data
|
||||
//! \return the curve data
|
||||
inline QwtData &QwtPolarCurve::data()
|
||||
{
|
||||
return *d_points;
|
||||
}
|
||||
|
||||
//! \return the the curve data
|
||||
//! \return the curve data
|
||||
inline const QwtData &QwtPolarCurve::data() const
|
||||
{
|
||||
return *d_points;
|
||||
|
@ -143,7 +143,7 @@ private:
|
||||
PrivateData *d_data;
|
||||
};
|
||||
|
||||
//! \return the the curve data
|
||||
//! \return the curve data
|
||||
inline const QwtSeriesData<QwtPointPolar> *QwtPolarCurve::data() const
|
||||
{
|
||||
return d_series;
|
||||
|
@ -290,7 +290,7 @@ const int AFTER_RECENT_PATHS = 321;
|
||||
if the project file is null then
|
||||
set title text to just application name and version
|
||||
else
|
||||
set set title text to the the project file name
|
||||
set set title text to the project file name
|
||||
else
|
||||
set the title text to project title
|
||||
*/
|
||||
@ -511,9 +511,9 @@ QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, QWidget * parent,
|
||||
|
||||
// create the notification widget for macros
|
||||
mMacrosWarn = QgsMessageBar::createMessage( tr( "Security warning:" ),
|
||||
tr( "macros have been disabled." ),
|
||||
QgsApplication::getThemeIcon( "/mIconWarn.png" ),
|
||||
mInfoBar );
|
||||
tr( "macros have been disabled." ),
|
||||
QgsApplication::getThemeIcon( "/mIconWarn.png" ),
|
||||
mInfoBar );
|
||||
|
||||
QToolButton *btnEnableMacros = new QToolButton( mMacrosWarn );
|
||||
btnEnableMacros->setText( tr( "Enable" ) );
|
||||
|
@ -607,7 +607,7 @@ void QgsAttributeTypeDialog::accept()
|
||||
mValueRelationData.mAllowNull = valueRelationAllowNull->isChecked();
|
||||
mValueRelationData.mOrderByValue = valueRelationOrderByValue->isChecked();
|
||||
mValueRelationData.mAllowMulti = valueRelationAllowMulti->isChecked();
|
||||
if( valueRelationFilterColumn->currentIndex() == 0 )
|
||||
if ( valueRelationFilterColumn->currentIndex() == 0 )
|
||||
{
|
||||
mValueRelationData.mFilterAttributeColumn = QString::null;
|
||||
mValueRelationData.mFilterAttributeValue = QString::null;
|
||||
@ -655,7 +655,7 @@ void QgsAttributeTypeDialog::updateLayerColumns( int idx )
|
||||
valueRelationKeyColumn->setCurrentIndex( valueRelationKeyColumn->findText( mValueRelationData.mKey ) );
|
||||
valueRelationValueColumn->setCurrentIndex( valueRelationValueColumn->findText( mValueRelationData.mValue ) );
|
||||
|
||||
if( mValueRelationData.mFilterAttributeColumn.isNull() )
|
||||
if ( mValueRelationData.mFilterAttributeColumn.isNull() )
|
||||
{
|
||||
valueRelationFilterColumn->setCurrentIndex( 0 );
|
||||
}
|
||||
@ -683,7 +683,7 @@ void QgsAttributeTypeDialog::updateFilterColumn( int idx )
|
||||
QList<QVariant> uniqueValues;
|
||||
vl->uniqueValues( fidx, uniqueValues );
|
||||
|
||||
foreach( const QVariant &v, uniqueValues )
|
||||
foreach ( const QVariant &v, uniqueValues )
|
||||
{
|
||||
valueRelationFilterValue->addItem( v.toString(), v );
|
||||
}
|
||||
|
@ -376,6 +376,7 @@ void QgsDiagramProperties::on_mAddCategoryPushButton_clicked()
|
||||
|
||||
void QgsDiagramProperties::on_mAttributesTreeWidget_itemDoubleClicked( QTreeWidgetItem * item, int column )
|
||||
{
|
||||
Q_UNUSED( column );
|
||||
addAttribute( item );
|
||||
}
|
||||
|
||||
@ -480,7 +481,7 @@ void QgsDiagramProperties::apply()
|
||||
if ( !mFixedSizeCheckBox->isChecked() && !scaleAttributeValueIsNumeric )
|
||||
{
|
||||
QMessageBox::warning( this, tr( "No attribute value specified" ),
|
||||
tr( "You did not specify a maximum value for the diagram size. Please specify the the attribute and a reference value as a base for scaling in the Tab Diagram / Size." ), QMessageBox::Ok );
|
||||
tr( "You did not specify a maximum value for the diagram size. Please specify the attribute and a reference value as a base for scaling in the Tab Diagram / Size." ), QMessageBox::Ok );
|
||||
}
|
||||
|
||||
QgsDiagram* diagram = 0;
|
||||
|
@ -39,7 +39,7 @@ namespace QgsMapToolSelectUtils
|
||||
must be in terms of the canvas coordinate system.
|
||||
@param doContains Features will only be selected if contained within the
|
||||
selection rubber band.
|
||||
@param doDifference Take the symmetric difference of the the current selected
|
||||
@param doDifference Take the symmetric difference of the current selected
|
||||
features and the new features found within the provided selectGeometry.
|
||||
@param singleSelect Only selects the closest feature to the selectGeometry.
|
||||
*/
|
||||
|
@ -40,7 +40,7 @@ class QgsMeasureTool : public QgsMapTool
|
||||
//! returns whether measuring distance or area
|
||||
bool measureArea() { return mMeasureArea; }
|
||||
|
||||
//! When we hvae added our last point, and not following
|
||||
//! When we have added our last point, and not following
|
||||
// Added in 2.0
|
||||
bool done() { return mDone; }
|
||||
|
||||
|
@ -57,7 +57,7 @@ QgsTipFactory::QgsTipFactory() : QObject()
|
||||
myTip.setContent( tr( "If you need help using QGIS"
|
||||
" we have a 'users' mailing list where users help each other with issues"
|
||||
" related to using our sofware. We also have a 'developers' mailing list."
|
||||
" for those wanting help and to discuss things relating the the QGIS code base."
|
||||
" for those wanting help and to discuss things relating to the QGIS code base."
|
||||
" Details on how to subscribe are in the <a href=\"http://www.qgis.org/en/community/mailing-lists.html\">community section</a> of"
|
||||
" the QGIS home page (http://www.qgis.org/en/community/mailing-lists.html)."
|
||||
) );
|
||||
|
@ -180,7 +180,7 @@ class CORE_EXPORT QgsComposerLegend: public QgsComposerItem
|
||||
QStringList layerIdList() const;
|
||||
|
||||
private:
|
||||
/** Splits a string using the the wrap char taking into account handling empty
|
||||
/** Splits a string using the wrap char taking into account handling empty
|
||||
wrap char which means no wrapping */
|
||||
QStringList splitStringForWrapping( QString stringToSplt );
|
||||
};
|
||||
|
@ -242,15 +242,15 @@ void QgsComposerScaleBar::applyDefaultSize()
|
||||
int nUnitsPerSegment = widthMeter / 10.0; //default scalebar width equals half the map width
|
||||
setNumUnitsPerSegment( nUnitsPerSegment );
|
||||
|
||||
if( nUnitsPerSegment > 1000 )
|
||||
if ( nUnitsPerSegment > 1000 )
|
||||
{
|
||||
setNumUnitsPerSegment( (int)( numUnitsPerSegment() / 1000.0 + 0.5 ) * 1000 );
|
||||
setUnitLabeling( tr("km") );
|
||||
setNumMapUnitsPerScaleBarUnit( 1000 );
|
||||
setNumUnitsPerSegment(( int )( numUnitsPerSegment() / 1000.0 + 0.5 ) * 1000 );
|
||||
setUnitLabeling( tr( "km" ) );
|
||||
setNumMapUnitsPerScaleBarUnit( 1000 );
|
||||
}
|
||||
else
|
||||
{
|
||||
setUnitLabeling( tr("m") );
|
||||
setUnitLabeling( tr( "m" ) );
|
||||
}
|
||||
|
||||
setNumSegments( 4 );
|
||||
|
@ -158,7 +158,9 @@ class CORE_EXPORT QgsComposition: public QGraphicsScene
|
||||
|
||||
/**Load a template document
|
||||
@param doc template document
|
||||
@param substitutionMap map with text to replace. Text needs to be enclosed by brackets (e.g. '[text]' )*/
|
||||
@param substitutionMap map with text to replace. Text needs to be enclosed by brackets (e.g. '[text]' )
|
||||
@param addUndoCommands whether or not to add undo commands
|
||||
*/
|
||||
bool loadFromTemplate( const QDomDocument& doc, QMap<QString, QString>* substitutionMap = 0, bool addUndoCommands = false );
|
||||
|
||||
/**Add items from XML representation to the graphics scene (for project file reading, pasting items from clipboard)
|
||||
|
@ -73,7 +73,7 @@ QRectF QgsNumericScaleBarStyle::calculateBoxSize() const
|
||||
|
||||
if ( mLastScaleBarWidth != rect.width() && mLastScaleBarWidth > 0 && rect.width() > 0 )
|
||||
{
|
||||
//hack to move scale bar the the left / right in order to keep the bar alignment
|
||||
//hack to move scale bar the left / right in order to keep the bar alignment
|
||||
const_cast<QgsComposerScaleBar*>( mScaleBar )->correctXPositionAlignment( mLastScaleBarWidth, rect.width() );
|
||||
}
|
||||
mLastScaleBarWidth = rect.width();
|
||||
|
@ -40,7 +40,7 @@ QSizeF QgsTextDiagram::diagramSize( const QgsAttributeMap& attributes, const Qgs
|
||||
{
|
||||
return QSizeF(); //zero size if attribute is missing
|
||||
}
|
||||
|
||||
|
||||
double scaledValue = attIt.value().toDouble();
|
||||
double scaledLowerValue = is.lowerValue;
|
||||
double scaledUpperValue = is.upperValue;
|
||||
@ -77,11 +77,11 @@ QSizeF QgsTextDiagram::diagramSize( const QgsAttributeMap& attributes, const Qgs
|
||||
}
|
||||
|
||||
QSizeF QgsTextDiagram::diagramSize( const QgsAttributeMap& attributes, const QgsRenderContext& c, const QgsDiagramSettings& s )
|
||||
{
|
||||
{
|
||||
Q_UNUSED( c );
|
||||
Q_UNUSED( attributes );
|
||||
Q_UNUSED( attributes );
|
||||
|
||||
return s.size;
|
||||
return s.size;
|
||||
}
|
||||
|
||||
void QgsTextDiagram::renderDiagram( const QgsAttributeMap& att, QgsRenderContext& c, const QgsDiagramSettings& s, const QPointF& position )
|
||||
@ -218,11 +218,11 @@ void QgsTextDiagram::renderDiagram( const QgsAttributeMap& att, QgsRenderContext
|
||||
mPen.setColor( s.categoryColors.at( i ) );
|
||||
p->setPen( mPen );
|
||||
QPointF position = textPositions.at( i );
|
||||
|
||||
|
||||
// Calculate vertical placement
|
||||
double xOffset = 0;
|
||||
|
||||
switch( s.labelPlacementMethod )
|
||||
switch ( s.labelPlacementMethod )
|
||||
{
|
||||
case QgsDiagramSettings::Height:
|
||||
xOffset = textHeight / 2.0;
|
||||
|
@ -47,7 +47,7 @@ namespace pal
|
||||
* \brief get the GEOSGeometry of the feature
|
||||
* This method is called by Pal each time it needs a geom's coordinates
|
||||
*
|
||||
* @return GEOSGeometry * a pointer the the geos geom
|
||||
* @return GEOSGeometry * a pointer the geos geom
|
||||
*/
|
||||
virtual GEOSGeometry* getGeosGeometry() = 0;
|
||||
|
||||
|
@ -91,10 +91,10 @@ void QgsApplication::init( QString customConfigPath )
|
||||
|
||||
// check if QGIS is run from build directory (not the install directory)
|
||||
QFile f;
|
||||
foreach( QString path, QStringList() << "" << "/.." << "/bin" )
|
||||
foreach ( QString path, QStringList() << "" << "/.." << "/bin" )
|
||||
{
|
||||
f.setFileName( prefixPath + path + "/path.txt" );
|
||||
if( f.exists() )
|
||||
if ( f.exists() )
|
||||
break;
|
||||
}
|
||||
if ( f.exists() && f.open( QIODevice::ReadOnly ) )
|
||||
|
@ -280,7 +280,7 @@ class CORE_EXPORT QgsDataProvider : public QObject
|
||||
return "";
|
||||
}
|
||||
|
||||
/**Reloads the data from the the source. Needs to be implemented by providers with data caches to
|
||||
/**Reloads the data from the source. Needs to be implemented by providers with data caches to
|
||||
synchronize with changes in the data source*/
|
||||
virtual void reloadData() {}
|
||||
|
||||
|
@ -1,275 +1,275 @@
|
||||
/***************************************************************************
|
||||
qgsdiagramrendererv2.h
|
||||
---------------------
|
||||
begin : March 2011
|
||||
copyright : (C) 2011 by Marco Hugentobler
|
||||
email : marco dot hugentobler at sourcepole dot ch
|
||||
***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
#ifndef QGSDIAGRAMRENDERERV2_H
|
||||
#define QGSDIAGRAMRENDERERV2_H
|
||||
|
||||
#include <QColor>
|
||||
#include <QFont>
|
||||
#include <QList>
|
||||
#include <QPointF>
|
||||
#include <QSizeF>
|
||||
#include "qgsfeature.h"
|
||||
#include "qgspallabeling.h"
|
||||
|
||||
class QgsDiagram;
|
||||
class QgsDiagramRendererV2;
|
||||
class QgsFeature;
|
||||
class QgsRenderContext;
|
||||
class QDomElement;
|
||||
namespace pal { class Layer; }
|
||||
|
||||
struct CORE_EXPORT QgsDiagramLayerSettings
|
||||
{
|
||||
//avoid inclusion of QgsPalLabeling
|
||||
enum Placement
|
||||
{
|
||||
AroundPoint = 0, // Point / Polygon
|
||||
OverPoint, // Point / Polygon
|
||||
Line, // Line / Polygon
|
||||
Curved, // Line
|
||||
Horizontal, // Polygon
|
||||
Free // Polygon
|
||||
};
|
||||
|
||||
enum LinePlacementFlags
|
||||
{
|
||||
OnLine = 1,
|
||||
AboveLine = 2,
|
||||
BelowLine = 4,
|
||||
MapOrientation = 8
|
||||
};
|
||||
|
||||
QgsDiagramLayerSettings()
|
||||
: placement( AroundPoint )
|
||||
, placementFlags( OnLine )
|
||||
, priority( 5 )
|
||||
, obstacle( false )
|
||||
, dist( 0.0 )
|
||||
, renderer( 0 )
|
||||
, palLayer( 0 )
|
||||
, ct( 0 )
|
||||
, xform( 0 )
|
||||
, xPosColumn( -1 )
|
||||
, yPosColumn( -1 )
|
||||
{
|
||||
}
|
||||
|
||||
//pal placement properties
|
||||
Placement placement;
|
||||
LinePlacementFlags placementFlags;
|
||||
int priority; // 0 = low, 10 = high
|
||||
bool obstacle; // whether it's an obstacle
|
||||
double dist; // distance from the feature (in mm)
|
||||
QgsDiagramRendererV2* renderer;
|
||||
|
||||
//assigned when layer gets prepared
|
||||
pal::Layer* palLayer;
|
||||
const QgsCoordinateTransform* ct;
|
||||
const QgsMapToPixel* xform;
|
||||
QList<QgsPalGeometry*> geometries;
|
||||
|
||||
int xPosColumn; //attribute index for x coordinate (or -1 if position not data defined)
|
||||
int yPosColumn;//attribute index for y coordinate (or -1 if position not data defined)
|
||||
|
||||
void readXML( const QDomElement& elem );
|
||||
void writeXML( QDomElement& layerElem, QDomDocument& doc ) const;
|
||||
};
|
||||
|
||||
//diagram settings for rendering
|
||||
struct CORE_EXPORT QgsDiagramSettings
|
||||
{
|
||||
enum SizeType
|
||||
{
|
||||
MM,
|
||||
MapUnits
|
||||
};
|
||||
|
||||
enum LabelPlacementMethod
|
||||
{
|
||||
Height,
|
||||
XHeight
|
||||
};
|
||||
|
||||
//! Orientation of histogram
|
||||
enum DiagramOrientation
|
||||
{
|
||||
Up,
|
||||
Down,
|
||||
Left,
|
||||
Right
|
||||
};
|
||||
|
||||
QgsDiagramSettings(): sizeType( MM ), minScaleDenominator( -1 ), maxScaleDenominator( -1 )
|
||||
{}
|
||||
QFont font;
|
||||
QList< QColor > categoryColors;
|
||||
QList< int > categoryIndices;
|
||||
QSizeF size; //size
|
||||
SizeType sizeType; //mm or map units
|
||||
QColor backgroundColor;
|
||||
QColor penColor;
|
||||
double penWidth;
|
||||
LabelPlacementMethod labelPlacementMethod;
|
||||
DiagramOrientation diagramOrientation;
|
||||
double barWidth;
|
||||
int transparency; // 0 - 100
|
||||
bool scaleByArea;
|
||||
|
||||
//scale range (-1 if no lower / upper bound )
|
||||
double minScaleDenominator;
|
||||
double maxScaleDenominator;
|
||||
|
||||
//! Scale diagrams smaller than mMinimumSize to mMinimumSize
|
||||
double minimumSize;
|
||||
|
||||
void readXML( const QDomElement& elem );
|
||||
void writeXML( QDomElement& rendererElem, QDomDocument& doc ) const;
|
||||
};
|
||||
|
||||
//additional diagram settings for interpolated size rendering
|
||||
struct CORE_EXPORT QgsDiagramInterpolationSettings
|
||||
{
|
||||
QSizeF lowerSize;
|
||||
QSizeF upperSize;
|
||||
double lowerValue;
|
||||
double upperValue;
|
||||
/**Index of the classification attribute*/
|
||||
int classificationAttribute;
|
||||
};
|
||||
|
||||
/**Returns diagram settings for a feature*/
|
||||
class CORE_EXPORT QgsDiagramRendererV2
|
||||
{
|
||||
public:
|
||||
|
||||
QgsDiagramRendererV2();
|
||||
virtual ~QgsDiagramRendererV2();
|
||||
|
||||
/**Returns size of the diagram for feature f in map units. Returns an invalid QSizeF in case of error*/
|
||||
virtual QSizeF sizeMapUnits( const QgsAttributeMap& attributes, const QgsRenderContext& c );
|
||||
|
||||
virtual QString rendererName() const = 0;
|
||||
|
||||
/**Returns attribute indices needed for diagram rendering*/
|
||||
virtual QList<int> diagramAttributes() const = 0;
|
||||
|
||||
void renderDiagram( const QgsAttributeMap& att, QgsRenderContext& c, const QPointF& pos );
|
||||
|
||||
void setDiagram( QgsDiagram* d );
|
||||
const QgsDiagram* diagram() const { return mDiagram; }
|
||||
|
||||
/**Returns list with all diagram settings in the renderer*/
|
||||
virtual QList<QgsDiagramSettings> diagramSettings() const = 0;
|
||||
|
||||
virtual void readXML( const QDomElement& elem ) = 0;
|
||||
virtual void writeXML( QDomElement& layerElem, QDomDocument& doc ) const = 0;
|
||||
|
||||
protected:
|
||||
|
||||
/**Returns diagram settings for a feature (or false if the diagram for the feature is not to be rendered). Used internally within renderDiagram()
|
||||
* @param att attribute map
|
||||
* @param c render context
|
||||
* @param s out: diagram settings for the feature
|
||||
*/
|
||||
virtual bool diagramSettings( const QgsAttributeMap& att, const QgsRenderContext& c, QgsDiagramSettings& s ) = 0;
|
||||
|
||||
/**Returns size of the diagram (in painter units) or an invalid size in case of error*/
|
||||
virtual QSizeF diagramSize( const QgsAttributeMap& attributes, const QgsRenderContext& c ) = 0;
|
||||
|
||||
/**Converts size from mm to map units*/
|
||||
void convertSizeToMapUnits( QSizeF& size, const QgsRenderContext& context ) const;
|
||||
|
||||
/**Returns the paint device dpi (or -1 in case of error*/
|
||||
static int dpiPaintDevice( const QPainter* );
|
||||
|
||||
//read / write diagram
|
||||
void _readXML( const QDomElement& elem );
|
||||
void _writeXML( QDomElement& rendererElem, QDomDocument& doc ) const;
|
||||
|
||||
/**Reference to the object that does the real diagram rendering*/
|
||||
QgsDiagram* mDiagram;
|
||||
};
|
||||
|
||||
/**Renders the diagrams for all features with the same settings*/
|
||||
class CORE_EXPORT QgsSingleCategoryDiagramRenderer: public QgsDiagramRendererV2
|
||||
{
|
||||
public:
|
||||
QgsSingleCategoryDiagramRenderer();
|
||||
~QgsSingleCategoryDiagramRenderer();
|
||||
|
||||
QString rendererName() const { return "SingleCategory"; }
|
||||
|
||||
QList<int> diagramAttributes() const { return mSettings.categoryIndices; }
|
||||
|
||||
void setDiagramSettings( const QgsDiagramSettings& s ) { mSettings = s; }
|
||||
|
||||
QList<QgsDiagramSettings> diagramSettings() const;
|
||||
|
||||
void readXML( const QDomElement& elem );
|
||||
void writeXML( QDomElement& layerElem, QDomDocument& doc ) const;
|
||||
|
||||
protected:
|
||||
bool diagramSettings( const QgsAttributeMap&, const QgsRenderContext& c, QgsDiagramSettings& s );
|
||||
|
||||
QSizeF diagramSize( const QgsAttributeMap& attributes, const QgsRenderContext& c );
|
||||
|
||||
private:
|
||||
QgsDiagramSettings mSettings;
|
||||
};
|
||||
|
||||
class CORE_EXPORT QgsLinearlyInterpolatedDiagramRenderer: public QgsDiagramRendererV2
|
||||
{
|
||||
public:
|
||||
QgsLinearlyInterpolatedDiagramRenderer();
|
||||
~QgsLinearlyInterpolatedDiagramRenderer();
|
||||
|
||||
/**Returns list with all diagram settings in the renderer*/
|
||||
QList<QgsDiagramSettings> diagramSettings() const;
|
||||
|
||||
void setDiagramSettings( const QgsDiagramSettings& s ) { mSettings = s; }
|
||||
|
||||
QList<int> diagramAttributes() const;
|
||||
|
||||
QString rendererName() const { return "LinearlyInterpolated"; }
|
||||
|
||||
void setLowerValue( double val ) { mInterpolationSettings.lowerValue = val; }
|
||||
double lowerValue() const { return mInterpolationSettings.lowerValue; }
|
||||
|
||||
void setUpperValue( double val ) { mInterpolationSettings.upperValue = val; }
|
||||
double upperValue() const { return mInterpolationSettings.upperValue; }
|
||||
|
||||
void setLowerSize( QSizeF s ) { mInterpolationSettings.lowerSize = s; }
|
||||
QSizeF lowerSize() const { return mInterpolationSettings.lowerSize; }
|
||||
|
||||
void setUpperSize( QSizeF s ) { mInterpolationSettings.upperSize = s; }
|
||||
QSizeF upperSize() const { return mInterpolationSettings.upperSize; }
|
||||
|
||||
int classificationAttribute() const { return mInterpolationSettings.classificationAttribute; }
|
||||
void setClassificationAttribute( int index ) { mInterpolationSettings.classificationAttribute = index; }
|
||||
|
||||
void readXML( const QDomElement& elem );
|
||||
void writeXML( QDomElement& layerElem, QDomDocument& doc ) const;
|
||||
|
||||
protected:
|
||||
bool diagramSettings( const QgsAttributeMap&, const QgsRenderContext& c, QgsDiagramSettings& s );
|
||||
|
||||
QSizeF diagramSize( const QgsAttributeMap& attributes, const QgsRenderContext& c );
|
||||
|
||||
private:
|
||||
QgsDiagramSettings mSettings;
|
||||
QgsDiagramInterpolationSettings mInterpolationSettings;
|
||||
};
|
||||
|
||||
#endif // QGSDIAGRAMRENDERERV2_H
|
||||
/***************************************************************************
|
||||
qgsdiagramrendererv2.h
|
||||
---------------------
|
||||
begin : March 2011
|
||||
copyright : (C) 2011 by Marco Hugentobler
|
||||
email : marco dot hugentobler at sourcepole dot ch
|
||||
***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
#ifndef QGSDIAGRAMRENDERERV2_H
|
||||
#define QGSDIAGRAMRENDERERV2_H
|
||||
|
||||
#include <QColor>
|
||||
#include <QFont>
|
||||
#include <QList>
|
||||
#include <QPointF>
|
||||
#include <QSizeF>
|
||||
#include "qgsfeature.h"
|
||||
#include "qgspallabeling.h"
|
||||
|
||||
class QgsDiagram;
|
||||
class QgsDiagramRendererV2;
|
||||
class QgsFeature;
|
||||
class QgsRenderContext;
|
||||
class QDomElement;
|
||||
namespace pal { class Layer; }
|
||||
|
||||
struct CORE_EXPORT QgsDiagramLayerSettings
|
||||
{
|
||||
//avoid inclusion of QgsPalLabeling
|
||||
enum Placement
|
||||
{
|
||||
AroundPoint = 0, // Point / Polygon
|
||||
OverPoint, // Point / Polygon
|
||||
Line, // Line / Polygon
|
||||
Curved, // Line
|
||||
Horizontal, // Polygon
|
||||
Free // Polygon
|
||||
};
|
||||
|
||||
enum LinePlacementFlags
|
||||
{
|
||||
OnLine = 1,
|
||||
AboveLine = 2,
|
||||
BelowLine = 4,
|
||||
MapOrientation = 8
|
||||
};
|
||||
|
||||
QgsDiagramLayerSettings()
|
||||
: placement( AroundPoint )
|
||||
, placementFlags( OnLine )
|
||||
, priority( 5 )
|
||||
, obstacle( false )
|
||||
, dist( 0.0 )
|
||||
, renderer( 0 )
|
||||
, palLayer( 0 )
|
||||
, ct( 0 )
|
||||
, xform( 0 )
|
||||
, xPosColumn( -1 )
|
||||
, yPosColumn( -1 )
|
||||
{
|
||||
}
|
||||
|
||||
//pal placement properties
|
||||
Placement placement;
|
||||
LinePlacementFlags placementFlags;
|
||||
int priority; // 0 = low, 10 = high
|
||||
bool obstacle; // whether it's an obstacle
|
||||
double dist; // distance from the feature (in mm)
|
||||
QgsDiagramRendererV2* renderer;
|
||||
|
||||
//assigned when layer gets prepared
|
||||
pal::Layer* palLayer;
|
||||
const QgsCoordinateTransform* ct;
|
||||
const QgsMapToPixel* xform;
|
||||
QList<QgsPalGeometry*> geometries;
|
||||
|
||||
int xPosColumn; //attribute index for x coordinate (or -1 if position not data defined)
|
||||
int yPosColumn;//attribute index for y coordinate (or -1 if position not data defined)
|
||||
|
||||
void readXML( const QDomElement& elem );
|
||||
void writeXML( QDomElement& layerElem, QDomDocument& doc ) const;
|
||||
};
|
||||
|
||||
//diagram settings for rendering
|
||||
struct CORE_EXPORT QgsDiagramSettings
|
||||
{
|
||||
enum SizeType
|
||||
{
|
||||
MM,
|
||||
MapUnits
|
||||
};
|
||||
|
||||
enum LabelPlacementMethod
|
||||
{
|
||||
Height,
|
||||
XHeight
|
||||
};
|
||||
|
||||
//! Orientation of histogram
|
||||
enum DiagramOrientation
|
||||
{
|
||||
Up,
|
||||
Down,
|
||||
Left,
|
||||
Right
|
||||
};
|
||||
|
||||
QgsDiagramSettings(): sizeType( MM ), minScaleDenominator( -1 ), maxScaleDenominator( -1 )
|
||||
{}
|
||||
QFont font;
|
||||
QList< QColor > categoryColors;
|
||||
QList< int > categoryIndices;
|
||||
QSizeF size; //size
|
||||
SizeType sizeType; //mm or map units
|
||||
QColor backgroundColor;
|
||||
QColor penColor;
|
||||
double penWidth;
|
||||
LabelPlacementMethod labelPlacementMethod;
|
||||
DiagramOrientation diagramOrientation;
|
||||
double barWidth;
|
||||
int transparency; // 0 - 100
|
||||
bool scaleByArea;
|
||||
|
||||
//scale range (-1 if no lower / upper bound )
|
||||
double minScaleDenominator;
|
||||
double maxScaleDenominator;
|
||||
|
||||
//! Scale diagrams smaller than mMinimumSize to mMinimumSize
|
||||
double minimumSize;
|
||||
|
||||
void readXML( const QDomElement& elem );
|
||||
void writeXML( QDomElement& rendererElem, QDomDocument& doc ) const;
|
||||
};
|
||||
|
||||
//additional diagram settings for interpolated size rendering
|
||||
struct CORE_EXPORT QgsDiagramInterpolationSettings
|
||||
{
|
||||
QSizeF lowerSize;
|
||||
QSizeF upperSize;
|
||||
double lowerValue;
|
||||
double upperValue;
|
||||
/**Index of the classification attribute*/
|
||||
int classificationAttribute;
|
||||
};
|
||||
|
||||
/**Returns diagram settings for a feature*/
|
||||
class CORE_EXPORT QgsDiagramRendererV2
|
||||
{
|
||||
public:
|
||||
|
||||
QgsDiagramRendererV2();
|
||||
virtual ~QgsDiagramRendererV2();
|
||||
|
||||
/**Returns size of the diagram for feature f in map units. Returns an invalid QSizeF in case of error*/
|
||||
virtual QSizeF sizeMapUnits( const QgsAttributeMap& attributes, const QgsRenderContext& c );
|
||||
|
||||
virtual QString rendererName() const = 0;
|
||||
|
||||
/**Returns attribute indices needed for diagram rendering*/
|
||||
virtual QList<int> diagramAttributes() const = 0;
|
||||
|
||||
void renderDiagram( const QgsAttributeMap& att, QgsRenderContext& c, const QPointF& pos );
|
||||
|
||||
void setDiagram( QgsDiagram* d );
|
||||
const QgsDiagram* diagram() const { return mDiagram; }
|
||||
|
||||
/**Returns list with all diagram settings in the renderer*/
|
||||
virtual QList<QgsDiagramSettings> diagramSettings() const = 0;
|
||||
|
||||
virtual void readXML( const QDomElement& elem ) = 0;
|
||||
virtual void writeXML( QDomElement& layerElem, QDomDocument& doc ) const = 0;
|
||||
|
||||
protected:
|
||||
|
||||
/**Returns diagram settings for a feature (or false if the diagram for the feature is not to be rendered). Used internally within renderDiagram()
|
||||
* @param att attribute map
|
||||
* @param c render context
|
||||
* @param s out: diagram settings for the feature
|
||||
*/
|
||||
virtual bool diagramSettings( const QgsAttributeMap& att, const QgsRenderContext& c, QgsDiagramSettings& s ) = 0;
|
||||
|
||||
/**Returns size of the diagram (in painter units) or an invalid size in case of error*/
|
||||
virtual QSizeF diagramSize( const QgsAttributeMap& attributes, const QgsRenderContext& c ) = 0;
|
||||
|
||||
/**Converts size from mm to map units*/
|
||||
void convertSizeToMapUnits( QSizeF& size, const QgsRenderContext& context ) const;
|
||||
|
||||
/**Returns the paint device dpi (or -1 in case of error*/
|
||||
static int dpiPaintDevice( const QPainter* );
|
||||
|
||||
//read / write diagram
|
||||
void _readXML( const QDomElement& elem );
|
||||
void _writeXML( QDomElement& rendererElem, QDomDocument& doc ) const;
|
||||
|
||||
/**Reference to the object that does the real diagram rendering*/
|
||||
QgsDiagram* mDiagram;
|
||||
};
|
||||
|
||||
/**Renders the diagrams for all features with the same settings*/
|
||||
class CORE_EXPORT QgsSingleCategoryDiagramRenderer: public QgsDiagramRendererV2
|
||||
{
|
||||
public:
|
||||
QgsSingleCategoryDiagramRenderer();
|
||||
~QgsSingleCategoryDiagramRenderer();
|
||||
|
||||
QString rendererName() const { return "SingleCategory"; }
|
||||
|
||||
QList<int> diagramAttributes() const { return mSettings.categoryIndices; }
|
||||
|
||||
void setDiagramSettings( const QgsDiagramSettings& s ) { mSettings = s; }
|
||||
|
||||
QList<QgsDiagramSettings> diagramSettings() const;
|
||||
|
||||
void readXML( const QDomElement& elem );
|
||||
void writeXML( QDomElement& layerElem, QDomDocument& doc ) const;
|
||||
|
||||
protected:
|
||||
bool diagramSettings( const QgsAttributeMap&, const QgsRenderContext& c, QgsDiagramSettings& s );
|
||||
|
||||
QSizeF diagramSize( const QgsAttributeMap& attributes, const QgsRenderContext& c );
|
||||
|
||||
private:
|
||||
QgsDiagramSettings mSettings;
|
||||
};
|
||||
|
||||
class CORE_EXPORT QgsLinearlyInterpolatedDiagramRenderer: public QgsDiagramRendererV2
|
||||
{
|
||||
public:
|
||||
QgsLinearlyInterpolatedDiagramRenderer();
|
||||
~QgsLinearlyInterpolatedDiagramRenderer();
|
||||
|
||||
/**Returns list with all diagram settings in the renderer*/
|
||||
QList<QgsDiagramSettings> diagramSettings() const;
|
||||
|
||||
void setDiagramSettings( const QgsDiagramSettings& s ) { mSettings = s; }
|
||||
|
||||
QList<int> diagramAttributes() const;
|
||||
|
||||
QString rendererName() const { return "LinearlyInterpolated"; }
|
||||
|
||||
void setLowerValue( double val ) { mInterpolationSettings.lowerValue = val; }
|
||||
double lowerValue() const { return mInterpolationSettings.lowerValue; }
|
||||
|
||||
void setUpperValue( double val ) { mInterpolationSettings.upperValue = val; }
|
||||
double upperValue() const { return mInterpolationSettings.upperValue; }
|
||||
|
||||
void setLowerSize( QSizeF s ) { mInterpolationSettings.lowerSize = s; }
|
||||
QSizeF lowerSize() const { return mInterpolationSettings.lowerSize; }
|
||||
|
||||
void setUpperSize( QSizeF s ) { mInterpolationSettings.upperSize = s; }
|
||||
QSizeF upperSize() const { return mInterpolationSettings.upperSize; }
|
||||
|
||||
int classificationAttribute() const { return mInterpolationSettings.classificationAttribute; }
|
||||
void setClassificationAttribute( int index ) { mInterpolationSettings.classificationAttribute = index; }
|
||||
|
||||
void readXML( const QDomElement& elem );
|
||||
void writeXML( QDomElement& layerElem, QDomDocument& doc ) const;
|
||||
|
||||
protected:
|
||||
bool diagramSettings( const QgsAttributeMap&, const QgsRenderContext& c, QgsDiagramSettings& s );
|
||||
|
||||
QSizeF diagramSize( const QgsAttributeMap& attributes, const QgsRenderContext& c );
|
||||
|
||||
private:
|
||||
QgsDiagramSettings mSettings;
|
||||
QgsDiagramInterpolationSettings mInterpolationSettings;
|
||||
};
|
||||
|
||||
#endif // QGSDIAGRAMRENDERERV2_H
|
||||
|
@ -789,14 +789,14 @@ static QVariant fcnRound( const QVariantList& values , QgsFeature *f, QgsExpress
|
||||
|
||||
static QVariant fcnScale( const QVariantList&, QgsFeature*, QgsExpression* parent )
|
||||
{
|
||||
return QVariant( parent->scale() );
|
||||
return QVariant( parent->scale() );
|
||||
}
|
||||
|
||||
static QVariant fcnFormatNumber( const QVariantList& values, QgsFeature*, QgsExpression* parent )
|
||||
{
|
||||
double value = getDoubleValue( values.at(0), parent );
|
||||
int places = getIntValue( values.at(1), parent );
|
||||
return QString( "%L1" ).arg( value, 0, 'f', places );
|
||||
double value = getDoubleValue( values.at( 0 ), parent );
|
||||
int places = getIntValue( values.at( 1 ), parent );
|
||||
return QString( "%L1" ).arg( value, 0, 'f', places );
|
||||
}
|
||||
|
||||
QList<QgsExpression::FunctionDef> QgsExpression::gmBuiltinFunctions;
|
||||
|
@ -227,7 +227,7 @@ class CORE_EXPORT QgsGeometry
|
||||
double sqrDistToVertexAt( QgsPoint& point, int atVertex );
|
||||
|
||||
/**
|
||||
* Searches for the the closest vertex in this geometry to the given point.
|
||||
* Searches for the closest vertex in this geometry to the given point.
|
||||
* @param point Specifiest the point for search
|
||||
* @param atVertex Receives index of the closest vertex
|
||||
* @return The squared cartesian distance is also returned in sqrDist, negative number on error
|
||||
|
@ -240,7 +240,7 @@ class CORE_EXPORT QgsMapLayer : public QObject
|
||||
/** Retrieve the style URI for this layer
|
||||
* (either as a .qml file on disk or as a
|
||||
* record in the users style table in their personal qgis.db)
|
||||
* @return a QString withe the style file name
|
||||
* @return a QString with the style file name
|
||||
* @see also loadNamedStyle () and saveNamedStyle ();
|
||||
* @note This method was added in QGIS 1.8
|
||||
*/
|
||||
|
@ -77,6 +77,7 @@ class CORE_EXPORT QgsRectangle
|
||||
QgsPoint center() const;
|
||||
//! Scale the rectangle around its center point
|
||||
void scale( double scaleFactor, const QgsPoint *c = 0 );
|
||||
//! Deprecated in 1.9, use scale instead
|
||||
Q_DECL_DEPRECATED void expand( double scaleFactor, const QgsPoint *c = 0 ) { return scale( scaleFactor * 2.0, c ); }
|
||||
//! return the intersection with the given rectangle
|
||||
QgsRectangle intersect( const QgsRectangle *rect ) const;
|
||||
|
@ -3160,7 +3160,7 @@ bool QgsVectorLayer::readSymbology( const QDomNode& node, QString& errorMessage
|
||||
bool allowNull = editTypeElement.attribute( "allowNull" ) == "true";
|
||||
bool orderByValue = editTypeElement.attribute( "orderByValue" ) == "true";
|
||||
bool allowMulti = editTypeElement.attribute( "allowMulti", "false" ) == "true";
|
||||
QString filterAttributeColumn= editTypeElement.attribute( "filterAttributeColumn", QString::null );
|
||||
QString filterAttributeColumn = editTypeElement.attribute( "filterAttributeColumn", QString::null );
|
||||
QString filterAttributeValue = editTypeElement.attribute( "filterAttributeValue", QString::null );
|
||||
mValueRelations[ name ] = ValueRelationData( id, key, value, allowNull, orderByValue, allowMulti, filterAttributeColumn, filterAttributeValue );
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ QgsRasterChecker::QgsRasterChecker( ) :
|
||||
mErrMsgStyle = "color: #ff0000;";
|
||||
}
|
||||
|
||||
bool QgsRasterChecker::runTest( QString theVerifiedKey, QString theVerifiedUri,
|
||||
bool QgsRasterChecker::runTest( QString theVerifiedKey, QString theVerifiedUri,
|
||||
QString theExpectedKey, QString theExpectedUri )
|
||||
{
|
||||
bool ok = true;
|
||||
@ -46,14 +46,14 @@ bool QgsRasterChecker::runTest( QString theVerifiedKey, QString theVerifiedUri,
|
||||
QgsRasterDataProvider* verifiedProvider = QgsRasterLayer::loadProvider( theVerifiedKey, theVerifiedUri );
|
||||
if ( !verifiedProvider || !verifiedProvider->isValid() )
|
||||
{
|
||||
error( QString( "Cannot load provider %1 with URI: %2" ).arg( theVerifiedKey).arg( theVerifiedUri), mReport );
|
||||
error( QString( "Cannot load provider %1 with URI: %2" ).arg( theVerifiedKey ).arg( theVerifiedUri ), mReport );
|
||||
ok = false;
|
||||
}
|
||||
|
||||
QgsRasterDataProvider* expectedProvider = QgsRasterLayer::loadProvider( theExpectedKey, theExpectedUri );
|
||||
if ( !expectedProvider || !expectedProvider->isValid() )
|
||||
{
|
||||
error( QString( "Cannot load provider %1 with URI: %2" ).arg( theExpectedKey).arg( theExpectedUri ), mReport );
|
||||
error( QString( "Cannot load provider %1 with URI: %2" ).arg( theExpectedKey ).arg( theExpectedUri ), mReport );
|
||||
ok = false;
|
||||
}
|
||||
|
||||
@ -63,7 +63,7 @@ bool QgsRasterChecker::runTest( QString theVerifiedKey, QString theVerifiedUri,
|
||||
mReport += QString( "Expected URI: %1<br>" ).arg( theExpectedUri.replace( "&", "&" ) );
|
||||
|
||||
mReport += "<br>";
|
||||
mReport += QString("<table style='%1'>\n").arg( mTabStyle );
|
||||
mReport += QString( "<table style='%1'>\n" ).arg( mTabStyle );
|
||||
mReport += compareHead();
|
||||
|
||||
compare( "Band count", verifiedProvider->bandCount(), expectedProvider->bandCount(), mReport, ok );
|
||||
@ -86,7 +86,7 @@ bool QgsRasterChecker::runTest( QString theVerifiedKey, QString theVerifiedUri,
|
||||
{
|
||||
bool bandOk = true;
|
||||
mReport += QString( "<h3>Band %1</h3>\n" ).arg( band );
|
||||
mReport += QString("<table style='%1'>\n").arg( mTabStyle );
|
||||
mReport += QString( "<table style='%1'>\n" ).arg( mTabStyle );
|
||||
mReport += compareHead();
|
||||
|
||||
// Data types may differ (?)
|
||||
@ -132,9 +132,9 @@ bool QgsRasterChecker::runTest( QString theVerifiedKey, QString theVerifiedUri,
|
||||
|
||||
mReport += "<table><tr>";
|
||||
mReport += "<td>Data comparison</td>";
|
||||
mReport += QString( "<td style='%1 %2 border: 1px solid'>correct value</td>" ).arg( mCellStyle).arg( mOkStyle );
|
||||
mReport += QString( "<td style='%1 %2 border: 1px solid'>correct value</td>" ).arg( mCellStyle ).arg( mOkStyle );
|
||||
mReport += "<td></td>";
|
||||
mReport += QString( "<td style='%1 %2 border: 1px solid'>wrong value<br>expected value</td></tr>").arg( mCellStyle).arg( mErrStyle );
|
||||
mReport += QString( "<td style='%1 %2 border: 1px solid'>wrong value<br>expected value</td></tr>" ).arg( mCellStyle ).arg( mErrStyle );
|
||||
mReport += "</tr></table>";
|
||||
mReport += "<br>";
|
||||
|
||||
@ -148,7 +148,7 @@ bool QgsRasterChecker::runTest( QString theVerifiedKey, QString theVerifiedUri,
|
||||
verifiedProvider->readBlock( band, expectedProvider->extent(), width, height, verifiedData );
|
||||
|
||||
// compare data values
|
||||
QString htmlTable = QString("<table style='%1'>").arg( mTabStyle );
|
||||
QString htmlTable = QString( "<table style='%1'>" ).arg( mTabStyle );
|
||||
for ( int row = 0; row < height; row ++ )
|
||||
{
|
||||
htmlTable += "<tr>";
|
||||
@ -169,7 +169,7 @@ bool QgsRasterChecker::runTest( QString theVerifiedKey, QString theVerifiedUri,
|
||||
allOk = false;
|
||||
valStr = QString( "%1<br>%2" ).arg( verifiedVal ).arg( expectedVal );
|
||||
}
|
||||
htmlTable += QString( "<td style='%1 %2'>%3</td>" ).arg( mCellStyle).arg( cellOk ? mOkStyle : mErrStyle ).arg( valStr );
|
||||
htmlTable += QString( "<td style='%1 %2'>%3</td>" ).arg( mCellStyle ).arg( cellOk ? mOkStyle : mErrStyle ).arg( valStr );
|
||||
}
|
||||
htmlTable += "</tr>";
|
||||
}
|
||||
@ -187,7 +187,7 @@ bool QgsRasterChecker::runTest( QString theVerifiedKey, QString theVerifiedUri,
|
||||
|
||||
void QgsRasterChecker::error( QString theMessage, QString &theReport )
|
||||
{
|
||||
theReport += QString( "<font style='%1'>Error: ").arg(mErrMsgStyle);
|
||||
theReport += QString( "<font style='%1'>Error: " ).arg( mErrMsgStyle );
|
||||
theReport += theMessage;
|
||||
theReport += "</font>";
|
||||
}
|
||||
@ -202,7 +202,7 @@ double QgsRasterChecker::tolerance( double val, int places )
|
||||
QString QgsRasterChecker::compareHead()
|
||||
{
|
||||
QString html;
|
||||
html += QString( "<tr><th style='%1'>Param name</th><th style='%1'>Verified value</th><th style='%1'>Eexpected value</th><th style='%1'>Difference</th><th style='%1'>Tolerance</th></tr>").arg( mCellStyle );
|
||||
html += QString( "<tr><th style='%1'>Param name</th><th style='%1'>Verified value</th><th style='%1'>Eexpected value</th><th style='%1'>Difference</th><th style='%1'>Tolerance</th></tr>" ).arg( mCellStyle );
|
||||
return html;
|
||||
}
|
||||
|
||||
@ -229,8 +229,8 @@ void QgsRasterChecker::compare( QString theParamName, double verifiedVal, double
|
||||
void QgsRasterChecker::compareRow( QString theParamName, QString verifiedVal, QString expectedVal, QString &theReport, bool theOk, QString theDifference, QString theTolerance )
|
||||
{
|
||||
theReport += "<tr>\n";
|
||||
theReport += QString( "<td style='%1'>%2</td><td style='%1 %3'>%4</td><td style='%1'>%5</td>\n" ).arg(mCellStyle).arg( theParamName ).arg( theOk ? mOkStyle : mErrStyle ).arg( verifiedVal ).arg( expectedVal );
|
||||
theReport += QString( "<td style='%1'>%2</td>\n" ).arg(mCellStyle).arg( theDifference );
|
||||
theReport += QString( "<td style='%1'>%2</td>\n" ).arg(mCellStyle).arg( theTolerance );
|
||||
theReport += QString( "<td style='%1'>%2</td><td style='%1 %3'>%4</td><td style='%1'>%5</td>\n" ).arg( mCellStyle ).arg( theParamName ).arg( theOk ? mOkStyle : mErrStyle ).arg( verifiedVal ).arg( expectedVal );
|
||||
theReport += QString( "<td style='%1'>%2</td>\n" ).arg( mCellStyle ).arg( theDifference );
|
||||
theReport += QString( "<td style='%1'>%2</td>\n" ).arg( mCellStyle ).arg( theTolerance );
|
||||
theReport += "</tr>";
|
||||
}
|
||||
|
@ -28,6 +28,10 @@
|
||||
#include "qgsrasterrenderer.h"
|
||||
#include "qgsrasterprojector.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#undef interface
|
||||
#endif
|
||||
|
||||
/** \ingroup core
|
||||
* Base class for processing modules.
|
||||
*/
|
||||
|
@ -412,6 +412,8 @@ void QgsSimpleMarkerSymbolLayerV2::renderPoint( const QPointF& point, QgsSymbolV
|
||||
case QgsSymbolV2::ScaleArea:
|
||||
scaledSize = sqrt( scaledSize );
|
||||
break;
|
||||
case QgsSymbolV2::ScaleDiameter:
|
||||
break;
|
||||
}
|
||||
|
||||
double half = scaledSize / 2.0;
|
||||
|
@ -28,7 +28,7 @@ class QgsAttributeTableIdColumnPair
|
||||
public:
|
||||
QgsAttributeTableIdColumnPair( QgsFeatureId anId, QVariant anItem ) : mId( anId ), mItem( anItem ) {}
|
||||
/**
|
||||
* Returns true if this id-column pair is less the the tested one
|
||||
* Returns true if this id-column pair is less than the tested one
|
||||
* @param b the tested id-column pair
|
||||
*/
|
||||
bool operator<( const QgsAttributeTableIdColumnPair &b ) const;
|
||||
|
@ -124,7 +124,7 @@ namespace QgisGui
|
||||
settings.setValue( "/UI/lastSaveAsImageDir", QFileInfo( outputFileName ).absolutePath() );
|
||||
}
|
||||
#else
|
||||
//create a file dialog using the the filter list generated above
|
||||
//create a file dialog using the filter list generated above
|
||||
std::auto_ptr<QFileDialog> fileDialog( new QFileDialog( theParent, theMessage, lastUsedDir, QStringList( filterMap.keys() ).join( ";;" ) ) );
|
||||
|
||||
// allow for selection of more than one file
|
||||
|
@ -336,7 +336,7 @@ class GUI_EXPORT QgsMapCanvas : public QGraphicsView
|
||||
void renderComplete( QPainter * );
|
||||
|
||||
/** Emitted when canvas finished a refresh request.
|
||||
\note Added in 2.0 */
|
||||
\note Added in 2.0 */
|
||||
void mapCanvasRefreshed();
|
||||
|
||||
/** Emitted when the canvas is about to be rendered.
|
||||
|
@ -27,7 +27,7 @@
|
||||
|
||||
|
||||
QgsMessageBar::QgsMessageBar( QWidget *parent )
|
||||
: QFrame( parent ), mCurrentItem ( NULL )
|
||||
: QFrame( parent ), mCurrentItem( NULL )
|
||||
{
|
||||
QPalette pal = palette();
|
||||
pal.setBrush( backgroundRole(), pal.window() );
|
||||
@ -66,22 +66,22 @@ void QgsMessageBar::popItem( QgsMessageBarItem *item )
|
||||
return;
|
||||
|
||||
if ( item == mCurrentItem )
|
||||
{
|
||||
if ( mCurrentItem )
|
||||
{
|
||||
mLayout->removeWidget( mCurrentItem->widget() );
|
||||
mCurrentItem->widget()->hide();
|
||||
mCurrentItem = 0;
|
||||
}
|
||||
{
|
||||
if ( mCurrentItem )
|
||||
{
|
||||
mLayout->removeWidget( mCurrentItem->widget() );
|
||||
mCurrentItem->widget()->hide();
|
||||
mCurrentItem = 0;
|
||||
}
|
||||
|
||||
if ( !mList.isEmpty() )
|
||||
{
|
||||
pushItem( mList.first() );
|
||||
}
|
||||
else
|
||||
{
|
||||
hide();
|
||||
}
|
||||
if ( !mList.isEmpty() )
|
||||
{
|
||||
pushItem( mList.first() );
|
||||
}
|
||||
else
|
||||
{
|
||||
hide();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -102,7 +102,7 @@ bool QgsMessageBar::popWidget( QWidget *widget )
|
||||
return true;
|
||||
}
|
||||
|
||||
foreach( QgsMessageBarItem *item, mList )
|
||||
foreach ( QgsMessageBarItem *item, mList )
|
||||
{
|
||||
if ( item->widget() == widget )
|
||||
{
|
||||
|
@ -57,7 +57,7 @@ QgsSingleBandPseudoColorRendererWidget::QgsSingleBandPseudoColorRendererWidget(
|
||||
mColorInterpolationComboBox->addItem( tr( "Discrete" ), 0 );
|
||||
mColorInterpolationComboBox->addItem( tr( "Linear" ), 1 );
|
||||
mColorInterpolationComboBox->addItem( tr( "Exact" ), 2 );
|
||||
|
||||
mColorInterpolationComboBox->setCurrentIndex(1);
|
||||
mClassificationModeComboBox->addItem( tr( "Equal interval" ) );
|
||||
//quantile would be nice as well
|
||||
|
||||
|
@ -422,7 +422,7 @@ void QgsCptCityColorRampV2Dialog::showEvent( QShowEvent * e )
|
||||
tabBar->setCurrentIndex( 1 );
|
||||
mModel = mAuthorsModel;
|
||||
mBrowserView->setModel( mModel );
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( modelIndex != QModelIndex() )
|
||||
{
|
||||
|
@ -220,6 +220,7 @@ QgsRendererV2DataDefinedMenus::~QgsRendererV2DataDefinedMenus()
|
||||
|
||||
void QgsRendererV2DataDefinedMenus::populateMenu( QMenu* menu, const char* slot, QString fieldName, QActionGroup *actionGroup )
|
||||
{
|
||||
Q_UNUSED( slot );
|
||||
QAction* aNo = new QAction( tr( "- no field -" ), actionGroup );
|
||||
aNo->setCheckable( true );
|
||||
menu->addAction( aNo );
|
||||
@ -305,4 +306,4 @@ void QgsRendererV2DataDefinedMenus::updateMenu( QActionGroup* actionGroup, QStri
|
||||
a->setChecked( a->text() == fieldName );
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
@ -203,7 +203,7 @@ bool DL_Dxf::in( std::stringstream& stream,
|
||||
* the type of data. The value is on the next line.\n
|
||||
*
|
||||
* This function reads a couplet, determines the type of data, and
|
||||
* passes the value to the the appropriate handler function of
|
||||
* passes the value to the appropriate handler function of
|
||||
* \p creationInterface.\n
|
||||
*
|
||||
* \p fp is advanced so that the next call to \p readDXFGroups() reads
|
||||
|
@ -14,4 +14,4 @@ eVis was started in 2007 with QGIS v0.7.0. It was our first experience with QGIS
|
||||
A special "thank you" is extended to the following people who have contributed translations, comments, bug reports, and patches which have helped to make eVis a better tool:
|
||||
Tim Sutton, Magnus Homann, John Tull, Agustin Lobo, Donald Schrupp, Muslim Bandishoev, Anousak Souphavanh, Ha Quy Quynh, Roberto García-Yunta, Tom Gottfried
|
||||
|
||||
This work was made possible through a grant by the the John D. and Catherine T. MacArthur Foundation. Additionally, these products were prepared by the American Museum of Natural History under award No. NA05SEC46391002 from the National Oceanic and Atmospheric Administration, U.S. Department of Commerce. The statements, findings, conclusions, and recommendations are those of the author(s) and do not necessarily reflect the views of the National Oceanic and Atmospheric Administration or the Department of Commerce.
|
||||
This work was made possible through a grant by the John D. and Catherine T. MacArthur Foundation. Additionally, these products were prepared by the American Museum of Natural History under award No. NA05SEC46391002 from the National Oceanic and Atmospheric Administration, U.S. Department of Commerce. The statements, findings, conclusions, and recommendations are those of the author(s) and do not necessarily reflect the views of the National Oceanic and Atmospheric Administration or the Department of Commerce.
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
@ -47,7 +47,7 @@
|
||||
/**
|
||||
* Constructor called when browser is launched from the application plugin tool bar
|
||||
* @param parent - Pointer the to parent QWidget for modality
|
||||
* @param interface - Pointer the the application interface
|
||||
* @param interface - Pointer to the application interface
|
||||
* @param fl - Window flags
|
||||
*/
|
||||
eVisGenericEventBrowserGui::eVisGenericEventBrowserGui( QWidget* parent, QgisInterface* interface, Qt::WFlags fl )
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -15,7 +15,7 @@
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
** Library General Public License for more details.
|
||||
**
|
||||
** This work was made possible through a grant by the the John D. and
|
||||
** This work was made possible through a grant by the John D. and
|
||||
** Catherine T. MacArthur Foundation. Additionally, this program was prepared by
|
||||
** the American Museum of Natural History under award No. NA05SEC46391002
|
||||
** from the National Oceanic and Atmospheric Administration, U.S. Department
|
||||
|
@ -441,7 +441,7 @@ bool QgsShapeFile::insertLayer( QString dbname, QString schema, QString primary_
|
||||
OGR_F_Destroy( feat );
|
||||
}
|
||||
}
|
||||
// create the GIST index if the the load was successful
|
||||
// create the GIST index if the load was successful
|
||||
if ( result )
|
||||
{
|
||||
// prompt user to see if they want to build the index and warn
|
||||
|
@ -207,7 +207,7 @@ QgsDelimitedTextProvider::QgsDelimitedTextProvider( QString uri )
|
||||
|
||||
// Open the file and get number of rows, etc. We assume that the
|
||||
// file has a header row and process accordingly. Caller should make
|
||||
// sure the the delimited file is properly formed.
|
||||
// sure that the delimited file is properly formed.
|
||||
mFile = new QFile( mFileName );
|
||||
if ( !mFile->open( QIODevice::ReadOnly ) )
|
||||
{
|
||||
|
@ -92,6 +92,9 @@ TARGET_LINK_LIBRARIES(qgis.g.info
|
||||
${GRASS_LIBRARY_gproj}
|
||||
${GDAL_LIBRARY}
|
||||
)
|
||||
IF (UNIX)
|
||||
TARGET_LINK_LIBRARIES(qgis.g.info m)
|
||||
ENDIF (UNIX)
|
||||
|
||||
########################################################
|
||||
# Install
|
||||
|
@ -138,7 +138,7 @@ class QgsWFSProvider: public QgsVectorDataProvider
|
||||
*/
|
||||
virtual bool changeAttributeValues( const QgsChangedAttributesMap &attr_map );
|
||||
|
||||
/**Reloads the data from the the source. Needs to be implemented by providers with data caches to
|
||||
/**Reloads the data from the source. Needs to be implemented by providers with data caches to
|
||||
synchronize with changes in the data source*/
|
||||
virtual void reloadData();
|
||||
|
||||
|
@ -739,7 +739,7 @@ class QgsWmsProvider : public QgsRasterDataProvider
|
||||
*/
|
||||
QString description() const;
|
||||
|
||||
/**Reloads the data from the the source. Needs to be implemented by providers with data caches to
|
||||
/**Reloads the data from the source. Needs to be implemented by providers with data caches to
|
||||
synchronize with changes in the data source*/
|
||||
virtual void reloadData();
|
||||
|
||||
|
@ -50,51 +50,51 @@ class TestQgsComposerScaleBar: public QObject
|
||||
|
||||
void TestQgsComposerScaleBar::initTestCase()
|
||||
{
|
||||
QgsApplication::init();
|
||||
QgsApplication::initQgis();
|
||||
QgsApplication::init();
|
||||
QgsApplication::initQgis();
|
||||
|
||||
//create maplayers from testdata and add to layer registry
|
||||
QFileInfo rasterFileInfo( QString( TEST_DATA_DIR ) + QDir::separator() + "landsat.tif" );
|
||||
mRasterLayer = new QgsRasterLayer( rasterFileInfo.filePath(),
|
||||
rasterFileInfo.completeBaseName() );
|
||||
QgsMultiBandColorRenderer* rasterRenderer = new QgsMultiBandColorRenderer( mRasterLayer->dataProvider(), 2, 3, 4 );
|
||||
mRasterLayer->setRenderer( rasterRenderer );
|
||||
//create maplayers from testdata and add to layer registry
|
||||
QFileInfo rasterFileInfo( QString( TEST_DATA_DIR ) + QDir::separator() + "landsat.tif" );
|
||||
mRasterLayer = new QgsRasterLayer( rasterFileInfo.filePath(),
|
||||
rasterFileInfo.completeBaseName() );
|
||||
QgsMultiBandColorRenderer* rasterRenderer = new QgsMultiBandColorRenderer( mRasterLayer->dataProvider(), 2, 3, 4 );
|
||||
mRasterLayer->setRenderer( rasterRenderer );
|
||||
|
||||
QgsMapLayerRegistry::instance()->addMapLayers( QList<QgsMapLayer*>() << mRasterLayer );
|
||||
QgsMapLayerRegistry::instance()->addMapLayers( QList<QgsMapLayer*>() << mRasterLayer );
|
||||
|
||||
//create composition with composer map
|
||||
mMapRenderer = new QgsMapRenderer();
|
||||
mMapRenderer->setLayerSet( QStringList() << mRasterLayer->id() );
|
||||
//create composition with composer map
|
||||
mMapRenderer = new QgsMapRenderer();
|
||||
mMapRenderer->setLayerSet( QStringList() << mRasterLayer->id() );
|
||||
|
||||
//reproject to WGS84
|
||||
QgsCoordinateReferenceSystem destCRS;
|
||||
destCRS.createFromId( 4326, QgsCoordinateReferenceSystem::EpsgCrsId );
|
||||
mMapRenderer->setDestinationCrs( destCRS );
|
||||
mMapRenderer->setProjectionsEnabled( true );
|
||||
//reproject to WGS84
|
||||
QgsCoordinateReferenceSystem destCRS;
|
||||
destCRS.createFromId( 4326, QgsCoordinateReferenceSystem::EpsgCrsId );
|
||||
mMapRenderer->setDestinationCrs( destCRS );
|
||||
mMapRenderer->setProjectionsEnabled( true );
|
||||
|
||||
mComposition = new QgsComposition( mMapRenderer );
|
||||
mComposition->setPaperSize( 297, 210 ); //A4 landscape
|
||||
mComposerMap = new QgsComposerMap( mComposition, 20, 20, 150, 150 );
|
||||
mComposerMap->setFrameEnabled( true );
|
||||
mComposition->addComposerMap( mComposerMap );
|
||||
mComposerMap->setNewExtent( QgsRectangle( 17.923, 30.160, 18.023, 30.260 ) );
|
||||
mComposition = new QgsComposition( mMapRenderer );
|
||||
mComposition->setPaperSize( 297, 210 ); //A4 landscape
|
||||
mComposerMap = new QgsComposerMap( mComposition, 20, 20, 150, 150 );
|
||||
mComposerMap->setFrameEnabled( true );
|
||||
mComposition->addComposerMap( mComposerMap );
|
||||
mComposerMap->setNewExtent( QgsRectangle( 17.923, 30.160, 18.023, 30.260 ) );
|
||||
|
||||
mComposerScaleBar = new QgsComposerScaleBar( mComposition );
|
||||
mComposerScaleBar->setSceneRect( QRectF( 20, 180, 20, 20 ) );
|
||||
mComposition->addComposerScaleBar( mComposerScaleBar );
|
||||
mComposerScaleBar->setComposerMap( mComposerMap );
|
||||
mComposerScaleBar->setUnits( QgsComposerScaleBar::Meters );
|
||||
mComposerScaleBar->setNumUnitsPerSegment( 2000 );
|
||||
mComposerScaleBar->setNumSegmentsLeft( 0 );
|
||||
mComposerScaleBar->setNumSegments( 2 );
|
||||
mComposerScaleBar->setHeight( 5 );
|
||||
mComposerScaleBar = new QgsComposerScaleBar( mComposition );
|
||||
mComposerScaleBar->setSceneRect( QRectF( 20, 180, 20, 20 ) );
|
||||
mComposition->addComposerScaleBar( mComposerScaleBar );
|
||||
mComposerScaleBar->setComposerMap( mComposerMap );
|
||||
mComposerScaleBar->setUnits( QgsComposerScaleBar::Meters );
|
||||
mComposerScaleBar->setNumUnitsPerSegment( 2000 );
|
||||
mComposerScaleBar->setNumSegmentsLeft( 0 );
|
||||
mComposerScaleBar->setNumSegments( 2 );
|
||||
mComposerScaleBar->setHeight( 5 );
|
||||
};
|
||||
|
||||
void TestQgsComposerScaleBar::cleanupTestCase()
|
||||
{
|
||||
delete mComposition;
|
||||
delete mMapRenderer;
|
||||
delete mRasterLayer;
|
||||
delete mComposition;
|
||||
delete mMapRenderer;
|
||||
delete mRasterLayer;
|
||||
};
|
||||
|
||||
void TestQgsComposerScaleBar::init()
|
||||
@ -109,34 +109,34 @@ void TestQgsComposerScaleBar::cleanup()
|
||||
|
||||
void TestQgsComposerScaleBar::singleBox()
|
||||
{
|
||||
mComposerScaleBar->setStyle( "Single Box" );
|
||||
QgsCompositionChecker checker( "Composer scalebar singleBox", mComposition, QString( QString( TEST_DATA_DIR ) + QDir::separator() +
|
||||
"control_images" + QDir::separator() + "expected_composerscalebar" + QDir::separator() + "composerscalebar_singlebox.png" ) );
|
||||
QVERIFY( checker.testComposition() );
|
||||
mComposerScaleBar->setStyle( "Single Box" );
|
||||
QgsCompositionChecker checker( "Composer scalebar singleBox", mComposition, QString( QString( TEST_DATA_DIR ) + QDir::separator() +
|
||||
"control_images" + QDir::separator() + "expected_composerscalebar" + QDir::separator() + "composerscalebar_singlebox.png" ) );
|
||||
QVERIFY( checker.testComposition() );
|
||||
};
|
||||
|
||||
void TestQgsComposerScaleBar::doubleBox()
|
||||
{
|
||||
mComposerScaleBar->setStyle( "Double Box" );
|
||||
QgsCompositionChecker checker( "Composer scalebar doubleBox", mComposition, QString( QString( TEST_DATA_DIR ) + QDir::separator() +
|
||||
"control_images" + QDir::separator() + "expected_composerscalebar" + QDir::separator() + "composerscalebar_doublebox.png" ) );
|
||||
QVERIFY( checker.testComposition() );
|
||||
mComposerScaleBar->setStyle( "Double Box" );
|
||||
QgsCompositionChecker checker( "Composer scalebar doubleBox", mComposition, QString( QString( TEST_DATA_DIR ) + QDir::separator() +
|
||||
"control_images" + QDir::separator() + "expected_composerscalebar" + QDir::separator() + "composerscalebar_doublebox.png" ) );
|
||||
QVERIFY( checker.testComposition() );
|
||||
};
|
||||
|
||||
void TestQgsComposerScaleBar::numeric()
|
||||
{
|
||||
mComposerScaleBar->setStyle( "Numeric" );
|
||||
QgsCompositionChecker checker( "Composer scalebar numeric", mComposition, QString( QString( TEST_DATA_DIR ) + QDir::separator() +
|
||||
"control_images" + QDir::separator() + "expected_composerscalebar" + QDir::separator() + "composerscalebar_numeric.png" ) );
|
||||
QVERIFY( checker.testComposition() );
|
||||
mComposerScaleBar->setStyle( "Numeric" );
|
||||
QgsCompositionChecker checker( "Composer scalebar numeric", mComposition, QString( QString( TEST_DATA_DIR ) + QDir::separator() +
|
||||
"control_images" + QDir::separator() + "expected_composerscalebar" + QDir::separator() + "composerscalebar_numeric.png" ) );
|
||||
QVERIFY( checker.testComposition() );
|
||||
};
|
||||
|
||||
void TestQgsComposerScaleBar::tick()
|
||||
{
|
||||
mComposerScaleBar->setStyle( "Line Ticks Up" );
|
||||
QgsCompositionChecker checker( "Composer scalebar numeric", mComposition, QString( QString( TEST_DATA_DIR ) + QDir::separator() +
|
||||
"control_images" + QDir::separator() + "expected_composerscalebar" + QDir::separator() + "composerscalebar_numeric.png" ) );
|
||||
QVERIFY( checker.testComposition() );
|
||||
mComposerScaleBar->setStyle( "Line Ticks Up" );
|
||||
QgsCompositionChecker checker( "Composer scalebar numeric", mComposition, QString( QString( TEST_DATA_DIR ) + QDir::separator() +
|
||||
"control_images" + QDir::separator() + "expected_composerscalebar" + QDir::separator() + "composerscalebar_numeric.png" ) );
|
||||
QVERIFY( checker.testComposition() );
|
||||
};
|
||||
|
||||
QTEST_MAIN( TestQgsComposerScaleBar )
|
||||
|
@ -295,6 +295,9 @@ class TestQgsExpression: public QObject
|
||||
QTest::newRow( "condition else" ) << "case when 1=0 then 'bad' else 678 end" << false << QVariant( 678 );
|
||||
QTest::newRow( "condition null" ) << "case when length(123)=0 then 111 end" << false << QVariant();
|
||||
QTest::newRow( "condition 2 when" ) << "case when 2>3 then 23 when 3>2 then 32 else 0 end" << false << QVariant( 32 );
|
||||
QTest::newRow( "coalesce null" ) << "coalesce(NULL)" << false << QVariant( );
|
||||
QTest::newRow( "coalesce mid-null" ) << "coalesce(1, NULL, 3)" << false << QVariant( 1 );
|
||||
QTest::newRow( "coalesce exp" ) << "coalesce(NULL, 1+1)" << false << QVariant( 2 );
|
||||
|
||||
// Datetime functions
|
||||
QTest::newRow( "to date" ) << "todate('2012-06-28')" << false << QVariant( QDate( 2012, 6, 28 ) );
|
||||
|
@ -8,3 +8,5 @@ ADD_PYTHON_TEST(PyQgsRasterFileWriter test_qgsrasterfilewriter.py)
|
||||
ADD_PYTHON_TEST(PyQgsMemoryProvider test_qgsmemoryprovider.py)
|
||||
ADD_PYTHON_TEST(PyQgsLogger test_qgslogger.py)
|
||||
ADD_PYTHON_TEST(PyQgsCoordinateTransform test_qgscoordinatetransform.py)
|
||||
ADD_PYTHON_TEST(PyQgsRectangle test_qgsrectangle.py)
|
||||
ADD_PYTHON_TEST(PyQgsSpatialIndex test_qgsspatialindex.py)
|
||||
|
147
tests/src/python/test_qgsrectangle.py
Normal file
147
tests/src/python/test_qgsrectangle.py
Normal file
@ -0,0 +1,147 @@
|
||||
import unittest
|
||||
|
||||
from qgis.core import (QGis,
|
||||
QgsRectangle,
|
||||
QgsPoint)
|
||||
|
||||
from utilities import getQgisTestApp
|
||||
QGISAPP, CANVAS, IFACE, PARENT = getQgisTestApp()
|
||||
|
||||
class TestQgsRectangle(unittest.TestCase):
|
||||
|
||||
def testCtor(self):
|
||||
rect = QgsRectangle( 5.0, 5.0, 10.0, 10.0)
|
||||
|
||||
assert rect.isEmpty(), "Empty rectangle constructed"
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(5.0, rect.xMinimum()))
|
||||
assert rect.xMinimum() == 5.0, myMessage
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(5.0, rect.yMinimum()))
|
||||
assert rect.yMinimum() == 5.0, myMessage
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(10.0, rect.xMaximum()))
|
||||
assert rect.xMaximum() == 10.0, myMessage
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(10.0, rect.yMaximum()))
|
||||
assert rect.yMaximum() == 10.0, myMessage
|
||||
|
||||
|
||||
def testDimensions(self):
|
||||
rect = QgsRectangle( 0.0, 0.0, 10.0, 10.0)
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(10.0, rect.width()))
|
||||
assert rect.width() == 10.0, myMessage
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(10.0, rect.height()))
|
||||
assert rect.height() == 10.0, myMessage
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
("5.0, 5.0", rect.center().toString()))
|
||||
assert rect.center() == QgsPoint(5.0, 5.0), myMessage
|
||||
|
||||
rect.scale(2.0)
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(20.0, rect.width()))
|
||||
assert rect.width() == 20.0, myMessage
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(20.0, rect.height()))
|
||||
assert rect.height() == 20.0, myMessage
|
||||
|
||||
def testIntersection(self):
|
||||
rect1 = QgsRectangle( 0.0, 0.0, 5.0, 5.0)
|
||||
rect2 = QgsRectangle( 2.0, 2.0, 7.0, 7.0)
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(True, rect1.intersects(rect2)))
|
||||
assert rect1.intersects(rect2), myMessage
|
||||
|
||||
rect3 = rect1.intersect(rect2)
|
||||
assert rect3.isEmpty(), "Empty rectangle returned"
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(3.0, rect.width()))
|
||||
assert rect.width() == 3.0, myMessage
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(3.0, rect.height()))
|
||||
assert rect.height() == 3.0, myMessage
|
||||
|
||||
def testContains(self):
|
||||
rect1 = QgsRectangle( 0.0, 0.0, 5.0, 5.0)
|
||||
rect2 = QgsRectangle( 2.0, 2.0, 7.0, 7.0)
|
||||
pnt1 = QgsPoint(4.0, 4.0)
|
||||
pnt2 = QgsPoint(6.0, 2.0)
|
||||
|
||||
rect3 = rect1.intersect(rect2)
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(True, rect1.contains(rect3)))
|
||||
assert rect1.contains(rect3), myMessage
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(True, rect2.contains(rect3)))
|
||||
assert rect2.contains(rect3), myMessage
|
||||
|
||||
# test for point
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(True, rect1.contains(pnt1)))
|
||||
assert rect1.contains(pnt1), myMessage
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(True, rect2.contains(pnt1)))
|
||||
assert rect2.contains(pnt1), myMessage
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(True, rect3.contains(pnt1)))
|
||||
assert rect3.contains(pnt1), myMessage
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(False, rect1.contains(pnt2)))
|
||||
assert rect1.contains(pnt2), myMessage
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(True, rect2.contains(pnt2)))
|
||||
assert rect2.contains(pnt2), myMessage
|
||||
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(True, rect3.contains(pnt2)))
|
||||
assert rect3.contains(pnt2), myMessage
|
||||
|
||||
def testUnion(self):
|
||||
rect1 = QgsRectangle( 0.0, 0.0, 5.0, 5.0)
|
||||
rect2 = QgsRectangle( 2.0, 2.0, 7.0, 7.0)
|
||||
pnt1 = QgsPoint(6.0, 2.0)
|
||||
|
||||
rect1.combineExtentWith(rect2)
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(True, rect1.contains(rect2)))
|
||||
assert rect1.contains(rect2), myMessage
|
||||
|
||||
print rect1.toString()
|
||||
assert rect1 == QgsRectangle(0.0, 0.0, 7.0, 7.0), "Wrong combine with rectangle result"
|
||||
|
||||
rect1 = QgsRectangle( 0.0, 0.0, 5.0, 5.0)
|
||||
rect1.combineExtentWith(6.0, 2.0)
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(True, rect1.contains(pnt1)))
|
||||
assert rect1.contains(pnt1), myMessage
|
||||
|
||||
print rect1.toString()
|
||||
assert rect1 == QgsRectangle(0.0, 0.0, 6.0, 6.0), "Wrong combine with point result"
|
||||
|
||||
rect1 = QgsRectangle( 0.0, 0.0, 5.0, 5.0)
|
||||
rect1.unionRect(rect2)
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
(True, rect1.contains(rect2)))
|
||||
assert rect1.contains(rect2), myMessage
|
||||
|
||||
assert rect1 == QgsRectangle(0.0, 0.0, 7.0, 7.0), "Wrong union result"
|
41
tests/src/python/test_qgsspatialindex.py
Normal file
41
tests/src/python/test_qgsspatialindex.py
Normal file
@ -0,0 +1,41 @@
|
||||
import unittest
|
||||
|
||||
from qgis.core import (QGis,
|
||||
QgsRectangle,
|
||||
QgsPoint)
|
||||
|
||||
from utilities import getQgisTestApp
|
||||
QGISAPP, CANVAS, IFACE, PARENT = getQgisTestApp()
|
||||
|
||||
class TestQgsSpatialIndex(unittest.TestCase):
|
||||
|
||||
def testIndex(self):
|
||||
idx = QgsSpatialIndex()
|
||||
fid = 0
|
||||
for y in range(5, 15, 5):
|
||||
for x in range(5, 25, 5):
|
||||
ft = QgsFeature()
|
||||
ft.setFeatureId(fid)
|
||||
ft.setGeometry(QgsGeometry.fromPoint(QgsPoint(x, y)))
|
||||
idx.insertFeature(ft)
|
||||
fid += 1
|
||||
|
||||
# intersection test
|
||||
rect = QgsRectangle(7.0, 3.0, 17.0, 13.0)
|
||||
fids = idx.intersects(rect)
|
||||
|
||||
assert len(fids) == 0, "No intersections"
|
||||
|
||||
fids.sort()
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
([1, 2, 5, 6], fids))
|
||||
assert fids == [1, 2, 5, 6], myMessage
|
||||
|
||||
# nearest neighbor test
|
||||
fids = idx.nearestNeighbor(QgsPoint(8.75, 6.25), 3)
|
||||
assert len(fids) == 0, "No intersections"
|
||||
|
||||
fids.sort()
|
||||
myMessage = ('Expected: %s\nGot: %s\n' %
|
||||
([0, 1, 5], fids))
|
||||
assert fids == [0, 1, 5], myMessage
|
Loading…
x
Reference in New Issue
Block a user