/[thuban]/branches/WIP-pyshapelib-bramz/ChangeLog
ViewVC logotype

Contents of /branches/WIP-pyshapelib-bramz/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2755 - (show annotations)
Thu Apr 12 09:21:58 2007 UTC (17 years, 10 months ago) by dpinte
File size: 480360 byte(s)
2007-04-12 Didrik Pinte <dpinte@itae.be>

   * Removed workaround for file encoding in the Thuban code


1 2007-04-12 Didrik Pinte <[email protected]>
2
3 * Removed workaround for file encoding in the Thuban code
4
5 2007-03-14 Bram de Greve <[email protected]>
6
7 * setup.py : updated in order to use the new dbflib C module in place
8 of the old SWIG one
9
10 2007-03-12 Didrik Pinte <[email protected]>
11
12 * setup.py : updated in order to use the new pyshapelib C module in place
13 of the old SWIG one
14
15 2007-02-26 Bernhard Reiter <[email protected]>
16
17 * MANIFEST.in: Added *.xmi to Doc so that ThubanModel.xmi is included.
18
19 * Extensions/svgexport/TODO: Added findings about how to write raster
20 in SVG.
21
22 * Extensions/svgexport/svgmapwriter.py: untabified two lines.
23 Fixed a typo.
24
25 * Doc/ThubanModel.xmi: Updated the format of the umbrello file.
26 Loaded and saved with umbrello 1.3.2, manually changed the
27 codegeneration tag to be empty again and change the XMI.model
28 to not contain a local path.
29 Now umbrello 1.5.5 also opens the file without crashing.
30 Thanks to Philippe LeGrand who discovered the problem and the
31 solution and filed report 141279 on bugs.kde.org for this umbrello
32 problem.
33
34 2007-02-21 Didrik Pinte <[email protected]>
35
36 * Extensions/umn_mapserver/__init__.py : UTF8 locales bugfix
37
38 2007-02-20 Bernhard Reiter <[email protected]>
39
40 * Thuban/version.py, setup.py: Getting ready for release 1.2.0.
41 Using this version number.
42
43 * Doc/README: fixed a typo.
44
45 * Doc/technotes/release_process.txt: Updated. Reference platform
46 is Debian Etch now. If windows, it should be window XP.
47 Marked a few entries in the instructions as "Old:".
48
49 * README: Bumped requirements to wxWidgets 2.6.3.2 and gdal 1.3.2..
50 Added urls for homepage and infrastructure on wald. Fixed a typo.
51
52 * MANIFEST.in: Added subdir "packaging" which should be in the tarball.
53
54 * NEWS: Completed changes from 1.1.0 until today as gathered from
55 the Changelog entries. Added small section about OGR known problems
56 because we do not have a release-notes file so far.
57
58 * Doc/manual/thuban-manual.xml: Removed the installation instructions
59 as they are outdated and they should be only in one place.
60 Bumped version number of the document to 1.2.0. Marked it as Draft
61 in the title.
62
63 * Extensions/svgexport/: Get ready for release. Bump version
64 number to 1.0.1. Adjusted numbers in TODO.
65
66 * Thuban/UI/about.py: Reworked the about text. It shows now
67 when somebody was active on Thuban. Added a list of maintainers.
68 Bernhard Reiter is the current maintainer, following up on Bernhard
69 Herzog.
70
71 * Extensions/export_shapefile/export_shapefile.py: untabify.
72
73 * test/README: Added example how to set the PATH for postgis on
74 Debian Etch.
75
76 2007-01-13 Didrik Pinte <[email protected]>
77
78 bboxdump, gns2shp, importAPR, mouseposition, ogr, profiling, svgexport
79 extensions migrated to wxPython 2.6
80
81 * Extensions/bboxdump/bboxdump.py:
82 updated wx statements
83
84 * Extensions/gns2shp/gns2shp.py:
85 updated wx statements
86
87 * Extensions/importAPR/importAPR.py:
88 updated wx statements
89
90 * Extensions/mouseposition/mouseposition.py:
91 updated wx statements
92
93 * Extensions/ogr/
94 ogrdialog.py, ogrstart.py:
95 updated wx statements
96
97 * Extensions/profiling/profiling.py:
98 updated wx statements
99
100 * Extensions/svgexport/
101 maplegend.py, svgsaver.py:
102 updated wx statements
103
104
105 2007-01-08 Didrik Pinte <[email protected]>
106
107 export_shapefile extension migrated to wxPython 2.6
108
109 * Extensions/export_shapefile/export_shapefile.py:
110 updated wx statements, changed the FileDialog to wx.SAVE (was wx.OPEN)
111
112 2007-01-08 Didrik Pinte <[email protected]>
113
114 umn_mapserver extension migrated to wxPython 2.6
115
116 * Extensions/umn_maserver/
117 mf_handle.py, mf_import.py, mf_export.py:
118 update wx imports to 2.6 policy
119
120 2007-01-06 Didrik Pinte <[email protected]>
121
122 UTF-8 locales support reading non utf-8 files.
123 This is a workaround and not a real bugfix. See
124 http://wald.intevation.org/tracker/index.php?func=detail&aid=118
125 for more details
126
127 * Thuban/UI/tableview.py, controls.py, baserenderer.py, view.py:
128 decode text from iso-8859-1 encoding.
129
130 2007-01-01 Bernhard Reiter <[email protected]>
131
132 * test/postgissupport.py, test/test_postgis_db.py: adding an
133 explicit WITH OIDS to the create table commands. This fixes tests
134 that rely on an oid column to be present for postgresql >=8.0.
135 Thanks for Frank Koormann for the hint.
136
137 2006-11-06 Didrik Pinte <[email protected]>
138
139 * libraries/thuban/wxproj.cpp: bugfix - allow compilation with
140 msvc++ toolkit 2003
141
142 2006-11-06 Bernhard Reiter <[email protected]>
143
144 Made it easier to run PostGIS test on Debian Etch. Improving
145 https://wald.intevation.org/tracker/index.php?func=detail&aid=173 .
146
147 * test/postgissupport.py: Taking pg_ctl and initdb commands
148 from internal variables now. Adding deactivated example values
149 for Debian Etch.
150 find_postgis_sql(): Added special line for Debian Etch postgresql-8.1.
151 Added copyright year 2006.
152
153 2006-10-25 Bernhard Reiter <[email protected]>
154
155 Moved ogr Extension to Extension menu.
156
157 * Extensions/ogr/
158 __init__.py, ogrstart.py, ogrshapes.py, ogrdialog.py
159 test/test_OGRShapestore.py, test/__init__.py:
160 adding encoding information and made sure Autor's names
161 with an umlaut are actually written with an umlaut.
162
163 * Extensions/ogr/ogrstrat.py: now registering in menu "Extensions",
164 having a "(testing)" string before the submenu to prepare for 1.2.0
165 release. Bumped copyright year to 2006.
166
167 2006-10-15 Bernhard Reiter <[email protected]>
168
169 * Thuban/UI/renderer.py: Added module variable verbose and
170 added verbose output before doing a raster projection.
171 Minor: Added (c) year 2006.
172
173 * test/test_baserenderer.py: Added new function
174 test_projected_raster_decimalcommalocale()
175 Added new author Bernhard Reiter and new copyright year 2006.
176
177 * libraries/thuban/gdalwarp.cpp(ProjectRasterFile): Adding
178 switching to LC_NUMERIC "C" and back before calling GDAL functions -
179 only #if python >=2.4 .
180
181 2006-10-10 Didrik Pinte <[email protected]>
182
183 Win32 build updates
184
185 * setup.py :
186 - update to the latest libs for win32 setup tasks
187 - added gdal and Lib content to the inno setup build task
188 - added stable and experimental extensions to setup packages
189
190 * thuban.py :
191 - gdal support for win32 inno installation
192
193 2006-10-10 Didrik Pinte <[email protected]>
194
195 * Thuban/Model/layer.py (Layer.GetLabelPosFromShape): new method
196 extracted from Thuban/UI/viewport.py
197 * Thuban/UI/viewport.py (Viewport.LabelShapeAt): uses new method
198
199 2006-09-28 Didrik Pinte <[email protected]>
200
201 * Thuban/UI/classgen.py: bugfix due to wx2.6 update
202
203 * Thuban/UI/view.py: removed non needed declaration
204
205 * Thuban/UI/selection.py : typo correction
206
207 2006-09-24 Bernhard Reiter <[email protected]>
208
209 * Thuban/Model/proj.py(_do_we_have_to_work_around_broken_proj):
210 Making the test more robust for observed python 2.3 problems
211 with setlocale().
212
213 * test/runtests.py: Added new option ---setdecimalcommalocale
214 to run all tests with an LC_NUMERIC that uses comma as decimal_point.
215 Minor: Added (c) year 2006. Fixed typo in a docstring.
216
217 * test/test_transientdb.py: Minor: Added (c) year 2006. Fixed typo in
218 a docstring.
219
220 2006-09-23 Bernhard Reiter <[email protected]>
221
222 * Extensions/ogr/test/test_OGRShapestore.py: fixed skip_if_no_ogr()
223 and added it to TestOGRTable.setUp() so that all tests get skipped
224 if ogr cannot be imported. Added (c) year 2006.
225
226 2006-09-18 Didrik Pinte <[email protected]>
227
228 * wxPython 2.6 update : wx 2.4 syntax has been updated to 2.6
229
230 2006-09-18 Bernhard Reiter <[email protected]>
231
232 Fixed proj behaviour with python >=2.4 when decimal_point != '.'.
233
234 * Thuban/UI/application.py: Fixed warning dialog when gdal is missing.
235
236 * test/test_proj.py: new test_lc_numeric_robustness(). Added author
237 Bernhard Reiter and new copyright year 2006.
238
239 * Thuban/Model/proj.py: New _do_we_have_to_work_around_broken_proj()
240 and Projection.assuregoodlocale(), Projection.assureinitlocale().
241 Added author Bernhard Reiter and (c) 2006.
242
243 2006-09-15 Bernhard Reiter <[email protected]>
244
245 * README: added RXP and pyRXP as optional for tests.
246
247 * test/localessupport.py: New. Contains a helper function
248 to find a locale with comma used as decimal_point.
249
250 2006-08-31 Bernhard Reiter <[email protected]>
251
252 * README: fixed URLs to sqlite and pysqlite.
253
254 * Thuban/UI/about.py: Added Didrik Pinte as contributor. Extended
255 copyright range to include 2006.
256
257 2006-06-29 Didrik Pinte <[email protected]>
258
259 * Thuban/UI/main.py: circular import fix.
260
261 2006-06-27 Frank Koormann <[email protected]>
262
263 New Classification "Pattern": Classify text attributes by regexp.
264
265 * Thuban/Model/classification.py (class ClassGroupPattern):
266 New, group is associated with a regular expression.
267 (Classification._compile_classification): Store compiled regexp and
268 original group for pattern.
269 (Classification.FindGroup): Added pattern.
270
271 * Thuban/UI/classifier.py
272 (ClassGrid._OnLabelRightClicked, ClassGrid.labelPopup):
273 New, add popup to select singleton/pattern.
274 (ClassTable.GetRowLabelValue, ClassTable.GetValueAsCustom,
275 ClassTable.SetValueAsCustom): Added pattern.
276 (ClassTable.__ParseInput): Autodetect singleton/pattern.
277
278 * Thuban/Model/save.py (SessionSaver.write_classification):
279 Added pattern.
280
281 * Thuban/Model/load.py (SessionLoader.start_clpattern,
282 SessionLoader.end_clpattern): New, process pattern elements.
283
284 * test/test_classification.py (class TestClassGroupPattern): New.
285 (TestClassification.test_add_pattern,
286 TestClassification.test_multiple_groups_textual,
287 TestClassification.test_deepcopy_textual): New.
288 (TestClassification.test_multiple_groups_numerical):
289 Renamed test_multiple_groups.
290 (TestClassification.test_deepcopy_numerical): Renamed test_deepcopy.
291
292 * test/test_save.py (SaveSessionTest.testClassifiedLayer):
293 Added pattern.
294
295 * test/test_load.py (ClassificationTest.TestLayers, TestClassification):
296 Added pattern.
297
298 * test/test_layer.py
299 (TestLayerModification.test_set_classification_textual): New
300 (TestLayerModification.test_set_classification_numerical):
301 Renamed test_set_classification.
302
303 * Doc/manual/thuban-manual.xml: Added pattern to layer classification
304 description.
305
306 * Resources/XML/thuban-1.1.dtd: Added clpattern element and attribs.
307
308 2006-06-29 Didrik Pinte <[email protected]>
309
310 * Thuban/version.py: Bugfix determination of SQLite, the wright one !
311
312 2006-06-28 Didrik Pinte <[email protected]>
313
314 * packaging/windows/thubanstart.py: sample file loading all the stable
315 extensions
316
317 2006-06-28 Didrik Pinte <[email protected]>
318
319 * Thuban/version.py: Bugfix determination of SQLite on old and recent
320 systems (support pysqlite1 and pysqlite2)
321
322 2006-06-27 Frank Koormann <[email protected]>
323
324 * Thuban/version.py: Bugfix determination of SQLite on old systems.
325
326 2006-05-17 Didrik Pinte <[email protected]>
327 * Extensions/ogr/__init__.py : updated test for win32 and correct
328 imports
329
330 2006-05-15 Didrik Pinte <[email protected]>
331 Ashamed ... still some tabs in the files
332
333 * Thuban/version.py : tabs removed
334 * Thuban/Model/transientdb.py : tabs removed
335
336 2006-05-15 Didrik Pinte <[email protected]>
337
338 * Thuban/version.py : coding style correction
339 * Thuban/Model/transientdb.py : coding style correction
340
341 2006-05-15 Didrik Pinte <[email protected]>
342
343 * Thuban/version.py : Updated imports to support pysqlite2
344
345 * Thuban/Model/transientdb.py : Updated imports to support pysqlite2
346 Patched the querying system to support the param style of pysqlite2
347
348 2006-04-24 Didrik Pinte <[email protected]>
349
350 * Extensions/svgexport/__init__.py: The extension now works on win32
351 architecture. Bug #87 corrected.
352
353 2006-04-20 Bernhard Reiter <[email protected]>
354
355 * Doc/technotes/coding_guidelines.txt: Changed text from CVS to SVN.
356 Removed emacs specific hint and replaced it with a general hint
357 that editors might support writing changelogs.
358
359 2006-04-12 Bernhard Reiter <[email protected]>
360
361 * Thuban/version.py: Changed thuban_release mechanism to use "svn"
362 instead of "cvs".
363
364 2006-03-31 Bernhard Reiter <[email protected]>
365
366 * libraries/thuban/wxproj.cpp: including proj_api.h instead of
367 projects.h now. According the Frank Warmerdam and man pj_init
368 this is the public interface to proj. Thus I have changed PJ to projPJ.
369 And I could remove the hack to avoid clashes with typedef PVALUE
370 and #define LP in projects.h clashing with symbols when trying to
371 build on windows. The file is cleaner and nicer now.
372
373 2006-03-29 Bernhard Reiter <[email protected]>
374
375 * libraries/thuban/wxproj.cpp: undef LP to avoid clash when
376 trying to build with mingw.
377
378 2005-10-18 Bernhard Reiter <[email protected]>
379
380 * Thuban/UI/about.py: remove unused import of getdefaultlocale.
381 Added display of internal encoding to the about dialog text.
382
383 * Extensions/svgexport/__init__.py: changed version to "1.0.0+cvs".
384
385 2005-10-18 Bernhard Reiter <[email protected]>
386
387 Startup improved: We fail right away if the internal encoding could
388 not be determined.
389
390 * Thuban/__init__.py (get_internal_encoding): new.
391
392 * test/test_stringrepresentation.py (class TestInternalEncoding):
393 Preserve the internal encoding for the tests in this class.
394
395 2005-10-17 Bernhard Reiter <[email protected]>
396
397 * test/test_stringrepresentation.py: New file, for now testing
398 that set_internal_coding() is throwing an exception for bad exceptions.
399
400 * Thuban/__init__.py (set_internal_encoding): added a forwards
401 and backward translation, so that we fail early if the
402 internal_encoding is bad.
403
404 2005-10-17 Bernhard Reiter <[email protected]>
405
406 svgexport 1.0.0cvs: Fixed ARC layer writing: No filling is done.
407 You could actually get polylines with filling in between,
408 when the classification for the lines had a fill color.
409 E.g. this happens when you generate a classification from a ramp.
410
411 * Extensions/svgexport/test/test_svgmapwriter.py:
412 New test_export_arc_no_fill(). Extend copyright notice to 2005.
413
414 * Extensions/svgexport/svgmapwriter.py
415 (SVGRenderer.draw_shape_layer_incrementally()):
416 Setting TRANSPARENT_BRUSH for shaptype ARC.
417 Extend copyright notice to 2005.
418
419 * Extensions/svgexport/__init__.py: Extend copyright notice to 2005.
420
421 2005-09-08 Frank Koormann <[email protected]>
422
423 * Doc/manual/thuban-manual.xml (Map Management): Fixed typo reported
424 by Erik (sigra.at.home.se)
425
426 2005-08-18 Jan-Oliver Wagner <[email protected]>
427
428 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
429 Call the right method for the default size.
430
431 2005-08-11 Jan-Oliver Wagner <[email protected]>
432
433 * Extensions/export_shapefile: New.
434
435 * Extensions/export_shapefile/__init__.py: New. Initialize
436 the export_shapefile extension.
437
438 * Extensions/export_shapefile/export_shapefile.py: New.
439 Exports a layer as a Shapefile.
440
441 2005-08-08 Jan-Oliver Wagner <[email protected]>
442
443 * po/de.po: String fixes. This fixes Debian bug #313843.
444
445 2005-07-27 Jan-Oliver Wagner <[email protected]>
446
447 Remove the attributes from the layer element in
448 .thuban files for the save routine.
449 This also solves RT bug #3149,
450 https://intevation.de/rt/webrt?serial_num=3149
451
452 * test/test_load.py: (TestSingleLayer, TestNonAsciiColumnName,
453 TestLayerVisibility, TestSymbolSize, TestClassification, TestLabels,
454 TestLayerProjection, TestJoinedTable, TestLabelLayer): Removed
455 attributes from layer element to classification clnull element.
456
457 * test/test_save.py (SaveSessionTest.testSingleLayer,
458 SaveSessionTest.testLayerProjection,
459 SaveSessionTest.testClassifiedLayer,
460 SaveSessionTest.test_joined_table, SaveSessionTest.test_save_postgis):
461 Removed attributes from layer element to classification clnull element.
462 (test_save_postgis.NonConnectionStore._fetch_table_information):
463 added pretending to have a shape_type.
464
465 * Resources/XML/thuban-1.1.dtd: Make the attributes field
466 and field_type of classification optional.
467
468 * Thuban/Model/classification.py (Classification.TreeItem.build_info):
469 Added output of size.
470
471 * Thuban/Model/load.py (SessionLoader.start_classification):
472 Change attribute 'field' and 'field_type' from obligatory to
473 optional to allow empty classes (ie. only with a default=clnull).
474
475 * Thuban/Model/save.py (SessionSaver.write_layer): Don't write
476 any attributes anymore for the layer element.
477 (SessionSaver.write_classification): Even if there is no
478 classification field, still write the classification because
479 the clnull (default) symbol will not be defined anymore as
480 part of the layer element.
481
482 2005-07-05 Bernhard Herzog <[email protected]>
483
484 * setup.py (setup call): Version 1.1.0
485
486 * NEWS: Update for 1.1.0
487
488 * MANIFEST.in: Add *.txt to files taken from Doc. Otherwise the
489 technores won't be included
490
491 * Thuban/UI/about.py (About.__init__): Extend copyright notice to
492 2005
493
494 * po/de.po: Updated.
495
496 2005-07-05 Bernhard Herzog <[email protected]>
497
498 * README: gdal 1.1.8 is too old. 1.2.5 works.
499
500 2005-07-05 Bernhard Herzog <[email protected]>
501
502 * Resources/XML/thuban-1.1.dtd (rasterlayer): Add the opacity and
503 masktype attributes.
504
505 2005-07-05 Bernhard Herzog <[email protected]>
506
507 * Thuban/Model/layer.py (Layer.__mangle_bounding_box)
508 (Layer.ClipBoundingBox): Rename ClipBoundingBox to
509 __mangle_bounding_box. See the comments in the code and RT #2845
510
511 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
512 Remove the explicit test of ClipBoundingBox. The method isn't
513 public anymore and the direct call in the test wasn't necessary in
514 the first place. If ClipBoundingBox (now __mangle_bounding_box)
515 isn't called, the return value of ShapesInRegion will be
516 different.
517
518 2005-07-05 Bernhard Herzog <[email protected]>
519
520 * Thuban/UI/viewport.py (ViewPort.set_view_transform): Handle
521 ZeroDivisionError exceptions. I don't know when they happen
522 exactly. It probably happens when the projections aren't set
523 properly.
524
525 2005-07-01 Bernhard Herzog <[email protected]>
526
527 First step towards unicode. With this roughly we're at step 1
528 string_representation.txt
529
530 * Doc/technotes/string_representation.txt: New. Document how
531 strings are represented in Thuban and how to get to a Unicode
532 Thuban.
533
534 * Thuban/__init__.py (set_internal_encoding)
535 (unicode_from_internal, internal_from_unicode): New. The first few
536 functions for the internal string representation
537
538 * Thuban/UI/about.py (unicodeToLocale): Removed. Use
539 internal_from_unicode instead.
540
541 * Thuban/UI/__init__.py (install_wx_translation): Determine the
542 encoding to use for the internal string representation. Also,
543 change the translation function to return strings in internal
544 representation even on unicode builds of wxPython
545
546 * Thuban/Model/load.py (SessionLoader.check_attrs): Decode
547 filenames too.
548 (SessionLoader.start_clrange): Use check_attrs to decode and check
549 the attributes.
550
551 * Thuban/Model/xmlreader.py (XMLReader.encode): Use
552 internal_from_unicode to convert unicode strings.
553
554 * Thuban/Model/xmlwriter.py (XMLWriter.encode): Use
555 unicode_from_internal when applicable
556
557 * test/runtests.py (main): New command line option:
558 internal-encoding to specify the internal string encoding to use
559 in the tests.
560
561 * test/support.py (initthuban): Set the internal encoding to
562 latin-1
563
564 * test/test_load.py (TestSingleLayer.test, TestClassification.test)
565 (TestLabelLayer.test): Use the internal string representation when
566 dealing with non-ascii characters
567
568 * test/test_load_1_0.py (TestSingleLayer.test)
569 (TestClassification.test, TestLabelLayer.test): Use the internal
570 string representation when dealing with non-ascii characters
571
572 * test/test_load_0_9.py (TestSingleLayer.test)
573 (TestClassification.test): Use the internal string representation
574 when dealing with non-ascii characters
575
576 * test/test_load_0_8.py (TestUnicodeStrings.test): Use the
577 internal string representation when dealing with non-ascii
578 characters
579
580 * test/test_save.py (XMLWriterTest.testEncode)
581 (SaveSessionTest.testClassifiedLayer): Use the internal string
582 representation when dealing with non-ascii characters where
583 applicable
584
585 2005-06-30 Bernhard Herzog <[email protected]>
586
587 * test/runtests.py: Untabify.
588
589 2005-06-30 Bernhard Herzog <[email protected]>
590
591 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
592 untabify.
593
594 2005-06-30 Bernhard Herzog <[email protected]>
595
596 * Extensions/ogr/test/__init__.py: Add missing coding directive
597
598 2005-06-28 Jan-Oliver Wagner <[email protected]>
599
600 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
601 Use the default size for rendering selected items of default type.
602 Fixes part 2 of https://intevation.de/rt/webrt?serial_num=3149
603
604 2005-06-28 Jan-Oliver Wagner <[email protected]>
605
606 * Extensions/importAPR/apr.py (APR_BShSym): Extend by 'Stripple'.
607 (APR_TClr.GetThubanColor): Fix bug in color interpretation.
608 Thanks to Frank Koormann who identified this problem.
609
610 * Extensions/importAPR/importAPR.py (APR_VShSym): New. Just
611 another symbol identified.
612
613 2005-06-27 Jan-Oliver Wagner <[email protected]>
614
615 * Doc/manual/thuban-manual-de.xml: More translations.
616
617 2005-05-12 Jonathan Coles <[email protected]>
618
619 * Thuban/UI/projdialog.py: Add missing import, which led to an
620 exception when opening a layer's projection.
621
622 2005-05-09 Bernhard Herzog <[email protected]>
623
624 * test/support.py (FileLoadTestCase.filename): Fix doc-string.
625
626 2005-05-09 Bernhard Herzog <[email protected]>
627
628 * Thuban/Model/postgisdb.py (PostGISConnection.connect): Set the
629 connection to autoconnect. Fixes RT#3148.
630
631 * test/test_postgis_db.py
632 (TestPostGISSpecialCases.test_simple_error_handling): New test
633 that attempts to reproduce RT#3148.
634
635 2005-05-06 Jonathan Coles <[email protected]>
636
637 Add support for saving and loading the opacity and mask type
638 properties of RasterLayers. Also add support for proper use
639 of alpha information while drawing images not in 'RAW' format.
640 If transparency in an image format (e.g, PNG) is supported by
641 wxWidgets then the image would previously have been draw with
642 transparent regions, but the opaque regions would have been
643 unaffected by a change in the layer's opacity. This patch
644 corrects the problem.
645
646 * Thuban/Model/layer.py (RasterLayer): Added opacity and
647 masktype parameters to the constructor, and set the
648 appropriate variables to those values.
649
650 * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Added
651 code to read the opacity and mask type of the layer and construct
652 a new layer with the additional parameters.
653
654 * Thuban/Model/save.py (SessionSaver.write_layer): Added code
655 to save the opacity and mask type of a layer.
656
657 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Pass
658 the opacity of the layer to draw_raster_data rather than the layer.
659 (BaseRenderer.draw_raster_data): Remove the layer parameter because
660 the function doesn't need to know about the layer. Add the optional
661 opacity parameter whose default is 1.0. Add 'PNG' as a supported
662 graphics format.
663
664 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Fixed
665 signature to match that in BaseRenderer. Use the new opacity argument
666 in place of calling layer.Opacity(). In the case where the
667 format is not 'RAW', alpha_data is None and the loaded image has
668 alpha information, use the file's alpha information. This is
669 still subject to the layer's opacity setting.
670
671 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data):
672 Fixed signature to match that in BaseRenderer.
673
674 * test/test_load.py (TestRasterLayer): Change file_contents to
675 include opacity and masktype variables.
676 (TestRasterLayer.test): Include tests for opacity and masktype
677 changes.
678
679 * test/test_save.py (SaveSessionTest.testRasterLayer): Restructure
680 test to cover a variety of combinations of masktype and opacity
681 settings.
682
683 2005-05-02 Jan-Oliver Wagner <[email protected]>
684
685 * debian/rules: add --use-wx-python-swig-hack
686 to the build command.
687 Thanks to Moritz Lennert for pointing this out.
688
689 2005-04-28 Jan-Oliver Wagner <[email protected]>
690
691 Introduce OGRFileShapeStore in ogr extension.
692 This allows at least that loaded shapefile shape stores
693 can be saved correctly in the thuban session file
694 and reloaded again (reload is via core shapefile
695 routine, not OGR). For other types, .thuban files
696 can not be reloaded for the time being.
697
698 * Extensions/ogr/ogrshapes.py (OGRFileShapeStore): New. This
699 class ist to be used for any file-based shape stores
700 accessed through OGR.
701
702 * Extensions/ogr/ogrstart.py (open_with_ogr): Added
703 forgotten _ for i18n. Adapted call OpenFileShapestore
704 regarding new parameter.
705 (OpenFileShapestore): Use OGRFileShapeStore instead of
706 OGRShapeStore. Fix return value (None instead of null).
707 Add new parameter "mainwindow" to avoid accessing global
708 context.
709
710 2005-04-27 Jan-Oliver Wagner <[email protected]>
711
712 Introduce FileShapeStore as generalization for
713 file-based shape stores. In a first instance
714 this allows additional modules to handle shapefile
715 format as well, namely the OGR extension.
716
717 * Thuban/Model/data.py: Various small fixes in doc-strings.
718 (FileShapeStore): New class.
719 (ShapefileStore): Derive from FileShapeStore.
720 (ShapefileStore.__init__): Call __init__ of FileShapeStore,
721 rename self.table to self._table, initialize self._bbox
722 (ShapefileStore._open_shapefile): Use self._bbox instead of self.bbox
723 and self.FileName() instead of self.filename.
724 (ShapefileStore.Table): Use self._table instead of self.table.
725 (ShapefileStore.FileName): Removed (moved to FileShapeStore).
726 (ShapefileStore.BoundingBox): Use self._bbox instead of self.bbox.
727
728 * Thuban/Model/save.py: Replace ShapefileStore by FileShapeStore.
729 (SessionSaver.write_data_containers): Only use methods of the
730 base class FileShapeStore.
731
732 2005-04-26 Martin Schulze <[email protected]>
733
734 * Extensions/wms/wms.py (render_wms_layer): Adjusted the render
735 function to the modified render engine
736
737 2005-04-25 Martin Schulze <[email protected]>
738
739 * Thuban/UI/renderer.py (MapRenderer.projected_raster_layer):
740 Added a description according to the CVS log message
741
742 2005-04-23 Martin Schulze <[email protected]>
743
744 * Thuban/UI/renderer.py: Added a missing import
745
746 2005-04-23 Russell Nelson <[email protected]>
747
748 * Thuban/UI/view.py (MapCanvas.OnMiddle{Up,Down}): Changed the
749 way the previous tool is remembered, so that middle-button
750 panning works even if you haven't selected a tool.
751
752 2005-04-11 Bernhard Herzog <[email protected]>
753
754 * libraries/thuban/wxproj.cpp: Move the compatibility code that
755 deals with the wxPython 2.4 version of wxPython.h into the #ifdef
756 branch that includes wxPython.h because it's only needed when
757 wxPython.h is used. Also, it won't compile when
758 USE_WX_PYTHON_SWIG_HACK is set otherwise.
759
760 2005-04-07 Bernhard Herzog <[email protected]>
761
762 * Thuban/UI/classifier.py (ClassGrid.__init__): Use -1 as the ID.
763 (ID_CLASS_TABLE): Removed. It wasn't used anywhere except in
764 ClassGrid.__init__ and it's value is outside of the valid
765 range (must be < 32768). wxPython 2.5 complains about it with an
766 exception.
767
768 2005-04-05 Jan-Oliver Wagner <[email protected]>
769
770 * Doc/manual/thuban-manual-de.xml: More translations.
771
772 2005-04-05 Bernhard Herzog <[email protected]>
773
774 * libraries/thuban/wxproj.cpp: Make it work with a wxPython.h from
775 wxPython 2.4 as well. Also, remove a now obsolete comment.
776
777 2005-04-05 Bernhard Herzog <[email protected]>
778
779 Use wxPython.h by default but provide a workaround when it isn't
780 available.
781
782 * setup.py (wxproj_extension): New variable. Assign the Extension
783 instance for Lib.wxproj to this variable instead of putting it
784 directly into the listso that it can be accessed by other code
785 later.
786 (thuban_build_ext.user_options): Added boolean option
787 --use-wx-python-swig-hack.
788 (thuban_build_ext.initialize_options): Initialize the new option
789 to False.
790 (thuban_build_ext.finalize_options): If the new option was given,
791 define the preprocesser macro USE_WX_PYTHON_SWIG_HACK.
792 (thuban_build_ext): Update the doc-string
793
794 * libraries/thuban/wxproj.cpp: Normally we use
795 wx/wxPython/wxPython.h now. Only if USE_WX_PYTHON_SWIG_HACK is
796 defined, use swigPtrConvertHack.h instead.
797
798 * libraries/thuban/swigPtrConvertHack.h: Remove the code that was
799 copied over from wxPython.h.
800 (decode_pointer_new): New. Equivalent of decode_pointer for
801 wxPython 2.5.
802 (wxPyConvertSwigPtr): Modified to cope with wxPython 2.5 as well.
803
804 * README: Add section on potential build problems which explains
805 how the work-around for a missing wxPython.h is activated.
806
807 2005-03-29 Bernhard Herzog <[email protected]>
808
809 * test/postgissupport.py (find_postgis_sql): Added yet another
810 potential location for (lw)postgis.sql because the file has moved
811 again in postgis 1.0.0 rc4.
812
813 2005-03-29 Bernhard Herzog <[email protected]>
814
815 * Thuban/UI/legend.py (BMP_SIZE_W, BMP_SIZE_H): Set both to 16 to
816 match the site of the legend_icon_layer icon. Otherwise wxpython
817 2.5 complains when the legend is created with the error:
818
819 PyAssertionError: C++ assertion "(bitmap.GetWidth() == m_width &&
820 bitmap.GetHeight() == m_height) || (m_width == 0 && m_height ==
821 0)" failed in ./src/generic/imaglist.cpp(81): invalid bitmap size
822 in wxImageList: this might work on this platform but definitely
823 won't under Windows.
824
825 2005-03-23 Jonathan Coles <[email protected]>
826
827 These changes add support for adjusting the opacity of a raster layer.
828
829 * Thuban/Model/layer.py (RasterLayer.Opacity): Replaces AlphaOpacity.
830 (RasterLayer.SetOpacity): Replaces SetAlphaOpacity. Also triggers
831 a LAYER_CHANGED event if the opacity actually changes.
832
833 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_data): Added
834 layer parameter needed in the implementation of this method in
835 renderer.py.
836
837 * Thuban/UI/layerproperties.py (LayerProperties.dialog_layout): Fixed
838 typo 00 -> 0.
839
840 * Thuban/UI/rasterlayerproperties.py (RasterLayerProperties): Added
841 control to adjust opacity.
842
843 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Scale the
844 alpha data based on the opacity level of the layer.
845
846 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Now
847 accepts a layer parameter.
848
849 * test/test_layer.py (TestLayerModification.test_raster_layer):
850 Rename opacity method calls and add test for LAYER_CHANGED.
851
852 2005-03-16 Bernhard Herzog <[email protected]>
853
854 * test/test_connector.py (DeletionTestMixin.check_deletions)
855 (DeletionTestMixin.check_deletetions): renamed to check_deletions.
856 update the callers.
857
858 2005-03-14 Jan-Oliver Wagner <[email protected]>
859
860 * Doc/manual/thuban-manual-de.xml: More translations.
861
862 2005-03-10 Jan-Oliver Wagner <[email protected]>
863
864 Introducing initialization callbacks for extensions.
865
866 * Thuban/UI/extensionregistry.py (ExtensionDesc.__init__): Added
867 optional parameter init_callback.
868 (ExtensionDesc.init_ext): New. Executes the callback and sets
869 a status.
870
871 * Thuban/UI/application.py (ThubanApplication.OnInit): Add the
872 initialization of the extensions.
873 (ThubanApplication.init_extensions): Init all extensions.
874
875 * Thuban/UI/about.py (About.__init__): Added status of the extensions
876 to the about text.
877
878 * Extensions/gns2shp/__init__.py: Added init method for Extension
879 description.
880 (init): New. Contains the initialization of the module.
881
882 2005-03-04 Nina Hüffmeyer <[email protected]>
883
884 * Extensions/ogr/ogrdialog.py: Added a dialog, which asks for
885 OGRConnection to open a datasource. Removed dialog to display all
886 available drivers. Added some doc strings.
887
888 * Extensions/ogr/ogrstart.py: Added menu entry for opening an
889 OGRDatasource with a string. Added two opening methods which return an
890 OGRDatasource (either data from file or from DB).
891
892 * Extensions/ogr/ogrshapes.py: Added class OGRGeometry, which
893 represents a geometry reference of an OGRFeature. OGRShape now has a
894 list of referenced geometry objects (important for geometry
895 collections).
896 For OGRShapeStores loaded from a DB an ID column can be specified now.
897
898 2005-02-22 Jan-Oliver Wagner <[email protected]>
899
900 * test/test_map.py (TestMapWithContents.test_tree_info):
901 Added label layer for comparison.
902
903 2005-02-18 Jonathan Coles <[email protected]>
904
905 * libraries/thuban/gdalwarp.cpp (GetImageData): Optimize the loop
906 which builds a mask. Handle the majority of an image in a loop,
907 creating 8 bits at a time. Later, handle the edge case where less
908 than 8 bits are packed.
909
910 2005-02-18 Bernhard Herzog <[email protected]>
911
912 * test/test_baserenderer.py (TestBaseRenderer.setUp): Fix
913 doc-string
914
915 2005-02-18 Jonathan Coles <[email protected]>
916
917 * setup.py: Remove wx_cs_params from gdal compile options.
918
919 2005-02-18 Jonathan Coles <[email protected]>
920
921 Refactored baserenderer.py and renderer.py to remove baserenderer.py's
922 dependencies on wxPython. Added a new method projected_raster_layer()
923 that returns a raster layer image in projected space. This must be
924 implemented in classes derived from BaseRenderer. This also eliminates
925 the dependency on gdal in baserenderer.py.
926
927 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Call
928 new projected_raster_layer() to get projected raster image instead
929 of directly calling ProjectRasterFile().
930 (BaseRenderer.projected_raster_layer): New. This must be implemented
931 by derived classes. It takes almost the same arguments as ProjectRasterFile
932 did and returns a projected image with mask and alpha data (if requested).
933 (BaseRenderer.render_map_incrementally): Remove the check for gdal since
934 that check will be done in MapRenderer.projected_raster_layer(). This
935 also allows other implementations to use different projection code.
936
937 * Thuban/UI/renderer.py (MapRenderer.projected_raster_layer):
938 Implementation of BaseRenderer.projected_raster_layer. Checks for
939 gdal support and wxPython version. Also handles exceptions from
940 ProjectRasterFile.
941
942 * libraries/thuban/gdalwarp.cpp: Removed checks for wxPython versions
943 and added a variable which can be set through the options argument
944 of ProjectRasterFile.
945
946 * test/test_baserenderer.py (SimpleRenderer.projected_raster_layer): New.
947 Calls ProjectRasterFile and returns the result.
948 (TestBaseRenderer.test_projected_raster_layer): New. Tests the results
949 of calling projected_raster_layer() with different options.
950 (TestBaseRenderer.test_raster_no_projection): Removed tests based on
951 wxPython version and all tests of masks and alpha channels. These are
952 now in test_projected_raster_layer().
953
954 2005-02-17 Jan-Oliver Wagner <[email protected]>
955
956 * Thuban/Model/map.py, Thuban/Model/label.py: Fixed
957 doc-strings to comply with coding_guidelines.
958
959 2005-02-17 Jan-Oliver Wagner <[email protected]>
960
961 Docstring improvements and minor fixes for labellayer.
962
963 * Thuban/Model/map.py:
964 (Map, Map.Destroy, Map.RemoveLayer, Map.ClearLayers,
965 Map.Layers, Map.HasLayers, Map.MoveLayerToTop,
966 Map.RaiseLayer, Map.LowerLayer, Map.MoveLayerToBottom,
967 Map.ProjectedBoundingBox, Map.GetProjection): Improved/added
968 doc string.
969 (Map.BoundingBox): Removed superfluous test for label_layer
970 and improved doc string.
971 (Map.TreeInfo): Added label_layer and improved sdo string.
972
973 * Thuban/Model/label.py: Added import of _.
974 (Label, Label.__init__): Improved/added doc string.
975 (LabelLayer, LabelLayer.__init__, LabelLayer.Labels,
976 LabelLayer.RemoveLabel, LabelLayer.ClearLabels):
977 Improved/added doc string.
978 (LabelLayer.AddLabel): Use already defined names for
979 align strings and improved doc string.
980 (LabelLayer.TreeInfo): New. Return the object data for
981 the tree view.
982
983 2005-02-16 Jonathan Coles <[email protected]>
984
985 Further wxPython 2.5 changes using patches from Daniel Calvelo Aros
986 so that that wxproj doesn't crash. Added GUI support for selecting
987 alpha channel (opacity can't be selected yet).
988
989 NOTE: If wxPython.h is including in future distribution packages
990 then it will not be necessary to have the files swigPtrConvertHack.h
991 and wxPython_int.h included with Thuban. This is hopefully
992 a temporary workaround.
993
994 * setup.py (thuban_build_ext.finalize_options): gdalwarp needs
995 access to the macro wxCHECK_VERSION so that it will properly
996 generate a bit mask. There was a problem between wx2.4 and wx2.5
997 that this works around.
998
999 * Thuban/Model/layer.py (RasterLayer.UseMask): Removed in favor
1000 of RasterLayer.MaskType.
1001 (RasterLayer.SetUseMask): Removed in favor of RasterLayer.SetMaskType
1002 (RasterLayer.MaskType): New. Returns the type of mask to use. Can
1003 specify none, a bitmap, or an alpha channel.
1004 (RasterLayer.SetMaskType): New. Set what kind of mask to use.
1005
1006 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer):
1007 Set the raster warping options for the mask based on the value
1008 of RasterLayer.MaskType.
1009
1010 * Thuban/UI/legend.py (LegendTree.__FillTreeLayer): Remove
1011 deprecated calls to SetItemSelectedImage in favor of SetItemImage
1012 with wxTreeItemIcon_Selected.
1013
1014 * Thuban/UI/rasterlayerproperties.py: Support selecting to use
1015 an alpha channel for the mask.
1016
1017 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Use alpha
1018 data if it is available and an alpha channel is supported under
1019 the current version of wxPython.
1020
1021 * libraries/thuban/gdalwarp.cpp (GetImageData): Added compiler define
1022 to select whether 1's or 0's select the desired portion of an image
1023 in the bit mask. wx2.4 has a bug where the documentation is the opposite
1024 from behavior.
1025 (ProjectRasterFile): Only generate an alpha channel if the version
1026 of wxPython is >= 2.5.3.
1027
1028 * libraries/thuban/wxproj.cpp: Applied patches from Daniel Calvelo Aros.
1029 When wxPython >= 2.5.3 use the special swig functions to decode an
1030 object's address.
1031
1032 * libraries/thuban/swigPtrConvertHack.h: Includes conditional code
1033 based on the version of wxPython. If >= 2.5.3 use the special swig
1034 functions from wxPython to decode wxPython objects, otherwise use
1035 the old method of retrieving the address from the object __repr__ string.
1036
1037 * libraries/thuban/wxPython_int.h: Copied from wxPython source.
1038 Unnecessary code was removed to make it smaller.
1039
1040 * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
1041 Add tests for returning an alpha channel.
1042
1043 * test/test_layer.py (TestLayerModification.test_raster_layer): Fix
1044 tests that used removed functions UseMask and SetUseMask
1045
1046
1047 2005-02-08 Bernhard Herzog <[email protected]>
1048
1049 More wxPython 2.5 changes. This time taken from a patch from
1050 Daniel Calvelo Aros.
1051
1052 * Thuban/UI/tableview.py (QueryTableFrame.__init__)
1053 (QueryTableFrame.__init__): Pass the size of a spacer as a single
1054 item.
1055
1056 * Thuban/UI/projdialog.py (ProjFrame.build_dialog)
1057 (ProjFrame.build_dialog): Pass the size of a spacer as a single
1058 item.
1059
1060 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Pass the
1061 size of a spacer as a single item.
1062
1063 * Thuban/UI/classifier.py (Classifier.dialog_layout): Pass the
1064 size of a spacer as a single item.
1065
1066 2005-02-08 Bernhard Herzog <[email protected]>
1067
1068 Compatibility with wxPython 2.5. The changes should make it work
1069 better with 2.5 while still keeping compatibility with 2.4. There
1070 are still problems with 2.5, though.
1071
1072 * Thuban/UI/dock.py (DockableWindow.__CreateBorder): Pass the size
1073 of a spacer as a single item.
1074
1075 * Thuban/UI/classifier.py (ClassGroupPropertiesCtrl): Derive only
1076 from wxControl
1077
1078 * Thuban/UI/legend.py (LegendTree): When running with wxPython <
1079 2.5, add an implementation of the GetFirstChild method that does
1080 not require the second parameter.
1081 (LegendTree.find_layer, LegendTree._OnMsgMapLayersAdded)
1082 (LegendTree._OnMsgMapLayersRemoved, LegendTree.DeleteAllItems)
1083 (LegendTree.DeleteChildren, LegendTree.__ShowHideLayer): Do not
1084 pass the second parameter to GetFirstChild
1085
1086 2005-02-08 Nina Hüffmeyer <[email protected]>
1087
1088 * Extensions/ogr/ogrshapes.py: Removed some print commands.
1089
1090 * Extensions/ogr/ogrstart.py: Changed the GUI. OGR is no longer an
1091 additional menu but appears as a possibility in the menu Map.
1092
1093 2005-02-07 Jonathan Coles <[email protected]>
1094 * libraries/thuban/gdalwarp.cpp: Removed the macros PYTHON_ERR
1095 and PYTHON_ERRF since they were no longer necessary.
1096
1097 2005-02-07 Bernhard Reiter <[email protected]>
1098 * Thuban/UI/classifier.py (ClassGrid.DeleteSelectedRows):
1099 Enable translation for message string.
1100
1101 2005-02-06 Martin Schulze <[email protected]>
1102
1103 * Extensions/wms/infodialog.py (wmsInfoDialog.__init__): Adjusted
1104 the arguments of the contstructor to fit the global scheme
1105
1106 2005-01-31 Nina Hüffmeyer <[email protected]>
1107
1108 * Extensions/ogr/ogrdialog.py: Added class ogrdialog.py, which provides
1109 some dialogs needed to start ogr.
1110
1111 * Extensions/ogr/__init__.py: Changed comments to avoid encoding
1112 warnings.
1113
1114 * Extensions/ogr/test/test_OGRShapestore.py: Changed comments to avoid
1115 encoding warnings.
1116
1117 2005-01-28 Jonathan Coles <[email protected]>
1118
1119 * libraries/thuban/gdalwarp.cpp (GetImageData): Recode how the
1120 mask is packed into a bit array. It's now slightly faster.
1121
1122 2005-01-28 Jonathan Coles <[email protected]>
1123
1124 * Thuban/Model/layer.py (RasterLayer.__init__): Make use_mask
1125 default to true.
1126
1127 * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Remove
1128 code that loads the state of the layer's use_mask flag. Its
1129 usefulness is still being debated.
1130
1131 * Thuban/Model/save.py (SessionSaver.write_layer): Remove
1132 code that saves the state of the layer's use_mask flag. Its
1133 usefulness is still being debated.
1134
1135 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Pass
1136 options to ProjectRasterFile based on the state of layer.UseMask().
1137 Catch more exceptions from ProjectRasterFile so that Thuban doesn't
1138 quit is there is a problem projecting.
1139 (BaseRenderer.draw_raster_data): Change the documentation to
1140 describe the new format (XBM) that the mask data will be in.
1141
1142 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): The mask
1143 data is in XBM format when format='RAW' which means it doesn't
1144 need to be converted to a wxImage before being used as a mask
1145 for a wxBitmap. Assume that if format != 'RAW' that the image
1146 data and mask data are in the same format.
1147
1148 * libraries/thuban/gdalwarp.cpp (GetImageData): If alpha is enabled
1149 and a mask is requested, convert the alpha band to a bit array in
1150 XBM format. if an alpha channel is requested, simply return the
1151 data in the alpha band. Provide better error handling by returning
1152 python error messages (also fixes RT #2947).
1153 (ProjectRasterFile): Support multiple mask options, rather than simply
1154 a flag indicating that a mask should or should not be used. Provide
1155 better error handling by returning python error messages.
1156
1157 * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
1158 Add mask data to test.
1159
1160 * test/test_layer.py (TestLayer.test_raster_layer): Test that a layer
1161 should use the mask by default.
1162 (TestLayerModificaton.test_raster_layer): Test that a layer should use
1163 the mask by default.
1164
1165 * test/test_load.py (TestRasterLayer.test): Remove testing for
1166 use_mask flag in file.
1167
1168 * test/test_save.py (SaveSessionTest.testRasterLayer): Remove testing
1169 for use_mask in file.
1170
1171 * test/test_load_1_0_1.py: Removed. Shouldn't have been checked in.
1172
1173 2005-01-26 Jonathan Coles <[email protected]>
1174
1175 Add a new dialog box for raster layers. The dialog box allows
1176 the user to toggle a mask that is generated by ProjectRasterFile
1177 and is used to only draw the real parts of the projected image.
1178
1179 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer):
1180 Instruct the warping code to generate a mask if the raster layer
1181 requests one.
1182 (BaseRenderer.draw_raster_data): Removed obsolete optional mask argument.
1183
1184 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Removed
1185 obsolete optional mask argument.
1186
1187 * Thuban/UI/classifier.py (Classifier): Change the parent class
1188 to LayerProperties and rework the code to support layout calls
1189 from the parent.
1190 (Classifier.dialog_layout): New. Layout the dialog box.
1191 (Classifier.map_layers_removed): Removed. Moved to parent class.
1192 (Classifier.map_replaced): Removed. Moved to parent class.
1193 (Classifier._OnTry): Renamed to OnTry to support parent class.
1194 (Classifier.OnClose): Removed. Supplied in parent class.
1195 (Classifier._OnCloseBtn): Removed. Supplied in parent class as OnCloseBtn.
1196 (Classifier._OnOK): Renamed to OnOK to support parent class.
1197 (Classifier._OnRevert): Renamed to OnRevert to support parent class.
1198
1199 * Thuban/UI/layerproperties.py: New. Base class for layer properties
1200 dialog boxes.
1201
1202 * Thuban/UI/rasterlayerproperties.py: New. Class for displaying
1203 raster layer properties.
1204
1205 * libraries/thuban/gdalwarp.cpp: Replace the old gdalwarp.cpp code
1206 with the non-simple version supplied with gdal. This allows added
1207 features such as creating an alpha band.
1208 (GetImageData): Generate a mask array from the alpha band that is
1209 generated by gdal if the user has selected it. Try to support images
1210 that have more than three bands, such as images with RGB plus an
1211 alpha band.
1212 (ProjectRasterFile): Convert python argument for mask and tell
1213 gdal to enable or disable an alpha band.
1214
1215 * Thuban/Model/layer.py (BaseLayer.Type): New. Returns a string
1216 describing what kind of layer the class is. Defaults to "Unknown",
1217 but should be overridden by subclasses.
1218 (Layer.Type): New. Override base class method.
1219 (RasterLayer.__init__): Create a flag for using a mask. Record extra
1220 data from gdal for display in the properties dialog.
1221 (RasterLayer.Type): New. Override base class method.
1222 (RasterLayer.UseMask): New. Returns True if the mask should be used.
1223 (RasterLayer.SetUseMask): New. Set if the mask should be used.
1224 (RasterLayer.ImageInfo): New. Return extra information about the image.
1225
1226 * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Load
1227 the mask information.
1228
1229 * Thuban/Model/save.py (SessionSaver.write_layer): Save mask information.
1230
1231 * Thuban/UI/mainwindow.py: Register the RasterLayerProperties and
1232 Classifier classes as dialogs to use with the proper layer types.
1233
1234 * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
1235 Fix test.
1236
1237 * test/test_layer.py (TestLayer.test_raster_layer): Test new methods.
1238 (TestLayerModification.build_path): New. Support function.
1239 (TestLayerModification.test_raster_layer): New. Test new methods.
1240
1241 * test/test_save.py (SaveSessionTest.testRasterLayer): Add tests for mask.
1242
1243 * test/test_load.py (TestRasterLayer): Add tests for mask.
1244
1245 * test/test_load_1_0_1.py: New. Copied from test_load.py.
1246
1247 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Removed
1248 obsolete optional mask argument.
1249
1250 2005-01-26 Nina Hüffmeyer <[email protected]>
1251
1252 * Extensions/ogr/ogrshapes.py: Added two dictionaries to ShapeStore
1253 which maps the ids and the ordinals. Fixed RowIdToOrdinal(),
1254 RowOrdinalToId() and ReadRowAsDict().
1255
1256 * Extensions/ogr/ogrstart.py: Added menu item which opens database
1257 layers for existing database connections.
1258
1259 * Extensions/ogr/test/test_OGRShapestore.py: Fixed a message string.
1260
1261
1262 2005-01-26 Jan-Oliver Wagner <[email protected]>
1263
1264 * Doc/manual/thuban-manual-de.xml: More translations.
1265
1266 2005-01-24 Bernhard Herzog <[email protected]>
1267
1268 Rework the status bar updates a bit to make sure the message about
1269 the projections is produced at the right times.
1270
1271 * Thuban/UI/mainwindow.py (MainWindow.update_status_bar_messages):
1272 New class variable with messages that may require a status bar
1273 update.
1274 (MainWindow.view_position_changed)
1275 (MainWindow.update_status_bar): Rename from view_position_changed
1276 to update_status_bar. It's meaning has changed now that it may
1277 also generate messages about problems with projection settings.
1278 (MainWindow.__init__): Use the new update_status_bar_messages
1279 class variable to subscribe update_status_bar
1280 (MainWindow.set_position_text): Update doc-string. This method
1281 has to be renamed at some point. See doc-string and comments.
1282 (MainWindow.OnClose): Unsubscribe update_status_bar from all
1283 messages in update_status_bar_messages
1284
1285 * Thuban/UI/viewport.py (ViewPort.forwarded_map_messages): New
1286 class attribute. map messages to be forwarded by the viewport.
1287 (ViewPort._subscribe_map, ViewPort._unsubscribe_map): (un)subscribe
1288 the messages in forwarded_map_messages
1289
1290 2005-01-21 Bernhard Herzog <[email protected]>
1291
1292 * test/postgissupport.py (PostGISDatabase.__init__): Tweak
1293 doc-string
1294 (find_postgis_sql): Update for postgis-1.0.0-rc1, which uses a
1295 different name for the initialization SQL file.
1296
1297 2005-01-21 Jonathan Coles <[email protected]>
1298
1299 * Thuban/UI/baserenderer.py (proj_params_to_str): New. Takes
1300 a projection and returns a formatted string representing the
1301 parameters to feed to gdalwarp. This function eliminates
1302 redundancy in draw_raster_layer().
1303 (BaseRenderer.render_map_incrementally): Removed the optimization which
1304 drew the top most raster layer first and then only those vector-
1305 based layers that are above it. With the support for transparency
1306 this optimization breaks correct behaviour.
1307 (BaseRenderer.draw_raster_layer): Reorganize code to support possible
1308 future enhancements to raster layer bounding box. The old behaviour has
1309 not changed. Also, change calling parameters to draw_raster_data()
1310 to specify new RAW data format and mask.
1311 (BaseRenderer.draw_raster_data): Change signature to include an optional
1312 parameter for mask information. Change documentation to mention
1313 support for new parameter and added option for RAW data format.
1314 The data argument is now a list of [width, height, data].
1315
1316 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Add new optional
1317 mask parameter. Add new condition for RAW format, which
1318 significantly reduces rendering time. Add condition for
1319 mask parameter.
1320
1321 * libraries/thuban/gdalwarp.cpp (GetImageData): New. Creates a
1322 data array of RGB values from the projected image returned from
1323 the gdal warping functions. In the case of palette based images, it
1324 converts the NO_DATA index to the mask color.
1325 (ProjectRasterFile): Removed all custom memory driver references
1326 and replaced it with the standard in-memory dataset provided
1327 by gdal. The return data is no longer a BMP file, but an array
1328 of RGB values, one set triple per pixel.
1329
1330 * libraries/thuban/bmpdataset.cpp: Removed. Unnecessary.
1331 * libraries/thuban/cpl_mfile.h: Removed. Unnecessary.
1332 * libraries/thuban/cpl_mfile.cpp: Removed. Unnecessary.
1333
1334 * setup.py (thuban_build_ext.finalize_options): Removed mention
1335 of cpl_mfile.cpp and bmpdataset.cpp files in the list of source
1336 files. These are obsolete with the new version of gdalwarp.cpp
1337
1338 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data):
1339 Updated signature.
1340 (TestBaseRenderer.test_raster_no_projection): Changed the test
1341 data to be data in the uncompressed RAW format returned from
1342 ProjectRasterFile.
1343
1344 2005-01-21 Jan-Oliver Wagner <[email protected]>
1345
1346 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Made
1347 string available for i18n.
1348
1349 2005-01-20 Russell Nelson <[email protected]>
1350
1351 * Resources/Projections/defaults.proj: Ruin the speling of the
1352 Lambert-93 projection so it doesn't run into the wx UTF-8 bug.
1353 It's the wrong thing to do in the long run, but it's necessary for
1354 those users until that bug is fixed. Otherwise the projection
1355 dialog segfaults. Better to annoy some Lambert-93 users with a
1356 spelling mistake than every Fedora Core 3 user of Thuban-CVS.
1357
1358 2005-01-20 Bernhard Reiter <[email protected]>
1359
1360 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Added
1361 docstring and comment that the warning code here is a hack.
1362
1363 2005-01-20 Russell Nelson <[email protected]>
1364
1365 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Warn
1366 user about misprojected layers when their lat/lon bounding
1367 box exceeds rational lat/lon values.
1368
1369 2005-01-20 Bernhard Reiter <[email protected]>
1370
1371 * Thuban/UI/about.py (unicodeToLocale): Improved:
1372 Use 'ascii' and then 'replace' for other characters
1373 when getdefaultlocale returns None. Thanks to Bernhard H. .
1374
1375 2005-01-20 Bernhard Reiter <[email protected]>
1376
1377 * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Added a comment
1378 that OnRangeText might be called twice and using None as argument.
1379
1380 2005-01-20 Bernhard Reiter <[email protected]>
1381
1382 * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Add a
1383 OnRangeText(0) to work around a different in wx Behaviour noticed
1384 on MacOSX, thanks to Lorenzo Moretti and Daniel Calvelo for the fix.
1385
1386 2005-01-20 Bernhard Reiter <[email protected]>
1387
1388 * Thuban/UI/about.py: take iso-8859-15 when getdefaultlocale returns
1389 None. (Fixes rt#2910.)
1390
1391 2005-01-18 Frank Koormann <[email protected]>
1392
1393 New Extension: mouseposition
1394 Tool to collect mouse click positions (map coordinates) in a dialog.
1395
1396 * Extensions/mouseposition/__init__.py: New, extension registration
1397
1398 * Extensions/mouseposition/mouseposition.py: New, implements the
1399 dialog and adds a tool to Thuban mainwindow.
1400
1401 * Extensions/mouseposition/position.xpm: New, icon for tool.
1402
1403 2005-01-14 Jan-Oliver Wagner <[email protected]>
1404
1405 * Doc/manual/thuban-manual-de.xml: More translations.
1406
1407 2005-01-11 Frank Koormann <[email protected]>
1408
1409 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
1410 Fix indention bug.
1411
1412 2005-01-09 Frank Koormann <[email protected]>
1413
1414 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
1415 BugFix 2901: Explicitly copy layers ClassificationColumn since it
1416 is not part of the layers Classification.
1417
1418 2005-01-03 Frank Koormann <[email protected]>
1419
1420 * Thuban/UI/renderer.py (ScreenRendererdraw_selection_incrementally):
1421 BugFix 2883: Former implementation only worked on classified point
1422 layers: KeyError was raised, now use the default size if field is None.
1423
1424 2004-12-27 Bernhard Reiter <[email protected]>
1425
1426 svgexport 1.0.0cvs: Fixed label export.
1427
1428 * Extensions/svgexport/test/test_svgmapwriter.py:
1429 class TestSVGRenderer(): New class; new test test_label_font().
1430
1431 * Extensions/svgexport/svgmapwriter.py
1432 (SVGRenderer.label_font()): initialised Font size with self.factor now,
1433 makes test_label_font happy.
1434
1435 * Extensions/svgexport/TODO: crossed out fixed label export item.
1436 Added item for options.
1437
1438 * Extensions/svgexport/__init__.py: Bumped version to 1.0.0cvs.
1439
1440 2004-12-27 Russell Nelson <[email protected]>
1441
1442 Middle mouse button pans.
1443
1444 * Thuban/UI/view.py (MapCanvas.__init__): Subscribe also
1445 OnMiddleDown and OnMiddleUp events.
1446 (MapCanvas.OnMiddleDown): New. Activate the pan tool and remember the
1447 previously used tool.
1448 (MapCanvas.OnMiddleUp): New. Reactivate the remebered tool used before
1449 pressing the middle mouse button.
1450
1451 2004-12-27 Jan-Oliver Wagner <[email protected]>
1452
1453 * Doc/manual/thuban-manual-de.xml: More translations.
1454
1455 2004-12-23 Jan-Oliver Wagner <[email protected]>
1456
1457 * Thuban/UI/projdialog.py (ProjFrame.load_user_proj): Added a
1458 \n to stderr after the warnings. Thanks to Russell Nelson.
1459
1460 2004-12-20 Nina Hueffmeyer <[email protected]>
1461
1462 * Extensions/ogr/ogrshapes.py: Fixed some issues from
1463 Bernhard (coding guidelines etc.). Additionally it is now possible to
1464 display shapefiles containing feature collections (e.g.polygons
1465 with holes). Works with gdal 1.2.1 now.
1466
1467 * Extensions/ogr/test/test_OGRShapestore.py: Fixed some issues
1468 from Bernhard (coding guidelines etc.). If ogr can't be imported,
1469 tests are skipped now.
1470
1471 * Extensions/ogr/ogrstart.py: Fixed some typings.
1472
1473 2004-12-20 Bernhard Reiter <[email protected]>
1474
1475 * Extensions/svgexport/TODO: updated to add support for
1476 raster layers and labels for 1.0.1.
1477
1478 * Extensions/svgexport/svgmapwriter.py (draw_raster_layer):
1479 Issue a warning now.
1480
1481 2004-12-19 Bernhard Reiter <[email protected]>
1482
1483 * Extensions/svgexport/TODO: Added idea to support triggering
1484 the application down the pipe.
1485
1486 2004-12-19 Bernhard Reiter <[email protected]>
1487
1488 svgexport: Improved code quality, mainly by better naming.
1489
1490 * Extensions/svgexport/svgmapwriter.py:
1491 DrawPath() renamed to DrawPolygonPath(),
1492 added documentation, improved comments and variable names.
1493
1494 * Extensions/svgexport/svgmapwriter.py,
1495 Extensions/svgexport/test/test_svgmapwriter.py:
1496 All using DrawPolygonPath() now, the default parameter closed=True
1497 omitted.
1498
1499 * Extensions/svgexport/test/test_svgmapwriter.py:
1500 renamed test_polygon_opened() to test_polyline()
1501 renamed test_transparent_polygon() to test_transparent_polyline()
1502
1503 2004-12-18 Jan-Oliver Wagner <[email protected]>
1504
1505 Some fixes of gns2shp extension.
1506
1507 * Extensions/gns2shp/test/__init__.py: New. Make this directory a
1508 package.
1509
1510 * Extensions/gns2shp/test/test_gns2shp.py: Add some import paths
1511 dynamically.
1512
1513 * Extensions/gns2shp/test/README: Simplified description how to test.
1514
1515 * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed doc-string,
1516 fixed some dimensions of fields according to the GNS documentation
1517 which seems to change undocumented.
1518 Now killing trailing \n and/or \r from MODIFY_DATE.
1519 This fixes RT#2453.
1520
1521 2004-12-18 Bernhard Reiter <[email protected]>
1522
1523 svgexport 1.0.0: Treats holes and islands nicely. Documentation added.
1524
1525 * Extensions/svgexport/test/test_svgmapwriter.py:
1526 Added new tests: test_export_polygon_with_hole()
1527 and test_polygon_with_hole().
1528
1529 * Extensions/svgexport/svgmapwriter.py
1530 (draw_polygon_shape()): Uses DrawPath correctly now.
1531
1532 * Doc/manual/thuban-manual.xml: Added documentation for stable
1533 extention svgexport.
1534 * Doc/manual/thuban-manual-de.xml: Copied English section about
1535 svexport over.
1536
1537 * Extensions/svgexport/__init__.py: Bumped version number to 1.0.0.
1538
1539 * Extensions/svgexport/svgsaver.py,maplegend.py:
1540 Moved from experimental to stable extension menu.
1541
1542 * Extensions/svgexport/TODO: updated.
1543
1544
1545 2004-12-18 Bernhard Reiter <[email protected]>
1546
1547 Added Extensions/svgexport/TODO
1548
1549 2004-12-18 Bernhard Reiter <[email protected]>
1550
1551 Refactored in svgexport:
1552 DrawPath replaces DrawPolygon; added newline in front of "M" in paths.
1553
1554 * Extensions/svgexport/svgmapwriter.py
1555 Added verbosity level 3 to print out polygon points.
1556 (class Point): added __repr__
1557 (class Brush, __str__()): Added space after ,.
1558 (DrawPolygon): Renamed to DrawPath()
1559 (DrawPath): Takes list of polygons as input now, adds \n before "M"s.
1560 (DrawLines): Using DrawPath now.
1561
1562 * Extensions/svgexport/test/test_svgmapwriter.py:
1563 Replaced DrawPolygon() calls with DrawPath() and put the first argument
1564 inside another list. Adapted test data with a newline before "M".
1565
1566 2004-12-18 Bernhard Reiter <[email protected]>
1567
1568 Refactored svgexport tests: 9 double tests runs eliminated;
1569 code size reduced by 8 lines.
1570
1571 * Extensions/svgexport/test/test_svgmapwriter.py:
1572 (class TestWithDC): Renamed to BaseTestWithDC, moved to top.
1573 (class BaseWithDCtools): New, subclass from BaseTestWithDC.
1574 (class TestDrawSplines): now subclass from BaseTestWithDCtools,
1575 this fixed the double running of the nine tests of TestVirtualDC.
1576 (class TestVirtualDC): Using self.dc and self.file from setUp().
1577
1578 2004-12-17 Bernhard Herzog <[email protected]>
1579
1580 Two windows specific fixes ported from thuban-1­0-branch:
1581
1582 * Thuban/UI/about.py (unicodeToLocale): Use getdefaultlocale
1583 instead of getlocale because getlocale doesn't return a usable
1584 encoding name on a german windows 2000
1585
1586 * setup.py: windows build: Removed the absolute path names and
1587 made all prfixes relative to the directory containing setup.py.
1588 Makes it a little easier to adapt to a different system.
1589
1590 2004-12-16 Bernhard Herzog <[email protected]>
1591
1592 Add support for PostGIS tables with LINESTRING geometries.
1593 Fixes RT#2299
1594
1595 * Thuban/Model/postgisdb.py (shapetype_map): Add LINESTRING
1596
1597 * test/postgissupport.py
1598 (PostgreSQLServer.get_default_static_data_db): Rename the "roads"
1599 table to "roads-multi" because it now uses MULTILINESTRING
1600 geometries and introduce a new "roads" table that uses LINESTRING
1601 (coords_to_multilinestring): Make the doc string more precise
1602 (coords_to_linestring): New. Create a LINESTRING WKT
1603 representatin
1604 (wkt_converter): Add coords_to_linestring
1605 (upload_shapefile): Rephrase the doc-string a bit.
1606
1607 * test/test_postgis_db.py (TestPostGISShapestoreArc)
1608 (LineStringTests)
1609 (TestPostGISShapestoreLineString)
1610 (TestPostGISShapestoreMultiLineString): Split
1611 TestPostGISShapestoreArc into a base class LineStringTests and two
1612 derived classes TestPostGISShapestoreLineString for LINESTRING
1613 geometries and TestPostGISShapestoreMultiLineString for
1614 MULTILINESTRING geometries. Most test methods are in the base
1615 class with the exception of tests that explicitly check the raw
1616 format.
1617
1618 2004-12-16 Bernhard Herzog <[email protected]>
1619
1620 Make the test suite work with PostGIS 0.8.2 and PostgreSQL 7.4
1621
1622 * test/postgissupport.py (find_postgis_sql): Different postgis
1623 versions put the postgis.sql file into slightly different places
1624 so we have to look in both. The updated doc string describes this
1625 is more detail.
1626
1627 * test/test_postgis_db.py
1628 (TestPostGISSpecialCases.test_column_name_quoting): The return
1629 value of UniqueValues is unsorted, so it has to be sorted for
1630 comparison.
1631
1632 2004-12-16 Bernhard Herzog <[email protected]>
1633
1634 Fix for RT#2237
1635
1636 * Thuban/UI/projdialog.py (ProjFrame._show_proj_panel): If the
1637 panel to be shown is the UnknownProjPanel disable the OK and Try
1638 buttons. Otherwise enable them.
1639 (ProjFrame.__GetProjection): The UnknownProjPanel returns None for
1640 the parameters. In that case __GetProjection also returns None
1641 now.
1642
1643 2004-12-15 Bernhard Herzog <[email protected]>
1644
1645 * Thuban/UI/classgen.py (GenQuantilesPanel.__init__): Set the
1646 minimum number of classes to 2. The calculate_quantiles needs at
1647 least two and raises an exception otherwise.
1648 Fixes RT#2549
1649
1650 2004-12-15 Bernhard Herzog <[email protected]>
1651
1652 * test/postgissupport.py (PostgreSQLServer.execute_sql): Extend to
1653 so that it returns a result for select statements.
1654 (PostgreSQLServer.server_version): New. Return the version of the
1655 server software.
1656 (PostgreSQLServer.require_authentication): The format of
1657 pg_hba.conf has changed between PostgrSQL 7.2 and 7.3. Check the
1658 server version and generate the file in the correct format
1659
1660 2004-12-15 Bernhard Herzog <[email protected]>
1661
1662 * test/postgissupport.py (PostgreSQLServer.is_running): Fix typo
1663 in the doc string and rephrase it a little.
1664
1665 2004-12-15 Frank Koormann <[email protected]>
1666
1667 * test/test_load.py (TestAltPath.checkSession): New, extended checks if
1668 session has been loaded successfully. The check is called by the relevant
1669 tests after executing load_session().
1670
1671 2004-12-13 Bernhard Herzog <[email protected]>
1672
1673 Make sure the region used to determine which shapes are visible
1674 actually matches the region on the printed page. If this isn't
1675 done properly some shapes might not be printed.
1676 Fixes RT #2692
1677
1678 * Thuban/UI/view.py (MapPrintout.draw_on_dc): The region for the
1679 renderer has to be at the same position as the mapregion
1680
1681 * Thuban/UI/renderer.py (ExportRenderer.RenderMap): self.region
1682 has to be moved by (self.shiftx, self.shifty) too.
1683
1684 2004-12-13 Bernhard Herzog <[email protected]>
1685
1686 * libraries/pyprojection/Projection.i: Work around a bug in the
1687 generated python code which leads to exception in the __del__
1688 method when the constructor fails. See the comments in the code
1689 for more details.
1690
1691 * libraries/pyprojection/Projection.py: Updated from Projection.i
1692 with SWIG.
1693
1694 2004-12-13 Bernhard Herzog <[email protected]>
1695
1696 * test/test_load.py (TestAltPath.test_01_single_path_error_fix)
1697 (TestAltPath.test_02_path_error_fix_from_list)
1698 (TestAltPath.test_05_path_error_fix_from_list_changed)
1699 (TestAltPath.test_06_path_error_fix_from_list_fails): self.session
1700 is destroyed in tearDown, so there's no need to do it in a test
1701 case.
1702
1703 * Thuban/Model/load.py (SessionLoader.open_shapefile): Remove a
1704 debug print
1705
1706 2004-12-13 Bernhard Herzog <[email protected]>
1707
1708 * Extensions/svgexport/test/test_svgmapwriter.py
1709 (TestDrawSplines.setUp): Do not use super with the unittest
1710 classes because in Python 2.2 they're still old-style classes.
1711
1712 2004-12-13 Frank Koormann <[email protected]>
1713
1714 Alternative Path feature: When loading a (moved) session where
1715 shapefiles cannot be found, ask the user. Use the specified path
1716 if further shapefiles are missing. However, ask the usr for confirmation
1717 in such cases.
1718
1719 * test/test_load.py (TestAltPath): New, tests for alternative path feature
1720 in load_session()
1721 (Shapefile_CallBack): Helper, implements controllable callback.
1722
1723 * Thuban/UI/application.py (ThubanApplication.OnInit):
1724 Added "alt_path" to self.path
1725 (ThubanApplication.OpenSession): Added shapefile_callback as second
1726 callback similar to db_connection_callback.
1727 (ThubanApplication.run_alt_path_dialog): New, implementaion of
1728 shapefile_callback. In addition to raising the dialog the control of
1729 self.path('alt_path') is implemented here.
1730
1731 * Thuban/Model/load.py (SessionLoader.__init__): Added shapefile_callback.
1732 (SessionLoader.open_shapefile): Open shapefile, eventually with
1733 alternative path. This wrapps the "theSession.OpenShapefile(filename)"
1734 formerly used in start_fileshapesource()/start_layer().
1735 (SessionLoader.start_fileshapesource): Call open_shapefile().
1736 (SessionLoader.start_layer): Call open_shapefile().
1737 (load_session): Added shapefile_callback.
1738
1739 * Thuban/UI/altpathdialog.py: New, implements dialogs for alternative path
1740 feature (search / check).
1741
1742 * Doc/manual/thuban-manual.xml: Added documentation of new feature.
1743
1744 2004-12-11 Bernhard Reiter <[email protected]>
1745
1746 svgexport 0.9.2: Point size supports for maps.
1747
1748 * Extensions/svgexport/svgmapwriter.py: Added import of SHAPETYPE_POINT
1749 (def draw_point_shape): new parameter size defaults to 2 as before.
1750 (draw_shape_layer_incrementally): Moved draw_func log line higher.
1751 Added draw_func call with size when dealing with a point layer.
1752
1753 * Extensions/svgexport/__init__.py: bumped version to 0.9.2.
1754
1755 2004-12-11 Bernhard Reiter <[email protected]>
1756
1757 Made sure that newlines are inserted in the svg path d attributes
1758 to raise the chance that the line length will be below 255 characters,
1759 as recommended by REC SVG 1.1 in section 8.3.1.
1760
1761 * Extensions/svgexport/svgmapwriter.py(DrawPolygon):
1762 Adding \n before L's and changed whitespace handling.
1763
1764 * Extensions/svgexport/test/test_svgmapwriter.py:
1765 Adapted tests to new whitespace handling of DrawPolygon.
1766
1767 2004-12-11 Bernhard Reiter <[email protected]>
1768
1769 * Doc/technotes/coding_guidelines.txt: easy typo fixed.
1770
1771 * Extensions/svgexport/test/test_svgmapwriter.py:
1772 Removed test_drawbezier in favour of new test_drawspline3 and
1773 test_drawspline4 within new class TestDrawSplines(TestVirtualDC).
1774 All only to test DrawSpline.
1775
1776 * Extensions/svgexport/svgmapwriter.py(DrawSpline):
1777 New implementation now really using the strange algorithm of
1778 xfig 3.1's approximated splines and its conversion to postscript
1779 with one twist: SVG can do quadratic beziers, so skipped translation
1780 to cubic beziers.
1781 (TestWithDC): Typo in comment fixed.
1782
1783 2004-12-09 Martin Schulze <[email protected]>
1784
1785 * Thuban/Model/classgen.py: Added missing character encoding
1786
1787 * Extensions/wms/properties.py (OpenWMSProperties): removed
1788
1789 * Extensions/wms/parser.py (WMSCapabilitiesParser.error): Dropped
1790 support for get_srs_discrepancies() since there are no
1791 discrepancies anymore (was a thinko)
1792
1793 * Extensions/wms/layer.py (WMSLayer.GetMapImg): Improved graphic
1794 format priority now that more formats are supported globally by
1795 the render engine.
1796
1797 2004-12-08 Silke Reimer <[email protected]>
1798 * Extensions/ogr/ogrshapes.py: Substituted ogr-method CloseRings
1799 because it is not available in all versions of ogr
1800
1801 2004-12-08 Bernhard Reiter <[email protected]>
1802 * Extensions/ogr/__init__.py: Added empty __init__.py to heal
1803 global tests until a real one is commited.
1804
1805 2004-12-07 Nina Hüffmeyer <[email protected]>
1806
1807 * /Extensions/ogr/: Adding a new extension to read shapefiles with
1808 ogr. It is planned to add other vector formats.
1809
1810 * /test/runtests.py: Adding tests from /Extensions/ogr/test/.
1811
1812 2004-12-07 Jan-Oliver Wagner <[email protected]>
1813
1814 * /Extensions/svgexport/test/test_svgmapwriter.py: Reverting
1815 part of a (non-)fix to renable that the tests are always
1816 executed.
1817
1818 2004-12-07 Bernhard Reiter <[email protected]>
1819
1820 * Extensions/svgexport/test/test_svgmapwriter.py:
1821 Added test_drawbezier() to test DrawSpline().
1822
1823 * Extensions/svgexport/svgmapwriter.py(DrawSpline):
1824 Really implemented bezier drawing.
1825
1826 * Extensions/svgexport/__init__.py: Bumped version of svgexport
1827 to 0.9.1 because now the legend examples lines styles
1828 will be drawing with beziers.
1829
1830 2004-12-05 Martin Schulze <[email protected]>
1831
1832 * Thuban/UI/renderer.py (raster_format_map): Added PNG, TIFF and
1833 GIF as supported bitmap image formats (helpful for the WMS extension)
1834
1835 2004-11-30 Martin Schulze <[email protected]>
1836
1837 * Extensions/wms/test/test_ogclib.py (TestOGCLib.test_compareURLs):
1838 Improved the test for the internal compare method
1839
1840 2004-11-27 Jan-Oliver Wagner <[email protected]>
1841
1842 * Thuban/UI/about.py (About.__init__): Added
1843 Norbert Solymosi for hungarian translation and Ole Rahn
1844 as contributor. Moved Bernhard Reiter from Contributor
1845 to Developer.
1846
1847 2004-11-27 Bernhard Reiter <[email protected]>
1848
1849 * Extensions/svgexport/test/test_svgmapwriter.py:
1850 Removed Jan from author list as he did not change enough significant
1851 lines yet.
1852
1853 * Extensions/svgexport/__init__.py: Added Bernhard as author
1854 of the Extension.
1855
1856 2004-11-27 Jan-Oliver Wagner <[email protected]>
1857
1858 * po/hu.po: New. Hungarian translation. Contributed
1859 by Norbert Solymosi.
1860
1861 2004-11-26 Bernhard Herzog <[email protected]>
1862
1863 * Extensions/svgexport/test/test_svgmapwriter.py
1864 (Testobjectexport.test_transparent_polygon): Commented out some
1865 debug prints
1866
1867 2004-11-24 Jan-Oliver Wagner <[email protected]>
1868
1869 Fix broken tests for svg extension and added svg legend
1870 to Experimental menu.
1871
1872 * Extensions/svgexport/test/test_svgmapwriter.py: Fix to have
1873 the test run correctly even if the extension is a package.
1874 Also removed the "import Thuban" which makes no sense.
1875
1876 * Extensions/svgexport/__init__.py: Fix to have the extensions'
1877 test module also be executed from the global test routine.
1878 This is done by looking for the absense of the DISPLAY variable.
1879
1880 * Extensions/svgexport/maplegend.py: Moved the menu entry from Extensions
1881 to Experimental menu since this module has yet not reached a stable
1882 status (ie. 1.0).
1883
1884 2004-11-22 Bernhard Reiter <[email protected]>
1885
1886 * Extensions/svgexport/svgmapwriter.py:
1887 Added verbose variable and some logging depending on it.
1888 (class VirtualDC(XMLWriter)): Minor improvement in the polygon loop,
1889 because counting i is not necessary.
1890 (class Pen, class Brush): Added simple __str__ methods.
1891 (SVGRenderer.draw_polygone_shape): Fix #2698 (transparent polygons are
1892 not exported to svg file) Note: holes still unhandled.
1893
1894 * Extensions/svgexport/test/test_svgmapwriter.py:
1895 Made a baseclass TestWithDC for test needed a DC.
1896 Added tests for bug #2698 (transparent polygons are not
1897 exported to svg file):
1898 Testobjectexport.test_transparent_polygon()
1899
1900 * Thuban/Model/base.py (UnsetModified):
1901 Fixed some typos in docstring.
1902
1903 * Thuban/UI/baserenderer.py (BaseRenderer.draw_polygon_shape()):
1904 Added hints on the used algorithm for handling holes.
1905
1906 2004-11-20 Jan-Oliver Wagner <[email protected]>
1907
1908 Some face lifting for the examples.
1909
1910 * Examples/__init__.py: Make this directory a package.
1911
1912 * Examples/simple_extensions/__init__.py: Make this directory a package.
1913
1914 * Examples/simple_extensions/hello_world.py: Moved entry from Extensions
1915 menu to Examples menu.
1916
1917 * Examples/simple_extensions/simple_command.py: Some more comments,
1918 minor changes.
1919
1920 * Examples/simple_extensions/simple_tool.py: Minor changes.
1921
1922 2004-11-20 Jan-Oliver Wagner <[email protected]>
1923
1924 Changed way of extension registry for wms and added extension
1925 registry for umn_mapserver extension.
1926
1927 * Extensions/wms/__init__.py: Added registry entry and the importing
1928 of the actual wms module. Included a test for the required PyOGCLib.
1929
1930 * Extensions/wms/wms.py: Removed registry entry (moved to __init__.py).
1931
1932 * Extensions/umn_mapserver/__init__.py: Added registry entry and the
1933 importing of the actual umn mapserver management modules.
1934 Included a test for the required Python MapScript.
1935
1936 2004-11-20 Jan-Oliver Wagner <[email protected]>
1937
1938 Changed way of extension registry for importAPR, bboxdump
1939 and added extension registry for svgexport.extension registry for
1940 svgexport.
1941
1942 * Extensions/importAPR/__init__.py: Added registry entry and the importing
1943 of the actual importAPR module.
1944
1945 * Extensions/importAPR/importAPR.py: Removed registry entry (moved to
1946 __init__.py).
1947
1948 * Extensions/bboxdump/__init__.py: Added registry entry and the importing
1949 »···of the actual bboxdump module.
1950
1951 * Extensions/bboxdump/bboxdump.py: Removed registry entry (moved to
1952 »···__init__.py).
1953
1954 * Extensions/svgexport/__init__.py: Added registry entry and the importing
1955 of the svgsaver module.
1956
1957 * Extensions/svgexport/svgsaver.py: Moved the menu entry from Extensions
1958 to Experimental menu since this module has yet not reached a stable
1959 status (ie. 1.0).
1960
1961 2004-11-18 Jan-Oliver Wagner <[email protected]>
1962
1963 Now the hit test considers the size of point symbols.
1964
1965 * Thuban/UI/viewport.py (ViewPort._hit_point): Added optional parameter
1966 'size' defaulting to the previously fixed value 5.
1967 Extended doc-string.
1968 (Viewport._find_shape_in_layer): Resolved FIXME regarding flexibility
1969 for symbols.
1970 Now the size of the largest point symbol is determined to find out
1971 about whether the point has been hit.
1972 This fixes the problem that only clicks inside a fixed distance of
1973 5 where found.
1974
1975 2004-11-17 Jan-Oliver Wagner <[email protected]>
1976
1977 Another open issue fixed regarding sizeable symbols: correct rendering of
1978 selected symbols.
1979
1980 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
1981 Added consideration of the specific size of point symbols.
1982 The property for each point symbol is retrieved and the size applied
1983 for the rendering method.
1984 Added doc-string.
1985
1986 2004-11-16 Jan-Oliver Wagner <[email protected]>
1987
1988 Changed way of Extension Registry for gns2shp and profiling.
1989
1990 * Extensions/gns2shp/gns2shp.py: Removed registry entry (moved to
1991 __init__.py).
1992
1993 * Extensions/gns2shp/__init__.py: Added registry entry and the importing
1994 of the actual gns2shp module.
1995
1996 * Extensions/profiling/profiling.py: Removed registry entry (moved to
1997 __init__.py).
1998
1999 * Extensions/profiling/__init__.py: Added registry entry and the importing
2000 of the actual profiling module.
2001
2002 2004-10-28 Bernhard Reiter <[email protected]>
2003
2004 * Extensions/svgexport/: Minor improvements to doc strings.
2005
2006 2004-10-07 Jan-Oliver Wagner <[email protected]>
2007
2008 Further elements for sizable point objects now
2009 making this feature usable though not yet complete.
2010
2011 * Thuban/Model/save.py (SessionSaver.write_classification): Write
2012 attribute 'size' for cldata when the shape layer is of point type.
2013 This also now make the test_load.py tests happy.
2014
2015 * Thuban/Model/classgen.py (CustomRamp.GetProperties): Added size
2016 gradient.
2017
2018 * Thuban/UI/classifier.py (ID_SELPROP_SPINCTRL): Renamed to
2019 ID_SELPROP_SPINCTRL_LINEWIDTH.
2020 (ID_SELPROP_SPINCTRL_LINEWIDTH): New Id replaces ID_SELPROP_SPINCTRL.
2021 (ID_SELPROP_SPINCTRL_SIZE): New Id.
2022 (SelectPropertiesDialog.__init__): Added a second spin control
2023 for the size in case the corresponding layer is of point type.
2024 (SelectPropertiesDialog._OnSpin): Renamed to _OnSpinLineWidth.
2025 (SelectPropertiesDialog._OnSpinLineWidth): New. Former _OnSpin.
2026 (SelectPropertiesDialog._OnSpinSize): New. Set size of property
2027 and refresh preview.
2028
2029
2030
2031 2004-10-04 Martin Schulze <[email protected]>
2032
2033 * Extensions/wms/test/test_parser.py
2034 (TestWMSCapabilitiesParser.test_compareLists): Added missing
2035 self-test for compareLists()
2036 (TestWMSCapabilitiesParser.test_compareDicts): Added missing
2037 self-test for compareDicts()
2038 (TestWMSCapabilitiesParser.test_compareLists): Adding more tests
2039 to verify the test routine fails with non-equal arguments
2040 (TestWMSCapabilitiesParser.test_compareDicts): Adding more tests
2041 to verify the test routine fails with non-equal arguments
2042
2043 2004-10-03 Jan-Oliver Wagner <[email protected]>
2044
2045 First elements for sizeable point objects.
2046
2047 * Resources/XML/thuban-1.1.dtd: Added size attribute to cldata.
2048
2049 * Data/iceland_sample_size.thuban: New. Sample for sized point objects.
2050
2051 * test/test_load.py (ClassificationTest.TestLayers): Added SetSize in case
2052 of a corresponding argument is given.
2053 (TestSymbolSize): New. Test the size attribute of cldata.
2054
2055 * Thuban/Model/classification.py: Removed some trailing whitespaces.
2056 (ClassGroupProperties.__init__): Set default size.
2057 (ClassGroupProperties.SetProperties): Set the size.
2058 (ClassGroupProperties.GetSize): New. Return the size.
2059 (ClassGroupProperties.SetSize): New. Set the size.
2060 (ClassGroupProperties__eq__): Compare also size.
2061 (ClassGroupProperties__repr__): Print also size.
2062
2063 * Thuban/Model/load.py (SessionLoader.start_cldata): Also parse
2064 the size attribute.
2065
2066 * Thuban/UI/classifier.py (ClassDataPreviewer.Draw): Added doc-string.
2067 Also, now there is a return value that indicates whether the drawing
2068 size exceeded the given rect extent and if so the new extent.
2069 Finally, point objects are drawn depending on the size. If either
2070 the width or height is exceeded, the new extent is returned.
2071 (ClassRenderer.Draw): Now when calling the previewer drawing function,
2072 evaluate the return value and, if not None, adapt the grid widget size
2073 accordingly and redraw again.
2074
2075 * Thuban/UI/baserenderer.py (BaseRenderer.draw_shape_layer_incrementally):
2076 If the draw function is for points, call it with the size as additional
2077 parameter.
2078 (BaseRenderer.draw_point_shape): Added additional, optional parameter for
2079 the size. Compute the radius using the size.
2080
2081 * Extensions/importAPR/apr.py (APR_BMkSym.GetThubanProp): Now
2082 that Thuban supports size, apply this correctly.
2083
2084 * Extensions/importAPR/importAPR.py: Bumped version to 0.1.1.
2085
2086 2004-10-03 Jan-Oliver Wagner <[email protected]>
2087
2088 * Doc/manual/thuban-manual-de.xml: Started translation of
2089 Map chapter.
2090
2091 2004-10-01 Martin Schulze <[email protected]>
2092
2093 * Extensions/wms/properties.py (wmsProperties.__init__): Extended
2094 argument for general use through properties-dialog selector
2095
2096 * Thuban/UI/classifier.py: Register properties dialog classes for
2097 both provided layer classes/types.
2098
2099 * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): The
2100 map can be retrieved through the parent which is passed to the
2101 constructor anyway and doesn't require an argument of its own,
2102 required for the unification of arguments for general use through
2103 properties-dialog selector.
2104 (MainWindow.OpenOrRaiseDialog): Move the logic for checking
2105 whether a dialog is already opened (and raising it to the users
2106 attention) and creating a new dialog into a function of its own
2107 (MainWindow.OpenLayerProperties): Use the new OpenOrRaiseDialog()
2108 method
2109 (MainWindow.OpenLayerProperties): Utilise the new ClassMapper for
2110 global registration of properties dialog classes (which are indeed
2111 layer-specific).
2112
2113 * Thuban/UI/classifier.py (Classifier.__init__): Unify arguments
2114 for general use through properties-dialog selector, the map can be
2115 retrieved through the parent and doesn't require an argument of
2116 its own.
2117
2118 * Extensions/wms/wms.py: Register the properties dialog class for
2119 the provided WMS layer
2120
2121 2004-09-28 Jan-Oliver Wagner <[email protected]>
2122
2123 New feature: Registry for Extensions.
2124
2125 * Thuban/UI/extensionregistry.py: This module defines a registry for
2126 Extensions.
2127
2128 * Thuban/UI/about.py (About.__init__): Added description
2129 of the registered extensions with all of the information.
2130
2131 * Thuban/Model/extension.py (Extension): Improved doc-string.
2132
2133 * Extensions/gns2shp/gns2shp.py, Extensions/importAPR/importAPR.py,
2134 Extensions/bboxdump/bboxdump.py, Extensions/profiling/profiling.py,
2135 Extensions/wms/wms.py: Added registration of the extension.
2136
2137 2004-09-27 Bernhard Reiter <[email protected]>
2138
2139 More fixes to svgexport to make used ids unique and
2140 conforming to XML's Name production.
2141
2142 * Extensions/svgexport/test/test_svgmapwriter.py: Added new tests
2143 test_xml_id_constraints(), test_make_ide_nosetbaseid() and
2144 test_make_id_nonintegersetid(). Switched SetID and SetBaseID.
2145 Added Bernhard R. as author.
2146 * Extensions/svgexport/svgmapwriter.py (make_id): Using "_" as
2147 concatenation char now (makes test_make_ide_nosetbaseid() valid).
2148 Also transform second id part with "%d" and catch the TypeError
2149 to raise SVGMapWriterError (making test_make_id_nonintegersetid() ok).
2150 Corrected typo inBernhard's author line.
2151 (SetBaseID): Return the transformed base id. Transform characters
2152 which are not alnum() or in ".-_" to binascii.b2a_hex(). Added
2153 import binascii. If to be set string starts with "xml" or so, add "t".
2154 (draw_shape_layer_incrementally): use the returned value of SetBaseID
2155 for used_baseids checks.
2156
2157 2004-09-25 Bernhard Herzog <[email protected]>
2158
2159 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
2160 Remove a debug print and some tab characters.
2161
2162 2004-09-25 Bernhard Reiter <[email protected]>
2163
2164 * Extensions/svgexport/svgmapwriter.py: Added Bernhard R. as Author.
2165 (SetBaseID, SetID, make_id): Improved docstring comments to explain
2166 the interaction of the three functions and the XML id contrains.
2167
2168
2169 2004-09-23 Jan-Oliver Wagner <[email protected]>
2170
2171 * Doc/ThubanModel.xmi: New. UML file for Thuban Model
2172 Module.
2173
2174 * Doc/README: Added info on ThubanModel.xmi.
2175
2176 2004-09-23 Jan-Oliver Wagner <[email protected]>
2177
2178 * Doc/README: New. Some info about how to generate technical
2179 documentation from the source code.
2180 This text was send to the Thuban developer mailing list on
2181 September 21st 2004 by Bernhard Reiter.
2182
2183 2004-09-21 Bernhard Reiter <[email protected]>
2184
2185 Improved the svgexport to only use unique ids. Will issues
2186 an error message dialoge when two layer names are the same.
2187 ShapeIDs are now added with a dash within the svg ids.
2188
2189 * Extensions/svgexport/svgmapwriter.py (SVGMapWriterError): New.
2190 * Extensions/svgexport/test/test_svgmapwriter.py: Added imports
2191 (TestSVGRenderer): New test class with test_make_in() and
2192 test_check_for_layer_name_clash()
2193 * Extensions/svgexport/svgmapwriter.py (SVGRenderer): Fixed __init__()
2194 and draw_shape_layer_incrementally() to not use a baseid twice,
2195 satisfying test_check_for_layer_name_clash()
2196 (VirtualDC.make_id): Use a dash between baseit and id, satisfies
2197 test_make_in().
2198 * Extensions/svexport/svgsaver.py: Import SVGMapWriterError, wxOK
2199 and wxICON_HAND.
2200 (write_to_svg): Put dc and rendering in a try statement and on
2201 catching SVGmapWriterError notify the user and delete the target file.
2202
2203 2004-09-20 Bernhard Reiter <[email protected]>
2204
2205 * Model/base.by, Model/layer.py: Fixed typos in docstrings.
2206
2207 2004-09-03 Jan Schüngel <[email protected]>
2208
2209 * Extensions/umn_mapserver/mapfile(MF_Class.add_thubanstyle): Fix a
2210 small bug with the line color. Now the line color will now only set
2211 if it is set in Thuban an not Transparent.
2212
2213 * Extensions/umn_mapserver/mf_export(tblayer_to_map): Fixed a bug with
2214 deleting the layers from mapfile. Now all layers will delete backwards
2215 from the last.
2216
2217 2004-08-20 Silke Reimer <[email protected]>
2218
2219 * Thuban/Model/layer.py:
2220 Fixes bug in projection handling: Otherwise very large region might not
2221 have valid values in the layer's projection.
2222
2223 2004-08-20 Silke Reimer <[email protected]>
2224
2225 * Thuban/UI/about.py:
2226 small changes to be consistent with coding style.
2227
2228 2004-08-13 Martin Schulze <[email protected]>
2229
2230 * Extensions/wms/test/test_ogclib.py (TestOGCLib.compare_URLs):
2231 Adjusted a comment
2232
2233 2004-08-11 Silke Reimer <[email protected]>
2234
2235 * Thuban/UI/about.py: Small changes to encoding related stuff to avoid
2236 too many and too enhanced imports of locale
2237
2238 2004-08-10 Silke Reimer <[email protected]>
2239
2240 * Thuban/UI/about.py: Fixed encoding problem of about dialog: Added
2241 function unicodeToLocale() to convert special characters to users
2242 locale encoding
2243
2244 2004-08-10 Jan-Oliver Wagner <[email protected]>
2245
2246 * Doc/technotes/coding_guidelines.txt: Added rule 'Method names start with
2247 lower case letter'
2248
2249 2004-08-09 Jan Schüngel <[email protected]>
2250
2251 * ChangeLog: Rewrite the last ChangeLog entry to follow
2252 the standard way.
2253
2254 * Extensions/umn_mapserver/mapfile: Moved the import AnnotationLayer to
2255 the function where it is needed, because it don't works if it stands
2256 at the beginning.
2257 (MF_Layer.__init__): Removed the extra numclassed variable. Now
2258 numclasses from the mapscript will be used.
2259 (MF_Layer.get_index): New. Return the index of the layer in mapfile.
2260 (MF_Layer.set_classes): New. A Classlist will be set to the layer.
2261 (MF_Layer.set_metadata): New. A Metadata mapscript object will set.
2262 (MF_Layer.remove_allclasses): New. All class of the layer will remove.
2263 (MF_Map.create_new_layer): New. A new Layer is created and associated
2264 with the mapscript object.
2265 (MF_Map.set_layerorder): New. The Layer order like in thuban is set in
2266 the mapscript.
2267 (MF_Map.add_thubanlayer): Now a new layerobj is created if no one is
2268 linked to the layer in thuban, else the layerobject linked to the
2269 thubanlayer will be used.
2270 AnnotationLayer will now store the filename of the shapefile.
2271 (MF_Map.remove_layer): If a layer is removed the associated object
2272 must be set new.
2273
2274 * Extensions/umn_mapserver/mf_export.py(tb_layer_to_map): Add all
2275 layers which are exists in thuban to the mapobj. All removed Layers
2276 will be removed from the mapobj.
2277 Added comments to all functions.
2278 (thuban_to_map): No layer will be removed here.
2279
2280 * Extensions/umn_mapserver/mf_handle.py
2281 (_has_umn_mapobj_and_selectedlayer): Activating the layer menu. Now
2282 Layersettings for the mapserver kann be edited.
2283
2284 * Extensions/umn_mapserver/mf_import.py: Now all layers which are
2285 imported, will be linked with the associated MF_Layer.
2286 (import_mapfile): All layers, which are not selected, will be removed.
2287 Disable the "import layer from mapfile" menu option.
2288
2289 * Extensions/umn_mapserver/sample/iceland.map: Set the status of the
2290 Annotation Layer from DEFAULT to OFF. The DEFAULT setting turns the
2291 layer on permanently.
2292
2293 2004-08-03 Jan Schüngel <[email protected]>
2294
2295 * Extensions/umn_mapserver/mapfile.py(MF_Metadata.remove_allmetadata):
2296 New. This function removes all metadata
2297 (MF_Layer.set_group): New. Set the group setting.
2298 (MF_Layer.get_group): New. Get the group setting.
2299 (MF_Map): Removed the extra numlayers variable, used the mapscript
2300 parameter instead.
2301 (MF_Map.get_numlayers): New. This get numlayers.
2302 (MF_Map.remove_all_layers): New. Removes all layers from the mapobj.
2303 (MF_Map.add_thubanlayer): Replaced the exception handling by a check
2304 if the object is an instance. Also added the annotation layer here to
2305 export, but only the layer is created in the mapfile.
2306
2307 * Extensions/umn_mapserver/mf_export.py(export_mapfile): Removed
2308 the check if a mapobj exist, because its not needed anymore. The
2309 export function is only available if a mapobj exist.
2310 Use the new function to remove all layers.
2311
2312 * Extensions/umn_mapserver/mf_handle.py(Layer_Dialog): Added a group
2313 option and the metadata button. The layer dialog is temporary disabled.
2314 (Metadata_CustomDataTable): Added some functions to show the grid
2315 correct.
2316
2317 * Extensions/umn_mapserver/mf_import.py: Moved the code for showing
2318 the number of layer from import_mapfile to this function.
2319 (AnnotationLayer): New. This Class shows the Annotation layer in
2320 thuban. The layer don't do anything. It's only to show the layer
2321 and to save the layer order.
2322 (add_annotationlayer): New. Import an annotation layer to thuban.
2323 (select_layer2import): New. Import only layers to thuban and not
2324 the other settings like projection or scalebar.
2325 (create_new_mapfile): Moved the _has_umn_mapobj function and the
2326 create_new_mapfile functions from mf_handle.py to mf_import.py.
2327
2328 * Extensions/umn_mapserver/sample/iceland.map: Added the group
2329 parameter to the roads and cultural layers. Also added a new
2330 Annotation Layer for the cultural points.
2331
2332 * Extensions/umn_mapserver/sample/iceland.html: Added the select
2333 option for the annotation layer.
2334
2335 * Extensions/umn_mapserver/sample/index.html: Added the start
2336 parameter for the annotation layer.
2337
2338 2004-08-01 Jan-Oliver Wagner <[email protected]>
2339
2340 * Doc/manual/thuban-manual-de.xml (Chapter Session Management):
2341 translation completed.
2342
2343 * Doc/manual/thuban-manual.xml (Chapter Session Management):
2344 Fixed unprecise description for Save Session.
2345
2346 2004-07-31 Jan-Oliver Wagner <[email protected]>
2347
2348 Started translation of Users Manual into german.
2349
2350 * Doc/manual/thuban-manual-de.xml: New. German Users Manual.
2351
2352 * Doc/manual/Makefile: Added build instructions for german
2353 users manual.
2354
2355 * Doc/manual/thuban-manual.xml: Minor corrections in Introduction.
2356
2357 2004-07-28 Jan Schüngel <[email protected]>
2358
2359 * Extensions/umn_mapserver/mapfile.py(MF_Metadata): Changed all class
2360 functions. Now all metadata will handle by the function and its not
2361 needed to initialize it from outside. Therefor the associated mapobj
2362 will be stored in the Metadata Object. So we can use the special
2363 functions from the associated mapobj to get the Metadata.
2364 Therefor all initialization code for the metadata is removed from the
2365 other classes.
2366 (MF_Layer): Added a function to get the metadata object.
2367 (MF_Map): Added a function to set the mappath, the path where
2368 the mapfile ist stored.
2369
2370 * Extensions/umn_mapserver/mf_export.py(thuban_to_map): Changed the code
2371 to set the extent in the mapfile. Now the code is set by the displayed
2372 data in the Thuban-view.
2373 (export_mapfile): The shapepath is now set empty, until relative
2374 pathnames are supported.
2375
2376 * Extension/umn_mapserver/mf_handle.py: Added a dialog to handle
2377 metadata. Yet only mapfile metadata are supported. Layer and class
2378 supported are not implemented.
2379 Added a dialog to handle layer informations. The dialog only shows the
2380 selected layer at the moment.
2381
2382 * Extensions/umn_mapserver/mf_import.py(import_mapfile): Changed the
2383 code for setting the extent in thuban. Now the extent is set to the
2384 given extent from the mapfile.
2385 Fixed a logical mistake. Now the extent is set when realy a layer is
2386 loaded, and not if one is selected to load.
2387
2388 * Extensions/umn_mapserver/sample/iceland.html: Added code to zoom and
2389 move the shown map in the browser.
2390
2391 * Extensions/umn_mapserver/sample/iceland.map: Added a new metadata
2392 line to the mapobj and added metadata to the political layer.
2393
2394 * Extensions/umn_mapserver/test/test_mapserver.py: Changed the test
2395 for Metadata.
2396
2397 2004-07-26 Martin Schulze <[email protected]>
2398
2399 * Thuban/Lib/classmapper.py (ClassMapper.has): Added the new
2400 ClassMapper
2401
2402 * test/test_classmapper.py (TestMapping.test_mapper): Added a Test
2403 case for the new ClassMapper
2404
2405
2406 2004-07-22 Bernhard Herzog <[email protected]>
2407
2408 * Thuban/UI/viewport.py (ViewPort.VisibleExtent): New. Return the
2409 visible extent of the map in projected coordinates
2410
2411 * test/test_viewport.py (SimpleViewPortTest.test_default_size)
2412 (SimpleViewPortTest.test_init_with_size): Add some VisibleExtent()
2413 tests.
2414 (SimpleViewPortTest.test_visible_extent): New. The real test for
2415 VisibleExtent()
2416
2417 2004-07-22 Bernhard Herzog <[email protected]>
2418
2419 * test/test_viewport.py: Use support.run_tests as the main
2420 function when running asa script.
2421
2422 2004-07-22 Jan Schüngel <[email protected]>
2423
2424 * Extensions/umn_mapserver/mf_export.py: Added "import os"
2425 Removed the old "import Thuban.UI.mainwindow" code.
2426 (tbextent_to_map): Removed the extra function and at the code direct
2427 to "thuban_to_map" function.
2428 (write_creatorcomment): Added. Now a short comment is added to the
2429 beginning of an generated mapfile.
2430 (export_mapfile): Now the Path and filename are saved in to variables,
2431 and not together in one variable. This is needed for the new
2432 write_creatorcomment function.
2433
2434 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Added the
2435 import module "re". Also added Range and the ClassGroupRange import
2436 from Thuban. Both are needed for the new range expression import.
2437 (create_rangeexpression): Added. Creates a Range Expression in Thuban
2438 style from a given mapfile expression.
2439 (added_rasterlayer): Make some small code changes. The shapepath is
2440 now stored in an extra variable and the clazz_name is set empty if no
2441 class name set in the mapfile.
2442 Changed the Error message for Range Expressions, becaus the new
2443 function create a error string which will be shown in the dialog.
2444
2445 * Extensions/umn_mapserver/test/test_mapserver.py: Added a test for the
2446 range expression import.
2447
2448 2004-07-21 Jan-Oliver Wagner <[email protected]>
2449
2450 * Extensions/umn_mapserver/README: Added hint that
2451 installation as root can be avoided. Removed all tabs.
2452
2453 2004-07-16 Bernhard Herzog <[email protected]>
2454
2455 * test/test_viewport.py
2456 (ViewPortTest.test_changing_map_projection): Check that changing
2457 the projection of an empty map shown in a viewport doesn't lead to
2458 exceptions in the viewport's handler for the
2459 MAP_PROJECTION_CHANGED messages
2460
2461 * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Only
2462 try to keep the same region visible when the map actually contains
2463 something
2464
2465 2004-07-15 Jan Schüngel <[email protected]>
2466
2467 * Extensions/umn_mapserver/mapfile.py: Added a function to get the
2468 mappath directly from the mapobj. Is needed because of the changes
2469 in mf_import.py.
2470 (MF_Layer.add_thubanclass): Added a new comment.
2471 (MF_Map.set_extent): Fixed a bug with exporting empty mapobj. If the
2472 mapobj is empty there is no extent get from thuban an so no one can
2473 set to th mapobj.
2474
2475 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Updated
2476 the discription.
2477 Split the funktion in to three smaller ones. The new functions are
2478 add_rasterlayer, add_polygonlayer and select_layer2import.
2479 Removed the mapfilepath and filepath initialisation, because its know
2480 include in the new functions.
2481 Now nothing will be imported if cancel is pressed in the
2482 layer choice dialog.
2483
2484 2004-07-14 Jan Schüngel <[email protected]>
2485
2486 * Extensions/umn_mapserver/mapfile.py: Added ClassGroupDefault to
2487 import.
2488 (MF_Symbolset): Removed the extra variable for numsymbols.
2489 (MF_Class.__init__): Added a comment to the exception clause.
2490 Removed the extent init, because it was not needed anymore.
2491 (MF_Layer.add_thubanclass): Added the code to set the class name to
2492 the expression value from thuban if no label is defined.
2493 Added the code to export Range expressions from thuban to the mapfile.
2494 (MF_Map.set_extent): Removed the exception and replace it by some if
2495 code. If the size of a map is not defined the size will be set to 1,1.
2496 This is necessary because if the extent is set, mapscript checks if
2497 the size is greater than zero.
2498 (MF_Web): Added the get and set function for the template.
2499
2500 * Extensions/umn_mapserver/mf_export.py: Added the function to check
2501 if a mapobject exists and used it to set the status of the menu items.
2502 If no mapfile exists the settings could not be edditied.
2503 Define after which menuitem the exportitem will include.
2504
2505 * Extensions/umn_mapserver/mf_handle.py: Removed the import
2506 Thuban.UI.mainwindow clause, because it is not needed.
2507 Added the command Refresh() to all "OnChangeColor()" functions,
2508 because the color preview window was not updated on a color change.
2509 Added the function to check if a mapobject exists and used it to set the
2510 status of the menu items. If no mapobject exists the settings could not
2511 be edditied.
2512 (Map_Dialog): Moved the imagetype selector from the
2513 Outputformat_Dialog to Map_Dialog and removed Outputformat_Dialog.
2514 (Web_Dialog): Removed the name label and added the template textbox.
2515
2516 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Replace
2517 the exception handling on loading the layers by an if statement. It
2518 is not necessary to us the exception there.
2519 The Filepath creation now use os.path.join to build the path.
2520
2521 * Extensions/umn_mapserver/test/test_mapserver.py: Moved the testMap
2522 definition from global to the setUp function. Now the testMap will
2523 initialize new on each test.
2524
2525 * Extensions/umn_mapserver/sample/iceland.map: Include three new
2526 classes in the Line Layer, to test logical Expressions.
2527 Set the status of the class "Point9" in the Point Layer to off
2528
2529 2004-07-13 Bernhard Herzog <[email protected]>
2530
2531 * Thuban/UI/baserenderer.py
2532 (BaseRenderer.render_map_incrementally): Fix a logic bug in the
2533 optimization that tries not to draw layers under a raster layer.
2534 The bug was harmless. All it effectively did was to produce The a
2535 strange messages about not being able to draw Layer instances for
2536 all vector layers below a raster layer which would be invisible
2537 anyway because the raster layer currently always covers the entire
2538 window
2539
2540 2004-07-08 Jan Schüngel <[email protected]>
2541
2542 * Extensions/umn_mapserver/mapfile.py: Added code to generade and get
2543 a list of supported outputformats. This formats are not alle supported
2544 because there is no possibility to get the outputformat without the
2545 name known. Make some formal changes to the code.
2546 (MF_Map.set_name()): Fixed a bug if the name is None.
2547
2548 * Extensions/umn_mapserver/mf_handle.py: Removed the image_type import
2549 statement, because its not needed anymore. The Outputformat is now
2550 given as string from the object. Make some formal changes to the code.
2551
2552 * Extensions/umn_mapserver/test/test_mapserver.py: Added new test for
2553 most of the new setting which were added during the last changes.
2554 Removed the MF_Size Test.
2555
2556 * Extensions/umn_mapserver/test/test.map: Added a new class to the
2557 cultural Layer to test expressions and the the status of that layer
2558 from on to default.
2559 Changed the data path the the correct Thuban Data
2560 Added the Outputformat Object and Symbol Object
2561
2562 2004-07-07 Jan Schüngel <[email protected]>
2563
2564 * Extensions/umn_mapserver/mapfile.py: Added some new
2565 settings to edit (outputformat, label, imagetype)
2566
2567 * Extensions/umn_mapserver/mf_handle.py: Added some setting to
2568 the Label Dialog and add the OutputDialog.
2569 Make some changes to the code order.
2570
2571 2004-07-06 Jan Schüngel <[email protected]>
2572
2573 * Extensions/umn_mapserver/mapfile.py: Added the symbolObj, pointObj
2574 and line Obj and add the scalebar_status_type, scalebar_style_type and
2575 scalebar_position_type.
2576 Added the symbol- and symbolsetObject (MF_Symbol,MF_Symbolset). The
2577 are only used to create a Symbol like the circle in Thuban.
2578 Added the scalebarObject (MF_Scalebar)
2579 (MF_Class): Added set_status and get_status.
2580 (MF_Layer.add_thubanclass): Added code to set the class status
2581 (MF_Map): Added code to handle the symbols and scalebar
2582 (MF_Label): Added the set_partials and get_partials functions
2583
2584 * Extensions/umn_mapserver/mf_export.py: Added MF_Symbol to import
2585 from mapfile. Added a function to create a circle object like the one
2586 from thuban if no one exists.
2587
2588 * Extensions/umn_mapserver/mf_handle.py: All colors are now set when
2589 press ok in the assosiated dialog and not at the end of the
2590 colordialog.
2591 Added the Dialog for the Scalebar.
2592 (Label_Dialog): Added the offset option
2593
2594 * Extensions/umn_mapserver/mf_import.py: Added code to import the
2595 status of the Classes.
2596 Fixed a bug with the projection. Now the to_meter parameter will be
2597 added to the Projection only if it doesn't exists.
2598
2599 2004-07-01 Jan Schüngel <[email protected]>
2600
2601 Added the functionality to handle the content thuban is not
2602 able to handle directly.
2603
2604 * Extensions/umn_mapserver/mf_handle.py: New. This module extents
2605 Thuban with the possibility to edit the mapfile content.
2606
2607 * Extensions/umn_mapserver/mf_import.py: Added the possibility
2608 to import mapfiles without any layer selected. So it is possible
2609 to edit the other settings in a mapfile.
2610 (import_mapfile): Added code to use the editing functions.
2611 Added the possibility to import the projection to a layer if one
2612 is defined.
2613 Status settings (On,Off) will now set in thuban (visible, invisible).
2614 fixed a bug with with classnames. If no classname is set in mapfile
2615 the value in Thuban will set to the expression.
2616
2617 * Extensions/umn_mapserver/mf_export.py(export_mapfile): Added the
2618 possibility to save a new mapfile or use the old one which is
2619 imported or new created.
2620 Added code to use the editing functions.
2621 Remove some not needed import statements
2622
2623 * Extensions/umn_mapserver/mapfile.py: Added new types which are
2624 need for the editing functions.
2625 Added needed set-functions for the editing functions.
2626 Added the possibility to export rasterimages.
2627 Added new classes (MF_Web, MF_Label, MF_Legend, MF_Symbol,
2628 MF_SymbolSet). MF_Symbol and MF_SymbolSet are not needed at the
2629 moment.
2630 (MF_Class.set_thubanstyle): Now point layers will set to a default
2631 symbol to show a circle in mapserver and not only a 1px dot.
2632 (MF_Style.__init__): Fixed a bug with the color. Color was not set
2633 correct before.
2634 (MF_Size): Removed, because it is not needed.
2635
2636 * Extensions/umn_mapserver/README: Added the hints to use the
2637 export and editing functions, too.
2638
2639 * Extensions/umn_mapserver/sample/iceland.map: Added the
2640 new parameter "UNITS METERS".
2641 Change the political layer to status OFF.
2642
2643 * Extensions/umn_mapserver/sample/README: Added some
2644 more details to setup the sample in the MapServer.
2645
2646 2004-06-26 Bernhard Reiter <[email protected]>
2647
2648 * Extensions/svgexport/test/test_svgmapwriter.py:
2649 Removed class VFile and used standard StringIO instead.
2650
2651 2004-06-23 Jan Schüngel <[email protected]>
2652
2653 Add the export function to the umn_mapserver extension.
2654
2655 * Extension/umn_mapserver/mf_export.py: New. This module extents
2656 Thuban with the possibility to export the Thuban content.
2657
2658 * Extensions/umn_mapserver/mapfile.py: Expand the classes to use
2659 with the export module. Especially added the possibility to
2660 add thuban objects directly to the map objects.
2661
2662 * Extensions/umn_mapserver/mf_import.py: Removed the wxCHANGE_DIR,
2663 because of the hint from Bernhard Herzog.
2664 Corrected the handling of absolute pathnames.
2665 Changed the Text of the Menu-Item, now the beginning is upper case.
2666
2667 * Extensions/umn_mapserver/README: Added the --with-tiff statement.
2668
2669 2004-06-16 Jan Schüngel <[email protected]>
2670
2671 Add a sample and make some changes.
2672
2673 * Extension/umn_mapserver/mf_import.py: Changed the wxPython.wx
2674 import from * to explicit used statements. Changed the
2675 Thuban.UI.mainwindow import phrase, too.
2676 (import_mapfile):Corrected a clerical mistake.
2677 Added wxCHANGE_DIR in OpenFile Dialog.
2678 Added a MultipleChoiceDialog, to select the layers to load from
2679 mapfile into thuban. Thereby the projection is only set if one layer
2680 is selected.
2681 Added the possibility to handle relative pathnames which uses
2682 up-level references.
2683 Removed some doubled code.
2684 Corrected an error with integer values used as label in thuban
2685 ClassGroup.
2686
2687 * Extensions/umn_mapserver/sample: New.
2688
2689 * Extensions/umn_mapserver/sample/README: New. Describes the
2690 usage of the sample files.
2691
2692 * Extensions/umn_mapserver/sample/iceland.map: New. This is
2693 a suitable .map-file for the iceland data.
2694
2695 * Extensions/umn_mapserver/sample/index.html: New. The template
2696 for the mapfile.
2697
2698 * Extensions/umn_mapserver/sample/iceland.html: New. Initialisation
2699 file for the Iceland Application on web.
2700
2701 * Extensions/umn_mapserver/README: Corrected a inaccuracy and added
2702 some details.
2703
2704 * Extensions/umn_mapserver/test/test_mapserver
2705 (mapserver_import_Test_generalClasses.test_MF_Color):
2706 Corrected the thubancolor test.
2707
2708 2004-06-15 Jan Schüngel <[email protected]>
2709
2710 * Extensions/umn_mapserver/README: New. Install instruction.
2711
2712 2004-06-14 Bernhard Reiter <[email protected]>
2713
2714 * libraries/thuban/cpl_mfile.h: Added copyright header.
2715
2716 * libraries/thuban/ cpl_mfile.cpp, cpl_mfile.h: Added non-protecting
2717 Free Software License so that it is most useful with gdalwarp
2718 and bmpdataset.
2719
2720 2004-06-14 Bernhard Herzog <[email protected]>
2721
2722 * Thuban/UI/multiplechoicedialog.py (__version__): Add missing
2723 import of wxPython.wx itself (as opposed to the contents of
2724 wxPython.wx). For some reason wxPython.wx is available as
2725 wxPython.wx.wx in at least some 2.4 releases. Fixes RT#2482
2726 wrt. wxPython 2.4.
2727
2728 2004-06-10 Jan Schüngel <[email protected]>
2729
2730 Initial version of new extension "umn_mapserver". This extension aims
2731 to manage configuration for the UMN MapServer application. This
2732 inital version just imports the .map-files and displays all, Thuban is
2733 capable of.
2734
2735 * Extensions/umn_mapserver, Extensions/umn_mapserver/test: New.
2736
2737 * Extensions/umn_mapserver/test/README: New. Describes how to run the
2738 tests.
2739
2740 * Extensions/umn_mapserver/test/test.map: New. This is a test
2741 .map-file for automated tests of the umn_mapserver extension of
2742 Thuban.
2743
2744 * Extensions/umn_mapserver/test/test_mapserver.py: New. Tests for
2745 UMN Mapserver classes.
2746
2747 * Extensions/umn_mapserver/__init__.py: New. Init to make this
2748 directory a package.
2749
2750 * Extensions/umn_mapserver/mapfile.py: New. Classes to represent
2751 '.map'-file objects.
2752
2753 * Extensions/umn_mapserver/mf_import.py: New. This module extends
2754 Thuban with the possibility to handle UMN MapServer mapfiles.
2755
2756 2004-06-03 Bernhard Herzog <[email protected]>
2757
2758 * Thuban/Model/layer.py (Layer.TreeInfo): Convert the bounding box
2759 to a tuple before using it as arguments to the % operator. This
2760 fixes the formatting issue filed in RT#2239 on 2004-01-13 and
2761 reported today on thuban-list by Jan Schüngel
2762
2763 * test/test_layer.py (TestLayerModification.setUp): Save the
2764 filename as an instance variable so we can refer to it in tests
2765 (TestLayerModification.test_tree_info): Uncomment this method
2766 again and make it work. This tests for the formatting issue
2767 filed in RT#2239 on 2004-01-13
2768
2769 2004-05-28 Bernhard Herzog <[email protected]>
2770
2771 * Thuban/UI/baserenderer.py: Fix some typos.
2772
2773 2004-05-18 Jan-Oliver Wagner <[email protected]>
2774
2775 * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed a bug
2776 by increasing a field size.
2777
2778 2004-05-17 Bernhard Herzog <[email protected]>
2779
2780 Update to newest shapelib and get rid of Thuban specific
2781 extensions, i.e. use the new DBFUpdateHeader instead of our
2782 DBFCommit kludge
2783
2784 * libraries/shapelib/shpopen.c: Update to version from current
2785 shapelib CVS.
2786
2787 * libraries/shapelib/shapefil.h: Update to version from current
2788 shapelib CVS.
2789
2790 * libraries/shapelib/dbfopen.c: Update to version from current
2791 shapelib CVS.
2792 (DBFCommit): Effectively removed since shapelib itself has
2793 DBFUpdateHeader now which is better for what DBFCommit wanted to
2794 achieve.
2795 We're now using an unmodified version of dbfopen.
2796
2797 * setup.py (extensions): Add the HAVE_UPDATE_HEADER macro with
2798 value '1' to the Lib.dbflibc extension. This simply reflects the
2799 shapelib and pyshapelib updates
2800
2801 2004-05-16 Jan-Oliver Wagner <[email protected]>
2802
2803 Finished introduction of Menu.FindOrInsertMenu.
2804
2805 * Extensions/drawshape/drawshape.py: Add the command
2806 to the experimental menu additionally to the toolbar.
2807
2808 * Extensions/svgexport/svgsaver.py: Use FindOrInsertMenu() instead of
2809 finding menu on its own.
2810
2811 * Doc/manual/thuban-manual.xml: updated sample file
2812 to use FindOrInsertMenu().
2813
2814 * Examples/simple_extensions/hello_world.py: Use FindOrInsertMenu()
2815 instead of finding menu on its own.
2816
2817 2004-05-11 Jan-Oliver Wagner <[email protected]>
2818
2819 * test/test_menu.py (MenuTest.test): Added testing
2820 of method Menu.FindOrInsertMenu.
2821
2822 2004-05-10 Jan-Oliver Wagner <[email protected]>
2823
2824 Introduce and use Menu.FindOrInsertMenu.
2825
2826 * Thuban/UI/menu.py (Menu.FindOrInsertMenu): New. Find a
2827 given menu or, if not found, insert it.
2828
2829 * Extensions/bboxdump/bboxdump.py, /Extensions/gns2shp/gns2shp.py,
2830 /Extensions/importAPR/importAPR.py, Extensions/profiling/profiling.py,
2831 /Extensions/wms/wms.py: Use FindOrInsertMenu() instead of finding
2832 menu on its own.
2833
2834 2004-05-06 Jan-Oliver Wagner <[email protected]>
2835
2836 Introduce a abstract ColorDialog class and remove
2837 and outdated file.
2838
2839 * Thuban/UI/proj4dialog.py: Removed. It is has been
2840 replaced by projdialog for quite a while and is not used
2841 anymore.
2842
2843 * Thuban/UI/colordialog.py: New. Abstraction for color selection
2844 dialog(s).
2845
2846 * Thuban/UI/classifier.py (SelectPropertiesDialog.__GetColor):
2847 Now calls the abstract ColorDialog instead of wxColourDialog.
2848 This also removed the dependency to Color class conversion
2849 from this function.
2850
2851 2004-05-04 Frank Koormann <[email protected]>
2852
2853 * Extensions/bboxdump/__init__.py: Fixed string left over from
2854 copying.
2855
2856 * Extensions/bboxdump/bboxdump.py (bboxdump):
2857 Use layer.ShapeStore().AllShapes() to loop over shapes instead of
2858 xrange(layer.NumShapes()). Compile the bboxmessage from a list
2859 of formatted outputs (string.join) instead of appending to the
2860 message. Two progress bar dialogs to report progress on the sometimes
2861 lenghty processing.
2862
2863 2004-04-22 Frank Koormann <[email protected]>
2864
2865 New Extension to dump bounding boxes of all shapes of the selected
2866 layer. An optional column can be specified to group the objects,
2867 in this case the bounding box is a union of the separate boxes.
2868 Dump can be displayed in a ScrolledMessageDialog or written to file.
2869 The Extension is simply a combination of available and well tested
2870 Thuban functionality.
2871
2872 * Extensions/bboxdump/__init__.py: New: Init to make this
2873 directory a package.
2874
2875 * Extensions/bboxdump/bboxdump.py: New: Dump bounding boxes of
2876 all shapes of the selected layer.
2877
2878 2004-04-22 Jan-Oliver Wagner <[email protected]>
2879
2880 * Thuban/UI/classgen.py (GenUniquePanel.__init__): Fixed two
2881 strings to be i18n now.
2882
2883 2004-04-18 Jan-Oliver Wagner <[email protected]>
2884
2885 Changing popup menu of legend from direct building
2886 to using the Menu construction as used for the mainwindow.
2887
2888 * Thuban/UI/mainwindow.py: New method commands: layer_to_top,
2889 layer_to_bottom, layer_visibility
2890 (MainWindow.LayerToTop): New. Put current layer to the top.
2891 (MainWindow.LayerToBottom): New. Put current layer to bottom.
2892 (MainWindow.HideLayer, MainWindow.ShowLayer, _has_visible_map):
2893 Replace 1,0 by True, False.
2894 (MainWindow.ToggleLayerVisibility): New. Toggle visibility of
2895 current layer.
2896 (MainWindow.LayerShowTable): Removed raising of dialog.
2897 (_has_selected_layer_visible): New. Support function.
2898
2899 * Thuban/UI/legend.py: ID_POP_xxx: removed.
2900 (LegendPanel.__init__): Removed EVT_MENU bindings.
2901 (LegendTree._OnRightClick): Replace direct creation of
2902 menu via wx Classes by applying the menu definition
2903 as of Menu class of menu.py.
2904
2905 2004-04-16 Jan-Oliver Wagner <[email protected]>
2906
2907 * Thuban/UI/exceptiondialog.py (ExceptionDialog.dialog_layout): Improved
2908 button string to stronger clearify that Thuban will be closed when hitting
2909 the button.
2910
2911 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Added docstring.
2912 Now for layers without a ShapeStore a corresponding message is given
2913 to the user, that this layer has no table to show.
2914
2915 2004-04-15 Martin Schulze <[email protected]>
2916
2917 * Extensions/wms/layer.py (WMSLayer.setWMSFormat): Need to
2918 recalculate the format for the internal render engine as well.
2919
2920 * Extensions/wms/properties.py (wmsProperties): First start for a
2921 properties dialog. It's functional for a first selection of
2922 layers, but still has some weired wxWidgets/GTK problems but
2923 beautification can be done later.
2924
2925 * Extensions/wms/layer.py: Added more documentation
2926 (WMSLayer.getFormats): New: Return list of supported image formats
2927 by the WMS server
2928 (WMSLayer.getLayers): New: Return the list of layer names
2929 supported by the WMS server
2930 (WMSLayer.getLayerTitle): New: Return the title of the named layer
2931 (WMSLayer.getWMSFormat): New: Return the image format that is used
2932 for WMS GetMap requests
2933 (WMSLayer.setWMSFormat): New: Set the image format that is used
2934 for WMS GetMap requests
2935 (WMSLayer.__init__): Move away from using only one layer to using
2936 a list of layers (unsorted at the moment, though).
2937 (WMSLayer.getVisibleLayers): New: Return the list of names for all
2938 visible layers
2939 (WMSLayer.setVisibleLayers): New: Set the list of names for all
2940 visible layers
2941
2942 * Extensions/wms/wms.py: Moved the WMS layer into layer.py in
2943 order to establish a clean structure.
2944
2945 * Extensions/wms/layer.py: Moved the WMS layer into a file on its
2946 own in order to establish a clean structure.
2947
2948 2004-04-13 Martin Schulze <[email protected]>
2949
2950 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Added
2951 support for oldstyle (WMS 1.0 apparently) image format
2952 specification.
2953
2954 * Extensions/wms/wms.py (WMSLayer.calcFormat): Reduce the list of
2955 supported graphic formats back to JPEG and BMP, PNG and others are
2956 too *cough* experimental... Sorry, I meant to filter this out
2957 before I committed this part. This should make the WMS extension
2958 run from CVS again.
2959 (wms_dialog): Reset an empty URL to None so that the subsequent
2960 program can depend on this, since the dialog will indeed return an
2961 empty URL, causing another declaration of love by Python.
2962
2963 * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerBBox):
2964 Whenever a native BoundingBox request cannot be fulfilled, check
2965 whether the requested SRS is EPSG:3426, in which case return the
2966 LatLonBoundingBox values.
2967
2968 * Extensions/wms/test/test_parser.py
2969 (TestWMSCapabilitiesParser.test_LayerSRS): Added a test for
2970 ignoring AUTO:* SRS.
2971 (TestWMSCapabilitiesParser.test_LatLonBoundingBoxes_as_bboxes):
2972 Added another test method to test whether the LatLonBoundingBox
2973 values will be returned if BoundingBox values are requested with
2974 SRS set to EPSG:3426.
2975
2976 * Extensions/wms/parser.py (WMSCapabilitiesParser.peekLayers):
2977 Added rudimentary support for non-EPSG SRS, i.e. ignore them for
2978 the moment by placing them into a variable which is currently
2979 unused. Also test whether the EPSG SRS is numerical as it should
2980 be and add an error message if it is not.
2981
2982 * Extensions/wms/test/sample.xml: Added AUTO:* SRS since they
2983 appear in the real world as well. Since we cannot handle them yet
2984 (OGCLib can't either), we will ignore them for the moment.
2985
2986 * Extensions/wms/parser.py: Use a variable for denoting the sample
2987 filename
2988 (WMSCapabilitiesParser.peekLayers): Added support for error
2989 messages during grok(). They will be aggregated in an array and
2990 may be displayed later. We may have to add a classification
2991 "Warning" and "Error" to this. That requires more experience,
2992 though, since not every error may be lethal.
2993
2994 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Raise the
2995 ShowTable() dialog/frame when the user attempts to display it
2996 while it has been opened before already and not closed again.
2997
2998 2004-04-11 Martin Schulze <[email protected]>
2999
3000 * Extensions/wms/infodialog.py: Adjusted the class documentation
3001
3002 * Extensions/wms/wms.py (WMSLayer.__init__, WMSLayer.GetMapImg):
3003 Switch to using Thuban{Begin,End}BusyCursor instead of the pure
3004 wxWidgets variants.
3005 (WMSLayer.__init__): The epsg_id variable is named top_srs now.
3006
3007 * Extensions/wms/infodialog.py: Added an information dialog that
3008 will display various information about the WMS current resource,
3009 so that additional information such as the title, the abstract,
3010 fees and access constraints can be displayed for the user if they
3011 are documented in the WMS XML.
3012
3013 2004-04-10 Martin Schulze <[email protected]>
3014
3015 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Adjusted
3016 string handling. It's "foo".lower() and not lower(foo) without
3017 lower imported from strings or something.
3018
3019 * Extensions/wms/wms.py (WMSLayer): Incorporated WMSCapabilities
3020 from capabilities.py and parser.py. Implement priority list for
3021 supported graphics formats, take care of wbmp != bmp. PNG, TIFF
3022 and GIF are supported here, but not yet by main Thuban. Hence,
3023 support for them may be removed later. Special contribution to
3024 usability: get wxWidgets to change the cursor when we're waiting
3025 for data from the network so the user won't start to worry. This
3026 causes a redrawing error/warning, though.
3027
3028 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Unlink
3029 the DOM object.
3030
3031 2004-04-01 Martin Schulze <[email protected]>
3032
3033 * Extensions/wms/capabilities.py: Adjusted documentation
3034 (WMSCapabilities.__init__): Improved documentation, fixed syntax
3035 (WMSCapabilities.saveCapabilities): Only catch IOError when
3036 handling files
3037 (WMSCapabilities.loadCapabilities): Only catch IOError when
3038 handling files
3039 __main__: corrected variable naming
3040 (WMSCapabilities.fetchCapabilities,loadCapabilities): Make this
3041 class a specialisation of WMSCapabilitiesParser as well. Also
3042 execute grok() after loading or fetching capabilities, if that
3043 went well, so that subsequent calls can already access the data.
3044 (WMSCapabilities.getVersion): Export the used version of the
3045 GetCapabilities request, so we can use it for subsequent calls,
3046 i.e. for GetMap requests.
3047 (WMSCapabilities.fetchCapabilities): Added proper error handling
3048 when the GetCapabilities request failed, so that the surrounding
3049 program can act accordingly.
3050
3051 2004-03-30 Martin Schulze <[email protected]>
3052
3053 * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerSRS):
3054 Adjusted the getLayerSRS method to return the list of SRSes
3055 extracted from <SRS> elements instead of <BoundingBox> elements.
3056 Added a bit of documentation as well.
3057 (WMSCapabilitiesParser.checkLayerSRS): Removed integrity test
3058 since it was only implemented due to a misunderstanding.
3059
3060 * Extensions/wms/test/test_parser.py
3061 (TestWMSCapabilitiesParser.test_LayerSRS): Adjust the tests to
3062 reflect the corrected interpretation of the standard: i.e. a layer
3063 does not have to define a BoundingBox for all SRSes it supports.
3064 Hence the <SRS></SRS> specification is authoritative, not the list
3065 of BoundingBoxes.
3066 (TestWMSCapabilitiesParser.test_BoundingBoxes): Added a new test
3067 to ensure None is returned for a non-existing SRS.
3068 (TestWMSCapabilitiesParser.test_grok): Removed test_grok method
3069 since it is not applicable anymore. Listing more SRSes in <SRS>
3070 elements is valid according to the specs.
3071
3072 2004-03-26 Bernhard Reiter <[email protected]>
3073
3074 * README: Nicer formatting of text. Improved descriptions.
3075 Reflected wxWidgets name change.
3076
3077 * Thuban/UI/about.py: Extended copyright to 2004 and added
3078 information about the thuban-devel mailinglist.
3079
3080 2004-03-24 Martin Schulze <[email protected]>
3081
3082 * Extensions/wms/capabilities.py: Renamed the class to contain
3083 'WMS', also added a linebreak where required
3084
3085 * Extensions/wms/parser.py: Finally added the XML parser for the
3086 GetCapabilities response.
3087
3088 * Extensions/wms/test/sample.xml: Adjusted the sample file so that
3089 <SRS> elements match the <BoundingBox> elements, except for the
3090 layer 'beschriftung'.
3091
3092 * Extensions/wms/test/test_parser.py: Encode non-ascii strings
3093 since Python uses unicode strings internally, otherwise
3094 comparisons will fail. Removed tests for getLayerBBoxSRS() since
3095 the SRS will be calculated anyway and this method is obsoleted by
3096 getLayerSRS(). Denote SRS as strings and not as cardinal numbers.
3097 Move loading the sample file into the setUp method. Added a test
3098 for finding the integrity problem in the sample response.
3099 Improved formatting.
3100
3101 * Extensions/wms/domutils.py: Added convenience routines for
3102 handling of Document Object Model (DOM) nodes.
3103
3104 * Extensions/wms/test/test_domutils.py: Added a test for the
3105 domutils module
3106
3107 2004-03-19 Martin Schulze <[email protected]>
3108
3109 * Extensions/wms/test/test_parser.py (TestWMSCapabilitiesParser):
3110 Moved path detection and adding into a module of its own,
3111 adjustpath, which exports thubandir as main Thuban directory.
3112
3113 * Extensions/wms/test/test_ogclib.py (TestWMSLib): Moved path
3114 detection and adding into a module of its own, adjustpath, which
3115 exports thubandir as main Thuban directory. Reorganised the
3116 module in order to support the SkipTest feature for Thuban test
3117 cases.
3118
3119 * Extensions/wms/test/adjustpath.py: Moved path detection and
3120 adding into a module of its own.
3121
3122 2004-03-18 Martin Schulze <[email protected]>
3123
3124 * Extensions/wms/test/test_parser.py: Added another test for
3125 checking whether the WMS XML parser (to be implemented) returns
3126 the information we expect. This requires a sample WMS WML file
3127 (sample.xml) which has been extracted from the frida server and
3128 "improved" manually.
3129
3130 * Extensions/wms/test/test_ogclib.py: Added legacy code to add the
3131 main Thuban directory to the path in order to be able to import
3132 random modules. Adjusted the PyOGCLib detection to reuse the
3133 information gathered. Also added a note about the PYTHONPATH
3134 environment variable.
3135
3136 * Extensions/wms/test/test_ogclib.py: The format specification is
3137 a mime-type, not a graphic format, hence image/jpeg wou ld be the
3138 proper format and not JPEG. We'll also have to take care of the
3139 encoding of / as %2F.
3140
3141 2004-03-16 Martin Schulze <[email protected]>
3142
3143 * Extensions/wms/test/test_ogclib.py: Added a (hopefully)
3144 comprehensive test for the getMapURL method, built compare URLs
3145 according to the documentation in OGC 01-068r3
3146
3147 * Extensions/wms/capabilities.py (WMSCapabilities): Added the
3148 class WMSCapabilities to manage capabilites, will incorporate
3149 parsing the capabilities response and provide details for other
3150 classes.
3151
3152 2004-03-12 Bernhard Herzog <[email protected]>
3153
3154 Support views in addition to normal tables in the postgis
3155 shapestore
3156
3157 * Thuban/Model/postgisdb.py
3158 (PostGISShapeStore._fetch_table_information): Add a fallback for
3159 the case where the table name is not in the geometry_columns
3160 table. This is usually the case for views. Also, set
3161 self.shapestore here.
3162 (PostGISShapeStore.ShapeType): No need to query the database all
3163 the time. The shape type is now determined in
3164 _fetch_table_information
3165
3166 * test/postgissupport.py (PostgreSQLServer.new_postgis_db)
3167 (PostgreSQLServer.get_static_data_db, PostGISDatabase.__init__):
3168 New parameter to specify views.
3169 (PostGISDatabase.has_data): Also compare the views. New views
3170 parameter
3171 (PostGISDatabase.initdb): Create the views.
3172 (PostgreSQLServer.get_default_static_data_db): Add the v_landmarks
3173 view
3174
3175 * test/test_postgis_db.py
3176 (TestPostGISShapestorePointFromViews): New. Test a
3177 PostGISShapeStore with a view
3178 (TestPostGISShapestorePointOIDAsGIDColumn.setUp): Pass the name of
3179 the geometry_column explicitly to test whether that works
3180
3181 2004-03-12 Bernhard Herzog <[email protected]>
3182
3183 Final step for explicit id/geometry columns: Loading and saving
3184
3185 * Resources/XML/thuban-1.1.dtd: New. Derived from thuban-1.0.dtd
3186 with the following changes:
3187 (dbshapesource): Two new attributes id_column and geometry_column
3188
3189 * Thuban/Model/save.py (SessionSaver.write): Use the new dtd
3190 (SessionSaver.write_session): Use the new namespace
3191 (SessionSaver.write_data_containers): Write the new dbshapesource
3192 parameters
3193
3194 * Thuban/Model/load.py (SessionLoader.__init__): New namespace for
3195 the new file format version
3196 (SessionLoader.start_dbshapesource): Handle the new db parameters
3197
3198 * test/test_save.py: Update to the new dtd and namespace
3199 (SaveSessionTest.test_save_postgis): Update the NonConnectionStore
3200 mock object to provide a working IDColumn method.
3201
3202 * test/test_load_1_0.py: New. Copy of the test_load.py before
3203 today's changes but with the round-trip tests removed.
3204
3205 * test/test_load_0_9.py: Update doc-string.
3206
3207 * test/test_load.py: Update all .thuban files to the new dtd and
3208 namespace.
3209 (TestPostGISLayer.file_contents): Add the new dbshapesource
3210 paramters
3211
3212 2004-03-11 Bernhard Herzog <[email protected]>
3213
3214 Next step for explicit id/geometry columns: User interaction
3215
3216 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Rework how
3217 the dialog is constructed. Add combo boxes to select id and
3218 geometry column. Rename some instance variables.
3219 (ChooseDBTableDialog.GetTable): Return id and geometry column
3220 names
3221 (ChooseDBTableDialog.OnTableSelect): New. Event handler for
3222 selections in the table list
3223
3224 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Use id_column
3225 and geometry_column
3226
3227 * Thuban/Model/session.py (Session.OpenDBShapeStore): Add the new
3228 parameters for id_column and geometry column of PostGISShapeStore
3229 here as well.
3230
3231 * Thuban/Model/postgisdb.py (type_map): Add ROWID psycog type.
3232 (_raw_type_map): New. Map raw PostgreSQL type ints to thuban types
3233 (PostGISConnection.GeometryTables): Use a better query to
3234 determine which relations in the database might be usable for
3235 shapestores. Now supports views as well but is more PostgreSQL
3236 specific
3237 (PostGISConnection.table_columns): New. Somewhat experimental
3238 method to let the db dialogs provide lists of columns to users so
3239 that they can select id and geometry columns.
3240 (PostGISTable.__init__): The default value of the id_column
3241 parameter is now None it still means "gid" effectively, though.
3242 (PostGISTable.IDColumn): New introspection method to return a
3243 column object for the id column
3244 (PostGISShapeStore.GeometryColumn): New introspection method to
3245 return a column object for the geometry column
3246
3247 * test/test_postgis_db.py
3248 (TestPostGISConnection.test_gis_tables_non_empty):
3249 Removed. Subsumed by the new:
3250 (TestPostGISConnection.test_gis_tables_with_views_and_tables):
3251 New. Tes the GeometryTables and table_columns methods with actual
3252 tables and views.
3253 (PointTests.test_id_column, PointTests.test_geometry_column):
3254 New. tests for the new methods.
3255 (TestPostGISShapestorePoint.setUp)
3256 (TestPostGISShapestorePointSRID.setUp)
3257 (TestPostGISShapestorePointExplicitGIDColumn.setUp): Fill the
3258 instance variables needed by the new tests
3259
3260 2004-03-11 Bernhard Herzog <[email protected]>
3261
3262 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): The row
3263 numbers given to ReadValue are ordinals.
3264
3265 2004-03-11 Bernhard Herzog <[email protected]>
3266
3267 Elimiate the requirement for PostGIS tables to have a column
3268 called "gid".
3269
3270 * Thuban/Model/postgisdb.py (PostGISTable.__init__): New parameter
3271 id_column to specify which column to use to identify rows. Also
3272 new instance variables id_column and quoted_id_column
3273 (PostGISTable.RowIdToOrdinal, PostGISTable.RowOrdinalToId)
3274 (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue)
3275 (PostGISTable.SimpleQuery): Use the id column name provided to the
3276 constructor instead of "gid"
3277 (PostGISShapeStore.__init__): New parameter id_column analogously
3278 to PostGISTable.__init__. This parameter is simply passed through
3279 to the base class constructor
3280 (PostGISShapeStore._create_col_from_description): Fix typo in
3281 doc-string
3282 (PostGISShapeStore.Shape, PostGISShapeStore.AllShapes)
3283 (PostGISShapeStore.ShapesInRegion): Use the id column name
3284 provided to the constructor instead of "gid"
3285
3286 * test/postgissupport.py
3287 (PostgreSQLServer.get_default_static_data_db): New static table
3288 landmarks_point_id with an id column != "gid. Update the comments
3289 a bit.
3290 (skip_if_addgeometrycolumn_does_not_use_quote_ident): Fix typo in
3291 doc-
3292 (upload_shapefile): New parameter gid_column to use a name other
3293 than "gid" for the column to store the shape ids
3294
3295 * test/test_postgis_db.py (TableTests): New. Mixin-class
3296 containing all tests previously in TestPostGISTable. The actual
3297 tests are the same but the code is a bit more configurable to
3298 allow for different id columns etc.
3299 (TestPostGISTable): Derive from TableTests now for the actual
3300 tests.
3301 (TestPostGISTableExplicitGIDColumn): New. Like TestPostGISTable
3302 except that it the landmarks_point_id table to test the id_column
3303 parameter
3304 (PointTests): Extend the doc-string
3305 (TestPostGISShapestorePointExplicitGIDColumn)
3306 (TestPostGISShapestorePointOIDAsGIDColumn): New classes derived
3307 from PointTests to test the explicit id_column parameter. One
3308 tests with the name of the column holding the shape ids, the other
3309 uses PostgreSQL's OID column. For the latter a number of methods
3310 have to be overwritten to make them independent of the actual id
3311 values.
3312
3313 2004-03-08 Silke Reimer <[email protected]>
3314
3315 Update debian directory:
3316
3317 * debian/changelog: Added new version.
3318 * deiban/rules: Updated management of patches (with cbds)
3319 * debian/control: Added cbds to dependencies
3320 * debian/patches/*: New. Adds better support for patches of thuban in
3321 debian
3322 * debian/menu: Syntax of menu changed slightly
3323 * debian/setup.py.patch: removed because it has been moved to
3324 debian/patechs/setup.py.patch
3325
3326
3327 2004-02-26 Bernhard Herzog <[email protected]>
3328
3329 Create the Doc/technotes directory for text files with information
3330 for developers
3331
3332 * Doc/technotes/README: New. README for the technotes
3333
3334 * Doc/technotes/coding_guidelines.txt: New. Coding guidelines for
3335 Thuban
3336
3337 * Doc/technotes/release_process.txt: New. Used to be
3338 HOWTO-Release. Now slightly adapted to technote formatting style.
3339
3340 * HOWTO-Release: Removed. It's contents are now in
3341 Doc/technotes/release_process.txt
3342
3343 2004-02-25 Bernhard Herzog <[email protected]>
3344
3345 * libraries/thuban/wxproj.cpp (get_wx_version): New. Return the
3346 version of wxWindows the module was compiled with so we can check
3347 that against the wxPython version.
3348
3349 * Thuban/version.py (thuban_branch, thuban_release): New variables
3350 controlling which and how Thuban versions are shown. See the
3351 comments for details.
3352 (verify_versions): Also check that the wx version that wxproj is
3353 compiled against matches that of the wxPython we use at runtime
3354
3355 2004-02-20 Bernhard Herzog <[email protected]>
3356
3357 * Extensions/wms/wms.py (epsg_code_to_projection): Use
3358 get_system_proj_file to read the epsg projections. The old way
3359 depended on the current directory being the top Thuban directory.
3360
3361 2004-02-20 Bernhard Herzog <[email protected]>
3362
3363 * Extensions/svgexport/test/test_svgmapwriter.py
3364 (TestVirtualDC.test_clippath): Remove a debug print
3365
3366 2004-02-20 Bernhard Herzog <[email protected]>
3367
3368 * Extensions/svgexport/__init__.py: New. Turn
3369 Extensions/svgexport into a package.
3370
3371 * Extensions/svgexport/svgmapwriter.py: Reorder the imports and
3372 doc-string a bit. The doc-string must come first, otherwise it's
3373 not a doc-string. The __future__ import must be the first thing
3374 after the doc-string. Use only double quotes in doc-strings.
3375 Single quotes trip up emacs syntax highlighting if the text
3376 contains apostrophes.
3377
3378 2004-02-20 Bernhard Herzog <[email protected]>
3379
3380 * Extensions/svgexport/test/__init__.py,
3381 Extensions/svgexport/test/test_svgmapwriter.py: New. Initial test
3382 suite for svgexport
3383
3384 * test/runtests.py (find_test_modules): New. Function with the
3385 module finding code from main.
3386 (main): Use find_test_modules to figure out the default test
3387 modules and take modules from Extensions.svgexport.test too.
3388
3389 2004-02-19 Bernhard Herzog <[email protected]>
3390
3391 * Thuban/UI/application.py (ThubanApplication.OnInit): Make sure
3392 the mainwindow has a reference to the map of the initial session.
3393 This fixes a bug introduced with the fix for RT#2245
3394
3395 2004-02-19 Bernhard Herzog <[email protected]>
3396
3397 * Extensions/svgexport/svgsaver.py,
3398 Extensions/svgexport/svgmapwriter.py,
3399 Extensions/svgexport/maplegend.py: Added again. This time in the
3400 correct place.
3401
3402 2004-02-17 Bernhard Herzog <[email protected]>
3403
3404 Fix for RT#2245
3405
3406 * Thuban/UI/application.py (ThubanApplication.OnInit): Initialize
3407 instance variables before trying to create any windows. Creating
3408 windows can start an event loop if e.g. message boxes are popped
3409 up for some reason, and event handlers, especially EVT_UPDATE_UI
3410 may want to access things from the application.
3411 (ThubanApplication.maps_changed): The mainwindow may not have been
3412 created yet, so check whether it has been created before calling
3413 its methods
3414
3415 * Thuban/UI/view.py (MapCanvas.OnIdle): Only try to redraw if we
3416 have a map
3417
3418 2004-02-17 Bernhard Herzog <[email protected]>
3419
3420 * test/test_svgmapwriter.py, Extensions/svgsaver.py,
3421 Extensions/svgmapwriter.py, Extensions/maplegend.py,
3422 extensions/svgexport/svgsaver.py,
3423 extensions/svgexport/svgmapwriter.py,
3424 extensions/svgexport/maplegend.py: Removed. These files were in
3425 the wrong places or didn't work at all.
3426
3427 2004-02-16 Bernhard Herzog <[email protected]>
3428
3429 * Thuban/UI/view.py (MapCanvas.Export): Remove accidentally added
3430 line
3431
3432 2004-02-16 Bernhard Herzog <[email protected]>
3433
3434 * Thuban/UI/view.py (MapCanvas.Export): Avoid UnboundLocalError.
3435
3436 2004-02-15 Markus Rechtien <[email protected]>
3437
3438 * Extensions/svgexport/svgmapwriter.py: New. Adds the capability
3439 to write a session to a file in SVG format.
3440 * Extensions/svgexport/svgsaver.py: New. Uses svgmapwriter.py
3441 to write a SVG map of a session.
3442 * Extensions/svgexport/maplegend: New. Writes a basic maplegend
3443 in SVG format for the current session.
3444
3445 2004-02-13 Bernhard Herzog <[email protected]>
3446
3447 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): When the layer
3448 can't be created, return immediately after displaying the error
3449 message.
3450
3451 2004-02-11 Bernhard Herzog <[email protected]>
3452
3453 Handle postgis tables with more than one geometry column.
3454
3455 * Thuban/Model/postgisdb.py
3456 (PostGISTable._fetch_table_information): Delegate the creation of
3457 column objects to a different method so that we can extend that in
3458 derived classes
3459 (PostGISTable._create_col_from_description): New. Column object
3460 creation part of _fetch_table_information
3461 (PostGISShapeStore._create_col_from_description): New. Extend
3462 inherited method to handle geometry columns
3463 (PostGISShapeStore.__init__): New parameter geometry_column to
3464 specify which geometry column to use. Optional but mandatory for
3465 tables with more than one geometry column
3466 (PostGISShapeStore._fetch_table_information): Also use the name of
3467 the geometry column when looking for the srid
3468 (PostGISShapeStore.ShapeType): Also use the name of the geometry
3469 column when looking for the shape type
3470
3471 * test/test_save.py (SaveSessionTest.test_save_postgis): Adapt
3472 NonConnectionStore to changes in the PostGISShapeStore
3473
3474 * test/test_postgis_db.py
3475 (TestPostGISSpecialCases.test_shapestore_two_geom_cols): Test
3476 PostGISShapeStore with tables having two geometry columns.
3477
3478 2004-02-10 Bernhard Herzog <[email protected]>
3479
3480 Fix some postgis problems. What remains to be done is real
3481 handling of SRIDs as they affect how reprojection is done
3482
3483 * Thuban/Model/postgisdb.py (quote_identifier): Fix typo in
3484 doc-string
3485 (PostGISShapeStore._fetch_table_information): New. Extend
3486 inherited method to retrieve srid
3487 (PostGISShapeStore.BoundingBox): Handle tables without data.
3488 extent yields NULL for those
3489 (PostGISShapeStore.ShapesInRegion): Use the srid of the table.
3490
3491 * test/test_postgis_db.py
3492 (TestPostGISSpecialCases.test_shapestore_empty_table): New test
3493 for the special case of a table without any data
3494 (TestPostGISShapestorePointSRID): New class with tests for a table
3495 that uses srids
3496 (PolygonTests): Fix a doc-string typo
3497
3498 * test/postgissupport.py (PostGISDatabase.__init__): New parameter
3499 reference_systems with a specification of spacial reference
3500 systems to create in the new db.
3501 (PostgreSQLServer.new_postgis_db)
3502 (PostgreSQLServer.get_static_data_db): New parameter
3503 reference_systems to be passed through ultimately to
3504 PostGISDatabase. In new_postgis_db also check whether an existing
3505 db already has the right srids
3506 (PostgreSQLServer.get_default_static_data_db): Add srids and a
3507 table that uses srids
3508 (PostGISDatabase.initdb): Create the entries for the reference
3509 systems
3510 (PostGISDatabase.has_data): Add reference_systems parameter to
3511 check for those too
3512 (upload_shapefile): New parameter srid to create tables with a
3513 specific srid
3514
3515 2004-02-06 Frank Koormann <[email protected]>
3516
3517 * po/pt_BR.po: Fixed charset
3518
3519 2004-02-05 Frank Koormann <[email protected]>
3520
3521 * po/pt_BR.po: Fixed format string for error message, missing %s
3522 added (Thuban/UI/application.py:273)
3523
3524 2004-02-03 Frank Koormann <[email protected]>
3525
3526 First version of Portuguese (Brazilian) translation
3527
3528 * po/pt_BR.po: New, translation of pot (2004-01-15 16:07+0300) for
3529 Brazilian Portuguese by Eduardo Patto Kanegae.
3530
3531 * Thuban/UI/about.py (About.__init.py__): Added Eduardo to the list of
3532 translators.
3533
3534
3535 2004-01-22 Frank Koormann <[email protected]>
3536
3537 * Doc/manual/thuban-manual.xml: Added section on installation of
3538 Thuban under Win32 systems. Fixed image path references in the postgis
3539 section. Some minor source formattings.
3540
3541 2004-01-21 Frank Koormann <[email protected]>
3542
3543 Make Thuban remember path selections (at least for one application run).
3544
3545 * Thuban/UI/application.py (Application.OnInit): Initialize path as a
3546 attribute of application object. Path is a dictionary of
3547 strings, currently with the items "data" and "projection".
3548 (Application.SetPath): New, stores path for the specified item.
3549 (Application.Path): New, return path for the specified item.
3550
3551 * Thuban/UI/mainwindow.py
3552 (MainWindow.OpenSession, MainWindow.SaveSessionAs,
3553 MainWindow.AddLayer, MainWindow.AddRasterLayer,
3554 MainWindow.TableOpen): Access "data" path information of the
3555 application.
3556
3557 * Thuban/UI/projdialog.py (ProjFrame._OnImport, ProjFrame._OnExport):
3558 Access "projection" path information of the application.
3559
3560 2004-01-05 Bernhard Herzog <[email protected]>
3561
3562 * po/ru.po: Updated translations from Alex Shevlakov
3563
3564 2004-01-05 Bernhard Herzog <[email protected]>
3565
3566 * po/Makefile, po/README: Move the description of how to generate
3567 the translation statistics to the README.
3568
3569 2003-12-23 Bernhard Herzog <[email protected]>
3570
3571 * NEWS: Update for 1.0.0
3572
3573 * po/it.po: Another update from Maurizio Napolitano
3574
3575 2003-12-23 Bernhard Herzog <[email protected]>
3576
3577 * po/it.po: Updated translation from Maurizio Napolitano
3578
3579 2003-12-23 Bernhard Herzog <[email protected]>
3580
3581 * Thuban/UI/join.py (JoinDialog.__init__): Mark one more string
3582 for translation
3583
3584 * Thuban/UI/mainwindow.py (MainWindow.TableRename)
3585 (MainWindow.RenameMap, MainWindow.RenameLayer): Mark some more
3586 strings for translation
3587
3588 * po/de.po: Update with the newly marked strings.
3589
3590 2003-12-22 Bernhard Herzog <[email protected]>
3591
3592 * HOWTO-Release: Fix the places where version numbers have to be
3593 updated
3594
3595 2003-12-22 Bernhard Herzog <[email protected]>
3596
3597 * setup.py (setup call): 1.0.0, yeah!
3598
3599 * Thuban/version.py (longversion): 1.0.0, yeah!
3600
3601 * Thuban/Model/load.py (SessionLoader.__init__): Accept the
3602 1.0.0 namespace too
3603
3604 * Thuban/Model/save.py (SessionSaver.write_session): Save with
3605 1.0.0 namespace
3606
3607 * test/test_load.py (LoadSessionTest.dtd)
3608 (TestSingleLayer.file_contents)
3609 (TestNonAsciiColumnName.file_contents)
3610 (TestLayerVisibility.file_contents)
3611 (TestClassification.file_contents, TestLabels.file_contents)
3612 (TestLayerProjection.file_contents)
3613 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3614 (TestLabelLayer.file_contents, TestPostGISLayer.file_contents)
3615 (TestPostGISLayerPassword.file_contents)
3616 (TestLoadError.file_contents, TestLoadError.test): Update for
3617 1.0.0 namespace
3618
3619 * test/test_save.py (SaveSessionTest.dtd)
3620 (SaveSessionTest.testEmptySession)
3621 (SaveSessionTest.testSingleLayer)
3622 (SaveSessionTest.testLayerProjection)
3623 (SaveSessionTest.testRasterLayer)
3624 (SaveSessionTest.testClassifiedLayer)
3625 (SaveSessionTest.test_dbf_table)
3626 (SaveSessionTest.test_joined_table)
3627 (SaveSessionTest.test_save_postgis): Update for 1.0.0 namespace
3628
3629 2003-12-22 Bernhard Herzog <[email protected]>
3630
3631 * Thuban/Model/load.py (SessionLoader.start_label): Make sure the
3632 alignment flags are byte strings not unicode and that they have
3633 valid values
3634
3635 * test/test_load.py (TestLabelLayer): New. Test loading (and
3636 indirectly saving) of maps with labels.
3637
3638 2003-12-22 Bernhard Herzog <[email protected]>
3639
3640 * Thuban/UI/tableview.py (TableGrid.OnDestroy)
3641 (TableGrid.__init__): Handle EVT_WINDOW_DESTROY in the grid to
3642 unsubscribe all subscribers.
3643 (LayerTableFrame.OnDestroy): Do not unsubscribe any messages from
3644 self.grid since it may already have been destroyed.
3645 Fixes RT #2256
3646
3647 2003-12-19 Bernhard Herzog <[email protected]>
3648
3649 * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
3650
3651 2003-12-16 Bernhard Herzog <[email protected]>
3652
3653 * debian/bitmappath.patch, debian/setup.py.patch:
3654 added to ensure compliance with FHS for debian
3655 * debian/rules, debian/changelog:
3656 added patches in rules to ensure compliance with FHS for debian
3657
3658 2003-12-16 Bernhard Herzog <[email protected]>
3659
3660 * po/Makefile (mo): Make the output a bit nicer so that it prints
3661 statistics about the translations. Add a comment how produce even
3662 nicer statistics with sed.
3663
3664 2003-12-09 Frank Koormann <[email protected]>
3665
3666 * Resources/Projections/defaults.proj:
3667 French projection sample with correct accents (UNICODE).
3668
3669 2003-12-05 Bernhard Herzog <[email protected]>
3670
3671 * MANIFEST.in: Add the devtools directory
3672
3673 * setup.py (setup call): Use license instead of licence. This
3674 silences a deprecation warning on Python 2.3
3675
3676 2003-12-05 Frank Koormann <[email protected]>
3677
3678 Documentation synced with 1.0rc1
3679
3680 * Doc/manual/thuban-manual.xml:
3681 Minor formatting changes and references to database layers .
3682 Introduction.Internationalization: New section on i18n.
3683 MapManagement.AddingandRemovingLayers: Added item on database layers.
3684 MapManagement.TheLegend: Added section and screenshot on popup menu.
3685 ProjectionManagement: Updated screenshot and sentence on EPSG.
3686 Appendix.SupportedDataSources: Added PostGIS.
3687 Appendix.WorkingwithPostGIS: New section.
3688
3689 * Doc/manual/images/6_projection.png: Updated screenshot including
3690 EPSG checkboxes.
3691
3692 * Doc/manual/images/3_5_popup_menu.png: New, popup menu screenshot.
3693
3694 * Doc/manual/images/app_postgis_add_layer.png,
3695 Doc/manual/images/app_postgis_db_add.png,
3696 Doc/manual/images/app_postgis_db_management.png:
3697 New screenshots focussing on database layers
3698
3699 2003-12-05 Frank Koormann <[email protected]>
3700
3701 * Thuban/UI/projdialog.py (load_user_proj): If user.proj is missing
3702 write warning to stderr instead of rising a warning dialog
3703
3704 2003-12-03 Bernhard Herzog <[email protected]>
3705
3706 Fix for RT #2243
3707
3708 * Thuban/UI/mainwindow.py (MainWindow.has_selected_shape_layer):
3709 New. Like has_selected_layer but for shape layers only
3710 (_has_selected_shape_layer): New. Like _has_selected_layer but for
3711 shape layers only
3712 (layer_show_table command, layer_jointable command): Use these
3713 commands should only be available for shape layers
3714
3715 2003-12-03 Bernhard Herzog <[email protected]>
3716
3717 * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
3718 publishers that are wx objects and may have been destroyed by wx
3719 already. Fixes RT #2242.
3720
3721 2003-12-03 Bernhard Herzog <[email protected]>
3722
3723 * po/ru.po: Updates from Alex Shevlakov
3724
3725 2003-12-03 Silke Reimer <silkeintevation.de>
3726
3727 * debian/control, debian/changelog: Added gdal-support to
3728 debian package, updated to new thuban version
3729
3730
3731 2003-12-03 Bernhard Herzog <[email protected]>
3732
3733 * Thuban/Lib/version.py: New. Module for version number
3734 manipulations. The version of make_tuple here also deals better
3735 with more unusual version number strings, such as e.g.
3736 "1.2+cvs20031111"
3737
3738 * Thuban/version.py (make_tuple): Removed. It's now in
3739 Thuban.Lib.version. Use that implementation instead.
3740
3741 * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
3742
3743 2003-12-02 Bernhard Herzog <[email protected]>
3744
3745 * MANIFEST.in: Add debian files
3746
3747 * setup.py (setup call): Add packages for the Extensions so that
3748 they're installed too
3749 (data_files): Add READMEs and sample data from some Extensions
3750
3751 * NEWS: Add note about the extensions in binary packages
3752
3753 2003-12-02 Bernhard Herzog <[email protected]>
3754
3755 * Thuban/Model/save.py (SessionSaver.write_session): Save files
3756 with the thuban-1.0rc1
3757
3758 * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
3759 thuban-1.0rc1 namespace too
3760
3761 * test/test_save.py (SaveSessionTest.dtd)
3762 (SaveSessionTest.testEmptySession)
3763 (SaveSessionTest.testSingleLayer)
3764 (SaveSessionTest.testLayerProjection)
3765 (SaveSessionTest.testRasterLayer)
3766 (SaveSessionTest.testClassifiedLayer)
3767 (SaveSessionTest.test_dbf_table)
3768 (SaveSessionTest.test_joined_table)
3769 (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
3770 namespace
3771
3772 * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
3773 namespace
3774 (TestSingleLayer.file_contents)
3775 (TestNonAsciiColumnName.file_contents)
3776 (TestLayerVisibility.file_contents)
3777 (TestClassification.file_contents, TestLabels.file_contents)
3778 (TestLayerProjection.file_contents)
3779 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3780 (TestPostGISLayer.file_contents)
3781 (TestPostGISLayerPassword.file_contents)
3782 (TestLoadError.file_contents, TestLoadError.test): Update to
3783 thuban-1.0rc1 namespace
3784
3785 2003-12-01 Bernhard Herzog <[email protected]>
3786
3787 * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
3788 nt to better match Intevation's current w32 setup
3789
3790 * HOWTO-Release: Add note about updating MANIFEST.in
3791
3792 * MANIFEST.in: Add the Extensions
3793
3794 * NEWS: Update for 1.0rc1
3795
3796 2003-12-01 Bernhard Herzog <[email protected]>
3797
3798 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
3799 cards for the dialog so that shapefiles ending in all uppercase
3800 SHP are listed too
3801
3802 2003-11-28 Bernhard Herzog <[email protected]>
3803
3804 * Thuban/version.py (longversion): Update to 1.0rc1
3805
3806 * setup.py (setup call): Update version to 1.0rc1. Use the
3807 [email protected] email address as author email instead of my
3808 personal one.
3809
3810 2003-11-28 Bernhard Herzog <[email protected]>
3811
3812 * po/de.po: Update german translation.
3813
3814 2003-11-28 Bernhard Herzog <[email protected]>
3815
3816 Unify the filenames stored in .thuban files so that the .thuban
3817 files are more platform independend
3818
3819 * Thuban/Model/save.py (unify_filename): New. Unify filenames so
3820 that they can be used on both windows and unix
3821 (SessionSaver.prepare_filename): New. Handle all filename
3822 transformations for filenames stored in the thuban file
3823 (SessionSaver.write_data_containers, SessionSaver.write_layer):
3824 Use prepare_filename
3825
3826 * test/test_save.py (SaveSessionTest.testSingleLayer)
3827 (SaveSessionTest.testLayerProjection)
3828 (SaveSessionTest.testRasterLayer)
3829 (SaveSessionTest.testClassifiedLayer)
3830 (SaveSessionTest.test_dbf_table)
3831 (SaveSessionTest.test_joined_table): Filenames are always stored
3832 with slashes on all currently supported platforms so adapt all
3833 tests to this
3834
3835 * test/test_load.py (LoadSessionTest.filenames): With the new
3836 filename scheme the filenames in the tests should be
3837 understandable on all currently supported platforms so we turn
3838 this into an empty list because we don't have to normalize them
3839 anymore
3840
3841 2003-11-28 Bernhard Herzog <[email protected]>
3842
3843 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
3844 Add the ellipsoid to the projection since some Proj versions
3845 complain if it's missing.
3846
3847 2003-11-27 Bernhard Herzog <[email protected]>
3848
3849 Corect some bounding box projection problems
3850
3851 * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
3852 version of ForwardBBox
3853 (Projection._transform_bbox): New. common implementation of
3854 ForwardBBox and InverseBBox
3855 (Projection.ForwardBBox): Use _transform_bbox.
3856
3857 * test/test_proj.py (TestProjection.test): Add test for
3858 InverseBBox
3859
3860 * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
3861 (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
3862 new InverseBBox method to determine the unprojected bounding box
3863 (Layer.ShapesInRegion): Use the ForwardBBox method to project the
3864 bbox.
3865
3866 * test/test_layer.py (TestLayer.test_point_layer_with_projection):
3867 Removed.
3868 (TestLayer.test_arc_layer_with_projection): New. This test is
3869 better able to test whether bounding boxes are projected correctly
3870 than test_point_layer_with_projection
3871
3872 * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
3873 InverseBBox to unproject bboxes
3874
3875 2003-11-25 Bernhard Herzog <[email protected]>
3876
3877 * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
3878 source code.
3879
3880 2003-11-25 Bernhard Herzog <[email protected]>
3881
3882 * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
3883 there for backwards compatibility and all code relying on that
3884 should have been updated by now.
3885
3886 2003-11-25 Bernhard Herzog <[email protected]>
3887
3888 * test/test_load.py (TestClassification.test): Add the missing
3889 round trip test.
3890 (TestClassification.file_contents): Update to the newest file
3891 format
3892
3893 2003-11-25 Bernhard Herzog <[email protected]>
3894
3895 Add very experimental (and possibly dangerous) extension to draw
3896 polygons:
3897
3898 * Extensions/drawshape/README: New. Brief installation
3899 instructions
3900
3901 * Extensions/drawshape/drawshape.py: New. Implementation of the
3902 drawshape extensions
3903
3904 * Extensions/drawshape/patch.diff: Patch to apply before the
3905 extension can be used.
3906
3907 2003-11-24 Bernhard Herzog <[email protected]>
3908
3909 * Thuban/Model/data.py (ShapefileStore._open_shapefile)
3910 (ShapefileStore.__init__): Factor opening the shapefile into a
3911 separate method (the new _open_shapefile). This makes the code a
3912 bit more readable but the real reason is that it makes some evil
3913 hacks easier. :-)
3914
3915 2003-11-24 Bernhard Herzog <[email protected]>
3916
3917 * Thuban/Model/load.py (SessionLoader.check_attrs): If no
3918 converter is specified for an attribute assume it's a string
3919 containing only Latin1 characters. Update doc-string accordingly.
3920 This change should fix many places where unicode objects might
3921 accidentally enter Thuban.
3922
3923 * test/test_load.py (TestNonAsciiColumnName): New test to check
3924 what happens with column names in DBF files that contain non-ascii
3925 characters
3926
3927 2003-11-21 Bernhard Herzog <[email protected]>
3928
3929 Enable the experimental attribute editing again and introduce a
3930 command line switch to actually activate it
3931
3932 * Thuban/UI/main.py (options): New. Container for options set on
3933 the commmand line
3934 (main): Add the --enable-attribute-editing flag.
3935
3936 * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
3937 editing is enabled use the grid ctrl which allows editing of the
3938 values
3939
3940 * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
3941 New. Just delegate this to the underlying table.
3942
3943 2003-11-20 Bernhard Herzog <[email protected]>
3944
3945 * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
3946 Skip this test if run under non-posix systems since it only works
3947 there
3948
3949 2003-11-19 Bernhard Herzog <[email protected]>
3950
3951 * Thuban/Model/resource.py: Rework the way gdal support is
3952 determined so that we can give a reason in the about why gdal is
3953 not supported.
3954 (gdal_support_status): New. Variable holding a string with the
3955 reason for no gdal support
3956
3957 * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
3958 not supported to the message
3959
3960 2003-11-19 Bernhard Herzog <[email protected]>
3961
3962 Remove the old table interface and its test cases
3963
3964 * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
3965 (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
3966 anymore
3967
3968 * Thuban/Model/transientdb.py (TransientTableBase)
3969 (AutoTransientTable): Do not derive from OldTableInterfaceMixin
3970 anymore
3971
3972 * test/test_table.py: Removed since the old interface it tests is
3973 gone.
3974
3975 * test/runtests.py (main): The old table interface is gone and
3976 with it the deprecation warnings so remove the code that turns
3977 these warnings into errors
3978
3979 2003-11-19 Bernhard Herzog <[email protected]>
3980
3981 * test/test_table.py: Revert to revision 1.5 again. Changing the
3982 tests to use the new table interface is completely wrong since the
3983 whole purpose of the tests in this module is to test the old
3984 interface.
3985
3986 2003-11-18 Bernhard Herzog <[email protected]>
3987
3988 * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
3989 New. Test whether the connection matches a set of connection
3990 parameters
3991
3992 * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
3993 (DBFrame.OnAdd): Use the new MatchesParameters method when looking
3994 for existing connections with the same parameters and break out of
3995 the loop correctly.
3996
3997 * test/test_postgis_db.py (TestBriefDescription)
3998 (TestPostGISSimple.test_brief_description): Rename
3999 TestBriefDescription to TestPostGISSimple and the test method to
4000 test_brief_description so that we can add more test methods.
4001 (TestPostGISSimple.test_matches_parameters): New. Test the new
4002 MatchesParameters method
4003
4004 2003-11-18 Bernhard Herzog <[email protected]>
4005
4006 * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
4007 _was_destroyed, to indicate whether an publisher instance has
4008 already been destroyed.
4009 (Publisher.Unsubscribe): Only disconnect if the publisher has not
4010 been destroyed yet.
4011 (Publisher.Destroy): Set the _was_destroyed flag to true.
4012
4013 * test/test_connector.py
4014 (TestPublisher.test_unsubscribe_after_destroy): New. Test that
4015 calling Unsubscribe after Destroy doesn't raise an exception
4016
4017 2003-11-14 Bernhard Herzog <[email protected]>
4018
4019 * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
4020 typo in doc-string
4021
4022 2003-11-13 Bernhard Herzog <[email protected]>
4023
4024 Quote table and column names properly for postgis.
4025
4026 * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
4027 quote an identifier for use in an sql statement
4028 (PostGISColumn.__init__): Add the quoted_name attribute
4029 (PostGISTable.__init__): New instance variable quoted_tablename
4030 (PostGISTable._fetch_table_information): Use the quoted table
4031 name. New isntance variable quoted_geo_col with a quoted version
4032 of geometry_column
4033 (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
4034 (PostGISTable.RowOrdinalToId): Use the quoted table name
4035 (PostGISTable.ReadValue, PostGISTable.ValueRange)
4036 (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
4037 (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
4038 (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
4039 Use quoted table and column names
4040
4041 * test/test_postgis_db.py (TestPostGISSpecialCases)
4042 (TestPostGISIgnoredColumns): Rename the class to
4043 TestPostGISSpecialCases because that better describes the new
4044 cases
4045 (TestPostGISSpecialCases.test_unsupported_types)
4046 (TestPostGISSpecialCases.test): Rename the method to
4047 test_unsupported_types because we need a more descriptive name now
4048 that there are more methods
4049 (TestPostGISSpecialCases.test_table_name_quoting)
4050 (TestPostGISSpecialCases.test_column_name_quoting)
4051 (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
4052 cases to test quoting of table and column names in PostGISTable
4053 and PostGISShapeStore
4054
4055 * test/postgissupport.py
4056 (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
4057 AddGeometryColumn desn't support table or column names with sapces
4058 or double quotes
4059
4060 2003-11-12 Jan-Oliver Wagner <[email protected]>
4061
4062 * Extensions/wms/__init__.py: New: Init to make this
4063 directory a package.
4064
4065 * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
4066
4067 2003-11-11 Bernhard Herzog <[email protected]>
4068
4069 * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
4070 Constant for the file woth deprecated epsg projections
4071 (get_system_proj_file): Update doc-string
4072
4073 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
4074 above the EPS widgets, introduce a check box for the deprecated
4075 eps projections and a label for the epsg widgets
4076 (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
4077 too
4078
4079 2003-11-11 Bernhard Herzog <[email protected]>
4080
4081 Avoid warnings when run under Python 2.3
4082
4083 * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
4084 (BaseRenderer.draw_label_layer): Coordinates must be ints.
4085
4086 * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
4087 real method so that we can convert to int.
4088 (MapRenderer.label_font): The font size mist be an int.
4089
4090 * Thuban/UI/common.py (Color2wxColour): The color values must be
4091 ints. Also, remove the unnecessary asserts.
4092
4093 * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
4094 (TestUnicodeStrings.test): Python source code should not contain
4095 non-ascii characters unless an encoding is specified in the file.
4096 Therefore use \x escapes in the string literals for non-ascii
4097 characters.
4098
4099 2003-11-11 Bernhard Herzog <[email protected]>
4100
4101 * Thuban/Model/resource.py (get_system_proj_file): Add a filename
4102 parameter so that this function can be used for all proj files in
4103 Resource/Projections
4104 (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
4105 get_system_proj_file
4106
4107 * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
4108 ProjFile self.__sysProjFile use a dictionary of system ProjFile
4109 objects self._sys_proj_files
4110 (ProjFrame.build_dialog): Adapt to the new changes in the
4111 ProjectionList constructor. Add a check button to toggle whether
4112 EPSG projections are shown
4113 (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
4114 events.
4115 (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
4116 the busy cursor if the files have not yet been loaded by the
4117 dialog.
4118 (ProjFrame.load_system_proj): Add a parameter for the name of the
4119 proj file. Maintain the dictionary of system projections
4120 self._sys_proj_files
4121
4122 * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
4123 user_projs parameters into one parameter proj_files which is a
4124 list of proj files.
4125 (ProjectionList._subscribe_proj_files)
4126 (ProjectionList._unsubscribe_proj_files): New. Move
4127 subscription/unsubscription of projfile messages to separate
4128 methods
4129 (ProjectionList.Destroy): The unsubscribe is now done in
4130 _unsubscribe_proj_files
4131 (ProjectionList.update_projections): We now have a list of proj
4132 file objects
4133 (ProjectionList.SetProjFiles): New method to set a new list of
4134 proj file objects
4135
4136 * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
4137 Specify explicitly which system proj file to load.
4138
4139 2003-11-11 Bernhard Herzog <[email protected]>
4140
4141 * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
4142 instance variables to cut cyclic references. The GC would have
4143 collected the loader eventually but it can happen that it doesn't
4144 run at all until thuban is closed (2.3 but not 2.2 tries a bit
4145 harder and forces a collection when the interpreter terminates)
4146 (load_session): Call the handler's Destroy method to make sure
4147 that it gets garbage collected early. Otherwise it will be
4148 collected very late if at all and it holds some references to e.g.
4149 shapestores and the session which can lead to leaks (of e.g. the
4150 temporary files)
4151
4152 * test/test_load.py (TestSingleLayer.test_leak): New. test for the
4153 resource leak in load_session
4154
4155 2003-11-10 Bernhard Herzog <[email protected]>
4156
4157 * Thuban/UI/baserenderer.py: Add a way to specify how layers in
4158 extensions are to be rendered.
4159 (_renderer_extensions): New. List with renderer for layers in
4160 extensions
4161 (add_renderer_extension): New. Add a renderer extension
4162 (init_renderer_extensions): New. Init the renderer extensions
4163 (BaseRenderer.render_map_incrementally): Search
4164 _renderer_extensions for how to draw unknown layer types
4165 (BaseRenderer.draw_raster_data): Add format parameter so that
4166 formats other than BMP can be drawn
4167 (BaseRenderer.draw_raster_layer): Pass an explicit format to
4168 draw_raster_data
4169
4170 * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
4171 strings of the format parameter of draw_raster_data method to wx
4172 constants
4173 (MapRenderer.draw_raster_data): Add the format parameter and use
4174 raster_format_map to map it to the right wxwindows constant for
4175 wxImageFromStream
4176
4177 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
4178 the format parameter and record it
4179 (TestBaseRenderer.test_raster_no_projection): check the format
4180 paramter of the draw_raster_data method
4181 (TestBaseRenderer.test_renderer_extension): New. Test the renderer
4182 extension facility
4183
4184 2003-11-07 Bernhard Herzog <[email protected]>
4185
4186 Tweak the usage of the sqlite database to make common use cases
4187 more responsive. In most cases copying the data to the sqlite
4188 database takes so long that using sqlite doesn't have enough
4189 advantages.
4190
4191 * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
4192 comments about performance and query the min and max in separate
4193 statements because only that way will indexes be used.
4194 (TransientTableBase.UniqueValues): Add some comments about
4195 performance.
4196 (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
4197 Do not copy the data to the transient DB but use the transient
4198 copy if it exists. See the new comments for the performance trade
4199 offs
4200
4201 * test/test_transientdb.py
4202 (TestTransientTable.test_auto_transient_table): Make sure that the
4203 data is copied to the transient database at some point.
4204
4205 2003-11-03 Bernhard Herzog <[email protected]>
4206
4207 * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
4208 globals to locals so that it's a bit faster
4209
4210 2003-11-03 Bernhard Herzog <[email protected]>
4211
4212 * Thuban/UI/baserenderer.py
4213 (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
4214 method. ReadValue is faster than ReadRowAsDict since it only reads
4215 one cell especially now that the dbf file objects actually
4216 implement it.
4217
4218 * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
4219 read_attribute method of the dbf objects
4220
4221 2003-11-03 Bernhard Herzog <[email protected]>
4222
4223 * Extensions/profiling/profiling.py (popup_dialog_box): New config
4224 variable to indicate whether the result should be shown in a
4225 dialog box
4226 (profile_screen_renderer, time_screen_renderer): Only show a
4227 dialog box if popup_dialog_box is true.
4228 (profile_screen_renderer): Flush stdout after the printing the
4229 first part of the "profiling..." message
4230
4231 * Thuban/UI/baserenderer.py
4232 (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
4233 brushes for the groups so that they're not created over and over
4234 again
4235
4236 * Thuban/Model/classification.py (Classification.__getattr__)
4237 (Classification._compile_classification)
4238 (Classification._clear_compiled_classification): New. Methods to
4239 manage a 'compiled' representation of the classification groups
4240 which is created on demand
4241 (Classification.InsertGroup, Classification.RemoveGroup)
4242 (Classification.ReplaceGroup): reset the compiled representation
4243 (Classification.FindGroup): Use the compiled representation to
4244 find the matching group
4245 (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
4246
4247 2003-10-31 Bernhard Herzog <[email protected]>
4248
4249 * Thuban/Model/classification.py (Classification.SetDefaultGroup):
4250 Send a CLASS_CHANGED message
4251 (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
4252 not return the removed group since it wasn't used.
4253
4254 * test/test_classification.py
4255 (TestClassification.test_set_default_group): New. Test the
4256 SetDefaultGroup method
4257 (TestClassification.test_insert_group): New. Test the InsertGroup
4258 method
4259 (TestClassification.test_remove_group): New. Test the RemoveGroup
4260 method
4261 (TestClassification.test_replace_group): New. Test the
4262 ReplaceGroup method
4263
4264 2003-10-31 Bernhard Herzog <[email protected]>
4265
4266 * test/test_classification.py (TestClassification.setUp):
4267 Subscribe to the CLASS_CHANGED messages
4268 (TestClassification.tearDown): New. Destroy the classification
4269 properly
4270 (TestClassification.test_defaults): Add tests for the default line
4271 width and whether no messages were sent yet
4272 (TestClassification.test_set_default_properties): Add tests for
4273 messages and setting the default line width
4274 (TestClassification.test_add_singleton)
4275 (TestClassification.test_add_range)
4276 (TestClassification.test_multiple_groups): Add tests for messages
4277
4278 2003-10-31 Bernhard Herzog <[email protected]>
4279
4280 Some more refactoring in preparation for new tests:
4281
4282 * test/test_classification.py (TestClassification.setUp): New.
4283 Instantiate the classification here. Update the test methods
4284 accordingly.
4285 (TestClassification.test_multiple_groups): Make sure that the two
4286 singletons matching 1 are considered different.
4287
4288 2003-10-31 Bernhard Herzog <[email protected]>
4289
4290 * test/test_classification.py (red, green, blue): New. These
4291 constants were used in several cases. Update the relevant methods.
4292 (TestClassification.test_defaults)
4293 (TestClassification.test_set_default_properties)
4294 (TestClassification.test_add_singleton)
4295 (TestClassification.test_add_range)
4296 (TestClassification.test_multiple_groups)
4297 (TestClassification.test_deepcopy): New. These were formerly all
4298 part of the single method test.
4299 (TestClassification.test_deepcopy): Removed.
4300 (TestClassIterator): Removed. The test case is now a method of
4301 TestClassification since it tests part of the public interface of
4302 Classification
4303 (TestClassification.test_iterator): New. Used to be
4304 TestClassIterator effectively
4305
4306 2003-10-31 Jan-Oliver Wagner <[email protected]>
4307
4308 GUIfied the functions of the profiling extension.
4309
4310 * /Extensions/profiling/__init__.py: New: Init to make this
4311 directory a package.
4312
4313 * Extensions/profiling/profiling.py: Moved menu entries to
4314 the Extensions menu. Applied _() for strings.
4315 (profile_screen_renderer): Catch the detailed printout and present
4316 it in a dialog.
4317 (time_screen_renderer): Raise a dialog to present the result instead
4318 of printing it to stdout.
4319
4320 2003-10-31 Bernhard Herzog <[email protected]>
4321
4322 * test/test_classification.py (TestClassGroupProperties)
4323 (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
4324 (TestClassGroupSingleton, TestClassIterator, TestClassification):
4325 Split TestClassification into several classes, one for each class
4326 being tested. TestClassification itself now only tests
4327 Classification. This split makes changes to the tests a bit easier
4328
4329 2003-10-31 Bernhard Herzog <[email protected]>
4330
4331 * Extensions/profiling/profiling.py: New. Extension to measure
4332 Thuban performance
4333
4334 2003-10-31 Frank Koormann <[email protected]>
4335
4336 Added two items to legend popup menu: Remove Layer and Show Layer Table
4337
4338 * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
4339 LegendPanel._OnShowTable): New event handlers, call the corresponding
4340 mainwindow methods.
4341 (LegendTree._OnRightClick): Added items to popup menu.
4342
4343 2003-10-30 Bernhard Herzog <[email protected]>
4344
4345 * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
4346 EVT_WINDOW_DESTROY
4347 (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
4348 nothing but is convenient for the derived classes.
4349
4350 * Thuban/UI/tableview.py
4351 (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
4352 Unsubscribe the messages here not in OnClose because that might
4353 get called multiple times. Fixes RT #2196
4354 (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
4355 anymore.
4356
4357 * README: Update the minimum requirement for wxPython. Since we
4358 now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
4359 the version in which that was introduced for all platforms
4360
4361 2003-10-30 Frank Koormann <[email protected]>
4362
4363 * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
4364 the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
4365 frame.
4366
4367 2003-10-30 Jan-Oliver Wagner <[email protected]>
4368
4369 Improved APR import extension, added further EPSG definitions
4370 and some cleanup regarding string class.
4371
4372 * test/test_proj.py (TestProjection.test_get_projection_units_geo):
4373 Added test for alias 'longlat'.
4374
4375 * Resources/Projections/epsg-deprecated.proj: New. Contains
4376 deprecated EPSG definitions.
4377
4378 * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
4379 the variable names for objects.
4380
4381 * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
4382 Copied from importAPR and provided with documentation.
4383
4384 * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
4385 Moved to apr.py.
4386 (APR_View): Added object ref 'ITheme'.
4387
4388 * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
4389 split function by corresponding use of the string class method.
4390
4391 * Thuban/Model/xmlwriter.py: Replaced string replace function by
4392 corresponding string method.
4393
4394 2003-10-29 Bernhard Herzog <[email protected]>
4395
4396 * Thuban/UI/baserenderer.py
4397 (BaseRenderer.draw_shape_layer_incrementally): Speed up the
4398 special case of a classification that only has the default group
4399
4400 2003-10-27 Bernhard Herzog <[email protected]>
4401
4402 * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
4403
4404 * po/de.po: Update.
4405
4406 * Thuban/UI/application.py
4407 (ThubanApplication.ShowExceptionDialog): Handle translation of the
4408 dialog message properly
4409
4410 2003-10-27 Bernhard Herzog <[email protected]>
4411
4412 Rework how localization works so that we use wx's translation
4413 functions when running Thuban as a normal application but not when
4414 we don't need any UI, such as in the test suite. See the comment
4415 in Thuban/__init__.py for details
4416
4417 * Thuban/__init__.py (_): Add one level of indirection to make the
4418 translation handling more flexible and to make it possible to use
4419 either wx's translation services or not.
4420 (gettext_identity, translation_function_installed)
4421 (install_translation_function): New function to help with this
4422
4423 * Thuban/UI/__init__.py: Install the wx specific translation
4424 function if it's OK to do that
4425
4426 * test/support.py (initthuban): Install a dummy translation
4427 function so that importing Thuban.UI doesn't install a wx specific
4428 one for which would need to import wxPython
4429
4430 2003-10-27 Bernhard Herzog <[email protected]>
4431
4432 * HOWTO-Release: Source archives should be created first and the
4433 binary packages should be created from the source archives.
4434 There's an official debian package now so there's no need to test
4435 the rpm on debian anymore
4436
4437 2003-10-27 Bernhard Herzog <[email protected]>
4438
4439 Several rendering changes:
4440
4441 - Render the selection into a separate bitmap so that only that
4442 bitmap needs to be redrawn when the selection changes
4443
4444 - Render incrementally showing previews and allowing interaction
4445 before rendering is complete
4446
4447 - Update the renderer interface a bit. Most parameters of
4448 RenderMap are now parameters of the constructor
4449
4450 * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
4451 and the update region as parameters. Update the doc-string
4452 (BaseRenderer.render_map_incrementally): New. Generator function
4453 to renders the map incrementally
4454 (BaseRenderer.render_map): Remove the map argument (it's now in
4455 the constructor) and simply iterate over the
4456 render_map_incrementally generator to draw the map.
4457 (BaseRenderer.draw_shape_layer_incrementally)
4458 (BaseRenderer.draw_shape_layer): Renamed to
4459 draw_shape_layer_incrementally and changed into a generator that
4460 yields True every 500 shapes. Used by render_map_incrementally to
4461 render shape layers incrementally
4462
4463 * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
4464 map and region parameters which are now in the constructor
4465 (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
4466 the inherited render_map_incrementally.
4467 (BaseRenderer.draw_shape_layer): Removed.
4468 (ScreenRenderer.draw_selection_incrementally): New. The selection
4469 drawing part of the removed draw_shape_layer as a generator
4470 (ScreenRenderer.layer_shapes): Update because of the region
4471 parameter change
4472 (ExportRenderer.__init__): New. Extend the inherited constructor
4473 with the destination region for the drawing
4474 (ExportRenderer.RenderMap): Removed the map and region parameters
4475 which are now in the constructor
4476
4477 * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
4478 bitmap suitable for a preview in a tool
4479 (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
4480 bitmap
4481 (MapPrintout.draw_on_dc): Adapt to new renderer interface
4482 (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
4483 exists
4484 (MapCanvas.OnIdle): Update the logic to deal with incremental
4485 rendering and the selection bitmap
4486 (MapCanvas._do_redraw): Handle the instantiation of the render
4487 iterator and the redraws during rendering
4488 (MapCanvas._render_iterator): New. Generator to incrementally
4489 redraw both bitmaps
4490 (MapCanvas.Export): Adapt to new renderer interface.
4491 (MapCanvas.full_redraw): Reset the selection bitmap and the
4492 renderer iterator too
4493 (MapCanvas.redraw_selection): New. Force a redraw of the selection
4494 bitmap
4495 (MapCanvas.shape_selected): Only redraw the selection bitmap
4496
4497 * test/test_baserenderer.py
4498 (TestBaseRenderer.test_polygon_no_projection)
4499 (TestBaseRenderer.test_raster_no_projection)
4500 (TestBaseRenderer.test_point_map_projection)
4501 (TestBaseRenderer.test_point_layer_and_map_projection)
4502 (TestBaseRenderer.test_point_layer_projection)
4503 (TestBaseRenderer.test_point_with_classification): Adapt to new
4504 renderer interface
4505
4506 2003-10-24 Bernhard Herzog <[email protected]>
4507
4508 * libraries/thuban/wxproj.cpp (draw_polygon_shape)
4509 (point_in_polygon_shape, shape_centroid): Raise an exception if
4510 the shape can't be read. Previously invalid shape ids would lead
4511 to a segfault.
4512
4513 * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
4514 New. test whether an exception is raised for invalid shape ids
4515
4516 2003-10-24 Jan-Oliver Wagner <[email protected]>
4517
4518 * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
4519 as alias for 'latlong'.
4520
4521 * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
4522 as alias for 'latlong'.
4523
4524 2003-10-24 Jan-Oliver Wagner <[email protected]>
4525
4526 * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
4527 the projection even for the UnknownPanel.
4528 (UnknownProjPanel.__init__): Define the text and create the textctrl
4529 widget.
4530 (UnknownProjPanel._DoLayout): Replaced static text widget by the
4531 textctrl created in __init__.
4532 (UnknownProjPanel.SetProjection): Set the text for the text ctrl
4533 including the parameters of the projection.
4534
4535 2003-10-24 Jan-Oliver Wagner <[email protected]>
4536
4537 * Resources/Projections/epsg.proj: New. This is a list of
4538 EPSG codes with parameters for proj. The list has been
4539 generated using devtools/create_epsg.py based on the
4540 file nad/epsg of the proj 4.4.7 package. Four projection
4541 definitions have been deleted as they are not accepted by proj:
4542 "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
4543 and "HD72 / EOV".
4544
4545 2003-10-22 Bernhard Herzog <[email protected]>
4546
4547 Some more tweaks to the projection dialog which should fix RT
4548 #1886.
4549
4550 * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
4551 the ProjFile's messages and call the base class methods correctly
4552 (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
4553 flag on the newly selected item too. Otherwise some other item is
4554 focused and the first time the focus is moved with the keyboard
4555 the selection moves in unexpected ways.
4556
4557 * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
4558 focus on the OK button, only on the projection list. That way the
4559 list really has the focus initially
4560 (ProjFrame.OnClose): Call the projection list's Destroy method to
4561 make it unsubscribe all messages
4562
4563 2003-10-21 Bernhard Herzog <[email protected]>
4564
4565 Rework the projection dialog to fix a few bugs, including RT 2166
4566 and most of 2168
4567
4568 * Thuban/UI/projlist.py: New. The class ProjectionList is a
4569 special wxListCtrl to show a list of projections in a more MVC
4570 fashion
4571
4572 * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
4573 throughout the class. The main change is to use the ProjectionList
4574 class instead of a normal wxListBox. Also, add an explicit
4575 "Unknown" projection to the projection choice control.
4576 (ProjPanel.__init__): Add an "unknown" ellipsoid
4577 (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
4578 instantiation of the panel's controls to make the tab-order more
4579 natural
4580
4581 2003-10-21 Bernhard Herzog <[email protected]>
4582
4583 * test/test_load.py (TestSingleLayer.file_contents)
4584 (TestSingleLayer.test): Add non-ascii characters to the titles of
4585 session, map and layer. This is effectively a port of the
4586 TestUnicodeStrings test in test_load_0_8.py which for some reason
4587 was only added there.
4588
4589 * test/test_load_0_9.py (TestSingleLayer.file_contents)
4590 (TestSingleLayer.test): Same as in test_load.py: add non-ascii
4591 characters to the titles of session, map and layer,.
4592
4593 2003-10-21 Bernhard Herzog <[email protected]>
4594
4595 Add EPSG projection handling to .thuban files
4596
4597 * test/test_save.py (SaveSessionTest.dtd)
4598 (SaveSessionTest.testEmptySession)
4599 (SaveSessionTest.testLayerProjection)
4600 (SaveSessionTest.testRasterLayer)
4601 (SaveSessionTest.testClassifiedLayer)
4602 (SaveSessionTest.test_dbf_table)
4603 (SaveSessionTest.test_joined_table)
4604 (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
4605 (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
4606 use a and epsg projection to test saving them
4607
4608 * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
4609 namespace
4610 (TestLayerVisibility.file_contents, TestLabels.file_contents)
4611 (TestLayerProjection.file_contents)
4612 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
4613 (TestPostGISLayer.file_contents)
4614 (TestPostGISLayerPassword.file_contents)
4615 (TestLoadError.file_contents, TestLoadError.test): Update to use
4616 1.0-dev namespace
4617 (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
4618 use 1.0-dev namespace and use an EPSG projection to test whether
4619 loading it works
4620
4621 * test/test_load_0_9.py: New. Effectively a copy of test_load.py
4622 as of Thuban 0.9. These are now tests to determine whether Thuban
4623 can still read files generated by Thuban 0.9
4624
4625 * Thuban/Model/save.py (SessionSaver.write)
4626 (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
4627 namespace
4628 (SessionSaver.write_projection): Write the projection's epsg
4629 attribute
4630
4631 * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
4632 thuban-1.0-dev.dtd namespace
4633 (SessionLoader.check_attrs): Allow a callable object as conversion
4634 too
4635 (SessionLoader.start_projection, SessionLoader.end_projection)
4636 (SessionLoader.start_parameter): Handle the epsg attribute and
4637 rename a few instance variables to lower case
4638
4639 * Resources/XML/thuban-1.0.dtd: New. Only difference to
4640 thuban-0.9.dtd is the epsg attribute for projections.
4641
4642 2003-10-21 Bernhard Herzog <[email protected]>
4643
4644 * test/runtests.py (main): Let the user specify which tests to run
4645 on the command line
4646
4647 * test/support.py (ThubanTestResult.getDescription): Override to
4648 give a better short description. The description can be used as a
4649 parameter to run_tests to run that particular test in isolation.
4650
4651 2003-10-21 Frank Koormann <[email protected]>
4652
4653 Popup menu for legend. Scheduled for the 1.2 release this was too
4654 simple to implement: The popup menu is bound to the legend tree, while
4655 the events are hanlded by its anchestor, the legend panel. This
4656 allows reuse of all the event handlers already implemented for the
4657 legend toolbar buttons.
4658
4659 * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
4660 to add handlers for the events issued by the popup menu.
4661 (LegendPanel._OnToggleVisibility): Handler for toggling layer
4662 visibility event
4663 (LegendPanel._OnProjection): Handler for layer projection event.
4664 (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
4665 (LegendTree._OnRightClick): Event handler for right click, select item
4666 and pop up menu.
4667 (LegendTree.ToggleVisibility): Toggle layer visibility
4668 (LegendTree.LayerProjection): Raise layer projection dialog for
4669 current layer.
4670
4671 2003-10-21 Bernhard Herzog <[email protected]>
4672
4673 * Resources/Projections/defaults.proj: Use correct DOCTYPE
4674 declaration. The top-level element is projectionlist not projfile
4675
4676 2003-10-20 Bernhard Herzog <[email protected]>
4677
4678 * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
4679 method to write a projfile and display a busy cursor and error
4680 dialogs.
4681 (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
4682 (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
4683 (ProjFrame.__FillAvailList): Translate "<None>" too and display a
4684 busy cursor while loading the user and system prj files.
4685
4686 2003-10-16 Bernhard Herzog <[email protected]>
4687
4688 * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
4689 ProjFile objects
4690 (clear_proj_file_cache): New function to clear the cache. Mainly
4691 useful for use by the test suite
4692 (read_proj_file): Use the cache.
4693
4694 * test/test_proj.py (TestProjFile): Clarify the doc-string
4695 (ProjFileReadTests): Update doc-string
4696 (ProjFileReadTests.test_get_system_proj_file): Check whether the
4697 system proj files is cached.
4698 (ProjFileLoadTestCase): New base class for the proj file tests
4699 derived from support.FileLoadTestCase to provide some common
4700 behavior.
4701 (TestLoadingProjFile)
4702 (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
4703 (TestProjFileWithInvalidParameters.file_contents): Derive from
4704 ProjFileLoadTestCase
4705 (TestLoadingProjFile.test_caching): New. Test whether the cache
4706 works
4707
4708 2003-10-16 Silke Reimer <[email protected]>
4709
4710 * debian/*: New directory with configuration files for building a thuban
4711 deb-package.
4712
4713 2003-10-14 Bernhard Herzog <[email protected]>
4714
4715 * test/test_proj.py: Execute support.run_tests when run as
4716 __main__ so that missing unsubscribes are detected
4717 (TestProjFile.tearDown): Destroy the proj_file properly
4718
4719 2003-10-14 Bernhard Herzog <[email protected]>
4720
4721 * Thuban/Model/messages.py (PROJECTION_ADDED)
4722 (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
4723 the ProjFile objects
4724
4725 * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
4726 easily send messages when the projections change
4727 (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
4728 when the change was successful
4729
4730 * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
4731 proj file messages
4732 (TestProjFile.test_add_remove)
4733 (TestProjFile.test_remove_non_existing)
4734 (TestProjFile.test_replace)
4735 (TestProjFile.test_replace_non_existing): Test whether the right
4736 messages are sent
4737
4738 2003-10-14 Bernhard Herzog <[email protected]>
4739
4740 * test/test_proj.py (TestProjFile.test): Refactor into several
4741 tests
4742 (TestProjFile.test_add_remove)
4743 (TestProjFile.test_remove_non_existing)
4744 (TestProjFile.test_replace)
4745 (TestProjFile.test_replace_non_existing): Some of the new
4746 individual test cases
4747 (TestProjFileSimple): New class for the rest of the test cases
4748 that came out of the refactoring
4749 (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
4750 derived classes don't have to
4751
4752 2003-10-13 Bernhard Herzog <[email protected]>
4753
4754 Add an optional EPSG code to the projection objects and extend the
4755 .proj file format accordingly.
4756
4757 * Resources/XML/projfile.dtd (element projection): Add epsg
4758 attribute
4759
4760 * Thuban/Model/proj.py (Projection.__init__): New parameter and
4761 instance variable epsg. Update doc-string
4762 (Projection.EPSGCode, Projection.Label): New methods to provide
4763 access to EPSG code and a label for use in dialogs
4764
4765 * Thuban/Model/resource.py (ProjFileReader.start_projection)
4766 (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
4767 Handle the epsg code attribute when reading or writing proj files
4768
4769 * Thuban/UI/projdialog.py (ProjFrame._OnSave)
4770 (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
4771 (ProjFrame.__FillAvailList): Use the projection's Label method to
4772 get the string for the list box
4773
4774 * test/test_proj.py (TestProjection.test_label)
4775 (TestProjection.test_label_epsg)
4776 (TestProjection.test_epsgcode_for_non_epsg_projection)
4777 (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
4778 for the label and EPSGCode methods
4779 (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
4780 (WriteProjFileTests.test_write_empty_file): Create the ProjFile
4781 objects in the test cases and put the expected contents into the
4782 test case methods too. Update doTestWrite accordingly
4783 (TestLoadingProjFile)
4784 (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
4785 read tests from TestProjFile.
4786 (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
4787 tests are now in the new classes.
4788 (sample_projfile, sample_projfile_data)
4789 (sample_projfile2, sample_projfile_data2): Removed. Not used
4790 anymore.
4791 (TestProjFile.test_read_unreadable_file): No need to reset the
4792 permissions at the end anymore since we use a unique filename
4793
4794 2003-10-13 Bernhard Herzog <[email protected]>
4795
4796 * test/test_proj.py: Some more refactoring of the test cases
4797 (ProjFileTest): New base class for the proj file tests.
4798 (TestProjFile): Derive from ProjFileTest
4799 (TestProjFile.test_read_unreadable_file)
4800 (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
4801 the new filename method to get a unique filename
4802 (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
4803 (WriteProjFileTests): New class for proj file write tests.
4804 Contains the write test that were in TestProjFile originally.
4805
4806 2003-10-13 Bernhard Herzog <[email protected]>
4807
4808 * test/test_proj.py (TestProjFile.testRead)
4809 (TestProjFile.test_read_non_existing_file)
4810 (TestProjFile.test_read_unreadable_file)
4811 (TestProjFile.test_read_empty_file): Split into several methods.
4812
4813 2003-10-10 Bernhard Herzog <[email protected]>
4814
4815 * Thuban/UI/sizers.py: New file with custom sizers.
4816
4817 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
4818 all projection type specific panels and put them into a
4819 NotebookLikeSizer. This way the dialog doesn't change its size
4820 when a different projection is selected
4821 (ProjFrame.__init__): Rename projection_panels
4822 projection_panel_defs and reuse projection_panels for a list of
4823 the instantiated panels.
4824 (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
4825 (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
4826 the panels
4827 (UnknownProjPanel._DoLayout): Place the newlines in the message
4828 differently to make the panel narrower.
4829 (TMPanel._DoLayout): Layout the parameters in one column.
4830
4831 2003-10-10 Bernhard Herzog <[email protected]>
4832
4833 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
4834 that contains all the setup for the dialog's widgets, layout and
4835 event handling.
4836 (__): Call build_dialog to build the dialog.
4837 (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
4838 Their functionality is now in build_dialog
4839 (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
4840 (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
4841 (ProjFrame.__DoOnProjChoice): Small updates due to slightly
4842 different widget names and hierarchy introduced with build_dialog.
4843
4844 2003-10-10 Bernhard Herzog <[email protected]>
4845
4846 * README: Fix typo.
4847
4848 2003-10-09 Bernhard Herzog <[email protected]>
4849
4850 * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
4851 projection is already in the list. This is *a lot* faster when
4852 loading files with hundreds of projections since it saves a linear
4853 search. OTOH this will allow adding the same projection to the
4854 user.proj file multiple times in the projection dialog but we'll
4855 deal with that later
4856
4857 2003-10-09 Jan-Oliver Wagner <[email protected]>
4858
4859 * devtools: New. Directory for developer tools that are not intended
4860 for the regular user.
4861
4862 * devtools/create_epsg.py: New. Convert the epsg file of proj into
4863 a python .proj file.
4864
4865 2003-10-09 Bernhard Herzog <[email protected]>
4866
4867 * test/test_proj.py
4868 (TestProjection.test_get_parameter_without_equals_sign): New. Test
4869 whether GetParameter handles parameters without "=" sign correctly
4870
4871 * Thuban/Model/proj.py (Projection.GetParameter): Handle
4872 parameters that do not contain a "=". Update the doc-string
4873
4874 2003-10-08 Bernhard Herzog <[email protected]>
4875
4876 * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
4877 length limit on the projname text control
4878
4879 2003-10-08 Bernhard Herzog <[email protected]>
4880
4881 * test/test_proj.py (TestProjection.test_get_projection_units_geo)
4882 (TestProjection.test_get_projection_units_normal): New. Tests for
4883 the Projection.GetProjectedUnits method
4884
4885 2003-10-08 Jan-Oliver Wagner <[email protected]>
4886
4887 * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
4888 Added missing 'val' parameter.
4889
4890 2003-10-08 Bernhard Herzog <[email protected]>
4891
4892 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
4893 projection type of the currently selected projection is not known,
4894 i.e. there's no panel for it, use the UnknownProjPanel
4895 (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
4896 the actual replacing of the proj panel into the new method
4897 _show_proj_panel.
4898 (UnknownProjPanel): Add doc-string.
4899 (UnknownProjPanel._DoLayout): Insert a newline into the text so
4900 that the panel is not so wide.
4901
4902 2003-10-08 Bernhard Herzog <[email protected]>
4903
4904 * Thuban/Model/resource.py (read_proj_file): Return the warnings
4905 too. Update the doc-string
4906 (get_proj_files): Removed. It wasn't used anywhere
4907 (get_system_proj_files, get_system_proj_file): Rename to
4908 get_system_proj_file and return the ProjFile object and not a list
4909 of ProjFile objects. Update the callers.
4910 (get_user_proj_files, get_user_proj_file): Rename to
4911 get_user_proj_file return the ProjFile object and not a list of
4912 ProjFile objects. Update the callers.
4913 (ProjFileReader.__init__): New instance variable for the warnings.
4914 Rename the __pf ivar to projfile. Update the methods referring to
4915 __pf
4916 (ProjFileReader.end_projection): Catch any errors raised when
4917 instantiating the projection and record that as an error. The
4918 projection will not be in the final ProjFile object.
4919 (ProjFileReader.GetWarnings): New method to return the warnings.
4920
4921 * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
4922 show the warnings from the projfile reader
4923 (ProjFrame._OnImport): Deal with any warnings returned by
4924 read_proj_file
4925 (ProjFrame.__FillAvailList): Deal with any warnings returned by
4926 get_system_proj_file or get_user_proj_file.
4927
4928 * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
4929 (TestProjFileWithInvalidParameters.file_contents): New test cases
4930 to test whether read_proj_file handles invalid projection
4931 parameters correctly
4932 (TestProjFile.test_get_system_proj_file): New. Simple test for
4933 resource.get_system_proj_file
4934
4935 2003-10-07 Bernhard Herzog <[email protected]>
4936
4937 * test/test_derivedshapestore.py
4938 (TestDerivedShapeStoreExceptions.tearDown): Clear the session
4939 properly so that the temporary directories get deleted correctly
4940
4941 2003-10-06 Bernhard Herzog <[email protected]>
4942
4943 Handle the title changes in a proper MVC way.
4944
4945 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
4946 canvas' TITLE_CHANGED messages
4947 (MainWindow.update_title): New. Update the main window's title
4948 (MainWindow.__SetTitle): Removed. Use update_title instead.
4949 (MainWindow.SetMap): Use update_title instead of __SetTitle
4950 (MainWindow.RenameMap): Do change the window title explicitly
4951 here. That's handled in a proper MVC way now.
4952 (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
4953 messages
4954
4955 * Thuban/Lib/connector.py (Conduit): New class to help classes
4956 that forward messages
4957
4958 * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
4959 (ViewPort): Derive from Conduit instead of Publisher
4960 (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
4961 when calling the inherited versions
4962 (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
4963 methods to subscribe and unsubscribe map messages
4964 (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
4965 handle the map subscriptions
4966 (ViewPort.Map, ViewPort.map_projection_changed)
4967 (ViewPort.layer_projection_changed): Add or update doc-strings
4968
4969 * test/test_connector.py (TestPublisher.test_issue_simple): Fix
4970 typo
4971 (MyConduit): Helper class for the Conduit test.
4972 (TestConduit): Test cases for Conduit
4973
4974 * test/test_connector.py: Use support.run_tests as main.
4975
4976 * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
4977 the TITLE_CHANGED messages
4978 (ViewPortTest.test_forwarding_title_changed): New test to check
4979 whether the viewport forwards the map's TITLE_CHANGED messages
4980 (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
4981 after the port's because the latter may require a still functional
4982 map.
4983
4984 2003-10-06 Bernhard Herzog <[email protected]>
4985
4986 * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
4987 doc-string
4988
4989 2003-10-06 Bernhard Herzog <[email protected]>
4990
4991 * test/test_viewport.py (ViewPortTest.setUp)
4992 (SimpleViewPortTest.test_init_with_size): Move the test for the
4993 initial size as a constructor parameter from ViewPortTest.setUp
4994 method to a new separate test in SimpleViewPortTest.
4995
4996 2003-10-06 Bernhard Herzog <[email protected]>
4997
4998 * test/test_viewport.py (MockView): New class derived from
4999 ViewPort with a mock implementation of GetTextExtent to be used in
5000 the test cases
5001 (ViewPortTest.setUp): Use MockView instead of ViewPort
5002
5003 * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
5004 into what would be a "pure virtual function" in C++: always raise
5005 NotImplementedError. Mock implementations for test cases don't
5006 belong into the real code
5007
5008 2003-10-02 Bernhard Herzog <[email protected]>
5009
5010 * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
5011 close the dbf file we create so that it's contents have been
5012 written properly.
5013
5014 * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
5015 libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
5016 Update to shapelib 1.2.10
5017
5018 2003-10-01 Jan-Oliver Wagner <[email protected]>
5019
5020 * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
5021 it annoys lintian which warns about these files not being
5022 executable. The #! isn't necessary here since if you absolutely
5023 must execute them you can always say "python <filename>".
5024
5025 2003-09-26 Bernhard Herzog <[email protected]>
5026
5027 * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
5028 only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
5029 is ported to a newer the import will fail, so it should be noticed
5030 immediately that this function is gone.
5031 Fixes RT#1919
5032
5033 2003-09-26 Bernhard Herzog <[email protected]>
5034
5035 Add a DTD for the projection files and make thuban write valid
5036 projection files
5037
5038 * Resources/XML/projfile.dtd: New. DTD for thuban's projection
5039 files
5040
5041 * Thuban/Model/resource.py (ProjFileSaver.write): Use
5042 'projectionlist' as the name in the document type declaration so
5043 that it matches the element type of the root element.
5044
5045 * test/test_proj.py (sample_projfile, sample_projfile2): Use
5046 'projectionlist' as the name in the document type declaration just
5047 as it is done now in the files thuban would write
5048 (sample_projfile, sample_projfile_data): Fix spelling of
5049 "Mercator"
5050 (TestProjFile.doTestWrite): Validate the written and the expected
5051 XML data
5052 (TestProjFile): Derive from ValidationTest so that we can run xml
5053 validation tests
5054
5055 2003-09-24 Bernhard Herzog <[email protected]>
5056
5057 * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
5058 modify the list returned by map.Layers() in place since it is the
5059 actual list of layers used by the map.
5060
5061 2003-09-23 Jan-Oliver Wagner <[email protected]>
5062
5063 * Doc/manual/thuban-manual.xml: Added subsection to chapter
5064 Extensions to describe the extensions coming with the Thuban
5065 standard package (gns2shp and importAPR).
5066
5067 2003-09-23 Bernhard Herzog <[email protected]>
5068
5069 * libraries/thuban/wxproj.cpp (project_point): if there's an
5070 inverse but no forward projection, convert to degrees after
5071 applying the inverse projection. Fixes RT#2096
5072
5073 * test/test_wxproj.py: New. Test cases for wxproj.so. One test
5074 implicitly tests for the fix to RT#2096
5075
5076 * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
5077 Check that the sequences have the same lengths
5078
5079 * Resources/Projections/defaults.proj (Geographic projection): Use
5080 a much more precise value for the to_meter attribute.
5081
5082 2003-09-22 Bernhard Herzog <[email protected]>
5083
5084 * test/support.py (initthuban): Make sure to unset the LANG env.
5085 var. so that tests that compare translated strings work. Solves RT
5086 #2094
5087
5088 2003-09-22 Jan-Oliver Wagner <[email protected]>
5089
5090 Small improvement of APR import.
5091
5092 * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
5093 Added tests for text-ranges.
5094
5095 * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
5096 returns a string object if the range is based on text.
5097
5098 * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
5099 range retrieval.
5100
5101 2003-09-22 Jan-Oliver Wagner <[email protected]>
5102
5103 Initial version of the importAPR extension which is in
5104 experimental state.
5105
5106 * /Extensions/importAPR/, /Extensions/importAPR/samples/,
5107 /Extensions/importAPR/test/: New directories.
5108
5109 * /Extensions/importAPR/samples/README: New: Howto load the samples.
5110
5111 * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
5112 file which refers to the Thuban Iceland demo data.
5113
5114 * /Extensions/importAPR/test/README: New: Howto execute the tests.
5115
5116 * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
5117
5118 * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
5119 as in '.apr'-files.
5120
5121 * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
5122 ODB Objects as in '.apr', '.avl' and other files.
5123
5124 * /Extensions/importAPR/__init__.py: New: Init to make this
5125 directory a package.
5126
5127 * /Extensions/importAPR/importAPR.py: New: Import a ArcView
5128 project file (.apr) and convert it to Thuban.
5129
5130 2003-09-22 Jan-Oliver Wagner <[email protected]>
5131
5132 * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
5133
5134 2003-09-19 Jan-Oliver Wagner <[email protected]>
5135
5136 * Doc/manual/thuban-manual.xml: Extended section 'Installation'
5137 with description on RPM installation and RPM binary package
5138 creation.
5139
5140 2003-09-18 Bernhard Herzog <[email protected]>
5141
5142 * setup.py (data_files): Only add the mo files if the Locales
5143 directory actually exists, so that setup.py works with a fresh CVS
5144 checkout
5145
5146 2003-09-12 Jan-Oliver Wagner <[email protected]>
5147
5148 * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
5149 in viewport, not anymore in view
5150
5151 2003-09-04 Jan-Oliver Wagner <[email protected]>
5152
5153 Introducing first Extension (gns2shp).
5154
5155 * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
5156
5157 * Extensions/__init__.py: New. init to make this dir a package.
5158
5159 * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
5160
5161 * Extensions/gns2shp/test/README: New. some info on this test directory.
5162
5163 * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
5164
5165 * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
5166 of Shapefile from GNS text file format
5167
5168 2003-09-03 Jan-Oliver Wagner <[email protected]>
5169
5170 Fix/workaround for bug #2019:
5171 https://intevation.de/rt/webrt?serial_num=2019
5172
5173 * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
5174 (IdentifyView.__init__): Added another button that allows to
5175 stop the identify mode.
5176 (IdentifyView.OnStop): New. Stops the identify mode.
5177
5178 2003-09-03 Jan-Oliver Wagner <[email protected]>
5179
5180 Introducing a new exception dialog that allows to exit the
5181 application immediately.
5182 This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
5183
5184 * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
5185
5186 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
5187 Made strings available to translations. Exchanged the simple
5188 ScrolledMessageDialog by the new ExceptionDialog.
5189
5190 2003-09-01 Bernhard Herzog <[email protected]>
5191
5192 * NEWS: New. Summary of changes and release notes.
5193
5194 * MANIFEST.in: Add NEWS
5195
5196 2003-09-01 Bernhard Herzog <[email protected]>
5197
5198 * MANIFEST.in: Correct the include statement for the mo-files and
5199 include the documentation too.
5200
5201 * setup.py (data_files): Add the .mo files
5202 (setup call): Up to version 0.9.0
5203
5204 2003-09-01 Bernhard Herzog <[email protected]>
5205
5206 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
5207 parameter list to just parent and session
5208 (ChooseDBTableDialog.__set_properties): Removed. Setting the
5209 selection of empty list boxes is not allowed (and produces C++
5210 assertion errors) and the rest of the setup is better done in
5211 __init__ anyway.
5212 (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
5213 (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
5214 builtins True/False for booleans to avoid warnings from wxPython
5215
5216 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
5217 ChooseDBTableDialog constructor parameters.
5218
5219 2003-09-01 Bernhard Herzog <[email protected]>
5220
5221 * Thuban/Model/postgisdb.py
5222 (PostGISTable): Extend doc-string
5223 (PostGISTable._fetch_table_information): Set the column index
5224 correctly, pretending ignored columns don't exist.
5225
5226 * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
5227 for postgis tables with data types not yet supported by thuban.
5228
5229 2003-08-29 Bernhard Herzog <[email protected]>
5230
5231 * HOWTO-Release: Tweak item about running the tests.
5232
5233 2003-08-29 Jan-Oliver Wagner <[email protected]>
5234
5235 * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
5236
5237 2003-08-29 Bernhard Herzog <[email protected]>
5238
5239 Add some missing parameters to projections. Proj complains about
5240 them on windows but for some reason not on Linux.
5241
5242 * test/test_save.py (SaveSessionTest.testLayerProjection): Add
5243 missing required projection parameters
5244
5245 * test/test_proj.py (TestProjFile.test): Add missing required
5246 projection parameters
5247
5248 * test/test_load_0_8.py (TestLayerProjection.file_contents)
5249 (TestLayerProjection.test): Add missing required projection
5250 parameters and tests for them
5251
5252 * test/test_load.py (TestLayerProjection.file_contents)
5253 (TestLayerProjection.test): Add missing required projection
5254 parameters and tests for them
5255
5256 * test/test_layer.py (TestLayer.test_base_layer): Add missing
5257 required projection parameters
5258
5259 2003-08-29 Bernhard Herzog <[email protected]>
5260
5261 * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
5262 access the pj_errno because directly accessing pj_errno doesn't
5263 work on windows if the proj library is in a DLL
5264
5265 * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
5266
5267 2003-08-28 Bernhard Herzog <[email protected]>
5268
5269 * test/test_proj.py: Import things from Thuban after calling
5270 initthuban
5271
5272 * test/test_load.py (LoadSessionTest.filenames): New class
5273 variable with the filename attributes to normalize
5274 (LoadSessionTest.check_format): Pass self.filenames to
5275 sax_eventlist to normalize the filename attributes
5276
5277 * test/xmlsupport.py: Add cvs keywords
5278 (SaxEventLister.__init__): New parameter filenames which indicates
5279 attributes that contain filenames
5280 (SaxEventLister.startElementNS): Normalize the filename attributes
5281 with os.path.normpath
5282 (sax_eventlist): New parameter filenames to pass through to
5283 SaxEventLister
5284
5285 * test/test_derivedshapestore.py: Make this file callable as a
5286 program to execute the tests
5287 (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
5288 the session to self.session so that it gets destroyed properly
5289
5290 * test/test_layer.py (TestLayer.tearDown): Call the session's
5291 Destroy method
5292
5293 * test/test_map.py (TestMapBase.tearDown): Destroy self.session
5294 too if it exists
5295 (TestMapAddLayer.test_add_layer): Bind the session to self.session
5296 so that it gets destroyed properly
5297
5298 * test/postgissupport.py (reason_for_not_running_tests): Add a
5299 test for the existence of popen2.Popen4.
5300
5301 * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
5302 reliable way to destroy the sessions created in the test cases
5303 (SaveSessionTest.test_dbf_table): Bind the session to self.session
5304 so that it gets destroyed properly
5305 (SaveSessionTest.testLayerProjection): Bind the session to
5306 self.session so that it gets destroyed properly
5307
5308 * test/test_session.py (UnreferencedTablesTests.tearDown): Make
5309 sure that the session is destroyed properly
5310
5311 * test/test_shapefilestore.py: Make this callable as a program to
5312 execute the tests
5313
5314 * test/test_scalebar.py: Remove unnecessary import of _ from
5315 Thuban
5316
5317 * test/support.py (print_garbage_information): Call initthuban
5318 here because it may be called indirectly from test cases that test
5319 test support modules which do not use anything from thuban itself
5320 (ThubanTestProgram.runTests): Remove unnecessary debug print
5321
5322 2003-08-28 Bernhard Herzog <[email protected]>
5323
5324 * Thuban/version.py (longversion): Update to 0.9
5325
5326 * Thuban/UI/mainwindow.py: Remove some unused imports
5327
5328 * README: Add section about required additional software. Add date
5329 and revision CVS keywords
5330
5331 * HOWTO-Release: Add item about the translations. Add date and
5332 revision CVs keywords and change formatting to match README a bit
5333 better
5334
5335 * po/de.po: Update for 0.9
5336
5337 * test/README: Tweak the wording a little because many tests are
5338 not really unittest.
5339
5340 2003-08-27 Bernhard Herzog <[email protected]>
5341
5342 As preparation for the 0.9 release, switch thuban files to a
5343 non-dev namespace
5344
5345 * Thuban/Model/save.py (SessionSaver.write_session): Write files
5346 with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
5347 namespace
5348
5349 * Thuban/Model/load.py (SessionLoader.__init__): Accept the
5350 http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
5351
5352 * test/test_save.py (SaveSessionTest.dtd)
5353 (SaveSessionTest.testEmptySession)
5354 (SaveSessionTest.testSingleLayer)
5355 (SaveSessionTest.testLayerProjection)
5356 (SaveSessionTest.testRasterLayer)
5357 (SaveSessionTest.testClassifiedLayer)
5358 (SaveSessionTest.test_dbf_table)
5359 (SaveSessionTest.test_joined_table)
5360 (SaveSessionTest.test_save_postgis): Update for new namespace
5361
5362 * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
5363 (TestLayerVisibility.file_contents, TestLabels.file_contents)
5364 (TestLayerProjection.file_contents)
5365 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
5366 (TestPostGISLayer.file_contents)
5367 (TestPostGISLayerPassword.file_contents)
5368 (TestLoadError.file_contents, TestLoadError.test): Update for new
5369 namespace
5370
5371 2003-08-27 Bernhard Herzog <[email protected]>
5372
5373 Make the table interface distinguish between row ids (an integer
5374 that uniquely identifies a row) and row ordinals (a simple row
5375 count from 0 to NumRows() - 1)
5376
5377 * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
5378 (PostGISTable.RowOrdinalToId): New methods to conver between row
5379 ids and row ordinals
5380 (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
5381 parameter row_is_ordinal to indicate whether the row parameter is
5382 the row id or the ordinal
5383
5384 * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
5385 (TransientTableBase.RowOrdinalToId)
5386 (AutoTransientTable.RowIdToOrdinal)
5387 (AutoTransientTable.RowOrdinalToId): Same new methods as in
5388 PostGISTable.
5389 (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
5390 (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
5391 Same new parameter as in PostGISTable.
5392
5393 * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
5394 (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
5395 (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
5396 (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
5397 (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
5398 parameter as in PostGISTable.
5399
5400 * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
5401 (DataTable.RowOrdinalToId): New methods to convert between row ids
5402 and row ordinals.
5403 (TableGrid.SelectRowById): New method to select a row based on its
5404 ID as opposed to its ordinal
5405 (DataTable.GetValue, TableGrid.OnRangeSelect)
5406 (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
5407 (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
5408 (LayerTableFrame.__init__): Convert between row ids and row
5409 ordinals as appropriate
5410
5411 * test/postgissupport.py (PostGISDatabase.__init__): Add
5412 doc-string.
5413 (PostGISDatabase.initdb): The optional third item in a tuple in
5414 tables is now a (key, value) list with additional arguments to
5415 pass to upload_shapefile
5416 (upload_shapefile): New parameter gid_offset to allow gids that
5417 are not the same as the shapeids in the shapefile
5418 (PostgreSQLServer.get_default_static_data_db): Use the new
5419 gid_offset to make the gids in landmarks 1000 higher than the
5420 shapeids in the shapefile
5421
5422 * test/test_viewport.py
5423 (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
5424 new shapeids in the landmarks table
5425
5426 * test/test_transientdb.py
5427 (TestTransientTable.run_iceland_political_tests)
5428 (TestTransientTable.test_transient_joined_table): Add tests for
5429 the new table methods and new keywords arguments.
5430
5431 * test/test_postgis_db.py
5432 (TestPostGISTable.test_read_row_as_dict_row_count_mode)
5433 (TestPostGISTable.test_read_value_row_count_mode)
5434 (TestPostGISTable.test_row_id_to_ordinal)
5435 (TestPostGISTable.test_row_oridnal_to_id): New test for the new
5436 table methods and the new arguments
5437 (TestPostGISShapestorePoint.test_shapes_in_region)
5438 (TestPostGISShapestorePoint.test_shape_raw_data)
5439 (TestPostGISShapestorePoint.test_shape_points)
5440 (TestPostGISShapestorePoint.test_shape_shapeid)
5441 (TestPostGISShapestorePoint.test_all_shapes)
5442 (TestPostGISTable.test_simple_query)
5443 (TestPostGISTable.test_simple_query)
5444 (TestPostGISTable.test_simple_query)
5445 (TestPostGISTable.test_read_value)
5446 (TestPostGISTable.test_read_row_as_dict): Adapt to the new
5447 shapeids in the landmarks table
5448
5449 * test/test_memory_table.py
5450 (TestMemoryTable.test_read_row_as_dict_row_count_mode)
5451 (TestMemoryTable.test_read_value_row_count_mode)
5452 (TestMemoryTable.test_row_id_to_ordinal)
5453 (TestMemoryTable.test_row_oridnal_to_id): New test for the new
5454 table methods and the new arguments
5455
5456 * test/test_dbf_table.py
5457 (TestDBFTable.test_read_row_as_dict_row_count_mode)
5458 (TestDBFTable.test_read_value_row_count_mode)
5459 (TestDBFTable.test_row_id_to_ordinal)
5460 (TestDBFTable.test_row_oridnal_to_id): New test for the new table
5461 methods and the new arguments
5462
5463 2003-08-26 Bernhard Herzog <[email protected]>
5464
5465 * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
5466 more postgis specific but much faster method to get the bounding
5467 box
5468
5469 2003-08-26 Bernhard Herzog <[email protected]>
5470
5471 * Thuban/Model/postgisdb.py (PostGISTable.Title)
5472 (PostGISShapeStore.AllShapes): Add these missing methods.
5473 (PostGISShapeStore.ShapesInRegion): No need to raise
5474 StopIteration. We can simply return
5475
5476 * test/test_postgis_db.py (TestPostGISTable.test_title)
5477 (TestPostGISShapestorePoint.test_all_shapes): New tests for the
5478 new methods
5479
5480 2003-08-25 Bernhard Herzog <[email protected]>
5481
5482 * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
5483
5484 * test/test_postgis_db.py (PolygonTests): New class containing
5485 those tests from TestPostGISShapestorePolygon that can also be
5486 used to test MUTLIPOLYGON tables
5487 (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
5488 so derive from that
5489 (TestPostGISShapestoreMultiPolygon): New class with tests for
5490 MUTLIPOLYGON tables
5491
5492 * test/postgissupport.py (PostGISDatabase.initdb): Allow the
5493 tables argument to have tuples with three items to override the
5494 WKT type used.
5495 (PostgreSQLServer.get_default_static_data_db): Use the above to
5496 create a polygon table with MUTLIPOLYGONs
5497 (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
5498 (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
5499 coords_to*
5500 (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
5501 (wkt_converter): New. Map WKT types to converters
5502 (upload_shapefile): New parameter force_wkt_type to use a
5503 different WKT type than the default
5504
5505 2003-08-25 Bernhard Herzog <[email protected]>
5506
5507 * Thuban/UI/application.py
5508 (ThubanApplication.run_db_param_dialog): New. Suitable as a
5509 db_connection_callback. Main difference is that the dialog run
5510 from this method doesn't have a parent so it can be used even when
5511 there is no main window
5512 (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
5513 no db_connection_callback was given. This way the dialog pops up
5514 even when the .thuban file was given as a command line parameter.
5515
5516 2003-08-25 Bernhard Herzog <[email protected]>
5517
5518 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
5519 before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
5520 which leads to an effectively frozen X session because the user
5521 can only interact with the dialog but the mouse is still grabbed
5522 by the canvas.
5523 Also, call the tool's Hide method before MouseLeftUp because
5524 MouseLeftUp may change the tool's coordinates.
5525
5526 2003-08-25 Bernhard Herzog <[email protected]>
5527
5528 * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
5529 LoadCancelled exceptions and handle them by returning immediately.
5530
5531 2003-08-25 Bernhard Herzog <[email protected]>
5532
5533 GUI part of loading sessions with postgis connections which may
5534 require user interaction to get passwords or updated parameters
5535
5536 * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
5537 bit nucer and be more generic.
5538 (DBFrame.OnAdd): Adapt to new DBDialog interface
5539
5540 * Thuban/UI/application.py (ThubanApplication.OpenSession): New
5541 optional parameter db_connection_callback which is passed to
5542 load_session.
5543
5544 * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
5545 Suitable as a db_connection_callback
5546 (MainWindow.OpenSession): Use self.run_db_param_dialog as the
5547 db_connection_callback of the application's OpenSession method
5548
5549
5550 2003-08-25 Bernhard Herzog <[email protected]>
5551
5552 Basic loading of sessions containing postgis connections:
5553
5554 * Thuban/Model/load.py (LoadError): Add doc-string
5555 (LoadCancelled): New exception class to indicate a cancelled load
5556 (SessionLoader.__init__): Add the db_connection_callback parameter
5557 which will be used by the loader to get updated parameters and a
5558 password for a database connection
5559 (SessionLoader.__init__): Add the new XML elements to the
5560 dispatchers dictionary
5561 (SessionLoader.check_attrs): Two new conversions, ascii to convert
5562 to a byte-string object and idref as a generic id reference
5563 (SessionLoader.start_dbconnection)
5564 (SessionLoader.start_dbshapesource): New. Handlers for the new XML
5565 elements
5566 (load_session): Add the db_connection_callback to pass through the
5567 SessionLoader
5568
5569 * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
5570 New classes to test loading of sessions with postgis database
5571 connections.
5572
5573 2003-08-25 Bernhard Herzog <[email protected]>
5574
5575 * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
5576 replace it and the comment with __BuildDate__ by the Source: and
5577 Id: cvs keywords as used in the other files.
5578
5579 2003-08-25 Bernhard Herzog <[email protected]>
5580
5581 * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
5582 LoadError when a required attribute is missing. The code used to
5583 be commented out for some reason, but probably should have been
5584 active.
5585
5586 * test/test_load.py (TestLoadError.test): Test the message in the
5587 LoadError too to make sure it really is about the missing
5588 attribute
5589
5590 2003-08-22 Bernhard Herzog <[email protected]>
5591
5592 * test/test_save.py (SaveSessionTest.test_dbf_table)
5593 (SaveSessionTest.test_joined_table): Add XML validation tests.
5594
5595 2003-08-22 Bernhard Herzog <[email protected]>
5596
5597 Implement saving a session with a postgis connection
5598
5599 * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
5600 elements for database connections and shapestores using db
5601 connections
5602 (session): Add the dbconnections to the content model
5603
5604 * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
5605 Write the db connections
5606 (SessionSaver.write_session): Call write_db_connections to write
5607 the connection before the data sources
5608 (SessionSaver.write_data_containers): Handle postgis shapestores
5609
5610 * test/test_save.py (SaveSessionTest.thubanids)
5611 (SaveSessionTest.thubanidrefs): Update for new DTD
5612 (SaveSessionTest.test_save_postgis): New. Test saving a session
5613 with postgis connections
5614
5615 * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
5616 (PostGISTable.TableName): New accessor methods for the connection
5617 and table name
5618
5619 * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
5620 (TestPostGISTable.test_dbname): New methods to test the new
5621 PostGISConnection methods
5622
5623 2003-08-22 Bernhard Herzog <[email protected]>
5624
5625 * Thuban/Model/postgisdb.py (ConnectionError): New exception class
5626 for exceptions occurring when establishing a Database connection
5627 (PostGISConnection.connect): Catch psycopg.OperationalError during
5628 connects and raise ConnectionError.
5629
5630 * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
5631 tests for database exceptions
5632
5633 2003-08-22 Bernhard Herzog <[email protected]>
5634
5635 Prepare the test suite for tests with required authentication
5636
5637 * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
5638 variables with two predefined users/passwords, one for the admin
5639 and one for a non-privileged user.
5640 (PostgreSQLServer.createdb): Pass the admin name to initdb and add
5641 the non-privileged user to the database and set the admin password
5642 (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
5643 Better error reporting
5644 (PostgreSQLServer.connection_params)
5645 (PostgreSQLServer.connection_string): New methods to return
5646 information about how to connect to the server
5647 (PostgreSQLServer.execute_sql): New. Convenience method to execute
5648 SQL statements
5649 (PostgreSQLServer.require_authentication): Toggle whether the
5650 server requires authentication
5651 (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
5652 Add or alter users
5653 (PostGISDatabase.initdb): Pass the admin name one the
5654 subprocesses' command lines. Grant select rights on
5655 geometry_columns to everybody.
5656 (upload_shapefile): Use the admin name and password when
5657 connecting. Grant select rights on the new table to everybody.
5658
5659 * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
5660 server's new methods to get the connection parameters.
5661
5662 * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
5663 (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
5664 server's new methods to get the connection parameters.
5665
5666 * test/test_postgis_db.py
5667 (TestPostGISConnection.test_gis_tables_empty)
5668 (TestPostGISConnection.test_gis_tables_non_empty)
5669 (PostGISStaticTests.setUp): Use the server's new methods to get
5670 the connection parameters.
5671
5672 2003-08-22 Bernhard Herzog <[email protected]>
5673
5674 * Thuban/UI/about.py (About.__init__): Add the psycopg version.
5675
5676 * Thuban/version.py: Add psycopg version
5677
5678 * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
5679 version of the psycopg module
5680
5681 2003-08-22 Bernhard Herzog <[email protected]>
5682
5683 * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
5684 (DBFrame.OnEdit): Removed because it's not used and wouldn't work
5685 at the moment. The functionality should probably be implemented
5686 some time, though.
5687 (DBFrame.OnRemove): Display a message if the connection can't be
5688 removed because it's still in use.
5689
5690 2003-08-22 Jan-Oliver Wagner <[email protected]>
5691
5692 * Thuban/UI/about.py (About.__init__): split up the huge about
5693 text into elements/lists for easier translation. This fixes bug
5694 https://intevation.de/rt/webrt?serial_num=2058
5695 Also, made some forgotten string available for the i18n.
5696
5697 2003-08-21 Bernhard Herzog <[email protected]>
5698
5699 Make postgis support really optional including insensitive menu
5700 items.
5701
5702 * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
5703 whether the postgis is supported.
5704
5705 * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
5706 to make postgis support optional
5707
5708 * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
5709 version of Thuban.Model.postgisdb.has_postgis_support
5710 (database_management command): Make it only sensitive if postgis
5711 is supported.
5712
5713 2003-08-21 Jan-Oliver Wagner <[email protected]>
5714
5715 * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
5716 (section Adding and Removing Layers): Added text and described
5717 multi-selection.
5718 (chapter Extensions): New.
5719
5720 2003-08-21 Jan-Oliver Wagner <[email protected]>
5721
5722 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
5723 settings to allow multiple files to load into the map.
5724 Also reduced selection to *.shp as a default.
5725
5726 2003-08-20 Bernhard Herzog <[email protected]>
5727
5728 Add dialogs and commands to open database connections and add
5729 database layers.
5730
5731 * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
5732 method to open the database connection management dialog
5733 (MainWindow.AddDBLayer): New method to add a layer from a database
5734 (_has_dbconnections): New helper function to use for sensitivity
5735 (database_management command, layer_add_db command): New commands
5736 that call the above new methods.
5737 (main_menu): Add the new commands to the menu.
5738
5739 * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
5740 (PostGISConnection.connect): Establish the actual connection in a
5741 separate method and call it in __init__. This makes it easier to
5742 override the behavior in test cases
5743 (PostGISConnection.BriefDescription): New method to return a brief
5744 description for use in dialogs.
5745
5746 * test/test_postgis_db.py (NonConnection): DB connection that
5747 doesn't actually connect
5748 (TestBriefDescription): New class with tests for the new
5749 BriefDescription method
5750
5751 2003-08-19 Jan-Oliver Wagner <[email protected]>
5752
5753 Moved anything from extensions to libraries.
5754
5755 * libraries: New.
5756
5757 * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
5758
5759 * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
5760 Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
5761 been moved here from thuban/extensions/pyprojection/
5762 See there in the Attic for the older history.
5763
5764 * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
5765 dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
5766 shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
5767 have been moved here from thuban/extensions/pyshapelib/
5768 See there in the Attic for the older history.
5769
5770 * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
5771 files have been moved here from thuban/extensions/shapelib/
5772 See there in the Attic for the older history.
5773
5774 * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
5775 gdalwarp.cpp, wxproj.cpp: These files have been moved here from
5776 thuban/extensions/thuban/
5777 See there in the Attic for the older history.
5778
5779 * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
5780
5781 * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
5782 gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
5783
5784 * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
5785 Moved to libraries/shapelib.
5786
5787 * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
5788 shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
5789 ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
5790 Moved to libraries/pyshapelib.
5791
5792 * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
5793 LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
5794 Moved to libraries/pyprojection.
5795
5796 * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
5797
5798 * extensions: Removed.
5799
5800 2003-08-19 Bernhard Herzog <[email protected]>
5801
5802 * test/test_viewport.py (ViewPortTest): We don't use the
5803 facilities of FileTestMixin so don't derive from it.
5804 (TestViewportWithPostGIS): New class with tests for using a
5805 viewport on a map with postgis layers.
5806
5807 2003-08-19 Bernhard Herzog <[email protected]>
5808
5809 Add the db connection management to the session.
5810
5811 * Thuban/Model/session.py (Session.__init__): New instance
5812 variable db_connections
5813 (Session.AddDBConnection, Session.DBConnections)
5814 (Session.HasDBConnections, Session.CanRemoveDBConnection)
5815 (Session.RemoveDBConnection): New methods to manage and query the
5816 db connections managed by the session
5817 (Session.OpenDBShapeStore): New method to open a shapestore from a
5818 db connection
5819
5820 * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
5821 messages for the db connection handling in the session
5822
5823 * test/test_postgis_session.py: New. test cases for the session's
5824 db connection handling with postgis connections
5825
5826 2003-08-19 Bernhard Herzog <[email protected]>
5827
5828 Add very basic postgis database support and the corresponding test
5829 cases. The test cases require a PostgreSQL + postgis installation
5830 but no existing database. The database will be created
5831 automatically by the test cases
5832
5833 * test/README: Add note about skipped tests and the requirements
5834 of the postgis tests.
5835
5836 * Thuban/Model/postgisdb.py: New. Basic postgis database support.
5837
5838 * test/test_postgis_db.py: New. Test cases for the postgis
5839 support.
5840
5841 * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
5842 format
5843
5844 * test/test_wellknowntext.py: New. Test cases for the
5845 wellknowntext parser
5846
5847 * test/postgissupport.py: New. Support module for tests involving
5848 a postgis database.
5849
5850 * test/support.py (execute_as_testsuite): Shut down the postmaster
5851 if it's still running after the tests
5852
5853 * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
5854 well known text format
5855
5856 2003-08-19 Jan-Oliver Wagner <[email protected]>
5857
5858 * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
5859 message dialog.
5860
5861 2003-08-18 Bernhard Herzog <[email protected]>
5862
5863 * test/support.py (ThubanTestResult.printErrors): Indent the
5864 reason for the skips in the output to make it a bit more readable.
5865 (execute_as_testsuite): New helper function to run a test suite
5866 and print some more information.
5867 (run_tests): Use execute_as_testsuite to run the tests
5868
5869 * test/runtests.py (main): Use execute_as_testsuite to run the
5870 tests
5871
5872 2003-08-18 Bernhard Herzog <[email protected]>
5873
5874 Fix some bugs in Thuban and the test suite that were uncovered by
5875 changes introduced in Python 2.3:
5876
5877 * Thuban/Model/table.py (DBFTable.__init__): Make sure the
5878 filename is an absolute name
5879
5880 * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
5881 filename is an absolute name
5882
5883 * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
5884 unique filename to save to and use the correct relative filename
5885 in the expected output.
5886 (SaveSessionTest.test_dbf_table): Use the correct relative
5887 filename in the expected output.
5888
5889 * test/test_layer.py (TestLayer.test_raster_layer): Update the
5890 test to check whether the filename is absolute.
5891
5892 2003-08-18 Jan-Oliver Wagner <[email protected]>
5893
5894 * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
5895
5896 2003-08-15 Bernhard Herzog <[email protected]>
5897
5898 Change the way shapes are returned by a shape store. The
5899 ShapesInRegion method returns an iterator over actual shape
5900 objects instead of a list of shape ids.
5901
5902 * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
5903 id.
5904 (ShapefileStore.ShapesInRegion): Return an iterator over the
5905 shapes which yields shape objects instead of returning a list of
5906 shape ids
5907 (ShapefileStore.AllShapes): New. Return an iterator over all
5908 shapes in the shape store
5909 (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
5910
5911 * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
5912 doc-string.
5913
5914 * Thuban/UI/baserenderer.py
5915 (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
5916 layer_shapes and make it return an iterator containg shapes
5917 instead of a list of ids.
5918 (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
5919 layer_shapes() change
5920
5921 * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
5922 (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
5923
5924 * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
5925 changes in the ShapesInRegion return value.
5926 (ViewPort._get_hit_tester): Remove commented out code
5927
5928 * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
5929 new return value.
5930 (SimpleShapeStore.AllShapes): New. Implement this method too.
5931
5932 * test/test_layer.py (TestLayer.test_arc_layer)
5933 (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
5934 (TestLayer.test_point_layer_with_projection)
5935 (TestLayer.test_derived_store): Adapt to changes in the
5936 ShapesInRegion return value.
5937
5938 * test/test_shapefilestore.py
5939 (TestShapefileStoreArc.test_shapes_in_region)
5940 (TestShapefileStorePolygon.test_shapes_in_region)
5941 (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
5942 in the ShapesInRegion return value.
5943 (TestShapefileStorePoint.test_all_shapes)
5944 (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
5945 methods
5946
5947 * test/test_derivedshapestore.py
5948 (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
5949 the ShapesInRegion return value.
5950 (TestDerivedShapeStore.test_all_shapes)
5951 (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
5952 methods
5953
5954 2003-08-15 Bernhard Herzog <[email protected]>
5955
5956 Make the renderers deal correctly with raw vs. python level
5957 representation of shape geometries
5958
5959 * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
5960 Return a flag useraw in addition to the callable and the parameter
5961 to indicate whether the callable can deal with the raw shape data
5962 or uses the higher level python lists of coordinates. The callable
5963 now should accept either the raw data or the return value of the
5964 shape's Points() method.
5965 (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
5966 change
5967 (BaseRenderer.projected_points): Instead of the shape id use the
5968 points list as parameter.
5969 (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
5970 (BaseRenderer.draw_point_shape): Adapt to projected_points()
5971 change and accept the points list as parameter instead of the
5972 shape id.
5973
5974 * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
5975 the useraw flag as required by the BaseRenderer
5976 (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
5977 changes.
5978
5979 * test/test_baserenderer.py
5980 (TestBaseRenderer.test_point_with_classification): New test for
5981 rendering a map with classifications.
5982
5983 2003-08-15 Bernhard Herzog <[email protected]>
5984
5985 * Thuban/UI/viewport.py (ViewPort.find_shape_at)
5986 (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
5987 (ViewPort._get_hit_tester, ViewPort.projected_points)
5988 (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
5989 (ViewPort._find_label_at): Split the find_shape_at method into
5990 several new methods and use the functions in the hit-test module.
5991
5992 * Thuban/UI/hittest.py: New module with Python-level hit-testing
5993 functions
5994
5995 * test/test_hittest.py: New. Test for the new hittest module
5996
5997 2003-08-15 Bernhard Herzog <[email protected]>
5998
5999 * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
6000 projection to all corners of the bounding box to get a better
6001 approximation of the projected bounding box
6002
6003 * test/test_layer.py (TestLayer.test_point_layer_with_projection):
6004 New. Test coordinate handling of a layer with a projection.
6005 Catches the bug fixed in Layer.ShapesInRegion
6006
6007 2003-08-15 Bernhard Herzog <[email protected]>
6008
6009 Move some of the mock objects in test_baserenderer into their own
6010 module so they can easily be used from other tests
6011
6012 * test/mockgeo.py: New test helper module with some mock objects
6013 for geometry related things like shapes, shapestores and
6014 projections.
6015
6016 * test/test_mockgeo.py: New. Tests for the new helper module
6017
6018 * test/test_baserenderer.py: Some of the mock-objects are in
6019 mockgeo now.
6020
6021 2003-08-12 Jan-Oliver Wagner <[email protected]>
6022
6023 * Thuban/UI/about.py (About.__init__): Added Björn Broscheit.
6024
6025 2003-08-12 Bernhard Herzog <[email protected]>
6026
6027 * po/de.po: New. German translations by Bjoern Broscheit
6028
6029 2003-08-12 Bernhard Herzog <[email protected]>
6030
6031 * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
6032 strings have to be one string literal.
6033
6034 2003-08-11 Bernhard Herzog <[email protected]>
6035
6036 * test/support.py (FloatComparisonMixin.assertPointListEquals):
6037 New. This method was used in various derived classes, but it's
6038 better to have it here.
6039
6040 * test/test_shapefilestore.py
6041 (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
6042 FloatComparisonMixin
6043
6044 * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
6045 It's now in FloatComparisonMixin
6046
6047 * test/test_derivedshapestore.py
6048 (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
6049 in FloatComparisonMixin
6050
6051 2003-08-11 Bernhard Herzog <[email protected]>
6052
6053 * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
6054 error message
6055
6056 2003-08-08 Jan-Oliver Wagner <[email protected]>
6057
6058 * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
6059 with version number.
6060 Changed title to reflect version number of Thuban.
6061
6062 2003-08-08 Jan-Oliver Wagner <[email protected]>
6063
6064 * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
6065 the list corresponds to the "About" web page.
6066
6067 2003-08-08 Bernhard Herzog <[email protected]>
6068
6069 * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
6070 Make sure translated strings are recognized as one string literal.
6071
6072 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
6073 Make sure translated strings are recognized as one string literal.
6074
6075 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
6076 translated strings are recognized as one string literal.
6077
6078 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
6079 sure translated strings are recognized as one string literal.
6080
6081 2003-08-07 Bernhard Herzog <[email protected]>
6082
6083 * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
6084 Simply delegates to the original shapestore.
6085
6086 * test/test_derivedshapestore.py
6087 (TestDerivedShapeStore.test_raw_format): New. Test case for
6088 DerivedShapeStore.RawShapeFormat
6089
6090 2003-08-07 Bernhard Herzog <[email protected]>
6091
6092 Add raw data interface to shape objects.
6093
6094 * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
6095 class to ShapefileShape which now holds shapefile specific
6096 information.
6097 (ShapefileShape.compute_bbox): Simplified to not cache any
6098 information. The way this method is used that shouldn't matter
6099 performance wise.
6100 (ShapefileShape.RawData): New. Return the shapeid which is the raw
6101 data format for shapes from shapefiles.
6102 (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
6103 in the shape objects returned by a shapestore. For a
6104 ShapefileStore this is always RAW_SHAPEFILE.
6105 (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
6106 method.
6107
6108 * test/test_shapefilestore.py
6109 (TestShapefileStore.test_raw_format): New test to test the raw
6110 format feature of shapes.
6111
6112 * Thuban/Model/layer.py: Remove the unused import of Shape from
6113 data. It was only there for interface compatibility but it's not
6114 used inside of Thuban and the generic Shape class has gone away.
6115
6116 * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
6117 the raw data format and only use an optimized version of its a
6118 shapefile.
6119
6120 2003-08-07 Bernhard Herzog <[email protected]>
6121
6122 * test/test_baserenderer.py (SimpleShape): Shape class for the
6123 tests.
6124 (SimpleShapeStore.Shape): Use SimpleShape instead of
6125 Thuban.Model.data.Shape to make the tests independed of the coming
6126 changes.
6127
6128 2003-08-07 Bernhard Herzog <[email protected]>
6129
6130 * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
6131 (ThubanTestProgram): New classes that extend the respective
6132 classes from unittest. These new version support skipping tests
6133 under certain expected conditions. In the Thuban test suite we
6134 uses this for tests that require the optional gdal support.
6135 (run_tests): Use ThubanTestProgram instead of the unittest.main()
6136
6137 * test/runtests.py (main): Use the new ThubanTestRunner instead of
6138 the normal one from unittest
6139
6140 * test/test_layer.py (TestLayer.test_raster_layer): If this test
6141 is not run because gdal support isn't available report this to the
6142 runner.
6143
6144 * test/test_baserenderer.py
6145 (TestBaseRenderer.test_raster_no_projection): Do not run this test
6146 if gdal support isn't available and report this to the runner.
6147
6148 2003-08-06 Bernhard Herzog <[email protected]>
6149
6150 Rearrange the renderers a bit, partly in preparation for changes
6151 required for the postgis merge, partly to make it more testable.
6152 Also make the representation of coordinates in Shapes more
6153 consistent.
6154
6155 * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
6156 this class is now in BaseRenderer. This class is now practically
6157 only a specialization of BaseRenderer for rendering to an actual
6158 wx DC.
6159 (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
6160 to get the shapetype specific rendering functions.
6161
6162 * Thuban/UI/baserenderer.py: New file with the basic rendering
6163 logic. The code in this file is completely independend of wx.
6164 (BaseRenderer): Class with the basic rendering logic
6165
6166 * test/test_baserenderer.py: New. Test cases for BaseRenderer
6167
6168 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
6169 error_on_redraw to guard agains endless loops and stack overflows
6170 when there's a bug in the rendering code that raises exceptions.
6171 (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
6172 rendering into a separate method _do_redraw so that error handling
6173 is a bit easier. When an exception occurs, set error_on_redraw to
6174 true. When it's true on entry to OnIdle do nothing and return
6175 immediately.
6176
6177 * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
6178 Shape object will always have the coordinates as a list of list of
6179 coordinate pairs (tuples).
6180 (Shape.compute_bbox): Adapt to new representation.
6181
6182 * Thuban/UI/viewport.py (ViewPort.find_shape_at)
6183 (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
6184 Shape objects.
6185
6186 * test/test_shapefilestore.py
6187 (ShapefileStoreTests.assertFloatTuplesEqual)
6188 (ShapefileStoreTests.assertPointListEquals): Rename to
6189 assertPointListEquals and change purpose to checking equality of
6190 the lists returned by Shape.Points().
6191 (TestShapefileStoreArc.test_shape)
6192 (TestShapefileStorePolygon.test_shape)
6193 (TestShapefileStorePoint.test_shape): Use the new
6194 assertPointListEquals instead of assertFloatTuplesEqual
6195
6196 * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
6197 (TestLayer.assertPointListEquals): Rename to assertPointListEquals
6198 and change purpose to checking equality of the lists returned by
6199 Shape.Points().
6200 (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
6201 (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
6202 (TestLayer.test_derived_store): Use the new assertPointListEquals
6203 instead of assertFloatTuplesEqual
6204
6205 * test/test_derivedshapestore.py
6206 (TestDerivedShapeStore.assertFloatTuplesEqual)
6207 (TestDerivedShapeStore.assertPointListEquals): Rename to
6208 assertPointListEquals and change purpose to checking equality of
6209 the lists returned by Shape.Points().
6210 (TestDerivedShapeStore.test_shape): Use the new
6211 assertPointListEquals instead of assertFloatTuplesEqual
6212
6213 2003-08-06 Jan-Oliver Wagner <[email protected]>
6214
6215 * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
6216 a bounding box. A dialog is raised in case, no bounding box
6217 is found. This fixes bug #2043:
6218 https://intevation.de/rt/webrt?serial_num=2043
6219
6220 2003-08-05 Bernhard Herzog <[email protected]>
6221
6222 * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
6223 object look like a Color instantiation. Formerly it looked like a
6224 tuple.
6225
6226 * test/test_color.py (TestColor.test_repr)
6227 (TestColor.test_equality, TestColor.test_inequality): New. test
6228 some more apects of the Color class
6229 (TestTransparent.test_repr, TestTransparent.test_hex)
6230 (TestTransparent.test_equality): New. Test cases for the
6231 Transparent object.
6232
6233 2003-08-04 Jan-Oliver Wagner <[email protected]>
6234
6235 * Doc/manual/thuban-manual.xml: a number of small improvements.
6236 The resulting file is the version submitted for GREAT-ER II.
6237
6238 2003-08-01 Bernhard Herzog <[email protected]>
6239
6240 * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
6241 Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
6242 Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
6243
6244 * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
6245 (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
6246 (ThubanEndBusyCursor): Add doc-strings
6247
6248 2003-08-01 Bernhard Herzog <[email protected]>
6249
6250 First step towards PostGIS integration. More abstraction by movin
6251 more code from the layer to the shapestore. More methods of the
6252 layer are now simply delegated to the equivalent method of the
6253 shapestore. The SHAPETYPE_* constants are now in data not in
6254 layer.
6255
6256 * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
6257 (SHAPETYPE_POINT, Shape): Move these constants and classes from
6258 layer.py to data.py
6259 (ShapefileStore.__init__): More Initialization for the new methods
6260 and functionality.
6261 (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
6262 (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
6263 (ShapefileStore.Shape): New methods that were formerly implemented
6264 in the layer.
6265 (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
6266 (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
6267 (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
6268 equivalents of the new shape methods. These versions are simply
6269 delegated to the original shapstore.
6270
6271 * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
6272 (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
6273 (Layer.SetShapeStore): Removed the initializatin of instance
6274 variables that were needed for the stuff that's now in
6275 ShapefileStore
6276 (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
6277 (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
6278 shapestore.
6279
6280 * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
6281 Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
6282 instead of layer.
6283
6284 * test/test_shapefilestore.py: New. Tests for ShapefileStore.
6285
6286 * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
6287
6288 * test/test_layer.py: Import the SHAPETYPE_* constants from data
6289 instead of layer.
6290 (TestLayer.test_derived_store): Remove the test for the exception
6291 when instantiating the DerivedShapeStore with an incompatible
6292 table which is now in test_derivedshapestore.py. Add some more
6293 tests of the layer methods to determine whether they work for a
6294 DerivedShapeStore as well.
6295
6296 2003-07-31 Jonathan Coles <[email protected]>
6297
6298 * Doc/manual/thuban-manual.xml: Fix the list of required packages
6299 by just listing the name and where they can be found.
6300
6301 2003-07-31 Frank Koormann <[email protected]>
6302
6303 * Doc/manual/thuban-manual.xml:
6304 Changed the screenshot elements to figure.
6305 Changed some variablelist elements to itemizedlist.
6306 Added section on GDAL formats.
6307
6308 2003-07-31 Jonathan Coles <[email protected]>
6309
6310 * Doc/manual/thuban-manual.xml: Added a few sentences about
6311 the Fix Border Color option when generating classes.
6312
6313 2003-07-30 Jonathan Coles <[email protected]>
6314
6315 * Thuban/Model/classgen.py: Add docstrings. Rename specific
6316 Ramp instances to use lower_case_style.
6317
6318 * Thuban/UI/classgen.py: Use renamed Ramp instances.
6319
6320 * Thuban/UI/classifier.py: Add docstrings.
6321
6322 * Thuban/UI/dock.py: Add docstrings.
6323
6324 * test/test_classgen.py: Use renamed Ramp instances.
6325
6326 2003-07-30 Bernhard Herzog <[email protected]>
6327
6328 * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
6329 was never used in Thuban.
6330
6331 2003-07-30 Bernhard Herzog <[email protected]>
6332
6333 * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
6334 method directly instead of going through the transient_table
6335 method. This faster because transient_table may force the copy of
6336 a DBF file into the transient database and setting a table's title
6337 doesnm't affect the title of the associated transient table, so
6338 this fixes RT #2042
6339
6340 * Thuban/UI/main.py (__version__): Don't import the already
6341 removed show_exception_dialog.
6342
6343 2003-07-29 Jonathan Coles <[email protected]>
6344
6345 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
6346 Put back this method and remove the equivalent function since we
6347 are setting the exception hook from within this class (OnInit).
6348
6349 2003-07-29 Jonathan Coles <[email protected]>
6350
6351 * Doc/manual/images/5_2_custom_ramp.png,
6352 Doc/manual/images/5_2_quantiles.png,
6353 Doc/manual/images/5_2_uniform_dist.png,
6354 Doc/manual/images/5_2_unique_values.png,
6355 Doc/manual/images/8_int_error.png: New screen shots.
6356
6357 * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
6358 some points, and added more screen shots.
6359
6360 2003-07-29 Bernhard Herzog <[email protected]>
6361
6362 * Thuban/Model/data.py: Remove the now unused import of warnings
6363
6364 2003-07-29 Bernhard Herzog <[email protected]>
6365
6366 * Thuban/Model/data.py (SimpleStore): Removed. This class has been
6367 deprecated since before the 0.8 release and isn't used in Thuban
6368 itself anymore.
6369
6370 * Thuban/Model/transientdb.py: Remove some unnecessary imports
6371
6372 2003-07-29 Jonathan Coles <[email protected]>
6373
6374 * Thuban/UI/application.py (ThubanApplication.OnInit): set the
6375 python exception hook here so that we are sure to catch any
6376 Thuban exception that happen during initialization.
6377
6378 * Thuban/UI/main.py (main): Don't set the exception hook here,
6379 it will get set in ThubanApplication.OnInit.
6380
6381 2003-07-29 Jonathan Coles <[email protected]>
6382
6383 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
6384 Removed and called it show_exception_dialog() so that the exception
6385 handler can be set before the class is created.
6386
6387 * Thuban/UI/main.py (main): Install the exception handler before
6388 a ThubanApplication is created.
6389
6390 2003-07-29 Bernhard Herzog <[email protected]>
6391
6392 * po/it.po: New. Italian translation by Maurizio Napolitano
6393
6394 * po/ru.po: New. Russian translation by Alex Shevlakov
6395
6396 2003-07-29 Frank Koormann <[email protected]>
6397
6398 * Doc/manual/thuban-manual.xml: Extended section on supported
6399 projections.
6400
6401 2003-07-29 Frank Koormann <[email protected]>
6402
6403 * Doc/manual/thuban-manual.xml: gaspell-checked.
6404
6405 2003-07-29 Jonathan Coles <[email protected]>
6406
6407 * Doc/manual/images/3_5_legend.png: Added border to improve look
6408 on white background.
6409
6410 2003-07-29 Jonathan Coles <[email protected]>
6411
6412 * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
6413 descriptions for the legend toolbar.
6414
6415 * Doc/manual/images/4_2_raster_layer_properties.png: Removed
6416 cursor from dialog box.
6417
6418 2003-07-28 Jonathan Coles <[email protected]>
6419
6420 * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
6421
6422 * Doc/manual/images/2_4_session_tree.png,
6423 Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
6424 Doc/manual/images/4_2_layer_properties.png,
6425 Doc/manual/images/4_2_raster_layer_properties.png,
6426 Doc/manual/images/5_3_genclass.png,
6427 Doc/manual/images/5_classification.png,
6428 Doc/manual/images/6_projection.png,
6429 Doc/manual/images/7_1_table_view.png,
6430 Doc/manual/images/7_2_5_join.png: New screenshots.
6431
6432 2003-07-24 Jonathan Coles <[email protected]>
6433
6434 * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
6435
6436 2003-07-24 Jonathan Coles <[email protected]>
6437
6438 * Doc/manual/thuban-manual.xml: Added EPS images and wrote
6439 chapter on Layer Management.
6440
6441 * Doc/manual/Makefile: New. Makefile to generate all formats for the
6442 manual and images.
6443
6444 2003-07-24 Bernhard Herzog <[email protected]>
6445
6446 * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
6447 it annoys lintian which warns about these files not being
6448 executable. The #! isn't necessary here since if you absolutely
6449 must execute them you can always say "python <filename>".
6450
6451 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
6452 superfluous code to set brush and pen for point shapes
6453
6454 * Thuban/UI/viewport.py: Remove commented out code that wouldn't
6455 belong in viewport anyway
6456
6457 2003-07-24 Frank Koormann <[email protected]>
6458
6459 * Doc/manual/thuban-manual.xml: Added section on table management.
6460
6461 2003-07-24 Bernhard Herzog <[email protected]>
6462
6463 * test/runtests.py (main): Recognize the long "verbose" option
6464 correctly.
6465
6466 2003-07-22 Jonathan Coles <[email protected]>
6467
6468 * Doc/manual/thuban-manual.xml: Continue to write first revision
6469 of the manual.
6470
6471 * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
6472 with Begin/EndDrawing() calls to ensure we aren't doing to
6473 many updates to the dc during rendering.
6474 (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
6475 a pen and brush argument so they need to be passed to the function.
6476
6477 * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
6478 Calculates the minimum and maximum scale values. Factored out
6479 of set_view_transform so that it could be used to zoom all the
6480 way into a single point.
6481 (ViewPort.set_view_transform): Call calc_min_max_scales().
6482 (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
6483 if only a single point is selected.
6484
6485 * Doc/manual/images/1_2_legend_close.png,
6486 Doc/manual/images/1_2_legend_dock.png,
6487 Doc/manual/images/1_2_mainwindow.png,
6488 Doc/manual/images/1_2_mainwindow.ps,
6489 Doc/manual/images/1_2_mainwindow.sk,
6490 Doc/manual/images/3_2_fullextent.png,
6491 Doc/manual/images/3_2_fulllayerextent.png,
6492 Doc/manual/images/3_2_fullshapeextent.png,
6493 Doc/manual/images/3_2_pan.png,
6494 Doc/manual/images/3_2_zoomin.png,
6495 Doc/manual/images/3_2_zoomout.png,
6496 Doc/manual/images/3_3_identify.png,
6497 Doc/manual/images/3_3_label.png,
6498 Doc/manual/images/3_5_invisible.png,
6499 Doc/manual/images/3_5_movedown.png,
6500 Doc/manual/images/3_5_moveup.png,
6501 Doc/manual/images/3_5_props.png,
6502 Doc/manual/images/3_5_tobottom.png,
6503 Doc/manual/images/3_5_totop.png,
6504 Doc/manual/images/3_5_visible.png: New. Images for the documentation.
6505
6506 2003-07-18 Bernhard Herzog <[email protected]>
6507
6508 * Thuban/UI/messages.py (MAP_REPLACED): New message.
6509
6510 * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
6511 after the new map has been assigned
6512
6513 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
6514 Delegate MAP_REPLACED to the canvas too
6515 (MainWindow.prepare_new_session): Removed. Thanks to the new
6516 MAP_REPLACED message it's no longer needed
6517 (MainWindow.OpenSession, MainWindow.NewSession):
6518 prepare_new_session has been removed.
6519
6520 * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
6521 MAP_REPLACED so that we can close the dialog if a new map is set.
6522 (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
6523 (Classifier.map_replaced): Handle MAP_REPLACED by closing the
6524 dialog
6525
6526 * test/test_viewport.py (SimpleViewPortTest)
6527 (SimpleViewPortTest.test_default_size): Add doc-strings
6528 (ViewPortTest.setUp): Bind map to self.map so we can use it in
6529 tests. Subscribe to MAP_REPLACED messages too.
6530 (ViewPortTest.tearDown): No need to explicitly unsubscribe
6531 (ViewPortTest.test_set_map): New test for the SetMap method.
6532
6533 2003-07-18 Bernhard Herzog <[email protected]>
6534
6535 * test/test_viewport.py (SimpleViewPortTest.test_default_size):
6536 Move this test from ViewPortTest.setUp to this new separate test
6537 case. setUp is not the place for the actual tests.
6538 (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
6539 more of the test from setUp to the new test test_inital_settings.
6540 (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
6541 (ViewPortTest.test_proj_conv): Split test_proj_conv into
6542 test_win_to_proj and test_proj_to_win and make the tests easier to
6543 understand
6544 (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
6545 (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
6546 (ViewPortTest.test_unprojected_rect_around_point)
6547 (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
6548 Reformat to increase readability.
6549
6550 2003-07-18 Bernhard Herzog <[email protected]>
6551
6552 * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
6553
6554 2003-07-18 Bernhard Herzog <[email protected]>
6555
6556 * test/runtests.py: The test suite can now be run without an X
6557 connection. To make sure this remains true, remove the DISPLAY
6558 environment variable so that an error occurs if the wxGTK is
6559 imported accidentally
6560
6561 2003-07-18 Bernhard Herzog <[email protected]>
6562
6563 * Thuban/UI/viewport.py: Remove unused imports
6564
6565 * Thuban/UI/view.py: Remove unused imports
6566
6567 2003-07-18 Bernhard Herzog <[email protected]>
6568
6569 * test/test_export.py Remove unused imports. The OutputTransform
6570 function is now in viewport.py and is called output_transform
6571 (TestScalebar.test_output_transform)
6572 (TestScalebar.test_OutputTransform): Renamed to
6573 test_output_transform and updated to use output_transform instead
6574 of OutputTransform
6575
6576 * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
6577 renamed.
6578 (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
6579 renamed to output_transform
6580
6581 * Thuban/UI/viewport.py (OutputTransform, output_transform):
6582 Rename to output_transform
6583
6584 2003-07-18 Bernhard Herzog <[email protected]>
6585
6586 * Thuban/Model/layer.py (Layer.__init__): Rename
6587 classificationField to classificatin_column and init it here so
6588 that it can be used in SetClassificationColumn
6589 (Layer.GetClassificationColumn, Layer.GetClassificationField):
6590 Rename to GetClassificationColumn.
6591 (Layer.SetClassificationColumn, Layer.SetClassificationField):
6592 Rename to SetClassificationColumn and issue a LAYER_CHANGED
6593 message if the column changes.
6594 (Layer._classification_changed, Layer.ClassChanged): Rename to
6595 _classification_changed. Update the callers.
6596 (Layer.SetShapeStore): Further field->column renames.
6597
6598 * Thuban/Model/load.py (SessionLoader.start_classification)
6599 (SessionLoader.start_clpoint): Updates because of
6600 field->column method name changes in the Layer class
6601
6602 * Thuban/Model/save.py (SessionSaver.write_classification): Updates
6603 because of field->column method name changes in the Layer class
6604
6605 * Thuban/UI/classifier.py (Classifier.__init__)
6606 (Classifier._OnTry, Classifier._OnRevert): Updates because of
6607 field->column method name changes in the Layer class
6608
6609 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
6610 because of field->column method name changes in the Layer class
6611
6612 * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
6613 of field->column method name changes in the Layer class
6614
6615 * test/test_save.py (SaveSessionTest.testClassifiedLayer)
6616 (SaveSessionTest.testClassifiedLayer): Update because of
6617 field->column method name changes in the Layer class
6618
6619 * test/test_layer.py (SetShapeStoreTests.setUp)
6620 (SetShapeStoreTests.test_sanity): Update because of field->column
6621 method name changes in the Layer class
6622 (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
6623 (TestLayerModification.test_sanity)
6624 (TestLayerModification.test_initial_settings): remove unsued code
6625 and rename to test_sanity.
6626 (TestLayerModification.test_set_classification): New test for
6627 SetClassification and SetClassificationField.
6628
6629 2003-07-18 Bernhard Herzog <[email protected]>
6630
6631 * test/test_classgen.py (TestFixedRamp.test): Extend test to check
6632 the non-fixed values as well. The old test would have accepted a
6633 fixed ramp that only returnes the fixed properties
6634
6635 2003-07-17 Jonathan Coles <[email protected]>
6636
6637 * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
6638 shots for the manual. The XCF file is the source image and
6639 has additional layers to support changes.
6640
6641 * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
6642
6643 * Thuban/UI/classifier.py (Classifier.__BuildClassification):
6644 Return both the new class and the field name.
6645
6646 * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
6647 fit the map to the window as this changes any zoom level that
6648 the user may have set.
6649
6650 2003-07-16 Jonathan Coles <[email protected]>
6651
6652 * Thuban/Model/classgen.py (generate_singletons,
6653 generate_uniform_distribution, generate_quantiles): Remove
6654 fixes parameter, but maintain the same functionality by having
6655 the calling function pass a FixedRamp object for the ramp.
6656 (FixedRamp): New. Adapts a ramp to have fixed property values.
6657
6658 * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
6659 (Classification): Inherit from Publisher.
6660 (Classification.__init__): Remove the layer parameter.
6661 Classifications no longer need to have a parent layer.
6662 (Classification.GetField, Classification.GetFieldType,
6663 Classification.SetFieldInfo): Removed. The field name is stored
6664 in the layer, and the type can be retreived by calling
6665 Layer.GetFieldType().
6666 (Classification._set_layer, Classification.GetLayer): Removed.
6667 Classifications no longer have a parent layer.
6668
6669 * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
6670 classification.
6671 (Layer.SetShapeStore): Reset the classification first while
6672 we still have the old shape store to work with.
6673 (Layer.GetClassificationField, Layer.SetClassificationField):
6674 New. Method for getting/setting the field to classify on.
6675 (Layer.SetClassification): Simplified now that the layer
6676 simply has to hold a reference to the classification and not
6677 tell the classification who owns it.
6678 Fixes RTbug #2023.
6679
6680 * Thuban/Model/load.py (SessionLoader.start_classification):
6681 Set the field name on the layer, not the classification.
6682
6683 * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
6684 classification is modified.
6685
6686 * Thuban/Model/save.py (SessionSaver.write_classification):
6687 Get the field name and type from the layer.
6688
6689 * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
6690 parameter records to rows and add docstring. Fixes RTbug #1997.
6691
6692 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
6693 ramp when we need to fix certain values of a ramp rather than
6694 using the old fixes parameter. Fixes RTbug #2024.
6695
6696 * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
6697 parameter.
6698 (ClassTable.Reset): Add fieldType parameter and use it, rather
6699 than asking the classification.
6700 (Classifier.__init__): Remember the original class's field
6701 and ask the layer for the field type, rather than the classification.
6702 (Classifier.__SetGridTable): Retrieve the field and field type
6703 for the table because they are not in the classification.
6704 (Classifier._OnTry, Classifier._OnRevert): Set the classification
6705 field on the layer in addition to the classification itself.
6706
6707 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
6708 classification field from layer.
6709
6710 * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
6711 classification field from layer. Split up tests and remove
6712 *-imports. Fixes RTbug #1992.
6713
6714 * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
6715
6716 * test/test_classification.py
6717 (TestClassification.test_classification): Remove tests for methods
6718 that no longer exist.
6719
6720 * test/test_layer.py (SetShapeStoreTests.setUp): Classification
6721 __init__ no longer has a field parameter, use SetClassificationField.
6722 (SetShapeStoreTests.test_sanity): Use layer object to get class
6723 field info.
6724
6725 * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
6726 SetClassificationField on layer to set class field info.
6727
6728 * test/test_viewport.py: Renamed from test/test_view.py.
6729
6730 2003-07-16 Jan-Oliver Wagner <[email protected]>
6731
6732 * Doc/manual/thuban-manual.xml: Added authors and an initial
6733 coarse structure.
6734
6735 2003-07-15 Bernhard Herzog <[email protected]>
6736
6737 * test/support.py (FloatComparisonMixin): This is a mix-in class
6738 and therefore should not be derived from any other class.
6739
6740 * test/test_range.py (RangeTest): FloatComparisonMixin is a
6741 mix-in, so derive from TestCase as well.
6742
6743 2003-07-15 Bernhard Herzog <[email protected]>
6744
6745 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
6746 draw_func handling a bit to remove one layer of indirection. This
6747 makes the renderer about 10% faster in the non-classifying case
6748 and the code a bit cleaner
6749 (MapRenderer.draw_point_shape): Add the pen and brush parameters
6750 and set them in the dc. Now the draw_point_shape method and
6751 wxproj's draw_polygon_shape function have basically the same
6752 signature so that both can be directly used as draw_func
6753
6754 2003-07-15 Bernhard Herzog <[email protected]>
6755
6756 * Thuban/Model/save.py (SessionSaver.write_classification): Encode
6757 string values (in addition to the labels) as UTF 8
6758
6759 * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
6760 values if the field type is string
6761
6762 * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
6763 saving a session with non-ascii string classification values.
6764
6765 * test/test_load.py (TestClassification.file_contents)
6766 (TestClassification.test): Check for non-ascii values in string
6767 classifications
6768
6769 2003-07-14 Jonathan Coles <[email protected]>
6770
6771 * test/test_view.py: New. Tests for ViewPort.
6772
6773 2003-07-14 Frank Koormann <[email protected]>
6774
6775 * Thuban/Model/load.py (SessionLoader.start_map): Encode map
6776 title to latin1. Fixes https://intevation.de/rt/webrt?serial_num=2013
6777
6778 * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
6779 unicode strings from session file: session title, map title and
6780 projection name.
6781
6782 2003-07-10 Jonathan Coles <[email protected]>
6783
6784 * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
6785 drag_stop, not drag_move when the mouse is released.
6786
6787 2003-07-10 Jonathan Coles <[email protected]>
6788
6789 The most important part of this is the seperation of view.py into
6790 two pieces. viewport.py now has a class called ViewPort which
6791 contains all the non-wx parts of view.py and can therefore be
6792 tested. view.py contains only the wx-specific parts and is fairly
6793 simple.
6794
6795 * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
6796 RTTbug #1992.
6797 * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
6798 RTTbug #1992.
6799
6800 * Thuban/Model/classgen.py (generate_singletons,
6801 generate_uniform_distribution, generate_quantiles):
6802 Added 'fixes' parameter so that property attributes can
6803 be held constant over the generated classification groups.
6804 (CustomRamp.GetProperties): Remove unused variables.
6805
6806 * Thuban/Model/map.py (Map.SetProjection): Send the old
6807 projection as an argument to listeners of the MAP_PROJECTION_CHANGED
6808 event.
6809
6810 * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
6811 parameter which is a list of records that restricts which
6812 records are saved. Fixes RTbug #1997.
6813
6814 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
6815 Port exception dialog from GREAT-ER. Fixes RTbug #1993.
6816
6817 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
6818 to allow the user to fix line color/width on generated groups.
6819 (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
6820 functions to optionally fix group properties.
6821
6822 * Thuban/UI/main.py (main): Set exception hook to the
6823 ShowExceptionDialog. Fixes RTbug #1993.
6824
6825 * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
6826 the table window when it is selectd to be shown.
6827
6828 * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
6829 Export Selection button and move the export buttons underneath
6830 the table.
6831 (QueryTableFrame.UpdateStatusText): Added event argument so
6832 that it can respond to grid selection events. The status text
6833 is now updated even when the table is not associated with a
6834 layer as was previously assumed.
6835 (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
6836 UpdateStatusText responds to these events.
6837 (QueryTableFrame.OnSaveAs): Renamed to doExport.
6838 (QueryTableFrame.doExport): Helper function that saves the
6839 entire table, or selected rows, to a file.
6840 (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
6841 Respond to export button events and call doExport.
6842
6843 * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
6844 the function doesn't return NULL without first setting a Python
6845 Error.
6846
6847 * test/runtests.py (main): Only print "Unknown option" for
6848 unsupported options.
6849
6850 * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
6851 optional epsilon argument to specify floating point accuracy.
6852 (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
6853 for each item test.
6854
6855 * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
6856 tests for saving selected records.
6857
6858 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
6859 tests for saving selected records.
6860
6861 * test/test_map.py (TestMapWithContents.test_set_projection):
6862 MAP_PROJECTION_CHANGED events send the old projection.
6863
6864 * test/test_session.py
6865 (TestSessionWithContent.test_forward_map_projection):
6866 MAP_PROJECTION_CHANGED events send the old projection.
6867
6868 * test/test_table.py (TableTest): Update tests to use non-deprecated
6869 functions.
6870
6871 2003-07-08 Bernhard Herzog <[email protected]>
6872
6873 * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
6874 constants in the column objects are the standard ones defined in
6875 the table module.
6876
6877 * test/test_transientdb.py
6878 (TestTransientTable.test_transienttable_to_dbf): New. Test whether
6879 exporting transient tables as DBF works. This should catch the bug
6880 just fixed in TransientTableBase.Width.
6881
6882 2003-07-08 Bernhard Herzog <[email protected]>
6883
6884 * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
6885 interpolated colors correctly.
6886
6887 * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
6888 New. Test case for the fix in classgen.py
6889
6890 2003-07-08 Bernhard Herzog <[email protected]>
6891
6892 * test/runtests.py (main): Make the default output less verbose
6893 and add a verbosity option (-v) to get the old output
6894
6895 2003-07-08 Bernhard Herzog <[email protected]>
6896
6897 * Resources/XML/thuban-0.9.dtd: New. This will become the DTD for
6898 0.9.
6899
6900 * Thuban/Model/transientdb.py (TransientJoinedTable.JoinType):
6901 New. Return the join type
6902
6903 * Thuban/Model/save.py (SessionSaver.write_session): Use new 0.9
6904 DTD
6905 (SessionSaver.write_data_containers): Save the join type for
6906 joined tables
6907
6908 * Thuban/Model/load.py (SessionLoader.__init__): Add the new 0.9
6909 namespace
6910 (SessionLoader.start_jointable): Handle the jointype attribute
6911
6912 * test/test_load_0_8.py: New. Effectively a copy of test_load.py
6913 as of Thuban 0.8. These are now tests to determine whether Thuban
6914 can still read files generated by Thuban 0.8
6915
6916 * test/test_load.py (LoadSessionTest.dtd)
6917 (TestSingleLayer.file_contents)
6918 (TestLayerVisibility.file_contents, TestLabels.file_contents)
6919 (TestLayerProjection.file_contents)
6920 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
6921 (TestJoinedTable.file_contents)
6922 (TestLoadError.file_contents): Update for new DTD
6923 (TestJoinedTable.file_contents, TestJoinedTable.setUp): Add test
6924 for new join type attribute
6925
6926 * test/test_save.py (SaveSessionTest.dtd)
6927 (SaveSessionTest.testEmptySession)
6928 (SaveSessionTest.testSingleLayer)
6929 (SaveSessionTest.testLayerProjection)
6930 (SaveSessionTest.testRasterLayer)
6931 (SaveSessionTest.testClassifiedLayer)
6932 (SaveSessionTest.test_dbf_table)
6933 (SaveSessionTest.test_joined_table): Update for new DTD
6934 (SaveSessionTest.test_joined_table): Add test for new join type
6935 attribute
6936
6937 2003-07-04 Bernhard Herzog <[email protected]>
6938
6939 * Thuban/Model/table.py (_find_dbf_column_names): New. Helper
6940 function for table_to_dbf
6941 (table_to_dbf): Deal with names longer than the 10 character limit
6942
6943 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
6944 doc-string
6945 (TestTableToDBF.test_table_to_dbf_long_col_names): New test for
6946 long column names
6947
6948 2003-07-03 Bernhard Herzog <[email protected]>
6949
6950 * Doc/manual/thuban-manual.xml: Fix the CVS Revision Tag syntax
6951
6952 2003-07-03 Bernhard Herzog <[email protected]>
6953
6954 * Doc/manual/thuban-manual.xml, Doc/manual/README: New. Skeleton
6955 for the Thuban manual and README with some basic information about
6956 the manual
6957
6958 2003-07-03 Bernhard Herzog <[email protected]>
6959
6960 * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
6961 Update doc-string
6962 (TransientJoinedTable.create): Do not modify the column objects of
6963 the input tables in place and copy all columns of the input tables
6964 into the joined table after all.
6965
6966 * test/test_transientdb.py
6967 (TestTransientTable.test_transient_joined_table_same_column_name):
6968 Update to reflect the new behavior
6969 (TestTransientTable.test_transient_joined_table_with_equal_column_names):
6970 Update to reflect the new behavior
6971 (TestTransientTable.test_transient_joined_table_name_collisions_dont_modify_in_place):
6972 New test case for a bug which modified the column objects in place
6973
6974 2003-07-02 Jonathan Coles <[email protected]>
6975
6976 * Thuban/Model/classgen.py (generate_singletons,
6977 generate_uniform_distribution, generate_quantiles,
6978 GenQuantiles0): Make sure maxValue isn't less than
6979 one, otherwise we could divide by zero.
6980
6981 * test/test_classgen.py (ClassGenTest.doClassRangeTest,
6982 ClassGenTest.doClassSingleTest): Call doBoundsTest to
6983 check the end classification groups against the
6984 proper property values.
6985 (ClassGenTest.doBoundsTest): New. Checks the first and
6986 last classification groups to make sure their properties
6987 are the correct upper and lower bounds for a color ramp.
6988
6989 2003-07-02 Jonathan Coles <[email protected]>
6990
6991 * Thuban/Model/classgen.py (generate_singletons,
6992 generate_uniform_distribution, generate_quantiles,
6993 GenQuantiles0): The denominator was one to high when
6994 calculating the index for the ramp causing the index
6995 to never to reach one.
6996
6997 2003-07-02 Jonathan Coles <[email protected]>
6998
6999 Changed the singature of ClassGroupRange.__init__ and
7000 ClassGroupRange.SetRange() so that the min/max values are
7001 passed as a tuple. This makes a better calling scheme for
7002 when a Range object is passed instead.
7003
7004 * Thuban/Model/classgen.py: Fixed parameters to
7005 ClassGroupRange constructor.
7006
7007 * Thuban/Model/classification.py (ClassGroupRange.__init__):
7008 Consolidate the min/max parameters into a single _range which
7009 can either be a tuple or a Range object.
7010 (ClassGroupRange.SetRange): Consolidate the min/max parameters
7011 into a single _range which can either be a tuple or a Range object.
7012
7013 * Thuban/Model/load.py (SessionLoader.start_clrange): Fix
7014 call to ClassGroupRange constructor to use a tuple.
7015
7016 * Thuban/Model/layer.py (Layer.SetClassification): Switch
7017 the classification instance variable to the new class
7018 before calling _set_layer otherwise subscribers to a
7019 LAYER_CHANGED event will not see any difference.
7020
7021 * test/test_classification.py: Fix tests of ClassGroupRange
7022 so that they use the new signature.
7023
7024 * test/test_load.py: Fix use of ClassGroupRange so that it
7025 uses the new signature.
7026
7027 * test/test_load_0_2.py: Fix use of ClassGroupRange so that it
7028 uses the new signature.
7029
7030 * test/test_save.py: Fix use of ClassGroupRange so that it
7031 uses the new signature.
7032
7033
7034 2003-07-01 Jonathan Coles <[email protected]>
7035
7036 * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.
7037 Import used objects/class from color.
7038 (generate_singletons): We don't
7039 need the numGroups parameter anymore because we are using
7040 the new ramps with GetProperties().
7041 (generate_uniform_distribution): Use new ramp method
7042 GetProperties().
7043 (generate_quantiles, GenQuantiles0): Use new ramp method
7044 GetProperties().
7045 (CustomRamp.SetNumGroups): Removed. The ramps now map
7046 a value from 0 to 1 to class properties so the number
7047 of groups is not needed ahead of time.
7048 (CustomRamp.next): Removed. CustomRamp does not support
7049 interation anymore.
7050 (CustomRamp.GetProperties): Returns a ClassGroupProperties
7051 object based on the index value from 0 to 1 that is
7052 passed to it.
7053 (GreyRamp, RedRamp, GreenRamp, BlueRamp, GreenToRedRamp):
7054 Made into instances of Monochromatic class instread of
7055 deriving from it.
7056 (HotToCold.SetNumGroups): Removed. See CustomRamp.
7057 (HotToCold.next): Removed. See CustomRamp.
7058
7059 * Thuban/Model/classification.py: Fixes RTbug #1973, 1971.
7060 (Classification.SetField, Classification.SetFieldType):
7061 Replaced with SetFieldInfo.
7062 (Classification.SetFieldInfo): New. Does a better job of
7063 what SetField and SetFieldType used to do by combining
7064 their function since they should really always be done
7065 at the same time.
7066 (Classification.SetLayer): Renamed to _set_layer.
7067 (Classification._set_layer): Should only be called from
7068 Layer's SetClassification. This does not cause a recursive
7069 call as SetLayer did because we know that Layer knows about
7070 the classification.
7071
7072 * Thuban/Model/color.py: Fixes RTbug #1971.
7073 (_Transparent): Renamed from Transparent so it doesn't
7074 conflict with the module variable.
7075 (Transparent, Black): Renamed from Color.Transparent,
7076 Color.Black so they are not class variables.
7077
7078 * Thuban/Model/layer.py: Fixes RTbug #1971, 1973.
7079 (Layer.Destroy): We don't need to call SetClassification
7080 anymore to clear out the back reference in the classifcation
7081 to the layer. It's better to set it to None using _set_layer,
7082 and we won't be creating another clas object too.
7083 (Layer.SetClassification): Classification._set_layer is not
7084 recursive so remove all the locking variables. Also clean
7085 up the code so that it remains unchanged if something fails.
7086
7087 * Thuban/Model/load.py: Fixes RTbug #1971.
7088 (SessionLoader.start_classification): Call
7089 Classification.SetFieldInfo().
7090
7091 * Thuban/Model/save.py: Removed import of Color which wasn't
7092 being used.
7093
7094 * Thuban/UI/classgen.py: Fixes RTbug #1972.
7095 (ClassGenDialog.__init__): Color ramps are now instances
7096 already so we don't need to create any new objects.
7097 (ClassGenDialog.OnOK): Check for numGroups is no longer
7098 necessary because we never use it.
7099
7100 * Thuban/UI/classifier.py: Fixes RTbug #1971.
7101 (Classifier.__BuildClassification, Classifier.__SetGridTable):
7102 Call Classification.SetFieldInfo() instead of SetFieldType.
7103
7104 * Thuban/UI/renderer.py: Fixes RTbug #1971.
7105
7106 * Thuban/UI/view.py: Fixes RTbug #1974, 1971.
7107 (MapCanvas.__init__): Subscribe to the idle time event. Set
7108 background color to white.
7109 (MapCanvas.OnPaint): Set a flag indicating that we should
7110 render the map during idle time. If we already have a bitmap
7111 just draw it now.
7112 (MapCanvas.OnIdle): New. Render the map only during idle time.
7113 This also fixes a problem with the busy cursor under gtk.
7114
7115 * test/test_classgen.py (ClassGenTest.test_generate_singletons):
7116 Fix calls to generate_singletons because the signature changed.
7117
7118 * test/test_classification.py: Fix color references and
7119 change calls to Classification.[SetField|SetFieldType] to
7120 SetFieldInfo.
7121
7122 * test/test_load.py: Fix color references.
7123
7124 * test/test_load_0_2.py: Fix color references.
7125
7126 * test/test_save.py (SaveSessionTest.testClassifiedLayer):
7127 Change calls to Classification.[SetField|SetFieldType] to
7128 SetFieldInfo.
7129
7130 2003-07-01 Frank Koormann <[email protected]>
7131
7132 MERGE from the greater-ms3 branch.
7133
7134 * test/test_transientdb.py
7135 (TestTransientTable.test_transient_joined_table_with_equal_column_names):
7136 New. Test join of two tables with partly equal column names.
7137
7138 * Thuban/Model/transientdb.py (TransientJoinedTable.create):
7139 If duplicates in left and right tables column names are found,
7140 append '_' (underscores) to the name until it is unique.
7141 Create always new internal names for the resulting table and reference
7142 columns in the join statement with <table>.<column>
7143
7144 2003-07-01 Bernhard Herzog <[email protected]>
7145
7146 * test/test_transientdb.py
7147 (TestTransientTable.test_transient_joined_table_same_column_name):
7148 New. Test whether joining on columns with the same names in both
7149 tables works.
7150
7151 * Thuban/Model/transientdb.py (TransientJoinedTable.create): Make
7152 sure to use the right internal names even when joining on field
7153 with the same names in both tables. Also, detect duplicate names
7154 in the joined table correctly.
7155
7156 2003-07-01 Frank Koormann <[email protected]>
7157
7158 * Thuban/UI/renderer.py (ExportRenderer.render_legend):
7159 Reverse List of layers to render in same order as in desktop legend.
7160
7161 2003-06-30 Jonathan Coles <[email protected]>
7162
7163 * Thuban/version.py (make_tuple): Takes a version string
7164 and splits it into a tuple of at most three integers.
7165 Used make_tuple() to make tuple versions of the version
7166 numbers.
7167
7168 * Thuban/UI/about.py: Add Thuban email addresses.
7169
7170 2003-06-30 Jonathan Coles <[email protected]>
7171
7172 * Thuban/version.py: SQLite/PySQLite version dependencies
7173 were too high.
7174
7175 2003-06-30 Jonathan Coles <[email protected]>
7176
7177 * Thuban/version.py: Update version to 0.8.1
7178
7179 * MANIFEST.in: Added Projections so that default.proj is
7180 included.
7181
7182 2003-06-26 Jonathan Coles <[email protected]>
7183
7184 New About box with lots more information including library
7185 versions and credits. More/better version checking before
7186 Thuban starts.
7187
7188 * Thuban/UI/about.py: New. New About box that displays
7189 library version information and credits.
7190
7191 * Thuban/version.py: Added new 'versions' dictionary which
7192 contains the verions of various libraries which are checked
7193 when the module loads.
7194 (verify_versions): Check all version numbers and returns
7195 a list of errors.
7196
7197 * Thuban/UI/classifier.py (Classifier.__EnableButtons):
7198 Reset the status of the buttons as the situation warrants,
7199 but in a better more reliable way by not relying on the
7200 current status to determine what needs to change.
7201
7202 * Thuban/UI/main.py (wxCHECK_VERSION): Removed. Not needed.
7203 (verify_versions): Remove most of the code since it is
7204 now in Thuban.version.verify_versions.o
7205
7206 * Thuban/UI/mainwindow.py (MainWindow.About): Call new
7207 About box in Thuban.UI.about.
7208
7209 * extensions/thuban/gdalwarp.cpp (get_gdal_version): New.
7210 Returns the version of gdal library being used as a string.
7211
7212 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
7213 Removed.
7214 (get_proj_version): Return the version of PROJ that the file
7215 was compiled with.
7216 (get_gtk_version): Return th version of GTK that the file
7217 was compiled with.
7218
7219 2003-06-25 Jonathan Coles <[email protected]>
7220
7221 * Thuban/UI/classifier.py (Classifier.EditSymbol): The parent
7222 of the SelectPropertiesDialog should be self so the window
7223 appears on top.
7224 (ClassGroupPropertiesCtrl.DoEdit): The parent
7225 of the SelectPropertiesDialog should be self so the window
7226 appears on top.
7227
7228 * Thuban/UI/resource.py: Cleaned up how we determine file
7229 extensions.
7230 (GetImageResource): Return an wxImage from our Resources.
7231
7232 2003-06-24 Jonathan Coles <[email protected]>
7233
7234 * Thuban/UI/renderer.py (ExportRenderer.render_legend):
7235 Check that a layer has a classification before trying
7236 to get it. Raster layers don't have classifications.
7237
7238 2003-06-23 Jonathan Coles <[email protected]>
7239
7240 * setup.py: Add Resources/XML to resource list.
7241
7242 2003-06-23 Jonathan Coles <[email protected]>
7243
7244 * setup.cfg: Fix copyright dates
7245
7246 2003-06-23 Jonathan Coles <[email protected]>
7247
7248 * MANIFEST.in: Update with Resources/XML
7249
7250 * setup.py: Don't include Locale resources yet as we don't
7251 have any and it causes problems building the distribution
7252 for Windows. Update version to 0.8.0.
7253
7254 * Doc/thuban.dtd: Removed since it is now in Resources/XML.
7255
7256 * Thuban/UI/mainwindow.py: Add blank line at the end because
7257 file was not being read correctly building the Windows
7258 distribution.
7259
7260 2003-06-23 Jonathan Coles <[email protected]>
7261
7262 * Thuban/UI/mainwindow.py (MainWindow.About): Fix text.
7263
7264 * Thuban/version.py: Temporarily update longversion for
7265 the 0.8 release so that it doesn't have the cvs revision.
7266
7267 2003-06-23 Jonathan Coles <[email protected]>
7268
7269 * Thuban/UI/common.py (ThubanBeginBusyCursor): Call wxSafeYield
7270 to make sure that we don't create reentrant possibilities with
7271 wxYield.
7272
7273 * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxBeginBusyCursor()
7274 directly to avoid the wxSafeYield() call which generates an
7275 OnPaint event causing infinite recursion. Don't try to catch
7276 exception anymore. This was for before there were limits on map
7277 scaling.
7278
7279 2003-06-23 Bernhard Herzog <[email protected]>
7280
7281 Bug fix for RT #1961:
7282
7283 * Thuban/Model/load.py (SessionLoader.start_derivedshapesource):
7284 Register DerivedShapestores with the session
7285
7286 * Thuban/Model/session.py (Session.Tables): Make sure each table
7287 is only listed once.
7288
7289 * test/test_load.py (TestJoinedTable.test): Add check_format call.
7290 Update file contents to match the one written out.
7291
7292 2003-06-20 Bernhard Herzog <[email protected]>
7293
7294 * test/xmlsupport.py (SaxEventLister.startElementNS)
7295 (SaxEventLister.endElementNS): Do not include the qname. Python
7296 2.2.1 and 2.2.2 and 2.2.3 differ in this regard. In 2.2.1 qname it
7297 is (presumably incorrectly) None, whereas it's a string with the
7298 element name in the later versions.
7299
7300 * test/test_xmlsupport.py (TestEventList.test_even_list_simple)
7301 (TestEventList.test_even_list_namespace): Update tests to reflect
7302 the new behaviour
7303 (TestEventList.test_even_list_id_normalization): Fix doc-string
7304
7305 2003-06-20 Jonathan Coles <[email protected]>
7306
7307 * Thuban/Model/layer.py (BaseLayer.HasShapes): New. Overridden
7308 by deriving classes to determine if that layer supports shapes.
7309 (Layer): Override HasShapes and return true.
7310
7311 * Thuban/UI/classgen.py: Use Thuban[Begin|End]BusyCursor()
7312 instead of a direct call to wx[Begin|End]CusyCursor().
7313 (GenUniquePanel._OnRetrieve): Set busy cursor while retrieving
7314 table data.
7315
7316 * Thuban/UI/common.py (ThubanBeginBusyCursor, ThubanEndBusyCursor):
7317 New. Wrappers around the wxWindows functions that allow us to
7318 make additional calls such as wxYield which gives the native
7319 system a chance to update the cursor correctly.
7320
7321 * Thuban/UI/tableview.py: Use Thuban[Begin|End]BusyCursor()
7322 instead of a direct call to wx[Begin|End]CusyCursor().
7323
7324 * Thuban/UI/view.py: Use Thuban[Begin|End]BusyCursor()
7325 instead of a direct call to wx[Begin|End]CusyCursor().
7326 (MapCanvas.find_shape_at): Check if the current search layer
7327 support shapes, otherwise go on to the next layer.
7328
7329 * test/test_layer.py: Add tests in each type of layer for
7330 HasClassification() and HasShapes()
7331
7332 2003-06-20 Jonathan Coles <[email protected]>
7333
7334 * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after
7335 turning on the busy cursor to allow the system to change the
7336 cursor before we begin painting. This fixes a problem that
7337 was occuring only under GTK. Fixes RTbug #1840.
7338
7339 2003-06-20 Bernhard Herzog <[email protected]>
7340
7341 * Resources/XML/thuban-0.8.dtd: New DTD for the new file format
7342 version.
7343
7344 * Thuban/Model/save.py (sort_data_stores): New. Make topological
7345 sort of the data sources so they can be written with sources that
7346 data sources that depend on other data sources come after the
7347 sources they depend on.
7348 (SessionSaver.__init__): Add idmap instance variable to map from
7349 objects to the ids used in the file.
7350 (SessionSaver.get_id, SessionSaver.define_id)
7351 (SessionSaver.has_id): New. Methods to manage the idmap
7352 (SessionSaver.write): Use thuban-0.8.dtd
7353 (SessionSaver.write_session): Add a namespace on the session and
7354 write out the data sources before the maps.
7355 (SessionSaver.write_data_containers): New. Write the data
7356 containers.
7357 (SessionSaver.write_layer): Layer elements now refer to a
7358 shapestore and don't contain filenames anymore.
7359
7360 * Thuban/Model/load.py (LoadError): Exception class to raise when
7361 errors in the files are discovered
7362 (SessionLoader.__init__): Define dispatchers for elements with a
7363 thuban-0.8 namespace too.
7364 (SessionLoader.check_attrs): New helper method to check and
7365 convert attributes
7366 (AttrDesc): New. Helper class for SessionLoader.check_attrs
7367 (SessionLoader.start_fileshapesource)
7368 (SessionLoader.start_derivedshapesource)
7369 (SessionLoader.start_filetable, SessionLoader.start_jointable):
7370 Handlers for the new elements in the new fileformat
7371 (SessionLoader.start_layer): Handle the shapestore attribute in
7372 addition to filename.
7373 (SessionLoader.start_table, SessionLoader.end_table): Removed.
7374 They were never used in the old formats and aren't needed for the
7375 new.
7376
7377 * Thuban/Model/session.py (Session.DataContainers): New method to
7378 return all "data containers", i.e. shapestores and tables
7379
7380 * test/xmlsupport.py (SaxEventLister.__init__)
7381 (SaxEventLister.startElementNS, sax_eventlist): Add support to
7382 normalize IDs.
7383
7384 * test/test_xmlsupport.py
7385 (TestEventList.test_even_list_id_normalization): New test case for
7386 id normalization
7387
7388 * test/test_load.py (LoadSessionTest.check_format): Use ID
7389 normalization
7390 (LoadSessionTest.thubanids, LoadSessionTest.thubanidrefs): New
7391 class atrributes used for ID normalization
7392 (TestSingleLayer, TestLayerVisibility, TestLabels.test)
7393 (TestLayerProjection.test, TestRasterLayer.test): Adapt to new
7394 file format
7395 (TestJoinedTable): New test for loading sessions with joined
7396 tables.
7397 (TestLoadError): New. Test whether missing required attributes
7398 cause a LoadError.
7399
7400 * test/test_save.py (SaveSessionTest.thubanids)
7401 (SaveSessionTest.thubanidrefs): New class attributes for ID
7402 normalization in .thuban files.
7403 (SaveSessionTest.compare_xml): Use id-normalization.
7404 (SaveSessionTest.testEmptySession)
7405 (SaveSessionTest.testLayerProjection)
7406 (SaveSessionTest.testRasterLayer)
7407 (SaveSessionTest.testClassifiedLayer): Adapt to new file format.
7408 (SaveSessionTest.testLayerProjection): The filename used was the
7409 same as for testSingleLayer. Use a different one.
7410 (SaveSessionTest.test_dbf_table)
7411 (SaveSessionTest.test_joined_table): New test cases for saving the
7412 new data sources structures.
7413 (TestStoreSort, MockDataStore): Classes to test the sorting of the
7414 data stores for writing.
7415
7416 * test/runtests.py: Add CVS keywords
7417
7418 2003-06-20 Jonathan Coles <[email protected]>
7419
7420 * test/test_session.py
7421 (UnreferencedTablesTests.test_unreferenced_tables_with_joins):
7422 Use the cultural_landmark-point.dbf file for the store so that
7423 the table rows and shape count match.
7424
7425 2003-06-20 Jonathan Coles <[email protected]>
7426
7427 * Thuban/Model/data.py (DerivedShapeStore.__init__): Raise
7428 an exception if the number of shapes is different from the
7429 number of rows in the table. Address RTbug #1933.
7430
7431 * test/test_layer.py (TestLayer.test_derived_store): Add
7432 a test for the new exception in DerivedShapeStore.__init__.
7433
7434 * test/support.py (FloatTestCase): Removed since there is
7435 already FloatComparisonMixin. Fixes RTbug #1954.
7436 (FloatComparisonMixin.assertFloatEqual): Include test for
7437 infinity that was part of FloatTestCase.
7438
7439 * test/test_range.py (RangeTest): Inherit from
7440 support.FloatComparisonMixin now that we don't have
7441 support.FloatTestCase.
7442
7443 2003-06-20 Bernhard Herzog <[email protected]>
7444
7445 * test/test_save.py (SaxEventLister, sax_eventlist): Removed. Use
7446 the implementation in xmlsupport instead.
7447 (SaveSessionTest.compare_xml): sax_eventlist is now in xmlsupport
7448
7449 * test/test_proj.py: Import sax_eventlist from xmlsupport instead
7450 of test_save
7451
7452 2003-06-20 Bernhard Herzog <[email protected]>
7453
7454 * test/test_load.py (LoadSessionTest.check_format): New helper
7455 method to make sure the test files we load might have been written
7456 by the current thuban version.
7457 (ClassificationTest.TestLayers, TestSingleLayer.test)
7458 (TestLayerVisibility.test, TestClassification.test)
7459 (TestLabels.test, TestLayerProjection.test, TestRasterLayer.test):
7460 Add check_format() calls and fix the thuban data to match the data
7461 that would be written by saving the session loaded from it.
7462
7463 * test/xmlsupport.py (SaxEventLister, sax_eventlist): Copies of
7464 the same class and function in test_save.
7465
7466 * test/test_xmlsupport.py (TestEventList): New. test cases for
7467 sax_eventlist
7468
7469 2003-06-20 Bernhard Herzog <[email protected]>
7470
7471 * Resources/XML/thuban.dtd: Add comment about which versions of
7472 Thuban are covered by this DTD
7473 (map): Fix content model for layers and raster layers. There can
7474 be any number or layers and raster layers in any order.
7475
7476 2003-06-20 Jonathan Coles <[email protected]>
7477
7478 This is mainly about fixing RTbug #1949.
7479
7480 * Thuban/Model/classification.py: Remove "from __future__"
7481 import statement since python 2.2 is the earliest supported
7482 version.
7483
7484 * Thuban/Model/proj.py (Projection.GetProjectedUnits): New.
7485 Currently returns PROJ_UNITS_METERS or PROJ_UNITS_DEGREES
7486 depending on the units this projection *forwards* into.
7487
7488 * Thuban/Model/save.py (SessionSaver.write_classification):
7489 Remove unnecessary use of lambdas and nested functions.
7490
7491 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Do scale
7492 adjustment here if the map projection uses degrees.
7493
7494 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Remove
7495 scale adjust code since it is now done before calling
7496 this method. Don't do anything if the map projection
7497 is None.
7498
7499 2003-06-19 Bernhard Herzog <[email protected]>
7500
7501 Move version specific load tests to their own file.
7502
7503 * test/test_load.py: Expand the doc-string to explain a bit how to
7504 handle file format changes.
7505 (TestClassification.test): Update the docstring as this test is
7506 not about Thuban 0.2 anymore.
7507
7508 * test/test_load_0_2.py: New file with the load tests for thuban
7509 files created with Thuban 0.2 and earlier.
7510
7511 2003-06-19 Bernhard Herzog <[email protected]>
7512
7513 Add XML validation to some of the tests. Validation will only be
7514 done if pyRXP is installed (http://reportlab.com/xml/pyrxp.html).
7515 To make the DTD available to the test cases it's moved into
7516 Resources/XML
7517
7518 * Resources/XML/thuban.dtd: New. This is now the real Thuban DTD
7519 for versions up to and including 0.2. Two slight changes: added an
7520 encoding specification and fixed the comment which refered to
7521 GRASS, not Thuban
7522
7523 * test/xmlsupport.py: New support module for tests involving XML.
7524 Currently there's a mix-in class for XML validation.
7525
7526 * test/test_xmlsupport.py: New. Tests for the xmlsupport module
7527
7528 * test/test_save.py (SaveSessionTest): Derive from ValidationTest
7529 so that we can validate the
7530 (SaveSessionTest.testEmptySession)
7531 (SaveSessionTest.testSingleLayer)
7532 (SaveSessionTest.testSingleLayer)
7533 (SaveSessionTest.testLayerProjection)
7534 (SaveSessionTest.testRasterLayer)
7535 (SaveSessionTest.testClassifiedLayer): Validate the generated XML
7536
7537 * test/runtests.py (main): Call print_additional_summary instead
7538 of print_garbage_information
7539
7540 * test/support.py (resource_dir): New function to return the
7541 "Resource" subdirectory
7542 (print_additional_summary): New function to combine several
7543 summary functions
7544 (run_tests): Use print_additional_summary instead of calling
7545 print_garbage_information directly
7546
7547 2003-06-19 Bernhard Herzog <[email protected]>
7548
7549 * Doc/thuban.dtd (classification): Correct the content model of
7550 the classification element.
7551 (projection): Add the "name" attribute
7552
7553 2003-06-19 Frank Koormann <[email protected]>
7554
7555 MERGE from the greater-ms3 branch.
7556
7557 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Apply conversion to
7558 scale if projection is latlong to get better estimate.
7559
7560 Fix problem of hidden properties dialog under windows after double
7561 click on layer tree:
7562 The tree control always gets an Expanded / Collapsed event after
7563 the ItemActivated on double click, which raises the main window again.
7564 We add a second ItemActivated event to the queue, which simply
7565 raises the already displayed window.
7566
7567 * Thuban/UI/legend.py (LegendTree.__init__): Instance variable
7568 raiseProperties initialized to prevent endless loops
7569 (LegendTree._OnItemActivated): Depending on self.raiseProperties
7570 simply raise the properties or open the dialog and issue a second
7571 event.
7572
7573 2003-06-18 Jonathan Coles <[email protected]>
7574
7575 * setup.py: Fix a few problems that occured under Windows.
7576
7577 2003-06-18 Jonathan Coles <[email protected]>
7578
7579 When Thuban loaded the map was redrawn twice because the
7580 legend was being opened after the mainwindow was created
7581 and not during its creation. This meant the map was drawn
7582 initially and then had to be redrawn when the legend
7583 caused the display to change. Now the legend is opened
7584 in the mainwindow constructor which resolves this issue.
7585
7586 Also, although we were checking for the existence of
7587 gdal and gdalwarp modules, the gdalwarp extension was
7588 still being compiled (which may fail if the system doesn't
7589 have gdal installed). the build_ext command to setup.py
7590 now accepts the flags --with-gdal and --without-gdal.
7591 If --without-gdal is specified setup.py will try to
7592 use the gdal parameters specified by gdal-config. Under
7593 windows, those parameters have to be set in setup.py
7594 as with proj4 an wxWindows.
7595
7596 * setup.py: Use a list instead of seperate variables for
7597 extension parameters so we can create a generic function
7598 that runs an appropriate *-config script.
7599 (run_cs_script): Renamed from run_wx_script and modified
7600 to accept a second argument which is a list of lists to
7601 be filled in by the values returned from running the command.
7602 (thuban_build_ext): New. Extends the build_ext command and
7603 provides the options --with-gdal/--without-gdal which then
7604 optionally includes the gdalwarp extension.
7605
7606 * Thuban/Model/resource.py: First check if we can import
7607 the gdalwarp Thuban extension before checking for gdal.
7608 Also added some comments.
7609
7610 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Check if
7611 the map is None which may be the case if none has been loaded
7612 yet.
7613
7614 * Thuban/UI/main.py (main): Remove call to ShowLegend.
7615
7616 * Thuban/UI/mainwindow.py (MainWindow.__init__): Call ShowLegend().
7617
7618 * Thuban/UI/renderer.py: Check for gdal support before importing
7619 gdalwarp.
7620 (MapRenderer.render_map): Only try to optimize if we have gdal
7621 support otherwise nothing will get drawn.
7622
7623 * Thuban/UI/view.py (MapCanvas.FitMapToWindow): This may be called
7624 during startup before a map has been created. Check if map is None
7625 before using it and do nothing if it is.
7626
7627 2003-06-17 Jonathan Coles <[email protected]>
7628
7629 Fix the problem with raster layers under Windows that caused
7630 Thuban to crash. The view should respond to layer projection
7631 changed events to update the display. Changes to a projection
7632 should not cause the map to be set to full extent.
7633
7634 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
7635 current_map_proj to remember the current map projection so that
7636 when the projection changes we know what the previous projection
7637 was.
7638 (MapCanvas.SetMap): Unsubscribe and subscribe to
7639 LAYER_PROJECTION_CHANGED events.
7640 (MapCanvas.projection_changed): Split into two methods that respond
7641 to map and layer projection changes.
7642 (MapCanvas.map_projection_changed): New. Takes the current view and
7643 projects it using the new projection. This does not cause the
7644 map to be redrawn at full extent.
7645 (MapCanvas.layer_projection_changed): New. Cause a redraw which
7646 will draw each layer in its new projection.
7647
7648 * extensions/thuban/bmpdataset.cpp (BMPDataset::Open): Call
7649 VSIFClose() not VSIFCloseL() to close the file. Fixes a crash
7650 under Windows.
7651
7652 * extensions/thuban/gdalwarp.cpp (MFILENAME): Padding should be
7653 to twice sizeof(void*) because there are two digits for each
7654 hex byte.
7655
7656 2003-06-16 Bernhard Herzog <[email protected]>
7657
7658 Update to the layer interface: Direct access to the table,
7659 shapetable, shapefile and filename attributes is now actively
7660 deprecated by issuing deprecation warnings for all places where
7661 this happens.
7662
7663 * Thuban/Model/layer.py (Layer.__getattr__): New. Implement access
7664 to the instance variables table, shapetable, shapefile and
7665 filename via __getattr__ so that we can issue a deprecation
7666 warning.
7667 (Layer.SetShapeStore): Don't set the deprecated instance variables
7668 any more
7669 (Layer.SetShapeStore): Don't use deprecated layer instance
7670 variables
7671 (Layer.Destroy): No need to explicitly remove the instance
7672 variables any more
7673 (Layer.GetFieldType, Layer.Shape): Don't use deprecated layer
7674 instance variables
7675
7676 * Thuban/UI/classgen.py (ClassGenDialog.__init__)
7677 (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve)
7678 (GenQuantilesPanel.GetList, GenQuantilesPanel.OnRetrieve): Don't
7679 use deprecated layer instance variables
7680
7681 * Thuban/UI/classifier.py (Classifier.__init__): Don't use
7682 deprecated layer instance variables
7683
7684 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
7685 (IdentifyGridCtrl.selected_shape): Don't set the deprecated layer
7686 instance variables
7687
7688 * Thuban/UI/tableview.py (LayerTableGrid.select_shapes): Don't use
7689 deprecated layer instance variables
7690
7691 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Don't use
7692 deprecated layer instance variables
7693
7694 * Thuban/Model/save.py (SessionSaver.write_layer): Don't use
7695 deprecated layer instance variables
7696
7697 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer)
7698 (MapRenderer.polygon_render_param): Don't use deprecated layer instance
7699 variables
7700
7701 * test/runtests.py (main): Turn Thuban's deprecation warnings into
7702 errors so that they're cought by the tests
7703
7704 * test/test_load.py (TestSingleLayer.test): Don't use deprecated
7705 layer instance variables
7706
7707 2003-06-16 Jonathan Coles <[email protected]>
7708
7709 Fix a problem under Windows whereby if the user double-clicks on a
7710 layer in the legend that tree item will expand or collapse as well
7711 as open the layer properties dialog. The state of the tree item
7712 should not be affected.
7713
7714 * Thuban/UI/legend.py (LegendTree.__init__): Add instance variable
7715 preventExpandCollapse and subscribe to expanding and collapsing
7716 events.
7717 (LegendTree.OnItemExpandCollapse): New. Responds to expanding and
7718 collapsing events and will veto the event if it has been triggered
7719 by the user double clicking on a layer.
7720 (LegendTree._OnItemActivated): Set preventExpandCollapse to indicate
7721 that an expanding/collapsing event should be vetoed.
7722
7723 2003-06-13 Bernhard Herzog <[email protected]>
7724
7725 * Thuban/UI/classifier.py (Classifier.OnClose)
7726 (Classifier.map_layers_removed)
7727 (Classifier.layer_shapestore_replaced): Unsubscribe the messages
7728 in OnClose and not in map_layers_removed or
7729 layer_shapestore_replaced to make sure it always happens when the
7730 dialog is closed
7731
7732 2003-06-13 Jonathan Coles <[email protected]>
7733
7734 This puts back a fix for Windows where a panel is needed so that
7735 the background of the table view appears correctly.
7736
7737 * Thuban/UI/tableview.py (TableFrame.__init__): Add a panel
7738 object that can be used by derived classes to place any
7739 controls (including the grid) onto.
7740 (QueryTableFrame.__init__): Use the panel as the parent window
7741 for all the controls. Reparent the grid so that the panel is
7742 the parent. Call UpdateStatusText() to correctly initialize
7743 the status bar.
7744
7745 2003-06-13 Jonathan Coles <[email protected]>
7746
7747 * Thuban/UI/dialogs.py (ThubanFrame): New: a class that inherits
7748 from wxFrame (as opposed to wxDialog like the other classes)
7749 but otherwise behaves like the other classes. This is needed
7750 for the TableView which isn't really a dialog and needs to
7751 have a status bar and control buttons.
7752
7753 * Thuban/UI/tableview.py (TableGrid.__init__): Create an
7754 instance variable to keep track of how many rows are selected.
7755 Subscribe once to the the events we are interested in.
7756 (ThubanGrid.OnRangeSelect): Only handle event if event handling
7757 hasn't been turned off.
7758 (ThubanGrid.OnSelectCell): Only handle event if event handling
7759 hasn't been turned off.
7760 (ThubanGrid.ToggleEventListeners): Rather than subscribe None
7761 as an event listener (which changes the event handler stack)
7762 simply set an instance variable to False. This is checked in
7763 the event handlers.
7764 (ThubanGrid.GetNumberSelected): Return the number of currently
7765 selected rows.
7766 (TableFrame): Inherit from ThubanFrame so we can have a
7767 status bar and control buttons.
7768 (QueryTableFrame.__init__): Create a status bar. Fixes RTbug #1942.
7769 Explicitly set which items are selected in the operator choice and
7770 action choice so there is always a valid selection. Fixes RTbug #1941.
7771 Subscribe to grid cell selection events so we can update the
7772 status bar.
7773 (QueryTableFrame.UpdateStatusText): Update the status bar with
7774 how many rows are in the grid, how many columns, and how many
7775 rows are selected.
7776 (QueryTableFrame.OnGridSelectRange, QueryTableFrame.OnGridSelectCell):
7777 Call UpdateStatusText when cells are (de)selected.
7778 (QueryTableFrame.OnQuery): Use the string value in the value
7779 combo if either the selected item index is 0 or if the string
7780 cannot be found in the predefined list (this happens if the
7781 user changes the text). Fixes RTbug #1940.
7782 Only turn off the grid event listeners if there a query comes
7783 back with a none empty list of ids. in the case that the list
7784 is empty this causes a grid.ClearSelection() call to actually
7785 clear the grid selection which causes the selected items in
7786 the map to be deselected. Fixes RTbug #1939.
7787
7788 * test/test_save.py (XMLWriterTest.Encode): Check return values.
7789 Fixes RTbug #1851.
7790
7791 2003-06-13 Bernhard Herzog <[email protected]>
7792
7793 * Thuban/UI/identifyview.py (IdentifyView.__init__): Call
7794 self.selected_shape with the current selection to make sure the
7795 contents of the dialog are up to date when it's shown for the
7796 first time.
7797 The dialog used to work without this by luck. The recent fix to
7798 the connector module 'broke' a 'feature' the identify view was
7799 relying on, i.e that subscribing to a message in response to
7800 receiving a message of that type would mean that the new
7801 subscriber would also be called for the same message.
7802
7803 2003-06-12 Jonathan Coles <[email protected]>
7804
7805 * extensions/thuban/gdalwarp.cpp: Removed debug printing as
7806 the image is rendered. Fixes RTbug #1937.
7807
7808 2003-06-12 Jonathan Coles <[email protected]>
7809
7810 * Thuban/Lib/fileutil.py: As is done under Windows, create the
7811 user directory if it doesn't exist on a posix system.
7812 Fixes RTbug #1815.
7813
7814 * Thuban/Model/resource.py (get_user_proj_files): Moved the
7815 called to get_application_dir here, so that the directory
7816 will only be called if this method is invoked.
7817
7818 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Clear
7819 the projfilepath if no projection is selected.
7820
7821 2003-06-12 Jonathan Coles <[email protected]>
7822
7823 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Don't draw
7824 the scalebar if the current map has no projection set.
7825
7826 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Set the
7827 projfilepath label to just the basename of the projection file
7828 rather than include the entire path.
7829
7830 * Thuban/Model/resource.py: Fix missed proj functions that
7831 needed to be renamed.
7832
7833 2003-06-12 Jonathan Coles <[email protected]>
7834
7835 * Thuban/Model/classification.py: Removed assert statements that
7836 tested if the variable was an instance of Color.
7837
7838 * Thuban/Model/color.py (Color): Remove commented code that isn't
7839 used.
7840 (Transparent): Renamed from NoColor. Doesn't inherit from Color.
7841 Fixes RTbug #1835.
7842 (Transparent.__eq__, Transparent.__ne, Transparent.__repr): New.
7843 Needed now that the class doesn't inherit from Color.
7844
7845 2003-06-12 Jonathan Coles <[email protected]>
7846
7847 * test/test_save.py (XMLWriterTest.testEncode): Explicitly
7848 check unicode strings.
7849
7850 * test/test_layer.py: Check for existence of gdal.
7851
7852 2003-06-12 Jonathan Coles <[email protected]>
7853
7854 * Thuban/Model/xmlreader.py: New. Contains the XMLReader class
7855 that was in load.py
7856
7857 * Thuban/Model/xmlwriter.py: New. Contains the XMLWriter class
7858 that was in save.py
7859
7860 2003-06-12 Jonathan Coles <[email protected]>
7861
7862 This is largely a collection of bug fixes. We also handle the
7863 case where gdal is not on the system. The XMLReader and XMLWriter
7864 classes were moved into there own files to resolve some circular
7865 import references and because they shouldn't really be in the
7866 file that is dediciated to reading/writing session files since
7867 they are also used elsewhere.
7868
7869 * Thuban/Model/classgen.py: Renamed functions to follow the
7870 function_names_with_underscores style. Fixes RTbug #1903.
7871 (calculate_quantiles): Raise ValueError if 'percents' is invalid.
7872
7873 * Thuban/Model/layer.py: Import gdal only if it available.
7874 (RasterLayer): Handle the case where the gdal library is unavailable.
7875 Addresses RTbug #1877.
7876
7877 * Thuban/Model/load.py (XMLReader): Moved into seperate file
7878 xmlreader.py.
7879
7880 2003-06-12 Jonathan Coles <[email protected]>
7881
7882 This is largely a collection of bug fixes. We also handle the
7883 case where gdal is not on the system. The XMLReader and XMLWriter
7884 classes were moved into there own files to resolve some circular
7885 import references and because they shouldn't really be in the
7886 file that is dediciated to reading/writing session files since
7887 they are also used elsewhere.
7888
7889 * Thuban/Model/classgen.py: Renamed functions to follow the
7890 function_names_with_underscores style. Fixes RTbug #1903.
7891 (calculate_quantiles): Raise ValueError if 'percents' is invalid.
7892
7893 * Thuban/Model/layer.py: Import gdal only if it available.
7894 (RasterLayer): Handle the case where the gdal library is unavailable.
7895 Addresses RTbug #1877.
7896
7897 * Thuban/Model/load.py (XMLReader): Moved into seperate file
7898 xmlreader.py.
7899
7900 * Thuban/Model/save.py (escape, XMLWriter): Moved into seperate
7901 file xmlwriter.py.
7902
7903 * Thuban/Model/resource.py: Renamed functions to following the
7904 function_names_with_underscores style.
7905 (has_gdal_support): New function that returns true if the gdal
7906 library is available. Addresses RTbug #1877.
7907
7908 * Thuban/UI/application.py (ThubanApplication.OpenSession):
7909 Display a message box if the gdal library is not available, but
7910 only if there are any layers that would use it. Addresses RTbug #1877.
7911
7912 * Thuban/UI/classgen.py: Use renamed projection resource functions.
7913 (GenUniformPanel.__CalcStepping): Fix a slight discrepency
7914 when using integers versus floats.
7915
7916 * Thuban/UI/mainwindow.py (_has_gdal_support): New. Used to
7917 determine if the "Add Image Layer" menu option should be
7918 greyed out or not. Addresses RTbug #1877.
7919
7920 * Thuban/UI/projdialog.py: Use renamed projection resource functions.
7921
7922 * Thuban/UI/renderer.py (MapRenderer.render_map): Only try to
7923 optimize if a raster layer is visible. Fixes RTbug #1931.
7924 Only draw the raster layer if the gdal library is available.
7925 Addresses RTbug #1877.
7926
7927 * test/test_classgen.py: Add tests for generate_singletons,
7928 generate_uniform_distribution, generate_quantiles. Fixes RTbug #1903.
7929 (test_calculate_quantiles): Fix some tests to catch the new
7930 ValueError that is raised.
7931
7932 * test/test_proj.py: Use renamed projection resource functions.
7933
7934 * test/test_save.py (SaveSessionTest.testClassifiedLayer): New
7935 test for saving classified layers. Fixes RTbug #1902.
7936 (XMLWriterTest): New. Tests the XMLWriter class. Fixes RTbug #1851.
7937
7938 2003-06-12 Jan-Oliver Wagner <[email protected]>
7939
7940 Fix for http://intevation.de/rt/webrt?serial_num=1900.
7941
7942 * Thuban/UI/multiplechoicedialog.py: New. A multiple choice dialog.
7943
7944 * Thuban/UI/mainwindow.py: import wxMultipleChoiceDialog from
7945 multiplechoicedialog.py rather than from the wxPython library.
7946
7947 2003-06-11 Frank Koormann <[email protected]>
7948
7949 * Thuban/Lib/fileutil.py (get_application_dir): Minor stability
7950 update.
7951
7952 2003-06-11 Frank Koormann <[email protected]>
7953
7954 * Thuban/Lib/fileutil.py (get_application_dir): New function to
7955 determine the absolute .thuban/thuban directory under
7956 "posix" (os.expanduser) and "nt" (read AppData registry key).
7957
7958 * Thuban/Model/resource.py: Use get_application_dir
7959
7960 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
7961 Use get_application_dir.
7962
7963 2003-06-10 Bernhard Herzog <[email protected]>
7964
7965 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Subscribe to
7966 the messages MAP_LAYERS_REMOVED messages
7967 (LayerTableFrame.OnClose): Unsubscribe from it.
7968 (LayerTableFrame.map_layers_removed): New. Receiver for
7969 MAP_LAYERS_REMOVED. Close the dialog when the layer whose the
7970 dialog is showing is removed.
7971
7972 2003-06-10 Bernhard Herzog <[email protected]>
7973
7974 * Thuban/Lib/connector.py (Connector.Issue): Iterate over a copy
7975 of the receivers list so that unsubscribing in a receiver doesn't
7976 modify it while iterating over it.
7977
7978 * test/test_connector.py
7979 (ConnectorTest.test_disconnect_in_receiver): New. Test whether
7980 unsubscribing in a receiver works correctly. See docstring for
7981 details
7982
7983 2003-06-10 Bernhard Herzog <[email protected]>
7984
7985 * Thuban/Model/messages.py (LAYER_SHAPESTORE_REPLACED): New
7986 message.
7987
7988 * Thuban/Model/layer.py (Layer.SetShapeStore): Send
7989 LAYER_SHAPESTORE_REPLACED when the shapestore changes. A
7990 LAYER_CHANGED will still be sent if the classification changes.
7991
7992 * Thuban/UI/classifier.py (Classifier.__init__): Add the map as
7993 parameter so we can subscribe to some of its messages
7994 (Classifier.__init__): Subscribe to the map's MAP_LAYERS_REMOVED
7995 and the layer's LAYER_SHAPESTORE_REPLACED
7996 (Classifier.unsubscribe_messages): New. Unsubscribe from message
7997 subscribed to in __init__
7998 (Classifier.map_layers_removed)
7999 (Classifier.layer_shapestore_replaced): receivers for the messages
8000 subscribed to in __init__. Unsubscribe and close the dialog
8001
8002 * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): Pass
8003 the map to the Classifier dialog
8004
8005 * test/test_layer.py (SetShapeStoreTests): Derive from
8006 SubscriberMixin as well so we can test messages
8007 (SetShapeStoreTests.setUp): Subscribe to some of the layer's
8008 messages
8009 (SetShapeStoreTests.tearDown): Clear the messages again
8010 (SetShapeStoreTests.test_sanity): Expand the doc-string and check
8011 for the modified flag too
8012 (SetShapeStoreTests.test_set_shape_store_modified_flag): New test
8013 to check whether SetShapeStore sets the modified flag
8014 (SetShapeStoreTests.test_set_shape_store_different_field_name)
8015 (SetShapeStoreTests.test_set_shape_store_same_field)
8016 (SetShapeStoreTests.test_set_shape_store_same_field_different_type):
8017 Add tests for the messages. This checks both the new
8018 LAYER_SHAPESTORE_REPLACED and the older LAYER_CHANGED
8019
8020 2003-06-06 Jan-Oliver Wagner <[email protected]>
8021
8022 * Thuban/UI/mainwindow.py: Improved and partly added help texts for
8023 the menu items.
8024
8025 2003-06-05 Frank Koormann <[email protected]>
8026
8027 * Thuban/UI/identifyview.py (IdentifyView.__init__):
8028 Layout reimplemented without panel. Make life easier to fit the list
8029 in the dialog.
8030
8031 2003-06-05 Frank Koormann <[email protected]>
8032
8033 * Thuban/UI/projdialog.py (ProjFrame.__init__): Fill the projchoice
8034 once on initialisation (Former implementation resulted in multiple
8035 entries for each projection).
8036 (ProjFrame.__FillAvailList): selectProj as second optional parameter,
8037 if set, select the projection found under the specified name. This
8038 overwrites any other selection estimate.
8039 Removed projchoice filling from this method.
8040 (ProjFrame._OnSave, ProjFrame._OnAddToList):
8041 Updated call of ProjFrame.__FillAvailList
8042 (LCCPanel._DoLayout): Moved parameter controls in more common order.
8043
8044 * Resources/Projections/defaults.proj: Extended defaults representing
8045 various common European projections.
8046
8047 2003-06-05 Frank Koormann <[email protected]>
8048
8049 * Thuban/UI/identifyview.py (IdentifyView.__init__):
8050 Use ListCtrl instead of GridCtrl
8051
8052 * Thuban/Model/resource.py:
8053 Guess location of .thuban directory from tempdir parent directory.
8054
8055 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
8056 Guess location of .thuban directory from tempdir parent directory.
8057
8058 2003-06-04 Bernhard Herzog <[email protected]>
8059
8060 Do not cache the values returned by the tree widget's
8061 GetFirstChild and GetNextChild methods because it led to lots of
8062 segfaults. The new way requires more brute force but is more
8063 reliable.
8064
8065 * Thuban/UI/legend.py (LegendTree.__init__): Remove instance
8066 variable layer2id
8067 (LegendTree.find_layer): New method to do with brute force what
8068 layer2id tried to accomplish
8069 (LegendTree._OnMsgLayerChanged)
8070 (LegendTree._OnMsgLayerTitleChanged, LegendTree.__ShowHideLayer):
8071 Use find_layer instead of layer2id
8072 (LegendTree.__RemoveLayer, LegendTree.__AddLayer): No need to
8073 update layer2id anymore
8074 (LegendTree._OnMsgMapLayersRemoved)
8075 (LegendTree._OnMsgMapLayersAdded): Get by without layer2id.
8076
8077 2003-06-03 Thomas Koester <[email protected]>
8078
8079 * Thuban/Model/classgen.py (GenQuantiles0): New function.
8080
8081 2003-06-02 Bernhard Herzog <[email protected]>
8082
8083 * Thuban/UI/mainwindow.py (layer_rename command, table_rename command):
8084 New commands.
8085 (main_menu): Add the new commands.
8086 (MainWindow.TableRename): New. Implementation of the table_rename
8087 command.
8088 (MainWindow.RenameLayer): New. Implementation of the layer_rename
8089 command.
8090
8091 * Thuban/Model/session.py (Session.AddTable): call self.changed to
8092 set the modified flag
8093
8094 * test/test_session.py (TestSessionSimple.test_add_table): Test
8095 whether the modified flag is set properly
8096
8097 * Thuban/Model/base.py (TitledObject.SetTitle): Call changed
8098 instead of issue so that the modified flags get updated.
8099
8100 * test/test_base.py (SomeTitledObject): Derive from Modifiable
8101 instead of Publisher to reflect reality better and to accomodate
8102 the fact that SetTitle now calls changed instead of issue
8103
8104 2003-06-02 Bernhard Herzog <[email protected]>
8105
8106 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Resource
8107 acquisition has to happen before the try in a try-finally.
8108
8109 2003-06-02 Bernhard Herzog <[email protected]>
8110
8111 * Thuban/UI/legend.py (LegendTree._OnMsgMapLayersRemoved): It's
8112 possible that a layer is removed that is not currently selected in
8113 the legend so don't check for this.
8114
8115 2003-05-30 Bernhard Herzog <[email protected]>
8116
8117 * Thuban/Model/layer.py (Layer.Destroy): Set all instance
8118 variables to None that have direct or indirect references to
8119 shapefiles or dbf files to make sure that they do go away and the
8120 files are closed.
8121
8122 2003-05-30 Bernhard Herzog <[email protected]>
8123
8124 * Thuban/UI/legend.py (LegendTree.GetRootItem): Reset
8125 availImgListIndices when a new image list is created
8126
8127 2003-05-30 Bernhard Herzog <[email protected]>
8128
8129 * Thuban/UI/legend.py (LegendTree.__init__): New instance variable
8130 changing_selection to indicate whether the LegendTree code itself
8131 is currently changing the selection
8132 (LegendTree.normalize_selection): New method to normalize the
8133 selection by selecting the layer item even if the user clicked on
8134 the classification.
8135 (LegendTree._OnSelChanged): normalize the selection. This works
8136 around a bug in wx which doesn't keep track of the selection
8137 properly when subtrees are deleted.
8138
8139 2003-05-30 Bernhard Herzog <[email protected]>
8140
8141 * Thuban/UI/view.py (MapCanvas.set_view_transform): Limit the
8142 maximum and minimum scale factors.
8143
8144 * test/test_classgen.py (ClassGenTest.test): Update to reflect the
8145 changes in classgen.py
8146
8147 2003-05-30 Jonathan Coles <[email protected]>
8148
8149 * Thuban/Model/classgen.py: Remove ClassGenerator class but make
8150 all the methods functions. Fixes RTBug #1903.
8151
8152 * Thuban/Model/map.py (Map.TopLayer, Map.BottomLayer): Renamed
8153 to MoveLayerToTop and MoveLayerToBottom respectively. Fixes
8154 RTBug #1907.
8155
8156 * Thuban/UI/classgen.py: Use classgen functions that were part
8157 of the ClassGenerator class. Put try/finally blocks around
8158 code that uses wxBeginBusyCursor()/wxEndBusyCursor(). Fixes
8159 RTBug #1904.
8160
8161 * Thuban/UI/classifier.py: Remove unused import of ClassGenerator.
8162
8163 * Thuban/UI/legend.py: The legend was cleared and repopulated any
8164 time something changed which caused some state to be lost such
8165 as which children were expanded or collapsed. Fixes RTBug #1901.
8166 (LegendTree._OnMsgMapLayersAdded): Add only new layers.
8167 (LegendTree.__OnMsgMapLayersRemoved): Remove layers that exist in
8168 the legend but not in the map.
8169 (LegendTree.__FillTree): Move main functionality out into smaller
8170 methods that can be used by other methods.
8171 (LegendTree.__FillTreeLayer): Reuse old slots in the image list
8172 if they are available.
8173 (LegendTree.DeleteAllItems): Renamed from __DeleteAllItems so
8174 that we override the wxTreeCtrl method. Iterate over children
8175 and call __RemoveLayer.
8176 (LegendTree.__AddLayer): New. Add a new layer to the legend.
8177 (LegendTree.__RemoveLayer): Remove a layer from the legend.
8178 (LegendTree.DeleteChildren): New, overrides wxTreeCtrl method.
8179 Should only be called with the id of a layer branch.
8180 (LegendTree.GetRootItem): New, overrides wxTreeCtrl method.
8181 Returns the root item or creates one if necessary.
8182
8183 * Thuban/UI/renderer.py (MapRenderer.draw_raster_layer): Call
8184 ProjectRasterFile with tuple arguments instead of strings.
8185
8186 * Thuban/UI/tableview.py (QueryTableFrame.OnQuery): Wrap code
8187 with try/finally. Fixes RTBug #1904.
8188
8189 * Thuban/UI/view.py (MapCanvas.OnPaint): Wrap code
8190 with try/finally. Fixes RTBug #1904.
8191 (MapCanvas.FitSelectedToWindow): If a single point is selected
8192 simply center it on the display. Fixes RTBug #1849.
8193
8194 * extensions/thuban/gdalwarp.cpp: Removed code that allowed gdalwarp
8195 to be compiled as a standalone app. Now the code can only be
8196 called from Python which simplifies the parameter passing.
8197 (ProjectRasterFile): Handle Python arguments. Remove code that
8198 checks for a destination dataset. Add more clean up code.
8199
8200 * test/test_map.py (TestMapWithContents.test_raise_layer_top,
8201 TestMapWithContents.test_lower_layer_bottom):
8202 Test Map.MoveLayerToTop() and Map.MoveLayerToBottom() respectively.
8203 Fixes RTBug #1907.
8204
8205 * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Apply a full
8206 extent to the map when the legend is toggled. Fixes RTBug #1881.
8207
8208 2003-05-29 Jan-Oliver Wagner <[email protected]>
8209
8210 * Thuban/UI/tableview.py (LayerTableFrame.OnClose): Bug-fix: Now
8211 unsubscribes all that is subcribed in __init__.
8212
8213 2003-05-28 Bernhard Herzog <[email protected]>
8214
8215 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer)
8216 (MainWindow.CanDuplicateLayer): New methods to implement the
8217 Layer/Duplicate command.
8218 (layer_duplicate command): New.
8219 (main_menu): Add layer_duplicate to the Layer menu.
8220
8221 2003-05-28 Bernhard Herzog <[email protected]>
8222
8223 * Thuban/UI/tableview.py (NullRenderer.Draw): New. Our own
8224 renderer so that NULL/None values get displayed differently (by a
8225 gray rectangle).
8226 (TableGrid.__init__): Override the default renderers
8227
8228 2003-05-28 Bernhard Herzog <[email protected]>
8229
8230 * Thuban/Model/layer.py (Layer.SetShapeStore): Set the
8231 classification to "None" if the type of the field has changed.
8232
8233 * test/test_layer.py (SetShapeStoreTests): New. Class with a few
8234 test for the Layer.SetShapeStore method
8235
8236 2003-05-28 Jan-Oliver Wagner <[email protected]>
8237
8238 * Thuban/Model/layer.py (Layer.TreeInfo): Fixed a bug (a layer
8239 does not necessarily have a filename).
8240
8241 2003-05-28 Jan-Oliver Wagner <[email protected]>
8242
8243 * Thuban/UI/mainwindow.py (MainWindow.TableClose, MainWindow.TableShow):
8244 sort the selection list for the dialog.
8245
8246 2003-05-28 Frank Koormann <[email protected]>
8247
8248 * extensions/thuban/wxproj.cpp
8249 (project_point): Removed cast to int for projected point coordinates.
8250 (shape_centroid): Return last point if all polygon vertices fall
8251 to one point.
8252
8253 2003-05-28 Bernhard Herzog <[email protected]>
8254
8255 * Thuban/UI/mainwindow.py (_can_unjoin): Add doc-string and cope
8256 with layers that don't have shapestores, i.e. raster layers.
8257
8258 2003-05-28 Bernhard Herzog <[email protected]>
8259
8260 * Thuban/Model/table.py (DBFTable.__init__): Omit the extension
8261 when determining the title from the filename.
8262
8263 * test/test_dbf_table.py (TestDBFTable.test_title): Update to
8264 reflect changes in the way the title is derived from the filename
8265
8266 2003-05-28 Frank Koormann <[email protected]>
8267
8268 * Thuban/UI/mainwindow.py (MainWindow.TableShow):
8269 Added wxDEFAULT_DIALOG_STYLE to show table dialog styles.
8270
8271 2003-05-27 Bernhard Herzog <[email protected]>
8272
8273 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages): Also
8274 delegate SelectedLayer.
8275 (MainWindow.LayerUnjoinTable): Implement.
8276 (_can_unjoin): New. Helper function for the sensitivity of the
8277 layer/unjoin command.
8278
8279 * Thuban/Model/data.py (ShapefileStore.OrigShapeStore)
8280 (DerivedShapeStore.OrigShapeStore): New. Return the original
8281 shapestore. Used to figure out how to unjoin.
8282 (DerivedShapeStore.Shapefile): Fix a typo.
8283
8284 2003-05-27 Bernhard Herzog <[email protected]>
8285
8286 * Thuban/UI/join.py (JoinDialog): Extend to handle layer joins as
8287 well
8288 (JoinDialog.__init__): Use the layer parameter and only build the
8289 left choice when a layer is given
8290 (JoinDialog.OnJoin): Handle layer joins as well
8291 (JoinDialog.OnLeftTable, JoinDialog.OnRightTable): Handle the case
8292 that the user selects the "Select..." item. The sensitivitly
8293 updating is now in update_sensitivity
8294 (JoinDialog.y): New method to refactor the sensitivity update of
8295 the join button into its own method.
8296
8297 * Thuban/UI/mainwindow.py (MainWindow.LayerJoinTable): Implement.
8298
8299 2003-05-27 Bernhard Herzog <[email protected]>
8300
8301 * Thuban/UI/mainwindow.py (table_close command): Make it sensitive
8302 iff there are unreferenced tables in the session
8303
8304 2003-05-27 Bernhard Herzog <[email protected]>
8305
8306 * Thuban/Model/messages.py (TABLE_REMOVED): New message.
8307
8308 * Thuban/Model/session.py (Session.UnreferencedTables): New method
8309 to return tables that are not referenced by other tables or shape
8310 stores and can be removed.
8311 (Session.RemoveTable): Issue a TABLE_REMOVED message after
8312 removing the table
8313
8314 * Thuban/UI/mainwindow.py: Remove unused imports
8315 (MainWindow.TableClose): Implement.
8316
8317 * Thuban/UI/tableview.py (TableFrame.__init__): Subscribe to some
8318 messages so that the frame will be automatically closed when a new
8319 session is opened or the table is removed.
8320 (TableFrame.OnClose): Unsubscribe the Subscriptions made in
8321 __init__
8322 (TableFrame.close_on_session_replaced)
8323 (TableFrame.close_on_table_removed): New. Subscribers that close
8324 the window
8325
8326 * test/test_session.py (TestSessionMessages.test_remove_table)
8327 (TestSessionSimple.test_remove_table): Move the test to
8328 TestSessionSimple and add test for the TABLE_REMOVED message
8329 (TestSessionBase.setUp): Also subscribe to TABLE_REMOVED
8330 (TestSessionSimple.test_unreferenced_tables) New. Test for the
8331 UnreferencedTables method.
8332 (UnreferencedTablesTests): New. Class with some more sophisticated
8333 tests for UnreferencedTables.
8334
8335 2003-05-27 Frank Koormann <[email protected]>
8336
8337 * Thuban/UI/tableview.py (QueryTableFrame.__init__): The "_S_election"
8338 display has some unwanted side effects. Removed again.
8339
8340 2003-05-27 Frank Koormann <[email protected]>
8341
8342 * Resources/Bitmaps/legend_icon_layer.xpm: New, icon for legend.
8343
8344 * Thuban/UI/legend.py (LegendTree.__FillTree): Use "legend_icon_layer"
8345
8346 2003-05-27 Jan-Oliver Wagner <[email protected]>
8347
8348 * test/test_menu.py (MenuTest.test): Added test for
8349 Menu.RemoveItem().
8350
8351 * Thuban/UI/menu.py (Menu.RemoveItem): New. Remove an item from
8352 the menu.
8353
8354 2003-05-27 Frank Koormann <[email protected]>
8355
8356 Nonmodal dialogs without parent (i.e. they can fall behind the main
8357 window)
8358
8359 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Explicitly destroy
8360 all dialogs in the dialogs dictionary and the canvas.
8361
8362 * Thuban/UI/dialogs.py (NonModalNonParentDialog): New class, without
8363 parent, i.e. can fall behind other windows.
8364 (NonModalDialog.OnClose): Check is dialog is in mainwindow.dialog
8365 dictionary before removing it.
8366
8367 * Thuban/UI/classifier.py: Dialog derived from NonModalNonParentDialog
8368
8369 * Thuban/UI/projdialog.py: Dialog derived from NonModalNonParentDialog
8370 * Thuban/UI/tableview.py: Dialog derived from NonModalNonParentDialog
8371 * Thuban/UI/tree.py: Dialog derived from NonModalNonParentDialog
8372
8373 2003-05-27 Bernhard Herzog <[email protected]>
8374
8375 * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): New. Open a
8376 tableview dialog
8377 (MainWindow.TableShow): Use ShowTableView to open the dialogs.
8378 Also, don't use the table's titles as the dialog names. The titles
8379 aren't guaranteed to be unique.
8380 (MainWindow.TableOpen): Open a table view dialog after opening the
8381 table
8382
8383 2003-05-27 Bernhard Herzog <[email protected]>
8384
8385 * Thuban/UI/mainwindow.py: Remove the Table/Hide menu item. Its
8386 effect can be achieved by simply closing the window showing the
8387 table.
8388 (MainWindow.TableHide): Removed.
8389 (main_menu): Removed "table_hide"
8390
8391 2003-05-27 Frank Koormann <[email protected]>
8392
8393 Fix legend tree display problems under Win32
8394
8395 * Thuban/UI/legend.py: BMP_SIZE_W = 15
8396 (LegendTree.__FillTree): Display "legend_icon_map.xpm" with layer title.
8397 (LegendTree.__FillTreeLayer): Explicitely set SelectedImage.
8398
8399 * Resources/Bitmaps/legend_icon_map.xpm: New icon for legend.
8400
8401 2003-05-27 Jan-Oliver Wagner <[email protected]>
8402
8403 * Thuban/UI/menu.py (Menu.InsertSeparator): Additional optional parameter
8404 'after' now allows to insert separators almost anywhere in the menu.
8405
8406 2003-05-27 Frank Koormann <[email protected]>
8407
8408 * Thuban/UI/tableview.py (QueryTableFrame.__init__): Underline the
8409 "S" of selection box label to hint on hot key (Alt-S). Works under
8410 Win32 but is ignored under GTK.
8411
8412 2003-05-26 Frank Koormann <[email protected]>
8413
8414 * Thuban/UI/projdialog.py (ProjFrame.__do_layout, ProjPanel._DoLayout):
8415 Center Choices.
8416
8417 2003-05-26 Bernhard Herzog <[email protected]>
8418
8419 Remove the Precision methods again. They're too DBF specific to be
8420 part of the table interface and they're only used in table_to_dbf
8421 anyway.
8422
8423 * Thuban/Model/transientdb.py (TransientTableBase.Width):Use a
8424 fixed precision of 12 for doubles.
8425 (TransientTableBase.Precision): Removed
8426 (AutoTransientTable.Width): Delegate to self.table.
8427
8428 * Thuban/Model/table.py (DBFTable.Precision)
8429 (MemoryTable.Precision): Removed.
8430 (MemoryTable.Width): Use a fixed precision of 12 for doubles.
8431 (table_to_dbf): Use a fixed precision of 12 for floats unless the
8432 column object specifies something else.
8433
8434 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): New.
8435 test for table_to_dbf
8436
8437 2003-05-26 Bernhard Herzog <[email protected]>
8438
8439 * test/test_transientdb.py
8440 (TestTransientTable.run_iceland_political_tests): Fix a comment.
8441
8442 2003-05-26 Bernhard Herzog <[email protected]>
8443
8444 * Thuban/UI/mainwindow.py (MainWindow.TableOpen): Real
8445 implementation. Mark parts of the file format strings for
8446 localization.
8447
8448 * Thuban/Model/session.py (Session.OpenTableFile): New. Open a dbf
8449 file and add the table to the tables managed by the session
8450
8451 * test/test_session.py (TestSessionSimple.test_open_table_file):
8452 New. test case for OpenTableFile
8453
8454 2003-05-26 Jan-Oliver Wagner <[email protected]>
8455
8456 * Thuban/UI/controls.py, Thuban/UI/identifyview.py, Thuban/UI/join.py,
8457 Thuban/UI/labeldialog.py, Thuban/UI/mainwindow.py,
8458 Thuban/UI/proj4dialog.py, Thuban/UI/tableview.py, Thuban/UI/view.py:
8459 Replace the true/false of wxWindows by True/False of Python 2.2.1.
8460
8461 2003-05-26 Jan-Oliver Wagner <[email protected]>
8462
8463 * Thuban/UI/tableview.py (LayerTableFrame.__init__): If there is
8464 already a selection present, update the grid accordingly.
8465
8466 * Thuban/UI/mainwindow.py (MainWindow.TableShow): Make the dialog
8467 resizeable and increase its initial size.
8468
8469 2003-05-26 Frank Koormann <[email protected]>
8470
8471 Table export functionality
8472
8473 * Thuban/Model/table.py (DBFTable.Width, MemoryTable.Width):
8474 Return width (in characters) for a column.
8475 (DBFTable.Precision, MemoryTable.Precision): Return decimal precision.
8476 (table_to_dbf): Write table to dbf file.
8477 (table_to_csv): Write table to csv file.
8478
8479 * Thuban/Model/transientdb.py (TransientTableBase.Width,
8480 TransientTableBase.Precision): Return column width and precision.
8481
8482 * Thuban/UI/tableview.py (QueryTableFrame.OnSaveAs): Call table_to_dbf
8483 or table_to_csv depending on file selection.
8484
8485 * test/test_dbf_table.py:
8486 Test table_to_dbf (extension of former part of test).
8487
8488 * test/test_csv_table.py:
8489 Test table_to_csv.
8490
8491 2003-05-23 Jan-Oliver Wagner <[email protected]>
8492
8493 * Thuban/UI/join.py (JoinDialog.OnJoin): Use _() for strings.
8494 Use QueryTableFrame instead of TableFrame.
8495
8496 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Prefix the
8497 table window with 'Layer Table:' instead of 'Table:'.
8498
8499 2003-05-23 Jan-Oliver Wagner <[email protected]>
8500
8501 Give all tables a title via mix-in TitledObject.LayerShowTable
8502
8503 * Thuban/Model/base.py (TitledObject.SetTitle): Call method 'issue'
8504 only if it exists.
8505
8506 * Thuban/Model/table.py (DBFTable, MemoryTable): mix-in TitledObject
8507 and call its init-method with a default title. Remove Title() method.
8508
8509 * Thuban/Model/transientdb.py (TransientTable, TransientJoinedTable,
8510 AutoTransientTable): mix-in TitledObject and call its init-method with
8511 a default title. Remove Title() method.
8512
8513 2003-05-23 Bernhard Herzog <[email protected]>
8514
8515 * Thuban/Model/session.py (Session.AddShapeStore): Define
8516 AddShapeStore analogously to AddTable.
8517
8518 * test/test_session.py (TestSessionSimple.test_add_shapestore):
8519 New. Test for AddShapeStore
8520
8521 2003-05-23 Jan-Oliver Wagner <[email protected]>
8522
8523 Introducing QueryTableFrame and a very coarse ShowTable implementation.
8524
8525 * Thuban/UI/tableview.py (LayerTableFrame, QueryTableFrame): Split the
8526 class LayerTableFrame into two classes, LayerTableFrame and QueryTableFrame.
8527 The latter implements the selection GUI without dependency on a layer.
8528 LayerTableFrame now is derived from QueryTableFrame and connects
8529 to a layer.
8530
8531 * Thuban/UI/mainwindow.py (MainWindow.TableShow): A very coarse
8532 implementation that still needs work.
8533
8534 * Thuban/Model/layer.py (Layer.TreeInfo): Added filename.
8535
8536 2003-05-22 Frank Koormann <[email protected]>
8537
8538 * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
8539 Added "outer_join = False" as optional parameter.
8540 (TransientJoinedTable.create): If outer join is true, perform a
8541 "LEFT OUTER JOIN" instead of "JOIN", which preserves all records of
8542 the left table. Records not matching are filled with 0 / None.
8543
8544 * Thuban/UI/join.py (JoinDialog.__init__): Checkbox for outer join.
8545 (JoinDialog.OnJoin): Consider outer join check box.
8546
8547 2003-05-22 Bernhard Herzog <[email protected]>
8548
8549 * Thuban/UI/join.py (JoinDialog.OnJoin): Use exc_info in a
8550 somewhat safer way. Storing the traceback in a local variable can
8551 lead to memory leaks
8552
8553 2003-05-22 Bernhard Herzog <[email protected]>
8554
8555 * Thuban/UI/join.py (JoinDialog.OnJoin): Make sure to really call
8556 the wxMessageDialog's Destroy() method.
8557
8558 2003-05-22 Frank Koormann <[email protected]>
8559
8560 * Thuban/UI/join.py (JoinDialog.__init__): Make use of
8561 TransientTable.Title()
8562
8563 2003-05-22 Frank Koormann <[email protected]>
8564
8565 Join Dialog, initial version.
8566
8567 * Thuban/UI/mainwindow.py (MainWindow.TableJoin): Removed print.
8568
8569 * Thuban/UI/join.py (JoinDialog): Functional implementation of
8570 former framework. Renamed Table1/Table2 to LeftTable/RightTable
8571 in all occurences.
8572
8573 * Thuban/Model/transientdb.py (TransientJoinedTable.__doc__):
8574 Typo fixed.
8575
8576 2003-05-22 Bernhard Herzog <[email protected]>
8577
8578 Give the tables titles so that the GUI can display more meaningful
8579 names. For now the titles are fixed but depend on e.g. filenames
8580 or the titles of the joined tables.
8581
8582 * Thuban/Model/transientdb.py (TransientTable.Title)
8583 (TransientJoinedTable.Title, AutoTransientTable.Title): New.
8584
8585 * Thuban/Model/table.py (DBFTable.Title, MemoryTable.Title): New.
8586
8587 * test/test_transientdb.py
8588 (TestTransientTable.test_auto_transient_table_title): New. Test
8589 for the Title method
8590 (TestTransientTable.test_transient_joined_table)
8591 (TestTransientTable.test_transient_table): Add test for the Title
8592 methods
8593
8594 * test/test_memory_table.py (TestMemoryTable.test_title): New.
8595 Test for the Title method
8596
8597 * test/test_dbf_table.py (TestDBFTable.test_title): New. Test for
8598 the Title method
8599
8600 2003-05-22 Bernhard Herzog <[email protected]>
8601
8602 * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
8603 Provide a better way to destroy the layers
8604 (TestLayer.test_base_layer, TestLayer.test_arc_layer)
8605 (TestLayer.test_point_layer, TestLayer.test_empty_layer)
8606 (TestLayer.test_polygon_layer, TestLayer.test_get_field_type): Use
8607 the new way to destroy the layers.
8608 (TestLayer.test_derived_store): New. Test for using a layer with a
8609 DerivedShapeStore
8610
8611 * Thuban/Model/layer.py (Layer.SetShapeStore): Only set the
8612 filename if the shape store actually has one.
8613
8614 2003-05-22 Bernhard Herzog <[email protected]>
8615
8616 * Thuban/Model/table.py (DBFTable.FileName): New. Accessor method
8617 for the filename
8618
8619 * test/test_dbf_table.py (TestDBFTable.test_filename): New. Test
8620 for the FileName method
8621 (TestDBFTableWriting.test_write): Fix spelling of filename
8622
8623 2003-05-22 Thomas Koester <[email protected]>
8624
8625 * Thuban/Model/range.py, test/test_range.py: Brought over new Range
8626 from SciParam that now really is immutable.
8627
8628 2003-05-22 Frank Koormann <[email protected]>
8629
8630 Layer Top/Bottom placement added to legend.
8631
8632 * Thuban/UI/legend.py
8633 (LegendPanel._OnMoveTop(), LayerPanel._OnMoveBottom): New, methods
8634 bound to tool events.
8635 (LegendTree.MoveCurrentItemTop(), LegendTree.MoveCurrentItemBottom):
8636 New, methods binding the event methods with the map methods.
8637
8638 * Thuban/Model/map.py (Map.TopLayer(), Map.BottomLayer()): New, place
8639 layer at top/bottom of layer stack.
8640
8641 * Resources/Bitmaps/top_layer.xpm: New button icon.
8642
8643 * Resources/Bitmaps/bottom_layer.xpm: New button icon.
8644
8645 2003-05-22 Bernhard Herzog <[email protected]>
8646
8647 * Thuban/Model/session.py (Session.RemoveTable): New method to
8648 remove tables
8649
8650 * test/test_session.py (TestSessionSimple.test_remove_table): New.
8651 Test for RemoveTable
8652
8653 2003-05-22 Thomas Koester <[email protected]>
8654
8655 * Thuban/Model/classgen.py: Added short module doc string and CVS id.
8656 (ClassGenerator.GenUniformDistribution): Use new Range __init__, too.
8657
8658 2003-05-22 Bernhard Herzog <[email protected]>
8659
8660 Implement a way to discover dependencies between tables and
8661 shapestores.
8662
8663 * Thuban/Model/transientdb.py (TransientTableBase.Dependencies)
8664 (TransientJoinedTable.Dependencies)
8665 (AutoTransientTable.SimpleQuery): New. Implement the dependencies
8666 interface
8667 (TransientJoinedTable.__init__): Keep tack of the original table
8668 objects in addition to the corresponding transient tables.
8669
8670 * Thuban/Model/table.py (DBFTable.Dependencies)
8671 (MemoryTable.Dependencies): New. Implement the dependencies
8672 interface
8673
8674 * Thuban/Model/data.py (ShapeTable): New. Helper class for
8675 ShapefileStore
8676 (ShapefileStore.__init__): Use ShapeTable instead of
8677 AutoTransientTable
8678 (ShapefileStore.Table, ShapefileStore.Shapefile): Add doc-strings
8679 (ShapefileStore.FileName, ShapefileStore.FileType): New. Accessor
8680 methods for filename and type
8681 (ShapefileStore.Dependencies): New. Implement the dependencies
8682 interface
8683 (DerivedShapeStore): New class to replace SimpleStore. The main
8684 difference to SimpleStore is that it depends not on a shapefile
8685 but another shapestore which expresses the dependencies a bit
8686 better
8687 (SimpleStore.__init__): Add deprecation warning.
8688
8689 * test/test_dbf_table.py (TestDBFTable.test_dependencies): New.
8690 Test for the Dependencies method.
8691
8692 * test/test_memory_table.py (TestMemoryTable.test_dependencies):
8693 New. Test for the Dependencies method.
8694
8695 * test/test_transientdb.py
8696 (TestTransientTable.test_auto_transient_table_dependencies): New.
8697 Test for the Dependencies method.
8698 (TestTransientTable.test_transient_joined_table): Add test for the
8699 Dependencies method.
8700
8701 * test/test_session.py (TestSessionSimple.setUp)
8702 (TestSessionSimple.tearDown): New. Implement a better way to
8703 destroy the sessions.
8704 (TestSessionSimple.test_initial_state)
8705 (TestSessionSimple.test_add_table): Bind session to self.session
8706 so that it's destroyed by tearDown
8707 (TestSessionSimple.test_open_shapefile): New. Test for
8708 OpenShapefile and the object it returns
8709
8710 2003-05-22 Bernhard Herzog <[email protected]>
8711
8712 * Thuban/Model/session.py (Session.AddTable): New method to
8713 register tables with the session.
8714 (Session.Tables): Return the tables registered with AddTable too.
8715
8716 * test/test_session.py (TestSessionSimple.test_add_table): New.
8717 Test case for the AddTable method
8718
8719 2003-05-22 Frank Koormann <[email protected]>
8720
8721 UI polishing updates: Place main buttons (OK, Cancel, etc) in the
8722 lower right corner, center labels for selections, initialize controls
8723 in reasonable order for keyboard navigation.
8724
8725 * Thuban/UI/projdialog.py (ProjFrame.__init__, ProjFrame.__doLayout)
8726 (ProjFrame.__DoOnProjAvail): Determine position of current projection
8727 using the wxListBox.FindString() method. Still a problem (#1886)
8728
8729 * Thuban/UI/classifier.py
8730 (Classifier.__init__, SelectPropertiesDialog.__init__)
8731
8732 * Thuban/UI/classgen.py (ClassGenDialog.__init__,
8733 (ClassGenDialog.__DoOnGenTypeSelect): Moved initialization of the
8734 different classification types from here to __init__.
8735 (GenUniquePanel.__init__): Set the column width of the first field
8736 in the Field ListCtrl to the full width.
8737
8738 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Rename 'Save As'
8739 Button to 'Export'. Center Buttons in Selection Box, set Focus to
8740 Grid.
8741 (LayerTableFrame.OnKeyDown()): New, bound to the grid with EVT_KEY_DOWN,
8742 changes focus to the Selection when pressing "Alt-S".
8743
8744 * Thuban/UI/legend.py (LegendTree.__SetVisibilityStyle): Only gray out
8745 the text if not visible. The italic font sometimes exceeds the
8746 rendering area.
8747
8748 2003-05-21 Jonathan Coles <[email protected]>
8749
8750 * Thuban/UI/dock.py (DockFrame): Rename references to _OnClose
8751 to OnClose so that Thuban closes correctly.
8752
8753 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Call
8754 DockFrame.OnClose, not DockFrame._OnClose.
8755
8756 2003-05-21 Jonathan Coles <[email protected]>
8757
8758 * Thuban/Model/classgen.py (ClassGenerator.GenQuantiles): Remove
8759 references to 'inf' and use new Range __init__ to pass floats
8760 directly rather than converting them to strings first.
8761 Fixes RTBug #1876.
8762
8763 * Thuban/Model/classification.py (ClassGroupRange.SetRange):
8764 Use new Range ___init__ to pass floats.
8765
8766 * Thuban/Model/layer.py (RasterLayer.__init__): Test if the
8767 filename is a valid image file. Throw IOError otherwise.
8768
8769 * Thuban/Model/range.py: Brought over new Range from SciParam that
8770 is immutable and has an __init__ which can accept floats.
8771
8772 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Move OpenShapefile
8773 into try block. AddLayer doesn't throw any exceptions anymore.
8774 (MainWindow.AddRasterLayer): Move constructor of RasterLayer into
8775 try block.
8776
8777 * Thuban/UI/projdialog.py (GeoPanel.__init__): Put Degrees as
8778 the first item in choices. Fixes RTBug #1882.
8779
8780 * Thuban/UI/renderer.py (MapRenderer.render_map): Check if scale
8781 has gone to 0 which is a serious problem. abort.
8782 (MapRenderer.draw_raster_layer): Catch IOError seperately and
8783 print the error from GDAL.
8784
8785 * Thuban/UI/tableview.py (TableGrid.__init__): Call
8786 ToggleEventListeners to turn on listening.
8787 (TableGrid.ToggleEventListeners): New. Turns event listening on
8788 and off so as to prevent excessive messages.
8789 (LayerTableFrame.OnQuery): Use TableGrid.ToggleEventListeners
8790 to suppress excessive messages when selecting many rows.
8791 Fixes RTBug #1880.
8792
8793 * Thuban/UI/view.py: Added checks against if scale == 0. This
8794 is a serious problem that can occur when an image without
8795 geo data is loading and causes the map projection bounds to
8796 go to infinity. Right now, the solution is to simply try
8797 to recover.
8798
8799 * extensions/thuban/cpl_mfile.cpp (MFILEClose): Make sure
8800 to set the MFILEReceiver attributes even if the data is NULL.
8801
8802 * extensions/thuban/gdalwarp.cpp: Improved the error handling
8803 and passed GDAL messages back up to the Python layer. Also
8804 tried to fix some memory leaks that were present in the original
8805 utility but didn't matter because the program aborted.
8806
8807 * test/test_range.py: Copied over tests from SciParam. Removed
8808 tests against importing. Fixes RTBug #1867.
8809
8810 2003-05-21 Bernhard Herzog <[email protected]>
8811
8812 * test/test_load.py: Remove unused imports and restructure the
8813 test code
8814 (LoadSessionTest): Split into one class for each test and turn
8815 LoadSessionTest itself into the base class for all such session
8816 tests.
8817 (ClassificationTest): New base class for load tests that test
8818 classifications
8819 (TestSingleLayer, TestLayerVisibility, TestClassification)
8820 (TestLabels, TestLayerProjection, TestRasterLayer): New classes
8821 for the individual tests
8822
8823 * test/support.py (FileLoadTestCase.filename): New base class for
8824 file loading tests
8825
8826 2003-05-21 Jan-Oliver Wagner <[email protected]>
8827
8828 * Resources/Projections/defaults.proj: Renamed 'Universal Transverse
8829 Mercator' to 'UTM Zone 32' as a more convenient example.
8830 Added 'Gauss Krueger Zone 6'.
8831
8832 * Data/iceland_sample_raster.thuban: political polygon now
8833 filled transparent to have the raster image visible at once.
8834
8835 2003-05-21 Frank Koormann <[email protected]>
8836
8837 * Thuban/UI/mainwindow.py (MainWindow): Renamed _OnClose() back to
8838 OnClose() to keep in sync with extensions. Internally Thuban
8839 still uses "underscored" names.
8840
8841 2003-05-20 Jonathan Coles <[email protected]>
8842
8843 This puts back Raster layer support. These layers support projections
8844 through the GDAL library. Currently, the CVS version is being used.
8845 There are no Debian packages available although this may change soon.
8846 A GDAL driver was extended to support writing to memory rather to
8847 files.
8848
8849 There is still some work that needs to be done, such as some error
8850 handling when loading invalid images or when there is a problem
8851 projecting the image. This putback simply checks in the majority
8852 of the work.
8853
8854 * setup.py: Add gdalwarp library extension.
8855
8856 * Thuban/Model/layer.py (BaseLayer.HasClassification): New.
8857 Defaults to False, but can be overridden by subclasses if they
8858 support classification.
8859 (RasterLayer): New. Defines a new layer that represents an
8860 image.
8861
8862 * Thuban/Model/load.py (SessionLoader.__init__): Add rasterlayer
8863 tag handler.
8864 (SessionLoader.start_layer): Encode the filename.
8865 (SessionLoader.start_rasterlayer, SessionLoader.end_rasterlayer):
8866 New. Supports reading a rasterlayer tag.
8867
8868 * Thuban/Model/map.py (Map.BoundingBox): Fix typo in comment.
8869
8870 * Thuban/Model/save.py (XMLWriter.encode): Don't assume that we
8871 get a string in Latin1. If we get such as string convert it to
8872 unicode first, otherwise leave if alone before encoding.
8873 (SessionSaver.write_layer): Add support for writing both Layers
8874 and RasterLayers.
8875
8876 * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
8877 The right argument may not be a string, it could also be a Column.
8878
8879 * Thuban/UI/application.py (ThubanApplication.CreateMainWindow):
8880 Make initial window size 600x400. Fixes RTBug #1872.
8881
8882 * Thuban/UI/classifier.py (Classifier.__init__): Rearrange how
8883 the dialog is constructed so that we can support layers that
8884 do not have classifications.
8885 (Classifier._OnTry): Only build a classification if the layer
8886 supports one.
8887
8888 * Thuban/UI/legend.py: Change all checks that a layer is an
8889 instance of Layer into checks against BaseLayer.
8890 (LegendTree.__FillTreeLayer): Only add children to a branch if
8891 the layer supports classification.
8892
8893 * Thuban/UI/mainwindow.py (MainWindow.NewSession,
8894 MainWindow.OpenSession): Don't proceed with an action if the
8895 user chooses Cancel when they are asked to save changes.
8896 (MainWindow.AddRasterLayer): New. Open a dialog to allow the
8897 user to select an image file. Create a new RasterLayer and add
8898 it to the map.
8899
8900 * Thuban/UI/renderer.py (MapRenderer.render_map): Add support
8901 for rendering RasterLayer layers.
8902 (MapRenderer.draw_raster_layer): Actually method that calls
8903 the GDALWarp python wrapper and constructs an image from the
8904 data returned.
8905
8906 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Change the
8907 Choices symbols to match those used in the table query method.
8908 Replace deprecated method calls on table with new method names.
8909
8910 * Thuban/UI/view.py (MapCanvas.set_view_transform): Try to limit
8911 how small the scale can get. This still needs more testing.
8912
8913 * extensions/thuban/bmpdataset.cpp: New, but copied from GDAL.
8914 Provides a driver to output in .bmp format.
8915
8916 * extensions/thuban/cpl_mfile.cpp, extensions/thuban/cpl_mfile.h:
8917 New. Provides IO routines which write to memory, rather than a file.
8918
8919 * extensions/thuban/gdalwarp.cpp: New, but basically a direct copy
8920 of the gdalwarp utility provided in GDAL. Added function calls
8921 that can be accessed from python.
8922
8923 * Data/iceland_sample_raster.thuban: New. Sample file that uses
8924 a raster layer.
8925
8926 * Data/iceland/island.tfw, Data/iceland/island.tif: New. Raster
8927 layer image data.
8928
8929 * Doc/thuban.dtd: Added rasterlayer attribute definition.
8930
8931 * test/test_layer.py, test/test_load.py, test/test_save.py: Added
8932 tests associated with the raster layer code.
8933
8934 * test/test_transientdb.py
8935 (TestTransientTable.test_auto_transient_table_query): Added a test
8936 for using a Column object as the "right" parameter to a query.
8937
8938 2003-05-19 Frank Koormann <[email protected]>
8939
8940 * Thuban/version.py (get_changelog_date):
8941 Catch exceptions if ChangeLog does not exist.
8942
8943 * Thuban/UI/view.py (MapCanvas.Export): Bugfix
8944
8945 2003-05-19 Frank Koormann <[email protected]>
8946
8947 Extended version information for Thuban
8948
8949 * Thuban/version.py: New, version information for Thuban: Last
8950 modification date and last ChangeLog entry date.
8951
8952 * Thuban/UI/mainwindow.py (MainWindow.About()): Extended version
8953 information: Display Thuban, wxPython and Python version.
8954
8955 2003-05-16 Bernhard Herzog <[email protected]>
8956
8957 * Thuban/Model/save.py: Remove some unused imports including the
8958 __future__ import for nested_scopes as Thuban relies on Python 2.2
8959 now.
8960 (XMLWriter.encode): Remove the special case for a None argument.
8961 In the saver encode is always called with a string argument.
8962
8963 2003-05-16 Bernhard Herzog <[email protected]>
8964
8965 * Thuban/UI/__init__.py: Remove the work-around for the locale bug
8966 in wxPython (at least when usinvg wxGTK) prior to 2.4. The symptom
8967 of the bug was that e.g. float("1.2") would fail. Thuban now
8968 requires 2.4.x.
8969
8970 2003-05-16 Frank Koormann <[email protected]>
8971
8972 Printing enhancement and WMF export (under Win32)
8973
8974 * Thuban/UI/renderer.py (ExportRenderer): New, derived from
8975 ScreenRenderer. Renders Map, Legend and Scalebar for export.
8976 (PrinterRenderer): New, derived from ExportRenderer. Replaces the old
8977 PrintRender.
8978
8979 * Thuban/UI/view.py (MapPrintout.__init__): Enhanced parameter set
8980 to fullfil information needed for PrinterRenderer.
8981 (MapCanvas.Export): New. Export Map (currently only to WMF on Win32).
8982 (MapCanvas.Print): Adapted to new MapPrintout.
8983 (OutputTransform): General calculations to transform from canvas
8984 coordinates to export/printing devices.
8985
8986 * Thuban/UI/mainwindow.py (MainWindow.ExportMap()): New. Added also
8987 new method_command to call ExportMap, with platform dependency (only
8988 __WXMSW__)
8989
8990 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Position and Size
8991 of scalebar drawing area as new parameters.
8992
8993 * Thuban/Model/scalebar.py (roundInterval): round long instead of int
8994
8995 * Thuban/UI/legend.py (ScalebarBitmap.__SetScale):
8996 Update to extended scalebar.DrawScalebar header.
8997
8998 * test/test_export.py: New, test Thuban.UI.view.OutputTransform()
8999
9000 * test/test_scalebar.py: Made test executable as standalone.
9001
9002 2003-05-16 Bernhard Herzog <[email protected]>
9003
9004 * Thuban/Model/table.py (Table): Remove this compatibility alias
9005 for DBFTable.
9006
9007 * test/test_table.py: Import DBFTable as Table because that alias
9008 doesn't exist anymore.
9009
9010 * Thuban/UI/classgen.py: Remove some unused imports
9011
9012 2003-05-14 Jonathan Coles <[email protected]>
9013
9014 * Thuban/Model/classgen.py (ClassGenerator.GenSingletonsFromList):
9015 Fix docstring.
9016 (ClassGenerator.GenUniformDistribution): Fix spelling of method name.
9017 (ClassGenerator.GenQuantiles): Use the left/right brackets and min/max
9018 values of the supplied range to determine the beginning and end
9019 bounds of the generated classes.
9020
9021 * Thuban/Model/range.py (Range.number_re): Now accepts floats that
9022 do not have a leading 0 (.5 is now accepted as well as 0.5).
9023
9024 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Fix name of method
9025 call to ClassGenerator.GenUniformDistribution.
9026
9027 * Thuban/UI/projdialog.py (ProjFrame.__do_layout): Fix Windows
9028 layout bug with the 'Projection' label.
9029
9030 * test/support.py (FloatTestCase): New. Needed for the Range tests.
9031
9032 * test/test_range.py: New. Imported from SciParam.
9033
9034 2003-05-12 Jonathan Coles <[email protected]>
9035
9036 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Replace call
9037 to table.UniqueValues() with calls that retrieve all the values
9038 from the table. This will need to be replaced by a method on table
9039 which can simply return the list (perhaps more efficiently).
9040
9041 2003-05-12 Jonathan Coles <[email protected]>
9042
9043 The return value of ClassGenerator.CalculateQuantiles has changed.
9044 Refer to the documentation for details.
9045
9046 * test/test_classgen.py: Modified Quantile tests to use the
9047 new return values.
9048
9049 * Thuban/Model/classgen.py
9050 (ClassGenerator.GenQuantiles): Add comments describing the parameters,
9051 use new return values from CalculateQuantiles to produce the correct
9052 range bounds in the Classification.
9053 (ClassGenerator.CalculateQuantiles): Add more comments describing
9054 the return values and parameters. Make minor adjustments to improve
9055 the legibility of the code. Fix problem with adjusted not being set
9056 in most cases.
9057
9058 2003-05-12 Frank Koormann <[email protected]>
9059
9060 * Thuban/Model/save.py (XMLWriter.encode()): Explicite call to unicode
9061 and latin1. Fixes #1851 finally.
9062
9063 2003-05-09 Jonathan Coles <[email protected]>
9064
9065 * test/test_classgen.py: New. Tests the Quantile algorithm.
9066
9067 * Thuban/Model/classgen.py (ClassGenerator.CalculateQuantiles):
9068 Clean up debugging statement, add comments, fix a small bug in the
9069 returned adjusted percentiles.
9070
9071 2003-05-09 Jonathan Coles <[email protected]>
9072
9073 Introduces Range class from SciParam into the ClassGroupRange class,
9074 and such ranges can now be saved and loaded from disk.
9075
9076 Quantiles are now available in the Classification Generator.
9077
9078 Initial support for building Queries on a table. Doesn't do anything
9079 but run some tests.
9080
9081 * Thuban/Model/classification.py: Explicit imports.
9082 (ClassGroupRange): Use the Range class to store the underlying
9083 range information. The interface remains the same, except for
9084 GetRange(), and you can also supply a Range object as the min
9085 parameter to SetRange or __init__.
9086
9087 * Thuban/Model/load.py (XMLReader.encode): New. Encodes the given
9088 string appropriately for use in Thuban. Fixes RTbug #1851.
9089 (SessionLoader.end_projection): Handle the context of the
9090 projection tag a bit better by looking at what objects are not
9091 None. There was an assumption that a projection tag for a map
9092 could occur before any layers.
9093 (SessionLoader.start_clrange): Provide backward compatibility for
9094 reading min/max values as well as the new range parameter.
9095
9096 * Thuban/Model/map.py: Explicit imports.
9097
9098 * Thuban/Model/resource.py: Import _.
9099 (ProjFileSaver.write): write header using projfile.dtd.
9100
9101 * Thuban/Model/save.py: Explicit imports.
9102 (XMLWriter.encode): New. Encode the given string from a format
9103 used by Thuban into UTF-8. Fixes RTbug #1851.
9104
9105 * Thuban/UI/classgen.py: Explicit imports.
9106 (ClassGenDialog.__init__): Clean up the code and add support
9107 for Quantiles.
9108 (ClassGenDialog.OnOK): Add support for Quantiles.
9109 (GenQuantilesPanel): New. Input panel for Quantiles.
9110 (ClassGenerator, CustomRamp, MonochromaticRamp, GreyRamp, RedRamp,
9111 GreenRamp, BlueRamp, HotToColdRamp): Move to Thuban/Model/classgen.py
9112
9113 * Thuban/Model/classgen.py: New. Contains all the classes named above.
9114
9115 * Thuban/UI/classifier.py: Explicit imports.
9116 (ClassTable.GetValueAsCust, ClassTable.__ParseInput,
9117 ClassTable.SetValueAsCustom): Reworked to use new Range class.
9118
9119 * Thuban/UI/legend.py: Explicit imports.
9120
9121 * Thuban/UI/mainwindow.py: Add support for the Join Dialog. Added
9122 a Table menu and associated method calls.
9123 (MainWindow.choose_color): Removed. No longer needed.
9124
9125 * Thuban/UI/projdialog.py (ProjFrame.__VerifyButtons): Save button
9126 should be disabled if no projection is selected in the available
9127 list.
9128
9129 * Thuban/UI/renderer.py: Explicit imports.
9130
9131 * Thuban/UI/tableview.py (TableGrid.OnRangeSelect): Fix some issues
9132 with correctly selecting the rows and issuing the right events.
9133 Be sure to call Skip() to allow the grid to do some of its own
9134 handling which allows the rows to actually be selected.
9135 (LayerTableGrid.select_shapes): Rename from select_shape. Supports
9136 selecting multiple shapes.
9137 (LayerTableFrame): Support for building Queries.
9138 (LayerTableFrame.select_shapes): Allow multiple shapes to be selected.
9139
9140 * Thuban/UI/tree.py: Explicit imports.
9141
9142 * Thuban/UI/view.py (MapCanvas): Delegate "SelectedShapes" so the
9143 table view can call it.
9144
9145 * test/test_classification.py: Explicit imports.
9146 (TestClassification.test_ClassGroupRange): Fix test for new
9147 Range class.
9148
9149 * Doc/thuban.dtd: Add range parameter for clrange.
9150
9151 * Thuban/Model/range.py: Taken from SciParam. Used as the underlying
9152 object in ClassGroupRange, and also uesd for inputting ranges in
9153 the classifer table and elsewhere.
9154
9155 * Thuban/UI/join.py: New. Initial Join dialog. No real functionality
9156 yet.
9157
9158 2003-05-09 Frank Koormann <[email protected]>
9159
9160 * Thuban/UI/scalebar.py (DrawScaleBar): Draw only if interval > 0.0.
9161
9162 2003-05-08 Frank Koormann <[email protected]>
9163
9164 Coding style updates
9165
9166 * test/test_scalebar.py: Replaced tab indentation by spaces.
9167
9168 * Thuban/UI/scalebar.py: Explicit imports.
9169
9170 2003-05-08 Frank Koormann <[email protected]>
9171
9172 * Thuban/UI/scalebar.py
9173 (ScaleBar.DrawScalebar): Format string bug fixed.
9174
9175 2003-05-08 Frank Koormann <[email protected]>
9176
9177 Reorganization of scalebar component (no wx in Thuban/Model)
9178
9179 * Thuban/Model/scalebar.py: Rendering moved to Thuban/UI/scalebar.py
9180 (deriveInterval):
9181 Calculate scalebar interval and unit which fits in width for scale.
9182 (roundInterval): Round float.
9183
9184 * Thuban/UI/scalebar.py (ScaleBar): Scalebar rendering
9185
9186 * test/test_scalebar.py: Test for Thuban/Model/scalebar.py methods.
9187
9188 * Thuban/UI/legend.py: Import Thuban.UI.scalebar
9189
9190 2003-05-08 Frank Koormann <[email protected]>
9191
9192 * Thuban/UI/legend.py (ScalebarBitmap.SetCanvas):
9193 Initialize ScaleBar with canvas.map
9194
9195 * Thuban/Model/scalebar.py (ScaleBar.roundInterval()): New,
9196 round intervals to display smarter lengths
9197 (ScaleBar.DrawScalebar): Draw Scalebar only if the map contains a
9198 layer. If the maps has no projection applied grey the scalebar.
9199
9200 2003-05-07 Frank Koormann <[email protected]>
9201
9202 Basic Scalebar features added.
9203
9204 * Thuban/Model/scalebar.py (ScaleBar): New, scalebar rendering.
9205
9206 * Thuban/UI/legend.py (LegendPanel): Added scalebar bitmap
9207 (ScaleBarBitmap): New, links the scalebar bitmap with view messages
9208 and the renderer.
9209
9210 * Thuban/UI/view.py (MapCanvas.set_view_transform): Issue SCALE_CHANGED.
9211
9212 * Thuban/UI/messages.py: SCALE_CHANGED added.
9213
9214 2003-05-07 Bernhard Herzog <[email protected]>
9215
9216 * Thuban/Model/session.py (Session.__init__): New instance
9217 variable shapestores to hold a list of all open shapestore objects
9218 (Session.ShapeStores): New. Accessor method for the shapestores
9219 list.
9220 (Session._add_shapestore, Session._clean_weak_store_refs): New.
9221 Internal methods to maintain the shapestores list.
9222 (Session.Tables): New. Return all tables open in the session.
9223 (Session.OpenShapefile): Insert the new ShapeStore into the
9224 shapestores list.
9225
9226 * test/test_session.py (TestSessionSimple.test_initial_state): Add
9227 tests for ShapeStores and Tables
9228 (TestSessionWithContent.test_shape_stores)
9229 (TestSessionWithContent.test_tables): New. Test cases for
9230 ShapeStores and Tables
9231
9232 2003-05-07 Bernhard Herzog <[email protected]>
9233
9234 * Thuban/Model/transientdb.py (TransientTableBase.ReadRowAsDict):
9235 Add comments about the optimizations used.
9236 (AutoTransientTable.ReadValue, TransientTableBase.ReadValue): New.
9237 Implement the ReadValue table interface method.
9238
9239 * test/test_transientdb.py
9240 (TestTransientTable.run_iceland_political_tests)
9241 (TestTransientTable.test_transient_joined_table): Add tests for
9242 ReadValue
9243
9244 2003-05-07 Frank Koormann <[email protected]>
9245
9246 * Resources/Bitmaps/fulllayerextent.xpm,
9247 Resources/Bitmaps/fullselextent.xpm: Replaced the place holders with
9248 new icons.
9249
9250 2003-05-06 Bernhard Herzog <[email protected]>
9251
9252 * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
9253 New. Simply delegate to the transient table's version.
9254
9255 * test/test_transientdb.py
9256 (TestTransientTable.test_auto_transient_table_query): New. Test
9257 case for AutoTransientTable's SimpleQuery
9258
9259 2003-05-06 Bernhard Herzog <[email protected]>
9260
9261 * Thuban/Model/transientdb.py (TransientTableBase.SimpleQuery):
9262 Implement a simple query method for the query dialog
9263 (TransientTableBase.create): Add an INTEGER PRIMARY KEY that holds
9264 the row index or shapeid.
9265 (TransientTable.create): Insert the right value of the row index
9266 (TransientJoinedTable.create): Copy the row index of the left
9267 table to the joined result table
9268
9269 * test/test_transientdb.py
9270 (TestTransientTable.test_transient_table_read_twice): Fix
9271 doc-string
9272 (TestTransientTable.test_transient_table_query): New. Test for the
9273 SimpleQuery method
9274
9275 2003-05-06 Bernhard Herzog <[email protected]>
9276
9277 Convert all table users to use the new table interface. This only
9278 covers Thuban itself, not GREAT-ER or other applications built on
9279 Thuban yet, so the compatibility interface stays in place for the
9280 time being but it now issues DeprecationWarnings.
9281
9282 Finally, the new Table interface has a new method, HasColumn.
9283
9284 * Thuban/Model/table.py (OldTableInterfaceMixin): All methods
9285 issue deprecation warnings when they're. The warnings refer to the
9286 caller of the method.
9287 (OldTableInterfaceMixin.__deprecation_warning): New. Helper method
9288 for the deprecation warnings
9289
9290 * test/test_table.py: Ignore the deprecation warnings for the old
9291 table in the tests in this module. The purpose of the tests is to
9292 test the old interface, after all.
9293
9294 * test/test_transientdb.py
9295 (TestTransientTable.run_iceland_political_tests): Use the
9296 constants for the types. Add a test for HasColumn
9297 (TestTransientTable.test_transient_joined_table): Adapt to new
9298 table interface. Add a test for HasColumn
9299 (TestTransientTable.test_transient_table_read_twice): Adapt to new
9300 table interface
9301
9302 * Thuban/UI/tableview.py (DataTable.SetTable, DataTable.GetValue):
9303 Adapt to new table interface
9304
9305 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Adapt to
9306 new table interface
9307
9308 * Thuban/UI/controls.py (RecordListCtrl.fill_list)
9309 (RecordTable.SetTable): Adapt to new table interface
9310
9311 * Thuban/UI/classifier.py (Classifier.__init__)
9312 (Classifier.__init__): Adapt to new table interface
9313
9314 * Thuban/UI/classgen.py (ClassGenDialog.__init__)
9315 (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve): Adapt
9316 to new table interface
9317
9318 * Thuban/Model/transientdb.py (TransientTableBase.HasColumn)
9319 (AutoTransientTable.HasColumn): Implement the new table interface
9320 method
9321 (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ValueRange)
9322 (AutoTransientTable.UniqueValues): Adapt to new table interface
9323
9324 * Thuban/Model/layer.py (Layer.SetShapeStore, Layer.GetFieldType):
9325 Adapt to new table interface
9326
9327 * test/test_layer.py (TestLayer.open_shapefile): Helper method to
9328 simplify opening shapefiles a bit easier.
9329 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
9330 (TestLayer.test_point_layer): Use the new helper method
9331 (TestLayer.test_get_field_type): New. Test for the GetFieldType
9332 method
9333
9334 * test/test_dbf_table.py (TestDBFTable.test_has_column): Test for
9335 the new table method
9336
9337 * test/test_memory_table.py (TestMemoryTable.test_has_column):
9338 Test for the new table method HasColumn
9339
9340 2003-05-06 Jonathan Coles <[email protected]>
9341
9342 Addresses the "Selection Extent" wish of RTbug #1787.
9343
9344 * Resources/Bitmaps/fulllayerextent.xpm,
9345 Resources/Bitmaps/fullselextent.xpm: Bitmaps for layer and selection
9346 extent. These are just place holders for the real bitmaps.
9347
9348 * Thuban/Model/layer.py (Shape): Since a Shape is immutable only
9349 calculate the bounding box once (the first time compute_bbox() is
9350 called).
9351 (Layer.ShapesBoundingBox): New. Given a list of shape ids, return
9352 the bounding box for the shapes in lat/long coordinates.
9353
9354 * Thuban/UI/mainwindow.py: Added new "Full selection extent" menu
9355 option.
9356 (MainWindow.has_selected_shapes): New. Returns true if there are
9357 any selected shapes.
9358 (MainWindow.FullSelectionExtent): New. Calls
9359 MapCanvas.FitSelectedToWindow() when the user selects the menu option.
9360 (_has_selected_shapes): New. Returns true if there are any
9361 selected shapes.
9362
9363 * Thuban/UI/selection.py (Selection.HasSelectedShapes): New. Returns
9364 true if there are any selected shapes.
9365
9366 * Thuban/UI/view.py (MapCanvas): Added delegated method
9367 HasSelectedShapes.
9368 (MapCanvas.FitSelectedToWindow): New. Centers and scales any selected
9369 shapes on the canvas using the map projection (if any).
9370
9371 * test/test_layer.py (TestLayer.test_arc_layer): Add some tests
9372 for Layer.ShapesBoundingBox().
9373
9374 2003-05-06 Bernhard Herzog <[email protected]>
9375
9376 * Resources/Projections/defaults.proj: Fix spelling of Mercator
9377
9378 2003-05-05 Jonathan Coles <[email protected]>
9379
9380 Addresses the "Full Layer Extent" wish of RTbug #1787.
9381
9382 * Resources/Projections/defaults.proj: Added UK National Grid.
9383
9384 * Thuban/UI/mainwindow.py: Added new "Full layer extent" menu option.
9385 (MainWindow.FullLayerExtent): New. Calls MapCanvas.FitLayerToWindow()
9386 when the user selects the menu option.
9387
9388 * Thuban/UI/view.py (MapCanvas.FitLayerToWindow): New. Centers and
9389 scales the given layer on the canvas using the map projection.
9390
9391 2003-05-05 Bernhard Herzog <[email protected]>
9392
9393 Convert the table implementations to a new table interface. All
9394 tables use a common mixin class to provide backwards compatibility
9395 until all table users have been updated.
9396
9397 * Thuban/Model/table.py (OldTableInterfaceMixin): Mixin class to
9398 provide backwards compatibility for table classes implementing the
9399 new interface
9400 (DBFTable, MemoryTable): Implement the new table interface. Use
9401 OldTableInterfaceMixin as base for compatibility
9402 (DBFColumn, MemoryColumn): New. Column description for DBFTable
9403 and MemoryTable resp.
9404
9405 * test/test_dbf_table.py: New. Test cases for the DBFTable with
9406 the new table interface.
9407
9408 * test/test_memory_table.py: New. Test cases for the MemoryTable
9409 with the new table interface.
9410
9411 * test/test_table.py: Document the all tests in this file as only
9412 for backwards compatibility. The equivalent tests for the new
9413 interface are in test_memory_table.py and test_dbf_table.py
9414 (MemoryTableTest.test_read): field_info should be returning tuples
9415 with four items
9416 (MemoryTableTest.test_write): Make doc-string a more precise.
9417
9418 * Thuban/Model/transientdb.py (TransientTableBase): Convert to new
9419 table interface. Derive from from OldTableInterfaceMixin for
9420 compatibility.
9421 (TransientTableBase.create): New intance variable column_map to
9422 map from names and indices to column objects
9423 (TransientTable.create): Use the new table interface of the input
9424 table
9425 (AutoTransientTable): Convert to new table interface. Derive from
9426 from OldTableInterfaceMixin for compatibility.
9427 (AutoTransientTable.write_record): Removed. It's not implemented
9428 yet and we still have to decide how to handle writing with the new
9429 table and data framework.
9430
9431 * test/test_transientdb.py
9432 (TestTransientTable.run_iceland_political_tests)
9433 (TestTransientTable.test_transient_joined_table): Use the new
9434 table interface
9435
9436 2003-05-05 Jonathan Coles <[email protected]>
9437
9438 This is namely a collection of UI updates to improve user interactivity.
9439 Tabbing between controls now exists and you can use ESC to close dialog
9440 boxes; ENTER will active the default button.
9441
9442 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Rearrange the
9443 order that the controls are created so that tabbing works correctly.
9444 (ClassGenDialog.OnOK): Renamed from _OnGenerate() so that the
9445 wxDialog can handle the default button correctly.
9446 (ClassGenDialog.OnCancel): Renamed from _OnCloseBtn() for the
9447 same reasons as for OnOK.
9448 (GenUniformPanel._OnRetrieve): Call wxBeginBusyCursor/wxEndBusyCursor
9449 when we ask the table for the maximum/minimum values of a field
9450 which could take a very long time.
9451
9452 * Thuban/UI/classifier.py (Classifier.__init__): Rearrange the
9453 order that the controls are created so that tabbing works correctly.
9454 (SelectPropertiesDialog.__init__): Rearrange the order that the
9455 controls are created so that tabbing works correctly.
9456
9457 * Thuban/UI/dialogs.py: Copied NonModalDialog box and changed it
9458 to derive from a wxDialog but behave like the original implementation
9459 which was derived from a wxFrame. wxDialog provides useful key
9460 handling functionality like ESC calling OnCancel and ENTER calling
9461 OnOK which is lost with wxFrame.
9462
9463 * Thuban/UI/mainwindow.py: Add "..." to menu items that will open
9464 new dialogs.
9465
9466 * Thuban/UI/projdialog.py (ProjFrame.__init__): Rearrange the
9467 order that the controls are created so that tabbing works correctly.
9468 (ProjFrame.OnApply): Renamed from _OnTry() to use wxDialog behaviour.
9469 (ProjFrame.OnOK): Renamed from _OnOK() to use wxDialog behaviour.
9470 (ProjFrame.OnCancel): Renamed from _OnClose() to use wxDialog behaviour.
9471 (ProjPanel.__init__): Add "Airy" to the list of ellipsoids so we
9472 can provide the "UK National Grid" as a default projection.
9473 (UTMPanel.__init__): Rearrange the order that the controls are
9474 created so that tabbing works correctly.
9475
9476 2003-05-05 Bernhard Herzog <[email protected]>
9477
9478 * extensions/thuban/wxproj.cpp: Fix some of the comments.
9479 (project_point): If a map projection but no layer projection is
9480 given, convert degrees to radians before applying the map
9481 projection.
9482
9483 * Thuban/UI/tableview.py (TableGrid.disallow_messages)
9484 (TableGrid.allow_messages): New methods to make it possible to
9485 inhibit message sending.
9486 (TableGrid.issue): Only send the message if not inhibited.
9487 (LayerTableGrid.select_shape): Use the new methods to make sure
9488 that no ROW_SELECTED message is sent while we're updating the
9489 selected rows to match the selected shapes.
9490
9491 2003-05-02 Jan-Oliver Wagner <[email protected]>
9492
9493 Implementation of MemoryTable.
9494
9495 * Thuban/Model/table.py (MemoryTable): New. Quite simple table
9496 implementation that operates on a list of tuples. All of the data
9497 are kept in the memory.
9498
9499 * test/test_table.py (MemoryTableTest): New.
9500
9501 * test/test_transientdb.py (SimpleTable): Removed.
9502 (TestTransientTable.test_transient_joined_table,
9503 (TestTransientTable.test_transient_table_read_twice): Replaced
9504 SimpleTable by MemoryTable.
9505
9506 2003-04-30 Jonathan Coles <[email protected]>
9507
9508 * Data/iceland_sample.thuban: Now contains correct projections
9509 for each of the layers.
9510
9511 * Resources/Projections/defaults.proj: Geographic projection
9512 contains unit conversion parameter.
9513
9514 2003-04-30 Jonathan Coles <[email protected]>
9515
9516 The most important part of this putback is the projection changes.
9517 It should now be possible to specify the projection that a layer
9518 is in and then specify a different projection for the map. The
9519 projection dialog has an extra parameter for a geographic projection
9520 which lets the user select if the input is in degrees or radians.
9521
9522 * Thuban/Model/layer.py (Layer.ShapesInRegion): Fix docstring
9523 to say that the parameter is a tuple of unprojected
9524 points (which is what the callers to this method were assuming).
9525 Also, since the points are unprojected we need to projected them.
9526
9527 * Thuban/UI/legend.py (LegendTree.MoveCurrentItemUp,
9528 LegendTree.MoveCurrentItemDown): If the layer or any of the layer's
9529 groups are selected, move the layer up/down. Fixes RTbug #1833.
9530
9531 * Thuban/UI/mainwindow.py: Move menu item map_rename up.
9532
9533 * Thuban/UI/projdialog.py (ProjFrame._OnSave): Add missing
9534 parameter in call to SetClientData.
9535 (GeoPanel): Add support for selecting the units that the
9536 source data is in (Radians or Degrees).
9537
9538 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Optimize
9539 the rendering loop by reducing the number of if's, removing the
9540 unnecessary try/except block, and checking if the old group
9541 is the same as the new one (which happens a lot if there is
9542 no classification, or lots of shapes are in the same group).
9543
9544 * Thuban/UI/view.py (MapCanvas.OnPaint): Add a try/except block
9545 around the redraw routine to try to catch problems that the user
9546 may create by selecting invalid projections for the data set and
9547 map. Clears the display if there are any problems and prints the
9548 error.
9549 (MapCanvas.do_redraw): Use DC.Clear() instead of drawing a filled
9550 rectangle.
9551
9552 * extensions/thuban/wxproj.cpp (project_point): First invert the
9553 supplied point (which should be in projected coordinates) using
9554 the layer's projection and then project the point using the
9555 map's projection.
9556 (project_points): Use project_point() to project each point.
9557
9558 2003-04-30 Jan-Oliver Wagner <[email protected]>
9559
9560 * Thuban/Model/layer.py (Layer.SetShapeStore): Fixed a bug:
9561 don't set the Classification to None if the classfication field
9562 is None (ie only a DEFAULT).
9563
9564 2003-04-30 Bernhard Herzog <[email protected]>
9565
9566 * Thuban/UI/view.py: Fix some typos.
9567
9568 * Thuban/UI/mainwindow.py (MainWindow.identify_view_on_demand): Do
9569 not pop up the dialog if the selection becomes empty (this could
9570 happen if e.g. a new selection is opened while the identify tool
9571 is active and dialog had been closed)
9572
9573 2003-04-30 Bernhard Herzog <[email protected]>
9574
9575 * Thuban/Model/transientdb.py (TransientTableBase.__init__): New
9576 instance variable read_record_last_result
9577 (TransientTableBase.read_record): Make sure reading the same
9578 record twice works. The implementation uses the new instance
9579 variable read_record_last_result
9580
9581 * test/test_transientdb.py
9582 (TestTransientTable.test_transient_table_read_twice): New test
9583 case for the above bug-fix.
9584
9585 2003-04-29 Jonathan Coles <[email protected]>
9586
9587 * Thuban/common.py: Removed. No longer needed Str2Num. RTbug #1832.
9588
9589 * Thuban/UI/classgen.py: Remove all uses of Str2Num.
9590
9591 * Thuban/UI/classifier.py: Remove all uses of Str2Num.
9592 (ClassTable.SetValueAsCustom): Rename keyword argument in
9593 ClassGroup* constructors to match argument name.
9594
9595 2003-04-29 Bernhard Herzog <[email protected]>
9596
9597 * Thuban/Model/session.py (Session.Destroy): Explicitly close the
9598 transient DB if it exists to make sure it doesn't leave a journal
9599 file in the temp directory.
9600
9601 * Thuban/Model/transientdb.py (TransientDatabase.close): Set
9602 self.conn to None after closing the connection to make sure it's
9603 not closed twice
9604
9605 2003-04-29 Jonathan Coles <[email protected]>
9606
9607 Add a visible parameter in the layer XML tag. The default value is
9608 "true". If anything other than "false" is specified we also assume
9609 "true". Addresses RTbug #1025.
9610
9611 * Doc/thuban.dtd: Add visible parameter to a layer.
9612
9613 * Thuban/Model/layer.py (BaseLayer.__init__): Change default value
9614 of visible from 1 to True.
9615 (Layer.__init__): Change default value of visible from 1 to True.
9616
9617 * Thuban/Model/load.py (SessionLoader.start_layer): Read visible
9618 parameter.
9619
9620 * Thuban/Model/save.py (SessionSaver.write_layer): Save visible
9621 parameter.
9622
9623 * test/test_load.py: Add new test data contents_test_visible.
9624 (LoadSessionTest.setUp): save test data.
9625 (LoadSessionTest.testLayerVisibility): Test if the visible flag
9626 is loaded correctly.
9627
9628 * test/test_save.py (SaveSessionTest.testSingleLayer): Add test
9629 for saving an invisible layer.
9630
9631 2003-04-29 Jonathan Coles <[email protected]>
9632
9633 * Thuban/UI/mainwindow.py (MainWindow.SetMap): Look up the
9634 legend dialog box and tell it to change its map to the one
9635 supplied to SetMap(). Fixes RTbug #1770.
9636
9637 2003-04-29 Bernhard Herzog <[email protected]>
9638
9639 Next step of table implementation. Introduce a transient database
9640 using SQLite that some of the data is copied to on demand. This
9641 allows us to do joins and other operations that require an index
9642 for good performance with reasonable efficiency. Thuban now needs
9643 SQLite 2.8.0 and pysqlite 0.4.1. Older versions may work but I
9644 haven't tested that.
9645
9646 * Thuban/Model/transientdb.py: New. Transient database
9647 implementation.
9648
9649 * test/test_transientdb.py: New. Tests for the transient DB
9650 classes.
9651
9652 * Thuban/Model/session.py (AutoRemoveFile, AutoRemoveDir): New
9653 classes to help automatically remove temporary files and
9654 directories.
9655 (Session.__init__): New instance variables temp_dir for the
9656 temporary directory and transient_db for the SQLite database
9657 (Session.temp_directory): New. Create a temporary directory if not
9658 yet done and return its name. Use AutoRemoveDir to have it
9659 automatically deleted
9660 (Session.TransientDB): Instantiate the transient database if not
9661 done yet and return it.
9662
9663 * Thuban/Model/data.py (ShapefileStore.__init__): Use an
9664 AutoTransientTable so that data is copied to the transient DB on
9665 demand.
9666 (SimpleStore): New class that simply combines a table and a
9667 shapefile
9668
9669 * Thuban/Model/table.py (Table, DBFTable): Rename Table into
9670 DBFTable and update its doc-string to reflect the fact that this
9671 is only the table interface to a DBF file. Table is now an alias
9672 for DBFTable for temporary backwards compatibility.
9673
9674 * Thuban/UI/application.py (ThubanApplication.OnExit): Make sure
9675 the last reference to the session goes away so that the temporary
9676 files are removed properly.
9677
9678 * test/test_load.py (LoadSessionTest.tearDown): Remove the
9679 reference to the session to make sure the temporary files are
9680 removed.
9681
9682 2003-04-29 Bernhard Herzog <[email protected]>
9683
9684 * Thuban/Model/load.py (XMLReader.__init__, XMLReader.read): Turn
9685 the __parser instance variable into a normal local variable in
9686 read. It's only used there and read will never be called more than
9687 once. Plus it introduces a reference cycle that keeps can keep the
9688 session object alive for a long time.
9689
9690 2003-04-29 Jonathan Coles <[email protected]>
9691
9692 * Thuban/Model/proj.py (Projection): Removed Set*() methods to make
9693 Projection an immutable item. Fixes RTbug #1825.
9694 (Projection.__init__): Initialize instance variables here.
9695 (ProjFile.Replace): New. Replace the given projection object with
9696 the new projection object. This solves the problem of needing the
9697 mutator Projection.SetProjection() in the ProjFrame class and
9698 allows a projection to change parameters without changing its
9699 location in the file.
9700
9701 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs): Dialog should
9702 be of type wxSAVE and should verify overwriting a file.
9703
9704 * Thuban/UI/projdialog.py (ProjFrame._OnSave): Use the new
9705 ProjFile.Replace() method instead of the mutator
9706 Projection.SetProjection(). Also requires that we reassign the
9707 client data to the new projection.
9708
9709 * test/test_proj.py (TestProjection.test): Test GetName() and
9710 GetAllParameters()
9711 (TestProjFile.test): Remove tests for Set*() methods. Add tests
9712 for Replace().
9713
9714 2003-04-25 Jonathan Coles <[email protected]>
9715
9716 * Thuban/Model/save.py (SessionSaver.write_projection): Make sure
9717 to save the name of the projection.
9718
9719 * test/test_save.py (SaveSessionTest.testLayerProjection): New
9720 test to verify layer projections are saved correctly.
9721
9722 2003-04-25 Jonathan Coles <[email protected]>
9723
9724 * Thuban/Model/proj.py (Projection.SetName): Set the name
9725 to "Unknown" if name is None.
9726 (Projection.SetAllParameters): New. Set the projection's
9727 parameter list to the one supplied.
9728 (Projection.SetProjection): New. Set the projection's
9729 properties to those of the supplied Projection.
9730
9731 * Thuban/UI/mainwindow.py (MainWindow.MapProjection): Set
9732 the dialog title to include the map's title.
9733 (MainWindow.LayerProjection): Set the dialog title to include
9734 the layer's title.
9735
9736 * Thuban/UI/projdialog.py (ProjFrame.__ShowError): Consolidate
9737 error dialogs into a single method call.
9738 (ProjFrame.__VerifyButtons): Add more states to check.
9739 (ProjFrame.__GetProjection): Return the current state of an
9740 edited projection or None.
9741 (ProjFrame.__FillAvailList): Remove checks for states that
9742 shouldn't exist.
9743 (ProjFrame._OnNew): Clear all selected items and supply
9744 a projection panel if necessary.
9745
9746 * test/test_proj.py (TestProjFile.test): Add tests for
9747 ProjFile.SetAllParameters, ProjFile.SetProjection,
9748 ProjFile.SetName.
9749
9750 2003-04-25 Jonathan Coles <[email protected]>
9751
9752 * Thuban/UI/projdialog.py (ProjFrame.__FillAvailList): Now
9753 takes an optional argument to select the current projection.
9754 This does not guarantee that the item is visible due to
9755 limited wxWindows functionality. Fixes RTBug #1821.
9756
9757 2003-04-25 Jonathan Coles <[email protected]>
9758
9759 * Thuban/Model/load.py (SessionLoader.start_projection): Remember
9760 the projection name and use it when constructing the Projection
9761 object.
9762
9763 * Thuban/Model/proj.py (Projection.__init__): Change the default
9764 value for 'name' to None and then test if name is equal to None
9765 in the body of the constructor. This way the caller doesn't have to
9766 know what the default value should be. Namely, useful in load.py
9767 where we have to pick a default value if the 'name' parameter
9768 doesn't exist in the XML file.
9769
9770 * test/test_load.py (LoadSessionTest.testLayerProjection): New.
9771 Tests a file where a layer has a projection.
9772
9773 2003-04-25 Jonathan Coles <[email protected]>
9774
9775 * Thuban/Model/layer.py (Layer.TreeInfo): Add an item to the
9776 tree for projection information.
9777
9778 * Thuban/Model/load.py (XMLReader.GetFilename): Renamed from
9779 XMLReader.GetFileName.
9780 (SessionLoader): Added support for loading projection tags that
9781 appear inside a layer.
9782
9783 * Thuban/Model/proj.py (ProjFile): Document the class. Move
9784 back to using a list because the order of the projections in
9785 the file is important to maintain. Fixes RTbug #1817.
9786
9787 * Thuban/Model/resource.py: Rename calls to ProjFile.GetFileName
9788 to ProjFile.GetFilename.
9789
9790 * Thuban/Model/save.py (SessionSaver.write_layer): Save projection
9791 information.
9792
9793 * Thuban/UI/projdialog.py (ProjFrame._OnAddToList): Renamed from
9794 ProjFrame._OnSaveAs. Removed old dead code from previous
9795 implementation.
9796 (ProjFrame._OnExport): Add support for exporting more than one
9797 projection to a single file.
9798 (ProjFrame.__FillAvailList): use string formatting (% operator)
9799 to build strings that are (partly) translated. Fixes RTbug #1818.
9800
9801 * test/test_proj.py (TestProjFile.test): New. Tests the base ProjFile
9802 class.
9803
9804 2003-04-24 Bernhard Herzog <[email protected]>
9805
9806 * po/es.po: Updated Spanish translation by Daniel Calvelo Aros
9807
9808 * po/fr.po: New. French translation by Daniel Calvelo Aros
9809
9810 * Thuban/UI/projdialog.py (ProjFrame._OnSaveAs): Don't translate
9811 empty strings.
9812
9813 2003-04-24 Jonathan Coles <[email protected]>
9814
9815 * Thuban/Model/layer.py (Layer.GetProjection): New. Needed to
9816 implement the interface that the ProjFrame dialog expects.
9817
9818 * Thuban/Model/proj.py (Projection.SetName): New. Allows the
9819 name of the projection to be changed.
9820 (ProjFile): Use a dictionary instead of a list so that removing
9821 projections is easier and we are sure about uniqueness.
9822 (ProjFile.Remove): Remove the given projection object.
9823
9824 * Thuban/Model/resource.py (GetSystemProjFiles, GetUserProjFiles):
9825 Return a list with only one projection file instead of searching for
9826 any projection file. This simplifies many things if the user can
9827 only have one system file and one user file.
9828
9829 * Thuban/UI/classgen.py: Change all references to
9830 genCombo to genChoice.
9831
9832 * Thuban/UI/mainwindow.py: Add a Projection option under the
9833 layer menu.
9834 (MainWindow.LayerProjection): New. Open up a projection window
9835 for a layer.
9836
9837 * Thuban/UI/projdialog.py: Large changes to how the dialog is
9838 laid out. Use three panels instead of one. One for the list of
9839 projections, one for the edit controls, and one for the buttons.
9840 Fixed resizing problems so that the dialog resizes correctly
9841 when the projection panel changes. Added import/export, save, and
9842 new buttons/functionality.
9843
9844 2003-04-24 Bernhard Herzog <[email protected]>
9845
9846 First step towards table management. Introduce a simple data
9847 abstraction so that we replace the data a layer uses more easily
9848 in the next step.
9849
9850 * Thuban/Model/data.py: New file with a simple data abstraction
9851 that bundles shapefile and dbffile into one object.
9852
9853 * Thuban/Model/session.py (Session.OpenShapefile): New method to
9854 open shapefiles and return a shape store object
9855
9856 * Thuban/Model/layer.py (Layer.__init__): Pass the data as a store
9857 object instead of a shapefile filename. This introduces a new
9858 instance variable store holding the datastore. For intermediate
9859 backwards compatibility keep the old instance variables.
9860 (open_shapefile): Removed. No longer needed with the shape store.
9861 (Layer.SetShapeStore, Layer.ShapeStore): New methods to set and
9862 get the shape store used by a layer.
9863 (Layer.Destroy): No need to explicitly destroy the shapefile or
9864 table anymore.
9865
9866 * Thuban/UI/mainwindow.py (MainWindow.AddLayer)
9867 (MainWindow.AddLayer): Use the session's OpenShapefile method to
9868 open shapefiles
9869
9870 * Thuban/Model/load.py (ProcessSession.start_layer): Use the
9871 session's OpenShapefile method to open shapefiles
9872
9873 * test/test_classification.py
9874 (TestClassification.test_classification): Use the session's
9875 OpenShapefile method to open shapefiles and build the filename in
9876 a more platform independed way
9877
9878 * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
9879 Implement to have a session to use in the tests
9880 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
9881 (TestLayer.test_point_layer, TestLayer.test_empty_layer): Use the
9882 session's OpenShapefile method to open shapefiles
9883 (TestLayerLegend.setUp): Instantiate a session so that we can use
9884 it to open shapefiles.
9885 (TestLayerLegend.tearDown): Make sure that all references to
9886 layers and session are removed otherwise we may get a resource
9887 leak
9888
9889 * test/test_map.py (TestMapAddLayer.test_add_layer)
9890 (TestMapWithContents.setUp): Instantiate a session so that we can
9891 use it to open shapefiles.
9892 (TestMapWithContents.tearDown): Make sure that all references to
9893 layers, maps and sessions are removed otherwise we may get a
9894 resource leak
9895 ("__main__"): use support.run_tests() so that more info about
9896 uncollected garbage is printed
9897
9898 * test/test_save.py (SaveSessionTest.testSingleLayer): Use the
9899 session's OpenShapefile method to open shapefiles
9900 ("__main__"): use support.run_tests() so that more info about
9901 uncollected garbage is printed
9902
9903 * test/test_selection.py (TestSelection.tearDown): Make sure that
9904 all references to the session and the selection are removed
9905 otherwise we may get a resource leak
9906 (TestSelection.get_layer): Instantiate a session so that we can
9907 use it to open shapefiles.
9908 ("__main__"): use support.run_tests() so that more info about
9909 uncollected garbage is printed
9910
9911 * test/test_session.py (TestSessionBase.tearDown)
9912 (TestSessionWithContent.tearDown): Make sure that all references
9913 to the session and layers are removed otherwise we may get a
9914 resource leak
9915 (TestSessionWithContent.setUp): Use the session's OpenShapefile
9916 method to open shapefiles
9917
9918 2003-04-24 Jonathan Coles <[email protected]>
9919
9920 * Thuban/Model/load.py (XMLReader.read): Should have been checking
9921 if the file_or_filename object had the 'read' attribute.
9922
9923 2003-04-23 Jonathan Coles <[email protected]>
9924
9925 * Thuban/Model/resource.py: Fixes RTbug #1813.
9926 (ReadProjFile): Add documentation about which exceptions are raised.
9927 Always pass the exceptions up to the caller.
9928 (GetProjFiles): If the directory can't be read return an empty list.
9929 If any of the proj files can't be read skip that file and go
9930 on to the next one.
9931
9932 * test/test_proj.py: Added test cases to handle nonexistent files,
9933 unreadable files, and files that don't parse correctly.
9934
9935 2003-04-23 Jonathan Coles <[email protected]>
9936
9937 Projection dialog. Allows the user to select from a list
9938 of projection templates and optionally edit them and save new ones.
9939
9940 * Thuban/UI/projdialog.py (ProjFrame): New. Main dialog.
9941 (ProjPanel): Base class for projection specific panels.
9942 (TMPanel): Projection panel for Transverse Mercartor.
9943 (UTMPanel): Projection panel for Universal Transverse Mercartor.
9944 (LCCPanel): Projection panel for Lambert Conic Conformal.
9945 (GeoPanel): Projetion panel for Geographic Projection.
9946
9947 2003-04-23 Jonathan Coles <[email protected]>
9948
9949 * Thuban/Model/load.py (XMLReader): Renamed from XMLProcessor to
9950 promote symmetry. There now exists XMLReader and XMLWriter.
9951 (XMLReader.read): New. Call to read the given file descriptor or
9952 filename.
9953 (XMLReader.close): New. Make sure the file is closed.
9954 (XMLReader.GetFileName): New. Return just the file name that is being
9955 read from.
9956 (XMLReader.GetDirectory): New. Return just the directory of the file
9957 that is being read.
9958 (XMLReader.AddDispatchers): New. Take a dictionary which contains
9959 the names of functions to call as the XML tree is parsed.
9960 (XMLReader.startElementNS): Updated to use new dispatcher dictionary.
9961 (XMLReader.endElementNS): Updated to use new dispatcher dictionary.
9962 (SessionLoader): Removed class variables start_dispatcher and
9963 end_dispatcher since this functionality is now part of a class
9964 instance. Fixes RTbug #1808.
9965 (SessionLoader.__init__): Add dispatcher functions.
9966 (load_xmlfile): Code was moved into the XMLReader.read().
9967 (load_session): Use modified SessionLoader.
9968
9969 * Thuban/Model/map.py (Map.GetProjection): New. Returns the
9970 map's projection.
9971
9972 * Thuban/Model/proj.py (Projection.GetParameters): Renamed to
9973 GetAllParameters.
9974 (Projection.GetParameter): Returns the value for the given parameter.
9975
9976 * Thuban/Model/resource.py: Use XMLReader and XMLWriter.
9977 (GetProjFiles): Renamed from GetProjections. Now returns a list
9978 of ProjFile objects.
9979 (GetSystemProjFiles): Renamed from GetSuppliedProjections. Returns
9980 a list of ProjFile objects whose files are not user defined.
9981 (GetUserProjFiles): Renamed from GetUserProjections. Returns a
9982 list of ProjFile objects whose files are user defined.
9983 (ProjFileReader): Extend new XMLReader.
9984
9985 * Thuban/Model/save.py (XMLWriter): Renamed from XMLSaver to
9986 promote symmetry.
9987
9988 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Use a wxChoice
9989 control instead of a wxComboBox. wxChoice controls do not generate
9990 events as the uses highlights possible choices which fixes problems
9991 with resizing the dialog when the use selects an option.
9992
9993 * Thuban/UI/classifier.py (Classifier.__init__): Use a wxChoice
9994 control instead of a wxComboBox.
9995
9996 * Thuban/UI/mainwindow.py (MainWindow.Projection): Use new projection
9997 dialog.
9998
9999 * test/test_proj.py (TestProjection.test): New tests for GetParameter
10000 method.
10001
10002 2003-04-22 Bernhard Herzog <[email protected]>
10003
10004 * Thuban/UI/mainwindow.py: Remove some unused imports and global
10005 constants
10006
10007 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
10008 (IdentifyGridCtrl.selected_shape): Use table, not shapetable.
10009
10010 2003-04-17 Bernhard Herzog <[email protected]>
10011
10012 * Thuban/Model/layer.py: Don't import LAYER_LEGEND_CHANGED.
10013 (Layer): Update doc-string since LAYER_LEGEND_CHANGED is not used
10014 anymore.
10015 (Layer.BoundingBox, Layer.GetFieldType, Layer.NumShapes)
10016 (Layer.ShapeType, Layer.Shape): No need to call
10017 self.open_shapefile since it's always called in __init__
10018
10019 * Thuban/UI/application.py (ThubanApplication.MainLoop): Removed.
10020 In wxPython 2.4 there's no need to extend MainLoop anymore since
10021 wxPython itself makes sure OnExit is called.
10022
10023 2003-04-16 Jonathan Coles <[email protected]>
10024
10025 Initial putback of projection management code. Includes new
10026 classes to read and write projection files. The current load
10027 and save classes were abstracted a bit so they could be reused.
10028 The Projection class was extended to provide new methods and
10029 have a name.
10030
10031 * Thuban/Model/load.py (XMLProcessor): New. Contains all the
10032 general XML reading methods that were part of ProcessSession.
10033
10034 * Thuban/Model/proj.py (Projection.__init__): Accepts an optional
10035 name.
10036 (ProjFile): New. Represents a file that contains projection
10037 information.
10038
10039 * Thuban/Model/resource.py: New. Contains general utilities
10040 for read and writing projection files.
10041
10042 * Thuban/Model/save.py (XMLSaver): New. Contains all the
10043 general XML writing methods that were part of SessionSaver.
10044 (SessionSaver): Renamed from Saver.
10045
10046 * test/test_proj.py: New test cases for the projection
10047 file read and write functions.
10048
10049 2003-04-16 Jonathan Coles <[email protected]>
10050
10051 * Thuban/Model/classification.py: Use repr() around values
10052 in the ClassGroup*.__repr__() methods so it is clearer when
10053 a value is a string and when it is a number.
10054
10055 * test/test_load.py: Rework the classification test to test
10056 that we can load old files.
10057 (testLabels): Test a file where the groups have labels.
10058
10059 2003-04-16 Bernhard Herzog <[email protected]>
10060
10061 Safer implementation of the performance enhancements of the
10062 low-level renderer:
10063
10064 * extensions/thuban/wxproj.cpp (extract_projection)
10065 (extract_pointer): Rename extract_projection to extract_pointer
10066 and redefine its purpose to return the pointer stored in a CObject
10067 returned by the object's cobject method. Update all callers.
10068 (s_draw_info, free_draw_info, draw_polygon_init): Implement the
10069 handling of these low-level parameters so that each s_draw_info
10070 instance is handled as a CObject at python level that also
10071 contains real references to the actual python objects which
10072 contain the values in the struct. Add free_draw_info as the
10073 destructor.
10074 (draw_polygon_shape): Add the py_draw_info parameter which must a
10075 cobject containing an s_draw_info pointer.
10076
10077 * Thuban/UI/renderer.py (MapRenderer.polygon_render_param): New
10078 method to instantiat the low-level render parameter
10079 (MapRenderer.draw_shape_layer): Use the new method. Remove some
10080 commented out code.
10081 (MapRenderer.draw_polygon_shape): Make the first parameter not the
10082 layer but the low-level render parameter
10083 (ScreenRenderer.draw_shape_layer): Use the low-level render
10084 parameter.
10085
10086 2003-04-15 Jonathan Coles <[email protected]>
10087
10088 * Thuban/Model/classification.py: Implemented __repr__ for
10089 the ClassGroup* classes to make debugging a bit easier.
10090 (ClassGroup.SetLabel): Check that the string is an instance
10091 of StringTypes not StringType. Accounts for Unicode strings.
10092
10093 * Thuban/Model/color.py: Implemented __repr__ to make
10094 debugging a bit easier.
10095
10096 * Thuban/Model/save.py (Saver.write_classification): Need to
10097 save the group label.
10098
10099 * test/test_load.py (testClassification): New. Loads the
10100 iceland_sample_test.thuban file and checks if it was loaded
10101 correctly.
10102
10103 2003-04-15 Jonathan Coles <[email protected]>
10104
10105 * extensions/thuban/wxproj.cpp (draw_polygon_init): New. Used
10106 to improve rendering performance by initializing the variables
10107 that are not change each time draw_polygon_shape() is called.
10108 The values are stored in a global struct draw_info.
10109 (draw_polygon_shape): Removed initialization code that is
10110 now in draw_polygon_init().
10111
10112 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Make
10113 drawing initialization call to draw_polygon_init()
10114 (MapRenderer.draw_polygon_shape): Use new signature of
10115 draw_polygon_shape.
10116
10117 * Thuban/UI/classgen.py (GenUniformPanel): Fix spin control
10118 weirdness by setting the range to (1, maxint).
10119
10120 * Thuban/Model/classification.py (ClassGroupProperties): Make
10121 instance variables private and optimize comparison operator
10122 by first checking if the color references are the same.
10123 (ClassGroupSingleton): Make instance variables private.
10124 (ClassGroupRange): Make instance variables private.
10125
10126 * HOWTO-Release: Filled in missing steps for releasing packages.
10127
10128 2003-04-15 Bernhard Herzog <[email protected]>
10129
10130 First stab at internationalized messages:
10131
10132 * Thuban/__init__.py (_): Implement the translation function for
10133 real using the python gettext module.
10134
10135 * Thuban/UI/classifier.py (ClassTable.GetRowLabelValue): Don't
10136 translate empty strings.
10137
10138 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
10139 Add a missing space to a warning message
10140
10141 * po/README: New. Notes about the management of the translation
10142 files.
10143
10144 * po/Makefile: New. Makefile to help manage the translation files.
10145
10146 * po/es.po: New. Spanish translation by Daniel Calvelo Aros
10147
10148 * MANIFEST.in: Include the *.mo files in Resources/Locale and the
10149 translations and support files in po/
10150
10151 * setup.py (data_files): Add the *.mo files to the data_files too
10152
10153 * README: Add note about the translations when building from CVS
10154
10155 2003-04-14 Jonathan Coles <[email protected]>
10156
10157 * Thuban/UI/dock.py: Fixes some window resizing problems most
10158 noticable under windows. Always assume the button bitmaps will
10159 be there. Code clean up.
10160 (DockabelWindow.Dock, DockableWindow.UnDock): Force all the
10161 images for the dock/undock button to the same images.
10162 Work around for RTbug #1801.
10163
10164 * Thuban/UI/legend.py (LegendPanel.__init__): The toolbar should
10165 be allowed to grow within the sizer. Fixes a bug under Windows
10166 where the toolbar wasn't being drawn.
10167
10168 2003-04-14 Frank Koormann <[email protected]>
10169
10170 * Resources/Bitmaps/dock_12.xpm, Resources/Bitmaps/undock_12.xpm:
10171 Updated design to try to make the button functionality more
10172 transparent.
10173
10174 2003-04-14 Jonathan Coles <[email protected]>
10175
10176 * Thuban/UI/legend.py (LegendPanel.__init__): Call Create() to
10177 finalize the intialization of the panel.
10178
10179 * Thuban/UI/dock.py (DockPanel.Create): New. Finalizes the
10180 creation of the panel. Should be the last thing called in the
10181 initializer of a subclass.
10182
10183 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Actively
10184 set the current selections in the combo boxes. This is needed
10185 under Windows.
10186
10187 * Thuban/UI/classifier.py (Classifier.__init__): Add a top
10188 level panel to the dialog so that the background colors are
10189 consistent under Windows.
10190
10191 2003-04-11 Jonathan Coles <[email protected]>
10192
10193 * Thuban/UI/classgen.py: Change color ramps to start at white
10194 not black.
10195
10196 * Thuban/UI/legend.py: Enable/disable the legend buttons when
10197 the legend changes. Fixes RTbug #1793.
10198
10199 * test/test_classification.py: Added test for copying of
10200 classifications.
10201
10202 2003-04-11 Jonathan Coles <[email protected]>
10203
10204 * Thuban/UI/resource.py: New. Centralize the loading of resources
10205 such as bitmaps.
10206
10207 * Thuban/UI/classgen.py (GenUniquePanel.__init__): Reordered buttons,
10208 added images to the move buttons, added 'reverse' button.
10209 (CustomRampPanel.__init__): Added images to the move buttons.
10210 (GreyRamp): New. Generates a ramp from white to black.
10211 (HotToColdRamp): New. Generates a ramp from cold to hot colors.
10212
10213 * Thuban/UI/classifier.py: Refactored ID's from ID_CLASSIFY_* to
10214 ID_PROPERTY_*.
10215 (Classifier.__init__): Minor changes to the layout.
10216 (Classifier._OnTitleChanged): Listen for when the user edits the
10217 title and update the dialog's title and the layer's title.
10218
10219 * Thuban/UI/dock.py: Use new bitmaps for the control buttons.
10220
10221 * Thuban/UI/legend.py: Use new bitmaps for the control buttons.
10222 (LegendTree._OnMsgLayerTitleChanged): Change the displayed title
10223 if the layer's title changes.
10224
10225 * Thuban/UI/mainwindow.py: Added new menu item and associated code
10226 to open a dialog to rename the map.
10227 (MainWindow): Use new resource class to import bitmaps.
10228
10229 2003-04-11 Jonathan Coles <[email protected]>
10230
10231 * Resources/Bitmaps/close_12.xpm, Resources/Bitmaps/dock_12.xpm,
10232 Resources/Bitmaps/group_use.xpm, Resources/Bitmaps/group_use_all.xpm,
10233 Resources/Bitmaps/group_use_none.xpm,
10234 Resources/Bitmaps/group_use_not.xpm,
10235 Resources/Bitmaps/hide_layer.xpm,
10236 Resources/Bitmaps/layer_properties.xpm,
10237 Resources/Bitmaps/lower_layer.xpm, Resources/Bitmaps/raise_layer.xpm,
10238 Resources/Bitmaps/show_layer.xpm, Resources/Bitmaps/undock_12.xpm:
10239 New.
10240
10241 2003-04-10 Jonathan Coles <[email protected]>
10242
10243 * Thuban/Model/classification.py: (ClassGroupRange.__init__):
10244 Should pass group to ClassGroup constructor.
10245
10246 2003-04-10 Jonathan Coles <[email protected]>
10247
10248 * Thuban/Model/classification.py: (ClassGroup): Move all the common
10249 methods of the derived classes ([Set|Get]Properties(), __eq__, __ne__)
10250 here. Implement SetVisible(), IsVisible().
10251 (ClassGroup.__init__): Add group parameter which acts as a copy
10252 constructor.
10253
10254 * Thuban/UI/classifier.py (ClassTable): Add a new column for the
10255 "Visible" check boxes.
10256 (Classifier): Rename the buttons and refactor the code to match
10257 the new labels.
10258
10259 * Thuban/UI/legend.py: Classify button is now called "Properties".
10260 Refactored the code to change variable names.
10261 (LegendTree.__FillTreeLayer): Only list a group if it is visible.
10262
10263 * Thuban/UI/mainwindow.py: MainWindow.OpenClassifier renamed to
10264 MainWindow.OpenLayerProperties. MainWindow.LayerEditProperties
10265 renamed to MainWindow.LayerEditProperties.
10266 (MainWindow.ToggleLegend): Don't include map name in legend title.
10267 (MainWindow.SetMap): Added the map name to the window title.
10268 (MainWindow.LayerFillColor, MainWindow.LayerTransparentFill,
10269 MainWindow.LayerOutlineColor, MainWindow.LayerNoOutline): Removed.
10270 Functionality is found in the layer properties dialog.
10271
10272 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
10273 draw visible groups.
10274
10275 2003-04-09 Jonathan Coles <[email protected]>
10276
10277 * Thuban/UI/classgen.py: Modifications to allow simple
10278 addition and selection of new color schemes.
10279 (MonochromaticRamp): New. Generates a ramp between two colors.
10280 (RedRamp): New. Generates a ramp of all red.
10281 (GreenRamp): New. Generates a ramp of all green.
10282 (BlueRamp): New. Generates a ramp of all blue.
10283
10284 2003-04-09 Jonathan Coles <[email protected]>
10285
10286 * Thuban/Model/classification.py (Classification.__deepcopy__):
10287 Need to copy over field and fieldType attributes.
10288
10289 * Thuban/Model/table.py (Table.field_range): New. Retrive the
10290 maximum and minimum values over the entire table for a given
10291 field.
10292 (Table.GetUniqueValues): New. Retrieve all the unique values
10293 in the table for a given field.
10294
10295 * Thuban/UI/classgen.py: Renamed GenRangePanel to GenUniformPanel.
10296 (GenUniquePanel): New. Controls to allow the user to select
10297 which unique field values they would like in the classification.
10298 (CustomRampPanel): Code that was in ClassGenDialog that allows
10299 the user to select the properties for a custom ramp.
10300 (ClassGenerator.GenUniformDistribution): Was called GenerateRanges.
10301
10302 * Thuban/UI/classifier.py: Removed a lot of debugging code.
10303 (Classifier._SetClassification): Callback method so that the
10304 class generator can set the classification in the grid.
10305 (ClassGroupPropertiesCtrl): New. Encapsulates the drawing and
10306 editing of a group properties class into a wxWindows control.
10307
10308 * Thuban/UI/dock.py: It was decided that if the user closes
10309 a dockable window the window should simply hide itself. That
10310 way if the user wants to show the dock again it appears in the
10311 same place as it was when it was closed.
10312 (DockableWindow.Destroy): Call renamed method OnDockDestroy().
10313 (DockableWindow._OnButtonClose): Hide the window instead of
10314 destroying it.
10315 (DockableWindow._OnClose): Hide the window instead of
10316 destroying it.
10317
10318 * Thuban/UI/legend.py (LegendTree): Use a private method to
10319 consistently set the font and style of the text. Fixes RTbug #1786.
10320
10321 * Thuban/UI/mainwindow.py: Import just the Classifier class.
10322
10323 2003-04-07 Bernhard Herzog <[email protected]>
10324
10325 * Thuban/UI/mainwindow.py (main_menu): Move the toggle_legend item
10326 to the map module
10327
10328 2003-04-07 Bernhard Herzog <[email protected]>
10329
10330 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree): Removed in
10331 favor of ToggleSessionTree
10332 (MainWindow.ToggleSessionTree): New method to toggle visibility of
10333 the session tree.
10334 (MainWindow.SessionTreeShown): New method to return whether the
10335 session tree is currently shown.
10336 (MainWindow.ToggleLegend): New method to toggle visibility of the
10337 legend
10338 (MainWindow.ShowLegend): Implement in terms of ToggleLegend and
10339 LegendShown
10340 (MainWindow.LegendShown): New method to return whether the legend
10341 is currently shown.
10342 (_method_command): Add checked parameter so we can define check
10343 menu items
10344 (_has_tree_window_shown, _has_legend_shown): Use the appropriate
10345 mainwindow methods.
10346 (show_session_tree, show_legend commands): Removed.
10347 (toggle_session_tree, toggle_legend commands): New commands to
10348 toggle the visibility of the dialogs
10349
10350 2003-04-07 Jonathan Coles <[email protected]>
10351
10352 * Thuban/UI/classgen.py: Fix Windows problem.
10353
10354 * Thuban/UI/dock.py: Fix Windows problem.
10355
10356 * Thuban/UI/mainwindow.py: Use False instead of false.
10357 (MainWindow.ShowLegend): Remove unnecessary switch parameter.
10358
10359 2003-04-07 Jonathan Coles <[email protected]>
10360
10361 Since we now say that the order of the groups in a classification
10362 matters, it makes sense to be able to manipulate that order. Most
10363 of the changes to Thuban/Model/classification.py are to that end.
10364
10365 * Thuban/Model/classification.py (Classification.AppendGroup,
10366 Classification.InsertGroup, Classification.ReplaceGroup,
10367 Classification.RemoveGroup, Classification.GetGroup): Do as the
10368 names imply.
10369 (Classification.FindGroup): This was called GetGroup, but GetGroup
10370 takes an index, while FindGroup takes a value.
10371 (Classification.__deepcopy__): Copy all the groups, BUT NOT THE LAYER
10372 REFERENCE. Currently there is a cyclic reference between the layer
10373 and its classification. If the classification doesn't need to know
10374 its owning layer we can change this, since it may make sense to be
10375 able to use the same classification with different layers.
10376
10377 * Thuban/Model/load.py: Use Classification.AppendGroup(), not AddGroup()
10378
10379 * Thuban/UI/classgen.py: Use Classification.AppendGroup(),
10380 not AddGroup()
10381
10382 * Thuban/UI/classifier.py: Now that we can depend on the order in
10383 a Classification and have methods to manipulate that order we don't
10384 need to use our own data structures in the grid. We can simply make
10385 the grid/table access the information they need from a copy of
10386 the classification object.
10387 (Classifier._OnCloseBtn): Event handler for when the user clicks
10388 'Close'. This is needed so if the user applies changes and then
10389 continues to change the table the user has the option of discarding
10390 the most recent changes and keeping what they applied.
10391
10392 * Thuban/UI/mainwindow.py: Put "Show Legend" and "Show Session Tree"
10393 into the same group.
10394
10395 * extensions/thuban/wxproj.cpp (check_version): If Thuban is compiled
10396 with a really old version of proj, PJ_VERSION won't even be defined.
10397 If it isn't defined then just compile so that the function always
10398 returns Py_False.
10399
10400 * test/test_classification.py: Fix tests to use the renamed methods.
10401 Still need to write tests for the new methods.
10402
10403 2003-04-04 Jonathan Coles <[email protected]>
10404
10405 * Thuban/UI/classifier.py (Classifier.__SelectField): Move the
10406 call to SetSelection out of the method and before the call
10407 to __SelectField in __init__. This prevents a recursion of events
10408 when _OnFieldSelect is triggered by the user.
10409
10410 2003-04-04 Jonathan Coles <[email protected]>
10411
10412 * Thuban/Model/classification.py: Rename Color.None to
10413 Color.Transparent.
10414 (ClassGroupProperties.SetLineColori, ClassGroupProperties.SetFill):
10415 Don't bother copying the color, since Colors are immutable.
10416
10417 * Thuban/Model/color.py, Thuban/Model/layer.py, Thuban/Model/load.py,
10418 Thuban/UI/classifier.py, Thuban/UI/mainwindow.py,
10419 Thuban/UI/renderer.py, Thuban/UI/view.py:
10420 Rename Color.None to Color.Transparent.
10421
10422 * test/test_classification.py, test/test_load.py: Rename Color.None
10423 to Color.Transparent.
10424
10425 2003-04-04 Jonathan Coles <[email protected]>
10426
10427 * Thuban/Model/classification.py: Fix assert calls.
10428 (ClassGroupProperties.SetLineColor, ClassGroupProperties.SetFill):
10429 Copy the color parameter rather than hold onto a reference.
10430
10431 * Thuban/Model/color.py (Color.__copy__, Color.__deepcopy): Copy
10432 the color object.
10433 (NoColor.__copy__, NoColor.__deepcopy): Return 'self' so that we
10434 are sure there exists only one refernce to Color.None in the system.
10435 This allows us to use 'is' rather than the comparision functions.
10436
10437 * Thuban/Model/save.py: Fix assert calls.
10438
10439 * Thuban/UI/classifier.py: Fix assert calls.
10440 (ClassGrid._OnCellDClick): Call up to the classifier to open the
10441 dialog to edit the groups properties.
10442 (ClassGrid._OnCellResize): Make sure that the scollbars are drawn
10443 correctly if a cell is resized.
10444 (ClassTable.SetClassification): New. Changes the classification
10445 that is in the table.
10446 (ClassTable.__SetRow): Allow groups to be prepended.
10447 (Classifier): New code for opening the EditProperties and
10448 GenerateRanges dialogs.
10449 (SelectPropertiesDialog.__GetColor): Only set the color in the
10450 color dialog if the current color is not None.
10451
10452 * Thuban/UI/dock.py: Fix assert calls.
10453
10454 * Thuban/UI/legend.py: Fix assert calls.
10455
10456 * Thuban/UI/renderer.py: Fix assert calls.
10457
10458 * Thuban/UI/classgen.py (ClassGenDialog): Dialog for generating
10459 classifications.
10460 (GenRangePanel): Panel specific to range generation.
10461 (GenSingletonPanel): Panel specific to singleton generation.
10462 (ClassGenerator): Class responsible for actually generating
10463 the classification from the data gathered in the dialog box.
10464 (PropertyRamp): Generates properties whose values range from
10465 a starting property to an ending property.
10466
10467 2003-04-03 Bernhard Herzog <[email protected]>
10468
10469 * test/support.py (print_garbage_information): New function that
10470 prints information about still connected messages and memory
10471 leaks.
10472 (run_suite): Removed.
10473 (run_tests): New function for use as a replacement of
10474 unittest.main in the test_* files. This one calls
10475 print_garbage_information at the end.
10476
10477 * test/runtests.py (main): Use support.print_garbage_information
10478
10479 * test/test_layer.py: Use support.run_tests instead of
10480 unittest.main so we get memory leak information
10481 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
10482 (TestLayer.test_point_layer, TestLayer.test_empty_layer)
10483 (TestLayerLegend.test_visibility): Call the layer's Destroy method
10484 to fix a memory leak.
10485
10486 * test/test_classification.py: Use support.run_tests instead of
10487 unittest.main so we get memory leak information
10488 (TestClassification.test_classification): Call the layer's Destroy
10489 method to fix a memory leak.
10490
10491 2003-04-02 Bernhard Herzog <[email protected]>
10492
10493 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
10494 Handle the reference counts of the return value and errors in
10495 PyArg_ParseTuple correctly.
10496
10497 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
10498 sure the filename is absolute to avoid problems when saving the
10499 session again
10500
10501 * Thuban/Model/table.py: Remove unnecessary import. Fix a typo.
10502
10503 2003-04-01 Jonathan Coles <[email protected]>
10504
10505 * Thuban/UI/renderer.py (MapRenderer.draw_point_shape): Check
10506 that there actually are points in the returned list of points
10507 before trying to index into the list. The list may be empty if
10508 the shape is a Null Shape.
10509
10510 2003-04-01 Bernhard Herzog <[email protected]>
10511
10512 * test/test_map.py: Don't use from <module> import *
10513
10514 2003-04-01 Jonathan Coles <[email protected]>
10515
10516 * Thuban/Model/session.py: Use LAYER_CHANGED instead of
10517 LAYER_LEGEND_CHANGED
10518
10519 * Thuban/UI/dock.py (DockableWindow._OnButtonClose): Call
10520 self.Destroy() to close the window after yesterday's changes.
10521
10522 * test/test_map.py, test/test_session.py: Fix messages that
10523 are sent from maps and layers.
10524
10525 2003-03-31 Jonathan Coles <[email protected]>
10526
10527 * Thuban/UI/classifier.py: Commented out some debugging statements.
10528 (ClassDataPreviewer.Draw): Draw rectangles for polygon layers per
10529 RTbug #1769.
10530
10531 * Thuban/UI/dock.py (DockableWindow.UnDock): Restore size and
10532 position (although position doesn't work yet under GTK).
10533 (DockableWindow.Destroy): New. Called when the window must be
10534 closed. Namely needed when the DockFrame closes and must close
10535 its children.
10536 (DockFrame): Listen for EVT_CLOSE and destroy all children.
10537
10538 * Thuban/UI/legend.py (LegendPanel.Destroy): New. Cleans up
10539 when then window is told to close.
10540 (LegendTree._OnMsgLayerChanged): Fixes a seg fault bug. See
10541 comment in source for more info.
10542
10543 * Thuban/UI/main.py: Show the legend by default when Thuban starts.
10544
10545 * Thuban/UI/mainwindow.py: Renamed OnClose to _OnClose for
10546 symmetry with other such methods.
10547 (MainWindow.ShowLegend): Show the legend docked by default.
10548
10549 2003-03-28 Jonathan Coles <[email protected]>
10550
10551 * Thuban/UI/classifier.py: Support for highlighting a specific
10552 group within the grid when the classification dialog is opened.
10553 Also contains a lot of debugging printouts which will later
10554 be removed.
10555
10556 * Thuban/UI/dock.py: Complete rework on the dock code so that
10557 that it is fairly removed from the rest of the Thuban application.
10558 It is easy to add new docks which the rest of the program having
10559 to be aware of them.
10560
10561 * Thuban/UI/legend.py: Modifications to support selecting a
10562 specific group in the classification dialog. Changed how layers
10563 are drawn when the layer is visible/invisible.
10564
10565 * Thuban/UI/mainwindow.py: Removed legend specific code and
10566 replaced it with calls to the new dock code.
10567
10568 * Thuban/UI/renderer.py (MapRenderer.__init__): Added assert
10569 to check if scale > 0. Trying to track down a divide by zero.
10570
10571 2003-03-26 Jonathan Coles <[email protected]>
10572
10573 * Thuban/UI/legend.py: Removed unnecessary LegendDialog class.
10574 (LegendPanel): Removed _OnDock()/_OnUnDock() methods which are
10575 now part of DockableWindow.
10576 (LegendPanel.DoOnSelChanged): Select the current layer in the
10577 map.
10578 (LegendTree._OnSelChanged): Call LegendPanel.DoOnSelChanged()
10579 with the selected layer and/or group.
10580
10581 2003-03-26 Jonathan Coles <[email protected]>
10582
10583 This putback contains the code for dockable windows. There is
10584 no support in wxWindows as of this date for windows that can
10585 attach themselves to other windows.
10586
10587 The current model contains a DockableWindow which has a parent
10588 window for when it is detached and a dock window that it puts
10589 its contents in when it is docked. The contents of a DockableWindow
10590 must be a DockPanel. DockPanel itself derives from wxPanel.
10591
10592 * Thuban/Model/layer.py (Layer.ClassChanged): Send a LAYER_CHANGED
10593 message, not a LAYER_LEGEND_CHANGED message.
10594
10595 * Thuban/Model/map.py (Map): Forward LAYER_CHANGED messages.
10596
10597 * Thuban/UI/classifier.py (Classifier.__init__): Use wxADJUST_MINSIZE
10598 as one of the style properties for the fieldTypeText item to
10599 be sure that its size is correct when the text changes.
10600
10601 * Thuban/UI/dock.py: New. Classes for the DockPanel and
10602 DockableWindow.
10603
10604 * Thuban/UI/legend.py: Added some more buttons and made the
10605 LegendPanel a DockPanel.
10606
10607 * Thuban/UI/mainwindow.py: Added sash windows to the main window
10608 and supporting functions for manipulating the sashes.
10609 (MainWindow.ShowLegend): Create a DockableWindow with the
10610 LegendPanel as the contents.
10611
10612 * Thuban/UI/messages.py: Added DOCKABLE_* messages
10613
10614 * Thuban/UI/view.py (MapCanves.SetMap): Listen for LAYER_CHANGED,
10615 not LAYER_LEGEND_CHANGED, messages.
10616
10617 2003-03-25 Jonathan Coles <[email protected]>
10618
10619 * setup.py: Added custom script bdist_rpm_build_script so that
10620 when the rpm is built the path to wx-config is correct.
10621
10622 * setup.cfg: Added line saying to use the custom build script
10623
10624 2003-03-20 Jonathan Coles <[email protected]>
10625
10626 Initial implementation of the Legend.
10627
10628 * Thuban/UI/legend.py: New. Creates a window that shows the map's
10629 Legend information and allows the user to add/modify classifications
10630 and how the layers are drawn on the map.
10631
10632 * setup.py: New command 'build_docs' which currently uses
10633 happydoc to generate html documentation for Thuban.
10634
10635 * Thuban/Model/classification.py (ClassGroup.GetDisplayText): New.
10636 Returns a string which is appropriately describes the group.
10637
10638 * Thuban/Model/layer.py (Layer.SetClassification): Generate a
10639 LAYER_CHANGED event instead of a LAYER_LEGEND_CHANGED event.
10640
10641 * Thuban/Model/map.py (Map): Rename messages and use new, more
10642 specific, messages.
10643
10644 * Thuban/Model/messages.py: New message to indicate that a layer's
10645 data has changed (LAYER_CHANGED). New map messages to indicate
10646 when layers have been added/removed/changed or if the stacking order
10647 of the layers has changed.
10648
10649 * Thuban/Model/session.py: Rename and use new messages.
10650
10651 * Thuban/UI/classifier.py: Remember if any changes have actually
10652 been applied so that if the dialog is cancelled without an application
10653 of changes we don't have to set a new classification.
10654 (ClassDataPreviewer): Pulled out the window specific code and put it
10655 ClassDataPreviewWindow. ClassDataPreviewer can then be used to draw
10656 symbols on any DC.
10657
10658 * Thuban/UI/mainwindow.py: New code to open the legend.
10659
10660 * Thuban/UI/view.py: Use new message names.
10661
10662 2003-03-19 Jonathan Coles <[email protected]>
10663
10664 * Thuban/UI/main.py (verify_versions): New. Checks the versions
10665 of Python, wxPython, and some other libraries.
10666
10667 * extensions/thuban/wxproj.cpp (check_version): Checks the given
10668 version against what wxproj was compiled with.
10669 (check_version_gtk): If wxproj was compiled with gtk then check
10670 the given version against the version of the gtk library
10671 currently being used.
10672
10673 2003-03-14 Bernhard Herzog <[email protected]>
10674
10675 * test/test_command.py: Run the tests when the module is run as a
10676 script
10677
10678 2003-03-14 Bernhard Herzog <[email protected]>
10679
10680 Implement selection of multiple selected shapes in the same layer:
10681
10682 - Introduce a new class to hold the selection. This basically
10683 replaces the interactor which was nothing more than the
10684 selection anyway. A major difference is of course that the new
10685 selection class supports multiple selected shapes in one layer
10686
10687 - Move the object that represents the selection from the
10688 application to the canvas. The canvas is a better place than the
10689 application because the selection represents which shapes and
10690 layer of the map displayed by the canvas are selected and
10691 affects how the map is drawn.
10692
10693 - Make the selection and its messages publicly available through
10694 the mainwindow.
10695
10696 - The non-modal dialogs do not get a reference to the interactor
10697 anymore as they can simply refer to their parent, the
10698 mainwindow, for the what the interactor had to offer.
10699
10700 * Thuban/UI/selection.py: New module with a class to represent the
10701 selection.
10702
10703 * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
10704 these unused messages
10705
10706 * Thuban/UI/application.py (ThubanApplication.OnInit)
10707 (ThubanApplication.OnExit, ThubanApplication.SetSession): The
10708 interactor is gone now.
10709 (ThubanApplication.CreateMainWindow): There is no interactor
10710 anymore so we pass None as the interactor argument for now for
10711 compatibility.
10712
10713 * Thuban/UI/view.py (MapCanvas.delegated_messages)
10714 (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
10715 Unsubscribe, delegate messages according to the delegated_messages
10716 class variable.
10717 (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
10718 attributes from instance variables as described with the
10719 delegated_methods class variable.
10720 (MapCanvas.__init__): New instance variable selection holding the
10721 current selection
10722 (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
10723 pass them on to the renderer
10724 (MapCanvas.SetMap): Clear the selection when a different map is
10725 selected.
10726 (MapCanvas.shape_selected): Simple force a complete redraw. The
10727 selection class now takes care of only issueing SHAPES_SELECTED
10728 messages when the set of selected shapes actually does change.
10729 (MapCanvas.SelectShapeAt): The selection is now managed in
10730 self.selection
10731
10732 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
10733 (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
10734 Unsubscribe, delegate messages according to the delegated_messages
10735 class variable.
10736 (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
10737 attributes from instance variables as described with the
10738 delegated_methods class variable.
10739 (MainWindow.__init__): The interactor as ivar is gone. The
10740 parameter is still there for compatibility. The selection messages
10741 now come from the canvas.
10742 (MainWindow.current_layer, MainWindow.has_selected_layer):
10743 Delegate to the the canvas.
10744 (MainWindow.LayerShowTable, MainWindow.Classify)
10745 (MainWindow.identify_view_on_demand): The dialogs don't need the
10746 interactor parameter anymore.
10747
10748 * Thuban/UI/tableview.py (TableFrame.__init__)
10749 (LayerTableFrame.__init__, LayerTableFrame.OnClose)
10750 (LayerTableFrame.row_selected): The interactor is gone. It's job
10751 from the dialog's point of view is now done by the mainwindow,
10752 i.e. the parent. Subscribe to SHAPES_SELECTED instead
10753 of SELECTED_SHAPE
10754
10755 * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
10756 is gone. It's job from the dialog's point of view is now done by
10757 the mainwindow, i.e. the parent.
10758
10759 * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
10760 gone. It's job from the dialog's point of view is now done by the
10761 mainwindow, i.e. the parent.
10762
10763 * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
10764 gone. It's job from the dialog's point of view is now done by the
10765 mainwindow, i.e. the parent.
10766 (SessionTreeCtrl.__init__): New parameter mainwindow which is
10767 stored as self.mainwindow. The mainwindow is need so that the tree
10768 can still subscribe to the selection messages.
10769 (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
10770 (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
10771 selection is now accessible through the mainwindow. Subscribe to
10772 SHAPES_SELECTED instead of SELECTED_SHAPE
10773
10774 * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
10775 SHAPES_SELECTED message now.
10776 (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
10777 so deal with multiple shapes
10778 (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
10779 gone. It's job from the dialog's point of view is now done by the
10780 mainwindow, i.e. the parent.
10781
10782 * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
10783 parameter is now a list of shape ids.
10784 (RecordTable.SetTable): The second parameter is now a list of
10785 indices.
10786
10787 * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
10788 selected_shape parameter and ivar to selected_shapes. It's now a
10789 list of shape ids.
10790 (MapRenderer.draw_label_layer): Deal with multiple selected
10791 shapes. Rearrange the code a bit so that the setup and shape type
10792 distinctions are only executed once.
10793
10794 * test/test_selection.py: Test cases for the selection class
10795
10796 2003-03-11 Jonathan Coles <[email protected]>
10797
10798 * Thuban/Model/load.py: Temporary fix so that the xml reader
10799 doesn't cause Thuban to crash.
10800
10801 * Thuban/Model/layer.py: Handle the cyclic references between
10802 a layer and its classification better, and be sure to disconnect
10803 the classification from the layer when the layer is destroyed
10804 so that we don't maintain a cyclic reference that may not be
10805 garbage collected.
10806
10807 * Thuban/Model/classification.py: See comment for layer.py.
10808
10809 2003-03-12 Jan-Oliver Wagner <[email protected]>
10810
10811 * HOWTO-Release: New. Information on the steps for releasing
10812 a new version of Thuban.
10813
10814 2003-03-11 Jonathan Coles <[email protected]>
10815
10816 * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
10817 Use True instead of true.
10818 (Classifier): Should have a single panel in which all the controls lie.
10819
10820 * Thuban/UI/proj4dialog.py: Add normal border.
10821
10822 * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
10823
10824 * Thuban/UI/mainwindow.py: Use True instead of true.
10825
10826 * setup.py: Update some definitions to use wxWindows2.4 files
10827
10828 * Data/iceland_sample_class.thuban: Fixed file so that the
10829 field_type information is present.
10830
10831 2003-03-10 Jonathan Coles <[email protected]>
10832
10833 * Thuban/UI/classifier.py (Classifier.__init__): Make the
10834 field type label grow so that when the text changes the
10835 size is updated correctly. This may be a wxWindows bug.
10836
10837 2003-03-10 Jonathan Coles <[email protected]>
10838
10839 * Thuban/UI/application.py: Changed SESSION_CHANGED to
10840 SESSION_REPLACED.
10841
10842 * Thuban/UI/classifier.py: Wrap text with _().
10843 (ClassGrid.CreateTable): Set dimensions and size hints here,
10844 instead of in Reset, so we only set the size once.
10845
10846 * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
10847
10848 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
10849 Call Close() instead of Shutdown().
10850
10851 * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
10852
10853 * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
10854 Go back to using OnClose() instead of Shutdown().
10855
10856 2003-03-10 Jonathan Coles <[email protected]>
10857
10858 * Thuban/UI/classifier.py (Classifier): SelectField() needed
10859 to know the old field index as well as the new one.
10860
10861 2003-03-10 Jonathan Coles <[email protected]>
10862
10863 * Thuban/UI/classifier.py (Classifier): Use __SelectField()
10864 to correctly set the table information and call this from
10865 __init__ and from _OnFieldSelect so that all the information
10866 is up to date when the dialog opens and when a field is changed.
10867
10868 2003-03-10 Jonathan Coles <[email protected]>
10869
10870 * Thuban/Model/classification.py (Classification): Don't use
10871 layer's message function directly, use the ClassChanged() method
10872 when then classification changes. SetField/SetFieldType/SetLayer
10873 must keep the information about field name and field type in
10874 sync when an owning layer is set or removed.
10875
10876 * Thuban/Model/layer.py: Added ClassChanged() so that the
10877 classification can tell the layer when its data has changed.
10878 (Layer.SetClassification): Accepts None as an arguement to
10879 remove the current classification and correctly handles
10880 adding a new classification.
10881
10882 * Thuban/Model/load.py: Comment out print statement
10883
10884 * test/test_classification.py, test/test_save.py: New and
10885 improved tests.
10886
10887 2003-03-07 Jonathan Coles <[email protected]>
10888
10889 * Thuban/Model/classification.py: Implemented __copy__ and
10890 __deepcopy__ for ClassGroup* and ClassGroupProperites so
10891 they can easily be copied by the classifier dialog.
10892 (ClassGroupProperites.__init__): The default line color should
10893 have been Color.Black.
10894
10895 * Thuban/UI/classifier.py: Setting and Getting table values now
10896 uses a consistent set of functions.
10897 (Classifier): Now non-modal. Has field type label which changes
10898 as the field changes. Keep track of buttons in a list so that
10899 we can enable/disable the buttons when the None field is selected.
10900 (SelectPropertiesDialog): Add buttons to make the colors transparent.
10901
10902 * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
10903 does what OnClose did, but can be called by the application to
10904 close a window. Needed when a session changes, and we have to
10905 close the classifier windows.
10906
10907 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
10908 Shuts down open dialogs. Used when a new session is created
10909 or a session is opened.
10910 (MainWindow.SaveSession): Should only call application.SaveSession()
10911 if we don't call SaveSessionAs first.
10912 (MainWindow.Classify): Allow different classifier dialogs for
10913 different layers.
10914
10915 * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
10916 the parent class handle it. Add Shutdown() to unsubscibe from
10917 event notification and call the parent Shutdown(). This was
10918 necessary so the application can close the tree window.
10919
10920 2003-03-06 Jonathan Coles <[email protected]>
10921
10922 * Thuban/Model/classification.py: Minor documentation changes,
10923 Addition of __eq__ and __ne__ methods.
10924 (Classification.SetLayer): prevent recursion between this method
10925 and Layer.SetClassification().
10926
10927 * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
10928
10929 * Thuban/Model/layer.py (SetClassification): prevent recursion
10930 between this method and Classification.SetLayer().
10931
10932 * test/test_classification.py, test/test_load.py,
10933 test/test_session.py: Fixed and added tests for the classification
10934 classes.
10935
10936 2003-03-06 Bernhard Herzog <[email protected]>
10937
10938 * Thuban/UI/classifier.py (ClassGrid.__init__)
10939 (ClassGrid.CreateTable): Move the SetSelectionMode call to
10940 CreateTable because otherwise it triggers an assertion in
10941 wxPython/wxGTK 2.4.
10942
10943 2003-03-05 Jonathan Coles <[email protected]>
10944
10945 * Thuban/common.py: Move FIELDTYPE constants back to table.py.
10946
10947 * Thuban/Model/load.py: import FIELDTYPE constants from table.
10948
10949 * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
10950
10951 * Thuban/Model/table.py: Put FIELDTYPE constants back.
10952
10953 2003-03-05 Jonathan Coles <[email protected]>
10954
10955 * Thuban/UI/classifier.py: Added class documentation.
10956 Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
10957 Store just the groups in the table and generate the other
10958 column information when it is requested. Add "None" field
10959 to pull-down to select no classification.
10960
10961 * Thuban/common.py: Moved FIELDTYPE constants from table.py
10962 (Str2Num): Only catch ValueError exceptions.
10963
10964 * Thuban/Model/classification.py: Class documentation. Renaming
10965 of methods with Stroke to Line. Groups are stored in a single
10966 list with the default as the first element. Groups are searched
10967 in the order they appear in the list.
10968
10969 * Thuban/Model/color.py: Documentation.
10970
10971 * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
10972 the kind of data represented by a field.
10973
10974 * Thuban/Model/load.py (ProcessSession): Use proper string
10975 conversion function; fixes RTbug #1713.
10976
10977 * Thuban/Model/save.py (Saver): Store field type information.
10978
10979 * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
10980 (Table): Add field_info_by_name() to retrieve field information
10981 by specifying the field name, not the number.
10982
10983 * Thuban/UI/mainwindow.py: Function name changes.
10984
10985 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
10986 get the layer classification once. Don't try to classify
10987 values when the field is None: just use the default properties.
10988
10989 * Thuban/UI/view.py: Function name changes.
10990
10991 * Doc/thuban.dtd: Add field_type attribute to a classification.
10992
10993 2003-03-04 Bernhard Herzog <[email protected]>
10994
10995 * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
10996 the fill and stroke layer attributes optional with suitable
10997 default values. Add the stroke_width layer attribute. Use correct
10998 syntax for empty elements. Make the attribute list for labels
10999 refer to the label element.
11000
11001 2003-03-04 Bernhard Herzog <[email protected]>
11002
11003 * setup.py (thuban_build_py.build): Add a comment about distutils in
11004 Python 2.3 containing some of the functionality we implement in
11005 setup.py ourselves.
11006
11007 * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
11008 before the selection mode. Doing it the other way round triggers
11009 an assertion in wxWindows.
11010
11011 * Thuban/Model/save.py (escape): Fix typo in doc-string
11012
11013 * Thuban/Model/classification.py: Remove unnecessary wxPython
11014 import
11015
11016 2003-03-04 Jonathan Coles <[email protected]>
11017
11018 * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
11019 Parameter 'value' should default to None.
11020
11021 * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
11022 the class attribute __classification is now private.
11023
11024 * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
11025 Classifier to ClassGrid. Added support for removing selected rows,
11026 which including code for keeping track of when cells are selected,
11027 and deselected.
11028 (ClassTable): Support for added/removing rows. Fixed a problem
11029 with __ParseInput whereby it would not allow strings (only numbers)
11030 to be entered.
11031 (Classifier): Added button and supporting code for removing
11032 selected rows.
11033
11034 2003-02-27 Jonathan Coles <[email protected]>
11035
11036 * Thuban/common.py: Moved color conversion functions into
11037 Thuban/UI/common.py.
11038 (Str2Num): Now converts the float (not the string) to a long/int
11039 so that an exception isn't thrown.
11040
11041 * Thuban/UI/common.py: Common functions used in several UI modules
11042
11043 * Thuban/Model/classification.py: Changed the class hierarchy
11044 so that a Classification consists of Groups which return
11045 Properties when a value matches a Group.
11046
11047 * Thuban/Model/layer.py: Fixed name resolution problem.
11048
11049 * Thuban/Model/load.py: Use new Classification and Group functions.
11050
11051 * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
11052 failure.
11053 (Saver.write_classification): Use new Classification and Group
11054 functions.
11055
11056 * Thuban/UI/classifier.py: Changes to use new Classification and Group
11057 functions. Fix to create a tuple with a single value instead of
11058 simply returning the value.
11059
11060 * Thuban/UI/renderer.py: Use new Classification and Group functions.
11061 Use common.py functions.
11062
11063 * Thuban/UI/tree.py: Use common.py functions.
11064
11065 * test/test_classification.py: Use new Classification and Group
11066 classes.
11067
11068 2003-02-24 Jonathan Coles <[email protected]>
11069
11070 * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
11071 functions from Thuban color objects to wxWindow colour objects.
11072
11073 * Thuban/Model/classification.py (Classification): Renamed
11074 GetProperties() to GetClassData(). Used the new iterator
11075 in TreeInfo().
11076 (ClassIterator): Iterator implementation to iterate over the
11077 ClassData objects in a classification object.
11078
11079 * Thuban/Model/save.py (Saver.write_classificaton): Uses
11080 the new iterator to save the classification information.
11081
11082 * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
11083 for changing the stroke and fill colors and previewing the
11084 changes.
11085
11086 * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
11087 MainWindow.SaveSessionAs): Text string changes so the dialogs
11088 have more meaningful titles.
11089
11090 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
11091 Classification method name from GetProperties to GetClassData.
11092
11093 * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
11094 instead of accessing now non-existent class variables.
11095
11096 2003-02-24 Bernhard Herzog <[email protected]>
11097
11098 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
11099 unneeded Shape() call. Rendering is substantially faster without
11100 it and it avoids some problems with broken shape files.
11101
11102 2003-02-20 Frank Koormann <[email protected]>
11103
11104 Force minimal size of identify and label dialogs. The autosizing
11105 looked too ugly.
11106
11107 * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
11108 * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
11109 Set size of listctrl.
11110 * Thuban/UI/identifyview.py (IdentifyView.__init__):
11111 Set size of dialog.
11112
11113 2003-02-19 Jonathan Coles <[email protected]>
11114
11115 * test/test_classification.py, test/test_layer.py,
11116 test/test_load.py, test/test_map.py, test/test_session.py:
11117 Updated the tests to use the new functions that are in the
11118 respective classes.
11119
11120 * Thuban/Model/classification.py (Classification):
11121 Uses the new ClassData* classes. Modification messages are
11122 passed up to the parent layer (if it exists).
11123 (ClassData): New class to encapsulate the common data in each
11124 classification property.
11125 (ClassDataDefault): Represents the Default class. data.
11126 (ClassDataPoint): Represents a single class. data point
11127 (ClassDataRange): Represents a class. range
11128 (ClassDataMap): Represents a class. map (unused).
11129
11130 * Thuban/Model/color.py: Added Color.None to represent something
11131 with no color. Color.Black represents the color black.
11132 (NoColor): Helper class derived from Color to represent something
11133 with no color.
11134
11135 * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
11136 stroke_width attributes. Made the 'classification' attribute private.
11137 New methods for setting/getting the classification.
11138
11139 * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
11140 to get the classifcation and use the new ClassData* classes to
11141 hold the classification data. Use Str2Num to convert numbers
11142 properly.
11143
11144 * Thuban/Model/save.py (Saver): Use new Color and Classification
11145 methods
11146
11147 * Thuban/UI/classifier.py (ClassGrid): New class to represent a
11148 custom grid.
11149 (ClassTable): Support for editing Values and Labels and for
11150 changing what type (point or range) of data is stored in each
11151 property based on how the user enters the data.
11152 (Classifier): Support for saving the new classifications and
11153 launching the dialog to edit a property.
11154 (SelectPropertiesDialog): New class for editing the visual
11155 properties of a classification (stroke color, width, and fill color)
11156 (ClassPreviewer): Took the Draw method from ClassRenderer and
11157 made most of it into this new class. Intend to use this class in
11158 the SelectPropertiesDialog for previewing changes.
11159
11160 * Thuban/UI/renderer.py: Use new Color and Classification methods.
11161
11162 * Thuban/UI/tree.py: Formatting changes.
11163
11164 * Doc/thuban.dtd: Add 'label' element
11165
11166 * Thuban/common.py: New. Contains common routines used throughout
11167 the code.
11168 (Str2Num): Takes a string and converts it to the "best" type of
11169 number.
11170
11171 2003-02-14 Bernhard Herzog <[email protected]>
11172
11173 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
11174 dragging flag is always set to 0 even when the tool implementation
11175 raises an exception
11176
11177 2003-02-11 Bernhard Herzog <[email protected]>
11178
11179 * Thuban/UI/application.py (ThubanApplication.splash_screen): New
11180 method to create a splash screen.
11181 (ThubanApplication.ShowMainWindow): New. Show the main window.
11182 Needed so the splash screen can display the mainwindow
11183 (ThubanApplication.OnInit): Call the
11184 new splash_screen method to determine whether the application
11185 should display a splash screen. If it displays a splash screen do
11186 not immediately show the main window.
11187
11188 2003-02-11 Jonathan Coles <[email protected]>
11189
11190 * Thuban/Model/classification.py: Added import line to fix
11191 feature conflicts between running on python2.2 and python2.1.
11192
11193 * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
11194 onto the clinfo parameter, so removed the deepcopy().
11195
11196 2003-02-10 Jonathan Coles <[email protected]>
11197
11198 * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
11199 Added element_open variable to track opening and closing of tags
11200 so that tags that don't span more than one line are closed with
11201 /> instead of </tag_name>. Use the GetDefault*() methods of
11202 the Classification class.
11203
11204 * Thuban/Model/classification.py (Classificaton): Added set and
11205 get methods for the default data. The class also takes a layer
11206 reference so that modification messages can be sent. Fixed the
11207 methods to use the new ClassData class.
11208 (ClassData): New class to encapsulate the classification data
11209
11210 * Thuban/Model/layer.py (Layer): Remove the
11211 Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
11212 SetDefault*() methods on the layer's classification object.
11213 (Layer.__init__): Use the new SetDefault*() methods in the
11214 Classification class.
11215
11216 * Thuban/Model/load.py (ProcessSession): Use the new ClassData
11217 object instead of a dictionary.
11218
11219 * Thuban/UI/classifier.py (ClassRenderer): New class to
11220 draw the classifications in the dialog box's table.
11221 (Classifier): Modified to use the ClassRenderer class.
11222
11223 * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
11224 methods of the Classification class.
11225
11226 * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
11227 of the ClassData class.
11228
11229 * test/test_classification.py, test/test_layer.py,
11230 test/test_map.py, test/test_session.py: Fix the tests to work
11231 with the above code changes.
11232
11233 2003-02-03 Jonathan Coles <[email protected]>
11234
11235 * Thuban/Model/classification.py (Classification): Added getNull()
11236 to return the NullData reference
11237
11238 * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
11239 Layer.SetStrokeWidth): Modified these functions to change the
11240 null data in the classification rather than keep these values
11241 directly in the Layer class. Menu options to change these values
11242 work again.
11243
11244 2003-01-28 Jonathan Coles <[email protected]>
11245
11246 * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
11247 Fixed crashing problem on some systems. Dialog box shows
11248 classification data.
11249
11250 * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
11251 Colors in the tree view.
11252
11253 * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
11254 the tree info for classifications. Commented out unnecessary lines.
11255
11256 * Thuban/Model/classification.py (Classification.TreeInfo): New
11257 function to add information about the classification into the
11258 tree view.
11259
11260 2003-01-27 Jan-Oliver Wagner <[email protected]>
11261
11262 * Thuban/__init__.py (_): New.
11263
11264 * Thuban/Model/classification.py, Thuban/Model/extension.py,
11265 Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
11266 Thuban/Model/session.py, Thuban/UI/application.py,
11267 Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
11268 Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
11269 Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
11270 Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
11271 Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
11272
11273 2003-01-27 Jonathan Coles <[email protected]>
11274
11275 * Thuban/Model/layer.py: Classification initialization calls.
11276
11277 * Thuban/Model/classification.py: Created class to encapsulate
11278 a layer classification. Supports specific data points and
11279 ranges.
11280
11281 * Thuban/Model/load.py: Added support for loading classification
11282 information.
11283
11284 * Thuban/Model/save.py: Added support for saving classification
11285 information.
11286
11287 * Thuban/UI/classifier.py: Initial class for a dialog box for
11288 specifying classification information.
11289
11290 * Thuban/UI/mainwindows.py: Support for opening the classifier
11291 dialog.
11292
11293 * Thuban/UI/renderer.py: Support for drawing a layer with the
11294 classification information.
11295
11296 * Data/iceland_sample_class.thuban: iceland_sample with
11297 classification data.
11298
11299 * test/test_classification: Tests for the Classification class.
11300
11301 2002-12-09 Bernhard Herzog <[email protected]>
11302
11303 * test/test_command.py: New. Tests for the command classes.
11304
11305 * Thuban/UI/command.py (ToolCommand): New class for tool commands.
11306 (Command.IsTool): New method to distinguish between command
11307 switching tools and other commands.
11308
11309 * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
11310 the tool to avoid direct assignments to instance variables
11311 (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
11312 (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
11313 change the tool
11314
11315 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
11316 active tool's command turns insensitive, disable the tool.
11317 (_tool_command): Use the new ToolCommand class
11318
11319 * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
11320 SelectTool method to change the tool
11321 (iconfile): Use the ToolCommand class
11322
11323 2002-12-03 Bernhard Herzog <[email protected]>
11324
11325 * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
11326 the case of selected items that are not children of Layers or Maps
11327 properly. Previously this bug would trigger an assertion in
11328 wxWindows.
11329
11330 2002-11-06 Frank Koormann <[email protected]>
11331
11332 * Thuban/UI/mainwindow.py: Altered the order of tools in the
11333 toolbar: First now are all navigation tools (Zoom In/Out, Pan,
11334 Full Extent).
11335
11336 2002-10-23 Bernhard Herzog <[email protected]>
11337
11338 * setup.py (setup call): version now 0.1.3
11339
11340 * MANIFEST.in: Add the files in test/
11341
11342 * test/README: Add note about tests requiring the iceland data
11343
11344 * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
11345 copyright notice.
11346
11347 2002-10-18 Bernhard Herzog <[email protected]>
11348
11349 * test/test_map.py
11350 (TestMapWithContents.test_projected_bounding_box): Use an explicit
11351 epsilon.
11352
11353 * test/support.py (FloatComparisonMixin.assertFloatEqual)
11354 (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
11355 message if the assertion fails and don't return the return value
11356 of self.assert_. In assertFloatSeqEqual the return meant that not
11357 all items of the sequence were compared.
11358
11359 2002-09-20 Bernhard Herzog <[email protected]>
11360
11361 * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
11362
11363 * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
11364
11365 * test/test_map.py (TestMapWithContents.test_tree_info): Create
11366 the string with the bounding box on the fly because of platform
11367 differences in the way %g is handled.
11368
11369 * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
11370 DBFfile too because Thuban layers can't yet cope missing DBF
11371 files.
11372
11373 2002-09-20 Bernhard Herzog <[email protected]>
11374
11375 * test/test_menu.py: Use initthuban instead of
11376 add_thuban_dir_to_path to initialize Thuban.
11377
11378 * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
11379 Mixin class for float comparisons
11380 (SubscriberMixin): New. Mixin class to test messages sent through
11381 the Connector class
11382
11383 * test/README: Fix a typo and add the -v flag to the command for
11384 individual tests
11385
11386 * test/test_session.py: New. Test cases for Thuban.Model.session
11387
11388 * test/test_proj.py: New. Test cases for Thuban.Model.proj
11389
11390 * test/test_map.py: New. Test cases for Thuban.Model.map
11391
11392 * test/test_layer.py: New. Test cases for Thuban.Model.layer
11393
11394 * test/test_label.py: New. Test cases for Thuban.Model.label
11395
11396 * test/test_connector.py: New. Test cases for Thuban.Lib.connector
11397
11398 * test/test_color.py: New. Test cases for Thuban.Model.color
11399
11400 * test/test_base.py: New. Test cases for Thuban.Model.base
11401
11402 2002-09-13 Bernhard Herzog <[email protected]>
11403
11404 * Thuban/Model/session.py (Session.forwarded_channels): Forward
11405 the CHANGED channel too.
11406
11407 * Thuban/Model/map.py (Map.forwarded_channels): Forward the
11408 CHANGED channel too.
11409 (Map.__init__): Call the Modifiable constructor as well.
11410
11411 * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
11412 event if the modified flag changes.
11413 (Modifiable.changed): Tweak the doc-string.
11414
11415 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
11416 (MainWindow.set_position_text): Put the code that puts the text
11417 with the mouse position into the status bar into the new method
11418 set_position_text so that it can overwritten in derived classes.
11419
11420 2002-09-12 Bernhard Herzog <[email protected]>
11421
11422 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
11423 message box on the main window.
11424
11425 2002-09-11 Bernhard Herzog <[email protected]>
11426
11427 * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
11428 the 'E' because it's less likely to interfere with other menu
11429 entries.
11430 (MainWindow.build_menu): remove an incorrect comment.
11431
11432 2002-09-10 Bernhard Herzog <[email protected]>
11433
11434 * Thuban/UI/mainwindow.py (MainWindow.Map): New.
11435 (_tool_command): Add sensitive parameter
11436 (_has_visible_map): Sensitivity callback to tools and other
11437 commands that require a visible map. Use it in map_zoom_in_tool,
11438 map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
11439 and map_full_extent
11440
11441 2002-09-06 Bernhard Herzog <[email protected]>
11442
11443 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
11444 VIEW_POSITION
11445
11446 2002-09-04 Frank Koormann <[email protected]>
11447
11448 * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
11449
11450 2002-09-02 Bernhard Herzog <[email protected]>
11451
11452 * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
11453 wxWindows already and our implementation doesn't work correctly
11454 with wxGTK 2.3:
11455 (MapCanvas.__init__): Remove the instance variable
11456 (MapCanvas.OnPaint): Always call do_redraw when there's a map to
11457 be drawin
11458 (MapCanvas.OnIdle): Removed.
11459
11460 * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
11461 a parameter to determine the size of the rectangle.
11462 (MapCanvas.find_shape_at): Create the box around the point on a
11463 layer by layer basis and make the size depend on the shape type.
11464 This solves a problem with the selection of point shapes at the
11465 border of the layer's bounding box
11466
11467 2002-08-30 Bernhard Herzog <[email protected]>
11468
11469 * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
11470 for the sensitivity of remove layer.
11471 (_can_remove_layer): New. Sensitivity callback for remove layer
11472 (Command layer_remove): Use _can_remove_layer
11473
11474 * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
11475 determine whether a given layer can be deleted.
11476
11477 * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
11478 (MapCanvas.do_redraw): Get rid of the unused update_region
11479 instance variable
11480
11481 * Thuban/UI/view.py: Add/update some doc-strings.
11482
11483 * test/: new subdirectory with a bunch of unit tests.
11484
11485 * test/README, test/test_table.py, test/test_save.py,
11486 test/test_menu.py, test/test_load.py: Initial set of tests and
11487 brief instructions on how to run them
11488
11489 2002-08-29 Bernhard Herzog <[email protected]>
11490
11491 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
11492 arcs with multiple parts.
11493
11494 * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
11495 Handle degenrate rectangles.
11496
11497 * Thuban/Model/table.py: Make writing records work correctly:
11498 (Table.__init__): Keep track of whether the DBF is open for
11499 writing
11500 (Table.write_record): Open the DBF file for writing when necessary
11501
11502 2002-08-27 Bernhard Herzog <[email protected]>
11503
11504 * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
11505 dbf files only for reading by default. Use a new writable dbf
11506 object for writing.
11507
11508 2002-08-26 Bernhard Herzog <[email protected]>
11509
11510 * Thuban/UI/mainwindow.py: Refactor the context creation:
11511 (MainWindow.Context): New method to return a context
11512 (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
11513 new method
11514
11515 * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
11516 layer table specific code from TableGrid into LayerTableGrid
11517 (TableFrame, LayerTableFrame): Split the layer table specific code
11518 from TableFrame into LayerTableFrame
11519 (LayerTableGrid.select_shape): Remove a debug print
11520
11521 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
11522 LayerTableFrame
11523
11524 2002-08-23 Bernhard Herzog <[email protected]>
11525
11526 * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
11527 absolute filename.
11528
11529 2002-08-22 Bernhard Herzog <[email protected]>
11530
11531 * Thuban/Model/table.py (Table.write_record): New method to write
11532 records.
11533 (Table.__init__): Open the DBF file for writing too.
11534
11535 * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
11536 into the underlying table.
11537
11538 * extensions/shapelib/shapefil.h (DBFCommit),
11539 extensions/shapelib/dbfopen.c (DBFCommit): New API function to
11540 commit any changes made to the DBF file.
11541
11542 * Thuban/UI/mainwindow.py (make_check_current_tool)
11543 (_tool_command): Put the code that generates the "checked"
11544 callback into a separate function so that we can reuse it
11545 elsewhere
11546
11547 * Thuban/Model/save.py (Saver): New class to handle serializing a
11548 session into an XML file. The main reason to introduce a class is
11549 that applications built on Thuban can derive from it so that they
11550 can save additional information in a session file.
11551 (save_session): Delegate almost all the work to the Saver class.
11552 Rename the filename argument to file because it may be a file like
11553 object now.
11554
11555 * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
11556 code. Remove the little test code which would be executed when the
11557 module is run as a script which didn't work anymore since it can't
11558 import the other Thuban modules.
11559 (ProcessSession, load_session): Refactor the ProcessSession to
11560 have one method for each element start and end tag so that derived
11561 classes can easily override the processing of individual tags.
11562 Also, always parse with namespaces enabled because applications
11563 built on top of Thuban will likely use namespaces if they extend
11564 the session file format.
11565
11566 2002-08-21 Bernhard Herzog <[email protected]>
11567
11568 * setup.py (ThubanInstall.run): Don't repr install_lib_orig
11569 because thubaninit_contents will do it for us.
11570
11571 2002-08-16 Jan-Oliver Wagner <[email protected]>
11572
11573 * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
11574 tree window already open
11575
11576 2002-08-15 Bernhard Herzog <[email protected]>
11577
11578 * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
11579 with self.
11580
11581 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
11582 when we have actually captured it.
11583
11584 * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
11585 shapefile and destroy the table.
11586
11587 * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
11588
11589 2002-08-14 Bernhard Herzog <[email protected]>
11590
11591 * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
11592 instance variable columns
11593 (RecordTable.GetTypeName): row and col may be negative in some
11594 cases.
11595
11596 * setup.py (InstallLocal.initialize_options)
11597 (InstallLocal.finalize_options, InstallLocal.user_options): New
11598 option create-init-file to build a thubaninit.py when running
11599 install_local
11600 (InstallLocal.run): Create the thubaninit.py module when requested
11601 (thubaninit_contents): Split the template into several parts and
11602 create a new function thubaninit_contents that creates the
11603 contents of a thubaninit module.
11604 (ThubanInstall.run): Use the new function to create the thubaninit
11605 module.
11606
11607 2002-07-30 Bernhard Herzog <[email protected]>
11608
11609 * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
11610 cleanup.
11611 (ThubanApplication.MainLoop): Extend to automatically call OnExit.
11612
11613 * Thuban/Model/session.py (Session.Destroy): Don't bypass the
11614 direct base class' Destroy method.
11615
11616 * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
11617 layers.
11618 (Map.Destroy): Destroy the label_layer as well and call the
11619 inherited Desatroymethod first so that no more messages are
11620 issued.
11621 (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
11622 message if the stacking order actually has changed. Add
11623 doc-strings.
11624 (Map.BoundingBox): Correct the doc-string.
11625 (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
11626 (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
11627
11628 * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
11629 all labels.
11630
11631 2002-07-29 Bernhard Herzog <[email protected]>
11632
11633 * Thuban/Model/map.py (Map.subscribe_layer_channels)
11634 (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
11635 to a layer's channels into separate methods.
11636 (Map.RemoveLayer, Map.AddLayer): Call the new methods
11637 (Map.Destroy): Unsubscribe from a layer's channels before
11638 destroying it.
11639
11640 * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
11641 selected_layer parameter to searched_layer which is the layer to
11642 search in.
11643 (MapCanvas.SelectShapeAt): New parameter layer to restrict the
11644 search to that layer. Return the selected layer and shape.
11645
11646 * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
11647 typo
11648
11649 2002-07-24 Bernhard Herzog <[email protected]>
11650
11651 * Thuban/UI/application.py (ThubanApplication.create_session):
11652 Extend the doc string.
11653 (ThubanApplication.subscribe_session)
11654 (ThubanApplication.unsubscribe_session): New methods to
11655 subscribe/unsubscribe to/from session channels.
11656 (ThubanApplication.SetSession): Call the new methods here.
11657 (ThubanApplication.maps_changed, ThubanApplication.set_map):
11658 Renamed set_map to maps_changed. Its now a subscriber for
11659 MAPS_CHANGED.
11660
11661 * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
11662 x-coordinate in case of simple clicks
11663
11664 * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
11665 don't pass it as a parameter
11666
11667 * Thuban/Model/session.py (Session.RemoveMap): New
11668
11669 * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
11670 window size into a parameter.
11671
11672 2002-07-23 Bernhard Herzog <[email protected]>
11673
11674 * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
11675 just commands.
11676
11677 * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
11678 parameter list a bit to allow setting the window title and the
11679 initial message in the status bar. Update the callers.
11680
11681 * Thuban/UI/application.py (ThubanApplication.OnInit)
11682 (ThubanApplication.CreateMainWindow): Put the mainwindow
11683 instantiation into a separate method so that it can be overridden
11684 by a subclass.
11685
11686 2002-07-19 Bernhard Herzog <[email protected]>
11687
11688 * Thuban/Model/session.py: Issue a CHANGED message every time
11689 another changed message is issued to make it easier to get
11690 notified of changes.
11691 (Session): Update the doc string
11692 (Session.forward): Issue changed-events as CHANGED as well.
11693 (Session.changed): Overwrite the inherited version to issue
11694 CHANGED events as well.
11695
11696 * Thuban/UI/tree.py: We can now simply subscribe to the session's
11697 CHANGED channel to be informed of changes.
11698 (SessionTreeCtrl.session_channels): Not needed any longer.
11699 (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
11700 Only have to (un)subscribe CHANGED
11701
11702 * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
11703
11704 * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
11705 for the wxPython locale bug to __init__.py so that it's
11706 automatically executed by anybody using UI code from Thuban.
11707
11708 2002-07-18 Bernhard Herzog <[email protected]>
11709
11710 * Thuban/UI/main.py (main): app no longer needs to be global
11711
11712 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
11713 as parameter and store it in an instance variable
11714 (MainWindow.invoke_command, MainWindow.update_command_ui)
11715 (MainWindow.save_modified_session, MainWindow.NewSession)
11716 (MainWindow.OpenSession, MainWindow.SaveSession)
11717 (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
11718 application object.
11719
11720 * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
11721 the main window with self.
11722
11723 * Thuban/UI/context.py: New module with the context class
11724
11725 * Thuban/UI/command.py (Command): Update doc string.
11726
11727 * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
11728 MainWindow.update_command_ui): Pass an instance of the context
11729 class to the command's methods
11730 (check_current_tool, call_method): Handle the new context
11731 implementation
11732
11733 * Examples/simple_extensions/simple_tool.py (simple_tool,
11734 check_simple_tool): Handle the new context implementation
11735
11736 * Examples/simple_extensions/simple_command.py (simple_command):
11737 Handle the new context implementation. Update the comments about
11738 the context.
11739
11740 * Thuban/UI/application.py (ThubanApplication.SetSession): Add
11741 doc-string
11742 (ThubanApplication.Session): New method to return the session
11743 object
11744
11745 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
11746 interactor's selected_layer may not be a layer of the current
11747 session when the tree is updated while a new session is being set.
11748
11749 2002-07-17 Bernhard Herzog <[email protected]>
11750
11751 * Thuban/UI/tree.py (color_string): Removed. No longer used.
11752 (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
11753 update_tree into update_tree and add_items. The tree now uses a
11754 more generic way to display the contents of the tree.
11755 (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
11756
11757 * Thuban/Model/layer.py (Layer.TreeInfo),
11758 Thuban/Model/extension.py (Extension.TreeInfo),
11759 Thuban/Model/map.py (Map.TreeInfo),
11760 Thuban/Model/session.py (Session.TreeInfo):
11761 Add TreeInfo methods to implement the new tree view update scheme
11762
11763 2002-07-16 Bernhard Herzog <[email protected]>
11764
11765 * Thuban/UI/application.py: Don't use "import from" for the
11766 MainWindow. It can't always be resolved.
11767 (ThubanApplication.OnInit): change reference to MainWindow
11768 accordingly.
11769
11770 * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
11771 completely
11772
11773 2002-07-10 Bernhard Herzog <[email protected]>
11774
11775 * setup.py (create_init_module): New configurable variable whose
11776 default depends on the platform we're running on.
11777 (ThubanInstall.initialize_options): Initialize
11778 self.create_init_module from the global create_init_module
11779 (ThubanInstall.user_options): indictate that the options
11780 create-init-module and init-module-dir have arguments.
11781
11782 * setup.py: In the setup call change the version number to include
11783 cvs.
11784
11785 * MANIFEST.in: Add the files in Examples
11786
11787 2002-07-09 Bernhard Herzog <[email protected]>
11788
11789 * setup.py: In the setup call, use the thuban homepage as the
11790 value of the url parameter.
11791
11792 * Examples: New subdirectory for examples.
11793
11794 * Examples/simple_extensions/simple_tool.xpm,
11795 Examples/simple_extensions/simple_tool.py,
11796 Examples/simple_extensions/simple_command.py,
11797 Examples/simple_extensions/README: Simple examples showing how to
11798 add new commands and tools.
11799
11800 * setup.cfg (bdist_rpm): Add the default value for prefix and tell
11801 bdist_rpm that we also have an install script.
11802 (bdist_inno): Add 2002 to the copyright notice.
11803
11804 * setup.py: Create a file in python's site-packages directory to
11805 make installation of Thuban as a library easier.
11806 (ThubanInstall.user_options): Add two new options,
11807 create-init-module and init-module-dir
11808 (ThubanInstall.expand_with_pure_python_dirs): New method to expand
11809 filenames for installation in the default directories.
11810 (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
11811 the inherited methods to capture some filenames before they're
11812 transformed too much by distutils.
11813 (ThubanInstall.run): Create the init module if requested.
11814 (ThubanInstall.thuban_init_filename): New method to return the
11815 full name of the init module.
11816 (ThubanInstall.get_outputs): Append the filename of the init
11817 module.
11818
11819 2002-07-08 Bernhard Herzog <[email protected]>
11820
11821 * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
11822 handle the prefix properly which means that the default for the
11823 installation prefix should be /usr for RPMs and /usr/local when
11824 doing a normal source install.
11825 (bdist_rpm_install_script): Script to override the default install
11826 commands in the specfile generated by the bdist_rpm command.
11827 (thuban_bdist_rpm.user_options): Add a prefix option
11828 (thuban_bdist_rpm.initialize_options): Init the prefix option.
11829 Create the script files for the spec files as empty files here
11830 (thuban_bdist_rpm._make_spec_file): Override the inherited method
11831 to fill the script files with content.
11832
11833 * Thuban/Model/save.py (relative_filename): Wrapper around
11834 Thuban.Lib.fileutil.relative_filename that accepts an empty dir
11835 argument. save_session now automatically uses this version,
11836 solving a problem when saving to a relative filename.
11837
11838 * setup.py: In the setup call, make sure that the library
11839 directories are under $prefix/lib not directly under $prefix.
11840
11841 2002-06-20 Jan-Oliver Wagner <[email protected]>
11842
11843 * Thuban/Model/extension.py: new module to handle extension objects.
11844 * Thuban/Model/messages.py: new messages for extensions.
11845 * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
11846 Session.AddExtension): new for handling extensions.
11847 Also some other minor changes to round up extension handling.
11848 * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
11849 of Extension titles and title and names of its objects.
11850
11851 2002-05-29 Bernhard Herzog <[email protected]>
11852
11853 * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
11854 the events for a command.
11855 (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
11856 Call bind_command_events to bind the events. add_toolbar_command
11857 can now bind events too so that it's possible to have commands
11858 that are only available through the toolbar.
11859 (MainWindow.init_ids): New instance variable events_bound to keep
11860 track of for which commands events have been bound.
11861
11862 2002-05-28 Bernhard Herzog <[email protected]>
11863
11864 * Thuban/UI/menu.py: New module to build and manage menus.
11865
11866 * Thuban/UI/mainwindow.py: Remove some unused imports.
11867 (MainWindow.__init__, main_menu): move the definition of the main
11868 menu from __init__ to the Menu instance main_menu.
11869 (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
11870 build the menu bar and sub-menus from a menu description.
11871
11872 * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
11873 startup file
11874 (ThubanApplication.read_startup_files): New method to run
11875 ~/.thuban/thubanstart.py
11876
11877 * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
11878 Move the toolbar definition to the Menu instance main_toolbar.
11879 (MainWindow.build_toolbar): New method to build the toolbar
11880 similar to the build_menu methods
11881
11882 2002-05-23 Bernhard Herzog <[email protected]>
11883
11884 * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
11885 layer_outline_color. Fix it in the definition of the command too.
11886
11887 * Thuban/UI/command.py (Command): Fix typo in doc string
11888
11889 2002-05-22 Bernhard Herzog <[email protected]>
11890
11891 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
11892 in the docstring
11893
11894 2002-05-15 Bernhard Herzog <[email protected]>
11895
11896 * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
11897 when the shapefile is empty.
11898 (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
11899 now return None for empty shapefiles. Update doc-strings.
11900
11901 * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
11902 the layer's bbox being None.
11903
11904 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
11905 layer's bbox being None.
11906
11907 * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
11908 necessary.
11909 (MapCanvas.__init__): New instance variables, last_selected_layer
11910 and last_selected_shape to determine how the selection has
11911 changed.
11912
11913 * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
11914 AutoSizeColumns because it will cause a traversal of the entire
11915 table which for large .dbf files will take a very long time.
11916
11917 2002-05-14 Bernhard Herzog <[email protected]>
11918
11919 * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
11920 maximum depth for the tree than shapelib does by default.
11921
11922 2002-05-10 Bernhard Herzog <[email protected]>
11923
11924 * setup.py (py_modules): The shptree modules doesn't have a
11925 wrapper, so don't include it in the py_modules
11926
11927 2002-05-08 Bernhard Herzog <[email protected]>
11928
11929 * extensions/shapelib/shptree.c (compare_ints): Make arguments
11930 const void * as in the qsort prototype
11931 (SHPTreeFindLikelyShapes): Remove some unused variables.
11932
11933 * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
11934 maintains to redraw the window during a drag.
11935 (MapCanvas.unprojected_rect_around_point): New method to determine
11936 a small region around a point for hit-testing.
11937 (MapCanvas.find_shape_at): Only test the shapes in a small region
11938 around the point.
11939
11940 * setup.py: Increment the version to 0.1.2
11941
11942 * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
11943 debug print and set session to None after unsubscribing
11944
11945 2002-05-07 Bernhard Herzog <[email protected]>
11946
11947 * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
11948 the file to have a .thuban extension.
11949
11950 * Thuban/UI/tree.py (session_channels): New class constant with
11951 all the session channels to subscribe to to update the tree
11952 (SessionTreeCtrl.session_changed): Remember the session so that we
11953 can unsubscribe properly. Use the new class constant to
11954 unsubscribe from the old session and subscribe to the new one.
11955 (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
11956 subscriptions of the SessionTreeCtrl.
11957 (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
11958
11959 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
11960 Session Tree" command to the file menu.
11961
11962 * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
11963 as update_region to the renderer.
11964
11965 * Thuban/UI/renderer.py
11966 (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
11967 update box is now directly a tuple, not a wxRect anymore.
11968
11969 * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
11970 prints.
11971
11972 2002-05-07 Bernhard Herzog <[email protected]>
11973
11974 * setup.py: Add the shptree extension module. See
11975 extensions/pyshapelib/ChangeLog for more details.
11976
11977 * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
11978 extensions/shapelib/dbfopen.c: Really update to the versions of
11979 shapelib 1.2.9. For some reason it wasn't really done on
11980 2002-04-11.
11981
11982 * extensions/shapelib/shptree.c: Modified version of shptree.c of
11983 shapelib 1.2.9. The only real difference is the use of qsort
11984 instead of a bubble sort implementation
11985
11986 * Thuban/Model/layer.py (Layer.__init__): New instance variable
11987 shapetree to hold the shapelib quadtree for the shapefile
11988 (Layer.open_shapefile): Create the quad tree.
11989 (Layer.ShapesInRegion): New method to return the ids of shapes in
11990 a given region using the quad tree.
11991
11992 * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
11993 comment
11994 (draw_polygon_shape): Accept both arcs and polygons.
11995 (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
11996 the api.
11997
11998 * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
11999 return the shape ids to be rendered in a given layer.
12000 (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
12001 ids. Use draw_polygon_shape to draw arc shapes as well.
12002 (ScreenRenderer.RenderMap): New parameter for the rectangle that
12003 has to be updated
12004 (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
12005 calling it's ShapesInRegion method.
12006
12007 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
12008 update_region for the update region.
12009 (MapCanvas.OnPaint): Maintain the update region
12010 (MapCanvas.do_redraw): Pass the bounding box of the update_region
12011 to the renderer when drawing the bitmap. Reset the update_region.
12012
12013 2002-05-03 Bernhard Herzog <[email protected]>
12014
12015 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
12016 MainWindow.OpenSession): Change the file extension of the session
12017 files to .thuban
12018
12019 * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
12020 Move the map channels to be forwarded by the session into the
12021 class constant with forwarded_channels. Also add
12022 LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
12023 forwarded_channels
12024
12025 * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
12026 typo and some rewording).
12027
12028 2002-05-02 Bernhard Herzog <[email protected]>
12029
12030 * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
12031 around to speed up most redraws:
12032 (MapCanvas.__init__): New instance variable bitmap which holds the
12033 bitmap
12034 (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
12035 self.bitmap to draw.
12036 (MapCanvas.full_redraw): New method to force a full redraw
12037 including the bitmap
12038 (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
12039 make sure the bitmap is redrawn.
12040 (MapCanvas.projection_changed, MapCanvas.set_view_transform,
12041 MapCanvas.shape_selected): Call full_redraw instead of readraw to
12042 make sure the bitmap is redrawn.
12043 (MapCanvas.OnSize): New method to handle size events so that the
12044 bitmap can be redrawn.
12045
12046 2002-04-29 Bernhard Herzog <[email protected]>
12047
12048 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
12049 canvas' VIEW_POSITION event
12050 (MainWindow.view_position_changed): Handler for VIEW_POSITION.
12051 Update the text in the status-bar accordingly.
12052
12053 * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
12054 (MapCanvas.__del__): Implement because Publisher.__del__ has to be
12055 called.
12056 (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
12057 current_position
12058 (MapCanvas.set_current_position): New method to set
12059 current_position. Issue a VIEW_POSITION event
12060 (MapCanvas.CurrentPosition): New public method to return the value
12061 of current_position. Should be called when the VIEW_POSITION event
12062 is processed.
12063 (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
12064 Update the position.
12065 (MapCanvas.OnLeaveWindow): Set the position to None.
12066
12067 * Thuban/UI/messages.py (VIEW_POSITION): New message for the
12068 position in the statusbar
12069
12070 2002-04-26 Frank Koormann <[email protected]>
12071
12072 * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
12073
12074 2002-04-24 Frank Koormann <[email protected]>
12075
12076 * Resources/Bitmaps/identify.xpm: shadow added
12077
12078 * Resources/Bitmaps/fullextent.xpm: new
12079
12080 2002-04-22 Jan-Oliver Wagner <[email protected]>
12081
12082 * Thuban/UI/tree.py (update_tree): added test for None on map bounding
12083 box
12084
12085 2002-04-21 Jan-Oliver Wagner <[email protected]>
12086
12087 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
12088
12089 * Thuban/UI/tree.py (update_tree): added added map extent
12090
12091 * Thuban/UI/mainwindow.py (_method_command): extended by parameter
12092 icon; added map_full_extend as tool
12093
12094 2002-04-19 Jan-Oliver Wagner <[email protected]>
12095
12096 * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
12097 saving _new_ sessions
12098
12099 * Thuban/Model/session.py (create_empty_session): new session
12100 don't have a filename (set to None)
12101
12102 * Thuban/UI/tree.py (update_tree): added filename and modified flag
12103
12104 * Thuban/Model/load.py (ProcessSession): convert projection
12105 parameters from unicode to regular string
12106
12107 * Data/iceland_sample.session: Added UTM Zone 26 projection.
12108
12109 2002-04-11 Bernhard Herzog <[email protected]>
12110
12111 * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
12112 extensions/shapelib/dbfopen.c: Update to the versions of shapelib
12113 1.2.9
12114
12115 * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
12116 the pyshapelib directoy into the list of include dirs, so that
12117 pyshapelib_api.h can be found.
12118
12119 * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
12120 holds the pyshapelib C-API
12121 (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
12122 pyshapelib_api to access the shapelib functions.
12123 (initwxproj): Import the c_api from the shapelib module and
12124 initialize pyshapelib_api.
12125
12126 2002-04-04 Bernhard Herzog <[email protected]>
12127
12128 * setup.py (thuban_bdist_rpm.initialize_options): Use
12129 initialize_options to create the scripts for the rpm.
12130
12131 * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
12132
12133 2002-04-03 Bernhard Herzog <[email protected]>
12134
12135 * setup.py: Increment version to 0.1.1
12136
12137 * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
12138 Layer" and "Remove Layer" commands from the layer menu to the map
12139 menu
12140
12141 2002-02-15 Bernhard Herzog <[email protected]>
12142
12143 * Thuban/Model/layer.py (Layer.Shape): list append only takes one
12144 argument (python <= 1.5.2 erroneously accepted multiuple
12145 arguments)
12146
12147 2002-02-04 Bernhard Herzog <[email protected]>
12148
12149 * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
12150 RecordGrid in the identifyview.
12151 (IdentifyView.__init__): Use IdentifyGridCtrl instead of
12152 IdentifyListCtrl. The grid allows editing of the values.
12153
12154 * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
12155 implementing a grid for a single row of a thuban table.
12156
12157 * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
12158 layers by default. Easier to use than the previous default of only
12159 searching through the select layer which meant that if no layer
12160 was selected, you couldn't select a shape.
12161
12162 * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
12163
12164 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
12165 stroke_width attribute
12166
12167 * Thuban/Model/save.py (save_session): Write the new stroke_width
12168 attribute
12169
12170 * Thuban/Model/load.py (ProcessSession.startElement): Read the
12171 stroke_width attribute
12172
12173 * Thuban/Model/layer.py (Layer.__init__): New parameter and
12174 instance variable stroke_width
12175 (Layer.SetStrokeWidth): Set the stroke_width.
12176
12177 2002-02-01 Bernhard Herzog <[email protected]>
12178
12179 * extensions/thuban/wxproj.cpp (project_points): Fix two
12180 off-by-one errors in the last loop that joins the various parts
12181 together.
12182
12183 2002-01-14 Bernhard Herzog <[email protected]>
12184
12185 * setup.py (data_dist.make_distribution): Fix some typos
12186
12187 2001-09-18 Bernhard Herzog <[email protected]>
12188
12189 * README: Slight tweaking in preparation for the 0.1 release
12190
12191 * setup.cfg: Add section for sdist to create both tgz and zip
12192 archives
12193
12194 * setup.py: increase version number to 0.1
12195 (data_dist): New command class for data distribution
12196
12197 2001-09-14 Bernhard Herzog <[email protected]>
12198
12199 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
12200 Handle the case of no layer (i.e. layer is None) properly.
12201
12202 * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
12203 Set the initial selection of the combo boxes to reflect the
12204 projection we're starting with in a way that works on windows,
12205 too.
12206
12207 * Thuban/Lib/connector.py (Connector.print_connections): Print the
12208 puiblisher's ids in hex to make it easier to compare them to the
12209 standard repr of python methods
12210
12211 * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
12212 messages
12213
12214 2001-09-13 Bernhard Herzog <[email protected]>
12215
12216 * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
12217 deselect the layer if no layer is selected
12218
12219 * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
12220 idle time when there actually is something to draw. If there's
12221 nothing to draw simply clear the window
12222 (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
12223 (MapCanvas.SetMap): force a redraw in all cases because
12224 FitMapToWindow doesn't always do it.
12225 (MapCanvas.ZoomFactor): Add an optional parameter, center, to
12226 specify the point to move into the center of the window
12227 (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
12228 dragged, zoon in/out by a factor of 2
12229 (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
12230 index, i.e. reversed drawing order) so that objects appearing to
12231 be in from of others are selected first. This is probably mostly
12232 relevant for point shapes where the symbols used may overlap
12233
12234 * Thuban/Model/session.py (create_empty_session): Unset the
12235 modified bit before returning it
12236
12237 * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
12238 create_empty_session session to create the new, empty session.
12239
12240 * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
12241 the tool bitmaps.
12242 (MainWindow.OnClose, MainWindow.save_modified_session): Separate
12243 the code that asks whether the session should be saved into the
12244 new method save_modified_session.
12245 (MainWindow.OpenSession, MainWindow.NewSession): Use the new
12246 method to save modified session here too.
12247
12248 2001-09-11 Bernhard Herzog <[email protected]>
12249
12250 * setup.py (InnoIconItem): fix typo
12251
12252 (thuban_bdist_inno.run):
12253 (bdist_inno.run): Move the decision not to create symlinks on
12254 non-nt platforms to thuban_bdist_inno and do it unconditinally
12255 since we never want to create the symlinks here
12256
12257 2001-09-10 Bernhard Herzog <[email protected]>
12258
12259 * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
12260 identify view immediately
12261
12262 * Thuban/UI/controls.py: New file with two classes RecordListCtrl
12263 and SelectableRecordListCtrl that implement the code shared by the
12264 identify view and the label dialog
12265
12266 * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
12267 new class RecordListCtrl
12268
12269 * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
12270 return value of GetValue is None instead of using it as a boolean
12271 directly so that Zero numbers are handled properly.
12272 (LabelListCtrl): Derive from the new class
12273 SelectableRecordListCtrl
12274
12275 * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
12276 (Proj4Dialog.dialogLayout): Make the window resizable and set the
12277 size of the text control explicitly to make the sizers work on
12278 both Windows and X.
12279
12280 2001-09-07 Bernhard Herzog <[email protected]>
12281
12282 * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
12283 that can limit the search to the currently selected layer.
12284 (MapCanvas.SelectShapeAt): Make sure that the currently selected
12285 layer stays selected even when no shape is found
12286 (MapCanvas.FitRectToWindow): If the rect has zero with or zero
12287 height do nothing (avoids zero division errors)
12288
12289 2001-09-06 Bernhard Herzog <[email protected]>
12290
12291 * Thuban/UI/tree.py (SessionTreeCtrl, SessionTreeView.__init__):
12292 Correct the spelling of SessionTreeCtrl. dabbrev is too damn
12293 convenient :-)
12294 (SessionTreeCtrl.__init__, SessionTreeCtrl.update_tree): Introduce
12295 a new instvar layer_to_item to map layers to tree items
12296 (SessionTreeCtrl.layer_selected): Select the appropriate tree item
12297 to match the current selection in the interactor
12298
12299 * Thuban/UI/interactor.py (Interactor.SelectedLayer):
12300 (Interactor.HasSelectedLayer): New methods to query the current
12301 selection
12302
12303 * Thuban/UI/mainwindow.py (MainWindow.current_layer):
12304 (MainWindow.has_selected_layer): Simply call the appropriate
12305 interactor method
12306
12307 * Thuban/UI/mainwindow.py (MainWindow.__init__):
12308 (MainWindow.LayerShowTable):
12309 (MainWindow.identify_view_on_demand): Store the interactor in an
12310 instvar and use that reference instead of going through main.app
12311
12312 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
12313 * Thuban/UI/application.py (ThubanApplication.OnInit):
12314 * Thuban/UI/main.py (main): Create the session tree view in main
12315 with the new mainwindow method ShowSessionTree and not directly
12316 the application's OnInit method
12317
12318 * Thuban/UI/tree.py (myTreeCtrlPanel):
12319 (SessioinTreeCtrl): Rename to SessioinTreeCtrl and turn it into a
12320 TreeCtrl isntead of a panel. This affects most method since we now
12321 refer to self instead of self.tree
12322 (SessionTreeView): New class implementing a non-modal dialog
12323 showing the session tree.
12324
12325 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Pass the
12326 layer to the tableview dialog.
12327
12328 * Thuban/UI/tableview.py: Add some doc-strings
12329 (TableGrid):
12330 (TableGrid.OnRangeSelect):
12331 (TableGrid.OnSelectCell):
12332 (TableFrame.__init__):
12333 (TableFrame.row_selected):
12334 Selecting rows in the grid view now updates the selected shapes
12335 through the TableFrame. To achieve this we derive TableGrid from
12336 Publisher and introduce the message type ROW_SELECTED which the
12337 TableFrame subscribes to and which is issued by OnRangeSelect and
12338 OnSelectCell
12339
12340 (DataTable.SelectRow): Removed because it's no longer needed in
12341 the row/shape selection scheme
12342
12343 * Thuban/UI/dialogs.py: New file implementing common classes for
12344 dialogs
12345
12346 * Thuban/UI/tableview.py (TableGrid.__init__): Don't subscribe to
12347 the SELECTED_SHAPE message anymore. This is now handled by the
12348 parent.
12349 (TableGrid.select_shape): Only update the selection if the shape
12350 is not None.
12351 (TableFrame): Inherit from the new NonModalDialog class.
12352 (TableFrame.__init__, TableFrame.select_shape): Handle the
12353 SELECT_SHAPE message.
12354 (TableFrame.OnClose): Extend the inherited method to unsubscribe
12355 SELECT_SHAPE
12356
12357 * Thuban/UI/mainwindow.py (MainWindow.init_dialogs):
12358 (MainWindow.add_dialog):
12359 (MainWindow.dialog_open):
12360 (MainWindow.remove_dialog):
12361 (MainWindow.get_open_dialog): New methods to maintain a dictionary
12362 of opened non-modal dialogs.
12363
12364 (MainWindow.__init__): Initialize the new non-modal dictionary
12365 management code
12366 (MainWindow.LayerShowTable): maintain separate dialogs for each
12367 table using the non-modal dialog management code to only open a
12368 view once for each table.
12369
12370 (MainWindow.IdentifyTool):
12371 (MainWindow.__init__):
12372 (MainWindow.identify_view_on_demand): Don't open the identify view
12373 in IdentifyTool anymore. This will be done automatically by the
12374 new method identify_view_on_demand which handles the
12375 SELECTED_SHAPE message so that the identify view will be opened on
12376 demand
12377
12378 * Thuban/UI/identifyview.py (IdentifyListCtrl.__init__): Remove
12379 the interactor argument. The SELECTED_SHAPE message is now handled
12380 by the parent.
12381 (IdentifyView.__init__): Add the interactor argument so that we
12382 can handle the SELECTED_SHAPE message here
12383 (IdentifyView.selected_shape): New method to handle the
12384 SELECTED_SHAPE messages
12385
12386 * Thuban/UI/identifyview.py (IdentifyView): Derive from the new
12387 NonModalDialog class
12388 (IdentifyView.OnClose): Extend the inherited version to
12389 unsubscribe SELECT_SHAPE
12390
12391 * Thuban/Model/session.py (Session.UnsetModified): Remove debug prints
12392
12393 2001-09-05 Bernhard Herzog <[email protected]>
12394
12395 * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
12396
12397 * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
12398 interactor to pass through to the MapCanvas
12399
12400 * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
12401 argument to the MainWindow constructor to get rid of the ugly hack
12402 that made main.app available early just so that the mapcanvas
12403 could access the interactor object.
12404
12405 2001-09-04 Bernhard Herzog <[email protected]>
12406
12407 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): New method
12408 that runs a modal message box
12409 (MainWindow.OnClose): Use the new method
12410 (MainWindow.RemoveLayer): Just do nothing in case no layer is
12411 selected. The command should be grayed out anyway, so there's no
12412 need to pop up a message box.
12413 (MainWindow.AddLayer): Pop up a message box with an error message
12414 if the shape file can't be opened
12415
12416 * Thuban/Model/layer.py (Layer.__init__): Open the shapefile
12417 immediately. This will cause an exception in case the file can't
12418 be opened and we can display an appropriate message.
12419
12420 * MANIFEST.in: Add extensions/pyprojection/LICENSE
12421
12422 * setup.py (thuban_bdist_rpm): New class implementing a Thuban
12423 specific bdist_rpm command.
12424
12425 * Thuban/UI/main.py: Catch ImportError exceptions when importing
12426 the locale module because it may not be available on some
12427 installations.
12428
12429 * extensions/pyprojection/LICENSE: Copy of the license text in
12430 Projection.i. Having it in a separate file makes it easier to
12431 refer to license text in e.g. RPMs
12432
12433 2001-09-03 Bernhard Herzog <[email protected]>
12434
12435 * setup.py: use wx-config instead of wxgtk-config because it's
12436 more generic
12437
12438 * setup.py (ThubanInstall.get_outputs): Add the symlink in
12439 <prefix>/bin to the outputs
12440 (ThubanInstall.link_file): New method to link files. We need this
12441 because the standard copy_files refuses to link non-existing
12442 files.
12443 (ThubanInstall.run): Remove the leading install root from the
12444 script filename if an install root was specified and use the new
12445 link_file method
12446
12447 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
12448 the window when the first layer is added to the map.
12449
12450 * setup.py (ThubanInstall.run): Honor the build root (self.root)
12451 when linking thuban.py to <prefix>/bin
12452
12453 2001-08-31 Bernhard Herzog <[email protected]>
12454
12455 * setup.py: In the setup call, the install parameters shouldn't
12456 have trailing slashes because distutils on non-posix platforms
12457 doesn't like that. The same applies to other directories like
12458 "Resources/Bitmaps"
12459
12460 In the configuration section for nt, move the wxWindows directory
12461 optins into the part clearly marked as editable.
12462
12463 (InstallLocal.initialize_options):
12464 (InstallLocal.user_options): remove the currently unused debug
12465 flag
12466 (thuban_build_py.find_all_modules): Add this method so that it
12467 works for our case of having packages and modules in one
12468 distribution as well.
12469 (ThubanInstall.initialize_options):
12470 (ThubanInstall.finalize_options):
12471 (ThubanInstall.user_options):
12472 (ThubanInstall.boolean_options): Add new options, do-symlink and
12473 extra files. Since these are the first ThubanInstall specific
12474 options, override user_options and boolean_options
12475 (ThubanInstall.run): Honor the new do-symlink and extra-files
12476 options.
12477 (ThubanInstall.get_outputs): Add to override the base-class's
12478 version and add the extra-files to the outputs
12479 (bdist_inno): New class for windows distributions with Inno Setup
12480 (InnoIconItem): Helper class for bdist_inno
12481 (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
12482 this together with the appropriate parameters, to the setup call.
12483
12484 * setup.cfg (bdist_inno): added new section for the inno setup
12485 installer
12486
12487 * Thuban/UI/tree.py (myTreeCtrlPanel.__init__): New inst var
12488 changing_selection to avoid recursive selection events when
12489 modifying the selection in response to a selection event.
12490 (myTreeCtrlPanel.normalize_selection): Set the new inst var when
12491 changing the tree's selection.
12492 (myTreeCtrlPanel.OnSelChanged): Only normalize the selection when
12493 we're not being called indirectly from normalize_selection.
12494
12495 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): Call
12496 event.Check only if the command is actuall checkable.
12497 (MainWindow.__init__): Call the toolbar's Realize method to make
12498 sure that the items are actually shown
12499
12500 2001-08-28 Bernhard Herzog <[email protected]>
12501
12502 * setup.py: Fix some doc strings
12503
12504 * ChangeLog: started
12505

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26