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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2719 - (show annotations)
Mon Jan 8 16:30:29 2007 UTC (18 years, 2 months ago) by dpinte
Original Path: trunk/thuban/ChangeLog
File size: 476897 byte(s)
2007-01-08 Didrik Pinte <dpinte@itae.be>

       umn_mapserver extension migrated to wxPython 2.6

       * Extensions/umn_maserver/
       mf_handle.py, mf_import.py, mf_export.py:
       update wx imports to 2.6 policy


1 2007-01-08 Didrik Pinte <[email protected]>
2
3 umn_mapserver extension migrated to wxPython 2.6
4
5 * Extensions/umn_maserver/
6 mf_handle.py, mf_import.py, mf_export.py:
7 update wx imports to 2.6 policy
8
9 2007-01-06 Didrik Pinte <[email protected]>
10
11 UTF-8 locales support reading non utf-8 files. This is a workaround and not
12 a real bugfix. See
13 http://wald.intevation.org/tracker/index.php?func=detail&aid=118 for more
14 details
15
16 * Thuban/UI/
17 tableview.py, controls.py, baserenderer.py, view.py: decode text from
18 iso-8859-1 encoding.
19
20 2007-01-01 Bernhard Reiter <[email protected]>
21 * test/postgissupport.py, test/test_postgis_db.py: adding an
22 explicit WITH OIDS to the create table commands. This fixes tests
23 that rely on an oid column to be present for postgresql >=8.0.
24 Thanks for Frank Koormann for the hint.
25
26 2006-11-06 Didrik Pinte <[email protected]>
27
28 * libraries/thuban/wxproj.cpp: bugfix - allow compilation with
29 msvc++ toolkit 2003
30
31 2006-11-06 Bernhard Reiter <[email protected]>
32
33 Made it easier to run PostGIS test on Debian Etch. Improving
34 https://wald.intevation.org/tracker/index.php?func=detail&aid=173 .
35
36 * test/postgissupport.py: Taking pg_ctl and initdb commands
37 from internal variables now. Adding deactivated example values
38 for Debian Etch.
39 find_postgis_sql(): Added special line for Debian Etch postgresql-8.1.
40 Added copyright year 2006.
41
42 2006-10-25 Bernhard Reiter <[email protected]>
43
44 Moved ogr Extension to Extension menu.
45
46 * Extensions/ogr/
47 __init__.py, ogrstart.py, ogrshapes.py, ogrdialog.py
48 test/test_OGRShapestore.py, test/__init__.py:
49 adding encoding information and made sure Autor's names
50 with an umlaut are actually written with an umlaut.
51
52 * Extensions/ogr/ogrstrat.py: now registering in menu "Extensions",
53 having a "(testing)" string before the submenu to prepare for 1.2.0
54 release. Bumped copyright year to 2006.
55
56 2006-10-15 Bernhard Reiter <[email protected]>
57
58 * Thuban/UI/renderer.py: Added module variable verbose and
59 added verbose output before doing a raster projection.
60 Minor: Added (c) year 2006.
61
62 * test/test_baserenderer.py: Added new function
63 test_projected_raster_decimalcommalocale()
64 Added new author Bernhard Reiter and new copyright year 2006.
65
66 * libraries/thuban/gdalwarp.cpp(ProjectRasterFile): Adding
67 switching to LC_NUMERIC "C" and back before calling GDAL functions -
68 only #if python >=2.4 .
69
70 2006-10-10 Didrik Pinte <[email protected]>
71
72 Win32 build updates
73
74 * setup.py :
75 - update to the latest libs for win32 setup tasks
76 - added gdal and Lib content to the inno setup build task
77 - added stable and experimental extensions to setup packages
78
79 * thuban.py :
80 - gdal support for win32 inno installation
81
82 2006-10-10 Didrik Pinte <[email protected]>
83
84 * Thuban/Model/layer.py (Layer.GetLabelPosFromShape): new method
85 extracted from Thuban/UI/viewport.py
86 * Thuban/UI/viewport.py (Viewport.LabelShapeAt): uses new method
87
88 2006-09-28 Didrik Pinte <[email protected]>
89
90 * Thuban/UI/classgen.py: bugfix due to wx2.6 update
91
92 * Thuban/UI/view.py: removed non needed declaration
93
94 * Thuban/UI/selection.py : typo correction
95
96 2006-09-24 Bernhard Reiter <[email protected]>
97
98 * Thuban/Model/proj.py(_do_we_have_to_work_around_broken_proj):
99 Making the test more robust for observed python 2.3 problems
100 with setlocale().
101
102 * test/runtests.py: Added new option ---setdecimalcommalocale
103 to run all tests with an LC_NUMERIC that uses comma as decimal_point.
104 Minor: Added (c) year 2006. Fixed typo in a docstring.
105
106 * test/test_transientdb.py: Minor: Added (c) year 2006. Fixed typo in
107 a docstring.
108
109 2006-09-23 Bernhard Reiter <[email protected]>
110
111 * Extensions/ogr/test/test_OGRShapestore.py: fixed skip_if_no_ogr()
112 and added it to TestOGRTable.setUp() so that all tests get skipped
113 if ogr cannot be imported. Added (c) year 2006.
114
115 2006-09-18 Didrik Pinte <[email protected]>
116
117 * wxPython 2.6 update : wx 2.4 syntax has been updated to 2.6
118
119 2006-09-18 Bernhard Reiter <[email protected]>
120
121 Fixed proj behaviour with python >=2.4 when decimal_point != '.'.
122
123 * Thuban/UI/application.py: Fixed warning dialog when gdal is missing.
124
125 * test/test_proj.py: new test_lc_numeric_robustness(). Added author
126 Bernhard Reiter and new copyright year 2006.
127
128 * Thuban/Model/proj.py: New _do_we_have_to_work_around_broken_proj()
129 and Projection.assuregoodlocale(), Projection.assureinitlocale().
130 Added author Bernhard Reiter and (c) 2006.
131
132 2006-09-15 Bernhard Reiter <[email protected]>
133
134 * README: added RXP and pyRXP as optional for tests.
135
136 * test/localessupport.py: New. Contains a helper function
137 to find a locale with comma used as decimal_point.
138
139 2006-08-31 Bernhard Reiter <[email protected]>
140
141 * README: fixed URLs to sqlite and pysqlite.
142
143 * Thuban/UI/about.py: Added Didrik Pinte as contributor. Extended
144 copyright range to include 2006.
145
146 2006-06-29 Didrik Pinte <[email protected]>
147
148 * Thuban/UI/main.py: circular import fix.
149
150 2006-06-27 Frank Koormann <[email protected]>
151
152 New Classification "Pattern": Classify text attributes by regexp.
153
154 * Thuban/Model/classification.py (class ClassGroupPattern):
155 New, group is associated with a regular expression.
156 (Classification._compile_classification): Store compiled regexp and
157 original group for pattern.
158 (Classification.FindGroup): Added pattern.
159
160 * Thuban/UI/classifier.py
161 (ClassGrid._OnLabelRightClicked, ClassGrid.labelPopup):
162 New, add popup to select singleton/pattern.
163 (ClassTable.GetRowLabelValue, ClassTable.GetValueAsCustom,
164 ClassTable.SetValueAsCustom): Added pattern.
165 (ClassTable.__ParseInput): Autodetect singleton/pattern.
166
167 * Thuban/Model/save.py (SessionSaver.write_classification):
168 Added pattern.
169
170 * Thuban/Model/load.py (SessionLoader.start_clpattern,
171 SessionLoader.end_clpattern): New, process pattern elements.
172
173 * test/test_classification.py (class TestClassGroupPattern): New.
174 (TestClassification.test_add_pattern,
175 TestClassification.test_multiple_groups_textual,
176 TestClassification.test_deepcopy_textual): New.
177 (TestClassification.test_multiple_groups_numerical):
178 Renamed test_multiple_groups.
179 (TestClassification.test_deepcopy_numerical): Renamed test_deepcopy.
180
181 * test/test_save.py (SaveSessionTest.testClassifiedLayer):
182 Added pattern.
183
184 * test/test_load.py (ClassificationTest.TestLayers, TestClassification):
185 Added pattern.
186
187 * test/test_layer.py
188 (TestLayerModification.test_set_classification_textual): New
189 (TestLayerModification.test_set_classification_numerical):
190 Renamed test_set_classification.
191
192 * Doc/manual/thuban-manual.xml: Added pattern to layer classification
193 description.
194
195 * Resources/XML/thuban-1.1.dtd: Added clpattern element and attribs.
196
197 2006-06-29 Didrik Pinte <[email protected]>
198
199 * Thuban/version.py: Bugfix determination of SQLite, the wright one !
200
201 2006-06-28 Didrik Pinte <[email protected]>
202
203 * packaging/windows/thubanstart.py: sample file loading all the stable
204 extensions
205
206 2006-06-28 Didrik Pinte <[email protected]>
207
208 * Thuban/version.py: Bugfix determination of SQLite on old and recent
209 systems (support pysqlite1 and pysqlite2)
210
211 2006-06-27 Frank Koormann <[email protected]>
212
213 * Thuban/version.py: Bugfix determination of SQLite on old systems.
214
215 2006-05-17 Didrik Pinte <[email protected]>
216 * Extensions/ogr/__init__.py : updated test for win32 and correct
217 imports
218
219 2006-05-15 Didrik Pinte <[email protected]>
220 Ashamed ... still some tabs in the files
221
222 * Thuban/version.py : tabs removed
223 * Thuban/Model/transientdb.py : tabs removed
224
225 2006-05-15 Didrik Pinte <[email protected]>
226
227 * Thuban/version.py : coding style correction
228 * Thuban/Model/transientdb.py : coding style correction
229
230 2006-05-15 Didrik Pinte <[email protected]>
231
232 * Thuban/version.py : Updated imports to support pysqlite2
233
234 * Thuban/Model/transientdb.py : Updated imports to support pysqlite2
235 Patched the querying system to support the param style of pysqlite2
236
237 2006-04-24 Didrik Pinte <[email protected]>
238 * Extensions/svgexport/__init__.py: The extension now works on win32
239 architecture. Bug #87 corrected.
240
241 2006-04-20 Bernhard Reiter <[email protected]>
242 * Doc/technotes/coding_guidelines.txt: Changed text from CVS to SVN.
243 Removed emacs specific hint and replaced it with a general hint
244 that editors might support writing changelogs.
245
246 2006-04-12 Bernhard Reiter <[email protected]>
247
248 * Thuban/version.py: Changed thuban_release mechanism to use "svn"
249 instead of "cvs".
250
251 2006-03-31 Bernhard Reiter <[email protected]>
252
253 * libraries/thuban/wxproj.cpp: including proj_api.h instead of
254 projects.h now. According the Frank Warmerdam and man pj_init
255 this is the public interface to proj. Thus I have changed PJ to projPJ.
256 And I could remove the hack to avoid clashes with typedef PVALUE
257 and #define LP in projects.h clashing with symbols when trying to
258 build on windows. The file is cleaner and nicer now.
259
260 2006-03-29 Bernhard Reiter <[email protected]>
261
262 * libraries/thuban/wxproj.cpp: undef LP to avoid clash when
263 trying to build with mingw.
264
265 2005-10-18 Bernhard Reiter <[email protected]>
266
267 * Thuban/UI/about.py: remove unused import of getdefaultlocale.
268 Added display of internal encoding to the about dialog text.
269
270 * Extensions/svgexport/__init__.py: changed version to "1.0.0+cvs".
271
272 2005-10-18 Bernhard Reiter <[email protected]>
273
274 Startup improved: We fail right away if the internal encoding could
275 not be determined.
276
277 * Thuban/__init__.py (get_internal_encoding): new.
278
279 * test/test_stringrepresentation.py (class TestInternalEncoding):
280 Preserve the internal encoding for the tests in this class.
281
282 2005-10-17 Bernhard Reiter <[email protected]>
283
284 * test/test_stringrepresentation.py: New file, for now testing
285 that set_internal_coding() is throwing an exception for bad exceptions.
286
287 * Thuban/__init__.py (set_internal_encoding): added a forwards
288 and backward translation, so that we fail early if the
289 internal_encoding is bad.
290
291 2005-10-17 Bernhard Reiter <[email protected]>
292
293 svgexport 1.0.0cvs: Fixed ARC layer writing: No filling is done.
294 You could actually get polylines with filling in between,
295 when the classification for the lines had a fill color.
296 E.g. this happens when you generate a classification from a ramp.
297
298 * Extensions/svgexport/test/test_svgmapwriter.py:
299 New test_export_arc_no_fill(). Extend copyright notice to 2005.
300
301 * Extensions/svgexport/svgmapwriter.py
302 (SVGRenderer.draw_shape_layer_incrementally()):
303 Setting TRANSPARENT_BRUSH for shaptype ARC.
304 Extend copyright notice to 2005.
305
306 * Extensions/svgexport/__init__.py: Extend copyright notice to 2005.
307
308 2005-09-08 Frank Koormann <[email protected]>
309
310 * Doc/manual/thuban-manual.xml (Map Management): Fixed typo reported
311 by Erik (sigra.at.home.se)
312
313 2005-08-18 Jan-Oliver Wagner <[email protected]>
314
315 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
316 Call the right method for the default size.
317
318 2005-08-11 Jan-Oliver Wagner <[email protected]>
319
320 * Extensions/export_shapefile: New.
321
322 * Extensions/export_shapefile/__init__.py: New. Initialize
323 the export_shapefile extension.
324
325 * Extensions/export_shapefile/export_shapefile.py: New.
326 Exports a layer as a Shapefile.
327
328 2005-08-08 Jan-Oliver Wagner <[email protected]>
329
330 * po/de.po: String fixes. This fixes Debian bug #313843.
331
332 2005-07-27 Jan-Oliver Wagner <[email protected]>
333
334 Remove the attributes from the layer element in
335 .thuban files for the save routine.
336 This also solves RT bug #3149,
337 https://intevation.de/rt/webrt?serial_num=3149
338
339 * test/test_load.py: (TestSingleLayer, TestNonAsciiColumnName,
340 TestLayerVisibility, TestSymbolSize, TestClassification, TestLabels,
341 TestLayerProjection, TestJoinedTable, TestLabelLayer): Removed
342 attributes from layer element to classification clnull element.
343
344 * test/test_save.py (SaveSessionTest.testSingleLayer,
345 SaveSessionTest.testLayerProjection,
346 SaveSessionTest.testClassifiedLayer,
347 SaveSessionTest.test_joined_table, SaveSessionTest.test_save_postgis):
348 Removed attributes from layer element to classification clnull element.
349 (test_save_postgis.NonConnectionStore._fetch_table_information):
350 added pretending to have a shape_type.
351
352 * Resources/XML/thuban-1.1.dtd: Make the attributes field
353 and field_type of classification optional.
354
355 * Thuban/Model/classification.py (Classification.TreeItem.build_info):
356 Added output of size.
357
358 * Thuban/Model/load.py (SessionLoader.start_classification):
359 Change attribute 'field' and 'field_type' from obligatory to
360 optional to allow empty classes (ie. only with a default=clnull).
361
362 * Thuban/Model/save.py (SessionSaver.write_layer): Don't write
363 any attributes anymore for the layer element.
364 (SessionSaver.write_classification): Even if there is no
365 classification field, still write the classification because
366 the clnull (default) symbol will not be defined anymore as
367 part of the layer element.
368
369 2005-07-05 Bernhard Herzog <[email protected]>
370
371 * setup.py (setup call): Version 1.1.0
372
373 * NEWS: Update for 1.1.0
374
375 * MANIFEST.in: Add *.txt to files taken from Doc. Otherwise the
376 technores won't be included
377
378 * Thuban/UI/about.py (About.__init__): Extend copyright notice to
379 2005
380
381 * po/de.po: Updated.
382
383 2005-07-05 Bernhard Herzog <[email protected]>
384
385 * README: gdal 1.1.8 is too old. 1.2.5 works.
386
387 2005-07-05 Bernhard Herzog <[email protected]>
388
389 * Resources/XML/thuban-1.1.dtd (rasterlayer): Add the opacity and
390 masktype attributes.
391
392 2005-07-05 Bernhard Herzog <[email protected]>
393
394 * Thuban/Model/layer.py (Layer.__mangle_bounding_box)
395 (Layer.ClipBoundingBox): Rename ClipBoundingBox to
396 __mangle_bounding_box. See the comments in the code and RT #2845
397
398 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
399 Remove the explicit test of ClipBoundingBox. The method isn't
400 public anymore and the direct call in the test wasn't necessary in
401 the first place. If ClipBoundingBox (now __mangle_bounding_box)
402 isn't called, the return value of ShapesInRegion will be
403 different.
404
405 2005-07-05 Bernhard Herzog <[email protected]>
406
407 * Thuban/UI/viewport.py (ViewPort.set_view_transform): Handle
408 ZeroDivisionError exceptions. I don't know when they happen
409 exactly. It probably happens when the projections aren't set
410 properly.
411
412 2005-07-01 Bernhard Herzog <[email protected]>
413
414 First step towards unicode. With this roughly we're at step 1
415 string_representation.txt
416
417 * Doc/technotes/string_representation.txt: New. Document how
418 strings are represented in Thuban and how to get to a Unicode
419 Thuban.
420
421 * Thuban/__init__.py (set_internal_encoding)
422 (unicode_from_internal, internal_from_unicode): New. The first few
423 functions for the internal string representation
424
425 * Thuban/UI/about.py (unicodeToLocale): Removed. Use
426 internal_from_unicode instead.
427
428 * Thuban/UI/__init__.py (install_wx_translation): Determine the
429 encoding to use for the internal string representation. Also,
430 change the translation function to return strings in internal
431 representation even on unicode builds of wxPython
432
433 * Thuban/Model/load.py (SessionLoader.check_attrs): Decode
434 filenames too.
435 (SessionLoader.start_clrange): Use check_attrs to decode and check
436 the attributes.
437
438 * Thuban/Model/xmlreader.py (XMLReader.encode): Use
439 internal_from_unicode to convert unicode strings.
440
441 * Thuban/Model/xmlwriter.py (XMLWriter.encode): Use
442 unicode_from_internal when applicable
443
444 * test/runtests.py (main): New command line option:
445 internal-encoding to specify the internal string encoding to use
446 in the tests.
447
448 * test/support.py (initthuban): Set the internal encoding to
449 latin-1
450
451 * test/test_load.py (TestSingleLayer.test, TestClassification.test)
452 (TestLabelLayer.test): Use the internal string representation when
453 dealing with non-ascii characters
454
455 * test/test_load_1_0.py (TestSingleLayer.test)
456 (TestClassification.test, TestLabelLayer.test): Use the internal
457 string representation when dealing with non-ascii characters
458
459 * test/test_load_0_9.py (TestSingleLayer.test)
460 (TestClassification.test): Use the internal string representation
461 when dealing with non-ascii characters
462
463 * test/test_load_0_8.py (TestUnicodeStrings.test): Use the
464 internal string representation when dealing with non-ascii
465 characters
466
467 * test/test_save.py (XMLWriterTest.testEncode)
468 (SaveSessionTest.testClassifiedLayer): Use the internal string
469 representation when dealing with non-ascii characters where
470 applicable
471
472 2005-06-30 Bernhard Herzog <[email protected]>
473
474 * test/runtests.py: Untabify.
475
476 2005-06-30 Bernhard Herzog <[email protected]>
477
478 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
479 untabify.
480
481 2005-06-30 Bernhard Herzog <[email protected]>
482
483 * Extensions/ogr/test/__init__.py: Add missing coding directive
484
485 2005-06-28 Jan-Oliver Wagner <[email protected]>
486
487 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
488 Use the default size for rendering selected items of default type.
489 Fixes part 2 of https://intevation.de/rt/webrt?serial_num=3149
490
491 2005-06-28 Jan-Oliver Wagner <[email protected]>
492
493 * Extensions/importAPR/apr.py (APR_BShSym): Extend by 'Stripple'.
494 (APR_TClr.GetThubanColor): Fix bug in color interpretation.
495 Thanks to Frank Koormann who identified this problem.
496
497 * Extensions/importAPR/importAPR.py (APR_VShSym): New. Just
498 another symbol identified.
499
500 2005-06-27 Jan-Oliver Wagner <[email protected]>
501
502 * Doc/manual/thuban-manual-de.xml: More translations.
503
504 2005-05-12 Jonathan Coles <[email protected]>
505
506 * Thuban/UI/projdialog.py: Add missing import, which led to an
507 exception when opening a layer's projection.
508
509 2005-05-09 Bernhard Herzog <[email protected]>
510
511 * test/support.py (FileLoadTestCase.filename): Fix doc-string.
512
513 2005-05-09 Bernhard Herzog <[email protected]>
514
515 * Thuban/Model/postgisdb.py (PostGISConnection.connect): Set the
516 connection to autoconnect. Fixes RT#3148.
517
518 * test/test_postgis_db.py
519 (TestPostGISSpecialCases.test_simple_error_handling): New test
520 that attempts to reproduce RT#3148.
521
522 2005-05-06 Jonathan Coles <[email protected]>
523
524 Add support for saving and loading the opacity and mask type
525 properties of RasterLayers. Also add support for proper use
526 of alpha information while drawing images not in 'RAW' format.
527 If transparency in an image format (e.g, PNG) is supported by
528 wxWidgets then the image would previously have been draw with
529 transparent regions, but the opaque regions would have been
530 unaffected by a change in the layer's opacity. This patch
531 corrects the problem.
532
533 * Thuban/Model/layer.py (RasterLayer): Added opacity and
534 masktype parameters to the constructor, and set the
535 appropriate variables to those values.
536
537 * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Added
538 code to read the opacity and mask type of the layer and construct
539 a new layer with the additional parameters.
540
541 * Thuban/Model/save.py (SessionSaver.write_layer): Added code
542 to save the opacity and mask type of a layer.
543
544 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Pass
545 the opacity of the layer to draw_raster_data rather than the layer.
546 (BaseRenderer.draw_raster_data): Remove the layer parameter because
547 the function doesn't need to know about the layer. Add the optional
548 opacity parameter whose default is 1.0. Add 'PNG' as a supported
549 graphics format.
550
551 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Fixed
552 signature to match that in BaseRenderer. Use the new opacity argument
553 in place of calling layer.Opacity(). In the case where the
554 format is not 'RAW', alpha_data is None and the loaded image has
555 alpha information, use the file's alpha information. This is
556 still subject to the layer's opacity setting.
557
558 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data):
559 Fixed signature to match that in BaseRenderer.
560
561 * test/test_load.py (TestRasterLayer): Change file_contents to
562 include opacity and masktype variables.
563 (TestRasterLayer.test): Include tests for opacity and masktype
564 changes.
565
566 * test/test_save.py (SaveSessionTest.testRasterLayer): Restructure
567 test to cover a variety of combinations of masktype and opacity
568 settings.
569
570 2005-05-02 Jan-Oliver Wagner <[email protected]>
571
572 * debian/rules: add --use-wx-python-swig-hack
573 to the build command.
574 Thanks to Moritz Lennert for pointing this out.
575
576 2005-04-28 Jan-Oliver Wagner <[email protected]>
577
578 Introduce OGRFileShapeStore in ogr extension.
579 This allows at least that loaded shapefile shape stores
580 can be saved correctly in the thuban session file
581 and reloaded again (reload is via core shapefile
582 routine, not OGR). For other types, .thuban files
583 can not be reloaded for the time being.
584
585 * Extensions/ogr/ogrshapes.py (OGRFileShapeStore): New. This
586 class ist to be used for any file-based shape stores
587 accessed through OGR.
588
589 * Extensions/ogr/ogrstart.py (open_with_ogr): Added
590 forgotten _ for i18n. Adapted call OpenFileShapestore
591 regarding new parameter.
592 (OpenFileShapestore): Use OGRFileShapeStore instead of
593 OGRShapeStore. Fix return value (None instead of null).
594 Add new parameter "mainwindow" to avoid accessing global
595 context.
596
597 2005-04-27 Jan-Oliver Wagner <[email protected]>
598
599 Introduce FileShapeStore as generalization for
600 file-based shape stores. In a first instance
601 this allows additional modules to handle shapefile
602 format as well, namely the OGR extension.
603
604 * Thuban/Model/data.py: Various small fixes in doc-strings.
605 (FileShapeStore): New class.
606 (ShapefileStore): Derive from FileShapeStore.
607 (ShapefileStore.__init__): Call __init__ of FileShapeStore,
608 rename self.table to self._table, initialize self._bbox
609 (ShapefileStore._open_shapefile): Use self._bbox instead of self.bbox
610 and self.FileName() instead of self.filename.
611 (ShapefileStore.Table): Use self._table instead of self.table.
612 (ShapefileStore.FileName): Removed (moved to FileShapeStore).
613 (ShapefileStore.BoundingBox): Use self._bbox instead of self.bbox.
614
615 * Thuban/Model/save.py: Replace ShapefileStore by FileShapeStore.
616 (SessionSaver.write_data_containers): Only use methods of the
617 base class FileShapeStore.
618
619 2005-04-26 Martin Schulze <[email protected]>
620
621 * Extensions/wms/wms.py (render_wms_layer): Adjusted the render
622 function to the modified render engine
623
624 2005-04-25 Martin Schulze <[email protected]>
625
626 * Thuban/UI/renderer.py (MapRenderer.projected_raster_layer):
627 Added a description according to the CVS log message
628
629 2005-04-23 Martin Schulze <[email protected]>
630
631 * Thuban/UI/renderer.py: Added a missing import
632
633 2005-04-23 Russell Nelson <[email protected]>
634
635 * Thuban/UI/view.py (MapCanvas.OnMiddle{Up,Down}): Changed the
636 way the previous tool is remembered, so that middle-button
637 panning works even if you haven't selected a tool.
638
639 2005-04-11 Bernhard Herzog <[email protected]>
640
641 * libraries/thuban/wxproj.cpp: Move the compatibility code that
642 deals with the wxPython 2.4 version of wxPython.h into the #ifdef
643 branch that includes wxPython.h because it's only needed when
644 wxPython.h is used. Also, it won't compile when
645 USE_WX_PYTHON_SWIG_HACK is set otherwise.
646
647 2005-04-07 Bernhard Herzog <[email protected]>
648
649 * Thuban/UI/classifier.py (ClassGrid.__init__): Use -1 as the ID.
650 (ID_CLASS_TABLE): Removed. It wasn't used anywhere except in
651 ClassGrid.__init__ and it's value is outside of the valid
652 range (must be < 32768). wxPython 2.5 complains about it with an
653 exception.
654
655 2005-04-05 Jan-Oliver Wagner <[email protected]>
656
657 * Doc/manual/thuban-manual-de.xml: More translations.
658
659 2005-04-05 Bernhard Herzog <[email protected]>
660
661 * libraries/thuban/wxproj.cpp: Make it work with a wxPython.h from
662 wxPython 2.4 as well. Also, remove a now obsolete comment.
663
664 2005-04-05 Bernhard Herzog <[email protected]>
665
666 Use wxPython.h by default but provide a workaround when it isn't
667 available.
668
669 * setup.py (wxproj_extension): New variable. Assign the Extension
670 instance for Lib.wxproj to this variable instead of putting it
671 directly into the listso that it can be accessed by other code
672 later.
673 (thuban_build_ext.user_options): Added boolean option
674 --use-wx-python-swig-hack.
675 (thuban_build_ext.initialize_options): Initialize the new option
676 to False.
677 (thuban_build_ext.finalize_options): If the new option was given,
678 define the preprocesser macro USE_WX_PYTHON_SWIG_HACK.
679 (thuban_build_ext): Update the doc-string
680
681 * libraries/thuban/wxproj.cpp: Normally we use
682 wx/wxPython/wxPython.h now. Only if USE_WX_PYTHON_SWIG_HACK is
683 defined, use swigPtrConvertHack.h instead.
684
685 * libraries/thuban/swigPtrConvertHack.h: Remove the code that was
686 copied over from wxPython.h.
687 (decode_pointer_new): New. Equivalent of decode_pointer for
688 wxPython 2.5.
689 (wxPyConvertSwigPtr): Modified to cope with wxPython 2.5 as well.
690
691 * README: Add section on potential build problems which explains
692 how the work-around for a missing wxPython.h is activated.
693
694 2005-03-29 Bernhard Herzog <[email protected]>
695
696 * test/postgissupport.py (find_postgis_sql): Added yet another
697 potential location for (lw)postgis.sql because the file has moved
698 again in postgis 1.0.0 rc4.
699
700 2005-03-29 Bernhard Herzog <[email protected]>
701
702 * Thuban/UI/legend.py (BMP_SIZE_W, BMP_SIZE_H): Set both to 16 to
703 match the site of the legend_icon_layer icon. Otherwise wxpython
704 2.5 complains when the legend is created with the error:
705
706 PyAssertionError: C++ assertion "(bitmap.GetWidth() == m_width &&
707 bitmap.GetHeight() == m_height) || (m_width == 0 && m_height ==
708 0)" failed in ./src/generic/imaglist.cpp(81): invalid bitmap size
709 in wxImageList: this might work on this platform but definitely
710 won't under Windows.
711
712 2005-03-23 Jonathan Coles <[email protected]>
713
714 These changes add support for adjusting the opacity of a raster layer.
715
716 * Thuban/Model/layer.py (RasterLayer.Opacity): Replaces AlphaOpacity.
717 (RasterLayer.SetOpacity): Replaces SetAlphaOpacity. Also triggers
718 a LAYER_CHANGED event if the opacity actually changes.
719
720 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_data): Added
721 layer parameter needed in the implementation of this method in
722 renderer.py.
723
724 * Thuban/UI/layerproperties.py (LayerProperties.dialog_layout): Fixed
725 typo 00 -> 0.
726
727 * Thuban/UI/rasterlayerproperties.py (RasterLayerProperties): Added
728 control to adjust opacity.
729
730 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Scale the
731 alpha data based on the opacity level of the layer.
732
733 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Now
734 accepts a layer parameter.
735
736 * test/test_layer.py (TestLayerModification.test_raster_layer):
737 Rename opacity method calls and add test for LAYER_CHANGED.
738
739 2005-03-16 Bernhard Herzog <[email protected]>
740
741 * test/test_connector.py (DeletionTestMixin.check_deletions)
742 (DeletionTestMixin.check_deletetions): renamed to check_deletions.
743 update the callers.
744
745 2005-03-14 Jan-Oliver Wagner <[email protected]>
746
747 * Doc/manual/thuban-manual-de.xml: More translations.
748
749 2005-03-10 Jan-Oliver Wagner <[email protected]>
750
751 Introducing initialization callbacks for extensions.
752
753 * Thuban/UI/extensionregistry.py (ExtensionDesc.__init__): Added
754 optional parameter init_callback.
755 (ExtensionDesc.init_ext): New. Executes the callback and sets
756 a status.
757
758 * Thuban/UI/application.py (ThubanApplication.OnInit): Add the
759 initialization of the extensions.
760 (ThubanApplication.init_extensions): Init all extensions.
761
762 * Thuban/UI/about.py (About.__init__): Added status of the extensions
763 to the about text.
764
765 * Extensions/gns2shp/__init__.py: Added init method for Extension
766 description.
767 (init): New. Contains the initialization of the module.
768
769 2005-03-04 Nina Hüffmeyer <[email protected]>
770
771 * Extensions/ogr/ogrdialog.py: Added a dialog, which asks for
772 OGRConnection to open a datasource. Removed dialog to display all
773 available drivers. Added some doc strings.
774
775 * Extensions/ogr/ogrstart.py: Added menu entry for opening an
776 OGRDatasource with a string. Added two opening methods which return an
777 OGRDatasource (either data from file or from DB).
778
779 * Extensions/ogr/ogrshapes.py: Added class OGRGeometry, which
780 represents a geometry reference of an OGRFeature. OGRShape now has a
781 list of referenced geometry objects (important for geometry
782 collections).
783 For OGRShapeStores loaded from a DB an ID column can be specified now.
784
785 2005-02-22 Jan-Oliver Wagner <[email protected]>
786
787 * test/test_map.py (TestMapWithContents.test_tree_info):
788 Added label layer for comparison.
789
790 2005-02-18 Jonathan Coles <[email protected]>
791
792 * libraries/thuban/gdalwarp.cpp (GetImageData): Optimize the loop
793 which builds a mask. Handle the majority of an image in a loop,
794 creating 8 bits at a time. Later, handle the edge case where less
795 than 8 bits are packed.
796
797 2005-02-18 Bernhard Herzog <[email protected]>
798
799 * test/test_baserenderer.py (TestBaseRenderer.setUp): Fix
800 doc-string
801
802 2005-02-18 Jonathan Coles <[email protected]>
803
804 * setup.py: Remove wx_cs_params from gdal compile options.
805
806 2005-02-18 Jonathan Coles <[email protected]>
807
808 Refactored baserenderer.py and renderer.py to remove baserenderer.py's
809 dependencies on wxPython. Added a new method projected_raster_layer()
810 that returns a raster layer image in projected space. This must be
811 implemented in classes derived from BaseRenderer. This also eliminates
812 the dependency on gdal in baserenderer.py.
813
814 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Call
815 new projected_raster_layer() to get projected raster image instead
816 of directly calling ProjectRasterFile().
817 (BaseRenderer.projected_raster_layer): New. This must be implemented
818 by derived classes. It takes almost the same arguments as ProjectRasterFile
819 did and returns a projected image with mask and alpha data (if requested).
820 (BaseRenderer.render_map_incrementally): Remove the check for gdal since
821 that check will be done in MapRenderer.projected_raster_layer(). This
822 also allows other implementations to use different projection code.
823
824 * Thuban/UI/renderer.py (MapRenderer.projected_raster_layer):
825 Implementation of BaseRenderer.projected_raster_layer. Checks for
826 gdal support and wxPython version. Also handles exceptions from
827 ProjectRasterFile.
828
829 * libraries/thuban/gdalwarp.cpp: Removed checks for wxPython versions
830 and added a variable which can be set through the options argument
831 of ProjectRasterFile.
832
833 * test/test_baserenderer.py (SimpleRenderer.projected_raster_layer): New.
834 Calls ProjectRasterFile and returns the result.
835 (TestBaseRenderer.test_projected_raster_layer): New. Tests the results
836 of calling projected_raster_layer() with different options.
837 (TestBaseRenderer.test_raster_no_projection): Removed tests based on
838 wxPython version and all tests of masks and alpha channels. These are
839 now in test_projected_raster_layer().
840
841 2005-02-17 Jan-Oliver Wagner <[email protected]>
842
843 * Thuban/Model/map.py, Thuban/Model/label.py: Fixed
844 doc-strings to comply with coding_guidelines.
845
846 2005-02-17 Jan-Oliver Wagner <[email protected]>
847
848 Docstring improvements and minor fixes for labellayer.
849
850 * Thuban/Model/map.py:
851 (Map, Map.Destroy, Map.RemoveLayer, Map.ClearLayers,
852 Map.Layers, Map.HasLayers, Map.MoveLayerToTop,
853 Map.RaiseLayer, Map.LowerLayer, Map.MoveLayerToBottom,
854 Map.ProjectedBoundingBox, Map.GetProjection): Improved/added
855 doc string.
856 (Map.BoundingBox): Removed superfluous test for label_layer
857 and improved doc string.
858 (Map.TreeInfo): Added label_layer and improved sdo string.
859
860 * Thuban/Model/label.py: Added import of _.
861 (Label, Label.__init__): Improved/added doc string.
862 (LabelLayer, LabelLayer.__init__, LabelLayer.Labels,
863 LabelLayer.RemoveLabel, LabelLayer.ClearLabels):
864 Improved/added doc string.
865 (LabelLayer.AddLabel): Use already defined names for
866 align strings and improved doc string.
867 (LabelLayer.TreeInfo): New. Return the object data for
868 the tree view.
869
870 2005-02-16 Jonathan Coles <[email protected]>
871
872 Further wxPython 2.5 changes using patches from Daniel Calvelo Aros
873 so that that wxproj doesn't crash. Added GUI support for selecting
874 alpha channel (opacity can't be selected yet).
875
876 NOTE: If wxPython.h is including in future distribution packages
877 then it will not be necessary to have the files swigPtrConvertHack.h
878 and wxPython_int.h included with Thuban. This is hopefully
879 a temporary workaround.
880
881 * setup.py (thuban_build_ext.finalize_options): gdalwarp needs
882 access to the macro wxCHECK_VERSION so that it will properly
883 generate a bit mask. There was a problem between wx2.4 and wx2.5
884 that this works around.
885
886 * Thuban/Model/layer.py (RasterLayer.UseMask): Removed in favor
887 of RasterLayer.MaskType.
888 (RasterLayer.SetUseMask): Removed in favor of RasterLayer.SetMaskType
889 (RasterLayer.MaskType): New. Returns the type of mask to use. Can
890 specify none, a bitmap, or an alpha channel.
891 (RasterLayer.SetMaskType): New. Set what kind of mask to use.
892
893 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer):
894 Set the raster warping options for the mask based on the value
895 of RasterLayer.MaskType.
896
897 * Thuban/UI/legend.py (LegendTree.__FillTreeLayer): Remove
898 deprecated calls to SetItemSelectedImage in favor of SetItemImage
899 with wxTreeItemIcon_Selected.
900
901 * Thuban/UI/rasterlayerproperties.py: Support selecting to use
902 an alpha channel for the mask.
903
904 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Use alpha
905 data if it is available and an alpha channel is supported under
906 the current version of wxPython.
907
908 * libraries/thuban/gdalwarp.cpp (GetImageData): Added compiler define
909 to select whether 1's or 0's select the desired portion of an image
910 in the bit mask. wx2.4 has a bug where the documentation is the opposite
911 from behavior.
912 (ProjectRasterFile): Only generate an alpha channel if the version
913 of wxPython is >= 2.5.3.
914
915 * libraries/thuban/wxproj.cpp: Applied patches from Daniel Calvelo Aros.
916 When wxPython >= 2.5.3 use the special swig functions to decode an
917 object's address.
918
919 * libraries/thuban/swigPtrConvertHack.h: Includes conditional code
920 based on the version of wxPython. If >= 2.5.3 use the special swig
921 functions from wxPython to decode wxPython objects, otherwise use
922 the old method of retrieving the address from the object __repr__ string.
923
924 * libraries/thuban/wxPython_int.h: Copied from wxPython source.
925 Unnecessary code was removed to make it smaller.
926
927 * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
928 Add tests for returning an alpha channel.
929
930 * test/test_layer.py (TestLayerModification.test_raster_layer): Fix
931 tests that used removed functions UseMask and SetUseMask
932
933
934 2005-02-08 Bernhard Herzog <[email protected]>
935
936 More wxPython 2.5 changes. This time taken from a patch from
937 Daniel Calvelo Aros.
938
939 * Thuban/UI/tableview.py (QueryTableFrame.__init__)
940 (QueryTableFrame.__init__): Pass the size of a spacer as a single
941 item.
942
943 * Thuban/UI/projdialog.py (ProjFrame.build_dialog)
944 (ProjFrame.build_dialog): Pass the size of a spacer as a single
945 item.
946
947 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Pass the
948 size of a spacer as a single item.
949
950 * Thuban/UI/classifier.py (Classifier.dialog_layout): Pass the
951 size of a spacer as a single item.
952
953 2005-02-08 Bernhard Herzog <[email protected]>
954
955 Compatibility with wxPython 2.5. The changes should make it work
956 better with 2.5 while still keeping compatibility with 2.4. There
957 are still problems with 2.5, though.
958
959 * Thuban/UI/dock.py (DockableWindow.__CreateBorder): Pass the size
960 of a spacer as a single item.
961
962 * Thuban/UI/classifier.py (ClassGroupPropertiesCtrl): Derive only
963 from wxControl
964
965 * Thuban/UI/legend.py (LegendTree): When running with wxPython <
966 2.5, add an implementation of the GetFirstChild method that does
967 not require the second parameter.
968 (LegendTree.find_layer, LegendTree._OnMsgMapLayersAdded)
969 (LegendTree._OnMsgMapLayersRemoved, LegendTree.DeleteAllItems)
970 (LegendTree.DeleteChildren, LegendTree.__ShowHideLayer): Do not
971 pass the second parameter to GetFirstChild
972
973 2005-02-08 Nina Hüffmeyer <[email protected]>
974
975 * Extensions/ogr/ogrshapes.py: Removed some print commands.
976
977 * Extensions/ogr/ogrstart.py: Changed the GUI. OGR is no longer an
978 additional menu but appears as a possibility in the menu Map.
979
980 2005-02-07 Jonathan Coles <[email protected]>
981 * libraries/thuban/gdalwarp.cpp: Removed the macros PYTHON_ERR
982 and PYTHON_ERRF since they were no longer necessary.
983
984 2005-02-07 Bernhard Reiter <[email protected]>
985 * Thuban/UI/classifier.py (ClassGrid.DeleteSelectedRows):
986 Enable translation for message string.
987
988 2005-02-06 Martin Schulze <[email protected]>
989
990 * Extensions/wms/infodialog.py (wmsInfoDialog.__init__): Adjusted
991 the arguments of the contstructor to fit the global scheme
992
993 2005-01-31 Nina Hüffmeyer <[email protected]>
994
995 * Extensions/ogr/ogrdialog.py: Added class ogrdialog.py, which provides
996 some dialogs needed to start ogr.
997
998 * Extensions/ogr/__init__.py: Changed comments to avoid encoding
999 warnings.
1000
1001 * Extensions/ogr/test/test_OGRShapestore.py: Changed comments to avoid
1002 encoding warnings.
1003
1004 2005-01-28 Jonathan Coles <[email protected]>
1005
1006 * libraries/thuban/gdalwarp.cpp (GetImageData): Recode how the
1007 mask is packed into a bit array. It's now slightly faster.
1008
1009 2005-01-28 Jonathan Coles <[email protected]>
1010
1011 * Thuban/Model/layer.py (RasterLayer.__init__): Make use_mask
1012 default to true.
1013
1014 * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Remove
1015 code that loads the state of the layer's use_mask flag. Its
1016 usefulness is still being debated.
1017
1018 * Thuban/Model/save.py (SessionSaver.write_layer): Remove
1019 code that saves the state of the layer's use_mask flag. Its
1020 usefulness is still being debated.
1021
1022 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Pass
1023 options to ProjectRasterFile based on the state of layer.UseMask().
1024 Catch more exceptions from ProjectRasterFile so that Thuban doesn't
1025 quit is there is a problem projecting.
1026 (BaseRenderer.draw_raster_data): Change the documentation to
1027 describe the new format (XBM) that the mask data will be in.
1028
1029 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): The mask
1030 data is in XBM format when format='RAW' which means it doesn't
1031 need to be converted to a wxImage before being used as a mask
1032 for a wxBitmap. Assume that if format != 'RAW' that the image
1033 data and mask data are in the same format.
1034
1035 * libraries/thuban/gdalwarp.cpp (GetImageData): If alpha is enabled
1036 and a mask is requested, convert the alpha band to a bit array in
1037 XBM format. if an alpha channel is requested, simply return the
1038 data in the alpha band. Provide better error handling by returning
1039 python error messages (also fixes RT #2947).
1040 (ProjectRasterFile): Support multiple mask options, rather than simply
1041 a flag indicating that a mask should or should not be used. Provide
1042 better error handling by returning python error messages.
1043
1044 * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
1045 Add mask data to test.
1046
1047 * test/test_layer.py (TestLayer.test_raster_layer): Test that a layer
1048 should use the mask by default.
1049 (TestLayerModificaton.test_raster_layer): Test that a layer should use
1050 the mask by default.
1051
1052 * test/test_load.py (TestRasterLayer.test): Remove testing for
1053 use_mask flag in file.
1054
1055 * test/test_save.py (SaveSessionTest.testRasterLayer): Remove testing
1056 for use_mask in file.
1057
1058 * test/test_load_1_0_1.py: Removed. Shouldn't have been checked in.
1059
1060 2005-01-26 Jonathan Coles <[email protected]>
1061
1062 Add a new dialog box for raster layers. The dialog box allows
1063 the user to toggle a mask that is generated by ProjectRasterFile
1064 and is used to only draw the real parts of the projected image.
1065
1066 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer):
1067 Instruct the warping code to generate a mask if the raster layer
1068 requests one.
1069 (BaseRenderer.draw_raster_data): Removed obsolete optional mask argument.
1070
1071 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Removed
1072 obsolete optional mask argument.
1073
1074 * Thuban/UI/classifier.py (Classifier): Change the parent class
1075 to LayerProperties and rework the code to support layout calls
1076 from the parent.
1077 (Classifier.dialog_layout): New. Layout the dialog box.
1078 (Classifier.map_layers_removed): Removed. Moved to parent class.
1079 (Classifier.map_replaced): Removed. Moved to parent class.
1080 (Classifier._OnTry): Renamed to OnTry to support parent class.
1081 (Classifier.OnClose): Removed. Supplied in parent class.
1082 (Classifier._OnCloseBtn): Removed. Supplied in parent class as OnCloseBtn.
1083 (Classifier._OnOK): Renamed to OnOK to support parent class.
1084 (Classifier._OnRevert): Renamed to OnRevert to support parent class.
1085
1086 * Thuban/UI/layerproperties.py: New. Base class for layer properties
1087 dialog boxes.
1088
1089 * Thuban/UI/rasterlayerproperties.py: New. Class for displaying
1090 raster layer properties.
1091
1092 * libraries/thuban/gdalwarp.cpp: Replace the old gdalwarp.cpp code
1093 with the non-simple version supplied with gdal. This allows added
1094 features such as creating an alpha band.
1095 (GetImageData): Generate a mask array from the alpha band that is
1096 generated by gdal if the user has selected it. Try to support images
1097 that have more than three bands, such as images with RGB plus an
1098 alpha band.
1099 (ProjectRasterFile): Convert python argument for mask and tell
1100 gdal to enable or disable an alpha band.
1101
1102 * Thuban/Model/layer.py (BaseLayer.Type): New. Returns a string
1103 describing what kind of layer the class is. Defaults to "Unknown",
1104 but should be overridden by subclasses.
1105 (Layer.Type): New. Override base class method.
1106 (RasterLayer.__init__): Create a flag for using a mask. Record extra
1107 data from gdal for display in the properties dialog.
1108 (RasterLayer.Type): New. Override base class method.
1109 (RasterLayer.UseMask): New. Returns True if the mask should be used.
1110 (RasterLayer.SetUseMask): New. Set if the mask should be used.
1111 (RasterLayer.ImageInfo): New. Return extra information about the image.
1112
1113 * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Load
1114 the mask information.
1115
1116 * Thuban/Model/save.py (SessionSaver.write_layer): Save mask information.
1117
1118 * Thuban/UI/mainwindow.py: Register the RasterLayerProperties and
1119 Classifier classes as dialogs to use with the proper layer types.
1120
1121 * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
1122 Fix test.
1123
1124 * test/test_layer.py (TestLayer.test_raster_layer): Test new methods.
1125 (TestLayerModification.build_path): New. Support function.
1126 (TestLayerModification.test_raster_layer): New. Test new methods.
1127
1128 * test/test_save.py (SaveSessionTest.testRasterLayer): Add tests for mask.
1129
1130 * test/test_load.py (TestRasterLayer): Add tests for mask.
1131
1132 * test/test_load_1_0_1.py: New. Copied from test_load.py.
1133
1134 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Removed
1135 obsolete optional mask argument.
1136
1137 2005-01-26 Nina Hüffmeyer <[email protected]>
1138
1139 * Extensions/ogr/ogrshapes.py: Added two dictionaries to ShapeStore
1140 which maps the ids and the ordinals. Fixed RowIdToOrdinal(),
1141 RowOrdinalToId() and ReadRowAsDict().
1142
1143 * Extensions/ogr/ogrstart.py: Added menu item which opens database
1144 layers for existing database connections.
1145
1146 * Extensions/ogr/test/test_OGRShapestore.py: Fixed a message string.
1147
1148
1149 2005-01-26 Jan-Oliver Wagner <[email protected]>
1150
1151 * Doc/manual/thuban-manual-de.xml: More translations.
1152
1153 2005-01-24 Bernhard Herzog <[email protected]>
1154
1155 Rework the status bar updates a bit to make sure the message about
1156 the projections is produced at the right times.
1157
1158 * Thuban/UI/mainwindow.py (MainWindow.update_status_bar_messages):
1159 New class variable with messages that may require a status bar
1160 update.
1161 (MainWindow.view_position_changed)
1162 (MainWindow.update_status_bar): Rename from view_position_changed
1163 to update_status_bar. It's meaning has changed now that it may
1164 also generate messages about problems with projection settings.
1165 (MainWindow.__init__): Use the new update_status_bar_messages
1166 class variable to subscribe update_status_bar
1167 (MainWindow.set_position_text): Update doc-string. This method
1168 has to be renamed at some point. See doc-string and comments.
1169 (MainWindow.OnClose): Unsubscribe update_status_bar from all
1170 messages in update_status_bar_messages
1171
1172 * Thuban/UI/viewport.py (ViewPort.forwarded_map_messages): New
1173 class attribute. map messages to be forwarded by the viewport.
1174 (ViewPort._subscribe_map, ViewPort._unsubscribe_map): (un)subscribe
1175 the messages in forwarded_map_messages
1176
1177 2005-01-21 Bernhard Herzog <[email protected]>
1178
1179 * test/postgissupport.py (PostGISDatabase.__init__): Tweak
1180 doc-string
1181 (find_postgis_sql): Update for postgis-1.0.0-rc1, which uses a
1182 different name for the initialization SQL file.
1183
1184 2005-01-21 Jonathan Coles <[email protected]>
1185
1186 * Thuban/UI/baserenderer.py (proj_params_to_str): New. Takes
1187 a projection and returns a formatted string representing the
1188 parameters to feed to gdalwarp. This function eliminates
1189 redundancy in draw_raster_layer().
1190 (BaseRenderer.render_map_incrementally): Removed the optimization which
1191 drew the top most raster layer first and then only those vector-
1192 based layers that are above it. With the support for transparency
1193 this optimization breaks correct behaviour.
1194 (BaseRenderer.draw_raster_layer): Reorganize code to support possible
1195 future enhancements to raster layer bounding box. The old behaviour has
1196 not changed. Also, change calling parameters to draw_raster_data()
1197 to specify new RAW data format and mask.
1198 (BaseRenderer.draw_raster_data): Change signature to include an optional
1199 parameter for mask information. Change documentation to mention
1200 support for new parameter and added option for RAW data format.
1201 The data argument is now a list of [width, height, data].
1202
1203 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Add new optional
1204 mask parameter. Add new condition for RAW format, which
1205 significantly reduces rendering time. Add condition for
1206 mask parameter.
1207
1208 * libraries/thuban/gdalwarp.cpp (GetImageData): New. Creates a
1209 data array of RGB values from the projected image returned from
1210 the gdal warping functions. In the case of palette based images, it
1211 converts the NO_DATA index to the mask color.
1212 (ProjectRasterFile): Removed all custom memory driver references
1213 and replaced it with the standard in-memory dataset provided
1214 by gdal. The return data is no longer a BMP file, but an array
1215 of RGB values, one set triple per pixel.
1216
1217 * libraries/thuban/bmpdataset.cpp: Removed. Unnecessary.
1218 * libraries/thuban/cpl_mfile.h: Removed. Unnecessary.
1219 * libraries/thuban/cpl_mfile.cpp: Removed. Unnecessary.
1220
1221 * setup.py (thuban_build_ext.finalize_options): Removed mention
1222 of cpl_mfile.cpp and bmpdataset.cpp files in the list of source
1223 files. These are obsolete with the new version of gdalwarp.cpp
1224
1225 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data):
1226 Updated signature.
1227 (TestBaseRenderer.test_raster_no_projection): Changed the test
1228 data to be data in the uncompressed RAW format returned from
1229 ProjectRasterFile.
1230
1231 2005-01-21 Jan-Oliver Wagner <[email protected]>
1232
1233 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Made
1234 string available for i18n.
1235
1236 2005-01-20 Russell Nelson <[email protected]>
1237
1238 * Resources/Projections/defaults.proj: Ruin the speling of the
1239 Lambert-93 projection so it doesn't run into the wx UTF-8 bug.
1240 It's the wrong thing to do in the long run, but it's necessary for
1241 those users until that bug is fixed. Otherwise the projection
1242 dialog segfaults. Better to annoy some Lambert-93 users with a
1243 spelling mistake than every Fedora Core 3 user of Thuban-CVS.
1244
1245 2005-01-20 Bernhard Reiter <[email protected]>
1246
1247 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Added
1248 docstring and comment that the warning code here is a hack.
1249
1250 2005-01-20 Russell Nelson <[email protected]>
1251
1252 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Warn
1253 user about misprojected layers when their lat/lon bounding
1254 box exceeds rational lat/lon values.
1255
1256 2005-01-20 Bernhard Reiter <[email protected]>
1257
1258 * Thuban/UI/about.py (unicodeToLocale): Improved:
1259 Use 'ascii' and then 'replace' for other characters
1260 when getdefaultlocale returns None. Thanks to Bernhard H. .
1261
1262 2005-01-20 Bernhard Reiter <[email protected]>
1263
1264 * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Added a comment
1265 that OnRangeText might be called twice and using None as argument.
1266
1267 2005-01-20 Bernhard Reiter <[email protected]>
1268
1269 * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Add a
1270 OnRangeText(0) to work around a different in wx Behaviour noticed
1271 on MacOSX, thanks to Lorenzo Moretti and Daniel Calvelo for the fix.
1272
1273 2005-01-20 Bernhard Reiter <[email protected]>
1274
1275 * Thuban/UI/about.py: take iso-8859-15 when getdefaultlocale returns
1276 None. (Fixes rt#2910.)
1277
1278 2005-01-18 Frank Koormann <[email protected]>
1279
1280 New Extension: mouseposition
1281 Tool to collect mouse click positions (map coordinates) in a dialog.
1282
1283 * Extensions/mouseposition/__init__.py: New, extension registration
1284
1285 * Extensions/mouseposition/mouseposition.py: New, implements the
1286 dialog and adds a tool to Thuban mainwindow.
1287
1288 * Extensions/mouseposition/position.xpm: New, icon for tool.
1289
1290 2005-01-14 Jan-Oliver Wagner <[email protected]>
1291
1292 * Doc/manual/thuban-manual-de.xml: More translations.
1293
1294 2005-01-11 Frank Koormann <[email protected]>
1295
1296 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
1297 Fix indention bug.
1298
1299 2005-01-09 Frank Koormann <[email protected]>
1300
1301 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
1302 BugFix 2901: Explicitly copy layers ClassificationColumn since it
1303 is not part of the layers Classification.
1304
1305 2005-01-03 Frank Koormann <[email protected]>
1306
1307 * Thuban/UI/renderer.py (ScreenRendererdraw_selection_incrementally):
1308 BugFix 2883: Former implementation only worked on classified point
1309 layers: KeyError was raised, now use the default size if field is None.
1310
1311 2004-12-27 Bernhard Reiter <[email protected]>
1312
1313 svgexport 1.0.0cvs: Fixed label export.
1314
1315 * Extensions/svgexport/test/test_svgmapwriter.py:
1316 class TestSVGRenderer(): New class; new test test_label_font().
1317
1318 * Extensions/svgexport/svgmapwriter.py
1319 (SVGRenderer.label_font()): initialised Font size with self.factor now,
1320 makes test_label_font happy.
1321
1322 * Extensions/svgexport/TODO: crossed out fixed label export item.
1323 Added item for options.
1324
1325 * Extensions/svgexport/__init__.py: Bumped version to 1.0.0cvs.
1326
1327 2004-12-27 Russell Nelson <[email protected]>
1328
1329 Middle mouse button pans.
1330
1331 * Thuban/UI/view.py (MapCanvas.__init__): Subscribe also
1332 OnMiddleDown and OnMiddleUp events.
1333 (MapCanvas.OnMiddleDown): New. Activate the pan tool and remember the
1334 previously used tool.
1335 (MapCanvas.OnMiddleUp): New. Reactivate the remebered tool used before
1336 pressing the middle mouse button.
1337
1338 2004-12-27 Jan-Oliver Wagner <[email protected]>
1339
1340 * Doc/manual/thuban-manual-de.xml: More translations.
1341
1342 2004-12-23 Jan-Oliver Wagner <[email protected]>
1343
1344 * Thuban/UI/projdialog.py (ProjFrame.load_user_proj): Added a
1345 \n to stderr after the warnings. Thanks to Russell Nelson.
1346
1347 2004-12-20 Nina Hueffmeyer <[email protected]>
1348
1349 * Extensions/ogr/ogrshapes.py: Fixed some issues from
1350 Bernhard (coding guidelines etc.). Additionally it is now possible to
1351 display shapefiles containing feature collections (e.g.polygons
1352 with holes). Works with gdal 1.2.1 now.
1353
1354 * Extensions/ogr/test/test_OGRShapestore.py: Fixed some issues
1355 from Bernhard (coding guidelines etc.). If ogr can't be imported,
1356 tests are skipped now.
1357
1358 * Extensions/ogr/ogrstart.py: Fixed some typings.
1359
1360 2004-12-20 Bernhard Reiter <[email protected]>
1361
1362 * Extensions/svgexport/TODO: updated to add support for
1363 raster layers and labels for 1.0.1.
1364
1365 * Extensions/svgexport/svgmapwriter.py (draw_raster_layer):
1366 Issue a warning now.
1367
1368 2004-12-19 Bernhard Reiter <[email protected]>
1369
1370 * Extensions/svgexport/TODO: Added idea to support triggering
1371 the application down the pipe.
1372
1373 2004-12-19 Bernhard Reiter <[email protected]>
1374
1375 svgexport: Improved code quality, mainly by better naming.
1376
1377 * Extensions/svgexport/svgmapwriter.py:
1378 DrawPath() renamed to DrawPolygonPath(),
1379 added documentation, improved comments and variable names.
1380
1381 * Extensions/svgexport/svgmapwriter.py,
1382 Extensions/svgexport/test/test_svgmapwriter.py:
1383 All using DrawPolygonPath() now, the default parameter closed=True
1384 omitted.
1385
1386 * Extensions/svgexport/test/test_svgmapwriter.py:
1387 renamed test_polygon_opened() to test_polyline()
1388 renamed test_transparent_polygon() to test_transparent_polyline()
1389
1390 2004-12-18 Jan-Oliver Wagner <[email protected]>
1391
1392 Some fixes of gns2shp extension.
1393
1394 * Extensions/gns2shp/test/__init__.py: New. Make this directory a
1395 package.
1396
1397 * Extensions/gns2shp/test/test_gns2shp.py: Add some import paths
1398 dynamically.
1399
1400 * Extensions/gns2shp/test/README: Simplified description how to test.
1401
1402 * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed doc-string,
1403 fixed some dimensions of fields according to the GNS documentation
1404 which seems to change undocumented.
1405 Now killing trailing \n and/or \r from MODIFY_DATE.
1406 This fixes RT#2453.
1407
1408 2004-12-18 Bernhard Reiter <[email protected]>
1409
1410 svgexport 1.0.0: Treats holes and islands nicely. Documentation added.
1411
1412 * Extensions/svgexport/test/test_svgmapwriter.py:
1413 Added new tests: test_export_polygon_with_hole()
1414 and test_polygon_with_hole().
1415
1416 * Extensions/svgexport/svgmapwriter.py
1417 (draw_polygon_shape()): Uses DrawPath correctly now.
1418
1419 * Doc/manual/thuban-manual.xml: Added documentation for stable
1420 extention svgexport.
1421 * Doc/manual/thuban-manual-de.xml: Copied English section about
1422 svexport over.
1423
1424 * Extensions/svgexport/__init__.py: Bumped version number to 1.0.0.
1425
1426 * Extensions/svgexport/svgsaver.py,maplegend.py:
1427 Moved from experimental to stable extension menu.
1428
1429 * Extensions/svgexport/TODO: updated.
1430
1431
1432 2004-12-18 Bernhard Reiter <[email protected]>
1433
1434 Added Extensions/svgexport/TODO
1435
1436 2004-12-18 Bernhard Reiter <[email protected]>
1437
1438 Refactored in svgexport:
1439 DrawPath replaces DrawPolygon; added newline in front of "M" in paths.
1440
1441 * Extensions/svgexport/svgmapwriter.py
1442 Added verbosity level 3 to print out polygon points.
1443 (class Point): added __repr__
1444 (class Brush, __str__()): Added space after ,.
1445 (DrawPolygon): Renamed to DrawPath()
1446 (DrawPath): Takes list of polygons as input now, adds \n before "M"s.
1447 (DrawLines): Using DrawPath now.
1448
1449 * Extensions/svgexport/test/test_svgmapwriter.py:
1450 Replaced DrawPolygon() calls with DrawPath() and put the first argument
1451 inside another list. Adapted test data with a newline before "M".
1452
1453 2004-12-18 Bernhard Reiter <[email protected]>
1454
1455 Refactored svgexport tests: 9 double tests runs eliminated;
1456 code size reduced by 8 lines.
1457
1458 * Extensions/svgexport/test/test_svgmapwriter.py:
1459 (class TestWithDC): Renamed to BaseTestWithDC, moved to top.
1460 (class BaseWithDCtools): New, subclass from BaseTestWithDC.
1461 (class TestDrawSplines): now subclass from BaseTestWithDCtools,
1462 this fixed the double running of the nine tests of TestVirtualDC.
1463 (class TestVirtualDC): Using self.dc and self.file from setUp().
1464
1465 2004-12-17 Bernhard Herzog <[email protected]>
1466
1467 Two windows specific fixes ported from thuban-1­0-branch:
1468
1469 * Thuban/UI/about.py (unicodeToLocale): Use getdefaultlocale
1470 instead of getlocale because getlocale doesn't return a usable
1471 encoding name on a german windows 2000
1472
1473 * setup.py: windows build: Removed the absolute path names and
1474 made all prfixes relative to the directory containing setup.py.
1475 Makes it a little easier to adapt to a different system.
1476
1477 2004-12-16 Bernhard Herzog <[email protected]>
1478
1479 Add support for PostGIS tables with LINESTRING geometries.
1480 Fixes RT#2299
1481
1482 * Thuban/Model/postgisdb.py (shapetype_map): Add LINESTRING
1483
1484 * test/postgissupport.py
1485 (PostgreSQLServer.get_default_static_data_db): Rename the "roads"
1486 table to "roads-multi" because it now uses MULTILINESTRING
1487 geometries and introduce a new "roads" table that uses LINESTRING
1488 (coords_to_multilinestring): Make the doc string more precise
1489 (coords_to_linestring): New. Create a LINESTRING WKT
1490 representatin
1491 (wkt_converter): Add coords_to_linestring
1492 (upload_shapefile): Rephrase the doc-string a bit.
1493
1494 * test/test_postgis_db.py (TestPostGISShapestoreArc)
1495 (LineStringTests)
1496 (TestPostGISShapestoreLineString)
1497 (TestPostGISShapestoreMultiLineString): Split
1498 TestPostGISShapestoreArc into a base class LineStringTests and two
1499 derived classes TestPostGISShapestoreLineString for LINESTRING
1500 geometries and TestPostGISShapestoreMultiLineString for
1501 MULTILINESTRING geometries. Most test methods are in the base
1502 class with the exception of tests that explicitly check the raw
1503 format.
1504
1505 2004-12-16 Bernhard Herzog <[email protected]>
1506
1507 Make the test suite work with PostGIS 0.8.2 and PostgreSQL 7.4
1508
1509 * test/postgissupport.py (find_postgis_sql): Different postgis
1510 versions put the postgis.sql file into slightly different places
1511 so we have to look in both. The updated doc string describes this
1512 is more detail.
1513
1514 * test/test_postgis_db.py
1515 (TestPostGISSpecialCases.test_column_name_quoting): The return
1516 value of UniqueValues is unsorted, so it has to be sorted for
1517 comparison.
1518
1519 2004-12-16 Bernhard Herzog <[email protected]>
1520
1521 Fix for RT#2237
1522
1523 * Thuban/UI/projdialog.py (ProjFrame._show_proj_panel): If the
1524 panel to be shown is the UnknownProjPanel disable the OK and Try
1525 buttons. Otherwise enable them.
1526 (ProjFrame.__GetProjection): The UnknownProjPanel returns None for
1527 the parameters. In that case __GetProjection also returns None
1528 now.
1529
1530 2004-12-15 Bernhard Herzog <[email protected]>
1531
1532 * Thuban/UI/classgen.py (GenQuantilesPanel.__init__): Set the
1533 minimum number of classes to 2. The calculate_quantiles needs at
1534 least two and raises an exception otherwise.
1535 Fixes RT#2549
1536
1537 2004-12-15 Bernhard Herzog <[email protected]>
1538
1539 * test/postgissupport.py (PostgreSQLServer.execute_sql): Extend to
1540 so that it returns a result for select statements.
1541 (PostgreSQLServer.server_version): New. Return the version of the
1542 server software.
1543 (PostgreSQLServer.require_authentication): The format of
1544 pg_hba.conf has changed between PostgrSQL 7.2 and 7.3. Check the
1545 server version and generate the file in the correct format
1546
1547 2004-12-15 Bernhard Herzog <[email protected]>
1548
1549 * test/postgissupport.py (PostgreSQLServer.is_running): Fix typo
1550 in the doc string and rephrase it a little.
1551
1552 2004-12-15 Frank Koormann <[email protected]>
1553
1554 * test/test_load.py (TestAltPath.checkSession): New, extended checks if
1555 session has been loaded successfully. The check is called by the relevant
1556 tests after executing load_session().
1557
1558 2004-12-13 Bernhard Herzog <[email protected]>
1559
1560 Make sure the region used to determine which shapes are visible
1561 actually matches the region on the printed page. If this isn't
1562 done properly some shapes might not be printed.
1563 Fixes RT #2692
1564
1565 * Thuban/UI/view.py (MapPrintout.draw_on_dc): The region for the
1566 renderer has to be at the same position as the mapregion
1567
1568 * Thuban/UI/renderer.py (ExportRenderer.RenderMap): self.region
1569 has to be moved by (self.shiftx, self.shifty) too.
1570
1571 2004-12-13 Bernhard Herzog <[email protected]>
1572
1573 * libraries/pyprojection/Projection.i: Work around a bug in the
1574 generated python code which leads to exception in the __del__
1575 method when the constructor fails. See the comments in the code
1576 for more details.
1577
1578 * libraries/pyprojection/Projection.py: Updated from Projection.i
1579 with SWIG.
1580
1581 2004-12-13 Bernhard Herzog <[email protected]>
1582
1583 * test/test_load.py (TestAltPath.test_01_single_path_error_fix)
1584 (TestAltPath.test_02_path_error_fix_from_list)
1585 (TestAltPath.test_05_path_error_fix_from_list_changed)
1586 (TestAltPath.test_06_path_error_fix_from_list_fails): self.session
1587 is destroyed in tearDown, so there's no need to do it in a test
1588 case.
1589
1590 * Thuban/Model/load.py (SessionLoader.open_shapefile): Remove a
1591 debug print
1592
1593 2004-12-13 Bernhard Herzog <[email protected]>
1594
1595 * Extensions/svgexport/test/test_svgmapwriter.py
1596 (TestDrawSplines.setUp): Do not use super with the unittest
1597 classes because in Python 2.2 they're still old-style classes.
1598
1599 2004-12-13 Frank Koormann <[email protected]>
1600
1601 Alternative Path feature: When loading a (moved) session where
1602 shapefiles cannot be found, ask the user. Use the specified path
1603 if further shapefiles are missing. However, ask the usr for confirmation
1604 in such cases.
1605
1606 * test/test_load.py (TestAltPath): New, tests for alternative path feature
1607 in load_session()
1608 (Shapefile_CallBack): Helper, implements controllable callback.
1609
1610 * Thuban/UI/application.py (ThubanApplication.OnInit):
1611 Added "alt_path" to self.path
1612 (ThubanApplication.OpenSession): Added shapefile_callback as second
1613 callback similar to db_connection_callback.
1614 (ThubanApplication.run_alt_path_dialog): New, implementaion of
1615 shapefile_callback. In addition to raising the dialog the control of
1616 self.path('alt_path') is implemented here.
1617
1618 * Thuban/Model/load.py (SessionLoader.__init__): Added shapefile_callback.
1619 (SessionLoader.open_shapefile): Open shapefile, eventually with
1620 alternative path. This wrapps the "theSession.OpenShapefile(filename)"
1621 formerly used in start_fileshapesource()/start_layer().
1622 (SessionLoader.start_fileshapesource): Call open_shapefile().
1623 (SessionLoader.start_layer): Call open_shapefile().
1624 (load_session): Added shapefile_callback.
1625
1626 * Thuban/UI/altpathdialog.py: New, implements dialogs for alternative path
1627 feature (search / check).
1628
1629 * Doc/manual/thuban-manual.xml: Added documentation of new feature.
1630
1631 2004-12-11 Bernhard Reiter <[email protected]>
1632
1633 svgexport 0.9.2: Point size supports for maps.
1634
1635 * Extensions/svgexport/svgmapwriter.py: Added import of SHAPETYPE_POINT
1636 (def draw_point_shape): new parameter size defaults to 2 as before.
1637 (draw_shape_layer_incrementally): Moved draw_func log line higher.
1638 Added draw_func call with size when dealing with a point layer.
1639
1640 * Extensions/svgexport/__init__.py: bumped version to 0.9.2.
1641
1642 2004-12-11 Bernhard Reiter <[email protected]>
1643
1644 Made sure that newlines are inserted in the svg path d attributes
1645 to raise the chance that the line length will be below 255 characters,
1646 as recommended by REC SVG 1.1 in section 8.3.1.
1647
1648 * Extensions/svgexport/svgmapwriter.py(DrawPolygon):
1649 Adding \n before L's and changed whitespace handling.
1650
1651 * Extensions/svgexport/test/test_svgmapwriter.py:
1652 Adapted tests to new whitespace handling of DrawPolygon.
1653
1654 2004-12-11 Bernhard Reiter <[email protected]>
1655
1656 * Doc/technotes/coding_guidelines.txt: easy typo fixed.
1657
1658 * Extensions/svgexport/test/test_svgmapwriter.py:
1659 Removed test_drawbezier in favour of new test_drawspline3 and
1660 test_drawspline4 within new class TestDrawSplines(TestVirtualDC).
1661 All only to test DrawSpline.
1662
1663 * Extensions/svgexport/svgmapwriter.py(DrawSpline):
1664 New implementation now really using the strange algorithm of
1665 xfig 3.1's approximated splines and its conversion to postscript
1666 with one twist: SVG can do quadratic beziers, so skipped translation
1667 to cubic beziers.
1668 (TestWithDC): Typo in comment fixed.
1669
1670 2004-12-09 Martin Schulze <[email protected]>
1671
1672 * Thuban/Model/classgen.py: Added missing character encoding
1673
1674 * Extensions/wms/properties.py (OpenWMSProperties): removed
1675
1676 * Extensions/wms/parser.py (WMSCapabilitiesParser.error): Dropped
1677 support for get_srs_discrepancies() since there are no
1678 discrepancies anymore (was a thinko)
1679
1680 * Extensions/wms/layer.py (WMSLayer.GetMapImg): Improved graphic
1681 format priority now that more formats are supported globally by
1682 the render engine.
1683
1684 2004-12-08 Silke Reimer <[email protected]>
1685 * Extensions/ogr/ogrshapes.py: Substituted ogr-method CloseRings
1686 because it is not available in all versions of ogr
1687
1688 2004-12-08 Bernhard Reiter <[email protected]>
1689 * Extensions/ogr/__init__.py: Added empty __init__.py to heal
1690 global tests until a real one is commited.
1691
1692 2004-12-07 Nina Hüffmeyer <[email protected]>
1693
1694 * /Extensions/ogr/: Adding a new extension to read shapefiles with
1695 ogr. It is planned to add other vector formats.
1696
1697 * /test/runtests.py: Adding tests from /Extensions/ogr/test/.
1698
1699 2004-12-07 Jan-Oliver Wagner <[email protected]>
1700
1701 * /Extensions/svgexport/test/test_svgmapwriter.py: Reverting
1702 part of a (non-)fix to renable that the tests are always
1703 executed.
1704
1705 2004-12-07 Bernhard Reiter <[email protected]>
1706
1707 * Extensions/svgexport/test/test_svgmapwriter.py:
1708 Added test_drawbezier() to test DrawSpline().
1709
1710 * Extensions/svgexport/svgmapwriter.py(DrawSpline):
1711 Really implemented bezier drawing.
1712
1713 * Extensions/svgexport/__init__.py: Bumped version of svgexport
1714 to 0.9.1 because now the legend examples lines styles
1715 will be drawing with beziers.
1716
1717 2004-12-05 Martin Schulze <[email protected]>
1718
1719 * Thuban/UI/renderer.py (raster_format_map): Added PNG, TIFF and
1720 GIF as supported bitmap image formats (helpful for the WMS extension)
1721
1722 2004-11-30 Martin Schulze <[email protected]>
1723
1724 * Extensions/wms/test/test_ogclib.py (TestOGCLib.test_compareURLs):
1725 Improved the test for the internal compare method
1726
1727 2004-11-27 Jan-Oliver Wagner <[email protected]>
1728
1729 * Thuban/UI/about.py (About.__init__): Added
1730 Norbert Solymosi for hungarian translation and Ole Rahn
1731 as contrbutor. Moved Bernhard Reiter from Contributor
1732 to Developer.
1733
1734 2004-11-27 Bernhard Reiter <[email protected]>
1735
1736 * Extensions/svgexport/test/test_svgmapwriter.py:
1737 Removed Jan from author list as he did not change enough significant
1738 lines yet.
1739
1740 * Extensions/svgexport/__init__.py: Added Bernhard as author
1741 of the Extension.
1742
1743 2004-11-27 Jan-Oliver Wagner <[email protected]>
1744
1745 * po/hu.po: New. Hungarian translation. Contributed
1746 by Norbert Solymosi.
1747
1748 2004-11-26 Bernhard Herzog <[email protected]>
1749
1750 * Extensions/svgexport/test/test_svgmapwriter.py
1751 (Testobjectexport.test_transparent_polygon): Commented out some
1752 debug prints
1753
1754 2004-11-24 Jan-Oliver Wagner <[email protected]>
1755
1756 Fix broken tests for svg extension and added svg legend
1757 to Experimental menu.
1758
1759 * Extensions/svgexport/test/test_svgmapwriter.py: Fix to have
1760 the test run correctly even if the extension is a package.
1761 Also removed the "import Thuban" which makes no sense.
1762
1763 * Extensions/svgexport/__init__.py: Fix to have the extensions'
1764 test module also be executed from the global test routine.
1765 This is done by looking for the absense of the DISPLAY variable.
1766
1767 * Extensions/svgexport/maplegend.py: Moved the menu entry from Extensions
1768 to Experimental menu since this module has yet not reached a stable
1769 status (ie. 1.0).
1770
1771 2004-11-22 Bernhard Reiter <[email protected]>
1772
1773 * Extensions/svgexport/svgmapwriter.py:
1774 Added verbose variable and some logging depending on it.
1775 (class VirtualDC(XMLWriter)): Minor improvement in the polygon loop,
1776 because counting i is not necessary.
1777 (class Pen, class Brush): Added simple __str__ methods.
1778 (SVGRenderer.draw_polygone_shape): Fix #2698 (transparent polygons are
1779 not exported to svg file) Note: holes still unhandled.
1780
1781 * Extensions/svgexport/test/test_svgmapwriter.py:
1782 Made a baseclass TestWithDC for test needed a DC.
1783 Added tests for bug #2698 (transparent polygons are not
1784 exported to svg file):
1785 Testobjectexport.test_transparent_polygon()
1786
1787 * Thuban/Model/base.py (UnsetModified):
1788 Fixed some typos in docstring.
1789
1790 * Thuban/UI/baserenderer.py (BaseRenderer.draw_polygon_shape()):
1791 Added hints on the used algorithm for handling holes.
1792
1793 2004-11-20 Jan-Oliver Wagner <[email protected]>
1794
1795 Some face lifting for the examples.
1796
1797 * Examples/__init__.py: Make this directory a package.
1798
1799 * Examples/simple_extensions/__init__.py: Make this directory a package.
1800
1801 * Examples/simple_extensions/hello_world.py: Moved entry from Extensions
1802 menu to Examples menu.
1803
1804 * Examples/simple_extensions/simple_command.py: Some more comments,
1805 minor changes.
1806
1807 * Examples/simple_extensions/simple_tool.py: Minor changes.
1808
1809 2004-11-20 Jan-Oliver Wagner <[email protected]>
1810
1811 Changed way of extension registry for wms and added extension
1812 registry for umn_mapserver extension.
1813
1814 * Extensions/wms/__init__.py: Added registry entry and the importing
1815 of the actual wms module. Included a test for the required PyOGCLib.
1816
1817 * Extensions/wms/wms.py: Removed registry entry (moved to __init__.py).
1818
1819 * Extensions/umn_mapserver/__init__.py: Added registry entry and the
1820 importing of the actual umn mapserver management modules.
1821 Included a test for the required Python MapScript.
1822
1823 2004-11-20 Jan-Oliver Wagner <[email protected]>
1824
1825 Changed way of extension registry for importAPR, bboxdump
1826 and added extension registry for svgexport.extension registry for
1827 svgexport.
1828
1829 * Extensions/importAPR/__init__.py: Added registry entry and the importing
1830 of the actual importAPR module.
1831
1832 * Extensions/importAPR/importAPR.py: Removed registry entry (moved to
1833 __init__.py).
1834
1835 * Extensions/bboxdump/__init__.py: Added registry entry and the importing
1836 »···of the actual bboxdump module.
1837
1838 * Extensions/bboxdump/bboxdump.py: Removed registry entry (moved to
1839 »···__init__.py).
1840
1841 * Extensions/svgexport/__init__.py: Added registry entry and the importing
1842 of the svgsaver module.
1843
1844 * Extensions/svgexport/svgsaver.py: Moved the menu entry from Extensions
1845 to Experimental menu since this module has yet not reached a stable
1846 status (ie. 1.0).
1847
1848 2004-11-18 Jan-Oliver Wagner <[email protected]>
1849
1850 Now the hit test considers the size of point symbols.
1851
1852 * Thuban/UI/viewport.py (ViewPort._hit_point): Added optional parameter
1853 'size' defaulting to the previously fixed value 5.
1854 Extended doc-string.
1855 (Viewport._find_shape_in_layer): Resolved FIXME regarding flexibility
1856 for symbols.
1857 Now the size of the largest point symbol is determined to find out
1858 about whether the point has been hit.
1859 This fixes the problem that only clicks inside a fixed distance of
1860 5 where found.
1861
1862 2004-11-17 Jan-Oliver Wagner <[email protected]>
1863
1864 Another open issue fixed regarding sizeable symbols: correct rendering of
1865 selected symbols.
1866
1867 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
1868 Added consideration of the specific size of point symbols.
1869 The property for each point symbol is retrieved and the size applied
1870 for the rendering method.
1871 Added doc-string.
1872
1873 2004-11-16 Jan-Oliver Wagner <[email protected]>
1874
1875 Changed way of Extension Registry for gns2shp and profiling.
1876
1877 * Extensions/gns2shp/gns2shp.py: Removed registry entry (moved to
1878 __init__.py).
1879
1880 * Extensions/gns2shp/__init__.py: Added registry entry and the importing
1881 of the actual gns2shp module.
1882
1883 * Extensions/profiling/profiling.py: Removed registry entry (moved to
1884 __init__.py).
1885
1886 * Extensions/profiling/__init__.py: Added registry entry and the importing
1887 of the actual profiling module.
1888
1889 2004-10-28 Bernhard Reiter <[email protected]>
1890
1891 * Extensions/svgexport/: Minor improvements to doc strings.
1892
1893 2004-10-07 Jan-Oliver Wagner <[email protected]>
1894
1895 Further elements for sizable point objects now
1896 making this feature usable though not yet complete.
1897
1898 * Thuban/Model/save.py (SessionSaver.write_classification): Write
1899 attribute 'size' for cldata when the shape layer is of point type.
1900 This also now make the test_load.py tests happy.
1901
1902 * Thuban/Model/classgen.py (CustomRamp.GetProperties): Added size
1903 gradient.
1904
1905 * Thuban/UI/classifier.py (ID_SELPROP_SPINCTRL): Renamed to
1906 ID_SELPROP_SPINCTRL_LINEWIDTH.
1907 (ID_SELPROP_SPINCTRL_LINEWIDTH): New Id replaces ID_SELPROP_SPINCTRL.
1908 (ID_SELPROP_SPINCTRL_SIZE): New Id.
1909 (SelectPropertiesDialog.__init__): Added a second spin control
1910 for the size in case the corresponding layer is of point type.
1911 (SelectPropertiesDialog._OnSpin): Renamed to _OnSpinLineWidth.
1912 (SelectPropertiesDialog._OnSpinLineWidth): New. Former _OnSpin.
1913 (SelectPropertiesDialog._OnSpinSize): New. Set size of property
1914 and refresh preview.
1915
1916
1917
1918 2004-10-04 Martin Schulze <[email protected]>
1919
1920 * Extensions/wms/test/test_parser.py
1921 (TestWMSCapabilitiesParser.test_compareLists): Added missing
1922 self-test for compareLists()
1923 (TestWMSCapabilitiesParser.test_compareDicts): Added missing
1924 self-test for compareDicts()
1925 (TestWMSCapabilitiesParser.test_compareLists): Adding more tests
1926 to verify the test routine fails with non-equal arguments
1927 (TestWMSCapabilitiesParser.test_compareDicts): Adding more tests
1928 to verify the test routine fails with non-equal arguments
1929
1930 2004-10-03 Jan-Oliver Wagner <[email protected]>
1931
1932 First elements for sizeable point objects.
1933
1934 * Resources/XML/thuban-1.1.dtd: Added size attribute to cldata.
1935
1936 * Data/iceland_sample_size.thuban: New. Sample for sized point objects.
1937
1938 * test/test_load.py (ClassificationTest.TestLayers): Added SetSize in case
1939 of a corresponding argument is given.
1940 (TestSymbolSize): New. Test the size attribute of cldata.
1941
1942 * Thuban/Model/classification.py: Removed some trailing whitespaces.
1943 (ClassGroupProperties.__init__): Set default size.
1944 (ClassGroupProperties.SetProperties): Set the size.
1945 (ClassGroupProperties.GetSize): New. Return the size.
1946 (ClassGroupProperties.SetSize): New. Set the size.
1947 (ClassGroupProperties__eq__): Compare also size.
1948 (ClassGroupProperties__repr__): Print also size.
1949
1950 * Thuban/Model/load.py (SessionLoader.start_cldata): Also parse
1951 the size attribute.
1952
1953 * Thuban/UI/classifier.py (ClassDataPreviewer.Draw): Added doc-string.
1954 Also, now there is a return value that indicates whether the drawing
1955 size exceeded the given rect extent and if so the new extent.
1956 Finally, point objects are drawn depending on the size. If either
1957 the width or height is exceeded, the new extent is returned.
1958 (ClassRenderer.Draw): Now when calling the previewer drawing function,
1959 evaluate the return value and, if not None, adapt the grid widget size
1960 accordingly and redraw again.
1961
1962 * Thuban/UI/baserenderer.py (BaseRenderer.draw_shape_layer_incrementally):
1963 If the draw function is for points, call it with the size as additional
1964 parameter.
1965 (BaseRenderer.draw_point_shape): Added additional, optional parameter for
1966 the size. Compute the radius using the size.
1967
1968 * Extensions/importAPR/apr.py (APR_BMkSym.GetThubanProp): Now
1969 that Thuban supports size, apply this correctly.
1970
1971 * Extensions/importAPR/importAPR.py: Bumped version to 0.1.1.
1972
1973 2004-10-03 Jan-Oliver Wagner <[email protected]>
1974
1975 * Doc/manual/thuban-manual-de.xml: Started translation of
1976 Map chapter.
1977
1978 2004-10-01 Martin Schulze <[email protected]>
1979
1980 * Extensions/wms/properties.py (wmsProperties.__init__): Extended
1981 argument for general use through properties-dialog selector
1982
1983 * Thuban/UI/classifier.py: Register properties dialog classes for
1984 both provided layer classes/types.
1985
1986 * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): The
1987 map can be retrieved through the parent which is passed to the
1988 constructor anyway and doesn't require an argument of its own,
1989 required for the unification of arguments for general use through
1990 properties-dialog selector.
1991 (MainWindow.OpenOrRaiseDialog): Move the logic for checking
1992 whether a dialog is already opened (and raising it to the users
1993 attention) and creating a new dialog into a function of its own
1994 (MainWindow.OpenLayerProperties): Use the new OpenOrRaiseDialog()
1995 method
1996 (MainWindow.OpenLayerProperties): Utilise the new ClassMapper for
1997 global registration of properties dialog classes (which are indeed
1998 layer-specific).
1999
2000 * Thuban/UI/classifier.py (Classifier.__init__): Unify arguments
2001 for general use through properties-dialog selector, the map can be
2002 retrieved through the parent and doesn't require an argument of
2003 its own.
2004
2005 * Extensions/wms/wms.py: Register the properties dialog class for
2006 the provided WMS layer
2007
2008 2004-09-28 Jan-Oliver Wagner <[email protected]>
2009
2010 New feature: Registry for Extensions.
2011
2012 * Thuban/UI/extensionregistry.py: This module defines a registry for
2013 Extensions.
2014
2015 * Thuban/UI/about.py (About.__init__): Added description
2016 of the registered extensions with all of the information.
2017
2018 * Thuban/Model/extension.py (Extension): Improved doc-string.
2019
2020 * Extensions/gns2shp/gns2shp.py, Extensions/importAPR/importAPR.py,
2021 Extensions/bboxdump/bboxdump.py, Extensions/profiling/profiling.py,
2022 Extensions/wms/wms.py: Added registration of the extension.
2023
2024 2004-09-27 Bernhard Reiter <[email protected]>
2025
2026 More fixes to svgexport to make used ids unique and
2027 conforming to XML's Name production.
2028
2029 * Extensions/svgexport/test/test_svgmapwriter.py: Added new tests
2030 test_xml_id_constraints(), test_make_ide_nosetbaseid() and
2031 test_make_id_nonintegersetid(). Switched SetID and SetBaseID.
2032 Added Bernhard R. as author.
2033 * Extensions/svgexport/svgmapwriter.py (make_id): Using "_" as
2034 concatenation char now (makes test_make_ide_nosetbaseid() valid).
2035 Also transform second id part with "%d" and catch the TypeError
2036 to raise SVGMapWriterError (making test_make_id_nonintegersetid() ok).
2037 Corrected typo inBernhard's author line.
2038 (SetBaseID): Return the transformed base id. Transform characters
2039 which are not alnum() or in ".-_" to binascii.b2a_hex(). Added
2040 import binascii. If to be set string starts with "xml" or so, add "t".
2041 (draw_shape_layer_incrementally): use the returned value of SetBaseID
2042 for used_baseids checks.
2043
2044 2004-09-25 Bernhard Herzog <[email protected]>
2045
2046 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
2047 Remove a debug print and some tab characters.
2048
2049 2004-09-25 Bernhard Reiter <[email protected]>
2050
2051 * Extensions/svgexport/svgmapwriter.py: Added Bernhard R. as Author.
2052 (SetBaseID, SetID, make_id): Improved docstring comments to explain
2053 the interaction of the three functions and the XML id contrains.
2054
2055
2056 2004-09-23 Jan-Oliver Wagner <[email protected]>
2057
2058 * Doc/ThubanModel.xmi: New. UML file for Thuban Model
2059 Module.
2060
2061 * Doc/README: Added info on ThubanModel.xmi.
2062
2063 2004-09-23 Jan-Oliver Wagner <[email protected]>
2064
2065 * Doc/README: New. Some info about how to generate technical
2066 documentation from the source code.
2067 This text was send to the Thuban developer mailing list on
2068 September 21st 2004 by Bernhard Reiter.
2069
2070 2004-09-21 Bernhard Reiter <[email protected]>
2071
2072 Improved the svgexport to only use unique ids. Will issues
2073 an error message dialoge when two layer names are the same.
2074 ShapeIDs are now added with a dash within the svg ids.
2075
2076 * Extensions/svgexport/svgmapwriter.py (SVGMapWriterError): New.
2077 * Extensions/svgexport/test/test_svgmapwriter.py: Added imports
2078 (TestSVGRenderer): New test class with test_make_in() and
2079 test_check_for_layer_name_clash()
2080 * Extensions/svgexport/svgmapwriter.py (SVGRenderer): Fixed __init__()
2081 and draw_shape_layer_incrementally() to not use a baseid twice,
2082 satisfying test_check_for_layer_name_clash()
2083 (VirtualDC.make_id): Use a dash between baseit and id, satisfies
2084 test_make_in().
2085 * Extensions/svexport/svgsaver.py: Import SVGMapWriterError, wxOK
2086 and wxICON_HAND.
2087 (write_to_svg): Put dc and rendering in a try statement and on
2088 catching SVGmapWriterError notify the user and delete the target file.
2089
2090 2004-09-20 Bernhard Reiter <[email protected]>
2091
2092 * Model/base.by, Model/layer.py: Fixed typos in docstrings.
2093
2094 2004-09-03 Jan Schüngel <[email protected]>
2095
2096 * Extensions/umn_mapserver/mapfile(MF_Class.add_thubanstyle): Fix a
2097 small bug with the line color. Now the line color will now only set
2098 if it is set in Thuban an not Transparent.
2099
2100 * Extensions/umn_mapserver/mf_export(tblayer_to_map): Fixed a bug with
2101 deleting the layers from mapfile. Now all layers will delete backwards
2102 from the last.
2103
2104 2004-08-20 Silke Reimer <[email protected]>
2105
2106 * Thuban/Model/layer.py:
2107 Fixes bug in projection handling: Otherwise very large region might not
2108 have valid values in the layer's projection.
2109
2110 2004-08-20 Silke Reimer <[email protected]>
2111
2112 * Thuban/UI/about.py:
2113 small changes to be consistent with coding style.
2114
2115 2004-08-13 Martin Schulze <[email protected]>
2116
2117 * Extensions/wms/test/test_ogclib.py (TestOGCLib.compare_URLs):
2118 Adjusted a comment
2119
2120 2004-08-11 Silke Reimer <[email protected]>
2121
2122 * Thuban/UI/about.py: Small changes to encoding related stuff to avoid
2123 too many and too enhanced imports of locale
2124
2125 2004-08-10 Silke Reimer <[email protected]>
2126
2127 * Thuban/UI/about.py: Fixed encoding problem of about dialog: Added
2128 function unicodeToLocale() to convert special characters to users
2129 locale encoding
2130
2131 2004-08-10 Jan-Oliver Wagner <[email protected]>
2132
2133 * Doc/technotes/coding_guidelines.txt: Added rule 'Method names start with
2134 lower case letter'
2135
2136 2004-08-09 Jan Schüngel <[email protected]>
2137
2138 * ChangeLog: Rewrite the last ChangeLog entry to follow
2139 the standard way.
2140
2141 * Extensions/umn_mapserver/mapfile: Moved the import AnnotationLayer to
2142 the function where it is needed, because it don't works if it stands
2143 at the beginning.
2144 (MF_Layer.__init__): Removed the extra numclassed variable. Now
2145 numclasses from the mapscript will be used.
2146 (MF_Layer.get_index): New. Return the index of the layer in mapfile.
2147 (MF_Layer.set_classes): New. A Classlist will be set to the layer.
2148 (MF_Layer.set_metadata): New. A Metadata mapscript object will set.
2149 (MF_Layer.remove_allclasses): New. All class of the layer will remove.
2150 (MF_Map.create_new_layer): New. A new Layer is created and associated
2151 with the mapscript object.
2152 (MF_Map.set_layerorder): New. The Layer order like in thuban is set in
2153 the mapscript.
2154 (MF_Map.add_thubanlayer): Now a new layerobj is created if no one is
2155 linked to the layer in thuban, else the layerobject linked to the
2156 thubanlayer will be used.
2157 AnnotationLayer will now store the filename of the shapefile.
2158 (MF_Map.remove_layer): If a layer is removed the associated object
2159 must be set new.
2160
2161 * Extensions/umn_mapserver/mf_export.py(tb_layer_to_map): Add all
2162 layers which are exists in thuban to the mapobj. All removed Layers
2163 will be removed from the mapobj.
2164 Added comments to all functions.
2165 (thuban_to_map): No layer will be removed here.
2166
2167 * Extensions/umn_mapserver/mf_handle.py
2168 (_has_umn_mapobj_and_selectedlayer): Activating the layer menu. Now
2169 Layersettings for the mapserver kann be edited.
2170
2171 * Extensions/umn_mapserver/mf_import.py: Now all layers which are
2172 imported, will be linked with the associated MF_Layer.
2173 (import_mapfile): All layers, which are not selected, will be removed.
2174 Disable the "import layer from mapfile" menu option.
2175
2176 * Extensions/umn_mapserver/sample/iceland.map: Set the status of the
2177 Annotation Layer from DEFAULT to OFF. The DEFAULT setting turns the
2178 layer on permanently.
2179
2180 2004-08-03 Jan Schüngel <[email protected]>
2181
2182 * Extensions/umn_mapserver/mapfile.py(MF_Metadata.remove_allmetadata):
2183 New. This function removes all metadata
2184 (MF_Layer.set_group): New. Set the group setting.
2185 (MF_Layer.get_group): New. Get the group setting.
2186 (MF_Map): Removed the extra numlayers variable, used the mapscript
2187 parameter instead.
2188 (MF_Map.get_numlayers): New. This get numlayers.
2189 (MF_Map.remove_all_layers): New. Removes all layers from the mapobj.
2190 (MF_Map.add_thubanlayer): Replaced the exception handling by a check
2191 if the object is an instance. Also added the annotation layer here to
2192 export, but only the layer is created in the mapfile.
2193
2194 * Extensions/umn_mapserver/mf_export.py(export_mapfile): Removed
2195 the check if a mapobj exist, because its not needed anymore. The
2196 export function is only available if a mapobj exist.
2197 Use the new function to remove all layers.
2198
2199 * Extensions/umn_mapserver/mf_handle.py(Layer_Dialog): Added a group
2200 option and the metadata button. The layer dialog is temporary disabled.
2201 (Metadata_CustomDataTable): Added some functions to show the grid
2202 correct.
2203
2204 * Extensions/umn_mapserver/mf_import.py: Moved the code for showing
2205 the number of layer from import_mapfile to this function.
2206 (AnnotationLayer): New. This Class shows the Annotation layer in
2207 thuban. The layer don't do anything. It's only to show the layer
2208 and to save the layer order.
2209 (add_annotationlayer): New. Import an annotation layer to thuban.
2210 (select_layer2import): New. Import only layers to thuban and not
2211 the other settings like projection or scalebar.
2212 (create_new_mapfile): Moved the _has_umn_mapobj function and the
2213 create_new_mapfile functions from mf_handle.py to mf_import.py.
2214
2215 * Extensions/umn_mapserver/sample/iceland.map: Added the group
2216 parameter to the roads and cultural layers. Also added a new
2217 Annotation Layer for the cultural points.
2218
2219 * Extensions/umn_mapserver/sample/iceland.html: Added the select
2220 option for the annotation layer.
2221
2222 * Extensions/umn_mapserver/sample/index.html: Added the start
2223 parameter for the annotation layer.
2224
2225 2004-08-01 Jan-Oliver Wagner <[email protected]>
2226
2227 * Doc/manual/thuban-manual-de.xml (Chapter Session Management):
2228 translation completed.
2229
2230 * Doc/manual/thuban-manual.xml (Chapter Session Management):
2231 Fixed unprecise description for Save Session.
2232
2233 2004-07-31 Jan-Oliver Wagner <[email protected]>
2234
2235 Started translation of Users Manual into german.
2236
2237 * Doc/manual/thuban-manual-de.xml: New. German Users Manual.
2238
2239 * Doc/manual/Makefile: Added build instructions for german
2240 users manual.
2241
2242 * Doc/manual/thuban-manual.xml: Minor corrections in Introduction.
2243
2244 2004-07-28 Jan Schüngel <[email protected]>
2245
2246 * Extensions/umn_mapserver/mapfile.py(MF_Metadata): Changed all class
2247 functions. Now all metadata will handle by the function and its not
2248 needed to initialize it from outside. Therefor the associated mapobj
2249 will be stored in the Metadata Object. So we can use the special
2250 functions from the associated mapobj to get the Metadata.
2251 Therefor all initialization code for the metadata is removed from the
2252 other classes.
2253 (MF_Layer): Added a function to get the metadata object.
2254 (MF_Map): Added a function to set the mappath, the path where
2255 the mapfile ist stored.
2256
2257 * Extensions/umn_mapserver/mf_export.py(thuban_to_map): Changed the code
2258 to set the extent in the mapfile. Now the code is set by the displayed
2259 data in the Thuban-view.
2260 (export_mapfile): The shapepath is now set empty, until relative
2261 pathnames are supported.
2262
2263 * Extension/umn_mapserver/mf_handle.py: Added a dialog to handle
2264 metadata. Yet only mapfile metadata are supported. Layer and class
2265 supported are not implemented.
2266 Added a dialog to handle layer informations. The dialog only shows the
2267 selected layer at the moment.
2268
2269 * Extensions/umn_mapserver/mf_import.py(import_mapfile): Changed the
2270 code for setting the extent in thuban. Now the extent is set to the
2271 given extent from the mapfile.
2272 Fixed a logical mistake. Now the extent is set when realy a layer is
2273 loaded, and not if one is selected to load.
2274
2275 * Extensions/umn_mapserver/sample/iceland.html: Added code to zoom and
2276 move the shown map in the browser.
2277
2278 * Extensions/umn_mapserver/sample/iceland.map: Added a new metadata
2279 line to the mapobj and added metadata to the political layer.
2280
2281 * Extensions/umn_mapserver/test/test_mapserver.py: Changed the test
2282 for Metadata.
2283
2284 2004-07-26 Martin Schulze <[email protected]>
2285
2286 * Thuban/Lib/classmapper.py (ClassMapper.has): Added the new
2287 ClassMapper
2288
2289 * test/test_classmapper.py (TestMapping.test_mapper): Added a Test
2290 case for the new ClassMapper
2291
2292
2293 2004-07-22 Bernhard Herzog <[email protected]>
2294
2295 * Thuban/UI/viewport.py (ViewPort.VisibleExtent): New. Return the
2296 visible extent of the map in projected coordinates
2297
2298 * test/test_viewport.py (SimpleViewPortTest.test_default_size)
2299 (SimpleViewPortTest.test_init_with_size): Add some VisibleExtent()
2300 tests.
2301 (SimpleViewPortTest.test_visible_extent): New. The real test for
2302 VisibleExtent()
2303
2304 2004-07-22 Bernhard Herzog <[email protected]>
2305
2306 * test/test_viewport.py: Use support.run_tests as the main
2307 function when running asa script.
2308
2309 2004-07-22 Jan Schüngel <[email protected]>
2310
2311 * Extensions/umn_mapserver/mf_export.py: Added "import os"
2312 Removed the old "import Thuban.UI.mainwindow" code.
2313 (tbextent_to_map): Removed the extra function and at the code direct
2314 to "thuban_to_map" function.
2315 (write_creatorcomment): Added. Now a short comment is added to the
2316 beginning of an generated mapfile.
2317 (export_mapfile): Now the Path and filename are saved in to variables,
2318 and not together in one variable. This is needed for the new
2319 write_creatorcomment function.
2320
2321 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Added the
2322 import module "re". Also added Range and the ClassGroupRange import
2323 from Thuban. Both are needed for the new range expression import.
2324 (create_rangeexpression): Added. Creates a Range Expression in Thuban
2325 style from a given mapfile expression.
2326 (added_rasterlayer): Make some small code changes. The shapepath is
2327 now stored in an extra variable and the clazz_name is set empty if no
2328 class name set in the mapfile.
2329 Changed the Error message for Range Expressions, becaus the new
2330 function create a error string which will be shown in the dialog.
2331
2332 * Extensions/umn_mapserver/test/test_mapserver.py: Added a test for the
2333 range expression import.
2334
2335 2004-07-21 Jan-Oliver Wagner <[email protected]>
2336
2337 * Extensions/umn_mapserver/README: Added hint that
2338 installation as root can be avoided. Removed all tabs.
2339
2340 2004-07-16 Bernhard Herzog <[email protected]>
2341
2342 * test/test_viewport.py
2343 (ViewPortTest.test_changing_map_projection): Check that changing
2344 the projection of an empty map shown in a viewport doesn't lead to
2345 exceptions in the viewport's handler for the
2346 MAP_PROJECTION_CHANGED messages
2347
2348 * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Only
2349 try to keep the same region visible when the map actually contains
2350 something
2351
2352 2004-07-15 Jan Schüngel <[email protected]>
2353
2354 * Extensions/umn_mapserver/mapfile.py: Added a function to get the
2355 mappath directly from the mapobj. Is needed because of the changes
2356 in mf_import.py.
2357 (MF_Layer.add_thubanclass): Added a new comment.
2358 (MF_Map.set_extent): Fixed a bug with exporting empty mapobj. If the
2359 mapobj is empty there is no extent get from thuban an so no one can
2360 set to th mapobj.
2361
2362 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Updated
2363 the discription.
2364 Split the funktion in to three smaller ones. The new functions are
2365 add_rasterlayer, add_polygonlayer and select_layer2import.
2366 Removed the mapfilepath and filepath initialisation, because its know
2367 include in the new functions.
2368 Now nothing will be imported if cancel is pressed in the
2369 layer choice dialog.
2370
2371 2004-07-14 Jan Schüngel <[email protected]>
2372
2373 * Extensions/umn_mapserver/mapfile.py: Added ClassGroupDefault to
2374 import.
2375 (MF_Symbolset): Removed the extra variable for numsymbols.
2376 (MF_Class.__init__): Added a comment to the exception clause.
2377 Removed the extent init, because it was not needed anymore.
2378 (MF_Layer.add_thubanclass): Added the code to set the class name to
2379 the expression value from thuban if no label is defined.
2380 Added the code to export Range expressions from thuban to the mapfile.
2381 (MF_Map.set_extent): Removed the exception and replace it by some if
2382 code. If the size of a map is not defined the size will be set to 1,1.
2383 This is necessary because if the extent is set, mapscript checks if
2384 the size is greater than zero.
2385 (MF_Web): Added the get and set function for the template.
2386
2387 * Extensions/umn_mapserver/mf_export.py: Added the function to check
2388 if a mapobject exists and used it to set the status of the menu items.
2389 If no mapfile exists the settings could not be edditied.
2390 Define after which menuitem the exportitem will include.
2391
2392 * Extensions/umn_mapserver/mf_handle.py: Removed the import
2393 Thuban.UI.mainwindow clause, because it is not needed.
2394 Added the command Refresh() to all "OnChangeColor()" functions,
2395 because the color preview window was not updated on a color change.
2396 Added the function to check if a mapobject exists and used it to set the
2397 status of the menu items. If no mapobject exists the settings could not
2398 be edditied.
2399 (Map_Dialog): Moved the imagetype selector from the
2400 Outputformat_Dialog to Map_Dialog and removed Outputformat_Dialog.
2401 (Web_Dialog): Removed the name label and added the template textbox.
2402
2403 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Replace
2404 the exception handling on loading the layers by an if statement. It
2405 is not necessary to us the exception there.
2406 The Filepath creation now use os.path.join to build the path.
2407
2408 * Extensions/umn_mapserver/test/test_mapserver.py: Moved the testMap
2409 definition from global to the setUp function. Now the testMap will
2410 initialize new on each test.
2411
2412 * Extensions/umn_mapserver/sample/iceland.map: Include three new
2413 classes in the Line Layer, to test logical Expressions.
2414 Set the status of the class "Point9" in the Point Layer to off
2415
2416 2004-07-13 Bernhard Herzog <[email protected]>
2417
2418 * Thuban/UI/baserenderer.py
2419 (BaseRenderer.render_map_incrementally): Fix a logic bug in the
2420 optimization that tries not to draw layers under a raster layer.
2421 The bug was harmless. All it effectively did was to produce The a
2422 strange messages about not being able to draw Layer instances for
2423 all vector layers below a raster layer which would be invisible
2424 anyway because the raster layer currently always covers the entire
2425 window
2426
2427 2004-07-08 Jan Schüngel <[email protected]>
2428
2429 * Extensions/umn_mapserver/mapfile.py: Added code to generade and get
2430 a list of supported outputformats. This formats are not alle supported
2431 because there is no possibility to get the outputformat without the
2432 name known. Make some formal changes to the code.
2433 (MF_Map.set_name()): Fixed a bug if the name is None.
2434
2435 * Extensions/umn_mapserver/mf_handle.py: Removed the image_type import
2436 statement, because its not needed anymore. The Outputformat is now
2437 given as string from the object. Make some formal changes to the code.
2438
2439 * Extensions/umn_mapserver/test/test_mapserver.py: Added new test for
2440 most of the new setting which were added during the last changes.
2441 Removed the MF_Size Test.
2442
2443 * Extensions/umn_mapserver/test/test.map: Added a new class to the
2444 cultural Layer to test expressions and the the status of that layer
2445 from on to default.
2446 Changed the data path the the correct Thuban Data
2447 Added the Outputformat Object and Symbol Object
2448
2449 2004-07-07 Jan Schüngel <[email protected]>
2450
2451 * Extensions/umn_mapserver/mapfile.py: Added some new
2452 settings to edit (outputformat, label, imagetype)
2453
2454 * Extensions/umn_mapserver/mf_handle.py: Added some setting to
2455 the Label Dialog and add the OutputDialog.
2456 Make some changes to the code order.
2457
2458 2004-07-06 Jan Schüngel <[email protected]>
2459
2460 * Extensions/umn_mapserver/mapfile.py: Added the symbolObj, pointObj
2461 and line Obj and add the scalebar_status_type, scalebar_style_type and
2462 scalebar_position_type.
2463 Added the symbol- and symbolsetObject (MF_Symbol,MF_Symbolset). The
2464 are only used to create a Symbol like the circle in Thuban.
2465 Added the scalebarObject (MF_Scalebar)
2466 (MF_Class): Added set_status and get_status.
2467 (MF_Layer.add_thubanclass): Added code to set the class status
2468 (MF_Map): Added code to handle the symbols and scalebar
2469 (MF_Label): Added the set_partials and get_partials functions
2470
2471 * Extensions/umn_mapserver/mf_export.py: Added MF_Symbol to import
2472 from mapfile. Added a function to create a circle object like the one
2473 from thuban if no one exists.
2474
2475 * Extensions/umn_mapserver/mf_handle.py: All colors are now set when
2476 press ok in the assosiated dialog and not at the end of the
2477 colordialog.
2478 Added the Dialog for the Scalebar.
2479 (Label_Dialog): Added the offset option
2480
2481 * Extensions/umn_mapserver/mf_import.py: Added code to import the
2482 status of the Classes.
2483 Fixed a bug with the projection. Now the to_meter parameter will be
2484 added to the Projection only if it doesn't exists.
2485
2486 2004-07-01 Jan Schüngel <[email protected]>
2487
2488 Added the functionality to handle the content thuban is not
2489 able to handle directly.
2490
2491 * Extensions/umn_mapserver/mf_handle.py: New. This module extents
2492 Thuban with the possibility to edit the mapfile content.
2493
2494 * Extensions/umn_mapserver/mf_import.py: Added the possibility
2495 to import mapfiles without any layer selected. So it is possible
2496 to edit the other settings in a mapfile.
2497 (import_mapfile): Added code to use the editing functions.
2498 Added the possibility to import the projection to a layer if one
2499 is defined.
2500 Status settings (On,Off) will now set in thuban (visible, invisible).
2501 fixed a bug with with classnames. If no classname is set in mapfile
2502 the value in Thuban will set to the expression.
2503
2504 * Extensions/umn_mapserver/mf_export.py(export_mapfile): Added the
2505 possibility to save a new mapfile or use the old one which is
2506 imported or new created.
2507 Added code to use the editing functions.
2508 Remove some not needed import statements
2509
2510 * Extensions/umn_mapserver/mapfile.py: Added new types which are
2511 need for the editing functions.
2512 Added needed set-functions for the editing functions.
2513 Added the possibility to export rasterimages.
2514 Added new classes (MF_Web, MF_Label, MF_Legend, MF_Symbol,
2515 MF_SymbolSet). MF_Symbol and MF_SymbolSet are not needed at the
2516 moment.
2517 (MF_Class.set_thubanstyle): Now point layers will set to a default
2518 symbol to show a circle in mapserver and not only a 1px dot.
2519 (MF_Style.__init__): Fixed a bug with the color. Color was not set
2520 correct before.
2521 (MF_Size): Removed, because it is not needed.
2522
2523 * Extensions/umn_mapserver/README: Added the hints to use the
2524 export and editing functions, too.
2525
2526 * Extensions/umn_mapserver/sample/iceland.map: Added the
2527 new parameter "UNITS METERS".
2528 Change the political layer to status OFF.
2529
2530 * Extensions/umn_mapserver/sample/README: Added some
2531 more details to setup the sample in the MapServer.
2532
2533 2004-06-26 Bernhard Reiter <[email protected]>
2534
2535 * Extensions/svgexport/test/test_svgmapwriter.py:
2536 Removed class VFile and used standard StringIO instead.
2537
2538 2004-06-23 Jan Schüngel <[email protected]>
2539
2540 Add the export function to the umn_mapserver extension.
2541
2542 * Extension/umn_mapserver/mf_export.py: New. This module extents
2543 Thuban with the possibility to export the Thuban content.
2544
2545 * Extensions/umn_mapserver/mapfile.py: Expand the classes to use
2546 with the export module. Especially added the possibility to
2547 add thuban objects directly to the map objects.
2548
2549 * Extensions/umn_mapserver/mf_import.py: Removed the wxCHANGE_DIR,
2550 because of the hint from Bernhard Herzog.
2551 Corrected the handling of absolute pathnames.
2552 Changed the Text of the Menu-Item, now the beginning is upper case.
2553
2554 * Extensions/umn_mapserver/README: Added the --with-tiff statement.
2555
2556 2004-06-16 Jan Schüngel <[email protected]>
2557
2558 Add a sample and make some changes.
2559
2560 * Extension/umn_mapserver/mf_import.py: Changed the wxPython.wx
2561 import from * to explicit used statements. Changed the
2562 Thuban.UI.mainwindow import phrase, too.
2563 (import_mapfile):Corrected a clerical mistake.
2564 Added wxCHANGE_DIR in OpenFile Dialog.
2565 Added a MultipleChoiceDialog, to select the layers to load from
2566 mapfile into thuban. Thereby the projection is only set if one layer
2567 is selected.
2568 Added the possibility to handle relative pathnames which uses
2569 up-level references.
2570 Removed some doubled code.
2571 Corrected an error with integer values used as label in thuban
2572 ClassGroup.
2573
2574 * Extensions/umn_mapserver/sample: New.
2575
2576 * Extensions/umn_mapserver/sample/README: New. Describes the
2577 usage of the sample files.
2578
2579 * Extensions/umn_mapserver/sample/iceland.map: New. This is
2580 a suitable .map-file for the iceland data.
2581
2582 * Extensions/umn_mapserver/sample/index.html: New. The template
2583 for the mapfile.
2584
2585 * Extensions/umn_mapserver/sample/iceland.html: New. Initialisation
2586 file for the Iceland Application on web.
2587
2588 * Extensions/umn_mapserver/README: Corrected a inaccuracy and added
2589 some details.
2590
2591 * Extensions/umn_mapserver/test/test_mapserver
2592 (mapserver_import_Test_generalClasses.test_MF_Color):
2593 Corrected the thubancolor test.
2594
2595 2004-06-15 Jan Schüngel <[email protected]>
2596
2597 * Extensions/umn_mapserver/README: New. Install instruction.
2598
2599 2004-06-14 Bernhard Reiter <[email protected]>
2600
2601 * libraries/thuban/cpl_mfile.h: Added copyright header.
2602
2603 * libraries/thuban/ cpl_mfile.cpp, cpl_mfile.h: Added non-protecting
2604 Free Software License so that it is most useful with gdalwarp
2605 and bmpdataset.
2606
2607 2004-06-14 Bernhard Herzog <[email protected]>
2608
2609 * Thuban/UI/multiplechoicedialog.py (__version__): Add missing
2610 import of wxPython.wx itself (as opposed to the contents of
2611 wxPython.wx). For some reason wxPython.wx is available as
2612 wxPython.wx.wx in at least some 2.4 releases. Fixes RT#2482
2613 wrt. wxPython 2.4.
2614
2615 2004-06-10 Jan Schüngel <[email protected]>
2616
2617 Initial version of new extension "umn_mapserver". This extension aims
2618 to manage configuration for the UMN MapServer application. This
2619 inital version just imports the .map-files and displays all, Thuban is
2620 capable of.
2621
2622 * Extensions/umn_mapserver, Extensions/umn_mapserver/test: New.
2623
2624 * Extensions/umn_mapserver/test/README: New. Describes how to run the
2625 tests.
2626
2627 * Extensions/umn_mapserver/test/test.map: New. This is a test
2628 .map-file for automated tests of the umn_mapserver extension of
2629 Thuban.
2630
2631 * Extensions/umn_mapserver/test/test_mapserver.py: New. Tests for
2632 UMN Mapserver classes.
2633
2634 * Extensions/umn_mapserver/__init__.py: New. Init to make this
2635 directory a package.
2636
2637 * Extensions/umn_mapserver/mapfile.py: New. Classes to represent
2638 '.map'-file objects.
2639
2640 * Extensions/umn_mapserver/mf_import.py: New. This module extends
2641 Thuban with the possibility to handle UMN MapServer mapfiles.
2642
2643 2004-06-03 Bernhard Herzog <[email protected]>
2644
2645 * Thuban/Model/layer.py (Layer.TreeInfo): Convert the bounding box
2646 to a tuple before using it as arguments to the % operator. This
2647 fixes the formatting issue filed in RT#2239 on 2004-01-13 and
2648 reported today on thuban-list by Jan Schüngel
2649
2650 * test/test_layer.py (TestLayerModification.setUp): Save the
2651 filename as an instance variable so we can refer to it in tests
2652 (TestLayerModification.test_tree_info): Uncomment this method
2653 again and make it work. This tests for the formatting issue
2654 filed in RT#2239 on 2004-01-13
2655
2656 2004-05-28 Bernhard Herzog <[email protected]>
2657
2658 * Thuban/UI/baserenderer.py: Fix some typos.
2659
2660 2004-05-18 Jan-Oliver Wagner <[email protected]>
2661
2662 * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed a bug
2663 by increasing a field size.
2664
2665 2004-05-17 Bernhard Herzog <[email protected]>
2666
2667 Update to newest shapelib and get rid of Thuban specific
2668 extensions, i.e. use the new DBFUpdateHeader instead of our
2669 DBFCommit kludge
2670
2671 * libraries/shapelib/shpopen.c: Update to version from current
2672 shapelib CVS.
2673
2674 * libraries/shapelib/shapefil.h: Update to version from current
2675 shapelib CVS.
2676
2677 * libraries/shapelib/dbfopen.c: Update to version from current
2678 shapelib CVS.
2679 (DBFCommit): Effectively removed since shapelib itself has
2680 DBFUpdateHeader now which is better for what DBFCommit wanted to
2681 achieve.
2682 We're now using an unmodified version of dbfopen.
2683
2684 * setup.py (extensions): Add the HAVE_UPDATE_HEADER macro with
2685 value '1' to the Lib.dbflibc extension. This simply reflects the
2686 shapelib and pyshapelib updates
2687
2688 2004-05-16 Jan-Oliver Wagner <[email protected]>
2689
2690 Finished introduction of Menu.FindOrInsertMenu.
2691
2692 * Extensions/drawshape/drawshape.py: Add the command
2693 to the experimental menu additionally to the toolbar.
2694
2695 * Extensions/svgexport/svgsaver.py: Use FindOrInsertMenu() instead of
2696 finding menu on its own.
2697
2698 * Doc/manual/thuban-manual.xml: updated sample file
2699 to use FindOrInsertMenu().
2700
2701 * Examples/simple_extensions/hello_world.py: Use FindOrInsertMenu()
2702 instead of finding menu on its own.
2703
2704 2004-05-11 Jan-Oliver Wagner <[email protected]>
2705
2706 * test/test_menu.py (MenuTest.test): Added testing
2707 of method Menu.FindOrInsertMenu.
2708
2709 2004-05-10 Jan-Oliver Wagner <[email protected]>
2710
2711 Introduce and use Menu.FindOrInsertMenu.
2712
2713 * Thuban/UI/menu.py (Menu.FindOrInsertMenu): New. Find a
2714 given menu or, if not found, insert it.
2715
2716 * Extensions/bboxdump/bboxdump.py, /Extensions/gns2shp/gns2shp.py,
2717 /Extensions/importAPR/importAPR.py, Extensions/profiling/profiling.py,
2718 /Extensions/wms/wms.py: Use FindOrInsertMenu() instead of finding
2719 menu on its own.
2720
2721 2004-05-06 Jan-Oliver Wagner <[email protected]>
2722
2723 Introduce a abstract ColorDialog class and remove
2724 and outdated file.
2725
2726 * Thuban/UI/proj4dialog.py: Removed. It is has been
2727 replaced by projdialog for quite a while and is not used
2728 anymore.
2729
2730 * Thuban/UI/colordialog.py: New. Abstraction for color selection
2731 dialog(s).
2732
2733 * Thuban/UI/classifier.py (SelectPropertiesDialog.__GetColor):
2734 Now calls the abstract ColorDialog instead of wxColourDialog.
2735 This also removed the dependency to Color class conversion
2736 from this function.
2737
2738 2004-05-04 Frank Koormann <[email protected]>
2739
2740 * Extensions/bboxdump/__init__.py: Fixed string left over from
2741 copying.
2742
2743 * Extensions/bboxdump/bboxdump.py (bboxdump):
2744 Use layer.ShapeStore().AllShapes() to loop over shapes instead of
2745 xrange(layer.NumShapes()). Compile the bboxmessage from a list
2746 of formatted outputs (string.join) instead of appending to the
2747 message. Two progress bar dialogs to report progress on the sometimes
2748 lenghty processing.
2749
2750 2004-04-22 Frank Koormann <[email protected]>
2751
2752 New Extension to dump bounding boxes of all shapes of the selected
2753 layer. An optional column can be specified to group the objects,
2754 in this case the bounding box is a union of the separate boxes.
2755 Dump can be displayed in a ScrolledMessageDialog or written to file.
2756 The Extension is simply a combination of available and well tested
2757 Thuban functionality.
2758
2759 * Extensions/bboxdump/__init__.py: New: Init to make this
2760 directory a package.
2761
2762 * Extensions/bboxdump/bboxdump.py: New: Dump bounding boxes of
2763 all shapes of the selected layer.
2764
2765 2004-04-22 Jan-Oliver Wagner <[email protected]>
2766
2767 * Thuban/UI/classgen.py (GenUniquePanel.__init__): Fixed two
2768 strings to be i18n now.
2769
2770 2004-04-18 Jan-Oliver Wagner <[email protected]>
2771
2772 Changing popup menu of legend from direct building
2773 to using the Menu construction as used for the mainwindow.
2774
2775 * Thuban/UI/mainwindow.py: New method commands: layer_to_top,
2776 layer_to_bottom, layer_visibility
2777 (MainWindow.LayerToTop): New. Put current layer to the top.
2778 (MainWindow.LayerToBottom): New. Put current layer to bottom.
2779 (MainWindow.HideLayer, MainWindow.ShowLayer, _has_visible_map):
2780 Replace 1,0 by True, False.
2781 (MainWindow.ToggleLayerVisibility): New. Toggle visibility of
2782 current layer.
2783 (MainWindow.LayerShowTable): Removed raising of dialog.
2784 (_has_selected_layer_visible): New. Support function.
2785
2786 * Thuban/UI/legend.py: ID_POP_xxx: removed.
2787 (LegendPanel.__init__): Removed EVT_MENU bindings.
2788 (LegendTree._OnRightClick): Replace direct creation of
2789 menu via wx Classes by applying the menu definition
2790 as of Menu class of menu.py.
2791
2792 2004-04-16 Jan-Oliver Wagner <[email protected]>
2793
2794 * Thuban/UI/exceptiondialog.py (ExceptionDialog.dialog_layout): Improved
2795 button string to stronger clearify that Thuban will be closed when hitting
2796 the button.
2797
2798 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Added docstring.
2799 Now for layers without a ShapeStore a corresponding message is given
2800 to the user, that this layer has no table to show.
2801
2802 2004-04-15 Martin Schulze <[email protected]>
2803
2804 * Extensions/wms/layer.py (WMSLayer.setWMSFormat): Need to
2805 recalculate the format for the internal render engine as well.
2806
2807 * Extensions/wms/properties.py (wmsProperties): First start for a
2808 properties dialog. It's functional for a first selection of
2809 layers, but still has some weired wxWidgets/GTK problems but
2810 beautification can be done later.
2811
2812 * Extensions/wms/layer.py: Added more documentation
2813 (WMSLayer.getFormats): New: Return list of supported image formats
2814 by the WMS server
2815 (WMSLayer.getLayers): New: Return the list of layer names
2816 supported by the WMS server
2817 (WMSLayer.getLayerTitle): New: Return the title of the named layer
2818 (WMSLayer.getWMSFormat): New: Return the image format that is used
2819 for WMS GetMap requests
2820 (WMSLayer.setWMSFormat): New: Set the image format that is used
2821 for WMS GetMap requests
2822 (WMSLayer.__init__): Move away from using only one layer to using
2823 a list of layers (unsorted at the moment, though).
2824 (WMSLayer.getVisibleLayers): New: Return the list of names for all
2825 visible layers
2826 (WMSLayer.setVisibleLayers): New: Set the list of names for all
2827 visible layers
2828
2829 * Extensions/wms/wms.py: Moved the WMS layer into layer.py in
2830 order to establish a clean structure.
2831
2832 * Extensions/wms/layer.py: Moved the WMS layer into a file on its
2833 own in order to establish a clean structure.
2834
2835 2004-04-13 Martin Schulze <[email protected]>
2836
2837 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Added
2838 support for oldstyle (WMS 1.0 apparently) image format
2839 specification.
2840
2841 * Extensions/wms/wms.py (WMSLayer.calcFormat): Reduce the list of
2842 supported graphic formats back to JPEG and BMP, PNG and others are
2843 too *cough* experimental... Sorry, I meant to filter this out
2844 before I committed this part. This should make the WMS extension
2845 run from CVS again.
2846 (wms_dialog): Reset an empty URL to None so that the subsequent
2847 program can depend on this, since the dialog will indeed return an
2848 empty URL, causing another declaration of love by Python.
2849
2850 * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerBBox):
2851 Whenever a native BoundingBox request cannot be fulfilled, check
2852 whether the requested SRS is EPSG:3426, in which case return the
2853 LatLonBoundingBox values.
2854
2855 * Extensions/wms/test/test_parser.py
2856 (TestWMSCapabilitiesParser.test_LayerSRS): Added a test for
2857 ignoring AUTO:* SRS.
2858 (TestWMSCapabilitiesParser.test_LatLonBoundingBoxes_as_bboxes):
2859 Added another test method to test whether the LatLonBoundingBox
2860 values will be returned if BoundingBox values are requested with
2861 SRS set to EPSG:3426.
2862
2863 * Extensions/wms/parser.py (WMSCapabilitiesParser.peekLayers):
2864 Added rudimentary support for non-EPSG SRS, i.e. ignore them for
2865 the moment by placing them into a variable which is currently
2866 unused. Also test whether the EPSG SRS is numerical as it should
2867 be and add an error message if it is not.
2868
2869 * Extensions/wms/test/sample.xml: Added AUTO:* SRS since they
2870 appear in the real world as well. Since we cannot handle them yet
2871 (OGCLib can't either), we will ignore them for the moment.
2872
2873 * Extensions/wms/parser.py: Use a variable for denoting the sample
2874 filename
2875 (WMSCapabilitiesParser.peekLayers): Added support for error
2876 messages during grok(). They will be aggregated in an array and
2877 may be displayed later. We may have to add a classification
2878 "Warning" and "Error" to this. That requires more experience,
2879 though, since not every error may be lethal.
2880
2881 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Raise the
2882 ShowTable() dialog/frame when the user attempts to display it
2883 while it has been opened before already and not closed again.
2884
2885 2004-04-11 Martin Schulze <[email protected]>
2886
2887 * Extensions/wms/infodialog.py: Adjusted the class documentation
2888
2889 * Extensions/wms/wms.py (WMSLayer.__init__, WMSLayer.GetMapImg):
2890 Switch to using Thuban{Begin,End}BusyCursor instead of the pure
2891 wxWidgets variants.
2892 (WMSLayer.__init__): The epsg_id variable is named top_srs now.
2893
2894 * Extensions/wms/infodialog.py: Added an information dialog that
2895 will display various information about the WMS current resource,
2896 so that additional information such as the title, the abstract,
2897 fees and access constraints can be displayed for the user if they
2898 are documented in the WMS XML.
2899
2900 2004-04-10 Martin Schulze <[email protected]>
2901
2902 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Adjusted
2903 string handling. It's "foo".lower() and not lower(foo) without
2904 lower imported from strings or something.
2905
2906 * Extensions/wms/wms.py (WMSLayer): Incorporated WMSCapabilities
2907 from capabilities.py and parser.py. Implement priority list for
2908 supported graphics formats, take care of wbmp != bmp. PNG, TIFF
2909 and GIF are supported here, but not yet by main Thuban. Hence,
2910 support for them may be removed later. Special contribution to
2911 usability: get wxWidgets to change the cursor when we're waiting
2912 for data from the network so the user won't start to worry. This
2913 causes a redrawing error/warning, though.
2914
2915 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Unlink
2916 the DOM object.
2917
2918 2004-04-01 Martin Schulze <[email protected]>
2919
2920 * Extensions/wms/capabilities.py: Adjusted documentation
2921 (WMSCapabilities.__init__): Improved documentation, fixed syntax
2922 (WMSCapabilities.saveCapabilities): Only catch IOError when
2923 handling files
2924 (WMSCapabilities.loadCapabilities): Only catch IOError when
2925 handling files
2926 __main__: corrected variable naming
2927 (WMSCapabilities.fetchCapabilities,loadCapabilities): Make this
2928 class a specialisation of WMSCapabilitiesParser as well. Also
2929 execute grok() after loading or fetching capabilities, if that
2930 went well, so that subsequent calls can already access the data.
2931 (WMSCapabilities.getVersion): Export the used version of the
2932 GetCapabilities request, so we can use it for subsequent calls,
2933 i.e. for GetMap requests.
2934 (WMSCapabilities.fetchCapabilities): Added proper error handling
2935 when the GetCapabilities request failed, so that the surrounding
2936 program can act accordingly.
2937
2938 2004-03-30 Martin Schulze <[email protected]>
2939
2940 * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerSRS):
2941 Adjusted the getLayerSRS method to return the list of SRSes
2942 extracted from <SRS> elements instead of <BoundingBox> elements.
2943 Added a bit of documentation as well.
2944 (WMSCapabilitiesParser.checkLayerSRS): Removed integrity test
2945 since it was only implemented due to a misunderstanding.
2946
2947 * Extensions/wms/test/test_parser.py
2948 (TestWMSCapabilitiesParser.test_LayerSRS): Adjust the tests to
2949 reflect the corrected interpretation of the standard: i.e. a layer
2950 does not have to define a BoundingBox for all SRSes it supports.
2951 Hence the <SRS></SRS> specification is authoritative, not the list
2952 of BoundingBoxes.
2953 (TestWMSCapabilitiesParser.test_BoundingBoxes): Added a new test
2954 to ensure None is returned for a non-existing SRS.
2955 (TestWMSCapabilitiesParser.test_grok): Removed test_grok method
2956 since it is not applicable anymore. Listing more SRSes in <SRS>
2957 elements is valid according to the specs.
2958
2959 2004-03-26 Bernhard Reiter <[email protected]>
2960
2961 * README: Nicer formatting of text. Improved descriptions.
2962 Reflected wxWidgets name change.
2963
2964 * Thuban/UI/about.py: Extended copyright to 2004 and added
2965 information about the thuban-devel mailinglist.
2966
2967 2004-03-24 Martin Schulze <[email protected]>
2968
2969 * Extensions/wms/capabilities.py: Renamed the class to contain
2970 'WMS', also added a linebreak where required
2971
2972 * Extensions/wms/parser.py: Finally added the XML parser for the
2973 GetCapabilities response.
2974
2975 * Extensions/wms/test/sample.xml: Adjusted the sample file so that
2976 <SRS> elements match the <BoundingBox> elements, except for the
2977 layer 'beschriftung'.
2978
2979 * Extensions/wms/test/test_parser.py: Encode non-ascii strings
2980 since Python uses unicode strings internally, otherwise
2981 comparisons will fail. Removed tests for getLayerBBoxSRS() since
2982 the SRS will be calculated anyway and this method is obsoleted by
2983 getLayerSRS(). Denote SRS as strings and not as cardinal numbers.
2984 Move loading the sample file into the setUp method. Added a test
2985 for finding the integrity problem in the sample response.
2986 Improved formatting.
2987
2988 * Extensions/wms/domutils.py: Added convenience routines for
2989 handling of Document Object Model (DOM) nodes.
2990
2991 * Extensions/wms/test/test_domutils.py: Added a test for the
2992 domutils module
2993
2994 2004-03-19 Martin Schulze <[email protected]>
2995
2996 * Extensions/wms/test/test_parser.py (TestWMSCapabilitiesParser):
2997 Moved path detection and adding into a module of its own,
2998 adjustpath, which exports thubandir as main Thuban directory.
2999
3000 * Extensions/wms/test/test_ogclib.py (TestWMSLib): Moved path
3001 detection and adding into a module of its own, adjustpath, which
3002 exports thubandir as main Thuban directory. Reorganised the
3003 module in order to support the SkipTest feature for Thuban test
3004 cases.
3005
3006 * Extensions/wms/test/adjustpath.py: Moved path detection and
3007 adding into a module of its own.
3008
3009 2004-03-18 Martin Schulze <[email protected]>
3010
3011 * Extensions/wms/test/test_parser.py: Added another test for
3012 checking whether the WMS XML parser (to be implemented) returns
3013 the information we expect. This requires a sample WMS WML file
3014 (sample.xml) which has been extracted from the frida server and
3015 "improved" manually.
3016
3017 * Extensions/wms/test/test_ogclib.py: Added legacy code to add the
3018 main Thuban directory to the path in order to be able to import
3019 random modules. Adjusted the PyOGCLib detection to reuse the
3020 information gathered. Also added a note about the PYTHONPATH
3021 environment variable.
3022
3023 * Extensions/wms/test/test_ogclib.py: The format specification is
3024 a mime-type, not a graphic format, hence image/jpeg wou ld be the
3025 proper format and not JPEG. We'll also have to take care of the
3026 encoding of / as %2F.
3027
3028 2004-03-16 Martin Schulze <[email protected]>
3029
3030 * Extensions/wms/test/test_ogclib.py: Added a (hopefully)
3031 comprehensive test for the getMapURL method, built compare URLs
3032 according to the documentation in OGC 01-068r3
3033
3034 * Extensions/wms/capabilities.py (WMSCapabilities): Added the
3035 class WMSCapabilities to manage capabilites, will incorporate
3036 parsing the capabilities response and provide details for other
3037 classes.
3038
3039 2004-03-12 Bernhard Herzog <[email protected]>
3040
3041 Support views in addition to normal tables in the postgis
3042 shapestore
3043
3044 * Thuban/Model/postgisdb.py
3045 (PostGISShapeStore._fetch_table_information): Add a fallback for
3046 the case where the table name is not in the geometry_columns
3047 table. This is usually the case for views. Also, set
3048 self.shapestore here.
3049 (PostGISShapeStore.ShapeType): No need to query the database all
3050 the time. The shape type is now determined in
3051 _fetch_table_information
3052
3053 * test/postgissupport.py (PostgreSQLServer.new_postgis_db)
3054 (PostgreSQLServer.get_static_data_db, PostGISDatabase.__init__):
3055 New parameter to specify views.
3056 (PostGISDatabase.has_data): Also compare the views. New views
3057 parameter
3058 (PostGISDatabase.initdb): Create the views.
3059 (PostgreSQLServer.get_default_static_data_db): Add the v_landmarks
3060 view
3061
3062 * test/test_postgis_db.py
3063 (TestPostGISShapestorePointFromViews): New. Test a
3064 PostGISShapeStore with a view
3065 (TestPostGISShapestorePointOIDAsGIDColumn.setUp): Pass the name of
3066 the geometry_column explicitly to test whether that works
3067
3068 2004-03-12 Bernhard Herzog <[email protected]>
3069
3070 Final step for explicit id/geometry columns: Loading and saving
3071
3072 * Resources/XML/thuban-1.1.dtd: New. Derived from thuban-1.0.dtd
3073 with the following changes:
3074 (dbshapesource): Two new attributes id_column and geometry_column
3075
3076 * Thuban/Model/save.py (SessionSaver.write): Use the new dtd
3077 (SessionSaver.write_session): Use the new namespace
3078 (SessionSaver.write_data_containers): Write the new dbshapesource
3079 parameters
3080
3081 * Thuban/Model/load.py (SessionLoader.__init__): New namespace for
3082 the new file format version
3083 (SessionLoader.start_dbshapesource): Handle the new db parameters
3084
3085 * test/test_save.py: Update to the new dtd and namespace
3086 (SaveSessionTest.test_save_postgis): Update the NonConnectionStore
3087 mock object to provide a working IDColumn method.
3088
3089 * test/test_load_1_0.py: New. Copy of the test_load.py before
3090 today's changes but with the round-trip tests removed.
3091
3092 * test/test_load_0_9.py: Update doc-string.
3093
3094 * test/test_load.py: Update all .thuban files to the new dtd and
3095 namespace.
3096 (TestPostGISLayer.file_contents): Add the new dbshapesource
3097 paramters
3098
3099 2004-03-11 Bernhard Herzog <[email protected]>
3100
3101 Next step for explicit id/geometry columns: User interaction
3102
3103 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Rework how
3104 the dialog is constructed. Add combo boxes to select id and
3105 geometry column. Rename some instance variables.
3106 (ChooseDBTableDialog.GetTable): Return id and geometry column
3107 names
3108 (ChooseDBTableDialog.OnTableSelect): New. Event handler for
3109 selections in the table list
3110
3111 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Use id_column
3112 and geometry_column
3113
3114 * Thuban/Model/session.py (Session.OpenDBShapeStore): Add the new
3115 parameters for id_column and geometry column of PostGISShapeStore
3116 here as well.
3117
3118 * Thuban/Model/postgisdb.py (type_map): Add ROWID psycog type.
3119 (_raw_type_map): New. Map raw PostgreSQL type ints to thuban types
3120 (PostGISConnection.GeometryTables): Use a better query to
3121 determine which relations in the database might be usable for
3122 shapestores. Now supports views as well but is more PostgreSQL
3123 specific
3124 (PostGISConnection.table_columns): New. Somewhat experimental
3125 method to let the db dialogs provide lists of columns to users so
3126 that they can select id and geometry columns.
3127 (PostGISTable.__init__): The default value of the id_column
3128 parameter is now None it still means "gid" effectively, though.
3129 (PostGISTable.IDColumn): New introspection method to return a
3130 column object for the id column
3131 (PostGISShapeStore.GeometryColumn): New introspection method to
3132 return a column object for the geometry column
3133
3134 * test/test_postgis_db.py
3135 (TestPostGISConnection.test_gis_tables_non_empty):
3136 Removed. Subsumed by the new:
3137 (TestPostGISConnection.test_gis_tables_with_views_and_tables):
3138 New. Tes the GeometryTables and table_columns methods with actual
3139 tables and views.
3140 (PointTests.test_id_column, PointTests.test_geometry_column):
3141 New. tests for the new methods.
3142 (TestPostGISShapestorePoint.setUp)
3143 (TestPostGISShapestorePointSRID.setUp)
3144 (TestPostGISShapestorePointExplicitGIDColumn.setUp): Fill the
3145 instance variables needed by the new tests
3146
3147 2004-03-11 Bernhard Herzog <[email protected]>
3148
3149 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): The row
3150 numbers given to ReadValue are ordinals.
3151
3152 2004-03-11 Bernhard Herzog <[email protected]>
3153
3154 Elimiate the requirement for PostGIS tables to have a column
3155 called "gid".
3156
3157 * Thuban/Model/postgisdb.py (PostGISTable.__init__): New parameter
3158 id_column to specify which column to use to identify rows. Also
3159 new instance variables id_column and quoted_id_column
3160 (PostGISTable.RowIdToOrdinal, PostGISTable.RowOrdinalToId)
3161 (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue)
3162 (PostGISTable.SimpleQuery): Use the id column name provided to the
3163 constructor instead of "gid"
3164 (PostGISShapeStore.__init__): New parameter id_column analogously
3165 to PostGISTable.__init__. This parameter is simply passed through
3166 to the base class constructor
3167 (PostGISShapeStore._create_col_from_description): Fix typo in
3168 doc-string
3169 (PostGISShapeStore.Shape, PostGISShapeStore.AllShapes)
3170 (PostGISShapeStore.ShapesInRegion): Use the id column name
3171 provided to the constructor instead of "gid"
3172
3173 * test/postgissupport.py
3174 (PostgreSQLServer.get_default_static_data_db): New static table
3175 landmarks_point_id with an id column != "gid. Update the comments
3176 a bit.
3177 (skip_if_addgeometrycolumn_does_not_use_quote_ident): Fix typo in
3178 doc-
3179 (upload_shapefile): New parameter gid_column to use a name other
3180 than "gid" for the column to store the shape ids
3181
3182 * test/test_postgis_db.py (TableTests): New. Mixin-class
3183 containing all tests previously in TestPostGISTable. The actual
3184 tests are the same but the code is a bit more configurable to
3185 allow for different id columns etc.
3186 (TestPostGISTable): Derive from TableTests now for the actual
3187 tests.
3188 (TestPostGISTableExplicitGIDColumn): New. Like TestPostGISTable
3189 except that it the landmarks_point_id table to test the id_column
3190 parameter
3191 (PointTests): Extend the doc-string
3192 (TestPostGISShapestorePointExplicitGIDColumn)
3193 (TestPostGISShapestorePointOIDAsGIDColumn): New classes derived
3194 from PointTests to test the explicit id_column parameter. One
3195 tests with the name of the column holding the shape ids, the other
3196 uses PostgreSQL's OID column. For the latter a number of methods
3197 have to be overwritten to make them independent of the actual id
3198 values.
3199
3200 2004-03-08 Silke Reimer <[email protected]>
3201
3202 Update debian directory:
3203
3204 * debian/changelog: Added new version.
3205 * deiban/rules: Updated management of patches (with cbds)
3206 * debian/control: Added cbds to dependencies
3207 * debian/patches/*: New. Adds better support for patches of thuban in
3208 debian
3209 * debian/menu: Syntax of menu changed slightly
3210 * debian/setup.py.patch: removed because it has been moved to
3211 debian/patechs/setup.py.patch
3212
3213
3214 2004-02-26 Bernhard Herzog <[email protected]>
3215
3216 Create the Doc/technotes directory for text files with information
3217 for developers
3218
3219 * Doc/technotes/README: New. README for the technotes
3220
3221 * Doc/technotes/coding_guidelines.txt: New. Coding guidelines for
3222 Thuban
3223
3224 * Doc/technotes/release_process.txt: New. Used to be
3225 HOWTO-Release. Now slightly adapted to technote formatting style.
3226
3227 * HOWTO-Release: Removed. It's contents are now in
3228 Doc/technotes/release_process.txt
3229
3230 2004-02-25 Bernhard Herzog <[email protected]>
3231
3232 * libraries/thuban/wxproj.cpp (get_wx_version): New. Return the
3233 version of wxWindows the module was compiled with so we can check
3234 that against the wxPython version.
3235
3236 * Thuban/version.py (thuban_branch, thuban_release): New variables
3237 controlling which and how Thuban versions are shown. See the
3238 comments for details.
3239 (verify_versions): Also check that the wx version that wxproj is
3240 compiled against matches that of the wxPython we use at runtime
3241
3242 2004-02-20 Bernhard Herzog <[email protected]>
3243
3244 * Extensions/wms/wms.py (epsg_code_to_projection): Use
3245 get_system_proj_file to read the epsg projections. The old way
3246 depended on the current directory being the top Thuban directory.
3247
3248 2004-02-20 Bernhard Herzog <[email protected]>
3249
3250 * Extensions/svgexport/test/test_svgmapwriter.py
3251 (TestVirtualDC.test_clippath): Remove a debug print
3252
3253 2004-02-20 Bernhard Herzog <[email protected]>
3254
3255 * Extensions/svgexport/__init__.py: New. Turn
3256 Extensions/svgexport into a package.
3257
3258 * Extensions/svgexport/svgmapwriter.py: Reorder the imports and
3259 doc-string a bit. The doc-string must come first, otherwise it's
3260 not a doc-string. The __future__ import must be the first thing
3261 after the doc-string. Use only double quotes in doc-strings.
3262 Single quotes trip up emacs syntax highlighting if the text
3263 contains apostrophes.
3264
3265 2004-02-20 Bernhard Herzog <[email protected]>
3266
3267 * Extensions/svgexport/test/__init__.py,
3268 Extensions/svgexport/test/test_svgmapwriter.py: New. Initial test
3269 suite for svgexport
3270
3271 * test/runtests.py (find_test_modules): New. Function with the
3272 module finding code from main.
3273 (main): Use find_test_modules to figure out the default test
3274 modules and take modules from Extensions.svgexport.test too.
3275
3276 2004-02-19 Bernhard Herzog <[email protected]>
3277
3278 * Thuban/UI/application.py (ThubanApplication.OnInit): Make sure
3279 the mainwindow has a reference to the map of the initial session.
3280 This fixes a bug introduced with the fix for RT#2245
3281
3282 2004-02-19 Bernhard Herzog <[email protected]>
3283
3284 * Extensions/svgexport/svgsaver.py,
3285 Extensions/svgexport/svgmapwriter.py,
3286 Extensions/svgexport/maplegend.py: Added again. This time in the
3287 correct place.
3288
3289 2004-02-17 Bernhard Herzog <[email protected]>
3290
3291 Fix for RT#2245
3292
3293 * Thuban/UI/application.py (ThubanApplication.OnInit): Initialize
3294 instance variables before trying to create any windows. Creating
3295 windows can start an event loop if e.g. message boxes are popped
3296 up for some reason, and event handlers, especially EVT_UPDATE_UI
3297 may want to access things from the application.
3298 (ThubanApplication.maps_changed): The mainwindow may not have been
3299 created yet, so check whether it has been created before calling
3300 its methods
3301
3302 * Thuban/UI/view.py (MapCanvas.OnIdle): Only try to redraw if we
3303 have a map
3304
3305 2004-02-17 Bernhard Herzog <[email protected]>
3306
3307 * test/test_svgmapwriter.py, Extensions/svgsaver.py,
3308 Extensions/svgmapwriter.py, Extensions/maplegend.py,
3309 extensions/svgexport/svgsaver.py,
3310 extensions/svgexport/svgmapwriter.py,
3311 extensions/svgexport/maplegend.py: Removed. These files were in
3312 the wrong places or didn't work at all.
3313
3314 2004-02-16 Bernhard Herzog <[email protected]>
3315
3316 * Thuban/UI/view.py (MapCanvas.Export): Remove accidentally added
3317 line
3318
3319 2004-02-16 Bernhard Herzog <[email protected]>
3320
3321 * Thuban/UI/view.py (MapCanvas.Export): Avoid UnboundLocalError.
3322
3323 2004-02-15 Markus Rechtien <[email protected]>
3324
3325 * Extensions/svgexport/svgmapwriter.py: New. Adds the capability
3326 to write a session to a file in SVG format.
3327 * Extensions/svgexport/svgsaver.py: New. Uses svgmapwriter.py
3328 to write a SVG map of a session.
3329 * Extensions/svgexport/maplegend: New. Writes a basic maplegend
3330 in SVG format for the current session.
3331
3332 2004-02-13 Bernhard Herzog <[email protected]>
3333
3334 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): When the layer
3335 can't be created, return immediately after displaying the error
3336 message.
3337
3338 2004-02-11 Bernhard Herzog <[email protected]>
3339
3340 Handle postgis tables with more than one geometry column.
3341
3342 * Thuban/Model/postgisdb.py
3343 (PostGISTable._fetch_table_information): Delegate the creation of
3344 column objects to a different method so that we can extend that in
3345 derived classes
3346 (PostGISTable._create_col_from_description): New. Column object
3347 creation part of _fetch_table_information
3348 (PostGISShapeStore._create_col_from_description): New. Extend
3349 inherited method to handle geometry columns
3350 (PostGISShapeStore.__init__): New parameter geometry_column to
3351 specify which geometry column to use. Optional but mandatory for
3352 tables with more than one geometry column
3353 (PostGISShapeStore._fetch_table_information): Also use the name of
3354 the geometry column when looking for the srid
3355 (PostGISShapeStore.ShapeType): Also use the name of the geometry
3356 column when looking for the shape type
3357
3358 * test/test_save.py (SaveSessionTest.test_save_postgis): Adapt
3359 NonConnectionStore to changes in the PostGISShapeStore
3360
3361 * test/test_postgis_db.py
3362 (TestPostGISSpecialCases.test_shapestore_two_geom_cols): Test
3363 PostGISShapeStore with tables having two geometry columns.
3364
3365 2004-02-10 Bernhard Herzog <[email protected]>
3366
3367 Fix some postgis problems. What remains to be done is real
3368 handling of SRIDs as they affect how reprojection is done
3369
3370 * Thuban/Model/postgisdb.py (quote_identifier): Fix typo in
3371 doc-string
3372 (PostGISShapeStore._fetch_table_information): New. Extend
3373 inherited method to retrieve srid
3374 (PostGISShapeStore.BoundingBox): Handle tables without data.
3375 extent yields NULL for those
3376 (PostGISShapeStore.ShapesInRegion): Use the srid of the table.
3377
3378 * test/test_postgis_db.py
3379 (TestPostGISSpecialCases.test_shapestore_empty_table): New test
3380 for the special case of a table without any data
3381 (TestPostGISShapestorePointSRID): New class with tests for a table
3382 that uses srids
3383 (PolygonTests): Fix a doc-string typo
3384
3385 * test/postgissupport.py (PostGISDatabase.__init__): New parameter
3386 reference_systems with a specification of spacial reference
3387 systems to create in the new db.
3388 (PostgreSQLServer.new_postgis_db)
3389 (PostgreSQLServer.get_static_data_db): New parameter
3390 reference_systems to be passed through ultimately to
3391 PostGISDatabase. In new_postgis_db also check whether an existing
3392 db already has the right srids
3393 (PostgreSQLServer.get_default_static_data_db): Add srids and a
3394 table that uses srids
3395 (PostGISDatabase.initdb): Create the entries for the reference
3396 systems
3397 (PostGISDatabase.has_data): Add reference_systems parameter to
3398 check for those too
3399 (upload_shapefile): New parameter srid to create tables with a
3400 specific srid
3401
3402 2004-02-06 Frank Koormann <[email protected]>
3403
3404 * po/pt_BR.po: Fixed charset
3405
3406 2004-02-05 Frank Koormann <[email protected]>
3407
3408 * po/pt_BR.po: Fixed format string for error message, missing %s
3409 added (Thuban/UI/application.py:273)
3410
3411 2004-02-03 Frank Koormann <[email protected]>
3412
3413 First version of Portuguese (Brazilian) translation
3414
3415 * po/pt_BR.po: New, translation of pot (2004-01-15 16:07+0300) for
3416 Brazilian Portuguese by Eduardo Patto Kanegae.
3417
3418 * Thuban/UI/about.py (About.__init.py__): Added Eduardo to the list of
3419 translators.
3420
3421
3422 2004-01-22 Frank Koormann <[email protected]>
3423
3424 * Doc/manual/thuban-manual.xml: Added section on installation of
3425 Thuban under Win32 systems. Fixed image path references in the postgis
3426 section. Some minor source formattings.
3427
3428 2004-01-21 Frank Koormann <[email protected]>
3429
3430 Make Thuban remember path selections (at least for one application run).
3431
3432 * Thuban/UI/application.py (Application.OnInit): Initialize path as a
3433 attribute of application object. Path is a dictionary of
3434 strings, currently with the items "data" and "projection".
3435 (Application.SetPath): New, stores path for the specified item.
3436 (Application.Path): New, return path for the specified item.
3437
3438 * Thuban/UI/mainwindow.py
3439 (MainWindow.OpenSession, MainWindow.SaveSessionAs,
3440 MainWindow.AddLayer, MainWindow.AddRasterLayer,
3441 MainWindow.TableOpen): Access "data" path information of the
3442 application.
3443
3444 * Thuban/UI/projdialog.py (ProjFrame._OnImport, ProjFrame._OnExport):
3445 Access "projection" path information of the application.
3446
3447 2004-01-05 Bernhard Herzog <[email protected]>
3448
3449 * po/ru.po: Updated translations from Alex Shevlakov
3450
3451 2004-01-05 Bernhard Herzog <[email protected]>
3452
3453 * po/Makefile, po/README: Move the description of how to generate
3454 the translation statistics to the README.
3455
3456 2003-12-23 Bernhard Herzog <[email protected]>
3457
3458 * NEWS: Update for 1.0.0
3459
3460 * po/it.po: Another update from Maurizio Napolitano
3461
3462 2003-12-23 Bernhard Herzog <[email protected]>
3463
3464 * po/it.po: Updated translation from Maurizio Napolitano
3465
3466 2003-12-23 Bernhard Herzog <[email protected]>
3467
3468 * Thuban/UI/join.py (JoinDialog.__init__): Mark one more string
3469 for translation
3470
3471 * Thuban/UI/mainwindow.py (MainWindow.TableRename)
3472 (MainWindow.RenameMap, MainWindow.RenameLayer): Mark some more
3473 strings for translation
3474
3475 * po/de.po: Update with the newly marked strings.
3476
3477 2003-12-22 Bernhard Herzog <[email protected]>
3478
3479 * HOWTO-Release: Fix the places where version numbers have to be
3480 updated
3481
3482 2003-12-22 Bernhard Herzog <[email protected]>
3483
3484 * setup.py (setup call): 1.0.0, yeah!
3485
3486 * Thuban/version.py (longversion): 1.0.0, yeah!
3487
3488 * Thuban/Model/load.py (SessionLoader.__init__): Accept the
3489 1.0.0 namespace too
3490
3491 * Thuban/Model/save.py (SessionSaver.write_session): Save with
3492 1.0.0 namespace
3493
3494 * test/test_load.py (LoadSessionTest.dtd)
3495 (TestSingleLayer.file_contents)
3496 (TestNonAsciiColumnName.file_contents)
3497 (TestLayerVisibility.file_contents)
3498 (TestClassification.file_contents, TestLabels.file_contents)
3499 (TestLayerProjection.file_contents)
3500 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3501 (TestLabelLayer.file_contents, TestPostGISLayer.file_contents)
3502 (TestPostGISLayerPassword.file_contents)
3503 (TestLoadError.file_contents, TestLoadError.test): Update for
3504 1.0.0 namespace
3505
3506 * test/test_save.py (SaveSessionTest.dtd)
3507 (SaveSessionTest.testEmptySession)
3508 (SaveSessionTest.testSingleLayer)
3509 (SaveSessionTest.testLayerProjection)
3510 (SaveSessionTest.testRasterLayer)
3511 (SaveSessionTest.testClassifiedLayer)
3512 (SaveSessionTest.test_dbf_table)
3513 (SaveSessionTest.test_joined_table)
3514 (SaveSessionTest.test_save_postgis): Update for 1.0.0 namespace
3515
3516 2003-12-22 Bernhard Herzog <[email protected]>
3517
3518 * Thuban/Model/load.py (SessionLoader.start_label): Make sure the
3519 alignment flags are byte strings not unicode and that they have
3520 valid values
3521
3522 * test/test_load.py (TestLabelLayer): New. Test loading (and
3523 indirectly saving) of maps with labels.
3524
3525 2003-12-22 Bernhard Herzog <[email protected]>
3526
3527 * Thuban/UI/tableview.py (TableGrid.OnDestroy)
3528 (TableGrid.__init__): Handle EVT_WINDOW_DESTROY in the grid to
3529 unsubscribe all subscribers.
3530 (LayerTableFrame.OnDestroy): Do not unsubscribe any messages from
3531 self.grid since it may already have been destroyed.
3532 Fixes RT #2256
3533
3534 2003-12-19 Bernhard Herzog <[email protected]>
3535
3536 * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
3537
3538 2003-12-16 Bernhard Herzog <[email protected]>
3539
3540 * debian/bitmappath.patch, debian/setup.py.patch:
3541 added to ensure compliance with FHS for debian
3542 * debian/rules, debian/changelog:
3543 added patches in rules to ensure compliance with FHS for debian
3544
3545 2003-12-16 Bernhard Herzog <[email protected]>
3546
3547 * po/Makefile (mo): Make the output a bit nicer so that it prints
3548 statistics about the translations. Add a comment how produce even
3549 nicer statistics with sed.
3550
3551 2003-12-09 Frank Koormann <[email protected]>
3552
3553 * Resources/Projections/defaults.proj:
3554 French projection sample with correct accents (UNICODE).
3555
3556 2003-12-05 Bernhard Herzog <[email protected]>
3557
3558 * MANIFEST.in: Add the devtools directory
3559
3560 * setup.py (setup call): Use license instead of licence. This
3561 silences a deprecation warning on Python 2.3
3562
3563 2003-12-05 Frank Koormann <[email protected]>
3564
3565 Documentation synced with 1.0rc1
3566
3567 * Doc/manual/thuban-manual.xml:
3568 Minor formatting changes and references to database layers .
3569 Introduction.Internationalization: New section on i18n.
3570 MapManagement.AddingandRemovingLayers: Added item on database layers.
3571 MapManagement.TheLegend: Added section and screenshot on popup menu.
3572 ProjectionManagement: Updated screenshot and sentence on EPSG.
3573 Appendix.SupportedDataSources: Added PostGIS.
3574 Appendix.WorkingwithPostGIS: New section.
3575
3576 * Doc/manual/images/6_projection.png: Updated screenshot including
3577 EPSG checkboxes.
3578
3579 * Doc/manual/images/3_5_popup_menu.png: New, popup menu screenshot.
3580
3581 * Doc/manual/images/app_postgis_add_layer.png,
3582 Doc/manual/images/app_postgis_db_add.png,
3583 Doc/manual/images/app_postgis_db_management.png:
3584 New screenshots focussing on database layers
3585
3586 2003-12-05 Frank Koormann <[email protected]>
3587
3588 * Thuban/UI/projdialog.py (load_user_proj): If user.proj is missing
3589 write warning to stderr instead of rising a warning dialog
3590
3591 2003-12-03 Bernhard Herzog <[email protected]>
3592
3593 Fix for RT #2243
3594
3595 * Thuban/UI/mainwindow.py (MainWindow.has_selected_shape_layer):
3596 New. Like has_selected_layer but for shape layers only
3597 (_has_selected_shape_layer): New. Like _has_selected_layer but for
3598 shape layers only
3599 (layer_show_table command, layer_jointable command): Use these
3600 commands should only be available for shape layers
3601
3602 2003-12-03 Bernhard Herzog <[email protected]>
3603
3604 * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
3605 publishers that are wx objects and may have been destroyed by wx
3606 already. Fixes RT #2242.
3607
3608 2003-12-03 Bernhard Herzog <[email protected]>
3609
3610 * po/ru.po: Updates from Alex Shevlakov
3611
3612 2003-12-03 Silke Reimer <silkeintevation.de>
3613
3614 * debian/control, debian/changelog: Added gdal-support to
3615 debian package, updated to new thuban version
3616
3617
3618 2003-12-03 Bernhard Herzog <[email protected]>
3619
3620 * Thuban/Lib/version.py: New. Module for version number
3621 manipulations. The version of make_tuple here also deals better
3622 with more unusual version number strings, such as e.g.
3623 "1.2+cvs20031111"
3624
3625 * Thuban/version.py (make_tuple): Removed. It's now in
3626 Thuban.Lib.version. Use that implementation instead.
3627
3628 * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
3629
3630 2003-12-02 Bernhard Herzog <[email protected]>
3631
3632 * MANIFEST.in: Add debian files
3633
3634 * setup.py (setup call): Add packages for the Extensions so that
3635 they're installed too
3636 (data_files): Add READMEs and sample data from some Extensions
3637
3638 * NEWS: Add note about the extensions in binary packages
3639
3640 2003-12-02 Bernhard Herzog <[email protected]>
3641
3642 * Thuban/Model/save.py (SessionSaver.write_session): Save files
3643 with the thuban-1.0rc1
3644
3645 * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
3646 thuban-1.0rc1 namespace too
3647
3648 * test/test_save.py (SaveSessionTest.dtd)
3649 (SaveSessionTest.testEmptySession)
3650 (SaveSessionTest.testSingleLayer)
3651 (SaveSessionTest.testLayerProjection)
3652 (SaveSessionTest.testRasterLayer)
3653 (SaveSessionTest.testClassifiedLayer)
3654 (SaveSessionTest.test_dbf_table)
3655 (SaveSessionTest.test_joined_table)
3656 (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
3657 namespace
3658
3659 * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
3660 namespace
3661 (TestSingleLayer.file_contents)
3662 (TestNonAsciiColumnName.file_contents)
3663 (TestLayerVisibility.file_contents)
3664 (TestClassification.file_contents, TestLabels.file_contents)
3665 (TestLayerProjection.file_contents)
3666 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3667 (TestPostGISLayer.file_contents)
3668 (TestPostGISLayerPassword.file_contents)
3669 (TestLoadError.file_contents, TestLoadError.test): Update to
3670 thuban-1.0rc1 namespace
3671
3672 2003-12-01 Bernhard Herzog <[email protected]>
3673
3674 * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
3675 nt to better match Intevation's current w32 setup
3676
3677 * HOWTO-Release: Add note about updating MANIFEST.in
3678
3679 * MANIFEST.in: Add the Extensions
3680
3681 * NEWS: Update for 1.0rc1
3682
3683 2003-12-01 Bernhard Herzog <[email protected]>
3684
3685 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
3686 cards for the dialog so that shapefiles ending in all uppercase
3687 SHP are listed too
3688
3689 2003-11-28 Bernhard Herzog <[email protected]>
3690
3691 * Thuban/version.py (longversion): Update to 1.0rc1
3692
3693 * setup.py (setup call): Update version to 1.0rc1. Use the
3694 [email protected] email address as author email instead of my
3695 personal one.
3696
3697 2003-11-28 Bernhard Herzog <[email protected]>
3698
3699 * po/de.po: Update german translation.
3700
3701 2003-11-28 Bernhard Herzog <[email protected]>
3702
3703 Unify the filenames stored in .thuban files so that the .thuban
3704 files are more platform independend
3705
3706 * Thuban/Model/save.py (unify_filename): New. Unify filenames so
3707 that they can be used on both windows and unix
3708 (SessionSaver.prepare_filename): New. Handle all filename
3709 transformations for filenames stored in the thuban file
3710 (SessionSaver.write_data_containers, SessionSaver.write_layer):
3711 Use prepare_filename
3712
3713 * test/test_save.py (SaveSessionTest.testSingleLayer)
3714 (SaveSessionTest.testLayerProjection)
3715 (SaveSessionTest.testRasterLayer)
3716 (SaveSessionTest.testClassifiedLayer)
3717 (SaveSessionTest.test_dbf_table)
3718 (SaveSessionTest.test_joined_table): Filenames are always stored
3719 with slashes on all currently supported platforms so adapt all
3720 tests to this
3721
3722 * test/test_load.py (LoadSessionTest.filenames): With the new
3723 filename scheme the filenames in the tests should be
3724 understandable on all currently supported platforms so we turn
3725 this into an empty list because we don't have to normalize them
3726 anymore
3727
3728 2003-11-28 Bernhard Herzog <[email protected]>
3729
3730 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
3731 Add the ellipsoid to the projection since some Proj versions
3732 complain if it's missing.
3733
3734 2003-11-27 Bernhard Herzog <[email protected]>
3735
3736 Corect some bounding box projection problems
3737
3738 * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
3739 version of ForwardBBox
3740 (Projection._transform_bbox): New. common implementation of
3741 ForwardBBox and InverseBBox
3742 (Projection.ForwardBBox): Use _transform_bbox.
3743
3744 * test/test_proj.py (TestProjection.test): Add test for
3745 InverseBBox
3746
3747 * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
3748 (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
3749 new InverseBBox method to determine the unprojected bounding box
3750 (Layer.ShapesInRegion): Use the ForwardBBox method to project the
3751 bbox.
3752
3753 * test/test_layer.py (TestLayer.test_point_layer_with_projection):
3754 Removed.
3755 (TestLayer.test_arc_layer_with_projection): New. This test is
3756 better able to test whether bounding boxes are projected correctly
3757 than test_point_layer_with_projection
3758
3759 * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
3760 InverseBBox to unproject bboxes
3761
3762 2003-11-25 Bernhard Herzog <[email protected]>
3763
3764 * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
3765 source code.
3766
3767 2003-11-25 Bernhard Herzog <[email protected]>
3768
3769 * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
3770 there for backwards compatibility and all code relying on that
3771 should have been updated by now.
3772
3773 2003-11-25 Bernhard Herzog <[email protected]>
3774
3775 * test/test_load.py (TestClassification.test): Add the missing
3776 round trip test.
3777 (TestClassification.file_contents): Update to the newest file
3778 format
3779
3780 2003-11-25 Bernhard Herzog <[email protected]>
3781
3782 Add very experimental (and possibly dangerous) extension to draw
3783 polygons:
3784
3785 * Extensions/drawshape/README: New. Brief installation
3786 instructions
3787
3788 * Extensions/drawshape/drawshape.py: New. Implementation of the
3789 drawshape extensions
3790
3791 * Extensions/drawshape/patch.diff: Patch to apply before the
3792 extension can be used.
3793
3794 2003-11-24 Bernhard Herzog <[email protected]>
3795
3796 * Thuban/Model/data.py (ShapefileStore._open_shapefile)
3797 (ShapefileStore.__init__): Factor opening the shapefile into a
3798 separate method (the new _open_shapefile). This makes the code a
3799 bit more readable but the real reason is that it makes some evil
3800 hacks easier. :-)
3801
3802 2003-11-24 Bernhard Herzog <[email protected]>
3803
3804 * Thuban/Model/load.py (SessionLoader.check_attrs): If no
3805 converter is specified for an attribute assume it's a string
3806 containing only Latin1 characters. Update doc-string accordingly.
3807 This change should fix many places where unicode objects might
3808 accidentally enter Thuban.
3809
3810 * test/test_load.py (TestNonAsciiColumnName): New test to check
3811 what happens with column names in DBF files that contain non-ascii
3812 characters
3813
3814 2003-11-21 Bernhard Herzog <[email protected]>
3815
3816 Enable the experimental attribute editing again and introduce a
3817 command line switch to actually activate it
3818
3819 * Thuban/UI/main.py (options): New. Container for options set on
3820 the commmand line
3821 (main): Add the --enable-attribute-editing flag.
3822
3823 * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
3824 editing is enabled use the grid ctrl which allows editing of the
3825 values
3826
3827 * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
3828 New. Just delegate this to the underlying table.
3829
3830 2003-11-20 Bernhard Herzog <[email protected]>
3831
3832 * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
3833 Skip this test if run under non-posix systems since it only works
3834 there
3835
3836 2003-11-19 Bernhard Herzog <[email protected]>
3837
3838 * Thuban/Model/resource.py: Rework the way gdal support is
3839 determined so that we can give a reason in the about why gdal is
3840 not supported.
3841 (gdal_support_status): New. Variable holding a string with the
3842 reason for no gdal support
3843
3844 * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
3845 not supported to the message
3846
3847 2003-11-19 Bernhard Herzog <[email protected]>
3848
3849 Remove the old table interface and its test cases
3850
3851 * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
3852 (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
3853 anymore
3854
3855 * Thuban/Model/transientdb.py (TransientTableBase)
3856 (AutoTransientTable): Do not derive from OldTableInterfaceMixin
3857 anymore
3858
3859 * test/test_table.py: Removed since the old interface it tests is
3860 gone.
3861
3862 * test/runtests.py (main): The old table interface is gone and
3863 with it the deprecation warnings so remove the code that turns
3864 these warnings into errors
3865
3866 2003-11-19 Bernhard Herzog <[email protected]>
3867
3868 * test/test_table.py: Revert to revision 1.5 again. Changing the
3869 tests to use the new table interface is completely wrong since the
3870 whole purpose of the tests in this module is to test the old
3871 interface.
3872
3873 2003-11-18 Bernhard Herzog <[email protected]>
3874
3875 * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
3876 New. Test whether the connection matches a set of connection
3877 parameters
3878
3879 * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
3880 (DBFrame.OnAdd): Use the new MatchesParameters method when looking
3881 for existing connections with the same parameters and break out of
3882 the loop correctly.
3883
3884 * test/test_postgis_db.py (TestBriefDescription)
3885 (TestPostGISSimple.test_brief_description): Rename
3886 TestBriefDescription to TestPostGISSimple and the test method to
3887 test_brief_description so that we can add more test methods.
3888 (TestPostGISSimple.test_matches_parameters): New. Test the new
3889 MatchesParameters method
3890
3891 2003-11-18 Bernhard Herzog <[email protected]>
3892
3893 * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
3894 _was_destroyed, to indicate whether an publisher instance has
3895 already been destroyed.
3896 (Publisher.Unsubscribe): Only disconnect if the publisher has not
3897 been destroyed yet.
3898 (Publisher.Destroy): Set the _was_destroyed flag to true.
3899
3900 * test/test_connector.py
3901 (TestPublisher.test_unsubscribe_after_destroy): New. Test that
3902 calling Unsubscribe after Destroy doesn't raise an exception
3903
3904 2003-11-14 Bernhard Herzog <[email protected]>
3905
3906 * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
3907 typo in doc-string
3908
3909 2003-11-13 Bernhard Herzog <[email protected]>
3910
3911 Quote table and column names properly for postgis.
3912
3913 * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
3914 quote an identifier for use in an sql statement
3915 (PostGISColumn.__init__): Add the quoted_name attribute
3916 (PostGISTable.__init__): New instance variable quoted_tablename
3917 (PostGISTable._fetch_table_information): Use the quoted table
3918 name. New isntance variable quoted_geo_col with a quoted version
3919 of geometry_column
3920 (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
3921 (PostGISTable.RowOrdinalToId): Use the quoted table name
3922 (PostGISTable.ReadValue, PostGISTable.ValueRange)
3923 (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
3924 (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
3925 (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
3926 Use quoted table and column names
3927
3928 * test/test_postgis_db.py (TestPostGISSpecialCases)
3929 (TestPostGISIgnoredColumns): Rename the class to
3930 TestPostGISSpecialCases because that better describes the new
3931 cases
3932 (TestPostGISSpecialCases.test_unsupported_types)
3933 (TestPostGISSpecialCases.test): Rename the method to
3934 test_unsupported_types because we need a more descriptive name now
3935 that there are more methods
3936 (TestPostGISSpecialCases.test_table_name_quoting)
3937 (TestPostGISSpecialCases.test_column_name_quoting)
3938 (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
3939 cases to test quoting of table and column names in PostGISTable
3940 and PostGISShapeStore
3941
3942 * test/postgissupport.py
3943 (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
3944 AddGeometryColumn desn't support table or column names with sapces
3945 or double quotes
3946
3947 2003-11-12 Jan-Oliver Wagner <[email protected]>
3948
3949 * Extensions/wms/__init__.py: New: Init to make this
3950 directory a package.
3951
3952 * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
3953
3954 2003-11-11 Bernhard Herzog <[email protected]>
3955
3956 * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
3957 Constant for the file woth deprecated epsg projections
3958 (get_system_proj_file): Update doc-string
3959
3960 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
3961 above the EPS widgets, introduce a check box for the deprecated
3962 eps projections and a label for the epsg widgets
3963 (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
3964 too
3965
3966 2003-11-11 Bernhard Herzog <[email protected]>
3967
3968 Avoid warnings when run under Python 2.3
3969
3970 * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
3971 (BaseRenderer.draw_label_layer): Coordinates must be ints.
3972
3973 * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
3974 real method so that we can convert to int.
3975 (MapRenderer.label_font): The font size mist be an int.
3976
3977 * Thuban/UI/common.py (Color2wxColour): The color values must be
3978 ints. Also, remove the unnecessary asserts.
3979
3980 * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
3981 (TestUnicodeStrings.test): Python source code should not contain
3982 non-ascii characters unless an encoding is specified in the file.
3983 Therefore use \x escapes in the string literals for non-ascii
3984 characters.
3985
3986 2003-11-11 Bernhard Herzog <[email protected]>
3987
3988 * Thuban/Model/resource.py (get_system_proj_file): Add a filename
3989 parameter so that this function can be used for all proj files in
3990 Resource/Projections
3991 (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
3992 get_system_proj_file
3993
3994 * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
3995 ProjFile self.__sysProjFile use a dictionary of system ProjFile
3996 objects self._sys_proj_files
3997 (ProjFrame.build_dialog): Adapt to the new changes in the
3998 ProjectionList constructor. Add a check button to toggle whether
3999 EPSG projections are shown
4000 (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
4001 events.
4002 (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
4003 the busy cursor if the files have not yet been loaded by the
4004 dialog.
4005 (ProjFrame.load_system_proj): Add a parameter for the name of the
4006 proj file. Maintain the dictionary of system projections
4007 self._sys_proj_files
4008
4009 * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
4010 user_projs parameters into one parameter proj_files which is a
4011 list of proj files.
4012 (ProjectionList._subscribe_proj_files)
4013 (ProjectionList._unsubscribe_proj_files): New. Move
4014 subscription/unsubscription of projfile messages to separate
4015 methods
4016 (ProjectionList.Destroy): The unsubscribe is now done in
4017 _unsubscribe_proj_files
4018 (ProjectionList.update_projections): We now have a list of proj
4019 file objects
4020 (ProjectionList.SetProjFiles): New method to set a new list of
4021 proj file objects
4022
4023 * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
4024 Specify explicitly which system proj file to load.
4025
4026 2003-11-11 Bernhard Herzog <[email protected]>
4027
4028 * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
4029 instance variables to cut cyclic references. The GC would have
4030 collected the loader eventually but it can happen that it doesn't
4031 run at all until thuban is closed (2.3 but not 2.2 tries a bit
4032 harder and forces a collection when the interpreter terminates)
4033 (load_session): Call the handler's Destroy method to make sure
4034 that it gets garbage collected early. Otherwise it will be
4035 collected very late if at all and it holds some references to e.g.
4036 shapestores and the session which can lead to leaks (of e.g. the
4037 temporary files)
4038
4039 * test/test_load.py (TestSingleLayer.test_leak): New. test for the
4040 resource leak in load_session
4041
4042 2003-11-10 Bernhard Herzog <[email protected]>
4043
4044 * Thuban/UI/baserenderer.py: Add a way to specify how layers in
4045 extensions are to be rendered.
4046 (_renderer_extensions): New. List with renderer for layers in
4047 extensions
4048 (add_renderer_extension): New. Add a renderer extension
4049 (init_renderer_extensions): New. Init the renderer extensions
4050 (BaseRenderer.render_map_incrementally): Search
4051 _renderer_extensions for how to draw unknown layer types
4052 (BaseRenderer.draw_raster_data): Add format parameter so that
4053 formats other than BMP can be drawn
4054 (BaseRenderer.draw_raster_layer): Pass an explicit format to
4055 draw_raster_data
4056
4057 * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
4058 strings of the format parameter of draw_raster_data method to wx
4059 constants
4060 (MapRenderer.draw_raster_data): Add the format parameter and use
4061 raster_format_map to map it to the right wxwindows constant for
4062 wxImageFromStream
4063
4064 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
4065 the format parameter and record it
4066 (TestBaseRenderer.test_raster_no_projection): check the format
4067 paramter of the draw_raster_data method
4068 (TestBaseRenderer.test_renderer_extension): New. Test the renderer
4069 extension facility
4070
4071 2003-11-07 Bernhard Herzog <[email protected]>
4072
4073 Tweak the usage of the sqlite database to make common use cases
4074 more responsive. In most cases copying the data to the sqlite
4075 database takes so long that using sqlite doesn't have enough
4076 advantages.
4077
4078 * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
4079 comments about performance and query the min and max in separate
4080 statements because only that way will indexes be used.
4081 (TransientTableBase.UniqueValues): Add some comments about
4082 performance.
4083 (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
4084 Do not copy the data to the transient DB but use the transient
4085 copy if it exists. See the new comments for the performance trade
4086 offs
4087
4088 * test/test_transientdb.py
4089 (TestTransientTable.test_auto_transient_table): Make sure that the
4090 data is copied to the transient database at some point.
4091
4092 2003-11-03 Bernhard Herzog <[email protected]>
4093
4094 * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
4095 globals to locals so that it's a bit faster
4096
4097 2003-11-03 Bernhard Herzog <[email protected]>
4098
4099 * Thuban/UI/baserenderer.py
4100 (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
4101 method. ReadValue is faster than ReadRowAsDict since it only reads
4102 one cell especially now that the dbf file objects actually
4103 implement it.
4104
4105 * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
4106 read_attribute method of the dbf objects
4107
4108 2003-11-03 Bernhard Herzog <[email protected]>
4109
4110 * Extensions/profiling/profiling.py (popup_dialog_box): New config
4111 variable to indicate whether the result should be shown in a
4112 dialog box
4113 (profile_screen_renderer, time_screen_renderer): Only show a
4114 dialog box if popup_dialog_box is true.
4115 (profile_screen_renderer): Flush stdout after the printing the
4116 first part of the "profiling..." message
4117
4118 * Thuban/UI/baserenderer.py
4119 (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
4120 brushes for the groups so that they're not created over and over
4121 again
4122
4123 * Thuban/Model/classification.py (Classification.__getattr__)
4124 (Classification._compile_classification)
4125 (Classification._clear_compiled_classification): New. Methods to
4126 manage a 'compiled' representation of the classification groups
4127 which is created on demand
4128 (Classification.InsertGroup, Classification.RemoveGroup)
4129 (Classification.ReplaceGroup): reset the compiled representation
4130 (Classification.FindGroup): Use the compiled representation to
4131 find the matching group
4132 (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
4133
4134 2003-10-31 Bernhard Herzog <[email protected]>
4135
4136 * Thuban/Model/classification.py (Classification.SetDefaultGroup):
4137 Send a CLASS_CHANGED message
4138 (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
4139 not return the removed group since it wasn't used.
4140
4141 * test/test_classification.py
4142 (TestClassification.test_set_default_group): New. Test the
4143 SetDefaultGroup method
4144 (TestClassification.test_insert_group): New. Test the InsertGroup
4145 method
4146 (TestClassification.test_remove_group): New. Test the RemoveGroup
4147 method
4148 (TestClassification.test_replace_group): New. Test the
4149 ReplaceGroup method
4150
4151 2003-10-31 Bernhard Herzog <[email protected]>
4152
4153 * test/test_classification.py (TestClassification.setUp):
4154 Subscribe to the CLASS_CHANGED messages
4155 (TestClassification.tearDown): New. Destroy the classification
4156 properly
4157 (TestClassification.test_defaults): Add tests for the default line
4158 width and whether no messages were sent yet
4159 (TestClassification.test_set_default_properties): Add tests for
4160 messages and setting the default line width
4161 (TestClassification.test_add_singleton)
4162 (TestClassification.test_add_range)
4163 (TestClassification.test_multiple_groups): Add tests for messages
4164
4165 2003-10-31 Bernhard Herzog <[email protected]>
4166
4167 Some more refactoring in preparation for new tests:
4168
4169 * test/test_classification.py (TestClassification.setUp): New.
4170 Instantiate the classification here. Update the test methods
4171 accordingly.
4172 (TestClassification.test_multiple_groups): Make sure that the two
4173 singletons matching 1 are considered different.
4174
4175 2003-10-31 Bernhard Herzog <[email protected]>
4176
4177 * test/test_classification.py (red, green, blue): New. These
4178 constants were used in several cases. Update the relevant methods.
4179 (TestClassification.test_defaults)
4180 (TestClassification.test_set_default_properties)
4181 (TestClassification.test_add_singleton)
4182 (TestClassification.test_add_range)
4183 (TestClassification.test_multiple_groups)
4184 (TestClassification.test_deepcopy): New. These were formerly all
4185 part of the single method test.
4186 (TestClassification.test_deepcopy): Removed.
4187 (TestClassIterator): Removed. The test case is now a method of
4188 TestClassification since it tests part of the public interface of
4189 Classification
4190 (TestClassification.test_iterator): New. Used to be
4191 TestClassIterator effectively
4192
4193 2003-10-31 Jan-Oliver Wagner <[email protected]>
4194
4195 GUIfied the functions of the profiling extension.
4196
4197 * /Extensions/profiling/__init__.py: New: Init to make this
4198 directory a package.
4199
4200 * Extensions/profiling/profiling.py: Moved menu entries to
4201 the Extensions menu. Applied _() for strings.
4202 (profile_screen_renderer): Catch the detailed printout and present
4203 it in a dialog.
4204 (time_screen_renderer): Raise a dialog to present the result instead
4205 of printing it to stdout.
4206
4207 2003-10-31 Bernhard Herzog <[email protected]>
4208
4209 * test/test_classification.py (TestClassGroupProperties)
4210 (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
4211 (TestClassGroupSingleton, TestClassIterator, TestClassification):
4212 Split TestClassification into several classes, one for each class
4213 being tested. TestClassification itself now only tests
4214 Classification. This split makes changes to the tests a bit easier
4215
4216 2003-10-31 Bernhard Herzog <[email protected]>
4217
4218 * Extensions/profiling/profiling.py: New. Extension to measure
4219 Thuban performance
4220
4221 2003-10-31 Frank Koormann <[email protected]>
4222
4223 Added two items to legend popup menu: Remove Layer and Show Layer Table
4224
4225 * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
4226 LegendPanel._OnShowTable): New event handlers, call the corresponding
4227 mainwindow methods.
4228 (LegendTree._OnRightClick): Added items to popup menu.
4229
4230 2003-10-30 Bernhard Herzog <[email protected]>
4231
4232 * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
4233 EVT_WINDOW_DESTROY
4234 (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
4235 nothing but is convenient for the derived classes.
4236
4237 * Thuban/UI/tableview.py
4238 (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
4239 Unsubscribe the messages here not in OnClose because that might
4240 get called multiple times. Fixes RT #2196
4241 (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
4242 anymore.
4243
4244 * README: Update the minimum requirement for wxPython. Since we
4245 now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
4246 the version in which that was introduced for all platforms
4247
4248 2003-10-30 Frank Koormann <[email protected]>
4249
4250 * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
4251 the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
4252 frame.
4253
4254 2003-10-30 Jan-Oliver Wagner <[email protected]>
4255
4256 Improved APR import extension, added further EPSG definitions
4257 and some cleanup regarding string class.
4258
4259 * test/test_proj.py (TestProjection.test_get_projection_units_geo):
4260 Added test for alias 'longlat'.
4261
4262 * Resources/Projections/epsg-deprecated.proj: New. Contains
4263 deprecated EPSG definitions.
4264
4265 * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
4266 the variable names for objects.
4267
4268 * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
4269 Copied from importAPR and provided with documentation.
4270
4271 * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
4272 Moved to apr.py.
4273 (APR_View): Added object ref 'ITheme'.
4274
4275 * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
4276 split function by corresponding use of the string class method.
4277
4278 * Thuban/Model/xmlwriter.py: Replaced string replace function by
4279 corresponding string method.
4280
4281 2003-10-29 Bernhard Herzog <[email protected]>
4282
4283 * Thuban/UI/baserenderer.py
4284 (BaseRenderer.draw_shape_layer_incrementally): Speed up the
4285 special case of a classification that only has the default group
4286
4287 2003-10-27 Bernhard Herzog <[email protected]>
4288
4289 * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
4290
4291 * po/de.po: Update.
4292
4293 * Thuban/UI/application.py
4294 (ThubanApplication.ShowExceptionDialog): Handle translation of the
4295 dialog message properly
4296
4297 2003-10-27 Bernhard Herzog <[email protected]>
4298
4299 Rework how localization works so that we use wx's translation
4300 functions when running Thuban as a normal application but not when
4301 we don't need any UI, such as in the test suite. See the comment
4302 in Thuban/__init__.py for details
4303
4304 * Thuban/__init__.py (_): Add one level of indirection to make the
4305 translation handling more flexible and to make it possible to use
4306 either wx's translation services or not.
4307 (gettext_identity, translation_function_installed)
4308 (install_translation_function): New function to help with this
4309
4310 * Thuban/UI/__init__.py: Install the wx specific translation
4311 function if it's OK to do that
4312
4313 * test/support.py (initthuban): Install a dummy translation
4314 function so that importing Thuban.UI doesn't install a wx specific
4315 one for which would need to import wxPython
4316
4317 2003-10-27 Bernhard Herzog <[email protected]>
4318
4319 * HOWTO-Release: Source archives should be created first and the
4320 binary packages should be created from the source archives.
4321 There's an official debian package now so there's no need to test
4322 the rpm on debian anymore
4323
4324 2003-10-27 Bernhard Herzog <[email protected]>
4325
4326 Several rendering changes:
4327
4328 - Render the selection into a separate bitmap so that only that
4329 bitmap needs to be redrawn when the selection changes
4330
4331 - Render incrementally showing previews and allowing interaction
4332 before rendering is complete
4333
4334 - Update the renderer interface a bit. Most parameters of
4335 RenderMap are now parameters of the constructor
4336
4337 * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
4338 and the update region as parameters. Update the doc-string
4339 (BaseRenderer.render_map_incrementally): New. Generator function
4340 to renders the map incrementally
4341 (BaseRenderer.render_map): Remove the map argument (it's now in
4342 the constructor) and simply iterate over the
4343 render_map_incrementally generator to draw the map.
4344 (BaseRenderer.draw_shape_layer_incrementally)
4345 (BaseRenderer.draw_shape_layer): Renamed to
4346 draw_shape_layer_incrementally and changed into a generator that
4347 yields True every 500 shapes. Used by render_map_incrementally to
4348 render shape layers incrementally
4349
4350 * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
4351 map and region parameters which are now in the constructor
4352 (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
4353 the inherited render_map_incrementally.
4354 (BaseRenderer.draw_shape_layer): Removed.
4355 (ScreenRenderer.draw_selection_incrementally): New. The selection
4356 drawing part of the removed draw_shape_layer as a generator
4357 (ScreenRenderer.layer_shapes): Update because of the region
4358 parameter change
4359 (ExportRenderer.__init__): New. Extend the inherited constructor
4360 with the destination region for the drawing
4361 (ExportRenderer.RenderMap): Removed the map and region parameters
4362 which are now in the constructor
4363
4364 * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
4365 bitmap suitable for a preview in a tool
4366 (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
4367 bitmap
4368 (MapPrintout.draw_on_dc): Adapt to new renderer interface
4369 (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
4370 exists
4371 (MapCanvas.OnIdle): Update the logic to deal with incremental
4372 rendering and the selection bitmap
4373 (MapCanvas._do_redraw): Handle the instantiation of the render
4374 iterator and the redraws during rendering
4375 (MapCanvas._render_iterator): New. Generator to incrementally
4376 redraw both bitmaps
4377 (MapCanvas.Export): Adapt to new renderer interface.
4378 (MapCanvas.full_redraw): Reset the selection bitmap and the
4379 renderer iterator too
4380 (MapCanvas.redraw_selection): New. Force a redraw of the selection
4381 bitmap
4382 (MapCanvas.shape_selected): Only redraw the selection bitmap
4383
4384 * test/test_baserenderer.py
4385 (TestBaseRenderer.test_polygon_no_projection)
4386 (TestBaseRenderer.test_raster_no_projection)
4387 (TestBaseRenderer.test_point_map_projection)
4388 (TestBaseRenderer.test_point_layer_and_map_projection)
4389 (TestBaseRenderer.test_point_layer_projection)
4390 (TestBaseRenderer.test_point_with_classification): Adapt to new
4391 renderer interface
4392
4393 2003-10-24 Bernhard Herzog <[email protected]>
4394
4395 * libraries/thuban/wxproj.cpp (draw_polygon_shape)
4396 (point_in_polygon_shape, shape_centroid): Raise an exception if
4397 the shape can't be read. Previously invalid shape ids would lead
4398 to a segfault.
4399
4400 * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
4401 New. test whether an exception is raised for invalid shape ids
4402
4403 2003-10-24 Jan-Oliver Wagner <[email protected]>
4404
4405 * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
4406 as alias for 'latlong'.
4407
4408 * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
4409 as alias for 'latlong'.
4410
4411 2003-10-24 Jan-Oliver Wagner <[email protected]>
4412
4413 * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
4414 the projection even for the UnknownPanel.
4415 (UnknownProjPanel.__init__): Define the text and create the textctrl
4416 widget.
4417 (UnknownProjPanel._DoLayout): Replaced static text widget by the
4418 textctrl created in __init__.
4419 (UnknownProjPanel.SetProjection): Set the text for the text ctrl
4420 including the parameters of the projection.
4421
4422 2003-10-24 Jan-Oliver Wagner <[email protected]>
4423
4424 * Resources/Projections/epsg.proj: New. This is a list of
4425 EPSG codes with parameters for proj. The list has been
4426 generated using devtools/create_epsg.py based on the
4427 file nad/epsg of the proj 4.4.7 package. Four projection
4428 definitions have been deleted as they are not accepted by proj:
4429 "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
4430 and "HD72 / EOV".
4431
4432 2003-10-22 Bernhard Herzog <[email protected]>
4433
4434 Some more tweaks to the projection dialog which should fix RT
4435 #1886.
4436
4437 * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
4438 the ProjFile's messages and call the base class methods correctly
4439 (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
4440 flag on the newly selected item too. Otherwise some other item is
4441 focused and the first time the focus is moved with the keyboard
4442 the selection moves in unexpected ways.
4443
4444 * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
4445 focus on the OK button, only on the projection list. That way the
4446 list really has the focus initially
4447 (ProjFrame.OnClose): Call the projection list's Destroy method to
4448 make it unsubscribe all messages
4449
4450 2003-10-21 Bernhard Herzog <[email protected]>
4451
4452 Rework the projection dialog to fix a few bugs, including RT 2166
4453 and most of 2168
4454
4455 * Thuban/UI/projlist.py: New. The class ProjectionList is a
4456 special wxListCtrl to show a list of projections in a more MVC
4457 fashion
4458
4459 * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
4460 throughout the class. The main change is to use the ProjectionList
4461 class instead of a normal wxListBox. Also, add an explicit
4462 "Unknown" projection to the projection choice control.
4463 (ProjPanel.__init__): Add an "unknown" ellipsoid
4464 (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
4465 instantiation of the panel's controls to make the tab-order more
4466 natural
4467
4468 2003-10-21 Bernhard Herzog <[email protected]>
4469
4470 * test/test_load.py (TestSingleLayer.file_contents)
4471 (TestSingleLayer.test): Add non-ascii characters to the titles of
4472 session, map and layer. This is effectively a port of the
4473 TestUnicodeStrings test in test_load_0_8.py which for some reason
4474 was only added there.
4475
4476 * test/test_load_0_9.py (TestSingleLayer.file_contents)
4477 (TestSingleLayer.test): Same as in test_load.py: add non-ascii
4478 characters to the titles of session, map and layer,.
4479
4480 2003-10-21 Bernhard Herzog <[email protected]>
4481
4482 Add EPSG projection handling to .thuban files
4483
4484 * test/test_save.py (SaveSessionTest.dtd)
4485 (SaveSessionTest.testEmptySession)
4486 (SaveSessionTest.testLayerProjection)
4487 (SaveSessionTest.testRasterLayer)
4488 (SaveSessionTest.testClassifiedLayer)
4489 (SaveSessionTest.test_dbf_table)
4490 (SaveSessionTest.test_joined_table)
4491 (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
4492 (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
4493 use a and epsg projection to test saving them
4494
4495 * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
4496 namespace
4497 (TestLayerVisibility.file_contents, TestLabels.file_contents)
4498 (TestLayerProjection.file_contents)
4499 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
4500 (TestPostGISLayer.file_contents)
4501 (TestPostGISLayerPassword.file_contents)
4502 (TestLoadError.file_contents, TestLoadError.test): Update to use
4503 1.0-dev namespace
4504 (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
4505 use 1.0-dev namespace and use an EPSG projection to test whether
4506 loading it works
4507
4508 * test/test_load_0_9.py: New. Effectively a copy of test_load.py
4509 as of Thuban 0.9. These are now tests to determine whether Thuban
4510 can still read files generated by Thuban 0.9
4511
4512 * Thuban/Model/save.py (SessionSaver.write)
4513 (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
4514 namespace
4515 (SessionSaver.write_projection): Write the projection's epsg
4516 attribute
4517
4518 * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
4519 thuban-1.0-dev.dtd namespace
4520 (SessionLoader.check_attrs): Allow a callable object as conversion
4521 too
4522 (SessionLoader.start_projection, SessionLoader.end_projection)
4523 (SessionLoader.start_parameter): Handle the epsg attribute and
4524 rename a few instance variables to lower case
4525
4526 * Resources/XML/thuban-1.0.dtd: New. Only difference to
4527 thuban-0.9.dtd is the epsg attribute for projections.
4528
4529 2003-10-21 Bernhard Herzog <[email protected]>
4530
4531 * test/runtests.py (main): Let the user specify which tests to run
4532 on the command line
4533
4534 * test/support.py (ThubanTestResult.getDescription): Override to
4535 give a better short description. The description can be used as a
4536 parameter to run_tests to run that particular test in isolation.
4537
4538 2003-10-21 Frank Koormann <[email protected]>
4539
4540 Popup menu for legend. Scheduled for the 1.2 release this was too
4541 simple to implement: The popup menu is bound to the legend tree, while
4542 the events are hanlded by its anchestor, the legend panel. This
4543 allows reuse of all the event handlers already implemented for the
4544 legend toolbar buttons.
4545
4546 * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
4547 to add handlers for the events issued by the popup menu.
4548 (LegendPanel._OnToggleVisibility): Handler for toggling layer
4549 visibility event
4550 (LegendPanel._OnProjection): Handler for layer projection event.
4551 (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
4552 (LegendTree._OnRightClick): Event handler for right click, select item
4553 and pop up menu.
4554 (LegendTree.ToggleVisibility): Toggle layer visibility
4555 (LegendTree.LayerProjection): Raise layer projection dialog for
4556 current layer.
4557
4558 2003-10-21 Bernhard Herzog <[email protected]>
4559
4560 * Resources/Projections/defaults.proj: Use correct DOCTYPE
4561 declaration. The top-level element is projectionlist not projfile
4562
4563 2003-10-20 Bernhard Herzog <[email protected]>
4564
4565 * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
4566 method to write a projfile and display a busy cursor and error
4567 dialogs.
4568 (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
4569 (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
4570 (ProjFrame.__FillAvailList): Translate "<None>" too and display a
4571 busy cursor while loading the user and system prj files.
4572
4573 2003-10-16 Bernhard Herzog <[email protected]>
4574
4575 * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
4576 ProjFile objects
4577 (clear_proj_file_cache): New function to clear the cache. Mainly
4578 useful for use by the test suite
4579 (read_proj_file): Use the cache.
4580
4581 * test/test_proj.py (TestProjFile): Clarify the doc-string
4582 (ProjFileReadTests): Update doc-string
4583 (ProjFileReadTests.test_get_system_proj_file): Check whether the
4584 system proj files is cached.
4585 (ProjFileLoadTestCase): New base class for the proj file tests
4586 derived from support.FileLoadTestCase to provide some common
4587 behavior.
4588 (TestLoadingProjFile)
4589 (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
4590 (TestProjFileWithInvalidParameters.file_contents): Derive from
4591 ProjFileLoadTestCase
4592 (TestLoadingProjFile.test_caching): New. Test whether the cache
4593 works
4594
4595 2003-10-16 Silke Reimer <[email protected]>
4596
4597 * debian/*: New directory with configuration files for building a thuban
4598 deb-package.
4599
4600 2003-10-14 Bernhard Herzog <[email protected]>
4601
4602 * test/test_proj.py: Execute support.run_tests when run as
4603 __main__ so that missing unsubscribes are detected
4604 (TestProjFile.tearDown): Destroy the proj_file properly
4605
4606 2003-10-14 Bernhard Herzog <[email protected]>
4607
4608 * Thuban/Model/messages.py (PROJECTION_ADDED)
4609 (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
4610 the ProjFile objects
4611
4612 * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
4613 easily send messages when the projections change
4614 (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
4615 when the change was successful
4616
4617 * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
4618 proj file messages
4619 (TestProjFile.test_add_remove)
4620 (TestProjFile.test_remove_non_existing)
4621 (TestProjFile.test_replace)
4622 (TestProjFile.test_replace_non_existing): Test whether the right
4623 messages are sent
4624
4625 2003-10-14 Bernhard Herzog <[email protected]>
4626
4627 * test/test_proj.py (TestProjFile.test): Refactor into several
4628 tests
4629 (TestProjFile.test_add_remove)
4630 (TestProjFile.test_remove_non_existing)
4631 (TestProjFile.test_replace)
4632 (TestProjFile.test_replace_non_existing): Some of the new
4633 individual test cases
4634 (TestProjFileSimple): New class for the rest of the test cases
4635 that came out of the refactoring
4636 (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
4637 derived classes don't have to
4638
4639 2003-10-13 Bernhard Herzog <[email protected]>
4640
4641 Add an optional EPSG code to the projection objects and extend the
4642 .proj file format accordingly.
4643
4644 * Resources/XML/projfile.dtd (element projection): Add epsg
4645 attribute
4646
4647 * Thuban/Model/proj.py (Projection.__init__): New parameter and
4648 instance variable epsg. Update doc-string
4649 (Projection.EPSGCode, Projection.Label): New methods to provide
4650 access to EPSG code and a label for use in dialogs
4651
4652 * Thuban/Model/resource.py (ProjFileReader.start_projection)
4653 (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
4654 Handle the epsg code attribute when reading or writing proj files
4655
4656 * Thuban/UI/projdialog.py (ProjFrame._OnSave)
4657 (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
4658 (ProjFrame.__FillAvailList): Use the projection's Label method to
4659 get the string for the list box
4660
4661 * test/test_proj.py (TestProjection.test_label)
4662 (TestProjection.test_label_epsg)
4663 (TestProjection.test_epsgcode_for_non_epsg_projection)
4664 (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
4665 for the label and EPSGCode methods
4666 (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
4667 (WriteProjFileTests.test_write_empty_file): Create the ProjFile
4668 objects in the test cases and put the expected contents into the
4669 test case methods too. Update doTestWrite accordingly
4670 (TestLoadingProjFile)
4671 (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
4672 read tests from TestProjFile.
4673 (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
4674 tests are now in the new classes.
4675 (sample_projfile, sample_projfile_data)
4676 (sample_projfile2, sample_projfile_data2): Removed. Not used
4677 anymore.
4678 (TestProjFile.test_read_unreadable_file): No need to reset the
4679 permissions at the end anymore since we use a unique filename
4680
4681 2003-10-13 Bernhard Herzog <[email protected]>
4682
4683 * test/test_proj.py: Some more refactoring of the test cases
4684 (ProjFileTest): New base class for the proj file tests.
4685 (TestProjFile): Derive from ProjFileTest
4686 (TestProjFile.test_read_unreadable_file)
4687 (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
4688 the new filename method to get a unique filename
4689 (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
4690 (WriteProjFileTests): New class for proj file write tests.
4691 Contains the write test that were in TestProjFile originally.
4692
4693 2003-10-13 Bernhard Herzog <[email protected]>
4694
4695 * test/test_proj.py (TestProjFile.testRead)
4696 (TestProjFile.test_read_non_existing_file)
4697 (TestProjFile.test_read_unreadable_file)
4698 (TestProjFile.test_read_empty_file): Split into several methods.
4699
4700 2003-10-10 Bernhard Herzog <[email protected]>
4701
4702 * Thuban/UI/sizers.py: New file with custom sizers.
4703
4704 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
4705 all projection type specific panels and put them into a
4706 NotebookLikeSizer. This way the dialog doesn't change its size
4707 when a different projection is selected
4708 (ProjFrame.__init__): Rename projection_panels
4709 projection_panel_defs and reuse projection_panels for a list of
4710 the instantiated panels.
4711 (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
4712 (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
4713 the panels
4714 (UnknownProjPanel._DoLayout): Place the newlines in the message
4715 differently to make the panel narrower.
4716 (TMPanel._DoLayout): Layout the parameters in one column.
4717
4718 2003-10-10 Bernhard Herzog <[email protected]>
4719
4720 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
4721 that contains all the setup for the dialog's widgets, layout and
4722 event handling.
4723 (__): Call build_dialog to build the dialog.
4724 (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
4725 Their functionality is now in build_dialog
4726 (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
4727 (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
4728 (ProjFrame.__DoOnProjChoice): Small updates due to slightly
4729 different widget names and hierarchy introduced with build_dialog.
4730
4731 2003-10-10 Bernhard Herzog <[email protected]>
4732
4733 * README: Fix typo.
4734
4735 2003-10-09 Bernhard Herzog <[email protected]>
4736
4737 * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
4738 projection is already in the list. This is *a lot* faster when
4739 loading files with hundreds of projections since it saves a linear
4740 search. OTOH this will allow adding the same projection to the
4741 user.proj file multiple times in the projection dialog but we'll
4742 deal with that later
4743
4744 2003-10-09 Jan-Oliver Wagner <[email protected]>
4745
4746 * devtools: New. Directory for developer tools that are not intended
4747 for the regular user.
4748
4749 * devtools/create_epsg.py: New. Convert the epsg file of proj into
4750 a python .proj file.
4751
4752 2003-10-09 Bernhard Herzog <[email protected]>
4753
4754 * test/test_proj.py
4755 (TestProjection.test_get_parameter_without_equals_sign): New. Test
4756 whether GetParameter handles parameters without "=" sign correctly
4757
4758 * Thuban/Model/proj.py (Projection.GetParameter): Handle
4759 parameters that do not contain a "=". Update the doc-string
4760
4761 2003-10-08 Bernhard Herzog <[email protected]>
4762
4763 * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
4764 length limit on the projname text control
4765
4766 2003-10-08 Bernhard Herzog <[email protected]>
4767
4768 * test/test_proj.py (TestProjection.test_get_projection_units_geo)
4769 (TestProjection.test_get_projection_units_normal): New. Tests for
4770 the Projection.GetProjectedUnits method
4771
4772 2003-10-08 Jan-Oliver Wagner <[email protected]>
4773
4774 * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
4775 Added missing 'val' parameter.
4776
4777 2003-10-08 Bernhard Herzog <[email protected]>
4778
4779 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
4780 projection type of the currently selected projection is not known,
4781 i.e. there's no panel for it, use the UnknownProjPanel
4782 (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
4783 the actual replacing of the proj panel into the new method
4784 _show_proj_panel.
4785 (UnknownProjPanel): Add doc-string.
4786 (UnknownProjPanel._DoLayout): Insert a newline into the text so
4787 that the panel is not so wide.
4788
4789 2003-10-08 Bernhard Herzog <[email protected]>
4790
4791 * Thuban/Model/resource.py (read_proj_file): Return the warnings
4792 too. Update the doc-string
4793 (get_proj_files): Removed. It wasn't used anywhere
4794 (get_system_proj_files, get_system_proj_file): Rename to
4795 get_system_proj_file and return the ProjFile object and not a list
4796 of ProjFile objects. Update the callers.
4797 (get_user_proj_files, get_user_proj_file): Rename to
4798 get_user_proj_file return the ProjFile object and not a list of
4799 ProjFile objects. Update the callers.
4800 (ProjFileReader.__init__): New instance variable for the warnings.
4801 Rename the __pf ivar to projfile. Update the methods referring to
4802 __pf
4803 (ProjFileReader.end_projection): Catch any errors raised when
4804 instantiating the projection and record that as an error. The
4805 projection will not be in the final ProjFile object.
4806 (ProjFileReader.GetWarnings): New method to return the warnings.
4807
4808 * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
4809 show the warnings from the projfile reader
4810 (ProjFrame._OnImport): Deal with any warnings returned by
4811 read_proj_file
4812 (ProjFrame.__FillAvailList): Deal with any warnings returned by
4813 get_system_proj_file or get_user_proj_file.
4814
4815 * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
4816 (TestProjFileWithInvalidParameters.file_contents): New test cases
4817 to test whether read_proj_file handles invalid projection
4818 parameters correctly
4819 (TestProjFile.test_get_system_proj_file): New. Simple test for
4820 resource.get_system_proj_file
4821
4822 2003-10-07 Bernhard Herzog <[email protected]>
4823
4824 * test/test_derivedshapestore.py
4825 (TestDerivedShapeStoreExceptions.tearDown): Clear the session
4826 properly so that the temporary directories get deleted correctly
4827
4828 2003-10-06 Bernhard Herzog <[email protected]>
4829
4830 Handle the title changes in a proper MVC way.
4831
4832 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
4833 canvas' TITLE_CHANGED messages
4834 (MainWindow.update_title): New. Update the main window's title
4835 (MainWindow.__SetTitle): Removed. Use update_title instead.
4836 (MainWindow.SetMap): Use update_title instead of __SetTitle
4837 (MainWindow.RenameMap): Do change the window title explicitly
4838 here. That's handled in a proper MVC way now.
4839 (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
4840 messages
4841
4842 * Thuban/Lib/connector.py (Conduit): New class to help classes
4843 that forward messages
4844
4845 * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
4846 (ViewPort): Derive from Conduit instead of Publisher
4847 (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
4848 when calling the inherited versions
4849 (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
4850 methods to subscribe and unsubscribe map messages
4851 (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
4852 handle the map subscriptions
4853 (ViewPort.Map, ViewPort.map_projection_changed)
4854 (ViewPort.layer_projection_changed): Add or update doc-strings
4855
4856 * test/test_connector.py (TestPublisher.test_issue_simple): Fix
4857 typo
4858 (MyConduit): Helper class for the Conduit test.
4859 (TestConduit): Test cases for Conduit
4860
4861 * test/test_connector.py: Use support.run_tests as main.
4862
4863 * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
4864 the TITLE_CHANGED messages
4865 (ViewPortTest.test_forwarding_title_changed): New test to check
4866 whether the viewport forwards the map's TITLE_CHANGED messages
4867 (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
4868 after the port's because the latter may require a still functional
4869 map.
4870
4871 2003-10-06 Bernhard Herzog <[email protected]>
4872
4873 * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
4874 doc-string
4875
4876 2003-10-06 Bernhard Herzog <[email protected]>
4877
4878 * test/test_viewport.py (ViewPortTest.setUp)
4879 (SimpleViewPortTest.test_init_with_size): Move the test for the
4880 initial size as a constructor parameter from ViewPortTest.setUp
4881 method to a new separate test in SimpleViewPortTest.
4882
4883 2003-10-06 Bernhard Herzog <[email protected]>
4884
4885 * test/test_viewport.py (MockView): New class derived from
4886 ViewPort with a mock implementation of GetTextExtent to be used in
4887 the test cases
4888 (ViewPortTest.setUp): Use MockView instead of ViewPort
4889
4890 * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
4891 into what would be a "pure virtual function" in C++: always raise
4892 NotImplementedError. Mock implementations for test cases don't
4893 belong into the real code
4894
4895 2003-10-02 Bernhard Herzog <[email protected]>
4896
4897 * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
4898 close the dbf file we create so that it's contents have been
4899 written properly.
4900
4901 * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
4902 libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
4903 Update to shapelib 1.2.10
4904
4905 2003-10-01 Jan-Oliver Wagner <[email protected]>
4906
4907 * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
4908 it annoys lintian which warns about these files not being
4909 executable. The #! isn't necessary here since if you absolutely
4910 must execute them you can always say "python <filename>".
4911
4912 2003-09-26 Bernhard Herzog <[email protected]>
4913
4914 * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
4915 only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
4916 is ported to a newer the import will fail, so it should be noticed
4917 immediately that this function is gone.
4918 Fixes RT#1919
4919
4920 2003-09-26 Bernhard Herzog <[email protected]>
4921
4922 Add a DTD for the projection files and make thuban write valid
4923 projection files
4924
4925 * Resources/XML/projfile.dtd: New. DTD for thuban's projection
4926 files
4927
4928 * Thuban/Model/resource.py (ProjFileSaver.write): Use
4929 'projectionlist' as the name in the document type declaration so
4930 that it matches the element type of the root element.
4931
4932 * test/test_proj.py (sample_projfile, sample_projfile2): Use
4933 'projectionlist' as the name in the document type declaration just
4934 as it is done now in the files thuban would write
4935 (sample_projfile, sample_projfile_data): Fix spelling of
4936 "Mercator"
4937 (TestProjFile.doTestWrite): Validate the written and the expected
4938 XML data
4939 (TestProjFile): Derive from ValidationTest so that we can run xml
4940 validation tests
4941
4942 2003-09-24 Bernhard Herzog <[email protected]>
4943
4944 * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
4945 modify the list returned by map.Layers() in place since it is the
4946 actual list of layers used by the map.
4947
4948 2003-09-23 Jan-Oliver Wagner <[email protected]>
4949
4950 * Doc/manual/thuban-manual.xml: Added subsection to chapter
4951 Extensions to describe the extensions coming with the Thuban
4952 standard package (gns2shp and importAPR).
4953
4954 2003-09-23 Bernhard Herzog <[email protected]>
4955
4956 * libraries/thuban/wxproj.cpp (project_point): if there's an
4957 inverse but no forward projection, convert to degrees after
4958 applying the inverse projection. Fixes RT#2096
4959
4960 * test/test_wxproj.py: New. Test cases for wxproj.so. One test
4961 implicitly tests for the fix to RT#2096
4962
4963 * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
4964 Check that the sequences have the same lengths
4965
4966 * Resources/Projections/defaults.proj (Geographic projection): Use
4967 a much more precise value for the to_meter attribute.
4968
4969 2003-09-22 Bernhard Herzog <[email protected]>
4970
4971 * test/support.py (initthuban): Make sure to unset the LANG env.
4972 var. so that tests that compare translated strings work. Solves RT
4973 #2094
4974
4975 2003-09-22 Jan-Oliver Wagner <[email protected]>
4976
4977 Small improvement of APR import.
4978
4979 * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
4980 Added tests for text-ranges.
4981
4982 * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
4983 returns a string object if the range is based on text.
4984
4985 * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
4986 range retrieval.
4987
4988 2003-09-22 Jan-Oliver Wagner <[email protected]>
4989
4990 Initial version of the importAPR extension which is in
4991 experimental state.
4992
4993 * /Extensions/importAPR/, /Extensions/importAPR/samples/,
4994 /Extensions/importAPR/test/: New directories.
4995
4996 * /Extensions/importAPR/samples/README: New: Howto load the samples.
4997
4998 * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
4999 file which refers to the Thuban Iceland demo data.
5000
5001 * /Extensions/importAPR/test/README: New: Howto execute the tests.
5002
5003 * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
5004
5005 * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
5006 as in '.apr'-files.
5007
5008 * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
5009 ODB Objects as in '.apr', '.avl' and other files.
5010
5011 * /Extensions/importAPR/__init__.py: New: Init to make this
5012 directory a package.
5013
5014 * /Extensions/importAPR/importAPR.py: New: Import a ArcView
5015 project file (.apr) and convert it to Thuban.
5016
5017 2003-09-22 Jan-Oliver Wagner <[email protected]>
5018
5019 * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
5020
5021 2003-09-19 Jan-Oliver Wagner <[email protected]>
5022
5023 * Doc/manual/thuban-manual.xml: Extended section 'Installation'
5024 with description on RPM installation and RPM binary package
5025 creation.
5026
5027 2003-09-18 Bernhard Herzog <[email protected]>
5028
5029 * setup.py (data_files): Only add the mo files if the Locales
5030 directory actually exists, so that setup.py works with a fresh CVS
5031 checkout
5032
5033 2003-09-12 Jan-Oliver Wagner <[email protected]>
5034
5035 * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
5036 in viewport, not anymore in view
5037
5038 2003-09-04 Jan-Oliver Wagner <[email protected]>
5039
5040 Introducing first Extension (gns2shp).
5041
5042 * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
5043
5044 * Extensions/__init__.py: New. init to make this dir a package.
5045
5046 * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
5047
5048 * Extensions/gns2shp/test/README: New. some info on this test directory.
5049
5050 * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
5051
5052 * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
5053 of Shapefile from GNS text file format
5054
5055 2003-09-03 Jan-Oliver Wagner <[email protected]>
5056
5057 Fix/workaround for bug #2019:
5058 https://intevation.de/rt/webrt?serial_num=2019
5059
5060 * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
5061 (IdentifyView.__init__): Added another button that allows to
5062 stop the identify mode.
5063 (IdentifyView.OnStop): New. Stops the identify mode.
5064
5065 2003-09-03 Jan-Oliver Wagner <[email protected]>
5066
5067 Introducing a new exception dialog that allows to exit the
5068 application immediately.
5069 This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
5070
5071 * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
5072
5073 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
5074 Made strings available to translations. Exchanged the simple
5075 ScrolledMessageDialog by the new ExceptionDialog.
5076
5077 2003-09-01 Bernhard Herzog <[email protected]>
5078
5079 * NEWS: New. Summary of changes and release notes.
5080
5081 * MANIFEST.in: Add NEWS
5082
5083 2003-09-01 Bernhard Herzog <[email protected]>
5084
5085 * MANIFEST.in: Correct the include statement for the mo-files and
5086 include the documentation too.
5087
5088 * setup.py (data_files): Add the .mo files
5089 (setup call): Up to version 0.9.0
5090
5091 2003-09-01 Bernhard Herzog <[email protected]>
5092
5093 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
5094 parameter list to just parent and session
5095 (ChooseDBTableDialog.__set_properties): Removed. Setting the
5096 selection of empty list boxes is not allowed (and produces C++
5097 assertion errors) and the rest of the setup is better done in
5098 __init__ anyway.
5099 (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
5100 (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
5101 builtins True/False for booleans to avoid warnings from wxPython
5102
5103 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
5104 ChooseDBTableDialog constructor parameters.
5105
5106 2003-09-01 Bernhard Herzog <[email protected]>
5107
5108 * Thuban/Model/postgisdb.py
5109 (PostGISTable): Extend doc-string
5110 (PostGISTable._fetch_table_information): Set the column index
5111 correctly, pretending ignored columns don't exist.
5112
5113 * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
5114 for postgis tables with data types not yet supported by thuban.
5115
5116 2003-08-29 Bernhard Herzog <[email protected]>
5117
5118 * HOWTO-Release: Tweak item about running the tests.
5119
5120 2003-08-29 Jan-Oliver Wagner <[email protected]>
5121
5122 * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
5123
5124 2003-08-29 Bernhard Herzog <[email protected]>
5125
5126 Add some missing parameters to projections. Proj complains about
5127 them on windows but for some reason not on Linux.
5128
5129 * test/test_save.py (SaveSessionTest.testLayerProjection): Add
5130 missing required projection parameters
5131
5132 * test/test_proj.py (TestProjFile.test): Add missing required
5133 projection parameters
5134
5135 * test/test_load_0_8.py (TestLayerProjection.file_contents)
5136 (TestLayerProjection.test): Add missing required projection
5137 parameters and tests for them
5138
5139 * test/test_load.py (TestLayerProjection.file_contents)
5140 (TestLayerProjection.test): Add missing required projection
5141 parameters and tests for them
5142
5143 * test/test_layer.py (TestLayer.test_base_layer): Add missing
5144 required projection parameters
5145
5146 2003-08-29 Bernhard Herzog <[email protected]>
5147
5148 * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
5149 access the pj_errno because directly accessing pj_errno doesn't
5150 work on windows if the proj library is in a DLL
5151
5152 * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
5153
5154 2003-08-28 Bernhard Herzog <[email protected]>
5155
5156 * test/test_proj.py: Import things from Thuban after calling
5157 initthuban
5158
5159 * test/test_load.py (LoadSessionTest.filenames): New class
5160 variable with the filename attributes to normalize
5161 (LoadSessionTest.check_format): Pass self.filenames to
5162 sax_eventlist to normalize the filename attributes
5163
5164 * test/xmlsupport.py: Add cvs keywords
5165 (SaxEventLister.__init__): New parameter filenames which indicates
5166 attributes that contain filenames
5167 (SaxEventLister.startElementNS): Normalize the filename attributes
5168 with os.path.normpath
5169 (sax_eventlist): New parameter filenames to pass through to
5170 SaxEventLister
5171
5172 * test/test_derivedshapestore.py: Make this file callable as a
5173 program to execute the tests
5174 (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
5175 the session to self.session so that it gets destroyed properly
5176
5177 * test/test_layer.py (TestLayer.tearDown): Call the session's
5178 Destroy method
5179
5180 * test/test_map.py (TestMapBase.tearDown): Destroy self.session
5181 too if it exists
5182 (TestMapAddLayer.test_add_layer): Bind the session to self.session
5183 so that it gets destroyed properly
5184
5185 * test/postgissupport.py (reason_for_not_running_tests): Add a
5186 test for the existence of popen2.Popen4.
5187
5188 * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
5189 reliable way to destroy the sessions created in the test cases
5190 (SaveSessionTest.test_dbf_table): Bind the session to self.session
5191 so that it gets destroyed properly
5192 (SaveSessionTest.testLayerProjection): Bind the session to
5193 self.session so that it gets destroyed properly
5194
5195 * test/test_session.py (UnreferencedTablesTests.tearDown): Make
5196 sure that the session is destroyed properly
5197
5198 * test/test_shapefilestore.py: Make this callable as a program to
5199 execute the tests
5200
5201 * test/test_scalebar.py: Remove unnecessary import of _ from
5202 Thuban
5203
5204 * test/support.py (print_garbage_information): Call initthuban
5205 here because it may be called indirectly from test cases that test
5206 test support modules which do not use anything from thuban itself
5207 (ThubanTestProgram.runTests): Remove unnecessary debug print
5208
5209 2003-08-28 Bernhard Herzog <[email protected]>
5210
5211 * Thuban/version.py (longversion): Update to 0.9
5212
5213 * Thuban/UI/mainwindow.py: Remove some unused imports
5214
5215 * README: Add section about required additional software. Add date
5216 and revision CVS keywords
5217
5218 * HOWTO-Release: Add item about the translations. Add date and
5219 revision CVs keywords and change formatting to match README a bit
5220 better
5221
5222 * po/de.po: Update for 0.9
5223
5224 * test/README: Tweak the wording a little because many tests are
5225 not really unittest.
5226
5227 2003-08-27 Bernhard Herzog <[email protected]>
5228
5229 As preparation for the 0.9 release, switch thuban files to a
5230 non-dev namespace
5231
5232 * Thuban/Model/save.py (SessionSaver.write_session): Write files
5233 with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
5234 namespace
5235
5236 * Thuban/Model/load.py (SessionLoader.__init__): Accept the
5237 http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
5238
5239 * test/test_save.py (SaveSessionTest.dtd)
5240 (SaveSessionTest.testEmptySession)
5241 (SaveSessionTest.testSingleLayer)
5242 (SaveSessionTest.testLayerProjection)
5243 (SaveSessionTest.testRasterLayer)
5244 (SaveSessionTest.testClassifiedLayer)
5245 (SaveSessionTest.test_dbf_table)
5246 (SaveSessionTest.test_joined_table)
5247 (SaveSessionTest.test_save_postgis): Update for new namespace
5248
5249 * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
5250 (TestLayerVisibility.file_contents, TestLabels.file_contents)
5251 (TestLayerProjection.file_contents)
5252 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
5253 (TestPostGISLayer.file_contents)
5254 (TestPostGISLayerPassword.file_contents)
5255 (TestLoadError.file_contents, TestLoadError.test): Update for new
5256 namespace
5257
5258 2003-08-27 Bernhard Herzog <[email protected]>
5259
5260 Make the table interface distinguish between row ids (an integer
5261 that uniquely identifies a row) and row ordinals (a simple row
5262 count from 0 to NumRows() - 1)
5263
5264 * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
5265 (PostGISTable.RowOrdinalToId): New methods to conver between row
5266 ids and row ordinals
5267 (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
5268 parameter row_is_ordinal to indicate whether the row parameter is
5269 the row id or the ordinal
5270
5271 * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
5272 (TransientTableBase.RowOrdinalToId)
5273 (AutoTransientTable.RowIdToOrdinal)
5274 (AutoTransientTable.RowOrdinalToId): Same new methods as in
5275 PostGISTable.
5276 (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
5277 (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
5278 Same new parameter as in PostGISTable.
5279
5280 * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
5281 (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
5282 (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
5283 (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
5284 (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
5285 parameter as in PostGISTable.
5286
5287 * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
5288 (DataTable.RowOrdinalToId): New methods to convert between row ids
5289 and row ordinals.
5290 (TableGrid.SelectRowById): New method to select a row based on its
5291 ID as opposed to its ordinal
5292 (DataTable.GetValue, TableGrid.OnRangeSelect)
5293 (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
5294 (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
5295 (LayerTableFrame.__init__): Convert between row ids and row
5296 ordinals as appropriate
5297
5298 * test/postgissupport.py (PostGISDatabase.__init__): Add
5299 doc-string.
5300 (PostGISDatabase.initdb): The optional third item in a tuple in
5301 tables is now a (key, value) list with additional arguments to
5302 pass to upload_shapefile
5303 (upload_shapefile): New parameter gid_offset to allow gids that
5304 are not the same as the shapeids in the shapefile
5305 (PostgreSQLServer.get_default_static_data_db): Use the new
5306 gid_offset to make the gids in landmarks 1000 higher than the
5307 shapeids in the shapefile
5308
5309 * test/test_viewport.py
5310 (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
5311 new shapeids in the landmarks table
5312
5313 * test/test_transientdb.py
5314 (TestTransientTable.run_iceland_political_tests)
5315 (TestTransientTable.test_transient_joined_table): Add tests for
5316 the new table methods and new keywords arguments.
5317
5318 * test/test_postgis_db.py
5319 (TestPostGISTable.test_read_row_as_dict_row_count_mode)
5320 (TestPostGISTable.test_read_value_row_count_mode)
5321 (TestPostGISTable.test_row_id_to_ordinal)
5322 (TestPostGISTable.test_row_oridnal_to_id): New test for the new
5323 table methods and the new arguments
5324 (TestPostGISShapestorePoint.test_shapes_in_region)
5325 (TestPostGISShapestorePoint.test_shape_raw_data)
5326 (TestPostGISShapestorePoint.test_shape_points)
5327 (TestPostGISShapestorePoint.test_shape_shapeid)
5328 (TestPostGISShapestorePoint.test_all_shapes)
5329 (TestPostGISTable.test_simple_query)
5330 (TestPostGISTable.test_simple_query)
5331 (TestPostGISTable.test_simple_query)
5332 (TestPostGISTable.test_read_value)
5333 (TestPostGISTable.test_read_row_as_dict): Adapt to the new
5334 shapeids in the landmarks table
5335
5336 * test/test_memory_table.py
5337 (TestMemoryTable.test_read_row_as_dict_row_count_mode)
5338 (TestMemoryTable.test_read_value_row_count_mode)
5339 (TestMemoryTable.test_row_id_to_ordinal)
5340 (TestMemoryTable.test_row_oridnal_to_id): New test for the new
5341 table methods and the new arguments
5342
5343 * test/test_dbf_table.py
5344 (TestDBFTable.test_read_row_as_dict_row_count_mode)
5345 (TestDBFTable.test_read_value_row_count_mode)
5346 (TestDBFTable.test_row_id_to_ordinal)
5347 (TestDBFTable.test_row_oridnal_to_id): New test for the new table
5348 methods and the new arguments
5349
5350 2003-08-26 Bernhard Herzog <[email protected]>
5351
5352 * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
5353 more postgis specific but much faster method to get the bounding
5354 box
5355
5356 2003-08-26 Bernhard Herzog <[email protected]>
5357
5358 * Thuban/Model/postgisdb.py (PostGISTable.Title)
5359 (PostGISShapeStore.AllShapes): Add these missing methods.
5360 (PostGISShapeStore.ShapesInRegion): No need to raise
5361 StopIteration. We can simply return
5362
5363 * test/test_postgis_db.py (TestPostGISTable.test_title)
5364 (TestPostGISShapestorePoint.test_all_shapes): New tests for the
5365 new methods
5366
5367 2003-08-25 Bernhard Herzog <[email protected]>
5368
5369 * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
5370
5371 * test/test_postgis_db.py (PolygonTests): New class containing
5372 those tests from TestPostGISShapestorePolygon that can also be
5373 used to test MUTLIPOLYGON tables
5374 (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
5375 so derive from that
5376 (TestPostGISShapestoreMultiPolygon): New class with tests for
5377 MUTLIPOLYGON tables
5378
5379 * test/postgissupport.py (PostGISDatabase.initdb): Allow the
5380 tables argument to have tuples with three items to override the
5381 WKT type used.
5382 (PostgreSQLServer.get_default_static_data_db): Use the above to
5383 create a polygon table with MUTLIPOLYGONs
5384 (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
5385 (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
5386 coords_to*
5387 (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
5388 (wkt_converter): New. Map WKT types to converters
5389 (upload_shapefile): New parameter force_wkt_type to use a
5390 different WKT type than the default
5391
5392 2003-08-25 Bernhard Herzog <[email protected]>
5393
5394 * Thuban/UI/application.py
5395 (ThubanApplication.run_db_param_dialog): New. Suitable as a
5396 db_connection_callback. Main difference is that the dialog run
5397 from this method doesn't have a parent so it can be used even when
5398 there is no main window
5399 (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
5400 no db_connection_callback was given. This way the dialog pops up
5401 even when the .thuban file was given as a command line parameter.
5402
5403 2003-08-25 Bernhard Herzog <[email protected]>
5404
5405 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
5406 before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
5407 which leads to an effectively frozen X session because the user
5408 can only interact with the dialog but the mouse is still grabbed
5409 by the canvas.
5410 Also, call the tool's Hide method before MouseLeftUp because
5411 MouseLeftUp may change the tool's coordinates.
5412
5413 2003-08-25 Bernhard Herzog <[email protected]>
5414
5415 * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
5416 LoadCancelled exceptions and handle them by returning immediately.
5417
5418 2003-08-25 Bernhard Herzog <[email protected]>
5419
5420 GUI part of loading sessions with postgis connections which may
5421 require user interaction to get passwords or updated parameters
5422
5423 * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
5424 bit nucer and be more generic.
5425 (DBFrame.OnAdd): Adapt to new DBDialog interface
5426
5427 * Thuban/UI/application.py (ThubanApplication.OpenSession): New
5428 optional parameter db_connection_callback which is passed to
5429 load_session.
5430
5431 * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
5432 Suitable as a db_connection_callback
5433 (MainWindow.OpenSession): Use self.run_db_param_dialog as the
5434 db_connection_callback of the application's OpenSession method
5435
5436
5437 2003-08-25 Bernhard Herzog <[email protected]>
5438
5439 Basic loading of sessions containing postgis connections:
5440
5441 * Thuban/Model/load.py (LoadError): Add doc-string
5442 (LoadCancelled): New exception class to indicate a cancelled load
5443 (SessionLoader.__init__): Add the db_connection_callback parameter
5444 which will be used by the loader to get updated parameters and a
5445 password for a database connection
5446 (SessionLoader.__init__): Add the new XML elements to the
5447 dispatchers dictionary
5448 (SessionLoader.check_attrs): Two new conversions, ascii to convert
5449 to a byte-string object and idref as a generic id reference
5450 (SessionLoader.start_dbconnection)
5451 (SessionLoader.start_dbshapesource): New. Handlers for the new XML
5452 elements
5453 (load_session): Add the db_connection_callback to pass through the
5454 SessionLoader
5455
5456 * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
5457 New classes to test loading of sessions with postgis database
5458 connections.
5459
5460 2003-08-25 Bernhard Herzog <[email protected]>
5461
5462 * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
5463 replace it and the comment with __BuildDate__ by the Source: and
5464 Id: cvs keywords as used in the other files.
5465
5466 2003-08-25 Bernhard Herzog <[email protected]>
5467
5468 * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
5469 LoadError when a required attribute is missing. The code used to
5470 be commented out for some reason, but probably should have been
5471 active.
5472
5473 * test/test_load.py (TestLoadError.test): Test the message in the
5474 LoadError too to make sure it really is about the missing
5475 attribute
5476
5477 2003-08-22 Bernhard Herzog <[email protected]>
5478
5479 * test/test_save.py (SaveSessionTest.test_dbf_table)
5480 (SaveSessionTest.test_joined_table): Add XML validation tests.
5481
5482 2003-08-22 Bernhard Herzog <[email protected]>
5483
5484 Implement saving a session with a postgis connection
5485
5486 * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
5487 elements for database connections and shapestores using db
5488 connections
5489 (session): Add the dbconnections to the content model
5490
5491 * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
5492 Write the db connections
5493 (SessionSaver.write_session): Call write_db_connections to write
5494 the connection before the data sources
5495 (SessionSaver.write_data_containers): Handle postgis shapestores
5496
5497 * test/test_save.py (SaveSessionTest.thubanids)
5498 (SaveSessionTest.thubanidrefs): Update for new DTD
5499 (SaveSessionTest.test_save_postgis): New. Test saving a session
5500 with postgis connections
5501
5502 * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
5503 (PostGISTable.TableName): New accessor methods for the connection
5504 and table name
5505
5506 * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
5507 (TestPostGISTable.test_dbname): New methods to test the new
5508 PostGISConnection methods
5509
5510 2003-08-22 Bernhard Herzog <[email protected]>
5511
5512 * Thuban/Model/postgisdb.py (ConnectionError): New exception class
5513 for exceptions occurring when establishing a Database connection
5514 (PostGISConnection.connect): Catch psycopg.OperationalError during
5515 connects and raise ConnectionError.
5516
5517 * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
5518 tests for database exceptions
5519
5520 2003-08-22 Bernhard Herzog <[email protected]>
5521
5522 Prepare the test suite for tests with required authentication
5523
5524 * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
5525 variables with two predefined users/passwords, one for the admin
5526 and one for a non-privileged user.
5527 (PostgreSQLServer.createdb): Pass the admin name to initdb and add
5528 the non-privileged user to the database and set the admin password
5529 (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
5530 Better error reporting
5531 (PostgreSQLServer.connection_params)
5532 (PostgreSQLServer.connection_string): New methods to return
5533 information about how to connect to the server
5534 (PostgreSQLServer.execute_sql): New. Convenience method to execute
5535 SQL statements
5536 (PostgreSQLServer.require_authentication): Toggle whether the
5537 server requires authentication
5538 (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
5539 Add or alter users
5540 (PostGISDatabase.initdb): Pass the admin name one the
5541 subprocesses' command lines. Grant select rights on
5542 geometry_columns to everybody.
5543 (upload_shapefile): Use the admin name and password when
5544 connecting. Grant select rights on the new table to everybody.
5545
5546 * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
5547 server's new methods to get the connection parameters.
5548
5549 * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
5550 (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
5551 server's new methods to get the connection parameters.
5552
5553 * test/test_postgis_db.py
5554 (TestPostGISConnection.test_gis_tables_empty)
5555 (TestPostGISConnection.test_gis_tables_non_empty)
5556 (PostGISStaticTests.setUp): Use the server's new methods to get
5557 the connection parameters.
5558
5559 2003-08-22 Bernhard Herzog <[email protected]>
5560
5561 * Thuban/UI/about.py (About.__init__): Add the psycopg version.
5562
5563 * Thuban/version.py: Add psycopg version
5564
5565 * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
5566 version of the psycopg module
5567
5568 2003-08-22 Bernhard Herzog <[email protected]>
5569
5570 * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
5571 (DBFrame.OnEdit): Removed because it's not used and wouldn't work
5572 at the moment. The functionality should probably be implemented
5573 some time, though.
5574 (DBFrame.OnRemove): Display a message if the connection can't be
5575 removed because it's still in use.
5576
5577 2003-08-22 Jan-Oliver Wagner <[email protected]>
5578
5579 * Thuban/UI/about.py (About.__init__): split up the huge about
5580 text into elements/lists for easier translation. This fixes bug
5581 https://intevation.de/rt/webrt?serial_num=2058
5582 Also, made some forgotten string available for the i18n.
5583
5584 2003-08-21 Bernhard Herzog <[email protected]>
5585
5586 Make postgis support really optional including insensitive menu
5587 items.
5588
5589 * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
5590 whether the postgis is supported.
5591
5592 * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
5593 to make postgis support optional
5594
5595 * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
5596 version of Thuban.Model.postgisdb.has_postgis_support
5597 (database_management command): Make it only sensitive if postgis
5598 is supported.
5599
5600 2003-08-21 Jan-Oliver Wagner <[email protected]>
5601
5602 * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
5603 (section Adding and Removing Layers): Added text and described
5604 multi-selection.
5605 (chapter Extensions): New.
5606
5607 2003-08-21 Jan-Oliver Wagner <[email protected]>
5608
5609 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
5610 settings to allow multiple files to load into the map.
5611 Also reduced selection to *.shp as a default.
5612
5613 2003-08-20 Bernhard Herzog <[email protected]>
5614
5615 Add dialogs and commands to open database connections and add
5616 database layers.
5617
5618 * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
5619 method to open the database connection management dialog
5620 (MainWindow.AddDBLayer): New method to add a layer from a database
5621 (_has_dbconnections): New helper function to use for sensitivity
5622 (database_management command, layer_add_db command): New commands
5623 that call the above new methods.
5624 (main_menu): Add the new commands to the menu.
5625
5626 * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
5627 (PostGISConnection.connect): Establish the actual connection in a
5628 separate method and call it in __init__. This makes it easier to
5629 override the behavior in test cases
5630 (PostGISConnection.BriefDescription): New method to return a brief
5631 description for use in dialogs.
5632
5633 * test/test_postgis_db.py (NonConnection): DB connection that
5634 doesn't actually connect
5635 (TestBriefDescription): New class with tests for the new
5636 BriefDescription method
5637
5638 2003-08-19 Jan-Oliver Wagner <[email protected]>
5639
5640 Moved anything from extensions to libraries.
5641
5642 * libraries: New.
5643
5644 * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
5645
5646 * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
5647 Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
5648 been moved here from thuban/extensions/pyprojection/
5649 See there in the Attic for the older history.
5650
5651 * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
5652 dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
5653 shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
5654 have been moved here from thuban/extensions/pyshapelib/
5655 See there in the Attic for the older history.
5656
5657 * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
5658 files have been moved here from thuban/extensions/shapelib/
5659 See there in the Attic for the older history.
5660
5661 * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
5662 gdalwarp.cpp, wxproj.cpp: These files have been moved here from
5663 thuban/extensions/thuban/
5664 See there in the Attic for the older history.
5665
5666 * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
5667
5668 * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
5669 gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
5670
5671 * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
5672 Moved to libraries/shapelib.
5673
5674 * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
5675 shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
5676 ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
5677 Moved to libraries/pyshapelib.
5678
5679 * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
5680 LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
5681 Moved to libraries/pyprojection.
5682
5683 * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
5684
5685 * extensions: Removed.
5686
5687 2003-08-19 Bernhard Herzog <[email protected]>
5688
5689 * test/test_viewport.py (ViewPortTest): We don't use the
5690 facilities of FileTestMixin so don't derive from it.
5691 (TestViewportWithPostGIS): New class with tests for using a
5692 viewport on a map with postgis layers.
5693
5694 2003-08-19 Bernhard Herzog <[email protected]>
5695
5696 Add the db connection management to the session.
5697
5698 * Thuban/Model/session.py (Session.__init__): New instance
5699 variable db_connections
5700 (Session.AddDBConnection, Session.DBConnections)
5701 (Session.HasDBConnections, Session.CanRemoveDBConnection)
5702 (Session.RemoveDBConnection): New methods to manage and query the
5703 db connections managed by the session
5704 (Session.OpenDBShapeStore): New method to open a shapestore from a
5705 db connection
5706
5707 * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
5708 messages for the db connection handling in the session
5709
5710 * test/test_postgis_session.py: New. test cases for the session's
5711 db connection handling with postgis connections
5712
5713 2003-08-19 Bernhard Herzog <[email protected]>
5714
5715 Add very basic postgis database support and the corresponding test
5716 cases. The test cases require a PostgreSQL + postgis installation
5717 but no existing database. The database will be created
5718 automatically by the test cases
5719
5720 * test/README: Add note about skipped tests and the requirements
5721 of the postgis tests.
5722
5723 * Thuban/Model/postgisdb.py: New. Basic postgis database support.
5724
5725 * test/test_postgis_db.py: New. Test cases for the postgis
5726 support.
5727
5728 * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
5729 format
5730
5731 * test/test_wellknowntext.py: New. Test cases for the
5732 wellknowntext parser
5733
5734 * test/postgissupport.py: New. Support module for tests involving
5735 a postgis database.
5736
5737 * test/support.py (execute_as_testsuite): Shut down the postmaster
5738 if it's still running after the tests
5739
5740 * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
5741 well known text format
5742
5743 2003-08-19 Jan-Oliver Wagner <[email protected]>
5744
5745 * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
5746 message dialog.
5747
5748 2003-08-18 Bernhard Herzog <[email protected]>
5749
5750 * test/support.py (ThubanTestResult.printErrors): Indent the
5751 reason for the skips in the output to make it a bit more readable.
5752 (execute_as_testsuite): New helper function to run a test suite
5753 and print some more information.
5754 (run_tests): Use execute_as_testsuite to run the tests
5755
5756 * test/runtests.py (main): Use execute_as_testsuite to run the
5757 tests
5758
5759 2003-08-18 Bernhard Herzog <[email protected]>
5760
5761 Fix some bugs in Thuban and the test suite that were uncovered by
5762 changes introduced in Python 2.3:
5763
5764 * Thuban/Model/table.py (DBFTable.__init__): Make sure the
5765 filename is an absolute name
5766
5767 * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
5768 filename is an absolute name
5769
5770 * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
5771 unique filename to save to and use the correct relative filename
5772 in the expected output.
5773 (SaveSessionTest.test_dbf_table): Use the correct relative
5774 filename in the expected output.
5775
5776 * test/test_layer.py (TestLayer.test_raster_layer): Update the
5777 test to check whether the filename is absolute.
5778
5779 2003-08-18 Jan-Oliver Wagner <[email protected]>
5780
5781 * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
5782
5783 2003-08-15 Bernhard Herzog <[email protected]>
5784
5785 Change the way shapes are returned by a shape store. The
5786 ShapesInRegion method returns an iterator over actual shape
5787 objects instead of a list of shape ids.
5788
5789 * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
5790 id.
5791 (ShapefileStore.ShapesInRegion): Return an iterator over the
5792 shapes which yields shape objects instead of returning a list of
5793 shape ids
5794 (ShapefileStore.AllShapes): New. Return an iterator over all
5795 shapes in the shape store
5796 (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
5797
5798 * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
5799 doc-string.
5800
5801 * Thuban/UI/baserenderer.py
5802 (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
5803 layer_shapes and make it return an iterator containg shapes
5804 instead of a list of ids.
5805 (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
5806 layer_shapes() change
5807
5808 * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
5809 (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
5810
5811 * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
5812 changes in the ShapesInRegion return value.
5813 (ViewPort._get_hit_tester): Remove commented out code
5814
5815 * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
5816 new return value.
5817 (SimpleShapeStore.AllShapes): New. Implement this method too.
5818
5819 * test/test_layer.py (TestLayer.test_arc_layer)
5820 (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
5821 (TestLayer.test_point_layer_with_projection)
5822 (TestLayer.test_derived_store): Adapt to changes in the
5823 ShapesInRegion return value.
5824
5825 * test/test_shapefilestore.py
5826 (TestShapefileStoreArc.test_shapes_in_region)
5827 (TestShapefileStorePolygon.test_shapes_in_region)
5828 (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
5829 in the ShapesInRegion return value.
5830 (TestShapefileStorePoint.test_all_shapes)
5831 (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
5832 methods
5833
5834 * test/test_derivedshapestore.py
5835 (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
5836 the ShapesInRegion return value.
5837 (TestDerivedShapeStore.test_all_shapes)
5838 (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
5839 methods
5840
5841 2003-08-15 Bernhard Herzog <[email protected]>
5842
5843 Make the renderers deal correctly with raw vs. python level
5844 representation of shape geometries
5845
5846 * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
5847 Return a flag useraw in addition to the callable and the parameter
5848 to indicate whether the callable can deal with the raw shape data
5849 or uses the higher level python lists of coordinates. The callable
5850 now should accept either the raw data or the return value of the
5851 shape's Points() method.
5852 (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
5853 change
5854 (BaseRenderer.projected_points): Instead of the shape id use the
5855 points list as parameter.
5856 (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
5857 (BaseRenderer.draw_point_shape): Adapt to projected_points()
5858 change and accept the points list as parameter instead of the
5859 shape id.
5860
5861 * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
5862 the useraw flag as required by the BaseRenderer
5863 (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
5864 changes.
5865
5866 * test/test_baserenderer.py
5867 (TestBaseRenderer.test_point_with_classification): New test for
5868 rendering a map with classifications.
5869
5870 2003-08-15 Bernhard Herzog <[email protected]>
5871
5872 * Thuban/UI/viewport.py (ViewPort.find_shape_at)
5873 (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
5874 (ViewPort._get_hit_tester, ViewPort.projected_points)
5875 (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
5876 (ViewPort._find_label_at): Split the find_shape_at method into
5877 several new methods and use the functions in the hit-test module.
5878
5879 * Thuban/UI/hittest.py: New module with Python-level hit-testing
5880 functions
5881
5882 * test/test_hittest.py: New. Test for the new hittest module
5883
5884 2003-08-15 Bernhard Herzog <[email protected]>
5885
5886 * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
5887 projection to all corners of the bounding box to get a better
5888 approximation of the projected bounding box
5889
5890 * test/test_layer.py (TestLayer.test_point_layer_with_projection):
5891 New. Test coordinate handling of a layer with a projection.
5892 Catches the bug fixed in Layer.ShapesInRegion
5893
5894 2003-08-15 Bernhard Herzog <[email protected]>
5895
5896 Move some of the mock objects in test_baserenderer into their own
5897 module so they can easily be used from other tests
5898
5899 * test/mockgeo.py: New test helper module with some mock objects
5900 for geometry related things like shapes, shapestores and
5901 projections.
5902
5903 * test/test_mockgeo.py: New. Tests for the new helper module
5904
5905 * test/test_baserenderer.py: Some of the mock-objects are in
5906 mockgeo now.
5907
5908 2003-08-12 Jan-Oliver Wagner <[email protected]>
5909
5910 * Thuban/UI/about.py (About.__init__): Added Björn Broscheit.
5911
5912 2003-08-12 Bernhard Herzog <[email protected]>
5913
5914 * po/de.po: New. German translations by Bjoern Broscheit
5915
5916 2003-08-12 Bernhard Herzog <[email protected]>
5917
5918 * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
5919 strings have to be one string literal.
5920
5921 2003-08-11 Bernhard Herzog <[email protected]>
5922
5923 * test/support.py (FloatComparisonMixin.assertPointListEquals):
5924 New. This method was used in various derived classes, but it's
5925 better to have it here.
5926
5927 * test/test_shapefilestore.py
5928 (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
5929 FloatComparisonMixin
5930
5931 * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
5932 It's now in FloatComparisonMixin
5933
5934 * test/test_derivedshapestore.py
5935 (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
5936 in FloatComparisonMixin
5937
5938 2003-08-11 Bernhard Herzog <[email protected]>
5939
5940 * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
5941 error message
5942
5943 2003-08-08 Jan-Oliver Wagner <[email protected]>
5944
5945 * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
5946 with version number.
5947 Changed title to reflect version number of Thuban.
5948
5949 2003-08-08 Jan-Oliver Wagner <[email protected]>
5950
5951 * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
5952 the list corresponds to the "About" web page.
5953
5954 2003-08-08 Bernhard Herzog <[email protected]>
5955
5956 * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
5957 Make sure translated strings are recognized as one string literal.
5958
5959 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
5960 Make sure translated strings are recognized as one string literal.
5961
5962 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
5963 translated strings are recognized as one string literal.
5964
5965 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
5966 sure translated strings are recognized as one string literal.
5967
5968 2003-08-07 Bernhard Herzog <[email protected]>
5969
5970 * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
5971 Simply delegates to the original shapestore.
5972
5973 * test/test_derivedshapestore.py
5974 (TestDerivedShapeStore.test_raw_format): New. Test case for
5975 DerivedShapeStore.RawShapeFormat
5976
5977 2003-08-07 Bernhard Herzog <[email protected]>
5978
5979 Add raw data interface to shape objects.
5980
5981 * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
5982 class to ShapefileShape which now holds shapefile specific
5983 information.
5984 (ShapefileShape.compute_bbox): Simplified to not cache any
5985 information. The way this method is used that shouldn't matter
5986 performance wise.
5987 (ShapefileShape.RawData): New. Return the shapeid which is the raw
5988 data format for shapes from shapefiles.
5989 (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
5990 in the shape objects returned by a shapestore. For a
5991 ShapefileStore this is always RAW_SHAPEFILE.
5992 (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
5993 method.
5994
5995 * test/test_shapefilestore.py
5996 (TestShapefileStore.test_raw_format): New test to test the raw
5997 format feature of shapes.
5998
5999 * Thuban/Model/layer.py: Remove the unused import of Shape from
6000 data. It was only there for interface compatibility but it's not
6001 used inside of Thuban and the generic Shape class has gone away.
6002
6003 * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
6004 the raw data format and only use an optimized version of its a
6005 shapefile.
6006
6007 2003-08-07 Bernhard Herzog <[email protected]>
6008
6009 * test/test_baserenderer.py (SimpleShape): Shape class for the
6010 tests.
6011 (SimpleShapeStore.Shape): Use SimpleShape instead of
6012 Thuban.Model.data.Shape to make the tests independed of the coming
6013 changes.
6014
6015 2003-08-07 Bernhard Herzog <[email protected]>
6016
6017 * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
6018 (ThubanTestProgram): New classes that extend the respective
6019 classes from unittest. These new version support skipping tests
6020 under certain expected conditions. In the Thuban test suite we
6021 uses this for tests that require the optional gdal support.
6022 (run_tests): Use ThubanTestProgram instead of the unittest.main()
6023
6024 * test/runtests.py (main): Use the new ThubanTestRunner instead of
6025 the normal one from unittest
6026
6027 * test/test_layer.py (TestLayer.test_raster_layer): If this test
6028 is not run because gdal support isn't available report this to the
6029 runner.
6030
6031 * test/test_baserenderer.py
6032 (TestBaseRenderer.test_raster_no_projection): Do not run this test
6033 if gdal support isn't available and report this to the runner.
6034
6035 2003-08-06 Bernhard Herzog <[email protected]>
6036
6037 Rearrange the renderers a bit, partly in preparation for changes
6038 required for the postgis merge, partly to make it more testable.
6039 Also make the representation of coordinates in Shapes more
6040 consistent.
6041
6042 * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
6043 this class is now in BaseRenderer. This class is now practically
6044 only a specialization of BaseRenderer for rendering to an actual
6045 wx DC.
6046 (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
6047 to get the shapetype specific rendering functions.
6048
6049 * Thuban/UI/baserenderer.py: New file with the basic rendering
6050 logic. The code in this file is completely independend of wx.
6051 (BaseRenderer): Class with the basic rendering logic
6052
6053 * test/test_baserenderer.py: New. Test cases for BaseRenderer
6054
6055 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
6056 error_on_redraw to guard agains endless loops and stack overflows
6057 when there's a bug in the rendering code that raises exceptions.
6058 (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
6059 rendering into a separate method _do_redraw so that error handling
6060 is a bit easier. When an exception occurs, set error_on_redraw to
6061 true. When it's true on entry to OnIdle do nothing and return
6062 immediately.
6063
6064 * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
6065 Shape object will always have the coordinates as a list of list of
6066 coordinate pairs (tuples).
6067 (Shape.compute_bbox): Adapt to new representation.
6068
6069 * Thuban/UI/viewport.py (ViewPort.find_shape_at)
6070 (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
6071 Shape objects.
6072
6073 * test/test_shapefilestore.py
6074 (ShapefileStoreTests.assertFloatTuplesEqual)
6075 (ShapefileStoreTests.assertPointListEquals): Rename to
6076 assertPointListEquals and change purpose to checking equality of
6077 the lists returned by Shape.Points().
6078 (TestShapefileStoreArc.test_shape)
6079 (TestShapefileStorePolygon.test_shape)
6080 (TestShapefileStorePoint.test_shape): Use the new
6081 assertPointListEquals instead of assertFloatTuplesEqual
6082
6083 * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
6084 (TestLayer.assertPointListEquals): Rename to assertPointListEquals
6085 and change purpose to checking equality of the lists returned by
6086 Shape.Points().
6087 (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
6088 (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
6089 (TestLayer.test_derived_store): Use the new assertPointListEquals
6090 instead of assertFloatTuplesEqual
6091
6092 * test/test_derivedshapestore.py
6093 (TestDerivedShapeStore.assertFloatTuplesEqual)
6094 (TestDerivedShapeStore.assertPointListEquals): Rename to
6095 assertPointListEquals and change purpose to checking equality of
6096 the lists returned by Shape.Points().
6097 (TestDerivedShapeStore.test_shape): Use the new
6098 assertPointListEquals instead of assertFloatTuplesEqual
6099
6100 2003-08-06 Jan-Oliver Wagner <[email protected]>
6101
6102 * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
6103 a bounding box. A dialog is raised in case, no bounding box
6104 is found. This fixes bug #2043:
6105 https://intevation.de/rt/webrt?serial_num=2043
6106
6107 2003-08-05 Bernhard Herzog <[email protected]>
6108
6109 * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
6110 object look like a Color instantiation. Formerly it looked like a
6111 tuple.
6112
6113 * test/test_color.py (TestColor.test_repr)
6114 (TestColor.test_equality, TestColor.test_inequality): New. test
6115 some more apects of the Color class
6116 (TestTransparent.test_repr, TestTransparent.test_hex)
6117 (TestTransparent.test_equality): New. Test cases for the
6118 Transparent object.
6119
6120 2003-08-04 Jan-Oliver Wagner <[email protected]>
6121
6122 * Doc/manual/thuban-manual.xml: a number of small improvements.
6123 The resulting file is the version submitted for GREAT-ER II.
6124
6125 2003-08-01 Bernhard Herzog <[email protected]>
6126
6127 * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
6128 Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
6129 Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
6130
6131 * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
6132 (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
6133 (ThubanEndBusyCursor): Add doc-strings
6134
6135 2003-08-01 Bernhard Herzog <[email protected]>
6136
6137 First step towards PostGIS integration. More abstraction by movin
6138 more code from the layer to the shapestore. More methods of the
6139 layer are now simply delegated to the equivalent method of the
6140 shapestore. The SHAPETYPE_* constants are now in data not in
6141 layer.
6142
6143 * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
6144 (SHAPETYPE_POINT, Shape): Move these constants and classes from
6145 layer.py to data.py
6146 (ShapefileStore.__init__): More Initialization for the new methods
6147 and functionality.
6148 (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
6149 (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
6150 (ShapefileStore.Shape): New methods that were formerly implemented
6151 in the layer.
6152 (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
6153 (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
6154 (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
6155 equivalents of the new shape methods. These versions are simply
6156 delegated to the original shapstore.
6157
6158 * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
6159 (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
6160 (Layer.SetShapeStore): Removed the initializatin of instance
6161 variables that were needed for the stuff that's now in
6162 ShapefileStore
6163 (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
6164 (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
6165 shapestore.
6166
6167 * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
6168 Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
6169 instead of layer.
6170
6171 * test/test_shapefilestore.py: New. Tests for ShapefileStore.
6172
6173 * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
6174
6175 * test/test_layer.py: Import the SHAPETYPE_* constants from data
6176 instead of layer.
6177 (TestLayer.test_derived_store): Remove the test for the exception
6178 when instantiating the DerivedShapeStore with an incompatible
6179 table which is now in test_derivedshapestore.py. Add some more
6180 tests of the layer methods to determine whether they work for a
6181 DerivedShapeStore as well.
6182
6183 2003-07-31 Jonathan Coles <[email protected]>
6184
6185 * Doc/manual/thuban-manual.xml: Fix the list of required packages
6186 by just listing the name and where they can be found.
6187
6188 2003-07-31 Frank Koormann <[email protected]>
6189
6190 * Doc/manual/thuban-manual.xml:
6191 Changed the screenshot elements to figure.
6192 Changed some variablelist elements to itemizedlist.
6193 Added section on GDAL formats.
6194
6195 2003-07-31 Jonathan Coles <[email protected]>
6196
6197 * Doc/manual/thuban-manual.xml: Added a few sentences about
6198 the Fix Border Color option when generating classes.
6199
6200 2003-07-30 Jonathan Coles <[email protected]>
6201
6202 * Thuban/Model/classgen.py: Add docstrings. Rename specific
6203 Ramp instances to use lower_case_style.
6204
6205 * Thuban/UI/classgen.py: Use renamed Ramp instances.
6206
6207 * Thuban/UI/classifier.py: Add docstrings.
6208
6209 * Thuban/UI/dock.py: Add docstrings.
6210
6211 * test/test_classgen.py: Use renamed Ramp instances.
6212
6213 2003-07-30 Bernhard Herzog <[email protected]>
6214
6215 * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
6216 was never used in Thuban.
6217
6218 2003-07-30 Bernhard Herzog <[email protected]>
6219
6220 * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
6221 method directly instead of going through the transient_table
6222 method. This faster because transient_table may force the copy of
6223 a DBF file into the transient database and setting a table's title
6224 doesnm't affect the title of the associated transient table, so
6225 this fixes RT #2042
6226
6227 * Thuban/UI/main.py (__version__): Don't import the already
6228 removed show_exception_dialog.
6229
6230 2003-07-29 Jonathan Coles <[email protected]>
6231
6232 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
6233 Put back this method and remove the equivalent function since we
6234 are setting the exception hook from within this class (OnInit).
6235
6236 2003-07-29 Jonathan Coles <[email protected]>
6237
6238 * Doc/manual/images/5_2_custom_ramp.png,
6239 Doc/manual/images/5_2_quantiles.png,
6240 Doc/manual/images/5_2_uniform_dist.png,
6241 Doc/manual/images/5_2_unique_values.png,
6242 Doc/manual/images/8_int_error.png: New screen shots.
6243
6244 * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
6245 some points, and added more screen shots.
6246
6247 2003-07-29 Bernhard Herzog <[email protected]>
6248
6249 * Thuban/Model/data.py: Remove the now unused import of warnings
6250
6251 2003-07-29 Bernhard Herzog <[email protected]>
6252
6253 * Thuban/Model/data.py (SimpleStore): Removed. This class has been
6254 deprecated since before the 0.8 release and isn't used in Thuban
6255 itself anymore.
6256
6257 * Thuban/Model/transientdb.py: Remove some unnecessary imports
6258
6259 2003-07-29 Jonathan Coles <[email protected]>
6260
6261 * Thuban/UI/application.py (ThubanApplication.OnInit): set the
6262 python exception hook here so that we are sure to catch any
6263 Thuban exception that happen during initialization.
6264
6265 * Thuban/UI/main.py (main): Don't set the exception hook here,
6266 it will get set in ThubanApplication.OnInit.
6267
6268 2003-07-29 Jonathan Coles <[email protected]>
6269
6270 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
6271 Removed and called it show_exception_dialog() so that the exception
6272 handler can be set before the class is created.
6273
6274 * Thuban/UI/main.py (main): Install the exception handler before
6275 a ThubanApplication is created.
6276
6277 2003-07-29 Bernhard Herzog <[email protected]>
6278
6279 * po/it.po: New. Italian translation by Maurizio Napolitano
6280
6281 * po/ru.po: New. Russian translation by Alex Shevlakov
6282
6283 2003-07-29 Frank Koormann <[email protected]>
6284
6285 * Doc/manual/thuban-manual.xml: Extended section on supported
6286 projections.
6287
6288 2003-07-29 Frank Koormann <[email protected]>
6289
6290 * Doc/manual/thuban-manual.xml: gaspell-checked.
6291
6292 2003-07-29 Jonathan Coles <[email protected]>
6293
6294 * Doc/manual/images/3_5_legend.png: Added border to improve look
6295 on white background.
6296
6297 2003-07-29 Jonathan Coles <[email protected]>
6298
6299 * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
6300 descriptions for the legend toolbar.
6301
6302 * Doc/manual/images/4_2_raster_layer_properties.png: Removed
6303 cursor from dialog box.
6304
6305 2003-07-28 Jonathan Coles <[email protected]>
6306
6307 * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
6308
6309 * Doc/manual/images/2_4_session_tree.png,
6310 Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
6311 Doc/manual/images/4_2_layer_properties.png,
6312 Doc/manual/images/4_2_raster_layer_properties.png,
6313 Doc/manual/images/5_3_genclass.png,
6314 Doc/manual/images/5_classification.png,
6315 Doc/manual/images/6_projection.png,
6316 Doc/manual/images/7_1_table_view.png,
6317 Doc/manual/images/7_2_5_join.png: New screenshots.
6318
6319 2003-07-24 Jonathan Coles <[email protected]>
6320
6321 * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
6322
6323 2003-07-24 Jonathan Coles <[email protected]>
6324
6325 * Doc/manual/thuban-manual.xml: Added EPS images and wrote
6326 chapter on Layer Management.
6327
6328 * Doc/manual/Makefile: New. Makefile to generate all formats for the
6329 manual and images.
6330
6331 2003-07-24 Bernhard Herzog <[email protected]>
6332
6333 * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
6334 it annoys lintian which warns about these files not being
6335 executable. The #! isn't necessary here since if you absolutely
6336 must execute them you can always say "python <filename>".
6337
6338 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
6339 superfluous code to set brush and pen for point shapes
6340
6341 * Thuban/UI/viewport.py: Remove commented out code that wouldn't
6342 belong in viewport anyway
6343
6344 2003-07-24 Frank Koormann <[email protected]>
6345
6346 * Doc/manual/thuban-manual.xml: Added section on table management.
6347
6348 2003-07-24 Bernhard Herzog <[email protected]>
6349
6350 * test/runtests.py (main): Recognize the long "verbose" option
6351 correctly.
6352
6353 2003-07-22 Jonathan Coles <[email protected]>
6354
6355 * Doc/manual/thuban-manual.xml: Continue to write first revision
6356 of the manual.
6357
6358 * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
6359 with Begin/EndDrawing() calls to ensure we aren't doing to
6360 many updates to the dc during rendering.
6361 (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
6362 a pen and brush argument so they need to be passed to the function.
6363
6364 * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
6365 Calculates the minimum and maximum scale values. Factored out
6366 of set_view_transform so that it could be used to zoom all the
6367 way into a single point.
6368 (ViewPort.set_view_transform): Call calc_min_max_scales().
6369 (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
6370 if only a single point is selected.
6371
6372 * Doc/manual/images/1_2_legend_close.png,
6373 Doc/manual/images/1_2_legend_dock.png,
6374 Doc/manual/images/1_2_mainwindow.png,
6375 Doc/manual/images/1_2_mainwindow.ps,
6376 Doc/manual/images/1_2_mainwindow.sk,
6377 Doc/manual/images/3_2_fullextent.png,
6378 Doc/manual/images/3_2_fulllayerextent.png,
6379 Doc/manual/images/3_2_fullshapeextent.png,
6380 Doc/manual/images/3_2_pan.png,
6381 Doc/manual/images/3_2_zoomin.png,
6382 Doc/manual/images/3_2_zoomout.png,
6383 Doc/manual/images/3_3_identify.png,
6384 Doc/manual/images/3_3_label.png,
6385 Doc/manual/images/3_5_invisible.png,
6386 Doc/manual/images/3_5_movedown.png,
6387 Doc/manual/images/3_5_moveup.png,
6388 Doc/manual/images/3_5_props.png,
6389 Doc/manual/images/3_5_tobottom.png,
6390 Doc/manual/images/3_5_totop.png,
6391 Doc/manual/images/3_5_visible.png: New. Images for the documentation.
6392
6393 2003-07-18 Bernhard Herzog <[email protected]>
6394
6395 * Thuban/UI/messages.py (MAP_REPLACED): New message.
6396
6397 * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
6398 after the new map has been assigned
6399
6400 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
6401 Delegate MAP_REPLACED to the canvas too
6402 (MainWindow.prepare_new_session): Removed. Thanks to the new
6403 MAP_REPLACED message it's no longer needed
6404 (MainWindow.OpenSession, MainWindow.NewSession):
6405 prepare_new_session has been removed.
6406
6407 * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
6408 MAP_REPLACED so that we can close the dialog if a new map is set.
6409 (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
6410 (Classifier.map_replaced): Handle MAP_REPLACED by closing the
6411 dialog
6412
6413 * test/test_viewport.py (SimpleViewPortTest)
6414 (SimpleViewPortTest.test_default_size): Add doc-strings
6415 (ViewPortTest.setUp): Bind map to self.map so we can use it in
6416 tests. Subscribe to MAP_REPLACED messages too.
6417 (ViewPortTest.tearDown): No need to explicitly unsubscribe
6418 (ViewPortTest.test_set_map): New test for the SetMap method.
6419
6420 2003-07-18 Bernhard Herzog <[email protected]>
6421
6422 * test/test_viewport.py (SimpleViewPortTest.test_default_size):
6423 Move this test from ViewPortTest.setUp to this new separate test
6424 case. setUp is not the place for the actual tests.
6425 (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
6426 more of the test from setUp to the new test test_inital_settings.
6427 (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
6428 (ViewPortTest.test_proj_conv): Split test_proj_conv into
6429 test_win_to_proj and test_proj_to_win and make the tests easier to
6430 understand
6431 (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
6432 (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
6433 (ViewPortTest.test_unprojected_rect_around_point)
6434 (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
6435 Reformat to increase readability.
6436
6437 2003-07-18 Bernhard Herzog <[email protected]>
6438
6439 * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
6440
6441 2003-07-18 Bernhard Herzog <[email protected]>
6442
6443 * test/runtests.py: The test suite can now be run without an X
6444 connection. To make sure this remains true, remove the DISPLAY
6445 environment variable so that an error occurs if the wxGTK is
6446 imported accidentally
6447
6448 2003-07-18 Bernhard Herzog <[email protected]>
6449
6450 * Thuban/UI/viewport.py: Remove unused imports
6451
6452 * Thuban/UI/view.py: Remove unused imports
6453
6454 2003-07-18 Bernhard Herzog <[email protected]>
6455
6456 * test/test_export.py Remove unused imports. The OutputTransform
6457 function is now in viewport.py and is called output_transform
6458 (TestScalebar.test_output_transform)
6459 (TestScalebar.test_OutputTransform): Renamed to
6460 test_output_transform and updated to use output_transform instead
6461 of OutputTransform
6462
6463 * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
6464 renamed.
6465 (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
6466 renamed to output_transform
6467
6468 * Thuban/UI/viewport.py (OutputTransform, output_transform):
6469 Rename to output_transform
6470
6471 2003-07-18 Bernhard Herzog <[email protected]>
6472
6473 * Thuban/Model/layer.py (Layer.__init__): Rename
6474 classificationField to classificatin_column and init it here so
6475 that it can be used in SetClassificationColumn
6476 (Layer.GetClassificationColumn, Layer.GetClassificationField):
6477 Rename to GetClassificationColumn.
6478 (Layer.SetClassificationColumn, Layer.SetClassificationField):
6479 Rename to SetClassificationColumn and issue a LAYER_CHANGED
6480 message if the column changes.
6481 (Layer._classification_changed, Layer.ClassChanged): Rename to
6482 _classification_changed. Update the callers.
6483 (Layer.SetShapeStore): Further field->column renames.
6484
6485 * Thuban/Model/load.py (SessionLoader.start_classification)
6486 (SessionLoader.start_clpoint): Updates because of
6487 field->column method name changes in the Layer class
6488
6489 * Thuban/Model/save.py (SessionSaver.write_classification): Updates
6490 because of field->column method name changes in the Layer class
6491
6492 * Thuban/UI/classifier.py (Classifier.__init__)
6493 (Classifier._OnTry, Classifier._OnRevert): Updates because of
6494 field->column method name changes in the Layer class
6495
6496 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
6497 because of field->column method name changes in the Layer class
6498
6499 * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
6500 of field->column method name changes in the Layer class
6501
6502 * test/test_save.py (SaveSessionTest.testClassifiedLayer)
6503 (SaveSessionTest.testClassifiedLayer): Update because of
6504 field->column method name changes in the Layer class
6505
6506 * test/test_layer.py (SetShapeStoreTests.setUp)
6507 (SetShapeStoreTests.test_sanity): Update because of field->column
6508 method name changes in the Layer class
6509 (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
6510 (TestLayerModification.test_sanity)
6511 (TestLayerModification.test_initial_settings): remove unsued code
6512 and rename to test_sanity.
6513 (TestLayerModification.test_set_classification): New test for
6514 SetClassification and SetClassificationField.
6515
6516 2003-07-18 Bernhard Herzog <[email protected]>
6517
6518 * test/test_classgen.py (TestFixedRamp.test): Extend test to check
6519 the non-fixed values as well. The old test would have accepted a
6520 fixed ramp that only returnes the fixed properties
6521
6522 2003-07-17 Jonathan Coles <[email protected]>
6523
6524 * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
6525 shots for the manual. The XCF file is the source image and
6526 has additional layers to support changes.
6527
6528 * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
6529
6530 * Thuban/UI/classifier.py (Classifier.__BuildClassification):
6531 Return both the new class and the field name.
6532
6533 * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
6534 fit the map to the window as this changes any zoom level that
6535 the user may have set.
6536
6537 2003-07-16 Jonathan Coles <[email protected]>
6538
6539 * Thuban/Model/classgen.py (generate_singletons,
6540 generate_uniform_distribution, generate_quantiles): Remove
6541 fixes parameter, but maintain the same functionality by having
6542 the calling function pass a FixedRamp object for the ramp.
6543 (FixedRamp): New. Adapts a ramp to have fixed property values.
6544
6545 * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
6546 (Classification): Inherit from Publisher.
6547 (Classification.__init__): Remove the layer parameter.
6548 Classifications no longer need to have a parent layer.
6549 (Classification.GetField, Classification.GetFieldType,
6550 Classification.SetFieldInfo): Removed. The field name is stored
6551 in the layer, and the type can be retreived by calling
6552 Layer.GetFieldType().
6553 (Classification._set_layer, Classification.GetLayer): Removed.
6554 Classifications no longer have a parent layer.
6555
6556 * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
6557 classification.
6558 (Layer.SetShapeStore): Reset the classification first while
6559 we still have the old shape store to work with.
6560 (Layer.GetClassificationField, Layer.SetClassificationField):
6561 New. Method for getting/setting the field to classify on.
6562 (Layer.SetClassification): Simplified now that the layer
6563 simply has to hold a reference to the classification and not
6564 tell the classification who owns it.
6565 Fixes RTbug #2023.
6566
6567 * Thuban/Model/load.py (SessionLoader.start_classification):
6568 Set the field name on the layer, not the classification.
6569
6570 * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
6571 classification is modified.
6572
6573 * Thuban/Model/save.py (SessionSaver.write_classification):
6574 Get the field name and type from the layer.
6575
6576 * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
6577 parameter records to rows and add docstring. Fixes RTbug #1997.
6578
6579 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
6580 ramp when we need to fix certain values of a ramp rather than
6581 using the old fixes parameter. Fixes RTbug #2024.
6582
6583 * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
6584 parameter.
6585 (ClassTable.Reset): Add fieldType parameter and use it, rather
6586 than asking the classification.
6587 (Classifier.__init__): Remember the original class's field
6588 and ask the layer for the field type, rather than the classification.
6589 (Classifier.__SetGridTable): Retrieve the field and field type
6590 for the table because they are not in the classification.
6591 (Classifier._OnTry, Classifier._OnRevert): Set the classification
6592 field on the layer in addition to the classification itself.
6593
6594 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
6595 classification field from layer.
6596
6597 * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
6598 classification field from layer. Split up tests and remove
6599 *-imports. Fixes RTbug #1992.
6600
6601 * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
6602
6603 * test/test_classification.py
6604 (TestClassification.test_classification): Remove tests for methods
6605 that no longer exist.
6606
6607 * test/test_layer.py (SetShapeStoreTests.setUp): Classification
6608 __init__ no longer has a field parameter, use SetClassificationField.
6609 (SetShapeStoreTests.test_sanity): Use layer object to get class
6610 field info.
6611
6612 * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
6613 SetClassificationField on layer to set class field info.
6614
6615 * test/test_viewport.py: Renamed from test/test_view.py.
6616
6617 2003-07-16 Jan-Oliver Wagner <[email protected]>
6618
6619 * Doc/manual/thuban-manual.xml: Added authors and an initial
6620 coarse structure.
6621
6622 2003-07-15 Bernhard Herzog <[email protected]>
6623
6624 * test/support.py (FloatComparisonMixin): This is a mix-in class
6625 and therefore should not be derived from any other class.
6626
6627 * test/test_range.py (RangeTest): FloatComparisonMixin is a
6628 mix-in, so derive from TestCase as well.
6629
6630 2003-07-15 Bernhard Herzog <[email protected]>
6631
6632 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
6633 draw_func handling a bit to remove one layer of indirection. This
6634 makes the renderer about 10% faster in the non-classifying case
6635 and the code a bit cleaner
6636 (MapRenderer.draw_point_shape): Add the pen and brush parameters
6637 and set them in the dc. Now the draw_point_shape method and
6638 wxproj's draw_polygon_shape function have basically the same
6639 signature so that both can be directly used as draw_func
6640
6641 2003-07-15 Bernhard Herzog <[email protected]>
6642
6643 * Thuban/Model/save.py (SessionSaver.write_classification): Encode
6644 string values (in addition to the labels) as UTF 8
6645
6646 * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
6647 values if the field type is string
6648
6649 * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
6650 saving a session with non-ascii string classification values.
6651
6652 * test/test_load.py (TestClassification.file_contents)
6653 (TestClassification.test): Check for non-ascii values in string
6654 classifications
6655
6656 2003-07-14 Jonathan Coles <[email protected]>
6657
6658 * test/test_view.py: New. Tests for ViewPort.
6659
6660 2003-07-14 Frank Koormann <[email protected]>
6661
6662 * Thuban/Model/load.py (SessionLoader.start_map): Encode map
6663 title to latin1. Fixes https://intevation.de/rt/webrt?serial_num=2013
6664
6665 * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
6666 unicode strings from session file: session title, map title and
6667 projection name.
6668
6669 2003-07-10 Jonathan Coles <[email protected]>
6670
6671 * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
6672 drag_stop, not drag_move when the mouse is released.
6673
6674 2003-07-10 Jonathan Coles <[email protected]>
6675
6676 The most important part of this is the seperation of view.py into
6677 two pieces. viewport.py now has a class called ViewPort which
6678 contains all the non-wx parts of view.py and can therefore be
6679 tested. view.py contains only the wx-specific parts and is fairly
6680 simple.
6681
6682 * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
6683 RTTbug #1992.
6684 * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
6685 RTTbug #1992.
6686
6687 * Thuban/Model/classgen.py (generate_singletons,
6688 generate_uniform_distribution, generate_quantiles):
6689 Added 'fixes' parameter so that property attributes can
6690 be held constant over the generated classification groups.
6691 (CustomRamp.GetProperties): Remove unused variables.
6692
6693 * Thuban/Model/map.py (Map.SetProjection): Send the old
6694 projection as an argument to listeners of the MAP_PROJECTION_CHANGED
6695 event.
6696
6697 * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
6698 parameter which is a list of records that restricts which
6699 records are saved. Fixes RTbug #1997.
6700
6701 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
6702 Port exception dialog from GREAT-ER. Fixes RTbug #1993.
6703
6704 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
6705 to allow the user to fix line color/width on generated groups.
6706 (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
6707 functions to optionally fix group properties.
6708
6709 * Thuban/UI/main.py (main): Set exception hook to the
6710 ShowExceptionDialog. Fixes RTbug #1993.
6711
6712 * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
6713 the table window when it is selectd to be shown.
6714
6715 * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
6716 Export Selection button and move the export buttons underneath
6717 the table.
6718 (QueryTableFrame.UpdateStatusText): Added event argument so
6719 that it can respond to grid selection events. The status text
6720 is now updated even when the table is not associated with a
6721 layer as was previously assumed.
6722 (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
6723 UpdateStatusText responds to these events.
6724 (QueryTableFrame.OnSaveAs): Renamed to doExport.
6725 (QueryTableFrame.doExport): Helper function that saves the
6726 entire table, or selected rows, to a file.
6727 (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
6728 Respond to export button events and call doExport.
6729
6730 * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
6731 the function doesn't return NULL without first setting a Python
6732 Error.
6733
6734 * test/runtests.py (main): Only print "Unknown option" for
6735 unsupported options.
6736
6737 * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
6738 optional epsilon argument to specify floating point accuracy.
6739 (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
6740 for each item test.
6741
6742 * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
6743 tests for saving selected records.
6744
6745 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
6746 tests for saving selected records.
6747
6748 * test/test_map.py (TestMapWithContents.test_set_projection):
6749 MAP_PROJECTION_CHANGED events send the old projection.
6750
6751 * test/test_session.py
6752 (TestSessionWithContent.test_forward_map_projection):
6753 MAP_PROJECTION_CHANGED events send the old projection.
6754
6755 * test/test_table.py (TableTest): Update tests to use non-deprecated
6756 functions.
6757
6758 2003-07-08 Bernhard Herzog <[email protected]>
6759
6760 * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
6761 constants in the column objects are the standard ones defined in
6762 the table module.
6763
6764 * test/test_transientdb.py
6765 (TestTransientTable.test_transienttable_to_dbf): New. Test whether
6766 exporting transient tables as DBF works. This should catch the bug
6767 just fixed in TransientTableBase.Width.
6768
6769 2003-07-08 Bernhard Herzog <[email protected]>
6770
6771 * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
6772 interpolated colors correctly.
6773
6774 * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
6775 New. Test case for the fix in classgen.py
6776
6777 2003-07-08 Bernhard Herzog <[email protected]>
6778
6779 * test/runtests.py (main): Make the default output less verbose
6780 and add a verbosity option (-v) to get the old output
6781
6782 2003-07-08 Bernhard Herzog <[email protected]>
6783
6784 * Resources/XML/thuban-0.9.dtd: New. This will become the DTD for
6785 0.9.
6786
6787 * Thuban/Model/transientdb.py (TransientJoinedTable.JoinType):
6788 New. Return the join type
6789
6790 * Thuban/Model/save.py (SessionSaver.write_session): Use new 0.9
6791 DTD
6792 (SessionSaver.write_data_containers): Save the join type for
6793 joined tables
6794
6795 * Thuban/Model/load.py (SessionLoader.__init__): Add the new 0.9
6796 namespace
6797 (SessionLoader.start_jointable): Handle the jointype attribute
6798
6799 * test/test_load_0_8.py: New. Effectively a copy of test_load.py
6800 as of Thuban 0.8. These are now tests to determine whether Thuban
6801 can still read files generated by Thuban 0.8
6802
6803 * test/test_load.py (LoadSessionTest.dtd)
6804 (TestSingleLayer.file_contents)
6805 (TestLayerVisibility.file_contents, TestLabels.file_contents)
6806 (TestLayerProjection.file_contents)
6807 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
6808 (TestJoinedTable.file_contents)
6809 (TestLoadError.file_contents): Update for new DTD
6810 (TestJoinedTable.file_contents, TestJoinedTable.setUp): Add test
6811 for new join type attribute
6812
6813 * test/test_save.py (SaveSessionTest.dtd)
6814 (SaveSessionTest.testEmptySession)
6815 (SaveSessionTest.testSingleLayer)
6816 (SaveSessionTest.testLayerProjection)
6817 (SaveSessionTest.testRasterLayer)
6818 (SaveSessionTest.testClassifiedLayer)
6819 (SaveSessionTest.test_dbf_table)
6820 (SaveSessionTest.test_joined_table): Update for new DTD
6821 (SaveSessionTest.test_joined_table): Add test for new join type
6822 attribute
6823
6824 2003-07-04 Bernhard Herzog <[email protected]>
6825
6826 * Thuban/Model/table.py (_find_dbf_column_names): New. Helper
6827 function for table_to_dbf
6828 (table_to_dbf): Deal with names longer than the 10 character limit
6829
6830 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
6831 doc-string
6832 (TestTableToDBF.test_table_to_dbf_long_col_names): New test for
6833 long column names
6834
6835 2003-07-03 Bernhard Herzog <[email protected]>
6836
6837 * Doc/manual/thuban-manual.xml: Fix the CVS Revision Tag syntax
6838
6839 2003-07-03 Bernhard Herzog <[email protected]>
6840
6841 * Doc/manual/thuban-manual.xml, Doc/manual/README: New. Skeleton
6842 for the Thuban manual and README with some basic information about
6843 the manual
6844
6845 2003-07-03 Bernhard Herzog <[email protected]>
6846
6847 * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
6848 Update doc-string
6849 (TransientJoinedTable.create): Do not modify the column objects of
6850 the input tables in place and copy all columns of the input tables
6851 into the joined table after all.
6852
6853 * test/test_transientdb.py
6854 (TestTransientTable.test_transient_joined_table_same_column_name):
6855 Update to reflect the new behavior
6856 (TestTransientTable.test_transient_joined_table_with_equal_column_names):
6857 Update to reflect the new behavior
6858 (TestTransientTable.test_transient_joined_table_name_collisions_dont_modify_in_place):
6859 New test case for a bug which modified the column objects in place
6860
6861 2003-07-02 Jonathan Coles <[email protected]>
6862
6863 * Thuban/Model/classgen.py (generate_singletons,
6864 generate_uniform_distribution, generate_quantiles,
6865 GenQuantiles0): Make sure maxValue isn't less than
6866 one, otherwise we could divide by zero.
6867
6868 * test/test_classgen.py (ClassGenTest.doClassRangeTest,
6869 ClassGenTest.doClassSingleTest): Call doBoundsTest to
6870 check the end classification groups against the
6871 proper property values.
6872 (ClassGenTest.doBoundsTest): New. Checks the first and
6873 last classification groups to make sure their properties
6874 are the correct upper and lower bounds for a color ramp.
6875
6876 2003-07-02 Jonathan Coles <[email protected]>
6877
6878 * Thuban/Model/classgen.py (generate_singletons,
6879 generate_uniform_distribution, generate_quantiles,
6880 GenQuantiles0): The denominator was one to high when
6881 calculating the index for the ramp causing the index
6882 to never to reach one.
6883
6884 2003-07-02 Jonathan Coles <[email protected]>
6885
6886 Changed the singature of ClassGroupRange.__init__ and
6887 ClassGroupRange.SetRange() so that the min/max values are
6888 passed as a tuple. This makes a better calling scheme for
6889 when a Range object is passed instead.
6890
6891 * Thuban/Model/classgen.py: Fixed parameters to
6892 ClassGroupRange constructor.
6893
6894 * Thuban/Model/classification.py (ClassGroupRange.__init__):
6895 Consolidate the min/max parameters into a single _range which
6896 can either be a tuple or a Range object.
6897 (ClassGroupRange.SetRange): Consolidate the min/max parameters
6898 into a single _range which can either be a tuple or a Range object.
6899
6900 * Thuban/Model/load.py (SessionLoader.start_clrange): Fix
6901 call to ClassGroupRange constructor to use a tuple.
6902
6903 * Thuban/Model/layer.py (Layer.SetClassification): Switch
6904 the classification instance variable to the new class
6905 before calling _set_layer otherwise subscribers to a
6906 LAYER_CHANGED event will not see any difference.
6907
6908 * test/test_classification.py: Fix tests of ClassGroupRange
6909 so that they use the new signature.
6910
6911 * test/test_load.py: Fix use of ClassGroupRange so that it
6912 uses the new signature.
6913
6914 * test/test_load_0_2.py: Fix use of ClassGroupRange so that it
6915 uses the new signature.
6916
6917 * test/test_save.py: Fix use of ClassGroupRange so that it
6918 uses the new signature.
6919
6920
6921 2003-07-01 Jonathan Coles <[email protected]>
6922
6923 * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.
6924 Import used objects/class from color.
6925 (generate_singletons): We don't
6926 need the numGroups parameter anymore because we are using
6927 the new ramps with GetProperties().
6928 (generate_uniform_distribution): Use new ramp method
6929 GetProperties().
6930 (generate_quantiles, GenQuantiles0): Use new ramp method
6931 GetProperties().
6932 (CustomRamp.SetNumGroups): Removed. The ramps now map
6933 a value from 0 to 1 to class properties so the number
6934 of groups is not needed ahead of time.
6935 (CustomRamp.next): Removed. CustomRamp does not support
6936 interation anymore.
6937 (CustomRamp.GetProperties): Returns a ClassGroupProperties
6938 object based on the index value from 0 to 1 that is
6939 passed to it.
6940 (GreyRamp, RedRamp, GreenRamp, BlueRamp, GreenToRedRamp):
6941 Made into instances of Monochromatic class instread of
6942 deriving from it.
6943 (HotToCold.SetNumGroups): Removed. See CustomRamp.
6944 (HotToCold.next): Removed. See CustomRamp.
6945
6946 * Thuban/Model/classification.py: Fixes RTbug #1973, 1971.
6947 (Classification.SetField, Classification.SetFieldType):
6948 Replaced with SetFieldInfo.
6949 (Classification.SetFieldInfo): New. Does a better job of
6950 what SetField and SetFieldType used to do by combining
6951 their function since they should really always be done
6952 at the same time.
6953 (Classification.SetLayer): Renamed to _set_layer.
6954 (Classification._set_layer): Should only be called from
6955 Layer's SetClassification. This does not cause a recursive
6956 call as SetLayer did because we know that Layer knows about
6957 the classification.
6958
6959 * Thuban/Model/color.py: Fixes RTbug #1971.
6960 (_Transparent): Renamed from Transparent so it doesn't
6961 conflict with the module variable.
6962 (Transparent, Black): Renamed from Color.Transparent,
6963 Color.Black so they are not class variables.
6964
6965 * Thuban/Model/layer.py: Fixes RTbug #1971, 1973.
6966 (Layer.Destroy): We don't need to call SetClassification
6967 anymore to clear out the back reference in the classifcation
6968 to the layer. It's better to set it to None using _set_layer,
6969 and we won't be creating another clas object too.
6970 (Layer.SetClassification): Classification._set_layer is not
6971 recursive so remove all the locking variables. Also clean
6972 up the code so that it remains unchanged if something fails.
6973
6974 * Thuban/Model/load.py: Fixes RTbug #1971.
6975 (SessionLoader.start_classification): Call
6976 Classification.SetFieldInfo().
6977
6978 * Thuban/Model/save.py: Removed import of Color which wasn't
6979 being used.
6980
6981 * Thuban/UI/classgen.py: Fixes RTbug #1972.
6982 (ClassGenDialog.__init__): Color ramps are now instances
6983 already so we don't need to create any new objects.
6984 (ClassGenDialog.OnOK): Check for numGroups is no longer
6985 necessary because we never use it.
6986
6987 * Thuban/UI/classifier.py: Fixes RTbug #1971.
6988 (Classifier.__BuildClassification, Classifier.__SetGridTable):
6989 Call Classification.SetFieldInfo() instead of SetFieldType.
6990
6991 * Thuban/UI/renderer.py: Fixes RTbug #1971.
6992
6993 * Thuban/UI/view.py: Fixes RTbug #1974, 1971.
6994 (MapCanvas.__init__): Subscribe to the idle time event. Set
6995 background color to white.
6996 (MapCanvas.OnPaint): Set a flag indicating that we should
6997 render the map during idle time. If we already have a bitmap
6998 just draw it now.
6999 (MapCanvas.OnIdle): New. Render the map only during idle time.
7000 This also fixes a problem with the busy cursor under gtk.
7001
7002 * test/test_classgen.py (ClassGenTest.test_generate_singletons):
7003 Fix calls to generate_singletons because the signature changed.
7004
7005 * test/test_classification.py: Fix color references and
7006 change calls to Classification.[SetField|SetFieldType] to
7007 SetFieldInfo.
7008
7009 * test/test_load.py: Fix color references.
7010
7011 * test/test_load_0_2.py: Fix color references.
7012
7013 * test/test_save.py (SaveSessionTest.testClassifiedLayer):
7014 Change calls to Classification.[SetField|SetFieldType] to
7015 SetFieldInfo.
7016
7017 2003-07-01 Frank Koormann <[email protected]>
7018
7019 MERGE from the greater-ms3 branch.
7020
7021 * test/test_transientdb.py
7022 (TestTransientTable.test_transient_joined_table_with_equal_column_names):
7023 New. Test join of two tables with partly equal column names.
7024
7025 * Thuban/Model/transientdb.py (TransientJoinedTable.create):
7026 If duplicates in left and right tables column names are found,
7027 append '_' (underscores) to the name until it is unique.
7028 Create always new internal names for the resulting table and reference
7029 columns in the join statement with <table>.<column>
7030
7031 2003-07-01 Bernhard Herzog <[email protected]>
7032
7033 * test/test_transientdb.py
7034 (TestTransientTable.test_transient_joined_table_same_column_name):
7035 New. Test whether joining on columns with the same names in both
7036 tables works.
7037
7038 * Thuban/Model/transientdb.py (TransientJoinedTable.create): Make
7039 sure to use the right internal names even when joining on field
7040 with the same names in both tables. Also, detect duplicate names
7041 in the joined table correctly.
7042
7043 2003-07-01 Frank Koormann <[email protected]>
7044
7045 * Thuban/UI/renderer.py (ExportRenderer.render_legend):
7046 Reverse List of layers to render in same order as in desktop legend.
7047
7048 2003-06-30 Jonathan Coles <[email protected]>
7049
7050 * Thuban/version.py (make_tuple): Takes a version string
7051 and splits it into a tuple of at most three integers.
7052 Used make_tuple() to make tuple versions of the version
7053 numbers.
7054
7055 * Thuban/UI/about.py: Add Thuban email addresses.
7056
7057 2003-06-30 Jonathan Coles <[email protected]>
7058
7059 * Thuban/version.py: SQLite/PySQLite version dependencies
7060 were too high.
7061
7062 2003-06-30 Jonathan Coles <[email protected]>
7063
7064 * Thuban/version.py: Update version to 0.8.1
7065
7066 * MANIFEST.in: Added Projections so that default.proj is
7067 included.
7068
7069 2003-06-26 Jonathan Coles <[email protected]>
7070
7071 New About box with lots more information including library
7072 versions and credits. More/better version checking before
7073 Thuban starts.
7074
7075 * Thuban/UI/about.py: New. New About box that displays
7076 library version information and credits.
7077
7078 * Thuban/version.py: Added new 'versions' dictionary which
7079 contains the verions of various libraries which are checked
7080 when the module loads.
7081 (verify_versions): Check all version numbers and returns
7082 a list of errors.
7083
7084 * Thuban/UI/classifier.py (Classifier.__EnableButtons):
7085 Reset the status of the buttons as the situation warrants,
7086 but in a better more reliable way by not relying on the
7087 current status to determine what needs to change.
7088
7089 * Thuban/UI/main.py (wxCHECK_VERSION): Removed. Not needed.
7090 (verify_versions): Remove most of the code since it is
7091 now in Thuban.version.verify_versions.o
7092
7093 * Thuban/UI/mainwindow.py (MainWindow.About): Call new
7094 About box in Thuban.UI.about.
7095
7096 * extensions/thuban/gdalwarp.cpp (get_gdal_version): New.
7097 Returns the version of gdal library being used as a string.
7098
7099 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
7100 Removed.
7101 (get_proj_version): Return the version of PROJ that the file
7102 was compiled with.
7103 (get_gtk_version): Return th version of GTK that the file
7104 was compiled with.
7105
7106 2003-06-25 Jonathan Coles <[email protected]>
7107
7108 * Thuban/UI/classifier.py (Classifier.EditSymbol): The parent
7109 of the SelectPropertiesDialog should be self so the window
7110 appears on top.
7111 (ClassGroupPropertiesCtrl.DoEdit): The parent
7112 of the SelectPropertiesDialog should be self so the window
7113 appears on top.
7114
7115 * Thuban/UI/resource.py: Cleaned up how we determine file
7116 extensions.
7117 (GetImageResource): Return an wxImage from our Resources.
7118
7119 2003-06-24 Jonathan Coles <[email protected]>
7120
7121 * Thuban/UI/renderer.py (ExportRenderer.render_legend):
7122 Check that a layer has a classification before trying
7123 to get it. Raster layers don't have classifications.
7124
7125 2003-06-23 Jonathan Coles <[email protected]>
7126
7127 * setup.py: Add Resources/XML to resource list.
7128
7129 2003-06-23 Jonathan Coles <[email protected]>
7130
7131 * setup.cfg: Fix copyright dates
7132
7133 2003-06-23 Jonathan Coles <[email protected]>
7134
7135 * MANIFEST.in: Update with Resources/XML
7136
7137 * setup.py: Don't include Locale resources yet as we don't
7138 have any and it causes problems building the distribution
7139 for Windows. Update version to 0.8.0.
7140
7141 * Doc/thuban.dtd: Removed since it is now in Resources/XML.
7142
7143 * Thuban/UI/mainwindow.py: Add blank line at the end because
7144 file was not being read correctly building the Windows
7145 distribution.
7146
7147 2003-06-23 Jonathan Coles <[email protected]>
7148
7149 * Thuban/UI/mainwindow.py (MainWindow.About): Fix text.
7150
7151 * Thuban/version.py: Temporarily update longversion for
7152 the 0.8 release so that it doesn't have the cvs revision.
7153
7154 2003-06-23 Jonathan Coles <[email protected]>
7155
7156 * Thuban/UI/common.py (ThubanBeginBusyCursor): Call wxSafeYield
7157 to make sure that we don't create reentrant possibilities with
7158 wxYield.
7159
7160 * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxBeginBusyCursor()
7161 directly to avoid the wxSafeYield() call which generates an
7162 OnPaint event causing infinite recursion. Don't try to catch
7163 exception anymore. This was for before there were limits on map
7164 scaling.
7165
7166 2003-06-23 Bernhard Herzog <[email protected]>
7167
7168 Bug fix for RT #1961:
7169
7170 * Thuban/Model/load.py (SessionLoader.start_derivedshapesource):
7171 Register DerivedShapestores with the session
7172
7173 * Thuban/Model/session.py (Session.Tables): Make sure each table
7174 is only listed once.
7175
7176 * test/test_load.py (TestJoinedTable.test): Add check_format call.
7177 Update file contents to match the one written out.
7178
7179 2003-06-20 Bernhard Herzog <[email protected]>
7180
7181 * test/xmlsupport.py (SaxEventLister.startElementNS)
7182 (SaxEventLister.endElementNS): Do not include the qname. Python
7183 2.2.1 and 2.2.2 and 2.2.3 differ in this regard. In 2.2.1 qname it
7184 is (presumably incorrectly) None, whereas it's a string with the
7185 element name in the later versions.
7186
7187 * test/test_xmlsupport.py (TestEventList.test_even_list_simple)
7188 (TestEventList.test_even_list_namespace): Update tests to reflect
7189 the new behaviour
7190 (TestEventList.test_even_list_id_normalization): Fix doc-string
7191
7192 2003-06-20 Jonathan Coles <[email protected]>
7193
7194 * Thuban/Model/layer.py (BaseLayer.HasShapes): New. Overridden
7195 by deriving classes to determine if that layer supports shapes.
7196 (Layer): Override HasShapes and return true.
7197
7198 * Thuban/UI/classgen.py: Use Thuban[Begin|End]BusyCursor()
7199 instead of a direct call to wx[Begin|End]CusyCursor().
7200 (GenUniquePanel._OnRetrieve): Set busy cursor while retrieving
7201 table data.
7202
7203 * Thuban/UI/common.py (ThubanBeginBusyCursor, ThubanEndBusyCursor):
7204 New. Wrappers around the wxWindows functions that allow us to
7205 make additional calls such as wxYield which gives the native
7206 system a chance to update the cursor correctly.
7207
7208 * Thuban/UI/tableview.py: Use Thuban[Begin|End]BusyCursor()
7209 instead of a direct call to wx[Begin|End]CusyCursor().
7210
7211 * Thuban/UI/view.py: Use Thuban[Begin|End]BusyCursor()
7212 instead of a direct call to wx[Begin|End]CusyCursor().
7213 (MapCanvas.find_shape_at): Check if the current search layer
7214 support shapes, otherwise go on to the next layer.
7215
7216 * test/test_layer.py: Add tests in each type of layer for
7217 HasClassification() and HasShapes()
7218
7219 2003-06-20 Jonathan Coles <[email protected]>
7220
7221 * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after
7222 turning on the busy cursor to allow the system to change the
7223 cursor before we begin painting. This fixes a problem that
7224 was occuring only under GTK. Fixes RTbug #1840.
7225
7226 2003-06-20 Bernhard Herzog <[email protected]>
7227
7228 * Resources/XML/thuban-0.8.dtd: New DTD for the new file format
7229 version.
7230
7231 * Thuban/Model/save.py (sort_data_stores): New. Make topological
7232 sort of the data sources so they can be written with sources that
7233 data sources that depend on other data sources come after the
7234 sources they depend on.
7235 (SessionSaver.__init__): Add idmap instance variable to map from
7236 objects to the ids used in the file.
7237 (SessionSaver.get_id, SessionSaver.define_id)
7238 (SessionSaver.has_id): New. Methods to manage the idmap
7239 (SessionSaver.write): Use thuban-0.8.dtd
7240 (SessionSaver.write_session): Add a namespace on the session and
7241 write out the data sources before the maps.
7242 (SessionSaver.write_data_containers): New. Write the data
7243 containers.
7244 (SessionSaver.write_layer): Layer elements now refer to a
7245 shapestore and don't contain filenames anymore.
7246
7247 * Thuban/Model/load.py (LoadError): Exception class to raise when
7248 errors in the files are discovered
7249 (SessionLoader.__init__): Define dispatchers for elements with a
7250 thuban-0.8 namespace too.
7251 (SessionLoader.check_attrs): New helper method to check and
7252 convert attributes
7253 (AttrDesc): New. Helper class for SessionLoader.check_attrs
7254 (SessionLoader.start_fileshapesource)
7255 (SessionLoader.start_derivedshapesource)
7256 (SessionLoader.start_filetable, SessionLoader.start_jointable):
7257 Handlers for the new elements in the new fileformat
7258 (SessionLoader.start_layer): Handle the shapestore attribute in
7259 addition to filename.
7260 (SessionLoader.start_table, SessionLoader.end_table): Removed.
7261 They were never used in the old formats and aren't needed for the
7262 new.
7263
7264 * Thuban/Model/session.py (Session.DataContainers): New method to
7265 return all "data containers", i.e. shapestores and tables
7266
7267 * test/xmlsupport.py (SaxEventLister.__init__)
7268 (SaxEventLister.startElementNS, sax_eventlist): Add support to
7269 normalize IDs.
7270
7271 * test/test_xmlsupport.py
7272 (TestEventList.test_even_list_id_normalization): New test case for
7273 id normalization
7274
7275 * test/test_load.py (LoadSessionTest.check_format): Use ID
7276 normalization
7277 (LoadSessionTest.thubanids, LoadSessionTest.thubanidrefs): New
7278 class atrributes used for ID normalization
7279 (TestSingleLayer, TestLayerVisibility, TestLabels.test)
7280 (TestLayerProjection.test, TestRasterLayer.test): Adapt to new
7281 file format
7282 (TestJoinedTable): New test for loading sessions with joined
7283 tables.
7284 (TestLoadError): New. Test whether missing required attributes
7285 cause a LoadError.
7286
7287 * test/test_save.py (SaveSessionTest.thubanids)
7288 (SaveSessionTest.thubanidrefs): New class attributes for ID
7289 normalization in .thuban files.
7290 (SaveSessionTest.compare_xml): Use id-normalization.
7291 (SaveSessionTest.testEmptySession)
7292 (SaveSessionTest.testLayerProjection)
7293 (SaveSessionTest.testRasterLayer)
7294 (SaveSessionTest.testClassifiedLayer): Adapt to new file format.
7295 (SaveSessionTest.testLayerProjection): The filename used was the
7296 same as for testSingleLayer. Use a different one.
7297 (SaveSessionTest.test_dbf_table)
7298 (SaveSessionTest.test_joined_table): New test cases for saving the
7299 new data sources structures.
7300 (TestStoreSort, MockDataStore): Classes to test the sorting of the
7301 data stores for writing.
7302
7303 * test/runtests.py: Add CVS keywords
7304
7305 2003-06-20 Jonathan Coles <[email protected]>
7306
7307 * test/test_session.py
7308 (UnreferencedTablesTests.test_unreferenced_tables_with_joins):
7309 Use the cultural_landmark-point.dbf file for the store so that
7310 the table rows and shape count match.
7311
7312 2003-06-20 Jonathan Coles <[email protected]>
7313
7314 * Thuban/Model/data.py (DerivedShapeStore.__init__): Raise
7315 an exception if the number of shapes is different from the
7316 number of rows in the table. Address RTbug #1933.
7317
7318 * test/test_layer.py (TestLayer.test_derived_store): Add
7319 a test for the new exception in DerivedShapeStore.__init__.
7320
7321 * test/support.py (FloatTestCase): Removed since there is
7322 already FloatComparisonMixin. Fixes RTbug #1954.
7323 (FloatComparisonMixin.assertFloatEqual): Include test for
7324 infinity that was part of FloatTestCase.
7325
7326 * test/test_range.py (RangeTest): Inherit from
7327 support.FloatComparisonMixin now that we don't have
7328 support.FloatTestCase.
7329
7330 2003-06-20 Bernhard Herzog <[email protected]>
7331
7332 * test/test_save.py (SaxEventLister, sax_eventlist): Removed. Use
7333 the implementation in xmlsupport instead.
7334 (SaveSessionTest.compare_xml): sax_eventlist is now in xmlsupport
7335
7336 * test/test_proj.py: Import sax_eventlist from xmlsupport instead
7337 of test_save
7338
7339 2003-06-20 Bernhard Herzog <[email protected]>
7340
7341 * test/test_load.py (LoadSessionTest.check_format): New helper
7342 method to make sure the test files we load might have been written
7343 by the current thuban version.
7344 (ClassificationTest.TestLayers, TestSingleLayer.test)
7345 (TestLayerVisibility.test, TestClassification.test)
7346 (TestLabels.test, TestLayerProjection.test, TestRasterLayer.test):
7347 Add check_format() calls and fix the thuban data to match the data
7348 that would be written by saving the session loaded from it.
7349
7350 * test/xmlsupport.py (SaxEventLister, sax_eventlist): Copies of
7351 the same class and function in test_save.
7352
7353 * test/test_xmlsupport.py (TestEventList): New. test cases for
7354 sax_eventlist
7355
7356 2003-06-20 Bernhard Herzog <[email protected]>
7357
7358 * Resources/XML/thuban.dtd: Add comment about which versions of
7359 Thuban are covered by this DTD
7360 (map): Fix content model for layers and raster layers. There can
7361 be any number or layers and raster layers in any order.
7362
7363 2003-06-20 Jonathan Coles <[email protected]>
7364
7365 This is mainly about fixing RTbug #1949.
7366
7367 * Thuban/Model/classification.py: Remove "from __future__"
7368 import statement since python 2.2 is the earliest supported
7369 version.
7370
7371 * Thuban/Model/proj.py (Projection.GetProjectedUnits): New.
7372 Currently returns PROJ_UNITS_METERS or PROJ_UNITS_DEGREES
7373 depending on the units this projection *forwards* into.
7374
7375 * Thuban/Model/save.py (SessionSaver.write_classification):
7376 Remove unnecessary use of lambdas and nested functions.
7377
7378 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Do scale
7379 adjustment here if the map projection uses degrees.
7380
7381 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Remove
7382 scale adjust code since it is now done before calling
7383 this method. Don't do anything if the map projection
7384 is None.
7385
7386 2003-06-19 Bernhard Herzog <[email protected]>
7387
7388 Move version specific load tests to their own file.
7389
7390 * test/test_load.py: Expand the doc-string to explain a bit how to
7391 handle file format changes.
7392 (TestClassification.test): Update the docstring as this test is
7393 not about Thuban 0.2 anymore.
7394
7395 * test/test_load_0_2.py: New file with the load tests for thuban
7396 files created with Thuban 0.2 and earlier.
7397
7398 2003-06-19 Bernhard Herzog <[email protected]>
7399
7400 Add XML validation to some of the tests. Validation will only be
7401 done if pyRXP is installed (http://reportlab.com/xml/pyrxp.html).
7402 To make the DTD available to the test cases it's moved into
7403 Resources/XML
7404
7405 * Resources/XML/thuban.dtd: New. This is now the real Thuban DTD
7406 for versions up to and including 0.2. Two slight changes: added an
7407 encoding specification and fixed the comment which refered to
7408 GRASS, not Thuban
7409
7410 * test/xmlsupport.py: New support module for tests involving XML.
7411 Currently there's a mix-in class for XML validation.
7412
7413 * test/test_xmlsupport.py: New. Tests for the xmlsupport module
7414
7415 * test/test_save.py (SaveSessionTest): Derive from ValidationTest
7416 so that we can validate the
7417 (SaveSessionTest.testEmptySession)
7418 (SaveSessionTest.testSingleLayer)
7419 (SaveSessionTest.testSingleLayer)
7420 (SaveSessionTest.testLayerProjection)
7421 (SaveSessionTest.testRasterLayer)
7422 (SaveSessionTest.testClassifiedLayer): Validate the generated XML
7423
7424 * test/runtests.py (main): Call print_additional_summary instead
7425 of print_garbage_information
7426
7427 * test/support.py (resource_dir): New function to return the
7428 "Resource" subdirectory
7429 (print_additional_summary): New function to combine several
7430 summary functions
7431 (run_tests): Use print_additional_summary instead of calling
7432 print_garbage_information directly
7433
7434 2003-06-19 Bernhard Herzog <[email protected]>
7435
7436 * Doc/thuban.dtd (classification): Correct the content model of
7437 the classification element.
7438 (projection): Add the "name" attribute
7439
7440 2003-06-19 Frank Koormann <[email protected]>
7441
7442 MERGE from the greater-ms3 branch.
7443
7444 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Apply conversion to
7445 scale if projection is latlong to get better estimate.
7446
7447 Fix problem of hidden properties dialog under windows after double
7448 click on layer tree:
7449 The tree control always gets an Expanded / Collapsed event after
7450 the ItemActivated on double click, which raises the main window again.
7451 We add a second ItemActivated event to the queue, which simply
7452 raises the already displayed window.
7453
7454 * Thuban/UI/legend.py (LegendTree.__init__): Instance variable
7455 raiseProperties initialized to prevent endless loops
7456 (LegendTree._OnItemActivated): Depending on self.raiseProperties
7457 simply raise the properties or open the dialog and issue a second
7458 event.
7459
7460 2003-06-18 Jonathan Coles <[email protected]>
7461
7462 * setup.py: Fix a few problems that occured under Windows.
7463
7464 2003-06-18 Jonathan Coles <[email protected]>
7465
7466 When Thuban loaded the map was redrawn twice because the
7467 legend was being opened after the mainwindow was created
7468 and not during its creation. This meant the map was drawn
7469 initially and then had to be redrawn when the legend
7470 caused the display to change. Now the legend is opened
7471 in the mainwindow constructor which resolves this issue.
7472
7473 Also, although we were checking for the existence of
7474 gdal and gdalwarp modules, the gdalwarp extension was
7475 still being compiled (which may fail if the system doesn't
7476 have gdal installed). the build_ext command to setup.py
7477 now accepts the flags --with-gdal and --without-gdal.
7478 If --without-gdal is specified setup.py will try to
7479 use the gdal parameters specified by gdal-config. Under
7480 windows, those parameters have to be set in setup.py
7481 as with proj4 an wxWindows.
7482
7483 * setup.py: Use a list instead of seperate variables for
7484 extension parameters so we can create a generic function
7485 that runs an appropriate *-config script.
7486 (run_cs_script): Renamed from run_wx_script and modified
7487 to accept a second argument which is a list of lists to
7488 be filled in by the values returned from running the command.
7489 (thuban_build_ext): New. Extends the build_ext command and
7490 provides the options --with-gdal/--without-gdal which then
7491 optionally includes the gdalwarp extension.
7492
7493 * Thuban/Model/resource.py: First check if we can import
7494 the gdalwarp Thuban extension before checking for gdal.
7495 Also added some comments.
7496
7497 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Check if
7498 the map is None which may be the case if none has been loaded
7499 yet.
7500
7501 * Thuban/UI/main.py (main): Remove call to ShowLegend.
7502
7503 * Thuban/UI/mainwindow.py (MainWindow.__init__): Call ShowLegend().
7504
7505 * Thuban/UI/renderer.py: Check for gdal support before importing
7506 gdalwarp.
7507 (MapRenderer.render_map): Only try to optimize if we have gdal
7508 support otherwise nothing will get drawn.
7509
7510 * Thuban/UI/view.py (MapCanvas.FitMapToWindow): This may be called
7511 during startup before a map has been created. Check if map is None
7512 before using it and do nothing if it is.
7513
7514 2003-06-17 Jonathan Coles <[email protected]>
7515
7516 Fix the problem with raster layers under Windows that caused
7517 Thuban to crash. The view should respond to layer projection
7518 changed events to update the display. Changes to a projection
7519 should not cause the map to be set to full extent.
7520
7521 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
7522 current_map_proj to remember the current map projection so that
7523 when the projection changes we know what the previous projection
7524 was.
7525 (MapCanvas.SetMap): Unsubscribe and subscribe to
7526 LAYER_PROJECTION_CHANGED events.
7527 (MapCanvas.projection_changed): Split into two methods that respond
7528 to map and layer projection changes.
7529 (MapCanvas.map_projection_changed): New. Takes the current view and
7530 projects it using the new projection. This does not cause the
7531 map to be redrawn at full extent.
7532 (MapCanvas.layer_projection_changed): New. Cause a redraw which
7533 will draw each layer in its new projection.
7534
7535 * extensions/thuban/bmpdataset.cpp (BMPDataset::Open): Call
7536 VSIFClose() not VSIFCloseL() to close the file. Fixes a crash
7537 under Windows.
7538
7539 * extensions/thuban/gdalwarp.cpp (MFILENAME): Padding should be
7540 to twice sizeof(void*) because there are two digits for each
7541 hex byte.
7542
7543 2003-06-16 Bernhard Herzog <[email protected]>
7544
7545 Update to the layer interface: Direct access to the table,
7546 shapetable, shapefile and filename attributes is now actively
7547 deprecated by issuing deprecation warnings for all places where
7548 this happens.
7549
7550 * Thuban/Model/layer.py (Layer.__getattr__): New. Implement access
7551 to the instance variables table, shapetable, shapefile and
7552 filename via __getattr__ so that we can issue a deprecation
7553 warning.
7554 (Layer.SetShapeStore): Don't set the deprecated instance variables
7555 any more
7556 (Layer.SetShapeStore): Don't use deprecated layer instance
7557 variables
7558 (Layer.Destroy): No need to explicitly remove the instance
7559 variables any more
7560 (Layer.GetFieldType, Layer.Shape): Don't use deprecated layer
7561 instance variables
7562
7563 * Thuban/UI/classgen.py (ClassGenDialog.__init__)
7564 (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve)
7565 (GenQuantilesPanel.GetList, GenQuantilesPanel.OnRetrieve): Don't
7566 use deprecated layer instance variables
7567
7568 * Thuban/UI/classifier.py (Classifier.__init__): Don't use
7569 deprecated layer instance variables
7570
7571 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
7572 (IdentifyGridCtrl.selected_shape): Don't set the deprecated layer
7573 instance variables
7574
7575 * Thuban/UI/tableview.py (LayerTableGrid.select_shapes): Don't use
7576 deprecated layer instance variables
7577
7578 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Don't use
7579 deprecated layer instance variables
7580
7581 * Thuban/Model/save.py (SessionSaver.write_layer): Don't use
7582 deprecated layer instance variables
7583
7584 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer)
7585 (MapRenderer.polygon_render_param): Don't use deprecated layer instance
7586 variables
7587
7588 * test/runtests.py (main): Turn Thuban's deprecation warnings into
7589 errors so that they're cought by the tests
7590
7591 * test/test_load.py (TestSingleLayer.test): Don't use deprecated
7592 layer instance variables
7593
7594 2003-06-16 Jonathan Coles <[email protected]>
7595
7596 Fix a problem under Windows whereby if the user double-clicks on a
7597 layer in the legend that tree item will expand or collapse as well
7598 as open the layer properties dialog. The state of the tree item
7599 should not be affected.
7600
7601 * Thuban/UI/legend.py (LegendTree.__init__): Add instance variable
7602 preventExpandCollapse and subscribe to expanding and collapsing
7603 events.
7604 (LegendTree.OnItemExpandCollapse): New. Responds to expanding and
7605 collapsing events and will veto the event if it has been triggered
7606 by the user double clicking on a layer.
7607 (LegendTree._OnItemActivated): Set preventExpandCollapse to indicate
7608 that an expanding/collapsing event should be vetoed.
7609
7610 2003-06-13 Bernhard Herzog <[email protected]>
7611
7612 * Thuban/UI/classifier.py (Classifier.OnClose)
7613 (Classifier.map_layers_removed)
7614 (Classifier.layer_shapestore_replaced): Unsubscribe the messages
7615 in OnClose and not in map_layers_removed or
7616 layer_shapestore_replaced to make sure it always happens when the
7617 dialog is closed
7618
7619 2003-06-13 Jonathan Coles <[email protected]>
7620
7621 This puts back a fix for Windows where a panel is needed so that
7622 the background of the table view appears correctly.
7623
7624 * Thuban/UI/tableview.py (TableFrame.__init__): Add a panel
7625 object that can be used by derived classes to place any
7626 controls (including the grid) onto.
7627 (QueryTableFrame.__init__): Use the panel as the parent window
7628 for all the controls. Reparent the grid so that the panel is
7629 the parent. Call UpdateStatusText() to correctly initialize
7630 the status bar.
7631
7632 2003-06-13 Jonathan Coles <[email protected]>
7633
7634 * Thuban/UI/dialogs.py (ThubanFrame): New: a class that inherits
7635 from wxFrame (as opposed to wxDialog like the other classes)
7636 but otherwise behaves like the other classes. This is needed
7637 for the TableView which isn't really a dialog and needs to
7638 have a status bar and control buttons.
7639
7640 * Thuban/UI/tableview.py (TableGrid.__init__): Create an
7641 instance variable to keep track of how many rows are selected.
7642 Subscribe once to the the events we are interested in.
7643 (ThubanGrid.OnRangeSelect): Only handle event if event handling
7644 hasn't been turned off.
7645 (ThubanGrid.OnSelectCell): Only handle event if event handling
7646 hasn't been turned off.
7647 (ThubanGrid.ToggleEventListeners): Rather than subscribe None
7648 as an event listener (which changes the event handler stack)
7649 simply set an instance variable to False. This is checked in
7650 the event handlers.
7651 (ThubanGrid.GetNumberSelected): Return the number of currently
7652 selected rows.
7653 (TableFrame): Inherit from ThubanFrame so we can have a
7654 status bar and control buttons.
7655 (QueryTableFrame.__init__): Create a status bar. Fixes RTbug #1942.
7656 Explicitly set which items are selected in the operator choice and
7657 action choice so there is always a valid selection. Fixes RTbug #1941.
7658 Subscribe to grid cell selection events so we can update the
7659 status bar.
7660 (QueryTableFrame.UpdateStatusText): Update the status bar with
7661 how many rows are in the grid, how many columns, and how many
7662 rows are selected.
7663 (QueryTableFrame.OnGridSelectRange, QueryTableFrame.OnGridSelectCell):
7664 Call UpdateStatusText when cells are (de)selected.
7665 (QueryTableFrame.OnQuery): Use the string value in the value
7666 combo if either the selected item index is 0 or if the string
7667 cannot be found in the predefined list (this happens if the
7668 user changes the text). Fixes RTbug #1940.
7669 Only turn off the grid event listeners if there a query comes
7670 back with a none empty list of ids. in the case that the list
7671 is empty this causes a grid.ClearSelection() call to actually
7672 clear the grid selection which causes the selected items in
7673 the map to be deselected. Fixes RTbug #1939.
7674
7675 * test/test_save.py (XMLWriterTest.Encode): Check return values.
7676 Fixes RTbug #1851.
7677
7678 2003-06-13 Bernhard Herzog <[email protected]>
7679
7680 * Thuban/UI/identifyview.py (IdentifyView.__init__): Call
7681 self.selected_shape with the current selection to make sure the
7682 contents of the dialog are up to date when it's shown for the
7683 first time.
7684 The dialog used to work without this by luck. The recent fix to
7685 the connector module 'broke' a 'feature' the identify view was
7686 relying on, i.e that subscribing to a message in response to
7687 receiving a message of that type would mean that the new
7688 subscriber would also be called for the same message.
7689
7690 2003-06-12 Jonathan Coles <[email protected]>
7691
7692 * extensions/thuban/gdalwarp.cpp: Removed debug printing as
7693 the image is rendered. Fixes RTbug #1937.
7694
7695 2003-06-12 Jonathan Coles <[email protected]>
7696
7697 * Thuban/Lib/fileutil.py: As is done under Windows, create the
7698 user directory if it doesn't exist on a posix system.
7699 Fixes RTbug #1815.
7700
7701 * Thuban/Model/resource.py (get_user_proj_files): Moved the
7702 called to get_application_dir here, so that the directory
7703 will only be called if this method is invoked.
7704
7705 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Clear
7706 the projfilepath if no projection is selected.
7707
7708 2003-06-12 Jonathan Coles <[email protected]>
7709
7710 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Don't draw
7711 the scalebar if the current map has no projection set.
7712
7713 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Set the
7714 projfilepath label to just the basename of the projection file
7715 rather than include the entire path.
7716
7717 * Thuban/Model/resource.py: Fix missed proj functions that
7718 needed to be renamed.
7719
7720 2003-06-12 Jonathan Coles <[email protected]>
7721
7722 * Thuban/Model/classification.py: Removed assert statements that
7723 tested if the variable was an instance of Color.
7724
7725 * Thuban/Model/color.py (Color): Remove commented code that isn't
7726 used.
7727 (Transparent): Renamed from NoColor. Doesn't inherit from Color.
7728 Fixes RTbug #1835.
7729 (Transparent.__eq__, Transparent.__ne, Transparent.__repr): New.
7730 Needed now that the class doesn't inherit from Color.
7731
7732 2003-06-12 Jonathan Coles <[email protected]>
7733
7734 * test/test_save.py (XMLWriterTest.testEncode): Explicitly
7735 check unicode strings.
7736
7737 * test/test_layer.py: Check for existence of gdal.
7738
7739 2003-06-12 Jonathan Coles <[email protected]>
7740
7741 * Thuban/Model/xmlreader.py: New. Contains the XMLReader class
7742 that was in load.py
7743
7744 * Thuban/Model/xmlwriter.py: New. Contains the XMLWriter class
7745 that was in save.py
7746
7747 2003-06-12 Jonathan Coles <[email protected]>
7748
7749 This is largely a collection of bug fixes. We also handle the
7750 case where gdal is not on the system. The XMLReader and XMLWriter
7751 classes were moved into there own files to resolve some circular
7752 import references and because they shouldn't really be in the
7753 file that is dediciated to reading/writing session files since
7754 they are also used elsewhere.
7755
7756 * Thuban/Model/classgen.py: Renamed functions to follow the
7757 function_names_with_underscores style. Fixes RTbug #1903.
7758 (calculate_quantiles): Raise ValueError if 'percents' is invalid.
7759
7760 * Thuban/Model/layer.py: Import gdal only if it available.
7761 (RasterLayer): Handle the case where the gdal library is unavailable.
7762 Addresses RTbug #1877.
7763
7764 * Thuban/Model/load.py (XMLReader): Moved into seperate file
7765 xmlreader.py.
7766
7767 2003-06-12 Jonathan Coles <[email protected]>
7768
7769 This is largely a collection of bug fixes. We also handle the
7770 case where gdal is not on the system. The XMLReader and XMLWriter
7771 classes were moved into there own files to resolve some circular
7772 import references and because they shouldn't really be in the
7773 file that is dediciated to reading/writing session files since
7774 they are also used elsewhere.
7775
7776 * Thuban/Model/classgen.py: Renamed functions to follow the
7777 function_names_with_underscores style. Fixes RTbug #1903.
7778 (calculate_quantiles): Raise ValueError if 'percents' is invalid.
7779
7780 * Thuban/Model/layer.py: Import gdal only if it available.
7781 (RasterLayer): Handle the case where the gdal library is unavailable.
7782 Addresses RTbug #1877.
7783
7784 * Thuban/Model/load.py (XMLReader): Moved into seperate file
7785 xmlreader.py.
7786
7787 * Thuban/Model/save.py (escape, XMLWriter): Moved into seperate
7788 file xmlwriter.py.
7789
7790 * Thuban/Model/resource.py: Renamed functions to following the
7791 function_names_with_underscores style.
7792 (has_gdal_support): New function that returns true if the gdal
7793 library is available. Addresses RTbug #1877.
7794
7795 * Thuban/UI/application.py (ThubanApplication.OpenSession):
7796 Display a message box if the gdal library is not available, but
7797 only if there are any layers that would use it. Addresses RTbug #1877.
7798
7799 * Thuban/UI/classgen.py: Use renamed projection resource functions.
7800 (GenUniformPanel.__CalcStepping): Fix a slight discrepency
7801 when using integers versus floats.
7802
7803 * Thuban/UI/mainwindow.py (_has_gdal_support): New. Used to
7804 determine if the "Add Image Layer" menu option should be
7805 greyed out or not. Addresses RTbug #1877.
7806
7807 * Thuban/UI/projdialog.py: Use renamed projection resource functions.
7808
7809 * Thuban/UI/renderer.py (MapRenderer.render_map): Only try to
7810 optimize if a raster layer is visible. Fixes RTbug #1931.
7811 Only draw the raster layer if the gdal library is available.
7812 Addresses RTbug #1877.
7813
7814 * test/test_classgen.py: Add tests for generate_singletons,
7815 generate_uniform_distribution, generate_quantiles. Fixes RTbug #1903.
7816 (test_calculate_quantiles): Fix some tests to catch the new
7817 ValueError that is raised.
7818
7819 * test/test_proj.py: Use renamed projection resource functions.
7820
7821 * test/test_save.py (SaveSessionTest.testClassifiedLayer): New
7822 test for saving classified layers. Fixes RTbug #1902.
7823 (XMLWriterTest): New. Tests the XMLWriter class. Fixes RTbug #1851.
7824
7825 2003-06-12 Jan-Oliver Wagner <[email protected]>
7826
7827 Fix for http://intevation.de/rt/webrt?serial_num=1900.
7828
7829 * Thuban/UI/multiplechoicedialog.py: New. A multiple choice dialog.
7830
7831 * Thuban/UI/mainwindow.py: import wxMultipleChoiceDialog from
7832 multiplechoicedialog.py rather than from the wxPython library.
7833
7834 2003-06-11 Frank Koormann <[email protected]>
7835
7836 * Thuban/Lib/fileutil.py (get_application_dir): Minor stability
7837 update.
7838
7839 2003-06-11 Frank Koormann <[email protected]>
7840
7841 * Thuban/Lib/fileutil.py (get_application_dir): New function to
7842 determine the absolute .thuban/thuban directory under
7843 "posix" (os.expanduser) and "nt" (read AppData registry key).
7844
7845 * Thuban/Model/resource.py: Use get_application_dir
7846
7847 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
7848 Use get_application_dir.
7849
7850 2003-06-10 Bernhard Herzog <[email protected]>
7851
7852 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Subscribe to
7853 the messages MAP_LAYERS_REMOVED messages
7854 (LayerTableFrame.OnClose): Unsubscribe from it.
7855 (LayerTableFrame.map_layers_removed): New. Receiver for
7856 MAP_LAYERS_REMOVED. Close the dialog when the layer whose the
7857 dialog is showing is removed.
7858
7859 2003-06-10 Bernhard Herzog <[email protected]>
7860
7861 * Thuban/Lib/connector.py (Connector.Issue): Iterate over a copy
7862 of the receivers list so that unsubscribing in a receiver doesn't
7863 modify it while iterating over it.
7864
7865 * test/test_connector.py
7866 (ConnectorTest.test_disconnect_in_receiver): New. Test whether
7867 unsubscribing in a receiver works correctly. See docstring for
7868 details
7869
7870 2003-06-10 Bernhard Herzog <[email protected]>
7871
7872 * Thuban/Model/messages.py (LAYER_SHAPESTORE_REPLACED): New
7873 message.
7874
7875 * Thuban/Model/layer.py (Layer.SetShapeStore): Send
7876 LAYER_SHAPESTORE_REPLACED when the shapestore changes. A
7877 LAYER_CHANGED will still be sent if the classification changes.
7878
7879 * Thuban/UI/classifier.py (Classifier.__init__): Add the map as
7880 parameter so we can subscribe to some of its messages
7881 (Classifier.__init__): Subscribe to the map's MAP_LAYERS_REMOVED
7882 and the layer's LAYER_SHAPESTORE_REPLACED
7883 (Classifier.unsubscribe_messages): New. Unsubscribe from message
7884 subscribed to in __init__
7885 (Classifier.map_layers_removed)
7886 (Classifier.layer_shapestore_replaced): receivers for the messages
7887 subscribed to in __init__. Unsubscribe and close the dialog
7888
7889 * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): Pass
7890 the map to the Classifier dialog
7891
7892 * test/test_layer.py (SetShapeStoreTests): Derive from
7893 SubscriberMixin as well so we can test messages
7894 (SetShapeStoreTests.setUp): Subscribe to some of the layer's
7895 messages
7896 (SetShapeStoreTests.tearDown): Clear the messages again
7897 (SetShapeStoreTests.test_sanity): Expand the doc-string and check
7898 for the modified flag too
7899 (SetShapeStoreTests.test_set_shape_store_modified_flag): New test
7900 to check whether SetShapeStore sets the modified flag
7901 (SetShapeStoreTests.test_set_shape_store_different_field_name)
7902 (SetShapeStoreTests.test_set_shape_store_same_field)
7903 (SetShapeStoreTests.test_set_shape_store_same_field_different_type):
7904 Add tests for the messages. This checks both the new
7905 LAYER_SHAPESTORE_REPLACED and the older LAYER_CHANGED
7906
7907 2003-06-06 Jan-Oliver Wagner <[email protected]>
7908
7909 * Thuban/UI/mainwindow.py: Improved and partly added help texts for
7910 the menu items.
7911
7912 2003-06-05 Frank Koormann <[email protected]>
7913
7914 * Thuban/UI/identifyview.py (IdentifyView.__init__):
7915 Layout reimplemented without panel. Make life easier to fit the list
7916 in the dialog.
7917
7918 2003-06-05 Frank Koormann <[email protected]>
7919
7920 * Thuban/UI/projdialog.py (ProjFrame.__init__): Fill the projchoice
7921 once on initialisation (Former implementation resulted in multiple
7922 entries for each projection).
7923 (ProjFrame.__FillAvailList): selectProj as second optional parameter,
7924 if set, select the projection found under the specified name. This
7925 overwrites any other selection estimate.
7926 Removed projchoice filling from this method.
7927 (ProjFrame._OnSave, ProjFrame._OnAddToList):
7928 Updated call of ProjFrame.__FillAvailList
7929 (LCCPanel._DoLayout): Moved parameter controls in more common order.
7930
7931 * Resources/Projections/defaults.proj: Extended defaults representing
7932 various common European projections.
7933
7934 2003-06-05 Frank Koormann <[email protected]>
7935
7936 * Thuban/UI/identifyview.py (IdentifyView.__init__):
7937 Use ListCtrl instead of GridCtrl
7938
7939 * Thuban/Model/resource.py:
7940 Guess location of .thuban directory from tempdir parent directory.
7941
7942 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
7943 Guess location of .thuban directory from tempdir parent directory.
7944
7945 2003-06-04 Bernhard Herzog <[email protected]>
7946
7947 Do not cache the values returned by the tree widget's
7948 GetFirstChild and GetNextChild methods because it led to lots of
7949 segfaults. The new way requires more brute force but is more
7950 reliable.
7951
7952 * Thuban/UI/legend.py (LegendTree.__init__): Remove instance
7953 variable layer2id
7954 (LegendTree.find_layer): New method to do with brute force what
7955 layer2id tried to accomplish
7956 (LegendTree._OnMsgLayerChanged)
7957 (LegendTree._OnMsgLayerTitleChanged, LegendTree.__ShowHideLayer):
7958 Use find_layer instead of layer2id
7959 (LegendTree.__RemoveLayer, LegendTree.__AddLayer): No need to
7960 update layer2id anymore
7961 (LegendTree._OnMsgMapLayersRemoved)
7962 (LegendTree._OnMsgMapLayersAdded): Get by without layer2id.
7963
7964 2003-06-03 Thomas Koester <[email protected]>
7965
7966 * Thuban/Model/classgen.py (GenQuantiles0): New function.
7967
7968 2003-06-02 Bernhard Herzog <[email protected]>
7969
7970 * Thuban/UI/mainwindow.py (layer_rename command, table_rename command):
7971 New commands.
7972 (main_menu): Add the new commands.
7973 (MainWindow.TableRename): New. Implementation of the table_rename
7974 command.
7975 (MainWindow.RenameLayer): New. Implementation of the layer_rename
7976 command.
7977
7978 * Thuban/Model/session.py (Session.AddTable): call self.changed to
7979 set the modified flag
7980
7981 * test/test_session.py (TestSessionSimple.test_add_table): Test
7982 whether the modified flag is set properly
7983
7984 * Thuban/Model/base.py (TitledObject.SetTitle): Call changed
7985 instead of issue so that the modified flags get updated.
7986
7987 * test/test_base.py (SomeTitledObject): Derive from Modifiable
7988 instead of Publisher to reflect reality better and to accomodate
7989 the fact that SetTitle now calls changed instead of issue
7990
7991 2003-06-02 Bernhard Herzog <[email protected]>
7992
7993 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Resource
7994 acquisition has to happen before the try in a try-finally.
7995
7996 2003-06-02 Bernhard Herzog <[email protected]>
7997
7998 * Thuban/UI/legend.py (LegendTree._OnMsgMapLayersRemoved): It's
7999 possible that a layer is removed that is not currently selected in
8000 the legend so don't check for this.
8001
8002 2003-05-30 Bernhard Herzog <[email protected]>
8003
8004 * Thuban/Model/layer.py (Layer.Destroy): Set all instance
8005 variables to None that have direct or indirect references to
8006 shapefiles or dbf files to make sure that they do go away and the
8007 files are closed.
8008
8009 2003-05-30 Bernhard Herzog <[email protected]>
8010
8011 * Thuban/UI/legend.py (LegendTree.GetRootItem): Reset
8012 availImgListIndices when a new image list is created
8013
8014 2003-05-30 Bernhard Herzog <[email protected]>
8015
8016 * Thuban/UI/legend.py (LegendTree.__init__): New instance variable
8017 changing_selection to indicate whether the LegendTree code itself
8018 is currently changing the selection
8019 (LegendTree.normalize_selection): New method to normalize the
8020 selection by selecting the layer item even if the user clicked on
8021 the classification.
8022 (LegendTree._OnSelChanged): normalize the selection. This works
8023 around a bug in wx which doesn't keep track of the selection
8024 properly when subtrees are deleted.
8025
8026 2003-05-30 Bernhard Herzog <[email protected]>
8027
8028 * Thuban/UI/view.py (MapCanvas.set_view_transform): Limit the
8029 maximum and minimum scale factors.
8030
8031 * test/test_classgen.py (ClassGenTest.test): Update to reflect the
8032 changes in classgen.py
8033
8034 2003-05-30 Jonathan Coles <[email protected]>
8035
8036 * Thuban/Model/classgen.py: Remove ClassGenerator class but make
8037 all the methods functions. Fixes RTBug #1903.
8038
8039 * Thuban/Model/map.py (Map.TopLayer, Map.BottomLayer): Renamed
8040 to MoveLayerToTop and MoveLayerToBottom respectively. Fixes
8041 RTBug #1907.
8042
8043 * Thuban/UI/classgen.py: Use classgen functions that were part
8044 of the ClassGenerator class. Put try/finally blocks around
8045 code that uses wxBeginBusyCursor()/wxEndBusyCursor(). Fixes
8046 RTBug #1904.
8047
8048 * Thuban/UI/classifier.py: Remove unused import of ClassGenerator.
8049
8050 * Thuban/UI/legend.py: The legend was cleared and repopulated any
8051 time something changed which caused some state to be lost such
8052 as which children were expanded or collapsed. Fixes RTBug #1901.
8053 (LegendTree._OnMsgMapLayersAdded): Add only new layers.
8054 (LegendTree.__OnMsgMapLayersRemoved): Remove layers that exist in
8055 the legend but not in the map.
8056 (LegendTree.__FillTree): Move main functionality out into smaller
8057 methods that can be used by other methods.
8058 (LegendTree.__FillTreeLayer): Reuse old slots in the image list
8059 if they are available.
8060 (LegendTree.DeleteAllItems): Renamed from __DeleteAllItems so
8061 that we override the wxTreeCtrl method. Iterate over children
8062 and call __RemoveLayer.
8063 (LegendTree.__AddLayer): New. Add a new layer to the legend.
8064 (LegendTree.__RemoveLayer): Remove a layer from the legend.
8065 (LegendTree.DeleteChildren): New, overrides wxTreeCtrl method.
8066 Should only be called with the id of a layer branch.
8067 (LegendTree.GetRootItem): New, overrides wxTreeCtrl method.
8068 Returns the root item or creates one if necessary.
8069
8070 * Thuban/UI/renderer.py (MapRenderer.draw_raster_layer): Call
8071 ProjectRasterFile with tuple arguments instead of strings.
8072
8073 * Thuban/UI/tableview.py (QueryTableFrame.OnQuery): Wrap code
8074 with try/finally. Fixes RTBug #1904.
8075
8076 * Thuban/UI/view.py (MapCanvas.OnPaint): Wrap code
8077 with try/finally. Fixes RTBug #1904.
8078 (MapCanvas.FitSelectedToWindow): If a single point is selected
8079 simply center it on the display. Fixes RTBug #1849.
8080
8081 * extensions/thuban/gdalwarp.cpp: Removed code that allowed gdalwarp
8082 to be compiled as a standalone app. Now the code can only be
8083 called from Python which simplifies the parameter passing.
8084 (ProjectRasterFile): Handle Python arguments. Remove code that
8085 checks for a destination dataset. Add more clean up code.
8086
8087 * test/test_map.py (TestMapWithContents.test_raise_layer_top,
8088 TestMapWithContents.test_lower_layer_bottom):
8089 Test Map.MoveLayerToTop() and Map.MoveLayerToBottom() respectively.
8090 Fixes RTBug #1907.
8091
8092 * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Apply a full
8093 extent to the map when the legend is toggled. Fixes RTBug #1881.
8094
8095 2003-05-29 Jan-Oliver Wagner <[email protected]>
8096
8097 * Thuban/UI/tableview.py (LayerTableFrame.OnClose): Bug-fix: Now
8098 unsubscribes all that is subcribed in __init__.
8099
8100 2003-05-28 Bernhard Herzog <[email protected]>
8101
8102 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer)
8103 (MainWindow.CanDuplicateLayer): New methods to implement the
8104 Layer/Duplicate command.
8105 (layer_duplicate command): New.
8106 (main_menu): Add layer_duplicate to the Layer menu.
8107
8108 2003-05-28 Bernhard Herzog <[email protected]>
8109
8110 * Thuban/UI/tableview.py (NullRenderer.Draw): New. Our own
8111 renderer so that NULL/None values get displayed differently (by a
8112 gray rectangle).
8113 (TableGrid.__init__): Override the default renderers
8114
8115 2003-05-28 Bernhard Herzog <[email protected]>
8116
8117 * Thuban/Model/layer.py (Layer.SetShapeStore): Set the
8118 classification to "None" if the type of the field has changed.
8119
8120 * test/test_layer.py (SetShapeStoreTests): New. Class with a few
8121 test for the Layer.SetShapeStore method
8122
8123 2003-05-28 Jan-Oliver Wagner <[email protected]>
8124
8125 * Thuban/Model/layer.py (Layer.TreeInfo): Fixed a bug (a layer
8126 does not necessarily have a filename).
8127
8128 2003-05-28 Jan-Oliver Wagner <[email protected]>
8129
8130 * Thuban/UI/mainwindow.py (MainWindow.TableClose, MainWindow.TableShow):
8131 sort the selection list for the dialog.
8132
8133 2003-05-28 Frank Koormann <[email protected]>
8134
8135 * extensions/thuban/wxproj.cpp
8136 (project_point): Removed cast to int for projected point coordinates.
8137 (shape_centroid): Return last point if all polygon vertices fall
8138 to one point.
8139
8140 2003-05-28 Bernhard Herzog <[email protected]>
8141
8142 * Thuban/UI/mainwindow.py (_can_unjoin): Add doc-string and cope
8143 with layers that don't have shapestores, i.e. raster layers.
8144
8145 2003-05-28 Bernhard Herzog <[email protected]>
8146
8147 * Thuban/Model/table.py (DBFTable.__init__): Omit the extension
8148 when determining the title from the filename.
8149
8150 * test/test_dbf_table.py (TestDBFTable.test_title): Update to
8151 reflect changes in the way the title is derived from the filename
8152
8153 2003-05-28 Frank Koormann <[email protected]>
8154
8155 * Thuban/UI/mainwindow.py (MainWindow.TableShow):
8156 Added wxDEFAULT_DIALOG_STYLE to show table dialog styles.
8157
8158 2003-05-27 Bernhard Herzog <[email protected]>
8159
8160 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages): Also
8161 delegate SelectedLayer.
8162 (MainWindow.LayerUnjoinTable): Implement.
8163 (_can_unjoin): New. Helper function for the sensitivity of the
8164 layer/unjoin command.
8165
8166 * Thuban/Model/data.py (ShapefileStore.OrigShapeStore)
8167 (DerivedShapeStore.OrigShapeStore): New. Return the original
8168 shapestore. Used to figure out how to unjoin.
8169 (DerivedShapeStore.Shapefile): Fix a typo.
8170
8171 2003-05-27 Bernhard Herzog <[email protected]>
8172
8173 * Thuban/UI/join.py (JoinDialog): Extend to handle layer joins as
8174 well
8175 (JoinDialog.__init__): Use the layer parameter and only build the
8176 left choice when a layer is given
8177 (JoinDialog.OnJoin): Handle layer joins as well
8178 (JoinDialog.OnLeftTable, JoinDialog.OnRightTable): Handle the case
8179 that the user selects the "Select..." item. The sensitivitly
8180 updating is now in update_sensitivity
8181 (JoinDialog.y): New method to refactor the sensitivity update of
8182 the join button into its own method.
8183
8184 * Thuban/UI/mainwindow.py (MainWindow.LayerJoinTable): Implement.
8185
8186 2003-05-27 Bernhard Herzog <[email protected]>
8187
8188 * Thuban/UI/mainwindow.py (table_close command): Make it sensitive
8189 iff there are unreferenced tables in the session
8190
8191 2003-05-27 Bernhard Herzog <[email protected]>
8192
8193 * Thuban/Model/messages.py (TABLE_REMOVED): New message.
8194
8195 * Thuban/Model/session.py (Session.UnreferencedTables): New method
8196 to return tables that are not referenced by other tables or shape
8197 stores and can be removed.
8198 (Session.RemoveTable): Issue a TABLE_REMOVED message after
8199 removing the table
8200
8201 * Thuban/UI/mainwindow.py: Remove unused imports
8202 (MainWindow.TableClose): Implement.
8203
8204 * Thuban/UI/tableview.py (TableFrame.__init__): Subscribe to some
8205 messages so that the frame will be automatically closed when a new
8206 session is opened or the table is removed.
8207 (TableFrame.OnClose): Unsubscribe the Subscriptions made in
8208 __init__
8209 (TableFrame.close_on_session_replaced)
8210 (TableFrame.close_on_table_removed): New. Subscribers that close
8211 the window
8212
8213 * test/test_session.py (TestSessionMessages.test_remove_table)
8214 (TestSessionSimple.test_remove_table): Move the test to
8215 TestSessionSimple and add test for the TABLE_REMOVED message
8216 (TestSessionBase.setUp): Also subscribe to TABLE_REMOVED
8217 (TestSessionSimple.test_unreferenced_tables) New. Test for the
8218 UnreferencedTables method.
8219 (UnreferencedTablesTests): New. Class with some more sophisticated
8220 tests for UnreferencedTables.
8221
8222 2003-05-27 Frank Koormann <[email protected]>
8223
8224 * Thuban/UI/tableview.py (QueryTableFrame.__init__): The "_S_election"
8225 display has some unwanted side effects. Removed again.
8226
8227 2003-05-27 Frank Koormann <[email protected]>
8228
8229 * Resources/Bitmaps/legend_icon_layer.xpm: New, icon for legend.
8230
8231 * Thuban/UI/legend.py (LegendTree.__FillTree): Use "legend_icon_layer"
8232
8233 2003-05-27 Jan-Oliver Wagner <[email protected]>
8234
8235 * test/test_menu.py (MenuTest.test): Added test for
8236 Menu.RemoveItem().
8237
8238 * Thuban/UI/menu.py (Menu.RemoveItem): New. Remove an item from
8239 the menu.
8240
8241 2003-05-27 Frank Koormann <[email protected]>
8242
8243 Nonmodal dialogs without parent (i.e. they can fall behind the main
8244 window)
8245
8246 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Explicitly destroy
8247 all dialogs in the dialogs dictionary and the canvas.
8248
8249 * Thuban/UI/dialogs.py (NonModalNonParentDialog): New class, without
8250 parent, i.e. can fall behind other windows.
8251 (NonModalDialog.OnClose): Check is dialog is in mainwindow.dialog
8252 dictionary before removing it.
8253
8254 * Thuban/UI/classifier.py: Dialog derived from NonModalNonParentDialog
8255
8256 * Thuban/UI/projdialog.py: Dialog derived from NonModalNonParentDialog
8257 * Thuban/UI/tableview.py: Dialog derived from NonModalNonParentDialog
8258 * Thuban/UI/tree.py: Dialog derived from NonModalNonParentDialog
8259
8260 2003-05-27 Bernhard Herzog <[email protected]>
8261
8262 * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): New. Open a
8263 tableview dialog
8264 (MainWindow.TableShow): Use ShowTableView to open the dialogs.
8265 Also, don't use the table's titles as the dialog names. The titles
8266 aren't guaranteed to be unique.
8267 (MainWindow.TableOpen): Open a table view dialog after opening the
8268 table
8269
8270 2003-05-27 Bernhard Herzog <[email protected]>
8271
8272 * Thuban/UI/mainwindow.py: Remove the Table/Hide menu item. Its
8273 effect can be achieved by simply closing the window showing the
8274 table.
8275 (MainWindow.TableHide): Removed.
8276 (main_menu): Removed "table_hide"
8277
8278 2003-05-27 Frank Koormann <[email protected]>
8279
8280 Fix legend tree display problems under Win32
8281
8282 * Thuban/UI/legend.py: BMP_SIZE_W = 15
8283 (LegendTree.__FillTree): Display "legend_icon_map.xpm" with layer title.
8284 (LegendTree.__FillTreeLayer): Explicitely set SelectedImage.
8285
8286 * Resources/Bitmaps/legend_icon_map.xpm: New icon for legend.
8287
8288 2003-05-27 Jan-Oliver Wagner <[email protected]>
8289
8290 * Thuban/UI/menu.py (Menu.InsertSeparator): Additional optional parameter
8291 'after' now allows to insert separators almost anywhere in the menu.
8292
8293 2003-05-27 Frank Koormann <[email protected]>
8294
8295 * Thuban/UI/tableview.py (QueryTableFrame.__init__): Underline the
8296 "S" of selection box label to hint on hot key (Alt-S). Works under
8297 Win32 but is ignored under GTK.
8298
8299 2003-05-26 Frank Koormann <[email protected]>
8300
8301 * Thuban/UI/projdialog.py (ProjFrame.__do_layout, ProjPanel._DoLayout):
8302 Center Choices.
8303
8304 2003-05-26 Bernhard Herzog <[email protected]>
8305
8306 Remove the Precision methods again. They're too DBF specific to be
8307 part of the table interface and they're only used in table_to_dbf
8308 anyway.
8309
8310 * Thuban/Model/transientdb.py (TransientTableBase.Width):Use a
8311 fixed precision of 12 for doubles.
8312 (TransientTableBase.Precision): Removed
8313 (AutoTransientTable.Width): Delegate to self.table.
8314
8315 * Thuban/Model/table.py (DBFTable.Precision)
8316 (MemoryTable.Precision): Removed.
8317 (MemoryTable.Width): Use a fixed precision of 12 for doubles.
8318 (table_to_dbf): Use a fixed precision of 12 for floats unless the
8319 column object specifies something else.
8320
8321 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): New.
8322 test for table_to_dbf
8323
8324 2003-05-26 Bernhard Herzog <[email protected]>
8325
8326 * test/test_transientdb.py
8327 (TestTransientTable.run_iceland_political_tests): Fix a comment.
8328
8329 2003-05-26 Bernhard Herzog <[email protected]>
8330
8331 * Thuban/UI/mainwindow.py (MainWindow.TableOpen): Real
8332 implementation. Mark parts of the file format strings for
8333 localization.
8334
8335 * Thuban/Model/session.py (Session.OpenTableFile): New. Open a dbf
8336 file and add the table to the tables managed by the session
8337
8338 * test/test_session.py (TestSessionSimple.test_open_table_file):
8339 New. test case for OpenTableFile
8340
8341 2003-05-26 Jan-Oliver Wagner <[email protected]>
8342
8343 * Thuban/UI/controls.py, Thuban/UI/identifyview.py, Thuban/UI/join.py,
8344 Thuban/UI/labeldialog.py, Thuban/UI/mainwindow.py,
8345 Thuban/UI/proj4dialog.py, Thuban/UI/tableview.py, Thuban/UI/view.py:
8346 Replace the true/false of wxWindows by True/False of Python 2.2.1.
8347
8348 2003-05-26 Jan-Oliver Wagner <[email protected]>
8349
8350 * Thuban/UI/tableview.py (LayerTableFrame.__init__): If there is
8351 already a selection present, update the grid accordingly.
8352
8353 * Thuban/UI/mainwindow.py (MainWindow.TableShow): Make the dialog
8354 resizeable and increase its initial size.
8355
8356 2003-05-26 Frank Koormann <[email protected]>
8357
8358 Table export functionality
8359
8360 * Thuban/Model/table.py (DBFTable.Width, MemoryTable.Width):
8361 Return width (in characters) for a column.
8362 (DBFTable.Precision, MemoryTable.Precision): Return decimal precision.
8363 (table_to_dbf): Write table to dbf file.
8364 (table_to_csv): Write table to csv file.
8365
8366 * Thuban/Model/transientdb.py (TransientTableBase.Width,
8367 TransientTableBase.Precision): Return column width and precision.
8368
8369 * Thuban/UI/tableview.py (QueryTableFrame.OnSaveAs): Call table_to_dbf
8370 or table_to_csv depending on file selection.
8371
8372 * test/test_dbf_table.py:
8373 Test table_to_dbf (extension of former part of test).
8374
8375 * test/test_csv_table.py:
8376 Test table_to_csv.
8377
8378 2003-05-23 Jan-Oliver Wagner <[email protected]>
8379
8380 * Thuban/UI/join.py (JoinDialog.OnJoin): Use _() for strings.
8381 Use QueryTableFrame instead of TableFrame.
8382
8383 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Prefix the
8384 table window with 'Layer Table:' instead of 'Table:'.
8385
8386 2003-05-23 Jan-Oliver Wagner <[email protected]>
8387
8388 Give all tables a title via mix-in TitledObject.LayerShowTable
8389
8390 * Thuban/Model/base.py (TitledObject.SetTitle): Call method 'issue'
8391 only if it exists.
8392
8393 * Thuban/Model/table.py (DBFTable, MemoryTable): mix-in TitledObject
8394 and call its init-method with a default title. Remove Title() method.
8395
8396 * Thuban/Model/transientdb.py (TransientTable, TransientJoinedTable,
8397 AutoTransientTable): mix-in TitledObject and call its init-method with
8398 a default title. Remove Title() method.
8399
8400 2003-05-23 Bernhard Herzog <[email protected]>
8401
8402 * Thuban/Model/session.py (Session.AddShapeStore): Define
8403 AddShapeStore analogously to AddTable.
8404
8405 * test/test_session.py (TestSessionSimple.test_add_shapestore):
8406 New. Test for AddShapeStore
8407
8408 2003-05-23 Jan-Oliver Wagner <[email protected]>
8409
8410 Introducing QueryTableFrame and a very coarse ShowTable implementation.
8411
8412 * Thuban/UI/tableview.py (LayerTableFrame, QueryTableFrame): Split the
8413 class LayerTableFrame into two classes, LayerTableFrame and QueryTableFrame.
8414 The latter implements the selection GUI without dependency on a layer.
8415 LayerTableFrame now is derived from QueryTableFrame and connects
8416 to a layer.
8417
8418 * Thuban/UI/mainwindow.py (MainWindow.TableShow): A very coarse
8419 implementation that still needs work.
8420
8421 * Thuban/Model/layer.py (Layer.TreeInfo): Added filename.
8422
8423 2003-05-22 Frank Koormann <[email protected]>
8424
8425 * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
8426 Added "outer_join = False" as optional parameter.
8427 (TransientJoinedTable.create): If outer join is true, perform a
8428 "LEFT OUTER JOIN" instead of "JOIN", which preserves all records of
8429 the left table. Records not matching are filled with 0 / None.
8430
8431 * Thuban/UI/join.py (JoinDialog.__init__): Checkbox for outer join.
8432 (JoinDialog.OnJoin): Consider outer join check box.
8433
8434 2003-05-22 Bernhard Herzog <[email protected]>
8435
8436 * Thuban/UI/join.py (JoinDialog.OnJoin): Use exc_info in a
8437 somewhat safer way. Storing the traceback in a local variable can
8438 lead to memory leaks
8439
8440 2003-05-22 Bernhard Herzog <[email protected]>
8441
8442 * Thuban/UI/join.py (JoinDialog.OnJoin): Make sure to really call
8443 the wxMessageDialog's Destroy() method.
8444
8445 2003-05-22 Frank Koormann <[email protected]>
8446
8447 * Thuban/UI/join.py (JoinDialog.__init__): Make use of
8448 TransientTable.Title()
8449
8450 2003-05-22 Frank Koormann <[email protected]>
8451
8452 Join Dialog, initial version.
8453
8454 * Thuban/UI/mainwindow.py (MainWindow.TableJoin): Removed print.
8455
8456 * Thuban/UI/join.py (JoinDialog): Functional implementation of
8457 former framework. Renamed Table1/Table2 to LeftTable/RightTable
8458 in all occurences.
8459
8460 * Thuban/Model/transientdb.py (TransientJoinedTable.__doc__):
8461 Typo fixed.
8462
8463 2003-05-22 Bernhard Herzog <[email protected]>
8464
8465 Give the tables titles so that the GUI can display more meaningful
8466 names. For now the titles are fixed but depend on e.g. filenames
8467 or the titles of the joined tables.
8468
8469 * Thuban/Model/transientdb.py (TransientTable.Title)
8470 (TransientJoinedTable.Title, AutoTransientTable.Title): New.
8471
8472 * Thuban/Model/table.py (DBFTable.Title, MemoryTable.Title): New.
8473
8474 * test/test_transientdb.py
8475 (TestTransientTable.test_auto_transient_table_title): New. Test
8476 for the Title method
8477 (TestTransientTable.test_transient_joined_table)
8478 (TestTransientTable.test_transient_table): Add test for the Title
8479 methods
8480
8481 * test/test_memory_table.py (TestMemoryTable.test_title): New.
8482 Test for the Title method
8483
8484 * test/test_dbf_table.py (TestDBFTable.test_title): New. Test for
8485 the Title method
8486
8487 2003-05-22 Bernhard Herzog <[email protected]>
8488
8489 * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
8490 Provide a better way to destroy the layers
8491 (TestLayer.test_base_layer, TestLayer.test_arc_layer)
8492 (TestLayer.test_point_layer, TestLayer.test_empty_layer)
8493 (TestLayer.test_polygon_layer, TestLayer.test_get_field_type): Use
8494 the new way to destroy the layers.
8495 (TestLayer.test_derived_store): New. Test for using a layer with a
8496 DerivedShapeStore
8497
8498 * Thuban/Model/layer.py (Layer.SetShapeStore): Only set the
8499 filename if the shape store actually has one.
8500
8501 2003-05-22 Bernhard Herzog <[email protected]>
8502
8503 * Thuban/Model/table.py (DBFTable.FileName): New. Accessor method
8504 for the filename
8505
8506 * test/test_dbf_table.py (TestDBFTable.test_filename): New. Test
8507 for the FileName method
8508 (TestDBFTableWriting.test_write): Fix spelling of filename
8509
8510 2003-05-22 Thomas Koester <[email protected]>
8511
8512 * Thuban/Model/range.py, test/test_range.py: Brought over new Range
8513 from SciParam that now really is immutable.
8514
8515 2003-05-22 Frank Koormann <[email protected]>
8516
8517 Layer Top/Bottom placement added to legend.
8518
8519 * Thuban/UI/legend.py
8520 (LegendPanel._OnMoveTop(), LayerPanel._OnMoveBottom): New, methods
8521 bound to tool events.
8522 (LegendTree.MoveCurrentItemTop(), LegendTree.MoveCurrentItemBottom):
8523 New, methods binding the event methods with the map methods.
8524
8525 * Thuban/Model/map.py (Map.TopLayer(), Map.BottomLayer()): New, place
8526 layer at top/bottom of layer stack.
8527
8528 * Resources/Bitmaps/top_layer.xpm: New button icon.
8529
8530 * Resources/Bitmaps/bottom_layer.xpm: New button icon.
8531
8532 2003-05-22 Bernhard Herzog <[email protected]>
8533
8534 * Thuban/Model/session.py (Session.RemoveTable): New method to
8535 remove tables
8536
8537 * test/test_session.py (TestSessionSimple.test_remove_table): New.
8538 Test for RemoveTable
8539
8540 2003-05-22 Thomas Koester <[email protected]>
8541
8542 * Thuban/Model/classgen.py: Added short module doc string and CVS id.
8543 (ClassGenerator.GenUniformDistribution): Use new Range __init__, too.
8544
8545 2003-05-22 Bernhard Herzog <[email protected]>
8546
8547 Implement a way to discover dependencies between tables and
8548 shapestores.
8549
8550 * Thuban/Model/transientdb.py (TransientTableBase.Dependencies)
8551 (TransientJoinedTable.Dependencies)
8552 (AutoTransientTable.SimpleQuery): New. Implement the dependencies
8553 interface
8554 (TransientJoinedTable.__init__): Keep tack of the original table
8555 objects in addition to the corresponding transient tables.
8556
8557 * Thuban/Model/table.py (DBFTable.Dependencies)
8558 (MemoryTable.Dependencies): New. Implement the dependencies
8559 interface
8560
8561 * Thuban/Model/data.py (ShapeTable): New. Helper class for
8562 ShapefileStore
8563 (ShapefileStore.__init__): Use ShapeTable instead of
8564 AutoTransientTable
8565 (ShapefileStore.Table, ShapefileStore.Shapefile): Add doc-strings
8566 (ShapefileStore.FileName, ShapefileStore.FileType): New. Accessor
8567 methods for filename and type
8568 (ShapefileStore.Dependencies): New. Implement the dependencies
8569 interface
8570 (DerivedShapeStore): New class to replace SimpleStore. The main
8571 difference to SimpleStore is that it depends not on a shapefile
8572 but another shapestore which expresses the dependencies a bit
8573 better
8574 (SimpleStore.__init__): Add deprecation warning.
8575
8576 * test/test_dbf_table.py (TestDBFTable.test_dependencies): New.
8577 Test for the Dependencies method.
8578
8579 * test/test_memory_table.py (TestMemoryTable.test_dependencies):
8580 New. Test for the Dependencies method.
8581
8582 * test/test_transientdb.py
8583 (TestTransientTable.test_auto_transient_table_dependencies): New.
8584 Test for the Dependencies method.
8585 (TestTransientTable.test_transient_joined_table): Add test for the
8586 Dependencies method.
8587
8588 * test/test_session.py (TestSessionSimple.setUp)
8589 (TestSessionSimple.tearDown): New. Implement a better way to
8590 destroy the sessions.
8591 (TestSessionSimple.test_initial_state)
8592 (TestSessionSimple.test_add_table): Bind session to self.session
8593 so that it's destroyed by tearDown
8594 (TestSessionSimple.test_open_shapefile): New. Test for
8595 OpenShapefile and the object it returns
8596
8597 2003-05-22 Bernhard Herzog <[email protected]>
8598
8599 * Thuban/Model/session.py (Session.AddTable): New method to
8600 register tables with the session.
8601 (Session.Tables): Return the tables registered with AddTable too.
8602
8603 * test/test_session.py (TestSessionSimple.test_add_table): New.
8604 Test case for the AddTable method
8605
8606 2003-05-22 Frank Koormann <[email protected]>
8607
8608 UI polishing updates: Place main buttons (OK, Cancel, etc) in the
8609 lower right corner, center labels for selections, initialize controls
8610 in reasonable order for keyboard navigation.
8611
8612 * Thuban/UI/projdialog.py (ProjFrame.__init__, ProjFrame.__doLayout)
8613 (ProjFrame.__DoOnProjAvail): Determine position of current projection
8614 using the wxListBox.FindString() method. Still a problem (#1886)
8615
8616 * Thuban/UI/classifier.py
8617 (Classifier.__init__, SelectPropertiesDialog.__init__)
8618
8619 * Thuban/UI/classgen.py (ClassGenDialog.__init__,
8620 (ClassGenDialog.__DoOnGenTypeSelect): Moved initialization of the
8621 different classification types from here to __init__.
8622 (GenUniquePanel.__init__): Set the column width of the first field
8623 in the Field ListCtrl to the full width.
8624
8625 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Rename 'Save As'
8626 Button to 'Export'. Center Buttons in Selection Box, set Focus to
8627 Grid.
8628 (LayerTableFrame.OnKeyDown()): New, bound to the grid with EVT_KEY_DOWN,
8629 changes focus to the Selection when pressing "Alt-S".
8630
8631 * Thuban/UI/legend.py (LegendTree.__SetVisibilityStyle): Only gray out
8632 the text if not visible. The italic font sometimes exceeds the
8633 rendering area.
8634
8635 2003-05-21 Jonathan Coles <[email protected]>
8636
8637 * Thuban/UI/dock.py (DockFrame): Rename references to _OnClose
8638 to OnClose so that Thuban closes correctly.
8639
8640 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Call
8641 DockFrame.OnClose, not DockFrame._OnClose.
8642
8643 2003-05-21 Jonathan Coles <[email protected]>
8644
8645 * Thuban/Model/classgen.py (ClassGenerator.GenQuantiles): Remove
8646 references to 'inf' and use new Range __init__ to pass floats
8647 directly rather than converting them to strings first.
8648 Fixes RTBug #1876.
8649
8650 * Thuban/Model/classification.py (ClassGroupRange.SetRange):
8651 Use new Range ___init__ to pass floats.
8652
8653 * Thuban/Model/layer.py (RasterLayer.__init__): Test if the
8654 filename is a valid image file. Throw IOError otherwise.
8655
8656 * Thuban/Model/range.py: Brought over new Range from SciParam that
8657 is immutable and has an __init__ which can accept floats.
8658
8659 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Move OpenShapefile
8660 into try block. AddLayer doesn't throw any exceptions anymore.
8661 (MainWindow.AddRasterLayer): Move constructor of RasterLayer into
8662 try block.
8663
8664 * Thuban/UI/projdialog.py (GeoPanel.__init__): Put Degrees as
8665 the first item in choices. Fixes RTBug #1882.
8666
8667 * Thuban/UI/renderer.py (MapRenderer.render_map): Check if scale
8668 has gone to 0 which is a serious problem. abort.
8669 (MapRenderer.draw_raster_layer): Catch IOError seperately and
8670 print the error from GDAL.
8671
8672 * Thuban/UI/tableview.py (TableGrid.__init__): Call
8673 ToggleEventListeners to turn on listening.
8674 (TableGrid.ToggleEventListeners): New. Turns event listening on
8675 and off so as to prevent excessive messages.
8676 (LayerTableFrame.OnQuery): Use TableGrid.ToggleEventListeners
8677 to suppress excessive messages when selecting many rows.
8678 Fixes RTBug #1880.
8679
8680 * Thuban/UI/view.py: Added checks against if scale == 0. This
8681 is a serious problem that can occur when an image without
8682 geo data is loading and causes the map projection bounds to
8683 go to infinity. Right now, the solution is to simply try
8684 to recover.
8685
8686 * extensions/thuban/cpl_mfile.cpp (MFILEClose): Make sure
8687 to set the MFILEReceiver attributes even if the data is NULL.
8688
8689 * extensions/thuban/gdalwarp.cpp: Improved the error handling
8690 and passed GDAL messages back up to the Python layer. Also
8691 tried to fix some memory leaks that were present in the original
8692 utility but didn't matter because the program aborted.
8693
8694 * test/test_range.py: Copied over tests from SciParam. Removed
8695 tests against importing. Fixes RTBug #1867.
8696
8697 2003-05-21 Bernhard Herzog <[email protected]>
8698
8699 * test/test_load.py: Remove unused imports and restructure the
8700 test code
8701 (LoadSessionTest): Split into one class for each test and turn
8702 LoadSessionTest itself into the base class for all such session
8703 tests.
8704 (ClassificationTest): New base class for load tests that test
8705 classifications
8706 (TestSingleLayer, TestLayerVisibility, TestClassification)
8707 (TestLabels, TestLayerProjection, TestRasterLayer): New classes
8708 for the individual tests
8709
8710 * test/support.py (FileLoadTestCase.filename): New base class for
8711 file loading tests
8712
8713 2003-05-21 Jan-Oliver Wagner <[email protected]>
8714
8715 * Resources/Projections/defaults.proj: Renamed 'Universal Transverse
8716 Mercator' to 'UTM Zone 32' as a more convenient example.
8717 Added 'Gauss Krueger Zone 6'.
8718
8719 * Data/iceland_sample_raster.thuban: political polygon now
8720 filled transparent to have the raster image visible at once.
8721
8722 2003-05-21 Frank Koormann <[email protected]>
8723
8724 * Thuban/UI/mainwindow.py (MainWindow): Renamed _OnClose() back to
8725 OnClose() to keep in sync with extensions. Internally Thuban
8726 still uses "underscored" names.
8727
8728 2003-05-20 Jonathan Coles <[email protected]>
8729
8730 This puts back Raster layer support. These layers support projections
8731 through the GDAL library. Currently, the CVS version is being used.
8732 There are no Debian packages available although this may change soon.
8733 A GDAL driver was extended to support writing to memory rather to
8734 files.
8735
8736 There is still some work that needs to be done, such as some error
8737 handling when loading invalid images or when there is a problem
8738 projecting the image. This putback simply checks in the majority
8739 of the work.
8740
8741 * setup.py: Add gdalwarp library extension.
8742
8743 * Thuban/Model/layer.py (BaseLayer.HasClassification): New.
8744 Defaults to False, but can be overridden by subclasses if they
8745 support classification.
8746 (RasterLayer): New. Defines a new layer that represents an
8747 image.
8748
8749 * Thuban/Model/load.py (SessionLoader.__init__): Add rasterlayer
8750 tag handler.
8751 (SessionLoader.start_layer): Encode the filename.
8752 (SessionLoader.start_rasterlayer, SessionLoader.end_rasterlayer):
8753 New. Supports reading a rasterlayer tag.
8754
8755 * Thuban/Model/map.py (Map.BoundingBox): Fix typo in comment.
8756
8757 * Thuban/Model/save.py (XMLWriter.encode): Don't assume that we
8758 get a string in Latin1. If we get such as string convert it to
8759 unicode first, otherwise leave if alone before encoding.
8760 (SessionSaver.write_layer): Add support for writing both Layers
8761 and RasterLayers.
8762
8763 * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
8764 The right argument may not be a string, it could also be a Column.
8765
8766 * Thuban/UI/application.py (ThubanApplication.CreateMainWindow):
8767 Make initial window size 600x400. Fixes RTBug #1872.
8768
8769 * Thuban/UI/classifier.py (Classifier.__init__): Rearrange how
8770 the dialog is constructed so that we can support layers that
8771 do not have classifications.
8772 (Classifier._OnTry): Only build a classification if the layer
8773 supports one.
8774
8775 * Thuban/UI/legend.py: Change all checks that a layer is an
8776 instance of Layer into checks against BaseLayer.
8777 (LegendTree.__FillTreeLayer): Only add children to a branch if
8778 the layer supports classification.
8779
8780 * Thuban/UI/mainwindow.py (MainWindow.NewSession,
8781 MainWindow.OpenSession): Don't proceed with an action if the
8782 user chooses Cancel when they are asked to save changes.
8783 (MainWindow.AddRasterLayer): New. Open a dialog to allow the
8784 user to select an image file. Create a new RasterLayer and add
8785 it to the map.
8786
8787 * Thuban/UI/renderer.py (MapRenderer.render_map): Add support
8788 for rendering RasterLayer layers.
8789 (MapRenderer.draw_raster_layer): Actually method that calls
8790 the GDALWarp python wrapper and constructs an image from the
8791 data returned.
8792
8793 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Change the
8794 Choices symbols to match those used in the table query method.
8795 Replace deprecated method calls on table with new method names.
8796
8797 * Thuban/UI/view.py (MapCanvas.set_view_transform): Try to limit
8798 how small the scale can get. This still needs more testing.
8799
8800 * extensions/thuban/bmpdataset.cpp: New, but copied from GDAL.
8801 Provides a driver to output in .bmp format.
8802
8803 * extensions/thuban/cpl_mfile.cpp, extensions/thuban/cpl_mfile.h:
8804 New. Provides IO routines which write to memory, rather than a file.
8805
8806 * extensions/thuban/gdalwarp.cpp: New, but basically a direct copy
8807 of the gdalwarp utility provided in GDAL. Added function calls
8808 that can be accessed from python.
8809
8810 * Data/iceland_sample_raster.thuban: New. Sample file that uses
8811 a raster layer.
8812
8813 * Data/iceland/island.tfw, Data/iceland/island.tif: New. Raster
8814 layer image data.
8815
8816 * Doc/thuban.dtd: Added rasterlayer attribute definition.
8817
8818 * test/test_layer.py, test/test_load.py, test/test_save.py: Added
8819 tests associated with the raster layer code.
8820
8821 * test/test_transientdb.py
8822 (TestTransientTable.test_auto_transient_table_query): Added a test
8823 for using a Column object as the "right" parameter to a query.
8824
8825 2003-05-19 Frank Koormann <[email protected]>
8826
8827 * Thuban/version.py (get_changelog_date):
8828 Catch exceptions if ChangeLog does not exist.
8829
8830 * Thuban/UI/view.py (MapCanvas.Export): Bugfix
8831
8832 2003-05-19 Frank Koormann <[email protected]>
8833
8834 Extended version information for Thuban
8835
8836 * Thuban/version.py: New, version information for Thuban: Last
8837 modification date and last ChangeLog entry date.
8838
8839 * Thuban/UI/mainwindow.py (MainWindow.About()): Extended version
8840 information: Display Thuban, wxPython and Python version.
8841
8842 2003-05-16 Bernhard Herzog <[email protected]>
8843
8844 * Thuban/Model/save.py: Remove some unused imports including the
8845 __future__ import for nested_scopes as Thuban relies on Python 2.2
8846 now.
8847 (XMLWriter.encode): Remove the special case for a None argument.
8848 In the saver encode is always called with a string argument.
8849
8850 2003-05-16 Bernhard Herzog <[email protected]>
8851
8852 * Thuban/UI/__init__.py: Remove the work-around for the locale bug
8853 in wxPython (at least when usinvg wxGTK) prior to 2.4. The symptom
8854 of the bug was that e.g. float("1.2") would fail. Thuban now
8855 requires 2.4.x.
8856
8857 2003-05-16 Frank Koormann <[email protected]>
8858
8859 Printing enhancement and WMF export (under Win32)
8860
8861 * Thuban/UI/renderer.py (ExportRenderer): New, derived from
8862 ScreenRenderer. Renders Map, Legend and Scalebar for export.
8863 (PrinterRenderer): New, derived from ExportRenderer. Replaces the old
8864 PrintRender.
8865
8866 * Thuban/UI/view.py (MapPrintout.__init__): Enhanced parameter set
8867 to fullfil information needed for PrinterRenderer.
8868 (MapCanvas.Export): New. Export Map (currently only to WMF on Win32).
8869 (MapCanvas.Print): Adapted to new MapPrintout.
8870 (OutputTransform): General calculations to transform from canvas
8871 coordinates to export/printing devices.
8872
8873 * Thuban/UI/mainwindow.py (MainWindow.ExportMap()): New. Added also
8874 new method_command to call ExportMap, with platform dependency (only
8875 __WXMSW__)
8876
8877 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Position and Size
8878 of scalebar drawing area as new parameters.
8879
8880 * Thuban/Model/scalebar.py (roundInterval): round long instead of int
8881
8882 * Thuban/UI/legend.py (ScalebarBitmap.__SetScale):
8883 Update to extended scalebar.DrawScalebar header.
8884
8885 * test/test_export.py: New, test Thuban.UI.view.OutputTransform()
8886
8887 * test/test_scalebar.py: Made test executable as standalone.
8888
8889 2003-05-16 Bernhard Herzog <[email protected]>
8890
8891 * Thuban/Model/table.py (Table): Remove this compatibility alias
8892 for DBFTable.
8893
8894 * test/test_table.py: Import DBFTable as Table because that alias
8895 doesn't exist anymore.
8896
8897 * Thuban/UI/classgen.py: Remove some unused imports
8898
8899 2003-05-14 Jonathan Coles <[email protected]>
8900
8901 * Thuban/Model/classgen.py (ClassGenerator.GenSingletonsFromList):
8902 Fix docstring.
8903 (ClassGenerator.GenUniformDistribution): Fix spelling of method name.
8904 (ClassGenerator.GenQuantiles): Use the left/right brackets and min/max
8905 values of the supplied range to determine the beginning and end
8906 bounds of the generated classes.
8907
8908 * Thuban/Model/range.py (Range.number_re): Now accepts floats that
8909 do not have a leading 0 (.5 is now accepted as well as 0.5).
8910
8911 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Fix name of method
8912 call to ClassGenerator.GenUniformDistribution.
8913
8914 * Thuban/UI/projdialog.py (ProjFrame.__do_layout): Fix Windows
8915 layout bug with the 'Projection' label.
8916
8917 * test/support.py (FloatTestCase): New. Needed for the Range tests.
8918
8919 * test/test_range.py: New. Imported from SciParam.
8920
8921 2003-05-12 Jonathan Coles <[email protected]>
8922
8923 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Replace call
8924 to table.UniqueValues() with calls that retrieve all the values
8925 from the table. This will need to be replaced by a method on table
8926 which can simply return the list (perhaps more efficiently).
8927
8928 2003-05-12 Jonathan Coles <[email protected]>
8929
8930 The return value of ClassGenerator.CalculateQuantiles has changed.
8931 Refer to the documentation for details.
8932
8933 * test/test_classgen.py: Modified Quantile tests to use the
8934 new return values.
8935
8936 * Thuban/Model/classgen.py
8937 (ClassGenerator.GenQuantiles): Add comments describing the parameters,
8938 use new return values from CalculateQuantiles to produce the correct
8939 range bounds in the Classification.
8940 (ClassGenerator.CalculateQuantiles): Add more comments describing
8941 the return values and parameters. Make minor adjustments to improve
8942 the legibility of the code. Fix problem with adjusted not being set
8943 in most cases.
8944
8945 2003-05-12 Frank Koormann <[email protected]>
8946
8947 * Thuban/Model/save.py (XMLWriter.encode()): Explicite call to unicode
8948 and latin1. Fixes #1851 finally.
8949
8950 2003-05-09 Jonathan Coles <[email protected]>
8951
8952 * test/test_classgen.py: New. Tests the Quantile algorithm.
8953
8954 * Thuban/Model/classgen.py (ClassGenerator.CalculateQuantiles):
8955 Clean up debugging statement, add comments, fix a small bug in the
8956 returned adjusted percentiles.
8957
8958 2003-05-09 Jonathan Coles <[email protected]>
8959
8960 Introduces Range class from SciParam into the ClassGroupRange class,
8961 and such ranges can now be saved and loaded from disk.
8962
8963 Quantiles are now available in the Classification Generator.
8964
8965 Initial support for building Queries on a table. Doesn't do anything
8966 but run some tests.
8967
8968 * Thuban/Model/classification.py: Explicit imports.
8969 (ClassGroupRange): Use the Range class to store the underlying
8970 range information. The interface remains the same, except for
8971 GetRange(), and you can also supply a Range object as the min
8972 parameter to SetRange or __init__.
8973
8974 * Thuban/Model/load.py (XMLReader.encode): New. Encodes the given
8975 string appropriately for use in Thuban. Fixes RTbug #1851.
8976 (SessionLoader.end_projection): Handle the context of the
8977 projection tag a bit better by looking at what objects are not
8978 None. There was an assumption that a projection tag for a map
8979 could occur before any layers.
8980 (SessionLoader.start_clrange): Provide backward compatibility for
8981 reading min/max values as well as the new range parameter.
8982
8983 * Thuban/Model/map.py: Explicit imports.
8984
8985 * Thuban/Model/resource.py: Import _.
8986 (ProjFileSaver.write): write header using projfile.dtd.
8987
8988 * Thuban/Model/save.py: Explicit imports.
8989 (XMLWriter.encode): New. Encode the given string from a format
8990 used by Thuban into UTF-8. Fixes RTbug #1851.
8991
8992 * Thuban/UI/classgen.py: Explicit imports.
8993 (ClassGenDialog.__init__): Clean up the code and add support
8994 for Quantiles.
8995 (ClassGenDialog.OnOK): Add support for Quantiles.
8996 (GenQuantilesPanel): New. Input panel for Quantiles.
8997 (ClassGenerator, CustomRamp, MonochromaticRamp, GreyRamp, RedRamp,
8998 GreenRamp, BlueRamp, HotToColdRamp): Move to Thuban/Model/classgen.py
8999
9000 * Thuban/Model/classgen.py: New. Contains all the classes named above.
9001
9002 * Thuban/UI/classifier.py: Explicit imports.
9003 (ClassTable.GetValueAsCust, ClassTable.__ParseInput,
9004 ClassTable.SetValueAsCustom): Reworked to use new Range class.
9005
9006 * Thuban/UI/legend.py: Explicit imports.
9007
9008 * Thuban/UI/mainwindow.py: Add support for the Join Dialog. Added
9009 a Table menu and associated method calls.
9010 (MainWindow.choose_color): Removed. No longer needed.
9011
9012 * Thuban/UI/projdialog.py (ProjFrame.__VerifyButtons): Save button
9013 should be disabled if no projection is selected in the available
9014 list.
9015
9016 * Thuban/UI/renderer.py: Explicit imports.
9017
9018 * Thuban/UI/tableview.py (TableGrid.OnRangeSelect): Fix some issues
9019 with correctly selecting the rows and issuing the right events.
9020 Be sure to call Skip() to allow the grid to do some of its own
9021 handling which allows the rows to actually be selected.
9022 (LayerTableGrid.select_shapes): Rename from select_shape. Supports
9023 selecting multiple shapes.
9024 (LayerTableFrame): Support for building Queries.
9025 (LayerTableFrame.select_shapes): Allow multiple shapes to be selected.
9026
9027 * Thuban/UI/tree.py: Explicit imports.
9028
9029 * Thuban/UI/view.py (MapCanvas): Delegate "SelectedShapes" so the
9030 table view can call it.
9031
9032 * test/test_classification.py: Explicit imports.
9033 (TestClassification.test_ClassGroupRange): Fix test for new
9034 Range class.
9035
9036 * Doc/thuban.dtd: Add range parameter for clrange.
9037
9038 * Thuban/Model/range.py: Taken from SciParam. Used as the underlying
9039 object in ClassGroupRange, and also uesd for inputting ranges in
9040 the classifer table and elsewhere.
9041
9042 * Thuban/UI/join.py: New. Initial Join dialog. No real functionality
9043 yet.
9044
9045 2003-05-09 Frank Koormann <[email protected]>
9046
9047 * Thuban/UI/scalebar.py (DrawScaleBar): Draw only if interval > 0.0.
9048
9049 2003-05-08 Frank Koormann <[email protected]>
9050
9051 Coding style updates
9052
9053 * test/test_scalebar.py: Replaced tab indentation by spaces.
9054
9055 * Thuban/UI/scalebar.py: Explicit imports.
9056
9057 2003-05-08 Frank Koormann <[email protected]>
9058
9059 * Thuban/UI/scalebar.py
9060 (ScaleBar.DrawScalebar): Format string bug fixed.
9061
9062 2003-05-08 Frank Koormann <[email protected]>
9063
9064 Reorganization of scalebar component (no wx in Thuban/Model)
9065
9066 * Thuban/Model/scalebar.py: Rendering moved to Thuban/UI/scalebar.py
9067 (deriveInterval):
9068 Calculate scalebar interval and unit which fits in width for scale.
9069 (roundInterval): Round float.
9070
9071 * Thuban/UI/scalebar.py (ScaleBar): Scalebar rendering
9072
9073 * test/test_scalebar.py: Test for Thuban/Model/scalebar.py methods.
9074
9075 * Thuban/UI/legend.py: Import Thuban.UI.scalebar
9076
9077 2003-05-08 Frank Koormann <[email protected]>
9078
9079 * Thuban/UI/legend.py (ScalebarBitmap.SetCanvas):
9080 Initialize ScaleBar with canvas.map
9081
9082 * Thuban/Model/scalebar.py (ScaleBar.roundInterval()): New,
9083 round intervals to display smarter lengths
9084 (ScaleBar.DrawScalebar): Draw Scalebar only if the map contains a
9085 layer. If the maps has no projection applied grey the scalebar.
9086
9087 2003-05-07 Frank Koormann <[email protected]>
9088
9089 Basic Scalebar features added.
9090
9091 * Thuban/Model/scalebar.py (ScaleBar): New, scalebar rendering.
9092
9093 * Thuban/UI/legend.py (LegendPanel): Added scalebar bitmap
9094 (ScaleBarBitmap): New, links the scalebar bitmap with view messages
9095 and the renderer.
9096
9097 * Thuban/UI/view.py (MapCanvas.set_view_transform): Issue SCALE_CHANGED.
9098
9099 * Thuban/UI/messages.py: SCALE_CHANGED added.
9100
9101 2003-05-07 Bernhard Herzog <[email protected]>
9102
9103 * Thuban/Model/session.py (Session.__init__): New instance
9104 variable shapestores to hold a list of all open shapestore objects
9105 (Session.ShapeStores): New. Accessor method for the shapestores
9106 list.
9107 (Session._add_shapestore, Session._clean_weak_store_refs): New.
9108 Internal methods to maintain the shapestores list.
9109 (Session.Tables): New. Return all tables open in the session.
9110 (Session.OpenShapefile): Insert the new ShapeStore into the
9111 shapestores list.
9112
9113 * test/test_session.py (TestSessionSimple.test_initial_state): Add
9114 tests for ShapeStores and Tables
9115 (TestSessionWithContent.test_shape_stores)
9116 (TestSessionWithContent.test_tables): New. Test cases for
9117 ShapeStores and Tables
9118
9119 2003-05-07 Bernhard Herzog <[email protected]>
9120
9121 * Thuban/Model/transientdb.py (TransientTableBase.ReadRowAsDict):
9122 Add comments about the optimizations used.
9123 (AutoTransientTable.ReadValue, TransientTableBase.ReadValue): New.
9124 Implement the ReadValue table interface method.
9125
9126 * test/test_transientdb.py
9127 (TestTransientTable.run_iceland_political_tests)
9128 (TestTransientTable.test_transient_joined_table): Add tests for
9129 ReadValue
9130
9131 2003-05-07 Frank Koormann <[email protected]>
9132
9133 * Resources/Bitmaps/fulllayerextent.xpm,
9134 Resources/Bitmaps/fullselextent.xpm: Replaced the place holders with
9135 new icons.
9136
9137 2003-05-06 Bernhard Herzog <[email protected]>
9138
9139 * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
9140 New. Simply delegate to the transient table's version.
9141
9142 * test/test_transientdb.py
9143 (TestTransientTable.test_auto_transient_table_query): New. Test
9144 case for AutoTransientTable's SimpleQuery
9145
9146 2003-05-06 Bernhard Herzog <[email protected]>
9147
9148 * Thuban/Model/transientdb.py (TransientTableBase.SimpleQuery):
9149 Implement a simple query method for the query dialog
9150 (TransientTableBase.create): Add an INTEGER PRIMARY KEY that holds
9151 the row index or shapeid.
9152 (TransientTable.create): Insert the right value of the row index
9153 (TransientJoinedTable.create): Copy the row index of the left
9154 table to the joined result table
9155
9156 * test/test_transientdb.py
9157 (TestTransientTable.test_transient_table_read_twice): Fix
9158 doc-string
9159 (TestTransientTable.test_transient_table_query): New. Test for the
9160 SimpleQuery method
9161
9162 2003-05-06 Bernhard Herzog <[email protected]>
9163
9164 Convert all table users to use the new table interface. This only
9165 covers Thuban itself, not GREAT-ER or other applications built on
9166 Thuban yet, so the compatibility interface stays in place for the
9167 time being but it now issues DeprecationWarnings.
9168
9169 Finally, the new Table interface has a new method, HasColumn.
9170
9171 * Thuban/Model/table.py (OldTableInterfaceMixin): All methods
9172 issue deprecation warnings when they're. The warnings refer to the
9173 caller of the method.
9174 (OldTableInterfaceMixin.__deprecation_warning): New. Helper method
9175 for the deprecation warnings
9176
9177 * test/test_table.py: Ignore the deprecation warnings for the old
9178 table in the tests in this module. The purpose of the tests is to
9179 test the old interface, after all.
9180
9181 * test/test_transientdb.py
9182 (TestTransientTable.run_iceland_political_tests): Use the
9183 constants for the types. Add a test for HasColumn
9184 (TestTransientTable.test_transient_joined_table): Adapt to new
9185 table interface. Add a test for HasColumn
9186 (TestTransientTable.test_transient_table_read_twice): Adapt to new
9187 table interface
9188
9189 * Thuban/UI/tableview.py (DataTable.SetTable, DataTable.GetValue):
9190 Adapt to new table interface
9191
9192 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Adapt to
9193 new table interface
9194
9195 * Thuban/UI/controls.py (RecordListCtrl.fill_list)
9196 (RecordTable.SetTable): Adapt to new table interface
9197
9198 * Thuban/UI/classifier.py (Classifier.__init__)
9199 (Classifier.__init__): Adapt to new table interface
9200
9201 * Thuban/UI/classgen.py (ClassGenDialog.__init__)
9202 (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve): Adapt
9203 to new table interface
9204
9205 * Thuban/Model/transientdb.py (TransientTableBase.HasColumn)
9206 (AutoTransientTable.HasColumn): Implement the new table interface
9207 method
9208 (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ValueRange)
9209 (AutoTransientTable.UniqueValues): Adapt to new table interface
9210
9211 * Thuban/Model/layer.py (Layer.SetShapeStore, Layer.GetFieldType):
9212 Adapt to new table interface
9213
9214 * test/test_layer.py (TestLayer.open_shapefile): Helper method to
9215 simplify opening shapefiles a bit easier.
9216 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
9217 (TestLayer.test_point_layer): Use the new helper method
9218 (TestLayer.test_get_field_type): New. Test for the GetFieldType
9219 method
9220
9221 * test/test_dbf_table.py (TestDBFTable.test_has_column): Test for
9222 the new table method
9223
9224 * test/test_memory_table.py (TestMemoryTable.test_has_column):
9225 Test for the new table method HasColumn
9226
9227 2003-05-06 Jonathan Coles <[email protected]>
9228
9229 Addresses the "Selection Extent" wish of RTbug #1787.
9230
9231 * Resources/Bitmaps/fulllayerextent.xpm,
9232 Resources/Bitmaps/fullselextent.xpm: Bitmaps for layer and selection
9233 extent. These are just place holders for the real bitmaps.
9234
9235 * Thuban/Model/layer.py (Shape): Since a Shape is immutable only
9236 calculate the bounding box once (the first time compute_bbox() is
9237 called).
9238 (Layer.ShapesBoundingBox): New. Given a list of shape ids, return
9239 the bounding box for the shapes in lat/long coordinates.
9240
9241 * Thuban/UI/mainwindow.py: Added new "Full selection extent" menu
9242 option.
9243 (MainWindow.has_selected_shapes): New. Returns true if there are
9244 any selected shapes.
9245 (MainWindow.FullSelectionExtent): New. Calls
9246 MapCanvas.FitSelectedToWindow() when the user selects the menu option.
9247 (_has_selected_shapes): New. Returns true if there are any
9248 selected shapes.
9249
9250 * Thuban/UI/selection.py (Selection.HasSelectedShapes): New. Returns
9251 true if there are any selected shapes.
9252
9253 * Thuban/UI/view.py (MapCanvas): Added delegated method
9254 HasSelectedShapes.
9255 (MapCanvas.FitSelectedToWindow): New. Centers and scales any selected
9256 shapes on the canvas using the map projection (if any).
9257
9258 * test/test_layer.py (TestLayer.test_arc_layer): Add some tests
9259 for Layer.ShapesBoundingBox().
9260
9261 2003-05-06 Bernhard Herzog <[email protected]>
9262
9263 * Resources/Projections/defaults.proj: Fix spelling of Mercator
9264
9265 2003-05-05 Jonathan Coles <[email protected]>
9266
9267 Addresses the "Full Layer Extent" wish of RTbug #1787.
9268
9269 * Resources/Projections/defaults.proj: Added UK National Grid.
9270
9271 * Thuban/UI/mainwindow.py: Added new "Full layer extent" menu option.
9272 (MainWindow.FullLayerExtent): New. Calls MapCanvas.FitLayerToWindow()
9273 when the user selects the menu option.
9274
9275 * Thuban/UI/view.py (MapCanvas.FitLayerToWindow): New. Centers and
9276 scales the given layer on the canvas using the map projection.
9277
9278 2003-05-05 Bernhard Herzog <[email protected]>
9279
9280 Convert the table implementations to a new table interface. All
9281 tables use a common mixin class to provide backwards compatibility
9282 until all table users have been updated.
9283
9284 * Thuban/Model/table.py (OldTableInterfaceMixin): Mixin class to
9285 provide backwards compatibility for table classes implementing the
9286 new interface
9287 (DBFTable, MemoryTable): Implement the new table interface. Use
9288 OldTableInterfaceMixin as base for compatibility
9289 (DBFColumn, MemoryColumn): New. Column description for DBFTable
9290 and MemoryTable resp.
9291
9292 * test/test_dbf_table.py: New. Test cases for the DBFTable with
9293 the new table interface.
9294
9295 * test/test_memory_table.py: New. Test cases for the MemoryTable
9296 with the new table interface.
9297
9298 * test/test_table.py: Document the all tests in this file as only
9299 for backwards compatibility. The equivalent tests for the new
9300 interface are in test_memory_table.py and test_dbf_table.py
9301 (MemoryTableTest.test_read): field_info should be returning tuples
9302 with four items
9303 (MemoryTableTest.test_write): Make doc-string a more precise.
9304
9305 * Thuban/Model/transientdb.py (TransientTableBase): Convert to new
9306 table interface. Derive from from OldTableInterfaceMixin for
9307 compatibility.
9308 (TransientTableBase.create): New intance variable column_map to
9309 map from names and indices to column objects
9310 (TransientTable.create): Use the new table interface of the input
9311 table
9312 (AutoTransientTable): Convert to new table interface. Derive from
9313 from OldTableInterfaceMixin for compatibility.
9314 (AutoTransientTable.write_record): Removed. It's not implemented
9315 yet and we still have to decide how to handle writing with the new
9316 table and data framework.
9317
9318 * test/test_transientdb.py
9319 (TestTransientTable.run_iceland_political_tests)
9320 (TestTransientTable.test_transient_joined_table): Use the new
9321 table interface
9322
9323 2003-05-05 Jonathan Coles <[email protected]>
9324
9325 This is namely a collection of UI updates to improve user interactivity.
9326 Tabbing between controls now exists and you can use ESC to close dialog
9327 boxes; ENTER will active the default button.
9328
9329 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Rearrange the
9330 order that the controls are created so that tabbing works correctly.
9331 (ClassGenDialog.OnOK): Renamed from _OnGenerate() so that the
9332 wxDialog can handle the default button correctly.
9333 (ClassGenDialog.OnCancel): Renamed from _OnCloseBtn() for the
9334 same reasons as for OnOK.
9335 (GenUniformPanel._OnRetrieve): Call wxBeginBusyCursor/wxEndBusyCursor
9336 when we ask the table for the maximum/minimum values of a field
9337 which could take a very long time.
9338
9339 * Thuban/UI/classifier.py (Classifier.__init__): Rearrange the
9340 order that the controls are created so that tabbing works correctly.
9341 (SelectPropertiesDialog.__init__): Rearrange the order that the
9342 controls are created so that tabbing works correctly.
9343
9344 * Thuban/UI/dialogs.py: Copied NonModalDialog box and changed it
9345 to derive from a wxDialog but behave like the original implementation
9346 which was derived from a wxFrame. wxDialog provides useful key
9347 handling functionality like ESC calling OnCancel and ENTER calling
9348 OnOK which is lost with wxFrame.
9349
9350 * Thuban/UI/mainwindow.py: Add "..." to menu items that will open
9351 new dialogs.
9352
9353 * Thuban/UI/projdialog.py (ProjFrame.__init__): Rearrange the
9354 order that the controls are created so that tabbing works correctly.
9355 (ProjFrame.OnApply): Renamed from _OnTry() to use wxDialog behaviour.
9356 (ProjFrame.OnOK): Renamed from _OnOK() to use wxDialog behaviour.
9357 (ProjFrame.OnCancel): Renamed from _OnClose() to use wxDialog behaviour.
9358 (ProjPanel.__init__): Add "Airy" to the list of ellipsoids so we
9359 can provide the "UK National Grid" as a default projection.
9360 (UTMPanel.__init__): Rearrange the order that the controls are
9361 created so that tabbing works correctly.
9362
9363 2003-05-05 Bernhard Herzog <[email protected]>
9364
9365 * extensions/thuban/wxproj.cpp: Fix some of the comments.
9366 (project_point): If a map projection but no layer projection is
9367 given, convert degrees to radians before applying the map
9368 projection.
9369
9370 * Thuban/UI/tableview.py (TableGrid.disallow_messages)
9371 (TableGrid.allow_messages): New methods to make it possible to
9372 inhibit message sending.
9373 (TableGrid.issue): Only send the message if not inhibited.
9374 (LayerTableGrid.select_shape): Use the new methods to make sure
9375 that no ROW_SELECTED message is sent while we're updating the
9376 selected rows to match the selected shapes.
9377
9378 2003-05-02 Jan-Oliver Wagner <[email protected]>
9379
9380 Implementation of MemoryTable.
9381
9382 * Thuban/Model/table.py (MemoryTable): New. Quite simple table
9383 implementation that operates on a list of tuples. All of the data
9384 are kept in the memory.
9385
9386 * test/test_table.py (MemoryTableTest): New.
9387
9388 * test/test_transientdb.py (SimpleTable): Removed.
9389 (TestTransientTable.test_transient_joined_table,
9390 (TestTransientTable.test_transient_table_read_twice): Replaced
9391 SimpleTable by MemoryTable.
9392
9393 2003-04-30 Jonathan Coles <[email protected]>
9394
9395 * Data/iceland_sample.thuban: Now contains correct projections
9396 for each of the layers.
9397
9398 * Resources/Projections/defaults.proj: Geographic projection
9399 contains unit conversion parameter.
9400
9401 2003-04-30 Jonathan Coles <[email protected]>
9402
9403 The most important part of this putback is the projection changes.
9404 It should now be possible to specify the projection that a layer
9405 is in and then specify a different projection for the map. The
9406 projection dialog has an extra parameter for a geographic projection
9407 which lets the user select if the input is in degrees or radians.
9408
9409 * Thuban/Model/layer.py (Layer.ShapesInRegion): Fix docstring
9410 to say that the parameter is a tuple of unprojected
9411 points (which is what the callers to this method were assuming).
9412 Also, since the points are unprojected we need to projected them.
9413
9414 * Thuban/UI/legend.py (LegendTree.MoveCurrentItemUp,
9415 LegendTree.MoveCurrentItemDown): If the layer or any of the layer's
9416 groups are selected, move the layer up/down. Fixes RTbug #1833.
9417
9418 * Thuban/UI/mainwindow.py: Move menu item map_rename up.
9419
9420 * Thuban/UI/projdialog.py (ProjFrame._OnSave): Add missing
9421 parameter in call to SetClientData.
9422 (GeoPanel): Add support for selecting the units that the
9423 source data is in (Radians or Degrees).
9424
9425 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Optimize
9426 the rendering loop by reducing the number of if's, removing the
9427 unnecessary try/except block, and checking if the old group
9428 is the same as the new one (which happens a lot if there is
9429 no classification, or lots of shapes are in the same group).
9430
9431 * Thuban/UI/view.py (MapCanvas.OnPaint): Add a try/except block
9432 around the redraw routine to try to catch problems that the user
9433 may create by selecting invalid projections for the data set and
9434 map. Clears the display if there are any problems and prints the
9435 error.
9436 (MapCanvas.do_redraw): Use DC.Clear() instead of drawing a filled
9437 rectangle.
9438
9439 * extensions/thuban/wxproj.cpp (project_point): First invert the
9440 supplied point (which should be in projected coordinates) using
9441 the layer's projection and then project the point using the
9442 map's projection.
9443 (project_points): Use project_point() to project each point.
9444
9445 2003-04-30 Jan-Oliver Wagner <[email protected]>
9446
9447 * Thuban/Model/layer.py (Layer.SetShapeStore): Fixed a bug:
9448 don't set the Classification to None if the classfication field
9449 is None (ie only a DEFAULT).
9450
9451 2003-04-30 Bernhard Herzog <[email protected]>
9452
9453 * Thuban/UI/view.py: Fix some typos.
9454
9455 * Thuban/UI/mainwindow.py (MainWindow.identify_view_on_demand): Do
9456 not pop up the dialog if the selection becomes empty (this could
9457 happen if e.g. a new selection is opened while the identify tool
9458 is active and dialog had been closed)
9459
9460 2003-04-30 Bernhard Herzog <[email protected]>
9461
9462 * Thuban/Model/transientdb.py (TransientTableBase.__init__): New
9463 instance variable read_record_last_result
9464 (TransientTableBase.read_record): Make sure reading the same
9465 record twice works. The implementation uses the new instance
9466 variable read_record_last_result
9467
9468 * test/test_transientdb.py
9469 (TestTransientTable.test_transient_table_read_twice): New test
9470 case for the above bug-fix.
9471
9472 2003-04-29 Jonathan Coles <[email protected]>
9473
9474 * Thuban/common.py: Removed. No longer needed Str2Num. RTbug #1832.
9475
9476 * Thuban/UI/classgen.py: Remove all uses of Str2Num.
9477
9478 * Thuban/UI/classifier.py: Remove all uses of Str2Num.
9479 (ClassTable.SetValueAsCustom): Rename keyword argument in
9480 ClassGroup* constructors to match argument name.
9481
9482 2003-04-29 Bernhard Herzog <[email protected]>
9483
9484 * Thuban/Model/session.py (Session.Destroy): Explicitly close the
9485 transient DB if it exists to make sure it doesn't leave a journal
9486 file in the temp directory.
9487
9488 * Thuban/Model/transientdb.py (TransientDatabase.close): Set
9489 self.conn to None after closing the connection to make sure it's
9490 not closed twice
9491
9492 2003-04-29 Jonathan Coles <[email protected]>
9493
9494 Add a visible parameter in the layer XML tag. The default value is
9495 "true". If anything other than "false" is specified we also assume
9496 "true". Addresses RTbug #1025.
9497
9498 * Doc/thuban.dtd: Add visible parameter to a layer.
9499
9500 * Thuban/Model/layer.py (BaseLayer.__init__): Change default value
9501 of visible from 1 to True.
9502 (Layer.__init__): Change default value of visible from 1 to True.
9503
9504 * Thuban/Model/load.py (SessionLoader.start_layer): Read visible
9505 parameter.
9506
9507 * Thuban/Model/save.py (SessionSaver.write_layer): Save visible
9508 parameter.
9509
9510 * test/test_load.py: Add new test data contents_test_visible.
9511 (LoadSessionTest.setUp): save test data.
9512 (LoadSessionTest.testLayerVisibility): Test if the visible flag
9513 is loaded correctly.
9514
9515 * test/test_save.py (SaveSessionTest.testSingleLayer): Add test
9516 for saving an invisible layer.
9517
9518 2003-04-29 Jonathan Coles <[email protected]>
9519
9520 * Thuban/UI/mainwindow.py (MainWindow.SetMap): Look up the
9521 legend dialog box and tell it to change its map to the one
9522 supplied to SetMap(). Fixes RTbug #1770.
9523
9524 2003-04-29 Bernhard Herzog <[email protected]>
9525
9526 Next step of table implementation. Introduce a transient database
9527 using SQLite that some of the data is copied to on demand. This
9528 allows us to do joins and other operations that require an index
9529 for good performance with reasonable efficiency. Thuban now needs
9530 SQLite 2.8.0 and pysqlite 0.4.1. Older versions may work but I
9531 haven't tested that.
9532
9533 * Thuban/Model/transientdb.py: New. Transient database
9534 implementation.
9535
9536 * test/test_transientdb.py: New. Tests for the transient DB
9537 classes.
9538
9539 * Thuban/Model/session.py (AutoRemoveFile, AutoRemoveDir): New
9540 classes to help automatically remove temporary files and
9541 directories.
9542 (Session.__init__): New instance variables temp_dir for the
9543 temporary directory and transient_db for the SQLite database
9544 (Session.temp_directory): New. Create a temporary directory if not
9545 yet done and return its name. Use AutoRemoveDir to have it
9546 automatically deleted
9547 (Session.TransientDB): Instantiate the transient database if not
9548 done yet and return it.
9549
9550 * Thuban/Model/data.py (ShapefileStore.__init__): Use an
9551 AutoTransientTable so that data is copied to the transient DB on
9552 demand.
9553 (SimpleStore): New class that simply combines a table and a
9554 shapefile
9555
9556 * Thuban/Model/table.py (Table, DBFTable): Rename Table into
9557 DBFTable and update its doc-string to reflect the fact that this
9558 is only the table interface to a DBF file. Table is now an alias
9559 for DBFTable for temporary backwards compatibility.
9560
9561 * Thuban/UI/application.py (ThubanApplication.OnExit): Make sure
9562 the last reference to the session goes away so that the temporary
9563 files are removed properly.
9564
9565 * test/test_load.py (LoadSessionTest.tearDown): Remove the
9566 reference to the session to make sure the temporary files are
9567 removed.
9568
9569 2003-04-29 Bernhard Herzog <[email protected]>
9570
9571 * Thuban/Model/load.py (XMLReader.__init__, XMLReader.read): Turn
9572 the __parser instance variable into a normal local variable in
9573 read. It's only used there and read will never be called more than
9574 once. Plus it introduces a reference cycle that keeps can keep the
9575 session object alive for a long time.
9576
9577 2003-04-29 Jonathan Coles <[email protected]>
9578
9579 * Thuban/Model/proj.py (Projection): Removed Set*() methods to make
9580 Projection an immutable item. Fixes RTbug #1825.
9581 (Projection.__init__): Initialize instance variables here.
9582 (ProjFile.Replace): New. Replace the given projection object with
9583 the new projection object. This solves the problem of needing the
9584 mutator Projection.SetProjection() in the ProjFrame class and
9585 allows a projection to change parameters without changing its
9586 location in the file.
9587
9588 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs): Dialog should
9589 be of type wxSAVE and should verify overwriting a file.
9590
9591 * Thuban/UI/projdialog.py (ProjFrame._OnSave): Use the new
9592 ProjFile.Replace() method instead of the mutator
9593 Projection.SetProjection(). Also requires that we reassign the
9594 client data to the new projection.
9595
9596 * test/test_proj.py (TestProjection.test): Test GetName() and
9597 GetAllParameters()
9598 (TestProjFile.test): Remove tests for Set*() methods. Add tests
9599 for Replace().
9600
9601 2003-04-25 Jonathan Coles <[email protected]>
9602
9603 * Thuban/Model/save.py (SessionSaver.write_projection): Make sure
9604 to save the name of the projection.
9605
9606 * test/test_save.py (SaveSessionTest.testLayerProjection): New
9607 test to verify layer projections are saved correctly.
9608
9609 2003-04-25 Jonathan Coles <[email protected]>
9610
9611 * Thuban/Model/proj.py (Projection.SetName): Set the name
9612 to "Unknown" if name is None.
9613 (Projection.SetAllParameters): New. Set the projection's
9614 parameter list to the one supplied.
9615 (Projection.SetProjection): New. Set the projection's
9616 properties to those of the supplied Projection.
9617
9618 * Thuban/UI/mainwindow.py (MainWindow.MapProjection): Set
9619 the dialog title to include the map's title.
9620 (MainWindow.LayerProjection): Set the dialog title to include
9621 the layer's title.
9622
9623 * Thuban/UI/projdialog.py (ProjFrame.__ShowError): Consolidate
9624 error dialogs into a single method call.
9625 (ProjFrame.__VerifyButtons): Add more states to check.
9626 (ProjFrame.__GetProjection): Return the current state of an
9627 edited projection or None.
9628 (ProjFrame.__FillAvailList): Remove checks for states that
9629 shouldn't exist.
9630 (ProjFrame._OnNew): Clear all selected items and supply
9631 a projection panel if necessary.
9632
9633 * test/test_proj.py (TestProjFile.test): Add tests for
9634 ProjFile.SetAllParameters, ProjFile.SetProjection,
9635 ProjFile.SetName.
9636
9637 2003-04-25 Jonathan Coles <[email protected]>
9638
9639 * Thuban/UI/projdialog.py (ProjFrame.__FillAvailList): Now
9640 takes an optional argument to select the current projection.
9641 This does not guarantee that the item is visible due to
9642 limited wxWindows functionality. Fixes RTBug #1821.
9643
9644 2003-04-25 Jonathan Coles <[email protected]>
9645
9646 * Thuban/Model/load.py (SessionLoader.start_projection): Remember
9647 the projection name and use it when constructing the Projection
9648 object.
9649
9650 * Thuban/Model/proj.py (Projection.__init__): Change the default
9651 value for 'name' to None and then test if name is equal to None
9652 in the body of the constructor. This way the caller doesn't have to
9653 know what the default value should be. Namely, useful in load.py
9654 where we have to pick a default value if the 'name' parameter
9655 doesn't exist in the XML file.
9656
9657 * test/test_load.py (LoadSessionTest.testLayerProjection): New.
9658 Tests a file where a layer has a projection.
9659
9660 2003-04-25 Jonathan Coles <[email protected]>
9661
9662 * Thuban/Model/layer.py (Layer.TreeInfo): Add an item to the
9663 tree for projection information.
9664
9665 * Thuban/Model/load.py (XMLReader.GetFilename): Renamed from
9666 XMLReader.GetFileName.
9667 (SessionLoader): Added support for loading projection tags that
9668 appear inside a layer.
9669
9670 * Thuban/Model/proj.py (ProjFile): Document the class. Move
9671 back to using a list because the order of the projections in
9672 the file is important to maintain. Fixes RTbug #1817.
9673
9674 * Thuban/Model/resource.py: Rename calls to ProjFile.GetFileName
9675 to ProjFile.GetFilename.
9676
9677 * Thuban/Model/save.py (SessionSaver.write_layer): Save projection
9678 information.
9679
9680 * Thuban/UI/projdialog.py (ProjFrame._OnAddToList): Renamed from
9681 ProjFrame._OnSaveAs. Removed old dead code from previous
9682 implementation.
9683 (ProjFrame._OnExport): Add support for exporting more than one
9684 projection to a single file.
9685 (ProjFrame.__FillAvailList): use string formatting (% operator)
9686 to build strings that are (partly) translated. Fixes RTbug #1818.
9687
9688 * test/test_proj.py (TestProjFile.test): New. Tests the base ProjFile
9689 class.
9690
9691 2003-04-24 Bernhard Herzog <[email protected]>
9692
9693 * po/es.po: Updated Spanish translation by Daniel Calvelo Aros
9694
9695 * po/fr.po: New. French translation by Daniel Calvelo Aros
9696
9697 * Thuban/UI/projdialog.py (ProjFrame._OnSaveAs): Don't translate
9698 empty strings.
9699
9700 2003-04-24 Jonathan Coles <[email protected]>
9701
9702 * Thuban/Model/layer.py (Layer.GetProjection): New. Needed to
9703 implement the interface that the ProjFrame dialog expects.
9704
9705 * Thuban/Model/proj.py (Projection.SetName): New. Allows the
9706 name of the projection to be changed.
9707 (ProjFile): Use a dictionary instead of a list so that removing
9708 projections is easier and we are sure about uniqueness.
9709 (ProjFile.Remove): Remove the given projection object.
9710
9711 * Thuban/Model/resource.py (GetSystemProjFiles, GetUserProjFiles):
9712 Return a list with only one projection file instead of searching for
9713 any projection file. This simplifies many things if the user can
9714 only have one system file and one user file.
9715
9716 * Thuban/UI/classgen.py: Change all references to
9717 genCombo to genChoice.
9718
9719 * Thuban/UI/mainwindow.py: Add a Projection option under the
9720 layer menu.
9721 (MainWindow.LayerProjection): New. Open up a projection window
9722 for a layer.
9723
9724 * Thuban/UI/projdialog.py: Large changes to how the dialog is
9725 laid out. Use three panels instead of one. One for the list of
9726 projections, one for the edit controls, and one for the buttons.
9727 Fixed resizing problems so that the dialog resizes correctly
9728 when the projection panel changes. Added import/export, save, and
9729 new buttons/functionality.
9730
9731 2003-04-24 Bernhard Herzog <[email protected]>
9732
9733 First step towards table management. Introduce a simple data
9734 abstraction so that we replace the data a layer uses more easily
9735 in the next step.
9736
9737 * Thuban/Model/data.py: New file with a simple data abstraction
9738 that bundles shapefile and dbffile into one object.
9739
9740 * Thuban/Model/session.py (Session.OpenShapefile): New method to
9741 open shapefiles and return a shape store object
9742
9743 * Thuban/Model/layer.py (Layer.__init__): Pass the data as a store
9744 object instead of a shapefile filename. This introduces a new
9745 instance variable store holding the datastore. For intermediate
9746 backwards compatibility keep the old instance variables.
9747 (open_shapefile): Removed. No longer needed with the shape store.
9748 (Layer.SetShapeStore, Layer.ShapeStore): New methods to set and
9749 get the shape store used by a layer.
9750 (Layer.Destroy): No need to explicitly destroy the shapefile or
9751 table anymore.
9752
9753 * Thuban/UI/mainwindow.py (MainWindow.AddLayer)
9754 (MainWindow.AddLayer): Use the session's OpenShapefile method to
9755 open shapefiles
9756
9757 * Thuban/Model/load.py (ProcessSession.start_layer): Use the
9758 session's OpenShapefile method to open shapefiles
9759
9760 * test/test_classification.py
9761 (TestClassification.test_classification): Use the session's
9762 OpenShapefile method to open shapefiles and build the filename in
9763 a more platform independed way
9764
9765 * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
9766 Implement to have a session to use in the tests
9767 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
9768 (TestLayer.test_point_layer, TestLayer.test_empty_layer): Use the
9769 session's OpenShapefile method to open shapefiles
9770 (TestLayerLegend.setUp): Instantiate a session so that we can use
9771 it to open shapefiles.
9772 (TestLayerLegend.tearDown): Make sure that all references to
9773 layers and session are removed otherwise we may get a resource
9774 leak
9775
9776 * test/test_map.py (TestMapAddLayer.test_add_layer)
9777 (TestMapWithContents.setUp): Instantiate a session so that we can
9778 use it to open shapefiles.
9779 (TestMapWithContents.tearDown): Make sure that all references to
9780 layers, maps and sessions are removed otherwise we may get a
9781 resource leak
9782 ("__main__"): use support.run_tests() so that more info about
9783 uncollected garbage is printed
9784
9785 * test/test_save.py (SaveSessionTest.testSingleLayer): Use the
9786 session's OpenShapefile method to open shapefiles
9787 ("__main__"): use support.run_tests() so that more info about
9788 uncollected garbage is printed
9789
9790 * test/test_selection.py (TestSelection.tearDown): Make sure that
9791 all references to the session and the selection are removed
9792 otherwise we may get a resource leak
9793 (TestSelection.get_layer): Instantiate a session so that we can
9794 use it to open shapefiles.
9795 ("__main__"): use support.run_tests() so that more info about
9796 uncollected garbage is printed
9797
9798 * test/test_session.py (TestSessionBase.tearDown)
9799 (TestSessionWithContent.tearDown): Make sure that all references
9800 to the session and layers are removed otherwise we may get a
9801 resource leak
9802 (TestSessionWithContent.setUp): Use the session's OpenShapefile
9803 method to open shapefiles
9804
9805 2003-04-24 Jonathan Coles <[email protected]>
9806
9807 * Thuban/Model/load.py (XMLReader.read): Should have been checking
9808 if the file_or_filename object had the 'read' attribute.
9809
9810 2003-04-23 Jonathan Coles <[email protected]>
9811
9812 * Thuban/Model/resource.py: Fixes RTbug #1813.
9813 (ReadProjFile): Add documentation about which exceptions are raised.
9814 Always pass the exceptions up to the caller.
9815 (GetProjFiles): If the directory can't be read return an empty list.
9816 If any of the proj files can't be read skip that file and go
9817 on to the next one.
9818
9819 * test/test_proj.py: Added test cases to handle nonexistent files,
9820 unreadable files, and files that don't parse correctly.
9821
9822 2003-04-23 Jonathan Coles <[email protected]>
9823
9824 Projection dialog. Allows the user to select from a list
9825 of projection templates and optionally edit them and save new ones.
9826
9827 * Thuban/UI/projdialog.py (ProjFrame): New. Main dialog.
9828 (ProjPanel): Base class for projection specific panels.
9829 (TMPanel): Projection panel for Transverse Mercartor.
9830 (UTMPanel): Projection panel for Universal Transverse Mercartor.
9831 (LCCPanel): Projection panel for Lambert Conic Conformal.
9832 (GeoPanel): Projetion panel for Geographic Projection.
9833
9834 2003-04-23 Jonathan Coles <[email protected]>
9835
9836 * Thuban/Model/load.py (XMLReader): Renamed from XMLProcessor to
9837 promote symmetry. There now exists XMLReader and XMLWriter.
9838 (XMLReader.read): New. Call to read the given file descriptor or
9839 filename.
9840 (XMLReader.close): New. Make sure the file is closed.
9841 (XMLReader.GetFileName): New. Return just the file name that is being
9842 read from.
9843 (XMLReader.GetDirectory): New. Return just the directory of the file
9844 that is being read.
9845 (XMLReader.AddDispatchers): New. Take a dictionary which contains
9846 the names of functions to call as the XML tree is parsed.
9847 (XMLReader.startElementNS): Updated to use new dispatcher dictionary.
9848 (XMLReader.endElementNS): Updated to use new dispatcher dictionary.
9849 (SessionLoader): Removed class variables start_dispatcher and
9850 end_dispatcher since this functionality is now part of a class
9851 instance. Fixes RTbug #1808.
9852 (SessionLoader.__init__): Add dispatcher functions.
9853 (load_xmlfile): Code was moved into the XMLReader.read().
9854 (load_session): Use modified SessionLoader.
9855
9856 * Thuban/Model/map.py (Map.GetProjection): New. Returns the
9857 map's projection.
9858
9859 * Thuban/Model/proj.py (Projection.GetParameters): Renamed to
9860 GetAllParameters.
9861 (Projection.GetParameter): Returns the value for the given parameter.
9862
9863 * Thuban/Model/resource.py: Use XMLReader and XMLWriter.
9864 (GetProjFiles): Renamed from GetProjections. Now returns a list
9865 of ProjFile objects.
9866 (GetSystemProjFiles): Renamed from GetSuppliedProjections. Returns
9867 a list of ProjFile objects whose files are not user defined.
9868 (GetUserProjFiles): Renamed from GetUserProjections. Returns a
9869 list of ProjFile objects whose files are user defined.
9870 (ProjFileReader): Extend new XMLReader.
9871
9872 * Thuban/Model/save.py (XMLWriter): Renamed from XMLSaver to
9873 promote symmetry.
9874
9875 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Use a wxChoice
9876 control instead of a wxComboBox. wxChoice controls do not generate
9877 events as the uses highlights possible choices which fixes problems
9878 with resizing the dialog when the use selects an option.
9879
9880 * Thuban/UI/classifier.py (Classifier.__init__): Use a wxChoice
9881 control instead of a wxComboBox.
9882
9883 * Thuban/UI/mainwindow.py (MainWindow.Projection): Use new projection
9884 dialog.
9885
9886 * test/test_proj.py (TestProjection.test): New tests for GetParameter
9887 method.
9888
9889 2003-04-22 Bernhard Herzog <[email protected]>
9890
9891 * Thuban/UI/mainwindow.py: Remove some unused imports and global
9892 constants
9893
9894 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
9895 (IdentifyGridCtrl.selected_shape): Use table, not shapetable.
9896
9897 2003-04-17 Bernhard Herzog <[email protected]>
9898
9899 * Thuban/Model/layer.py: Don't import LAYER_LEGEND_CHANGED.
9900 (Layer): Update doc-string since LAYER_LEGEND_CHANGED is not used
9901 anymore.
9902 (Layer.BoundingBox, Layer.GetFieldType, Layer.NumShapes)
9903 (Layer.ShapeType, Layer.Shape): No need to call
9904 self.open_shapefile since it's always called in __init__
9905
9906 * Thuban/UI/application.py (ThubanApplication.MainLoop): Removed.
9907 In wxPython 2.4 there's no need to extend MainLoop anymore since
9908 wxPython itself makes sure OnExit is called.
9909
9910 2003-04-16 Jonathan Coles <[email protected]>
9911
9912 Initial putback of projection management code. Includes new
9913 classes to read and write projection files. The current load
9914 and save classes were abstracted a bit so they could be reused.
9915 The Projection class was extended to provide new methods and
9916 have a name.
9917
9918 * Thuban/Model/load.py (XMLProcessor): New. Contains all the
9919 general XML reading methods that were part of ProcessSession.
9920
9921 * Thuban/Model/proj.py (Projection.__init__): Accepts an optional
9922 name.
9923 (ProjFile): New. Represents a file that contains projection
9924 information.
9925
9926 * Thuban/Model/resource.py: New. Contains general utilities
9927 for read and writing projection files.
9928
9929 * Thuban/Model/save.py (XMLSaver): New. Contains all the
9930 general XML writing methods that were part of SessionSaver.
9931 (SessionSaver): Renamed from Saver.
9932
9933 * test/test_proj.py: New test cases for the projection
9934 file read and write functions.
9935
9936 2003-04-16 Jonathan Coles <[email protected]>
9937
9938 * Thuban/Model/classification.py: Use repr() around values
9939 in the ClassGroup*.__repr__() methods so it is clearer when
9940 a value is a string and when it is a number.
9941
9942 * test/test_load.py: Rework the classification test to test
9943 that we can load old files.
9944 (testLabels): Test a file where the groups have labels.
9945
9946 2003-04-16 Bernhard Herzog <[email protected]>
9947
9948 Safer implementation of the performance enhancements of the
9949 low-level renderer:
9950
9951 * extensions/thuban/wxproj.cpp (extract_projection)
9952 (extract_pointer): Rename extract_projection to extract_pointer
9953 and redefine its purpose to return the pointer stored in a CObject
9954 returned by the object's cobject method. Update all callers.
9955 (s_draw_info, free_draw_info, draw_polygon_init): Implement the
9956 handling of these low-level parameters so that each s_draw_info
9957 instance is handled as a CObject at python level that also
9958 contains real references to the actual python objects which
9959 contain the values in the struct. Add free_draw_info as the
9960 destructor.
9961 (draw_polygon_shape): Add the py_draw_info parameter which must a
9962 cobject containing an s_draw_info pointer.
9963
9964 * Thuban/UI/renderer.py (MapRenderer.polygon_render_param): New
9965 method to instantiat the low-level render parameter
9966 (MapRenderer.draw_shape_layer): Use the new method. Remove some
9967 commented out code.
9968 (MapRenderer.draw_polygon_shape): Make the first parameter not the
9969 layer but the low-level render parameter
9970 (ScreenRenderer.draw_shape_layer): Use the low-level render
9971 parameter.
9972
9973 2003-04-15 Jonathan Coles <[email protected]>
9974
9975 * Thuban/Model/classification.py: Implemented __repr__ for
9976 the ClassGroup* classes to make debugging a bit easier.
9977 (ClassGroup.SetLabel): Check that the string is an instance
9978 of StringTypes not StringType. Accounts for Unicode strings.
9979
9980 * Thuban/Model/color.py: Implemented __repr__ to make
9981 debugging a bit easier.
9982
9983 * Thuban/Model/save.py (Saver.write_classification): Need to
9984 save the group label.
9985
9986 * test/test_load.py (testClassification): New. Loads the
9987 iceland_sample_test.thuban file and checks if it was loaded
9988 correctly.
9989
9990 2003-04-15 Jonathan Coles <[email protected]>
9991
9992 * extensions/thuban/wxproj.cpp (draw_polygon_init): New. Used
9993 to improve rendering performance by initializing the variables
9994 that are not change each time draw_polygon_shape() is called.
9995 The values are stored in a global struct draw_info.
9996 (draw_polygon_shape): Removed initialization code that is
9997 now in draw_polygon_init().
9998
9999 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Make
10000 drawing initialization call to draw_polygon_init()
10001 (MapRenderer.draw_polygon_shape): Use new signature of
10002 draw_polygon_shape.
10003
10004 * Thuban/UI/classgen.py (GenUniformPanel): Fix spin control
10005 weirdness by setting the range to (1, maxint).
10006
10007 * Thuban/Model/classification.py (ClassGroupProperties): Make
10008 instance variables private and optimize comparison operator
10009 by first checking if the color references are the same.
10010 (ClassGroupSingleton): Make instance variables private.
10011 (ClassGroupRange): Make instance variables private.
10012
10013 * HOWTO-Release: Filled in missing steps for releasing packages.
10014
10015 2003-04-15 Bernhard Herzog <[email protected]>
10016
10017 First stab at internationalized messages:
10018
10019 * Thuban/__init__.py (_): Implement the translation function for
10020 real using the python gettext module.
10021
10022 * Thuban/UI/classifier.py (ClassTable.GetRowLabelValue): Don't
10023 translate empty strings.
10024
10025 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
10026 Add a missing space to a warning message
10027
10028 * po/README: New. Notes about the management of the translation
10029 files.
10030
10031 * po/Makefile: New. Makefile to help manage the translation files.
10032
10033 * po/es.po: New. Spanish translation by Daniel Calvelo Aros
10034
10035 * MANIFEST.in: Include the *.mo files in Resources/Locale and the
10036 translations and support files in po/
10037
10038 * setup.py (data_files): Add the *.mo files to the data_files too
10039
10040 * README: Add note about the translations when building from CVS
10041
10042 2003-04-14 Jonathan Coles <[email protected]>
10043
10044 * Thuban/UI/dock.py: Fixes some window resizing problems most
10045 noticable under windows. Always assume the button bitmaps will
10046 be there. Code clean up.
10047 (DockabelWindow.Dock, DockableWindow.UnDock): Force all the
10048 images for the dock/undock button to the same images.
10049 Work around for RTbug #1801.
10050
10051 * Thuban/UI/legend.py (LegendPanel.__init__): The toolbar should
10052 be allowed to grow within the sizer. Fixes a bug under Windows
10053 where the toolbar wasn't being drawn.
10054
10055 2003-04-14 Frank Koormann <[email protected]>
10056
10057 * Resources/Bitmaps/dock_12.xpm, Resources/Bitmaps/undock_12.xpm:
10058 Updated design to try to make the button functionality more
10059 transparent.
10060
10061 2003-04-14 Jonathan Coles <[email protected]>
10062
10063 * Thuban/UI/legend.py (LegendPanel.__init__): Call Create() to
10064 finalize the intialization of the panel.
10065
10066 * Thuban/UI/dock.py (DockPanel.Create): New. Finalizes the
10067 creation of the panel. Should be the last thing called in the
10068 initializer of a subclass.
10069
10070 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Actively
10071 set the current selections in the combo boxes. This is needed
10072 under Windows.
10073
10074 * Thuban/UI/classifier.py (Classifier.__init__): Add a top
10075 level panel to the dialog so that the background colors are
10076 consistent under Windows.
10077
10078 2003-04-11 Jonathan Coles <[email protected]>
10079
10080 * Thuban/UI/classgen.py: Change color ramps to start at white
10081 not black.
10082
10083 * Thuban/UI/legend.py: Enable/disable the legend buttons when
10084 the legend changes. Fixes RTbug #1793.
10085
10086 * test/test_classification.py: Added test for copying of
10087 classifications.
10088
10089 2003-04-11 Jonathan Coles <[email protected]>
10090
10091 * Thuban/UI/resource.py: New. Centralize the loading of resources
10092 such as bitmaps.
10093
10094 * Thuban/UI/classgen.py (GenUniquePanel.__init__): Reordered buttons,
10095 added images to the move buttons, added 'reverse' button.
10096 (CustomRampPanel.__init__): Added images to the move buttons.
10097 (GreyRamp): New. Generates a ramp from white to black.
10098 (HotToColdRamp): New. Generates a ramp from cold to hot colors.
10099
10100 * Thuban/UI/classifier.py: Refactored ID's from ID_CLASSIFY_* to
10101 ID_PROPERTY_*.
10102 (Classifier.__init__): Minor changes to the layout.
10103 (Classifier._OnTitleChanged): Listen for when the user edits the
10104 title and update the dialog's title and the layer's title.
10105
10106 * Thuban/UI/dock.py: Use new bitmaps for the control buttons.
10107
10108 * Thuban/UI/legend.py: Use new bitmaps for the control buttons.
10109 (LegendTree._OnMsgLayerTitleChanged): Change the displayed title
10110 if the layer's title changes.
10111
10112 * Thuban/UI/mainwindow.py: Added new menu item and associated code
10113 to open a dialog to rename the map.
10114 (MainWindow): Use new resource class to import bitmaps.
10115
10116 2003-04-11 Jonathan Coles <[email protected]>
10117
10118 * Resources/Bitmaps/close_12.xpm, Resources/Bitmaps/dock_12.xpm,
10119 Resources/Bitmaps/group_use.xpm, Resources/Bitmaps/group_use_all.xpm,
10120 Resources/Bitmaps/group_use_none.xpm,
10121 Resources/Bitmaps/group_use_not.xpm,
10122 Resources/Bitmaps/hide_layer.xpm,
10123 Resources/Bitmaps/layer_properties.xpm,
10124 Resources/Bitmaps/lower_layer.xpm, Resources/Bitmaps/raise_layer.xpm,
10125 Resources/Bitmaps/show_layer.xpm, Resources/Bitmaps/undock_12.xpm:
10126 New.
10127
10128 2003-04-10 Jonathan Coles <[email protected]>
10129
10130 * Thuban/Model/classification.py: (ClassGroupRange.__init__):
10131 Should pass group to ClassGroup constructor.
10132
10133 2003-04-10 Jonathan Coles <[email protected]>
10134
10135 * Thuban/Model/classification.py: (ClassGroup): Move all the common
10136 methods of the derived classes ([Set|Get]Properties(), __eq__, __ne__)
10137 here. Implement SetVisible(), IsVisible().
10138 (ClassGroup.__init__): Add group parameter which acts as a copy
10139 constructor.
10140
10141 * Thuban/UI/classifier.py (ClassTable): Add a new column for the
10142 "Visible" check boxes.
10143 (Classifier): Rename the buttons and refactor the code to match
10144 the new labels.
10145
10146 * Thuban/UI/legend.py: Classify button is now called "Properties".
10147 Refactored the code to change variable names.
10148 (LegendTree.__FillTreeLayer): Only list a group if it is visible.
10149
10150 * Thuban/UI/mainwindow.py: MainWindow.OpenClassifier renamed to
10151 MainWindow.OpenLayerProperties. MainWindow.LayerEditProperties
10152 renamed to MainWindow.LayerEditProperties.
10153 (MainWindow.ToggleLegend): Don't include map name in legend title.
10154 (MainWindow.SetMap): Added the map name to the window title.
10155 (MainWindow.LayerFillColor, MainWindow.LayerTransparentFill,
10156 MainWindow.LayerOutlineColor, MainWindow.LayerNoOutline): Removed.
10157 Functionality is found in the layer properties dialog.
10158
10159 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
10160 draw visible groups.
10161
10162 2003-04-09 Jonathan Coles <[email protected]>
10163
10164 * Thuban/UI/classgen.py: Modifications to allow simple
10165 addition and selection of new color schemes.
10166 (MonochromaticRamp): New. Generates a ramp between two colors.
10167 (RedRamp): New. Generates a ramp of all red.
10168 (GreenRamp): New. Generates a ramp of all green.
10169 (BlueRamp): New. Generates a ramp of all blue.
10170
10171 2003-04-09 Jonathan Coles <[email protected]>
10172
10173 * Thuban/Model/classification.py (Classification.__deepcopy__):
10174 Need to copy over field and fieldType attributes.
10175
10176 * Thuban/Model/table.py (Table.field_range): New. Retrive the
10177 maximum and minimum values over the entire table for a given
10178 field.
10179 (Table.GetUniqueValues): New. Retrieve all the unique values
10180 in the table for a given field.
10181
10182 * Thuban/UI/classgen.py: Renamed GenRangePanel to GenUniformPanel.
10183 (GenUniquePanel): New. Controls to allow the user to select
10184 which unique field values they would like in the classification.
10185 (CustomRampPanel): Code that was in ClassGenDialog that allows
10186 the user to select the properties for a custom ramp.
10187 (ClassGenerator.GenUniformDistribution): Was called GenerateRanges.
10188
10189 * Thuban/UI/classifier.py: Removed a lot of debugging code.
10190 (Classifier._SetClassification): Callback method so that the
10191 class generator can set the classification in the grid.
10192 (ClassGroupPropertiesCtrl): New. Encapsulates the drawing and
10193 editing of a group properties class into a wxWindows control.
10194
10195 * Thuban/UI/dock.py: It was decided that if the user closes
10196 a dockable window the window should simply hide itself. That
10197 way if the user wants to show the dock again it appears in the
10198 same place as it was when it was closed.
10199 (DockableWindow.Destroy): Call renamed method OnDockDestroy().
10200 (DockableWindow._OnButtonClose): Hide the window instead of
10201 destroying it.
10202 (DockableWindow._OnClose): Hide the window instead of
10203 destroying it.
10204
10205 * Thuban/UI/legend.py (LegendTree): Use a private method to
10206 consistently set the font and style of the text. Fixes RTbug #1786.
10207
10208 * Thuban/UI/mainwindow.py: Import just the Classifier class.
10209
10210 2003-04-07 Bernhard Herzog <[email protected]>
10211
10212 * Thuban/UI/mainwindow.py (main_menu): Move the toggle_legend item
10213 to the map module
10214
10215 2003-04-07 Bernhard Herzog <[email protected]>
10216
10217 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree): Removed in
10218 favor of ToggleSessionTree
10219 (MainWindow.ToggleSessionTree): New method to toggle visibility of
10220 the session tree.
10221 (MainWindow.SessionTreeShown): New method to return whether the
10222 session tree is currently shown.
10223 (MainWindow.ToggleLegend): New method to toggle visibility of the
10224 legend
10225 (MainWindow.ShowLegend): Implement in terms of ToggleLegend and
10226 LegendShown
10227 (MainWindow.LegendShown): New method to return whether the legend
10228 is currently shown.
10229 (_method_command): Add checked parameter so we can define check
10230 menu items
10231 (_has_tree_window_shown, _has_legend_shown): Use the appropriate
10232 mainwindow methods.
10233 (show_session_tree, show_legend commands): Removed.
10234 (toggle_session_tree, toggle_legend commands): New commands to
10235 toggle the visibility of the dialogs
10236
10237 2003-04-07 Jonathan Coles <[email protected]>
10238
10239 * Thuban/UI/classgen.py: Fix Windows problem.
10240
10241 * Thuban/UI/dock.py: Fix Windows problem.
10242
10243 * Thuban/UI/mainwindow.py: Use False instead of false.
10244 (MainWindow.ShowLegend): Remove unnecessary switch parameter.
10245
10246 2003-04-07 Jonathan Coles <[email protected]>
10247
10248 Since we now say that the order of the groups in a classification
10249 matters, it makes sense to be able to manipulate that order. Most
10250 of the changes to Thuban/Model/classification.py are to that end.
10251
10252 * Thuban/Model/classification.py (Classification.AppendGroup,
10253 Classification.InsertGroup, Classification.ReplaceGroup,
10254 Classification.RemoveGroup, Classification.GetGroup): Do as the
10255 names imply.
10256 (Classification.FindGroup): This was called GetGroup, but GetGroup
10257 takes an index, while FindGroup takes a value.
10258 (Classification.__deepcopy__): Copy all the groups, BUT NOT THE LAYER
10259 REFERENCE. Currently there is a cyclic reference between the layer
10260 and its classification. If the classification doesn't need to know
10261 its owning layer we can change this, since it may make sense to be
10262 able to use the same classification with different layers.
10263
10264 * Thuban/Model/load.py: Use Classification.AppendGroup(), not AddGroup()
10265
10266 * Thuban/UI/classgen.py: Use Classification.AppendGroup(),
10267 not AddGroup()
10268
10269 * Thuban/UI/classifier.py: Now that we can depend on the order in
10270 a Classification and have methods to manipulate that order we don't
10271 need to use our own data structures in the grid. We can simply make
10272 the grid/table access the information they need from a copy of
10273 the classification object.
10274 (Classifier._OnCloseBtn): Event handler for when the user clicks
10275 'Close'. This is needed so if the user applies changes and then
10276 continues to change the table the user has the option of discarding
10277 the most recent changes and keeping what they applied.
10278
10279 * Thuban/UI/mainwindow.py: Put "Show Legend" and "Show Session Tree"
10280 into the same group.
10281
10282 * extensions/thuban/wxproj.cpp (check_version): If Thuban is compiled
10283 with a really old version of proj, PJ_VERSION won't even be defined.
10284 If it isn't defined then just compile so that the function always
10285 returns Py_False.
10286
10287 * test/test_classification.py: Fix tests to use the renamed methods.
10288 Still need to write tests for the new methods.
10289
10290 2003-04-04 Jonathan Coles <[email protected]>
10291
10292 * Thuban/UI/classifier.py (Classifier.__SelectField): Move the
10293 call to SetSelection out of the method and before the call
10294 to __SelectField in __init__. This prevents a recursion of events
10295 when _OnFieldSelect is triggered by the user.
10296
10297 2003-04-04 Jonathan Coles <[email protected]>
10298
10299 * Thuban/Model/classification.py: Rename Color.None to
10300 Color.Transparent.
10301 (ClassGroupProperties.SetLineColori, ClassGroupProperties.SetFill):
10302 Don't bother copying the color, since Colors are immutable.
10303
10304 * Thuban/Model/color.py, Thuban/Model/layer.py, Thuban/Model/load.py,
10305 Thuban/UI/classifier.py, Thuban/UI/mainwindow.py,
10306 Thuban/UI/renderer.py, Thuban/UI/view.py:
10307 Rename Color.None to Color.Transparent.
10308
10309 * test/test_classification.py, test/test_load.py: Rename Color.None
10310 to Color.Transparent.
10311
10312 2003-04-04 Jonathan Coles <[email protected]>
10313
10314 * Thuban/Model/classification.py: Fix assert calls.
10315 (ClassGroupProperties.SetLineColor, ClassGroupProperties.SetFill):
10316 Copy the color parameter rather than hold onto a reference.
10317
10318 * Thuban/Model/color.py (Color.__copy__, Color.__deepcopy): Copy
10319 the color object.
10320 (NoColor.__copy__, NoColor.__deepcopy): Return 'self' so that we
10321 are sure there exists only one refernce to Color.None in the system.
10322 This allows us to use 'is' rather than the comparision functions.
10323
10324 * Thuban/Model/save.py: Fix assert calls.
10325
10326 * Thuban/UI/classifier.py: Fix assert calls.
10327 (ClassGrid._OnCellDClick): Call up to the classifier to open the
10328 dialog to edit the groups properties.
10329 (ClassGrid._OnCellResize): Make sure that the scollbars are drawn
10330 correctly if a cell is resized.
10331 (ClassTable.SetClassification): New. Changes the classification
10332 that is in the table.
10333 (ClassTable.__SetRow): Allow groups to be prepended.
10334 (Classifier): New code for opening the EditProperties and
10335 GenerateRanges dialogs.
10336 (SelectPropertiesDialog.__GetColor): Only set the color in the
10337 color dialog if the current color is not None.
10338
10339 * Thuban/UI/dock.py: Fix assert calls.
10340
10341 * Thuban/UI/legend.py: Fix assert calls.
10342
10343 * Thuban/UI/renderer.py: Fix assert calls.
10344
10345 * Thuban/UI/classgen.py (ClassGenDialog): Dialog for generating
10346 classifications.
10347 (GenRangePanel): Panel specific to range generation.
10348 (GenSingletonPanel): Panel specific to singleton generation.
10349 (ClassGenerator): Class responsible for actually generating
10350 the classification from the data gathered in the dialog box.
10351 (PropertyRamp): Generates properties whose values range from
10352 a starting property to an ending property.
10353
10354 2003-04-03 Bernhard Herzog <[email protected]>
10355
10356 * test/support.py (print_garbage_information): New function that
10357 prints information about still connected messages and memory
10358 leaks.
10359 (run_suite): Removed.
10360 (run_tests): New function for use as a replacement of
10361 unittest.main in the test_* files. This one calls
10362 print_garbage_information at the end.
10363
10364 * test/runtests.py (main): Use support.print_garbage_information
10365
10366 * test/test_layer.py: Use support.run_tests instead of
10367 unittest.main so we get memory leak information
10368 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
10369 (TestLayer.test_point_layer, TestLayer.test_empty_layer)
10370 (TestLayerLegend.test_visibility): Call the layer's Destroy method
10371 to fix a memory leak.
10372
10373 * test/test_classification.py: Use support.run_tests instead of
10374 unittest.main so we get memory leak information
10375 (TestClassification.test_classification): Call the layer's Destroy
10376 method to fix a memory leak.
10377
10378 2003-04-02 Bernhard Herzog <[email protected]>
10379
10380 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
10381 Handle the reference counts of the return value and errors in
10382 PyArg_ParseTuple correctly.
10383
10384 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
10385 sure the filename is absolute to avoid problems when saving the
10386 session again
10387
10388 * Thuban/Model/table.py: Remove unnecessary import. Fix a typo.
10389
10390 2003-04-01 Jonathan Coles <[email protected]>
10391
10392 * Thuban/UI/renderer.py (MapRenderer.draw_point_shape): Check
10393 that there actually are points in the returned list of points
10394 before trying to index into the list. The list may be empty if
10395 the shape is a Null Shape.
10396
10397 2003-04-01 Bernhard Herzog <[email protected]>
10398
10399 * test/test_map.py: Don't use from <module> import *
10400
10401 2003-04-01 Jonathan Coles <[email protected]>
10402
10403 * Thuban/Model/session.py: Use LAYER_CHANGED instead of
10404 LAYER_LEGEND_CHANGED
10405
10406 * Thuban/UI/dock.py (DockableWindow._OnButtonClose): Call
10407 self.Destroy() to close the window after yesterday's changes.
10408
10409 * test/test_map.py, test/test_session.py: Fix messages that
10410 are sent from maps and layers.
10411
10412 2003-03-31 Jonathan Coles <[email protected]>
10413
10414 * Thuban/UI/classifier.py: Commented out some debugging statements.
10415 (ClassDataPreviewer.Draw): Draw rectangles for polygon layers per
10416 RTbug #1769.
10417
10418 * Thuban/UI/dock.py (DockableWindow.UnDock): Restore size and
10419 position (although position doesn't work yet under GTK).
10420 (DockableWindow.Destroy): New. Called when the window must be
10421 closed. Namely needed when the DockFrame closes and must close
10422 its children.
10423 (DockFrame): Listen for EVT_CLOSE and destroy all children.
10424
10425 * Thuban/UI/legend.py (LegendPanel.Destroy): New. Cleans up
10426 when then window is told to close.
10427 (LegendTree._OnMsgLayerChanged): Fixes a seg fault bug. See
10428 comment in source for more info.
10429
10430 * Thuban/UI/main.py: Show the legend by default when Thuban starts.
10431
10432 * Thuban/UI/mainwindow.py: Renamed OnClose to _OnClose for
10433 symmetry with other such methods.
10434 (MainWindow.ShowLegend): Show the legend docked by default.
10435
10436 2003-03-28 Jonathan Coles <[email protected]>
10437
10438 * Thuban/UI/classifier.py: Support for highlighting a specific
10439 group within the grid when the classification dialog is opened.
10440 Also contains a lot of debugging printouts which will later
10441 be removed.
10442
10443 * Thuban/UI/dock.py: Complete rework on the dock code so that
10444 that it is fairly removed from the rest of the Thuban application.
10445 It is easy to add new docks which the rest of the program having
10446 to be aware of them.
10447
10448 * Thuban/UI/legend.py: Modifications to support selecting a
10449 specific group in the classification dialog. Changed how layers
10450 are drawn when the layer is visible/invisible.
10451
10452 * Thuban/UI/mainwindow.py: Removed legend specific code and
10453 replaced it with calls to the new dock code.
10454
10455 * Thuban/UI/renderer.py (MapRenderer.__init__): Added assert
10456 to check if scale > 0. Trying to track down a divide by zero.
10457
10458 2003-03-26 Jonathan Coles <[email protected]>
10459
10460 * Thuban/UI/legend.py: Removed unnecessary LegendDialog class.
10461 (LegendPanel): Removed _OnDock()/_OnUnDock() methods which are
10462 now part of DockableWindow.
10463 (LegendPanel.DoOnSelChanged): Select the current layer in the
10464 map.
10465 (LegendTree._OnSelChanged): Call LegendPanel.DoOnSelChanged()
10466 with the selected layer and/or group.
10467
10468 2003-03-26 Jonathan Coles <[email protected]>
10469
10470 This putback contains the code for dockable windows. There is
10471 no support in wxWindows as of this date for windows that can
10472 attach themselves to other windows.
10473
10474 The current model contains a DockableWindow which has a parent
10475 window for when it is detached and a dock window that it puts
10476 its contents in when it is docked. The contents of a DockableWindow
10477 must be a DockPanel. DockPanel itself derives from wxPanel.
10478
10479 * Thuban/Model/layer.py (Layer.ClassChanged): Send a LAYER_CHANGED
10480 message, not a LAYER_LEGEND_CHANGED message.
10481
10482 * Thuban/Model/map.py (Map): Forward LAYER_CHANGED messages.
10483
10484 * Thuban/UI/classifier.py (Classifier.__init__): Use wxADJUST_MINSIZE
10485 as one of the style properties for the fieldTypeText item to
10486 be sure that its size is correct when the text changes.
10487
10488 * Thuban/UI/dock.py: New. Classes for the DockPanel and
10489 DockableWindow.
10490
10491 * Thuban/UI/legend.py: Added some more buttons and made the
10492 LegendPanel a DockPanel.
10493
10494 * Thuban/UI/mainwindow.py: Added sash windows to the main window
10495 and supporting functions for manipulating the sashes.
10496 (MainWindow.ShowLegend): Create a DockableWindow with the
10497 LegendPanel as the contents.
10498
10499 * Thuban/UI/messages.py: Added DOCKABLE_* messages
10500
10501 * Thuban/UI/view.py (MapCanves.SetMap): Listen for LAYER_CHANGED,
10502 not LAYER_LEGEND_CHANGED, messages.
10503
10504 2003-03-25 Jonathan Coles <[email protected]>
10505
10506 * setup.py: Added custom script bdist_rpm_build_script so that
10507 when the rpm is built the path to wx-config is correct.
10508
10509 * setup.cfg: Added line saying to use the custom build script
10510
10511 2003-03-20 Jonathan Coles <[email protected]>
10512
10513 Initial implementation of the Legend.
10514
10515 * Thuban/UI/legend.py: New. Creates a window that shows the map's
10516 Legend information and allows the user to add/modify classifications
10517 and how the layers are drawn on the map.
10518
10519 * setup.py: New command 'build_docs' which currently uses
10520 happydoc to generate html documentation for Thuban.
10521
10522 * Thuban/Model/classification.py (ClassGroup.GetDisplayText): New.
10523 Returns a string which is appropriately describes the group.
10524
10525 * Thuban/Model/layer.py (Layer.SetClassification): Generate a
10526 LAYER_CHANGED event instead of a LAYER_LEGEND_CHANGED event.
10527
10528 * Thuban/Model/map.py (Map): Rename messages and use new, more
10529 specific, messages.
10530
10531 * Thuban/Model/messages.py: New message to indicate that a layer's
10532 data has changed (LAYER_CHANGED). New map messages to indicate
10533 when layers have been added/removed/changed or if the stacking order
10534 of the layers has changed.
10535
10536 * Thuban/Model/session.py: Rename and use new messages.
10537
10538 * Thuban/UI/classifier.py: Remember if any changes have actually
10539 been applied so that if the dialog is cancelled without an application
10540 of changes we don't have to set a new classification.
10541 (ClassDataPreviewer): Pulled out the window specific code and put it
10542 ClassDataPreviewWindow. ClassDataPreviewer can then be used to draw
10543 symbols on any DC.
10544
10545 * Thuban/UI/mainwindow.py: New code to open the legend.
10546
10547 * Thuban/UI/view.py: Use new message names.
10548
10549 2003-03-19 Jonathan Coles <[email protected]>
10550
10551 * Thuban/UI/main.py (verify_versions): New. Checks the versions
10552 of Python, wxPython, and some other libraries.
10553
10554 * extensions/thuban/wxproj.cpp (check_version): Checks the given
10555 version against what wxproj was compiled with.
10556 (check_version_gtk): If wxproj was compiled with gtk then check
10557 the given version against the version of the gtk library
10558 currently being used.
10559
10560 2003-03-14 Bernhard Herzog <[email protected]>
10561
10562 * test/test_command.py: Run the tests when the module is run as a
10563 script
10564
10565 2003-03-14 Bernhard Herzog <[email protected]>
10566
10567 Implement selection of multiple selected shapes in the same layer:
10568
10569 - Introduce a new class to hold the selection. This basically
10570 replaces the interactor which was nothing more than the
10571 selection anyway. A major difference is of course that the new
10572 selection class supports multiple selected shapes in one layer
10573
10574 - Move the object that represents the selection from the
10575 application to the canvas. The canvas is a better place than the
10576 application because the selection represents which shapes and
10577 layer of the map displayed by the canvas are selected and
10578 affects how the map is drawn.
10579
10580 - Make the selection and its messages publicly available through
10581 the mainwindow.
10582
10583 - The non-modal dialogs do not get a reference to the interactor
10584 anymore as they can simply refer to their parent, the
10585 mainwindow, for the what the interactor had to offer.
10586
10587 * Thuban/UI/selection.py: New module with a class to represent the
10588 selection.
10589
10590 * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
10591 these unused messages
10592
10593 * Thuban/UI/application.py (ThubanApplication.OnInit)
10594 (ThubanApplication.OnExit, ThubanApplication.SetSession): The
10595 interactor is gone now.
10596 (ThubanApplication.CreateMainWindow): There is no interactor
10597 anymore so we pass None as the interactor argument for now for
10598 compatibility.
10599
10600 * Thuban/UI/view.py (MapCanvas.delegated_messages)
10601 (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
10602 Unsubscribe, delegate messages according to the delegated_messages
10603 class variable.
10604 (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
10605 attributes from instance variables as described with the
10606 delegated_methods class variable.
10607 (MapCanvas.__init__): New instance variable selection holding the
10608 current selection
10609 (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
10610 pass them on to the renderer
10611 (MapCanvas.SetMap): Clear the selection when a different map is
10612 selected.
10613 (MapCanvas.shape_selected): Simple force a complete redraw. The
10614 selection class now takes care of only issueing SHAPES_SELECTED
10615 messages when the set of selected shapes actually does change.
10616 (MapCanvas.SelectShapeAt): The selection is now managed in
10617 self.selection
10618
10619 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
10620 (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
10621 Unsubscribe, delegate messages according to the delegated_messages
10622 class variable.
10623 (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
10624 attributes from instance variables as described with the
10625 delegated_methods class variable.
10626 (MainWindow.__init__): The interactor as ivar is gone. The
10627 parameter is still there for compatibility. The selection messages
10628 now come from the canvas.
10629 (MainWindow.current_layer, MainWindow.has_selected_layer):
10630 Delegate to the the canvas.
10631 (MainWindow.LayerShowTable, MainWindow.Classify)
10632 (MainWindow.identify_view_on_demand): The dialogs don't need the
10633 interactor parameter anymore.
10634
10635 * Thuban/UI/tableview.py (TableFrame.__init__)
10636 (LayerTableFrame.__init__, LayerTableFrame.OnClose)
10637 (LayerTableFrame.row_selected): The interactor is gone. It's job
10638 from the dialog's point of view is now done by the mainwindow,
10639 i.e. the parent. Subscribe to SHAPES_SELECTED instead
10640 of SELECTED_SHAPE
10641
10642 * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
10643 is gone. It's job from the dialog's point of view is now done by
10644 the mainwindow, i.e. the parent.
10645
10646 * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
10647 gone. It's job from the dialog's point of view is now done by the
10648 mainwindow, i.e. the parent.
10649
10650 * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
10651 gone. It's job from the dialog's point of view is now done by the
10652 mainwindow, i.e. the parent.
10653 (SessionTreeCtrl.__init__): New parameter mainwindow which is
10654 stored as self.mainwindow. The mainwindow is need so that the tree
10655 can still subscribe to the selection messages.
10656 (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
10657 (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
10658 selection is now accessible through the mainwindow. Subscribe to
10659 SHAPES_SELECTED instead of SELECTED_SHAPE
10660
10661 * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
10662 SHAPES_SELECTED message now.
10663 (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
10664 so deal with multiple shapes
10665 (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
10666 gone. It's job from the dialog's point of view is now done by the
10667 mainwindow, i.e. the parent.
10668
10669 * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
10670 parameter is now a list of shape ids.
10671 (RecordTable.SetTable): The second parameter is now a list of
10672 indices.
10673
10674 * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
10675 selected_shape parameter and ivar to selected_shapes. It's now a
10676 list of shape ids.
10677 (MapRenderer.draw_label_layer): Deal with multiple selected
10678 shapes. Rearrange the code a bit so that the setup and shape type
10679 distinctions are only executed once.
10680
10681 * test/test_selection.py: Test cases for the selection class
10682
10683 2003-03-11 Jonathan Coles <[email protected]>
10684
10685 * Thuban/Model/load.py: Temporary fix so that the xml reader
10686 doesn't cause Thuban to crash.
10687
10688 * Thuban/Model/layer.py: Handle the cyclic references between
10689 a layer and its classification better, and be sure to disconnect
10690 the classification from the layer when the layer is destroyed
10691 so that we don't maintain a cyclic reference that may not be
10692 garbage collected.
10693
10694 * Thuban/Model/classification.py: See comment for layer.py.
10695
10696 2003-03-12 Jan-Oliver Wagner <[email protected]>
10697
10698 * HOWTO-Release: New. Information on the steps for releasing
10699 a new version of Thuban.
10700
10701 2003-03-11 Jonathan Coles <[email protected]>
10702
10703 * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
10704 Use True instead of true.
10705 (Classifier): Should have a single panel in which all the controls lie.
10706
10707 * Thuban/UI/proj4dialog.py: Add normal border.
10708
10709 * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
10710
10711 * Thuban/UI/mainwindow.py: Use True instead of true.
10712
10713 * setup.py: Update some definitions to use wxWindows2.4 files
10714
10715 * Data/iceland_sample_class.thuban: Fixed file so that the
10716 field_type information is present.
10717
10718 2003-03-10 Jonathan Coles <[email protected]>
10719
10720 * Thuban/UI/classifier.py (Classifier.__init__): Make the
10721 field type label grow so that when the text changes the
10722 size is updated correctly. This may be a wxWindows bug.
10723
10724 2003-03-10 Jonathan Coles <[email protected]>
10725
10726 * Thuban/UI/application.py: Changed SESSION_CHANGED to
10727 SESSION_REPLACED.
10728
10729 * Thuban/UI/classifier.py: Wrap text with _().
10730 (ClassGrid.CreateTable): Set dimensions and size hints here,
10731 instead of in Reset, so we only set the size once.
10732
10733 * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
10734
10735 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
10736 Call Close() instead of Shutdown().
10737
10738 * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
10739
10740 * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
10741 Go back to using OnClose() instead of Shutdown().
10742
10743 2003-03-10 Jonathan Coles <[email protected]>
10744
10745 * Thuban/UI/classifier.py (Classifier): SelectField() needed
10746 to know the old field index as well as the new one.
10747
10748 2003-03-10 Jonathan Coles <[email protected]>
10749
10750 * Thuban/UI/classifier.py (Classifier): Use __SelectField()
10751 to correctly set the table information and call this from
10752 __init__ and from _OnFieldSelect so that all the information
10753 is up to date when the dialog opens and when a field is changed.
10754
10755 2003-03-10 Jonathan Coles <[email protected]>
10756
10757 * Thuban/Model/classification.py (Classification): Don't use
10758 layer's message function directly, use the ClassChanged() method
10759 when then classification changes. SetField/SetFieldType/SetLayer
10760 must keep the information about field name and field type in
10761 sync when an owning layer is set or removed.
10762
10763 * Thuban/Model/layer.py: Added ClassChanged() so that the
10764 classification can tell the layer when its data has changed.
10765 (Layer.SetClassification): Accepts None as an arguement to
10766 remove the current classification and correctly handles
10767 adding a new classification.
10768
10769 * Thuban/Model/load.py: Comment out print statement
10770
10771 * test/test_classification.py, test/test_save.py: New and
10772 improved tests.
10773
10774 2003-03-07 Jonathan Coles <[email protected]>
10775
10776 * Thuban/Model/classification.py: Implemented __copy__ and
10777 __deepcopy__ for ClassGroup* and ClassGroupProperites so
10778 they can easily be copied by the classifier dialog.
10779 (ClassGroupProperites.__init__): The default line color should
10780 have been Color.Black.
10781
10782 * Thuban/UI/classifier.py: Setting and Getting table values now
10783 uses a consistent set of functions.
10784 (Classifier): Now non-modal. Has field type label which changes
10785 as the field changes. Keep track of buttons in a list so that
10786 we can enable/disable the buttons when the None field is selected.
10787 (SelectPropertiesDialog): Add buttons to make the colors transparent.
10788
10789 * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
10790 does what OnClose did, but can be called by the application to
10791 close a window. Needed when a session changes, and we have to
10792 close the classifier windows.
10793
10794 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
10795 Shuts down open dialogs. Used when a new session is created
10796 or a session is opened.
10797 (MainWindow.SaveSession): Should only call application.SaveSession()
10798 if we don't call SaveSessionAs first.
10799 (MainWindow.Classify): Allow different classifier dialogs for
10800 different layers.
10801
10802 * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
10803 the parent class handle it. Add Shutdown() to unsubscibe from
10804 event notification and call the parent Shutdown(). This was
10805 necessary so the application can close the tree window.
10806
10807 2003-03-06 Jonathan Coles <[email protected]>
10808
10809 * Thuban/Model/classification.py: Minor documentation changes,
10810 Addition of __eq__ and __ne__ methods.
10811 (Classification.SetLayer): prevent recursion between this method
10812 and Layer.SetClassification().
10813
10814 * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
10815
10816 * Thuban/Model/layer.py (SetClassification): prevent recursion
10817 between this method and Classification.SetLayer().
10818
10819 * test/test_classification.py, test/test_load.py,
10820 test/test_session.py: Fixed and added tests for the classification
10821 classes.
10822
10823 2003-03-06 Bernhard Herzog <[email protected]>
10824
10825 * Thuban/UI/classifier.py (ClassGrid.__init__)
10826 (ClassGrid.CreateTable): Move the SetSelectionMode call to
10827 CreateTable because otherwise it triggers an assertion in
10828 wxPython/wxGTK 2.4.
10829
10830 2003-03-05 Jonathan Coles <[email protected]>
10831
10832 * Thuban/common.py: Move FIELDTYPE constants back to table.py.
10833
10834 * Thuban/Model/load.py: import FIELDTYPE constants from table.
10835
10836 * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
10837
10838 * Thuban/Model/table.py: Put FIELDTYPE constants back.
10839
10840 2003-03-05 Jonathan Coles <[email protected]>
10841
10842 * Thuban/UI/classifier.py: Added class documentation.
10843 Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
10844 Store just the groups in the table and generate the other
10845 column information when it is requested. Add "None" field
10846 to pull-down to select no classification.
10847
10848 * Thuban/common.py: Moved FIELDTYPE constants from table.py
10849 (Str2Num): Only catch ValueError exceptions.
10850
10851 * Thuban/Model/classification.py: Class documentation. Renaming
10852 of methods with Stroke to Line. Groups are stored in a single
10853 list with the default as the first element. Groups are searched
10854 in the order they appear in the list.
10855
10856 * Thuban/Model/color.py: Documentation.
10857
10858 * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
10859 the kind of data represented by a field.
10860
10861 * Thuban/Model/load.py (ProcessSession): Use proper string
10862 conversion function; fixes RTbug #1713.
10863
10864 * Thuban/Model/save.py (Saver): Store field type information.
10865
10866 * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
10867 (Table): Add field_info_by_name() to retrieve field information
10868 by specifying the field name, not the number.
10869
10870 * Thuban/UI/mainwindow.py: Function name changes.
10871
10872 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
10873 get the layer classification once. Don't try to classify
10874 values when the field is None: just use the default properties.
10875
10876 * Thuban/UI/view.py: Function name changes.
10877
10878 * Doc/thuban.dtd: Add field_type attribute to a classification.
10879
10880 2003-03-04 Bernhard Herzog <[email protected]>
10881
10882 * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
10883 the fill and stroke layer attributes optional with suitable
10884 default values. Add the stroke_width layer attribute. Use correct
10885 syntax for empty elements. Make the attribute list for labels
10886 refer to the label element.
10887
10888 2003-03-04 Bernhard Herzog <[email protected]>
10889
10890 * setup.py (thuban_build_py.build): Add a comment about distutils in
10891 Python 2.3 containing some of the functionality we implement in
10892 setup.py ourselves.
10893
10894 * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
10895 before the selection mode. Doing it the other way round triggers
10896 an assertion in wxWindows.
10897
10898 * Thuban/Model/save.py (escape): Fix typo in doc-string
10899
10900 * Thuban/Model/classification.py: Remove unnecessary wxPython
10901 import
10902
10903 2003-03-04 Jonathan Coles <[email protected]>
10904
10905 * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
10906 Parameter 'value' should default to None.
10907
10908 * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
10909 the class attribute __classification is now private.
10910
10911 * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
10912 Classifier to ClassGrid. Added support for removing selected rows,
10913 which including code for keeping track of when cells are selected,
10914 and deselected.
10915 (ClassTable): Support for added/removing rows. Fixed a problem
10916 with __ParseInput whereby it would not allow strings (only numbers)
10917 to be entered.
10918 (Classifier): Added button and supporting code for removing
10919 selected rows.
10920
10921 2003-02-27 Jonathan Coles <[email protected]>
10922
10923 * Thuban/common.py: Moved color conversion functions into
10924 Thuban/UI/common.py.
10925 (Str2Num): Now converts the float (not the string) to a long/int
10926 so that an exception isn't thrown.
10927
10928 * Thuban/UI/common.py: Common functions used in several UI modules
10929
10930 * Thuban/Model/classification.py: Changed the class hierarchy
10931 so that a Classification consists of Groups which return
10932 Properties when a value matches a Group.
10933
10934 * Thuban/Model/layer.py: Fixed name resolution problem.
10935
10936 * Thuban/Model/load.py: Use new Classification and Group functions.
10937
10938 * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
10939 failure.
10940 (Saver.write_classification): Use new Classification and Group
10941 functions.
10942
10943 * Thuban/UI/classifier.py: Changes to use new Classification and Group
10944 functions. Fix to create a tuple with a single value instead of
10945 simply returning the value.
10946
10947 * Thuban/UI/renderer.py: Use new Classification and Group functions.
10948 Use common.py functions.
10949
10950 * Thuban/UI/tree.py: Use common.py functions.
10951
10952 * test/test_classification.py: Use new Classification and Group
10953 classes.
10954
10955 2003-02-24 Jonathan Coles <[email protected]>
10956
10957 * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
10958 functions from Thuban color objects to wxWindow colour objects.
10959
10960 * Thuban/Model/classification.py (Classification): Renamed
10961 GetProperties() to GetClassData(). Used the new iterator
10962 in TreeInfo().
10963 (ClassIterator): Iterator implementation to iterate over the
10964 ClassData objects in a classification object.
10965
10966 * Thuban/Model/save.py (Saver.write_classificaton): Uses
10967 the new iterator to save the classification information.
10968
10969 * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
10970 for changing the stroke and fill colors and previewing the
10971 changes.
10972
10973 * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
10974 MainWindow.SaveSessionAs): Text string changes so the dialogs
10975 have more meaningful titles.
10976
10977 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
10978 Classification method name from GetProperties to GetClassData.
10979
10980 * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
10981 instead of accessing now non-existent class variables.
10982
10983 2003-02-24 Bernhard Herzog <[email protected]>
10984
10985 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
10986 unneeded Shape() call. Rendering is substantially faster without
10987 it and it avoids some problems with broken shape files.
10988
10989 2003-02-20 Frank Koormann <[email protected]>
10990
10991 Force minimal size of identify and label dialogs. The autosizing
10992 looked too ugly.
10993
10994 * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
10995 * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
10996 Set size of listctrl.
10997 * Thuban/UI/identifyview.py (IdentifyView.__init__):
10998 Set size of dialog.
10999
11000 2003-02-19 Jonathan Coles <[email protected]>
11001
11002 * test/test_classification.py, test/test_layer.py,
11003 test/test_load.py, test/test_map.py, test/test_session.py:
11004 Updated the tests to use the new functions that are in the
11005 respective classes.
11006
11007 * Thuban/Model/classification.py (Classification):
11008 Uses the new ClassData* classes. Modification messages are
11009 passed up to the parent layer (if it exists).
11010 (ClassData): New class to encapsulate the common data in each
11011 classification property.
11012 (ClassDataDefault): Represents the Default class. data.
11013 (ClassDataPoint): Represents a single class. data point
11014 (ClassDataRange): Represents a class. range
11015 (ClassDataMap): Represents a class. map (unused).
11016
11017 * Thuban/Model/color.py: Added Color.None to represent something
11018 with no color. Color.Black represents the color black.
11019 (NoColor): Helper class derived from Color to represent something
11020 with no color.
11021
11022 * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
11023 stroke_width attributes. Made the 'classification' attribute private.
11024 New methods for setting/getting the classification.
11025
11026 * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
11027 to get the classifcation and use the new ClassData* classes to
11028 hold the classification data. Use Str2Num to convert numbers
11029 properly.
11030
11031 * Thuban/Model/save.py (Saver): Use new Color and Classification
11032 methods
11033
11034 * Thuban/UI/classifier.py (ClassGrid): New class to represent a
11035 custom grid.
11036 (ClassTable): Support for editing Values and Labels and for
11037 changing what type (point or range) of data is stored in each
11038 property based on how the user enters the data.
11039 (Classifier): Support for saving the new classifications and
11040 launching the dialog to edit a property.
11041 (SelectPropertiesDialog): New class for editing the visual
11042 properties of a classification (stroke color, width, and fill color)
11043 (ClassPreviewer): Took the Draw method from ClassRenderer and
11044 made most of it into this new class. Intend to use this class in
11045 the SelectPropertiesDialog for previewing changes.
11046
11047 * Thuban/UI/renderer.py: Use new Color and Classification methods.
11048
11049 * Thuban/UI/tree.py: Formatting changes.
11050
11051 * Doc/thuban.dtd: Add 'label' element
11052
11053 * Thuban/common.py: New. Contains common routines used throughout
11054 the code.
11055 (Str2Num): Takes a string and converts it to the "best" type of
11056 number.
11057
11058 2003-02-14 Bernhard Herzog <[email protected]>
11059
11060 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
11061 dragging flag is always set to 0 even when the tool implementation
11062 raises an exception
11063
11064 2003-02-11 Bernhard Herzog <[email protected]>
11065
11066 * Thuban/UI/application.py (ThubanApplication.splash_screen): New
11067 method to create a splash screen.
11068 (ThubanApplication.ShowMainWindow): New. Show the main window.
11069 Needed so the splash screen can display the mainwindow
11070 (ThubanApplication.OnInit): Call the
11071 new splash_screen method to determine whether the application
11072 should display a splash screen. If it displays a splash screen do
11073 not immediately show the main window.
11074
11075 2003-02-11 Jonathan Coles <[email protected]>
11076
11077 * Thuban/Model/classification.py: Added import line to fix
11078 feature conflicts between running on python2.2 and python2.1.
11079
11080 * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
11081 onto the clinfo parameter, so removed the deepcopy().
11082
11083 2003-02-10 Jonathan Coles <[email protected]>
11084
11085 * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
11086 Added element_open variable to track opening and closing of tags
11087 so that tags that don't span more than one line are closed with
11088 /> instead of </tag_name>. Use the GetDefault*() methods of
11089 the Classification class.
11090
11091 * Thuban/Model/classification.py (Classificaton): Added set and
11092 get methods for the default data. The class also takes a layer
11093 reference so that modification messages can be sent. Fixed the
11094 methods to use the new ClassData class.
11095 (ClassData): New class to encapsulate the classification data
11096
11097 * Thuban/Model/layer.py (Layer): Remove the
11098 Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
11099 SetDefault*() methods on the layer's classification object.
11100 (Layer.__init__): Use the new SetDefault*() methods in the
11101 Classification class.
11102
11103 * Thuban/Model/load.py (ProcessSession): Use the new ClassData
11104 object instead of a dictionary.
11105
11106 * Thuban/UI/classifier.py (ClassRenderer): New class to
11107 draw the classifications in the dialog box's table.
11108 (Classifier): Modified to use the ClassRenderer class.
11109
11110 * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
11111 methods of the Classification class.
11112
11113 * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
11114 of the ClassData class.
11115
11116 * test/test_classification.py, test/test_layer.py,
11117 test/test_map.py, test/test_session.py: Fix the tests to work
11118 with the above code changes.
11119
11120 2003-02-03 Jonathan Coles <[email protected]>
11121
11122 * Thuban/Model/classification.py (Classification): Added getNull()
11123 to return the NullData reference
11124
11125 * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
11126 Layer.SetStrokeWidth): Modified these functions to change the
11127 null data in the classification rather than keep these values
11128 directly in the Layer class. Menu options to change these values
11129 work again.
11130
11131 2003-01-28 Jonathan Coles <[email protected]>
11132
11133 * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
11134 Fixed crashing problem on some systems. Dialog box shows
11135 classification data.
11136
11137 * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
11138 Colors in the tree view.
11139
11140 * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
11141 the tree info for classifications. Commented out unnecessary lines.
11142
11143 * Thuban/Model/classification.py (Classification.TreeInfo): New
11144 function to add information about the classification into the
11145 tree view.
11146
11147 2003-01-27 Jan-Oliver Wagner <[email protected]>
11148
11149 * Thuban/__init__.py (_): New.
11150
11151 * Thuban/Model/classification.py, Thuban/Model/extension.py,
11152 Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
11153 Thuban/Model/session.py, Thuban/UI/application.py,
11154 Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
11155 Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
11156 Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
11157 Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
11158 Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
11159
11160 2003-01-27 Jonathan Coles <[email protected]>
11161
11162 * Thuban/Model/layer.py: Classification initialization calls.
11163
11164 * Thuban/Model/classification.py: Created class to encapsulate
11165 a layer classification. Supports specific data points and
11166 ranges.
11167
11168 * Thuban/Model/load.py: Added support for loading classification
11169 information.
11170
11171 * Thuban/Model/save.py: Added support for saving classification
11172 information.
11173
11174 * Thuban/UI/classifier.py: Initial class for a dialog box for
11175 specifying classification information.
11176
11177 * Thuban/UI/mainwindows.py: Support for opening the classifier
11178 dialog.
11179
11180 * Thuban/UI/renderer.py: Support for drawing a layer with the
11181 classification information.
11182
11183 * Data/iceland_sample_class.thuban: iceland_sample with
11184 classification data.
11185
11186 * test/test_classification: Tests for the Classification class.
11187
11188 2002-12-09 Bernhard Herzog <[email protected]>
11189
11190 * test/test_command.py: New. Tests for the command classes.
11191
11192 * Thuban/UI/command.py (ToolCommand): New class for tool commands.
11193 (Command.IsTool): New method to distinguish between command
11194 switching tools and other commands.
11195
11196 * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
11197 the tool to avoid direct assignments to instance variables
11198 (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
11199 (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
11200 change the tool
11201
11202 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
11203 active tool's command turns insensitive, disable the tool.
11204 (_tool_command): Use the new ToolCommand class
11205
11206 * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
11207 SelectTool method to change the tool
11208 (iconfile): Use the ToolCommand class
11209
11210 2002-12-03 Bernhard Herzog <[email protected]>
11211
11212 * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
11213 the case of selected items that are not children of Layers or Maps
11214 properly. Previously this bug would trigger an assertion in
11215 wxWindows.
11216
11217 2002-11-06 Frank Koormann <[email protected]>
11218
11219 * Thuban/UI/mainwindow.py: Altered the order of tools in the
11220 toolbar: First now are all navigation tools (Zoom In/Out, Pan,
11221 Full Extent).
11222
11223 2002-10-23 Bernhard Herzog <[email protected]>
11224
11225 * setup.py (setup call): version now 0.1.3
11226
11227 * MANIFEST.in: Add the files in test/
11228
11229 * test/README: Add note about tests requiring the iceland data
11230
11231 * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
11232 copyright notice.
11233
11234 2002-10-18 Bernhard Herzog <[email protected]>
11235
11236 * test/test_map.py
11237 (TestMapWithContents.test_projected_bounding_box): Use an explicit
11238 epsilon.
11239
11240 * test/support.py (FloatComparisonMixin.assertFloatEqual)
11241 (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
11242 message if the assertion fails and don't return the return value
11243 of self.assert_. In assertFloatSeqEqual the return meant that not
11244 all items of the sequence were compared.
11245
11246 2002-09-20 Bernhard Herzog <[email protected]>
11247
11248 * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
11249
11250 * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
11251
11252 * test/test_map.py (TestMapWithContents.test_tree_info): Create
11253 the string with the bounding box on the fly because of platform
11254 differences in the way %g is handled.
11255
11256 * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
11257 DBFfile too because Thuban layers can't yet cope missing DBF
11258 files.
11259
11260 2002-09-20 Bernhard Herzog <[email protected]>
11261
11262 * test/test_menu.py: Use initthuban instead of
11263 add_thuban_dir_to_path to initialize Thuban.
11264
11265 * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
11266 Mixin class for float comparisons
11267 (SubscriberMixin): New. Mixin class to test messages sent through
11268 the Connector class
11269
11270 * test/README: Fix a typo and add the -v flag to the command for
11271 individual tests
11272
11273 * test/test_session.py: New. Test cases for Thuban.Model.session
11274
11275 * test/test_proj.py: New. Test cases for Thuban.Model.proj
11276
11277 * test/test_map.py: New. Test cases for Thuban.Model.map
11278
11279 * test/test_layer.py: New. Test cases for Thuban.Model.layer
11280
11281 * test/test_label.py: New. Test cases for Thuban.Model.label
11282
11283 * test/test_connector.py: New. Test cases for Thuban.Lib.connector
11284
11285 * test/test_color.py: New. Test cases for Thuban.Model.color
11286
11287 * test/test_base.py: New. Test cases for Thuban.Model.base
11288
11289 2002-09-13 Bernhard Herzog <[email protected]>
11290
11291 * Thuban/Model/session.py (Session.forwarded_channels): Forward
11292 the CHANGED channel too.
11293
11294 * Thuban/Model/map.py (Map.forwarded_channels): Forward the
11295 CHANGED channel too.
11296 (Map.__init__): Call the Modifiable constructor as well.
11297
11298 * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
11299 event if the modified flag changes.
11300 (Modifiable.changed): Tweak the doc-string.
11301
11302 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
11303 (MainWindow.set_position_text): Put the code that puts the text
11304 with the mouse position into the status bar into the new method
11305 set_position_text so that it can overwritten in derived classes.
11306
11307 2002-09-12 Bernhard Herzog <[email protected]>
11308
11309 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
11310 message box on the main window.
11311
11312 2002-09-11 Bernhard Herzog <[email protected]>
11313
11314 * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
11315 the 'E' because it's less likely to interfere with other menu
11316 entries.
11317 (MainWindow.build_menu): remove an incorrect comment.
11318
11319 2002-09-10 Bernhard Herzog <[email protected]>
11320
11321 * Thuban/UI/mainwindow.py (MainWindow.Map): New.
11322 (_tool_command): Add sensitive parameter
11323 (_has_visible_map): Sensitivity callback to tools and other
11324 commands that require a visible map. Use it in map_zoom_in_tool,
11325 map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
11326 and map_full_extent
11327
11328 2002-09-06 Bernhard Herzog <[email protected]>
11329
11330 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
11331 VIEW_POSITION
11332
11333 2002-09-04 Frank Koormann <[email protected]>
11334
11335 * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
11336
11337 2002-09-02 Bernhard Herzog <[email protected]>
11338
11339 * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
11340 wxWindows already and our implementation doesn't work correctly
11341 with wxGTK 2.3:
11342 (MapCanvas.__init__): Remove the instance variable
11343 (MapCanvas.OnPaint): Always call do_redraw when there's a map to
11344 be drawin
11345 (MapCanvas.OnIdle): Removed.
11346
11347 * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
11348 a parameter to determine the size of the rectangle.
11349 (MapCanvas.find_shape_at): Create the box around the point on a
11350 layer by layer basis and make the size depend on the shape type.
11351 This solves a problem with the selection of point shapes at the
11352 border of the layer's bounding box
11353
11354 2002-08-30 Bernhard Herzog <[email protected]>
11355
11356 * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
11357 for the sensitivity of remove layer.
11358 (_can_remove_layer): New. Sensitivity callback for remove layer
11359 (Command layer_remove): Use _can_remove_layer
11360
11361 * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
11362 determine whether a given layer can be deleted.
11363
11364 * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
11365 (MapCanvas.do_redraw): Get rid of the unused update_region
11366 instance variable
11367
11368 * Thuban/UI/view.py: Add/update some doc-strings.
11369
11370 * test/: new subdirectory with a bunch of unit tests.
11371
11372 * test/README, test/test_table.py, test/test_save.py,
11373 test/test_menu.py, test/test_load.py: Initial set of tests and
11374 brief instructions on how to run them
11375
11376 2002-08-29 Bernhard Herzog <[email protected]>
11377
11378 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
11379 arcs with multiple parts.
11380
11381 * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
11382 Handle degenrate rectangles.
11383
11384 * Thuban/Model/table.py: Make writing records work correctly:
11385 (Table.__init__): Keep track of whether the DBF is open for
11386 writing
11387 (Table.write_record): Open the DBF file for writing when necessary
11388
11389 2002-08-27 Bernhard Herzog <[email protected]>
11390
11391 * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
11392 dbf files only for reading by default. Use a new writable dbf
11393 object for writing.
11394
11395 2002-08-26 Bernhard Herzog <[email protected]>
11396
11397 * Thuban/UI/mainwindow.py: Refactor the context creation:
11398 (MainWindow.Context): New method to return a context
11399 (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
11400 new method
11401
11402 * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
11403 layer table specific code from TableGrid into LayerTableGrid
11404 (TableFrame, LayerTableFrame): Split the layer table specific code
11405 from TableFrame into LayerTableFrame
11406 (LayerTableGrid.select_shape): Remove a debug print
11407
11408 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
11409 LayerTableFrame
11410
11411 2002-08-23 Bernhard Herzog <[email protected]>
11412
11413 * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
11414 absolute filename.
11415
11416 2002-08-22 Bernhard Herzog <[email protected]>
11417
11418 * Thuban/Model/table.py (Table.write_record): New method to write
11419 records.
11420 (Table.__init__): Open the DBF file for writing too.
11421
11422 * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
11423 into the underlying table.
11424
11425 * extensions/shapelib/shapefil.h (DBFCommit),
11426 extensions/shapelib/dbfopen.c (DBFCommit): New API function to
11427 commit any changes made to the DBF file.
11428
11429 * Thuban/UI/mainwindow.py (make_check_current_tool)
11430 (_tool_command): Put the code that generates the "checked"
11431 callback into a separate function so that we can reuse it
11432 elsewhere
11433
11434 * Thuban/Model/save.py (Saver): New class to handle serializing a
11435 session into an XML file. The main reason to introduce a class is
11436 that applications built on Thuban can derive from it so that they
11437 can save additional information in a session file.
11438 (save_session): Delegate almost all the work to the Saver class.
11439 Rename the filename argument to file because it may be a file like
11440 object now.
11441
11442 * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
11443 code. Remove the little test code which would be executed when the
11444 module is run as a script which didn't work anymore since it can't
11445 import the other Thuban modules.
11446 (ProcessSession, load_session): Refactor the ProcessSession to
11447 have one method for each element start and end tag so that derived
11448 classes can easily override the processing of individual tags.
11449 Also, always parse with namespaces enabled because applications
11450 built on top of Thuban will likely use namespaces if they extend
11451 the session file format.
11452
11453 2002-08-21 Bernhard Herzog <[email protected]>
11454
11455 * setup.py (ThubanInstall.run): Don't repr install_lib_orig
11456 because thubaninit_contents will do it for us.
11457
11458 2002-08-16 Jan-Oliver Wagner <[email protected]>
11459
11460 * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
11461 tree window already open
11462
11463 2002-08-15 Bernhard Herzog <[email protected]>
11464
11465 * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
11466 with self.
11467
11468 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
11469 when we have actually captured it.
11470
11471 * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
11472 shapefile and destroy the table.
11473
11474 * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
11475
11476 2002-08-14 Bernhard Herzog <[email protected]>
11477
11478 * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
11479 instance variable columns
11480 (RecordTable.GetTypeName): row and col may be negative in some
11481 cases.
11482
11483 * setup.py (InstallLocal.initialize_options)
11484 (InstallLocal.finalize_options, InstallLocal.user_options): New
11485 option create-init-file to build a thubaninit.py when running
11486 install_local
11487 (InstallLocal.run): Create the thubaninit.py module when requested
11488 (thubaninit_contents): Split the template into several parts and
11489 create a new function thubaninit_contents that creates the
11490 contents of a thubaninit module.
11491 (ThubanInstall.run): Use the new function to create the thubaninit
11492 module.
11493
11494 2002-07-30 Bernhard Herzog <[email protected]>
11495
11496 * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
11497 cleanup.
11498 (ThubanApplication.MainLoop): Extend to automatically call OnExit.
11499
11500 * Thuban/Model/session.py (Session.Destroy): Don't bypass the
11501 direct base class' Destroy method.
11502
11503 * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
11504 layers.
11505 (Map.Destroy): Destroy the label_layer as well and call the
11506 inherited Desatroymethod first so that no more messages are
11507 issued.
11508 (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
11509 message if the stacking order actually has changed. Add
11510 doc-strings.
11511 (Map.BoundingBox): Correct the doc-string.
11512 (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
11513 (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
11514
11515 * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
11516 all labels.
11517
11518 2002-07-29 Bernhard Herzog <[email protected]>
11519
11520 * Thuban/Model/map.py (Map.subscribe_layer_channels)
11521 (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
11522 to a layer's channels into separate methods.
11523 (Map.RemoveLayer, Map.AddLayer): Call the new methods
11524 (Map.Destroy): Unsubscribe from a layer's channels before
11525 destroying it.
11526
11527 * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
11528 selected_layer parameter to searched_layer which is the layer to
11529 search in.
11530 (MapCanvas.SelectShapeAt): New parameter layer to restrict the
11531 search to that layer. Return the selected layer and shape.
11532
11533 * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
11534 typo
11535
11536 2002-07-24 Bernhard Herzog <[email protected]>
11537
11538 * Thuban/UI/application.py (ThubanApplication.create_session):
11539 Extend the doc string.
11540 (ThubanApplication.subscribe_session)
11541 (ThubanApplication.unsubscribe_session): New methods to
11542 subscribe/unsubscribe to/from session channels.
11543 (ThubanApplication.SetSession): Call the new methods here.
11544 (ThubanApplication.maps_changed, ThubanApplication.set_map):
11545 Renamed set_map to maps_changed. Its now a subscriber for
11546 MAPS_CHANGED.
11547
11548 * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
11549 x-coordinate in case of simple clicks
11550
11551 * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
11552 don't pass it as a parameter
11553
11554 * Thuban/Model/session.py (Session.RemoveMap): New
11555
11556 * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
11557 window size into a parameter.
11558
11559 2002-07-23 Bernhard Herzog <[email protected]>
11560
11561 * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
11562 just commands.
11563
11564 * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
11565 parameter list a bit to allow setting the window title and the
11566 initial message in the status bar. Update the callers.
11567
11568 * Thuban/UI/application.py (ThubanApplication.OnInit)
11569 (ThubanApplication.CreateMainWindow): Put the mainwindow
11570 instantiation into a separate method so that it can be overridden
11571 by a subclass.
11572
11573 2002-07-19 Bernhard Herzog <[email protected]>
11574
11575 * Thuban/Model/session.py: Issue a CHANGED message every time
11576 another changed message is issued to make it easier to get
11577 notified of changes.
11578 (Session): Update the doc string
11579 (Session.forward): Issue changed-events as CHANGED as well.
11580 (Session.changed): Overwrite the inherited version to issue
11581 CHANGED events as well.
11582
11583 * Thuban/UI/tree.py: We can now simply subscribe to the session's
11584 CHANGED channel to be informed of changes.
11585 (SessionTreeCtrl.session_channels): Not needed any longer.
11586 (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
11587 Only have to (un)subscribe CHANGED
11588
11589 * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
11590
11591 * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
11592 for the wxPython locale bug to __init__.py so that it's
11593 automatically executed by anybody using UI code from Thuban.
11594
11595 2002-07-18 Bernhard Herzog <[email protected]>
11596
11597 * Thuban/UI/main.py (main): app no longer needs to be global
11598
11599 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
11600 as parameter and store it in an instance variable
11601 (MainWindow.invoke_command, MainWindow.update_command_ui)
11602 (MainWindow.save_modified_session, MainWindow.NewSession)
11603 (MainWindow.OpenSession, MainWindow.SaveSession)
11604 (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
11605 application object.
11606
11607 * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
11608 the main window with self.
11609
11610 * Thuban/UI/context.py: New module with the context class
11611
11612 * Thuban/UI/command.py (Command): Update doc string.
11613
11614 * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
11615 MainWindow.update_command_ui): Pass an instance of the context
11616 class to the command's methods
11617 (check_current_tool, call_method): Handle the new context
11618 implementation
11619
11620 * Examples/simple_extensions/simple_tool.py (simple_tool,
11621 check_simple_tool): Handle the new context implementation
11622
11623 * Examples/simple_extensions/simple_command.py (simple_command):
11624 Handle the new context implementation. Update the comments about
11625 the context.
11626
11627 * Thuban/UI/application.py (ThubanApplication.SetSession): Add
11628 doc-string
11629 (ThubanApplication.Session): New method to return the session
11630 object
11631
11632 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
11633 interactor's selected_layer may not be a layer of the current
11634 session when the tree is updated while a new session is being set.
11635
11636 2002-07-17 Bernhard Herzog <[email protected]>
11637
11638 * Thuban/UI/tree.py (color_string): Removed. No longer used.
11639 (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
11640 update_tree into update_tree and add_items. The tree now uses a
11641 more generic way to display the contents of the tree.
11642 (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
11643
11644 * Thuban/Model/layer.py (Layer.TreeInfo),
11645 Thuban/Model/extension.py (Extension.TreeInfo),
11646 Thuban/Model/map.py (Map.TreeInfo),
11647 Thuban/Model/session.py (Session.TreeInfo):
11648 Add TreeInfo methods to implement the new tree view update scheme
11649
11650 2002-07-16 Bernhard Herzog <[email protected]>
11651
11652 * Thuban/UI/application.py: Don't use "import from" for the
11653 MainWindow. It can't always be resolved.
11654 (ThubanApplication.OnInit): change reference to MainWindow
11655 accordingly.
11656
11657 * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
11658 completely
11659
11660 2002-07-10 Bernhard Herzog <[email protected]>
11661
11662 * setup.py (create_init_module): New configurable variable whose
11663 default depends on the platform we're running on.
11664 (ThubanInstall.initialize_options): Initialize
11665 self.create_init_module from the global create_init_module
11666 (ThubanInstall.user_options): indictate that the options
11667 create-init-module and init-module-dir have arguments.
11668
11669 * setup.py: In the setup call change the version number to include
11670 cvs.
11671
11672 * MANIFEST.in: Add the files in Examples
11673
11674 2002-07-09 Bernhard Herzog <[email protected]>
11675
11676 * setup.py: In the setup call, use the thuban homepage as the
11677 value of the url parameter.
11678
11679 * Examples: New subdirectory for examples.
11680
11681 * Examples/simple_extensions/simple_tool.xpm,
11682 Examples/simple_extensions/simple_tool.py,
11683 Examples/simple_extensions/simple_command.py,
11684 Examples/simple_extensions/README: Simple examples showing how to
11685 add new commands and tools.
11686
11687 * setup.cfg (bdist_rpm): Add the default value for prefix and tell
11688 bdist_rpm that we also have an install script.
11689 (bdist_inno): Add 2002 to the copyright notice.
11690
11691 * setup.py: Create a file in python's site-packages directory to
11692 make installation of Thuban as a library easier.
11693 (ThubanInstall.user_options): Add two new options,
11694 create-init-module and init-module-dir
11695 (ThubanInstall.expand_with_pure_python_dirs): New method to expand
11696 filenames for installation in the default directories.
11697 (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
11698 the inherited methods to capture some filenames before they're
11699 transformed too much by distutils.
11700 (ThubanInstall.run): Create the init module if requested.
11701 (ThubanInstall.thuban_init_filename): New method to return the
11702 full name of the init module.
11703 (ThubanInstall.get_outputs): Append the filename of the init
11704 module.
11705
11706 2002-07-08 Bernhard Herzog <[email protected]>
11707
11708 * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
11709 handle the prefix properly which means that the default for the
11710 installation prefix should be /usr for RPMs and /usr/local when
11711 doing a normal source install.
11712 (bdist_rpm_install_script): Script to override the default install
11713 commands in the specfile generated by the bdist_rpm command.
11714 (thuban_bdist_rpm.user_options): Add a prefix option
11715 (thuban_bdist_rpm.initialize_options): Init the prefix option.
11716 Create the script files for the spec files as empty files here
11717 (thuban_bdist_rpm._make_spec_file): Override the inherited method
11718 to fill the script files with content.
11719
11720 * Thuban/Model/save.py (relative_filename): Wrapper around
11721 Thuban.Lib.fileutil.relative_filename that accepts an empty dir
11722 argument. save_session now automatically uses this version,
11723 solving a problem when saving to a relative filename.
11724
11725 * setup.py: In the setup call, make sure that the library
11726 directories are under $prefix/lib not directly under $prefix.
11727
11728 2002-06-20 Jan-Oliver Wagner <[email protected]>
11729
11730 * Thuban/Model/extension.py: new module to handle extension objects.
11731 * Thuban/Model/messages.py: new messages for extensions.
11732 * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
11733 Session.AddExtension): new for handling extensions.
11734 Also some other minor changes to round up extension handling.
11735 * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
11736 of Extension titles and title and names of its objects.
11737
11738 2002-05-29 Bernhard Herzog <[email protected]>
11739
11740 * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
11741 the events for a command.
11742 (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
11743 Call bind_command_events to bind the events. add_toolbar_command
11744 can now bind events too so that it's possible to have commands
11745 that are only available through the toolbar.
11746 (MainWindow.init_ids): New instance variable events_bound to keep
11747 track of for which commands events have been bound.
11748
11749 2002-05-28 Bernhard Herzog <[email protected]>
11750
11751 * Thuban/UI/menu.py: New module to build and manage menus.
11752
11753 * Thuban/UI/mainwindow.py: Remove some unused imports.
11754 (MainWindow.__init__, main_menu): move the definition of the main
11755 menu from __init__ to the Menu instance main_menu.
11756 (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
11757 build the menu bar and sub-menus from a menu description.
11758
11759 * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
11760 startup file
11761 (ThubanApplication.read_startup_files): New method to run
11762 ~/.thuban/thubanstart.py
11763
11764 * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
11765 Move the toolbar definition to the Menu instance main_toolbar.
11766 (MainWindow.build_toolbar): New method to build the toolbar
11767 similar to the build_menu methods
11768
11769 2002-05-23 Bernhard Herzog <[email protected]>
11770
11771 * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
11772 layer_outline_color. Fix it in the definition of the command too.
11773
11774 * Thuban/UI/command.py (Command): Fix typo in doc string
11775
11776 2002-05-22 Bernhard Herzog <[email protected]>
11777
11778 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
11779 in the docstring
11780
11781 2002-05-15 Bernhard Herzog <[email protected]>
11782
11783 * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
11784 when the shapefile is empty.
11785 (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
11786 now return None for empty shapefiles. Update doc-strings.
11787
11788 * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
11789 the layer's bbox being None.
11790
11791 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
11792 layer's bbox being None.
11793
11794 * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
11795 necessary.
11796 (MapCanvas.__init__): New instance variables, last_selected_layer
11797 and last_selected_shape to determine how the selection has
11798 changed.
11799
11800 * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
11801 AutoSizeColumns because it will cause a traversal of the entire
11802 table which for large .dbf files will take a very long time.
11803
11804 2002-05-14 Bernhard Herzog <[email protected]>
11805
11806 * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
11807 maximum depth for the tree than shapelib does by default.
11808
11809 2002-05-10 Bernhard Herzog <[email protected]>
11810
11811 * setup.py (py_modules): The shptree modules doesn't have a
11812 wrapper, so don't include it in the py_modules
11813
11814 2002-05-08 Bernhard Herzog <[email protected]>
11815
11816 * extensions/shapelib/shptree.c (compare_ints): Make arguments
11817 const void * as in the qsort prototype
11818 (SHPTreeFindLikelyShapes): Remove some unused variables.
11819
11820 * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
11821 maintains to redraw the window during a drag.
11822 (MapCanvas.unprojected_rect_around_point): New method to determine
11823 a small region around a point for hit-testing.
11824 (MapCanvas.find_shape_at): Only test the shapes in a small region
11825 around the point.
11826
11827 * setup.py: Increment the version to 0.1.2
11828
11829 * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
11830 debug print and set session to None after unsubscribing
11831
11832 2002-05-07 Bernhard Herzog <[email protected]>
11833
11834 * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
11835 the file to have a .thuban extension.
11836
11837 * Thuban/UI/tree.py (session_channels): New class constant with
11838 all the session channels to subscribe to to update the tree
11839 (SessionTreeCtrl.session_changed): Remember the session so that we
11840 can unsubscribe properly. Use the new class constant to
11841 unsubscribe from the old session and subscribe to the new one.
11842 (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
11843 subscriptions of the SessionTreeCtrl.
11844 (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
11845
11846 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
11847 Session Tree" command to the file menu.
11848
11849 * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
11850 as update_region to the renderer.
11851
11852 * Thuban/UI/renderer.py
11853 (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
11854 update box is now directly a tuple, not a wxRect anymore.
11855
11856 * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
11857 prints.
11858
11859 2002-05-07 Bernhard Herzog <[email protected]>
11860
11861 * setup.py: Add the shptree extension module. See
11862 extensions/pyshapelib/ChangeLog for more details.
11863
11864 * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
11865 extensions/shapelib/dbfopen.c: Really update to the versions of
11866 shapelib 1.2.9. For some reason it wasn't really done on
11867 2002-04-11.
11868
11869 * extensions/shapelib/shptree.c: Modified version of shptree.c of
11870 shapelib 1.2.9. The only real difference is the use of qsort
11871 instead of a bubble sort implementation
11872
11873 * Thuban/Model/layer.py (Layer.__init__): New instance variable
11874 shapetree to hold the shapelib quadtree for the shapefile
11875 (Layer.open_shapefile): Create the quad tree.
11876 (Layer.ShapesInRegion): New method to return the ids of shapes in
11877 a given region using the quad tree.
11878
11879 * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
11880 comment
11881 (draw_polygon_shape): Accept both arcs and polygons.
11882 (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
11883 the api.
11884
11885 * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
11886 return the shape ids to be rendered in a given layer.
11887 (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
11888 ids. Use draw_polygon_shape to draw arc shapes as well.
11889 (ScreenRenderer.RenderMap): New parameter for the rectangle that
11890 has to be updated
11891 (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
11892 calling it's ShapesInRegion method.
11893
11894 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
11895 update_region for the update region.
11896 (MapCanvas.OnPaint): Maintain the update region
11897 (MapCanvas.do_redraw): Pass the bounding box of the update_region
11898 to the renderer when drawing the bitmap. Reset the update_region.
11899
11900 2002-05-03 Bernhard Herzog <[email protected]>
11901
11902 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
11903 MainWindow.OpenSession): Change the file extension of the session
11904 files to .thuban
11905
11906 * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
11907 Move the map channels to be forwarded by the session into the
11908 class constant with forwarded_channels. Also add
11909 LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
11910 forwarded_channels
11911
11912 * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
11913 typo and some rewording).
11914
11915 2002-05-02 Bernhard Herzog <[email protected]>
11916
11917 * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
11918 around to speed up most redraws:
11919 (MapCanvas.__init__): New instance variable bitmap which holds the
11920 bitmap
11921 (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
11922 self.bitmap to draw.
11923 (MapCanvas.full_redraw): New method to force a full redraw
11924 including the bitmap
11925 (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
11926 make sure the bitmap is redrawn.
11927 (MapCanvas.projection_changed, MapCanvas.set_view_transform,
11928 MapCanvas.shape_selected): Call full_redraw instead of readraw to
11929 make sure the bitmap is redrawn.
11930 (MapCanvas.OnSize): New method to handle size events so that the
11931 bitmap can be redrawn.
11932
11933 2002-04-29 Bernhard Herzog <[email protected]>
11934
11935 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
11936 canvas' VIEW_POSITION event
11937 (MainWindow.view_position_changed): Handler for VIEW_POSITION.
11938 Update the text in the status-bar accordingly.
11939
11940 * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
11941 (MapCanvas.__del__): Implement because Publisher.__del__ has to be
11942 called.
11943 (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
11944 current_position
11945 (MapCanvas.set_current_position): New method to set
11946 current_position. Issue a VIEW_POSITION event
11947 (MapCanvas.CurrentPosition): New public method to return the value
11948 of current_position. Should be called when the VIEW_POSITION event
11949 is processed.
11950 (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
11951 Update the position.
11952 (MapCanvas.OnLeaveWindow): Set the position to None.
11953
11954 * Thuban/UI/messages.py (VIEW_POSITION): New message for the
11955 position in the statusbar
11956
11957 2002-04-26 Frank Koormann <[email protected]>
11958
11959 * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
11960
11961 2002-04-24 Frank Koormann <[email protected]>
11962
11963 * Resources/Bitmaps/identify.xpm: shadow added
11964
11965 * Resources/Bitmaps/fullextent.xpm: new
11966
11967 2002-04-22 Jan-Oliver Wagner <[email protected]>
11968
11969 * Thuban/UI/tree.py (update_tree): added test for None on map bounding
11970 box
11971
11972 2002-04-21 Jan-Oliver Wagner <[email protected]>
11973
11974 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
11975
11976 * Thuban/UI/tree.py (update_tree): added added map extent
11977
11978 * Thuban/UI/mainwindow.py (_method_command): extended by parameter
11979 icon; added map_full_extend as tool
11980
11981 2002-04-19 Jan-Oliver Wagner <[email protected]>
11982
11983 * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
11984 saving _new_ sessions
11985
11986 * Thuban/Model/session.py (create_empty_session): new session
11987 don't have a filename (set to None)
11988
11989 * Thuban/UI/tree.py (update_tree): added filename and modified flag
11990
11991 * Thuban/Model/load.py (ProcessSession): convert projection
11992 parameters from unicode to regular string
11993
11994 * Data/iceland_sample.session: Added UTM Zone 26 projection.
11995
11996 2002-04-11 Bernhard Herzog <[email protected]>
11997
11998 * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
11999 extensions/shapelib/dbfopen.c: Update to the versions of shapelib
12000 1.2.9
12001
12002 * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
12003 the pyshapelib directoy into the list of include dirs, so that
12004 pyshapelib_api.h can be found.
12005
12006 * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
12007 holds the pyshapelib C-API
12008 (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
12009 pyshapelib_api to access the shapelib functions.
12010 (initwxproj): Import the c_api from the shapelib module and
12011 initialize pyshapelib_api.
12012
12013 2002-04-04 Bernhard Herzog <[email protected]>
12014
12015 * setup.py (thuban_bdist_rpm.initialize_options): Use
12016 initialize_options to create the scripts for the rpm.
12017
12018 * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
12019
12020 2002-04-03 Bernhard Herzog <[email protected]>
12021
12022 * setup.py: Increment version to 0.1.1
12023
12024 * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
12025 Layer" and "Remove Layer" commands from the layer menu to the map
12026 menu
12027
12028 2002-02-15 Bernhard Herzog <[email protected]>
12029
12030 * Thuban/Model/layer.py (Layer.Shape): list append only takes one
12031 argument (python <= 1.5.2 erroneously accepted multiuple
12032 arguments)
12033
12034 2002-02-04 Bernhard Herzog <[email protected]>
12035
12036 * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
12037 RecordGrid in the identifyview.
12038 (IdentifyView.__init__): Use IdentifyGridCtrl instead of
12039 IdentifyListCtrl. The grid allows editing of the values.
12040
12041 * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
12042 implementing a grid for a single row of a thuban table.
12043
12044 * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
12045 layers by default. Easier to use than the previous default of only
12046 searching through the select layer which meant that if no layer
12047 was selected, you couldn't select a shape.
12048
12049 * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
12050
12051 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
12052 stroke_width attribute
12053
12054 * Thuban/Model/save.py (save_session): Write the new stroke_width
12055 attribute
12056
12057 * Thuban/Model/load.py (ProcessSession.startElement): Read the
12058 stroke_width attribute
12059
12060 * Thuban/Model/layer.py (Layer.__init__): New parameter and
12061 instance variable stroke_width
12062 (Layer.SetStrokeWidth): Set the stroke_width.
12063
12064 2002-02-01 Bernhard Herzog <[email protected]>
12065
12066 * extensions/thuban/wxproj.cpp (project_points): Fix two
12067 off-by-one errors in the last loop that joins the various parts
12068 together.
12069
12070 2002-01-14 Bernhard Herzog <[email protected]>
12071
12072 * setup.py (data_dist.make_distribution): Fix some typos
12073
12074 2001-09-18 Bernhard Herzog <[email protected]>
12075
12076 * README: Slight tweaking in preparation for the 0.1 release
12077
12078 * setup.cfg: Add section for sdist to create both tgz and zip
12079 archives
12080
12081 * setup.py: increase version number to 0.1
12082 (data_dist): New command class for data distribution
12083
12084 2001-09-14 Bernhard Herzog <[email protected]>
12085
12086 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
12087 Handle the case of no layer (i.e. layer is None) properly.
12088
12089 * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
12090 Set the initial selection of the combo boxes to reflect the
12091 projection we're starting with in a way that works on windows,
12092 too.
12093
12094 * Thuban/Lib/connector.py (Connector.print_connections): Print the
12095 puiblisher's ids in hex to make it easier to compare them to the
12096 standard repr of python methods
12097
12098 * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
12099 messages
12100
12101 2001-09-13 Bernhard Herzog <[email protected]>
12102
12103 * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
12104 deselect the layer if no layer is selected
12105
12106 * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
12107 idle time when there actually is something to draw. If there's
12108 nothing to draw simply clear the window
12109 (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
12110 (MapCanvas.SetMap): force a redraw in all cases because
12111 FitMapToWindow doesn't always do it.
12112 (MapCanvas.ZoomFactor): Add an optional parameter, center, to
12113 specify the point to move into the center of the window
12114 (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
12115 dragged, zoon in/out by a factor of 2
12116 (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
12117 index, i.e. reversed drawing order) so that objects appearing to
12118 be in from of others are selected first. This is probably mostly
12119 relevant for point shapes where the symbols used may overlap
12120
12121 * Thuban/Model/session.py (create_empty_session): Unset the
12122 modified bit before returning it
12123
12124 * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
12125 create_empty_session session to create the new, empty session.
12126
12127 * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
12128 the tool bitmaps.
12129 (MainWindow.OnClose, MainWindow.save_modified_session): Separate
12130 the code that asks whether the session should be saved into the
12131 new method save_modified_session.
12132 (MainWindow.OpenSession, MainWindow.NewSession): Use the new
12133 method to save modified session here too.
12134
12135 2001-09-11 Bernhard Herzog <[email protected]>
12136
12137 * setup.py (InnoIconItem): fix typo
12138
12139 (thuban_bdist_inno.run):
12140 (bdist_inno.run): Move the decision not to create symlinks on
12141 non-nt platforms to thuban_bdist_inno and do it unconditinally
12142 since we never want to create the symlinks here
12143
12144 2001-09-10 Bernhard Herzog <[email protected]>
12145
12146 * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
12147 identify view immediately
12148
12149 * Thuban/UI/controls.py: New file with two classes RecordListCtrl
12150 and SelectableRecordListCtrl that implement the code shared by the
12151 identify view and the label dialog
12152
12153 * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
12154 new class RecordListCtrl
12155
12156 * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
12157 return value of GetValue is None instead of using it as a boolean
12158 directly so that Zero numbers are handled properly.
12159 (LabelListCtrl): Derive from the new class
12160 SelectableRecordListCtrl
12161
12162 * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
12163 (Proj4Dialog.dialogLayout): Make the window resizable and set the
12164 size of the text control explicitly to make the sizers work on
12165 both Windows and X.
12166
12167 2001-09-07 Bernhard Herzog <[email protected]>
12168
12169 * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
12170 that can limit the search to the currently selected layer.
12171 (MapCanvas.SelectShapeAt): Make sure that the currently selected
12172 layer stays selected even when no shape is found
12173 (MapCanvas.FitRectToWindow): If the rect has zero with or zero
12174 height do nothing (avoids zero division errors)
12175
12176 2001-09-06 Bernhard Herzog <[email protected]>
12177
12178 * Thuban/UI/tree.py (SessionTreeCtrl, SessionTreeView.__init__):
12179 Correct the spelling of SessionTreeCtrl. dabbrev is too damn
12180 convenient :-)
12181 (SessionTreeCtrl.__init__, SessionTreeCtrl.update_tree): Introduce
12182 a new instvar layer_to_item to map layers to tree items
12183 (SessionTreeCtrl.layer_selected): Select the appropriate tree item
12184 to match the current selection in the interactor
12185
12186 * Thuban/UI/interactor.py (Interactor.SelectedLayer):
12187 (Interactor.HasSelectedLayer): New methods to query the current
12188 selection
12189
12190 * Thuban/UI/mainwindow.py (MainWindow.current_layer):
12191 (MainWindow.has_selected_layer): Simply call the appropriate
12192 interactor method
12193
12194 * Thuban/UI/mainwindow.py (MainWindow.__init__):
12195 (MainWindow.LayerShowTable):
12196 (MainWindow.identify_view_on_demand): Store the interactor in an
12197 instvar and use that reference instead of going through main.app
12198
12199 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
12200 * Thuban/UI/application.py (ThubanApplication.OnInit):
12201 * Thuban/UI/main.py (main): Create the session tree view in main
12202 with the new mainwindow method ShowSessionTree and not directly
12203 the application's OnInit method
12204
12205 * Thuban/UI/tree.py (myTreeCtrlPanel):
12206 (SessioinTreeCtrl): Rename to SessioinTreeCtrl and turn it into a
12207 TreeCtrl isntead of a panel. This affects most method since we now
12208 refer to self instead of self.tree
12209 (SessionTreeView): New class implementing a non-modal dialog
12210 showing the session tree.
12211
12212 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Pass the
12213 layer to the tableview dialog.
12214
12215 * Thuban/UI/tableview.py: Add some doc-strings
12216 (TableGrid):
12217 (TableGrid.OnRangeSelect):
12218 (TableGrid.OnSelectCell):
12219 (TableFrame.__init__):
12220 (TableFrame.row_selected):
12221 Selecting rows in the grid view now updates the selected shapes
12222 through the TableFrame. To achieve this we derive TableGrid from
12223 Publisher and introduce the message type ROW_SELECTED which the
12224 TableFrame subscribes to and which is issued by OnRangeSelect and
12225 OnSelectCell
12226
12227 (DataTable.SelectRow): Removed because it's no longer needed in
12228 the row/shape selection scheme
12229
12230 * Thuban/UI/dialogs.py: New file implementing common classes for
12231 dialogs
12232
12233 * Thuban/UI/tableview.py (TableGrid.__init__): Don't subscribe to
12234 the SELECTED_SHAPE message anymore. This is now handled by the
12235 parent.
12236 (TableGrid.select_shape): Only update the selection if the shape
12237 is not None.
12238 (TableFrame): Inherit from the new NonModalDialog class.
12239 (TableFrame.__init__, TableFrame.select_shape): Handle the
12240 SELECT_SHAPE message.
12241 (TableFrame.OnClose): Extend the inherited method to unsubscribe
12242 SELECT_SHAPE
12243
12244 * Thuban/UI/mainwindow.py (MainWindow.init_dialogs):
12245 (MainWindow.add_dialog):
12246 (MainWindow.dialog_open):
12247 (MainWindow.remove_dialog):
12248 (MainWindow.get_open_dialog): New methods to maintain a dictionary
12249 of opened non-modal dialogs.
12250
12251 (MainWindow.__init__): Initialize the new non-modal dictionary
12252 management code
12253 (MainWindow.LayerShowTable): maintain separate dialogs for each
12254 table using the non-modal dialog management code to only open a
12255 view once for each table.
12256
12257 (MainWindow.IdentifyTool):
12258 (MainWindow.__init__):
12259 (MainWindow.identify_view_on_demand): Don't open the identify view
12260 in IdentifyTool anymore. This will be done automatically by the
12261 new method identify_view_on_demand which handles the
12262 SELECTED_SHAPE message so that the identify view will be opened on
12263 demand
12264
12265 * Thuban/UI/identifyview.py (IdentifyListCtrl.__init__): Remove
12266 the interactor argument. The SELECTED_SHAPE message is now handled
12267 by the parent.
12268 (IdentifyView.__init__): Add the interactor argument so that we
12269 can handle the SELECTED_SHAPE message here
12270 (IdentifyView.selected_shape): New method to handle the
12271 SELECTED_SHAPE messages
12272
12273 * Thuban/UI/identifyview.py (IdentifyView): Derive from the new
12274 NonModalDialog class
12275 (IdentifyView.OnClose): Extend the inherited version to
12276 unsubscribe SELECT_SHAPE
12277
12278 * Thuban/Model/session.py (Session.UnsetModified): Remove debug prints
12279
12280 2001-09-05 Bernhard Herzog <[email protected]>
12281
12282 * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
12283
12284 * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
12285 interactor to pass through to the MapCanvas
12286
12287 * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
12288 argument to the MainWindow constructor to get rid of the ugly hack
12289 that made main.app available early just so that the mapcanvas
12290 could access the interactor object.
12291
12292 2001-09-04 Bernhard Herzog <[email protected]>
12293
12294 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): New method
12295 that runs a modal message box
12296 (MainWindow.OnClose): Use the new method
12297 (MainWindow.RemoveLayer): Just do nothing in case no layer is
12298 selected. The command should be grayed out anyway, so there's no
12299 need to pop up a message box.
12300 (MainWindow.AddLayer): Pop up a message box with an error message
12301 if the shape file can't be opened
12302
12303 * Thuban/Model/layer.py (Layer.__init__): Open the shapefile
12304 immediately. This will cause an exception in case the file can't
12305 be opened and we can display an appropriate message.
12306
12307 * MANIFEST.in: Add extensions/pyprojection/LICENSE
12308
12309 * setup.py (thuban_bdist_rpm): New class implementing a Thuban
12310 specific bdist_rpm command.
12311
12312 * Thuban/UI/main.py: Catch ImportError exceptions when importing
12313 the locale module because it may not be available on some
12314 installations.
12315
12316 * extensions/pyprojection/LICENSE: Copy of the license text in
12317 Projection.i. Having it in a separate file makes it easier to
12318 refer to license text in e.g. RPMs
12319
12320 2001-09-03 Bernhard Herzog <[email protected]>
12321
12322 * setup.py: use wx-config instead of wxgtk-config because it's
12323 more generic
12324
12325 * setup.py (ThubanInstall.get_outputs): Add the symlink in
12326 <prefix>/bin to the outputs
12327 (ThubanInstall.link_file): New method to link files. We need this
12328 because the standard copy_files refuses to link non-existing
12329 files.
12330 (ThubanInstall.run): Remove the leading install root from the
12331 script filename if an install root was specified and use the new
12332 link_file method
12333
12334 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
12335 the window when the first layer is added to the map.
12336
12337 * setup.py (ThubanInstall.run): Honor the build root (self.root)
12338 when linking thuban.py to <prefix>/bin
12339
12340 2001-08-31 Bernhard Herzog <[email protected]>
12341
12342 * setup.py: In the setup call, the install parameters shouldn't
12343 have trailing slashes because distutils on non-posix platforms
12344 doesn't like that. The same applies to other directories like
12345 "Resources/Bitmaps"
12346
12347 In the configuration section for nt, move the wxWindows directory
12348 optins into the part clearly marked as editable.
12349
12350 (InstallLocal.initialize_options):
12351 (InstallLocal.user_options): remove the currently unused debug
12352 flag
12353 (thuban_build_py.find_all_modules): Add this method so that it
12354 works for our case of having packages and modules in one
12355 distribution as well.
12356 (ThubanInstall.initialize_options):
12357 (ThubanInstall.finalize_options):
12358 (ThubanInstall.user_options):
12359 (ThubanInstall.boolean_options): Add new options, do-symlink and
12360 extra files. Since these are the first ThubanInstall specific
12361 options, override user_options and boolean_options
12362 (ThubanInstall.run): Honor the new do-symlink and extra-files
12363 options.
12364 (ThubanInstall.get_outputs): Add to override the base-class's
12365 version and add the extra-files to the outputs
12366 (bdist_inno): New class for windows distributions with Inno Setup
12367 (InnoIconItem): Helper class for bdist_inno
12368 (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
12369 this together with the appropriate parameters, to the setup call.
12370
12371 * setup.cfg (bdist_inno): added new section for the inno setup
12372 installer
12373
12374 * Thuban/UI/tree.py (myTreeCtrlPanel.__init__): New inst var
12375 changing_selection to avoid recursive selection events when
12376 modifying the selection in response to a selection event.
12377 (myTreeCtrlPanel.normalize_selection): Set the new inst var when
12378 changing the tree's selection.
12379 (myTreeCtrlPanel.OnSelChanged): Only normalize the selection when
12380 we're not being called indirectly from normalize_selection.
12381
12382 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): Call
12383 event.Check only if the command is actuall checkable.
12384 (MainWindow.__init__): Call the toolbar's Realize method to make
12385 sure that the items are actually shown
12386
12387 2001-08-28 Bernhard Herzog <[email protected]>
12388
12389 * setup.py: Fix some doc strings
12390
12391 * ChangeLog: started
12392

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26