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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2726 - (show annotations)
Tue Feb 20 10:37:57 2007 UTC (18 years ago) by bernhard
Original Path: trunk/thuban/ChangeLog
File size: 478241 byte(s)
Extensions/svgexport/: Get ready for release. Bump version
number to 1.0.1. Adjusted numbers in TODO.

1 2007-02-20 Bernhard Reiter <[email protected]>
2
3 * Extensions/svgexport/: Get ready for release. Bump version
4 number to 1.0.1. Adjusted numbers in TODO.
5
6 * Thuban/UI/about.py: Reworked the about text. It shows now
7 when somebody was active on Thuban. Added a list of maintainers.
8 Bernhard Reiter is the current maintainer, following up on Bernhard
9 Herzog.
10
11 * Extensions/export_shapefile/export_shapefile.py: untabify.
12
13 * test/README: Added example how to set the PATH for postgis on
14 Debian Etch.
15
16 2007-01-13 Didrik Pinte <[email protected]>
17
18 bboxdump, gns2shp, importAPR, mouseposition, ogr, profiling, svgexport
19 extensions migrated to wxPython 2.6
20
21 * Extensions/bboxdump/bboxdump.py:
22 updated wx statements
23
24 * Extensions/gns2shp/gns2shp.py:
25 updated wx statements
26
27 * Extensions/importAPR/importAPR.py:
28 updated wx statements
29
30 * Extensions/mouseposition/mouseposition.py:
31 updated wx statements
32
33 * Extensions/ogr/
34 ogrdialog.py, ogrstart.py:
35 updated wx statements
36
37 * Extensions/profiling/profiling.py:
38 updated wx statements
39
40 * Extensions/svgexport/
41 maplegend.py, svgsaver.py:
42 updated wx statements
43
44
45 2007-01-08 Didrik Pinte <[email protected]>
46
47 export_shapefile extension migrated to wxPython 2.6
48
49 * Extensions/export_shapefile/export_shapefile.py:
50 updated wx statements, changed the FileDialog to wx.SAVE (was wx.OPEN)
51
52 2007-01-08 Didrik Pinte <[email protected]>
53
54 umn_mapserver extension migrated to wxPython 2.6
55
56 * Extensions/umn_maserver/
57 mf_handle.py, mf_import.py, mf_export.py:
58 update wx imports to 2.6 policy
59
60 2007-01-06 Didrik Pinte <[email protected]>
61
62 UTF-8 locales support reading non utf-8 files.
63 This is a workaround and not a real bugfix. See
64 http://wald.intevation.org/tracker/index.php?func=detail&aid=118
65 for more details
66
67 * Thuban/UI/tableview.py, controls.py, baserenderer.py, view.py:
68 decode text from iso-8859-1 encoding.
69
70 2007-01-01 Bernhard Reiter <[email protected]>
71
72 * test/postgissupport.py, test/test_postgis_db.py: adding an
73 explicit WITH OIDS to the create table commands. This fixes tests
74 that rely on an oid column to be present for postgresql >=8.0.
75 Thanks for Frank Koormann for the hint.
76
77 2006-11-06 Didrik Pinte <[email protected]>
78
79 * libraries/thuban/wxproj.cpp: bugfix - allow compilation with
80 msvc++ toolkit 2003
81
82 2006-11-06 Bernhard Reiter <[email protected]>
83
84 Made it easier to run PostGIS test on Debian Etch. Improving
85 https://wald.intevation.org/tracker/index.php?func=detail&aid=173 .
86
87 * test/postgissupport.py: Taking pg_ctl and initdb commands
88 from internal variables now. Adding deactivated example values
89 for Debian Etch.
90 find_postgis_sql(): Added special line for Debian Etch postgresql-8.1.
91 Added copyright year 2006.
92
93 2006-10-25 Bernhard Reiter <[email protected]>
94
95 Moved ogr Extension to Extension menu.
96
97 * Extensions/ogr/
98 __init__.py, ogrstart.py, ogrshapes.py, ogrdialog.py
99 test/test_OGRShapestore.py, test/__init__.py:
100 adding encoding information and made sure Autor's names
101 with an umlaut are actually written with an umlaut.
102
103 * Extensions/ogr/ogrstrat.py: now registering in menu "Extensions",
104 having a "(testing)" string before the submenu to prepare for 1.2.0
105 release. Bumped copyright year to 2006.
106
107 2006-10-15 Bernhard Reiter <[email protected]>
108
109 * Thuban/UI/renderer.py: Added module variable verbose and
110 added verbose output before doing a raster projection.
111 Minor: Added (c) year 2006.
112
113 * test/test_baserenderer.py: Added new function
114 test_projected_raster_decimalcommalocale()
115 Added new author Bernhard Reiter and new copyright year 2006.
116
117 * libraries/thuban/gdalwarp.cpp(ProjectRasterFile): Adding
118 switching to LC_NUMERIC "C" and back before calling GDAL functions -
119 only #if python >=2.4 .
120
121 2006-10-10 Didrik Pinte <[email protected]>
122
123 Win32 build updates
124
125 * setup.py :
126 - update to the latest libs for win32 setup tasks
127 - added gdal and Lib content to the inno setup build task
128 - added stable and experimental extensions to setup packages
129
130 * thuban.py :
131 - gdal support for win32 inno installation
132
133 2006-10-10 Didrik Pinte <[email protected]>
134
135 * Thuban/Model/layer.py (Layer.GetLabelPosFromShape): new method
136 extracted from Thuban/UI/viewport.py
137 * Thuban/UI/viewport.py (Viewport.LabelShapeAt): uses new method
138
139 2006-09-28 Didrik Pinte <[email protected]>
140
141 * Thuban/UI/classgen.py: bugfix due to wx2.6 update
142
143 * Thuban/UI/view.py: removed non needed declaration
144
145 * Thuban/UI/selection.py : typo correction
146
147 2006-09-24 Bernhard Reiter <[email protected]>
148
149 * Thuban/Model/proj.py(_do_we_have_to_work_around_broken_proj):
150 Making the test more robust for observed python 2.3 problems
151 with setlocale().
152
153 * test/runtests.py: Added new option ---setdecimalcommalocale
154 to run all tests with an LC_NUMERIC that uses comma as decimal_point.
155 Minor: Added (c) year 2006. Fixed typo in a docstring.
156
157 * test/test_transientdb.py: Minor: Added (c) year 2006. Fixed typo in
158 a docstring.
159
160 2006-09-23 Bernhard Reiter <[email protected]>
161
162 * Extensions/ogr/test/test_OGRShapestore.py: fixed skip_if_no_ogr()
163 and added it to TestOGRTable.setUp() so that all tests get skipped
164 if ogr cannot be imported. Added (c) year 2006.
165
166 2006-09-18 Didrik Pinte <[email protected]>
167
168 * wxPython 2.6 update : wx 2.4 syntax has been updated to 2.6
169
170 2006-09-18 Bernhard Reiter <[email protected]>
171
172 Fixed proj behaviour with python >=2.4 when decimal_point != '.'.
173
174 * Thuban/UI/application.py: Fixed warning dialog when gdal is missing.
175
176 * test/test_proj.py: new test_lc_numeric_robustness(). Added author
177 Bernhard Reiter and new copyright year 2006.
178
179 * Thuban/Model/proj.py: New _do_we_have_to_work_around_broken_proj()
180 and Projection.assuregoodlocale(), Projection.assureinitlocale().
181 Added author Bernhard Reiter and (c) 2006.
182
183 2006-09-15 Bernhard Reiter <[email protected]>
184
185 * README: added RXP and pyRXP as optional for tests.
186
187 * test/localessupport.py: New. Contains a helper function
188 to find a locale with comma used as decimal_point.
189
190 2006-08-31 Bernhard Reiter <[email protected]>
191
192 * README: fixed URLs to sqlite and pysqlite.
193
194 * Thuban/UI/about.py: Added Didrik Pinte as contributor. Extended
195 copyright range to include 2006.
196
197 2006-06-29 Didrik Pinte <[email protected]>
198
199 * Thuban/UI/main.py: circular import fix.
200
201 2006-06-27 Frank Koormann <[email protected]>
202
203 New Classification "Pattern": Classify text attributes by regexp.
204
205 * Thuban/Model/classification.py (class ClassGroupPattern):
206 New, group is associated with a regular expression.
207 (Classification._compile_classification): Store compiled regexp and
208 original group for pattern.
209 (Classification.FindGroup): Added pattern.
210
211 * Thuban/UI/classifier.py
212 (ClassGrid._OnLabelRightClicked, ClassGrid.labelPopup):
213 New, add popup to select singleton/pattern.
214 (ClassTable.GetRowLabelValue, ClassTable.GetValueAsCustom,
215 ClassTable.SetValueAsCustom): Added pattern.
216 (ClassTable.__ParseInput): Autodetect singleton/pattern.
217
218 * Thuban/Model/save.py (SessionSaver.write_classification):
219 Added pattern.
220
221 * Thuban/Model/load.py (SessionLoader.start_clpattern,
222 SessionLoader.end_clpattern): New, process pattern elements.
223
224 * test/test_classification.py (class TestClassGroupPattern): New.
225 (TestClassification.test_add_pattern,
226 TestClassification.test_multiple_groups_textual,
227 TestClassification.test_deepcopy_textual): New.
228 (TestClassification.test_multiple_groups_numerical):
229 Renamed test_multiple_groups.
230 (TestClassification.test_deepcopy_numerical): Renamed test_deepcopy.
231
232 * test/test_save.py (SaveSessionTest.testClassifiedLayer):
233 Added pattern.
234
235 * test/test_load.py (ClassificationTest.TestLayers, TestClassification):
236 Added pattern.
237
238 * test/test_layer.py
239 (TestLayerModification.test_set_classification_textual): New
240 (TestLayerModification.test_set_classification_numerical):
241 Renamed test_set_classification.
242
243 * Doc/manual/thuban-manual.xml: Added pattern to layer classification
244 description.
245
246 * Resources/XML/thuban-1.1.dtd: Added clpattern element and attribs.
247
248 2006-06-29 Didrik Pinte <[email protected]>
249
250 * Thuban/version.py: Bugfix determination of SQLite, the wright one !
251
252 2006-06-28 Didrik Pinte <[email protected]>
253
254 * packaging/windows/thubanstart.py: sample file loading all the stable
255 extensions
256
257 2006-06-28 Didrik Pinte <[email protected]>
258
259 * Thuban/version.py: Bugfix determination of SQLite on old and recent
260 systems (support pysqlite1 and pysqlite2)
261
262 2006-06-27 Frank Koormann <[email protected]>
263
264 * Thuban/version.py: Bugfix determination of SQLite on old systems.
265
266 2006-05-17 Didrik Pinte <[email protected]>
267 * Extensions/ogr/__init__.py : updated test for win32 and correct
268 imports
269
270 2006-05-15 Didrik Pinte <[email protected]>
271 Ashamed ... still some tabs in the files
272
273 * Thuban/version.py : tabs removed
274 * Thuban/Model/transientdb.py : tabs removed
275
276 2006-05-15 Didrik Pinte <[email protected]>
277
278 * Thuban/version.py : coding style correction
279 * Thuban/Model/transientdb.py : coding style correction
280
281 2006-05-15 Didrik Pinte <[email protected]>
282
283 * Thuban/version.py : Updated imports to support pysqlite2
284
285 * Thuban/Model/transientdb.py : Updated imports to support pysqlite2
286 Patched the querying system to support the param style of pysqlite2
287
288 2006-04-24 Didrik Pinte <[email protected]>
289
290 * Extensions/svgexport/__init__.py: The extension now works on win32
291 architecture. Bug #87 corrected.
292
293 2006-04-20 Bernhard Reiter <[email protected]>
294
295 * Doc/technotes/coding_guidelines.txt: Changed text from CVS to SVN.
296 Removed emacs specific hint and replaced it with a general hint
297 that editors might support writing changelogs.
298
299 2006-04-12 Bernhard Reiter <[email protected]>
300
301 * Thuban/version.py: Changed thuban_release mechanism to use "svn"
302 instead of "cvs".
303
304 2006-03-31 Bernhard Reiter <[email protected]>
305
306 * libraries/thuban/wxproj.cpp: including proj_api.h instead of
307 projects.h now. According the Frank Warmerdam and man pj_init
308 this is the public interface to proj. Thus I have changed PJ to projPJ.
309 And I could remove the hack to avoid clashes with typedef PVALUE
310 and #define LP in projects.h clashing with symbols when trying to
311 build on windows. The file is cleaner and nicer now.
312
313 2006-03-29 Bernhard Reiter <[email protected]>
314
315 * libraries/thuban/wxproj.cpp: undef LP to avoid clash when
316 trying to build with mingw.
317
318 2005-10-18 Bernhard Reiter <[email protected]>
319
320 * Thuban/UI/about.py: remove unused import of getdefaultlocale.
321 Added display of internal encoding to the about dialog text.
322
323 * Extensions/svgexport/__init__.py: changed version to "1.0.0+cvs".
324
325 2005-10-18 Bernhard Reiter <[email protected]>
326
327 Startup improved: We fail right away if the internal encoding could
328 not be determined.
329
330 * Thuban/__init__.py (get_internal_encoding): new.
331
332 * test/test_stringrepresentation.py (class TestInternalEncoding):
333 Preserve the internal encoding for the tests in this class.
334
335 2005-10-17 Bernhard Reiter <[email protected]>
336
337 * test/test_stringrepresentation.py: New file, for now testing
338 that set_internal_coding() is throwing an exception for bad exceptions.
339
340 * Thuban/__init__.py (set_internal_encoding): added a forwards
341 and backward translation, so that we fail early if the
342 internal_encoding is bad.
343
344 2005-10-17 Bernhard Reiter <[email protected]>
345
346 svgexport 1.0.0cvs: Fixed ARC layer writing: No filling is done.
347 You could actually get polylines with filling in between,
348 when the classification for the lines had a fill color.
349 E.g. this happens when you generate a classification from a ramp.
350
351 * Extensions/svgexport/test/test_svgmapwriter.py:
352 New test_export_arc_no_fill(). Extend copyright notice to 2005.
353
354 * Extensions/svgexport/svgmapwriter.py
355 (SVGRenderer.draw_shape_layer_incrementally()):
356 Setting TRANSPARENT_BRUSH for shaptype ARC.
357 Extend copyright notice to 2005.
358
359 * Extensions/svgexport/__init__.py: Extend copyright notice to 2005.
360
361 2005-09-08 Frank Koormann <[email protected]>
362
363 * Doc/manual/thuban-manual.xml (Map Management): Fixed typo reported
364 by Erik (sigra.at.home.se)
365
366 2005-08-18 Jan-Oliver Wagner <[email protected]>
367
368 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
369 Call the right method for the default size.
370
371 2005-08-11 Jan-Oliver Wagner <[email protected]>
372
373 * Extensions/export_shapefile: New.
374
375 * Extensions/export_shapefile/__init__.py: New. Initialize
376 the export_shapefile extension.
377
378 * Extensions/export_shapefile/export_shapefile.py: New.
379 Exports a layer as a Shapefile.
380
381 2005-08-08 Jan-Oliver Wagner <[email protected]>
382
383 * po/de.po: String fixes. This fixes Debian bug #313843.
384
385 2005-07-27 Jan-Oliver Wagner <[email protected]>
386
387 Remove the attributes from the layer element in
388 .thuban files for the save routine.
389 This also solves RT bug #3149,
390 https://intevation.de/rt/webrt?serial_num=3149
391
392 * test/test_load.py: (TestSingleLayer, TestNonAsciiColumnName,
393 TestLayerVisibility, TestSymbolSize, TestClassification, TestLabels,
394 TestLayerProjection, TestJoinedTable, TestLabelLayer): Removed
395 attributes from layer element to classification clnull element.
396
397 * test/test_save.py (SaveSessionTest.testSingleLayer,
398 SaveSessionTest.testLayerProjection,
399 SaveSessionTest.testClassifiedLayer,
400 SaveSessionTest.test_joined_table, SaveSessionTest.test_save_postgis):
401 Removed attributes from layer element to classification clnull element.
402 (test_save_postgis.NonConnectionStore._fetch_table_information):
403 added pretending to have a shape_type.
404
405 * Resources/XML/thuban-1.1.dtd: Make the attributes field
406 and field_type of classification optional.
407
408 * Thuban/Model/classification.py (Classification.TreeItem.build_info):
409 Added output of size.
410
411 * Thuban/Model/load.py (SessionLoader.start_classification):
412 Change attribute 'field' and 'field_type' from obligatory to
413 optional to allow empty classes (ie. only with a default=clnull).
414
415 * Thuban/Model/save.py (SessionSaver.write_layer): Don't write
416 any attributes anymore for the layer element.
417 (SessionSaver.write_classification): Even if there is no
418 classification field, still write the classification because
419 the clnull (default) symbol will not be defined anymore as
420 part of the layer element.
421
422 2005-07-05 Bernhard Herzog <[email protected]>
423
424 * setup.py (setup call): Version 1.1.0
425
426 * NEWS: Update for 1.1.0
427
428 * MANIFEST.in: Add *.txt to files taken from Doc. Otherwise the
429 technores won't be included
430
431 * Thuban/UI/about.py (About.__init__): Extend copyright notice to
432 2005
433
434 * po/de.po: Updated.
435
436 2005-07-05 Bernhard Herzog <[email protected]>
437
438 * README: gdal 1.1.8 is too old. 1.2.5 works.
439
440 2005-07-05 Bernhard Herzog <[email protected]>
441
442 * Resources/XML/thuban-1.1.dtd (rasterlayer): Add the opacity and
443 masktype attributes.
444
445 2005-07-05 Bernhard Herzog <[email protected]>
446
447 * Thuban/Model/layer.py (Layer.__mangle_bounding_box)
448 (Layer.ClipBoundingBox): Rename ClipBoundingBox to
449 __mangle_bounding_box. See the comments in the code and RT #2845
450
451 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
452 Remove the explicit test of ClipBoundingBox. The method isn't
453 public anymore and the direct call in the test wasn't necessary in
454 the first place. If ClipBoundingBox (now __mangle_bounding_box)
455 isn't called, the return value of ShapesInRegion will be
456 different.
457
458 2005-07-05 Bernhard Herzog <[email protected]>
459
460 * Thuban/UI/viewport.py (ViewPort.set_view_transform): Handle
461 ZeroDivisionError exceptions. I don't know when they happen
462 exactly. It probably happens when the projections aren't set
463 properly.
464
465 2005-07-01 Bernhard Herzog <[email protected]>
466
467 First step towards unicode. With this roughly we're at step 1
468 string_representation.txt
469
470 * Doc/technotes/string_representation.txt: New. Document how
471 strings are represented in Thuban and how to get to a Unicode
472 Thuban.
473
474 * Thuban/__init__.py (set_internal_encoding)
475 (unicode_from_internal, internal_from_unicode): New. The first few
476 functions for the internal string representation
477
478 * Thuban/UI/about.py (unicodeToLocale): Removed. Use
479 internal_from_unicode instead.
480
481 * Thuban/UI/__init__.py (install_wx_translation): Determine the
482 encoding to use for the internal string representation. Also,
483 change the translation function to return strings in internal
484 representation even on unicode builds of wxPython
485
486 * Thuban/Model/load.py (SessionLoader.check_attrs): Decode
487 filenames too.
488 (SessionLoader.start_clrange): Use check_attrs to decode and check
489 the attributes.
490
491 * Thuban/Model/xmlreader.py (XMLReader.encode): Use
492 internal_from_unicode to convert unicode strings.
493
494 * Thuban/Model/xmlwriter.py (XMLWriter.encode): Use
495 unicode_from_internal when applicable
496
497 * test/runtests.py (main): New command line option:
498 internal-encoding to specify the internal string encoding to use
499 in the tests.
500
501 * test/support.py (initthuban): Set the internal encoding to
502 latin-1
503
504 * test/test_load.py (TestSingleLayer.test, TestClassification.test)
505 (TestLabelLayer.test): Use the internal string representation when
506 dealing with non-ascii characters
507
508 * test/test_load_1_0.py (TestSingleLayer.test)
509 (TestClassification.test, TestLabelLayer.test): Use the internal
510 string representation when dealing with non-ascii characters
511
512 * test/test_load_0_9.py (TestSingleLayer.test)
513 (TestClassification.test): Use the internal string representation
514 when dealing with non-ascii characters
515
516 * test/test_load_0_8.py (TestUnicodeStrings.test): Use the
517 internal string representation when dealing with non-ascii
518 characters
519
520 * test/test_save.py (XMLWriterTest.testEncode)
521 (SaveSessionTest.testClassifiedLayer): Use the internal string
522 representation when dealing with non-ascii characters where
523 applicable
524
525 2005-06-30 Bernhard Herzog <[email protected]>
526
527 * test/runtests.py: Untabify.
528
529 2005-06-30 Bernhard Herzog <[email protected]>
530
531 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
532 untabify.
533
534 2005-06-30 Bernhard Herzog <[email protected]>
535
536 * Extensions/ogr/test/__init__.py: Add missing coding directive
537
538 2005-06-28 Jan-Oliver Wagner <[email protected]>
539
540 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
541 Use the default size for rendering selected items of default type.
542 Fixes part 2 of https://intevation.de/rt/webrt?serial_num=3149
543
544 2005-06-28 Jan-Oliver Wagner <[email protected]>
545
546 * Extensions/importAPR/apr.py (APR_BShSym): Extend by 'Stripple'.
547 (APR_TClr.GetThubanColor): Fix bug in color interpretation.
548 Thanks to Frank Koormann who identified this problem.
549
550 * Extensions/importAPR/importAPR.py (APR_VShSym): New. Just
551 another symbol identified.
552
553 2005-06-27 Jan-Oliver Wagner <[email protected]>
554
555 * Doc/manual/thuban-manual-de.xml: More translations.
556
557 2005-05-12 Jonathan Coles <[email protected]>
558
559 * Thuban/UI/projdialog.py: Add missing import, which led to an
560 exception when opening a layer's projection.
561
562 2005-05-09 Bernhard Herzog <[email protected]>
563
564 * test/support.py (FileLoadTestCase.filename): Fix doc-string.
565
566 2005-05-09 Bernhard Herzog <[email protected]>
567
568 * Thuban/Model/postgisdb.py (PostGISConnection.connect): Set the
569 connection to autoconnect. Fixes RT#3148.
570
571 * test/test_postgis_db.py
572 (TestPostGISSpecialCases.test_simple_error_handling): New test
573 that attempts to reproduce RT#3148.
574
575 2005-05-06 Jonathan Coles <[email protected]>
576
577 Add support for saving and loading the opacity and mask type
578 properties of RasterLayers. Also add support for proper use
579 of alpha information while drawing images not in 'RAW' format.
580 If transparency in an image format (e.g, PNG) is supported by
581 wxWidgets then the image would previously have been draw with
582 transparent regions, but the opaque regions would have been
583 unaffected by a change in the layer's opacity. This patch
584 corrects the problem.
585
586 * Thuban/Model/layer.py (RasterLayer): Added opacity and
587 masktype parameters to the constructor, and set the
588 appropriate variables to those values.
589
590 * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Added
591 code to read the opacity and mask type of the layer and construct
592 a new layer with the additional parameters.
593
594 * Thuban/Model/save.py (SessionSaver.write_layer): Added code
595 to save the opacity and mask type of a layer.
596
597 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Pass
598 the opacity of the layer to draw_raster_data rather than the layer.
599 (BaseRenderer.draw_raster_data): Remove the layer parameter because
600 the function doesn't need to know about the layer. Add the optional
601 opacity parameter whose default is 1.0. Add 'PNG' as a supported
602 graphics format.
603
604 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Fixed
605 signature to match that in BaseRenderer. Use the new opacity argument
606 in place of calling layer.Opacity(). In the case where the
607 format is not 'RAW', alpha_data is None and the loaded image has
608 alpha information, use the file's alpha information. This is
609 still subject to the layer's opacity setting.
610
611 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data):
612 Fixed signature to match that in BaseRenderer.
613
614 * test/test_load.py (TestRasterLayer): Change file_contents to
615 include opacity and masktype variables.
616 (TestRasterLayer.test): Include tests for opacity and masktype
617 changes.
618
619 * test/test_save.py (SaveSessionTest.testRasterLayer): Restructure
620 test to cover a variety of combinations of masktype and opacity
621 settings.
622
623 2005-05-02 Jan-Oliver Wagner <[email protected]>
624
625 * debian/rules: add --use-wx-python-swig-hack
626 to the build command.
627 Thanks to Moritz Lennert for pointing this out.
628
629 2005-04-28 Jan-Oliver Wagner <[email protected]>
630
631 Introduce OGRFileShapeStore in ogr extension.
632 This allows at least that loaded shapefile shape stores
633 can be saved correctly in the thuban session file
634 and reloaded again (reload is via core shapefile
635 routine, not OGR). For other types, .thuban files
636 can not be reloaded for the time being.
637
638 * Extensions/ogr/ogrshapes.py (OGRFileShapeStore): New. This
639 class ist to be used for any file-based shape stores
640 accessed through OGR.
641
642 * Extensions/ogr/ogrstart.py (open_with_ogr): Added
643 forgotten _ for i18n. Adapted call OpenFileShapestore
644 regarding new parameter.
645 (OpenFileShapestore): Use OGRFileShapeStore instead of
646 OGRShapeStore. Fix return value (None instead of null).
647 Add new parameter "mainwindow" to avoid accessing global
648 context.
649
650 2005-04-27 Jan-Oliver Wagner <[email protected]>
651
652 Introduce FileShapeStore as generalization for
653 file-based shape stores. In a first instance
654 this allows additional modules to handle shapefile
655 format as well, namely the OGR extension.
656
657 * Thuban/Model/data.py: Various small fixes in doc-strings.
658 (FileShapeStore): New class.
659 (ShapefileStore): Derive from FileShapeStore.
660 (ShapefileStore.__init__): Call __init__ of FileShapeStore,
661 rename self.table to self._table, initialize self._bbox
662 (ShapefileStore._open_shapefile): Use self._bbox instead of self.bbox
663 and self.FileName() instead of self.filename.
664 (ShapefileStore.Table): Use self._table instead of self.table.
665 (ShapefileStore.FileName): Removed (moved to FileShapeStore).
666 (ShapefileStore.BoundingBox): Use self._bbox instead of self.bbox.
667
668 * Thuban/Model/save.py: Replace ShapefileStore by FileShapeStore.
669 (SessionSaver.write_data_containers): Only use methods of the
670 base class FileShapeStore.
671
672 2005-04-26 Martin Schulze <[email protected]>
673
674 * Extensions/wms/wms.py (render_wms_layer): Adjusted the render
675 function to the modified render engine
676
677 2005-04-25 Martin Schulze <[email protected]>
678
679 * Thuban/UI/renderer.py (MapRenderer.projected_raster_layer):
680 Added a description according to the CVS log message
681
682 2005-04-23 Martin Schulze <[email protected]>
683
684 * Thuban/UI/renderer.py: Added a missing import
685
686 2005-04-23 Russell Nelson <[email protected]>
687
688 * Thuban/UI/view.py (MapCanvas.OnMiddle{Up,Down}): Changed the
689 way the previous tool is remembered, so that middle-button
690 panning works even if you haven't selected a tool.
691
692 2005-04-11 Bernhard Herzog <[email protected]>
693
694 * libraries/thuban/wxproj.cpp: Move the compatibility code that
695 deals with the wxPython 2.4 version of wxPython.h into the #ifdef
696 branch that includes wxPython.h because it's only needed when
697 wxPython.h is used. Also, it won't compile when
698 USE_WX_PYTHON_SWIG_HACK is set otherwise.
699
700 2005-04-07 Bernhard Herzog <[email protected]>
701
702 * Thuban/UI/classifier.py (ClassGrid.__init__): Use -1 as the ID.
703 (ID_CLASS_TABLE): Removed. It wasn't used anywhere except in
704 ClassGrid.__init__ and it's value is outside of the valid
705 range (must be < 32768). wxPython 2.5 complains about it with an
706 exception.
707
708 2005-04-05 Jan-Oliver Wagner <[email protected]>
709
710 * Doc/manual/thuban-manual-de.xml: More translations.
711
712 2005-04-05 Bernhard Herzog <[email protected]>
713
714 * libraries/thuban/wxproj.cpp: Make it work with a wxPython.h from
715 wxPython 2.4 as well. Also, remove a now obsolete comment.
716
717 2005-04-05 Bernhard Herzog <[email protected]>
718
719 Use wxPython.h by default but provide a workaround when it isn't
720 available.
721
722 * setup.py (wxproj_extension): New variable. Assign the Extension
723 instance for Lib.wxproj to this variable instead of putting it
724 directly into the listso that it can be accessed by other code
725 later.
726 (thuban_build_ext.user_options): Added boolean option
727 --use-wx-python-swig-hack.
728 (thuban_build_ext.initialize_options): Initialize the new option
729 to False.
730 (thuban_build_ext.finalize_options): If the new option was given,
731 define the preprocesser macro USE_WX_PYTHON_SWIG_HACK.
732 (thuban_build_ext): Update the doc-string
733
734 * libraries/thuban/wxproj.cpp: Normally we use
735 wx/wxPython/wxPython.h now. Only if USE_WX_PYTHON_SWIG_HACK is
736 defined, use swigPtrConvertHack.h instead.
737
738 * libraries/thuban/swigPtrConvertHack.h: Remove the code that was
739 copied over from wxPython.h.
740 (decode_pointer_new): New. Equivalent of decode_pointer for
741 wxPython 2.5.
742 (wxPyConvertSwigPtr): Modified to cope with wxPython 2.5 as well.
743
744 * README: Add section on potential build problems which explains
745 how the work-around for a missing wxPython.h is activated.
746
747 2005-03-29 Bernhard Herzog <[email protected]>
748
749 * test/postgissupport.py (find_postgis_sql): Added yet another
750 potential location for (lw)postgis.sql because the file has moved
751 again in postgis 1.0.0 rc4.
752
753 2005-03-29 Bernhard Herzog <[email protected]>
754
755 * Thuban/UI/legend.py (BMP_SIZE_W, BMP_SIZE_H): Set both to 16 to
756 match the site of the legend_icon_layer icon. Otherwise wxpython
757 2.5 complains when the legend is created with the error:
758
759 PyAssertionError: C++ assertion "(bitmap.GetWidth() == m_width &&
760 bitmap.GetHeight() == m_height) || (m_width == 0 && m_height ==
761 0)" failed in ./src/generic/imaglist.cpp(81): invalid bitmap size
762 in wxImageList: this might work on this platform but definitely
763 won't under Windows.
764
765 2005-03-23 Jonathan Coles <[email protected]>
766
767 These changes add support for adjusting the opacity of a raster layer.
768
769 * Thuban/Model/layer.py (RasterLayer.Opacity): Replaces AlphaOpacity.
770 (RasterLayer.SetOpacity): Replaces SetAlphaOpacity. Also triggers
771 a LAYER_CHANGED event if the opacity actually changes.
772
773 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_data): Added
774 layer parameter needed in the implementation of this method in
775 renderer.py.
776
777 * Thuban/UI/layerproperties.py (LayerProperties.dialog_layout): Fixed
778 typo 00 -> 0.
779
780 * Thuban/UI/rasterlayerproperties.py (RasterLayerProperties): Added
781 control to adjust opacity.
782
783 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Scale the
784 alpha data based on the opacity level of the layer.
785
786 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Now
787 accepts a layer parameter.
788
789 * test/test_layer.py (TestLayerModification.test_raster_layer):
790 Rename opacity method calls and add test for LAYER_CHANGED.
791
792 2005-03-16 Bernhard Herzog <[email protected]>
793
794 * test/test_connector.py (DeletionTestMixin.check_deletions)
795 (DeletionTestMixin.check_deletetions): renamed to check_deletions.
796 update the callers.
797
798 2005-03-14 Jan-Oliver Wagner <[email protected]>
799
800 * Doc/manual/thuban-manual-de.xml: More translations.
801
802 2005-03-10 Jan-Oliver Wagner <[email protected]>
803
804 Introducing initialization callbacks for extensions.
805
806 * Thuban/UI/extensionregistry.py (ExtensionDesc.__init__): Added
807 optional parameter init_callback.
808 (ExtensionDesc.init_ext): New. Executes the callback and sets
809 a status.
810
811 * Thuban/UI/application.py (ThubanApplication.OnInit): Add the
812 initialization of the extensions.
813 (ThubanApplication.init_extensions): Init all extensions.
814
815 * Thuban/UI/about.py (About.__init__): Added status of the extensions
816 to the about text.
817
818 * Extensions/gns2shp/__init__.py: Added init method for Extension
819 description.
820 (init): New. Contains the initialization of the module.
821
822 2005-03-04 Nina Hüffmeyer <[email protected]>
823
824 * Extensions/ogr/ogrdialog.py: Added a dialog, which asks for
825 OGRConnection to open a datasource. Removed dialog to display all
826 available drivers. Added some doc strings.
827
828 * Extensions/ogr/ogrstart.py: Added menu entry for opening an
829 OGRDatasource with a string. Added two opening methods which return an
830 OGRDatasource (either data from file or from DB).
831
832 * Extensions/ogr/ogrshapes.py: Added class OGRGeometry, which
833 represents a geometry reference of an OGRFeature. OGRShape now has a
834 list of referenced geometry objects (important for geometry
835 collections).
836 For OGRShapeStores loaded from a DB an ID column can be specified now.
837
838 2005-02-22 Jan-Oliver Wagner <[email protected]>
839
840 * test/test_map.py (TestMapWithContents.test_tree_info):
841 Added label layer for comparison.
842
843 2005-02-18 Jonathan Coles <[email protected]>
844
845 * libraries/thuban/gdalwarp.cpp (GetImageData): Optimize the loop
846 which builds a mask. Handle the majority of an image in a loop,
847 creating 8 bits at a time. Later, handle the edge case where less
848 than 8 bits are packed.
849
850 2005-02-18 Bernhard Herzog <[email protected]>
851
852 * test/test_baserenderer.py (TestBaseRenderer.setUp): Fix
853 doc-string
854
855 2005-02-18 Jonathan Coles <[email protected]>
856
857 * setup.py: Remove wx_cs_params from gdal compile options.
858
859 2005-02-18 Jonathan Coles <[email protected]>
860
861 Refactored baserenderer.py and renderer.py to remove baserenderer.py's
862 dependencies on wxPython. Added a new method projected_raster_layer()
863 that returns a raster layer image in projected space. This must be
864 implemented in classes derived from BaseRenderer. This also eliminates
865 the dependency on gdal in baserenderer.py.
866
867 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Call
868 new projected_raster_layer() to get projected raster image instead
869 of directly calling ProjectRasterFile().
870 (BaseRenderer.projected_raster_layer): New. This must be implemented
871 by derived classes. It takes almost the same arguments as ProjectRasterFile
872 did and returns a projected image with mask and alpha data (if requested).
873 (BaseRenderer.render_map_incrementally): Remove the check for gdal since
874 that check will be done in MapRenderer.projected_raster_layer(). This
875 also allows other implementations to use different projection code.
876
877 * Thuban/UI/renderer.py (MapRenderer.projected_raster_layer):
878 Implementation of BaseRenderer.projected_raster_layer. Checks for
879 gdal support and wxPython version. Also handles exceptions from
880 ProjectRasterFile.
881
882 * libraries/thuban/gdalwarp.cpp: Removed checks for wxPython versions
883 and added a variable which can be set through the options argument
884 of ProjectRasterFile.
885
886 * test/test_baserenderer.py (SimpleRenderer.projected_raster_layer): New.
887 Calls ProjectRasterFile and returns the result.
888 (TestBaseRenderer.test_projected_raster_layer): New. Tests the results
889 of calling projected_raster_layer() with different options.
890 (TestBaseRenderer.test_raster_no_projection): Removed tests based on
891 wxPython version and all tests of masks and alpha channels. These are
892 now in test_projected_raster_layer().
893
894 2005-02-17 Jan-Oliver Wagner <[email protected]>
895
896 * Thuban/Model/map.py, Thuban/Model/label.py: Fixed
897 doc-strings to comply with coding_guidelines.
898
899 2005-02-17 Jan-Oliver Wagner <[email protected]>
900
901 Docstring improvements and minor fixes for labellayer.
902
903 * Thuban/Model/map.py:
904 (Map, Map.Destroy, Map.RemoveLayer, Map.ClearLayers,
905 Map.Layers, Map.HasLayers, Map.MoveLayerToTop,
906 Map.RaiseLayer, Map.LowerLayer, Map.MoveLayerToBottom,
907 Map.ProjectedBoundingBox, Map.GetProjection): Improved/added
908 doc string.
909 (Map.BoundingBox): Removed superfluous test for label_layer
910 and improved doc string.
911 (Map.TreeInfo): Added label_layer and improved sdo string.
912
913 * Thuban/Model/label.py: Added import of _.
914 (Label, Label.__init__): Improved/added doc string.
915 (LabelLayer, LabelLayer.__init__, LabelLayer.Labels,
916 LabelLayer.RemoveLabel, LabelLayer.ClearLabels):
917 Improved/added doc string.
918 (LabelLayer.AddLabel): Use already defined names for
919 align strings and improved doc string.
920 (LabelLayer.TreeInfo): New. Return the object data for
921 the tree view.
922
923 2005-02-16 Jonathan Coles <[email protected]>
924
925 Further wxPython 2.5 changes using patches from Daniel Calvelo Aros
926 so that that wxproj doesn't crash. Added GUI support for selecting
927 alpha channel (opacity can't be selected yet).
928
929 NOTE: If wxPython.h is including in future distribution packages
930 then it will not be necessary to have the files swigPtrConvertHack.h
931 and wxPython_int.h included with Thuban. This is hopefully
932 a temporary workaround.
933
934 * setup.py (thuban_build_ext.finalize_options): gdalwarp needs
935 access to the macro wxCHECK_VERSION so that it will properly
936 generate a bit mask. There was a problem between wx2.4 and wx2.5
937 that this works around.
938
939 * Thuban/Model/layer.py (RasterLayer.UseMask): Removed in favor
940 of RasterLayer.MaskType.
941 (RasterLayer.SetUseMask): Removed in favor of RasterLayer.SetMaskType
942 (RasterLayer.MaskType): New. Returns the type of mask to use. Can
943 specify none, a bitmap, or an alpha channel.
944 (RasterLayer.SetMaskType): New. Set what kind of mask to use.
945
946 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer):
947 Set the raster warping options for the mask based on the value
948 of RasterLayer.MaskType.
949
950 * Thuban/UI/legend.py (LegendTree.__FillTreeLayer): Remove
951 deprecated calls to SetItemSelectedImage in favor of SetItemImage
952 with wxTreeItemIcon_Selected.
953
954 * Thuban/UI/rasterlayerproperties.py: Support selecting to use
955 an alpha channel for the mask.
956
957 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Use alpha
958 data if it is available and an alpha channel is supported under
959 the current version of wxPython.
960
961 * libraries/thuban/gdalwarp.cpp (GetImageData): Added compiler define
962 to select whether 1's or 0's select the desired portion of an image
963 in the bit mask. wx2.4 has a bug where the documentation is the opposite
964 from behavior.
965 (ProjectRasterFile): Only generate an alpha channel if the version
966 of wxPython is >= 2.5.3.
967
968 * libraries/thuban/wxproj.cpp: Applied patches from Daniel Calvelo Aros.
969 When wxPython >= 2.5.3 use the special swig functions to decode an
970 object's address.
971
972 * libraries/thuban/swigPtrConvertHack.h: Includes conditional code
973 based on the version of wxPython. If >= 2.5.3 use the special swig
974 functions from wxPython to decode wxPython objects, otherwise use
975 the old method of retrieving the address from the object __repr__ string.
976
977 * libraries/thuban/wxPython_int.h: Copied from wxPython source.
978 Unnecessary code was removed to make it smaller.
979
980 * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
981 Add tests for returning an alpha channel.
982
983 * test/test_layer.py (TestLayerModification.test_raster_layer): Fix
984 tests that used removed functions UseMask and SetUseMask
985
986
987 2005-02-08 Bernhard Herzog <[email protected]>
988
989 More wxPython 2.5 changes. This time taken from a patch from
990 Daniel Calvelo Aros.
991
992 * Thuban/UI/tableview.py (QueryTableFrame.__init__)
993 (QueryTableFrame.__init__): Pass the size of a spacer as a single
994 item.
995
996 * Thuban/UI/projdialog.py (ProjFrame.build_dialog)
997 (ProjFrame.build_dialog): Pass the size of a spacer as a single
998 item.
999
1000 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Pass the
1001 size of a spacer as a single item.
1002
1003 * Thuban/UI/classifier.py (Classifier.dialog_layout): Pass the
1004 size of a spacer as a single item.
1005
1006 2005-02-08 Bernhard Herzog <[email protected]>
1007
1008 Compatibility with wxPython 2.5. The changes should make it work
1009 better with 2.5 while still keeping compatibility with 2.4. There
1010 are still problems with 2.5, though.
1011
1012 * Thuban/UI/dock.py (DockableWindow.__CreateBorder): Pass the size
1013 of a spacer as a single item.
1014
1015 * Thuban/UI/classifier.py (ClassGroupPropertiesCtrl): Derive only
1016 from wxControl
1017
1018 * Thuban/UI/legend.py (LegendTree): When running with wxPython <
1019 2.5, add an implementation of the GetFirstChild method that does
1020 not require the second parameter.
1021 (LegendTree.find_layer, LegendTree._OnMsgMapLayersAdded)
1022 (LegendTree._OnMsgMapLayersRemoved, LegendTree.DeleteAllItems)
1023 (LegendTree.DeleteChildren, LegendTree.__ShowHideLayer): Do not
1024 pass the second parameter to GetFirstChild
1025
1026 2005-02-08 Nina Hüffmeyer <[email protected]>
1027
1028 * Extensions/ogr/ogrshapes.py: Removed some print commands.
1029
1030 * Extensions/ogr/ogrstart.py: Changed the GUI. OGR is no longer an
1031 additional menu but appears as a possibility in the menu Map.
1032
1033 2005-02-07 Jonathan Coles <[email protected]>
1034 * libraries/thuban/gdalwarp.cpp: Removed the macros PYTHON_ERR
1035 and PYTHON_ERRF since they were no longer necessary.
1036
1037 2005-02-07 Bernhard Reiter <[email protected]>
1038 * Thuban/UI/classifier.py (ClassGrid.DeleteSelectedRows):
1039 Enable translation for message string.
1040
1041 2005-02-06 Martin Schulze <[email protected]>
1042
1043 * Extensions/wms/infodialog.py (wmsInfoDialog.__init__): Adjusted
1044 the arguments of the contstructor to fit the global scheme
1045
1046 2005-01-31 Nina Hüffmeyer <[email protected]>
1047
1048 * Extensions/ogr/ogrdialog.py: Added class ogrdialog.py, which provides
1049 some dialogs needed to start ogr.
1050
1051 * Extensions/ogr/__init__.py: Changed comments to avoid encoding
1052 warnings.
1053
1054 * Extensions/ogr/test/test_OGRShapestore.py: Changed comments to avoid
1055 encoding warnings.
1056
1057 2005-01-28 Jonathan Coles <[email protected]>
1058
1059 * libraries/thuban/gdalwarp.cpp (GetImageData): Recode how the
1060 mask is packed into a bit array. It's now slightly faster.
1061
1062 2005-01-28 Jonathan Coles <[email protected]>
1063
1064 * Thuban/Model/layer.py (RasterLayer.__init__): Make use_mask
1065 default to true.
1066
1067 * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Remove
1068 code that loads the state of the layer's use_mask flag. Its
1069 usefulness is still being debated.
1070
1071 * Thuban/Model/save.py (SessionSaver.write_layer): Remove
1072 code that saves the state of the layer's use_mask flag. Its
1073 usefulness is still being debated.
1074
1075 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Pass
1076 options to ProjectRasterFile based on the state of layer.UseMask().
1077 Catch more exceptions from ProjectRasterFile so that Thuban doesn't
1078 quit is there is a problem projecting.
1079 (BaseRenderer.draw_raster_data): Change the documentation to
1080 describe the new format (XBM) that the mask data will be in.
1081
1082 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): The mask
1083 data is in XBM format when format='RAW' which means it doesn't
1084 need to be converted to a wxImage before being used as a mask
1085 for a wxBitmap. Assume that if format != 'RAW' that the image
1086 data and mask data are in the same format.
1087
1088 * libraries/thuban/gdalwarp.cpp (GetImageData): If alpha is enabled
1089 and a mask is requested, convert the alpha band to a bit array in
1090 XBM format. if an alpha channel is requested, simply return the
1091 data in the alpha band. Provide better error handling by returning
1092 python error messages (also fixes RT #2947).
1093 (ProjectRasterFile): Support multiple mask options, rather than simply
1094 a flag indicating that a mask should or should not be used. Provide
1095 better error handling by returning python error messages.
1096
1097 * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
1098 Add mask data to test.
1099
1100 * test/test_layer.py (TestLayer.test_raster_layer): Test that a layer
1101 should use the mask by default.
1102 (TestLayerModificaton.test_raster_layer): Test that a layer should use
1103 the mask by default.
1104
1105 * test/test_load.py (TestRasterLayer.test): Remove testing for
1106 use_mask flag in file.
1107
1108 * test/test_save.py (SaveSessionTest.testRasterLayer): Remove testing
1109 for use_mask in file.
1110
1111 * test/test_load_1_0_1.py: Removed. Shouldn't have been checked in.
1112
1113 2005-01-26 Jonathan Coles <[email protected]>
1114
1115 Add a new dialog box for raster layers. The dialog box allows
1116 the user to toggle a mask that is generated by ProjectRasterFile
1117 and is used to only draw the real parts of the projected image.
1118
1119 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer):
1120 Instruct the warping code to generate a mask if the raster layer
1121 requests one.
1122 (BaseRenderer.draw_raster_data): Removed obsolete optional mask argument.
1123
1124 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Removed
1125 obsolete optional mask argument.
1126
1127 * Thuban/UI/classifier.py (Classifier): Change the parent class
1128 to LayerProperties and rework the code to support layout calls
1129 from the parent.
1130 (Classifier.dialog_layout): New. Layout the dialog box.
1131 (Classifier.map_layers_removed): Removed. Moved to parent class.
1132 (Classifier.map_replaced): Removed. Moved to parent class.
1133 (Classifier._OnTry): Renamed to OnTry to support parent class.
1134 (Classifier.OnClose): Removed. Supplied in parent class.
1135 (Classifier._OnCloseBtn): Removed. Supplied in parent class as OnCloseBtn.
1136 (Classifier._OnOK): Renamed to OnOK to support parent class.
1137 (Classifier._OnRevert): Renamed to OnRevert to support parent class.
1138
1139 * Thuban/UI/layerproperties.py: New. Base class for layer properties
1140 dialog boxes.
1141
1142 * Thuban/UI/rasterlayerproperties.py: New. Class for displaying
1143 raster layer properties.
1144
1145 * libraries/thuban/gdalwarp.cpp: Replace the old gdalwarp.cpp code
1146 with the non-simple version supplied with gdal. This allows added
1147 features such as creating an alpha band.
1148 (GetImageData): Generate a mask array from the alpha band that is
1149 generated by gdal if the user has selected it. Try to support images
1150 that have more than three bands, such as images with RGB plus an
1151 alpha band.
1152 (ProjectRasterFile): Convert python argument for mask and tell
1153 gdal to enable or disable an alpha band.
1154
1155 * Thuban/Model/layer.py (BaseLayer.Type): New. Returns a string
1156 describing what kind of layer the class is. Defaults to "Unknown",
1157 but should be overridden by subclasses.
1158 (Layer.Type): New. Override base class method.
1159 (RasterLayer.__init__): Create a flag for using a mask. Record extra
1160 data from gdal for display in the properties dialog.
1161 (RasterLayer.Type): New. Override base class method.
1162 (RasterLayer.UseMask): New. Returns True if the mask should be used.
1163 (RasterLayer.SetUseMask): New. Set if the mask should be used.
1164 (RasterLayer.ImageInfo): New. Return extra information about the image.
1165
1166 * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Load
1167 the mask information.
1168
1169 * Thuban/Model/save.py (SessionSaver.write_layer): Save mask information.
1170
1171 * Thuban/UI/mainwindow.py: Register the RasterLayerProperties and
1172 Classifier classes as dialogs to use with the proper layer types.
1173
1174 * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
1175 Fix test.
1176
1177 * test/test_layer.py (TestLayer.test_raster_layer): Test new methods.
1178 (TestLayerModification.build_path): New. Support function.
1179 (TestLayerModification.test_raster_layer): New. Test new methods.
1180
1181 * test/test_save.py (SaveSessionTest.testRasterLayer): Add tests for mask.
1182
1183 * test/test_load.py (TestRasterLayer): Add tests for mask.
1184
1185 * test/test_load_1_0_1.py: New. Copied from test_load.py.
1186
1187 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Removed
1188 obsolete optional mask argument.
1189
1190 2005-01-26 Nina Hüffmeyer <[email protected]>
1191
1192 * Extensions/ogr/ogrshapes.py: Added two dictionaries to ShapeStore
1193 which maps the ids and the ordinals. Fixed RowIdToOrdinal(),
1194 RowOrdinalToId() and ReadRowAsDict().
1195
1196 * Extensions/ogr/ogrstart.py: Added menu item which opens database
1197 layers for existing database connections.
1198
1199 * Extensions/ogr/test/test_OGRShapestore.py: Fixed a message string.
1200
1201
1202 2005-01-26 Jan-Oliver Wagner <[email protected]>
1203
1204 * Doc/manual/thuban-manual-de.xml: More translations.
1205
1206 2005-01-24 Bernhard Herzog <[email protected]>
1207
1208 Rework the status bar updates a bit to make sure the message about
1209 the projections is produced at the right times.
1210
1211 * Thuban/UI/mainwindow.py (MainWindow.update_status_bar_messages):
1212 New class variable with messages that may require a status bar
1213 update.
1214 (MainWindow.view_position_changed)
1215 (MainWindow.update_status_bar): Rename from view_position_changed
1216 to update_status_bar. It's meaning has changed now that it may
1217 also generate messages about problems with projection settings.
1218 (MainWindow.__init__): Use the new update_status_bar_messages
1219 class variable to subscribe update_status_bar
1220 (MainWindow.set_position_text): Update doc-string. This method
1221 has to be renamed at some point. See doc-string and comments.
1222 (MainWindow.OnClose): Unsubscribe update_status_bar from all
1223 messages in update_status_bar_messages
1224
1225 * Thuban/UI/viewport.py (ViewPort.forwarded_map_messages): New
1226 class attribute. map messages to be forwarded by the viewport.
1227 (ViewPort._subscribe_map, ViewPort._unsubscribe_map): (un)subscribe
1228 the messages in forwarded_map_messages
1229
1230 2005-01-21 Bernhard Herzog <[email protected]>
1231
1232 * test/postgissupport.py (PostGISDatabase.__init__): Tweak
1233 doc-string
1234 (find_postgis_sql): Update for postgis-1.0.0-rc1, which uses a
1235 different name for the initialization SQL file.
1236
1237 2005-01-21 Jonathan Coles <[email protected]>
1238
1239 * Thuban/UI/baserenderer.py (proj_params_to_str): New. Takes
1240 a projection and returns a formatted string representing the
1241 parameters to feed to gdalwarp. This function eliminates
1242 redundancy in draw_raster_layer().
1243 (BaseRenderer.render_map_incrementally): Removed the optimization which
1244 drew the top most raster layer first and then only those vector-
1245 based layers that are above it. With the support for transparency
1246 this optimization breaks correct behaviour.
1247 (BaseRenderer.draw_raster_layer): Reorganize code to support possible
1248 future enhancements to raster layer bounding box. The old behaviour has
1249 not changed. Also, change calling parameters to draw_raster_data()
1250 to specify new RAW data format and mask.
1251 (BaseRenderer.draw_raster_data): Change signature to include an optional
1252 parameter for mask information. Change documentation to mention
1253 support for new parameter and added option for RAW data format.
1254 The data argument is now a list of [width, height, data].
1255
1256 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Add new optional
1257 mask parameter. Add new condition for RAW format, which
1258 significantly reduces rendering time. Add condition for
1259 mask parameter.
1260
1261 * libraries/thuban/gdalwarp.cpp (GetImageData): New. Creates a
1262 data array of RGB values from the projected image returned from
1263 the gdal warping functions. In the case of palette based images, it
1264 converts the NO_DATA index to the mask color.
1265 (ProjectRasterFile): Removed all custom memory driver references
1266 and replaced it with the standard in-memory dataset provided
1267 by gdal. The return data is no longer a BMP file, but an array
1268 of RGB values, one set triple per pixel.
1269
1270 * libraries/thuban/bmpdataset.cpp: Removed. Unnecessary.
1271 * libraries/thuban/cpl_mfile.h: Removed. Unnecessary.
1272 * libraries/thuban/cpl_mfile.cpp: Removed. Unnecessary.
1273
1274 * setup.py (thuban_build_ext.finalize_options): Removed mention
1275 of cpl_mfile.cpp and bmpdataset.cpp files in the list of source
1276 files. These are obsolete with the new version of gdalwarp.cpp
1277
1278 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data):
1279 Updated signature.
1280 (TestBaseRenderer.test_raster_no_projection): Changed the test
1281 data to be data in the uncompressed RAW format returned from
1282 ProjectRasterFile.
1283
1284 2005-01-21 Jan-Oliver Wagner <[email protected]>
1285
1286 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Made
1287 string available for i18n.
1288
1289 2005-01-20 Russell Nelson <[email protected]>
1290
1291 * Resources/Projections/defaults.proj: Ruin the speling of the
1292 Lambert-93 projection so it doesn't run into the wx UTF-8 bug.
1293 It's the wrong thing to do in the long run, but it's necessary for
1294 those users until that bug is fixed. Otherwise the projection
1295 dialog segfaults. Better to annoy some Lambert-93 users with a
1296 spelling mistake than every Fedora Core 3 user of Thuban-CVS.
1297
1298 2005-01-20 Bernhard Reiter <[email protected]>
1299
1300 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Added
1301 docstring and comment that the warning code here is a hack.
1302
1303 2005-01-20 Russell Nelson <[email protected]>
1304
1305 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Warn
1306 user about misprojected layers when their lat/lon bounding
1307 box exceeds rational lat/lon values.
1308
1309 2005-01-20 Bernhard Reiter <[email protected]>
1310
1311 * Thuban/UI/about.py (unicodeToLocale): Improved:
1312 Use 'ascii' and then 'replace' for other characters
1313 when getdefaultlocale returns None. Thanks to Bernhard H. .
1314
1315 2005-01-20 Bernhard Reiter <[email protected]>
1316
1317 * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Added a comment
1318 that OnRangeText might be called twice and using None as argument.
1319
1320 2005-01-20 Bernhard Reiter <[email protected]>
1321
1322 * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Add a
1323 OnRangeText(0) to work around a different in wx Behaviour noticed
1324 on MacOSX, thanks to Lorenzo Moretti and Daniel Calvelo for the fix.
1325
1326 2005-01-20 Bernhard Reiter <[email protected]>
1327
1328 * Thuban/UI/about.py: take iso-8859-15 when getdefaultlocale returns
1329 None. (Fixes rt#2910.)
1330
1331 2005-01-18 Frank Koormann <[email protected]>
1332
1333 New Extension: mouseposition
1334 Tool to collect mouse click positions (map coordinates) in a dialog.
1335
1336 * Extensions/mouseposition/__init__.py: New, extension registration
1337
1338 * Extensions/mouseposition/mouseposition.py: New, implements the
1339 dialog and adds a tool to Thuban mainwindow.
1340
1341 * Extensions/mouseposition/position.xpm: New, icon for tool.
1342
1343 2005-01-14 Jan-Oliver Wagner <[email protected]>
1344
1345 * Doc/manual/thuban-manual-de.xml: More translations.
1346
1347 2005-01-11 Frank Koormann <[email protected]>
1348
1349 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
1350 Fix indention bug.
1351
1352 2005-01-09 Frank Koormann <[email protected]>
1353
1354 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
1355 BugFix 2901: Explicitly copy layers ClassificationColumn since it
1356 is not part of the layers Classification.
1357
1358 2005-01-03 Frank Koormann <[email protected]>
1359
1360 * Thuban/UI/renderer.py (ScreenRendererdraw_selection_incrementally):
1361 BugFix 2883: Former implementation only worked on classified point
1362 layers: KeyError was raised, now use the default size if field is None.
1363
1364 2004-12-27 Bernhard Reiter <[email protected]>
1365
1366 svgexport 1.0.0cvs: Fixed label export.
1367
1368 * Extensions/svgexport/test/test_svgmapwriter.py:
1369 class TestSVGRenderer(): New class; new test test_label_font().
1370
1371 * Extensions/svgexport/svgmapwriter.py
1372 (SVGRenderer.label_font()): initialised Font size with self.factor now,
1373 makes test_label_font happy.
1374
1375 * Extensions/svgexport/TODO: crossed out fixed label export item.
1376 Added item for options.
1377
1378 * Extensions/svgexport/__init__.py: Bumped version to 1.0.0cvs.
1379
1380 2004-12-27 Russell Nelson <[email protected]>
1381
1382 Middle mouse button pans.
1383
1384 * Thuban/UI/view.py (MapCanvas.__init__): Subscribe also
1385 OnMiddleDown and OnMiddleUp events.
1386 (MapCanvas.OnMiddleDown): New. Activate the pan tool and remember the
1387 previously used tool.
1388 (MapCanvas.OnMiddleUp): New. Reactivate the remebered tool used before
1389 pressing the middle mouse button.
1390
1391 2004-12-27 Jan-Oliver Wagner <[email protected]>
1392
1393 * Doc/manual/thuban-manual-de.xml: More translations.
1394
1395 2004-12-23 Jan-Oliver Wagner <[email protected]>
1396
1397 * Thuban/UI/projdialog.py (ProjFrame.load_user_proj): Added a
1398 \n to stderr after the warnings. Thanks to Russell Nelson.
1399
1400 2004-12-20 Nina Hueffmeyer <[email protected]>
1401
1402 * Extensions/ogr/ogrshapes.py: Fixed some issues from
1403 Bernhard (coding guidelines etc.). Additionally it is now possible to
1404 display shapefiles containing feature collections (e.g.polygons
1405 with holes). Works with gdal 1.2.1 now.
1406
1407 * Extensions/ogr/test/test_OGRShapestore.py: Fixed some issues
1408 from Bernhard (coding guidelines etc.). If ogr can't be imported,
1409 tests are skipped now.
1410
1411 * Extensions/ogr/ogrstart.py: Fixed some typings.
1412
1413 2004-12-20 Bernhard Reiter <[email protected]>
1414
1415 * Extensions/svgexport/TODO: updated to add support for
1416 raster layers and labels for 1.0.1.
1417
1418 * Extensions/svgexport/svgmapwriter.py (draw_raster_layer):
1419 Issue a warning now.
1420
1421 2004-12-19 Bernhard Reiter <[email protected]>
1422
1423 * Extensions/svgexport/TODO: Added idea to support triggering
1424 the application down the pipe.
1425
1426 2004-12-19 Bernhard Reiter <[email protected]>
1427
1428 svgexport: Improved code quality, mainly by better naming.
1429
1430 * Extensions/svgexport/svgmapwriter.py:
1431 DrawPath() renamed to DrawPolygonPath(),
1432 added documentation, improved comments and variable names.
1433
1434 * Extensions/svgexport/svgmapwriter.py,
1435 Extensions/svgexport/test/test_svgmapwriter.py:
1436 All using DrawPolygonPath() now, the default parameter closed=True
1437 omitted.
1438
1439 * Extensions/svgexport/test/test_svgmapwriter.py:
1440 renamed test_polygon_opened() to test_polyline()
1441 renamed test_transparent_polygon() to test_transparent_polyline()
1442
1443 2004-12-18 Jan-Oliver Wagner <[email protected]>
1444
1445 Some fixes of gns2shp extension.
1446
1447 * Extensions/gns2shp/test/__init__.py: New. Make this directory a
1448 package.
1449
1450 * Extensions/gns2shp/test/test_gns2shp.py: Add some import paths
1451 dynamically.
1452
1453 * Extensions/gns2shp/test/README: Simplified description how to test.
1454
1455 * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed doc-string,
1456 fixed some dimensions of fields according to the GNS documentation
1457 which seems to change undocumented.
1458 Now killing trailing \n and/or \r from MODIFY_DATE.
1459 This fixes RT#2453.
1460
1461 2004-12-18 Bernhard Reiter <[email protected]>
1462
1463 svgexport 1.0.0: Treats holes and islands nicely. Documentation added.
1464
1465 * Extensions/svgexport/test/test_svgmapwriter.py:
1466 Added new tests: test_export_polygon_with_hole()
1467 and test_polygon_with_hole().
1468
1469 * Extensions/svgexport/svgmapwriter.py
1470 (draw_polygon_shape()): Uses DrawPath correctly now.
1471
1472 * Doc/manual/thuban-manual.xml: Added documentation for stable
1473 extention svgexport.
1474 * Doc/manual/thuban-manual-de.xml: Copied English section about
1475 svexport over.
1476
1477 * Extensions/svgexport/__init__.py: Bumped version number to 1.0.0.
1478
1479 * Extensions/svgexport/svgsaver.py,maplegend.py:
1480 Moved from experimental to stable extension menu.
1481
1482 * Extensions/svgexport/TODO: updated.
1483
1484
1485 2004-12-18 Bernhard Reiter <[email protected]>
1486
1487 Added Extensions/svgexport/TODO
1488
1489 2004-12-18 Bernhard Reiter <[email protected]>
1490
1491 Refactored in svgexport:
1492 DrawPath replaces DrawPolygon; added newline in front of "M" in paths.
1493
1494 * Extensions/svgexport/svgmapwriter.py
1495 Added verbosity level 3 to print out polygon points.
1496 (class Point): added __repr__
1497 (class Brush, __str__()): Added space after ,.
1498 (DrawPolygon): Renamed to DrawPath()
1499 (DrawPath): Takes list of polygons as input now, adds \n before "M"s.
1500 (DrawLines): Using DrawPath now.
1501
1502 * Extensions/svgexport/test/test_svgmapwriter.py:
1503 Replaced DrawPolygon() calls with DrawPath() and put the first argument
1504 inside another list. Adapted test data with a newline before "M".
1505
1506 2004-12-18 Bernhard Reiter <[email protected]>
1507
1508 Refactored svgexport tests: 9 double tests runs eliminated;
1509 code size reduced by 8 lines.
1510
1511 * Extensions/svgexport/test/test_svgmapwriter.py:
1512 (class TestWithDC): Renamed to BaseTestWithDC, moved to top.
1513 (class BaseWithDCtools): New, subclass from BaseTestWithDC.
1514 (class TestDrawSplines): now subclass from BaseTestWithDCtools,
1515 this fixed the double running of the nine tests of TestVirtualDC.
1516 (class TestVirtualDC): Using self.dc and self.file from setUp().
1517
1518 2004-12-17 Bernhard Herzog <[email protected]>
1519
1520 Two windows specific fixes ported from thuban-1­0-branch:
1521
1522 * Thuban/UI/about.py (unicodeToLocale): Use getdefaultlocale
1523 instead of getlocale because getlocale doesn't return a usable
1524 encoding name on a german windows 2000
1525
1526 * setup.py: windows build: Removed the absolute path names and
1527 made all prfixes relative to the directory containing setup.py.
1528 Makes it a little easier to adapt to a different system.
1529
1530 2004-12-16 Bernhard Herzog <[email protected]>
1531
1532 Add support for PostGIS tables with LINESTRING geometries.
1533 Fixes RT#2299
1534
1535 * Thuban/Model/postgisdb.py (shapetype_map): Add LINESTRING
1536
1537 * test/postgissupport.py
1538 (PostgreSQLServer.get_default_static_data_db): Rename the "roads"
1539 table to "roads-multi" because it now uses MULTILINESTRING
1540 geometries and introduce a new "roads" table that uses LINESTRING
1541 (coords_to_multilinestring): Make the doc string more precise
1542 (coords_to_linestring): New. Create a LINESTRING WKT
1543 representatin
1544 (wkt_converter): Add coords_to_linestring
1545 (upload_shapefile): Rephrase the doc-string a bit.
1546
1547 * test/test_postgis_db.py (TestPostGISShapestoreArc)
1548 (LineStringTests)
1549 (TestPostGISShapestoreLineString)
1550 (TestPostGISShapestoreMultiLineString): Split
1551 TestPostGISShapestoreArc into a base class LineStringTests and two
1552 derived classes TestPostGISShapestoreLineString for LINESTRING
1553 geometries and TestPostGISShapestoreMultiLineString for
1554 MULTILINESTRING geometries. Most test methods are in the base
1555 class with the exception of tests that explicitly check the raw
1556 format.
1557
1558 2004-12-16 Bernhard Herzog <[email protected]>
1559
1560 Make the test suite work with PostGIS 0.8.2 and PostgreSQL 7.4
1561
1562 * test/postgissupport.py (find_postgis_sql): Different postgis
1563 versions put the postgis.sql file into slightly different places
1564 so we have to look in both. The updated doc string describes this
1565 is more detail.
1566
1567 * test/test_postgis_db.py
1568 (TestPostGISSpecialCases.test_column_name_quoting): The return
1569 value of UniqueValues is unsorted, so it has to be sorted for
1570 comparison.
1571
1572 2004-12-16 Bernhard Herzog <[email protected]>
1573
1574 Fix for RT#2237
1575
1576 * Thuban/UI/projdialog.py (ProjFrame._show_proj_panel): If the
1577 panel to be shown is the UnknownProjPanel disable the OK and Try
1578 buttons. Otherwise enable them.
1579 (ProjFrame.__GetProjection): The UnknownProjPanel returns None for
1580 the parameters. In that case __GetProjection also returns None
1581 now.
1582
1583 2004-12-15 Bernhard Herzog <[email protected]>
1584
1585 * Thuban/UI/classgen.py (GenQuantilesPanel.__init__): Set the
1586 minimum number of classes to 2. The calculate_quantiles needs at
1587 least two and raises an exception otherwise.
1588 Fixes RT#2549
1589
1590 2004-12-15 Bernhard Herzog <[email protected]>
1591
1592 * test/postgissupport.py (PostgreSQLServer.execute_sql): Extend to
1593 so that it returns a result for select statements.
1594 (PostgreSQLServer.server_version): New. Return the version of the
1595 server software.
1596 (PostgreSQLServer.require_authentication): The format of
1597 pg_hba.conf has changed between PostgrSQL 7.2 and 7.3. Check the
1598 server version and generate the file in the correct format
1599
1600 2004-12-15 Bernhard Herzog <[email protected]>
1601
1602 * test/postgissupport.py (PostgreSQLServer.is_running): Fix typo
1603 in the doc string and rephrase it a little.
1604
1605 2004-12-15 Frank Koormann <[email protected]>
1606
1607 * test/test_load.py (TestAltPath.checkSession): New, extended checks if
1608 session has been loaded successfully. The check is called by the relevant
1609 tests after executing load_session().
1610
1611 2004-12-13 Bernhard Herzog <[email protected]>
1612
1613 Make sure the region used to determine which shapes are visible
1614 actually matches the region on the printed page. If this isn't
1615 done properly some shapes might not be printed.
1616 Fixes RT #2692
1617
1618 * Thuban/UI/view.py (MapPrintout.draw_on_dc): The region for the
1619 renderer has to be at the same position as the mapregion
1620
1621 * Thuban/UI/renderer.py (ExportRenderer.RenderMap): self.region
1622 has to be moved by (self.shiftx, self.shifty) too.
1623
1624 2004-12-13 Bernhard Herzog <[email protected]>
1625
1626 * libraries/pyprojection/Projection.i: Work around a bug in the
1627 generated python code which leads to exception in the __del__
1628 method when the constructor fails. See the comments in the code
1629 for more details.
1630
1631 * libraries/pyprojection/Projection.py: Updated from Projection.i
1632 with SWIG.
1633
1634 2004-12-13 Bernhard Herzog <[email protected]>
1635
1636 * test/test_load.py (TestAltPath.test_01_single_path_error_fix)
1637 (TestAltPath.test_02_path_error_fix_from_list)
1638 (TestAltPath.test_05_path_error_fix_from_list_changed)
1639 (TestAltPath.test_06_path_error_fix_from_list_fails): self.session
1640 is destroyed in tearDown, so there's no need to do it in a test
1641 case.
1642
1643 * Thuban/Model/load.py (SessionLoader.open_shapefile): Remove a
1644 debug print
1645
1646 2004-12-13 Bernhard Herzog <[email protected]>
1647
1648 * Extensions/svgexport/test/test_svgmapwriter.py
1649 (TestDrawSplines.setUp): Do not use super with the unittest
1650 classes because in Python 2.2 they're still old-style classes.
1651
1652 2004-12-13 Frank Koormann <[email protected]>
1653
1654 Alternative Path feature: When loading a (moved) session where
1655 shapefiles cannot be found, ask the user. Use the specified path
1656 if further shapefiles are missing. However, ask the usr for confirmation
1657 in such cases.
1658
1659 * test/test_load.py (TestAltPath): New, tests for alternative path feature
1660 in load_session()
1661 (Shapefile_CallBack): Helper, implements controllable callback.
1662
1663 * Thuban/UI/application.py (ThubanApplication.OnInit):
1664 Added "alt_path" to self.path
1665 (ThubanApplication.OpenSession): Added shapefile_callback as second
1666 callback similar to db_connection_callback.
1667 (ThubanApplication.run_alt_path_dialog): New, implementaion of
1668 shapefile_callback. In addition to raising the dialog the control of
1669 self.path('alt_path') is implemented here.
1670
1671 * Thuban/Model/load.py (SessionLoader.__init__): Added shapefile_callback.
1672 (SessionLoader.open_shapefile): Open shapefile, eventually with
1673 alternative path. This wrapps the "theSession.OpenShapefile(filename)"
1674 formerly used in start_fileshapesource()/start_layer().
1675 (SessionLoader.start_fileshapesource): Call open_shapefile().
1676 (SessionLoader.start_layer): Call open_shapefile().
1677 (load_session): Added shapefile_callback.
1678
1679 * Thuban/UI/altpathdialog.py: New, implements dialogs for alternative path
1680 feature (search / check).
1681
1682 * Doc/manual/thuban-manual.xml: Added documentation of new feature.
1683
1684 2004-12-11 Bernhard Reiter <[email protected]>
1685
1686 svgexport 0.9.2: Point size supports for maps.
1687
1688 * Extensions/svgexport/svgmapwriter.py: Added import of SHAPETYPE_POINT
1689 (def draw_point_shape): new parameter size defaults to 2 as before.
1690 (draw_shape_layer_incrementally): Moved draw_func log line higher.
1691 Added draw_func call with size when dealing with a point layer.
1692
1693 * Extensions/svgexport/__init__.py: bumped version to 0.9.2.
1694
1695 2004-12-11 Bernhard Reiter <[email protected]>
1696
1697 Made sure that newlines are inserted in the svg path d attributes
1698 to raise the chance that the line length will be below 255 characters,
1699 as recommended by REC SVG 1.1 in section 8.3.1.
1700
1701 * Extensions/svgexport/svgmapwriter.py(DrawPolygon):
1702 Adding \n before L's and changed whitespace handling.
1703
1704 * Extensions/svgexport/test/test_svgmapwriter.py:
1705 Adapted tests to new whitespace handling of DrawPolygon.
1706
1707 2004-12-11 Bernhard Reiter <[email protected]>
1708
1709 * Doc/technotes/coding_guidelines.txt: easy typo fixed.
1710
1711 * Extensions/svgexport/test/test_svgmapwriter.py:
1712 Removed test_drawbezier in favour of new test_drawspline3 and
1713 test_drawspline4 within new class TestDrawSplines(TestVirtualDC).
1714 All only to test DrawSpline.
1715
1716 * Extensions/svgexport/svgmapwriter.py(DrawSpline):
1717 New implementation now really using the strange algorithm of
1718 xfig 3.1's approximated splines and its conversion to postscript
1719 with one twist: SVG can do quadratic beziers, so skipped translation
1720 to cubic beziers.
1721 (TestWithDC): Typo in comment fixed.
1722
1723 2004-12-09 Martin Schulze <[email protected]>
1724
1725 * Thuban/Model/classgen.py: Added missing character encoding
1726
1727 * Extensions/wms/properties.py (OpenWMSProperties): removed
1728
1729 * Extensions/wms/parser.py (WMSCapabilitiesParser.error): Dropped
1730 support for get_srs_discrepancies() since there are no
1731 discrepancies anymore (was a thinko)
1732
1733 * Extensions/wms/layer.py (WMSLayer.GetMapImg): Improved graphic
1734 format priority now that more formats are supported globally by
1735 the render engine.
1736
1737 2004-12-08 Silke Reimer <[email protected]>
1738 * Extensions/ogr/ogrshapes.py: Substituted ogr-method CloseRings
1739 because it is not available in all versions of ogr
1740
1741 2004-12-08 Bernhard Reiter <[email protected]>
1742 * Extensions/ogr/__init__.py: Added empty __init__.py to heal
1743 global tests until a real one is commited.
1744
1745 2004-12-07 Nina Hüffmeyer <[email protected]>
1746
1747 * /Extensions/ogr/: Adding a new extension to read shapefiles with
1748 ogr. It is planned to add other vector formats.
1749
1750 * /test/runtests.py: Adding tests from /Extensions/ogr/test/.
1751
1752 2004-12-07 Jan-Oliver Wagner <[email protected]>
1753
1754 * /Extensions/svgexport/test/test_svgmapwriter.py: Reverting
1755 part of a (non-)fix to renable that the tests are always
1756 executed.
1757
1758 2004-12-07 Bernhard Reiter <[email protected]>
1759
1760 * Extensions/svgexport/test/test_svgmapwriter.py:
1761 Added test_drawbezier() to test DrawSpline().
1762
1763 * Extensions/svgexport/svgmapwriter.py(DrawSpline):
1764 Really implemented bezier drawing.
1765
1766 * Extensions/svgexport/__init__.py: Bumped version of svgexport
1767 to 0.9.1 because now the legend examples lines styles
1768 will be drawing with beziers.
1769
1770 2004-12-05 Martin Schulze <[email protected]>
1771
1772 * Thuban/UI/renderer.py (raster_format_map): Added PNG, TIFF and
1773 GIF as supported bitmap image formats (helpful for the WMS extension)
1774
1775 2004-11-30 Martin Schulze <[email protected]>
1776
1777 * Extensions/wms/test/test_ogclib.py (TestOGCLib.test_compareURLs):
1778 Improved the test for the internal compare method
1779
1780 2004-11-27 Jan-Oliver Wagner <[email protected]>
1781
1782 * Thuban/UI/about.py (About.__init__): Added
1783 Norbert Solymosi for hungarian translation and Ole Rahn
1784 as contributor. Moved Bernhard Reiter from Contributor
1785 to Developer.
1786
1787 2004-11-27 Bernhard Reiter <[email protected]>
1788
1789 * Extensions/svgexport/test/test_svgmapwriter.py:
1790 Removed Jan from author list as he did not change enough significant
1791 lines yet.
1792
1793 * Extensions/svgexport/__init__.py: Added Bernhard as author
1794 of the Extension.
1795
1796 2004-11-27 Jan-Oliver Wagner <[email protected]>
1797
1798 * po/hu.po: New. Hungarian translation. Contributed
1799 by Norbert Solymosi.
1800
1801 2004-11-26 Bernhard Herzog <[email protected]>
1802
1803 * Extensions/svgexport/test/test_svgmapwriter.py
1804 (Testobjectexport.test_transparent_polygon): Commented out some
1805 debug prints
1806
1807 2004-11-24 Jan-Oliver Wagner <[email protected]>
1808
1809 Fix broken tests for svg extension and added svg legend
1810 to Experimental menu.
1811
1812 * Extensions/svgexport/test/test_svgmapwriter.py: Fix to have
1813 the test run correctly even if the extension is a package.
1814 Also removed the "import Thuban" which makes no sense.
1815
1816 * Extensions/svgexport/__init__.py: Fix to have the extensions'
1817 test module also be executed from the global test routine.
1818 This is done by looking for the absense of the DISPLAY variable.
1819
1820 * Extensions/svgexport/maplegend.py: Moved the menu entry from Extensions
1821 to Experimental menu since this module has yet not reached a stable
1822 status (ie. 1.0).
1823
1824 2004-11-22 Bernhard Reiter <[email protected]>
1825
1826 * Extensions/svgexport/svgmapwriter.py:
1827 Added verbose variable and some logging depending on it.
1828 (class VirtualDC(XMLWriter)): Minor improvement in the polygon loop,
1829 because counting i is not necessary.
1830 (class Pen, class Brush): Added simple __str__ methods.
1831 (SVGRenderer.draw_polygone_shape): Fix #2698 (transparent polygons are
1832 not exported to svg file) Note: holes still unhandled.
1833
1834 * Extensions/svgexport/test/test_svgmapwriter.py:
1835 Made a baseclass TestWithDC for test needed a DC.
1836 Added tests for bug #2698 (transparent polygons are not
1837 exported to svg file):
1838 Testobjectexport.test_transparent_polygon()
1839
1840 * Thuban/Model/base.py (UnsetModified):
1841 Fixed some typos in docstring.
1842
1843 * Thuban/UI/baserenderer.py (BaseRenderer.draw_polygon_shape()):
1844 Added hints on the used algorithm for handling holes.
1845
1846 2004-11-20 Jan-Oliver Wagner <[email protected]>
1847
1848 Some face lifting for the examples.
1849
1850 * Examples/__init__.py: Make this directory a package.
1851
1852 * Examples/simple_extensions/__init__.py: Make this directory a package.
1853
1854 * Examples/simple_extensions/hello_world.py: Moved entry from Extensions
1855 menu to Examples menu.
1856
1857 * Examples/simple_extensions/simple_command.py: Some more comments,
1858 minor changes.
1859
1860 * Examples/simple_extensions/simple_tool.py: Minor changes.
1861
1862 2004-11-20 Jan-Oliver Wagner <[email protected]>
1863
1864 Changed way of extension registry for wms and added extension
1865 registry for umn_mapserver extension.
1866
1867 * Extensions/wms/__init__.py: Added registry entry and the importing
1868 of the actual wms module. Included a test for the required PyOGCLib.
1869
1870 * Extensions/wms/wms.py: Removed registry entry (moved to __init__.py).
1871
1872 * Extensions/umn_mapserver/__init__.py: Added registry entry and the
1873 importing of the actual umn mapserver management modules.
1874 Included a test for the required Python MapScript.
1875
1876 2004-11-20 Jan-Oliver Wagner <[email protected]>
1877
1878 Changed way of extension registry for importAPR, bboxdump
1879 and added extension registry for svgexport.extension registry for
1880 svgexport.
1881
1882 * Extensions/importAPR/__init__.py: Added registry entry and the importing
1883 of the actual importAPR module.
1884
1885 * Extensions/importAPR/importAPR.py: Removed registry entry (moved to
1886 __init__.py).
1887
1888 * Extensions/bboxdump/__init__.py: Added registry entry and the importing
1889 »···of the actual bboxdump module.
1890
1891 * Extensions/bboxdump/bboxdump.py: Removed registry entry (moved to
1892 »···__init__.py).
1893
1894 * Extensions/svgexport/__init__.py: Added registry entry and the importing
1895 of the svgsaver module.
1896
1897 * Extensions/svgexport/svgsaver.py: Moved the menu entry from Extensions
1898 to Experimental menu since this module has yet not reached a stable
1899 status (ie. 1.0).
1900
1901 2004-11-18 Jan-Oliver Wagner <[email protected]>
1902
1903 Now the hit test considers the size of point symbols.
1904
1905 * Thuban/UI/viewport.py (ViewPort._hit_point): Added optional parameter
1906 'size' defaulting to the previously fixed value 5.
1907 Extended doc-string.
1908 (Viewport._find_shape_in_layer): Resolved FIXME regarding flexibility
1909 for symbols.
1910 Now the size of the largest point symbol is determined to find out
1911 about whether the point has been hit.
1912 This fixes the problem that only clicks inside a fixed distance of
1913 5 where found.
1914
1915 2004-11-17 Jan-Oliver Wagner <[email protected]>
1916
1917 Another open issue fixed regarding sizeable symbols: correct rendering of
1918 selected symbols.
1919
1920 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
1921 Added consideration of the specific size of point symbols.
1922 The property for each point symbol is retrieved and the size applied
1923 for the rendering method.
1924 Added doc-string.
1925
1926 2004-11-16 Jan-Oliver Wagner <[email protected]>
1927
1928 Changed way of Extension Registry for gns2shp and profiling.
1929
1930 * Extensions/gns2shp/gns2shp.py: Removed registry entry (moved to
1931 __init__.py).
1932
1933 * Extensions/gns2shp/__init__.py: Added registry entry and the importing
1934 of the actual gns2shp module.
1935
1936 * Extensions/profiling/profiling.py: Removed registry entry (moved to
1937 __init__.py).
1938
1939 * Extensions/profiling/__init__.py: Added registry entry and the importing
1940 of the actual profiling module.
1941
1942 2004-10-28 Bernhard Reiter <[email protected]>
1943
1944 * Extensions/svgexport/: Minor improvements to doc strings.
1945
1946 2004-10-07 Jan-Oliver Wagner <[email protected]>
1947
1948 Further elements for sizable point objects now
1949 making this feature usable though not yet complete.
1950
1951 * Thuban/Model/save.py (SessionSaver.write_classification): Write
1952 attribute 'size' for cldata when the shape layer is of point type.
1953 This also now make the test_load.py tests happy.
1954
1955 * Thuban/Model/classgen.py (CustomRamp.GetProperties): Added size
1956 gradient.
1957
1958 * Thuban/UI/classifier.py (ID_SELPROP_SPINCTRL): Renamed to
1959 ID_SELPROP_SPINCTRL_LINEWIDTH.
1960 (ID_SELPROP_SPINCTRL_LINEWIDTH): New Id replaces ID_SELPROP_SPINCTRL.
1961 (ID_SELPROP_SPINCTRL_SIZE): New Id.
1962 (SelectPropertiesDialog.__init__): Added a second spin control
1963 for the size in case the corresponding layer is of point type.
1964 (SelectPropertiesDialog._OnSpin): Renamed to _OnSpinLineWidth.
1965 (SelectPropertiesDialog._OnSpinLineWidth): New. Former _OnSpin.
1966 (SelectPropertiesDialog._OnSpinSize): New. Set size of property
1967 and refresh preview.
1968
1969
1970
1971 2004-10-04 Martin Schulze <[email protected]>
1972
1973 * Extensions/wms/test/test_parser.py
1974 (TestWMSCapabilitiesParser.test_compareLists): Added missing
1975 self-test for compareLists()
1976 (TestWMSCapabilitiesParser.test_compareDicts): Added missing
1977 self-test for compareDicts()
1978 (TestWMSCapabilitiesParser.test_compareLists): Adding more tests
1979 to verify the test routine fails with non-equal arguments
1980 (TestWMSCapabilitiesParser.test_compareDicts): Adding more tests
1981 to verify the test routine fails with non-equal arguments
1982
1983 2004-10-03 Jan-Oliver Wagner <[email protected]>
1984
1985 First elements for sizeable point objects.
1986
1987 * Resources/XML/thuban-1.1.dtd: Added size attribute to cldata.
1988
1989 * Data/iceland_sample_size.thuban: New. Sample for sized point objects.
1990
1991 * test/test_load.py (ClassificationTest.TestLayers): Added SetSize in case
1992 of a corresponding argument is given.
1993 (TestSymbolSize): New. Test the size attribute of cldata.
1994
1995 * Thuban/Model/classification.py: Removed some trailing whitespaces.
1996 (ClassGroupProperties.__init__): Set default size.
1997 (ClassGroupProperties.SetProperties): Set the size.
1998 (ClassGroupProperties.GetSize): New. Return the size.
1999 (ClassGroupProperties.SetSize): New. Set the size.
2000 (ClassGroupProperties__eq__): Compare also size.
2001 (ClassGroupProperties__repr__): Print also size.
2002
2003 * Thuban/Model/load.py (SessionLoader.start_cldata): Also parse
2004 the size attribute.
2005
2006 * Thuban/UI/classifier.py (ClassDataPreviewer.Draw): Added doc-string.
2007 Also, now there is a return value that indicates whether the drawing
2008 size exceeded the given rect extent and if so the new extent.
2009 Finally, point objects are drawn depending on the size. If either
2010 the width or height is exceeded, the new extent is returned.
2011 (ClassRenderer.Draw): Now when calling the previewer drawing function,
2012 evaluate the return value and, if not None, adapt the grid widget size
2013 accordingly and redraw again.
2014
2015 * Thuban/UI/baserenderer.py (BaseRenderer.draw_shape_layer_incrementally):
2016 If the draw function is for points, call it with the size as additional
2017 parameter.
2018 (BaseRenderer.draw_point_shape): Added additional, optional parameter for
2019 the size. Compute the radius using the size.
2020
2021 * Extensions/importAPR/apr.py (APR_BMkSym.GetThubanProp): Now
2022 that Thuban supports size, apply this correctly.
2023
2024 * Extensions/importAPR/importAPR.py: Bumped version to 0.1.1.
2025
2026 2004-10-03 Jan-Oliver Wagner <[email protected]>
2027
2028 * Doc/manual/thuban-manual-de.xml: Started translation of
2029 Map chapter.
2030
2031 2004-10-01 Martin Schulze <[email protected]>
2032
2033 * Extensions/wms/properties.py (wmsProperties.__init__): Extended
2034 argument for general use through properties-dialog selector
2035
2036 * Thuban/UI/classifier.py: Register properties dialog classes for
2037 both provided layer classes/types.
2038
2039 * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): The
2040 map can be retrieved through the parent which is passed to the
2041 constructor anyway and doesn't require an argument of its own,
2042 required for the unification of arguments for general use through
2043 properties-dialog selector.
2044 (MainWindow.OpenOrRaiseDialog): Move the logic for checking
2045 whether a dialog is already opened (and raising it to the users
2046 attention) and creating a new dialog into a function of its own
2047 (MainWindow.OpenLayerProperties): Use the new OpenOrRaiseDialog()
2048 method
2049 (MainWindow.OpenLayerProperties): Utilise the new ClassMapper for
2050 global registration of properties dialog classes (which are indeed
2051 layer-specific).
2052
2053 * Thuban/UI/classifier.py (Classifier.__init__): Unify arguments
2054 for general use through properties-dialog selector, the map can be
2055 retrieved through the parent and doesn't require an argument of
2056 its own.
2057
2058 * Extensions/wms/wms.py: Register the properties dialog class for
2059 the provided WMS layer
2060
2061 2004-09-28 Jan-Oliver Wagner <[email protected]>
2062
2063 New feature: Registry for Extensions.
2064
2065 * Thuban/UI/extensionregistry.py: This module defines a registry for
2066 Extensions.
2067
2068 * Thuban/UI/about.py (About.__init__): Added description
2069 of the registered extensions with all of the information.
2070
2071 * Thuban/Model/extension.py (Extension): Improved doc-string.
2072
2073 * Extensions/gns2shp/gns2shp.py, Extensions/importAPR/importAPR.py,
2074 Extensions/bboxdump/bboxdump.py, Extensions/profiling/profiling.py,
2075 Extensions/wms/wms.py: Added registration of the extension.
2076
2077 2004-09-27 Bernhard Reiter <[email protected]>
2078
2079 More fixes to svgexport to make used ids unique and
2080 conforming to XML's Name production.
2081
2082 * Extensions/svgexport/test/test_svgmapwriter.py: Added new tests
2083 test_xml_id_constraints(), test_make_ide_nosetbaseid() and
2084 test_make_id_nonintegersetid(). Switched SetID and SetBaseID.
2085 Added Bernhard R. as author.
2086 * Extensions/svgexport/svgmapwriter.py (make_id): Using "_" as
2087 concatenation char now (makes test_make_ide_nosetbaseid() valid).
2088 Also transform second id part with "%d" and catch the TypeError
2089 to raise SVGMapWriterError (making test_make_id_nonintegersetid() ok).
2090 Corrected typo inBernhard's author line.
2091 (SetBaseID): Return the transformed base id. Transform characters
2092 which are not alnum() or in ".-_" to binascii.b2a_hex(). Added
2093 import binascii. If to be set string starts with "xml" or so, add "t".
2094 (draw_shape_layer_incrementally): use the returned value of SetBaseID
2095 for used_baseids checks.
2096
2097 2004-09-25 Bernhard Herzog <[email protected]>
2098
2099 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
2100 Remove a debug print and some tab characters.
2101
2102 2004-09-25 Bernhard Reiter <[email protected]>
2103
2104 * Extensions/svgexport/svgmapwriter.py: Added Bernhard R. as Author.
2105 (SetBaseID, SetID, make_id): Improved docstring comments to explain
2106 the interaction of the three functions and the XML id contrains.
2107
2108
2109 2004-09-23 Jan-Oliver Wagner <[email protected]>
2110
2111 * Doc/ThubanModel.xmi: New. UML file for Thuban Model
2112 Module.
2113
2114 * Doc/README: Added info on ThubanModel.xmi.
2115
2116 2004-09-23 Jan-Oliver Wagner <[email protected]>
2117
2118 * Doc/README: New. Some info about how to generate technical
2119 documentation from the source code.
2120 This text was send to the Thuban developer mailing list on
2121 September 21st 2004 by Bernhard Reiter.
2122
2123 2004-09-21 Bernhard Reiter <[email protected]>
2124
2125 Improved the svgexport to only use unique ids. Will issues
2126 an error message dialoge when two layer names are the same.
2127 ShapeIDs are now added with a dash within the svg ids.
2128
2129 * Extensions/svgexport/svgmapwriter.py (SVGMapWriterError): New.
2130 * Extensions/svgexport/test/test_svgmapwriter.py: Added imports
2131 (TestSVGRenderer): New test class with test_make_in() and
2132 test_check_for_layer_name_clash()
2133 * Extensions/svgexport/svgmapwriter.py (SVGRenderer): Fixed __init__()
2134 and draw_shape_layer_incrementally() to not use a baseid twice,
2135 satisfying test_check_for_layer_name_clash()
2136 (VirtualDC.make_id): Use a dash between baseit and id, satisfies
2137 test_make_in().
2138 * Extensions/svexport/svgsaver.py: Import SVGMapWriterError, wxOK
2139 and wxICON_HAND.
2140 (write_to_svg): Put dc and rendering in a try statement and on
2141 catching SVGmapWriterError notify the user and delete the target file.
2142
2143 2004-09-20 Bernhard Reiter <[email protected]>
2144
2145 * Model/base.by, Model/layer.py: Fixed typos in docstrings.
2146
2147 2004-09-03 Jan Schüngel <[email protected]>
2148
2149 * Extensions/umn_mapserver/mapfile(MF_Class.add_thubanstyle): Fix a
2150 small bug with the line color. Now the line color will now only set
2151 if it is set in Thuban an not Transparent.
2152
2153 * Extensions/umn_mapserver/mf_export(tblayer_to_map): Fixed a bug with
2154 deleting the layers from mapfile. Now all layers will delete backwards
2155 from the last.
2156
2157 2004-08-20 Silke Reimer <[email protected]>
2158
2159 * Thuban/Model/layer.py:
2160 Fixes bug in projection handling: Otherwise very large region might not
2161 have valid values in the layer's projection.
2162
2163 2004-08-20 Silke Reimer <[email protected]>
2164
2165 * Thuban/UI/about.py:
2166 small changes to be consistent with coding style.
2167
2168 2004-08-13 Martin Schulze <[email protected]>
2169
2170 * Extensions/wms/test/test_ogclib.py (TestOGCLib.compare_URLs):
2171 Adjusted a comment
2172
2173 2004-08-11 Silke Reimer <[email protected]>
2174
2175 * Thuban/UI/about.py: Small changes to encoding related stuff to avoid
2176 too many and too enhanced imports of locale
2177
2178 2004-08-10 Silke Reimer <[email protected]>
2179
2180 * Thuban/UI/about.py: Fixed encoding problem of about dialog: Added
2181 function unicodeToLocale() to convert special characters to users
2182 locale encoding
2183
2184 2004-08-10 Jan-Oliver Wagner <[email protected]>
2185
2186 * Doc/technotes/coding_guidelines.txt: Added rule 'Method names start with
2187 lower case letter'
2188
2189 2004-08-09 Jan Schüngel <[email protected]>
2190
2191 * ChangeLog: Rewrite the last ChangeLog entry to follow
2192 the standard way.
2193
2194 * Extensions/umn_mapserver/mapfile: Moved the import AnnotationLayer to
2195 the function where it is needed, because it don't works if it stands
2196 at the beginning.
2197 (MF_Layer.__init__): Removed the extra numclassed variable. Now
2198 numclasses from the mapscript will be used.
2199 (MF_Layer.get_index): New. Return the index of the layer in mapfile.
2200 (MF_Layer.set_classes): New. A Classlist will be set to the layer.
2201 (MF_Layer.set_metadata): New. A Metadata mapscript object will set.
2202 (MF_Layer.remove_allclasses): New. All class of the layer will remove.
2203 (MF_Map.create_new_layer): New. A new Layer is created and associated
2204 with the mapscript object.
2205 (MF_Map.set_layerorder): New. The Layer order like in thuban is set in
2206 the mapscript.
2207 (MF_Map.add_thubanlayer): Now a new layerobj is created if no one is
2208 linked to the layer in thuban, else the layerobject linked to the
2209 thubanlayer will be used.
2210 AnnotationLayer will now store the filename of the shapefile.
2211 (MF_Map.remove_layer): If a layer is removed the associated object
2212 must be set new.
2213
2214 * Extensions/umn_mapserver/mf_export.py(tb_layer_to_map): Add all
2215 layers which are exists in thuban to the mapobj. All removed Layers
2216 will be removed from the mapobj.
2217 Added comments to all functions.
2218 (thuban_to_map): No layer will be removed here.
2219
2220 * Extensions/umn_mapserver/mf_handle.py
2221 (_has_umn_mapobj_and_selectedlayer): Activating the layer menu. Now
2222 Layersettings for the mapserver kann be edited.
2223
2224 * Extensions/umn_mapserver/mf_import.py: Now all layers which are
2225 imported, will be linked with the associated MF_Layer.
2226 (import_mapfile): All layers, which are not selected, will be removed.
2227 Disable the "import layer from mapfile" menu option.
2228
2229 * Extensions/umn_mapserver/sample/iceland.map: Set the status of the
2230 Annotation Layer from DEFAULT to OFF. The DEFAULT setting turns the
2231 layer on permanently.
2232
2233 2004-08-03 Jan Schüngel <[email protected]>
2234
2235 * Extensions/umn_mapserver/mapfile.py(MF_Metadata.remove_allmetadata):
2236 New. This function removes all metadata
2237 (MF_Layer.set_group): New. Set the group setting.
2238 (MF_Layer.get_group): New. Get the group setting.
2239 (MF_Map): Removed the extra numlayers variable, used the mapscript
2240 parameter instead.
2241 (MF_Map.get_numlayers): New. This get numlayers.
2242 (MF_Map.remove_all_layers): New. Removes all layers from the mapobj.
2243 (MF_Map.add_thubanlayer): Replaced the exception handling by a check
2244 if the object is an instance. Also added the annotation layer here to
2245 export, but only the layer is created in the mapfile.
2246
2247 * Extensions/umn_mapserver/mf_export.py(export_mapfile): Removed
2248 the check if a mapobj exist, because its not needed anymore. The
2249 export function is only available if a mapobj exist.
2250 Use the new function to remove all layers.
2251
2252 * Extensions/umn_mapserver/mf_handle.py(Layer_Dialog): Added a group
2253 option and the metadata button. The layer dialog is temporary disabled.
2254 (Metadata_CustomDataTable): Added some functions to show the grid
2255 correct.
2256
2257 * Extensions/umn_mapserver/mf_import.py: Moved the code for showing
2258 the number of layer from import_mapfile to this function.
2259 (AnnotationLayer): New. This Class shows the Annotation layer in
2260 thuban. The layer don't do anything. It's only to show the layer
2261 and to save the layer order.
2262 (add_annotationlayer): New. Import an annotation layer to thuban.
2263 (select_layer2import): New. Import only layers to thuban and not
2264 the other settings like projection or scalebar.
2265 (create_new_mapfile): Moved the _has_umn_mapobj function and the
2266 create_new_mapfile functions from mf_handle.py to mf_import.py.
2267
2268 * Extensions/umn_mapserver/sample/iceland.map: Added the group
2269 parameter to the roads and cultural layers. Also added a new
2270 Annotation Layer for the cultural points.
2271
2272 * Extensions/umn_mapserver/sample/iceland.html: Added the select
2273 option for the annotation layer.
2274
2275 * Extensions/umn_mapserver/sample/index.html: Added the start
2276 parameter for the annotation layer.
2277
2278 2004-08-01 Jan-Oliver Wagner <[email protected]>
2279
2280 * Doc/manual/thuban-manual-de.xml (Chapter Session Management):
2281 translation completed.
2282
2283 * Doc/manual/thuban-manual.xml (Chapter Session Management):
2284 Fixed unprecise description for Save Session.
2285
2286 2004-07-31 Jan-Oliver Wagner <[email protected]>
2287
2288 Started translation of Users Manual into german.
2289
2290 * Doc/manual/thuban-manual-de.xml: New. German Users Manual.
2291
2292 * Doc/manual/Makefile: Added build instructions for german
2293 users manual.
2294
2295 * Doc/manual/thuban-manual.xml: Minor corrections in Introduction.
2296
2297 2004-07-28 Jan Schüngel <[email protected]>
2298
2299 * Extensions/umn_mapserver/mapfile.py(MF_Metadata): Changed all class
2300 functions. Now all metadata will handle by the function and its not
2301 needed to initialize it from outside. Therefor the associated mapobj
2302 will be stored in the Metadata Object. So we can use the special
2303 functions from the associated mapobj to get the Metadata.
2304 Therefor all initialization code for the metadata is removed from the
2305 other classes.
2306 (MF_Layer): Added a function to get the metadata object.
2307 (MF_Map): Added a function to set the mappath, the path where
2308 the mapfile ist stored.
2309
2310 * Extensions/umn_mapserver/mf_export.py(thuban_to_map): Changed the code
2311 to set the extent in the mapfile. Now the code is set by the displayed
2312 data in the Thuban-view.
2313 (export_mapfile): The shapepath is now set empty, until relative
2314 pathnames are supported.
2315
2316 * Extension/umn_mapserver/mf_handle.py: Added a dialog to handle
2317 metadata. Yet only mapfile metadata are supported. Layer and class
2318 supported are not implemented.
2319 Added a dialog to handle layer informations. The dialog only shows the
2320 selected layer at the moment.
2321
2322 * Extensions/umn_mapserver/mf_import.py(import_mapfile): Changed the
2323 code for setting the extent in thuban. Now the extent is set to the
2324 given extent from the mapfile.
2325 Fixed a logical mistake. Now the extent is set when realy a layer is
2326 loaded, and not if one is selected to load.
2327
2328 * Extensions/umn_mapserver/sample/iceland.html: Added code to zoom and
2329 move the shown map in the browser.
2330
2331 * Extensions/umn_mapserver/sample/iceland.map: Added a new metadata
2332 line to the mapobj and added metadata to the political layer.
2333
2334 * Extensions/umn_mapserver/test/test_mapserver.py: Changed the test
2335 for Metadata.
2336
2337 2004-07-26 Martin Schulze <[email protected]>
2338
2339 * Thuban/Lib/classmapper.py (ClassMapper.has): Added the new
2340 ClassMapper
2341
2342 * test/test_classmapper.py (TestMapping.test_mapper): Added a Test
2343 case for the new ClassMapper
2344
2345
2346 2004-07-22 Bernhard Herzog <[email protected]>
2347
2348 * Thuban/UI/viewport.py (ViewPort.VisibleExtent): New. Return the
2349 visible extent of the map in projected coordinates
2350
2351 * test/test_viewport.py (SimpleViewPortTest.test_default_size)
2352 (SimpleViewPortTest.test_init_with_size): Add some VisibleExtent()
2353 tests.
2354 (SimpleViewPortTest.test_visible_extent): New. The real test for
2355 VisibleExtent()
2356
2357 2004-07-22 Bernhard Herzog <[email protected]>
2358
2359 * test/test_viewport.py: Use support.run_tests as the main
2360 function when running asa script.
2361
2362 2004-07-22 Jan Schüngel <[email protected]>
2363
2364 * Extensions/umn_mapserver/mf_export.py: Added "import os"
2365 Removed the old "import Thuban.UI.mainwindow" code.
2366 (tbextent_to_map): Removed the extra function and at the code direct
2367 to "thuban_to_map" function.
2368 (write_creatorcomment): Added. Now a short comment is added to the
2369 beginning of an generated mapfile.
2370 (export_mapfile): Now the Path and filename are saved in to variables,
2371 and not together in one variable. This is needed for the new
2372 write_creatorcomment function.
2373
2374 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Added the
2375 import module "re". Also added Range and the ClassGroupRange import
2376 from Thuban. Both are needed for the new range expression import.
2377 (create_rangeexpression): Added. Creates a Range Expression in Thuban
2378 style from a given mapfile expression.
2379 (added_rasterlayer): Make some small code changes. The shapepath is
2380 now stored in an extra variable and the clazz_name is set empty if no
2381 class name set in the mapfile.
2382 Changed the Error message for Range Expressions, becaus the new
2383 function create a error string which will be shown in the dialog.
2384
2385 * Extensions/umn_mapserver/test/test_mapserver.py: Added a test for the
2386 range expression import.
2387
2388 2004-07-21 Jan-Oliver Wagner <[email protected]>
2389
2390 * Extensions/umn_mapserver/README: Added hint that
2391 installation as root can be avoided. Removed all tabs.
2392
2393 2004-07-16 Bernhard Herzog <[email protected]>
2394
2395 * test/test_viewport.py
2396 (ViewPortTest.test_changing_map_projection): Check that changing
2397 the projection of an empty map shown in a viewport doesn't lead to
2398 exceptions in the viewport's handler for the
2399 MAP_PROJECTION_CHANGED messages
2400
2401 * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Only
2402 try to keep the same region visible when the map actually contains
2403 something
2404
2405 2004-07-15 Jan Schüngel <[email protected]>
2406
2407 * Extensions/umn_mapserver/mapfile.py: Added a function to get the
2408 mappath directly from the mapobj. Is needed because of the changes
2409 in mf_import.py.
2410 (MF_Layer.add_thubanclass): Added a new comment.
2411 (MF_Map.set_extent): Fixed a bug with exporting empty mapobj. If the
2412 mapobj is empty there is no extent get from thuban an so no one can
2413 set to th mapobj.
2414
2415 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Updated
2416 the discription.
2417 Split the funktion in to three smaller ones. The new functions are
2418 add_rasterlayer, add_polygonlayer and select_layer2import.
2419 Removed the mapfilepath and filepath initialisation, because its know
2420 include in the new functions.
2421 Now nothing will be imported if cancel is pressed in the
2422 layer choice dialog.
2423
2424 2004-07-14 Jan Schüngel <[email protected]>
2425
2426 * Extensions/umn_mapserver/mapfile.py: Added ClassGroupDefault to
2427 import.
2428 (MF_Symbolset): Removed the extra variable for numsymbols.
2429 (MF_Class.__init__): Added a comment to the exception clause.
2430 Removed the extent init, because it was not needed anymore.
2431 (MF_Layer.add_thubanclass): Added the code to set the class name to
2432 the expression value from thuban if no label is defined.
2433 Added the code to export Range expressions from thuban to the mapfile.
2434 (MF_Map.set_extent): Removed the exception and replace it by some if
2435 code. If the size of a map is not defined the size will be set to 1,1.
2436 This is necessary because if the extent is set, mapscript checks if
2437 the size is greater than zero.
2438 (MF_Web): Added the get and set function for the template.
2439
2440 * Extensions/umn_mapserver/mf_export.py: Added the function to check
2441 if a mapobject exists and used it to set the status of the menu items.
2442 If no mapfile exists the settings could not be edditied.
2443 Define after which menuitem the exportitem will include.
2444
2445 * Extensions/umn_mapserver/mf_handle.py: Removed the import
2446 Thuban.UI.mainwindow clause, because it is not needed.
2447 Added the command Refresh() to all "OnChangeColor()" functions,
2448 because the color preview window was not updated on a color change.
2449 Added the function to check if a mapobject exists and used it to set the
2450 status of the menu items. If no mapobject exists the settings could not
2451 be edditied.
2452 (Map_Dialog): Moved the imagetype selector from the
2453 Outputformat_Dialog to Map_Dialog and removed Outputformat_Dialog.
2454 (Web_Dialog): Removed the name label and added the template textbox.
2455
2456 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Replace
2457 the exception handling on loading the layers by an if statement. It
2458 is not necessary to us the exception there.
2459 The Filepath creation now use os.path.join to build the path.
2460
2461 * Extensions/umn_mapserver/test/test_mapserver.py: Moved the testMap
2462 definition from global to the setUp function. Now the testMap will
2463 initialize new on each test.
2464
2465 * Extensions/umn_mapserver/sample/iceland.map: Include three new
2466 classes in the Line Layer, to test logical Expressions.
2467 Set the status of the class "Point9" in the Point Layer to off
2468
2469 2004-07-13 Bernhard Herzog <[email protected]>
2470
2471 * Thuban/UI/baserenderer.py
2472 (BaseRenderer.render_map_incrementally): Fix a logic bug in the
2473 optimization that tries not to draw layers under a raster layer.
2474 The bug was harmless. All it effectively did was to produce The a
2475 strange messages about not being able to draw Layer instances for
2476 all vector layers below a raster layer which would be invisible
2477 anyway because the raster layer currently always covers the entire
2478 window
2479
2480 2004-07-08 Jan Schüngel <[email protected]>
2481
2482 * Extensions/umn_mapserver/mapfile.py: Added code to generade and get
2483 a list of supported outputformats. This formats are not alle supported
2484 because there is no possibility to get the outputformat without the
2485 name known. Make some formal changes to the code.
2486 (MF_Map.set_name()): Fixed a bug if the name is None.
2487
2488 * Extensions/umn_mapserver/mf_handle.py: Removed the image_type import
2489 statement, because its not needed anymore. The Outputformat is now
2490 given as string from the object. Make some formal changes to the code.
2491
2492 * Extensions/umn_mapserver/test/test_mapserver.py: Added new test for
2493 most of the new setting which were added during the last changes.
2494 Removed the MF_Size Test.
2495
2496 * Extensions/umn_mapserver/test/test.map: Added a new class to the
2497 cultural Layer to test expressions and the the status of that layer
2498 from on to default.
2499 Changed the data path the the correct Thuban Data
2500 Added the Outputformat Object and Symbol Object
2501
2502 2004-07-07 Jan Schüngel <[email protected]>
2503
2504 * Extensions/umn_mapserver/mapfile.py: Added some new
2505 settings to edit (outputformat, label, imagetype)
2506
2507 * Extensions/umn_mapserver/mf_handle.py: Added some setting to
2508 the Label Dialog and add the OutputDialog.
2509 Make some changes to the code order.
2510
2511 2004-07-06 Jan Schüngel <[email protected]>
2512
2513 * Extensions/umn_mapserver/mapfile.py: Added the symbolObj, pointObj
2514 and line Obj and add the scalebar_status_type, scalebar_style_type and
2515 scalebar_position_type.
2516 Added the symbol- and symbolsetObject (MF_Symbol,MF_Symbolset). The
2517 are only used to create a Symbol like the circle in Thuban.
2518 Added the scalebarObject (MF_Scalebar)
2519 (MF_Class): Added set_status and get_status.
2520 (MF_Layer.add_thubanclass): Added code to set the class status
2521 (MF_Map): Added code to handle the symbols and scalebar
2522 (MF_Label): Added the set_partials and get_partials functions
2523
2524 * Extensions/umn_mapserver/mf_export.py: Added MF_Symbol to import
2525 from mapfile. Added a function to create a circle object like the one
2526 from thuban if no one exists.
2527
2528 * Extensions/umn_mapserver/mf_handle.py: All colors are now set when
2529 press ok in the assosiated dialog and not at the end of the
2530 colordialog.
2531 Added the Dialog for the Scalebar.
2532 (Label_Dialog): Added the offset option
2533
2534 * Extensions/umn_mapserver/mf_import.py: Added code to import the
2535 status of the Classes.
2536 Fixed a bug with the projection. Now the to_meter parameter will be
2537 added to the Projection only if it doesn't exists.
2538
2539 2004-07-01 Jan Schüngel <[email protected]>
2540
2541 Added the functionality to handle the content thuban is not
2542 able to handle directly.
2543
2544 * Extensions/umn_mapserver/mf_handle.py: New. This module extents
2545 Thuban with the possibility to edit the mapfile content.
2546
2547 * Extensions/umn_mapserver/mf_import.py: Added the possibility
2548 to import mapfiles without any layer selected. So it is possible
2549 to edit the other settings in a mapfile.
2550 (import_mapfile): Added code to use the editing functions.
2551 Added the possibility to import the projection to a layer if one
2552 is defined.
2553 Status settings (On,Off) will now set in thuban (visible, invisible).
2554 fixed a bug with with classnames. If no classname is set in mapfile
2555 the value in Thuban will set to the expression.
2556
2557 * Extensions/umn_mapserver/mf_export.py(export_mapfile): Added the
2558 possibility to save a new mapfile or use the old one which is
2559 imported or new created.
2560 Added code to use the editing functions.
2561 Remove some not needed import statements
2562
2563 * Extensions/umn_mapserver/mapfile.py: Added new types which are
2564 need for the editing functions.
2565 Added needed set-functions for the editing functions.
2566 Added the possibility to export rasterimages.
2567 Added new classes (MF_Web, MF_Label, MF_Legend, MF_Symbol,
2568 MF_SymbolSet). MF_Symbol and MF_SymbolSet are not needed at the
2569 moment.
2570 (MF_Class.set_thubanstyle): Now point layers will set to a default
2571 symbol to show a circle in mapserver and not only a 1px dot.
2572 (MF_Style.__init__): Fixed a bug with the color. Color was not set
2573 correct before.
2574 (MF_Size): Removed, because it is not needed.
2575
2576 * Extensions/umn_mapserver/README: Added the hints to use the
2577 export and editing functions, too.
2578
2579 * Extensions/umn_mapserver/sample/iceland.map: Added the
2580 new parameter "UNITS METERS".
2581 Change the political layer to status OFF.
2582
2583 * Extensions/umn_mapserver/sample/README: Added some
2584 more details to setup the sample in the MapServer.
2585
2586 2004-06-26 Bernhard Reiter <[email protected]>
2587
2588 * Extensions/svgexport/test/test_svgmapwriter.py:
2589 Removed class VFile and used standard StringIO instead.
2590
2591 2004-06-23 Jan Schüngel <[email protected]>
2592
2593 Add the export function to the umn_mapserver extension.
2594
2595 * Extension/umn_mapserver/mf_export.py: New. This module extents
2596 Thuban with the possibility to export the Thuban content.
2597
2598 * Extensions/umn_mapserver/mapfile.py: Expand the classes to use
2599 with the export module. Especially added the possibility to
2600 add thuban objects directly to the map objects.
2601
2602 * Extensions/umn_mapserver/mf_import.py: Removed the wxCHANGE_DIR,
2603 because of the hint from Bernhard Herzog.
2604 Corrected the handling of absolute pathnames.
2605 Changed the Text of the Menu-Item, now the beginning is upper case.
2606
2607 * Extensions/umn_mapserver/README: Added the --with-tiff statement.
2608
2609 2004-06-16 Jan Schüngel <[email protected]>
2610
2611 Add a sample and make some changes.
2612
2613 * Extension/umn_mapserver/mf_import.py: Changed the wxPython.wx
2614 import from * to explicit used statements. Changed the
2615 Thuban.UI.mainwindow import phrase, too.
2616 (import_mapfile):Corrected a clerical mistake.
2617 Added wxCHANGE_DIR in OpenFile Dialog.
2618 Added a MultipleChoiceDialog, to select the layers to load from
2619 mapfile into thuban. Thereby the projection is only set if one layer
2620 is selected.
2621 Added the possibility to handle relative pathnames which uses
2622 up-level references.
2623 Removed some doubled code.
2624 Corrected an error with integer values used as label in thuban
2625 ClassGroup.
2626
2627 * Extensions/umn_mapserver/sample: New.
2628
2629 * Extensions/umn_mapserver/sample/README: New. Describes the
2630 usage of the sample files.
2631
2632 * Extensions/umn_mapserver/sample/iceland.map: New. This is
2633 a suitable .map-file for the iceland data.
2634
2635 * Extensions/umn_mapserver/sample/index.html: New. The template
2636 for the mapfile.
2637
2638 * Extensions/umn_mapserver/sample/iceland.html: New. Initialisation
2639 file for the Iceland Application on web.
2640
2641 * Extensions/umn_mapserver/README: Corrected a inaccuracy and added
2642 some details.
2643
2644 * Extensions/umn_mapserver/test/test_mapserver
2645 (mapserver_import_Test_generalClasses.test_MF_Color):
2646 Corrected the thubancolor test.
2647
2648 2004-06-15 Jan Schüngel <[email protected]>
2649
2650 * Extensions/umn_mapserver/README: New. Install instruction.
2651
2652 2004-06-14 Bernhard Reiter <[email protected]>
2653
2654 * libraries/thuban/cpl_mfile.h: Added copyright header.
2655
2656 * libraries/thuban/ cpl_mfile.cpp, cpl_mfile.h: Added non-protecting
2657 Free Software License so that it is most useful with gdalwarp
2658 and bmpdataset.
2659
2660 2004-06-14 Bernhard Herzog <[email protected]>
2661
2662 * Thuban/UI/multiplechoicedialog.py (__version__): Add missing
2663 import of wxPython.wx itself (as opposed to the contents of
2664 wxPython.wx). For some reason wxPython.wx is available as
2665 wxPython.wx.wx in at least some 2.4 releases. Fixes RT#2482
2666 wrt. wxPython 2.4.
2667
2668 2004-06-10 Jan Schüngel <[email protected]>
2669
2670 Initial version of new extension "umn_mapserver". This extension aims
2671 to manage configuration for the UMN MapServer application. This
2672 inital version just imports the .map-files and displays all, Thuban is
2673 capable of.
2674
2675 * Extensions/umn_mapserver, Extensions/umn_mapserver/test: New.
2676
2677 * Extensions/umn_mapserver/test/README: New. Describes how to run the
2678 tests.
2679
2680 * Extensions/umn_mapserver/test/test.map: New. This is a test
2681 .map-file for automated tests of the umn_mapserver extension of
2682 Thuban.
2683
2684 * Extensions/umn_mapserver/test/test_mapserver.py: New. Tests for
2685 UMN Mapserver classes.
2686
2687 * Extensions/umn_mapserver/__init__.py: New. Init to make this
2688 directory a package.
2689
2690 * Extensions/umn_mapserver/mapfile.py: New. Classes to represent
2691 '.map'-file objects.
2692
2693 * Extensions/umn_mapserver/mf_import.py: New. This module extends
2694 Thuban with the possibility to handle UMN MapServer mapfiles.
2695
2696 2004-06-03 Bernhard Herzog <[email protected]>
2697
2698 * Thuban/Model/layer.py (Layer.TreeInfo): Convert the bounding box
2699 to a tuple before using it as arguments to the % operator. This
2700 fixes the formatting issue filed in RT#2239 on 2004-01-13 and
2701 reported today on thuban-list by Jan Schüngel
2702
2703 * test/test_layer.py (TestLayerModification.setUp): Save the
2704 filename as an instance variable so we can refer to it in tests
2705 (TestLayerModification.test_tree_info): Uncomment this method
2706 again and make it work. This tests for the formatting issue
2707 filed in RT#2239 on 2004-01-13
2708
2709 2004-05-28 Bernhard Herzog <[email protected]>
2710
2711 * Thuban/UI/baserenderer.py: Fix some typos.
2712
2713 2004-05-18 Jan-Oliver Wagner <[email protected]>
2714
2715 * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed a bug
2716 by increasing a field size.
2717
2718 2004-05-17 Bernhard Herzog <[email protected]>
2719
2720 Update to newest shapelib and get rid of Thuban specific
2721 extensions, i.e. use the new DBFUpdateHeader instead of our
2722 DBFCommit kludge
2723
2724 * libraries/shapelib/shpopen.c: Update to version from current
2725 shapelib CVS.
2726
2727 * libraries/shapelib/shapefil.h: Update to version from current
2728 shapelib CVS.
2729
2730 * libraries/shapelib/dbfopen.c: Update to version from current
2731 shapelib CVS.
2732 (DBFCommit): Effectively removed since shapelib itself has
2733 DBFUpdateHeader now which is better for what DBFCommit wanted to
2734 achieve.
2735 We're now using an unmodified version of dbfopen.
2736
2737 * setup.py (extensions): Add the HAVE_UPDATE_HEADER macro with
2738 value '1' to the Lib.dbflibc extension. This simply reflects the
2739 shapelib and pyshapelib updates
2740
2741 2004-05-16 Jan-Oliver Wagner <[email protected]>
2742
2743 Finished introduction of Menu.FindOrInsertMenu.
2744
2745 * Extensions/drawshape/drawshape.py: Add the command
2746 to the experimental menu additionally to the toolbar.
2747
2748 * Extensions/svgexport/svgsaver.py: Use FindOrInsertMenu() instead of
2749 finding menu on its own.
2750
2751 * Doc/manual/thuban-manual.xml: updated sample file
2752 to use FindOrInsertMenu().
2753
2754 * Examples/simple_extensions/hello_world.py: Use FindOrInsertMenu()
2755 instead of finding menu on its own.
2756
2757 2004-05-11 Jan-Oliver Wagner <[email protected]>
2758
2759 * test/test_menu.py (MenuTest.test): Added testing
2760 of method Menu.FindOrInsertMenu.
2761
2762 2004-05-10 Jan-Oliver Wagner <[email protected]>
2763
2764 Introduce and use Menu.FindOrInsertMenu.
2765
2766 * Thuban/UI/menu.py (Menu.FindOrInsertMenu): New. Find a
2767 given menu or, if not found, insert it.
2768
2769 * Extensions/bboxdump/bboxdump.py, /Extensions/gns2shp/gns2shp.py,
2770 /Extensions/importAPR/importAPR.py, Extensions/profiling/profiling.py,
2771 /Extensions/wms/wms.py: Use FindOrInsertMenu() instead of finding
2772 menu on its own.
2773
2774 2004-05-06 Jan-Oliver Wagner <[email protected]>
2775
2776 Introduce a abstract ColorDialog class and remove
2777 and outdated file.
2778
2779 * Thuban/UI/proj4dialog.py: Removed. It is has been
2780 replaced by projdialog for quite a while and is not used
2781 anymore.
2782
2783 * Thuban/UI/colordialog.py: New. Abstraction for color selection
2784 dialog(s).
2785
2786 * Thuban/UI/classifier.py (SelectPropertiesDialog.__GetColor):
2787 Now calls the abstract ColorDialog instead of wxColourDialog.
2788 This also removed the dependency to Color class conversion
2789 from this function.
2790
2791 2004-05-04 Frank Koormann <[email protected]>
2792
2793 * Extensions/bboxdump/__init__.py: Fixed string left over from
2794 copying.
2795
2796 * Extensions/bboxdump/bboxdump.py (bboxdump):
2797 Use layer.ShapeStore().AllShapes() to loop over shapes instead of
2798 xrange(layer.NumShapes()). Compile the bboxmessage from a list
2799 of formatted outputs (string.join) instead of appending to the
2800 message. Two progress bar dialogs to report progress on the sometimes
2801 lenghty processing.
2802
2803 2004-04-22 Frank Koormann <[email protected]>
2804
2805 New Extension to dump bounding boxes of all shapes of the selected
2806 layer. An optional column can be specified to group the objects,
2807 in this case the bounding box is a union of the separate boxes.
2808 Dump can be displayed in a ScrolledMessageDialog or written to file.
2809 The Extension is simply a combination of available and well tested
2810 Thuban functionality.
2811
2812 * Extensions/bboxdump/__init__.py: New: Init to make this
2813 directory a package.
2814
2815 * Extensions/bboxdump/bboxdump.py: New: Dump bounding boxes of
2816 all shapes of the selected layer.
2817
2818 2004-04-22 Jan-Oliver Wagner <[email protected]>
2819
2820 * Thuban/UI/classgen.py (GenUniquePanel.__init__): Fixed two
2821 strings to be i18n now.
2822
2823 2004-04-18 Jan-Oliver Wagner <[email protected]>
2824
2825 Changing popup menu of legend from direct building
2826 to using the Menu construction as used for the mainwindow.
2827
2828 * Thuban/UI/mainwindow.py: New method commands: layer_to_top,
2829 layer_to_bottom, layer_visibility
2830 (MainWindow.LayerToTop): New. Put current layer to the top.
2831 (MainWindow.LayerToBottom): New. Put current layer to bottom.
2832 (MainWindow.HideLayer, MainWindow.ShowLayer, _has_visible_map):
2833 Replace 1,0 by True, False.
2834 (MainWindow.ToggleLayerVisibility): New. Toggle visibility of
2835 current layer.
2836 (MainWindow.LayerShowTable): Removed raising of dialog.
2837 (_has_selected_layer_visible): New. Support function.
2838
2839 * Thuban/UI/legend.py: ID_POP_xxx: removed.
2840 (LegendPanel.__init__): Removed EVT_MENU bindings.
2841 (LegendTree._OnRightClick): Replace direct creation of
2842 menu via wx Classes by applying the menu definition
2843 as of Menu class of menu.py.
2844
2845 2004-04-16 Jan-Oliver Wagner <[email protected]>
2846
2847 * Thuban/UI/exceptiondialog.py (ExceptionDialog.dialog_layout): Improved
2848 button string to stronger clearify that Thuban will be closed when hitting
2849 the button.
2850
2851 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Added docstring.
2852 Now for layers without a ShapeStore a corresponding message is given
2853 to the user, that this layer has no table to show.
2854
2855 2004-04-15 Martin Schulze <[email protected]>
2856
2857 * Extensions/wms/layer.py (WMSLayer.setWMSFormat): Need to
2858 recalculate the format for the internal render engine as well.
2859
2860 * Extensions/wms/properties.py (wmsProperties): First start for a
2861 properties dialog. It's functional for a first selection of
2862 layers, but still has some weired wxWidgets/GTK problems but
2863 beautification can be done later.
2864
2865 * Extensions/wms/layer.py: Added more documentation
2866 (WMSLayer.getFormats): New: Return list of supported image formats
2867 by the WMS server
2868 (WMSLayer.getLayers): New: Return the list of layer names
2869 supported by the WMS server
2870 (WMSLayer.getLayerTitle): New: Return the title of the named layer
2871 (WMSLayer.getWMSFormat): New: Return the image format that is used
2872 for WMS GetMap requests
2873 (WMSLayer.setWMSFormat): New: Set the image format that is used
2874 for WMS GetMap requests
2875 (WMSLayer.__init__): Move away from using only one layer to using
2876 a list of layers (unsorted at the moment, though).
2877 (WMSLayer.getVisibleLayers): New: Return the list of names for all
2878 visible layers
2879 (WMSLayer.setVisibleLayers): New: Set the list of names for all
2880 visible layers
2881
2882 * Extensions/wms/wms.py: Moved the WMS layer into layer.py in
2883 order to establish a clean structure.
2884
2885 * Extensions/wms/layer.py: Moved the WMS layer into a file on its
2886 own in order to establish a clean structure.
2887
2888 2004-04-13 Martin Schulze <[email protected]>
2889
2890 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Added
2891 support for oldstyle (WMS 1.0 apparently) image format
2892 specification.
2893
2894 * Extensions/wms/wms.py (WMSLayer.calcFormat): Reduce the list of
2895 supported graphic formats back to JPEG and BMP, PNG and others are
2896 too *cough* experimental... Sorry, I meant to filter this out
2897 before I committed this part. This should make the WMS extension
2898 run from CVS again.
2899 (wms_dialog): Reset an empty URL to None so that the subsequent
2900 program can depend on this, since the dialog will indeed return an
2901 empty URL, causing another declaration of love by Python.
2902
2903 * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerBBox):
2904 Whenever a native BoundingBox request cannot be fulfilled, check
2905 whether the requested SRS is EPSG:3426, in which case return the
2906 LatLonBoundingBox values.
2907
2908 * Extensions/wms/test/test_parser.py
2909 (TestWMSCapabilitiesParser.test_LayerSRS): Added a test for
2910 ignoring AUTO:* SRS.
2911 (TestWMSCapabilitiesParser.test_LatLonBoundingBoxes_as_bboxes):
2912 Added another test method to test whether the LatLonBoundingBox
2913 values will be returned if BoundingBox values are requested with
2914 SRS set to EPSG:3426.
2915
2916 * Extensions/wms/parser.py (WMSCapabilitiesParser.peekLayers):
2917 Added rudimentary support for non-EPSG SRS, i.e. ignore them for
2918 the moment by placing them into a variable which is currently
2919 unused. Also test whether the EPSG SRS is numerical as it should
2920 be and add an error message if it is not.
2921
2922 * Extensions/wms/test/sample.xml: Added AUTO:* SRS since they
2923 appear in the real world as well. Since we cannot handle them yet
2924 (OGCLib can't either), we will ignore them for the moment.
2925
2926 * Extensions/wms/parser.py: Use a variable for denoting the sample
2927 filename
2928 (WMSCapabilitiesParser.peekLayers): Added support for error
2929 messages during grok(). They will be aggregated in an array and
2930 may be displayed later. We may have to add a classification
2931 "Warning" and "Error" to this. That requires more experience,
2932 though, since not every error may be lethal.
2933
2934 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Raise the
2935 ShowTable() dialog/frame when the user attempts to display it
2936 while it has been opened before already and not closed again.
2937
2938 2004-04-11 Martin Schulze <[email protected]>
2939
2940 * Extensions/wms/infodialog.py: Adjusted the class documentation
2941
2942 * Extensions/wms/wms.py (WMSLayer.__init__, WMSLayer.GetMapImg):
2943 Switch to using Thuban{Begin,End}BusyCursor instead of the pure
2944 wxWidgets variants.
2945 (WMSLayer.__init__): The epsg_id variable is named top_srs now.
2946
2947 * Extensions/wms/infodialog.py: Added an information dialog that
2948 will display various information about the WMS current resource,
2949 so that additional information such as the title, the abstract,
2950 fees and access constraints can be displayed for the user if they
2951 are documented in the WMS XML.
2952
2953 2004-04-10 Martin Schulze <[email protected]>
2954
2955 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Adjusted
2956 string handling. It's "foo".lower() and not lower(foo) without
2957 lower imported from strings or something.
2958
2959 * Extensions/wms/wms.py (WMSLayer): Incorporated WMSCapabilities
2960 from capabilities.py and parser.py. Implement priority list for
2961 supported graphics formats, take care of wbmp != bmp. PNG, TIFF
2962 and GIF are supported here, but not yet by main Thuban. Hence,
2963 support for them may be removed later. Special contribution to
2964 usability: get wxWidgets to change the cursor when we're waiting
2965 for data from the network so the user won't start to worry. This
2966 causes a redrawing error/warning, though.
2967
2968 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Unlink
2969 the DOM object.
2970
2971 2004-04-01 Martin Schulze <[email protected]>
2972
2973 * Extensions/wms/capabilities.py: Adjusted documentation
2974 (WMSCapabilities.__init__): Improved documentation, fixed syntax
2975 (WMSCapabilities.saveCapabilities): Only catch IOError when
2976 handling files
2977 (WMSCapabilities.loadCapabilities): Only catch IOError when
2978 handling files
2979 __main__: corrected variable naming
2980 (WMSCapabilities.fetchCapabilities,loadCapabilities): Make this
2981 class a specialisation of WMSCapabilitiesParser as well. Also
2982 execute grok() after loading or fetching capabilities, if that
2983 went well, so that subsequent calls can already access the data.
2984 (WMSCapabilities.getVersion): Export the used version of the
2985 GetCapabilities request, so we can use it for subsequent calls,
2986 i.e. for GetMap requests.
2987 (WMSCapabilities.fetchCapabilities): Added proper error handling
2988 when the GetCapabilities request failed, so that the surrounding
2989 program can act accordingly.
2990
2991 2004-03-30 Martin Schulze <[email protected]>
2992
2993 * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerSRS):
2994 Adjusted the getLayerSRS method to return the list of SRSes
2995 extracted from <SRS> elements instead of <BoundingBox> elements.
2996 Added a bit of documentation as well.
2997 (WMSCapabilitiesParser.checkLayerSRS): Removed integrity test
2998 since it was only implemented due to a misunderstanding.
2999
3000 * Extensions/wms/test/test_parser.py
3001 (TestWMSCapabilitiesParser.test_LayerSRS): Adjust the tests to
3002 reflect the corrected interpretation of the standard: i.e. a layer
3003 does not have to define a BoundingBox for all SRSes it supports.
3004 Hence the <SRS></SRS> specification is authoritative, not the list
3005 of BoundingBoxes.
3006 (TestWMSCapabilitiesParser.test_BoundingBoxes): Added a new test
3007 to ensure None is returned for a non-existing SRS.
3008 (TestWMSCapabilitiesParser.test_grok): Removed test_grok method
3009 since it is not applicable anymore. Listing more SRSes in <SRS>
3010 elements is valid according to the specs.
3011
3012 2004-03-26 Bernhard Reiter <[email protected]>
3013
3014 * README: Nicer formatting of text. Improved descriptions.
3015 Reflected wxWidgets name change.
3016
3017 * Thuban/UI/about.py: Extended copyright to 2004 and added
3018 information about the thuban-devel mailinglist.
3019
3020 2004-03-24 Martin Schulze <[email protected]>
3021
3022 * Extensions/wms/capabilities.py: Renamed the class to contain
3023 'WMS', also added a linebreak where required
3024
3025 * Extensions/wms/parser.py: Finally added the XML parser for the
3026 GetCapabilities response.
3027
3028 * Extensions/wms/test/sample.xml: Adjusted the sample file so that
3029 <SRS> elements match the <BoundingBox> elements, except for the
3030 layer 'beschriftung'.
3031
3032 * Extensions/wms/test/test_parser.py: Encode non-ascii strings
3033 since Python uses unicode strings internally, otherwise
3034 comparisons will fail. Removed tests for getLayerBBoxSRS() since
3035 the SRS will be calculated anyway and this method is obsoleted by
3036 getLayerSRS(). Denote SRS as strings and not as cardinal numbers.
3037 Move loading the sample file into the setUp method. Added a test
3038 for finding the integrity problem in the sample response.
3039 Improved formatting.
3040
3041 * Extensions/wms/domutils.py: Added convenience routines for
3042 handling of Document Object Model (DOM) nodes.
3043
3044 * Extensions/wms/test/test_domutils.py: Added a test for the
3045 domutils module
3046
3047 2004-03-19 Martin Schulze <[email protected]>
3048
3049 * Extensions/wms/test/test_parser.py (TestWMSCapabilitiesParser):
3050 Moved path detection and adding into a module of its own,
3051 adjustpath, which exports thubandir as main Thuban directory.
3052
3053 * Extensions/wms/test/test_ogclib.py (TestWMSLib): Moved path
3054 detection and adding into a module of its own, adjustpath, which
3055 exports thubandir as main Thuban directory. Reorganised the
3056 module in order to support the SkipTest feature for Thuban test
3057 cases.
3058
3059 * Extensions/wms/test/adjustpath.py: Moved path detection and
3060 adding into a module of its own.
3061
3062 2004-03-18 Martin Schulze <[email protected]>
3063
3064 * Extensions/wms/test/test_parser.py: Added another test for
3065 checking whether the WMS XML parser (to be implemented) returns
3066 the information we expect. This requires a sample WMS WML file
3067 (sample.xml) which has been extracted from the frida server and
3068 "improved" manually.
3069
3070 * Extensions/wms/test/test_ogclib.py: Added legacy code to add the
3071 main Thuban directory to the path in order to be able to import
3072 random modules. Adjusted the PyOGCLib detection to reuse the
3073 information gathered. Also added a note about the PYTHONPATH
3074 environment variable.
3075
3076 * Extensions/wms/test/test_ogclib.py: The format specification is
3077 a mime-type, not a graphic format, hence image/jpeg wou ld be the
3078 proper format and not JPEG. We'll also have to take care of the
3079 encoding of / as %2F.
3080
3081 2004-03-16 Martin Schulze <[email protected]>
3082
3083 * Extensions/wms/test/test_ogclib.py: Added a (hopefully)
3084 comprehensive test for the getMapURL method, built compare URLs
3085 according to the documentation in OGC 01-068r3
3086
3087 * Extensions/wms/capabilities.py (WMSCapabilities): Added the
3088 class WMSCapabilities to manage capabilites, will incorporate
3089 parsing the capabilities response and provide details for other
3090 classes.
3091
3092 2004-03-12 Bernhard Herzog <[email protected]>
3093
3094 Support views in addition to normal tables in the postgis
3095 shapestore
3096
3097 * Thuban/Model/postgisdb.py
3098 (PostGISShapeStore._fetch_table_information): Add a fallback for
3099 the case where the table name is not in the geometry_columns
3100 table. This is usually the case for views. Also, set
3101 self.shapestore here.
3102 (PostGISShapeStore.ShapeType): No need to query the database all
3103 the time. The shape type is now determined in
3104 _fetch_table_information
3105
3106 * test/postgissupport.py (PostgreSQLServer.new_postgis_db)
3107 (PostgreSQLServer.get_static_data_db, PostGISDatabase.__init__):
3108 New parameter to specify views.
3109 (PostGISDatabase.has_data): Also compare the views. New views
3110 parameter
3111 (PostGISDatabase.initdb): Create the views.
3112 (PostgreSQLServer.get_default_static_data_db): Add the v_landmarks
3113 view
3114
3115 * test/test_postgis_db.py
3116 (TestPostGISShapestorePointFromViews): New. Test a
3117 PostGISShapeStore with a view
3118 (TestPostGISShapestorePointOIDAsGIDColumn.setUp): Pass the name of
3119 the geometry_column explicitly to test whether that works
3120
3121 2004-03-12 Bernhard Herzog <[email protected]>
3122
3123 Final step for explicit id/geometry columns: Loading and saving
3124
3125 * Resources/XML/thuban-1.1.dtd: New. Derived from thuban-1.0.dtd
3126 with the following changes:
3127 (dbshapesource): Two new attributes id_column and geometry_column
3128
3129 * Thuban/Model/save.py (SessionSaver.write): Use the new dtd
3130 (SessionSaver.write_session): Use the new namespace
3131 (SessionSaver.write_data_containers): Write the new dbshapesource
3132 parameters
3133
3134 * Thuban/Model/load.py (SessionLoader.__init__): New namespace for
3135 the new file format version
3136 (SessionLoader.start_dbshapesource): Handle the new db parameters
3137
3138 * test/test_save.py: Update to the new dtd and namespace
3139 (SaveSessionTest.test_save_postgis): Update the NonConnectionStore
3140 mock object to provide a working IDColumn method.
3141
3142 * test/test_load_1_0.py: New. Copy of the test_load.py before
3143 today's changes but with the round-trip tests removed.
3144
3145 * test/test_load_0_9.py: Update doc-string.
3146
3147 * test/test_load.py: Update all .thuban files to the new dtd and
3148 namespace.
3149 (TestPostGISLayer.file_contents): Add the new dbshapesource
3150 paramters
3151
3152 2004-03-11 Bernhard Herzog <[email protected]>
3153
3154 Next step for explicit id/geometry columns: User interaction
3155
3156 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Rework how
3157 the dialog is constructed. Add combo boxes to select id and
3158 geometry column. Rename some instance variables.
3159 (ChooseDBTableDialog.GetTable): Return id and geometry column
3160 names
3161 (ChooseDBTableDialog.OnTableSelect): New. Event handler for
3162 selections in the table list
3163
3164 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Use id_column
3165 and geometry_column
3166
3167 * Thuban/Model/session.py (Session.OpenDBShapeStore): Add the new
3168 parameters for id_column and geometry column of PostGISShapeStore
3169 here as well.
3170
3171 * Thuban/Model/postgisdb.py (type_map): Add ROWID psycog type.
3172 (_raw_type_map): New. Map raw PostgreSQL type ints to thuban types
3173 (PostGISConnection.GeometryTables): Use a better query to
3174 determine which relations in the database might be usable for
3175 shapestores. Now supports views as well but is more PostgreSQL
3176 specific
3177 (PostGISConnection.table_columns): New. Somewhat experimental
3178 method to let the db dialogs provide lists of columns to users so
3179 that they can select id and geometry columns.
3180 (PostGISTable.__init__): The default value of the id_column
3181 parameter is now None it still means "gid" effectively, though.
3182 (PostGISTable.IDColumn): New introspection method to return a
3183 column object for the id column
3184 (PostGISShapeStore.GeometryColumn): New introspection method to
3185 return a column object for the geometry column
3186
3187 * test/test_postgis_db.py
3188 (TestPostGISConnection.test_gis_tables_non_empty):
3189 Removed. Subsumed by the new:
3190 (TestPostGISConnection.test_gis_tables_with_views_and_tables):
3191 New. Tes the GeometryTables and table_columns methods with actual
3192 tables and views.
3193 (PointTests.test_id_column, PointTests.test_geometry_column):
3194 New. tests for the new methods.
3195 (TestPostGISShapestorePoint.setUp)
3196 (TestPostGISShapestorePointSRID.setUp)
3197 (TestPostGISShapestorePointExplicitGIDColumn.setUp): Fill the
3198 instance variables needed by the new tests
3199
3200 2004-03-11 Bernhard Herzog <[email protected]>
3201
3202 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): The row
3203 numbers given to ReadValue are ordinals.
3204
3205 2004-03-11 Bernhard Herzog <[email protected]>
3206
3207 Elimiate the requirement for PostGIS tables to have a column
3208 called "gid".
3209
3210 * Thuban/Model/postgisdb.py (PostGISTable.__init__): New parameter
3211 id_column to specify which column to use to identify rows. Also
3212 new instance variables id_column and quoted_id_column
3213 (PostGISTable.RowIdToOrdinal, PostGISTable.RowOrdinalToId)
3214 (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue)
3215 (PostGISTable.SimpleQuery): Use the id column name provided to the
3216 constructor instead of "gid"
3217 (PostGISShapeStore.__init__): New parameter id_column analogously
3218 to PostGISTable.__init__. This parameter is simply passed through
3219 to the base class constructor
3220 (PostGISShapeStore._create_col_from_description): Fix typo in
3221 doc-string
3222 (PostGISShapeStore.Shape, PostGISShapeStore.AllShapes)
3223 (PostGISShapeStore.ShapesInRegion): Use the id column name
3224 provided to the constructor instead of "gid"
3225
3226 * test/postgissupport.py
3227 (PostgreSQLServer.get_default_static_data_db): New static table
3228 landmarks_point_id with an id column != "gid. Update the comments
3229 a bit.
3230 (skip_if_addgeometrycolumn_does_not_use_quote_ident): Fix typo in
3231 doc-
3232 (upload_shapefile): New parameter gid_column to use a name other
3233 than "gid" for the column to store the shape ids
3234
3235 * test/test_postgis_db.py (TableTests): New. Mixin-class
3236 containing all tests previously in TestPostGISTable. The actual
3237 tests are the same but the code is a bit more configurable to
3238 allow for different id columns etc.
3239 (TestPostGISTable): Derive from TableTests now for the actual
3240 tests.
3241 (TestPostGISTableExplicitGIDColumn): New. Like TestPostGISTable
3242 except that it the landmarks_point_id table to test the id_column
3243 parameter
3244 (PointTests): Extend the doc-string
3245 (TestPostGISShapestorePointExplicitGIDColumn)
3246 (TestPostGISShapestorePointOIDAsGIDColumn): New classes derived
3247 from PointTests to test the explicit id_column parameter. One
3248 tests with the name of the column holding the shape ids, the other
3249 uses PostgreSQL's OID column. For the latter a number of methods
3250 have to be overwritten to make them independent of the actual id
3251 values.
3252
3253 2004-03-08 Silke Reimer <[email protected]>
3254
3255 Update debian directory:
3256
3257 * debian/changelog: Added new version.
3258 * deiban/rules: Updated management of patches (with cbds)
3259 * debian/control: Added cbds to dependencies
3260 * debian/patches/*: New. Adds better support for patches of thuban in
3261 debian
3262 * debian/menu: Syntax of menu changed slightly
3263 * debian/setup.py.patch: removed because it has been moved to
3264 debian/patechs/setup.py.patch
3265
3266
3267 2004-02-26 Bernhard Herzog <[email protected]>
3268
3269 Create the Doc/technotes directory for text files with information
3270 for developers
3271
3272 * Doc/technotes/README: New. README for the technotes
3273
3274 * Doc/technotes/coding_guidelines.txt: New. Coding guidelines for
3275 Thuban
3276
3277 * Doc/technotes/release_process.txt: New. Used to be
3278 HOWTO-Release. Now slightly adapted to technote formatting style.
3279
3280 * HOWTO-Release: Removed. It's contents are now in
3281 Doc/technotes/release_process.txt
3282
3283 2004-02-25 Bernhard Herzog <[email protected]>
3284
3285 * libraries/thuban/wxproj.cpp (get_wx_version): New. Return the
3286 version of wxWindows the module was compiled with so we can check
3287 that against the wxPython version.
3288
3289 * Thuban/version.py (thuban_branch, thuban_release): New variables
3290 controlling which and how Thuban versions are shown. See the
3291 comments for details.
3292 (verify_versions): Also check that the wx version that wxproj is
3293 compiled against matches that of the wxPython we use at runtime
3294
3295 2004-02-20 Bernhard Herzog <[email protected]>
3296
3297 * Extensions/wms/wms.py (epsg_code_to_projection): Use
3298 get_system_proj_file to read the epsg projections. The old way
3299 depended on the current directory being the top Thuban directory.
3300
3301 2004-02-20 Bernhard Herzog <[email protected]>
3302
3303 * Extensions/svgexport/test/test_svgmapwriter.py
3304 (TestVirtualDC.test_clippath): Remove a debug print
3305
3306 2004-02-20 Bernhard Herzog <[email protected]>
3307
3308 * Extensions/svgexport/__init__.py: New. Turn
3309 Extensions/svgexport into a package.
3310
3311 * Extensions/svgexport/svgmapwriter.py: Reorder the imports and
3312 doc-string a bit. The doc-string must come first, otherwise it's
3313 not a doc-string. The __future__ import must be the first thing
3314 after the doc-string. Use only double quotes in doc-strings.
3315 Single quotes trip up emacs syntax highlighting if the text
3316 contains apostrophes.
3317
3318 2004-02-20 Bernhard Herzog <[email protected]>
3319
3320 * Extensions/svgexport/test/__init__.py,
3321 Extensions/svgexport/test/test_svgmapwriter.py: New. Initial test
3322 suite for svgexport
3323
3324 * test/runtests.py (find_test_modules): New. Function with the
3325 module finding code from main.
3326 (main): Use find_test_modules to figure out the default test
3327 modules and take modules from Extensions.svgexport.test too.
3328
3329 2004-02-19 Bernhard Herzog <[email protected]>
3330
3331 * Thuban/UI/application.py (ThubanApplication.OnInit): Make sure
3332 the mainwindow has a reference to the map of the initial session.
3333 This fixes a bug introduced with the fix for RT#2245
3334
3335 2004-02-19 Bernhard Herzog <[email protected]>
3336
3337 * Extensions/svgexport/svgsaver.py,
3338 Extensions/svgexport/svgmapwriter.py,
3339 Extensions/svgexport/maplegend.py: Added again. This time in the
3340 correct place.
3341
3342 2004-02-17 Bernhard Herzog <[email protected]>
3343
3344 Fix for RT#2245
3345
3346 * Thuban/UI/application.py (ThubanApplication.OnInit): Initialize
3347 instance variables before trying to create any windows. Creating
3348 windows can start an event loop if e.g. message boxes are popped
3349 up for some reason, and event handlers, especially EVT_UPDATE_UI
3350 may want to access things from the application.
3351 (ThubanApplication.maps_changed): The mainwindow may not have been
3352 created yet, so check whether it has been created before calling
3353 its methods
3354
3355 * Thuban/UI/view.py (MapCanvas.OnIdle): Only try to redraw if we
3356 have a map
3357
3358 2004-02-17 Bernhard Herzog <[email protected]>
3359
3360 * test/test_svgmapwriter.py, Extensions/svgsaver.py,
3361 Extensions/svgmapwriter.py, Extensions/maplegend.py,
3362 extensions/svgexport/svgsaver.py,
3363 extensions/svgexport/svgmapwriter.py,
3364 extensions/svgexport/maplegend.py: Removed. These files were in
3365 the wrong places or didn't work at all.
3366
3367 2004-02-16 Bernhard Herzog <[email protected]>
3368
3369 * Thuban/UI/view.py (MapCanvas.Export): Remove accidentally added
3370 line
3371
3372 2004-02-16 Bernhard Herzog <[email protected]>
3373
3374 * Thuban/UI/view.py (MapCanvas.Export): Avoid UnboundLocalError.
3375
3376 2004-02-15 Markus Rechtien <[email protected]>
3377
3378 * Extensions/svgexport/svgmapwriter.py: New. Adds the capability
3379 to write a session to a file in SVG format.
3380 * Extensions/svgexport/svgsaver.py: New. Uses svgmapwriter.py
3381 to write a SVG map of a session.
3382 * Extensions/svgexport/maplegend: New. Writes a basic maplegend
3383 in SVG format for the current session.
3384
3385 2004-02-13 Bernhard Herzog <[email protected]>
3386
3387 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): When the layer
3388 can't be created, return immediately after displaying the error
3389 message.
3390
3391 2004-02-11 Bernhard Herzog <[email protected]>
3392
3393 Handle postgis tables with more than one geometry column.
3394
3395 * Thuban/Model/postgisdb.py
3396 (PostGISTable._fetch_table_information): Delegate the creation of
3397 column objects to a different method so that we can extend that in
3398 derived classes
3399 (PostGISTable._create_col_from_description): New. Column object
3400 creation part of _fetch_table_information
3401 (PostGISShapeStore._create_col_from_description): New. Extend
3402 inherited method to handle geometry columns
3403 (PostGISShapeStore.__init__): New parameter geometry_column to
3404 specify which geometry column to use. Optional but mandatory for
3405 tables with more than one geometry column
3406 (PostGISShapeStore._fetch_table_information): Also use the name of
3407 the geometry column when looking for the srid
3408 (PostGISShapeStore.ShapeType): Also use the name of the geometry
3409 column when looking for the shape type
3410
3411 * test/test_save.py (SaveSessionTest.test_save_postgis): Adapt
3412 NonConnectionStore to changes in the PostGISShapeStore
3413
3414 * test/test_postgis_db.py
3415 (TestPostGISSpecialCases.test_shapestore_two_geom_cols): Test
3416 PostGISShapeStore with tables having two geometry columns.
3417
3418 2004-02-10 Bernhard Herzog <[email protected]>
3419
3420 Fix some postgis problems. What remains to be done is real
3421 handling of SRIDs as they affect how reprojection is done
3422
3423 * Thuban/Model/postgisdb.py (quote_identifier): Fix typo in
3424 doc-string
3425 (PostGISShapeStore._fetch_table_information): New. Extend
3426 inherited method to retrieve srid
3427 (PostGISShapeStore.BoundingBox): Handle tables without data.
3428 extent yields NULL for those
3429 (PostGISShapeStore.ShapesInRegion): Use the srid of the table.
3430
3431 * test/test_postgis_db.py
3432 (TestPostGISSpecialCases.test_shapestore_empty_table): New test
3433 for the special case of a table without any data
3434 (TestPostGISShapestorePointSRID): New class with tests for a table
3435 that uses srids
3436 (PolygonTests): Fix a doc-string typo
3437
3438 * test/postgissupport.py (PostGISDatabase.__init__): New parameter
3439 reference_systems with a specification of spacial reference
3440 systems to create in the new db.
3441 (PostgreSQLServer.new_postgis_db)
3442 (PostgreSQLServer.get_static_data_db): New parameter
3443 reference_systems to be passed through ultimately to
3444 PostGISDatabase. In new_postgis_db also check whether an existing
3445 db already has the right srids
3446 (PostgreSQLServer.get_default_static_data_db): Add srids and a
3447 table that uses srids
3448 (PostGISDatabase.initdb): Create the entries for the reference
3449 systems
3450 (PostGISDatabase.has_data): Add reference_systems parameter to
3451 check for those too
3452 (upload_shapefile): New parameter srid to create tables with a
3453 specific srid
3454
3455 2004-02-06 Frank Koormann <[email protected]>
3456
3457 * po/pt_BR.po: Fixed charset
3458
3459 2004-02-05 Frank Koormann <[email protected]>
3460
3461 * po/pt_BR.po: Fixed format string for error message, missing %s
3462 added (Thuban/UI/application.py:273)
3463
3464 2004-02-03 Frank Koormann <[email protected]>
3465
3466 First version of Portuguese (Brazilian) translation
3467
3468 * po/pt_BR.po: New, translation of pot (2004-01-15 16:07+0300) for
3469 Brazilian Portuguese by Eduardo Patto Kanegae.
3470
3471 * Thuban/UI/about.py (About.__init.py__): Added Eduardo to the list of
3472 translators.
3473
3474
3475 2004-01-22 Frank Koormann <[email protected]>
3476
3477 * Doc/manual/thuban-manual.xml: Added section on installation of
3478 Thuban under Win32 systems. Fixed image path references in the postgis
3479 section. Some minor source formattings.
3480
3481 2004-01-21 Frank Koormann <[email protected]>
3482
3483 Make Thuban remember path selections (at least for one application run).
3484
3485 * Thuban/UI/application.py (Application.OnInit): Initialize path as a
3486 attribute of application object. Path is a dictionary of
3487 strings, currently with the items "data" and "projection".
3488 (Application.SetPath): New, stores path for the specified item.
3489 (Application.Path): New, return path for the specified item.
3490
3491 * Thuban/UI/mainwindow.py
3492 (MainWindow.OpenSession, MainWindow.SaveSessionAs,
3493 MainWindow.AddLayer, MainWindow.AddRasterLayer,
3494 MainWindow.TableOpen): Access "data" path information of the
3495 application.
3496
3497 * Thuban/UI/projdialog.py (ProjFrame._OnImport, ProjFrame._OnExport):
3498 Access "projection" path information of the application.
3499
3500 2004-01-05 Bernhard Herzog <[email protected]>
3501
3502 * po/ru.po: Updated translations from Alex Shevlakov
3503
3504 2004-01-05 Bernhard Herzog <[email protected]>
3505
3506 * po/Makefile, po/README: Move the description of how to generate
3507 the translation statistics to the README.
3508
3509 2003-12-23 Bernhard Herzog <[email protected]>
3510
3511 * NEWS: Update for 1.0.0
3512
3513 * po/it.po: Another update from Maurizio Napolitano
3514
3515 2003-12-23 Bernhard Herzog <[email protected]>
3516
3517 * po/it.po: Updated translation from Maurizio Napolitano
3518
3519 2003-12-23 Bernhard Herzog <[email protected]>
3520
3521 * Thuban/UI/join.py (JoinDialog.__init__): Mark one more string
3522 for translation
3523
3524 * Thuban/UI/mainwindow.py (MainWindow.TableRename)
3525 (MainWindow.RenameMap, MainWindow.RenameLayer): Mark some more
3526 strings for translation
3527
3528 * po/de.po: Update with the newly marked strings.
3529
3530 2003-12-22 Bernhard Herzog <[email protected]>
3531
3532 * HOWTO-Release: Fix the places where version numbers have to be
3533 updated
3534
3535 2003-12-22 Bernhard Herzog <[email protected]>
3536
3537 * setup.py (setup call): 1.0.0, yeah!
3538
3539 * Thuban/version.py (longversion): 1.0.0, yeah!
3540
3541 * Thuban/Model/load.py (SessionLoader.__init__): Accept the
3542 1.0.0 namespace too
3543
3544 * Thuban/Model/save.py (SessionSaver.write_session): Save with
3545 1.0.0 namespace
3546
3547 * test/test_load.py (LoadSessionTest.dtd)
3548 (TestSingleLayer.file_contents)
3549 (TestNonAsciiColumnName.file_contents)
3550 (TestLayerVisibility.file_contents)
3551 (TestClassification.file_contents, TestLabels.file_contents)
3552 (TestLayerProjection.file_contents)
3553 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3554 (TestLabelLayer.file_contents, TestPostGISLayer.file_contents)
3555 (TestPostGISLayerPassword.file_contents)
3556 (TestLoadError.file_contents, TestLoadError.test): Update for
3557 1.0.0 namespace
3558
3559 * test/test_save.py (SaveSessionTest.dtd)
3560 (SaveSessionTest.testEmptySession)
3561 (SaveSessionTest.testSingleLayer)
3562 (SaveSessionTest.testLayerProjection)
3563 (SaveSessionTest.testRasterLayer)
3564 (SaveSessionTest.testClassifiedLayer)
3565 (SaveSessionTest.test_dbf_table)
3566 (SaveSessionTest.test_joined_table)
3567 (SaveSessionTest.test_save_postgis): Update for 1.0.0 namespace
3568
3569 2003-12-22 Bernhard Herzog <[email protected]>
3570
3571 * Thuban/Model/load.py (SessionLoader.start_label): Make sure the
3572 alignment flags are byte strings not unicode and that they have
3573 valid values
3574
3575 * test/test_load.py (TestLabelLayer): New. Test loading (and
3576 indirectly saving) of maps with labels.
3577
3578 2003-12-22 Bernhard Herzog <[email protected]>
3579
3580 * Thuban/UI/tableview.py (TableGrid.OnDestroy)
3581 (TableGrid.__init__): Handle EVT_WINDOW_DESTROY in the grid to
3582 unsubscribe all subscribers.
3583 (LayerTableFrame.OnDestroy): Do not unsubscribe any messages from
3584 self.grid since it may already have been destroyed.
3585 Fixes RT #2256
3586
3587 2003-12-19 Bernhard Herzog <[email protected]>
3588
3589 * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
3590
3591 2003-12-16 Bernhard Herzog <[email protected]>
3592
3593 * debian/bitmappath.patch, debian/setup.py.patch:
3594 added to ensure compliance with FHS for debian
3595 * debian/rules, debian/changelog:
3596 added patches in rules to ensure compliance with FHS for debian
3597
3598 2003-12-16 Bernhard Herzog <[email protected]>
3599
3600 * po/Makefile (mo): Make the output a bit nicer so that it prints
3601 statistics about the translations. Add a comment how produce even
3602 nicer statistics with sed.
3603
3604 2003-12-09 Frank Koormann <[email protected]>
3605
3606 * Resources/Projections/defaults.proj:
3607 French projection sample with correct accents (UNICODE).
3608
3609 2003-12-05 Bernhard Herzog <[email protected]>
3610
3611 * MANIFEST.in: Add the devtools directory
3612
3613 * setup.py (setup call): Use license instead of licence. This
3614 silences a deprecation warning on Python 2.3
3615
3616 2003-12-05 Frank Koormann <[email protected]>
3617
3618 Documentation synced with 1.0rc1
3619
3620 * Doc/manual/thuban-manual.xml:
3621 Minor formatting changes and references to database layers .
3622 Introduction.Internationalization: New section on i18n.
3623 MapManagement.AddingandRemovingLayers: Added item on database layers.
3624 MapManagement.TheLegend: Added section and screenshot on popup menu.
3625 ProjectionManagement: Updated screenshot and sentence on EPSG.
3626 Appendix.SupportedDataSources: Added PostGIS.
3627 Appendix.WorkingwithPostGIS: New section.
3628
3629 * Doc/manual/images/6_projection.png: Updated screenshot including
3630 EPSG checkboxes.
3631
3632 * Doc/manual/images/3_5_popup_menu.png: New, popup menu screenshot.
3633
3634 * Doc/manual/images/app_postgis_add_layer.png,
3635 Doc/manual/images/app_postgis_db_add.png,
3636 Doc/manual/images/app_postgis_db_management.png:
3637 New screenshots focussing on database layers
3638
3639 2003-12-05 Frank Koormann <[email protected]>
3640
3641 * Thuban/UI/projdialog.py (load_user_proj): If user.proj is missing
3642 write warning to stderr instead of rising a warning dialog
3643
3644 2003-12-03 Bernhard Herzog <[email protected]>
3645
3646 Fix for RT #2243
3647
3648 * Thuban/UI/mainwindow.py (MainWindow.has_selected_shape_layer):
3649 New. Like has_selected_layer but for shape layers only
3650 (_has_selected_shape_layer): New. Like _has_selected_layer but for
3651 shape layers only
3652 (layer_show_table command, layer_jointable command): Use these
3653 commands should only be available for shape layers
3654
3655 2003-12-03 Bernhard Herzog <[email protected]>
3656
3657 * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
3658 publishers that are wx objects and may have been destroyed by wx
3659 already. Fixes RT #2242.
3660
3661 2003-12-03 Bernhard Herzog <[email protected]>
3662
3663 * po/ru.po: Updates from Alex Shevlakov
3664
3665 2003-12-03 Silke Reimer <silkeintevation.de>
3666
3667 * debian/control, debian/changelog: Added gdal-support to
3668 debian package, updated to new thuban version
3669
3670
3671 2003-12-03 Bernhard Herzog <[email protected]>
3672
3673 * Thuban/Lib/version.py: New. Module for version number
3674 manipulations. The version of make_tuple here also deals better
3675 with more unusual version number strings, such as e.g.
3676 "1.2+cvs20031111"
3677
3678 * Thuban/version.py (make_tuple): Removed. It's now in
3679 Thuban.Lib.version. Use that implementation instead.
3680
3681 * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
3682
3683 2003-12-02 Bernhard Herzog <[email protected]>
3684
3685 * MANIFEST.in: Add debian files
3686
3687 * setup.py (setup call): Add packages for the Extensions so that
3688 they're installed too
3689 (data_files): Add READMEs and sample data from some Extensions
3690
3691 * NEWS: Add note about the extensions in binary packages
3692
3693 2003-12-02 Bernhard Herzog <[email protected]>
3694
3695 * Thuban/Model/save.py (SessionSaver.write_session): Save files
3696 with the thuban-1.0rc1
3697
3698 * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
3699 thuban-1.0rc1 namespace too
3700
3701 * test/test_save.py (SaveSessionTest.dtd)
3702 (SaveSessionTest.testEmptySession)
3703 (SaveSessionTest.testSingleLayer)
3704 (SaveSessionTest.testLayerProjection)
3705 (SaveSessionTest.testRasterLayer)
3706 (SaveSessionTest.testClassifiedLayer)
3707 (SaveSessionTest.test_dbf_table)
3708 (SaveSessionTest.test_joined_table)
3709 (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
3710 namespace
3711
3712 * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
3713 namespace
3714 (TestSingleLayer.file_contents)
3715 (TestNonAsciiColumnName.file_contents)
3716 (TestLayerVisibility.file_contents)
3717 (TestClassification.file_contents, TestLabels.file_contents)
3718 (TestLayerProjection.file_contents)
3719 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3720 (TestPostGISLayer.file_contents)
3721 (TestPostGISLayerPassword.file_contents)
3722 (TestLoadError.file_contents, TestLoadError.test): Update to
3723 thuban-1.0rc1 namespace
3724
3725 2003-12-01 Bernhard Herzog <[email protected]>
3726
3727 * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
3728 nt to better match Intevation's current w32 setup
3729
3730 * HOWTO-Release: Add note about updating MANIFEST.in
3731
3732 * MANIFEST.in: Add the Extensions
3733
3734 * NEWS: Update for 1.0rc1
3735
3736 2003-12-01 Bernhard Herzog <[email protected]>
3737
3738 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
3739 cards for the dialog so that shapefiles ending in all uppercase
3740 SHP are listed too
3741
3742 2003-11-28 Bernhard Herzog <[email protected]>
3743
3744 * Thuban/version.py (longversion): Update to 1.0rc1
3745
3746 * setup.py (setup call): Update version to 1.0rc1. Use the
3747 [email protected] email address as author email instead of my
3748 personal one.
3749
3750 2003-11-28 Bernhard Herzog <[email protected]>
3751
3752 * po/de.po: Update german translation.
3753
3754 2003-11-28 Bernhard Herzog <[email protected]>
3755
3756 Unify the filenames stored in .thuban files so that the .thuban
3757 files are more platform independend
3758
3759 * Thuban/Model/save.py (unify_filename): New. Unify filenames so
3760 that they can be used on both windows and unix
3761 (SessionSaver.prepare_filename): New. Handle all filename
3762 transformations for filenames stored in the thuban file
3763 (SessionSaver.write_data_containers, SessionSaver.write_layer):
3764 Use prepare_filename
3765
3766 * test/test_save.py (SaveSessionTest.testSingleLayer)
3767 (SaveSessionTest.testLayerProjection)
3768 (SaveSessionTest.testRasterLayer)
3769 (SaveSessionTest.testClassifiedLayer)
3770 (SaveSessionTest.test_dbf_table)
3771 (SaveSessionTest.test_joined_table): Filenames are always stored
3772 with slashes on all currently supported platforms so adapt all
3773 tests to this
3774
3775 * test/test_load.py (LoadSessionTest.filenames): With the new
3776 filename scheme the filenames in the tests should be
3777 understandable on all currently supported platforms so we turn
3778 this into an empty list because we don't have to normalize them
3779 anymore
3780
3781 2003-11-28 Bernhard Herzog <[email protected]>
3782
3783 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
3784 Add the ellipsoid to the projection since some Proj versions
3785 complain if it's missing.
3786
3787 2003-11-27 Bernhard Herzog <[email protected]>
3788
3789 Corect some bounding box projection problems
3790
3791 * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
3792 version of ForwardBBox
3793 (Projection._transform_bbox): New. common implementation of
3794 ForwardBBox and InverseBBox
3795 (Projection.ForwardBBox): Use _transform_bbox.
3796
3797 * test/test_proj.py (TestProjection.test): Add test for
3798 InverseBBox
3799
3800 * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
3801 (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
3802 new InverseBBox method to determine the unprojected bounding box
3803 (Layer.ShapesInRegion): Use the ForwardBBox method to project the
3804 bbox.
3805
3806 * test/test_layer.py (TestLayer.test_point_layer_with_projection):
3807 Removed.
3808 (TestLayer.test_arc_layer_with_projection): New. This test is
3809 better able to test whether bounding boxes are projected correctly
3810 than test_point_layer_with_projection
3811
3812 * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
3813 InverseBBox to unproject bboxes
3814
3815 2003-11-25 Bernhard Herzog <[email protected]>
3816
3817 * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
3818 source code.
3819
3820 2003-11-25 Bernhard Herzog <[email protected]>
3821
3822 * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
3823 there for backwards compatibility and all code relying on that
3824 should have been updated by now.
3825
3826 2003-11-25 Bernhard Herzog <[email protected]>
3827
3828 * test/test_load.py (TestClassification.test): Add the missing
3829 round trip test.
3830 (TestClassification.file_contents): Update to the newest file
3831 format
3832
3833 2003-11-25 Bernhard Herzog <[email protected]>
3834
3835 Add very experimental (and possibly dangerous) extension to draw
3836 polygons:
3837
3838 * Extensions/drawshape/README: New. Brief installation
3839 instructions
3840
3841 * Extensions/drawshape/drawshape.py: New. Implementation of the
3842 drawshape extensions
3843
3844 * Extensions/drawshape/patch.diff: Patch to apply before the
3845 extension can be used.
3846
3847 2003-11-24 Bernhard Herzog <[email protected]>
3848
3849 * Thuban/Model/data.py (ShapefileStore._open_shapefile)
3850 (ShapefileStore.__init__): Factor opening the shapefile into a
3851 separate method (the new _open_shapefile). This makes the code a
3852 bit more readable but the real reason is that it makes some evil
3853 hacks easier. :-)
3854
3855 2003-11-24 Bernhard Herzog <[email protected]>
3856
3857 * Thuban/Model/load.py (SessionLoader.check_attrs): If no
3858 converter is specified for an attribute assume it's a string
3859 containing only Latin1 characters. Update doc-string accordingly.
3860 This change should fix many places where unicode objects might
3861 accidentally enter Thuban.
3862
3863 * test/test_load.py (TestNonAsciiColumnName): New test to check
3864 what happens with column names in DBF files that contain non-ascii
3865 characters
3866
3867 2003-11-21 Bernhard Herzog <[email protected]>
3868
3869 Enable the experimental attribute editing again and introduce a
3870 command line switch to actually activate it
3871
3872 * Thuban/UI/main.py (options): New. Container for options set on
3873 the commmand line
3874 (main): Add the --enable-attribute-editing flag.
3875
3876 * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
3877 editing is enabled use the grid ctrl which allows editing of the
3878 values
3879
3880 * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
3881 New. Just delegate this to the underlying table.
3882
3883 2003-11-20 Bernhard Herzog <[email protected]>
3884
3885 * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
3886 Skip this test if run under non-posix systems since it only works
3887 there
3888
3889 2003-11-19 Bernhard Herzog <[email protected]>
3890
3891 * Thuban/Model/resource.py: Rework the way gdal support is
3892 determined so that we can give a reason in the about why gdal is
3893 not supported.
3894 (gdal_support_status): New. Variable holding a string with the
3895 reason for no gdal support
3896
3897 * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
3898 not supported to the message
3899
3900 2003-11-19 Bernhard Herzog <[email protected]>
3901
3902 Remove the old table interface and its test cases
3903
3904 * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
3905 (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
3906 anymore
3907
3908 * Thuban/Model/transientdb.py (TransientTableBase)
3909 (AutoTransientTable): Do not derive from OldTableInterfaceMixin
3910 anymore
3911
3912 * test/test_table.py: Removed since the old interface it tests is
3913 gone.
3914
3915 * test/runtests.py (main): The old table interface is gone and
3916 with it the deprecation warnings so remove the code that turns
3917 these warnings into errors
3918
3919 2003-11-19 Bernhard Herzog <[email protected]>
3920
3921 * test/test_table.py: Revert to revision 1.5 again. Changing the
3922 tests to use the new table interface is completely wrong since the
3923 whole purpose of the tests in this module is to test the old
3924 interface.
3925
3926 2003-11-18 Bernhard Herzog <[email protected]>
3927
3928 * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
3929 New. Test whether the connection matches a set of connection
3930 parameters
3931
3932 * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
3933 (DBFrame.OnAdd): Use the new MatchesParameters method when looking
3934 for existing connections with the same parameters and break out of
3935 the loop correctly.
3936
3937 * test/test_postgis_db.py (TestBriefDescription)
3938 (TestPostGISSimple.test_brief_description): Rename
3939 TestBriefDescription to TestPostGISSimple and the test method to
3940 test_brief_description so that we can add more test methods.
3941 (TestPostGISSimple.test_matches_parameters): New. Test the new
3942 MatchesParameters method
3943
3944 2003-11-18 Bernhard Herzog <[email protected]>
3945
3946 * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
3947 _was_destroyed, to indicate whether an publisher instance has
3948 already been destroyed.
3949 (Publisher.Unsubscribe): Only disconnect if the publisher has not
3950 been destroyed yet.
3951 (Publisher.Destroy): Set the _was_destroyed flag to true.
3952
3953 * test/test_connector.py
3954 (TestPublisher.test_unsubscribe_after_destroy): New. Test that
3955 calling Unsubscribe after Destroy doesn't raise an exception
3956
3957 2003-11-14 Bernhard Herzog <[email protected]>
3958
3959 * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
3960 typo in doc-string
3961
3962 2003-11-13 Bernhard Herzog <[email protected]>
3963
3964 Quote table and column names properly for postgis.
3965
3966 * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
3967 quote an identifier for use in an sql statement
3968 (PostGISColumn.__init__): Add the quoted_name attribute
3969 (PostGISTable.__init__): New instance variable quoted_tablename
3970 (PostGISTable._fetch_table_information): Use the quoted table
3971 name. New isntance variable quoted_geo_col with a quoted version
3972 of geometry_column
3973 (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
3974 (PostGISTable.RowOrdinalToId): Use the quoted table name
3975 (PostGISTable.ReadValue, PostGISTable.ValueRange)
3976 (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
3977 (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
3978 (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
3979 Use quoted table and column names
3980
3981 * test/test_postgis_db.py (TestPostGISSpecialCases)
3982 (TestPostGISIgnoredColumns): Rename the class to
3983 TestPostGISSpecialCases because that better describes the new
3984 cases
3985 (TestPostGISSpecialCases.test_unsupported_types)
3986 (TestPostGISSpecialCases.test): Rename the method to
3987 test_unsupported_types because we need a more descriptive name now
3988 that there are more methods
3989 (TestPostGISSpecialCases.test_table_name_quoting)
3990 (TestPostGISSpecialCases.test_column_name_quoting)
3991 (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
3992 cases to test quoting of table and column names in PostGISTable
3993 and PostGISShapeStore
3994
3995 * test/postgissupport.py
3996 (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
3997 AddGeometryColumn desn't support table or column names with sapces
3998 or double quotes
3999
4000 2003-11-12 Jan-Oliver Wagner <[email protected]>
4001
4002 * Extensions/wms/__init__.py: New: Init to make this
4003 directory a package.
4004
4005 * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
4006
4007 2003-11-11 Bernhard Herzog <[email protected]>
4008
4009 * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
4010 Constant for the file woth deprecated epsg projections
4011 (get_system_proj_file): Update doc-string
4012
4013 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
4014 above the EPS widgets, introduce a check box for the deprecated
4015 eps projections and a label for the epsg widgets
4016 (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
4017 too
4018
4019 2003-11-11 Bernhard Herzog <[email protected]>
4020
4021 Avoid warnings when run under Python 2.3
4022
4023 * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
4024 (BaseRenderer.draw_label_layer): Coordinates must be ints.
4025
4026 * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
4027 real method so that we can convert to int.
4028 (MapRenderer.label_font): The font size mist be an int.
4029
4030 * Thuban/UI/common.py (Color2wxColour): The color values must be
4031 ints. Also, remove the unnecessary asserts.
4032
4033 * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
4034 (TestUnicodeStrings.test): Python source code should not contain
4035 non-ascii characters unless an encoding is specified in the file.
4036 Therefore use \x escapes in the string literals for non-ascii
4037 characters.
4038
4039 2003-11-11 Bernhard Herzog <[email protected]>
4040
4041 * Thuban/Model/resource.py (get_system_proj_file): Add a filename
4042 parameter so that this function can be used for all proj files in
4043 Resource/Projections
4044 (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
4045 get_system_proj_file
4046
4047 * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
4048 ProjFile self.__sysProjFile use a dictionary of system ProjFile
4049 objects self._sys_proj_files
4050 (ProjFrame.build_dialog): Adapt to the new changes in the
4051 ProjectionList constructor. Add a check button to toggle whether
4052 EPSG projections are shown
4053 (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
4054 events.
4055 (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
4056 the busy cursor if the files have not yet been loaded by the
4057 dialog.
4058 (ProjFrame.load_system_proj): Add a parameter for the name of the
4059 proj file. Maintain the dictionary of system projections
4060 self._sys_proj_files
4061
4062 * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
4063 user_projs parameters into one parameter proj_files which is a
4064 list of proj files.
4065 (ProjectionList._subscribe_proj_files)
4066 (ProjectionList._unsubscribe_proj_files): New. Move
4067 subscription/unsubscription of projfile messages to separate
4068 methods
4069 (ProjectionList.Destroy): The unsubscribe is now done in
4070 _unsubscribe_proj_files
4071 (ProjectionList.update_projections): We now have a list of proj
4072 file objects
4073 (ProjectionList.SetProjFiles): New method to set a new list of
4074 proj file objects
4075
4076 * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
4077 Specify explicitly which system proj file to load.
4078
4079 2003-11-11 Bernhard Herzog <[email protected]>
4080
4081 * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
4082 instance variables to cut cyclic references. The GC would have
4083 collected the loader eventually but it can happen that it doesn't
4084 run at all until thuban is closed (2.3 but not 2.2 tries a bit
4085 harder and forces a collection when the interpreter terminates)
4086 (load_session): Call the handler's Destroy method to make sure
4087 that it gets garbage collected early. Otherwise it will be
4088 collected very late if at all and it holds some references to e.g.
4089 shapestores and the session which can lead to leaks (of e.g. the
4090 temporary files)
4091
4092 * test/test_load.py (TestSingleLayer.test_leak): New. test for the
4093 resource leak in load_session
4094
4095 2003-11-10 Bernhard Herzog <[email protected]>
4096
4097 * Thuban/UI/baserenderer.py: Add a way to specify how layers in
4098 extensions are to be rendered.
4099 (_renderer_extensions): New. List with renderer for layers in
4100 extensions
4101 (add_renderer_extension): New. Add a renderer extension
4102 (init_renderer_extensions): New. Init the renderer extensions
4103 (BaseRenderer.render_map_incrementally): Search
4104 _renderer_extensions for how to draw unknown layer types
4105 (BaseRenderer.draw_raster_data): Add format parameter so that
4106 formats other than BMP can be drawn
4107 (BaseRenderer.draw_raster_layer): Pass an explicit format to
4108 draw_raster_data
4109
4110 * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
4111 strings of the format parameter of draw_raster_data method to wx
4112 constants
4113 (MapRenderer.draw_raster_data): Add the format parameter and use
4114 raster_format_map to map it to the right wxwindows constant for
4115 wxImageFromStream
4116
4117 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
4118 the format parameter and record it
4119 (TestBaseRenderer.test_raster_no_projection): check the format
4120 paramter of the draw_raster_data method
4121 (TestBaseRenderer.test_renderer_extension): New. Test the renderer
4122 extension facility
4123
4124 2003-11-07 Bernhard Herzog <[email protected]>
4125
4126 Tweak the usage of the sqlite database to make common use cases
4127 more responsive. In most cases copying the data to the sqlite
4128 database takes so long that using sqlite doesn't have enough
4129 advantages.
4130
4131 * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
4132 comments about performance and query the min and max in separate
4133 statements because only that way will indexes be used.
4134 (TransientTableBase.UniqueValues): Add some comments about
4135 performance.
4136 (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
4137 Do not copy the data to the transient DB but use the transient
4138 copy if it exists. See the new comments for the performance trade
4139 offs
4140
4141 * test/test_transientdb.py
4142 (TestTransientTable.test_auto_transient_table): Make sure that the
4143 data is copied to the transient database at some point.
4144
4145 2003-11-03 Bernhard Herzog <[email protected]>
4146
4147 * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
4148 globals to locals so that it's a bit faster
4149
4150 2003-11-03 Bernhard Herzog <[email protected]>
4151
4152 * Thuban/UI/baserenderer.py
4153 (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
4154 method. ReadValue is faster than ReadRowAsDict since it only reads
4155 one cell especially now that the dbf file objects actually
4156 implement it.
4157
4158 * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
4159 read_attribute method of the dbf objects
4160
4161 2003-11-03 Bernhard Herzog <[email protected]>
4162
4163 * Extensions/profiling/profiling.py (popup_dialog_box): New config
4164 variable to indicate whether the result should be shown in a
4165 dialog box
4166 (profile_screen_renderer, time_screen_renderer): Only show a
4167 dialog box if popup_dialog_box is true.
4168 (profile_screen_renderer): Flush stdout after the printing the
4169 first part of the "profiling..." message
4170
4171 * Thuban/UI/baserenderer.py
4172 (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
4173 brushes for the groups so that they're not created over and over
4174 again
4175
4176 * Thuban/Model/classification.py (Classification.__getattr__)
4177 (Classification._compile_classification)
4178 (Classification._clear_compiled_classification): New. Methods to
4179 manage a 'compiled' representation of the classification groups
4180 which is created on demand
4181 (Classification.InsertGroup, Classification.RemoveGroup)
4182 (Classification.ReplaceGroup): reset the compiled representation
4183 (Classification.FindGroup): Use the compiled representation to
4184 find the matching group
4185 (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
4186
4187 2003-10-31 Bernhard Herzog <[email protected]>
4188
4189 * Thuban/Model/classification.py (Classification.SetDefaultGroup):
4190 Send a CLASS_CHANGED message
4191 (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
4192 not return the removed group since it wasn't used.
4193
4194 * test/test_classification.py
4195 (TestClassification.test_set_default_group): New. Test the
4196 SetDefaultGroup method
4197 (TestClassification.test_insert_group): New. Test the InsertGroup
4198 method
4199 (TestClassification.test_remove_group): New. Test the RemoveGroup
4200 method
4201 (TestClassification.test_replace_group): New. Test the
4202 ReplaceGroup method
4203
4204 2003-10-31 Bernhard Herzog <[email protected]>
4205
4206 * test/test_classification.py (TestClassification.setUp):
4207 Subscribe to the CLASS_CHANGED messages
4208 (TestClassification.tearDown): New. Destroy the classification
4209 properly
4210 (TestClassification.test_defaults): Add tests for the default line
4211 width and whether no messages were sent yet
4212 (TestClassification.test_set_default_properties): Add tests for
4213 messages and setting the default line width
4214 (TestClassification.test_add_singleton)
4215 (TestClassification.test_add_range)
4216 (TestClassification.test_multiple_groups): Add tests for messages
4217
4218 2003-10-31 Bernhard Herzog <[email protected]>
4219
4220 Some more refactoring in preparation for new tests:
4221
4222 * test/test_classification.py (TestClassification.setUp): New.
4223 Instantiate the classification here. Update the test methods
4224 accordingly.
4225 (TestClassification.test_multiple_groups): Make sure that the two
4226 singletons matching 1 are considered different.
4227
4228 2003-10-31 Bernhard Herzog <[email protected]>
4229
4230 * test/test_classification.py (red, green, blue): New. These
4231 constants were used in several cases. Update the relevant methods.
4232 (TestClassification.test_defaults)
4233 (TestClassification.test_set_default_properties)
4234 (TestClassification.test_add_singleton)
4235 (TestClassification.test_add_range)
4236 (TestClassification.test_multiple_groups)
4237 (TestClassification.test_deepcopy): New. These were formerly all
4238 part of the single method test.
4239 (TestClassification.test_deepcopy): Removed.
4240 (TestClassIterator): Removed. The test case is now a method of
4241 TestClassification since it tests part of the public interface of
4242 Classification
4243 (TestClassification.test_iterator): New. Used to be
4244 TestClassIterator effectively
4245
4246 2003-10-31 Jan-Oliver Wagner <[email protected]>
4247
4248 GUIfied the functions of the profiling extension.
4249
4250 * /Extensions/profiling/__init__.py: New: Init to make this
4251 directory a package.
4252
4253 * Extensions/profiling/profiling.py: Moved menu entries to
4254 the Extensions menu. Applied _() for strings.
4255 (profile_screen_renderer): Catch the detailed printout and present
4256 it in a dialog.
4257 (time_screen_renderer): Raise a dialog to present the result instead
4258 of printing it to stdout.
4259
4260 2003-10-31 Bernhard Herzog <[email protected]>
4261
4262 * test/test_classification.py (TestClassGroupProperties)
4263 (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
4264 (TestClassGroupSingleton, TestClassIterator, TestClassification):
4265 Split TestClassification into several classes, one for each class
4266 being tested. TestClassification itself now only tests
4267 Classification. This split makes changes to the tests a bit easier
4268
4269 2003-10-31 Bernhard Herzog <[email protected]>
4270
4271 * Extensions/profiling/profiling.py: New. Extension to measure
4272 Thuban performance
4273
4274 2003-10-31 Frank Koormann <[email protected]>
4275
4276 Added two items to legend popup menu: Remove Layer and Show Layer Table
4277
4278 * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
4279 LegendPanel._OnShowTable): New event handlers, call the corresponding
4280 mainwindow methods.
4281 (LegendTree._OnRightClick): Added items to popup menu.
4282
4283 2003-10-30 Bernhard Herzog <[email protected]>
4284
4285 * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
4286 EVT_WINDOW_DESTROY
4287 (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
4288 nothing but is convenient for the derived classes.
4289
4290 * Thuban/UI/tableview.py
4291 (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
4292 Unsubscribe the messages here not in OnClose because that might
4293 get called multiple times. Fixes RT #2196
4294 (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
4295 anymore.
4296
4297 * README: Update the minimum requirement for wxPython. Since we
4298 now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
4299 the version in which that was introduced for all platforms
4300
4301 2003-10-30 Frank Koormann <[email protected]>
4302
4303 * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
4304 the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
4305 frame.
4306
4307 2003-10-30 Jan-Oliver Wagner <[email protected]>
4308
4309 Improved APR import extension, added further EPSG definitions
4310 and some cleanup regarding string class.
4311
4312 * test/test_proj.py (TestProjection.test_get_projection_units_geo):
4313 Added test for alias 'longlat'.
4314
4315 * Resources/Projections/epsg-deprecated.proj: New. Contains
4316 deprecated EPSG definitions.
4317
4318 * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
4319 the variable names for objects.
4320
4321 * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
4322 Copied from importAPR and provided with documentation.
4323
4324 * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
4325 Moved to apr.py.
4326 (APR_View): Added object ref 'ITheme'.
4327
4328 * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
4329 split function by corresponding use of the string class method.
4330
4331 * Thuban/Model/xmlwriter.py: Replaced string replace function by
4332 corresponding string method.
4333
4334 2003-10-29 Bernhard Herzog <[email protected]>
4335
4336 * Thuban/UI/baserenderer.py
4337 (BaseRenderer.draw_shape_layer_incrementally): Speed up the
4338 special case of a classification that only has the default group
4339
4340 2003-10-27 Bernhard Herzog <[email protected]>
4341
4342 * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
4343
4344 * po/de.po: Update.
4345
4346 * Thuban/UI/application.py
4347 (ThubanApplication.ShowExceptionDialog): Handle translation of the
4348 dialog message properly
4349
4350 2003-10-27 Bernhard Herzog <[email protected]>
4351
4352 Rework how localization works so that we use wx's translation
4353 functions when running Thuban as a normal application but not when
4354 we don't need any UI, such as in the test suite. See the comment
4355 in Thuban/__init__.py for details
4356
4357 * Thuban/__init__.py (_): Add one level of indirection to make the
4358 translation handling more flexible and to make it possible to use
4359 either wx's translation services or not.
4360 (gettext_identity, translation_function_installed)
4361 (install_translation_function): New function to help with this
4362
4363 * Thuban/UI/__init__.py: Install the wx specific translation
4364 function if it's OK to do that
4365
4366 * test/support.py (initthuban): Install a dummy translation
4367 function so that importing Thuban.UI doesn't install a wx specific
4368 one for which would need to import wxPython
4369
4370 2003-10-27 Bernhard Herzog <[email protected]>
4371
4372 * HOWTO-Release: Source archives should be created first and the
4373 binary packages should be created from the source archives.
4374 There's an official debian package now so there's no need to test
4375 the rpm on debian anymore
4376
4377 2003-10-27 Bernhard Herzog <[email protected]>
4378
4379 Several rendering changes:
4380
4381 - Render the selection into a separate bitmap so that only that
4382 bitmap needs to be redrawn when the selection changes
4383
4384 - Render incrementally showing previews and allowing interaction
4385 before rendering is complete
4386
4387 - Update the renderer interface a bit. Most parameters of
4388 RenderMap are now parameters of the constructor
4389
4390 * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
4391 and the update region as parameters. Update the doc-string
4392 (BaseRenderer.render_map_incrementally): New. Generator function
4393 to renders the map incrementally
4394 (BaseRenderer.render_map): Remove the map argument (it's now in
4395 the constructor) and simply iterate over the
4396 render_map_incrementally generator to draw the map.
4397 (BaseRenderer.draw_shape_layer_incrementally)
4398 (BaseRenderer.draw_shape_layer): Renamed to
4399 draw_shape_layer_incrementally and changed into a generator that
4400 yields True every 500 shapes. Used by render_map_incrementally to
4401 render shape layers incrementally
4402
4403 * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
4404 map and region parameters which are now in the constructor
4405 (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
4406 the inherited render_map_incrementally.
4407 (BaseRenderer.draw_shape_layer): Removed.
4408 (ScreenRenderer.draw_selection_incrementally): New. The selection
4409 drawing part of the removed draw_shape_layer as a generator
4410 (ScreenRenderer.layer_shapes): Update because of the region
4411 parameter change
4412 (ExportRenderer.__init__): New. Extend the inherited constructor
4413 with the destination region for the drawing
4414 (ExportRenderer.RenderMap): Removed the map and region parameters
4415 which are now in the constructor
4416
4417 * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
4418 bitmap suitable for a preview in a tool
4419 (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
4420 bitmap
4421 (MapPrintout.draw_on_dc): Adapt to new renderer interface
4422 (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
4423 exists
4424 (MapCanvas.OnIdle): Update the logic to deal with incremental
4425 rendering and the selection bitmap
4426 (MapCanvas._do_redraw): Handle the instantiation of the render
4427 iterator and the redraws during rendering
4428 (MapCanvas._render_iterator): New. Generator to incrementally
4429 redraw both bitmaps
4430 (MapCanvas.Export): Adapt to new renderer interface.
4431 (MapCanvas.full_redraw): Reset the selection bitmap and the
4432 renderer iterator too
4433 (MapCanvas.redraw_selection): New. Force a redraw of the selection
4434 bitmap
4435 (MapCanvas.shape_selected): Only redraw the selection bitmap
4436
4437 * test/test_baserenderer.py
4438 (TestBaseRenderer.test_polygon_no_projection)
4439 (TestBaseRenderer.test_raster_no_projection)
4440 (TestBaseRenderer.test_point_map_projection)
4441 (TestBaseRenderer.test_point_layer_and_map_projection)
4442 (TestBaseRenderer.test_point_layer_projection)
4443 (TestBaseRenderer.test_point_with_classification): Adapt to new
4444 renderer interface
4445
4446 2003-10-24 Bernhard Herzog <[email protected]>
4447
4448 * libraries/thuban/wxproj.cpp (draw_polygon_shape)
4449 (point_in_polygon_shape, shape_centroid): Raise an exception if
4450 the shape can't be read. Previously invalid shape ids would lead
4451 to a segfault.
4452
4453 * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
4454 New. test whether an exception is raised for invalid shape ids
4455
4456 2003-10-24 Jan-Oliver Wagner <[email protected]>
4457
4458 * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
4459 as alias for 'latlong'.
4460
4461 * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
4462 as alias for 'latlong'.
4463
4464 2003-10-24 Jan-Oliver Wagner <[email protected]>
4465
4466 * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
4467 the projection even for the UnknownPanel.
4468 (UnknownProjPanel.__init__): Define the text and create the textctrl
4469 widget.
4470 (UnknownProjPanel._DoLayout): Replaced static text widget by the
4471 textctrl created in __init__.
4472 (UnknownProjPanel.SetProjection): Set the text for the text ctrl
4473 including the parameters of the projection.
4474
4475 2003-10-24 Jan-Oliver Wagner <[email protected]>
4476
4477 * Resources/Projections/epsg.proj: New. This is a list of
4478 EPSG codes with parameters for proj. The list has been
4479 generated using devtools/create_epsg.py based on the
4480 file nad/epsg of the proj 4.4.7 package. Four projection
4481 definitions have been deleted as they are not accepted by proj:
4482 "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
4483 and "HD72 / EOV".
4484
4485 2003-10-22 Bernhard Herzog <[email protected]>
4486
4487 Some more tweaks to the projection dialog which should fix RT
4488 #1886.
4489
4490 * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
4491 the ProjFile's messages and call the base class methods correctly
4492 (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
4493 flag on the newly selected item too. Otherwise some other item is
4494 focused and the first time the focus is moved with the keyboard
4495 the selection moves in unexpected ways.
4496
4497 * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
4498 focus on the OK button, only on the projection list. That way the
4499 list really has the focus initially
4500 (ProjFrame.OnClose): Call the projection list's Destroy method to
4501 make it unsubscribe all messages
4502
4503 2003-10-21 Bernhard Herzog <[email protected]>
4504
4505 Rework the projection dialog to fix a few bugs, including RT 2166
4506 and most of 2168
4507
4508 * Thuban/UI/projlist.py: New. The class ProjectionList is a
4509 special wxListCtrl to show a list of projections in a more MVC
4510 fashion
4511
4512 * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
4513 throughout the class. The main change is to use the ProjectionList
4514 class instead of a normal wxListBox. Also, add an explicit
4515 "Unknown" projection to the projection choice control.
4516 (ProjPanel.__init__): Add an "unknown" ellipsoid
4517 (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
4518 instantiation of the panel's controls to make the tab-order more
4519 natural
4520
4521 2003-10-21 Bernhard Herzog <[email protected]>
4522
4523 * test/test_load.py (TestSingleLayer.file_contents)
4524 (TestSingleLayer.test): Add non-ascii characters to the titles of
4525 session, map and layer. This is effectively a port of the
4526 TestUnicodeStrings test in test_load_0_8.py which for some reason
4527 was only added there.
4528
4529 * test/test_load_0_9.py (TestSingleLayer.file_contents)
4530 (TestSingleLayer.test): Same as in test_load.py: add non-ascii
4531 characters to the titles of session, map and layer,.
4532
4533 2003-10-21 Bernhard Herzog <[email protected]>
4534
4535 Add EPSG projection handling to .thuban files
4536
4537 * test/test_save.py (SaveSessionTest.dtd)
4538 (SaveSessionTest.testEmptySession)
4539 (SaveSessionTest.testLayerProjection)
4540 (SaveSessionTest.testRasterLayer)
4541 (SaveSessionTest.testClassifiedLayer)
4542 (SaveSessionTest.test_dbf_table)
4543 (SaveSessionTest.test_joined_table)
4544 (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
4545 (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
4546 use a and epsg projection to test saving them
4547
4548 * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
4549 namespace
4550 (TestLayerVisibility.file_contents, TestLabels.file_contents)
4551 (TestLayerProjection.file_contents)
4552 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
4553 (TestPostGISLayer.file_contents)
4554 (TestPostGISLayerPassword.file_contents)
4555 (TestLoadError.file_contents, TestLoadError.test): Update to use
4556 1.0-dev namespace
4557 (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
4558 use 1.0-dev namespace and use an EPSG projection to test whether
4559 loading it works
4560
4561 * test/test_load_0_9.py: New. Effectively a copy of test_load.py
4562 as of Thuban 0.9. These are now tests to determine whether Thuban
4563 can still read files generated by Thuban 0.9
4564
4565 * Thuban/Model/save.py (SessionSaver.write)
4566 (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
4567 namespace
4568 (SessionSaver.write_projection): Write the projection's epsg
4569 attribute
4570
4571 * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
4572 thuban-1.0-dev.dtd namespace
4573 (SessionLoader.check_attrs): Allow a callable object as conversion
4574 too
4575 (SessionLoader.start_projection, SessionLoader.end_projection)
4576 (SessionLoader.start_parameter): Handle the epsg attribute and
4577 rename a few instance variables to lower case
4578
4579 * Resources/XML/thuban-1.0.dtd: New. Only difference to
4580 thuban-0.9.dtd is the epsg attribute for projections.
4581
4582 2003-10-21 Bernhard Herzog <[email protected]>
4583
4584 * test/runtests.py (main): Let the user specify which tests to run
4585 on the command line
4586
4587 * test/support.py (ThubanTestResult.getDescription): Override to
4588 give a better short description. The description can be used as a
4589 parameter to run_tests to run that particular test in isolation.
4590
4591 2003-10-21 Frank Koormann <[email protected]>
4592
4593 Popup menu for legend. Scheduled for the 1.2 release this was too
4594 simple to implement: The popup menu is bound to the legend tree, while
4595 the events are hanlded by its anchestor, the legend panel. This
4596 allows reuse of all the event handlers already implemented for the
4597 legend toolbar buttons.
4598
4599 * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
4600 to add handlers for the events issued by the popup menu.
4601 (LegendPanel._OnToggleVisibility): Handler for toggling layer
4602 visibility event
4603 (LegendPanel._OnProjection): Handler for layer projection event.
4604 (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
4605 (LegendTree._OnRightClick): Event handler for right click, select item
4606 and pop up menu.
4607 (LegendTree.ToggleVisibility): Toggle layer visibility
4608 (LegendTree.LayerProjection): Raise layer projection dialog for
4609 current layer.
4610
4611 2003-10-21 Bernhard Herzog <[email protected]>
4612
4613 * Resources/Projections/defaults.proj: Use correct DOCTYPE
4614 declaration. The top-level element is projectionlist not projfile
4615
4616 2003-10-20 Bernhard Herzog <[email protected]>
4617
4618 * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
4619 method to write a projfile and display a busy cursor and error
4620 dialogs.
4621 (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
4622 (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
4623 (ProjFrame.__FillAvailList): Translate "<None>" too and display a
4624 busy cursor while loading the user and system prj files.
4625
4626 2003-10-16 Bernhard Herzog <[email protected]>
4627
4628 * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
4629 ProjFile objects
4630 (clear_proj_file_cache): New function to clear the cache. Mainly
4631 useful for use by the test suite
4632 (read_proj_file): Use the cache.
4633
4634 * test/test_proj.py (TestProjFile): Clarify the doc-string
4635 (ProjFileReadTests): Update doc-string
4636 (ProjFileReadTests.test_get_system_proj_file): Check whether the
4637 system proj files is cached.
4638 (ProjFileLoadTestCase): New base class for the proj file tests
4639 derived from support.FileLoadTestCase to provide some common
4640 behavior.
4641 (TestLoadingProjFile)
4642 (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
4643 (TestProjFileWithInvalidParameters.file_contents): Derive from
4644 ProjFileLoadTestCase
4645 (TestLoadingProjFile.test_caching): New. Test whether the cache
4646 works
4647
4648 2003-10-16 Silke Reimer <[email protected]>
4649
4650 * debian/*: New directory with configuration files for building a thuban
4651 deb-package.
4652
4653 2003-10-14 Bernhard Herzog <[email protected]>
4654
4655 * test/test_proj.py: Execute support.run_tests when run as
4656 __main__ so that missing unsubscribes are detected
4657 (TestProjFile.tearDown): Destroy the proj_file properly
4658
4659 2003-10-14 Bernhard Herzog <[email protected]>
4660
4661 * Thuban/Model/messages.py (PROJECTION_ADDED)
4662 (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
4663 the ProjFile objects
4664
4665 * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
4666 easily send messages when the projections change
4667 (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
4668 when the change was successful
4669
4670 * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
4671 proj file messages
4672 (TestProjFile.test_add_remove)
4673 (TestProjFile.test_remove_non_existing)
4674 (TestProjFile.test_replace)
4675 (TestProjFile.test_replace_non_existing): Test whether the right
4676 messages are sent
4677
4678 2003-10-14 Bernhard Herzog <[email protected]>
4679
4680 * test/test_proj.py (TestProjFile.test): Refactor into several
4681 tests
4682 (TestProjFile.test_add_remove)
4683 (TestProjFile.test_remove_non_existing)
4684 (TestProjFile.test_replace)
4685 (TestProjFile.test_replace_non_existing): Some of the new
4686 individual test cases
4687 (TestProjFileSimple): New class for the rest of the test cases
4688 that came out of the refactoring
4689 (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
4690 derived classes don't have to
4691
4692 2003-10-13 Bernhard Herzog <[email protected]>
4693
4694 Add an optional EPSG code to the projection objects and extend the
4695 .proj file format accordingly.
4696
4697 * Resources/XML/projfile.dtd (element projection): Add epsg
4698 attribute
4699
4700 * Thuban/Model/proj.py (Projection.__init__): New parameter and
4701 instance variable epsg. Update doc-string
4702 (Projection.EPSGCode, Projection.Label): New methods to provide
4703 access to EPSG code and a label for use in dialogs
4704
4705 * Thuban/Model/resource.py (ProjFileReader.start_projection)
4706 (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
4707 Handle the epsg code attribute when reading or writing proj files
4708
4709 * Thuban/UI/projdialog.py (ProjFrame._OnSave)
4710 (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
4711 (ProjFrame.__FillAvailList): Use the projection's Label method to
4712 get the string for the list box
4713
4714 * test/test_proj.py (TestProjection.test_label)
4715 (TestProjection.test_label_epsg)
4716 (TestProjection.test_epsgcode_for_non_epsg_projection)
4717 (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
4718 for the label and EPSGCode methods
4719 (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
4720 (WriteProjFileTests.test_write_empty_file): Create the ProjFile
4721 objects in the test cases and put the expected contents into the
4722 test case methods too. Update doTestWrite accordingly
4723 (TestLoadingProjFile)
4724 (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
4725 read tests from TestProjFile.
4726 (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
4727 tests are now in the new classes.
4728 (sample_projfile, sample_projfile_data)
4729 (sample_projfile2, sample_projfile_data2): Removed. Not used
4730 anymore.
4731 (TestProjFile.test_read_unreadable_file): No need to reset the
4732 permissions at the end anymore since we use a unique filename
4733
4734 2003-10-13 Bernhard Herzog <[email protected]>
4735
4736 * test/test_proj.py: Some more refactoring of the test cases
4737 (ProjFileTest): New base class for the proj file tests.
4738 (TestProjFile): Derive from ProjFileTest
4739 (TestProjFile.test_read_unreadable_file)
4740 (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
4741 the new filename method to get a unique filename
4742 (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
4743 (WriteProjFileTests): New class for proj file write tests.
4744 Contains the write test that were in TestProjFile originally.
4745
4746 2003-10-13 Bernhard Herzog <[email protected]>
4747
4748 * test/test_proj.py (TestProjFile.testRead)
4749 (TestProjFile.test_read_non_existing_file)
4750 (TestProjFile.test_read_unreadable_file)
4751 (TestProjFile.test_read_empty_file): Split into several methods.
4752
4753 2003-10-10 Bernhard Herzog <[email protected]>
4754
4755 * Thuban/UI/sizers.py: New file with custom sizers.
4756
4757 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
4758 all projection type specific panels and put them into a
4759 NotebookLikeSizer. This way the dialog doesn't change its size
4760 when a different projection is selected
4761 (ProjFrame.__init__): Rename projection_panels
4762 projection_panel_defs and reuse projection_panels for a list of
4763 the instantiated panels.
4764 (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
4765 (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
4766 the panels
4767 (UnknownProjPanel._DoLayout): Place the newlines in the message
4768 differently to make the panel narrower.
4769 (TMPanel._DoLayout): Layout the parameters in one column.
4770
4771 2003-10-10 Bernhard Herzog <[email protected]>
4772
4773 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
4774 that contains all the setup for the dialog's widgets, layout and
4775 event handling.
4776 (__): Call build_dialog to build the dialog.
4777 (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
4778 Their functionality is now in build_dialog
4779 (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
4780 (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
4781 (ProjFrame.__DoOnProjChoice): Small updates due to slightly
4782 different widget names and hierarchy introduced with build_dialog.
4783
4784 2003-10-10 Bernhard Herzog <[email protected]>
4785
4786 * README: Fix typo.
4787
4788 2003-10-09 Bernhard Herzog <[email protected]>
4789
4790 * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
4791 projection is already in the list. This is *a lot* faster when
4792 loading files with hundreds of projections since it saves a linear
4793 search. OTOH this will allow adding the same projection to the
4794 user.proj file multiple times in the projection dialog but we'll
4795 deal with that later
4796
4797 2003-10-09 Jan-Oliver Wagner <[email protected]>
4798
4799 * devtools: New. Directory for developer tools that are not intended
4800 for the regular user.
4801
4802 * devtools/create_epsg.py: New. Convert the epsg file of proj into
4803 a python .proj file.
4804
4805 2003-10-09 Bernhard Herzog <[email protected]>
4806
4807 * test/test_proj.py
4808 (TestProjection.test_get_parameter_without_equals_sign): New. Test
4809 whether GetParameter handles parameters without "=" sign correctly
4810
4811 * Thuban/Model/proj.py (Projection.GetParameter): Handle
4812 parameters that do not contain a "=". Update the doc-string
4813
4814 2003-10-08 Bernhard Herzog <[email protected]>
4815
4816 * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
4817 length limit on the projname text control
4818
4819 2003-10-08 Bernhard Herzog <[email protected]>
4820
4821 * test/test_proj.py (TestProjection.test_get_projection_units_geo)
4822 (TestProjection.test_get_projection_units_normal): New. Tests for
4823 the Projection.GetProjectedUnits method
4824
4825 2003-10-08 Jan-Oliver Wagner <[email protected]>
4826
4827 * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
4828 Added missing 'val' parameter.
4829
4830 2003-10-08 Bernhard Herzog <[email protected]>
4831
4832 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
4833 projection type of the currently selected projection is not known,
4834 i.e. there's no panel for it, use the UnknownProjPanel
4835 (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
4836 the actual replacing of the proj panel into the new method
4837 _show_proj_panel.
4838 (UnknownProjPanel): Add doc-string.
4839 (UnknownProjPanel._DoLayout): Insert a newline into the text so
4840 that the panel is not so wide.
4841
4842 2003-10-08 Bernhard Herzog <[email protected]>
4843
4844 * Thuban/Model/resource.py (read_proj_file): Return the warnings
4845 too. Update the doc-string
4846 (get_proj_files): Removed. It wasn't used anywhere
4847 (get_system_proj_files, get_system_proj_file): Rename to
4848 get_system_proj_file and return the ProjFile object and not a list
4849 of ProjFile objects. Update the callers.
4850 (get_user_proj_files, get_user_proj_file): Rename to
4851 get_user_proj_file return the ProjFile object and not a list of
4852 ProjFile objects. Update the callers.
4853 (ProjFileReader.__init__): New instance variable for the warnings.
4854 Rename the __pf ivar to projfile. Update the methods referring to
4855 __pf
4856 (ProjFileReader.end_projection): Catch any errors raised when
4857 instantiating the projection and record that as an error. The
4858 projection will not be in the final ProjFile object.
4859 (ProjFileReader.GetWarnings): New method to return the warnings.
4860
4861 * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
4862 show the warnings from the projfile reader
4863 (ProjFrame._OnImport): Deal with any warnings returned by
4864 read_proj_file
4865 (ProjFrame.__FillAvailList): Deal with any warnings returned by
4866 get_system_proj_file or get_user_proj_file.
4867
4868 * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
4869 (TestProjFileWithInvalidParameters.file_contents): New test cases
4870 to test whether read_proj_file handles invalid projection
4871 parameters correctly
4872 (TestProjFile.test_get_system_proj_file): New. Simple test for
4873 resource.get_system_proj_file
4874
4875 2003-10-07 Bernhard Herzog <[email protected]>
4876
4877 * test/test_derivedshapestore.py
4878 (TestDerivedShapeStoreExceptions.tearDown): Clear the session
4879 properly so that the temporary directories get deleted correctly
4880
4881 2003-10-06 Bernhard Herzog <[email protected]>
4882
4883 Handle the title changes in a proper MVC way.
4884
4885 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
4886 canvas' TITLE_CHANGED messages
4887 (MainWindow.update_title): New. Update the main window's title
4888 (MainWindow.__SetTitle): Removed. Use update_title instead.
4889 (MainWindow.SetMap): Use update_title instead of __SetTitle
4890 (MainWindow.RenameMap): Do change the window title explicitly
4891 here. That's handled in a proper MVC way now.
4892 (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
4893 messages
4894
4895 * Thuban/Lib/connector.py (Conduit): New class to help classes
4896 that forward messages
4897
4898 * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
4899 (ViewPort): Derive from Conduit instead of Publisher
4900 (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
4901 when calling the inherited versions
4902 (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
4903 methods to subscribe and unsubscribe map messages
4904 (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
4905 handle the map subscriptions
4906 (ViewPort.Map, ViewPort.map_projection_changed)
4907 (ViewPort.layer_projection_changed): Add or update doc-strings
4908
4909 * test/test_connector.py (TestPublisher.test_issue_simple): Fix
4910 typo
4911 (MyConduit): Helper class for the Conduit test.
4912 (TestConduit): Test cases for Conduit
4913
4914 * test/test_connector.py: Use support.run_tests as main.
4915
4916 * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
4917 the TITLE_CHANGED messages
4918 (ViewPortTest.test_forwarding_title_changed): New test to check
4919 whether the viewport forwards the map's TITLE_CHANGED messages
4920 (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
4921 after the port's because the latter may require a still functional
4922 map.
4923
4924 2003-10-06 Bernhard Herzog <[email protected]>
4925
4926 * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
4927 doc-string
4928
4929 2003-10-06 Bernhard Herzog <[email protected]>
4930
4931 * test/test_viewport.py (ViewPortTest.setUp)
4932 (SimpleViewPortTest.test_init_with_size): Move the test for the
4933 initial size as a constructor parameter from ViewPortTest.setUp
4934 method to a new separate test in SimpleViewPortTest.
4935
4936 2003-10-06 Bernhard Herzog <[email protected]>
4937
4938 * test/test_viewport.py (MockView): New class derived from
4939 ViewPort with a mock implementation of GetTextExtent to be used in
4940 the test cases
4941 (ViewPortTest.setUp): Use MockView instead of ViewPort
4942
4943 * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
4944 into what would be a "pure virtual function" in C++: always raise
4945 NotImplementedError. Mock implementations for test cases don't
4946 belong into the real code
4947
4948 2003-10-02 Bernhard Herzog <[email protected]>
4949
4950 * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
4951 close the dbf file we create so that it's contents have been
4952 written properly.
4953
4954 * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
4955 libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
4956 Update to shapelib 1.2.10
4957
4958 2003-10-01 Jan-Oliver Wagner <[email protected]>
4959
4960 * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
4961 it annoys lintian which warns about these files not being
4962 executable. The #! isn't necessary here since if you absolutely
4963 must execute them you can always say "python <filename>".
4964
4965 2003-09-26 Bernhard Herzog <[email protected]>
4966
4967 * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
4968 only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
4969 is ported to a newer the import will fail, so it should be noticed
4970 immediately that this function is gone.
4971 Fixes RT#1919
4972
4973 2003-09-26 Bernhard Herzog <[email protected]>
4974
4975 Add a DTD for the projection files and make thuban write valid
4976 projection files
4977
4978 * Resources/XML/projfile.dtd: New. DTD for thuban's projection
4979 files
4980
4981 * Thuban/Model/resource.py (ProjFileSaver.write): Use
4982 'projectionlist' as the name in the document type declaration so
4983 that it matches the element type of the root element.
4984
4985 * test/test_proj.py (sample_projfile, sample_projfile2): Use
4986 'projectionlist' as the name in the document type declaration just
4987 as it is done now in the files thuban would write
4988 (sample_projfile, sample_projfile_data): Fix spelling of
4989 "Mercator"
4990 (TestProjFile.doTestWrite): Validate the written and the expected
4991 XML data
4992 (TestProjFile): Derive from ValidationTest so that we can run xml
4993 validation tests
4994
4995 2003-09-24 Bernhard Herzog <[email protected]>
4996
4997 * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
4998 modify the list returned by map.Layers() in place since it is the
4999 actual list of layers used by the map.
5000
5001 2003-09-23 Jan-Oliver Wagner <[email protected]>
5002
5003 * Doc/manual/thuban-manual.xml: Added subsection to chapter
5004 Extensions to describe the extensions coming with the Thuban
5005 standard package (gns2shp and importAPR).
5006
5007 2003-09-23 Bernhard Herzog <[email protected]>
5008
5009 * libraries/thuban/wxproj.cpp (project_point): if there's an
5010 inverse but no forward projection, convert to degrees after
5011 applying the inverse projection. Fixes RT#2096
5012
5013 * test/test_wxproj.py: New. Test cases for wxproj.so. One test
5014 implicitly tests for the fix to RT#2096
5015
5016 * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
5017 Check that the sequences have the same lengths
5018
5019 * Resources/Projections/defaults.proj (Geographic projection): Use
5020 a much more precise value for the to_meter attribute.
5021
5022 2003-09-22 Bernhard Herzog <[email protected]>
5023
5024 * test/support.py (initthuban): Make sure to unset the LANG env.
5025 var. so that tests that compare translated strings work. Solves RT
5026 #2094
5027
5028 2003-09-22 Jan-Oliver Wagner <[email protected]>
5029
5030 Small improvement of APR import.
5031
5032 * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
5033 Added tests for text-ranges.
5034
5035 * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
5036 returns a string object if the range is based on text.
5037
5038 * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
5039 range retrieval.
5040
5041 2003-09-22 Jan-Oliver Wagner <[email protected]>
5042
5043 Initial version of the importAPR extension which is in
5044 experimental state.
5045
5046 * /Extensions/importAPR/, /Extensions/importAPR/samples/,
5047 /Extensions/importAPR/test/: New directories.
5048
5049 * /Extensions/importAPR/samples/README: New: Howto load the samples.
5050
5051 * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
5052 file which refers to the Thuban Iceland demo data.
5053
5054 * /Extensions/importAPR/test/README: New: Howto execute the tests.
5055
5056 * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
5057
5058 * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
5059 as in '.apr'-files.
5060
5061 * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
5062 ODB Objects as in '.apr', '.avl' and other files.
5063
5064 * /Extensions/importAPR/__init__.py: New: Init to make this
5065 directory a package.
5066
5067 * /Extensions/importAPR/importAPR.py: New: Import a ArcView
5068 project file (.apr) and convert it to Thuban.
5069
5070 2003-09-22 Jan-Oliver Wagner <[email protected]>
5071
5072 * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
5073
5074 2003-09-19 Jan-Oliver Wagner <[email protected]>
5075
5076 * Doc/manual/thuban-manual.xml: Extended section 'Installation'
5077 with description on RPM installation and RPM binary package
5078 creation.
5079
5080 2003-09-18 Bernhard Herzog <[email protected]>
5081
5082 * setup.py (data_files): Only add the mo files if the Locales
5083 directory actually exists, so that setup.py works with a fresh CVS
5084 checkout
5085
5086 2003-09-12 Jan-Oliver Wagner <[email protected]>
5087
5088 * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
5089 in viewport, not anymore in view
5090
5091 2003-09-04 Jan-Oliver Wagner <[email protected]>
5092
5093 Introducing first Extension (gns2shp).
5094
5095 * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
5096
5097 * Extensions/__init__.py: New. init to make this dir a package.
5098
5099 * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
5100
5101 * Extensions/gns2shp/test/README: New. some info on this test directory.
5102
5103 * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
5104
5105 * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
5106 of Shapefile from GNS text file format
5107
5108 2003-09-03 Jan-Oliver Wagner <[email protected]>
5109
5110 Fix/workaround for bug #2019:
5111 https://intevation.de/rt/webrt?serial_num=2019
5112
5113 * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
5114 (IdentifyView.__init__): Added another button that allows to
5115 stop the identify mode.
5116 (IdentifyView.OnStop): New. Stops the identify mode.
5117
5118 2003-09-03 Jan-Oliver Wagner <[email protected]>
5119
5120 Introducing a new exception dialog that allows to exit the
5121 application immediately.
5122 This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
5123
5124 * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
5125
5126 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
5127 Made strings available to translations. Exchanged the simple
5128 ScrolledMessageDialog by the new ExceptionDialog.
5129
5130 2003-09-01 Bernhard Herzog <[email protected]>
5131
5132 * NEWS: New. Summary of changes and release notes.
5133
5134 * MANIFEST.in: Add NEWS
5135
5136 2003-09-01 Bernhard Herzog <[email protected]>
5137
5138 * MANIFEST.in: Correct the include statement for the mo-files and
5139 include the documentation too.
5140
5141 * setup.py (data_files): Add the .mo files
5142 (setup call): Up to version 0.9.0
5143
5144 2003-09-01 Bernhard Herzog <[email protected]>
5145
5146 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
5147 parameter list to just parent and session
5148 (ChooseDBTableDialog.__set_properties): Removed. Setting the
5149 selection of empty list boxes is not allowed (and produces C++
5150 assertion errors) and the rest of the setup is better done in
5151 __init__ anyway.
5152 (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
5153 (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
5154 builtins True/False for booleans to avoid warnings from wxPython
5155
5156 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
5157 ChooseDBTableDialog constructor parameters.
5158
5159 2003-09-01 Bernhard Herzog <[email protected]>
5160
5161 * Thuban/Model/postgisdb.py
5162 (PostGISTable): Extend doc-string
5163 (PostGISTable._fetch_table_information): Set the column index
5164 correctly, pretending ignored columns don't exist.
5165
5166 * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
5167 for postgis tables with data types not yet supported by thuban.
5168
5169 2003-08-29 Bernhard Herzog <[email protected]>
5170
5171 * HOWTO-Release: Tweak item about running the tests.
5172
5173 2003-08-29 Jan-Oliver Wagner <[email protected]>
5174
5175 * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
5176
5177 2003-08-29 Bernhard Herzog <[email protected]>
5178
5179 Add some missing parameters to projections. Proj complains about
5180 them on windows but for some reason not on Linux.
5181
5182 * test/test_save.py (SaveSessionTest.testLayerProjection): Add
5183 missing required projection parameters
5184
5185 * test/test_proj.py (TestProjFile.test): Add missing required
5186 projection parameters
5187
5188 * test/test_load_0_8.py (TestLayerProjection.file_contents)
5189 (TestLayerProjection.test): Add missing required projection
5190 parameters and tests for them
5191
5192 * test/test_load.py (TestLayerProjection.file_contents)
5193 (TestLayerProjection.test): Add missing required projection
5194 parameters and tests for them
5195
5196 * test/test_layer.py (TestLayer.test_base_layer): Add missing
5197 required projection parameters
5198
5199 2003-08-29 Bernhard Herzog <[email protected]>
5200
5201 * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
5202 access the pj_errno because directly accessing pj_errno doesn't
5203 work on windows if the proj library is in a DLL
5204
5205 * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
5206
5207 2003-08-28 Bernhard Herzog <[email protected]>
5208
5209 * test/test_proj.py: Import things from Thuban after calling
5210 initthuban
5211
5212 * test/test_load.py (LoadSessionTest.filenames): New class
5213 variable with the filename attributes to normalize
5214 (LoadSessionTest.check_format): Pass self.filenames to
5215 sax_eventlist to normalize the filename attributes
5216
5217 * test/xmlsupport.py: Add cvs keywords
5218 (SaxEventLister.__init__): New parameter filenames which indicates
5219 attributes that contain filenames
5220 (SaxEventLister.startElementNS): Normalize the filename attributes
5221 with os.path.normpath
5222 (sax_eventlist): New parameter filenames to pass through to
5223 SaxEventLister
5224
5225 * test/test_derivedshapestore.py: Make this file callable as a
5226 program to execute the tests
5227 (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
5228 the session to self.session so that it gets destroyed properly
5229
5230 * test/test_layer.py (TestLayer.tearDown): Call the session's
5231 Destroy method
5232
5233 * test/test_map.py (TestMapBase.tearDown): Destroy self.session
5234 too if it exists
5235 (TestMapAddLayer.test_add_layer): Bind the session to self.session
5236 so that it gets destroyed properly
5237
5238 * test/postgissupport.py (reason_for_not_running_tests): Add a
5239 test for the existence of popen2.Popen4.
5240
5241 * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
5242 reliable way to destroy the sessions created in the test cases
5243 (SaveSessionTest.test_dbf_table): Bind the session to self.session
5244 so that it gets destroyed properly
5245 (SaveSessionTest.testLayerProjection): Bind the session to
5246 self.session so that it gets destroyed properly
5247
5248 * test/test_session.py (UnreferencedTablesTests.tearDown): Make
5249 sure that the session is destroyed properly
5250
5251 * test/test_shapefilestore.py: Make this callable as a program to
5252 execute the tests
5253
5254 * test/test_scalebar.py: Remove unnecessary import of _ from
5255 Thuban
5256
5257 * test/support.py (print_garbage_information): Call initthuban
5258 here because it may be called indirectly from test cases that test
5259 test support modules which do not use anything from thuban itself
5260 (ThubanTestProgram.runTests): Remove unnecessary debug print
5261
5262 2003-08-28 Bernhard Herzog <[email protected]>
5263
5264 * Thuban/version.py (longversion): Update to 0.9
5265
5266 * Thuban/UI/mainwindow.py: Remove some unused imports
5267
5268 * README: Add section about required additional software. Add date
5269 and revision CVS keywords
5270
5271 * HOWTO-Release: Add item about the translations. Add date and
5272 revision CVs keywords and change formatting to match README a bit
5273 better
5274
5275 * po/de.po: Update for 0.9
5276
5277 * test/README: Tweak the wording a little because many tests are
5278 not really unittest.
5279
5280 2003-08-27 Bernhard Herzog <[email protected]>
5281
5282 As preparation for the 0.9 release, switch thuban files to a
5283 non-dev namespace
5284
5285 * Thuban/Model/save.py (SessionSaver.write_session): Write files
5286 with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
5287 namespace
5288
5289 * Thuban/Model/load.py (SessionLoader.__init__): Accept the
5290 http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
5291
5292 * test/test_save.py (SaveSessionTest.dtd)
5293 (SaveSessionTest.testEmptySession)
5294 (SaveSessionTest.testSingleLayer)
5295 (SaveSessionTest.testLayerProjection)
5296 (SaveSessionTest.testRasterLayer)
5297 (SaveSessionTest.testClassifiedLayer)
5298 (SaveSessionTest.test_dbf_table)
5299 (SaveSessionTest.test_joined_table)
5300 (SaveSessionTest.test_save_postgis): Update for new namespace
5301
5302 * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
5303 (TestLayerVisibility.file_contents, TestLabels.file_contents)
5304 (TestLayerProjection.file_contents)
5305 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
5306 (TestPostGISLayer.file_contents)
5307 (TestPostGISLayerPassword.file_contents)
5308 (TestLoadError.file_contents, TestLoadError.test): Update for new
5309 namespace
5310
5311 2003-08-27 Bernhard Herzog <[email protected]>
5312
5313 Make the table interface distinguish between row ids (an integer
5314 that uniquely identifies a row) and row ordinals (a simple row
5315 count from 0 to NumRows() - 1)
5316
5317 * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
5318 (PostGISTable.RowOrdinalToId): New methods to conver between row
5319 ids and row ordinals
5320 (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
5321 parameter row_is_ordinal to indicate whether the row parameter is
5322 the row id or the ordinal
5323
5324 * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
5325 (TransientTableBase.RowOrdinalToId)
5326 (AutoTransientTable.RowIdToOrdinal)
5327 (AutoTransientTable.RowOrdinalToId): Same new methods as in
5328 PostGISTable.
5329 (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
5330 (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
5331 Same new parameter as in PostGISTable.
5332
5333 * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
5334 (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
5335 (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
5336 (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
5337 (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
5338 parameter as in PostGISTable.
5339
5340 * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
5341 (DataTable.RowOrdinalToId): New methods to convert between row ids
5342 and row ordinals.
5343 (TableGrid.SelectRowById): New method to select a row based on its
5344 ID as opposed to its ordinal
5345 (DataTable.GetValue, TableGrid.OnRangeSelect)
5346 (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
5347 (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
5348 (LayerTableFrame.__init__): Convert between row ids and row
5349 ordinals as appropriate
5350
5351 * test/postgissupport.py (PostGISDatabase.__init__): Add
5352 doc-string.
5353 (PostGISDatabase.initdb): The optional third item in a tuple in
5354 tables is now a (key, value) list with additional arguments to
5355 pass to upload_shapefile
5356 (upload_shapefile): New parameter gid_offset to allow gids that
5357 are not the same as the shapeids in the shapefile
5358 (PostgreSQLServer.get_default_static_data_db): Use the new
5359 gid_offset to make the gids in landmarks 1000 higher than the
5360 shapeids in the shapefile
5361
5362 * test/test_viewport.py
5363 (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
5364 new shapeids in the landmarks table
5365
5366 * test/test_transientdb.py
5367 (TestTransientTable.run_iceland_political_tests)
5368 (TestTransientTable.test_transient_joined_table): Add tests for
5369 the new table methods and new keywords arguments.
5370
5371 * test/test_postgis_db.py
5372 (TestPostGISTable.test_read_row_as_dict_row_count_mode)
5373 (TestPostGISTable.test_read_value_row_count_mode)
5374 (TestPostGISTable.test_row_id_to_ordinal)
5375 (TestPostGISTable.test_row_oridnal_to_id): New test for the new
5376 table methods and the new arguments
5377 (TestPostGISShapestorePoint.test_shapes_in_region)
5378 (TestPostGISShapestorePoint.test_shape_raw_data)
5379 (TestPostGISShapestorePoint.test_shape_points)
5380 (TestPostGISShapestorePoint.test_shape_shapeid)
5381 (TestPostGISShapestorePoint.test_all_shapes)
5382 (TestPostGISTable.test_simple_query)
5383 (TestPostGISTable.test_simple_query)
5384 (TestPostGISTable.test_simple_query)
5385 (TestPostGISTable.test_read_value)
5386 (TestPostGISTable.test_read_row_as_dict): Adapt to the new
5387 shapeids in the landmarks table
5388
5389 * test/test_memory_table.py
5390 (TestMemoryTable.test_read_row_as_dict_row_count_mode)
5391 (TestMemoryTable.test_read_value_row_count_mode)
5392 (TestMemoryTable.test_row_id_to_ordinal)
5393 (TestMemoryTable.test_row_oridnal_to_id): New test for the new
5394 table methods and the new arguments
5395
5396 * test/test_dbf_table.py
5397 (TestDBFTable.test_read_row_as_dict_row_count_mode)
5398 (TestDBFTable.test_read_value_row_count_mode)
5399 (TestDBFTable.test_row_id_to_ordinal)
5400 (TestDBFTable.test_row_oridnal_to_id): New test for the new table
5401 methods and the new arguments
5402
5403 2003-08-26 Bernhard Herzog <[email protected]>
5404
5405 * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
5406 more postgis specific but much faster method to get the bounding
5407 box
5408
5409 2003-08-26 Bernhard Herzog <[email protected]>
5410
5411 * Thuban/Model/postgisdb.py (PostGISTable.Title)
5412 (PostGISShapeStore.AllShapes): Add these missing methods.
5413 (PostGISShapeStore.ShapesInRegion): No need to raise
5414 StopIteration. We can simply return
5415
5416 * test/test_postgis_db.py (TestPostGISTable.test_title)
5417 (TestPostGISShapestorePoint.test_all_shapes): New tests for the
5418 new methods
5419
5420 2003-08-25 Bernhard Herzog <[email protected]>
5421
5422 * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
5423
5424 * test/test_postgis_db.py (PolygonTests): New class containing
5425 those tests from TestPostGISShapestorePolygon that can also be
5426 used to test MUTLIPOLYGON tables
5427 (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
5428 so derive from that
5429 (TestPostGISShapestoreMultiPolygon): New class with tests for
5430 MUTLIPOLYGON tables
5431
5432 * test/postgissupport.py (PostGISDatabase.initdb): Allow the
5433 tables argument to have tuples with three items to override the
5434 WKT type used.
5435 (PostgreSQLServer.get_default_static_data_db): Use the above to
5436 create a polygon table with MUTLIPOLYGONs
5437 (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
5438 (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
5439 coords_to*
5440 (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
5441 (wkt_converter): New. Map WKT types to converters
5442 (upload_shapefile): New parameter force_wkt_type to use a
5443 different WKT type than the default
5444
5445 2003-08-25 Bernhard Herzog <[email protected]>
5446
5447 * Thuban/UI/application.py
5448 (ThubanApplication.run_db_param_dialog): New. Suitable as a
5449 db_connection_callback. Main difference is that the dialog run
5450 from this method doesn't have a parent so it can be used even when
5451 there is no main window
5452 (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
5453 no db_connection_callback was given. This way the dialog pops up
5454 even when the .thuban file was given as a command line parameter.
5455
5456 2003-08-25 Bernhard Herzog <[email protected]>
5457
5458 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
5459 before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
5460 which leads to an effectively frozen X session because the user
5461 can only interact with the dialog but the mouse is still grabbed
5462 by the canvas.
5463 Also, call the tool's Hide method before MouseLeftUp because
5464 MouseLeftUp may change the tool's coordinates.
5465
5466 2003-08-25 Bernhard Herzog <[email protected]>
5467
5468 * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
5469 LoadCancelled exceptions and handle them by returning immediately.
5470
5471 2003-08-25 Bernhard Herzog <[email protected]>
5472
5473 GUI part of loading sessions with postgis connections which may
5474 require user interaction to get passwords or updated parameters
5475
5476 * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
5477 bit nucer and be more generic.
5478 (DBFrame.OnAdd): Adapt to new DBDialog interface
5479
5480 * Thuban/UI/application.py (ThubanApplication.OpenSession): New
5481 optional parameter db_connection_callback which is passed to
5482 load_session.
5483
5484 * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
5485 Suitable as a db_connection_callback
5486 (MainWindow.OpenSession): Use self.run_db_param_dialog as the
5487 db_connection_callback of the application's OpenSession method
5488
5489
5490 2003-08-25 Bernhard Herzog <[email protected]>
5491
5492 Basic loading of sessions containing postgis connections:
5493
5494 * Thuban/Model/load.py (LoadError): Add doc-string
5495 (LoadCancelled): New exception class to indicate a cancelled load
5496 (SessionLoader.__init__): Add the db_connection_callback parameter
5497 which will be used by the loader to get updated parameters and a
5498 password for a database connection
5499 (SessionLoader.__init__): Add the new XML elements to the
5500 dispatchers dictionary
5501 (SessionLoader.check_attrs): Two new conversions, ascii to convert
5502 to a byte-string object and idref as a generic id reference
5503 (SessionLoader.start_dbconnection)
5504 (SessionLoader.start_dbshapesource): New. Handlers for the new XML
5505 elements
5506 (load_session): Add the db_connection_callback to pass through the
5507 SessionLoader
5508
5509 * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
5510 New classes to test loading of sessions with postgis database
5511 connections.
5512
5513 2003-08-25 Bernhard Herzog <[email protected]>
5514
5515 * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
5516 replace it and the comment with __BuildDate__ by the Source: and
5517 Id: cvs keywords as used in the other files.
5518
5519 2003-08-25 Bernhard Herzog <[email protected]>
5520
5521 * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
5522 LoadError when a required attribute is missing. The code used to
5523 be commented out for some reason, but probably should have been
5524 active.
5525
5526 * test/test_load.py (TestLoadError.test): Test the message in the
5527 LoadError too to make sure it really is about the missing
5528 attribute
5529
5530 2003-08-22 Bernhard Herzog <[email protected]>
5531
5532 * test/test_save.py (SaveSessionTest.test_dbf_table)
5533 (SaveSessionTest.test_joined_table): Add XML validation tests.
5534
5535 2003-08-22 Bernhard Herzog <[email protected]>
5536
5537 Implement saving a session with a postgis connection
5538
5539 * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
5540 elements for database connections and shapestores using db
5541 connections
5542 (session): Add the dbconnections to the content model
5543
5544 * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
5545 Write the db connections
5546 (SessionSaver.write_session): Call write_db_connections to write
5547 the connection before the data sources
5548 (SessionSaver.write_data_containers): Handle postgis shapestores
5549
5550 * test/test_save.py (SaveSessionTest.thubanids)
5551 (SaveSessionTest.thubanidrefs): Update for new DTD
5552 (SaveSessionTest.test_save_postgis): New. Test saving a session
5553 with postgis connections
5554
5555 * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
5556 (PostGISTable.TableName): New accessor methods for the connection
5557 and table name
5558
5559 * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
5560 (TestPostGISTable.test_dbname): New methods to test the new
5561 PostGISConnection methods
5562
5563 2003-08-22 Bernhard Herzog <[email protected]>
5564
5565 * Thuban/Model/postgisdb.py (ConnectionError): New exception class
5566 for exceptions occurring when establishing a Database connection
5567 (PostGISConnection.connect): Catch psycopg.OperationalError during
5568 connects and raise ConnectionError.
5569
5570 * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
5571 tests for database exceptions
5572
5573 2003-08-22 Bernhard Herzog <[email protected]>
5574
5575 Prepare the test suite for tests with required authentication
5576
5577 * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
5578 variables with two predefined users/passwords, one for the admin
5579 and one for a non-privileged user.
5580 (PostgreSQLServer.createdb): Pass the admin name to initdb and add
5581 the non-privileged user to the database and set the admin password
5582 (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
5583 Better error reporting
5584 (PostgreSQLServer.connection_params)
5585 (PostgreSQLServer.connection_string): New methods to return
5586 information about how to connect to the server
5587 (PostgreSQLServer.execute_sql): New. Convenience method to execute
5588 SQL statements
5589 (PostgreSQLServer.require_authentication): Toggle whether the
5590 server requires authentication
5591 (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
5592 Add or alter users
5593 (PostGISDatabase.initdb): Pass the admin name one the
5594 subprocesses' command lines. Grant select rights on
5595 geometry_columns to everybody.
5596 (upload_shapefile): Use the admin name and password when
5597 connecting. Grant select rights on the new table to everybody.
5598
5599 * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
5600 server's new methods to get the connection parameters.
5601
5602 * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
5603 (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
5604 server's new methods to get the connection parameters.
5605
5606 * test/test_postgis_db.py
5607 (TestPostGISConnection.test_gis_tables_empty)
5608 (TestPostGISConnection.test_gis_tables_non_empty)
5609 (PostGISStaticTests.setUp): Use the server's new methods to get
5610 the connection parameters.
5611
5612 2003-08-22 Bernhard Herzog <[email protected]>
5613
5614 * Thuban/UI/about.py (About.__init__): Add the psycopg version.
5615
5616 * Thuban/version.py: Add psycopg version
5617
5618 * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
5619 version of the psycopg module
5620
5621 2003-08-22 Bernhard Herzog <[email protected]>
5622
5623 * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
5624 (DBFrame.OnEdit): Removed because it's not used and wouldn't work
5625 at the moment. The functionality should probably be implemented
5626 some time, though.
5627 (DBFrame.OnRemove): Display a message if the connection can't be
5628 removed because it's still in use.
5629
5630 2003-08-22 Jan-Oliver Wagner <[email protected]>
5631
5632 * Thuban/UI/about.py (About.__init__): split up the huge about
5633 text into elements/lists for easier translation. This fixes bug
5634 https://intevation.de/rt/webrt?serial_num=2058
5635 Also, made some forgotten string available for the i18n.
5636
5637 2003-08-21 Bernhard Herzog <[email protected]>
5638
5639 Make postgis support really optional including insensitive menu
5640 items.
5641
5642 * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
5643 whether the postgis is supported.
5644
5645 * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
5646 to make postgis support optional
5647
5648 * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
5649 version of Thuban.Model.postgisdb.has_postgis_support
5650 (database_management command): Make it only sensitive if postgis
5651 is supported.
5652
5653 2003-08-21 Jan-Oliver Wagner <[email protected]>
5654
5655 * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
5656 (section Adding and Removing Layers): Added text and described
5657 multi-selection.
5658 (chapter Extensions): New.
5659
5660 2003-08-21 Jan-Oliver Wagner <[email protected]>
5661
5662 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
5663 settings to allow multiple files to load into the map.
5664 Also reduced selection to *.shp as a default.
5665
5666 2003-08-20 Bernhard Herzog <[email protected]>
5667
5668 Add dialogs and commands to open database connections and add
5669 database layers.
5670
5671 * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
5672 method to open the database connection management dialog
5673 (MainWindow.AddDBLayer): New method to add a layer from a database
5674 (_has_dbconnections): New helper function to use for sensitivity
5675 (database_management command, layer_add_db command): New commands
5676 that call the above new methods.
5677 (main_menu): Add the new commands to the menu.
5678
5679 * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
5680 (PostGISConnection.connect): Establish the actual connection in a
5681 separate method and call it in __init__. This makes it easier to
5682 override the behavior in test cases
5683 (PostGISConnection.BriefDescription): New method to return a brief
5684 description for use in dialogs.
5685
5686 * test/test_postgis_db.py (NonConnection): DB connection that
5687 doesn't actually connect
5688 (TestBriefDescription): New class with tests for the new
5689 BriefDescription method
5690
5691 2003-08-19 Jan-Oliver Wagner <[email protected]>
5692
5693 Moved anything from extensions to libraries.
5694
5695 * libraries: New.
5696
5697 * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
5698
5699 * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
5700 Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
5701 been moved here from thuban/extensions/pyprojection/
5702 See there in the Attic for the older history.
5703
5704 * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
5705 dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
5706 shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
5707 have been moved here from thuban/extensions/pyshapelib/
5708 See there in the Attic for the older history.
5709
5710 * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
5711 files have been moved here from thuban/extensions/shapelib/
5712 See there in the Attic for the older history.
5713
5714 * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
5715 gdalwarp.cpp, wxproj.cpp: These files have been moved here from
5716 thuban/extensions/thuban/
5717 See there in the Attic for the older history.
5718
5719 * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
5720
5721 * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
5722 gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
5723
5724 * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
5725 Moved to libraries/shapelib.
5726
5727 * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
5728 shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
5729 ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
5730 Moved to libraries/pyshapelib.
5731
5732 * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
5733 LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
5734 Moved to libraries/pyprojection.
5735
5736 * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
5737
5738 * extensions: Removed.
5739
5740 2003-08-19 Bernhard Herzog <[email protected]>
5741
5742 * test/test_viewport.py (ViewPortTest): We don't use the
5743 facilities of FileTestMixin so don't derive from it.
5744 (TestViewportWithPostGIS): New class with tests for using a
5745 viewport on a map with postgis layers.
5746
5747 2003-08-19 Bernhard Herzog <[email protected]>
5748
5749 Add the db connection management to the session.
5750
5751 * Thuban/Model/session.py (Session.__init__): New instance
5752 variable db_connections
5753 (Session.AddDBConnection, Session.DBConnections)
5754 (Session.HasDBConnections, Session.CanRemoveDBConnection)
5755 (Session.RemoveDBConnection): New methods to manage and query the
5756 db connections managed by the session
5757 (Session.OpenDBShapeStore): New method to open a shapestore from a
5758 db connection
5759
5760 * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
5761 messages for the db connection handling in the session
5762
5763 * test/test_postgis_session.py: New. test cases for the session's
5764 db connection handling with postgis connections
5765
5766 2003-08-19 Bernhard Herzog <[email protected]>
5767
5768 Add very basic postgis database support and the corresponding test
5769 cases. The test cases require a PostgreSQL + postgis installation
5770 but no existing database. The database will be created
5771 automatically by the test cases
5772
5773 * test/README: Add note about skipped tests and the requirements
5774 of the postgis tests.
5775
5776 * Thuban/Model/postgisdb.py: New. Basic postgis database support.
5777
5778 * test/test_postgis_db.py: New. Test cases for the postgis
5779 support.
5780
5781 * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
5782 format
5783
5784 * test/test_wellknowntext.py: New. Test cases for the
5785 wellknowntext parser
5786
5787 * test/postgissupport.py: New. Support module for tests involving
5788 a postgis database.
5789
5790 * test/support.py (execute_as_testsuite): Shut down the postmaster
5791 if it's still running after the tests
5792
5793 * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
5794 well known text format
5795
5796 2003-08-19 Jan-Oliver Wagner <[email protected]>
5797
5798 * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
5799 message dialog.
5800
5801 2003-08-18 Bernhard Herzog <[email protected]>
5802
5803 * test/support.py (ThubanTestResult.printErrors): Indent the
5804 reason for the skips in the output to make it a bit more readable.
5805 (execute_as_testsuite): New helper function to run a test suite
5806 and print some more information.
5807 (run_tests): Use execute_as_testsuite to run the tests
5808
5809 * test/runtests.py (main): Use execute_as_testsuite to run the
5810 tests
5811
5812 2003-08-18 Bernhard Herzog <[email protected]>
5813
5814 Fix some bugs in Thuban and the test suite that were uncovered by
5815 changes introduced in Python 2.3:
5816
5817 * Thuban/Model/table.py (DBFTable.__init__): Make sure the
5818 filename is an absolute name
5819
5820 * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
5821 filename is an absolute name
5822
5823 * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
5824 unique filename to save to and use the correct relative filename
5825 in the expected output.
5826 (SaveSessionTest.test_dbf_table): Use the correct relative
5827 filename in the expected output.
5828
5829 * test/test_layer.py (TestLayer.test_raster_layer): Update the
5830 test to check whether the filename is absolute.
5831
5832 2003-08-18 Jan-Oliver Wagner <[email protected]>
5833
5834 * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
5835
5836 2003-08-15 Bernhard Herzog <[email protected]>
5837
5838 Change the way shapes are returned by a shape store. The
5839 ShapesInRegion method returns an iterator over actual shape
5840 objects instead of a list of shape ids.
5841
5842 * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
5843 id.
5844 (ShapefileStore.ShapesInRegion): Return an iterator over the
5845 shapes which yields shape objects instead of returning a list of
5846 shape ids
5847 (ShapefileStore.AllShapes): New. Return an iterator over all
5848 shapes in the shape store
5849 (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
5850
5851 * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
5852 doc-string.
5853
5854 * Thuban/UI/baserenderer.py
5855 (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
5856 layer_shapes and make it return an iterator containg shapes
5857 instead of a list of ids.
5858 (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
5859 layer_shapes() change
5860
5861 * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
5862 (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
5863
5864 * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
5865 changes in the ShapesInRegion return value.
5866 (ViewPort._get_hit_tester): Remove commented out code
5867
5868 * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
5869 new return value.
5870 (SimpleShapeStore.AllShapes): New. Implement this method too.
5871
5872 * test/test_layer.py (TestLayer.test_arc_layer)
5873 (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
5874 (TestLayer.test_point_layer_with_projection)
5875 (TestLayer.test_derived_store): Adapt to changes in the
5876 ShapesInRegion return value.
5877
5878 * test/test_shapefilestore.py
5879 (TestShapefileStoreArc.test_shapes_in_region)
5880 (TestShapefileStorePolygon.test_shapes_in_region)
5881 (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
5882 in the ShapesInRegion return value.
5883 (TestShapefileStorePoint.test_all_shapes)
5884 (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
5885 methods
5886
5887 * test/test_derivedshapestore.py
5888 (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
5889 the ShapesInRegion return value.
5890 (TestDerivedShapeStore.test_all_shapes)
5891 (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
5892 methods
5893
5894 2003-08-15 Bernhard Herzog <[email protected]>
5895
5896 Make the renderers deal correctly with raw vs. python level
5897 representation of shape geometries
5898
5899 * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
5900 Return a flag useraw in addition to the callable and the parameter
5901 to indicate whether the callable can deal with the raw shape data
5902 or uses the higher level python lists of coordinates. The callable
5903 now should accept either the raw data or the return value of the
5904 shape's Points() method.
5905 (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
5906 change
5907 (BaseRenderer.projected_points): Instead of the shape id use the
5908 points list as parameter.
5909 (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
5910 (BaseRenderer.draw_point_shape): Adapt to projected_points()
5911 change and accept the points list as parameter instead of the
5912 shape id.
5913
5914 * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
5915 the useraw flag as required by the BaseRenderer
5916 (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
5917 changes.
5918
5919 * test/test_baserenderer.py
5920 (TestBaseRenderer.test_point_with_classification): New test for
5921 rendering a map with classifications.
5922
5923 2003-08-15 Bernhard Herzog <[email protected]>
5924
5925 * Thuban/UI/viewport.py (ViewPort.find_shape_at)
5926 (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
5927 (ViewPort._get_hit_tester, ViewPort.projected_points)
5928 (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
5929 (ViewPort._find_label_at): Split the find_shape_at method into
5930 several new methods and use the functions in the hit-test module.
5931
5932 * Thuban/UI/hittest.py: New module with Python-level hit-testing
5933 functions
5934
5935 * test/test_hittest.py: New. Test for the new hittest module
5936
5937 2003-08-15 Bernhard Herzog <[email protected]>
5938
5939 * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
5940 projection to all corners of the bounding box to get a better
5941 approximation of the projected bounding box
5942
5943 * test/test_layer.py (TestLayer.test_point_layer_with_projection):
5944 New. Test coordinate handling of a layer with a projection.
5945 Catches the bug fixed in Layer.ShapesInRegion
5946
5947 2003-08-15 Bernhard Herzog <[email protected]>
5948
5949 Move some of the mock objects in test_baserenderer into their own
5950 module so they can easily be used from other tests
5951
5952 * test/mockgeo.py: New test helper module with some mock objects
5953 for geometry related things like shapes, shapestores and
5954 projections.
5955
5956 * test/test_mockgeo.py: New. Tests for the new helper module
5957
5958 * test/test_baserenderer.py: Some of the mock-objects are in
5959 mockgeo now.
5960
5961 2003-08-12 Jan-Oliver Wagner <[email protected]>
5962
5963 * Thuban/UI/about.py (About.__init__): Added Björn Broscheit.
5964
5965 2003-08-12 Bernhard Herzog <[email protected]>
5966
5967 * po/de.po: New. German translations by Bjoern Broscheit
5968
5969 2003-08-12 Bernhard Herzog <[email protected]>
5970
5971 * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
5972 strings have to be one string literal.
5973
5974 2003-08-11 Bernhard Herzog <[email protected]>
5975
5976 * test/support.py (FloatComparisonMixin.assertPointListEquals):
5977 New. This method was used in various derived classes, but it's
5978 better to have it here.
5979
5980 * test/test_shapefilestore.py
5981 (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
5982 FloatComparisonMixin
5983
5984 * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
5985 It's now in FloatComparisonMixin
5986
5987 * test/test_derivedshapestore.py
5988 (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
5989 in FloatComparisonMixin
5990
5991 2003-08-11 Bernhard Herzog <[email protected]>
5992
5993 * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
5994 error message
5995
5996 2003-08-08 Jan-Oliver Wagner <[email protected]>
5997
5998 * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
5999 with version number.
6000 Changed title to reflect version number of Thuban.
6001
6002 2003-08-08 Jan-Oliver Wagner <[email protected]>
6003
6004 * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
6005 the list corresponds to the "About" web page.
6006
6007 2003-08-08 Bernhard Herzog <[email protected]>
6008
6009 * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
6010 Make sure translated strings are recognized as one string literal.
6011
6012 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
6013 Make sure translated strings are recognized as one string literal.
6014
6015 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
6016 translated strings are recognized as one string literal.
6017
6018 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
6019 sure translated strings are recognized as one string literal.
6020
6021 2003-08-07 Bernhard Herzog <[email protected]>
6022
6023 * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
6024 Simply delegates to the original shapestore.
6025
6026 * test/test_derivedshapestore.py
6027 (TestDerivedShapeStore.test_raw_format): New. Test case for
6028 DerivedShapeStore.RawShapeFormat
6029
6030 2003-08-07 Bernhard Herzog <[email protected]>
6031
6032 Add raw data interface to shape objects.
6033
6034 * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
6035 class to ShapefileShape which now holds shapefile specific
6036 information.
6037 (ShapefileShape.compute_bbox): Simplified to not cache any
6038 information. The way this method is used that shouldn't matter
6039 performance wise.
6040 (ShapefileShape.RawData): New. Return the shapeid which is the raw
6041 data format for shapes from shapefiles.
6042 (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
6043 in the shape objects returned by a shapestore. For a
6044 ShapefileStore this is always RAW_SHAPEFILE.
6045 (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
6046 method.
6047
6048 * test/test_shapefilestore.py
6049 (TestShapefileStore.test_raw_format): New test to test the raw
6050 format feature of shapes.
6051
6052 * Thuban/Model/layer.py: Remove the unused import of Shape from
6053 data. It was only there for interface compatibility but it's not
6054 used inside of Thuban and the generic Shape class has gone away.
6055
6056 * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
6057 the raw data format and only use an optimized version of its a
6058 shapefile.
6059
6060 2003-08-07 Bernhard Herzog <[email protected]>
6061
6062 * test/test_baserenderer.py (SimpleShape): Shape class for the
6063 tests.
6064 (SimpleShapeStore.Shape): Use SimpleShape instead of
6065 Thuban.Model.data.Shape to make the tests independed of the coming
6066 changes.
6067
6068 2003-08-07 Bernhard Herzog <[email protected]>
6069
6070 * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
6071 (ThubanTestProgram): New classes that extend the respective
6072 classes from unittest. These new version support skipping tests
6073 under certain expected conditions. In the Thuban test suite we
6074 uses this for tests that require the optional gdal support.
6075 (run_tests): Use ThubanTestProgram instead of the unittest.main()
6076
6077 * test/runtests.py (main): Use the new ThubanTestRunner instead of
6078 the normal one from unittest
6079
6080 * test/test_layer.py (TestLayer.test_raster_layer): If this test
6081 is not run because gdal support isn't available report this to the
6082 runner.
6083
6084 * test/test_baserenderer.py
6085 (TestBaseRenderer.test_raster_no_projection): Do not run this test
6086 if gdal support isn't available and report this to the runner.
6087
6088 2003-08-06 Bernhard Herzog <[email protected]>
6089
6090 Rearrange the renderers a bit, partly in preparation for changes
6091 required for the postgis merge, partly to make it more testable.
6092 Also make the representation of coordinates in Shapes more
6093 consistent.
6094
6095 * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
6096 this class is now in BaseRenderer. This class is now practically
6097 only a specialization of BaseRenderer for rendering to an actual
6098 wx DC.
6099 (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
6100 to get the shapetype specific rendering functions.
6101
6102 * Thuban/UI/baserenderer.py: New file with the basic rendering
6103 logic. The code in this file is completely independend of wx.
6104 (BaseRenderer): Class with the basic rendering logic
6105
6106 * test/test_baserenderer.py: New. Test cases for BaseRenderer
6107
6108 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
6109 error_on_redraw to guard agains endless loops and stack overflows
6110 when there's a bug in the rendering code that raises exceptions.
6111 (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
6112 rendering into a separate method _do_redraw so that error handling
6113 is a bit easier. When an exception occurs, set error_on_redraw to
6114 true. When it's true on entry to OnIdle do nothing and return
6115 immediately.
6116
6117 * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
6118 Shape object will always have the coordinates as a list of list of
6119 coordinate pairs (tuples).
6120 (Shape.compute_bbox): Adapt to new representation.
6121
6122 * Thuban/UI/viewport.py (ViewPort.find_shape_at)
6123 (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
6124 Shape objects.
6125
6126 * test/test_shapefilestore.py
6127 (ShapefileStoreTests.assertFloatTuplesEqual)
6128 (ShapefileStoreTests.assertPointListEquals): Rename to
6129 assertPointListEquals and change purpose to checking equality of
6130 the lists returned by Shape.Points().
6131 (TestShapefileStoreArc.test_shape)
6132 (TestShapefileStorePolygon.test_shape)
6133 (TestShapefileStorePoint.test_shape): Use the new
6134 assertPointListEquals instead of assertFloatTuplesEqual
6135
6136 * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
6137 (TestLayer.assertPointListEquals): Rename to assertPointListEquals
6138 and change purpose to checking equality of the lists returned by
6139 Shape.Points().
6140 (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
6141 (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
6142 (TestLayer.test_derived_store): Use the new assertPointListEquals
6143 instead of assertFloatTuplesEqual
6144
6145 * test/test_derivedshapestore.py
6146 (TestDerivedShapeStore.assertFloatTuplesEqual)
6147 (TestDerivedShapeStore.assertPointListEquals): Rename to
6148 assertPointListEquals and change purpose to checking equality of
6149 the lists returned by Shape.Points().
6150 (TestDerivedShapeStore.test_shape): Use the new
6151 assertPointListEquals instead of assertFloatTuplesEqual
6152
6153 2003-08-06 Jan-Oliver Wagner <[email protected]>
6154
6155 * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
6156 a bounding box. A dialog is raised in case, no bounding box
6157 is found. This fixes bug #2043:
6158 https://intevation.de/rt/webrt?serial_num=2043
6159
6160 2003-08-05 Bernhard Herzog <[email protected]>
6161
6162 * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
6163 object look like a Color instantiation. Formerly it looked like a
6164 tuple.
6165
6166 * test/test_color.py (TestColor.test_repr)
6167 (TestColor.test_equality, TestColor.test_inequality): New. test
6168 some more apects of the Color class
6169 (TestTransparent.test_repr, TestTransparent.test_hex)
6170 (TestTransparent.test_equality): New. Test cases for the
6171 Transparent object.
6172
6173 2003-08-04 Jan-Oliver Wagner <[email protected]>
6174
6175 * Doc/manual/thuban-manual.xml: a number of small improvements.
6176 The resulting file is the version submitted for GREAT-ER II.
6177
6178 2003-08-01 Bernhard Herzog <[email protected]>
6179
6180 * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
6181 Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
6182 Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
6183
6184 * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
6185 (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
6186 (ThubanEndBusyCursor): Add doc-strings
6187
6188 2003-08-01 Bernhard Herzog <[email protected]>
6189
6190 First step towards PostGIS integration. More abstraction by movin
6191 more code from the layer to the shapestore. More methods of the
6192 layer are now simply delegated to the equivalent method of the
6193 shapestore. The SHAPETYPE_* constants are now in data not in
6194 layer.
6195
6196 * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
6197 (SHAPETYPE_POINT, Shape): Move these constants and classes from
6198 layer.py to data.py
6199 (ShapefileStore.__init__): More Initialization for the new methods
6200 and functionality.
6201 (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
6202 (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
6203 (ShapefileStore.Shape): New methods that were formerly implemented
6204 in the layer.
6205 (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
6206 (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
6207 (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
6208 equivalents of the new shape methods. These versions are simply
6209 delegated to the original shapstore.
6210
6211 * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
6212 (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
6213 (Layer.SetShapeStore): Removed the initializatin of instance
6214 variables that were needed for the stuff that's now in
6215 ShapefileStore
6216 (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
6217 (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
6218 shapestore.
6219
6220 * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
6221 Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
6222 instead of layer.
6223
6224 * test/test_shapefilestore.py: New. Tests for ShapefileStore.
6225
6226 * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
6227
6228 * test/test_layer.py: Import the SHAPETYPE_* constants from data
6229 instead of layer.
6230 (TestLayer.test_derived_store): Remove the test for the exception
6231 when instantiating the DerivedShapeStore with an incompatible
6232 table which is now in test_derivedshapestore.py. Add some more
6233 tests of the layer methods to determine whether they work for a
6234 DerivedShapeStore as well.
6235
6236 2003-07-31 Jonathan Coles <[email protected]>
6237
6238 * Doc/manual/thuban-manual.xml: Fix the list of required packages
6239 by just listing the name and where they can be found.
6240
6241 2003-07-31 Frank Koormann <[email protected]>
6242
6243 * Doc/manual/thuban-manual.xml:
6244 Changed the screenshot elements to figure.
6245 Changed some variablelist elements to itemizedlist.
6246 Added section on GDAL formats.
6247
6248 2003-07-31 Jonathan Coles <[email protected]>
6249
6250 * Doc/manual/thuban-manual.xml: Added a few sentences about
6251 the Fix Border Color option when generating classes.
6252
6253 2003-07-30 Jonathan Coles <[email protected]>
6254
6255 * Thuban/Model/classgen.py: Add docstrings. Rename specific
6256 Ramp instances to use lower_case_style.
6257
6258 * Thuban/UI/classgen.py: Use renamed Ramp instances.
6259
6260 * Thuban/UI/classifier.py: Add docstrings.
6261
6262 * Thuban/UI/dock.py: Add docstrings.
6263
6264 * test/test_classgen.py: Use renamed Ramp instances.
6265
6266 2003-07-30 Bernhard Herzog <[email protected]>
6267
6268 * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
6269 was never used in Thuban.
6270
6271 2003-07-30 Bernhard Herzog <[email protected]>
6272
6273 * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
6274 method directly instead of going through the transient_table
6275 method. This faster because transient_table may force the copy of
6276 a DBF file into the transient database and setting a table's title
6277 doesnm't affect the title of the associated transient table, so
6278 this fixes RT #2042
6279
6280 * Thuban/UI/main.py (__version__): Don't import the already
6281 removed show_exception_dialog.
6282
6283 2003-07-29 Jonathan Coles <[email protected]>
6284
6285 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
6286 Put back this method and remove the equivalent function since we
6287 are setting the exception hook from within this class (OnInit).
6288
6289 2003-07-29 Jonathan Coles <[email protected]>
6290
6291 * Doc/manual/images/5_2_custom_ramp.png,
6292 Doc/manual/images/5_2_quantiles.png,
6293 Doc/manual/images/5_2_uniform_dist.png,
6294 Doc/manual/images/5_2_unique_values.png,
6295 Doc/manual/images/8_int_error.png: New screen shots.
6296
6297 * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
6298 some points, and added more screen shots.
6299
6300 2003-07-29 Bernhard Herzog <[email protected]>
6301
6302 * Thuban/Model/data.py: Remove the now unused import of warnings
6303
6304 2003-07-29 Bernhard Herzog <[email protected]>
6305
6306 * Thuban/Model/data.py (SimpleStore): Removed. This class has been
6307 deprecated since before the 0.8 release and isn't used in Thuban
6308 itself anymore.
6309
6310 * Thuban/Model/transientdb.py: Remove some unnecessary imports
6311
6312 2003-07-29 Jonathan Coles <[email protected]>
6313
6314 * Thuban/UI/application.py (ThubanApplication.OnInit): set the
6315 python exception hook here so that we are sure to catch any
6316 Thuban exception that happen during initialization.
6317
6318 * Thuban/UI/main.py (main): Don't set the exception hook here,
6319 it will get set in ThubanApplication.OnInit.
6320
6321 2003-07-29 Jonathan Coles <[email protected]>
6322
6323 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
6324 Removed and called it show_exception_dialog() so that the exception
6325 handler can be set before the class is created.
6326
6327 * Thuban/UI/main.py (main): Install the exception handler before
6328 a ThubanApplication is created.
6329
6330 2003-07-29 Bernhard Herzog <[email protected]>
6331
6332 * po/it.po: New. Italian translation by Maurizio Napolitano
6333
6334 * po/ru.po: New. Russian translation by Alex Shevlakov
6335
6336 2003-07-29 Frank Koormann <[email protected]>
6337
6338 * Doc/manual/thuban-manual.xml: Extended section on supported
6339 projections.
6340
6341 2003-07-29 Frank Koormann <[email protected]>
6342
6343 * Doc/manual/thuban-manual.xml: gaspell-checked.
6344
6345 2003-07-29 Jonathan Coles <[email protected]>
6346
6347 * Doc/manual/images/3_5_legend.png: Added border to improve look
6348 on white background.
6349
6350 2003-07-29 Jonathan Coles <[email protected]>
6351
6352 * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
6353 descriptions for the legend toolbar.
6354
6355 * Doc/manual/images/4_2_raster_layer_properties.png: Removed
6356 cursor from dialog box.
6357
6358 2003-07-28 Jonathan Coles <[email protected]>
6359
6360 * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
6361
6362 * Doc/manual/images/2_4_session_tree.png,
6363 Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
6364 Doc/manual/images/4_2_layer_properties.png,
6365 Doc/manual/images/4_2_raster_layer_properties.png,
6366 Doc/manual/images/5_3_genclass.png,
6367 Doc/manual/images/5_classification.png,
6368 Doc/manual/images/6_projection.png,
6369 Doc/manual/images/7_1_table_view.png,
6370 Doc/manual/images/7_2_5_join.png: New screenshots.
6371
6372 2003-07-24 Jonathan Coles <[email protected]>
6373
6374 * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
6375
6376 2003-07-24 Jonathan Coles <[email protected]>
6377
6378 * Doc/manual/thuban-manual.xml: Added EPS images and wrote
6379 chapter on Layer Management.
6380
6381 * Doc/manual/Makefile: New. Makefile to generate all formats for the
6382 manual and images.
6383
6384 2003-07-24 Bernhard Herzog <[email protected]>
6385
6386 * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
6387 it annoys lintian which warns about these files not being
6388 executable. The #! isn't necessary here since if you absolutely
6389 must execute them you can always say "python <filename>".
6390
6391 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
6392 superfluous code to set brush and pen for point shapes
6393
6394 * Thuban/UI/viewport.py: Remove commented out code that wouldn't
6395 belong in viewport anyway
6396
6397 2003-07-24 Frank Koormann <[email protected]>
6398
6399 * Doc/manual/thuban-manual.xml: Added section on table management.
6400
6401 2003-07-24 Bernhard Herzog <[email protected]>
6402
6403 * test/runtests.py (main): Recognize the long "verbose" option
6404 correctly.
6405
6406 2003-07-22 Jonathan Coles <[email protected]>
6407
6408 * Doc/manual/thuban-manual.xml: Continue to write first revision
6409 of the manual.
6410
6411 * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
6412 with Begin/EndDrawing() calls to ensure we aren't doing to
6413 many updates to the dc during rendering.
6414 (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
6415 a pen and brush argument so they need to be passed to the function.
6416
6417 * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
6418 Calculates the minimum and maximum scale values. Factored out
6419 of set_view_transform so that it could be used to zoom all the
6420 way into a single point.
6421 (ViewPort.set_view_transform): Call calc_min_max_scales().
6422 (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
6423 if only a single point is selected.
6424
6425 * Doc/manual/images/1_2_legend_close.png,
6426 Doc/manual/images/1_2_legend_dock.png,
6427 Doc/manual/images/1_2_mainwindow.png,
6428 Doc/manual/images/1_2_mainwindow.ps,
6429 Doc/manual/images/1_2_mainwindow.sk,
6430 Doc/manual/images/3_2_fullextent.png,
6431 Doc/manual/images/3_2_fulllayerextent.png,
6432 Doc/manual/images/3_2_fullshapeextent.png,
6433 Doc/manual/images/3_2_pan.png,
6434 Doc/manual/images/3_2_zoomin.png,
6435 Doc/manual/images/3_2_zoomout.png,
6436 Doc/manual/images/3_3_identify.png,
6437 Doc/manual/images/3_3_label.png,
6438 Doc/manual/images/3_5_invisible.png,
6439 Doc/manual/images/3_5_movedown.png,
6440 Doc/manual/images/3_5_moveup.png,
6441 Doc/manual/images/3_5_props.png,
6442 Doc/manual/images/3_5_tobottom.png,
6443 Doc/manual/images/3_5_totop.png,
6444 Doc/manual/images/3_5_visible.png: New. Images for the documentation.
6445
6446 2003-07-18 Bernhard Herzog <[email protected]>
6447
6448 * Thuban/UI/messages.py (MAP_REPLACED): New message.
6449
6450 * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
6451 after the new map has been assigned
6452
6453 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
6454 Delegate MAP_REPLACED to the canvas too
6455 (MainWindow.prepare_new_session): Removed. Thanks to the new
6456 MAP_REPLACED message it's no longer needed
6457 (MainWindow.OpenSession, MainWindow.NewSession):
6458 prepare_new_session has been removed.
6459
6460 * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
6461 MAP_REPLACED so that we can close the dialog if a new map is set.
6462 (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
6463 (Classifier.map_replaced): Handle MAP_REPLACED by closing the
6464 dialog
6465
6466 * test/test_viewport.py (SimpleViewPortTest)
6467 (SimpleViewPortTest.test_default_size): Add doc-strings
6468 (ViewPortTest.setUp): Bind map to self.map so we can use it in
6469 tests. Subscribe to MAP_REPLACED messages too.
6470 (ViewPortTest.tearDown): No need to explicitly unsubscribe
6471 (ViewPortTest.test_set_map): New test for the SetMap method.
6472
6473 2003-07-18 Bernhard Herzog <[email protected]>
6474
6475 * test/test_viewport.py (SimpleViewPortTest.test_default_size):
6476 Move this test from ViewPortTest.setUp to this new separate test
6477 case. setUp is not the place for the actual tests.
6478 (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
6479 more of the test from setUp to the new test test_inital_settings.
6480 (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
6481 (ViewPortTest.test_proj_conv): Split test_proj_conv into
6482 test_win_to_proj and test_proj_to_win and make the tests easier to
6483 understand
6484 (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
6485 (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
6486 (ViewPortTest.test_unprojected_rect_around_point)
6487 (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
6488 Reformat to increase readability.
6489
6490 2003-07-18 Bernhard Herzog <[email protected]>
6491
6492 * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
6493
6494 2003-07-18 Bernhard Herzog <[email protected]>
6495
6496 * test/runtests.py: The test suite can now be run without an X
6497 connection. To make sure this remains true, remove the DISPLAY
6498 environment variable so that an error occurs if the wxGTK is
6499 imported accidentally
6500
6501 2003-07-18 Bernhard Herzog <[email protected]>
6502
6503 * Thuban/UI/viewport.py: Remove unused imports
6504
6505 * Thuban/UI/view.py: Remove unused imports
6506
6507 2003-07-18 Bernhard Herzog <[email protected]>
6508
6509 * test/test_export.py Remove unused imports. The OutputTransform
6510 function is now in viewport.py and is called output_transform
6511 (TestScalebar.test_output_transform)
6512 (TestScalebar.test_OutputTransform): Renamed to
6513 test_output_transform and updated to use output_transform instead
6514 of OutputTransform
6515
6516 * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
6517 renamed.
6518 (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
6519 renamed to output_transform
6520
6521 * Thuban/UI/viewport.py (OutputTransform, output_transform):
6522 Rename to output_transform
6523
6524 2003-07-18 Bernhard Herzog <[email protected]>
6525
6526 * Thuban/Model/layer.py (Layer.__init__): Rename
6527 classificationField to classificatin_column and init it here so
6528 that it can be used in SetClassificationColumn
6529 (Layer.GetClassificationColumn, Layer.GetClassificationField):
6530 Rename to GetClassificationColumn.
6531 (Layer.SetClassificationColumn, Layer.SetClassificationField):
6532 Rename to SetClassificationColumn and issue a LAYER_CHANGED
6533 message if the column changes.
6534 (Layer._classification_changed, Layer.ClassChanged): Rename to
6535 _classification_changed. Update the callers.
6536 (Layer.SetShapeStore): Further field->column renames.
6537
6538 * Thuban/Model/load.py (SessionLoader.start_classification)
6539 (SessionLoader.start_clpoint): Updates because of
6540 field->column method name changes in the Layer class
6541
6542 * Thuban/Model/save.py (SessionSaver.write_classification): Updates
6543 because of field->column method name changes in the Layer class
6544
6545 * Thuban/UI/classifier.py (Classifier.__init__)
6546 (Classifier._OnTry, Classifier._OnRevert): Updates because of
6547 field->column method name changes in the Layer class
6548
6549 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
6550 because of field->column method name changes in the Layer class
6551
6552 * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
6553 of field->column method name changes in the Layer class
6554
6555 * test/test_save.py (SaveSessionTest.testClassifiedLayer)
6556 (SaveSessionTest.testClassifiedLayer): Update because of
6557 field->column method name changes in the Layer class
6558
6559 * test/test_layer.py (SetShapeStoreTests.setUp)
6560 (SetShapeStoreTests.test_sanity): Update because of field->column
6561 method name changes in the Layer class
6562 (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
6563 (TestLayerModification.test_sanity)
6564 (TestLayerModification.test_initial_settings): remove unsued code
6565 and rename to test_sanity.
6566 (TestLayerModification.test_set_classification): New test for
6567 SetClassification and SetClassificationField.
6568
6569 2003-07-18 Bernhard Herzog <[email protected]>
6570
6571 * test/test_classgen.py (TestFixedRamp.test): Extend test to check
6572 the non-fixed values as well. The old test would have accepted a
6573 fixed ramp that only returnes the fixed properties
6574
6575 2003-07-17 Jonathan Coles <[email protected]>
6576
6577 * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
6578 shots for the manual. The XCF file is the source image and
6579 has additional layers to support changes.
6580
6581 * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
6582
6583 * Thuban/UI/classifier.py (Classifier.__BuildClassification):
6584 Return both the new class and the field name.
6585
6586 * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
6587 fit the map to the window as this changes any zoom level that
6588 the user may have set.
6589
6590 2003-07-16 Jonathan Coles <[email protected]>
6591
6592 * Thuban/Model/classgen.py (generate_singletons,
6593 generate_uniform_distribution, generate_quantiles): Remove
6594 fixes parameter, but maintain the same functionality by having
6595 the calling function pass a FixedRamp object for the ramp.
6596 (FixedRamp): New. Adapts a ramp to have fixed property values.
6597
6598 * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
6599 (Classification): Inherit from Publisher.
6600 (Classification.__init__): Remove the layer parameter.
6601 Classifications no longer need to have a parent layer.
6602 (Classification.GetField, Classification.GetFieldType,
6603 Classification.SetFieldInfo): Removed. The field name is stored
6604 in the layer, and the type can be retreived by calling
6605 Layer.GetFieldType().
6606 (Classification._set_layer, Classification.GetLayer): Removed.
6607 Classifications no longer have a parent layer.
6608
6609 * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
6610 classification.
6611 (Layer.SetShapeStore): Reset the classification first while
6612 we still have the old shape store to work with.
6613 (Layer.GetClassificationField, Layer.SetClassificationField):
6614 New. Method for getting/setting the field to classify on.
6615 (Layer.SetClassification): Simplified now that the layer
6616 simply has to hold a reference to the classification and not
6617 tell the classification who owns it.
6618 Fixes RTbug #2023.
6619
6620 * Thuban/Model/load.py (SessionLoader.start_classification):
6621 Set the field name on the layer, not the classification.
6622
6623 * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
6624 classification is modified.
6625
6626 * Thuban/Model/save.py (SessionSaver.write_classification):
6627 Get the field name and type from the layer.
6628
6629 * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
6630 parameter records to rows and add docstring. Fixes RTbug #1997.
6631
6632 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
6633 ramp when we need to fix certain values of a ramp rather than
6634 using the old fixes parameter. Fixes RTbug #2024.
6635
6636 * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
6637 parameter.
6638 (ClassTable.Reset): Add fieldType parameter and use it, rather
6639 than asking the classification.
6640 (Classifier.__init__): Remember the original class's field
6641 and ask the layer for the field type, rather than the classification.
6642 (Classifier.__SetGridTable): Retrieve the field and field type
6643 for the table because they are not in the classification.
6644 (Classifier._OnTry, Classifier._OnRevert): Set the classification
6645 field on the layer in addition to the classification itself.
6646
6647 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
6648 classification field from layer.
6649
6650 * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
6651 classification field from layer. Split up tests and remove
6652 *-imports. Fixes RTbug #1992.
6653
6654 * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
6655
6656 * test/test_classification.py
6657 (TestClassification.test_classification): Remove tests for methods
6658 that no longer exist.
6659
6660 * test/test_layer.py (SetShapeStoreTests.setUp): Classification
6661 __init__ no longer has a field parameter, use SetClassificationField.
6662 (SetShapeStoreTests.test_sanity): Use layer object to get class
6663 field info.
6664
6665 * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
6666 SetClassificationField on layer to set class field info.
6667
6668 * test/test_viewport.py: Renamed from test/test_view.py.
6669
6670 2003-07-16 Jan-Oliver Wagner <[email protected]>
6671
6672 * Doc/manual/thuban-manual.xml: Added authors and an initial
6673 coarse structure.
6674
6675 2003-07-15 Bernhard Herzog <[email protected]>
6676
6677 * test/support.py (FloatComparisonMixin): This is a mix-in class
6678 and therefore should not be derived from any other class.
6679
6680 * test/test_range.py (RangeTest): FloatComparisonMixin is a
6681 mix-in, so derive from TestCase as well.
6682
6683 2003-07-15 Bernhard Herzog <[email protected]>
6684
6685 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
6686 draw_func handling a bit to remove one layer of indirection. This
6687 makes the renderer about 10% faster in the non-classifying case
6688 and the code a bit cleaner
6689 (MapRenderer.draw_point_shape): Add the pen and brush parameters
6690 and set them in the dc. Now the draw_point_shape method and
6691 wxproj's draw_polygon_shape function have basically the same
6692 signature so that both can be directly used as draw_func
6693
6694 2003-07-15 Bernhard Herzog <[email protected]>
6695
6696 * Thuban/Model/save.py (SessionSaver.write_classification): Encode
6697 string values (in addition to the labels) as UTF 8
6698
6699 * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
6700 values if the field type is string
6701
6702 * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
6703 saving a session with non-ascii string classification values.
6704
6705 * test/test_load.py (TestClassification.file_contents)
6706 (TestClassification.test): Check for non-ascii values in string
6707 classifications
6708
6709 2003-07-14 Jonathan Coles <[email protected]>
6710
6711 * test/test_view.py: New. Tests for ViewPort.
6712
6713 2003-07-14 Frank Koormann <[email protected]>
6714
6715 * Thuban/Model/load.py (SessionLoader.start_map): Encode map
6716 title to latin1. Fixes https://intevation.de/rt/webrt?serial_num=2013
6717
6718 * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
6719 unicode strings from session file: session title, map title and
6720 projection name.
6721
6722 2003-07-10 Jonathan Coles <[email protected]>
6723
6724 * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
6725 drag_stop, not drag_move when the mouse is released.
6726
6727 2003-07-10 Jonathan Coles <[email protected]>
6728
6729 The most important part of this is the seperation of view.py into
6730 two pieces. viewport.py now has a class called ViewPort which
6731 contains all the non-wx parts of view.py and can therefore be
6732 tested. view.py contains only the wx-specific parts and is fairly
6733 simple.
6734
6735 * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
6736 RTTbug #1992.
6737 * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
6738 RTTbug #1992.
6739
6740 * Thuban/Model/classgen.py (generate_singletons,
6741 generate_uniform_distribution, generate_quantiles):
6742 Added 'fixes' parameter so that property attributes can
6743 be held constant over the generated classification groups.
6744 (CustomRamp.GetProperties): Remove unused variables.
6745
6746 * Thuban/Model/map.py (Map.SetProjection): Send the old
6747 projection as an argument to listeners of the MAP_PROJECTION_CHANGED
6748 event.
6749
6750 * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
6751 parameter which is a list of records that restricts which
6752 records are saved. Fixes RTbug #1997.
6753
6754 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
6755 Port exception dialog from GREAT-ER. Fixes RTbug #1993.
6756
6757 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
6758 to allow the user to fix line color/width on generated groups.
6759 (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
6760 functions to optionally fix group properties.
6761
6762 * Thuban/UI/main.py (main): Set exception hook to the
6763 ShowExceptionDialog. Fixes RTbug #1993.
6764
6765 * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
6766 the table window when it is selectd to be shown.
6767
6768 * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
6769 Export Selection button and move the export buttons underneath
6770 the table.
6771 (QueryTableFrame.UpdateStatusText): Added event argument so
6772 that it can respond to grid selection events. The status text
6773 is now updated even when the table is not associated with a
6774 layer as was previously assumed.
6775 (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
6776 UpdateStatusText responds to these events.
6777 (QueryTableFrame.OnSaveAs): Renamed to doExport.
6778 (QueryTableFrame.doExport): Helper function that saves the
6779 entire table, or selected rows, to a file.
6780 (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
6781 Respond to export button events and call doExport.
6782
6783 * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
6784 the function doesn't return NULL without first setting a Python
6785 Error.
6786
6787 * test/runtests.py (main): Only print "Unknown option" for
6788 unsupported options.
6789
6790 * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
6791 optional epsilon argument to specify floating point accuracy.
6792 (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
6793 for each item test.
6794
6795 * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
6796 tests for saving selected records.
6797
6798 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
6799 tests for saving selected records.
6800
6801 * test/test_map.py (TestMapWithContents.test_set_projection):
6802 MAP_PROJECTION_CHANGED events send the old projection.
6803
6804 * test/test_session.py
6805 (TestSessionWithContent.test_forward_map_projection):
6806 MAP_PROJECTION_CHANGED events send the old projection.
6807
6808 * test/test_table.py (TableTest): Update tests to use non-deprecated
6809 functions.
6810
6811 2003-07-08 Bernhard Herzog <[email protected]>
6812
6813 * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
6814 constants in the column objects are the standard ones defined in
6815 the table module.
6816
6817 * test/test_transientdb.py
6818 (TestTransientTable.test_transienttable_to_dbf): New. Test whether
6819 exporting transient tables as DBF works. This should catch the bug
6820 just fixed in TransientTableBase.Width.
6821
6822 2003-07-08 Bernhard Herzog <[email protected]>
6823
6824 * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
6825 interpolated colors correctly.
6826
6827 * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
6828 New. Test case for the fix in classgen.py
6829
6830 2003-07-08 Bernhard Herzog <[email protected]>
6831
6832 * test/runtests.py (main): Make the default output less verbose
6833 and add a verbosity option (-v) to get the old output
6834
6835 2003-07-08 Bernhard Herzog <[email protected]>
6836
6837 * Resources/XML/thuban-0.9.dtd: New. This will become the DTD for
6838 0.9.
6839
6840 * Thuban/Model/transientdb.py (TransientJoinedTable.JoinType):
6841 New. Return the join type
6842
6843 * Thuban/Model/save.py (SessionSaver.write_session): Use new 0.9
6844 DTD
6845 (SessionSaver.write_data_containers): Save the join type for
6846 joined tables
6847
6848 * Thuban/Model/load.py (SessionLoader.__init__): Add the new 0.9
6849 namespace
6850 (SessionLoader.start_jointable): Handle the jointype attribute
6851
6852 * test/test_load_0_8.py: New. Effectively a copy of test_load.py
6853 as of Thuban 0.8. These are now tests to determine whether Thuban
6854 can still read files generated by Thuban 0.8
6855
6856 * test/test_load.py (LoadSessionTest.dtd)
6857 (TestSingleLayer.file_contents)
6858 (TestLayerVisibility.file_contents, TestLabels.file_contents)
6859 (TestLayerProjection.file_contents)
6860 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
6861 (TestJoinedTable.file_contents)
6862 (TestLoadError.file_contents): Update for new DTD
6863 (TestJoinedTable.file_contents, TestJoinedTable.setUp): Add test
6864 for new join type attribute
6865
6866 * test/test_save.py (SaveSessionTest.dtd)
6867 (SaveSessionTest.testEmptySession)
6868 (SaveSessionTest.testSingleLayer)
6869 (SaveSessionTest.testLayerProjection)
6870 (SaveSessionTest.testRasterLayer)
6871 (SaveSessionTest.testClassifiedLayer)
6872 (SaveSessionTest.test_dbf_table)
6873 (SaveSessionTest.test_joined_table): Update for new DTD
6874 (SaveSessionTest.test_joined_table): Add test for new join type
6875 attribute
6876
6877 2003-07-04 Bernhard Herzog <[email protected]>
6878
6879 * Thuban/Model/table.py (_find_dbf_column_names): New. Helper
6880 function for table_to_dbf
6881 (table_to_dbf): Deal with names longer than the 10 character limit
6882
6883 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
6884 doc-string
6885 (TestTableToDBF.test_table_to_dbf_long_col_names): New test for
6886 long column names
6887
6888 2003-07-03 Bernhard Herzog <[email protected]>
6889
6890 * Doc/manual/thuban-manual.xml: Fix the CVS Revision Tag syntax
6891
6892 2003-07-03 Bernhard Herzog <[email protected]>
6893
6894 * Doc/manual/thuban-manual.xml, Doc/manual/README: New. Skeleton
6895 for the Thuban manual and README with some basic information about
6896 the manual
6897
6898 2003-07-03 Bernhard Herzog <[email protected]>
6899
6900 * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
6901 Update doc-string
6902 (TransientJoinedTable.create): Do not modify the column objects of
6903 the input tables in place and copy all columns of the input tables
6904 into the joined table after all.
6905
6906 * test/test_transientdb.py
6907 (TestTransientTable.test_transient_joined_table_same_column_name):
6908 Update to reflect the new behavior
6909 (TestTransientTable.test_transient_joined_table_with_equal_column_names):
6910 Update to reflect the new behavior
6911 (TestTransientTable.test_transient_joined_table_name_collisions_dont_modify_in_place):
6912 New test case for a bug which modified the column objects in place
6913
6914 2003-07-02 Jonathan Coles <[email protected]>
6915
6916 * Thuban/Model/classgen.py (generate_singletons,
6917 generate_uniform_distribution, generate_quantiles,
6918 GenQuantiles0): Make sure maxValue isn't less than
6919 one, otherwise we could divide by zero.
6920
6921 * test/test_classgen.py (ClassGenTest.doClassRangeTest,
6922 ClassGenTest.doClassSingleTest): Call doBoundsTest to
6923 check the end classification groups against the
6924 proper property values.
6925 (ClassGenTest.doBoundsTest): New. Checks the first and
6926 last classification groups to make sure their properties
6927 are the correct upper and lower bounds for a color ramp.
6928
6929 2003-07-02 Jonathan Coles <[email protected]>
6930
6931 * Thuban/Model/classgen.py (generate_singletons,
6932 generate_uniform_distribution, generate_quantiles,
6933 GenQuantiles0): The denominator was one to high when
6934 calculating the index for the ramp causing the index
6935 to never to reach one.
6936
6937 2003-07-02 Jonathan Coles <[email protected]>
6938
6939 Changed the singature of ClassGroupRange.__init__ and
6940 ClassGroupRange.SetRange() so that the min/max values are
6941 passed as a tuple. This makes a better calling scheme for
6942 when a Range object is passed instead.
6943
6944 * Thuban/Model/classgen.py: Fixed parameters to
6945 ClassGroupRange constructor.
6946
6947 * Thuban/Model/classification.py (ClassGroupRange.__init__):
6948 Consolidate the min/max parameters into a single _range which
6949 can either be a tuple or a Range object.
6950 (ClassGroupRange.SetRange): Consolidate the min/max parameters
6951 into a single _range which can either be a tuple or a Range object.
6952
6953 * Thuban/Model/load.py (SessionLoader.start_clrange): Fix
6954 call to ClassGroupRange constructor to use a tuple.
6955
6956 * Thuban/Model/layer.py (Layer.SetClassification): Switch
6957 the classification instance variable to the new class
6958 before calling _set_layer otherwise subscribers to a
6959 LAYER_CHANGED event will not see any difference.
6960
6961 * test/test_classification.py: Fix tests of ClassGroupRange
6962 so that they use the new signature.
6963
6964 * test/test_load.py: Fix use of ClassGroupRange so that it
6965 uses the new signature.
6966
6967 * test/test_load_0_2.py: Fix use of ClassGroupRange so that it
6968 uses the new signature.
6969
6970 * test/test_save.py: Fix use of ClassGroupRange so that it
6971 uses the new signature.
6972
6973
6974 2003-07-01 Jonathan Coles <[email protected]>
6975
6976 * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.
6977 Import used objects/class from color.
6978 (generate_singletons): We don't
6979 need the numGroups parameter anymore because we are using
6980 the new ramps with GetProperties().
6981 (generate_uniform_distribution): Use new ramp method
6982 GetProperties().
6983 (generate_quantiles, GenQuantiles0): Use new ramp method
6984 GetProperties().
6985 (CustomRamp.SetNumGroups): Removed. The ramps now map
6986 a value from 0 to 1 to class properties so the number
6987 of groups is not needed ahead of time.
6988 (CustomRamp.next): Removed. CustomRamp does not support
6989 interation anymore.
6990 (CustomRamp.GetProperties): Returns a ClassGroupProperties
6991 object based on the index value from 0 to 1 that is
6992 passed to it.
6993 (GreyRamp, RedRamp, GreenRamp, BlueRamp, GreenToRedRamp):
6994 Made into instances of Monochromatic class instread of
6995 deriving from it.
6996 (HotToCold.SetNumGroups): Removed. See CustomRamp.
6997 (HotToCold.next): Removed. See CustomRamp.
6998
6999 * Thuban/Model/classification.py: Fixes RTbug #1973, 1971.
7000 (Classification.SetField, Classification.SetFieldType):
7001 Replaced with SetFieldInfo.
7002 (Classification.SetFieldInfo): New. Does a better job of
7003 what SetField and SetFieldType used to do by combining
7004 their function since they should really always be done
7005 at the same time.
7006 (Classification.SetLayer): Renamed to _set_layer.
7007 (Classification._set_layer): Should only be called from
7008 Layer's SetClassification. This does not cause a recursive
7009 call as SetLayer did because we know that Layer knows about
7010 the classification.
7011
7012 * Thuban/Model/color.py: Fixes RTbug #1971.
7013 (_Transparent): Renamed from Transparent so it doesn't
7014 conflict with the module variable.
7015 (Transparent, Black): Renamed from Color.Transparent,
7016 Color.Black so they are not class variables.
7017
7018 * Thuban/Model/layer.py: Fixes RTbug #1971, 1973.
7019 (Layer.Destroy): We don't need to call SetClassification
7020 anymore to clear out the back reference in the classifcation
7021 to the layer. It's better to set it to None using _set_layer,
7022 and we won't be creating another clas object too.
7023 (Layer.SetClassification): Classification._set_layer is not
7024 recursive so remove all the locking variables. Also clean
7025 up the code so that it remains unchanged if something fails.
7026
7027 * Thuban/Model/load.py: Fixes RTbug #1971.
7028 (SessionLoader.start_classification): Call
7029 Classification.SetFieldInfo().
7030
7031 * Thuban/Model/save.py: Removed import of Color which wasn't
7032 being used.
7033
7034 * Thuban/UI/classgen.py: Fixes RTbug #1972.
7035 (ClassGenDialog.__init__): Color ramps are now instances
7036 already so we don't need to create any new objects.
7037 (ClassGenDialog.OnOK): Check for numGroups is no longer
7038 necessary because we never use it.
7039
7040 * Thuban/UI/classifier.py: Fixes RTbug #1971.
7041 (Classifier.__BuildClassification, Classifier.__SetGridTable):
7042 Call Classification.SetFieldInfo() instead of SetFieldType.
7043
7044 * Thuban/UI/renderer.py: Fixes RTbug #1971.
7045
7046 * Thuban/UI/view.py: Fixes RTbug #1974, 1971.
7047 (MapCanvas.__init__): Subscribe to the idle time event. Set
7048 background color to white.
7049 (MapCanvas.OnPaint): Set a flag indicating that we should
7050 render the map during idle time. If we already have a bitmap
7051 just draw it now.
7052 (MapCanvas.OnIdle): New. Render the map only during idle time.
7053 This also fixes a problem with the busy cursor under gtk.
7054
7055 * test/test_classgen.py (ClassGenTest.test_generate_singletons):
7056 Fix calls to generate_singletons because the signature changed.
7057
7058 * test/test_classification.py: Fix color references and
7059 change calls to Classification.[SetField|SetFieldType] to
7060 SetFieldInfo.
7061
7062 * test/test_load.py: Fix color references.
7063
7064 * test/test_load_0_2.py: Fix color references.
7065
7066 * test/test_save.py (SaveSessionTest.testClassifiedLayer):
7067 Change calls to Classification.[SetField|SetFieldType] to
7068 SetFieldInfo.
7069
7070 2003-07-01 Frank Koormann <[email protected]>
7071
7072 MERGE from the greater-ms3 branch.
7073
7074 * test/test_transientdb.py
7075 (TestTransientTable.test_transient_joined_table_with_equal_column_names):
7076 New. Test join of two tables with partly equal column names.
7077
7078 * Thuban/Model/transientdb.py (TransientJoinedTable.create):
7079 If duplicates in left and right tables column names are found,
7080 append '_' (underscores) to the name until it is unique.
7081 Create always new internal names for the resulting table and reference
7082 columns in the join statement with <table>.<column>
7083
7084 2003-07-01 Bernhard Herzog <[email protected]>
7085
7086 * test/test_transientdb.py
7087 (TestTransientTable.test_transient_joined_table_same_column_name):
7088 New. Test whether joining on columns with the same names in both
7089 tables works.
7090
7091 * Thuban/Model/transientdb.py (TransientJoinedTable.create): Make
7092 sure to use the right internal names even when joining on field
7093 with the same names in both tables. Also, detect duplicate names
7094 in the joined table correctly.
7095
7096 2003-07-01 Frank Koormann <[email protected]>
7097
7098 * Thuban/UI/renderer.py (ExportRenderer.render_legend):
7099 Reverse List of layers to render in same order as in desktop legend.
7100
7101 2003-06-30 Jonathan Coles <[email protected]>
7102
7103 * Thuban/version.py (make_tuple): Takes a version string
7104 and splits it into a tuple of at most three integers.
7105 Used make_tuple() to make tuple versions of the version
7106 numbers.
7107
7108 * Thuban/UI/about.py: Add Thuban email addresses.
7109
7110 2003-06-30 Jonathan Coles <[email protected]>
7111
7112 * Thuban/version.py: SQLite/PySQLite version dependencies
7113 were too high.
7114
7115 2003-06-30 Jonathan Coles <[email protected]>
7116
7117 * Thuban/version.py: Update version to 0.8.1
7118
7119 * MANIFEST.in: Added Projections so that default.proj is
7120 included.
7121
7122 2003-06-26 Jonathan Coles <[email protected]>
7123
7124 New About box with lots more information including library
7125 versions and credits. More/better version checking before
7126 Thuban starts.
7127
7128 * Thuban/UI/about.py: New. New About box that displays
7129 library version information and credits.
7130
7131 * Thuban/version.py: Added new 'versions' dictionary which
7132 contains the verions of various libraries which are checked
7133 when the module loads.
7134 (verify_versions): Check all version numbers and returns
7135 a list of errors.
7136
7137 * Thuban/UI/classifier.py (Classifier.__EnableButtons):
7138 Reset the status of the buttons as the situation warrants,
7139 but in a better more reliable way by not relying on the
7140 current status to determine what needs to change.
7141
7142 * Thuban/UI/main.py (wxCHECK_VERSION): Removed. Not needed.
7143 (verify_versions): Remove most of the code since it is
7144 now in Thuban.version.verify_versions.o
7145
7146 * Thuban/UI/mainwindow.py (MainWindow.About): Call new
7147 About box in Thuban.UI.about.
7148
7149 * extensions/thuban/gdalwarp.cpp (get_gdal_version): New.
7150 Returns the version of gdal library being used as a string.
7151
7152 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
7153 Removed.
7154 (get_proj_version): Return the version of PROJ that the file
7155 was compiled with.
7156 (get_gtk_version): Return th version of GTK that the file
7157 was compiled with.
7158
7159 2003-06-25 Jonathan Coles <[email protected]>
7160
7161 * Thuban/UI/classifier.py (Classifier.EditSymbol): The parent
7162 of the SelectPropertiesDialog should be self so the window
7163 appears on top.
7164 (ClassGroupPropertiesCtrl.DoEdit): The parent
7165 of the SelectPropertiesDialog should be self so the window
7166 appears on top.
7167
7168 * Thuban/UI/resource.py: Cleaned up how we determine file
7169 extensions.
7170 (GetImageResource): Return an wxImage from our Resources.
7171
7172 2003-06-24 Jonathan Coles <[email protected]>
7173
7174 * Thuban/UI/renderer.py (ExportRenderer.render_legend):
7175 Check that a layer has a classification before trying
7176 to get it. Raster layers don't have classifications.
7177
7178 2003-06-23 Jonathan Coles <[email protected]>
7179
7180 * setup.py: Add Resources/XML to resource list.
7181
7182 2003-06-23 Jonathan Coles <[email protected]>
7183
7184 * setup.cfg: Fix copyright dates
7185
7186 2003-06-23 Jonathan Coles <[email protected]>
7187
7188 * MANIFEST.in: Update with Resources/XML
7189
7190 * setup.py: Don't include Locale resources yet as we don't
7191 have any and it causes problems building the distribution
7192 for Windows. Update version to 0.8.0.
7193
7194 * Doc/thuban.dtd: Removed since it is now in Resources/XML.
7195
7196 * Thuban/UI/mainwindow.py: Add blank line at the end because
7197 file was not being read correctly building the Windows
7198 distribution.
7199
7200 2003-06-23 Jonathan Coles <[email protected]>
7201
7202 * Thuban/UI/mainwindow.py (MainWindow.About): Fix text.
7203
7204 * Thuban/version.py: Temporarily update longversion for
7205 the 0.8 release so that it doesn't have the cvs revision.
7206
7207 2003-06-23 Jonathan Coles <[email protected]>
7208
7209 * Thuban/UI/common.py (ThubanBeginBusyCursor): Call wxSafeYield
7210 to make sure that we don't create reentrant possibilities with
7211 wxYield.
7212
7213 * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxBeginBusyCursor()
7214 directly to avoid the wxSafeYield() call which generates an
7215 OnPaint event causing infinite recursion. Don't try to catch
7216 exception anymore. This was for before there were limits on map
7217 scaling.
7218
7219 2003-06-23 Bernhard Herzog <[email protected]>
7220
7221 Bug fix for RT #1961:
7222
7223 * Thuban/Model/load.py (SessionLoader.start_derivedshapesource):
7224 Register DerivedShapestores with the session
7225
7226 * Thuban/Model/session.py (Session.Tables): Make sure each table
7227 is only listed once.
7228
7229 * test/test_load.py (TestJoinedTable.test): Add check_format call.
7230 Update file contents to match the one written out.
7231
7232 2003-06-20 Bernhard Herzog <[email protected]>
7233
7234 * test/xmlsupport.py (SaxEventLister.startElementNS)
7235 (SaxEventLister.endElementNS): Do not include the qname. Python
7236 2.2.1 and 2.2.2 and 2.2.3 differ in this regard. In 2.2.1 qname it
7237 is (presumably incorrectly) None, whereas it's a string with the
7238 element name in the later versions.
7239
7240 * test/test_xmlsupport.py (TestEventList.test_even_list_simple)
7241 (TestEventList.test_even_list_namespace): Update tests to reflect
7242 the new behaviour
7243 (TestEventList.test_even_list_id_normalization): Fix doc-string
7244
7245 2003-06-20 Jonathan Coles <[email protected]>
7246
7247 * Thuban/Model/layer.py (BaseLayer.HasShapes): New. Overridden
7248 by deriving classes to determine if that layer supports shapes.
7249 (Layer): Override HasShapes and return true.
7250
7251 * Thuban/UI/classgen.py: Use Thuban[Begin|End]BusyCursor()
7252 instead of a direct call to wx[Begin|End]CusyCursor().
7253 (GenUniquePanel._OnRetrieve): Set busy cursor while retrieving
7254 table data.
7255
7256 * Thuban/UI/common.py (ThubanBeginBusyCursor, ThubanEndBusyCursor):
7257 New. Wrappers around the wxWindows functions that allow us to
7258 make additional calls such as wxYield which gives the native
7259 system a chance to update the cursor correctly.
7260
7261 * Thuban/UI/tableview.py: Use Thuban[Begin|End]BusyCursor()
7262 instead of a direct call to wx[Begin|End]CusyCursor().
7263
7264 * Thuban/UI/view.py: Use Thuban[Begin|End]BusyCursor()
7265 instead of a direct call to wx[Begin|End]CusyCursor().
7266 (MapCanvas.find_shape_at): Check if the current search layer
7267 support shapes, otherwise go on to the next layer.
7268
7269 * test/test_layer.py: Add tests in each type of layer for
7270 HasClassification() and HasShapes()
7271
7272 2003-06-20 Jonathan Coles <[email protected]>
7273
7274 * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after
7275 turning on the busy cursor to allow the system to change the
7276 cursor before we begin painting. This fixes a problem that
7277 was occuring only under GTK. Fixes RTbug #1840.
7278
7279 2003-06-20 Bernhard Herzog <[email protected]>
7280
7281 * Resources/XML/thuban-0.8.dtd: New DTD for the new file format
7282 version.
7283
7284 * Thuban/Model/save.py (sort_data_stores): New. Make topological
7285 sort of the data sources so they can be written with sources that
7286 data sources that depend on other data sources come after the
7287 sources they depend on.
7288 (SessionSaver.__init__): Add idmap instance variable to map from
7289 objects to the ids used in the file.
7290 (SessionSaver.get_id, SessionSaver.define_id)
7291 (SessionSaver.has_id): New. Methods to manage the idmap
7292 (SessionSaver.write): Use thuban-0.8.dtd
7293 (SessionSaver.write_session): Add a namespace on the session and
7294 write out the data sources before the maps.
7295 (SessionSaver.write_data_containers): New. Write the data
7296 containers.
7297 (SessionSaver.write_layer): Layer elements now refer to a
7298 shapestore and don't contain filenames anymore.
7299
7300 * Thuban/Model/load.py (LoadError): Exception class to raise when
7301 errors in the files are discovered
7302 (SessionLoader.__init__): Define dispatchers for elements with a
7303 thuban-0.8 namespace too.
7304 (SessionLoader.check_attrs): New helper method to check and
7305 convert attributes
7306 (AttrDesc): New. Helper class for SessionLoader.check_attrs
7307 (SessionLoader.start_fileshapesource)
7308 (SessionLoader.start_derivedshapesource)
7309 (SessionLoader.start_filetable, SessionLoader.start_jointable):
7310 Handlers for the new elements in the new fileformat
7311 (SessionLoader.start_layer): Handle the shapestore attribute in
7312 addition to filename.
7313 (SessionLoader.start_table, SessionLoader.end_table): Removed.
7314 They were never used in the old formats and aren't needed for the
7315 new.
7316
7317 * Thuban/Model/session.py (Session.DataContainers): New method to
7318 return all "data containers", i.e. shapestores and tables
7319
7320 * test/xmlsupport.py (SaxEventLister.__init__)
7321 (SaxEventLister.startElementNS, sax_eventlist): Add support to
7322 normalize IDs.
7323
7324 * test/test_xmlsupport.py
7325 (TestEventList.test_even_list_id_normalization): New test case for
7326 id normalization
7327
7328 * test/test_load.py (LoadSessionTest.check_format): Use ID
7329 normalization
7330 (LoadSessionTest.thubanids, LoadSessionTest.thubanidrefs): New
7331 class atrributes used for ID normalization
7332 (TestSingleLayer, TestLayerVisibility, TestLabels.test)
7333 (TestLayerProjection.test, TestRasterLayer.test): Adapt to new
7334 file format
7335 (TestJoinedTable): New test for loading sessions with joined
7336 tables.
7337 (TestLoadError): New. Test whether missing required attributes
7338 cause a LoadError.
7339
7340 * test/test_save.py (SaveSessionTest.thubanids)
7341 (SaveSessionTest.thubanidrefs): New class attributes for ID
7342 normalization in .thuban files.
7343 (SaveSessionTest.compare_xml): Use id-normalization.
7344 (SaveSessionTest.testEmptySession)
7345 (SaveSessionTest.testLayerProjection)
7346 (SaveSessionTest.testRasterLayer)
7347 (SaveSessionTest.testClassifiedLayer): Adapt to new file format.
7348 (SaveSessionTest.testLayerProjection): The filename used was the
7349 same as for testSingleLayer. Use a different one.
7350 (SaveSessionTest.test_dbf_table)
7351 (SaveSessionTest.test_joined_table): New test cases for saving the
7352 new data sources structures.
7353 (TestStoreSort, MockDataStore): Classes to test the sorting of the
7354 data stores for writing.
7355
7356 * test/runtests.py: Add CVS keywords
7357
7358 2003-06-20 Jonathan Coles <[email protected]>
7359
7360 * test/test_session.py
7361 (UnreferencedTablesTests.test_unreferenced_tables_with_joins):
7362 Use the cultural_landmark-point.dbf file for the store so that
7363 the table rows and shape count match.
7364
7365 2003-06-20 Jonathan Coles <[email protected]>
7366
7367 * Thuban/Model/data.py (DerivedShapeStore.__init__): Raise
7368 an exception if the number of shapes is different from the
7369 number of rows in the table. Address RTbug #1933.
7370
7371 * test/test_layer.py (TestLayer.test_derived_store): Add
7372 a test for the new exception in DerivedShapeStore.__init__.
7373
7374 * test/support.py (FloatTestCase): Removed since there is
7375 already FloatComparisonMixin. Fixes RTbug #1954.
7376 (FloatComparisonMixin.assertFloatEqual): Include test for
7377 infinity that was part of FloatTestCase.
7378
7379 * test/test_range.py (RangeTest): Inherit from
7380 support.FloatComparisonMixin now that we don't have
7381 support.FloatTestCase.
7382
7383 2003-06-20 Bernhard Herzog <[email protected]>
7384
7385 * test/test_save.py (SaxEventLister, sax_eventlist): Removed. Use
7386 the implementation in xmlsupport instead.
7387 (SaveSessionTest.compare_xml): sax_eventlist is now in xmlsupport
7388
7389 * test/test_proj.py: Import sax_eventlist from xmlsupport instead
7390 of test_save
7391
7392 2003-06-20 Bernhard Herzog <[email protected]>
7393
7394 * test/test_load.py (LoadSessionTest.check_format): New helper
7395 method to make sure the test files we load might have been written
7396 by the current thuban version.
7397 (ClassificationTest.TestLayers, TestSingleLayer.test)
7398 (TestLayerVisibility.test, TestClassification.test)
7399 (TestLabels.test, TestLayerProjection.test, TestRasterLayer.test):
7400 Add check_format() calls and fix the thuban data to match the data
7401 that would be written by saving the session loaded from it.
7402
7403 * test/xmlsupport.py (SaxEventLister, sax_eventlist): Copies of
7404 the same class and function in test_save.
7405
7406 * test/test_xmlsupport.py (TestEventList): New. test cases for
7407 sax_eventlist
7408
7409 2003-06-20 Bernhard Herzog <[email protected]>
7410
7411 * Resources/XML/thuban.dtd: Add comment about which versions of
7412 Thuban are covered by this DTD
7413 (map): Fix content model for layers and raster layers. There can
7414 be any number or layers and raster layers in any order.
7415
7416 2003-06-20 Jonathan Coles <[email protected]>
7417
7418 This is mainly about fixing RTbug #1949.
7419
7420 * Thuban/Model/classification.py: Remove "from __future__"
7421 import statement since python 2.2 is the earliest supported
7422 version.
7423
7424 * Thuban/Model/proj.py (Projection.GetProjectedUnits): New.
7425 Currently returns PROJ_UNITS_METERS or PROJ_UNITS_DEGREES
7426 depending on the units this projection *forwards* into.
7427
7428 * Thuban/Model/save.py (SessionSaver.write_classification):
7429 Remove unnecessary use of lambdas and nested functions.
7430
7431 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Do scale
7432 adjustment here if the map projection uses degrees.
7433
7434 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Remove
7435 scale adjust code since it is now done before calling
7436 this method. Don't do anything if the map projection
7437 is None.
7438
7439 2003-06-19 Bernhard Herzog <[email protected]>
7440
7441 Move version specific load tests to their own file.
7442
7443 * test/test_load.py: Expand the doc-string to explain a bit how to
7444 handle file format changes.
7445 (TestClassification.test): Update the docstring as this test is
7446 not about Thuban 0.2 anymore.
7447
7448 * test/test_load_0_2.py: New file with the load tests for thuban
7449 files created with Thuban 0.2 and earlier.
7450
7451 2003-06-19 Bernhard Herzog <[email protected]>
7452
7453 Add XML validation to some of the tests. Validation will only be
7454 done if pyRXP is installed (http://reportlab.com/xml/pyrxp.html).
7455 To make the DTD available to the test cases it's moved into
7456 Resources/XML
7457
7458 * Resources/XML/thuban.dtd: New. This is now the real Thuban DTD
7459 for versions up to and including 0.2. Two slight changes: added an
7460 encoding specification and fixed the comment which refered to
7461 GRASS, not Thuban
7462
7463 * test/xmlsupport.py: New support module for tests involving XML.
7464 Currently there's a mix-in class for XML validation.
7465
7466 * test/test_xmlsupport.py: New. Tests for the xmlsupport module
7467
7468 * test/test_save.py (SaveSessionTest): Derive from ValidationTest
7469 so that we can validate the
7470 (SaveSessionTest.testEmptySession)
7471 (SaveSessionTest.testSingleLayer)
7472 (SaveSessionTest.testSingleLayer)
7473 (SaveSessionTest.testLayerProjection)
7474 (SaveSessionTest.testRasterLayer)
7475 (SaveSessionTest.testClassifiedLayer): Validate the generated XML
7476
7477 * test/runtests.py (main): Call print_additional_summary instead
7478 of print_garbage_information
7479
7480 * test/support.py (resource_dir): New function to return the
7481 "Resource" subdirectory
7482 (print_additional_summary): New function to combine several
7483 summary functions
7484 (run_tests): Use print_additional_summary instead of calling
7485 print_garbage_information directly
7486
7487 2003-06-19 Bernhard Herzog <[email protected]>
7488
7489 * Doc/thuban.dtd (classification): Correct the content model of
7490 the classification element.
7491 (projection): Add the "name" attribute
7492
7493 2003-06-19 Frank Koormann <[email protected]>
7494
7495 MERGE from the greater-ms3 branch.
7496
7497 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Apply conversion to
7498 scale if projection is latlong to get better estimate.
7499
7500 Fix problem of hidden properties dialog under windows after double
7501 click on layer tree:
7502 The tree control always gets an Expanded / Collapsed event after
7503 the ItemActivated on double click, which raises the main window again.
7504 We add a second ItemActivated event to the queue, which simply
7505 raises the already displayed window.
7506
7507 * Thuban/UI/legend.py (LegendTree.__init__): Instance variable
7508 raiseProperties initialized to prevent endless loops
7509 (LegendTree._OnItemActivated): Depending on self.raiseProperties
7510 simply raise the properties or open the dialog and issue a second
7511 event.
7512
7513 2003-06-18 Jonathan Coles <[email protected]>
7514
7515 * setup.py: Fix a few problems that occured under Windows.
7516
7517 2003-06-18 Jonathan Coles <[email protected]>
7518
7519 When Thuban loaded the map was redrawn twice because the
7520 legend was being opened after the mainwindow was created
7521 and not during its creation. This meant the map was drawn
7522 initially and then had to be redrawn when the legend
7523 caused the display to change. Now the legend is opened
7524 in the mainwindow constructor which resolves this issue.
7525
7526 Also, although we were checking for the existence of
7527 gdal and gdalwarp modules, the gdalwarp extension was
7528 still being compiled (which may fail if the system doesn't
7529 have gdal installed). the build_ext command to setup.py
7530 now accepts the flags --with-gdal and --without-gdal.
7531 If --without-gdal is specified setup.py will try to
7532 use the gdal parameters specified by gdal-config. Under
7533 windows, those parameters have to be set in setup.py
7534 as with proj4 an wxWindows.
7535
7536 * setup.py: Use a list instead of seperate variables for
7537 extension parameters so we can create a generic function
7538 that runs an appropriate *-config script.
7539 (run_cs_script): Renamed from run_wx_script and modified
7540 to accept a second argument which is a list of lists to
7541 be filled in by the values returned from running the command.
7542 (thuban_build_ext): New. Extends the build_ext command and
7543 provides the options --with-gdal/--without-gdal which then
7544 optionally includes the gdalwarp extension.
7545
7546 * Thuban/Model/resource.py: First check if we can import
7547 the gdalwarp Thuban extension before checking for gdal.
7548 Also added some comments.
7549
7550 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Check if
7551 the map is None which may be the case if none has been loaded
7552 yet.
7553
7554 * Thuban/UI/main.py (main): Remove call to ShowLegend.
7555
7556 * Thuban/UI/mainwindow.py (MainWindow.__init__): Call ShowLegend().
7557
7558 * Thuban/UI/renderer.py: Check for gdal support before importing
7559 gdalwarp.
7560 (MapRenderer.render_map): Only try to optimize if we have gdal
7561 support otherwise nothing will get drawn.
7562
7563 * Thuban/UI/view.py (MapCanvas.FitMapToWindow): This may be called
7564 during startup before a map has been created. Check if map is None
7565 before using it and do nothing if it is.
7566
7567 2003-06-17 Jonathan Coles <[email protected]>
7568
7569 Fix the problem with raster layers under Windows that caused
7570 Thuban to crash. The view should respond to layer projection
7571 changed events to update the display. Changes to a projection
7572 should not cause the map to be set to full extent.
7573
7574 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
7575 current_map_proj to remember the current map projection so that
7576 when the projection changes we know what the previous projection
7577 was.
7578 (MapCanvas.SetMap): Unsubscribe and subscribe to
7579 LAYER_PROJECTION_CHANGED events.
7580 (MapCanvas.projection_changed): Split into two methods that respond
7581 to map and layer projection changes.
7582 (MapCanvas.map_projection_changed): New. Takes the current view and
7583 projects it using the new projection. This does not cause the
7584 map to be redrawn at full extent.
7585 (MapCanvas.layer_projection_changed): New. Cause a redraw which
7586 will draw each layer in its new projection.
7587
7588 * extensions/thuban/bmpdataset.cpp (BMPDataset::Open): Call
7589 VSIFClose() not VSIFCloseL() to close the file. Fixes a crash
7590 under Windows.
7591
7592 * extensions/thuban/gdalwarp.cpp (MFILENAME): Padding should be
7593 to twice sizeof(void*) because there are two digits for each
7594 hex byte.
7595
7596 2003-06-16 Bernhard Herzog <[email protected]>
7597
7598 Update to the layer interface: Direct access to the table,
7599 shapetable, shapefile and filename attributes is now actively
7600 deprecated by issuing deprecation warnings for all places where
7601 this happens.
7602
7603 * Thuban/Model/layer.py (Layer.__getattr__): New. Implement access
7604 to the instance variables table, shapetable, shapefile and
7605 filename via __getattr__ so that we can issue a deprecation
7606 warning.
7607 (Layer.SetShapeStore): Don't set the deprecated instance variables
7608 any more
7609 (Layer.SetShapeStore): Don't use deprecated layer instance
7610 variables
7611 (Layer.Destroy): No need to explicitly remove the instance
7612 variables any more
7613 (Layer.GetFieldType, Layer.Shape): Don't use deprecated layer
7614 instance variables
7615
7616 * Thuban/UI/classgen.py (ClassGenDialog.__init__)
7617 (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve)
7618 (GenQuantilesPanel.GetList, GenQuantilesPanel.OnRetrieve): Don't
7619 use deprecated layer instance variables
7620
7621 * Thuban/UI/classifier.py (Classifier.__init__): Don't use
7622 deprecated layer instance variables
7623
7624 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
7625 (IdentifyGridCtrl.selected_shape): Don't set the deprecated layer
7626 instance variables
7627
7628 * Thuban/UI/tableview.py (LayerTableGrid.select_shapes): Don't use
7629 deprecated layer instance variables
7630
7631 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Don't use
7632 deprecated layer instance variables
7633
7634 * Thuban/Model/save.py (SessionSaver.write_layer): Don't use
7635 deprecated layer instance variables
7636
7637 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer)
7638 (MapRenderer.polygon_render_param): Don't use deprecated layer instance
7639 variables
7640
7641 * test/runtests.py (main): Turn Thuban's deprecation warnings into
7642 errors so that they're cought by the tests
7643
7644 * test/test_load.py (TestSingleLayer.test): Don't use deprecated
7645 layer instance variables
7646
7647 2003-06-16 Jonathan Coles <[email protected]>
7648
7649 Fix a problem under Windows whereby if the user double-clicks on a
7650 layer in the legend that tree item will expand or collapse as well
7651 as open the layer properties dialog. The state of the tree item
7652 should not be affected.
7653
7654 * Thuban/UI/legend.py (LegendTree.__init__): Add instance variable
7655 preventExpandCollapse and subscribe to expanding and collapsing
7656 events.
7657 (LegendTree.OnItemExpandCollapse): New. Responds to expanding and
7658 collapsing events and will veto the event if it has been triggered
7659 by the user double clicking on a layer.
7660 (LegendTree._OnItemActivated): Set preventExpandCollapse to indicate
7661 that an expanding/collapsing event should be vetoed.
7662
7663 2003-06-13 Bernhard Herzog <[email protected]>
7664
7665 * Thuban/UI/classifier.py (Classifier.OnClose)
7666 (Classifier.map_layers_removed)
7667 (Classifier.layer_shapestore_replaced): Unsubscribe the messages
7668 in OnClose and not in map_layers_removed or
7669 layer_shapestore_replaced to make sure it always happens when the
7670 dialog is closed
7671
7672 2003-06-13 Jonathan Coles <[email protected]>
7673
7674 This puts back a fix for Windows where a panel is needed so that
7675 the background of the table view appears correctly.
7676
7677 * Thuban/UI/tableview.py (TableFrame.__init__): Add a panel
7678 object that can be used by derived classes to place any
7679 controls (including the grid) onto.
7680 (QueryTableFrame.__init__): Use the panel as the parent window
7681 for all the controls. Reparent the grid so that the panel is
7682 the parent. Call UpdateStatusText() to correctly initialize
7683 the status bar.
7684
7685 2003-06-13 Jonathan Coles <[email protected]>
7686
7687 * Thuban/UI/dialogs.py (ThubanFrame): New: a class that inherits
7688 from wxFrame (as opposed to wxDialog like the other classes)
7689 but otherwise behaves like the other classes. This is needed
7690 for the TableView which isn't really a dialog and needs to
7691 have a status bar and control buttons.
7692
7693 * Thuban/UI/tableview.py (TableGrid.__init__): Create an
7694 instance variable to keep track of how many rows are selected.
7695 Subscribe once to the the events we are interested in.
7696 (ThubanGrid.OnRangeSelect): Only handle event if event handling
7697 hasn't been turned off.
7698 (ThubanGrid.OnSelectCell): Only handle event if event handling
7699 hasn't been turned off.
7700 (ThubanGrid.ToggleEventListeners): Rather than subscribe None
7701 as an event listener (which changes the event handler stack)
7702 simply set an instance variable to False. This is checked in
7703 the event handlers.
7704 (ThubanGrid.GetNumberSelected): Return the number of currently
7705 selected rows.
7706 (TableFrame): Inherit from ThubanFrame so we can have a
7707 status bar and control buttons.
7708 (QueryTableFrame.__init__): Create a status bar. Fixes RTbug #1942.
7709 Explicitly set which items are selected in the operator choice and
7710 action choice so there is always a valid selection. Fixes RTbug #1941.
7711 Subscribe to grid cell selection events so we can update the
7712 status bar.
7713 (QueryTableFrame.UpdateStatusText): Update the status bar with
7714 how many rows are in the grid, how many columns, and how many
7715 rows are selected.
7716 (QueryTableFrame.OnGridSelectRange, QueryTableFrame.OnGridSelectCell):
7717 Call UpdateStatusText when cells are (de)selected.
7718 (QueryTableFrame.OnQuery): Use the string value in the value
7719 combo if either the selected item index is 0 or if the string
7720 cannot be found in the predefined list (this happens if the
7721 user changes the text). Fixes RTbug #1940.
7722 Only turn off the grid event listeners if there a query comes
7723 back with a none empty list of ids. in the case that the list
7724 is empty this causes a grid.ClearSelection() call to actually
7725 clear the grid selection which causes the selected items in
7726 the map to be deselected. Fixes RTbug #1939.
7727
7728 * test/test_save.py (XMLWriterTest.Encode): Check return values.
7729 Fixes RTbug #1851.
7730
7731 2003-06-13 Bernhard Herzog <[email protected]>
7732
7733 * Thuban/UI/identifyview.py (IdentifyView.__init__): Call
7734 self.selected_shape with the current selection to make sure the
7735 contents of the dialog are up to date when it's shown for the
7736 first time.
7737 The dialog used to work without this by luck. The recent fix to
7738 the connector module 'broke' a 'feature' the identify view was
7739 relying on, i.e that subscribing to a message in response to
7740 receiving a message of that type would mean that the new
7741 subscriber would also be called for the same message.
7742
7743 2003-06-12 Jonathan Coles <[email protected]>
7744
7745 * extensions/thuban/gdalwarp.cpp: Removed debug printing as
7746 the image is rendered. Fixes RTbug #1937.
7747
7748 2003-06-12 Jonathan Coles <[email protected]>
7749
7750 * Thuban/Lib/fileutil.py: As is done under Windows, create the
7751 user directory if it doesn't exist on a posix system.
7752 Fixes RTbug #1815.
7753
7754 * Thuban/Model/resource.py (get_user_proj_files): Moved the
7755 called to get_application_dir here, so that the directory
7756 will only be called if this method is invoked.
7757
7758 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Clear
7759 the projfilepath if no projection is selected.
7760
7761 2003-06-12 Jonathan Coles <[email protected]>
7762
7763 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Don't draw
7764 the scalebar if the current map has no projection set.
7765
7766 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Set the
7767 projfilepath label to just the basename of the projection file
7768 rather than include the entire path.
7769
7770 * Thuban/Model/resource.py: Fix missed proj functions that
7771 needed to be renamed.
7772
7773 2003-06-12 Jonathan Coles <[email protected]>
7774
7775 * Thuban/Model/classification.py: Removed assert statements that
7776 tested if the variable was an instance of Color.
7777
7778 * Thuban/Model/color.py (Color): Remove commented code that isn't
7779 used.
7780 (Transparent): Renamed from NoColor. Doesn't inherit from Color.
7781 Fixes RTbug #1835.
7782 (Transparent.__eq__, Transparent.__ne, Transparent.__repr): New.
7783 Needed now that the class doesn't inherit from Color.
7784
7785 2003-06-12 Jonathan Coles <[email protected]>
7786
7787 * test/test_save.py (XMLWriterTest.testEncode): Explicitly
7788 check unicode strings.
7789
7790 * test/test_layer.py: Check for existence of gdal.
7791
7792 2003-06-12 Jonathan Coles <[email protected]>
7793
7794 * Thuban/Model/xmlreader.py: New. Contains the XMLReader class
7795 that was in load.py
7796
7797 * Thuban/Model/xmlwriter.py: New. Contains the XMLWriter class
7798 that was in save.py
7799
7800 2003-06-12 Jonathan Coles <[email protected]>
7801
7802 This is largely a collection of bug fixes. We also handle the
7803 case where gdal is not on the system. The XMLReader and XMLWriter
7804 classes were moved into there own files to resolve some circular
7805 import references and because they shouldn't really be in the
7806 file that is dediciated to reading/writing session files since
7807 they are also used elsewhere.
7808
7809 * Thuban/Model/classgen.py: Renamed functions to follow the
7810 function_names_with_underscores style. Fixes RTbug #1903.
7811 (calculate_quantiles): Raise ValueError if 'percents' is invalid.
7812
7813 * Thuban/Model/layer.py: Import gdal only if it available.
7814 (RasterLayer): Handle the case where the gdal library is unavailable.
7815 Addresses RTbug #1877.
7816
7817 * Thuban/Model/load.py (XMLReader): Moved into seperate file
7818 xmlreader.py.
7819
7820 2003-06-12 Jonathan Coles <[email protected]>
7821
7822 This is largely a collection of bug fixes. We also handle the
7823 case where gdal is not on the system. The XMLReader and XMLWriter
7824 classes were moved into there own files to resolve some circular
7825 import references and because they shouldn't really be in the
7826 file that is dediciated to reading/writing session files since
7827 they are also used elsewhere.
7828
7829 * Thuban/Model/classgen.py: Renamed functions to follow the
7830 function_names_with_underscores style. Fixes RTbug #1903.
7831 (calculate_quantiles): Raise ValueError if 'percents' is invalid.
7832
7833 * Thuban/Model/layer.py: Import gdal only if it available.
7834 (RasterLayer): Handle the case where the gdal library is unavailable.
7835 Addresses RTbug #1877.
7836
7837 * Thuban/Model/load.py (XMLReader): Moved into seperate file
7838 xmlreader.py.
7839
7840 * Thuban/Model/save.py (escape, XMLWriter): Moved into seperate
7841 file xmlwriter.py.
7842
7843 * Thuban/Model/resource.py: Renamed functions to following the
7844 function_names_with_underscores style.
7845 (has_gdal_support): New function that returns true if the gdal
7846 library is available. Addresses RTbug #1877.
7847
7848 * Thuban/UI/application.py (ThubanApplication.OpenSession):
7849 Display a message box if the gdal library is not available, but
7850 only if there are any layers that would use it. Addresses RTbug #1877.
7851
7852 * Thuban/UI/classgen.py: Use renamed projection resource functions.
7853 (GenUniformPanel.__CalcStepping): Fix a slight discrepency
7854 when using integers versus floats.
7855
7856 * Thuban/UI/mainwindow.py (_has_gdal_support): New. Used to
7857 determine if the "Add Image Layer" menu option should be
7858 greyed out or not. Addresses RTbug #1877.
7859
7860 * Thuban/UI/projdialog.py: Use renamed projection resource functions.
7861
7862 * Thuban/UI/renderer.py (MapRenderer.render_map): Only try to
7863 optimize if a raster layer is visible. Fixes RTbug #1931.
7864 Only draw the raster layer if the gdal library is available.
7865 Addresses RTbug #1877.
7866
7867 * test/test_classgen.py: Add tests for generate_singletons,
7868 generate_uniform_distribution, generate_quantiles. Fixes RTbug #1903.
7869 (test_calculate_quantiles): Fix some tests to catch the new
7870 ValueError that is raised.
7871
7872 * test/test_proj.py: Use renamed projection resource functions.
7873
7874 * test/test_save.py (SaveSessionTest.testClassifiedLayer): New
7875 test for saving classified layers. Fixes RTbug #1902.
7876 (XMLWriterTest): New. Tests the XMLWriter class. Fixes RTbug #1851.
7877
7878 2003-06-12 Jan-Oliver Wagner <[email protected]>
7879
7880 Fix for http://intevation.de/rt/webrt?serial_num=1900.
7881
7882 * Thuban/UI/multiplechoicedialog.py: New. A multiple choice dialog.
7883
7884 * Thuban/UI/mainwindow.py: import wxMultipleChoiceDialog from
7885 multiplechoicedialog.py rather than from the wxPython library.
7886
7887 2003-06-11 Frank Koormann <[email protected]>
7888
7889 * Thuban/Lib/fileutil.py (get_application_dir): Minor stability
7890 update.
7891
7892 2003-06-11 Frank Koormann <[email protected]>
7893
7894 * Thuban/Lib/fileutil.py (get_application_dir): New function to
7895 determine the absolute .thuban/thuban directory under
7896 "posix" (os.expanduser) and "nt" (read AppData registry key).
7897
7898 * Thuban/Model/resource.py: Use get_application_dir
7899
7900 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
7901 Use get_application_dir.
7902
7903 2003-06-10 Bernhard Herzog <[email protected]>
7904
7905 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Subscribe to
7906 the messages MAP_LAYERS_REMOVED messages
7907 (LayerTableFrame.OnClose): Unsubscribe from it.
7908 (LayerTableFrame.map_layers_removed): New. Receiver for
7909 MAP_LAYERS_REMOVED. Close the dialog when the layer whose the
7910 dialog is showing is removed.
7911
7912 2003-06-10 Bernhard Herzog <[email protected]>
7913
7914 * Thuban/Lib/connector.py (Connector.Issue): Iterate over a copy
7915 of the receivers list so that unsubscribing in a receiver doesn't
7916 modify it while iterating over it.
7917
7918 * test/test_connector.py
7919 (ConnectorTest.test_disconnect_in_receiver): New. Test whether
7920 unsubscribing in a receiver works correctly. See docstring for
7921 details
7922
7923 2003-06-10 Bernhard Herzog <[email protected]>
7924
7925 * Thuban/Model/messages.py (LAYER_SHAPESTORE_REPLACED): New
7926 message.
7927
7928 * Thuban/Model/layer.py (Layer.SetShapeStore): Send
7929 LAYER_SHAPESTORE_REPLACED when the shapestore changes. A
7930 LAYER_CHANGED will still be sent if the classification changes.
7931
7932 * Thuban/UI/classifier.py (Classifier.__init__): Add the map as
7933 parameter so we can subscribe to some of its messages
7934 (Classifier.__init__): Subscribe to the map's MAP_LAYERS_REMOVED
7935 and the layer's LAYER_SHAPESTORE_REPLACED
7936 (Classifier.unsubscribe_messages): New. Unsubscribe from message
7937 subscribed to in __init__
7938 (Classifier.map_layers_removed)
7939 (Classifier.layer_shapestore_replaced): receivers for the messages
7940 subscribed to in __init__. Unsubscribe and close the dialog
7941
7942 * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): Pass
7943 the map to the Classifier dialog
7944
7945 * test/test_layer.py (SetShapeStoreTests): Derive from
7946 SubscriberMixin as well so we can test messages
7947 (SetShapeStoreTests.setUp): Subscribe to some of the layer's
7948 messages
7949 (SetShapeStoreTests.tearDown): Clear the messages again
7950 (SetShapeStoreTests.test_sanity): Expand the doc-string and check
7951 for the modified flag too
7952 (SetShapeStoreTests.test_set_shape_store_modified_flag): New test
7953 to check whether SetShapeStore sets the modified flag
7954 (SetShapeStoreTests.test_set_shape_store_different_field_name)
7955 (SetShapeStoreTests.test_set_shape_store_same_field)
7956 (SetShapeStoreTests.test_set_shape_store_same_field_different_type):
7957 Add tests for the messages. This checks both the new
7958 LAYER_SHAPESTORE_REPLACED and the older LAYER_CHANGED
7959
7960 2003-06-06 Jan-Oliver Wagner <[email protected]>
7961
7962 * Thuban/UI/mainwindow.py: Improved and partly added help texts for
7963 the menu items.
7964
7965 2003-06-05 Frank Koormann <[email protected]>
7966
7967 * Thuban/UI/identifyview.py (IdentifyView.__init__):
7968 Layout reimplemented without panel. Make life easier to fit the list
7969 in the dialog.
7970
7971 2003-06-05 Frank Koormann <[email protected]>
7972
7973 * Thuban/UI/projdialog.py (ProjFrame.__init__): Fill the projchoice
7974 once on initialisation (Former implementation resulted in multiple
7975 entries for each projection).
7976 (ProjFrame.__FillAvailList): selectProj as second optional parameter,
7977 if set, select the projection found under the specified name. This
7978 overwrites any other selection estimate.
7979 Removed projchoice filling from this method.
7980 (ProjFrame._OnSave, ProjFrame._OnAddToList):
7981 Updated call of ProjFrame.__FillAvailList
7982 (LCCPanel._DoLayout): Moved parameter controls in more common order.
7983
7984 * Resources/Projections/defaults.proj: Extended defaults representing
7985 various common European projections.
7986
7987 2003-06-05 Frank Koormann <[email protected]>
7988
7989 * Thuban/UI/identifyview.py (IdentifyView.__init__):
7990 Use ListCtrl instead of GridCtrl
7991
7992 * Thuban/Model/resource.py:
7993 Guess location of .thuban directory from tempdir parent directory.
7994
7995 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
7996 Guess location of .thuban directory from tempdir parent directory.
7997
7998 2003-06-04 Bernhard Herzog <[email protected]>
7999
8000 Do not cache the values returned by the tree widget's
8001 GetFirstChild and GetNextChild methods because it led to lots of
8002 segfaults. The new way requires more brute force but is more
8003 reliable.
8004
8005 * Thuban/UI/legend.py (LegendTree.__init__): Remove instance
8006 variable layer2id
8007 (LegendTree.find_layer): New method to do with brute force what
8008 layer2id tried to accomplish
8009 (LegendTree._OnMsgLayerChanged)
8010 (LegendTree._OnMsgLayerTitleChanged, LegendTree.__ShowHideLayer):
8011 Use find_layer instead of layer2id
8012 (LegendTree.__RemoveLayer, LegendTree.__AddLayer): No need to
8013 update layer2id anymore
8014 (LegendTree._OnMsgMapLayersRemoved)
8015 (LegendTree._OnMsgMapLayersAdded): Get by without layer2id.
8016
8017 2003-06-03 Thomas Koester <[email protected]>
8018
8019 * Thuban/Model/classgen.py (GenQuantiles0): New function.
8020
8021 2003-06-02 Bernhard Herzog <[email protected]>
8022
8023 * Thuban/UI/mainwindow.py (layer_rename command, table_rename command):
8024 New commands.
8025 (main_menu): Add the new commands.
8026 (MainWindow.TableRename): New. Implementation of the table_rename
8027 command.
8028 (MainWindow.RenameLayer): New. Implementation of the layer_rename
8029 command.
8030
8031 * Thuban/Model/session.py (Session.AddTable): call self.changed to
8032 set the modified flag
8033
8034 * test/test_session.py (TestSessionSimple.test_add_table): Test
8035 whether the modified flag is set properly
8036
8037 * Thuban/Model/base.py (TitledObject.SetTitle): Call changed
8038 instead of issue so that the modified flags get updated.
8039
8040 * test/test_base.py (SomeTitledObject): Derive from Modifiable
8041 instead of Publisher to reflect reality better and to accomodate
8042 the fact that SetTitle now calls changed instead of issue
8043
8044 2003-06-02 Bernhard Herzog <[email protected]>
8045
8046 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Resource
8047 acquisition has to happen before the try in a try-finally.
8048
8049 2003-06-02 Bernhard Herzog <[email protected]>
8050
8051 * Thuban/UI/legend.py (LegendTree._OnMsgMapLayersRemoved): It's
8052 possible that a layer is removed that is not currently selected in
8053 the legend so don't check for this.
8054
8055 2003-05-30 Bernhard Herzog <[email protected]>
8056
8057 * Thuban/Model/layer.py (Layer.Destroy): Set all instance
8058 variables to None that have direct or indirect references to
8059 shapefiles or dbf files to make sure that they do go away and the
8060 files are closed.
8061
8062 2003-05-30 Bernhard Herzog <[email protected]>
8063
8064 * Thuban/UI/legend.py (LegendTree.GetRootItem): Reset
8065 availImgListIndices when a new image list is created
8066
8067 2003-05-30 Bernhard Herzog <[email protected]>
8068
8069 * Thuban/UI/legend.py (LegendTree.__init__): New instance variable
8070 changing_selection to indicate whether the LegendTree code itself
8071 is currently changing the selection
8072 (LegendTree.normalize_selection): New method to normalize the
8073 selection by selecting the layer item even if the user clicked on
8074 the classification.
8075 (LegendTree._OnSelChanged): normalize the selection. This works
8076 around a bug in wx which doesn't keep track of the selection
8077 properly when subtrees are deleted.
8078
8079 2003-05-30 Bernhard Herzog <[email protected]>
8080
8081 * Thuban/UI/view.py (MapCanvas.set_view_transform): Limit the
8082 maximum and minimum scale factors.
8083
8084 * test/test_classgen.py (ClassGenTest.test): Update to reflect the
8085 changes in classgen.py
8086
8087 2003-05-30 Jonathan Coles <[email protected]>
8088
8089 * Thuban/Model/classgen.py: Remove ClassGenerator class but make
8090 all the methods functions. Fixes RTBug #1903.
8091
8092 * Thuban/Model/map.py (Map.TopLayer, Map.BottomLayer): Renamed
8093 to MoveLayerToTop and MoveLayerToBottom respectively. Fixes
8094 RTBug #1907.
8095
8096 * Thuban/UI/classgen.py: Use classgen functions that were part
8097 of the ClassGenerator class. Put try/finally blocks around
8098 code that uses wxBeginBusyCursor()/wxEndBusyCursor(). Fixes
8099 RTBug #1904.
8100
8101 * Thuban/UI/classifier.py: Remove unused import of ClassGenerator.
8102
8103 * Thuban/UI/legend.py: The legend was cleared and repopulated any
8104 time something changed which caused some state to be lost such
8105 as which children were expanded or collapsed. Fixes RTBug #1901.
8106 (LegendTree._OnMsgMapLayersAdded): Add only new layers.
8107 (LegendTree.__OnMsgMapLayersRemoved): Remove layers that exist in
8108 the legend but not in the map.
8109 (LegendTree.__FillTree): Move main functionality out into smaller
8110 methods that can be used by other methods.
8111 (LegendTree.__FillTreeLayer): Reuse old slots in the image list
8112 if they are available.
8113 (LegendTree.DeleteAllItems): Renamed from __DeleteAllItems so
8114 that we override the wxTreeCtrl method. Iterate over children
8115 and call __RemoveLayer.
8116 (LegendTree.__AddLayer): New. Add a new layer to the legend.
8117 (LegendTree.__RemoveLayer): Remove a layer from the legend.
8118 (LegendTree.DeleteChildren): New, overrides wxTreeCtrl method.
8119 Should only be called with the id of a layer branch.
8120 (LegendTree.GetRootItem): New, overrides wxTreeCtrl method.
8121 Returns the root item or creates one if necessary.
8122
8123 * Thuban/UI/renderer.py (MapRenderer.draw_raster_layer): Call
8124 ProjectRasterFile with tuple arguments instead of strings.
8125
8126 * Thuban/UI/tableview.py (QueryTableFrame.OnQuery): Wrap code
8127 with try/finally. Fixes RTBug #1904.
8128
8129 * Thuban/UI/view.py (MapCanvas.OnPaint): Wrap code
8130 with try/finally. Fixes RTBug #1904.
8131 (MapCanvas.FitSelectedToWindow): If a single point is selected
8132 simply center it on the display. Fixes RTBug #1849.
8133
8134 * extensions/thuban/gdalwarp.cpp: Removed code that allowed gdalwarp
8135 to be compiled as a standalone app. Now the code can only be
8136 called from Python which simplifies the parameter passing.
8137 (ProjectRasterFile): Handle Python arguments. Remove code that
8138 checks for a destination dataset. Add more clean up code.
8139
8140 * test/test_map.py (TestMapWithContents.test_raise_layer_top,
8141 TestMapWithContents.test_lower_layer_bottom):
8142 Test Map.MoveLayerToTop() and Map.MoveLayerToBottom() respectively.
8143 Fixes RTBug #1907.
8144
8145 * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Apply a full
8146 extent to the map when the legend is toggled. Fixes RTBug #1881.
8147
8148 2003-05-29 Jan-Oliver Wagner <[email protected]>
8149
8150 * Thuban/UI/tableview.py (LayerTableFrame.OnClose): Bug-fix: Now
8151 unsubscribes all that is subcribed in __init__.
8152
8153 2003-05-28 Bernhard Herzog <[email protected]>
8154
8155 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer)
8156 (MainWindow.CanDuplicateLayer): New methods to implement the
8157 Layer/Duplicate command.
8158 (layer_duplicate command): New.
8159 (main_menu): Add layer_duplicate to the Layer menu.
8160
8161 2003-05-28 Bernhard Herzog <[email protected]>
8162
8163 * Thuban/UI/tableview.py (NullRenderer.Draw): New. Our own
8164 renderer so that NULL/None values get displayed differently (by a
8165 gray rectangle).
8166 (TableGrid.__init__): Override the default renderers
8167
8168 2003-05-28 Bernhard Herzog <[email protected]>
8169
8170 * Thuban/Model/layer.py (Layer.SetShapeStore): Set the
8171 classification to "None" if the type of the field has changed.
8172
8173 * test/test_layer.py (SetShapeStoreTests): New. Class with a few
8174 test for the Layer.SetShapeStore method
8175
8176 2003-05-28 Jan-Oliver Wagner <[email protected]>
8177
8178 * Thuban/Model/layer.py (Layer.TreeInfo): Fixed a bug (a layer
8179 does not necessarily have a filename).
8180
8181 2003-05-28 Jan-Oliver Wagner <[email protected]>
8182
8183 * Thuban/UI/mainwindow.py (MainWindow.TableClose, MainWindow.TableShow):
8184 sort the selection list for the dialog.
8185
8186 2003-05-28 Frank Koormann <[email protected]>
8187
8188 * extensions/thuban/wxproj.cpp
8189 (project_point): Removed cast to int for projected point coordinates.
8190 (shape_centroid): Return last point if all polygon vertices fall
8191 to one point.
8192
8193 2003-05-28 Bernhard Herzog <[email protected]>
8194
8195 * Thuban/UI/mainwindow.py (_can_unjoin): Add doc-string and cope
8196 with layers that don't have shapestores, i.e. raster layers.
8197
8198 2003-05-28 Bernhard Herzog <[email protected]>
8199
8200 * Thuban/Model/table.py (DBFTable.__init__): Omit the extension
8201 when determining the title from the filename.
8202
8203 * test/test_dbf_table.py (TestDBFTable.test_title): Update to
8204 reflect changes in the way the title is derived from the filename
8205
8206 2003-05-28 Frank Koormann <[email protected]>
8207
8208 * Thuban/UI/mainwindow.py (MainWindow.TableShow):
8209 Added wxDEFAULT_DIALOG_STYLE to show table dialog styles.
8210
8211 2003-05-27 Bernhard Herzog <[email protected]>
8212
8213 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages): Also
8214 delegate SelectedLayer.
8215 (MainWindow.LayerUnjoinTable): Implement.
8216 (_can_unjoin): New. Helper function for the sensitivity of the
8217 layer/unjoin command.
8218
8219 * Thuban/Model/data.py (ShapefileStore.OrigShapeStore)
8220 (DerivedShapeStore.OrigShapeStore): New. Return the original
8221 shapestore. Used to figure out how to unjoin.
8222 (DerivedShapeStore.Shapefile): Fix a typo.
8223
8224 2003-05-27 Bernhard Herzog <[email protected]>
8225
8226 * Thuban/UI/join.py (JoinDialog): Extend to handle layer joins as
8227 well
8228 (JoinDialog.__init__): Use the layer parameter and only build the
8229 left choice when a layer is given
8230 (JoinDialog.OnJoin): Handle layer joins as well
8231 (JoinDialog.OnLeftTable, JoinDialog.OnRightTable): Handle the case
8232 that the user selects the "Select..." item. The sensitivitly
8233 updating is now in update_sensitivity
8234 (JoinDialog.y): New method to refactor the sensitivity update of
8235 the join button into its own method.
8236
8237 * Thuban/UI/mainwindow.py (MainWindow.LayerJoinTable): Implement.
8238
8239 2003-05-27 Bernhard Herzog <[email protected]>
8240
8241 * Thuban/UI/mainwindow.py (table_close command): Make it sensitive
8242 iff there are unreferenced tables in the session
8243
8244 2003-05-27 Bernhard Herzog <[email protected]>
8245
8246 * Thuban/Model/messages.py (TABLE_REMOVED): New message.
8247
8248 * Thuban/Model/session.py (Session.UnreferencedTables): New method
8249 to return tables that are not referenced by other tables or shape
8250 stores and can be removed.
8251 (Session.RemoveTable): Issue a TABLE_REMOVED message after
8252 removing the table
8253
8254 * Thuban/UI/mainwindow.py: Remove unused imports
8255 (MainWindow.TableClose): Implement.
8256
8257 * Thuban/UI/tableview.py (TableFrame.__init__): Subscribe to some
8258 messages so that the frame will be automatically closed when a new
8259 session is opened or the table is removed.
8260 (TableFrame.OnClose): Unsubscribe the Subscriptions made in
8261 __init__
8262 (TableFrame.close_on_session_replaced)
8263 (TableFrame.close_on_table_removed): New. Subscribers that close
8264 the window
8265
8266 * test/test_session.py (TestSessionMessages.test_remove_table)
8267 (TestSessionSimple.test_remove_table): Move the test to
8268 TestSessionSimple and add test for the TABLE_REMOVED message
8269 (TestSessionBase.setUp): Also subscribe to TABLE_REMOVED
8270 (TestSessionSimple.test_unreferenced_tables) New. Test for the
8271 UnreferencedTables method.
8272 (UnreferencedTablesTests): New. Class with some more sophisticated
8273 tests for UnreferencedTables.
8274
8275 2003-05-27 Frank Koormann <[email protected]>
8276
8277 * Thuban/UI/tableview.py (QueryTableFrame.__init__): The "_S_election"
8278 display has some unwanted side effects. Removed again.
8279
8280 2003-05-27 Frank Koormann <[email protected]>
8281
8282 * Resources/Bitmaps/legend_icon_layer.xpm: New, icon for legend.
8283
8284 * Thuban/UI/legend.py (LegendTree.__FillTree): Use "legend_icon_layer"
8285
8286 2003-05-27 Jan-Oliver Wagner <[email protected]>
8287
8288 * test/test_menu.py (MenuTest.test): Added test for
8289 Menu.RemoveItem().
8290
8291 * Thuban/UI/menu.py (Menu.RemoveItem): New. Remove an item from
8292 the menu.
8293
8294 2003-05-27 Frank Koormann <[email protected]>
8295
8296 Nonmodal dialogs without parent (i.e. they can fall behind the main
8297 window)
8298
8299 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Explicitly destroy
8300 all dialogs in the dialogs dictionary and the canvas.
8301
8302 * Thuban/UI/dialogs.py (NonModalNonParentDialog): New class, without
8303 parent, i.e. can fall behind other windows.
8304 (NonModalDialog.OnClose): Check is dialog is in mainwindow.dialog
8305 dictionary before removing it.
8306
8307 * Thuban/UI/classifier.py: Dialog derived from NonModalNonParentDialog
8308
8309 * Thuban/UI/projdialog.py: Dialog derived from NonModalNonParentDialog
8310 * Thuban/UI/tableview.py: Dialog derived from NonModalNonParentDialog
8311 * Thuban/UI/tree.py: Dialog derived from NonModalNonParentDialog
8312
8313 2003-05-27 Bernhard Herzog <[email protected]>
8314
8315 * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): New. Open a
8316 tableview dialog
8317 (MainWindow.TableShow): Use ShowTableView to open the dialogs.
8318 Also, don't use the table's titles as the dialog names. The titles
8319 aren't guaranteed to be unique.
8320 (MainWindow.TableOpen): Open a table view dialog after opening the
8321 table
8322
8323 2003-05-27 Bernhard Herzog <[email protected]>
8324
8325 * Thuban/UI/mainwindow.py: Remove the Table/Hide menu item. Its
8326 effect can be achieved by simply closing the window showing the
8327 table.
8328 (MainWindow.TableHide): Removed.
8329 (main_menu): Removed "table_hide"
8330
8331 2003-05-27 Frank Koormann <[email protected]>
8332
8333 Fix legend tree display problems under Win32
8334
8335 * Thuban/UI/legend.py: BMP_SIZE_W = 15
8336 (LegendTree.__FillTree): Display "legend_icon_map.xpm" with layer title.
8337 (LegendTree.__FillTreeLayer): Explicitely set SelectedImage.
8338
8339 * Resources/Bitmaps/legend_icon_map.xpm: New icon for legend.
8340
8341 2003-05-27 Jan-Oliver Wagner <[email protected]>
8342
8343 * Thuban/UI/menu.py (Menu.InsertSeparator): Additional optional parameter
8344 'after' now allows to insert separators almost anywhere in the menu.
8345
8346 2003-05-27 Frank Koormann <[email protected]>
8347
8348 * Thuban/UI/tableview.py (QueryTableFrame.__init__): Underline the
8349 "S" of selection box label to hint on hot key (Alt-S). Works under
8350 Win32 but is ignored under GTK.
8351
8352 2003-05-26 Frank Koormann <[email protected]>
8353
8354 * Thuban/UI/projdialog.py (ProjFrame.__do_layout, ProjPanel._DoLayout):
8355 Center Choices.
8356
8357 2003-05-26 Bernhard Herzog <[email protected]>
8358
8359 Remove the Precision methods again. They're too DBF specific to be
8360 part of the table interface and they're only used in table_to_dbf
8361 anyway.
8362
8363 * Thuban/Model/transientdb.py (TransientTableBase.Width):Use a
8364 fixed precision of 12 for doubles.
8365 (TransientTableBase.Precision): Removed
8366 (AutoTransientTable.Width): Delegate to self.table.
8367
8368 * Thuban/Model/table.py (DBFTable.Precision)
8369 (MemoryTable.Precision): Removed.
8370 (MemoryTable.Width): Use a fixed precision of 12 for doubles.
8371 (table_to_dbf): Use a fixed precision of 12 for floats unless the
8372 column object specifies something else.
8373
8374 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): New.
8375 test for table_to_dbf
8376
8377 2003-05-26 Bernhard Herzog <[email protected]>
8378
8379 * test/test_transientdb.py
8380 (TestTransientTable.run_iceland_political_tests): Fix a comment.
8381
8382 2003-05-26 Bernhard Herzog <[email protected]>
8383
8384 * Thuban/UI/mainwindow.py (MainWindow.TableOpen): Real
8385 implementation. Mark parts of the file format strings for
8386 localization.
8387
8388 * Thuban/Model/session.py (Session.OpenTableFile): New. Open a dbf
8389 file and add the table to the tables managed by the session
8390
8391 * test/test_session.py (TestSessionSimple.test_open_table_file):
8392 New. test case for OpenTableFile
8393
8394 2003-05-26 Jan-Oliver Wagner <[email protected]>
8395
8396 * Thuban/UI/controls.py, Thuban/UI/identifyview.py, Thuban/UI/join.py,
8397 Thuban/UI/labeldialog.py, Thuban/UI/mainwindow.py,
8398 Thuban/UI/proj4dialog.py, Thuban/UI/tableview.py, Thuban/UI/view.py:
8399 Replace the true/false of wxWindows by True/False of Python 2.2.1.
8400
8401 2003-05-26 Jan-Oliver Wagner <[email protected]>
8402
8403 * Thuban/UI/tableview.py (LayerTableFrame.__init__): If there is
8404 already a selection present, update the grid accordingly.
8405
8406 * Thuban/UI/mainwindow.py (MainWindow.TableShow): Make the dialog
8407 resizeable and increase its initial size.
8408
8409 2003-05-26 Frank Koormann <[email protected]>
8410
8411 Table export functionality
8412
8413 * Thuban/Model/table.py (DBFTable.Width, MemoryTable.Width):
8414 Return width (in characters) for a column.
8415 (DBFTable.Precision, MemoryTable.Precision): Return decimal precision.
8416 (table_to_dbf): Write table to dbf file.
8417 (table_to_csv): Write table to csv file.
8418
8419 * Thuban/Model/transientdb.py (TransientTableBase.Width,
8420 TransientTableBase.Precision): Return column width and precision.
8421
8422 * Thuban/UI/tableview.py (QueryTableFrame.OnSaveAs): Call table_to_dbf
8423 or table_to_csv depending on file selection.
8424
8425 * test/test_dbf_table.py:
8426 Test table_to_dbf (extension of former part of test).
8427
8428 * test/test_csv_table.py:
8429 Test table_to_csv.
8430
8431 2003-05-23 Jan-Oliver Wagner <[email protected]>
8432
8433 * Thuban/UI/join.py (JoinDialog.OnJoin): Use _() for strings.
8434 Use QueryTableFrame instead of TableFrame.
8435
8436 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Prefix the
8437 table window with 'Layer Table:' instead of 'Table:'.
8438
8439 2003-05-23 Jan-Oliver Wagner <[email protected]>
8440
8441 Give all tables a title via mix-in TitledObject.LayerShowTable
8442
8443 * Thuban/Model/base.py (TitledObject.SetTitle): Call method 'issue'
8444 only if it exists.
8445
8446 * Thuban/Model/table.py (DBFTable, MemoryTable): mix-in TitledObject
8447 and call its init-method with a default title. Remove Title() method.
8448
8449 * Thuban/Model/transientdb.py (TransientTable, TransientJoinedTable,
8450 AutoTransientTable): mix-in TitledObject and call its init-method with
8451 a default title. Remove Title() method.
8452
8453 2003-05-23 Bernhard Herzog <[email protected]>
8454
8455 * Thuban/Model/session.py (Session.AddShapeStore): Define
8456 AddShapeStore analogously to AddTable.
8457
8458 * test/test_session.py (TestSessionSimple.test_add_shapestore):
8459 New. Test for AddShapeStore
8460
8461 2003-05-23 Jan-Oliver Wagner <[email protected]>
8462
8463 Introducing QueryTableFrame and a very coarse ShowTable implementation.
8464
8465 * Thuban/UI/tableview.py (LayerTableFrame, QueryTableFrame): Split the
8466 class LayerTableFrame into two classes, LayerTableFrame and QueryTableFrame.
8467 The latter implements the selection GUI without dependency on a layer.
8468 LayerTableFrame now is derived from QueryTableFrame and connects
8469 to a layer.
8470
8471 * Thuban/UI/mainwindow.py (MainWindow.TableShow): A very coarse
8472 implementation that still needs work.
8473
8474 * Thuban/Model/layer.py (Layer.TreeInfo): Added filename.
8475
8476 2003-05-22 Frank Koormann <[email protected]>
8477
8478 * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
8479 Added "outer_join = False" as optional parameter.
8480 (TransientJoinedTable.create): If outer join is true, perform a
8481 "LEFT OUTER JOIN" instead of "JOIN", which preserves all records of
8482 the left table. Records not matching are filled with 0 / None.
8483
8484 * Thuban/UI/join.py (JoinDialog.__init__): Checkbox for outer join.
8485 (JoinDialog.OnJoin): Consider outer join check box.
8486
8487 2003-05-22 Bernhard Herzog <[email protected]>
8488
8489 * Thuban/UI/join.py (JoinDialog.OnJoin): Use exc_info in a
8490 somewhat safer way. Storing the traceback in a local variable can
8491 lead to memory leaks
8492
8493 2003-05-22 Bernhard Herzog <[email protected]>
8494
8495 * Thuban/UI/join.py (JoinDialog.OnJoin): Make sure to really call
8496 the wxMessageDialog's Destroy() method.
8497
8498 2003-05-22 Frank Koormann <[email protected]>
8499
8500 * Thuban/UI/join.py (JoinDialog.__init__): Make use of
8501 TransientTable.Title()
8502
8503 2003-05-22 Frank Koormann <[email protected]>
8504
8505 Join Dialog, initial version.
8506
8507 * Thuban/UI/mainwindow.py (MainWindow.TableJoin): Removed print.
8508
8509 * Thuban/UI/join.py (JoinDialog): Functional implementation of
8510 former framework. Renamed Table1/Table2 to LeftTable/RightTable
8511 in all occurences.
8512
8513 * Thuban/Model/transientdb.py (TransientJoinedTable.__doc__):
8514 Typo fixed.
8515
8516 2003-05-22 Bernhard Herzog <[email protected]>
8517
8518 Give the tables titles so that the GUI can display more meaningful
8519 names. For now the titles are fixed but depend on e.g. filenames
8520 or the titles of the joined tables.
8521
8522 * Thuban/Model/transientdb.py (TransientTable.Title)
8523 (TransientJoinedTable.Title, AutoTransientTable.Title): New.
8524
8525 * Thuban/Model/table.py (DBFTable.Title, MemoryTable.Title): New.
8526
8527 * test/test_transientdb.py
8528 (TestTransientTable.test_auto_transient_table_title): New. Test
8529 for the Title method
8530 (TestTransientTable.test_transient_joined_table)
8531 (TestTransientTable.test_transient_table): Add test for the Title
8532 methods
8533
8534 * test/test_memory_table.py (TestMemoryTable.test_title): New.
8535 Test for the Title method
8536
8537 * test/test_dbf_table.py (TestDBFTable.test_title): New. Test for
8538 the Title method
8539
8540 2003-05-22 Bernhard Herzog <[email protected]>
8541
8542 * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
8543 Provide a better way to destroy the layers
8544 (TestLayer.test_base_layer, TestLayer.test_arc_layer)
8545 (TestLayer.test_point_layer, TestLayer.test_empty_layer)
8546 (TestLayer.test_polygon_layer, TestLayer.test_get_field_type): Use
8547 the new way to destroy the layers.
8548 (TestLayer.test_derived_store): New. Test for using a layer with a
8549 DerivedShapeStore
8550
8551 * Thuban/Model/layer.py (Layer.SetShapeStore): Only set the
8552 filename if the shape store actually has one.
8553
8554 2003-05-22 Bernhard Herzog <[email protected]>
8555
8556 * Thuban/Model/table.py (DBFTable.FileName): New. Accessor method
8557 for the filename
8558
8559 * test/test_dbf_table.py (TestDBFTable.test_filename): New. Test
8560 for the FileName method
8561 (TestDBFTableWriting.test_write): Fix spelling of filename
8562
8563 2003-05-22 Thomas Koester <[email protected]>
8564
8565 * Thuban/Model/range.py, test/test_range.py: Brought over new Range
8566 from SciParam that now really is immutable.
8567
8568 2003-05-22 Frank Koormann <[email protected]>
8569
8570 Layer Top/Bottom placement added to legend.
8571
8572 * Thuban/UI/legend.py
8573 (LegendPanel._OnMoveTop(), LayerPanel._OnMoveBottom): New, methods
8574 bound to tool events.
8575 (LegendTree.MoveCurrentItemTop(), LegendTree.MoveCurrentItemBottom):
8576 New, methods binding the event methods with the map methods.
8577
8578 * Thuban/Model/map.py (Map.TopLayer(), Map.BottomLayer()): New, place
8579 layer at top/bottom of layer stack.
8580
8581 * Resources/Bitmaps/top_layer.xpm: New button icon.
8582
8583 * Resources/Bitmaps/bottom_layer.xpm: New button icon.
8584
8585 2003-05-22 Bernhard Herzog <[email protected]>
8586
8587 * Thuban/Model/session.py (Session.RemoveTable): New method to
8588 remove tables
8589
8590 * test/test_session.py (TestSessionSimple.test_remove_table): New.
8591 Test for RemoveTable
8592
8593 2003-05-22 Thomas Koester <[email protected]>
8594
8595 * Thuban/Model/classgen.py: Added short module doc string and CVS id.
8596 (ClassGenerator.GenUniformDistribution): Use new Range __init__, too.
8597
8598 2003-05-22 Bernhard Herzog <[email protected]>
8599
8600 Implement a way to discover dependencies between tables and
8601 shapestores.
8602
8603 * Thuban/Model/transientdb.py (TransientTableBase.Dependencies)
8604 (TransientJoinedTable.Dependencies)
8605 (AutoTransientTable.SimpleQuery): New. Implement the dependencies
8606 interface
8607 (TransientJoinedTable.__init__): Keep tack of the original table
8608 objects in addition to the corresponding transient tables.
8609
8610 * Thuban/Model/table.py (DBFTable.Dependencies)
8611 (MemoryTable.Dependencies): New. Implement the dependencies
8612 interface
8613
8614 * Thuban/Model/data.py (ShapeTable): New. Helper class for
8615 ShapefileStore
8616 (ShapefileStore.__init__): Use ShapeTable instead of
8617 AutoTransientTable
8618 (ShapefileStore.Table, ShapefileStore.Shapefile): Add doc-strings
8619 (ShapefileStore.FileName, ShapefileStore.FileType): New. Accessor
8620 methods for filename and type
8621 (ShapefileStore.Dependencies): New. Implement the dependencies
8622 interface
8623 (DerivedShapeStore): New class to replace SimpleStore. The main
8624 difference to SimpleStore is that it depends not on a shapefile
8625 but another shapestore which expresses the dependencies a bit
8626 better
8627 (SimpleStore.__init__): Add deprecation warning.
8628
8629 * test/test_dbf_table.py (TestDBFTable.test_dependencies): New.
8630 Test for the Dependencies method.
8631
8632 * test/test_memory_table.py (TestMemoryTable.test_dependencies):
8633 New. Test for the Dependencies method.
8634
8635 * test/test_transientdb.py
8636 (TestTransientTable.test_auto_transient_table_dependencies): New.
8637 Test for the Dependencies method.
8638 (TestTransientTable.test_transient_joined_table): Add test for the
8639 Dependencies method.
8640
8641 * test/test_session.py (TestSessionSimple.setUp)
8642 (TestSessionSimple.tearDown): New. Implement a better way to
8643 destroy the sessions.
8644 (TestSessionSimple.test_initial_state)
8645 (TestSessionSimple.test_add_table): Bind session to self.session
8646 so that it's destroyed by tearDown
8647 (TestSessionSimple.test_open_shapefile): New. Test for
8648 OpenShapefile and the object it returns
8649
8650 2003-05-22 Bernhard Herzog <[email protected]>
8651
8652 * Thuban/Model/session.py (Session.AddTable): New method to
8653 register tables with the session.
8654 (Session.Tables): Return the tables registered with AddTable too.
8655
8656 * test/test_session.py (TestSessionSimple.test_add_table): New.
8657 Test case for the AddTable method
8658
8659 2003-05-22 Frank Koormann <[email protected]>
8660
8661 UI polishing updates: Place main buttons (OK, Cancel, etc) in the
8662 lower right corner, center labels for selections, initialize controls
8663 in reasonable order for keyboard navigation.
8664
8665 * Thuban/UI/projdialog.py (ProjFrame.__init__, ProjFrame.__doLayout)
8666 (ProjFrame.__DoOnProjAvail): Determine position of current projection
8667 using the wxListBox.FindString() method. Still a problem (#1886)
8668
8669 * Thuban/UI/classifier.py
8670 (Classifier.__init__, SelectPropertiesDialog.__init__)
8671
8672 * Thuban/UI/classgen.py (ClassGenDialog.__init__,
8673 (ClassGenDialog.__DoOnGenTypeSelect): Moved initialization of the
8674 different classification types from here to __init__.
8675 (GenUniquePanel.__init__): Set the column width of the first field
8676 in the Field ListCtrl to the full width.
8677
8678 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Rename 'Save As'
8679 Button to 'Export'. Center Buttons in Selection Box, set Focus to
8680 Grid.
8681 (LayerTableFrame.OnKeyDown()): New, bound to the grid with EVT_KEY_DOWN,
8682 changes focus to the Selection when pressing "Alt-S".
8683
8684 * Thuban/UI/legend.py (LegendTree.__SetVisibilityStyle): Only gray out
8685 the text if not visible. The italic font sometimes exceeds the
8686 rendering area.
8687
8688 2003-05-21 Jonathan Coles <[email protected]>
8689
8690 * Thuban/UI/dock.py (DockFrame): Rename references to _OnClose
8691 to OnClose so that Thuban closes correctly.
8692
8693 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Call
8694 DockFrame.OnClose, not DockFrame._OnClose.
8695
8696 2003-05-21 Jonathan Coles <[email protected]>
8697
8698 * Thuban/Model/classgen.py (ClassGenerator.GenQuantiles): Remove
8699 references to 'inf' and use new Range __init__ to pass floats
8700 directly rather than converting them to strings first.
8701 Fixes RTBug #1876.
8702
8703 * Thuban/Model/classification.py (ClassGroupRange.SetRange):
8704 Use new Range ___init__ to pass floats.
8705
8706 * Thuban/Model/layer.py (RasterLayer.__init__): Test if the
8707 filename is a valid image file. Throw IOError otherwise.
8708
8709 * Thuban/Model/range.py: Brought over new Range from SciParam that
8710 is immutable and has an __init__ which can accept floats.
8711
8712 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Move OpenShapefile
8713 into try block. AddLayer doesn't throw any exceptions anymore.
8714 (MainWindow.AddRasterLayer): Move constructor of RasterLayer into
8715 try block.
8716
8717 * Thuban/UI/projdialog.py (GeoPanel.__init__): Put Degrees as
8718 the first item in choices. Fixes RTBug #1882.
8719
8720 * Thuban/UI/renderer.py (MapRenderer.render_map): Check if scale
8721 has gone to 0 which is a serious problem. abort.
8722 (MapRenderer.draw_raster_layer): Catch IOError seperately and
8723 print the error from GDAL.
8724
8725 * Thuban/UI/tableview.py (TableGrid.__init__): Call
8726 ToggleEventListeners to turn on listening.
8727 (TableGrid.ToggleEventListeners): New. Turns event listening on
8728 and off so as to prevent excessive messages.
8729 (LayerTableFrame.OnQuery): Use TableGrid.ToggleEventListeners
8730 to suppress excessive messages when selecting many rows.
8731 Fixes RTBug #1880.
8732
8733 * Thuban/UI/view.py: Added checks against if scale == 0. This
8734 is a serious problem that can occur when an image without
8735 geo data is loading and causes the map projection bounds to
8736 go to infinity. Right now, the solution is to simply try
8737 to recover.
8738
8739 * extensions/thuban/cpl_mfile.cpp (MFILEClose): Make sure
8740 to set the MFILEReceiver attributes even if the data is NULL.
8741
8742 * extensions/thuban/gdalwarp.cpp: Improved the error handling
8743 and passed GDAL messages back up to the Python layer. Also
8744 tried to fix some memory leaks that were present in the original
8745 utility but didn't matter because the program aborted.
8746
8747 * test/test_range.py: Copied over tests from SciParam. Removed
8748 tests against importing. Fixes RTBug #1867.
8749
8750 2003-05-21 Bernhard Herzog <[email protected]>
8751
8752 * test/test_load.py: Remove unused imports and restructure the
8753 test code
8754 (LoadSessionTest): Split into one class for each test and turn
8755 LoadSessionTest itself into the base class for all such session
8756 tests.
8757 (ClassificationTest): New base class for load tests that test
8758 classifications
8759 (TestSingleLayer, TestLayerVisibility, TestClassification)
8760 (TestLabels, TestLayerProjection, TestRasterLayer): New classes
8761 for the individual tests
8762
8763 * test/support.py (FileLoadTestCase.filename): New base class for
8764 file loading tests
8765
8766 2003-05-21 Jan-Oliver Wagner <[email protected]>
8767
8768 * Resources/Projections/defaults.proj: Renamed 'Universal Transverse
8769 Mercator' to 'UTM Zone 32' as a more convenient example.
8770 Added 'Gauss Krueger Zone 6'.
8771
8772 * Data/iceland_sample_raster.thuban: political polygon now
8773 filled transparent to have the raster image visible at once.
8774
8775 2003-05-21 Frank Koormann <[email protected]>
8776
8777 * Thuban/UI/mainwindow.py (MainWindow): Renamed _OnClose() back to
8778 OnClose() to keep in sync with extensions. Internally Thuban
8779 still uses "underscored" names.
8780
8781 2003-05-20 Jonathan Coles <[email protected]>
8782
8783 This puts back Raster layer support. These layers support projections
8784 through the GDAL library. Currently, the CVS version is being used.
8785 There are no Debian packages available although this may change soon.
8786 A GDAL driver was extended to support writing to memory rather to
8787 files.
8788
8789 There is still some work that needs to be done, such as some error
8790 handling when loading invalid images or when there is a problem
8791 projecting the image. This putback simply checks in the majority
8792 of the work.
8793
8794 * setup.py: Add gdalwarp library extension.
8795
8796 * Thuban/Model/layer.py (BaseLayer.HasClassification): New.
8797 Defaults to False, but can be overridden by subclasses if they
8798 support classification.
8799 (RasterLayer): New. Defines a new layer that represents an
8800 image.
8801
8802 * Thuban/Model/load.py (SessionLoader.__init__): Add rasterlayer
8803 tag handler.
8804 (SessionLoader.start_layer): Encode the filename.
8805 (SessionLoader.start_rasterlayer, SessionLoader.end_rasterlayer):
8806 New. Supports reading a rasterlayer tag.
8807
8808 * Thuban/Model/map.py (Map.BoundingBox): Fix typo in comment.
8809
8810 * Thuban/Model/save.py (XMLWriter.encode): Don't assume that we
8811 get a string in Latin1. If we get such as string convert it to
8812 unicode first, otherwise leave if alone before encoding.
8813 (SessionSaver.write_layer): Add support for writing both Layers
8814 and RasterLayers.
8815
8816 * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
8817 The right argument may not be a string, it could also be a Column.
8818
8819 * Thuban/UI/application.py (ThubanApplication.CreateMainWindow):
8820 Make initial window size 600x400. Fixes RTBug #1872.
8821
8822 * Thuban/UI/classifier.py (Classifier.__init__): Rearrange how
8823 the dialog is constructed so that we can support layers that
8824 do not have classifications.
8825 (Classifier._OnTry): Only build a classification if the layer
8826 supports one.
8827
8828 * Thuban/UI/legend.py: Change all checks that a layer is an
8829 instance of Layer into checks against BaseLayer.
8830 (LegendTree.__FillTreeLayer): Only add children to a branch if
8831 the layer supports classification.
8832
8833 * Thuban/UI/mainwindow.py (MainWindow.NewSession,
8834 MainWindow.OpenSession): Don't proceed with an action if the
8835 user chooses Cancel when they are asked to save changes.
8836 (MainWindow.AddRasterLayer): New. Open a dialog to allow the
8837 user to select an image file. Create a new RasterLayer and add
8838 it to the map.
8839
8840 * Thuban/UI/renderer.py (MapRenderer.render_map): Add support
8841 for rendering RasterLayer layers.
8842 (MapRenderer.draw_raster_layer): Actually method that calls
8843 the GDALWarp python wrapper and constructs an image from the
8844 data returned.
8845
8846 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Change the
8847 Choices symbols to match those used in the table query method.
8848 Replace deprecated method calls on table with new method names.
8849
8850 * Thuban/UI/view.py (MapCanvas.set_view_transform): Try to limit
8851 how small the scale can get. This still needs more testing.
8852
8853 * extensions/thuban/bmpdataset.cpp: New, but copied from GDAL.
8854 Provides a driver to output in .bmp format.
8855
8856 * extensions/thuban/cpl_mfile.cpp, extensions/thuban/cpl_mfile.h:
8857 New. Provides IO routines which write to memory, rather than a file.
8858
8859 * extensions/thuban/gdalwarp.cpp: New, but basically a direct copy
8860 of the gdalwarp utility provided in GDAL. Added function calls
8861 that can be accessed from python.
8862
8863 * Data/iceland_sample_raster.thuban: New. Sample file that uses
8864 a raster layer.
8865
8866 * Data/iceland/island.tfw, Data/iceland/island.tif: New. Raster
8867 layer image data.
8868
8869 * Doc/thuban.dtd: Added rasterlayer attribute definition.
8870
8871 * test/test_layer.py, test/test_load.py, test/test_save.py: Added
8872 tests associated with the raster layer code.
8873
8874 * test/test_transientdb.py
8875 (TestTransientTable.test_auto_transient_table_query): Added a test
8876 for using a Column object as the "right" parameter to a query.
8877
8878 2003-05-19 Frank Koormann <[email protected]>
8879
8880 * Thuban/version.py (get_changelog_date):
8881 Catch exceptions if ChangeLog does not exist.
8882
8883 * Thuban/UI/view.py (MapCanvas.Export): Bugfix
8884
8885 2003-05-19 Frank Koormann <[email protected]>
8886
8887 Extended version information for Thuban
8888
8889 * Thuban/version.py: New, version information for Thuban: Last
8890 modification date and last ChangeLog entry date.
8891
8892 * Thuban/UI/mainwindow.py (MainWindow.About()): Extended version
8893 information: Display Thuban, wxPython and Python version.
8894
8895 2003-05-16 Bernhard Herzog <[email protected]>
8896
8897 * Thuban/Model/save.py: Remove some unused imports including the
8898 __future__ import for nested_scopes as Thuban relies on Python 2.2
8899 now.
8900 (XMLWriter.encode): Remove the special case for a None argument.
8901 In the saver encode is always called with a string argument.
8902
8903 2003-05-16 Bernhard Herzog <[email protected]>
8904
8905 * Thuban/UI/__init__.py: Remove the work-around for the locale bug
8906 in wxPython (at least when usinvg wxGTK) prior to 2.4. The symptom
8907 of the bug was that e.g. float("1.2") would fail. Thuban now
8908 requires 2.4.x.
8909
8910 2003-05-16 Frank Koormann <[email protected]>
8911
8912 Printing enhancement and WMF export (under Win32)
8913
8914 * Thuban/UI/renderer.py (ExportRenderer): New, derived from
8915 ScreenRenderer. Renders Map, Legend and Scalebar for export.
8916 (PrinterRenderer): New, derived from ExportRenderer. Replaces the old
8917 PrintRender.
8918
8919 * Thuban/UI/view.py (MapPrintout.__init__): Enhanced parameter set
8920 to fullfil information needed for PrinterRenderer.
8921 (MapCanvas.Export): New. Export Map (currently only to WMF on Win32).
8922 (MapCanvas.Print): Adapted to new MapPrintout.
8923 (OutputTransform): General calculations to transform from canvas
8924 coordinates to export/printing devices.
8925
8926 * Thuban/UI/mainwindow.py (MainWindow.ExportMap()): New. Added also
8927 new method_command to call ExportMap, with platform dependency (only
8928 __WXMSW__)
8929
8930 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Position and Size
8931 of scalebar drawing area as new parameters.
8932
8933 * Thuban/Model/scalebar.py (roundInterval): round long instead of int
8934
8935 * Thuban/UI/legend.py (ScalebarBitmap.__SetScale):
8936 Update to extended scalebar.DrawScalebar header.
8937
8938 * test/test_export.py: New, test Thuban.UI.view.OutputTransform()
8939
8940 * test/test_scalebar.py: Made test executable as standalone.
8941
8942 2003-05-16 Bernhard Herzog <[email protected]>
8943
8944 * Thuban/Model/table.py (Table): Remove this compatibility alias
8945 for DBFTable.
8946
8947 * test/test_table.py: Import DBFTable as Table because that alias
8948 doesn't exist anymore.
8949
8950 * Thuban/UI/classgen.py: Remove some unused imports
8951
8952 2003-05-14 Jonathan Coles <[email protected]>
8953
8954 * Thuban/Model/classgen.py (ClassGenerator.GenSingletonsFromList):
8955 Fix docstring.
8956 (ClassGenerator.GenUniformDistribution): Fix spelling of method name.
8957 (ClassGenerator.GenQuantiles): Use the left/right brackets and min/max
8958 values of the supplied range to determine the beginning and end
8959 bounds of the generated classes.
8960
8961 * Thuban/Model/range.py (Range.number_re): Now accepts floats that
8962 do not have a leading 0 (.5 is now accepted as well as 0.5).
8963
8964 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Fix name of method
8965 call to ClassGenerator.GenUniformDistribution.
8966
8967 * Thuban/UI/projdialog.py (ProjFrame.__do_layout): Fix Windows
8968 layout bug with the 'Projection' label.
8969
8970 * test/support.py (FloatTestCase): New. Needed for the Range tests.
8971
8972 * test/test_range.py: New. Imported from SciParam.
8973
8974 2003-05-12 Jonathan Coles <[email protected]>
8975
8976 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Replace call
8977 to table.UniqueValues() with calls that retrieve all the values
8978 from the table. This will need to be replaced by a method on table
8979 which can simply return the list (perhaps more efficiently).
8980
8981 2003-05-12 Jonathan Coles <[email protected]>
8982
8983 The return value of ClassGenerator.CalculateQuantiles has changed.
8984 Refer to the documentation for details.
8985
8986 * test/test_classgen.py: Modified Quantile tests to use the
8987 new return values.
8988
8989 * Thuban/Model/classgen.py
8990 (ClassGenerator.GenQuantiles): Add comments describing the parameters,
8991 use new return values from CalculateQuantiles to produce the correct
8992 range bounds in the Classification.
8993 (ClassGenerator.CalculateQuantiles): Add more comments describing
8994 the return values and parameters. Make minor adjustments to improve
8995 the legibility of the code. Fix problem with adjusted not being set
8996 in most cases.
8997
8998 2003-05-12 Frank Koormann <[email protected]>
8999
9000 * Thuban/Model/save.py (XMLWriter.encode()): Explicite call to unicode
9001 and latin1. Fixes #1851 finally.
9002
9003 2003-05-09 Jonathan Coles <[email protected]>
9004
9005 * test/test_classgen.py: New. Tests the Quantile algorithm.
9006
9007 * Thuban/Model/classgen.py (ClassGenerator.CalculateQuantiles):
9008 Clean up debugging statement, add comments, fix a small bug in the
9009 returned adjusted percentiles.
9010
9011 2003-05-09 Jonathan Coles <[email protected]>
9012
9013 Introduces Range class from SciParam into the ClassGroupRange class,
9014 and such ranges can now be saved and loaded from disk.
9015
9016 Quantiles are now available in the Classification Generator.
9017
9018 Initial support for building Queries on a table. Doesn't do anything
9019 but run some tests.
9020
9021 * Thuban/Model/classification.py: Explicit imports.
9022 (ClassGroupRange): Use the Range class to store the underlying
9023 range information. The interface remains the same, except for
9024 GetRange(), and you can also supply a Range object as the min
9025 parameter to SetRange or __init__.
9026
9027 * Thuban/Model/load.py (XMLReader.encode): New. Encodes the given
9028 string appropriately for use in Thuban. Fixes RTbug #1851.
9029 (SessionLoader.end_projection): Handle the context of the
9030 projection tag a bit better by looking at what objects are not
9031 None. There was an assumption that a projection tag for a map
9032 could occur before any layers.
9033 (SessionLoader.start_clrange): Provide backward compatibility for
9034 reading min/max values as well as the new range parameter.
9035
9036 * Thuban/Model/map.py: Explicit imports.
9037
9038 * Thuban/Model/resource.py: Import _.
9039 (ProjFileSaver.write): write header using projfile.dtd.
9040
9041 * Thuban/Model/save.py: Explicit imports.
9042 (XMLWriter.encode): New. Encode the given string from a format
9043 used by Thuban into UTF-8. Fixes RTbug #1851.
9044
9045 * Thuban/UI/classgen.py: Explicit imports.
9046 (ClassGenDialog.__init__): Clean up the code and add support
9047 for Quantiles.
9048 (ClassGenDialog.OnOK): Add support for Quantiles.
9049 (GenQuantilesPanel): New. Input panel for Quantiles.
9050 (ClassGenerator, CustomRamp, MonochromaticRamp, GreyRamp, RedRamp,
9051 GreenRamp, BlueRamp, HotToColdRamp): Move to Thuban/Model/classgen.py
9052
9053 * Thuban/Model/classgen.py: New. Contains all the classes named above.
9054
9055 * Thuban/UI/classifier.py: Explicit imports.
9056 (ClassTable.GetValueAsCust, ClassTable.__ParseInput,
9057 ClassTable.SetValueAsCustom): Reworked to use new Range class.
9058
9059 * Thuban/UI/legend.py: Explicit imports.
9060
9061 * Thuban/UI/mainwindow.py: Add support for the Join Dialog. Added
9062 a Table menu and associated method calls.
9063 (MainWindow.choose_color): Removed. No longer needed.
9064
9065 * Thuban/UI/projdialog.py (ProjFrame.__VerifyButtons): Save button
9066 should be disabled if no projection is selected in the available
9067 list.
9068
9069 * Thuban/UI/renderer.py: Explicit imports.
9070
9071 * Thuban/UI/tableview.py (TableGrid.OnRangeSelect): Fix some issues
9072 with correctly selecting the rows and issuing the right events.
9073 Be sure to call Skip() to allow the grid to do some of its own
9074 handling which allows the rows to actually be selected.
9075 (LayerTableGrid.select_shapes): Rename from select_shape. Supports
9076 selecting multiple shapes.
9077 (LayerTableFrame): Support for building Queries.
9078 (LayerTableFrame.select_shapes): Allow multiple shapes to be selected.
9079
9080 * Thuban/UI/tree.py: Explicit imports.
9081
9082 * Thuban/UI/view.py (MapCanvas): Delegate "SelectedShapes" so the
9083 table view can call it.
9084
9085 * test/test_classification.py: Explicit imports.
9086 (TestClassification.test_ClassGroupRange): Fix test for new
9087 Range class.
9088
9089 * Doc/thuban.dtd: Add range parameter for clrange.
9090
9091 * Thuban/Model/range.py: Taken from SciParam. Used as the underlying
9092 object in ClassGroupRange, and also uesd for inputting ranges in
9093 the classifer table and elsewhere.
9094
9095 * Thuban/UI/join.py: New. Initial Join dialog. No real functionality
9096 yet.
9097
9098 2003-05-09 Frank Koormann <[email protected]>
9099
9100 * Thuban/UI/scalebar.py (DrawScaleBar): Draw only if interval > 0.0.
9101
9102 2003-05-08 Frank Koormann <[email protected]>
9103
9104 Coding style updates
9105
9106 * test/test_scalebar.py: Replaced tab indentation by spaces.
9107
9108 * Thuban/UI/scalebar.py: Explicit imports.
9109
9110 2003-05-08 Frank Koormann <[email protected]>
9111
9112 * Thuban/UI/scalebar.py
9113 (ScaleBar.DrawScalebar): Format string bug fixed.
9114
9115 2003-05-08 Frank Koormann <[email protected]>
9116
9117 Reorganization of scalebar component (no wx in Thuban/Model)
9118
9119 * Thuban/Model/scalebar.py: Rendering moved to Thuban/UI/scalebar.py
9120 (deriveInterval):
9121 Calculate scalebar interval and unit which fits in width for scale.
9122 (roundInterval): Round float.
9123
9124 * Thuban/UI/scalebar.py (ScaleBar): Scalebar rendering
9125
9126 * test/test_scalebar.py: Test for Thuban/Model/scalebar.py methods.
9127
9128 * Thuban/UI/legend.py: Import Thuban.UI.scalebar
9129
9130 2003-05-08 Frank Koormann <[email protected]>
9131
9132 * Thuban/UI/legend.py (ScalebarBitmap.SetCanvas):
9133 Initialize ScaleBar with canvas.map
9134
9135 * Thuban/Model/scalebar.py (ScaleBar.roundInterval()): New,
9136 round intervals to display smarter lengths
9137 (ScaleBar.DrawScalebar): Draw Scalebar only if the map contains a
9138 layer. If the maps has no projection applied grey the scalebar.
9139
9140 2003-05-07 Frank Koormann <[email protected]>
9141
9142 Basic Scalebar features added.
9143
9144 * Thuban/Model/scalebar.py (ScaleBar): New, scalebar rendering.
9145
9146 * Thuban/UI/legend.py (LegendPanel): Added scalebar bitmap
9147 (ScaleBarBitmap): New, links the scalebar bitmap with view messages
9148 and the renderer.
9149
9150 * Thuban/UI/view.py (MapCanvas.set_view_transform): Issue SCALE_CHANGED.
9151
9152 * Thuban/UI/messages.py: SCALE_CHANGED added.
9153
9154 2003-05-07 Bernhard Herzog <[email protected]>
9155
9156 * Thuban/Model/session.py (Session.__init__): New instance
9157 variable shapestores to hold a list of all open shapestore objects
9158 (Session.ShapeStores): New. Accessor method for the shapestores
9159 list.
9160 (Session._add_shapestore, Session._clean_weak_store_refs): New.
9161 Internal methods to maintain the shapestores list.
9162 (Session.Tables): New. Return all tables open in the session.
9163 (Session.OpenShapefile): Insert the new ShapeStore into the
9164 shapestores list.
9165
9166 * test/test_session.py (TestSessionSimple.test_initial_state): Add
9167 tests for ShapeStores and Tables
9168 (TestSessionWithContent.test_shape_stores)
9169 (TestSessionWithContent.test_tables): New. Test cases for
9170 ShapeStores and Tables
9171
9172 2003-05-07 Bernhard Herzog <[email protected]>
9173
9174 * Thuban/Model/transientdb.py (TransientTableBase.ReadRowAsDict):
9175 Add comments about the optimizations used.
9176 (AutoTransientTable.ReadValue, TransientTableBase.ReadValue): New.
9177 Implement the ReadValue table interface method.
9178
9179 * test/test_transientdb.py
9180 (TestTransientTable.run_iceland_political_tests)
9181 (TestTransientTable.test_transient_joined_table): Add tests for
9182 ReadValue
9183
9184 2003-05-07 Frank Koormann <[email protected]>
9185
9186 * Resources/Bitmaps/fulllayerextent.xpm,
9187 Resources/Bitmaps/fullselextent.xpm: Replaced the place holders with
9188 new icons.
9189
9190 2003-05-06 Bernhard Herzog <[email protected]>
9191
9192 * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
9193 New. Simply delegate to the transient table's version.
9194
9195 * test/test_transientdb.py
9196 (TestTransientTable.test_auto_transient_table_query): New. Test
9197 case for AutoTransientTable's SimpleQuery
9198
9199 2003-05-06 Bernhard Herzog <[email protected]>
9200
9201 * Thuban/Model/transientdb.py (TransientTableBase.SimpleQuery):
9202 Implement a simple query method for the query dialog
9203 (TransientTableBase.create): Add an INTEGER PRIMARY KEY that holds
9204 the row index or shapeid.
9205 (TransientTable.create): Insert the right value of the row index
9206 (TransientJoinedTable.create): Copy the row index of the left
9207 table to the joined result table
9208
9209 * test/test_transientdb.py
9210 (TestTransientTable.test_transient_table_read_twice): Fix
9211 doc-string
9212 (TestTransientTable.test_transient_table_query): New. Test for the
9213 SimpleQuery method
9214
9215 2003-05-06 Bernhard Herzog <[email protected]>
9216
9217 Convert all table users to use the new table interface. This only
9218 covers Thuban itself, not GREAT-ER or other applications built on
9219 Thuban yet, so the compatibility interface stays in place for the
9220 time being but it now issues DeprecationWarnings.
9221
9222 Finally, the new Table interface has a new method, HasColumn.
9223
9224 * Thuban/Model/table.py (OldTableInterfaceMixin): All methods
9225 issue deprecation warnings when they're. The warnings refer to the
9226 caller of the method.
9227 (OldTableInterfaceMixin.__deprecation_warning): New. Helper method
9228 for the deprecation warnings
9229
9230 * test/test_table.py: Ignore the deprecation warnings for the old
9231 table in the tests in this module. The purpose of the tests is to
9232 test the old interface, after all.
9233
9234 * test/test_transientdb.py
9235 (TestTransientTable.run_iceland_political_tests): Use the
9236 constants for the types. Add a test for HasColumn
9237 (TestTransientTable.test_transient_joined_table): Adapt to new
9238 table interface. Add a test for HasColumn
9239 (TestTransientTable.test_transient_table_read_twice): Adapt to new
9240 table interface
9241
9242 * Thuban/UI/tableview.py (DataTable.SetTable, DataTable.GetValue):
9243 Adapt to new table interface
9244
9245 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Adapt to
9246 new table interface
9247
9248 * Thuban/UI/controls.py (RecordListCtrl.fill_list)
9249 (RecordTable.SetTable): Adapt to new table interface
9250
9251 * Thuban/UI/classifier.py (Classifier.__init__)
9252 (Classifier.__init__): Adapt to new table interface
9253
9254 * Thuban/UI/classgen.py (ClassGenDialog.__init__)
9255 (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve): Adapt
9256 to new table interface
9257
9258 * Thuban/Model/transientdb.py (TransientTableBase.HasColumn)
9259 (AutoTransientTable.HasColumn): Implement the new table interface
9260 method
9261 (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ValueRange)
9262 (AutoTransientTable.UniqueValues): Adapt to new table interface
9263
9264 * Thuban/Model/layer.py (Layer.SetShapeStore, Layer.GetFieldType):
9265 Adapt to new table interface
9266
9267 * test/test_layer.py (TestLayer.open_shapefile): Helper method to
9268 simplify opening shapefiles a bit easier.
9269 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
9270 (TestLayer.test_point_layer): Use the new helper method
9271 (TestLayer.test_get_field_type): New. Test for the GetFieldType
9272 method
9273
9274 * test/test_dbf_table.py (TestDBFTable.test_has_column): Test for
9275 the new table method
9276
9277 * test/test_memory_table.py (TestMemoryTable.test_has_column):
9278 Test for the new table method HasColumn
9279
9280 2003-05-06 Jonathan Coles <[email protected]>
9281
9282 Addresses the "Selection Extent" wish of RTbug #1787.
9283
9284 * Resources/Bitmaps/fulllayerextent.xpm,
9285 Resources/Bitmaps/fullselextent.xpm: Bitmaps for layer and selection
9286 extent. These are just place holders for the real bitmaps.
9287
9288 * Thuban/Model/layer.py (Shape): Since a Shape is immutable only
9289 calculate the bounding box once (the first time compute_bbox() is
9290 called).
9291 (Layer.ShapesBoundingBox): New. Given a list of shape ids, return
9292 the bounding box for the shapes in lat/long coordinates.
9293
9294 * Thuban/UI/mainwindow.py: Added new "Full selection extent" menu
9295 option.
9296 (MainWindow.has_selected_shapes): New. Returns true if there are
9297 any selected shapes.
9298 (MainWindow.FullSelectionExtent): New. Calls
9299 MapCanvas.FitSelectedToWindow() when the user selects the menu option.
9300 (_has_selected_shapes): New. Returns true if there are any
9301 selected shapes.
9302
9303 * Thuban/UI/selection.py (Selection.HasSelectedShapes): New. Returns
9304 true if there are any selected shapes.
9305
9306 * Thuban/UI/view.py (MapCanvas): Added delegated method
9307 HasSelectedShapes.
9308 (MapCanvas.FitSelectedToWindow): New. Centers and scales any selected
9309 shapes on the canvas using the map projection (if any).
9310
9311 * test/test_layer.py (TestLayer.test_arc_layer): Add some tests
9312 for Layer.ShapesBoundingBox().
9313
9314 2003-05-06 Bernhard Herzog <[email protected]>
9315
9316 * Resources/Projections/defaults.proj: Fix spelling of Mercator
9317
9318 2003-05-05 Jonathan Coles <[email protected]>
9319
9320 Addresses the "Full Layer Extent" wish of RTbug #1787.
9321
9322 * Resources/Projections/defaults.proj: Added UK National Grid.
9323
9324 * Thuban/UI/mainwindow.py: Added new "Full layer extent" menu option.
9325 (MainWindow.FullLayerExtent): New. Calls MapCanvas.FitLayerToWindow()
9326 when the user selects the menu option.
9327
9328 * Thuban/UI/view.py (MapCanvas.FitLayerToWindow): New. Centers and
9329 scales the given layer on the canvas using the map projection.
9330
9331 2003-05-05 Bernhard Herzog <[email protected]>
9332
9333 Convert the table implementations to a new table interface. All
9334 tables use a common mixin class to provide backwards compatibility
9335 until all table users have been updated.
9336
9337 * Thuban/Model/table.py (OldTableInterfaceMixin): Mixin class to
9338 provide backwards compatibility for table classes implementing the
9339 new interface
9340 (DBFTable, MemoryTable): Implement the new table interface. Use
9341 OldTableInterfaceMixin as base for compatibility
9342 (DBFColumn, MemoryColumn): New. Column description for DBFTable
9343 and MemoryTable resp.
9344
9345 * test/test_dbf_table.py: New. Test cases for the DBFTable with
9346 the new table interface.
9347
9348 * test/test_memory_table.py: New. Test cases for the MemoryTable
9349 with the new table interface.
9350
9351 * test/test_table.py: Document the all tests in this file as only
9352 for backwards compatibility. The equivalent tests for the new
9353 interface are in test_memory_table.py and test_dbf_table.py
9354 (MemoryTableTest.test_read): field_info should be returning tuples
9355 with four items
9356 (MemoryTableTest.test_write): Make doc-string a more precise.
9357
9358 * Thuban/Model/transientdb.py (TransientTableBase): Convert to new
9359 table interface. Derive from from OldTableInterfaceMixin for
9360 compatibility.
9361 (TransientTableBase.create): New intance variable column_map to
9362 map from names and indices to column objects
9363 (TransientTable.create): Use the new table interface of the input
9364 table
9365 (AutoTransientTable): Convert to new table interface. Derive from
9366 from OldTableInterfaceMixin for compatibility.
9367 (AutoTransientTable.write_record): Removed. It's not implemented
9368 yet and we still have to decide how to handle writing with the new
9369 table and data framework.
9370
9371 * test/test_transientdb.py
9372 (TestTransientTable.run_iceland_political_tests)
9373 (TestTransientTable.test_transient_joined_table): Use the new
9374 table interface
9375
9376 2003-05-05 Jonathan Coles <[email protected]>
9377
9378 This is namely a collection of UI updates to improve user interactivity.
9379 Tabbing between controls now exists and you can use ESC to close dialog
9380 boxes; ENTER will active the default button.
9381
9382 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Rearrange the
9383 order that the controls are created so that tabbing works correctly.
9384 (ClassGenDialog.OnOK): Renamed from _OnGenerate() so that the
9385 wxDialog can handle the default button correctly.
9386 (ClassGenDialog.OnCancel): Renamed from _OnCloseBtn() for the
9387 same reasons as for OnOK.
9388 (GenUniformPanel._OnRetrieve): Call wxBeginBusyCursor/wxEndBusyCursor
9389 when we ask the table for the maximum/minimum values of a field
9390 which could take a very long time.
9391
9392 * Thuban/UI/classifier.py (Classifier.__init__): Rearrange the
9393 order that the controls are created so that tabbing works correctly.
9394 (SelectPropertiesDialog.__init__): Rearrange the order that the
9395 controls are created so that tabbing works correctly.
9396
9397 * Thuban/UI/dialogs.py: Copied NonModalDialog box and changed it
9398 to derive from a wxDialog but behave like the original implementation
9399 which was derived from a wxFrame. wxDialog provides useful key
9400 handling functionality like ESC calling OnCancel and ENTER calling
9401 OnOK which is lost with wxFrame.
9402
9403 * Thuban/UI/mainwindow.py: Add "..." to menu items that will open
9404 new dialogs.
9405
9406 * Thuban/UI/projdialog.py (ProjFrame.__init__): Rearrange the
9407 order that the controls are created so that tabbing works correctly.
9408 (ProjFrame.OnApply): Renamed from _OnTry() to use wxDialog behaviour.
9409 (ProjFrame.OnOK): Renamed from _OnOK() to use wxDialog behaviour.
9410 (ProjFrame.OnCancel): Renamed from _OnClose() to use wxDialog behaviour.
9411 (ProjPanel.__init__): Add "Airy" to the list of ellipsoids so we
9412 can provide the "UK National Grid" as a default projection.
9413 (UTMPanel.__init__): Rearrange the order that the controls are
9414 created so that tabbing works correctly.
9415
9416 2003-05-05 Bernhard Herzog <[email protected]>
9417
9418 * extensions/thuban/wxproj.cpp: Fix some of the comments.
9419 (project_point): If a map projection but no layer projection is
9420 given, convert degrees to radians before applying the map
9421 projection.
9422
9423 * Thuban/UI/tableview.py (TableGrid.disallow_messages)
9424 (TableGrid.allow_messages): New methods to make it possible to
9425 inhibit message sending.
9426 (TableGrid.issue): Only send the message if not inhibited.
9427 (LayerTableGrid.select_shape): Use the new methods to make sure
9428 that no ROW_SELECTED message is sent while we're updating the
9429 selected rows to match the selected shapes.
9430
9431 2003-05-02 Jan-Oliver Wagner <[email protected]>
9432
9433 Implementation of MemoryTable.
9434
9435 * Thuban/Model/table.py (MemoryTable): New. Quite simple table
9436 implementation that operates on a list of tuples. All of the data
9437 are kept in the memory.
9438
9439 * test/test_table.py (MemoryTableTest): New.
9440
9441 * test/test_transientdb.py (SimpleTable): Removed.
9442 (TestTransientTable.test_transient_joined_table,
9443 (TestTransientTable.test_transient_table_read_twice): Replaced
9444 SimpleTable by MemoryTable.
9445
9446 2003-04-30 Jonathan Coles <[email protected]>
9447
9448 * Data/iceland_sample.thuban: Now contains correct projections
9449 for each of the layers.
9450
9451 * Resources/Projections/defaults.proj: Geographic projection
9452 contains unit conversion parameter.
9453
9454 2003-04-30 Jonathan Coles <[email protected]>
9455
9456 The most important part of this putback is the projection changes.
9457 It should now be possible to specify the projection that a layer
9458 is in and then specify a different projection for the map. The
9459 projection dialog has an extra parameter for a geographic projection
9460 which lets the user select if the input is in degrees or radians.
9461
9462 * Thuban/Model/layer.py (Layer.ShapesInRegion): Fix docstring
9463 to say that the parameter is a tuple of unprojected
9464 points (which is what the callers to this method were assuming).
9465 Also, since the points are unprojected we need to projected them.
9466
9467 * Thuban/UI/legend.py (LegendTree.MoveCurrentItemUp,
9468 LegendTree.MoveCurrentItemDown): If the layer or any of the layer's
9469 groups are selected, move the layer up/down. Fixes RTbug #1833.
9470
9471 * Thuban/UI/mainwindow.py: Move menu item map_rename up.
9472
9473 * Thuban/UI/projdialog.py (ProjFrame._OnSave): Add missing
9474 parameter in call to SetClientData.
9475 (GeoPanel): Add support for selecting the units that the
9476 source data is in (Radians or Degrees).
9477
9478 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Optimize
9479 the rendering loop by reducing the number of if's, removing the
9480 unnecessary try/except block, and checking if the old group
9481 is the same as the new one (which happens a lot if there is
9482 no classification, or lots of shapes are in the same group).
9483
9484 * Thuban/UI/view.py (MapCanvas.OnPaint): Add a try/except block
9485 around the redraw routine to try to catch problems that the user
9486 may create by selecting invalid projections for the data set and
9487 map. Clears the display if there are any problems and prints the
9488 error.
9489 (MapCanvas.do_redraw): Use DC.Clear() instead of drawing a filled
9490 rectangle.
9491
9492 * extensions/thuban/wxproj.cpp (project_point): First invert the
9493 supplied point (which should be in projected coordinates) using
9494 the layer's projection and then project the point using the
9495 map's projection.
9496 (project_points): Use project_point() to project each point.
9497
9498 2003-04-30 Jan-Oliver Wagner <[email protected]>
9499
9500 * Thuban/Model/layer.py (Layer.SetShapeStore): Fixed a bug:
9501 don't set the Classification to None if the classfication field
9502 is None (ie only a DEFAULT).
9503
9504 2003-04-30 Bernhard Herzog <[email protected]>
9505
9506 * Thuban/UI/view.py: Fix some typos.
9507
9508 * Thuban/UI/mainwindow.py (MainWindow.identify_view_on_demand): Do
9509 not pop up the dialog if the selection becomes empty (this could
9510 happen if e.g. a new selection is opened while the identify tool
9511 is active and dialog had been closed)
9512
9513 2003-04-30 Bernhard Herzog <[email protected]>
9514
9515 * Thuban/Model/transientdb.py (TransientTableBase.__init__): New
9516 instance variable read_record_last_result
9517 (TransientTableBase.read_record): Make sure reading the same
9518 record twice works. The implementation uses the new instance
9519 variable read_record_last_result
9520
9521 * test/test_transientdb.py
9522 (TestTransientTable.test_transient_table_read_twice): New test
9523 case for the above bug-fix.
9524
9525 2003-04-29 Jonathan Coles <[email protected]>
9526
9527 * Thuban/common.py: Removed. No longer needed Str2Num. RTbug #1832.
9528
9529 * Thuban/UI/classgen.py: Remove all uses of Str2Num.
9530
9531 * Thuban/UI/classifier.py: Remove all uses of Str2Num.
9532 (ClassTable.SetValueAsCustom): Rename keyword argument in
9533 ClassGroup* constructors to match argument name.
9534
9535 2003-04-29 Bernhard Herzog <[email protected]>
9536
9537 * Thuban/Model/session.py (Session.Destroy): Explicitly close the
9538 transient DB if it exists to make sure it doesn't leave a journal
9539 file in the temp directory.
9540
9541 * Thuban/Model/transientdb.py (TransientDatabase.close): Set
9542 self.conn to None after closing the connection to make sure it's
9543 not closed twice
9544
9545 2003-04-29 Jonathan Coles <[email protected]>
9546
9547 Add a visible parameter in the layer XML tag. The default value is
9548 "true". If anything other than "false" is specified we also assume
9549 "true". Addresses RTbug #1025.
9550
9551 * Doc/thuban.dtd: Add visible parameter to a layer.
9552
9553 * Thuban/Model/layer.py (BaseLayer.__init__): Change default value
9554 of visible from 1 to True.
9555 (Layer.__init__): Change default value of visible from 1 to True.
9556
9557 * Thuban/Model/load.py (SessionLoader.start_layer): Read visible
9558 parameter.
9559
9560 * Thuban/Model/save.py (SessionSaver.write_layer): Save visible
9561 parameter.
9562
9563 * test/test_load.py: Add new test data contents_test_visible.
9564 (LoadSessionTest.setUp): save test data.
9565 (LoadSessionTest.testLayerVisibility): Test if the visible flag
9566 is loaded correctly.
9567
9568 * test/test_save.py (SaveSessionTest.testSingleLayer): Add test
9569 for saving an invisible layer.
9570
9571 2003-04-29 Jonathan Coles <[email protected]>
9572
9573 * Thuban/UI/mainwindow.py (MainWindow.SetMap): Look up the
9574 legend dialog box and tell it to change its map to the one
9575 supplied to SetMap(). Fixes RTbug #1770.
9576
9577 2003-04-29 Bernhard Herzog <[email protected]>
9578
9579 Next step of table implementation. Introduce a transient database
9580 using SQLite that some of the data is copied to on demand. This
9581 allows us to do joins and other operations that require an index
9582 for good performance with reasonable efficiency. Thuban now needs
9583 SQLite 2.8.0 and pysqlite 0.4.1. Older versions may work but I
9584 haven't tested that.
9585
9586 * Thuban/Model/transientdb.py: New. Transient database
9587 implementation.
9588
9589 * test/test_transientdb.py: New. Tests for the transient DB
9590 classes.
9591
9592 * Thuban/Model/session.py (AutoRemoveFile, AutoRemoveDir): New
9593 classes to help automatically remove temporary files and
9594 directories.
9595 (Session.__init__): New instance variables temp_dir for the
9596 temporary directory and transient_db for the SQLite database
9597 (Session.temp_directory): New. Create a temporary directory if not
9598 yet done and return its name. Use AutoRemoveDir to have it
9599 automatically deleted
9600 (Session.TransientDB): Instantiate the transient database if not
9601 done yet and return it.
9602
9603 * Thuban/Model/data.py (ShapefileStore.__init__): Use an
9604 AutoTransientTable so that data is copied to the transient DB on
9605 demand.
9606 (SimpleStore): New class that simply combines a table and a
9607 shapefile
9608
9609 * Thuban/Model/table.py (Table, DBFTable): Rename Table into
9610 DBFTable and update its doc-string to reflect the fact that this
9611 is only the table interface to a DBF file. Table is now an alias
9612 for DBFTable for temporary backwards compatibility.
9613
9614 * Thuban/UI/application.py (ThubanApplication.OnExit): Make sure
9615 the last reference to the session goes away so that the temporary
9616 files are removed properly.
9617
9618 * test/test_load.py (LoadSessionTest.tearDown): Remove the
9619 reference to the session to make sure the temporary files are
9620 removed.
9621
9622 2003-04-29 Bernhard Herzog <[email protected]>
9623
9624 * Thuban/Model/load.py (XMLReader.__init__, XMLReader.read): Turn
9625 the __parser instance variable into a normal local variable in
9626 read. It's only used there and read will never be called more than
9627 once. Plus it introduces a reference cycle that keeps can keep the
9628 session object alive for a long time.
9629
9630 2003-04-29 Jonathan Coles <[email protected]>
9631
9632 * Thuban/Model/proj.py (Projection): Removed Set*() methods to make
9633 Projection an immutable item. Fixes RTbug #1825.
9634 (Projection.__init__): Initialize instance variables here.
9635 (ProjFile.Replace): New. Replace the given projection object with
9636 the new projection object. This solves the problem of needing the
9637 mutator Projection.SetProjection() in the ProjFrame class and
9638 allows a projection to change parameters without changing its
9639 location in the file.
9640
9641 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs): Dialog should
9642 be of type wxSAVE and should verify overwriting a file.
9643
9644 * Thuban/UI/projdialog.py (ProjFrame._OnSave): Use the new
9645 ProjFile.Replace() method instead of the mutator
9646 Projection.SetProjection(). Also requires that we reassign the
9647 client data to the new projection.
9648
9649 * test/test_proj.py (TestProjection.test): Test GetName() and
9650 GetAllParameters()
9651 (TestProjFile.test): Remove tests for Set*() methods. Add tests
9652 for Replace().
9653
9654 2003-04-25 Jonathan Coles <[email protected]>
9655
9656 * Thuban/Model/save.py (SessionSaver.write_projection): Make sure
9657 to save the name of the projection.
9658
9659 * test/test_save.py (SaveSessionTest.testLayerProjection): New
9660 test to verify layer projections are saved correctly.
9661
9662 2003-04-25 Jonathan Coles <[email protected]>
9663
9664 * Thuban/Model/proj.py (Projection.SetName): Set the name
9665 to "Unknown" if name is None.
9666 (Projection.SetAllParameters): New. Set the projection's
9667 parameter list to the one supplied.
9668 (Projection.SetProjection): New. Set the projection's
9669 properties to those of the supplied Projection.
9670
9671 * Thuban/UI/mainwindow.py (MainWindow.MapProjection): Set
9672 the dialog title to include the map's title.
9673 (MainWindow.LayerProjection): Set the dialog title to include
9674 the layer's title.
9675
9676 * Thuban/UI/projdialog.py (ProjFrame.__ShowError): Consolidate
9677 error dialogs into a single method call.
9678 (ProjFrame.__VerifyButtons): Add more states to check.
9679 (ProjFrame.__GetProjection): Return the current state of an
9680 edited projection or None.
9681 (ProjFrame.__FillAvailList): Remove checks for states that
9682 shouldn't exist.
9683 (ProjFrame._OnNew): Clear all selected items and supply
9684 a projection panel if necessary.
9685
9686 * test/test_proj.py (TestProjFile.test): Add tests for
9687 ProjFile.SetAllParameters, ProjFile.SetProjection,
9688 ProjFile.SetName.
9689
9690 2003-04-25 Jonathan Coles <[email protected]>
9691
9692 * Thuban/UI/projdialog.py (ProjFrame.__FillAvailList): Now
9693 takes an optional argument to select the current projection.
9694 This does not guarantee that the item is visible due to
9695 limited wxWindows functionality. Fixes RTBug #1821.
9696
9697 2003-04-25 Jonathan Coles <[email protected]>
9698
9699 * Thuban/Model/load.py (SessionLoader.start_projection): Remember
9700 the projection name and use it when constructing the Projection
9701 object.
9702
9703 * Thuban/Model/proj.py (Projection.__init__): Change the default
9704 value for 'name' to None and then test if name is equal to None
9705 in the body of the constructor. This way the caller doesn't have to
9706 know what the default value should be. Namely, useful in load.py
9707 where we have to pick a default value if the 'name' parameter
9708 doesn't exist in the XML file.
9709
9710 * test/test_load.py (LoadSessionTest.testLayerProjection): New.
9711 Tests a file where a layer has a projection.
9712
9713 2003-04-25 Jonathan Coles <[email protected]>
9714
9715 * Thuban/Model/layer.py (Layer.TreeInfo): Add an item to the
9716 tree for projection information.
9717
9718 * Thuban/Model/load.py (XMLReader.GetFilename): Renamed from
9719 XMLReader.GetFileName.
9720 (SessionLoader): Added support for loading projection tags that
9721 appear inside a layer.
9722
9723 * Thuban/Model/proj.py (ProjFile): Document the class. Move
9724 back to using a list because the order of the projections in
9725 the file is important to maintain. Fixes RTbug #1817.
9726
9727 * Thuban/Model/resource.py: Rename calls to ProjFile.GetFileName
9728 to ProjFile.GetFilename.
9729
9730 * Thuban/Model/save.py (SessionSaver.write_layer): Save projection
9731 information.
9732
9733 * Thuban/UI/projdialog.py (ProjFrame._OnAddToList): Renamed from
9734 ProjFrame._OnSaveAs. Removed old dead code from previous
9735 implementation.
9736 (ProjFrame._OnExport): Add support for exporting more than one
9737 projection to a single file.
9738 (ProjFrame.__FillAvailList): use string formatting (% operator)
9739 to build strings that are (partly) translated. Fixes RTbug #1818.
9740
9741 * test/test_proj.py (TestProjFile.test): New. Tests the base ProjFile
9742 class.
9743
9744 2003-04-24 Bernhard Herzog <[email protected]>
9745
9746 * po/es.po: Updated Spanish translation by Daniel Calvelo Aros
9747
9748 * po/fr.po: New. French translation by Daniel Calvelo Aros
9749
9750 * Thuban/UI/projdialog.py (ProjFrame._OnSaveAs): Don't translate
9751 empty strings.
9752
9753 2003-04-24 Jonathan Coles <[email protected]>
9754
9755 * Thuban/Model/layer.py (Layer.GetProjection): New. Needed to
9756 implement the interface that the ProjFrame dialog expects.
9757
9758 * Thuban/Model/proj.py (Projection.SetName): New. Allows the
9759 name of the projection to be changed.
9760 (ProjFile): Use a dictionary instead of a list so that removing
9761 projections is easier and we are sure about uniqueness.
9762 (ProjFile.Remove): Remove the given projection object.
9763
9764 * Thuban/Model/resource.py (GetSystemProjFiles, GetUserProjFiles):
9765 Return a list with only one projection file instead of searching for
9766 any projection file. This simplifies many things if the user can
9767 only have one system file and one user file.
9768
9769 * Thuban/UI/classgen.py: Change all references to
9770 genCombo to genChoice.
9771
9772 * Thuban/UI/mainwindow.py: Add a Projection option under the
9773 layer menu.
9774 (MainWindow.LayerProjection): New. Open up a projection window
9775 for a layer.
9776
9777 * Thuban/UI/projdialog.py: Large changes to how the dialog is
9778 laid out. Use three panels instead of one. One for the list of
9779 projections, one for the edit controls, and one for the buttons.
9780 Fixed resizing problems so that the dialog resizes correctly
9781 when the projection panel changes. Added import/export, save, and
9782 new buttons/functionality.
9783
9784 2003-04-24 Bernhard Herzog <[email protected]>
9785
9786 First step towards table management. Introduce a simple data
9787 abstraction so that we replace the data a layer uses more easily
9788 in the next step.
9789
9790 * Thuban/Model/data.py: New file with a simple data abstraction
9791 that bundles shapefile and dbffile into one object.
9792
9793 * Thuban/Model/session.py (Session.OpenShapefile): New method to
9794 open shapefiles and return a shape store object
9795
9796 * Thuban/Model/layer.py (Layer.__init__): Pass the data as a store
9797 object instead of a shapefile filename. This introduces a new
9798 instance variable store holding the datastore. For intermediate
9799 backwards compatibility keep the old instance variables.
9800 (open_shapefile): Removed. No longer needed with the shape store.
9801 (Layer.SetShapeStore, Layer.ShapeStore): New methods to set and
9802 get the shape store used by a layer.
9803 (Layer.Destroy): No need to explicitly destroy the shapefile or
9804 table anymore.
9805
9806 * Thuban/UI/mainwindow.py (MainWindow.AddLayer)
9807 (MainWindow.AddLayer): Use the session's OpenShapefile method to
9808 open shapefiles
9809
9810 * Thuban/Model/load.py (ProcessSession.start_layer): Use the
9811 session's OpenShapefile method to open shapefiles
9812
9813 * test/test_classification.py
9814 (TestClassification.test_classification): Use the session's
9815 OpenShapefile method to open shapefiles and build the filename in
9816 a more platform independed way
9817
9818 * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
9819 Implement to have a session to use in the tests
9820 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
9821 (TestLayer.test_point_layer, TestLayer.test_empty_layer): Use the
9822 session's OpenShapefile method to open shapefiles
9823 (TestLayerLegend.setUp): Instantiate a session so that we can use
9824 it to open shapefiles.
9825 (TestLayerLegend.tearDown): Make sure that all references to
9826 layers and session are removed otherwise we may get a resource
9827 leak
9828
9829 * test/test_map.py (TestMapAddLayer.test_add_layer)
9830 (TestMapWithContents.setUp): Instantiate a session so that we can
9831 use it to open shapefiles.
9832 (TestMapWithContents.tearDown): Make sure that all references to
9833 layers, maps and sessions are removed otherwise we may get a
9834 resource leak
9835 ("__main__"): use support.run_tests() so that more info about
9836 uncollected garbage is printed
9837
9838 * test/test_save.py (SaveSessionTest.testSingleLayer): Use the
9839 session's OpenShapefile method to open shapefiles
9840 ("__main__"): use support.run_tests() so that more info about
9841 uncollected garbage is printed
9842
9843 * test/test_selection.py (TestSelection.tearDown): Make sure that
9844 all references to the session and the selection are removed
9845 otherwise we may get a resource leak
9846 (TestSelection.get_layer): Instantiate a session so that we can
9847 use it to open shapefiles.
9848 ("__main__"): use support.run_tests() so that more info about
9849 uncollected garbage is printed
9850
9851 * test/test_session.py (TestSessionBase.tearDown)
9852 (TestSessionWithContent.tearDown): Make sure that all references
9853 to the session and layers are removed otherwise we may get a
9854 resource leak
9855 (TestSessionWithContent.setUp): Use the session's OpenShapefile
9856 method to open shapefiles
9857
9858 2003-04-24 Jonathan Coles <[email protected]>
9859
9860 * Thuban/Model/load.py (XMLReader.read): Should have been checking
9861 if the file_or_filename object had the 'read' attribute.
9862
9863 2003-04-23 Jonathan Coles <[email protected]>
9864
9865 * Thuban/Model/resource.py: Fixes RTbug #1813.
9866 (ReadProjFile): Add documentation about which exceptions are raised.
9867 Always pass the exceptions up to the caller.
9868 (GetProjFiles): If the directory can't be read return an empty list.
9869 If any of the proj files can't be read skip that file and go
9870 on to the next one.
9871
9872 * test/test_proj.py: Added test cases to handle nonexistent files,
9873 unreadable files, and files that don't parse correctly.
9874
9875 2003-04-23 Jonathan Coles <[email protected]>
9876
9877 Projection dialog. Allows the user to select from a list
9878 of projection templates and optionally edit them and save new ones.
9879
9880 * Thuban/UI/projdialog.py (ProjFrame): New. Main dialog.
9881 (ProjPanel): Base class for projection specific panels.
9882 (TMPanel): Projection panel for Transverse Mercartor.
9883 (UTMPanel): Projection panel for Universal Transverse Mercartor.
9884 (LCCPanel): Projection panel for Lambert Conic Conformal.
9885 (GeoPanel): Projetion panel for Geographic Projection.
9886
9887 2003-04-23 Jonathan Coles <[email protected]>
9888
9889 * Thuban/Model/load.py (XMLReader): Renamed from XMLProcessor to
9890 promote symmetry. There now exists XMLReader and XMLWriter.
9891 (XMLReader.read): New. Call to read the given file descriptor or
9892 filename.
9893 (XMLReader.close): New. Make sure the file is closed.
9894 (XMLReader.GetFileName): New. Return just the file name that is being
9895 read from.
9896 (XMLReader.GetDirectory): New. Return just the directory of the file
9897 that is being read.
9898 (XMLReader.AddDispatchers): New. Take a dictionary which contains
9899 the names of functions to call as the XML tree is parsed.
9900 (XMLReader.startElementNS): Updated to use new dispatcher dictionary.
9901 (XMLReader.endElementNS): Updated to use new dispatcher dictionary.
9902 (SessionLoader): Removed class variables start_dispatcher and
9903 end_dispatcher since this functionality is now part of a class
9904 instance. Fixes RTbug #1808.
9905 (SessionLoader.__init__): Add dispatcher functions.
9906 (load_xmlfile): Code was moved into the XMLReader.read().
9907 (load_session): Use modified SessionLoader.
9908
9909 * Thuban/Model/map.py (Map.GetProjection): New. Returns the
9910 map's projection.
9911
9912 * Thuban/Model/proj.py (Projection.GetParameters): Renamed to
9913 GetAllParameters.
9914 (Projection.GetParameter): Returns the value for the given parameter.
9915
9916 * Thuban/Model/resource.py: Use XMLReader and XMLWriter.
9917 (GetProjFiles): Renamed from GetProjections. Now returns a list
9918 of ProjFile objects.
9919 (GetSystemProjFiles): Renamed from GetSuppliedProjections. Returns
9920 a list of ProjFile objects whose files are not user defined.
9921 (GetUserProjFiles): Renamed from GetUserProjections. Returns a
9922 list of ProjFile objects whose files are user defined.
9923 (ProjFileReader): Extend new XMLReader.
9924
9925 * Thuban/Model/save.py (XMLWriter): Renamed from XMLSaver to
9926 promote symmetry.
9927
9928 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Use a wxChoice
9929 control instead of a wxComboBox. wxChoice controls do not generate
9930 events as the uses highlights possible choices which fixes problems
9931 with resizing the dialog when the use selects an option.
9932
9933 * Thuban/UI/classifier.py (Classifier.__init__): Use a wxChoice
9934 control instead of a wxComboBox.
9935
9936 * Thuban/UI/mainwindow.py (MainWindow.Projection): Use new projection
9937 dialog.
9938
9939 * test/test_proj.py (TestProjection.test): New tests for GetParameter
9940 method.
9941
9942 2003-04-22 Bernhard Herzog <[email protected]>
9943
9944 * Thuban/UI/mainwindow.py: Remove some unused imports and global
9945 constants
9946
9947 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
9948 (IdentifyGridCtrl.selected_shape): Use table, not shapetable.
9949
9950 2003-04-17 Bernhard Herzog <[email protected]>
9951
9952 * Thuban/Model/layer.py: Don't import LAYER_LEGEND_CHANGED.
9953 (Layer): Update doc-string since LAYER_LEGEND_CHANGED is not used
9954 anymore.
9955 (Layer.BoundingBox, Layer.GetFieldType, Layer.NumShapes)
9956 (Layer.ShapeType, Layer.Shape): No need to call
9957 self.open_shapefile since it's always called in __init__
9958
9959 * Thuban/UI/application.py (ThubanApplication.MainLoop): Removed.
9960 In wxPython 2.4 there's no need to extend MainLoop anymore since
9961 wxPython itself makes sure OnExit is called.
9962
9963 2003-04-16 Jonathan Coles <[email protected]>
9964
9965 Initial putback of projection management code. Includes new
9966 classes to read and write projection files. The current load
9967 and save classes were abstracted a bit so they could be reused.
9968 The Projection class was extended to provide new methods and
9969 have a name.
9970
9971 * Thuban/Model/load.py (XMLProcessor): New. Contains all the
9972 general XML reading methods that were part of ProcessSession.
9973
9974 * Thuban/Model/proj.py (Projection.__init__): Accepts an optional
9975 name.
9976 (ProjFile): New. Represents a file that contains projection
9977 information.
9978
9979 * Thuban/Model/resource.py: New. Contains general utilities
9980 for read and writing projection files.
9981
9982 * Thuban/Model/save.py (XMLSaver): New. Contains all the
9983 general XML writing methods that were part of SessionSaver.
9984 (SessionSaver): Renamed from Saver.
9985
9986 * test/test_proj.py: New test cases for the projection
9987 file read and write functions.
9988
9989 2003-04-16 Jonathan Coles <[email protected]>
9990
9991 * Thuban/Model/classification.py: Use repr() around values
9992 in the ClassGroup*.__repr__() methods so it is clearer when
9993 a value is a string and when it is a number.
9994
9995 * test/test_load.py: Rework the classification test to test
9996 that we can load old files.
9997 (testLabels): Test a file where the groups have labels.
9998
9999 2003-04-16 Bernhard Herzog <[email protected]>
10000
10001 Safer implementation of the performance enhancements of the
10002 low-level renderer:
10003
10004 * extensions/thuban/wxproj.cpp (extract_projection)
10005 (extract_pointer): Rename extract_projection to extract_pointer
10006 and redefine its purpose to return the pointer stored in a CObject
10007 returned by the object's cobject method. Update all callers.
10008 (s_draw_info, free_draw_info, draw_polygon_init): Implement the
10009 handling of these low-level parameters so that each s_draw_info
10010 instance is handled as a CObject at python level that also
10011 contains real references to the actual python objects which
10012 contain the values in the struct. Add free_draw_info as the
10013 destructor.
10014 (draw_polygon_shape): Add the py_draw_info parameter which must a
10015 cobject containing an s_draw_info pointer.
10016
10017 * Thuban/UI/renderer.py (MapRenderer.polygon_render_param): New
10018 method to instantiat the low-level render parameter
10019 (MapRenderer.draw_shape_layer): Use the new method. Remove some
10020 commented out code.
10021 (MapRenderer.draw_polygon_shape): Make the first parameter not the
10022 layer but the low-level render parameter
10023 (ScreenRenderer.draw_shape_layer): Use the low-level render
10024 parameter.
10025
10026 2003-04-15 Jonathan Coles <[email protected]>
10027
10028 * Thuban/Model/classification.py: Implemented __repr__ for
10029 the ClassGroup* classes to make debugging a bit easier.
10030 (ClassGroup.SetLabel): Check that the string is an instance
10031 of StringTypes not StringType. Accounts for Unicode strings.
10032
10033 * Thuban/Model/color.py: Implemented __repr__ to make
10034 debugging a bit easier.
10035
10036 * Thuban/Model/save.py (Saver.write_classification): Need to
10037 save the group label.
10038
10039 * test/test_load.py (testClassification): New. Loads the
10040 iceland_sample_test.thuban file and checks if it was loaded
10041 correctly.
10042
10043 2003-04-15 Jonathan Coles <[email protected]>
10044
10045 * extensions/thuban/wxproj.cpp (draw_polygon_init): New. Used
10046 to improve rendering performance by initializing the variables
10047 that are not change each time draw_polygon_shape() is called.
10048 The values are stored in a global struct draw_info.
10049 (draw_polygon_shape): Removed initialization code that is
10050 now in draw_polygon_init().
10051
10052 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Make
10053 drawing initialization call to draw_polygon_init()
10054 (MapRenderer.draw_polygon_shape): Use new signature of
10055 draw_polygon_shape.
10056
10057 * Thuban/UI/classgen.py (GenUniformPanel): Fix spin control
10058 weirdness by setting the range to (1, maxint).
10059
10060 * Thuban/Model/classification.py (ClassGroupProperties): Make
10061 instance variables private and optimize comparison operator
10062 by first checking if the color references are the same.
10063 (ClassGroupSingleton): Make instance variables private.
10064 (ClassGroupRange): Make instance variables private.
10065
10066 * HOWTO-Release: Filled in missing steps for releasing packages.
10067
10068 2003-04-15 Bernhard Herzog <[email protected]>
10069
10070 First stab at internationalized messages:
10071
10072 * Thuban/__init__.py (_): Implement the translation function for
10073 real using the python gettext module.
10074
10075 * Thuban/UI/classifier.py (ClassTable.GetRowLabelValue): Don't
10076 translate empty strings.
10077
10078 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
10079 Add a missing space to a warning message
10080
10081 * po/README: New. Notes about the management of the translation
10082 files.
10083
10084 * po/Makefile: New. Makefile to help manage the translation files.
10085
10086 * po/es.po: New. Spanish translation by Daniel Calvelo Aros
10087
10088 * MANIFEST.in: Include the *.mo files in Resources/Locale and the
10089 translations and support files in po/
10090
10091 * setup.py (data_files): Add the *.mo files to the data_files too
10092
10093 * README: Add note about the translations when building from CVS
10094
10095 2003-04-14 Jonathan Coles <[email protected]>
10096
10097 * Thuban/UI/dock.py: Fixes some window resizing problems most
10098 noticable under windows. Always assume the button bitmaps will
10099 be there. Code clean up.
10100 (DockabelWindow.Dock, DockableWindow.UnDock): Force all the
10101 images for the dock/undock button to the same images.
10102 Work around for RTbug #1801.
10103
10104 * Thuban/UI/legend.py (LegendPanel.__init__): The toolbar should
10105 be allowed to grow within the sizer. Fixes a bug under Windows
10106 where the toolbar wasn't being drawn.
10107
10108 2003-04-14 Frank Koormann <[email protected]>
10109
10110 * Resources/Bitmaps/dock_12.xpm, Resources/Bitmaps/undock_12.xpm:
10111 Updated design to try to make the button functionality more
10112 transparent.
10113
10114 2003-04-14 Jonathan Coles <[email protected]>
10115
10116 * Thuban/UI/legend.py (LegendPanel.__init__): Call Create() to
10117 finalize the intialization of the panel.
10118
10119 * Thuban/UI/dock.py (DockPanel.Create): New. Finalizes the
10120 creation of the panel. Should be the last thing called in the
10121 initializer of a subclass.
10122
10123 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Actively
10124 set the current selections in the combo boxes. This is needed
10125 under Windows.
10126
10127 * Thuban/UI/classifier.py (Classifier.__init__): Add a top
10128 level panel to the dialog so that the background colors are
10129 consistent under Windows.
10130
10131 2003-04-11 Jonathan Coles <[email protected]>
10132
10133 * Thuban/UI/classgen.py: Change color ramps to start at white
10134 not black.
10135
10136 * Thuban/UI/legend.py: Enable/disable the legend buttons when
10137 the legend changes. Fixes RTbug #1793.
10138
10139 * test/test_classification.py: Added test for copying of
10140 classifications.
10141
10142 2003-04-11 Jonathan Coles <[email protected]>
10143
10144 * Thuban/UI/resource.py: New. Centralize the loading of resources
10145 such as bitmaps.
10146
10147 * Thuban/UI/classgen.py (GenUniquePanel.__init__): Reordered buttons,
10148 added images to the move buttons, added 'reverse' button.
10149 (CustomRampPanel.__init__): Added images to the move buttons.
10150 (GreyRamp): New. Generates a ramp from white to black.
10151 (HotToColdRamp): New. Generates a ramp from cold to hot colors.
10152
10153 * Thuban/UI/classifier.py: Refactored ID's from ID_CLASSIFY_* to
10154 ID_PROPERTY_*.
10155 (Classifier.__init__): Minor changes to the layout.
10156 (Classifier._OnTitleChanged): Listen for when the user edits the
10157 title and update the dialog's title and the layer's title.
10158
10159 * Thuban/UI/dock.py: Use new bitmaps for the control buttons.
10160
10161 * Thuban/UI/legend.py: Use new bitmaps for the control buttons.
10162 (LegendTree._OnMsgLayerTitleChanged): Change the displayed title
10163 if the layer's title changes.
10164
10165 * Thuban/UI/mainwindow.py: Added new menu item and associated code
10166 to open a dialog to rename the map.
10167 (MainWindow): Use new resource class to import bitmaps.
10168
10169 2003-04-11 Jonathan Coles <[email protected]>
10170
10171 * Resources/Bitmaps/close_12.xpm, Resources/Bitmaps/dock_12.xpm,
10172 Resources/Bitmaps/group_use.xpm, Resources/Bitmaps/group_use_all.xpm,
10173 Resources/Bitmaps/group_use_none.xpm,
10174 Resources/Bitmaps/group_use_not.xpm,
10175 Resources/Bitmaps/hide_layer.xpm,
10176 Resources/Bitmaps/layer_properties.xpm,
10177 Resources/Bitmaps/lower_layer.xpm, Resources/Bitmaps/raise_layer.xpm,
10178 Resources/Bitmaps/show_layer.xpm, Resources/Bitmaps/undock_12.xpm:
10179 New.
10180
10181 2003-04-10 Jonathan Coles <[email protected]>
10182
10183 * Thuban/Model/classification.py: (ClassGroupRange.__init__):
10184 Should pass group to ClassGroup constructor.
10185
10186 2003-04-10 Jonathan Coles <[email protected]>
10187
10188 * Thuban/Model/classification.py: (ClassGroup): Move all the common
10189 methods of the derived classes ([Set|Get]Properties(), __eq__, __ne__)
10190 here. Implement SetVisible(), IsVisible().
10191 (ClassGroup.__init__): Add group parameter which acts as a copy
10192 constructor.
10193
10194 * Thuban/UI/classifier.py (ClassTable): Add a new column for the
10195 "Visible" check boxes.
10196 (Classifier): Rename the buttons and refactor the code to match
10197 the new labels.
10198
10199 * Thuban/UI/legend.py: Classify button is now called "Properties".
10200 Refactored the code to change variable names.
10201 (LegendTree.__FillTreeLayer): Only list a group if it is visible.
10202
10203 * Thuban/UI/mainwindow.py: MainWindow.OpenClassifier renamed to
10204 MainWindow.OpenLayerProperties. MainWindow.LayerEditProperties
10205 renamed to MainWindow.LayerEditProperties.
10206 (MainWindow.ToggleLegend): Don't include map name in legend title.
10207 (MainWindow.SetMap): Added the map name to the window title.
10208 (MainWindow.LayerFillColor, MainWindow.LayerTransparentFill,
10209 MainWindow.LayerOutlineColor, MainWindow.LayerNoOutline): Removed.
10210 Functionality is found in the layer properties dialog.
10211
10212 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
10213 draw visible groups.
10214
10215 2003-04-09 Jonathan Coles <[email protected]>
10216
10217 * Thuban/UI/classgen.py: Modifications to allow simple
10218 addition and selection of new color schemes.
10219 (MonochromaticRamp): New. Generates a ramp between two colors.
10220 (RedRamp): New. Generates a ramp of all red.
10221 (GreenRamp): New. Generates a ramp of all green.
10222 (BlueRamp): New. Generates a ramp of all blue.
10223
10224 2003-04-09 Jonathan Coles <[email protected]>
10225
10226 * Thuban/Model/classification.py (Classification.__deepcopy__):
10227 Need to copy over field and fieldType attributes.
10228
10229 * Thuban/Model/table.py (Table.field_range): New. Retrive the
10230 maximum and minimum values over the entire table for a given
10231 field.
10232 (Table.GetUniqueValues): New. Retrieve all the unique values
10233 in the table for a given field.
10234
10235 * Thuban/UI/classgen.py: Renamed GenRangePanel to GenUniformPanel.
10236 (GenUniquePanel): New. Controls to allow the user to select
10237 which unique field values they would like in the classification.
10238 (CustomRampPanel): Code that was in ClassGenDialog that allows
10239 the user to select the properties for a custom ramp.
10240 (ClassGenerator.GenUniformDistribution): Was called GenerateRanges.
10241
10242 * Thuban/UI/classifier.py: Removed a lot of debugging code.
10243 (Classifier._SetClassification): Callback method so that the
10244 class generator can set the classification in the grid.
10245 (ClassGroupPropertiesCtrl): New. Encapsulates the drawing and
10246 editing of a group properties class into a wxWindows control.
10247
10248 * Thuban/UI/dock.py: It was decided that if the user closes
10249 a dockable window the window should simply hide itself. That
10250 way if the user wants to show the dock again it appears in the
10251 same place as it was when it was closed.
10252 (DockableWindow.Destroy): Call renamed method OnDockDestroy().
10253 (DockableWindow._OnButtonClose): Hide the window instead of
10254 destroying it.
10255 (DockableWindow._OnClose): Hide the window instead of
10256 destroying it.
10257
10258 * Thuban/UI/legend.py (LegendTree): Use a private method to
10259 consistently set the font and style of the text. Fixes RTbug #1786.
10260
10261 * Thuban/UI/mainwindow.py: Import just the Classifier class.
10262
10263 2003-04-07 Bernhard Herzog <[email protected]>
10264
10265 * Thuban/UI/mainwindow.py (main_menu): Move the toggle_legend item
10266 to the map module
10267
10268 2003-04-07 Bernhard Herzog <[email protected]>
10269
10270 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree): Removed in
10271 favor of ToggleSessionTree
10272 (MainWindow.ToggleSessionTree): New method to toggle visibility of
10273 the session tree.
10274 (MainWindow.SessionTreeShown): New method to return whether the
10275 session tree is currently shown.
10276 (MainWindow.ToggleLegend): New method to toggle visibility of the
10277 legend
10278 (MainWindow.ShowLegend): Implement in terms of ToggleLegend and
10279 LegendShown
10280 (MainWindow.LegendShown): New method to return whether the legend
10281 is currently shown.
10282 (_method_command): Add checked parameter so we can define check
10283 menu items
10284 (_has_tree_window_shown, _has_legend_shown): Use the appropriate
10285 mainwindow methods.
10286 (show_session_tree, show_legend commands): Removed.
10287 (toggle_session_tree, toggle_legend commands): New commands to
10288 toggle the visibility of the dialogs
10289
10290 2003-04-07 Jonathan Coles <[email protected]>
10291
10292 * Thuban/UI/classgen.py: Fix Windows problem.
10293
10294 * Thuban/UI/dock.py: Fix Windows problem.
10295
10296 * Thuban/UI/mainwindow.py: Use False instead of false.
10297 (MainWindow.ShowLegend): Remove unnecessary switch parameter.
10298
10299 2003-04-07 Jonathan Coles <[email protected]>
10300
10301 Since we now say that the order of the groups in a classification
10302 matters, it makes sense to be able to manipulate that order. Most
10303 of the changes to Thuban/Model/classification.py are to that end.
10304
10305 * Thuban/Model/classification.py (Classification.AppendGroup,
10306 Classification.InsertGroup, Classification.ReplaceGroup,
10307 Classification.RemoveGroup, Classification.GetGroup): Do as the
10308 names imply.
10309 (Classification.FindGroup): This was called GetGroup, but GetGroup
10310 takes an index, while FindGroup takes a value.
10311 (Classification.__deepcopy__): Copy all the groups, BUT NOT THE LAYER
10312 REFERENCE. Currently there is a cyclic reference between the layer
10313 and its classification. If the classification doesn't need to know
10314 its owning layer we can change this, since it may make sense to be
10315 able to use the same classification with different layers.
10316
10317 * Thuban/Model/load.py: Use Classification.AppendGroup(), not AddGroup()
10318
10319 * Thuban/UI/classgen.py: Use Classification.AppendGroup(),
10320 not AddGroup()
10321
10322 * Thuban/UI/classifier.py: Now that we can depend on the order in
10323 a Classification and have methods to manipulate that order we don't
10324 need to use our own data structures in the grid. We can simply make
10325 the grid/table access the information they need from a copy of
10326 the classification object.
10327 (Classifier._OnCloseBtn): Event handler for when the user clicks
10328 'Close'. This is needed so if the user applies changes and then
10329 continues to change the table the user has the option of discarding
10330 the most recent changes and keeping what they applied.
10331
10332 * Thuban/UI/mainwindow.py: Put "Show Legend" and "Show Session Tree"
10333 into the same group.
10334
10335 * extensions/thuban/wxproj.cpp (check_version): If Thuban is compiled
10336 with a really old version of proj, PJ_VERSION won't even be defined.
10337 If it isn't defined then just compile so that the function always
10338 returns Py_False.
10339
10340 * test/test_classification.py: Fix tests to use the renamed methods.
10341 Still need to write tests for the new methods.
10342
10343 2003-04-04 Jonathan Coles <[email protected]>
10344
10345 * Thuban/UI/classifier.py (Classifier.__SelectField): Move the
10346 call to SetSelection out of the method and before the call
10347 to __SelectField in __init__. This prevents a recursion of events
10348 when _OnFieldSelect is triggered by the user.
10349
10350 2003-04-04 Jonathan Coles <[email protected]>
10351
10352 * Thuban/Model/classification.py: Rename Color.None to
10353 Color.Transparent.
10354 (ClassGroupProperties.SetLineColori, ClassGroupProperties.SetFill):
10355 Don't bother copying the color, since Colors are immutable.
10356
10357 * Thuban/Model/color.py, Thuban/Model/layer.py, Thuban/Model/load.py,
10358 Thuban/UI/classifier.py, Thuban/UI/mainwindow.py,
10359 Thuban/UI/renderer.py, Thuban/UI/view.py:
10360 Rename Color.None to Color.Transparent.
10361
10362 * test/test_classification.py, test/test_load.py: Rename Color.None
10363 to Color.Transparent.
10364
10365 2003-04-04 Jonathan Coles <[email protected]>
10366
10367 * Thuban/Model/classification.py: Fix assert calls.
10368 (ClassGroupProperties.SetLineColor, ClassGroupProperties.SetFill):
10369 Copy the color parameter rather than hold onto a reference.
10370
10371 * Thuban/Model/color.py (Color.__copy__, Color.__deepcopy): Copy
10372 the color object.
10373 (NoColor.__copy__, NoColor.__deepcopy): Return 'self' so that we
10374 are sure there exists only one refernce to Color.None in the system.
10375 This allows us to use 'is' rather than the comparision functions.
10376
10377 * Thuban/Model/save.py: Fix assert calls.
10378
10379 * Thuban/UI/classifier.py: Fix assert calls.
10380 (ClassGrid._OnCellDClick): Call up to the classifier to open the
10381 dialog to edit the groups properties.
10382 (ClassGrid._OnCellResize): Make sure that the scollbars are drawn
10383 correctly if a cell is resized.
10384 (ClassTable.SetClassification): New. Changes the classification
10385 that is in the table.
10386 (ClassTable.__SetRow): Allow groups to be prepended.
10387 (Classifier): New code for opening the EditProperties and
10388 GenerateRanges dialogs.
10389 (SelectPropertiesDialog.__GetColor): Only set the color in the
10390 color dialog if the current color is not None.
10391
10392 * Thuban/UI/dock.py: Fix assert calls.
10393
10394 * Thuban/UI/legend.py: Fix assert calls.
10395
10396 * Thuban/UI/renderer.py: Fix assert calls.
10397
10398 * Thuban/UI/classgen.py (ClassGenDialog): Dialog for generating
10399 classifications.
10400 (GenRangePanel): Panel specific to range generation.
10401 (GenSingletonPanel): Panel specific to singleton generation.
10402 (ClassGenerator): Class responsible for actually generating
10403 the classification from the data gathered in the dialog box.
10404 (PropertyRamp): Generates properties whose values range from
10405 a starting property to an ending property.
10406
10407 2003-04-03 Bernhard Herzog <[email protected]>
10408
10409 * test/support.py (print_garbage_information): New function that
10410 prints information about still connected messages and memory
10411 leaks.
10412 (run_suite): Removed.
10413 (run_tests): New function for use as a replacement of
10414 unittest.main in the test_* files. This one calls
10415 print_garbage_information at the end.
10416
10417 * test/runtests.py (main): Use support.print_garbage_information
10418
10419 * test/test_layer.py: Use support.run_tests instead of
10420 unittest.main so we get memory leak information
10421 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
10422 (TestLayer.test_point_layer, TestLayer.test_empty_layer)
10423 (TestLayerLegend.test_visibility): Call the layer's Destroy method
10424 to fix a memory leak.
10425
10426 * test/test_classification.py: Use support.run_tests instead of
10427 unittest.main so we get memory leak information
10428 (TestClassification.test_classification): Call the layer's Destroy
10429 method to fix a memory leak.
10430
10431 2003-04-02 Bernhard Herzog <[email protected]>
10432
10433 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
10434 Handle the reference counts of the return value and errors in
10435 PyArg_ParseTuple correctly.
10436
10437 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
10438 sure the filename is absolute to avoid problems when saving the
10439 session again
10440
10441 * Thuban/Model/table.py: Remove unnecessary import. Fix a typo.
10442
10443 2003-04-01 Jonathan Coles <[email protected]>
10444
10445 * Thuban/UI/renderer.py (MapRenderer.draw_point_shape): Check
10446 that there actually are points in the returned list of points
10447 before trying to index into the list. The list may be empty if
10448 the shape is a Null Shape.
10449
10450 2003-04-01 Bernhard Herzog <[email protected]>
10451
10452 * test/test_map.py: Don't use from <module> import *
10453
10454 2003-04-01 Jonathan Coles <[email protected]>
10455
10456 * Thuban/Model/session.py: Use LAYER_CHANGED instead of
10457 LAYER_LEGEND_CHANGED
10458
10459 * Thuban/UI/dock.py (DockableWindow._OnButtonClose): Call
10460 self.Destroy() to close the window after yesterday's changes.
10461
10462 * test/test_map.py, test/test_session.py: Fix messages that
10463 are sent from maps and layers.
10464
10465 2003-03-31 Jonathan Coles <[email protected]>
10466
10467 * Thuban/UI/classifier.py: Commented out some debugging statements.
10468 (ClassDataPreviewer.Draw): Draw rectangles for polygon layers per
10469 RTbug #1769.
10470
10471 * Thuban/UI/dock.py (DockableWindow.UnDock): Restore size and
10472 position (although position doesn't work yet under GTK).
10473 (DockableWindow.Destroy): New. Called when the window must be
10474 closed. Namely needed when the DockFrame closes and must close
10475 its children.
10476 (DockFrame): Listen for EVT_CLOSE and destroy all children.
10477
10478 * Thuban/UI/legend.py (LegendPanel.Destroy): New. Cleans up
10479 when then window is told to close.
10480 (LegendTree._OnMsgLayerChanged): Fixes a seg fault bug. See
10481 comment in source for more info.
10482
10483 * Thuban/UI/main.py: Show the legend by default when Thuban starts.
10484
10485 * Thuban/UI/mainwindow.py: Renamed OnClose to _OnClose for
10486 symmetry with other such methods.
10487 (MainWindow.ShowLegend): Show the legend docked by default.
10488
10489 2003-03-28 Jonathan Coles <[email protected]>
10490
10491 * Thuban/UI/classifier.py: Support for highlighting a specific
10492 group within the grid when the classification dialog is opened.
10493 Also contains a lot of debugging printouts which will later
10494 be removed.
10495
10496 * Thuban/UI/dock.py: Complete rework on the dock code so that
10497 that it is fairly removed from the rest of the Thuban application.
10498 It is easy to add new docks which the rest of the program having
10499 to be aware of them.
10500
10501 * Thuban/UI/legend.py: Modifications to support selecting a
10502 specific group in the classification dialog. Changed how layers
10503 are drawn when the layer is visible/invisible.
10504
10505 * Thuban/UI/mainwindow.py: Removed legend specific code and
10506 replaced it with calls to the new dock code.
10507
10508 * Thuban/UI/renderer.py (MapRenderer.__init__): Added assert
10509 to check if scale > 0. Trying to track down a divide by zero.
10510
10511 2003-03-26 Jonathan Coles <[email protected]>
10512
10513 * Thuban/UI/legend.py: Removed unnecessary LegendDialog class.
10514 (LegendPanel): Removed _OnDock()/_OnUnDock() methods which are
10515 now part of DockableWindow.
10516 (LegendPanel.DoOnSelChanged): Select the current layer in the
10517 map.
10518 (LegendTree._OnSelChanged): Call LegendPanel.DoOnSelChanged()
10519 with the selected layer and/or group.
10520
10521 2003-03-26 Jonathan Coles <[email protected]>
10522
10523 This putback contains the code for dockable windows. There is
10524 no support in wxWindows as of this date for windows that can
10525 attach themselves to other windows.
10526
10527 The current model contains a DockableWindow which has a parent
10528 window for when it is detached and a dock window that it puts
10529 its contents in when it is docked. The contents of a DockableWindow
10530 must be a DockPanel. DockPanel itself derives from wxPanel.
10531
10532 * Thuban/Model/layer.py (Layer.ClassChanged): Send a LAYER_CHANGED
10533 message, not a LAYER_LEGEND_CHANGED message.
10534
10535 * Thuban/Model/map.py (Map): Forward LAYER_CHANGED messages.
10536
10537 * Thuban/UI/classifier.py (Classifier.__init__): Use wxADJUST_MINSIZE
10538 as one of the style properties for the fieldTypeText item to
10539 be sure that its size is correct when the text changes.
10540
10541 * Thuban/UI/dock.py: New. Classes for the DockPanel and
10542 DockableWindow.
10543
10544 * Thuban/UI/legend.py: Added some more buttons and made the
10545 LegendPanel a DockPanel.
10546
10547 * Thuban/UI/mainwindow.py: Added sash windows to the main window
10548 and supporting functions for manipulating the sashes.
10549 (MainWindow.ShowLegend): Create a DockableWindow with the
10550 LegendPanel as the contents.
10551
10552 * Thuban/UI/messages.py: Added DOCKABLE_* messages
10553
10554 * Thuban/UI/view.py (MapCanves.SetMap): Listen for LAYER_CHANGED,
10555 not LAYER_LEGEND_CHANGED, messages.
10556
10557 2003-03-25 Jonathan Coles <[email protected]>
10558
10559 * setup.py: Added custom script bdist_rpm_build_script so that
10560 when the rpm is built the path to wx-config is correct.
10561
10562 * setup.cfg: Added line saying to use the custom build script
10563
10564 2003-03-20 Jonathan Coles <[email protected]>
10565
10566 Initial implementation of the Legend.
10567
10568 * Thuban/UI/legend.py: New. Creates a window that shows the map's
10569 Legend information and allows the user to add/modify classifications
10570 and how the layers are drawn on the map.
10571
10572 * setup.py: New command 'build_docs' which currently uses
10573 happydoc to generate html documentation for Thuban.
10574
10575 * Thuban/Model/classification.py (ClassGroup.GetDisplayText): New.
10576 Returns a string which is appropriately describes the group.
10577
10578 * Thuban/Model/layer.py (Layer.SetClassification): Generate a
10579 LAYER_CHANGED event instead of a LAYER_LEGEND_CHANGED event.
10580
10581 * Thuban/Model/map.py (Map): Rename messages and use new, more
10582 specific, messages.
10583
10584 * Thuban/Model/messages.py: New message to indicate that a layer's
10585 data has changed (LAYER_CHANGED). New map messages to indicate
10586 when layers have been added/removed/changed or if the stacking order
10587 of the layers has changed.
10588
10589 * Thuban/Model/session.py: Rename and use new messages.
10590
10591 * Thuban/UI/classifier.py: Remember if any changes have actually
10592 been applied so that if the dialog is cancelled without an application
10593 of changes we don't have to set a new classification.
10594 (ClassDataPreviewer): Pulled out the window specific code and put it
10595 ClassDataPreviewWindow. ClassDataPreviewer can then be used to draw
10596 symbols on any DC.
10597
10598 * Thuban/UI/mainwindow.py: New code to open the legend.
10599
10600 * Thuban/UI/view.py: Use new message names.
10601
10602 2003-03-19 Jonathan Coles <[email protected]>
10603
10604 * Thuban/UI/main.py (verify_versions): New. Checks the versions
10605 of Python, wxPython, and some other libraries.
10606
10607 * extensions/thuban/wxproj.cpp (check_version): Checks the given
10608 version against what wxproj was compiled with.
10609 (check_version_gtk): If wxproj was compiled with gtk then check
10610 the given version against the version of the gtk library
10611 currently being used.
10612
10613 2003-03-14 Bernhard Herzog <[email protected]>
10614
10615 * test/test_command.py: Run the tests when the module is run as a
10616 script
10617
10618 2003-03-14 Bernhard Herzog <[email protected]>
10619
10620 Implement selection of multiple selected shapes in the same layer:
10621
10622 - Introduce a new class to hold the selection. This basically
10623 replaces the interactor which was nothing more than the
10624 selection anyway. A major difference is of course that the new
10625 selection class supports multiple selected shapes in one layer
10626
10627 - Move the object that represents the selection from the
10628 application to the canvas. The canvas is a better place than the
10629 application because the selection represents which shapes and
10630 layer of the map displayed by the canvas are selected and
10631 affects how the map is drawn.
10632
10633 - Make the selection and its messages publicly available through
10634 the mainwindow.
10635
10636 - The non-modal dialogs do not get a reference to the interactor
10637 anymore as they can simply refer to their parent, the
10638 mainwindow, for the what the interactor had to offer.
10639
10640 * Thuban/UI/selection.py: New module with a class to represent the
10641 selection.
10642
10643 * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
10644 these unused messages
10645
10646 * Thuban/UI/application.py (ThubanApplication.OnInit)
10647 (ThubanApplication.OnExit, ThubanApplication.SetSession): The
10648 interactor is gone now.
10649 (ThubanApplication.CreateMainWindow): There is no interactor
10650 anymore so we pass None as the interactor argument for now for
10651 compatibility.
10652
10653 * Thuban/UI/view.py (MapCanvas.delegated_messages)
10654 (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
10655 Unsubscribe, delegate messages according to the delegated_messages
10656 class variable.
10657 (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
10658 attributes from instance variables as described with the
10659 delegated_methods class variable.
10660 (MapCanvas.__init__): New instance variable selection holding the
10661 current selection
10662 (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
10663 pass them on to the renderer
10664 (MapCanvas.SetMap): Clear the selection when a different map is
10665 selected.
10666 (MapCanvas.shape_selected): Simple force a complete redraw. The
10667 selection class now takes care of only issueing SHAPES_SELECTED
10668 messages when the set of selected shapes actually does change.
10669 (MapCanvas.SelectShapeAt): The selection is now managed in
10670 self.selection
10671
10672 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
10673 (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
10674 Unsubscribe, delegate messages according to the delegated_messages
10675 class variable.
10676 (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
10677 attributes from instance variables as described with the
10678 delegated_methods class variable.
10679 (MainWindow.__init__): The interactor as ivar is gone. The
10680 parameter is still there for compatibility. The selection messages
10681 now come from the canvas.
10682 (MainWindow.current_layer, MainWindow.has_selected_layer):
10683 Delegate to the the canvas.
10684 (MainWindow.LayerShowTable, MainWindow.Classify)
10685 (MainWindow.identify_view_on_demand): The dialogs don't need the
10686 interactor parameter anymore.
10687
10688 * Thuban/UI/tableview.py (TableFrame.__init__)
10689 (LayerTableFrame.__init__, LayerTableFrame.OnClose)
10690 (LayerTableFrame.row_selected): The interactor is gone. It's job
10691 from the dialog's point of view is now done by the mainwindow,
10692 i.e. the parent. Subscribe to SHAPES_SELECTED instead
10693 of SELECTED_SHAPE
10694
10695 * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
10696 is gone. It's job from the dialog's point of view is now done by
10697 the mainwindow, i.e. the parent.
10698
10699 * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
10700 gone. It's job from the dialog's point of view is now done by the
10701 mainwindow, i.e. the parent.
10702
10703 * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
10704 gone. It's job from the dialog's point of view is now done by the
10705 mainwindow, i.e. the parent.
10706 (SessionTreeCtrl.__init__): New parameter mainwindow which is
10707 stored as self.mainwindow. The mainwindow is need so that the tree
10708 can still subscribe to the selection messages.
10709 (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
10710 (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
10711 selection is now accessible through the mainwindow. Subscribe to
10712 SHAPES_SELECTED instead of SELECTED_SHAPE
10713
10714 * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
10715 SHAPES_SELECTED message now.
10716 (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
10717 so deal with multiple shapes
10718 (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
10719 gone. It's job from the dialog's point of view is now done by the
10720 mainwindow, i.e. the parent.
10721
10722 * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
10723 parameter is now a list of shape ids.
10724 (RecordTable.SetTable): The second parameter is now a list of
10725 indices.
10726
10727 * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
10728 selected_shape parameter and ivar to selected_shapes. It's now a
10729 list of shape ids.
10730 (MapRenderer.draw_label_layer): Deal with multiple selected
10731 shapes. Rearrange the code a bit so that the setup and shape type
10732 distinctions are only executed once.
10733
10734 * test/test_selection.py: Test cases for the selection class
10735
10736 2003-03-11 Jonathan Coles <[email protected]>
10737
10738 * Thuban/Model/load.py: Temporary fix so that the xml reader
10739 doesn't cause Thuban to crash.
10740
10741 * Thuban/Model/layer.py: Handle the cyclic references between
10742 a layer and its classification better, and be sure to disconnect
10743 the classification from the layer when the layer is destroyed
10744 so that we don't maintain a cyclic reference that may not be
10745 garbage collected.
10746
10747 * Thuban/Model/classification.py: See comment for layer.py.
10748
10749 2003-03-12 Jan-Oliver Wagner <[email protected]>
10750
10751 * HOWTO-Release: New. Information on the steps for releasing
10752 a new version of Thuban.
10753
10754 2003-03-11 Jonathan Coles <[email protected]>
10755
10756 * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
10757 Use True instead of true.
10758 (Classifier): Should have a single panel in which all the controls lie.
10759
10760 * Thuban/UI/proj4dialog.py: Add normal border.
10761
10762 * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
10763
10764 * Thuban/UI/mainwindow.py: Use True instead of true.
10765
10766 * setup.py: Update some definitions to use wxWindows2.4 files
10767
10768 * Data/iceland_sample_class.thuban: Fixed file so that the
10769 field_type information is present.
10770
10771 2003-03-10 Jonathan Coles <[email protected]>
10772
10773 * Thuban/UI/classifier.py (Classifier.__init__): Make the
10774 field type label grow so that when the text changes the
10775 size is updated correctly. This may be a wxWindows bug.
10776
10777 2003-03-10 Jonathan Coles <[email protected]>
10778
10779 * Thuban/UI/application.py: Changed SESSION_CHANGED to
10780 SESSION_REPLACED.
10781
10782 * Thuban/UI/classifier.py: Wrap text with _().
10783 (ClassGrid.CreateTable): Set dimensions and size hints here,
10784 instead of in Reset, so we only set the size once.
10785
10786 * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
10787
10788 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
10789 Call Close() instead of Shutdown().
10790
10791 * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
10792
10793 * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
10794 Go back to using OnClose() instead of Shutdown().
10795
10796 2003-03-10 Jonathan Coles <[email protected]>
10797
10798 * Thuban/UI/classifier.py (Classifier): SelectField() needed
10799 to know the old field index as well as the new one.
10800
10801 2003-03-10 Jonathan Coles <[email protected]>
10802
10803 * Thuban/UI/classifier.py (Classifier): Use __SelectField()
10804 to correctly set the table information and call this from
10805 __init__ and from _OnFieldSelect so that all the information
10806 is up to date when the dialog opens and when a field is changed.
10807
10808 2003-03-10 Jonathan Coles <[email protected]>
10809
10810 * Thuban/Model/classification.py (Classification): Don't use
10811 layer's message function directly, use the ClassChanged() method
10812 when then classification changes. SetField/SetFieldType/SetLayer
10813 must keep the information about field name and field type in
10814 sync when an owning layer is set or removed.
10815
10816 * Thuban/Model/layer.py: Added ClassChanged() so that the
10817 classification can tell the layer when its data has changed.
10818 (Layer.SetClassification): Accepts None as an arguement to
10819 remove the current classification and correctly handles
10820 adding a new classification.
10821
10822 * Thuban/Model/load.py: Comment out print statement
10823
10824 * test/test_classification.py, test/test_save.py: New and
10825 improved tests.
10826
10827 2003-03-07 Jonathan Coles <[email protected]>
10828
10829 * Thuban/Model/classification.py: Implemented __copy__ and
10830 __deepcopy__ for ClassGroup* and ClassGroupProperites so
10831 they can easily be copied by the classifier dialog.
10832 (ClassGroupProperites.__init__): The default line color should
10833 have been Color.Black.
10834
10835 * Thuban/UI/classifier.py: Setting and Getting table values now
10836 uses a consistent set of functions.
10837 (Classifier): Now non-modal. Has field type label which changes
10838 as the field changes. Keep track of buttons in a list so that
10839 we can enable/disable the buttons when the None field is selected.
10840 (SelectPropertiesDialog): Add buttons to make the colors transparent.
10841
10842 * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
10843 does what OnClose did, but can be called by the application to
10844 close a window. Needed when a session changes, and we have to
10845 close the classifier windows.
10846
10847 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
10848 Shuts down open dialogs. Used when a new session is created
10849 or a session is opened.
10850 (MainWindow.SaveSession): Should only call application.SaveSession()
10851 if we don't call SaveSessionAs first.
10852 (MainWindow.Classify): Allow different classifier dialogs for
10853 different layers.
10854
10855 * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
10856 the parent class handle it. Add Shutdown() to unsubscibe from
10857 event notification and call the parent Shutdown(). This was
10858 necessary so the application can close the tree window.
10859
10860 2003-03-06 Jonathan Coles <[email protected]>
10861
10862 * Thuban/Model/classification.py: Minor documentation changes,
10863 Addition of __eq__ and __ne__ methods.
10864 (Classification.SetLayer): prevent recursion between this method
10865 and Layer.SetClassification().
10866
10867 * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
10868
10869 * Thuban/Model/layer.py (SetClassification): prevent recursion
10870 between this method and Classification.SetLayer().
10871
10872 * test/test_classification.py, test/test_load.py,
10873 test/test_session.py: Fixed and added tests for the classification
10874 classes.
10875
10876 2003-03-06 Bernhard Herzog <[email protected]>
10877
10878 * Thuban/UI/classifier.py (ClassGrid.__init__)
10879 (ClassGrid.CreateTable): Move the SetSelectionMode call to
10880 CreateTable because otherwise it triggers an assertion in
10881 wxPython/wxGTK 2.4.
10882
10883 2003-03-05 Jonathan Coles <[email protected]>
10884
10885 * Thuban/common.py: Move FIELDTYPE constants back to table.py.
10886
10887 * Thuban/Model/load.py: import FIELDTYPE constants from table.
10888
10889 * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
10890
10891 * Thuban/Model/table.py: Put FIELDTYPE constants back.
10892
10893 2003-03-05 Jonathan Coles <[email protected]>
10894
10895 * Thuban/UI/classifier.py: Added class documentation.
10896 Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
10897 Store just the groups in the table and generate the other
10898 column information when it is requested. Add "None" field
10899 to pull-down to select no classification.
10900
10901 * Thuban/common.py: Moved FIELDTYPE constants from table.py
10902 (Str2Num): Only catch ValueError exceptions.
10903
10904 * Thuban/Model/classification.py: Class documentation. Renaming
10905 of methods with Stroke to Line. Groups are stored in a single
10906 list with the default as the first element. Groups are searched
10907 in the order they appear in the list.
10908
10909 * Thuban/Model/color.py: Documentation.
10910
10911 * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
10912 the kind of data represented by a field.
10913
10914 * Thuban/Model/load.py (ProcessSession): Use proper string
10915 conversion function; fixes RTbug #1713.
10916
10917 * Thuban/Model/save.py (Saver): Store field type information.
10918
10919 * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
10920 (Table): Add field_info_by_name() to retrieve field information
10921 by specifying the field name, not the number.
10922
10923 * Thuban/UI/mainwindow.py: Function name changes.
10924
10925 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
10926 get the layer classification once. Don't try to classify
10927 values when the field is None: just use the default properties.
10928
10929 * Thuban/UI/view.py: Function name changes.
10930
10931 * Doc/thuban.dtd: Add field_type attribute to a classification.
10932
10933 2003-03-04 Bernhard Herzog <[email protected]>
10934
10935 * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
10936 the fill and stroke layer attributes optional with suitable
10937 default values. Add the stroke_width layer attribute. Use correct
10938 syntax for empty elements. Make the attribute list for labels
10939 refer to the label element.
10940
10941 2003-03-04 Bernhard Herzog <[email protected]>
10942
10943 * setup.py (thuban_build_py.build): Add a comment about distutils in
10944 Python 2.3 containing some of the functionality we implement in
10945 setup.py ourselves.
10946
10947 * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
10948 before the selection mode. Doing it the other way round triggers
10949 an assertion in wxWindows.
10950
10951 * Thuban/Model/save.py (escape): Fix typo in doc-string
10952
10953 * Thuban/Model/classification.py: Remove unnecessary wxPython
10954 import
10955
10956 2003-03-04 Jonathan Coles <[email protected]>
10957
10958 * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
10959 Parameter 'value' should default to None.
10960
10961 * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
10962 the class attribute __classification is now private.
10963
10964 * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
10965 Classifier to ClassGrid. Added support for removing selected rows,
10966 which including code for keeping track of when cells are selected,
10967 and deselected.
10968 (ClassTable): Support for added/removing rows. Fixed a problem
10969 with __ParseInput whereby it would not allow strings (only numbers)
10970 to be entered.
10971 (Classifier): Added button and supporting code for removing
10972 selected rows.
10973
10974 2003-02-27 Jonathan Coles <[email protected]>
10975
10976 * Thuban/common.py: Moved color conversion functions into
10977 Thuban/UI/common.py.
10978 (Str2Num): Now converts the float (not the string) to a long/int
10979 so that an exception isn't thrown.
10980
10981 * Thuban/UI/common.py: Common functions used in several UI modules
10982
10983 * Thuban/Model/classification.py: Changed the class hierarchy
10984 so that a Classification consists of Groups which return
10985 Properties when a value matches a Group.
10986
10987 * Thuban/Model/layer.py: Fixed name resolution problem.
10988
10989 * Thuban/Model/load.py: Use new Classification and Group functions.
10990
10991 * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
10992 failure.
10993 (Saver.write_classification): Use new Classification and Group
10994 functions.
10995
10996 * Thuban/UI/classifier.py: Changes to use new Classification and Group
10997 functions. Fix to create a tuple with a single value instead of
10998 simply returning the value.
10999
11000 * Thuban/UI/renderer.py: Use new Classification and Group functions.
11001 Use common.py functions.
11002
11003 * Thuban/UI/tree.py: Use common.py functions.
11004
11005 * test/test_classification.py: Use new Classification and Group
11006 classes.
11007
11008 2003-02-24 Jonathan Coles <[email protected]>
11009
11010 * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
11011 functions from Thuban color objects to wxWindow colour objects.
11012
11013 * Thuban/Model/classification.py (Classification): Renamed
11014 GetProperties() to GetClassData(). Used the new iterator
11015 in TreeInfo().
11016 (ClassIterator): Iterator implementation to iterate over the
11017 ClassData objects in a classification object.
11018
11019 * Thuban/Model/save.py (Saver.write_classificaton): Uses
11020 the new iterator to save the classification information.
11021
11022 * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
11023 for changing the stroke and fill colors and previewing the
11024 changes.
11025
11026 * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
11027 MainWindow.SaveSessionAs): Text string changes so the dialogs
11028 have more meaningful titles.
11029
11030 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
11031 Classification method name from GetProperties to GetClassData.
11032
11033 * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
11034 instead of accessing now non-existent class variables.
11035
11036 2003-02-24 Bernhard Herzog <[email protected]>
11037
11038 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
11039 unneeded Shape() call. Rendering is substantially faster without
11040 it and it avoids some problems with broken shape files.
11041
11042 2003-02-20 Frank Koormann <[email protected]>
11043
11044 Force minimal size of identify and label dialogs. The autosizing
11045 looked too ugly.
11046
11047 * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
11048 * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
11049 Set size of listctrl.
11050 * Thuban/UI/identifyview.py (IdentifyView.__init__):
11051 Set size of dialog.
11052
11053 2003-02-19 Jonathan Coles <[email protected]>
11054
11055 * test/test_classification.py, test/test_layer.py,
11056 test/test_load.py, test/test_map.py, test/test_session.py:
11057 Updated the tests to use the new functions that are in the
11058 respective classes.
11059
11060 * Thuban/Model/classification.py (Classification):
11061 Uses the new ClassData* classes. Modification messages are
11062 passed up to the parent layer (if it exists).
11063 (ClassData): New class to encapsulate the common data in each
11064 classification property.
11065 (ClassDataDefault): Represents the Default class. data.
11066 (ClassDataPoint): Represents a single class. data point
11067 (ClassDataRange): Represents a class. range
11068 (ClassDataMap): Represents a class. map (unused).
11069
11070 * Thuban/Model/color.py: Added Color.None to represent something
11071 with no color. Color.Black represents the color black.
11072 (NoColor): Helper class derived from Color to represent something
11073 with no color.
11074
11075 * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
11076 stroke_width attributes. Made the 'classification' attribute private.
11077 New methods for setting/getting the classification.
11078
11079 * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
11080 to get the classifcation and use the new ClassData* classes to
11081 hold the classification data. Use Str2Num to convert numbers
11082 properly.
11083
11084 * Thuban/Model/save.py (Saver): Use new Color and Classification
11085 methods
11086
11087 * Thuban/UI/classifier.py (ClassGrid): New class to represent a
11088 custom grid.
11089 (ClassTable): Support for editing Values and Labels and for
11090 changing what type (point or range) of data is stored in each
11091 property based on how the user enters the data.
11092 (Classifier): Support for saving the new classifications and
11093 launching the dialog to edit a property.
11094 (SelectPropertiesDialog): New class for editing the visual
11095 properties of a classification (stroke color, width, and fill color)
11096 (ClassPreviewer): Took the Draw method from ClassRenderer and
11097 made most of it into this new class. Intend to use this class in
11098 the SelectPropertiesDialog for previewing changes.
11099
11100 * Thuban/UI/renderer.py: Use new Color and Classification methods.
11101
11102 * Thuban/UI/tree.py: Formatting changes.
11103
11104 * Doc/thuban.dtd: Add 'label' element
11105
11106 * Thuban/common.py: New. Contains common routines used throughout
11107 the code.
11108 (Str2Num): Takes a string and converts it to the "best" type of
11109 number.
11110
11111 2003-02-14 Bernhard Herzog <[email protected]>
11112
11113 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
11114 dragging flag is always set to 0 even when the tool implementation
11115 raises an exception
11116
11117 2003-02-11 Bernhard Herzog <[email protected]>
11118
11119 * Thuban/UI/application.py (ThubanApplication.splash_screen): New
11120 method to create a splash screen.
11121 (ThubanApplication.ShowMainWindow): New. Show the main window.
11122 Needed so the splash screen can display the mainwindow
11123 (ThubanApplication.OnInit): Call the
11124 new splash_screen method to determine whether the application
11125 should display a splash screen. If it displays a splash screen do
11126 not immediately show the main window.
11127
11128 2003-02-11 Jonathan Coles <[email protected]>
11129
11130 * Thuban/Model/classification.py: Added import line to fix
11131 feature conflicts between running on python2.2 and python2.1.
11132
11133 * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
11134 onto the clinfo parameter, so removed the deepcopy().
11135
11136 2003-02-10 Jonathan Coles <[email protected]>
11137
11138 * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
11139 Added element_open variable to track opening and closing of tags
11140 so that tags that don't span more than one line are closed with
11141 /> instead of </tag_name>. Use the GetDefault*() methods of
11142 the Classification class.
11143
11144 * Thuban/Model/classification.py (Classificaton): Added set and
11145 get methods for the default data. The class also takes a layer
11146 reference so that modification messages can be sent. Fixed the
11147 methods to use the new ClassData class.
11148 (ClassData): New class to encapsulate the classification data
11149
11150 * Thuban/Model/layer.py (Layer): Remove the
11151 Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
11152 SetDefault*() methods on the layer's classification object.
11153 (Layer.__init__): Use the new SetDefault*() methods in the
11154 Classification class.
11155
11156 * Thuban/Model/load.py (ProcessSession): Use the new ClassData
11157 object instead of a dictionary.
11158
11159 * Thuban/UI/classifier.py (ClassRenderer): New class to
11160 draw the classifications in the dialog box's table.
11161 (Classifier): Modified to use the ClassRenderer class.
11162
11163 * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
11164 methods of the Classification class.
11165
11166 * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
11167 of the ClassData class.
11168
11169 * test/test_classification.py, test/test_layer.py,
11170 test/test_map.py, test/test_session.py: Fix the tests to work
11171 with the above code changes.
11172
11173 2003-02-03 Jonathan Coles <[email protected]>
11174
11175 * Thuban/Model/classification.py (Classification): Added getNull()
11176 to return the NullData reference
11177
11178 * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
11179 Layer.SetStrokeWidth): Modified these functions to change the
11180 null data in the classification rather than keep these values
11181 directly in the Layer class. Menu options to change these values
11182 work again.
11183
11184 2003-01-28 Jonathan Coles <[email protected]>
11185
11186 * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
11187 Fixed crashing problem on some systems. Dialog box shows
11188 classification data.
11189
11190 * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
11191 Colors in the tree view.
11192
11193 * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
11194 the tree info for classifications. Commented out unnecessary lines.
11195
11196 * Thuban/Model/classification.py (Classification.TreeInfo): New
11197 function to add information about the classification into the
11198 tree view.
11199
11200 2003-01-27 Jan-Oliver Wagner <[email protected]>
11201
11202 * Thuban/__init__.py (_): New.
11203
11204 * Thuban/Model/classification.py, Thuban/Model/extension.py,
11205 Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
11206 Thuban/Model/session.py, Thuban/UI/application.py,
11207 Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
11208 Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
11209 Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
11210 Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
11211 Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
11212
11213 2003-01-27 Jonathan Coles <[email protected]>
11214
11215 * Thuban/Model/layer.py: Classification initialization calls.
11216
11217 * Thuban/Model/classification.py: Created class to encapsulate
11218 a layer classification. Supports specific data points and
11219 ranges.
11220
11221 * Thuban/Model/load.py: Added support for loading classification
11222 information.
11223
11224 * Thuban/Model/save.py: Added support for saving classification
11225 information.
11226
11227 * Thuban/UI/classifier.py: Initial class for a dialog box for
11228 specifying classification information.
11229
11230 * Thuban/UI/mainwindows.py: Support for opening the classifier
11231 dialog.
11232
11233 * Thuban/UI/renderer.py: Support for drawing a layer with the
11234 classification information.
11235
11236 * Data/iceland_sample_class.thuban: iceland_sample with
11237 classification data.
11238
11239 * test/test_classification: Tests for the Classification class.
11240
11241 2002-12-09 Bernhard Herzog <[email protected]>
11242
11243 * test/test_command.py: New. Tests for the command classes.
11244
11245 * Thuban/UI/command.py (ToolCommand): New class for tool commands.
11246 (Command.IsTool): New method to distinguish between command
11247 switching tools and other commands.
11248
11249 * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
11250 the tool to avoid direct assignments to instance variables
11251 (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
11252 (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
11253 change the tool
11254
11255 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
11256 active tool's command turns insensitive, disable the tool.
11257 (_tool_command): Use the new ToolCommand class
11258
11259 * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
11260 SelectTool method to change the tool
11261 (iconfile): Use the ToolCommand class
11262
11263 2002-12-03 Bernhard Herzog <[email protected]>
11264
11265 * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
11266 the case of selected items that are not children of Layers or Maps
11267 properly. Previously this bug would trigger an assertion in
11268 wxWindows.
11269
11270 2002-11-06 Frank Koormann <[email protected]>
11271
11272 * Thuban/UI/mainwindow.py: Altered the order of tools in the
11273 toolbar: First now are all navigation tools (Zoom In/Out, Pan,
11274 Full Extent).
11275
11276 2002-10-23 Bernhard Herzog <[email protected]>
11277
11278 * setup.py (setup call): version now 0.1.3
11279
11280 * MANIFEST.in: Add the files in test/
11281
11282 * test/README: Add note about tests requiring the iceland data
11283
11284 * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
11285 copyright notice.
11286
11287 2002-10-18 Bernhard Herzog <[email protected]>
11288
11289 * test/test_map.py
11290 (TestMapWithContents.test_projected_bounding_box): Use an explicit
11291 epsilon.
11292
11293 * test/support.py (FloatComparisonMixin.assertFloatEqual)
11294 (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
11295 message if the assertion fails and don't return the return value
11296 of self.assert_. In assertFloatSeqEqual the return meant that not
11297 all items of the sequence were compared.
11298
11299 2002-09-20 Bernhard Herzog <[email protected]>
11300
11301 * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
11302
11303 * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
11304
11305 * test/test_map.py (TestMapWithContents.test_tree_info): Create
11306 the string with the bounding box on the fly because of platform
11307 differences in the way %g is handled.
11308
11309 * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
11310 DBFfile too because Thuban layers can't yet cope missing DBF
11311 files.
11312
11313 2002-09-20 Bernhard Herzog <[email protected]>
11314
11315 * test/test_menu.py: Use initthuban instead of
11316 add_thuban_dir_to_path to initialize Thuban.
11317
11318 * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
11319 Mixin class for float comparisons
11320 (SubscriberMixin): New. Mixin class to test messages sent through
11321 the Connector class
11322
11323 * test/README: Fix a typo and add the -v flag to the command for
11324 individual tests
11325
11326 * test/test_session.py: New. Test cases for Thuban.Model.session
11327
11328 * test/test_proj.py: New. Test cases for Thuban.Model.proj
11329
11330 * test/test_map.py: New. Test cases for Thuban.Model.map
11331
11332 * test/test_layer.py: New. Test cases for Thuban.Model.layer
11333
11334 * test/test_label.py: New. Test cases for Thuban.Model.label
11335
11336 * test/test_connector.py: New. Test cases for Thuban.Lib.connector
11337
11338 * test/test_color.py: New. Test cases for Thuban.Model.color
11339
11340 * test/test_base.py: New. Test cases for Thuban.Model.base
11341
11342 2002-09-13 Bernhard Herzog <[email protected]>
11343
11344 * Thuban/Model/session.py (Session.forwarded_channels): Forward
11345 the CHANGED channel too.
11346
11347 * Thuban/Model/map.py (Map.forwarded_channels): Forward the
11348 CHANGED channel too.
11349 (Map.__init__): Call the Modifiable constructor as well.
11350
11351 * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
11352 event if the modified flag changes.
11353 (Modifiable.changed): Tweak the doc-string.
11354
11355 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
11356 (MainWindow.set_position_text): Put the code that puts the text
11357 with the mouse position into the status bar into the new method
11358 set_position_text so that it can overwritten in derived classes.
11359
11360 2002-09-12 Bernhard Herzog <[email protected]>
11361
11362 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
11363 message box on the main window.
11364
11365 2002-09-11 Bernhard Herzog <[email protected]>
11366
11367 * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
11368 the 'E' because it's less likely to interfere with other menu
11369 entries.
11370 (MainWindow.build_menu): remove an incorrect comment.
11371
11372 2002-09-10 Bernhard Herzog <[email protected]>
11373
11374 * Thuban/UI/mainwindow.py (MainWindow.Map): New.
11375 (_tool_command): Add sensitive parameter
11376 (_has_visible_map): Sensitivity callback to tools and other
11377 commands that require a visible map. Use it in map_zoom_in_tool,
11378 map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
11379 and map_full_extent
11380
11381 2002-09-06 Bernhard Herzog <[email protected]>
11382
11383 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
11384 VIEW_POSITION
11385
11386 2002-09-04 Frank Koormann <[email protected]>
11387
11388 * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
11389
11390 2002-09-02 Bernhard Herzog <[email protected]>
11391
11392 * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
11393 wxWindows already and our implementation doesn't work correctly
11394 with wxGTK 2.3:
11395 (MapCanvas.__init__): Remove the instance variable
11396 (MapCanvas.OnPaint): Always call do_redraw when there's a map to
11397 be drawin
11398 (MapCanvas.OnIdle): Removed.
11399
11400 * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
11401 a parameter to determine the size of the rectangle.
11402 (MapCanvas.find_shape_at): Create the box around the point on a
11403 layer by layer basis and make the size depend on the shape type.
11404 This solves a problem with the selection of point shapes at the
11405 border of the layer's bounding box
11406
11407 2002-08-30 Bernhard Herzog <[email protected]>
11408
11409 * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
11410 for the sensitivity of remove layer.
11411 (_can_remove_layer): New. Sensitivity callback for remove layer
11412 (Command layer_remove): Use _can_remove_layer
11413
11414 * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
11415 determine whether a given layer can be deleted.
11416
11417 * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
11418 (MapCanvas.do_redraw): Get rid of the unused update_region
11419 instance variable
11420
11421 * Thuban/UI/view.py: Add/update some doc-strings.
11422
11423 * test/: new subdirectory with a bunch of unit tests.
11424
11425 * test/README, test/test_table.py, test/test_save.py,
11426 test/test_menu.py, test/test_load.py: Initial set of tests and
11427 brief instructions on how to run them
11428
11429 2002-08-29 Bernhard Herzog <[email protected]>
11430
11431 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
11432 arcs with multiple parts.
11433
11434 * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
11435 Handle degenrate rectangles.
11436
11437 * Thuban/Model/table.py: Make writing records work correctly:
11438 (Table.__init__): Keep track of whether the DBF is open for
11439 writing
11440 (Table.write_record): Open the DBF file for writing when necessary
11441
11442 2002-08-27 Bernhard Herzog <[email protected]>
11443
11444 * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
11445 dbf files only for reading by default. Use a new writable dbf
11446 object for writing.
11447
11448 2002-08-26 Bernhard Herzog <[email protected]>
11449
11450 * Thuban/UI/mainwindow.py: Refactor the context creation:
11451 (MainWindow.Context): New method to return a context
11452 (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
11453 new method
11454
11455 * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
11456 layer table specific code from TableGrid into LayerTableGrid
11457 (TableFrame, LayerTableFrame): Split the layer table specific code
11458 from TableFrame into LayerTableFrame
11459 (LayerTableGrid.select_shape): Remove a debug print
11460
11461 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
11462 LayerTableFrame
11463
11464 2002-08-23 Bernhard Herzog <[email protected]>
11465
11466 * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
11467 absolute filename.
11468
11469 2002-08-22 Bernhard Herzog <[email protected]>
11470
11471 * Thuban/Model/table.py (Table.write_record): New method to write
11472 records.
11473 (Table.__init__): Open the DBF file for writing too.
11474
11475 * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
11476 into the underlying table.
11477
11478 * extensions/shapelib/shapefil.h (DBFCommit),
11479 extensions/shapelib/dbfopen.c (DBFCommit): New API function to
11480 commit any changes made to the DBF file.
11481
11482 * Thuban/UI/mainwindow.py (make_check_current_tool)
11483 (_tool_command): Put the code that generates the "checked"
11484 callback into a separate function so that we can reuse it
11485 elsewhere
11486
11487 * Thuban/Model/save.py (Saver): New class to handle serializing a
11488 session into an XML file. The main reason to introduce a class is
11489 that applications built on Thuban can derive from it so that they
11490 can save additional information in a session file.
11491 (save_session): Delegate almost all the work to the Saver class.
11492 Rename the filename argument to file because it may be a file like
11493 object now.
11494
11495 * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
11496 code. Remove the little test code which would be executed when the
11497 module is run as a script which didn't work anymore since it can't
11498 import the other Thuban modules.
11499 (ProcessSession, load_session): Refactor the ProcessSession to
11500 have one method for each element start and end tag so that derived
11501 classes can easily override the processing of individual tags.
11502 Also, always parse with namespaces enabled because applications
11503 built on top of Thuban will likely use namespaces if they extend
11504 the session file format.
11505
11506 2002-08-21 Bernhard Herzog <[email protected]>
11507
11508 * setup.py (ThubanInstall.run): Don't repr install_lib_orig
11509 because thubaninit_contents will do it for us.
11510
11511 2002-08-16 Jan-Oliver Wagner <[email protected]>
11512
11513 * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
11514 tree window already open
11515
11516 2002-08-15 Bernhard Herzog <[email protected]>
11517
11518 * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
11519 with self.
11520
11521 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
11522 when we have actually captured it.
11523
11524 * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
11525 shapefile and destroy the table.
11526
11527 * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
11528
11529 2002-08-14 Bernhard Herzog <[email protected]>
11530
11531 * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
11532 instance variable columns
11533 (RecordTable.GetTypeName): row and col may be negative in some
11534 cases.
11535
11536 * setup.py (InstallLocal.initialize_options)
11537 (InstallLocal.finalize_options, InstallLocal.user_options): New
11538 option create-init-file to build a thubaninit.py when running
11539 install_local
11540 (InstallLocal.run): Create the thubaninit.py module when requested
11541 (thubaninit_contents): Split the template into several parts and
11542 create a new function thubaninit_contents that creates the
11543 contents of a thubaninit module.
11544 (ThubanInstall.run): Use the new function to create the thubaninit
11545 module.
11546
11547 2002-07-30 Bernhard Herzog <[email protected]>
11548
11549 * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
11550 cleanup.
11551 (ThubanApplication.MainLoop): Extend to automatically call OnExit.
11552
11553 * Thuban/Model/session.py (Session.Destroy): Don't bypass the
11554 direct base class' Destroy method.
11555
11556 * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
11557 layers.
11558 (Map.Destroy): Destroy the label_layer as well and call the
11559 inherited Desatroymethod first so that no more messages are
11560 issued.
11561 (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
11562 message if the stacking order actually has changed. Add
11563 doc-strings.
11564 (Map.BoundingBox): Correct the doc-string.
11565 (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
11566 (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
11567
11568 * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
11569 all labels.
11570
11571 2002-07-29 Bernhard Herzog <[email protected]>
11572
11573 * Thuban/Model/map.py (Map.subscribe_layer_channels)
11574 (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
11575 to a layer's channels into separate methods.
11576 (Map.RemoveLayer, Map.AddLayer): Call the new methods
11577 (Map.Destroy): Unsubscribe from a layer's channels before
11578 destroying it.
11579
11580 * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
11581 selected_layer parameter to searched_layer which is the layer to
11582 search in.
11583 (MapCanvas.SelectShapeAt): New parameter layer to restrict the
11584 search to that layer. Return the selected layer and shape.
11585
11586 * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
11587 typo
11588
11589 2002-07-24 Bernhard Herzog <[email protected]>
11590
11591 * Thuban/UI/application.py (ThubanApplication.create_session):
11592 Extend the doc string.
11593 (ThubanApplication.subscribe_session)
11594 (ThubanApplication.unsubscribe_session): New methods to
11595 subscribe/unsubscribe to/from session channels.
11596 (ThubanApplication.SetSession): Call the new methods here.
11597 (ThubanApplication.maps_changed, ThubanApplication.set_map):
11598 Renamed set_map to maps_changed. Its now a subscriber for
11599 MAPS_CHANGED.
11600
11601 * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
11602 x-coordinate in case of simple clicks
11603
11604 * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
11605 don't pass it as a parameter
11606
11607 * Thuban/Model/session.py (Session.RemoveMap): New
11608
11609 * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
11610 window size into a parameter.
11611
11612 2002-07-23 Bernhard Herzog <[email protected]>
11613
11614 * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
11615 just commands.
11616
11617 * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
11618 parameter list a bit to allow setting the window title and the
11619 initial message in the status bar. Update the callers.
11620
11621 * Thuban/UI/application.py (ThubanApplication.OnInit)
11622 (ThubanApplication.CreateMainWindow): Put the mainwindow
11623 instantiation into a separate method so that it can be overridden
11624 by a subclass.
11625
11626 2002-07-19 Bernhard Herzog <[email protected]>
11627
11628 * Thuban/Model/session.py: Issue a CHANGED message every time
11629 another changed message is issued to make it easier to get
11630 notified of changes.
11631 (Session): Update the doc string
11632 (Session.forward): Issue changed-events as CHANGED as well.
11633 (Session.changed): Overwrite the inherited version to issue
11634 CHANGED events as well.
11635
11636 * Thuban/UI/tree.py: We can now simply subscribe to the session's
11637 CHANGED channel to be informed of changes.
11638 (SessionTreeCtrl.session_channels): Not needed any longer.
11639 (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
11640 Only have to (un)subscribe CHANGED
11641
11642 * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
11643
11644 * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
11645 for the wxPython locale bug to __init__.py so that it's
11646 automatically executed by anybody using UI code from Thuban.
11647
11648 2002-07-18 Bernhard Herzog <[email protected]>
11649
11650 * Thuban/UI/main.py (main): app no longer needs to be global
11651
11652 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
11653 as parameter and store it in an instance variable
11654 (MainWindow.invoke_command, MainWindow.update_command_ui)
11655 (MainWindow.save_modified_session, MainWindow.NewSession)
11656 (MainWindow.OpenSession, MainWindow.SaveSession)
11657 (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
11658 application object.
11659
11660 * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
11661 the main window with self.
11662
11663 * Thuban/UI/context.py: New module with the context class
11664
11665 * Thuban/UI/command.py (Command): Update doc string.
11666
11667 * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
11668 MainWindow.update_command_ui): Pass an instance of the context
11669 class to the command's methods
11670 (check_current_tool, call_method): Handle the new context
11671 implementation
11672
11673 * Examples/simple_extensions/simple_tool.py (simple_tool,
11674 check_simple_tool): Handle the new context implementation
11675
11676 * Examples/simple_extensions/simple_command.py (simple_command):
11677 Handle the new context implementation. Update the comments about
11678 the context.
11679
11680 * Thuban/UI/application.py (ThubanApplication.SetSession): Add
11681 doc-string
11682 (ThubanApplication.Session): New method to return the session
11683 object
11684
11685 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
11686 interactor's selected_layer may not be a layer of the current
11687 session when the tree is updated while a new session is being set.
11688
11689 2002-07-17 Bernhard Herzog <[email protected]>
11690
11691 * Thuban/UI/tree.py (color_string): Removed. No longer used.
11692 (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
11693 update_tree into update_tree and add_items. The tree now uses a
11694 more generic way to display the contents of the tree.
11695 (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
11696
11697 * Thuban/Model/layer.py (Layer.TreeInfo),
11698 Thuban/Model/extension.py (Extension.TreeInfo),
11699 Thuban/Model/map.py (Map.TreeInfo),
11700 Thuban/Model/session.py (Session.TreeInfo):
11701 Add TreeInfo methods to implement the new tree view update scheme
11702
11703 2002-07-16 Bernhard Herzog <[email protected]>
11704
11705 * Thuban/UI/application.py: Don't use "import from" for the
11706 MainWindow. It can't always be resolved.
11707 (ThubanApplication.OnInit): change reference to MainWindow
11708 accordingly.
11709
11710 * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
11711 completely
11712
11713 2002-07-10 Bernhard Herzog <[email protected]>
11714
11715 * setup.py (create_init_module): New configurable variable whose
11716 default depends on the platform we're running on.
11717 (ThubanInstall.initialize_options): Initialize
11718 self.create_init_module from the global create_init_module
11719 (ThubanInstall.user_options): indictate that the options
11720 create-init-module and init-module-dir have arguments.
11721
11722 * setup.py: In the setup call change the version number to include
11723 cvs.
11724
11725 * MANIFEST.in: Add the files in Examples
11726
11727 2002-07-09 Bernhard Herzog <[email protected]>
11728
11729 * setup.py: In the setup call, use the thuban homepage as the
11730 value of the url parameter.
11731
11732 * Examples: New subdirectory for examples.
11733
11734 * Examples/simple_extensions/simple_tool.xpm,
11735 Examples/simple_extensions/simple_tool.py,
11736 Examples/simple_extensions/simple_command.py,
11737 Examples/simple_extensions/README: Simple examples showing how to
11738 add new commands and tools.
11739
11740 * setup.cfg (bdist_rpm): Add the default value for prefix and tell
11741 bdist_rpm that we also have an install script.
11742 (bdist_inno): Add 2002 to the copyright notice.
11743
11744 * setup.py: Create a file in python's site-packages directory to
11745 make installation of Thuban as a library easier.
11746 (ThubanInstall.user_options): Add two new options,
11747 create-init-module and init-module-dir
11748 (ThubanInstall.expand_with_pure_python_dirs): New method to expand
11749 filenames for installation in the default directories.
11750 (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
11751 the inherited methods to capture some filenames before they're
11752 transformed too much by distutils.
11753 (ThubanInstall.run): Create the init module if requested.
11754 (ThubanInstall.thuban_init_filename): New method to return the
11755 full name of the init module.
11756 (ThubanInstall.get_outputs): Append the filename of the init
11757 module.
11758
11759 2002-07-08 Bernhard Herzog <[email protected]>
11760
11761 * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
11762 handle the prefix properly which means that the default for the
11763 installation prefix should be /usr for RPMs and /usr/local when
11764 doing a normal source install.
11765 (bdist_rpm_install_script): Script to override the default install
11766 commands in the specfile generated by the bdist_rpm command.
11767 (thuban_bdist_rpm.user_options): Add a prefix option
11768 (thuban_bdist_rpm.initialize_options): Init the prefix option.
11769 Create the script files for the spec files as empty files here
11770 (thuban_bdist_rpm._make_spec_file): Override the inherited method
11771 to fill the script files with content.
11772
11773 * Thuban/Model/save.py (relative_filename): Wrapper around
11774 Thuban.Lib.fileutil.relative_filename that accepts an empty dir
11775 argument. save_session now automatically uses this version,
11776 solving a problem when saving to a relative filename.
11777
11778 * setup.py: In the setup call, make sure that the library
11779 directories are under $prefix/lib not directly under $prefix.
11780
11781 2002-06-20 Jan-Oliver Wagner <[email protected]>
11782
11783 * Thuban/Model/extension.py: new module to handle extension objects.
11784 * Thuban/Model/messages.py: new messages for extensions.
11785 * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
11786 Session.AddExtension): new for handling extensions.
11787 Also some other minor changes to round up extension handling.
11788 * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
11789 of Extension titles and title and names of its objects.
11790
11791 2002-05-29 Bernhard Herzog <[email protected]>
11792
11793 * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
11794 the events for a command.
11795 (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
11796 Call bind_command_events to bind the events. add_toolbar_command
11797 can now bind events too so that it's possible to have commands
11798 that are only available through the toolbar.
11799 (MainWindow.init_ids): New instance variable events_bound to keep
11800 track of for which commands events have been bound.
11801
11802 2002-05-28 Bernhard Herzog <[email protected]>
11803
11804 * Thuban/UI/menu.py: New module to build and manage menus.
11805
11806 * Thuban/UI/mainwindow.py: Remove some unused imports.
11807 (MainWindow.__init__, main_menu): move the definition of the main
11808 menu from __init__ to the Menu instance main_menu.
11809 (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
11810 build the menu bar and sub-menus from a menu description.
11811
11812 * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
11813 startup file
11814 (ThubanApplication.read_startup_files): New method to run
11815 ~/.thuban/thubanstart.py
11816
11817 * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
11818 Move the toolbar definition to the Menu instance main_toolbar.
11819 (MainWindow.build_toolbar): New method to build the toolbar
11820 similar to the build_menu methods
11821
11822 2002-05-23 Bernhard Herzog <[email protected]>
11823
11824 * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
11825 layer_outline_color. Fix it in the definition of the command too.
11826
11827 * Thuban/UI/command.py (Command): Fix typo in doc string
11828
11829 2002-05-22 Bernhard Herzog <[email protected]>
11830
11831 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
11832 in the docstring
11833
11834 2002-05-15 Bernhard Herzog <[email protected]>
11835
11836 * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
11837 when the shapefile is empty.
11838 (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
11839 now return None for empty shapefiles. Update doc-strings.
11840
11841 * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
11842 the layer's bbox being None.
11843
11844 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
11845 layer's bbox being None.
11846
11847 * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
11848 necessary.
11849 (MapCanvas.__init__): New instance variables, last_selected_layer
11850 and last_selected_shape to determine how the selection has
11851 changed.
11852
11853 * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
11854 AutoSizeColumns because it will cause a traversal of the entire
11855 table which for large .dbf files will take a very long time.
11856
11857 2002-05-14 Bernhard Herzog <[email protected]>
11858
11859 * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
11860 maximum depth for the tree than shapelib does by default.
11861
11862 2002-05-10 Bernhard Herzog <[email protected]>
11863
11864 * setup.py (py_modules): The shptree modules doesn't have a
11865 wrapper, so don't include it in the py_modules
11866
11867 2002-05-08 Bernhard Herzog <[email protected]>
11868
11869 * extensions/shapelib/shptree.c (compare_ints): Make arguments
11870 const void * as in the qsort prototype
11871 (SHPTreeFindLikelyShapes): Remove some unused variables.
11872
11873 * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
11874 maintains to redraw the window during a drag.
11875 (MapCanvas.unprojected_rect_around_point): New method to determine
11876 a small region around a point for hit-testing.
11877 (MapCanvas.find_shape_at): Only test the shapes in a small region
11878 around the point.
11879
11880 * setup.py: Increment the version to 0.1.2
11881
11882 * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
11883 debug print and set session to None after unsubscribing
11884
11885 2002-05-07 Bernhard Herzog <[email protected]>
11886
11887 * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
11888 the file to have a .thuban extension.
11889
11890 * Thuban/UI/tree.py (session_channels): New class constant with
11891 all the session channels to subscribe to to update the tree
11892 (SessionTreeCtrl.session_changed): Remember the session so that we
11893 can unsubscribe properly. Use the new class constant to
11894 unsubscribe from the old session and subscribe to the new one.
11895 (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
11896 subscriptions of the SessionTreeCtrl.
11897 (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
11898
11899 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
11900 Session Tree" command to the file menu.
11901
11902 * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
11903 as update_region to the renderer.
11904
11905 * Thuban/UI/renderer.py
11906 (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
11907 update box is now directly a tuple, not a wxRect anymore.
11908
11909 * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
11910 prints.
11911
11912 2002-05-07 Bernhard Herzog <[email protected]>
11913
11914 * setup.py: Add the shptree extension module. See
11915 extensions/pyshapelib/ChangeLog for more details.
11916
11917 * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
11918 extensions/shapelib/dbfopen.c: Really update to the versions of
11919 shapelib 1.2.9. For some reason it wasn't really done on
11920 2002-04-11.
11921
11922 * extensions/shapelib/shptree.c: Modified version of shptree.c of
11923 shapelib 1.2.9. The only real difference is the use of qsort
11924 instead of a bubble sort implementation
11925
11926 * Thuban/Model/layer.py (Layer.__init__): New instance variable
11927 shapetree to hold the shapelib quadtree for the shapefile
11928 (Layer.open_shapefile): Create the quad tree.
11929 (Layer.ShapesInRegion): New method to return the ids of shapes in
11930 a given region using the quad tree.
11931
11932 * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
11933 comment
11934 (draw_polygon_shape): Accept both arcs and polygons.
11935 (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
11936 the api.
11937
11938 * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
11939 return the shape ids to be rendered in a given layer.
11940 (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
11941 ids. Use draw_polygon_shape to draw arc shapes as well.
11942 (ScreenRenderer.RenderMap): New parameter for the rectangle that
11943 has to be updated
11944 (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
11945 calling it's ShapesInRegion method.
11946
11947 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
11948 update_region for the update region.
11949 (MapCanvas.OnPaint): Maintain the update region
11950 (MapCanvas.do_redraw): Pass the bounding box of the update_region
11951 to the renderer when drawing the bitmap. Reset the update_region.
11952
11953 2002-05-03 Bernhard Herzog <[email protected]>
11954
11955 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
11956 MainWindow.OpenSession): Change the file extension of the session
11957 files to .thuban
11958
11959 * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
11960 Move the map channels to be forwarded by the session into the
11961 class constant with forwarded_channels. Also add
11962 LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
11963 forwarded_channels
11964
11965 * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
11966 typo and some rewording).
11967
11968 2002-05-02 Bernhard Herzog <[email protected]>
11969
11970 * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
11971 around to speed up most redraws:
11972 (MapCanvas.__init__): New instance variable bitmap which holds the
11973 bitmap
11974 (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
11975 self.bitmap to draw.
11976 (MapCanvas.full_redraw): New method to force a full redraw
11977 including the bitmap
11978 (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
11979 make sure the bitmap is redrawn.
11980 (MapCanvas.projection_changed, MapCanvas.set_view_transform,
11981 MapCanvas.shape_selected): Call full_redraw instead of readraw to
11982 make sure the bitmap is redrawn.
11983 (MapCanvas.OnSize): New method to handle size events so that the
11984 bitmap can be redrawn.
11985
11986 2002-04-29 Bernhard Herzog <[email protected]>
11987
11988 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
11989 canvas' VIEW_POSITION event
11990 (MainWindow.view_position_changed): Handler for VIEW_POSITION.
11991 Update the text in the status-bar accordingly.
11992
11993 * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
11994 (MapCanvas.__del__): Implement because Publisher.__del__ has to be
11995 called.
11996 (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
11997 current_position
11998 (MapCanvas.set_current_position): New method to set
11999 current_position. Issue a VIEW_POSITION event
12000 (MapCanvas.CurrentPosition): New public method to return the value
12001 of current_position. Should be called when the VIEW_POSITION event
12002 is processed.
12003 (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
12004 Update the position.
12005 (MapCanvas.OnLeaveWindow): Set the position to None.
12006
12007 * Thuban/UI/messages.py (VIEW_POSITION): New message for the
12008 position in the statusbar
12009
12010 2002-04-26 Frank Koormann <[email protected]>
12011
12012 * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
12013
12014 2002-04-24 Frank Koormann <[email protected]>
12015
12016 * Resources/Bitmaps/identify.xpm: shadow added
12017
12018 * Resources/Bitmaps/fullextent.xpm: new
12019
12020 2002-04-22 Jan-Oliver Wagner <[email protected]>
12021
12022 * Thuban/UI/tree.py (update_tree): added test for None on map bounding
12023 box
12024
12025 2002-04-21 Jan-Oliver Wagner <[email protected]>
12026
12027 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
12028
12029 * Thuban/UI/tree.py (update_tree): added added map extent
12030
12031 * Thuban/UI/mainwindow.py (_method_command): extended by parameter
12032 icon; added map_full_extend as tool
12033
12034 2002-04-19 Jan-Oliver Wagner <[email protected]>
12035
12036 * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
12037 saving _new_ sessions
12038
12039 * Thuban/Model/session.py (create_empty_session): new session
12040 don't have a filename (set to None)
12041
12042 * Thuban/UI/tree.py (update_tree): added filename and modified flag
12043
12044 * Thuban/Model/load.py (ProcessSession): convert projection
12045 parameters from unicode to regular string
12046
12047 * Data/iceland_sample.session: Added UTM Zone 26 projection.
12048
12049 2002-04-11 Bernhard Herzog <[email protected]>
12050
12051 * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
12052 extensions/shapelib/dbfopen.c: Update to the versions of shapelib
12053 1.2.9
12054
12055 * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
12056 the pyshapelib directoy into the list of include dirs, so that
12057 pyshapelib_api.h can be found.
12058
12059 * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
12060 holds the pyshapelib C-API
12061 (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
12062 pyshapelib_api to access the shapelib functions.
12063 (initwxproj): Import the c_api from the shapelib module and
12064 initialize pyshapelib_api.
12065
12066 2002-04-04 Bernhard Herzog <[email protected]>
12067
12068 * setup.py (thuban_bdist_rpm.initialize_options): Use
12069 initialize_options to create the scripts for the rpm.
12070
12071 * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
12072
12073 2002-04-03 Bernhard Herzog <[email protected]>
12074
12075 * setup.py: Increment version to 0.1.1
12076
12077 * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
12078 Layer" and "Remove Layer" commands from the layer menu to the map
12079 menu
12080
12081 2002-02-15 Bernhard Herzog <[email protected]>
12082
12083 * Thuban/Model/layer.py (Layer.Shape): list append only takes one
12084 argument (python <= 1.5.2 erroneously accepted multiuple
12085 arguments)
12086
12087 2002-02-04 Bernhard Herzog <[email protected]>
12088
12089 * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
12090 RecordGrid in the identifyview.
12091 (IdentifyView.__init__): Use IdentifyGridCtrl instead of
12092 IdentifyListCtrl. The grid allows editing of the values.
12093
12094 * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
12095 implementing a grid for a single row of a thuban table.
12096
12097 * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
12098 layers by default. Easier to use than the previous default of only
12099 searching through the select layer which meant that if no layer
12100 was selected, you couldn't select a shape.
12101
12102 * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
12103
12104 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
12105 stroke_width attribute
12106
12107 * Thuban/Model/save.py (save_session): Write the new stroke_width
12108 attribute
12109
12110 * Thuban/Model/load.py (ProcessSession.startElement): Read the
12111 stroke_width attribute
12112
12113 * Thuban/Model/layer.py (Layer.__init__): New parameter and
12114 instance variable stroke_width
12115 (Layer.SetStrokeWidth): Set the stroke_width.
12116
12117 2002-02-01 Bernhard Herzog <[email protected]>
12118
12119 * extensions/thuban/wxproj.cpp (project_points): Fix two
12120 off-by-one errors in the last loop that joins the various parts
12121 together.
12122
12123 2002-01-14 Bernhard Herzog <[email protected]>
12124
12125 * setup.py (data_dist.make_distribution): Fix some typos
12126
12127 2001-09-18 Bernhard Herzog <[email protected]>
12128
12129 * README: Slight tweaking in preparation for the 0.1 release
12130
12131 * setup.cfg: Add section for sdist to create both tgz and zip
12132 archives
12133
12134 * setup.py: increase version number to 0.1
12135 (data_dist): New command class for data distribution
12136
12137 2001-09-14 Bernhard Herzog <[email protected]>
12138
12139 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
12140 Handle the case of no layer (i.e. layer is None) properly.
12141
12142 * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
12143 Set the initial selection of the combo boxes to reflect the
12144 projection we're starting with in a way that works on windows,
12145 too.
12146
12147 * Thuban/Lib/connector.py (Connector.print_connections): Print the
12148 puiblisher's ids in hex to make it easier to compare them to the
12149 standard repr of python methods
12150
12151 * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
12152 messages
12153
12154 2001-09-13 Bernhard Herzog <[email protected]>
12155
12156 * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
12157 deselect the layer if no layer is selected
12158
12159 * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
12160 idle time when there actually is something to draw. If there's
12161 nothing to draw simply clear the window
12162 (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
12163 (MapCanvas.SetMap): force a redraw in all cases because
12164 FitMapToWindow doesn't always do it.
12165 (MapCanvas.ZoomFactor): Add an optional parameter, center, to
12166 specify the point to move into the center of the window
12167 (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
12168 dragged, zoon in/out by a factor of 2
12169 (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
12170 index, i.e. reversed drawing order) so that objects appearing to
12171 be in from of others are selected first. This is probably mostly
12172 relevant for point shapes where the symbols used may overlap
12173
12174 * Thuban/Model/session.py (create_empty_session): Unset the
12175 modified bit before returning it
12176
12177 * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
12178 create_empty_session session to create the new, empty session.
12179
12180 * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
12181 the tool bitmaps.
12182 (MainWindow.OnClose, MainWindow.save_modified_session): Separate
12183 the code that asks whether the session should be saved into the
12184 new method save_modified_session.
12185 (MainWindow.OpenSession, MainWindow.NewSession): Use the new
12186 method to save modified session here too.
12187
12188 2001-09-11 Bernhard Herzog <[email protected]>
12189
12190 * setup.py (InnoIconItem): fix typo
12191
12192 (thuban_bdist_inno.run):
12193 (bdist_inno.run): Move the decision not to create symlinks on
12194 non-nt platforms to thuban_bdist_inno and do it unconditinally
12195 since we never want to create the symlinks here
12196
12197 2001-09-10 Bernhard Herzog <[email protected]>
12198
12199 * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
12200 identify view immediately
12201
12202 * Thuban/UI/controls.py: New file with two classes RecordListCtrl
12203 and SelectableRecordListCtrl that implement the code shared by the
12204 identify view and the label dialog
12205
12206 * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
12207 new class RecordListCtrl
12208
12209 * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
12210 return value of GetValue is None instead of using it as a boolean
12211 directly so that Zero numbers are handled properly.
12212 (LabelListCtrl): Derive from the new class
12213 SelectableRecordListCtrl
12214
12215 * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
12216 (Proj4Dialog.dialogLayout): Make the window resizable and set the
12217 size of the text control explicitly to make the sizers work on
12218 both Windows and X.
12219
12220 2001-09-07 Bernhard Herzog <[email protected]>
12221
12222 * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
12223 that can limit the search to the currently selected layer.
12224 (MapCanvas.SelectShapeAt): Make sure that the currently selected
12225 layer stays selected even when no shape is found
12226 (MapCanvas.FitRectToWindow): If the rect has zero with or zero
12227 height do nothing (avoids zero division errors)
12228
12229 2001-09-06 Bernhard Herzog <[email protected]>
12230
12231 * Thuban/UI/tree.py (SessionTreeCtrl, SessionTreeView.__init__):
12232 Correct the spelling of SessionTreeCtrl. dabbrev is too damn
12233 convenient :-)
12234 (SessionTreeCtrl.__init__, SessionTreeCtrl.update_tree): Introduce
12235 a new instvar layer_to_item to map layers to tree items
12236 (SessionTreeCtrl.layer_selected): Select the appropriate tree item
12237 to match the current selection in the interactor
12238
12239 * Thuban/UI/interactor.py (Interactor.SelectedLayer):
12240 (Interactor.HasSelectedLayer): New methods to query the current
12241 selection
12242
12243 * Thuban/UI/mainwindow.py (MainWindow.current_layer):
12244 (MainWindow.has_selected_layer): Simply call the appropriate
12245 interactor method
12246
12247 * Thuban/UI/mainwindow.py (MainWindow.__init__):
12248 (MainWindow.LayerShowTable):
12249 (MainWindow.identify_view_on_demand): Store the interactor in an
12250 instvar and use that reference instead of going through main.app
12251
12252 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
12253 * Thuban/UI/application.py (ThubanApplication.OnInit):
12254 * Thuban/UI/main.py (main): Create the session tree view in main
12255 with the new mainwindow method ShowSessionTree and not directly
12256 the application's OnInit method
12257
12258 * Thuban/UI/tree.py (myTreeCtrlPanel):
12259 (SessioinTreeCtrl): Rename to SessioinTreeCtrl and turn it into a
12260 TreeCtrl isntead of a panel. This affects most method since we now
12261 refer to self instead of self.tree
12262 (SessionTreeView): New class implementing a non-modal dialog
12263 showing the session tree.
12264
12265 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Pass the
12266 layer to the tableview dialog.
12267
12268 * Thuban/UI/tableview.py: Add some doc-strings
12269 (TableGrid):
12270 (TableGrid.OnRangeSelect):
12271 (TableGrid.OnSelectCell):
12272 (TableFrame.__init__):
12273 (TableFrame.row_selected):
12274 Selecting rows in the grid view now updates the selected shapes
12275 through the TableFrame. To achieve this we derive TableGrid from
12276 Publisher and introduce the message type ROW_SELECTED which the
12277 TableFrame subscribes to and which is issued by OnRangeSelect and
12278 OnSelectCell
12279
12280 (DataTable.SelectRow): Removed because it's no longer needed in
12281 the row/shape selection scheme
12282
12283 * Thuban/UI/dialogs.py: New file implementing common classes for
12284 dialogs
12285
12286 * Thuban/UI/tableview.py (TableGrid.__init__): Don't subscribe to
12287 the SELECTED_SHAPE message anymore. This is now handled by the
12288 parent.
12289 (TableGrid.select_shape): Only update the selection if the shape
12290 is not None.
12291 (TableFrame): Inherit from the new NonModalDialog class.
12292 (TableFrame.__init__, TableFrame.select_shape): Handle the
12293 SELECT_SHAPE message.
12294 (TableFrame.OnClose): Extend the inherited method to unsubscribe
12295 SELECT_SHAPE
12296
12297 * Thuban/UI/mainwindow.py (MainWindow.init_dialogs):
12298 (MainWindow.add_dialog):
12299 (MainWindow.dialog_open):
12300 (MainWindow.remove_dialog):
12301 (MainWindow.get_open_dialog): New methods to maintain a dictionary
12302 of opened non-modal dialogs.
12303
12304 (MainWindow.__init__): Initialize the new non-modal dictionary
12305 management code
12306 (MainWindow.LayerShowTable): maintain separate dialogs for each
12307 table using the non-modal dialog management code to only open a
12308 view once for each table.
12309
12310 (MainWindow.IdentifyTool):
12311 (MainWindow.__init__):
12312 (MainWindow.identify_view_on_demand): Don't open the identify view
12313 in IdentifyTool anymore. This will be done automatically by the
12314 new method identify_view_on_demand which handles the
12315 SELECTED_SHAPE message so that the identify view will be opened on
12316 demand
12317
12318 * Thuban/UI/identifyview.py (IdentifyListCtrl.__init__): Remove
12319 the interactor argument. The SELECTED_SHAPE message is now handled
12320 by the parent.
12321 (IdentifyView.__init__): Add the interactor argument so that we
12322 can handle the SELECTED_SHAPE message here
12323 (IdentifyView.selected_shape): New method to handle the
12324 SELECTED_SHAPE messages
12325
12326 * Thuban/UI/identifyview.py (IdentifyView): Derive from the new
12327 NonModalDialog class
12328 (IdentifyView.OnClose): Extend the inherited version to
12329 unsubscribe SELECT_SHAPE
12330
12331 * Thuban/Model/session.py (Session.UnsetModified): Remove debug prints
12332
12333 2001-09-05 Bernhard Herzog <[email protected]>
12334
12335 * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
12336
12337 * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
12338 interactor to pass through to the MapCanvas
12339
12340 * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
12341 argument to the MainWindow constructor to get rid of the ugly hack
12342 that made main.app available early just so that the mapcanvas
12343 could access the interactor object.
12344
12345 2001-09-04 Bernhard Herzog <[email protected]>
12346
12347 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): New method
12348 that runs a modal message box
12349 (MainWindow.OnClose): Use the new method
12350 (MainWindow.RemoveLayer): Just do nothing in case no layer is
12351 selected. The command should be grayed out anyway, so there's no
12352 need to pop up a message box.
12353 (MainWindow.AddLayer): Pop up a message box with an error message
12354 if the shape file can't be opened
12355
12356 * Thuban/Model/layer.py (Layer.__init__): Open the shapefile
12357 immediately. This will cause an exception in case the file can't
12358 be opened and we can display an appropriate message.
12359
12360 * MANIFEST.in: Add extensions/pyprojection/LICENSE
12361
12362 * setup.py (thuban_bdist_rpm): New class implementing a Thuban
12363 specific bdist_rpm command.
12364
12365 * Thuban/UI/main.py: Catch ImportError exceptions when importing
12366 the locale module because it may not be available on some
12367 installations.
12368
12369 * extensions/pyprojection/LICENSE: Copy of the license text in
12370 Projection.i. Having it in a separate file makes it easier to
12371 refer to license text in e.g. RPMs
12372
12373 2001-09-03 Bernhard Herzog <[email protected]>
12374
12375 * setup.py: use wx-config instead of wxgtk-config because it's
12376 more generic
12377
12378 * setup.py (ThubanInstall.get_outputs): Add the symlink in
12379 <prefix>/bin to the outputs
12380 (ThubanInstall.link_file): New method to link files. We need this
12381 because the standard copy_files refuses to link non-existing
12382 files.
12383 (ThubanInstall.run): Remove the leading install root from the
12384 script filename if an install root was specified and use the new
12385 link_file method
12386
12387 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
12388 the window when the first layer is added to the map.
12389
12390 * setup.py (ThubanInstall.run): Honor the build root (self.root)
12391 when linking thuban.py to <prefix>/bin
12392
12393 2001-08-31 Bernhard Herzog <[email protected]>
12394
12395 * setup.py: In the setup call, the install parameters shouldn't
12396 have trailing slashes because distutils on non-posix platforms
12397 doesn't like that. The same applies to other directories like
12398 "Resources/Bitmaps"
12399
12400 In the configuration section for nt, move the wxWindows directory
12401 optins into the part clearly marked as editable.
12402
12403 (InstallLocal.initialize_options):
12404 (InstallLocal.user_options): remove the currently unused debug
12405 flag
12406 (thuban_build_py.find_all_modules): Add this method so that it
12407 works for our case of having packages and modules in one
12408 distribution as well.
12409 (ThubanInstall.initialize_options):
12410 (ThubanInstall.finalize_options):
12411 (ThubanInstall.user_options):
12412 (ThubanInstall.boolean_options): Add new options, do-symlink and
12413 extra files. Since these are the first ThubanInstall specific
12414 options, override user_options and boolean_options
12415 (ThubanInstall.run): Honor the new do-symlink and extra-files
12416 options.
12417 (ThubanInstall.get_outputs): Add to override the base-class's
12418 version and add the extra-files to the outputs
12419 (bdist_inno): New class for windows distributions with Inno Setup
12420 (InnoIconItem): Helper class for bdist_inno
12421 (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
12422 this together with the appropriate parameters, to the setup call.
12423
12424 * setup.cfg (bdist_inno): added new section for the inno setup
12425 installer
12426
12427 * Thuban/UI/tree.py (myTreeCtrlPanel.__init__): New inst var
12428 changing_selection to avoid recursive selection events when
12429 modifying the selection in response to a selection event.
12430 (myTreeCtrlPanel.normalize_selection): Set the new inst var when
12431 changing the tree's selection.
12432 (myTreeCtrlPanel.OnSelChanged): Only normalize the selection when
12433 we're not being called indirectly from normalize_selection.
12434
12435 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): Call
12436 event.Check only if the command is actuall checkable.
12437 (MainWindow.__init__): Call the toolbar's Realize method to make
12438 sure that the items are actually shown
12439
12440 2001-08-28 Bernhard Herzog <[email protected]>
12441
12442 * setup.py: Fix some doc strings
12443
12444 * ChangeLog: started
12445

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26