Merge branch 'master' of github.com:qgis/Quantum-GIS

This commit is contained in:
Etienne Tourigny 2012-09-07 15:08:37 -03:00
commit 32ea8f9772
67 changed files with 2704 additions and 1788 deletions

View File

@ -29,6 +29,7 @@ Giuseppe Sucameli
Horst Duester
Hyao (IRC nickname)
Ivan Lucena
Jaka Kranjc (lynxlynxlynx)
Jean-Denis Giguere
Jeremy Palmer
Jerrit Collord

View File

@ -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>

File diff suppressed because it is too large Load Diff

View File

@ -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);

View 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) &rarr; 2</code><br>
<code>coalesce(NULL, 2, 3) &rarr; 2</code><br>
<code>coalesce(7, NULL, 3*2) &rarr; 7</code><br><br>
<code>coalesce("fieldA", "fallbackField", 'ERROR') &rarr; value of fieldA if it is non-NULL
else the value of "fallbackField" or the string 'ERROR' if both are NULL</code><br>

View File

@ -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.

View File

@ -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;

View File

@ -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;

View File

@ -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" ) );

View File

@ -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 );
}

View File

@ -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;

View File

@ -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.
*/

View File

@ -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; }

View File

@ -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)."
) );

View File

@ -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 );
};

View File

@ -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 );

View File

@ -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)

View File

@ -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();

View File

@ -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;

View File

@ -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;

View File

@ -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 ) )

View File

@ -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() {}

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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
*/

View File

@ -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;

View File

@ -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 );
}

View File

@ -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( "&", "&amp;" ) );
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&nbsp;value</td>" ).arg( mCellStyle).arg( mOkStyle );
mReport += QString( "<td style='%1 %2 border: 1px solid'>correct&nbsp;value</td>" ).arg( mCellStyle ).arg( mOkStyle );
mReport += "<td></td>";
mReport += QString( "<td style='%1 %2 border: 1px solid'>wrong&nbsp;value<br>expected value</td></tr>").arg( mCellStyle).arg( mErrStyle );
mReport += QString( "<td style='%1 %2 border: 1px solid'>wrong&nbsp;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>";
}

View File

@ -28,6 +28,10 @@
#include "qgsrasterrenderer.h"
#include "qgsrasterprojector.h"
#ifdef _MSC_VER
#undef interface
#endif
/** \ingroup core
* Base class for processing modules.
*/

View File

@ -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;

View File

@ -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;

View File

@ -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

View 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.

View File

@ -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 )
{

View File

@ -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

View File

@ -422,7 +422,7 @@ void QgsCptCityColorRampV2Dialog::showEvent( QShowEvent * e )
tabBar->setCurrentIndex( 1 );
mModel = mAuthorsModel;
mBrowserView->setModel( mModel );
}
}
}
if ( modelIndex != QModelIndex() )
{

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 )

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 ) )
{

View File

@ -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

View File

@ -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();

View File

@ -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();

View File

@ -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 )

View File

@ -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 ) );

View File

@ -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)

View 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"

View 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