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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2686 - (show annotations)
Wed Jun 28 15:35:46 2006 UTC (18 years, 8 months ago) by dpinte
Original Path: trunk/thuban/ChangeLog
File size: 470082 byte(s)
2006-06-28 Didrik Pinte <dpinte@itae.be>

    * packaging/windows/thubanstart.py: sample file loading all the stable
      extensions


1 2006-06-28 Didrik Pinte <[email protected]>
2
3 * packaging/windows/thubanstart.py: sample file loading all the stable
4 extensions
5
6 2006-06-28 Didrik Pinte <[email protected]>
7
8 * Thuban/version.py: Bugfix determination of SQLite on old and recent
9 systems (support pysqlite1 and pysqlite2)
10
11 2006-06-27 Frank Koormann <[email protected]>
12
13 * Thuban/version.py: Bugfix determination of SQLite on old systems.
14
15 2006-05-17 Didrik Pinte <[email protected]>
16 * Extensions/ogr/__init__.py : updated test for win32 and correct
17 imports
18
19 2006-05-15 Didrik Pinte <[email protected]>
20 Ashamed ... still some tabs in the files
21
22 * Thuban/version.py : tabs removed
23 * Thuban/Model/transientdb.py : tabs removed
24
25 2006-05-15 Didrik Pinte <[email protected]>
26
27 * Thuban/version.py : coding style correction
28 * Thuban/Model/transientdb.py : coding style correction
29
30 2006-05-15 Didrik Pinte <[email protected]>
31
32 * Thuban/version.py : Updated imports to support pysqlite2
33
34 * Thuban/Model/transientdb.py : Updated imports to support pysqlite2
35 Patched the querying system to support the param style of pysqlite2
36
37 2006-04-24 Didrik Pinte <[email protected]>
38 * Extensions/svgexport/__init__.py: The extension now works on win32
39 architecture. Bug #87 corrected.
40
41 2006-04-20 Bernhard Reiter <[email protected]>
42 * Doc/technotes/coding_guidelines.txt: Changed text from CVS to SVN.
43 Removed emacs specific hint and replaced it with a general hint
44 that editors might support writing changelogs.
45
46 2006-04-12 Bernhard Reiter <[email protected]>
47
48 * Thuban/version.py: Changed thuban_release mechanism to use "svn"
49 instead of "cvs".
50
51 2006-03-31 Bernhard Reiter <[email protected]>
52
53 * libraries/thuban/wxproj.cpp: including proj_api.h instead of
54 projects.h now. According the Frank Warmerdam and man pj_init
55 this is the public interface to proj. Thus I have changed PJ to projPJ.
56 And I could remove the hack to avoid clashes with typedef PVALUE
57 and #define LP in projects.h clashing with symbols when trying to
58 build on windows. The file is cleaner and nicer now.
59
60 2006-03-29 Bernhard Reiter <[email protected]>
61
62 * libraries/thuban/wxproj.cpp: undef LP to avoid clash when
63 trying to build with mingw.
64
65 2005-10-18 Bernhard Reiter <[email protected]>
66
67 * Thuban/UI/about.py: remove unused import of getdefaultlocale.
68 Added display of internal encoding to the about dialog text.
69
70 * Extensions/svgexport/__init__.py: changed version to "1.0.0+cvs".
71
72 2005-10-18 Bernhard Reiter <[email protected]>
73
74 Startup improved: We fail right away if the internal encoding could
75 not be determined.
76
77 * Thuban/__init__.py (get_internal_encoding): new.
78
79 * test/test_stringrepresentation.py (class TestInternalEncoding):
80 Preserve the internal encoding for the tests in this class.
81
82 2005-10-17 Bernhard Reiter <[email protected]>
83
84 * test/test_stringrepresentation.py: New file, for now testing
85 that set_internal_coding() is throwing an exception for bad exceptions.
86
87 * Thuban/__init__.py (set_internal_encoding): added a forwards
88 and backward translation, so that we fail early if the
89 internal_encoding is bad.
90
91 2005-10-17 Bernhard Reiter <[email protected]>
92
93 svgexport 1.0.0cvs: Fixed ARC layer writing: No filling is done.
94 You could actually get polylines with filling in between,
95 when the classification for the lines had a fill color.
96 E.g. this happens when you generate a classification from a ramp.
97
98 * Extensions/svgexport/test/test_svgmapwriter.py:
99 New test_export_arc_no_fill(). Extend copyright notice to 2005.
100
101 * Extensions/svgexport/svgmapwriter.py
102 (SVGRenderer.draw_shape_layer_incrementally()):
103 Setting TRANSPARENT_BRUSH for shaptype ARC.
104 Extend copyright notice to 2005.
105
106 * Extensions/svgexport/__init__.py: Extend copyright notice to 2005.
107
108 2005-09-08 Frank Koormann <[email protected]>
109
110 * Doc/manual/thuban-manual.xml (Map Management): Fixed typo reported
111 by Erik (sigra.at.home.se)
112
113 2005-08-18 Jan-Oliver Wagner <[email protected]>
114
115 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
116 Call the right method for the default size.
117
118 2005-08-11 Jan-Oliver Wagner <[email protected]>
119
120 * Extensions/export_shapefile: New.
121
122 * Extensions/export_shapefile/__init__.py: New. Initialize
123 the export_shapefile extension.
124
125 * Extensions/export_shapefile/export_shapefile.py: New.
126 Exports a layer as a Shapefile.
127
128 2005-08-08 Jan-Oliver Wagner <[email protected]>
129
130 * po/de.po: String fixes. This fixes Debian bug #313843.
131
132 2005-07-27 Jan-Oliver Wagner <[email protected]>
133
134 Remove the attributes from the layer element in
135 .thuban files for the save routine.
136 This also solves RT bug #3149,
137 https://intevation.de/rt/webrt?serial_num=3149
138
139 * test/test_load.py: (TestSingleLayer, TestNonAsciiColumnName,
140 TestLayerVisibility, TestSymbolSize, TestClassification, TestLabels,
141 TestLayerProjection, TestJoinedTable, TestLabelLayer): Removed
142 attributes from layer element to classification clnull element.
143
144 * test/test_save.py (SaveSessionTest.testSingleLayer,
145 SaveSessionTest.testLayerProjection,
146 SaveSessionTest.testClassifiedLayer,
147 SaveSessionTest.test_joined_table, SaveSessionTest.test_save_postgis):
148 Removed attributes from layer element to classification clnull element.
149 (test_save_postgis.NonConnectionStore._fetch_table_information):
150 added pretending to have a shape_type.
151
152 * Resources/XML/thuban-1.1.dtd: Make the attributes field
153 and field_type of classification optional.
154
155 * Thuban/Model/classification.py (Classification.TreeItem.build_info):
156 Added output of size.
157
158 * Thuban/Model/load.py (SessionLoader.start_classification):
159 Change attribute 'field' and 'field_type' from obligatory to
160 optional to allow empty classes (ie. only with a default=clnull).
161
162 * Thuban/Model/save.py (SessionSaver.write_layer): Don't write
163 any attributes anymore for the layer element.
164 (SessionSaver.write_classification): Even if there is no
165 classification field, still write the classification because
166 the clnull (default) symbol will not be defined anymore as
167 part of the layer element.
168
169 2005-07-05 Bernhard Herzog <[email protected]>
170
171 * setup.py (setup call): Version 1.1.0
172
173 * NEWS: Update for 1.1.0
174
175 * MANIFEST.in: Add *.txt to files taken from Doc. Otherwise the
176 technores won't be included
177
178 * Thuban/UI/about.py (About.__init__): Extend copyright notice to
179 2005
180
181 * po/de.po: Updated.
182
183 2005-07-05 Bernhard Herzog <[email protected]>
184
185 * README: gdal 1.1.8 is too old. 1.2.5 works.
186
187 2005-07-05 Bernhard Herzog <[email protected]>
188
189 * Resources/XML/thuban-1.1.dtd (rasterlayer): Add the opacity and
190 masktype attributes.
191
192 2005-07-05 Bernhard Herzog <[email protected]>
193
194 * Thuban/Model/layer.py (Layer.__mangle_bounding_box)
195 (Layer.ClipBoundingBox): Rename ClipBoundingBox to
196 __mangle_bounding_box. See the comments in the code and RT #2845
197
198 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
199 Remove the explicit test of ClipBoundingBox. The method isn't
200 public anymore and the direct call in the test wasn't necessary in
201 the first place. If ClipBoundingBox (now __mangle_bounding_box)
202 isn't called, the return value of ShapesInRegion will be
203 different.
204
205 2005-07-05 Bernhard Herzog <[email protected]>
206
207 * Thuban/UI/viewport.py (ViewPort.set_view_transform): Handle
208 ZeroDivisionError exceptions. I don't know when they happen
209 exactly. It probably happens when the projections aren't set
210 properly.
211
212 2005-07-01 Bernhard Herzog <[email protected]>
213
214 First step towards unicode. With this roughly we're at step 1
215 string_representation.txt
216
217 * Doc/technotes/string_representation.txt: New. Document how
218 strings are represented in Thuban and how to get to a Unicode
219 Thuban.
220
221 * Thuban/__init__.py (set_internal_encoding)
222 (unicode_from_internal, internal_from_unicode): New. The first few
223 functions for the internal string representation
224
225 * Thuban/UI/about.py (unicodeToLocale): Removed. Use
226 internal_from_unicode instead.
227
228 * Thuban/UI/__init__.py (install_wx_translation): Determine the
229 encoding to use for the internal string representation. Also,
230 change the translation function to return strings in internal
231 representation even on unicode builds of wxPython
232
233 * Thuban/Model/load.py (SessionLoader.check_attrs): Decode
234 filenames too.
235 (SessionLoader.start_clrange): Use check_attrs to decode and check
236 the attributes.
237
238 * Thuban/Model/xmlreader.py (XMLReader.encode): Use
239 internal_from_unicode to convert unicode strings.
240
241 * Thuban/Model/xmlwriter.py (XMLWriter.encode): Use
242 unicode_from_internal when applicable
243
244 * test/runtests.py (main): New command line option:
245 internal-encoding to specify the internal string encoding to use
246 in the tests.
247
248 * test/support.py (initthuban): Set the internal encoding to
249 latin-1
250
251 * test/test_load.py (TestSingleLayer.test, TestClassification.test)
252 (TestLabelLayer.test): Use the internal string representation when
253 dealing with non-ascii characters
254
255 * test/test_load_1_0.py (TestSingleLayer.test)
256 (TestClassification.test, TestLabelLayer.test): Use the internal
257 string representation when dealing with non-ascii characters
258
259 * test/test_load_0_9.py (TestSingleLayer.test)
260 (TestClassification.test): Use the internal string representation
261 when dealing with non-ascii characters
262
263 * test/test_load_0_8.py (TestUnicodeStrings.test): Use the
264 internal string representation when dealing with non-ascii
265 characters
266
267 * test/test_save.py (XMLWriterTest.testEncode)
268 (SaveSessionTest.testClassifiedLayer): Use the internal string
269 representation when dealing with non-ascii characters where
270 applicable
271
272 2005-06-30 Bernhard Herzog <[email protected]>
273
274 * test/runtests.py: Untabify.
275
276 2005-06-30 Bernhard Herzog <[email protected]>
277
278 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
279 untabify.
280
281 2005-06-30 Bernhard Herzog <[email protected]>
282
283 * Extensions/ogr/test/__init__.py: Add missing coding directive
284
285 2005-06-28 Jan-Oliver Wagner <[email protected]>
286
287 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
288 Use the default size for rendering selected items of default type.
289 Fixes part 2 of https://intevation.de/rt/webrt?serial_num=3149
290
291 2005-06-28 Jan-Oliver Wagner <[email protected]>
292
293 * Extensions/importAPR/apr.py (APR_BShSym): Extend by 'Stripple'.
294 (APR_TClr.GetThubanColor): Fix bug in color interpretation.
295 Thanks to Frank Koormann who identified this problem.
296
297 * Extensions/importAPR/importAPR.py (APR_VShSym): New. Just
298 another symbol identified.
299
300 2005-06-27 Jan-Oliver Wagner <[email protected]>
301
302 * Doc/manual/thuban-manual-de.xml: More translations.
303
304 2005-05-12 Jonathan Coles <[email protected]>
305
306 * Thuban/UI/projdialog.py: Add missing import, which led to an
307 exception when opening a layer's projection.
308
309 2005-05-09 Bernhard Herzog <[email protected]>
310
311 * test/support.py (FileLoadTestCase.filename): Fix doc-string.
312
313 2005-05-09 Bernhard Herzog <[email protected]>
314
315 * Thuban/Model/postgisdb.py (PostGISConnection.connect): Set the
316 connection to autoconnect. Fixes RT#3148.
317
318 * test/test_postgis_db.py
319 (TestPostGISSpecialCases.test_simple_error_handling): New test
320 that attempts to reproduce RT#3148.
321
322 2005-05-06 Jonathan Coles <[email protected]>
323
324 Add support for saving and loading the opacity and mask type
325 properties of RasterLayers. Also add support for proper use
326 of alpha information while drawing images not in 'RAW' format.
327 If transparency in an image format (e.g, PNG) is supported by
328 wxWidgets then the image would previously have been draw with
329 transparent regions, but the opaque regions would have been
330 unaffected by a change in the layer's opacity. This patch
331 corrects the problem.
332
333 * Thuban/Model/layer.py (RasterLayer): Added opacity and
334 masktype parameters to the constructor, and set the
335 appropriate variables to those values.
336
337 * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Added
338 code to read the opacity and mask type of the layer and construct
339 a new layer with the additional parameters.
340
341 * Thuban/Model/save.py (SessionSaver.write_layer): Added code
342 to save the opacity and mask type of a layer.
343
344 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Pass
345 the opacity of the layer to draw_raster_data rather than the layer.
346 (BaseRenderer.draw_raster_data): Remove the layer parameter because
347 the function doesn't need to know about the layer. Add the optional
348 opacity parameter whose default is 1.0. Add 'PNG' as a supported
349 graphics format.
350
351 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Fixed
352 signature to match that in BaseRenderer. Use the new opacity argument
353 in place of calling layer.Opacity(). In the case where the
354 format is not 'RAW', alpha_data is None and the loaded image has
355 alpha information, use the file's alpha information. This is
356 still subject to the layer's opacity setting.
357
358 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data):
359 Fixed signature to match that in BaseRenderer.
360
361 * test/test_load.py (TestRasterLayer): Change file_contents to
362 include opacity and masktype variables.
363 (TestRasterLayer.test): Include tests for opacity and masktype
364 changes.
365
366 * test/test_save.py (SaveSessionTest.testRasterLayer): Restructure
367 test to cover a variety of combinations of masktype and opacity
368 settings.
369
370 2005-05-02 Jan-Oliver Wagner <[email protected]>
371
372 * debian/rules: add --use-wx-python-swig-hack
373 to the build command.
374 Thanks to Moritz Lennert for pointing this out.
375
376 2005-04-28 Jan-Oliver Wagner <[email protected]>
377
378 Introduce OGRFileShapeStore in ogr extension.
379 This allows at least that loaded shapefile shape stores
380 can be saved correctly in the thuban session file
381 and reloaded again (reload is via core shapefile
382 routine, not OGR). For other types, .thuban files
383 can not be reloaded for the time being.
384
385 * Extensions/ogr/ogrshapes.py (OGRFileShapeStore): New. This
386 class ist to be used for any file-based shape stores
387 accessed through OGR.
388
389 * Extensions/ogr/ogrstart.py (open_with_ogr): Added
390 forgotten _ for i18n. Adapted call OpenFileShapestore
391 regarding new parameter.
392 (OpenFileShapestore): Use OGRFileShapeStore instead of
393 OGRShapeStore. Fix return value (None instead of null).
394 Add new parameter "mainwindow" to avoid accessing global
395 context.
396
397 2005-04-27 Jan-Oliver Wagner <[email protected]>
398
399 Introduce FileShapeStore as generalization for
400 file-based shape stores. In a first instance
401 this allows additional modules to handle shapefile
402 format as well, namely the OGR extension.
403
404 * Thuban/Model/data.py: Various small fixes in doc-strings.
405 (FileShapeStore): New class.
406 (ShapefileStore): Derive from FileShapeStore.
407 (ShapefileStore.__init__): Call __init__ of FileShapeStore,
408 rename self.table to self._table, initialize self._bbox
409 (ShapefileStore._open_shapefile): Use self._bbox instead of self.bbox
410 and self.FileName() instead of self.filename.
411 (ShapefileStore.Table): Use self._table instead of self.table.
412 (ShapefileStore.FileName): Removed (moved to FileShapeStore).
413 (ShapefileStore.BoundingBox): Use self._bbox instead of self.bbox.
414
415 * Thuban/Model/save.py: Replace ShapefileStore by FileShapeStore.
416 (SessionSaver.write_data_containers): Only use methods of the
417 base class FileShapeStore.
418
419 2005-04-26 Martin Schulze <[email protected]>
420
421 * Extensions/wms/wms.py (render_wms_layer): Adjusted the render
422 function to the modified render engine
423
424 2005-04-25 Martin Schulze <[email protected]>
425
426 * Thuban/UI/renderer.py (MapRenderer.projected_raster_layer):
427 Added a description according to the CVS log message
428
429 2005-04-23 Martin Schulze <[email protected]>
430
431 * Thuban/UI/renderer.py: Added a missing import
432
433 2005-04-23 Russell Nelson <[email protected]>
434
435 * Thuban/UI/view.py (MapCanvas.OnMiddle{Up,Down}): Changed the
436 way the previous tool is remembered, so that middle-button
437 panning works even if you haven't selected a tool.
438
439 2005-04-11 Bernhard Herzog <[email protected]>
440
441 * libraries/thuban/wxproj.cpp: Move the compatibility code that
442 deals with the wxPython 2.4 version of wxPython.h into the #ifdef
443 branch that includes wxPython.h because it's only needed when
444 wxPython.h is used. Also, it won't compile when
445 USE_WX_PYTHON_SWIG_HACK is set otherwise.
446
447 2005-04-07 Bernhard Herzog <[email protected]>
448
449 * Thuban/UI/classifier.py (ClassGrid.__init__): Use -1 as the ID.
450 (ID_CLASS_TABLE): Removed. It wasn't used anywhere except in
451 ClassGrid.__init__ and it's value is outside of the valid
452 range (must be < 32768). wxPython 2.5 complains about it with an
453 exception.
454
455 2005-04-05 Jan-Oliver Wagner <[email protected]>
456
457 * Doc/manual/thuban-manual-de.xml: More translations.
458
459 2005-04-05 Bernhard Herzog <[email protected]>
460
461 * libraries/thuban/wxproj.cpp: Make it work with a wxPython.h from
462 wxPython 2.4 as well. Also, remove a now obsolete comment.
463
464 2005-04-05 Bernhard Herzog <[email protected]>
465
466 Use wxPython.h by default but provide a workaround when it isn't
467 available.
468
469 * setup.py (wxproj_extension): New variable. Assign the Extension
470 instance for Lib.wxproj to this variable instead of putting it
471 directly into the listso that it can be accessed by other code
472 later.
473 (thuban_build_ext.user_options): Added boolean option
474 --use-wx-python-swig-hack.
475 (thuban_build_ext.initialize_options): Initialize the new option
476 to False.
477 (thuban_build_ext.finalize_options): If the new option was given,
478 define the preprocesser macro USE_WX_PYTHON_SWIG_HACK.
479 (thuban_build_ext): Update the doc-string
480
481 * libraries/thuban/wxproj.cpp: Normally we use
482 wx/wxPython/wxPython.h now. Only if USE_WX_PYTHON_SWIG_HACK is
483 defined, use swigPtrConvertHack.h instead.
484
485 * libraries/thuban/swigPtrConvertHack.h: Remove the code that was
486 copied over from wxPython.h.
487 (decode_pointer_new): New. Equivalent of decode_pointer for
488 wxPython 2.5.
489 (wxPyConvertSwigPtr): Modified to cope with wxPython 2.5 as well.
490
491 * README: Add section on potential build problems which explains
492 how the work-around for a missing wxPython.h is activated.
493
494 2005-03-29 Bernhard Herzog <[email protected]>
495
496 * test/postgissupport.py (find_postgis_sql): Added yet another
497 potential location for (lw)postgis.sql because the file has moved
498 again in postgis 1.0.0 rc4.
499
500 2005-03-29 Bernhard Herzog <[email protected]>
501
502 * Thuban/UI/legend.py (BMP_SIZE_W, BMP_SIZE_H): Set both to 16 to
503 match the site of the legend_icon_layer icon. Otherwise wxpython
504 2.5 complains when the legend is created with the error:
505
506 PyAssertionError: C++ assertion "(bitmap.GetWidth() == m_width &&
507 bitmap.GetHeight() == m_height) || (m_width == 0 && m_height ==
508 0)" failed in ./src/generic/imaglist.cpp(81): invalid bitmap size
509 in wxImageList: this might work on this platform but definitely
510 won't under Windows.
511
512 2005-03-23 Jonathan Coles <[email protected]>
513
514 These changes add support for adjusting the opacity of a raster layer.
515
516 * Thuban/Model/layer.py (RasterLayer.Opacity): Replaces AlphaOpacity.
517 (RasterLayer.SetOpacity): Replaces SetAlphaOpacity. Also triggers
518 a LAYER_CHANGED event if the opacity actually changes.
519
520 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_data): Added
521 layer parameter needed in the implementation of this method in
522 renderer.py.
523
524 * Thuban/UI/layerproperties.py (LayerProperties.dialog_layout): Fixed
525 typo 00 -> 0.
526
527 * Thuban/UI/rasterlayerproperties.py (RasterLayerProperties): Added
528 control to adjust opacity.
529
530 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Scale the
531 alpha data based on the opacity level of the layer.
532
533 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Now
534 accepts a layer parameter.
535
536 * test/test_layer.py (TestLayerModification.test_raster_layer):
537 Rename opacity method calls and add test for LAYER_CHANGED.
538
539 2005-03-16 Bernhard Herzog <[email protected]>
540
541 * test/test_connector.py (DeletionTestMixin.check_deletions)
542 (DeletionTestMixin.check_deletetions): renamed to check_deletions.
543 update the callers.
544
545 2005-03-14 Jan-Oliver Wagner <[email protected]>
546
547 * Doc/manual/thuban-manual-de.xml: More translations.
548
549 2005-03-10 Jan-Oliver Wagner <[email protected]>
550
551 Introducing initialization callbacks for extensions.
552
553 * Thuban/UI/extensionregistry.py (ExtensionDesc.__init__): Added
554 optional parameter init_callback.
555 (ExtensionDesc.init_ext): New. Executes the callback and sets
556 a status.
557
558 * Thuban/UI/application.py (ThubanApplication.OnInit): Add the
559 initialization of the extensions.
560 (ThubanApplication.init_extensions): Init all extensions.
561
562 * Thuban/UI/about.py (About.__init__): Added status of the extensions
563 to the about text.
564
565 * Extensions/gns2shp/__init__.py: Added init method for Extension
566 description.
567 (init): New. Contains the initialization of the module.
568
569 2005-03-04 Nina Hüffmeyer <[email protected]>
570
571 * Extensions/ogr/ogrdialog.py: Added a dialog, which asks for
572 OGRConnection to open a datasource. Removed dialog to display all
573 available drivers. Added some doc strings.
574
575 * Extensions/ogr/ogrstart.py: Added menu entry for opening an
576 OGRDatasource with a string. Added two opening methods which return an
577 OGRDatasource (either data from file or from DB).
578
579 * Extensions/ogr/ogrshapes.py: Added class OGRGeometry, which
580 represents a geometry reference of an OGRFeature. OGRShape now has a
581 list of referenced geometry objects (important for geometry
582 collections).
583 For OGRShapeStores loaded from a DB an ID column can be specified now.
584
585 2005-02-22 Jan-Oliver Wagner <[email protected]>
586
587 * test/test_map.py (TestMapWithContents.test_tree_info):
588 Added label layer for comparison.
589
590 2005-02-18 Jonathan Coles <[email protected]>
591
592 * libraries/thuban/gdalwarp.cpp (GetImageData): Optimize the loop
593 which builds a mask. Handle the majority of an image in a loop,
594 creating 8 bits at a time. Later, handle the edge case where less
595 than 8 bits are packed.
596
597 2005-02-18 Bernhard Herzog <[email protected]>
598
599 * test/test_baserenderer.py (TestBaseRenderer.setUp): Fix
600 doc-string
601
602 2005-02-18 Jonathan Coles <[email protected]>
603
604 * setup.py: Remove wx_cs_params from gdal compile options.
605
606 2005-02-18 Jonathan Coles <[email protected]>
607
608 Refactored baserenderer.py and renderer.py to remove baserenderer.py's
609 dependencies on wxPython. Added a new method projected_raster_layer()
610 that returns a raster layer image in projected space. This must be
611 implemented in classes derived from BaseRenderer. This also eliminates
612 the dependency on gdal in baserenderer.py.
613
614 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Call
615 new projected_raster_layer() to get projected raster image instead
616 of directly calling ProjectRasterFile().
617 (BaseRenderer.projected_raster_layer): New. This must be implemented
618 by derived classes. It takes almost the same arguments as ProjectRasterFile
619 did and returns a projected image with mask and alpha data (if requested).
620 (BaseRenderer.render_map_incrementally): Remove the check for gdal since
621 that check will be done in MapRenderer.projected_raster_layer(). This
622 also allows other implementations to use different projection code.
623
624 * Thuban/UI/renderer.py (MapRenderer.projected_raster_layer):
625 Implementation of BaseRenderer.projected_raster_layer. Checks for
626 gdal support and wxPython version. Also handles exceptions from
627 ProjectRasterFile.
628
629 * libraries/thuban/gdalwarp.cpp: Removed checks for wxPython versions
630 and added a variable which can be set through the options argument
631 of ProjectRasterFile.
632
633 * test/test_baserenderer.py (SimpleRenderer.projected_raster_layer): New.
634 Calls ProjectRasterFile and returns the result.
635 (TestBaseRenderer.test_projected_raster_layer): New. Tests the results
636 of calling projected_raster_layer() with different options.
637 (TestBaseRenderer.test_raster_no_projection): Removed tests based on
638 wxPython version and all tests of masks and alpha channels. These are
639 now in test_projected_raster_layer().
640
641 2005-02-17 Jan-Oliver Wagner <[email protected]>
642
643 * Thuban/Model/map.py, Thuban/Model/label.py: Fixed
644 doc-strings to comply with coding_guidelines.
645
646 2005-02-17 Jan-Oliver Wagner <[email protected]>
647
648 Docstring improvements and minor fixes for labellayer.
649
650 * Thuban/Model/map.py:
651 (Map, Map.Destroy, Map.RemoveLayer, Map.ClearLayers,
652 Map.Layers, Map.HasLayers, Map.MoveLayerToTop,
653 Map.RaiseLayer, Map.LowerLayer, Map.MoveLayerToBottom,
654 Map.ProjectedBoundingBox, Map.GetProjection): Improved/added
655 doc string.
656 (Map.BoundingBox): Removed superfluous test for label_layer
657 and improved doc string.
658 (Map.TreeInfo): Added label_layer and improved sdo string.
659
660 * Thuban/Model/label.py: Added import of _.
661 (Label, Label.__init__): Improved/added doc string.
662 (LabelLayer, LabelLayer.__init__, LabelLayer.Labels,
663 LabelLayer.RemoveLabel, LabelLayer.ClearLabels):
664 Improved/added doc string.
665 (LabelLayer.AddLabel): Use already defined names for
666 align strings and improved doc string.
667 (LabelLayer.TreeInfo): New. Return the object data for
668 the tree view.
669
670 2005-02-16 Jonathan Coles <[email protected]>
671
672 Further wxPython 2.5 changes using patches from Daniel Calvelo Aros
673 so that that wxproj doesn't crash. Added GUI support for selecting
674 alpha channel (opacity can't be selected yet).
675
676 NOTE: If wxPython.h is including in future distribution packages
677 then it will not be necessary to have the files swigPtrConvertHack.h
678 and wxPython_int.h included with Thuban. This is hopefully
679 a temporary workaround.
680
681 * setup.py (thuban_build_ext.finalize_options): gdalwarp needs
682 access to the macro wxCHECK_VERSION so that it will properly
683 generate a bit mask. There was a problem between wx2.4 and wx2.5
684 that this works around.
685
686 * Thuban/Model/layer.py (RasterLayer.UseMask): Removed in favor
687 of RasterLayer.MaskType.
688 (RasterLayer.SetUseMask): Removed in favor of RasterLayer.SetMaskType
689 (RasterLayer.MaskType): New. Returns the type of mask to use. Can
690 specify none, a bitmap, or an alpha channel.
691 (RasterLayer.SetMaskType): New. Set what kind of mask to use.
692
693 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer):
694 Set the raster warping options for the mask based on the value
695 of RasterLayer.MaskType.
696
697 * Thuban/UI/legend.py (LegendTree.__FillTreeLayer): Remove
698 deprecated calls to SetItemSelectedImage in favor of SetItemImage
699 with wxTreeItemIcon_Selected.
700
701 * Thuban/UI/rasterlayerproperties.py: Support selecting to use
702 an alpha channel for the mask.
703
704 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Use alpha
705 data if it is available and an alpha channel is supported under
706 the current version of wxPython.
707
708 * libraries/thuban/gdalwarp.cpp (GetImageData): Added compiler define
709 to select whether 1's or 0's select the desired portion of an image
710 in the bit mask. wx2.4 has a bug where the documentation is the opposite
711 from behavior.
712 (ProjectRasterFile): Only generate an alpha channel if the version
713 of wxPython is >= 2.5.3.
714
715 * libraries/thuban/wxproj.cpp: Applied patches from Daniel Calvelo Aros.
716 When wxPython >= 2.5.3 use the special swig functions to decode an
717 object's address.
718
719 * libraries/thuban/swigPtrConvertHack.h: Includes conditional code
720 based on the version of wxPython. If >= 2.5.3 use the special swig
721 functions from wxPython to decode wxPython objects, otherwise use
722 the old method of retrieving the address from the object __repr__ string.
723
724 * libraries/thuban/wxPython_int.h: Copied from wxPython source.
725 Unnecessary code was removed to make it smaller.
726
727 * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
728 Add tests for returning an alpha channel.
729
730 * test/test_layer.py (TestLayerModification.test_raster_layer): Fix
731 tests that used removed functions UseMask and SetUseMask
732
733
734 2005-02-08 Bernhard Herzog <[email protected]>
735
736 More wxPython 2.5 changes. This time taken from a patch from
737 Daniel Calvelo Aros.
738
739 * Thuban/UI/tableview.py (QueryTableFrame.__init__)
740 (QueryTableFrame.__init__): Pass the size of a spacer as a single
741 item.
742
743 * Thuban/UI/projdialog.py (ProjFrame.build_dialog)
744 (ProjFrame.build_dialog): Pass the size of a spacer as a single
745 item.
746
747 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Pass the
748 size of a spacer as a single item.
749
750 * Thuban/UI/classifier.py (Classifier.dialog_layout): Pass the
751 size of a spacer as a single item.
752
753 2005-02-08 Bernhard Herzog <[email protected]>
754
755 Compatibility with wxPython 2.5. The changes should make it work
756 better with 2.5 while still keeping compatibility with 2.4. There
757 are still problems with 2.5, though.
758
759 * Thuban/UI/dock.py (DockableWindow.__CreateBorder): Pass the size
760 of a spacer as a single item.
761
762 * Thuban/UI/classifier.py (ClassGroupPropertiesCtrl): Derive only
763 from wxControl
764
765 * Thuban/UI/legend.py (LegendTree): When running with wxPython <
766 2.5, add an implementation of the GetFirstChild method that does
767 not require the second parameter.
768 (LegendTree.find_layer, LegendTree._OnMsgMapLayersAdded)
769 (LegendTree._OnMsgMapLayersRemoved, LegendTree.DeleteAllItems)
770 (LegendTree.DeleteChildren, LegendTree.__ShowHideLayer): Do not
771 pass the second parameter to GetFirstChild
772
773 2005-02-08 Nina Hüffmeyer <[email protected]>
774
775 * Extensions/ogr/ogrshapes.py: Removed some print commands.
776
777 * Extensions/ogr/ogrstart.py: Changed the GUI. OGR is no longer an
778 additional menu but appears as a possibility in the menu Map.
779
780 2005-02-07 Jonathan Coles <[email protected]>
781 * libraries/thuban/gdalwarp.cpp: Removed the macros PYTHON_ERR
782 and PYTHON_ERRF since they were no longer necessary.
783
784 2005-02-07 Bernhard Reiter <[email protected]>
785 * Thuban/UI/classifier.py (ClassGrid.DeleteSelectedRows):
786 Enable translation for message string.
787
788 2005-02-06 Martin Schulze <[email protected]>
789
790 * Extensions/wms/infodialog.py (wmsInfoDialog.__init__): Adjusted
791 the arguments of the contstructor to fit the global scheme
792
793 2005-01-31 Nina Hüffmeyer <[email protected]>
794
795 * Extensions/ogr/ogrdialog.py: Added class ogrdialog.py, which provides
796 some dialogs needed to start ogr.
797
798 * Extensions/ogr/__init__.py: Changed comments to avoid encoding
799 warnings.
800
801 * Extensions/ogr/test/test_OGRShapestore.py: Changed comments to avoid
802 encoding warnings.
803
804 2005-01-28 Jonathan Coles <[email protected]>
805
806 * libraries/thuban/gdalwarp.cpp (GetImageData): Recode how the
807 mask is packed into a bit array. It's now slightly faster.
808
809 2005-01-28 Jonathan Coles <[email protected]>
810
811 * Thuban/Model/layer.py (RasterLayer.__init__): Make use_mask
812 default to true.
813
814 * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Remove
815 code that loads the state of the layer's use_mask flag. Its
816 usefulness is still being debated.
817
818 * Thuban/Model/save.py (SessionSaver.write_layer): Remove
819 code that saves the state of the layer's use_mask flag. Its
820 usefulness is still being debated.
821
822 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Pass
823 options to ProjectRasterFile based on the state of layer.UseMask().
824 Catch more exceptions from ProjectRasterFile so that Thuban doesn't
825 quit is there is a problem projecting.
826 (BaseRenderer.draw_raster_data): Change the documentation to
827 describe the new format (XBM) that the mask data will be in.
828
829 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): The mask
830 data is in XBM format when format='RAW' which means it doesn't
831 need to be converted to a wxImage before being used as a mask
832 for a wxBitmap. Assume that if format != 'RAW' that the image
833 data and mask data are in the same format.
834
835 * libraries/thuban/gdalwarp.cpp (GetImageData): If alpha is enabled
836 and a mask is requested, convert the alpha band to a bit array in
837 XBM format. if an alpha channel is requested, simply return the
838 data in the alpha band. Provide better error handling by returning
839 python error messages (also fixes RT #2947).
840 (ProjectRasterFile): Support multiple mask options, rather than simply
841 a flag indicating that a mask should or should not be used. Provide
842 better error handling by returning python error messages.
843
844 * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
845 Add mask data to test.
846
847 * test/test_layer.py (TestLayer.test_raster_layer): Test that a layer
848 should use the mask by default.
849 (TestLayerModificaton.test_raster_layer): Test that a layer should use
850 the mask by default.
851
852 * test/test_load.py (TestRasterLayer.test): Remove testing for
853 use_mask flag in file.
854
855 * test/test_save.py (SaveSessionTest.testRasterLayer): Remove testing
856 for use_mask in file.
857
858 * test/test_load_1_0_1.py: Removed. Shouldn't have been checked in.
859
860 2005-01-26 Jonathan Coles <[email protected]>
861
862 Add a new dialog box for raster layers. The dialog box allows
863 the user to toggle a mask that is generated by ProjectRasterFile
864 and is used to only draw the real parts of the projected image.
865
866 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer):
867 Instruct the warping code to generate a mask if the raster layer
868 requests one.
869 (BaseRenderer.draw_raster_data): Removed obsolete optional mask argument.
870
871 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Removed
872 obsolete optional mask argument.
873
874 * Thuban/UI/classifier.py (Classifier): Change the parent class
875 to LayerProperties and rework the code to support layout calls
876 from the parent.
877 (Classifier.dialog_layout): New. Layout the dialog box.
878 (Classifier.map_layers_removed): Removed. Moved to parent class.
879 (Classifier.map_replaced): Removed. Moved to parent class.
880 (Classifier._OnTry): Renamed to OnTry to support parent class.
881 (Classifier.OnClose): Removed. Supplied in parent class.
882 (Classifier._OnCloseBtn): Removed. Supplied in parent class as OnCloseBtn.
883 (Classifier._OnOK): Renamed to OnOK to support parent class.
884 (Classifier._OnRevert): Renamed to OnRevert to support parent class.
885
886 * Thuban/UI/layerproperties.py: New. Base class for layer properties
887 dialog boxes.
888
889 * Thuban/UI/rasterlayerproperties.py: New. Class for displaying
890 raster layer properties.
891
892 * libraries/thuban/gdalwarp.cpp: Replace the old gdalwarp.cpp code
893 with the non-simple version supplied with gdal. This allows added
894 features such as creating an alpha band.
895 (GetImageData): Generate a mask array from the alpha band that is
896 generated by gdal if the user has selected it. Try to support images
897 that have more than three bands, such as images with RGB plus an
898 alpha band.
899 (ProjectRasterFile): Convert python argument for mask and tell
900 gdal to enable or disable an alpha band.
901
902 * Thuban/Model/layer.py (BaseLayer.Type): New. Returns a string
903 describing what kind of layer the class is. Defaults to "Unknown",
904 but should be overridden by subclasses.
905 (Layer.Type): New. Override base class method.
906 (RasterLayer.__init__): Create a flag for using a mask. Record extra
907 data from gdal for display in the properties dialog.
908 (RasterLayer.Type): New. Override base class method.
909 (RasterLayer.UseMask): New. Returns True if the mask should be used.
910 (RasterLayer.SetUseMask): New. Set if the mask should be used.
911 (RasterLayer.ImageInfo): New. Return extra information about the image.
912
913 * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Load
914 the mask information.
915
916 * Thuban/Model/save.py (SessionSaver.write_layer): Save mask information.
917
918 * Thuban/UI/mainwindow.py: Register the RasterLayerProperties and
919 Classifier classes as dialogs to use with the proper layer types.
920
921 * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
922 Fix test.
923
924 * test/test_layer.py (TestLayer.test_raster_layer): Test new methods.
925 (TestLayerModification.build_path): New. Support function.
926 (TestLayerModification.test_raster_layer): New. Test new methods.
927
928 * test/test_save.py (SaveSessionTest.testRasterLayer): Add tests for mask.
929
930 * test/test_load.py (TestRasterLayer): Add tests for mask.
931
932 * test/test_load_1_0_1.py: New. Copied from test_load.py.
933
934 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Removed
935 obsolete optional mask argument.
936
937 2005-01-26 Nina Hüffmeyer <[email protected]>
938
939 * Extensions/ogr/ogrshapes.py: Added two dictionaries to ShapeStore
940 which maps the ids and the ordinals. Fixed RowIdToOrdinal(),
941 RowOrdinalToId() and ReadRowAsDict().
942
943 * Extensions/ogr/ogrstart.py: Added menu item which opens database
944 layers for existing database connections.
945
946 * Extensions/ogr/test/test_OGRShapestore.py: Fixed a message string.
947
948
949 2005-01-26 Jan-Oliver Wagner <[email protected]>
950
951 * Doc/manual/thuban-manual-de.xml: More translations.
952
953 2005-01-24 Bernhard Herzog <[email protected]>
954
955 Rework the status bar updates a bit to make sure the message about
956 the projections is produced at the right times.
957
958 * Thuban/UI/mainwindow.py (MainWindow.update_status_bar_messages):
959 New class variable with messages that may require a status bar
960 update.
961 (MainWindow.view_position_changed)
962 (MainWindow.update_status_bar): Rename from view_position_changed
963 to update_status_bar. It's meaning has changed now that it may
964 also generate messages about problems with projection settings.
965 (MainWindow.__init__): Use the new update_status_bar_messages
966 class variable to subscribe update_status_bar
967 (MainWindow.set_position_text): Update doc-string. This method
968 has to be renamed at some point. See doc-string and comments.
969 (MainWindow.OnClose): Unsubscribe update_status_bar from all
970 messages in update_status_bar_messages
971
972 * Thuban/UI/viewport.py (ViewPort.forwarded_map_messages): New
973 class attribute. map messages to be forwarded by the viewport.
974 (ViewPort._subscribe_map, ViewPort._unsubscribe_map): (un)subscribe
975 the messages in forwarded_map_messages
976
977 2005-01-21 Bernhard Herzog <[email protected]>
978
979 * test/postgissupport.py (PostGISDatabase.__init__): Tweak
980 doc-string
981 (find_postgis_sql): Update for postgis-1.0.0-rc1, which uses a
982 different name for the initialization SQL file.
983
984 2005-01-21 Jonathan Coles <[email protected]>
985
986 * Thuban/UI/baserenderer.py (proj_params_to_str): New. Takes
987 a projection and returns a formatted string representing the
988 parameters to feed to gdalwarp. This function eliminates
989 redundancy in draw_raster_layer().
990 (BaseRenderer.render_map_incrementally): Removed the optimization which
991 drew the top most raster layer first and then only those vector-
992 based layers that are above it. With the support for transparency
993 this optimization breaks correct behaviour.
994 (BaseRenderer.draw_raster_layer): Reorganize code to support possible
995 future enhancements to raster layer bounding box. The old behaviour has
996 not changed. Also, change calling parameters to draw_raster_data()
997 to specify new RAW data format and mask.
998 (BaseRenderer.draw_raster_data): Change signature to include an optional
999 parameter for mask information. Change documentation to mention
1000 support for new parameter and added option for RAW data format.
1001 The data argument is now a list of [width, height, data].
1002
1003 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Add new optional
1004 mask parameter. Add new condition for RAW format, which
1005 significantly reduces rendering time. Add condition for
1006 mask parameter.
1007
1008 * libraries/thuban/gdalwarp.cpp (GetImageData): New. Creates a
1009 data array of RGB values from the projected image returned from
1010 the gdal warping functions. In the case of palette based images, it
1011 converts the NO_DATA index to the mask color.
1012 (ProjectRasterFile): Removed all custom memory driver references
1013 and replaced it with the standard in-memory dataset provided
1014 by gdal. The return data is no longer a BMP file, but an array
1015 of RGB values, one set triple per pixel.
1016
1017 * libraries/thuban/bmpdataset.cpp: Removed. Unnecessary.
1018 * libraries/thuban/cpl_mfile.h: Removed. Unnecessary.
1019 * libraries/thuban/cpl_mfile.cpp: Removed. Unnecessary.
1020
1021 * setup.py (thuban_build_ext.finalize_options): Removed mention
1022 of cpl_mfile.cpp and bmpdataset.cpp files in the list of source
1023 files. These are obsolete with the new version of gdalwarp.cpp
1024
1025 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data):
1026 Updated signature.
1027 (TestBaseRenderer.test_raster_no_projection): Changed the test
1028 data to be data in the uncompressed RAW format returned from
1029 ProjectRasterFile.
1030
1031 2005-01-21 Jan-Oliver Wagner <[email protected]>
1032
1033 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Made
1034 string available for i18n.
1035
1036 2005-01-20 Russell Nelson <[email protected]>
1037
1038 * Resources/Projections/defaults.proj: Ruin the speling of the
1039 Lambert-93 projection so it doesn't run into the wx UTF-8 bug.
1040 It's the wrong thing to do in the long run, but it's necessary for
1041 those users until that bug is fixed. Otherwise the projection
1042 dialog segfaults. Better to annoy some Lambert-93 users with a
1043 spelling mistake than every Fedora Core 3 user of Thuban-CVS.
1044
1045 2005-01-20 Bernhard Reiter <[email protected]>
1046
1047 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Added
1048 docstring and comment that the warning code here is a hack.
1049
1050 2005-01-20 Russell Nelson <[email protected]>
1051
1052 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Warn
1053 user about misprojected layers when their lat/lon bounding
1054 box exceeds rational lat/lon values.
1055
1056 2005-01-20 Bernhard Reiter <[email protected]>
1057
1058 * Thuban/UI/about.py (unicodeToLocale): Improved:
1059 Use 'ascii' and then 'replace' for other characters
1060 when getdefaultlocale returns None. Thanks to Bernhard H. .
1061
1062 2005-01-20 Bernhard Reiter <[email protected]>
1063
1064 * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Added a comment
1065 that OnRangeText might be called twice and using None as argument.
1066
1067 2005-01-20 Bernhard Reiter <[email protected]>
1068
1069 * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Add a
1070 OnRangeText(0) to work around a different in wx Behaviour noticed
1071 on MacOSX, thanks to Lorenzo Moretti and Daniel Calvelo for the fix.
1072
1073 2005-01-20 Bernhard Reiter <[email protected]>
1074
1075 * Thuban/UI/about.py: take iso-8859-15 when getdefaultlocale returns
1076 None. (Fixes rt#2910.)
1077
1078 2005-01-18 Frank Koormann <[email protected]>
1079
1080 New Extension: mouseposition
1081 Tool to collect mouse click positions (map coordinates) in a dialog.
1082
1083 * Extensions/mouseposition/__init__.py: New, extension registration
1084
1085 * Extensions/mouseposition/mouseposition.py: New, implements the
1086 dialog and adds a tool to Thuban mainwindow.
1087
1088 * Extensions/mouseposition/position.xpm: New, icon for tool.
1089
1090 2005-01-14 Jan-Oliver Wagner <[email protected]>
1091
1092 * Doc/manual/thuban-manual-de.xml: More translations.
1093
1094 2005-01-11 Frank Koormann <[email protected]>
1095
1096 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
1097 Fix indention bug.
1098
1099 2005-01-09 Frank Koormann <[email protected]>
1100
1101 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
1102 BugFix 2901: Explicitly copy layers ClassificationColumn since it
1103 is not part of the layers Classification.
1104
1105 2005-01-03 Frank Koormann <[email protected]>
1106
1107 * Thuban/UI/renderer.py (ScreenRendererdraw_selection_incrementally):
1108 BugFix 2883: Former implementation only worked on classified point
1109 layers: KeyError was raised, now use the default size if field is None.
1110
1111 2004-12-27 Bernhard Reiter <[email protected]>
1112
1113 svgexport 1.0.0cvs: Fixed label export.
1114
1115 * Extensions/svgexport/test/test_svgmapwriter.py:
1116 class TestSVGRenderer(): New class; new test test_label_font().
1117
1118 * Extensions/svgexport/svgmapwriter.py
1119 (SVGRenderer.label_font()): initialised Font size with self.factor now,
1120 makes test_label_font happy.
1121
1122 * Extensions/svgexport/TODO: crossed out fixed label export item.
1123 Added item for options.
1124
1125 * Extensions/svgexport/__init__.py: Bumped version to 1.0.0cvs.
1126
1127 2004-12-27 Russell Nelson <[email protected]>
1128
1129 Middle mouse button pans.
1130
1131 * Thuban/UI/view.py (MapCanvas.__init__): Subscribe also
1132 OnMiddleDown and OnMiddleUp events.
1133 (MapCanvas.OnMiddleDown): New. Activate the pan tool and remember the
1134 previously used tool.
1135 (MapCanvas.OnMiddleUp): New. Reactivate the remebered tool used before
1136 pressing the middle mouse button.
1137
1138 2004-12-27 Jan-Oliver Wagner <[email protected]>
1139
1140 * Doc/manual/thuban-manual-de.xml: More translations.
1141
1142 2004-12-23 Jan-Oliver Wagner <[email protected]>
1143
1144 * Thuban/UI/projdialog.py (ProjFrame.load_user_proj): Added a
1145 \n to stderr after the warnings. Thanks to Russell Nelson.
1146
1147 2004-12-20 Nina Hueffmeyer <[email protected]>
1148
1149 * Extensions/ogr/ogrshapes.py: Fixed some issues from
1150 Bernhard (coding guidelines etc.). Additionally it is now possible to
1151 display shapefiles containing feature collections (e.g.polygons
1152 with holes). Works with gdal 1.2.1 now.
1153
1154 * Extensions/ogr/test/test_OGRShapestore.py: Fixed some issues
1155 from Bernhard (coding guidelines etc.). If ogr can't be imported,
1156 tests are skipped now.
1157
1158 * Extensions/ogr/ogrstart.py: Fixed some typings.
1159
1160 2004-12-20 Bernhard Reiter <[email protected]>
1161
1162 * Extensions/svgexport/TODO: updated to add support for
1163 raster layers and labels for 1.0.1.
1164
1165 * Extensions/svgexport/svgmapwriter.py (draw_raster_layer):
1166 Issue a warning now.
1167
1168 2004-12-19 Bernhard Reiter <[email protected]>
1169
1170 * Extensions/svgexport/TODO: Added idea to support triggering
1171 the application down the pipe.
1172
1173 2004-12-19 Bernhard Reiter <[email protected]>
1174
1175 svgexport: Improved code quality, mainly by better naming.
1176
1177 * Extensions/svgexport/svgmapwriter.py:
1178 DrawPath() renamed to DrawPolygonPath(),
1179 added documentation, improved comments and variable names.
1180
1181 * Extensions/svgexport/svgmapwriter.py,
1182 Extensions/svgexport/test/test_svgmapwriter.py:
1183 All using DrawPolygonPath() now, the default parameter closed=True
1184 omitted.
1185
1186 * Extensions/svgexport/test/test_svgmapwriter.py:
1187 renamed test_polygon_opened() to test_polyline()
1188 renamed test_transparent_polygon() to test_transparent_polyline()
1189
1190 2004-12-18 Jan-Oliver Wagner <[email protected]>
1191
1192 Some fixes of gns2shp extension.
1193
1194 * Extensions/gns2shp/test/__init__.py: New. Make this directory a
1195 package.
1196
1197 * Extensions/gns2shp/test/test_gns2shp.py: Add some import paths
1198 dynamically.
1199
1200 * Extensions/gns2shp/test/README: Simplified description how to test.
1201
1202 * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed doc-string,
1203 fixed some dimensions of fields according to the GNS documentation
1204 which seems to change undocumented.
1205 Now killing trailing \n and/or \r from MODIFY_DATE.
1206 This fixes RT#2453.
1207
1208 2004-12-18 Bernhard Reiter <[email protected]>
1209
1210 svgexport 1.0.0: Treats holes and islands nicely. Documentation added.
1211
1212 * Extensions/svgexport/test/test_svgmapwriter.py:
1213 Added new tests: test_export_polygon_with_hole()
1214 and test_polygon_with_hole().
1215
1216 * Extensions/svgexport/svgmapwriter.py
1217 (draw_polygon_shape()): Uses DrawPath correctly now.
1218
1219 * Doc/manual/thuban-manual.xml: Added documentation for stable
1220 extention svgexport.
1221 * Doc/manual/thuban-manual-de.xml: Copied English section about
1222 svexport over.
1223
1224 * Extensions/svgexport/__init__.py: Bumped version number to 1.0.0.
1225
1226 * Extensions/svgexport/svgsaver.py,maplegend.py:
1227 Moved from experimental to stable extension menu.
1228
1229 * Extensions/svgexport/TODO: updated.
1230
1231
1232 2004-12-18 Bernhard Reiter <[email protected]>
1233
1234 Added Extensions/svgexport/TODO
1235
1236 2004-12-18 Bernhard Reiter <[email protected]>
1237
1238 Refactored in svgexport:
1239 DrawPath replaces DrawPolygon; added newline in front of "M" in paths.
1240
1241 * Extensions/svgexport/svgmapwriter.py
1242 Added verbosity level 3 to print out polygon points.
1243 (class Point): added __repr__
1244 (class Brush, __str__()): Added space after ,.
1245 (DrawPolygon): Renamed to DrawPath()
1246 (DrawPath): Takes list of polygons as input now, adds \n before "M"s.
1247 (DrawLines): Using DrawPath now.
1248
1249 * Extensions/svgexport/test/test_svgmapwriter.py:
1250 Replaced DrawPolygon() calls with DrawPath() and put the first argument
1251 inside another list. Adapted test data with a newline before "M".
1252
1253 2004-12-18 Bernhard Reiter <[email protected]>
1254
1255 Refactored svgexport tests: 9 double tests runs eliminated;
1256 code size reduced by 8 lines.
1257
1258 * Extensions/svgexport/test/test_svgmapwriter.py:
1259 (class TestWithDC): Renamed to BaseTestWithDC, moved to top.
1260 (class BaseWithDCtools): New, subclass from BaseTestWithDC.
1261 (class TestDrawSplines): now subclass from BaseTestWithDCtools,
1262 this fixed the double running of the nine tests of TestVirtualDC.
1263 (class TestVirtualDC): Using self.dc and self.file from setUp().
1264
1265 2004-12-17 Bernhard Herzog <[email protected]>
1266
1267 Two windows specific fixes ported from thuban-1­0-branch:
1268
1269 * Thuban/UI/about.py (unicodeToLocale): Use getdefaultlocale
1270 instead of getlocale because getlocale doesn't return a usable
1271 encoding name on a german windows 2000
1272
1273 * setup.py: windows build: Removed the absolute path names and
1274 made all prfixes relative to the directory containing setup.py.
1275 Makes it a little easier to adapt to a different system.
1276
1277 2004-12-16 Bernhard Herzog <[email protected]>
1278
1279 Add support for PostGIS tables with LINESTRING geometries.
1280 Fixes RT#2299
1281
1282 * Thuban/Model/postgisdb.py (shapetype_map): Add LINESTRING
1283
1284 * test/postgissupport.py
1285 (PostgreSQLServer.get_default_static_data_db): Rename the "roads"
1286 table to "roads-multi" because it now uses MULTILINESTRING
1287 geometries and introduce a new "roads" table that uses LINESTRING
1288 (coords_to_multilinestring): Make the doc string more precise
1289 (coords_to_linestring): New. Create a LINESTRING WKT
1290 representatin
1291 (wkt_converter): Add coords_to_linestring
1292 (upload_shapefile): Rephrase the doc-string a bit.
1293
1294 * test/test_postgis_db.py (TestPostGISShapestoreArc)
1295 (LineStringTests)
1296 (TestPostGISShapestoreLineString)
1297 (TestPostGISShapestoreMultiLineString): Split
1298 TestPostGISShapestoreArc into a base class LineStringTests and two
1299 derived classes TestPostGISShapestoreLineString for LINESTRING
1300 geometries and TestPostGISShapestoreMultiLineString for
1301 MULTILINESTRING geometries. Most test methods are in the base
1302 class with the exception of tests that explicitly check the raw
1303 format.
1304
1305 2004-12-16 Bernhard Herzog <[email protected]>
1306
1307 Make the test suite work with PostGIS 0.8.2 and PostgreSQL 7.4
1308
1309 * test/postgissupport.py (find_postgis_sql): Different postgis
1310 versions put the postgis.sql file into slightly different places
1311 so we have to look in both. The updated doc string describes this
1312 is more detail.
1313
1314 * test/test_postgis_db.py
1315 (TestPostGISSpecialCases.test_column_name_quoting): The return
1316 value of UniqueValues is unsorted, so it has to be sorted for
1317 comparison.
1318
1319 2004-12-16 Bernhard Herzog <[email protected]>
1320
1321 Fix for RT#2237
1322
1323 * Thuban/UI/projdialog.py (ProjFrame._show_proj_panel): If the
1324 panel to be shown is the UnknownProjPanel disable the OK and Try
1325 buttons. Otherwise enable them.
1326 (ProjFrame.__GetProjection): The UnknownProjPanel returns None for
1327 the parameters. In that case __GetProjection also returns None
1328 now.
1329
1330 2004-12-15 Bernhard Herzog <[email protected]>
1331
1332 * Thuban/UI/classgen.py (GenQuantilesPanel.__init__): Set the
1333 minimum number of classes to 2. The calculate_quantiles needs at
1334 least two and raises an exception otherwise.
1335 Fixes RT#2549
1336
1337 2004-12-15 Bernhard Herzog <[email protected]>
1338
1339 * test/postgissupport.py (PostgreSQLServer.execute_sql): Extend to
1340 so that it returns a result for select statements.
1341 (PostgreSQLServer.server_version): New. Return the version of the
1342 server software.
1343 (PostgreSQLServer.require_authentication): The format of
1344 pg_hba.conf has changed between PostgrSQL 7.2 and 7.3. Check the
1345 server version and generate the file in the correct format
1346
1347 2004-12-15 Bernhard Herzog <[email protected]>
1348
1349 * test/postgissupport.py (PostgreSQLServer.is_running): Fix typo
1350 in the doc string and rephrase it a little.
1351
1352 2004-12-15 Frank Koormann <[email protected]>
1353
1354 * test/test_load.py (TestAltPath.checkSession): New, extended checks if
1355 session has been loaded successfully. The check is called by the relevant
1356 tests after executing load_session().
1357
1358 2004-12-13 Bernhard Herzog <[email protected]>
1359
1360 Make sure the region used to determine which shapes are visible
1361 actually matches the region on the printed page. If this isn't
1362 done properly some shapes might not be printed.
1363 Fixes RT #2692
1364
1365 * Thuban/UI/view.py (MapPrintout.draw_on_dc): The region for the
1366 renderer has to be at the same position as the mapregion
1367
1368 * Thuban/UI/renderer.py (ExportRenderer.RenderMap): self.region
1369 has to be moved by (self.shiftx, self.shifty) too.
1370
1371 2004-12-13 Bernhard Herzog <[email protected]>
1372
1373 * libraries/pyprojection/Projection.i: Work around a bug in the
1374 generated python code which leads to exception in the __del__
1375 method when the constructor fails. See the comments in the code
1376 for more details.
1377
1378 * libraries/pyprojection/Projection.py: Updated from Projection.i
1379 with SWIG.
1380
1381 2004-12-13 Bernhard Herzog <[email protected]>
1382
1383 * test/test_load.py (TestAltPath.test_01_single_path_error_fix)
1384 (TestAltPath.test_02_path_error_fix_from_list)
1385 (TestAltPath.test_05_path_error_fix_from_list_changed)
1386 (TestAltPath.test_06_path_error_fix_from_list_fails): self.session
1387 is destroyed in tearDown, so there's no need to do it in a test
1388 case.
1389
1390 * Thuban/Model/load.py (SessionLoader.open_shapefile): Remove a
1391 debug print
1392
1393 2004-12-13 Bernhard Herzog <[email protected]>
1394
1395 * Extensions/svgexport/test/test_svgmapwriter.py
1396 (TestDrawSplines.setUp): Do not use super with the unittest
1397 classes because in Python 2.2 they're still old-style classes.
1398
1399 2004-12-13 Frank Koormann <[email protected]>
1400
1401 Alternative Path feature: When loading a (moved) session where
1402 shapefiles cannot be found, ask the user. Use the specified path
1403 if further shapefiles are missing. However, ask the usr for confirmation
1404 in such cases.
1405
1406 * test/test_load.py (TestAltPath): New, tests for alternative path feature
1407 in load_session()
1408 (Shapefile_CallBack): Helper, implements controllable callback.
1409
1410 * Thuban/UI/application.py (ThubanApplication.OnInit):
1411 Added "alt_path" to self.path
1412 (ThubanApplication.OpenSession): Added shapefile_callback as second
1413 callback similar to db_connection_callback.
1414 (ThubanApplication.run_alt_path_dialog): New, implementaion of
1415 shapefile_callback. In addition to raising the dialog the control of
1416 self.path('alt_path') is implemented here.
1417
1418 * Thuban/Model/load.py (SessionLoader.__init__): Added shapefile_callback.
1419 (SessionLoader.open_shapefile): Open shapefile, eventually with
1420 alternative path. This wrapps the "theSession.OpenShapefile(filename)"
1421 formerly used in start_fileshapesource()/start_layer().
1422 (SessionLoader.start_fileshapesource): Call open_shapefile().
1423 (SessionLoader.start_layer): Call open_shapefile().
1424 (load_session): Added shapefile_callback.
1425
1426 * Thuban/UI/altpathdialog.py: New, implements dialogs for alternative path
1427 feature (search / check).
1428
1429 * Doc/manual/thuban-manual.xml: Added documentation of new feature.
1430
1431 2004-12-11 Bernhard Reiter <[email protected]>
1432
1433 svgexport 0.9.2: Point size supports for maps.
1434
1435 * Extensions/svgexport/svgmapwriter.py: Added import of SHAPETYPE_POINT
1436 (def draw_point_shape): new parameter size defaults to 2 as before.
1437 (draw_shape_layer_incrementally): Moved draw_func log line higher.
1438 Added draw_func call with size when dealing with a point layer.
1439
1440 * Extensions/svgexport/__init__.py: bumped version to 0.9.2.
1441
1442 2004-12-11 Bernhard Reiter <[email protected]>
1443
1444 Made sure that newlines are inserted in the svg path d attributes
1445 to raise the chance that the line length will be below 255 characters,
1446 as recommended by REC SVG 1.1 in section 8.3.1.
1447
1448 * Extensions/svgexport/svgmapwriter.py(DrawPolygon):
1449 Adding \n before L's and changed whitespace handling.
1450
1451 * Extensions/svgexport/test/test_svgmapwriter.py:
1452 Adapted tests to new whitespace handling of DrawPolygon.
1453
1454 2004-12-11 Bernhard Reiter <[email protected]>
1455
1456 * Doc/technotes/coding_guidelines.txt: easy typo fixed.
1457
1458 * Extensions/svgexport/test/test_svgmapwriter.py:
1459 Removed test_drawbezier in favour of new test_drawspline3 and
1460 test_drawspline4 within new class TestDrawSplines(TestVirtualDC).
1461 All only to test DrawSpline.
1462
1463 * Extensions/svgexport/svgmapwriter.py(DrawSpline):
1464 New implementation now really using the strange algorithm of
1465 xfig 3.1's approximated splines and its conversion to postscript
1466 with one twist: SVG can do quadratic beziers, so skipped translation
1467 to cubic beziers.
1468 (TestWithDC): Typo in comment fixed.
1469
1470 2004-12-09 Martin Schulze <[email protected]>
1471
1472 * Thuban/Model/classgen.py: Added missing character encoding
1473
1474 * Extensions/wms/properties.py (OpenWMSProperties): removed
1475
1476 * Extensions/wms/parser.py (WMSCapabilitiesParser.error): Dropped
1477 support for get_srs_discrepancies() since there are no
1478 discrepancies anymore (was a thinko)
1479
1480 * Extensions/wms/layer.py (WMSLayer.GetMapImg): Improved graphic
1481 format priority now that more formats are supported globally by
1482 the render engine.
1483
1484 2004-12-08 Silke Reimer <[email protected]>
1485 * Extensions/ogr/ogrshapes.py: Substituted ogr-method CloseRings
1486 because it is not available in all versions of ogr
1487
1488 2004-12-08 Bernhard Reiter <[email protected]>
1489 * Extensions/ogr/__init__.py: Added empty __init__.py to heal
1490 global tests until a real one is commited.
1491
1492 2004-12-07 Nina Hüffmeyer <[email protected]>
1493
1494 * /Extensions/ogr/: Adding a new extension to read shapefiles with
1495 ogr. It is planned to add other vector formats.
1496
1497 * /test/runtests.py: Adding tests from /Extensions/ogr/test/.
1498
1499 2004-12-07 Jan-Oliver Wagner <[email protected]>
1500
1501 * /Extensions/svgexport/test/test_svgmapwriter.py: Reverting
1502 part of a (non-)fix to renable that the tests are always
1503 executed.
1504
1505 2004-12-07 Bernhard Reiter <[email protected]>
1506
1507 * Extensions/svgexport/test/test_svgmapwriter.py:
1508 Added test_drawbezier() to test DrawSpline().
1509
1510 * Extensions/svgexport/svgmapwriter.py(DrawSpline):
1511 Really implemented bezier drawing.
1512
1513 * Extensions/svgexport/__init__.py: Bumped version of svgexport
1514 to 0.9.1 because now the legend examples lines styles
1515 will be drawing with beziers.
1516
1517 2004-12-05 Martin Schulze <[email protected]>
1518
1519 * Thuban/UI/renderer.py (raster_format_map): Added PNG, TIFF and
1520 GIF as supported bitmap image formats (helpful for the WMS extension)
1521
1522 2004-11-30 Martin Schulze <[email protected]>
1523
1524 * Extensions/wms/test/test_ogclib.py (TestOGCLib.test_compareURLs):
1525 Improved the test for the internal compare method
1526
1527 2004-11-27 Jan-Oliver Wagner <[email protected]>
1528
1529 * Thuban/UI/about.py (About.__init__): Added
1530 Norbert Solymosi for hungarian translation and Ole Rahn
1531 as contrbutor. Moved Bernhard Reiter from Contributor
1532 to Developer.
1533
1534 2004-11-27 Bernhard Reiter <[email protected]>
1535
1536 * Extensions/svgexport/test/test_svgmapwriter.py:
1537 Removed Jan from author list as he did not change enough significant
1538 lines yet.
1539
1540 * Extensions/svgexport/__init__.py: Added Bernhard as author
1541 of the Extension.
1542
1543 2004-11-27 Jan-Oliver Wagner <[email protected]>
1544
1545 * po/hu.po: New. Hungarian translation. Contributed
1546 by Norbert Solymosi.
1547
1548 2004-11-26 Bernhard Herzog <[email protected]>
1549
1550 * Extensions/svgexport/test/test_svgmapwriter.py
1551 (Testobjectexport.test_transparent_polygon): Commented out some
1552 debug prints
1553
1554 2004-11-24 Jan-Oliver Wagner <[email protected]>
1555
1556 Fix broken tests for svg extension and added svg legend
1557 to Experimental menu.
1558
1559 * Extensions/svgexport/test/test_svgmapwriter.py: Fix to have
1560 the test run correctly even if the extension is a package.
1561 Also removed the "import Thuban" which makes no sense.
1562
1563 * Extensions/svgexport/__init__.py: Fix to have the extensions'
1564 test module also be executed from the global test routine.
1565 This is done by looking for the absense of the DISPLAY variable.
1566
1567 * Extensions/svgexport/maplegend.py: Moved the menu entry from Extensions
1568 to Experimental menu since this module has yet not reached a stable
1569 status (ie. 1.0).
1570
1571 2004-11-22 Bernhard Reiter <[email protected]>
1572
1573 * Extensions/svgexport/svgmapwriter.py:
1574 Added verbose variable and some logging depending on it.
1575 (class VirtualDC(XMLWriter)): Minor improvement in the polygon loop,
1576 because counting i is not necessary.
1577 (class Pen, class Brush): Added simple __str__ methods.
1578 (SVGRenderer.draw_polygone_shape): Fix #2698 (transparent polygons are
1579 not exported to svg file) Note: holes still unhandled.
1580
1581 * Extensions/svgexport/test/test_svgmapwriter.py:
1582 Made a baseclass TestWithDC for test needed a DC.
1583 Added tests for bug #2698 (transparent polygons are not
1584 exported to svg file):
1585 Testobjectexport.test_transparent_polygon()
1586
1587 * Thuban/Model/base.py (UnsetModified):
1588 Fixed some typos in docstring.
1589
1590 * Thuban/UI/baserenderer.py (BaseRenderer.draw_polygon_shape()):
1591 Added hints on the used algorithm for handling holes.
1592
1593 2004-11-20 Jan-Oliver Wagner <[email protected]>
1594
1595 Some face lifting for the examples.
1596
1597 * Examples/__init__.py: Make this directory a package.
1598
1599 * Examples/simple_extensions/__init__.py: Make this directory a package.
1600
1601 * Examples/simple_extensions/hello_world.py: Moved entry from Extensions
1602 menu to Examples menu.
1603
1604 * Examples/simple_extensions/simple_command.py: Some more comments,
1605 minor changes.
1606
1607 * Examples/simple_extensions/simple_tool.py: Minor changes.
1608
1609 2004-11-20 Jan-Oliver Wagner <[email protected]>
1610
1611 Changed way of extension registry for wms and added extension
1612 registry for umn_mapserver extension.
1613
1614 * Extensions/wms/__init__.py: Added registry entry and the importing
1615 of the actual wms module. Included a test for the required PyOGCLib.
1616
1617 * Extensions/wms/wms.py: Removed registry entry (moved to __init__.py).
1618
1619 * Extensions/umn_mapserver/__init__.py: Added registry entry and the
1620 importing of the actual umn mapserver management modules.
1621 Included a test for the required Python MapScript.
1622
1623 2004-11-20 Jan-Oliver Wagner <[email protected]>
1624
1625 Changed way of extension registry for importAPR, bboxdump
1626 and added extension registry for svgexport.extension registry for
1627 svgexport.
1628
1629 * Extensions/importAPR/__init__.py: Added registry entry and the importing
1630 of the actual importAPR module.
1631
1632 * Extensions/importAPR/importAPR.py: Removed registry entry (moved to
1633 __init__.py).
1634
1635 * Extensions/bboxdump/__init__.py: Added registry entry and the importing
1636 »···of the actual bboxdump module.
1637
1638 * Extensions/bboxdump/bboxdump.py: Removed registry entry (moved to
1639 »···__init__.py).
1640
1641 * Extensions/svgexport/__init__.py: Added registry entry and the importing
1642 of the svgsaver module.
1643
1644 * Extensions/svgexport/svgsaver.py: Moved the menu entry from Extensions
1645 to Experimental menu since this module has yet not reached a stable
1646 status (ie. 1.0).
1647
1648 2004-11-18 Jan-Oliver Wagner <[email protected]>
1649
1650 Now the hit test considers the size of point symbols.
1651
1652 * Thuban/UI/viewport.py (ViewPort._hit_point): Added optional parameter
1653 'size' defaulting to the previously fixed value 5.
1654 Extended doc-string.
1655 (Viewport._find_shape_in_layer): Resolved FIXME regarding flexibility
1656 for symbols.
1657 Now the size of the largest point symbol is determined to find out
1658 about whether the point has been hit.
1659 This fixes the problem that only clicks inside a fixed distance of
1660 5 where found.
1661
1662 2004-11-17 Jan-Oliver Wagner <[email protected]>
1663
1664 Another open issue fixed regarding sizeable symbols: correct rendering of
1665 selected symbols.
1666
1667 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
1668 Added consideration of the specific size of point symbols.
1669 The property for each point symbol is retrieved and the size applied
1670 for the rendering method.
1671 Added doc-string.
1672
1673 2004-11-16 Jan-Oliver Wagner <[email protected]>
1674
1675 Changed way of Extension Registry for gns2shp and profiling.
1676
1677 * Extensions/gns2shp/gns2shp.py: Removed registry entry (moved to
1678 __init__.py).
1679
1680 * Extensions/gns2shp/__init__.py: Added registry entry and the importing
1681 of the actual gns2shp module.
1682
1683 * Extensions/profiling/profiling.py: Removed registry entry (moved to
1684 __init__.py).
1685
1686 * Extensions/profiling/__init__.py: Added registry entry and the importing
1687 of the actual profiling module.
1688
1689 2004-10-28 Bernhard Reiter <[email protected]>
1690
1691 * Extensions/svgexport/: Minor improvements to doc strings.
1692
1693 2004-10-07 Jan-Oliver Wagner <[email protected]>
1694
1695 Further elements for sizable point objects now
1696 making this feature usable though not yet complete.
1697
1698 * Thuban/Model/save.py (SessionSaver.write_classification): Write
1699 attribute 'size' for cldata when the shape layer is of point type.
1700 This also now make the test_load.py tests happy.
1701
1702 * Thuban/Model/classgen.py (CustomRamp.GetProperties): Added size
1703 gradient.
1704
1705 * Thuban/UI/classifier.py (ID_SELPROP_SPINCTRL): Renamed to
1706 ID_SELPROP_SPINCTRL_LINEWIDTH.
1707 (ID_SELPROP_SPINCTRL_LINEWIDTH): New Id replaces ID_SELPROP_SPINCTRL.
1708 (ID_SELPROP_SPINCTRL_SIZE): New Id.
1709 (SelectPropertiesDialog.__init__): Added a second spin control
1710 for the size in case the corresponding layer is of point type.
1711 (SelectPropertiesDialog._OnSpin): Renamed to _OnSpinLineWidth.
1712 (SelectPropertiesDialog._OnSpinLineWidth): New. Former _OnSpin.
1713 (SelectPropertiesDialog._OnSpinSize): New. Set size of property
1714 and refresh preview.
1715
1716
1717
1718 2004-10-04 Martin Schulze <[email protected]>
1719
1720 * Extensions/wms/test/test_parser.py
1721 (TestWMSCapabilitiesParser.test_compareLists): Added missing
1722 self-test for compareLists()
1723 (TestWMSCapabilitiesParser.test_compareDicts): Added missing
1724 self-test for compareDicts()
1725 (TestWMSCapabilitiesParser.test_compareLists): Adding more tests
1726 to verify the test routine fails with non-equal arguments
1727 (TestWMSCapabilitiesParser.test_compareDicts): Adding more tests
1728 to verify the test routine fails with non-equal arguments
1729
1730 2004-10-03 Jan-Oliver Wagner <[email protected]>
1731
1732 First elements for sizeable point objects.
1733
1734 * Resources/XML/thuban-1.1.dtd: Added size attribute to cldata.
1735
1736 * Data/iceland_sample_size.thuban: New. Sample for sized point objects.
1737
1738 * test/test_load.py (ClassificationTest.TestLayers): Added SetSize in case
1739 of a corresponding argument is given.
1740 (TestSymbolSize): New. Test the size attribute of cldata.
1741
1742 * Thuban/Model/classification.py: Removed some trailing whitespaces.
1743 (ClassGroupProperties.__init__): Set default size.
1744 (ClassGroupProperties.SetProperties): Set the size.
1745 (ClassGroupProperties.GetSize): New. Return the size.
1746 (ClassGroupProperties.SetSize): New. Set the size.
1747 (ClassGroupProperties__eq__): Compare also size.
1748 (ClassGroupProperties__repr__): Print also size.
1749
1750 * Thuban/Model/load.py (SessionLoader.start_cldata): Also parse
1751 the size attribute.
1752
1753 * Thuban/UI/classifier.py (ClassDataPreviewer.Draw): Added doc-string.
1754 Also, now there is a return value that indicates whether the drawing
1755 size exceeded the given rect extent and if so the new extent.
1756 Finally, point objects are drawn depending on the size. If either
1757 the width or height is exceeded, the new extent is returned.
1758 (ClassRenderer.Draw): Now when calling the previewer drawing function,
1759 evaluate the return value and, if not None, adapt the grid widget size
1760 accordingly and redraw again.
1761
1762 * Thuban/UI/baserenderer.py (BaseRenderer.draw_shape_layer_incrementally):
1763 If the draw function is for points, call it with the size as additional
1764 parameter.
1765 (BaseRenderer.draw_point_shape): Added additional, optional parameter for
1766 the size. Compute the radius using the size.
1767
1768 * Extensions/importAPR/apr.py (APR_BMkSym.GetThubanProp): Now
1769 that Thuban supports size, apply this correctly.
1770
1771 * Extensions/importAPR/importAPR.py: Bumped version to 0.1.1.
1772
1773 2004-10-03 Jan-Oliver Wagner <[email protected]>
1774
1775 * Doc/manual/thuban-manual-de.xml: Started translation of
1776 Map chapter.
1777
1778 2004-10-01 Martin Schulze <[email protected]>
1779
1780 * Extensions/wms/properties.py (wmsProperties.__init__): Extended
1781 argument for general use through properties-dialog selector
1782
1783 * Thuban/UI/classifier.py: Register properties dialog classes for
1784 both provided layer classes/types.
1785
1786 * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): The
1787 map can be retrieved through the parent which is passed to the
1788 constructor anyway and doesn't require an argument of its own,
1789 required for the unification of arguments for general use through
1790 properties-dialog selector.
1791 (MainWindow.OpenOrRaiseDialog): Move the logic for checking
1792 whether a dialog is already opened (and raising it to the users
1793 attention) and creating a new dialog into a function of its own
1794 (MainWindow.OpenLayerProperties): Use the new OpenOrRaiseDialog()
1795 method
1796 (MainWindow.OpenLayerProperties): Utilise the new ClassMapper for
1797 global registration of properties dialog classes (which are indeed
1798 layer-specific).
1799
1800 * Thuban/UI/classifier.py (Classifier.__init__): Unify arguments
1801 for general use through properties-dialog selector, the map can be
1802 retrieved through the parent and doesn't require an argument of
1803 its own.
1804
1805 * Extensions/wms/wms.py: Register the properties dialog class for
1806 the provided WMS layer
1807
1808 2004-09-28 Jan-Oliver Wagner <[email protected]>
1809
1810 New feature: Registry for Extensions.
1811
1812 * Thuban/UI/extensionregistry.py: This module defines a registry for
1813 Extensions.
1814
1815 * Thuban/UI/about.py (About.__init__): Added description
1816 of the registered extensions with all of the information.
1817
1818 * Thuban/Model/extension.py (Extension): Improved doc-string.
1819
1820 * Extensions/gns2shp/gns2shp.py, Extensions/importAPR/importAPR.py,
1821 Extensions/bboxdump/bboxdump.py, Extensions/profiling/profiling.py,
1822 Extensions/wms/wms.py: Added registration of the extension.
1823
1824 2004-09-27 Bernhard Reiter <[email protected]>
1825
1826 More fixes to svgexport to make used ids unique and
1827 conforming to XML's Name production.
1828
1829 * Extensions/svgexport/test/test_svgmapwriter.py: Added new tests
1830 test_xml_id_constraints(), test_make_ide_nosetbaseid() and
1831 test_make_id_nonintegersetid(). Switched SetID and SetBaseID.
1832 Added Bernhard R. as author.
1833 * Extensions/svgexport/svgmapwriter.py (make_id): Using "_" as
1834 concatenation char now (makes test_make_ide_nosetbaseid() valid).
1835 Also transform second id part with "%d" and catch the TypeError
1836 to raise SVGMapWriterError (making test_make_id_nonintegersetid() ok).
1837 Corrected typo inBernhard's author line.
1838 (SetBaseID): Return the transformed base id. Transform characters
1839 which are not alnum() or in ".-_" to binascii.b2a_hex(). Added
1840 import binascii. If to be set string starts with "xml" or so, add "t".
1841 (draw_shape_layer_incrementally): use the returned value of SetBaseID
1842 for used_baseids checks.
1843
1844 2004-09-25 Bernhard Herzog <[email protected]>
1845
1846 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
1847 Remove a debug print and some tab characters.
1848
1849 2004-09-25 Bernhard Reiter <[email protected]>
1850
1851 * Extensions/svgexport/svgmapwriter.py: Added Bernhard R. as Author.
1852 (SetBaseID, SetID, make_id): Improved docstring comments to explain
1853 the interaction of the three functions and the XML id contrains.
1854
1855
1856 2004-09-23 Jan-Oliver Wagner <[email protected]>
1857
1858 * Doc/ThubanModel.xmi: New. UML file for Thuban Model
1859 Module.
1860
1861 * Doc/README: Added info on ThubanModel.xmi.
1862
1863 2004-09-23 Jan-Oliver Wagner <[email protected]>
1864
1865 * Doc/README: New. Some info about how to generate technical
1866 documentation from the source code.
1867 This text was send to the Thuban developer mailing list on
1868 September 21st 2004 by Bernhard Reiter.
1869
1870 2004-09-21 Bernhard Reiter <[email protected]>
1871
1872 Improved the svgexport to only use unique ids. Will issues
1873 an error message dialoge when two layer names are the same.
1874 ShapeIDs are now added with a dash within the svg ids.
1875
1876 * Extensions/svgexport/svgmapwriter.py (SVGMapWriterError): New.
1877 * Extensions/svgexport/test/test_svgmapwriter.py: Added imports
1878 (TestSVGRenderer): New test class with test_make_in() and
1879 test_check_for_layer_name_clash()
1880 * Extensions/svgexport/svgmapwriter.py (SVGRenderer): Fixed __init__()
1881 and draw_shape_layer_incrementally() to not use a baseid twice,
1882 satisfying test_check_for_layer_name_clash()
1883 (VirtualDC.make_id): Use a dash between baseit and id, satisfies
1884 test_make_in().
1885 * Extensions/svexport/svgsaver.py: Import SVGMapWriterError, wxOK
1886 and wxICON_HAND.
1887 (write_to_svg): Put dc and rendering in a try statement and on
1888 catching SVGmapWriterError notify the user and delete the target file.
1889
1890 2004-09-20 Bernhard Reiter <[email protected]>
1891
1892 * Model/base.by, Model/layer.py: Fixed typos in docstrings.
1893
1894 2004-09-03 Jan Schüngel <[email protected]>
1895
1896 * Extensions/umn_mapserver/mapfile(MF_Class.add_thubanstyle): Fix a
1897 small bug with the line color. Now the line color will now only set
1898 if it is set in Thuban an not Transparent.
1899
1900 * Extensions/umn_mapserver/mf_export(tblayer_to_map): Fixed a bug with
1901 deleting the layers from mapfile. Now all layers will delete backwards
1902 from the last.
1903
1904 2004-08-20 Silke Reimer <[email protected]>
1905
1906 * Thuban/Model/layer.py:
1907 Fixes bug in projection handling: Otherwise very large region might not
1908 have valid values in the layer's projection.
1909
1910 2004-08-20 Silke Reimer <[email protected]>
1911
1912 * Thuban/UI/about.py:
1913 small changes to be consistent with coding style.
1914
1915 2004-08-13 Martin Schulze <[email protected]>
1916
1917 * Extensions/wms/test/test_ogclib.py (TestOGCLib.compare_URLs):
1918 Adjusted a comment
1919
1920 2004-08-11 Silke Reimer <[email protected]>
1921
1922 * Thuban/UI/about.py: Small changes to encoding related stuff to avoid
1923 too many and too enhanced imports of locale
1924
1925 2004-08-10 Silke Reimer <[email protected]>
1926
1927 * Thuban/UI/about.py: Fixed encoding problem of about dialog: Added
1928 function unicodeToLocale() to convert special characters to users
1929 locale encoding
1930
1931 2004-08-10 Jan-Oliver Wagner <[email protected]>
1932
1933 * Doc/technotes/coding_guidelines.txt: Added rule 'Method names start with
1934 lower case letter'
1935
1936 2004-08-09 Jan Schüngel <[email protected]>
1937
1938 * ChangeLog: Rewrite the last ChangeLog entry to follow
1939 the standard way.
1940
1941 * Extensions/umn_mapserver/mapfile: Moved the import AnnotationLayer to
1942 the function where it is needed, because it don't works if it stands
1943 at the beginning.
1944 (MF_Layer.__init__): Removed the extra numclassed variable. Now
1945 numclasses from the mapscript will be used.
1946 (MF_Layer.get_index): New. Return the index of the layer in mapfile.
1947 (MF_Layer.set_classes): New. A Classlist will be set to the layer.
1948 (MF_Layer.set_metadata): New. A Metadata mapscript object will set.
1949 (MF_Layer.remove_allclasses): New. All class of the layer will remove.
1950 (MF_Map.create_new_layer): New. A new Layer is created and associated
1951 with the mapscript object.
1952 (MF_Map.set_layerorder): New. The Layer order like in thuban is set in
1953 the mapscript.
1954 (MF_Map.add_thubanlayer): Now a new layerobj is created if no one is
1955 linked to the layer in thuban, else the layerobject linked to the
1956 thubanlayer will be used.
1957 AnnotationLayer will now store the filename of the shapefile.
1958 (MF_Map.remove_layer): If a layer is removed the associated object
1959 must be set new.
1960
1961 * Extensions/umn_mapserver/mf_export.py(tb_layer_to_map): Add all
1962 layers which are exists in thuban to the mapobj. All removed Layers
1963 will be removed from the mapobj.
1964 Added comments to all functions.
1965 (thuban_to_map): No layer will be removed here.
1966
1967 * Extensions/umn_mapserver/mf_handle.py
1968 (_has_umn_mapobj_and_selectedlayer): Activating the layer menu. Now
1969 Layersettings for the mapserver kann be edited.
1970
1971 * Extensions/umn_mapserver/mf_import.py: Now all layers which are
1972 imported, will be linked with the associated MF_Layer.
1973 (import_mapfile): All layers, which are not selected, will be removed.
1974 Disable the "import layer from mapfile" menu option.
1975
1976 * Extensions/umn_mapserver/sample/iceland.map: Set the status of the
1977 Annotation Layer from DEFAULT to OFF. The DEFAULT setting turns the
1978 layer on permanently.
1979
1980 2004-08-03 Jan Schüngel <[email protected]>
1981
1982 * Extensions/umn_mapserver/mapfile.py(MF_Metadata.remove_allmetadata):
1983 New. This function removes all metadata
1984 (MF_Layer.set_group): New. Set the group setting.
1985 (MF_Layer.get_group): New. Get the group setting.
1986 (MF_Map): Removed the extra numlayers variable, used the mapscript
1987 parameter instead.
1988 (MF_Map.get_numlayers): New. This get numlayers.
1989 (MF_Map.remove_all_layers): New. Removes all layers from the mapobj.
1990 (MF_Map.add_thubanlayer): Replaced the exception handling by a check
1991 if the object is an instance. Also added the annotation layer here to
1992 export, but only the layer is created in the mapfile.
1993
1994 * Extensions/umn_mapserver/mf_export.py(export_mapfile): Removed
1995 the check if a mapobj exist, because its not needed anymore. The
1996 export function is only available if a mapobj exist.
1997 Use the new function to remove all layers.
1998
1999 * Extensions/umn_mapserver/mf_handle.py(Layer_Dialog): Added a group
2000 option and the metadata button. The layer dialog is temporary disabled.
2001 (Metadata_CustomDataTable): Added some functions to show the grid
2002 correct.
2003
2004 * Extensions/umn_mapserver/mf_import.py: Moved the code for showing
2005 the number of layer from import_mapfile to this function.
2006 (AnnotationLayer): New. This Class shows the Annotation layer in
2007 thuban. The layer don't do anything. It's only to show the layer
2008 and to save the layer order.
2009 (add_annotationlayer): New. Import an annotation layer to thuban.
2010 (select_layer2import): New. Import only layers to thuban and not
2011 the other settings like projection or scalebar.
2012 (create_new_mapfile): Moved the _has_umn_mapobj function and the
2013 create_new_mapfile functions from mf_handle.py to mf_import.py.
2014
2015 * Extensions/umn_mapserver/sample/iceland.map: Added the group
2016 parameter to the roads and cultural layers. Also added a new
2017 Annotation Layer for the cultural points.
2018
2019 * Extensions/umn_mapserver/sample/iceland.html: Added the select
2020 option for the annotation layer.
2021
2022 * Extensions/umn_mapserver/sample/index.html: Added the start
2023 parameter for the annotation layer.
2024
2025 2004-08-01 Jan-Oliver Wagner <[email protected]>
2026
2027 * Doc/manual/thuban-manual-de.xml (Chapter Session Management):
2028 translation completed.
2029
2030 * Doc/manual/thuban-manual.xml (Chapter Session Management):
2031 Fixed unprecise description for Save Session.
2032
2033 2004-07-31 Jan-Oliver Wagner <[email protected]>
2034
2035 Started translation of Users Manual into german.
2036
2037 * Doc/manual/thuban-manual-de.xml: New. German Users Manual.
2038
2039 * Doc/manual/Makefile: Added build instructions for german
2040 users manual.
2041
2042 * Doc/manual/thuban-manual.xml: Minor corrections in Introduction.
2043
2044 2004-07-28 Jan Schüngel <[email protected]>
2045
2046 * Extensions/umn_mapserver/mapfile.py(MF_Metadata): Changed all class
2047 functions. Now all metadata will handle by the function and its not
2048 needed to initialize it from outside. Therefor the associated mapobj
2049 will be stored in the Metadata Object. So we can use the special
2050 functions from the associated mapobj to get the Metadata.
2051 Therefor all initialization code for the metadata is removed from the
2052 other classes.
2053 (MF_Layer): Added a function to get the metadata object.
2054 (MF_Map): Added a function to set the mappath, the path where
2055 the mapfile ist stored.
2056
2057 * Extensions/umn_mapserver/mf_export.py(thuban_to_map): Changed the code
2058 to set the extent in the mapfile. Now the code is set by the displayed
2059 data in the Thuban-view.
2060 (export_mapfile): The shapepath is now set empty, until relative
2061 pathnames are supported.
2062
2063 * Extension/umn_mapserver/mf_handle.py: Added a dialog to handle
2064 metadata. Yet only mapfile metadata are supported. Layer and class
2065 supported are not implemented.
2066 Added a dialog to handle layer informations. The dialog only shows the
2067 selected layer at the moment.
2068
2069 * Extensions/umn_mapserver/mf_import.py(import_mapfile): Changed the
2070 code for setting the extent in thuban. Now the extent is set to the
2071 given extent from the mapfile.
2072 Fixed a logical mistake. Now the extent is set when realy a layer is
2073 loaded, and not if one is selected to load.
2074
2075 * Extensions/umn_mapserver/sample/iceland.html: Added code to zoom and
2076 move the shown map in the browser.
2077
2078 * Extensions/umn_mapserver/sample/iceland.map: Added a new metadata
2079 line to the mapobj and added metadata to the political layer.
2080
2081 * Extensions/umn_mapserver/test/test_mapserver.py: Changed the test
2082 for Metadata.
2083
2084 2004-07-26 Martin Schulze <[email protected]>
2085
2086 * Thuban/Lib/classmapper.py (ClassMapper.has): Added the new
2087 ClassMapper
2088
2089 * test/test_classmapper.py (TestMapping.test_mapper): Added a Test
2090 case for the new ClassMapper
2091
2092
2093 2004-07-22 Bernhard Herzog <[email protected]>
2094
2095 * Thuban/UI/viewport.py (ViewPort.VisibleExtent): New. Return the
2096 visible extent of the map in projected coordinates
2097
2098 * test/test_viewport.py (SimpleViewPortTest.test_default_size)
2099 (SimpleViewPortTest.test_init_with_size): Add some VisibleExtent()
2100 tests.
2101 (SimpleViewPortTest.test_visible_extent): New. The real test for
2102 VisibleExtent()
2103
2104 2004-07-22 Bernhard Herzog <[email protected]>
2105
2106 * test/test_viewport.py: Use support.run_tests as the main
2107 function when running asa script.
2108
2109 2004-07-22 Jan Schüngel <[email protected]>
2110
2111 * Extensions/umn_mapserver/mf_export.py: Added "import os"
2112 Removed the old "import Thuban.UI.mainwindow" code.
2113 (tbextent_to_map): Removed the extra function and at the code direct
2114 to "thuban_to_map" function.
2115 (write_creatorcomment): Added. Now a short comment is added to the
2116 beginning of an generated mapfile.
2117 (export_mapfile): Now the Path and filename are saved in to variables,
2118 and not together in one variable. This is needed for the new
2119 write_creatorcomment function.
2120
2121 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Added the
2122 import module "re". Also added Range and the ClassGroupRange import
2123 from Thuban. Both are needed for the new range expression import.
2124 (create_rangeexpression): Added. Creates a Range Expression in Thuban
2125 style from a given mapfile expression.
2126 (added_rasterlayer): Make some small code changes. The shapepath is
2127 now stored in an extra variable and the clazz_name is set empty if no
2128 class name set in the mapfile.
2129 Changed the Error message for Range Expressions, becaus the new
2130 function create a error string which will be shown in the dialog.
2131
2132 * Extensions/umn_mapserver/test/test_mapserver.py: Added a test for the
2133 range expression import.
2134
2135 2004-07-21 Jan-Oliver Wagner <[email protected]>
2136
2137 * Extensions/umn_mapserver/README: Added hint that
2138 installation as root can be avoided. Removed all tabs.
2139
2140 2004-07-16 Bernhard Herzog <[email protected]>
2141
2142 * test/test_viewport.py
2143 (ViewPortTest.test_changing_map_projection): Check that changing
2144 the projection of an empty map shown in a viewport doesn't lead to
2145 exceptions in the viewport's handler for the
2146 MAP_PROJECTION_CHANGED messages
2147
2148 * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Only
2149 try to keep the same region visible when the map actually contains
2150 something
2151
2152 2004-07-15 Jan Schüngel <[email protected]>
2153
2154 * Extensions/umn_mapserver/mapfile.py: Added a function to get the
2155 mappath directly from the mapobj. Is needed because of the changes
2156 in mf_import.py.
2157 (MF_Layer.add_thubanclass): Added a new comment.
2158 (MF_Map.set_extent): Fixed a bug with exporting empty mapobj. If the
2159 mapobj is empty there is no extent get from thuban an so no one can
2160 set to th mapobj.
2161
2162 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Updated
2163 the discription.
2164 Split the funktion in to three smaller ones. The new functions are
2165 add_rasterlayer, add_polygonlayer and select_layer2import.
2166 Removed the mapfilepath and filepath initialisation, because its know
2167 include in the new functions.
2168 Now nothing will be imported if cancel is pressed in the
2169 layer choice dialog.
2170
2171 2004-07-14 Jan Schüngel <[email protected]>
2172
2173 * Extensions/umn_mapserver/mapfile.py: Added ClassGroupDefault to
2174 import.
2175 (MF_Symbolset): Removed the extra variable for numsymbols.
2176 (MF_Class.__init__): Added a comment to the exception clause.
2177 Removed the extent init, because it was not needed anymore.
2178 (MF_Layer.add_thubanclass): Added the code to set the class name to
2179 the expression value from thuban if no label is defined.
2180 Added the code to export Range expressions from thuban to the mapfile.
2181 (MF_Map.set_extent): Removed the exception and replace it by some if
2182 code. If the size of a map is not defined the size will be set to 1,1.
2183 This is necessary because if the extent is set, mapscript checks if
2184 the size is greater than zero.
2185 (MF_Web): Added the get and set function for the template.
2186
2187 * Extensions/umn_mapserver/mf_export.py: Added the function to check
2188 if a mapobject exists and used it to set the status of the menu items.
2189 If no mapfile exists the settings could not be edditied.
2190 Define after which menuitem the exportitem will include.
2191
2192 * Extensions/umn_mapserver/mf_handle.py: Removed the import
2193 Thuban.UI.mainwindow clause, because it is not needed.
2194 Added the command Refresh() to all "OnChangeColor()" functions,
2195 because the color preview window was not updated on a color change.
2196 Added the function to check if a mapobject exists and used it to set the
2197 status of the menu items. If no mapobject exists the settings could not
2198 be edditied.
2199 (Map_Dialog): Moved the imagetype selector from the
2200 Outputformat_Dialog to Map_Dialog and removed Outputformat_Dialog.
2201 (Web_Dialog): Removed the name label and added the template textbox.
2202
2203 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Replace
2204 the exception handling on loading the layers by an if statement. It
2205 is not necessary to us the exception there.
2206 The Filepath creation now use os.path.join to build the path.
2207
2208 * Extensions/umn_mapserver/test/test_mapserver.py: Moved the testMap
2209 definition from global to the setUp function. Now the testMap will
2210 initialize new on each test.
2211
2212 * Extensions/umn_mapserver/sample/iceland.map: Include three new
2213 classes in the Line Layer, to test logical Expressions.
2214 Set the status of the class "Point9" in the Point Layer to off
2215
2216 2004-07-13 Bernhard Herzog <[email protected]>
2217
2218 * Thuban/UI/baserenderer.py
2219 (BaseRenderer.render_map_incrementally): Fix a logic bug in the
2220 optimization that tries not to draw layers under a raster layer.
2221 The bug was harmless. All it effectively did was to produce The a
2222 strange messages about not being able to draw Layer instances for
2223 all vector layers below a raster layer which would be invisible
2224 anyway because the raster layer currently always covers the entire
2225 window
2226
2227 2004-07-08 Jan Schüngel <[email protected]>
2228
2229 * Extensions/umn_mapserver/mapfile.py: Added code to generade and get
2230 a list of supported outputformats. This formats are not alle supported
2231 because there is no possibility to get the outputformat without the
2232 name known. Make some formal changes to the code.
2233 (MF_Map.set_name()): Fixed a bug if the name is None.
2234
2235 * Extensions/umn_mapserver/mf_handle.py: Removed the image_type import
2236 statement, because its not needed anymore. The Outputformat is now
2237 given as string from the object. Make some formal changes to the code.
2238
2239 * Extensions/umn_mapserver/test/test_mapserver.py: Added new test for
2240 most of the new setting which were added during the last changes.
2241 Removed the MF_Size Test.
2242
2243 * Extensions/umn_mapserver/test/test.map: Added a new class to the
2244 cultural Layer to test expressions and the the status of that layer
2245 from on to default.
2246 Changed the data path the the correct Thuban Data
2247 Added the Outputformat Object and Symbol Object
2248
2249 2004-07-07 Jan Schüngel <[email protected]>
2250
2251 * Extensions/umn_mapserver/mapfile.py: Added some new
2252 settings to edit (outputformat, label, imagetype)
2253
2254 * Extensions/umn_mapserver/mf_handle.py: Added some setting to
2255 the Label Dialog and add the OutputDialog.
2256 Make some changes to the code order.
2257
2258 2004-07-06 Jan Schüngel <[email protected]>
2259
2260 * Extensions/umn_mapserver/mapfile.py: Added the symbolObj, pointObj
2261 and line Obj and add the scalebar_status_type, scalebar_style_type and
2262 scalebar_position_type.
2263 Added the symbol- and symbolsetObject (MF_Symbol,MF_Symbolset). The
2264 are only used to create a Symbol like the circle in Thuban.
2265 Added the scalebarObject (MF_Scalebar)
2266 (MF_Class): Added set_status and get_status.
2267 (MF_Layer.add_thubanclass): Added code to set the class status
2268 (MF_Map): Added code to handle the symbols and scalebar
2269 (MF_Label): Added the set_partials and get_partials functions
2270
2271 * Extensions/umn_mapserver/mf_export.py: Added MF_Symbol to import
2272 from mapfile. Added a function to create a circle object like the one
2273 from thuban if no one exists.
2274
2275 * Extensions/umn_mapserver/mf_handle.py: All colors are now set when
2276 press ok in the assosiated dialog and not at the end of the
2277 colordialog.
2278 Added the Dialog for the Scalebar.
2279 (Label_Dialog): Added the offset option
2280
2281 * Extensions/umn_mapserver/mf_import.py: Added code to import the
2282 status of the Classes.
2283 Fixed a bug with the projection. Now the to_meter parameter will be
2284 added to the Projection only if it doesn't exists.
2285
2286 2004-07-01 Jan Schüngel <[email protected]>
2287
2288 Added the functionality to handle the content thuban is not
2289 able to handle directly.
2290
2291 * Extensions/umn_mapserver/mf_handle.py: New. This module extents
2292 Thuban with the possibility to edit the mapfile content.
2293
2294 * Extensions/umn_mapserver/mf_import.py: Added the possibility
2295 to import mapfiles without any layer selected. So it is possible
2296 to edit the other settings in a mapfile.
2297 (import_mapfile): Added code to use the editing functions.
2298 Added the possibility to import the projection to a layer if one
2299 is defined.
2300 Status settings (On,Off) will now set in thuban (visible, invisible).
2301 fixed a bug with with classnames. If no classname is set in mapfile
2302 the value in Thuban will set to the expression.
2303
2304 * Extensions/umn_mapserver/mf_export.py(export_mapfile): Added the
2305 possibility to save a new mapfile or use the old one which is
2306 imported or new created.
2307 Added code to use the editing functions.
2308 Remove some not needed import statements
2309
2310 * Extensions/umn_mapserver/mapfile.py: Added new types which are
2311 need for the editing functions.
2312 Added needed set-functions for the editing functions.
2313 Added the possibility to export rasterimages.
2314 Added new classes (MF_Web, MF_Label, MF_Legend, MF_Symbol,
2315 MF_SymbolSet). MF_Symbol and MF_SymbolSet are not needed at the
2316 moment.
2317 (MF_Class.set_thubanstyle): Now point layers will set to a default
2318 symbol to show a circle in mapserver and not only a 1px dot.
2319 (MF_Style.__init__): Fixed a bug with the color. Color was not set
2320 correct before.
2321 (MF_Size): Removed, because it is not needed.
2322
2323 * Extensions/umn_mapserver/README: Added the hints to use the
2324 export and editing functions, too.
2325
2326 * Extensions/umn_mapserver/sample/iceland.map: Added the
2327 new parameter "UNITS METERS".
2328 Change the political layer to status OFF.
2329
2330 * Extensions/umn_mapserver/sample/README: Added some
2331 more details to setup the sample in the MapServer.
2332
2333 2004-06-26 Bernhard Reiter <[email protected]>
2334
2335 * Extensions/svgexport/test/test_svgmapwriter.py:
2336 Removed class VFile and used standard StringIO instead.
2337
2338 2004-06-23 Jan Schüngel <[email protected]>
2339
2340 Add the export function to the umn_mapserver extension.
2341
2342 * Extension/umn_mapserver/mf_export.py: New. This module extents
2343 Thuban with the possibility to export the Thuban content.
2344
2345 * Extensions/umn_mapserver/mapfile.py: Expand the classes to use
2346 with the export module. Especially added the possibility to
2347 add thuban objects directly to the map objects.
2348
2349 * Extensions/umn_mapserver/mf_import.py: Removed the wxCHANGE_DIR,
2350 because of the hint from Bernhard Herzog.
2351 Corrected the handling of absolute pathnames.
2352 Changed the Text of the Menu-Item, now the beginning is upper case.
2353
2354 * Extensions/umn_mapserver/README: Added the --with-tiff statement.
2355
2356 2004-06-16 Jan Schüngel <[email protected]>
2357
2358 Add a sample and make some changes.
2359
2360 * Extension/umn_mapserver/mf_import.py: Changed the wxPython.wx
2361 import from * to explicit used statements. Changed the
2362 Thuban.UI.mainwindow import phrase, too.
2363 (import_mapfile):Corrected a clerical mistake.
2364 Added wxCHANGE_DIR in OpenFile Dialog.
2365 Added a MultipleChoiceDialog, to select the layers to load from
2366 mapfile into thuban. Thereby the projection is only set if one layer
2367 is selected.
2368 Added the possibility to handle relative pathnames which uses
2369 up-level references.
2370 Removed some doubled code.
2371 Corrected an error with integer values used as label in thuban
2372 ClassGroup.
2373
2374 * Extensions/umn_mapserver/sample: New.
2375
2376 * Extensions/umn_mapserver/sample/README: New. Describes the
2377 usage of the sample files.
2378
2379 * Extensions/umn_mapserver/sample/iceland.map: New. This is
2380 a suitable .map-file for the iceland data.
2381
2382 * Extensions/umn_mapserver/sample/index.html: New. The template
2383 for the mapfile.
2384
2385 * Extensions/umn_mapserver/sample/iceland.html: New. Initialisation
2386 file for the Iceland Application on web.
2387
2388 * Extensions/umn_mapserver/README: Corrected a inaccuracy and added
2389 some details.
2390
2391 * Extensions/umn_mapserver/test/test_mapserver
2392 (mapserver_import_Test_generalClasses.test_MF_Color):
2393 Corrected the thubancolor test.
2394
2395 2004-06-15 Jan Schüngel <[email protected]>
2396
2397 * Extensions/umn_mapserver/README: New. Install instruction.
2398
2399 2004-06-14 Bernhard Reiter <[email protected]>
2400
2401 * libraries/thuban/cpl_mfile.h: Added copyright header.
2402
2403 * libraries/thuban/ cpl_mfile.cpp, cpl_mfile.h: Added non-protecting
2404 Free Software License so that it is most useful with gdalwarp
2405 and bmpdataset.
2406
2407 2004-06-14 Bernhard Herzog <[email protected]>
2408
2409 * Thuban/UI/multiplechoicedialog.py (__version__): Add missing
2410 import of wxPython.wx itself (as opposed to the contents of
2411 wxPython.wx). For some reason wxPython.wx is available as
2412 wxPython.wx.wx in at least some 2.4 releases. Fixes RT#2482
2413 wrt. wxPython 2.4.
2414
2415 2004-06-10 Jan Schüngel <[email protected]>
2416
2417 Initial version of new extension "umn_mapserver". This extension aims
2418 to manage configuration for the UMN MapServer application. This
2419 inital version just imports the .map-files and displays all, Thuban is
2420 capable of.
2421
2422 * Extensions/umn_mapserver, Extensions/umn_mapserver/test: New.
2423
2424 * Extensions/umn_mapserver/test/README: New. Describes how to run the
2425 tests.
2426
2427 * Extensions/umn_mapserver/test/test.map: New. This is a test
2428 .map-file for automated tests of the umn_mapserver extension of
2429 Thuban.
2430
2431 * Extensions/umn_mapserver/test/test_mapserver.py: New. Tests for
2432 UMN Mapserver classes.
2433
2434 * Extensions/umn_mapserver/__init__.py: New. Init to make this
2435 directory a package.
2436
2437 * Extensions/umn_mapserver/mapfile.py: New. Classes to represent
2438 '.map'-file objects.
2439
2440 * Extensions/umn_mapserver/mf_import.py: New. This module extends
2441 Thuban with the possibility to handle UMN MapServer mapfiles.
2442
2443 2004-06-03 Bernhard Herzog <[email protected]>
2444
2445 * Thuban/Model/layer.py (Layer.TreeInfo): Convert the bounding box
2446 to a tuple before using it as arguments to the % operator. This
2447 fixes the formatting issue filed in RT#2239 on 2004-01-13 and
2448 reported today on thuban-list by Jan Schüngel
2449
2450 * test/test_layer.py (TestLayerModification.setUp): Save the
2451 filename as an instance variable so we can refer to it in tests
2452 (TestLayerModification.test_tree_info): Uncomment this method
2453 again and make it work. This tests for the formatting issue
2454 filed in RT#2239 on 2004-01-13
2455
2456 2004-05-28 Bernhard Herzog <[email protected]>
2457
2458 * Thuban/UI/baserenderer.py: Fix some typos.
2459
2460 2004-05-18 Jan-Oliver Wagner <[email protected]>
2461
2462 * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed a bug
2463 by increasing a field size.
2464
2465 2004-05-17 Bernhard Herzog <[email protected]>
2466
2467 Update to newest shapelib and get rid of Thuban specific
2468 extensions, i.e. use the new DBFUpdateHeader instead of our
2469 DBFCommit kludge
2470
2471 * libraries/shapelib/shpopen.c: Update to version from current
2472 shapelib CVS.
2473
2474 * libraries/shapelib/shapefil.h: Update to version from current
2475 shapelib CVS.
2476
2477 * libraries/shapelib/dbfopen.c: Update to version from current
2478 shapelib CVS.
2479 (DBFCommit): Effectively removed since shapelib itself has
2480 DBFUpdateHeader now which is better for what DBFCommit wanted to
2481 achieve.
2482 We're now using an unmodified version of dbfopen.
2483
2484 * setup.py (extensions): Add the HAVE_UPDATE_HEADER macro with
2485 value '1' to the Lib.dbflibc extension. This simply reflects the
2486 shapelib and pyshapelib updates
2487
2488 2004-05-16 Jan-Oliver Wagner <[email protected]>
2489
2490 Finished introduction of Menu.FindOrInsertMenu.
2491
2492 * Extensions/drawshape/drawshape.py: Add the command
2493 to the experimental menu additionally to the toolbar.
2494
2495 * Extensions/svgexport/svgsaver.py: Use FindOrInsertMenu() instead of
2496 finding menu on its own.
2497
2498 * Doc/manual/thuban-manual.xml: updated sample file
2499 to use FindOrInsertMenu().
2500
2501 * Examples/simple_extensions/hello_world.py: Use FindOrInsertMenu()
2502 instead of finding menu on its own.
2503
2504 2004-05-11 Jan-Oliver Wagner <[email protected]>
2505
2506 * test/test_menu.py (MenuTest.test): Added testing
2507 of method Menu.FindOrInsertMenu.
2508
2509 2004-05-10 Jan-Oliver Wagner <[email protected]>
2510
2511 Introduce and use Menu.FindOrInsertMenu.
2512
2513 * Thuban/UI/menu.py (Menu.FindOrInsertMenu): New. Find a
2514 given menu or, if not found, insert it.
2515
2516 * Extensions/bboxdump/bboxdump.py, /Extensions/gns2shp/gns2shp.py,
2517 /Extensions/importAPR/importAPR.py, Extensions/profiling/profiling.py,
2518 /Extensions/wms/wms.py: Use FindOrInsertMenu() instead of finding
2519 menu on its own.
2520
2521 2004-05-06 Jan-Oliver Wagner <[email protected]>
2522
2523 Introduce a abstract ColorDialog class and remove
2524 and outdated file.
2525
2526 * Thuban/UI/proj4dialog.py: Removed. It is has been
2527 replaced by projdialog for quite a while and is not used
2528 anymore.
2529
2530 * Thuban/UI/colordialog.py: New. Abstraction for color selection
2531 dialog(s).
2532
2533 * Thuban/UI/classifier.py (SelectPropertiesDialog.__GetColor):
2534 Now calls the abstract ColorDialog instead of wxColourDialog.
2535 This also removed the dependency to Color class conversion
2536 from this function.
2537
2538 2004-05-04 Frank Koormann <[email protected]>
2539
2540 * Extensions/bboxdump/__init__.py: Fixed string left over from
2541 copying.
2542
2543 * Extensions/bboxdump/bboxdump.py (bboxdump):
2544 Use layer.ShapeStore().AllShapes() to loop over shapes instead of
2545 xrange(layer.NumShapes()). Compile the bboxmessage from a list
2546 of formatted outputs (string.join) instead of appending to the
2547 message. Two progress bar dialogs to report progress on the sometimes
2548 lenghty processing.
2549
2550 2004-04-22 Frank Koormann <[email protected]>
2551
2552 New Extension to dump bounding boxes of all shapes of the selected
2553 layer. An optional column can be specified to group the objects,
2554 in this case the bounding box is a union of the separate boxes.
2555 Dump can be displayed in a ScrolledMessageDialog or written to file.
2556 The Extension is simply a combination of available and well tested
2557 Thuban functionality.
2558
2559 * Extensions/bboxdump/__init__.py: New: Init to make this
2560 directory a package.
2561
2562 * Extensions/bboxdump/bboxdump.py: New: Dump bounding boxes of
2563 all shapes of the selected layer.
2564
2565 2004-04-22 Jan-Oliver Wagner <[email protected]>
2566
2567 * Thuban/UI/classgen.py (GenUniquePanel.__init__): Fixed two
2568 strings to be i18n now.
2569
2570 2004-04-18 Jan-Oliver Wagner <[email protected]>
2571
2572 Changing popup menu of legend from direct building
2573 to using the Menu construction as used for the mainwindow.
2574
2575 * Thuban/UI/mainwindow.py: New method commands: layer_to_top,
2576 layer_to_bottom, layer_visibility
2577 (MainWindow.LayerToTop): New. Put current layer to the top.
2578 (MainWindow.LayerToBottom): New. Put current layer to bottom.
2579 (MainWindow.HideLayer, MainWindow.ShowLayer, _has_visible_map):
2580 Replace 1,0 by True, False.
2581 (MainWindow.ToggleLayerVisibility): New. Toggle visibility of
2582 current layer.
2583 (MainWindow.LayerShowTable): Removed raising of dialog.
2584 (_has_selected_layer_visible): New. Support function.
2585
2586 * Thuban/UI/legend.py: ID_POP_xxx: removed.
2587 (LegendPanel.__init__): Removed EVT_MENU bindings.
2588 (LegendTree._OnRightClick): Replace direct creation of
2589 menu via wx Classes by applying the menu definition
2590 as of Menu class of menu.py.
2591
2592 2004-04-16 Jan-Oliver Wagner <[email protected]>
2593
2594 * Thuban/UI/exceptiondialog.py (ExceptionDialog.dialog_layout): Improved
2595 button string to stronger clearify that Thuban will be closed when hitting
2596 the button.
2597
2598 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Added docstring.
2599 Now for layers without a ShapeStore a corresponding message is given
2600 to the user, that this layer has no table to show.
2601
2602 2004-04-15 Martin Schulze <[email protected]>
2603
2604 * Extensions/wms/layer.py (WMSLayer.setWMSFormat): Need to
2605 recalculate the format for the internal render engine as well.
2606
2607 * Extensions/wms/properties.py (wmsProperties): First start for a
2608 properties dialog. It's functional for a first selection of
2609 layers, but still has some weired wxWidgets/GTK problems but
2610 beautification can be done later.
2611
2612 * Extensions/wms/layer.py: Added more documentation
2613 (WMSLayer.getFormats): New: Return list of supported image formats
2614 by the WMS server
2615 (WMSLayer.getLayers): New: Return the list of layer names
2616 supported by the WMS server
2617 (WMSLayer.getLayerTitle): New: Return the title of the named layer
2618 (WMSLayer.getWMSFormat): New: Return the image format that is used
2619 for WMS GetMap requests
2620 (WMSLayer.setWMSFormat): New: Set the image format that is used
2621 for WMS GetMap requests
2622 (WMSLayer.__init__): Move away from using only one layer to using
2623 a list of layers (unsorted at the moment, though).
2624 (WMSLayer.getVisibleLayers): New: Return the list of names for all
2625 visible layers
2626 (WMSLayer.setVisibleLayers): New: Set the list of names for all
2627 visible layers
2628
2629 * Extensions/wms/wms.py: Moved the WMS layer into layer.py in
2630 order to establish a clean structure.
2631
2632 * Extensions/wms/layer.py: Moved the WMS layer into a file on its
2633 own in order to establish a clean structure.
2634
2635 2004-04-13 Martin Schulze <[email protected]>
2636
2637 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Added
2638 support for oldstyle (WMS 1.0 apparently) image format
2639 specification.
2640
2641 * Extensions/wms/wms.py (WMSLayer.calcFormat): Reduce the list of
2642 supported graphic formats back to JPEG and BMP, PNG and others are
2643 too *cough* experimental... Sorry, I meant to filter this out
2644 before I committed this part. This should make the WMS extension
2645 run from CVS again.
2646 (wms_dialog): Reset an empty URL to None so that the subsequent
2647 program can depend on this, since the dialog will indeed return an
2648 empty URL, causing another declaration of love by Python.
2649
2650 * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerBBox):
2651 Whenever a native BoundingBox request cannot be fulfilled, check
2652 whether the requested SRS is EPSG:3426, in which case return the
2653 LatLonBoundingBox values.
2654
2655 * Extensions/wms/test/test_parser.py
2656 (TestWMSCapabilitiesParser.test_LayerSRS): Added a test for
2657 ignoring AUTO:* SRS.
2658 (TestWMSCapabilitiesParser.test_LatLonBoundingBoxes_as_bboxes):
2659 Added another test method to test whether the LatLonBoundingBox
2660 values will be returned if BoundingBox values are requested with
2661 SRS set to EPSG:3426.
2662
2663 * Extensions/wms/parser.py (WMSCapabilitiesParser.peekLayers):
2664 Added rudimentary support for non-EPSG SRS, i.e. ignore them for
2665 the moment by placing them into a variable which is currently
2666 unused. Also test whether the EPSG SRS is numerical as it should
2667 be and add an error message if it is not.
2668
2669 * Extensions/wms/test/sample.xml: Added AUTO:* SRS since they
2670 appear in the real world as well. Since we cannot handle them yet
2671 (OGCLib can't either), we will ignore them for the moment.
2672
2673 * Extensions/wms/parser.py: Use a variable for denoting the sample
2674 filename
2675 (WMSCapabilitiesParser.peekLayers): Added support for error
2676 messages during grok(). They will be aggregated in an array and
2677 may be displayed later. We may have to add a classification
2678 "Warning" and "Error" to this. That requires more experience,
2679 though, since not every error may be lethal.
2680
2681 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Raise the
2682 ShowTable() dialog/frame when the user attempts to display it
2683 while it has been opened before already and not closed again.
2684
2685 2004-04-11 Martin Schulze <[email protected]>
2686
2687 * Extensions/wms/infodialog.py: Adjusted the class documentation
2688
2689 * Extensions/wms/wms.py (WMSLayer.__init__, WMSLayer.GetMapImg):
2690 Switch to using Thuban{Begin,End}BusyCursor instead of the pure
2691 wxWidgets variants.
2692 (WMSLayer.__init__): The epsg_id variable is named top_srs now.
2693
2694 * Extensions/wms/infodialog.py: Added an information dialog that
2695 will display various information about the WMS current resource,
2696 so that additional information such as the title, the abstract,
2697 fees and access constraints can be displayed for the user if they
2698 are documented in the WMS XML.
2699
2700 2004-04-10 Martin Schulze <[email protected]>
2701
2702 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Adjusted
2703 string handling. It's "foo".lower() and not lower(foo) without
2704 lower imported from strings or something.
2705
2706 * Extensions/wms/wms.py (WMSLayer): Incorporated WMSCapabilities
2707 from capabilities.py and parser.py. Implement priority list for
2708 supported graphics formats, take care of wbmp != bmp. PNG, TIFF
2709 and GIF are supported here, but not yet by main Thuban. Hence,
2710 support for them may be removed later. Special contribution to
2711 usability: get wxWidgets to change the cursor when we're waiting
2712 for data from the network so the user won't start to worry. This
2713 causes a redrawing error/warning, though.
2714
2715 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Unlink
2716 the DOM object.
2717
2718 2004-04-01 Martin Schulze <[email protected]>
2719
2720 * Extensions/wms/capabilities.py: Adjusted documentation
2721 (WMSCapabilities.__init__): Improved documentation, fixed syntax
2722 (WMSCapabilities.saveCapabilities): Only catch IOError when
2723 handling files
2724 (WMSCapabilities.loadCapabilities): Only catch IOError when
2725 handling files
2726 __main__: corrected variable naming
2727 (WMSCapabilities.fetchCapabilities,loadCapabilities): Make this
2728 class a specialisation of WMSCapabilitiesParser as well. Also
2729 execute grok() after loading or fetching capabilities, if that
2730 went well, so that subsequent calls can already access the data.
2731 (WMSCapabilities.getVersion): Export the used version of the
2732 GetCapabilities request, so we can use it for subsequent calls,
2733 i.e. for GetMap requests.
2734 (WMSCapabilities.fetchCapabilities): Added proper error handling
2735 when the GetCapabilities request failed, so that the surrounding
2736 program can act accordingly.
2737
2738 2004-03-30 Martin Schulze <[email protected]>
2739
2740 * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerSRS):
2741 Adjusted the getLayerSRS method to return the list of SRSes
2742 extracted from <SRS> elements instead of <BoundingBox> elements.
2743 Added a bit of documentation as well.
2744 (WMSCapabilitiesParser.checkLayerSRS): Removed integrity test
2745 since it was only implemented due to a misunderstanding.
2746
2747 * Extensions/wms/test/test_parser.py
2748 (TestWMSCapabilitiesParser.test_LayerSRS): Adjust the tests to
2749 reflect the corrected interpretation of the standard: i.e. a layer
2750 does not have to define a BoundingBox for all SRSes it supports.
2751 Hence the <SRS></SRS> specification is authoritative, not the list
2752 of BoundingBoxes.
2753 (TestWMSCapabilitiesParser.test_BoundingBoxes): Added a new test
2754 to ensure None is returned for a non-existing SRS.
2755 (TestWMSCapabilitiesParser.test_grok): Removed test_grok method
2756 since it is not applicable anymore. Listing more SRSes in <SRS>
2757 elements is valid according to the specs.
2758
2759 2004-03-26 Bernhard Reiter <[email protected]>
2760
2761 * README: Nicer formatting of text. Improved descriptions.
2762 Reflected wxWidgets name change.
2763
2764 * Thuban/UI/about.py: Extended copyright to 2004 and added
2765 information about the thuban-devel mailinglist.
2766
2767 2004-03-24 Martin Schulze <[email protected]>
2768
2769 * Extensions/wms/capabilities.py: Renamed the class to contain
2770 'WMS', also added a linebreak where required
2771
2772 * Extensions/wms/parser.py: Finally added the XML parser for the
2773 GetCapabilities response.
2774
2775 * Extensions/wms/test/sample.xml: Adjusted the sample file so that
2776 <SRS> elements match the <BoundingBox> elements, except for the
2777 layer 'beschriftung'.
2778
2779 * Extensions/wms/test/test_parser.py: Encode non-ascii strings
2780 since Python uses unicode strings internally, otherwise
2781 comparisons will fail. Removed tests for getLayerBBoxSRS() since
2782 the SRS will be calculated anyway and this method is obsoleted by
2783 getLayerSRS(). Denote SRS as strings and not as cardinal numbers.
2784 Move loading the sample file into the setUp method. Added a test
2785 for finding the integrity problem in the sample response.
2786 Improved formatting.
2787
2788 * Extensions/wms/domutils.py: Added convenience routines for
2789 handling of Document Object Model (DOM) nodes.
2790
2791 * Extensions/wms/test/test_domutils.py: Added a test for the
2792 domutils module
2793
2794 2004-03-19 Martin Schulze <[email protected]>
2795
2796 * Extensions/wms/test/test_parser.py (TestWMSCapabilitiesParser):
2797 Moved path detection and adding into a module of its own,
2798 adjustpath, which exports thubandir as main Thuban directory.
2799
2800 * Extensions/wms/test/test_ogclib.py (TestWMSLib): Moved path
2801 detection and adding into a module of its own, adjustpath, which
2802 exports thubandir as main Thuban directory. Reorganised the
2803 module in order to support the SkipTest feature for Thuban test
2804 cases.
2805
2806 * Extensions/wms/test/adjustpath.py: Moved path detection and
2807 adding into a module of its own.
2808
2809 2004-03-18 Martin Schulze <[email protected]>
2810
2811 * Extensions/wms/test/test_parser.py: Added another test for
2812 checking whether the WMS XML parser (to be implemented) returns
2813 the information we expect. This requires a sample WMS WML file
2814 (sample.xml) which has been extracted from the frida server and
2815 "improved" manually.
2816
2817 * Extensions/wms/test/test_ogclib.py: Added legacy code to add the
2818 main Thuban directory to the path in order to be able to import
2819 random modules. Adjusted the PyOGCLib detection to reuse the
2820 information gathered. Also added a note about the PYTHONPATH
2821 environment variable.
2822
2823 * Extensions/wms/test/test_ogclib.py: The format specification is
2824 a mime-type, not a graphic format, hence image/jpeg wou ld be the
2825 proper format and not JPEG. We'll also have to take care of the
2826 encoding of / as %2F.
2827
2828 2004-03-16 Martin Schulze <[email protected]>
2829
2830 * Extensions/wms/test/test_ogclib.py: Added a (hopefully)
2831 comprehensive test for the getMapURL method, built compare URLs
2832 according to the documentation in OGC 01-068r3
2833
2834 * Extensions/wms/capabilities.py (WMSCapabilities): Added the
2835 class WMSCapabilities to manage capabilites, will incorporate
2836 parsing the capabilities response and provide details for other
2837 classes.
2838
2839 2004-03-12 Bernhard Herzog <[email protected]>
2840
2841 Support views in addition to normal tables in the postgis
2842 shapestore
2843
2844 * Thuban/Model/postgisdb.py
2845 (PostGISShapeStore._fetch_table_information): Add a fallback for
2846 the case where the table name is not in the geometry_columns
2847 table. This is usually the case for views. Also, set
2848 self.shapestore here.
2849 (PostGISShapeStore.ShapeType): No need to query the database all
2850 the time. The shape type is now determined in
2851 _fetch_table_information
2852
2853 * test/postgissupport.py (PostgreSQLServer.new_postgis_db)
2854 (PostgreSQLServer.get_static_data_db, PostGISDatabase.__init__):
2855 New parameter to specify views.
2856 (PostGISDatabase.has_data): Also compare the views. New views
2857 parameter
2858 (PostGISDatabase.initdb): Create the views.
2859 (PostgreSQLServer.get_default_static_data_db): Add the v_landmarks
2860 view
2861
2862 * test/test_postgis_db.py
2863 (TestPostGISShapestorePointFromViews): New. Test a
2864 PostGISShapeStore with a view
2865 (TestPostGISShapestorePointOIDAsGIDColumn.setUp): Pass the name of
2866 the geometry_column explicitly to test whether that works
2867
2868 2004-03-12 Bernhard Herzog <[email protected]>
2869
2870 Final step for explicit id/geometry columns: Loading and saving
2871
2872 * Resources/XML/thuban-1.1.dtd: New. Derived from thuban-1.0.dtd
2873 with the following changes:
2874 (dbshapesource): Two new attributes id_column and geometry_column
2875
2876 * Thuban/Model/save.py (SessionSaver.write): Use the new dtd
2877 (SessionSaver.write_session): Use the new namespace
2878 (SessionSaver.write_data_containers): Write the new dbshapesource
2879 parameters
2880
2881 * Thuban/Model/load.py (SessionLoader.__init__): New namespace for
2882 the new file format version
2883 (SessionLoader.start_dbshapesource): Handle the new db parameters
2884
2885 * test/test_save.py: Update to the new dtd and namespace
2886 (SaveSessionTest.test_save_postgis): Update the NonConnectionStore
2887 mock object to provide a working IDColumn method.
2888
2889 * test/test_load_1_0.py: New. Copy of the test_load.py before
2890 today's changes but with the round-trip tests removed.
2891
2892 * test/test_load_0_9.py: Update doc-string.
2893
2894 * test/test_load.py: Update all .thuban files to the new dtd and
2895 namespace.
2896 (TestPostGISLayer.file_contents): Add the new dbshapesource
2897 paramters
2898
2899 2004-03-11 Bernhard Herzog <[email protected]>
2900
2901 Next step for explicit id/geometry columns: User interaction
2902
2903 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Rework how
2904 the dialog is constructed. Add combo boxes to select id and
2905 geometry column. Rename some instance variables.
2906 (ChooseDBTableDialog.GetTable): Return id and geometry column
2907 names
2908 (ChooseDBTableDialog.OnTableSelect): New. Event handler for
2909 selections in the table list
2910
2911 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Use id_column
2912 and geometry_column
2913
2914 * Thuban/Model/session.py (Session.OpenDBShapeStore): Add the new
2915 parameters for id_column and geometry column of PostGISShapeStore
2916 here as well.
2917
2918 * Thuban/Model/postgisdb.py (type_map): Add ROWID psycog type.
2919 (_raw_type_map): New. Map raw PostgreSQL type ints to thuban types
2920 (PostGISConnection.GeometryTables): Use a better query to
2921 determine which relations in the database might be usable for
2922 shapestores. Now supports views as well but is more PostgreSQL
2923 specific
2924 (PostGISConnection.table_columns): New. Somewhat experimental
2925 method to let the db dialogs provide lists of columns to users so
2926 that they can select id and geometry columns.
2927 (PostGISTable.__init__): The default value of the id_column
2928 parameter is now None it still means "gid" effectively, though.
2929 (PostGISTable.IDColumn): New introspection method to return a
2930 column object for the id column
2931 (PostGISShapeStore.GeometryColumn): New introspection method to
2932 return a column object for the geometry column
2933
2934 * test/test_postgis_db.py
2935 (TestPostGISConnection.test_gis_tables_non_empty):
2936 Removed. Subsumed by the new:
2937 (TestPostGISConnection.test_gis_tables_with_views_and_tables):
2938 New. Tes the GeometryTables and table_columns methods with actual
2939 tables and views.
2940 (PointTests.test_id_column, PointTests.test_geometry_column):
2941 New. tests for the new methods.
2942 (TestPostGISShapestorePoint.setUp)
2943 (TestPostGISShapestorePointSRID.setUp)
2944 (TestPostGISShapestorePointExplicitGIDColumn.setUp): Fill the
2945 instance variables needed by the new tests
2946
2947 2004-03-11 Bernhard Herzog <[email protected]>
2948
2949 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): The row
2950 numbers given to ReadValue are ordinals.
2951
2952 2004-03-11 Bernhard Herzog <[email protected]>
2953
2954 Elimiate the requirement for PostGIS tables to have a column
2955 called "gid".
2956
2957 * Thuban/Model/postgisdb.py (PostGISTable.__init__): New parameter
2958 id_column to specify which column to use to identify rows. Also
2959 new instance variables id_column and quoted_id_column
2960 (PostGISTable.RowIdToOrdinal, PostGISTable.RowOrdinalToId)
2961 (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue)
2962 (PostGISTable.SimpleQuery): Use the id column name provided to the
2963 constructor instead of "gid"
2964 (PostGISShapeStore.__init__): New parameter id_column analogously
2965 to PostGISTable.__init__. This parameter is simply passed through
2966 to the base class constructor
2967 (PostGISShapeStore._create_col_from_description): Fix typo in
2968 doc-string
2969 (PostGISShapeStore.Shape, PostGISShapeStore.AllShapes)
2970 (PostGISShapeStore.ShapesInRegion): Use the id column name
2971 provided to the constructor instead of "gid"
2972
2973 * test/postgissupport.py
2974 (PostgreSQLServer.get_default_static_data_db): New static table
2975 landmarks_point_id with an id column != "gid. Update the comments
2976 a bit.
2977 (skip_if_addgeometrycolumn_does_not_use_quote_ident): Fix typo in
2978 doc-
2979 (upload_shapefile): New parameter gid_column to use a name other
2980 than "gid" for the column to store the shape ids
2981
2982 * test/test_postgis_db.py (TableTests): New. Mixin-class
2983 containing all tests previously in TestPostGISTable. The actual
2984 tests are the same but the code is a bit more configurable to
2985 allow for different id columns etc.
2986 (TestPostGISTable): Derive from TableTests now for the actual
2987 tests.
2988 (TestPostGISTableExplicitGIDColumn): New. Like TestPostGISTable
2989 except that it the landmarks_point_id table to test the id_column
2990 parameter
2991 (PointTests): Extend the doc-string
2992 (TestPostGISShapestorePointExplicitGIDColumn)
2993 (TestPostGISShapestorePointOIDAsGIDColumn): New classes derived
2994 from PointTests to test the explicit id_column parameter. One
2995 tests with the name of the column holding the shape ids, the other
2996 uses PostgreSQL's OID column. For the latter a number of methods
2997 have to be overwritten to make them independent of the actual id
2998 values.
2999
3000 2004-03-08 Silke Reimer <[email protected]>
3001
3002 Update debian directory:
3003
3004 * debian/changelog: Added new version.
3005 * deiban/rules: Updated management of patches (with cbds)
3006 * debian/control: Added cbds to dependencies
3007 * debian/patches/*: New. Adds better support for patches of thuban in
3008 debian
3009 * debian/menu: Syntax of menu changed slightly
3010 * debian/setup.py.patch: removed because it has been moved to
3011 debian/patechs/setup.py.patch
3012
3013
3014 2004-02-26 Bernhard Herzog <[email protected]>
3015
3016 Create the Doc/technotes directory for text files with information
3017 for developers
3018
3019 * Doc/technotes/README: New. README for the technotes
3020
3021 * Doc/technotes/coding_guidelines.txt: New. Coding guidelines for
3022 Thuban
3023
3024 * Doc/technotes/release_process.txt: New. Used to be
3025 HOWTO-Release. Now slightly adapted to technote formatting style.
3026
3027 * HOWTO-Release: Removed. It's contents are now in
3028 Doc/technotes/release_process.txt
3029
3030 2004-02-25 Bernhard Herzog <[email protected]>
3031
3032 * libraries/thuban/wxproj.cpp (get_wx_version): New. Return the
3033 version of wxWindows the module was compiled with so we can check
3034 that against the wxPython version.
3035
3036 * Thuban/version.py (thuban_branch, thuban_release): New variables
3037 controlling which and how Thuban versions are shown. See the
3038 comments for details.
3039 (verify_versions): Also check that the wx version that wxproj is
3040 compiled against matches that of the wxPython we use at runtime
3041
3042 2004-02-20 Bernhard Herzog <[email protected]>
3043
3044 * Extensions/wms/wms.py (epsg_code_to_projection): Use
3045 get_system_proj_file to read the epsg projections. The old way
3046 depended on the current directory being the top Thuban directory.
3047
3048 2004-02-20 Bernhard Herzog <[email protected]>
3049
3050 * Extensions/svgexport/test/test_svgmapwriter.py
3051 (TestVirtualDC.test_clippath): Remove a debug print
3052
3053 2004-02-20 Bernhard Herzog <[email protected]>
3054
3055 * Extensions/svgexport/__init__.py: New. Turn
3056 Extensions/svgexport into a package.
3057
3058 * Extensions/svgexport/svgmapwriter.py: Reorder the imports and
3059 doc-string a bit. The doc-string must come first, otherwise it's
3060 not a doc-string. The __future__ import must be the first thing
3061 after the doc-string. Use only double quotes in doc-strings.
3062 Single quotes trip up emacs syntax highlighting if the text
3063 contains apostrophes.
3064
3065 2004-02-20 Bernhard Herzog <[email protected]>
3066
3067 * Extensions/svgexport/test/__init__.py,
3068 Extensions/svgexport/test/test_svgmapwriter.py: New. Initial test
3069 suite for svgexport
3070
3071 * test/runtests.py (find_test_modules): New. Function with the
3072 module finding code from main.
3073 (main): Use find_test_modules to figure out the default test
3074 modules and take modules from Extensions.svgexport.test too.
3075
3076 2004-02-19 Bernhard Herzog <[email protected]>
3077
3078 * Thuban/UI/application.py (ThubanApplication.OnInit): Make sure
3079 the mainwindow has a reference to the map of the initial session.
3080 This fixes a bug introduced with the fix for RT#2245
3081
3082 2004-02-19 Bernhard Herzog <[email protected]>
3083
3084 * Extensions/svgexport/svgsaver.py,
3085 Extensions/svgexport/svgmapwriter.py,
3086 Extensions/svgexport/maplegend.py: Added again. This time in the
3087 correct place.
3088
3089 2004-02-17 Bernhard Herzog <[email protected]>
3090
3091 Fix for RT#2245
3092
3093 * Thuban/UI/application.py (ThubanApplication.OnInit): Initialize
3094 instance variables before trying to create any windows. Creating
3095 windows can start an event loop if e.g. message boxes are popped
3096 up for some reason, and event handlers, especially EVT_UPDATE_UI
3097 may want to access things from the application.
3098 (ThubanApplication.maps_changed): The mainwindow may not have been
3099 created yet, so check whether it has been created before calling
3100 its methods
3101
3102 * Thuban/UI/view.py (MapCanvas.OnIdle): Only try to redraw if we
3103 have a map
3104
3105 2004-02-17 Bernhard Herzog <[email protected]>
3106
3107 * test/test_svgmapwriter.py, Extensions/svgsaver.py,
3108 Extensions/svgmapwriter.py, Extensions/maplegend.py,
3109 extensions/svgexport/svgsaver.py,
3110 extensions/svgexport/svgmapwriter.py,
3111 extensions/svgexport/maplegend.py: Removed. These files were in
3112 the wrong places or didn't work at all.
3113
3114 2004-02-16 Bernhard Herzog <[email protected]>
3115
3116 * Thuban/UI/view.py (MapCanvas.Export): Remove accidentally added
3117 line
3118
3119 2004-02-16 Bernhard Herzog <[email protected]>
3120
3121 * Thuban/UI/view.py (MapCanvas.Export): Avoid UnboundLocalError.
3122
3123 2004-02-15 Markus Rechtien <[email protected]>
3124
3125 * Extensions/svgexport/svgmapwriter.py: New. Adds the capability
3126 to write a session to a file in SVG format.
3127 * Extensions/svgexport/svgsaver.py: New. Uses svgmapwriter.py
3128 to write a SVG map of a session.
3129 * Extensions/svgexport/maplegend: New. Writes a basic maplegend
3130 in SVG format for the current session.
3131
3132 2004-02-13 Bernhard Herzog <[email protected]>
3133
3134 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): When the layer
3135 can't be created, return immediately after displaying the error
3136 message.
3137
3138 2004-02-11 Bernhard Herzog <[email protected]>
3139
3140 Handle postgis tables with more than one geometry column.
3141
3142 * Thuban/Model/postgisdb.py
3143 (PostGISTable._fetch_table_information): Delegate the creation of
3144 column objects to a different method so that we can extend that in
3145 derived classes
3146 (PostGISTable._create_col_from_description): New. Column object
3147 creation part of _fetch_table_information
3148 (PostGISShapeStore._create_col_from_description): New. Extend
3149 inherited method to handle geometry columns
3150 (PostGISShapeStore.__init__): New parameter geometry_column to
3151 specify which geometry column to use. Optional but mandatory for
3152 tables with more than one geometry column
3153 (PostGISShapeStore._fetch_table_information): Also use the name of
3154 the geometry column when looking for the srid
3155 (PostGISShapeStore.ShapeType): Also use the name of the geometry
3156 column when looking for the shape type
3157
3158 * test/test_save.py (SaveSessionTest.test_save_postgis): Adapt
3159 NonConnectionStore to changes in the PostGISShapeStore
3160
3161 * test/test_postgis_db.py
3162 (TestPostGISSpecialCases.test_shapestore_two_geom_cols): Test
3163 PostGISShapeStore with tables having two geometry columns.
3164
3165 2004-02-10 Bernhard Herzog <[email protected]>
3166
3167 Fix some postgis problems. What remains to be done is real
3168 handling of SRIDs as they affect how reprojection is done
3169
3170 * Thuban/Model/postgisdb.py (quote_identifier): Fix typo in
3171 doc-string
3172 (PostGISShapeStore._fetch_table_information): New. Extend
3173 inherited method to retrieve srid
3174 (PostGISShapeStore.BoundingBox): Handle tables without data.
3175 extent yields NULL for those
3176 (PostGISShapeStore.ShapesInRegion): Use the srid of the table.
3177
3178 * test/test_postgis_db.py
3179 (TestPostGISSpecialCases.test_shapestore_empty_table): New test
3180 for the special case of a table without any data
3181 (TestPostGISShapestorePointSRID): New class with tests for a table
3182 that uses srids
3183 (PolygonTests): Fix a doc-string typo
3184
3185 * test/postgissupport.py (PostGISDatabase.__init__): New parameter
3186 reference_systems with a specification of spacial reference
3187 systems to create in the new db.
3188 (PostgreSQLServer.new_postgis_db)
3189 (PostgreSQLServer.get_static_data_db): New parameter
3190 reference_systems to be passed through ultimately to
3191 PostGISDatabase. In new_postgis_db also check whether an existing
3192 db already has the right srids
3193 (PostgreSQLServer.get_default_static_data_db): Add srids and a
3194 table that uses srids
3195 (PostGISDatabase.initdb): Create the entries for the reference
3196 systems
3197 (PostGISDatabase.has_data): Add reference_systems parameter to
3198 check for those too
3199 (upload_shapefile): New parameter srid to create tables with a
3200 specific srid
3201
3202 2004-02-06 Frank Koormann <[email protected]>
3203
3204 * po/pt_BR.po: Fixed charset
3205
3206 2004-02-05 Frank Koormann <[email protected]>
3207
3208 * po/pt_BR.po: Fixed format string for error message, missing %s
3209 added (Thuban/UI/application.py:273)
3210
3211 2004-02-03 Frank Koormann <[email protected]>
3212
3213 First version of Portuguese (Brazilian) translation
3214
3215 * po/pt_BR.po: New, translation of pot (2004-01-15 16:07+0300) for
3216 Brazilian Portuguese by Eduardo Patto Kanegae.
3217
3218 * Thuban/UI/about.py (About.__init.py__): Added Eduardo to the list of
3219 translators.
3220
3221
3222 2004-01-22 Frank Koormann <[email protected]>
3223
3224 * Doc/manual/thuban-manual.xml: Added section on installation of
3225 Thuban under Win32 systems. Fixed image path references in the postgis
3226 section. Some minor source formattings.
3227
3228 2004-01-21 Frank Koormann <[email protected]>
3229
3230 Make Thuban remember path selections (at least for one application run).
3231
3232 * Thuban/UI/application.py (Application.OnInit): Initialize path as a
3233 attribute of application object. Path is a dictionary of
3234 strings, currently with the items "data" and "projection".
3235 (Application.SetPath): New, stores path for the specified item.
3236 (Application.Path): New, return path for the specified item.
3237
3238 * Thuban/UI/mainwindow.py
3239 (MainWindow.OpenSession, MainWindow.SaveSessionAs,
3240 MainWindow.AddLayer, MainWindow.AddRasterLayer,
3241 MainWindow.TableOpen): Access "data" path information of the
3242 application.
3243
3244 * Thuban/UI/projdialog.py (ProjFrame._OnImport, ProjFrame._OnExport):
3245 Access "projection" path information of the application.
3246
3247 2004-01-05 Bernhard Herzog <[email protected]>
3248
3249 * po/ru.po: Updated translations from Alex Shevlakov
3250
3251 2004-01-05 Bernhard Herzog <[email protected]>
3252
3253 * po/Makefile, po/README: Move the description of how to generate
3254 the translation statistics to the README.
3255
3256 2003-12-23 Bernhard Herzog <[email protected]>
3257
3258 * NEWS: Update for 1.0.0
3259
3260 * po/it.po: Another update from Maurizio Napolitano
3261
3262 2003-12-23 Bernhard Herzog <[email protected]>
3263
3264 * po/it.po: Updated translation from Maurizio Napolitano
3265
3266 2003-12-23 Bernhard Herzog <[email protected]>
3267
3268 * Thuban/UI/join.py (JoinDialog.__init__): Mark one more string
3269 for translation
3270
3271 * Thuban/UI/mainwindow.py (MainWindow.TableRename)
3272 (MainWindow.RenameMap, MainWindow.RenameLayer): Mark some more
3273 strings for translation
3274
3275 * po/de.po: Update with the newly marked strings.
3276
3277 2003-12-22 Bernhard Herzog <[email protected]>
3278
3279 * HOWTO-Release: Fix the places where version numbers have to be
3280 updated
3281
3282 2003-12-22 Bernhard Herzog <[email protected]>
3283
3284 * setup.py (setup call): 1.0.0, yeah!
3285
3286 * Thuban/version.py (longversion): 1.0.0, yeah!
3287
3288 * Thuban/Model/load.py (SessionLoader.__init__): Accept the
3289 1.0.0 namespace too
3290
3291 * Thuban/Model/save.py (SessionSaver.write_session): Save with
3292 1.0.0 namespace
3293
3294 * test/test_load.py (LoadSessionTest.dtd)
3295 (TestSingleLayer.file_contents)
3296 (TestNonAsciiColumnName.file_contents)
3297 (TestLayerVisibility.file_contents)
3298 (TestClassification.file_contents, TestLabels.file_contents)
3299 (TestLayerProjection.file_contents)
3300 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3301 (TestLabelLayer.file_contents, TestPostGISLayer.file_contents)
3302 (TestPostGISLayerPassword.file_contents)
3303 (TestLoadError.file_contents, TestLoadError.test): Update for
3304 1.0.0 namespace
3305
3306 * test/test_save.py (SaveSessionTest.dtd)
3307 (SaveSessionTest.testEmptySession)
3308 (SaveSessionTest.testSingleLayer)
3309 (SaveSessionTest.testLayerProjection)
3310 (SaveSessionTest.testRasterLayer)
3311 (SaveSessionTest.testClassifiedLayer)
3312 (SaveSessionTest.test_dbf_table)
3313 (SaveSessionTest.test_joined_table)
3314 (SaveSessionTest.test_save_postgis): Update for 1.0.0 namespace
3315
3316 2003-12-22 Bernhard Herzog <[email protected]>
3317
3318 * Thuban/Model/load.py (SessionLoader.start_label): Make sure the
3319 alignment flags are byte strings not unicode and that they have
3320 valid values
3321
3322 * test/test_load.py (TestLabelLayer): New. Test loading (and
3323 indirectly saving) of maps with labels.
3324
3325 2003-12-22 Bernhard Herzog <[email protected]>
3326
3327 * Thuban/UI/tableview.py (TableGrid.OnDestroy)
3328 (TableGrid.__init__): Handle EVT_WINDOW_DESTROY in the grid to
3329 unsubscribe all subscribers.
3330 (LayerTableFrame.OnDestroy): Do not unsubscribe any messages from
3331 self.grid since it may already have been destroyed.
3332 Fixes RT #2256
3333
3334 2003-12-19 Bernhard Herzog <[email protected]>
3335
3336 * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
3337
3338 2003-12-16 Bernhard Herzog <[email protected]>
3339
3340 * debian/bitmappath.patch, debian/setup.py.patch:
3341 added to ensure compliance with FHS for debian
3342 * debian/rules, debian/changelog:
3343 added patches in rules to ensure compliance with FHS for debian
3344
3345 2003-12-16 Bernhard Herzog <[email protected]>
3346
3347 * po/Makefile (mo): Make the output a bit nicer so that it prints
3348 statistics about the translations. Add a comment how produce even
3349 nicer statistics with sed.
3350
3351 2003-12-09 Frank Koormann <[email protected]>
3352
3353 * Resources/Projections/defaults.proj:
3354 French projection sample with correct accents (UNICODE).
3355
3356 2003-12-05 Bernhard Herzog <[email protected]>
3357
3358 * MANIFEST.in: Add the devtools directory
3359
3360 * setup.py (setup call): Use license instead of licence. This
3361 silences a deprecation warning on Python 2.3
3362
3363 2003-12-05 Frank Koormann <[email protected]>
3364
3365 Documentation synced with 1.0rc1
3366
3367 * Doc/manual/thuban-manual.xml:
3368 Minor formatting changes and references to database layers .
3369 Introduction.Internationalization: New section on i18n.
3370 MapManagement.AddingandRemovingLayers: Added item on database layers.
3371 MapManagement.TheLegend: Added section and screenshot on popup menu.
3372 ProjectionManagement: Updated screenshot and sentence on EPSG.
3373 Appendix.SupportedDataSources: Added PostGIS.
3374 Appendix.WorkingwithPostGIS: New section.
3375
3376 * Doc/manual/images/6_projection.png: Updated screenshot including
3377 EPSG checkboxes.
3378
3379 * Doc/manual/images/3_5_popup_menu.png: New, popup menu screenshot.
3380
3381 * Doc/manual/images/app_postgis_add_layer.png,
3382 Doc/manual/images/app_postgis_db_add.png,
3383 Doc/manual/images/app_postgis_db_management.png:
3384 New screenshots focussing on database layers
3385
3386 2003-12-05 Frank Koormann <[email protected]>
3387
3388 * Thuban/UI/projdialog.py (load_user_proj): If user.proj is missing
3389 write warning to stderr instead of rising a warning dialog
3390
3391 2003-12-03 Bernhard Herzog <[email protected]>
3392
3393 Fix for RT #2243
3394
3395 * Thuban/UI/mainwindow.py (MainWindow.has_selected_shape_layer):
3396 New. Like has_selected_layer but for shape layers only
3397 (_has_selected_shape_layer): New. Like _has_selected_layer but for
3398 shape layers only
3399 (layer_show_table command, layer_jointable command): Use these
3400 commands should only be available for shape layers
3401
3402 2003-12-03 Bernhard Herzog <[email protected]>
3403
3404 * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
3405 publishers that are wx objects and may have been destroyed by wx
3406 already. Fixes RT #2242.
3407
3408 2003-12-03 Bernhard Herzog <[email protected]>
3409
3410 * po/ru.po: Updates from Alex Shevlakov
3411
3412 2003-12-03 Silke Reimer <silkeintevation.de>
3413
3414 * debian/control, debian/changelog: Added gdal-support to
3415 debian package, updated to new thuban version
3416
3417
3418 2003-12-03 Bernhard Herzog <[email protected]>
3419
3420 * Thuban/Lib/version.py: New. Module for version number
3421 manipulations. The version of make_tuple here also deals better
3422 with more unusual version number strings, such as e.g.
3423 "1.2+cvs20031111"
3424
3425 * Thuban/version.py (make_tuple): Removed. It's now in
3426 Thuban.Lib.version. Use that implementation instead.
3427
3428 * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
3429
3430 2003-12-02 Bernhard Herzog <[email protected]>
3431
3432 * MANIFEST.in: Add debian files
3433
3434 * setup.py (setup call): Add packages for the Extensions so that
3435 they're installed too
3436 (data_files): Add READMEs and sample data from some Extensions
3437
3438 * NEWS: Add note about the extensions in binary packages
3439
3440 2003-12-02 Bernhard Herzog <[email protected]>
3441
3442 * Thuban/Model/save.py (SessionSaver.write_session): Save files
3443 with the thuban-1.0rc1
3444
3445 * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
3446 thuban-1.0rc1 namespace too
3447
3448 * test/test_save.py (SaveSessionTest.dtd)
3449 (SaveSessionTest.testEmptySession)
3450 (SaveSessionTest.testSingleLayer)
3451 (SaveSessionTest.testLayerProjection)
3452 (SaveSessionTest.testRasterLayer)
3453 (SaveSessionTest.testClassifiedLayer)
3454 (SaveSessionTest.test_dbf_table)
3455 (SaveSessionTest.test_joined_table)
3456 (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
3457 namespace
3458
3459 * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
3460 namespace
3461 (TestSingleLayer.file_contents)
3462 (TestNonAsciiColumnName.file_contents)
3463 (TestLayerVisibility.file_contents)
3464 (TestClassification.file_contents, TestLabels.file_contents)
3465 (TestLayerProjection.file_contents)
3466 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3467 (TestPostGISLayer.file_contents)
3468 (TestPostGISLayerPassword.file_contents)
3469 (TestLoadError.file_contents, TestLoadError.test): Update to
3470 thuban-1.0rc1 namespace
3471
3472 2003-12-01 Bernhard Herzog <[email protected]>
3473
3474 * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
3475 nt to better match Intevation's current w32 setup
3476
3477 * HOWTO-Release: Add note about updating MANIFEST.in
3478
3479 * MANIFEST.in: Add the Extensions
3480
3481 * NEWS: Update for 1.0rc1
3482
3483 2003-12-01 Bernhard Herzog <[email protected]>
3484
3485 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
3486 cards for the dialog so that shapefiles ending in all uppercase
3487 SHP are listed too
3488
3489 2003-11-28 Bernhard Herzog <[email protected]>
3490
3491 * Thuban/version.py (longversion): Update to 1.0rc1
3492
3493 * setup.py (setup call): Update version to 1.0rc1. Use the
3494 [email protected] email address as author email instead of my
3495 personal one.
3496
3497 2003-11-28 Bernhard Herzog <[email protected]>
3498
3499 * po/de.po: Update german translation.
3500
3501 2003-11-28 Bernhard Herzog <[email protected]>
3502
3503 Unify the filenames stored in .thuban files so that the .thuban
3504 files are more platform independend
3505
3506 * Thuban/Model/save.py (unify_filename): New. Unify filenames so
3507 that they can be used on both windows and unix
3508 (SessionSaver.prepare_filename): New. Handle all filename
3509 transformations for filenames stored in the thuban file
3510 (SessionSaver.write_data_containers, SessionSaver.write_layer):
3511 Use prepare_filename
3512
3513 * test/test_save.py (SaveSessionTest.testSingleLayer)
3514 (SaveSessionTest.testLayerProjection)
3515 (SaveSessionTest.testRasterLayer)
3516 (SaveSessionTest.testClassifiedLayer)
3517 (SaveSessionTest.test_dbf_table)
3518 (SaveSessionTest.test_joined_table): Filenames are always stored
3519 with slashes on all currently supported platforms so adapt all
3520 tests to this
3521
3522 * test/test_load.py (LoadSessionTest.filenames): With the new
3523 filename scheme the filenames in the tests should be
3524 understandable on all currently supported platforms so we turn
3525 this into an empty list because we don't have to normalize them
3526 anymore
3527
3528 2003-11-28 Bernhard Herzog <[email protected]>
3529
3530 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
3531 Add the ellipsoid to the projection since some Proj versions
3532 complain if it's missing.
3533
3534 2003-11-27 Bernhard Herzog <[email protected]>
3535
3536 Corect some bounding box projection problems
3537
3538 * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
3539 version of ForwardBBox
3540 (Projection._transform_bbox): New. common implementation of
3541 ForwardBBox and InverseBBox
3542 (Projection.ForwardBBox): Use _transform_bbox.
3543
3544 * test/test_proj.py (TestProjection.test): Add test for
3545 InverseBBox
3546
3547 * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
3548 (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
3549 new InverseBBox method to determine the unprojected bounding box
3550 (Layer.ShapesInRegion): Use the ForwardBBox method to project the
3551 bbox.
3552
3553 * test/test_layer.py (TestLayer.test_point_layer_with_projection):
3554 Removed.
3555 (TestLayer.test_arc_layer_with_projection): New. This test is
3556 better able to test whether bounding boxes are projected correctly
3557 than test_point_layer_with_projection
3558
3559 * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
3560 InverseBBox to unproject bboxes
3561
3562 2003-11-25 Bernhard Herzog <[email protected]>
3563
3564 * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
3565 source code.
3566
3567 2003-11-25 Bernhard Herzog <[email protected]>
3568
3569 * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
3570 there for backwards compatibility and all code relying on that
3571 should have been updated by now.
3572
3573 2003-11-25 Bernhard Herzog <[email protected]>
3574
3575 * test/test_load.py (TestClassification.test): Add the missing
3576 round trip test.
3577 (TestClassification.file_contents): Update to the newest file
3578 format
3579
3580 2003-11-25 Bernhard Herzog <[email protected]>
3581
3582 Add very experimental (and possibly dangerous) extension to draw
3583 polygons:
3584
3585 * Extensions/drawshape/README: New. Brief installation
3586 instructions
3587
3588 * Extensions/drawshape/drawshape.py: New. Implementation of the
3589 drawshape extensions
3590
3591 * Extensions/drawshape/patch.diff: Patch to apply before the
3592 extension can be used.
3593
3594 2003-11-24 Bernhard Herzog <[email protected]>
3595
3596 * Thuban/Model/data.py (ShapefileStore._open_shapefile)
3597 (ShapefileStore.__init__): Factor opening the shapefile into a
3598 separate method (the new _open_shapefile). This makes the code a
3599 bit more readable but the real reason is that it makes some evil
3600 hacks easier. :-)
3601
3602 2003-11-24 Bernhard Herzog <[email protected]>
3603
3604 * Thuban/Model/load.py (SessionLoader.check_attrs): If no
3605 converter is specified for an attribute assume it's a string
3606 containing only Latin1 characters. Update doc-string accordingly.
3607 This change should fix many places where unicode objects might
3608 accidentally enter Thuban.
3609
3610 * test/test_load.py (TestNonAsciiColumnName): New test to check
3611 what happens with column names in DBF files that contain non-ascii
3612 characters
3613
3614 2003-11-21 Bernhard Herzog <[email protected]>
3615
3616 Enable the experimental attribute editing again and introduce a
3617 command line switch to actually activate it
3618
3619 * Thuban/UI/main.py (options): New. Container for options set on
3620 the commmand line
3621 (main): Add the --enable-attribute-editing flag.
3622
3623 * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
3624 editing is enabled use the grid ctrl which allows editing of the
3625 values
3626
3627 * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
3628 New. Just delegate this to the underlying table.
3629
3630 2003-11-20 Bernhard Herzog <[email protected]>
3631
3632 * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
3633 Skip this test if run under non-posix systems since it only works
3634 there
3635
3636 2003-11-19 Bernhard Herzog <[email protected]>
3637
3638 * Thuban/Model/resource.py: Rework the way gdal support is
3639 determined so that we can give a reason in the about why gdal is
3640 not supported.
3641 (gdal_support_status): New. Variable holding a string with the
3642 reason for no gdal support
3643
3644 * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
3645 not supported to the message
3646
3647 2003-11-19 Bernhard Herzog <[email protected]>
3648
3649 Remove the old table interface and its test cases
3650
3651 * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
3652 (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
3653 anymore
3654
3655 * Thuban/Model/transientdb.py (TransientTableBase)
3656 (AutoTransientTable): Do not derive from OldTableInterfaceMixin
3657 anymore
3658
3659 * test/test_table.py: Removed since the old interface it tests is
3660 gone.
3661
3662 * test/runtests.py (main): The old table interface is gone and
3663 with it the deprecation warnings so remove the code that turns
3664 these warnings into errors
3665
3666 2003-11-19 Bernhard Herzog <[email protected]>
3667
3668 * test/test_table.py: Revert to revision 1.5 again. Changing the
3669 tests to use the new table interface is completely wrong since the
3670 whole purpose of the tests in this module is to test the old
3671 interface.
3672
3673 2003-11-18 Bernhard Herzog <[email protected]>
3674
3675 * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
3676 New. Test whether the connection matches a set of connection
3677 parameters
3678
3679 * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
3680 (DBFrame.OnAdd): Use the new MatchesParameters method when looking
3681 for existing connections with the same parameters and break out of
3682 the loop correctly.
3683
3684 * test/test_postgis_db.py (TestBriefDescription)
3685 (TestPostGISSimple.test_brief_description): Rename
3686 TestBriefDescription to TestPostGISSimple and the test method to
3687 test_brief_description so that we can add more test methods.
3688 (TestPostGISSimple.test_matches_parameters): New. Test the new
3689 MatchesParameters method
3690
3691 2003-11-18 Bernhard Herzog <[email protected]>
3692
3693 * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
3694 _was_destroyed, to indicate whether an publisher instance has
3695 already been destroyed.
3696 (Publisher.Unsubscribe): Only disconnect if the publisher has not
3697 been destroyed yet.
3698 (Publisher.Destroy): Set the _was_destroyed flag to true.
3699
3700 * test/test_connector.py
3701 (TestPublisher.test_unsubscribe_after_destroy): New. Test that
3702 calling Unsubscribe after Destroy doesn't raise an exception
3703
3704 2003-11-14 Bernhard Herzog <[email protected]>
3705
3706 * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
3707 typo in doc-string
3708
3709 2003-11-13 Bernhard Herzog <[email protected]>
3710
3711 Quote table and column names properly for postgis.
3712
3713 * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
3714 quote an identifier for use in an sql statement
3715 (PostGISColumn.__init__): Add the quoted_name attribute
3716 (PostGISTable.__init__): New instance variable quoted_tablename
3717 (PostGISTable._fetch_table_information): Use the quoted table
3718 name. New isntance variable quoted_geo_col with a quoted version
3719 of geometry_column
3720 (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
3721 (PostGISTable.RowOrdinalToId): Use the quoted table name
3722 (PostGISTable.ReadValue, PostGISTable.ValueRange)
3723 (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
3724 (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
3725 (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
3726 Use quoted table and column names
3727
3728 * test/test_postgis_db.py (TestPostGISSpecialCases)
3729 (TestPostGISIgnoredColumns): Rename the class to
3730 TestPostGISSpecialCases because that better describes the new
3731 cases
3732 (TestPostGISSpecialCases.test_unsupported_types)
3733 (TestPostGISSpecialCases.test): Rename the method to
3734 test_unsupported_types because we need a more descriptive name now
3735 that there are more methods
3736 (TestPostGISSpecialCases.test_table_name_quoting)
3737 (TestPostGISSpecialCases.test_column_name_quoting)
3738 (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
3739 cases to test quoting of table and column names in PostGISTable
3740 and PostGISShapeStore
3741
3742 * test/postgissupport.py
3743 (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
3744 AddGeometryColumn desn't support table or column names with sapces
3745 or double quotes
3746
3747 2003-11-12 Jan-Oliver Wagner <[email protected]>
3748
3749 * Extensions/wms/__init__.py: New: Init to make this
3750 directory a package.
3751
3752 * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
3753
3754 2003-11-11 Bernhard Herzog <[email protected]>
3755
3756 * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
3757 Constant for the file woth deprecated epsg projections
3758 (get_system_proj_file): Update doc-string
3759
3760 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
3761 above the EPS widgets, introduce a check box for the deprecated
3762 eps projections and a label for the epsg widgets
3763 (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
3764 too
3765
3766 2003-11-11 Bernhard Herzog <[email protected]>
3767
3768 Avoid warnings when run under Python 2.3
3769
3770 * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
3771 (BaseRenderer.draw_label_layer): Coordinates must be ints.
3772
3773 * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
3774 real method so that we can convert to int.
3775 (MapRenderer.label_font): The font size mist be an int.
3776
3777 * Thuban/UI/common.py (Color2wxColour): The color values must be
3778 ints. Also, remove the unnecessary asserts.
3779
3780 * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
3781 (TestUnicodeStrings.test): Python source code should not contain
3782 non-ascii characters unless an encoding is specified in the file.
3783 Therefore use \x escapes in the string literals for non-ascii
3784 characters.
3785
3786 2003-11-11 Bernhard Herzog <[email protected]>
3787
3788 * Thuban/Model/resource.py (get_system_proj_file): Add a filename
3789 parameter so that this function can be used for all proj files in
3790 Resource/Projections
3791 (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
3792 get_system_proj_file
3793
3794 * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
3795 ProjFile self.__sysProjFile use a dictionary of system ProjFile
3796 objects self._sys_proj_files
3797 (ProjFrame.build_dialog): Adapt to the new changes in the
3798 ProjectionList constructor. Add a check button to toggle whether
3799 EPSG projections are shown
3800 (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
3801 events.
3802 (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
3803 the busy cursor if the files have not yet been loaded by the
3804 dialog.
3805 (ProjFrame.load_system_proj): Add a parameter for the name of the
3806 proj file. Maintain the dictionary of system projections
3807 self._sys_proj_files
3808
3809 * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
3810 user_projs parameters into one parameter proj_files which is a
3811 list of proj files.
3812 (ProjectionList._subscribe_proj_files)
3813 (ProjectionList._unsubscribe_proj_files): New. Move
3814 subscription/unsubscription of projfile messages to separate
3815 methods
3816 (ProjectionList.Destroy): The unsubscribe is now done in
3817 _unsubscribe_proj_files
3818 (ProjectionList.update_projections): We now have a list of proj
3819 file objects
3820 (ProjectionList.SetProjFiles): New method to set a new list of
3821 proj file objects
3822
3823 * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
3824 Specify explicitly which system proj file to load.
3825
3826 2003-11-11 Bernhard Herzog <[email protected]>
3827
3828 * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
3829 instance variables to cut cyclic references. The GC would have
3830 collected the loader eventually but it can happen that it doesn't
3831 run at all until thuban is closed (2.3 but not 2.2 tries a bit
3832 harder and forces a collection when the interpreter terminates)
3833 (load_session): Call the handler's Destroy method to make sure
3834 that it gets garbage collected early. Otherwise it will be
3835 collected very late if at all and it holds some references to e.g.
3836 shapestores and the session which can lead to leaks (of e.g. the
3837 temporary files)
3838
3839 * test/test_load.py (TestSingleLayer.test_leak): New. test for the
3840 resource leak in load_session
3841
3842 2003-11-10 Bernhard Herzog <[email protected]>
3843
3844 * Thuban/UI/baserenderer.py: Add a way to specify how layers in
3845 extensions are to be rendered.
3846 (_renderer_extensions): New. List with renderer for layers in
3847 extensions
3848 (add_renderer_extension): New. Add a renderer extension
3849 (init_renderer_extensions): New. Init the renderer extensions
3850 (BaseRenderer.render_map_incrementally): Search
3851 _renderer_extensions for how to draw unknown layer types
3852 (BaseRenderer.draw_raster_data): Add format parameter so that
3853 formats other than BMP can be drawn
3854 (BaseRenderer.draw_raster_layer): Pass an explicit format to
3855 draw_raster_data
3856
3857 * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
3858 strings of the format parameter of draw_raster_data method to wx
3859 constants
3860 (MapRenderer.draw_raster_data): Add the format parameter and use
3861 raster_format_map to map it to the right wxwindows constant for
3862 wxImageFromStream
3863
3864 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
3865 the format parameter and record it
3866 (TestBaseRenderer.test_raster_no_projection): check the format
3867 paramter of the draw_raster_data method
3868 (TestBaseRenderer.test_renderer_extension): New. Test the renderer
3869 extension facility
3870
3871 2003-11-07 Bernhard Herzog <[email protected]>
3872
3873 Tweak the usage of the sqlite database to make common use cases
3874 more responsive. In most cases copying the data to the sqlite
3875 database takes so long that using sqlite doesn't have enough
3876 advantages.
3877
3878 * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
3879 comments about performance and query the min and max in separate
3880 statements because only that way will indexes be used.
3881 (TransientTableBase.UniqueValues): Add some comments about
3882 performance.
3883 (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
3884 Do not copy the data to the transient DB but use the transient
3885 copy if it exists. See the new comments for the performance trade
3886 offs
3887
3888 * test/test_transientdb.py
3889 (TestTransientTable.test_auto_transient_table): Make sure that the
3890 data is copied to the transient database at some point.
3891
3892 2003-11-03 Bernhard Herzog <[email protected]>
3893
3894 * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
3895 globals to locals so that it's a bit faster
3896
3897 2003-11-03 Bernhard Herzog <[email protected]>
3898
3899 * Thuban/UI/baserenderer.py
3900 (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
3901 method. ReadValue is faster than ReadRowAsDict since it only reads
3902 one cell especially now that the dbf file objects actually
3903 implement it.
3904
3905 * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
3906 read_attribute method of the dbf objects
3907
3908 2003-11-03 Bernhard Herzog <[email protected]>
3909
3910 * Extensions/profiling/profiling.py (popup_dialog_box): New config
3911 variable to indicate whether the result should be shown in a
3912 dialog box
3913 (profile_screen_renderer, time_screen_renderer): Only show a
3914 dialog box if popup_dialog_box is true.
3915 (profile_screen_renderer): Flush stdout after the printing the
3916 first part of the "profiling..." message
3917
3918 * Thuban/UI/baserenderer.py
3919 (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
3920 brushes for the groups so that they're not created over and over
3921 again
3922
3923 * Thuban/Model/classification.py (Classification.__getattr__)
3924 (Classification._compile_classification)
3925 (Classification._clear_compiled_classification): New. Methods to
3926 manage a 'compiled' representation of the classification groups
3927 which is created on demand
3928 (Classification.InsertGroup, Classification.RemoveGroup)
3929 (Classification.ReplaceGroup): reset the compiled representation
3930 (Classification.FindGroup): Use the compiled representation to
3931 find the matching group
3932 (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
3933
3934 2003-10-31 Bernhard Herzog <[email protected]>
3935
3936 * Thuban/Model/classification.py (Classification.SetDefaultGroup):
3937 Send a CLASS_CHANGED message
3938 (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
3939 not return the removed group since it wasn't used.
3940
3941 * test/test_classification.py
3942 (TestClassification.test_set_default_group): New. Test the
3943 SetDefaultGroup method
3944 (TestClassification.test_insert_group): New. Test the InsertGroup
3945 method
3946 (TestClassification.test_remove_group): New. Test the RemoveGroup
3947 method
3948 (TestClassification.test_replace_group): New. Test the
3949 ReplaceGroup method
3950
3951 2003-10-31 Bernhard Herzog <[email protected]>
3952
3953 * test/test_classification.py (TestClassification.setUp):
3954 Subscribe to the CLASS_CHANGED messages
3955 (TestClassification.tearDown): New. Destroy the classification
3956 properly
3957 (TestClassification.test_defaults): Add tests for the default line
3958 width and whether no messages were sent yet
3959 (TestClassification.test_set_default_properties): Add tests for
3960 messages and setting the default line width
3961 (TestClassification.test_add_singleton)
3962 (TestClassification.test_add_range)
3963 (TestClassification.test_multiple_groups): Add tests for messages
3964
3965 2003-10-31 Bernhard Herzog <[email protected]>
3966
3967 Some more refactoring in preparation for new tests:
3968
3969 * test/test_classification.py (TestClassification.setUp): New.
3970 Instantiate the classification here. Update the test methods
3971 accordingly.
3972 (TestClassification.test_multiple_groups): Make sure that the two
3973 singletons matching 1 are considered different.
3974
3975 2003-10-31 Bernhard Herzog <[email protected]>
3976
3977 * test/test_classification.py (red, green, blue): New. These
3978 constants were used in several cases. Update the relevant methods.
3979 (TestClassification.test_defaults)
3980 (TestClassification.test_set_default_properties)
3981 (TestClassification.test_add_singleton)
3982 (TestClassification.test_add_range)
3983 (TestClassification.test_multiple_groups)
3984 (TestClassification.test_deepcopy): New. These were formerly all
3985 part of the single method test.
3986 (TestClassification.test_deepcopy): Removed.
3987 (TestClassIterator): Removed. The test case is now a method of
3988 TestClassification since it tests part of the public interface of
3989 Classification
3990 (TestClassification.test_iterator): New. Used to be
3991 TestClassIterator effectively
3992
3993 2003-10-31 Jan-Oliver Wagner <[email protected]>
3994
3995 GUIfied the functions of the profiling extension.
3996
3997 * /Extensions/profiling/__init__.py: New: Init to make this
3998 directory a package.
3999
4000 * Extensions/profiling/profiling.py: Moved menu entries to
4001 the Extensions menu. Applied _() for strings.
4002 (profile_screen_renderer): Catch the detailed printout and present
4003 it in a dialog.
4004 (time_screen_renderer): Raise a dialog to present the result instead
4005 of printing it to stdout.
4006
4007 2003-10-31 Bernhard Herzog <[email protected]>
4008
4009 * test/test_classification.py (TestClassGroupProperties)
4010 (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
4011 (TestClassGroupSingleton, TestClassIterator, TestClassification):
4012 Split TestClassification into several classes, one for each class
4013 being tested. TestClassification itself now only tests
4014 Classification. This split makes changes to the tests a bit easier
4015
4016 2003-10-31 Bernhard Herzog <[email protected]>
4017
4018 * Extensions/profiling/profiling.py: New. Extension to measure
4019 Thuban performance
4020
4021 2003-10-31 Frank Koormann <[email protected]>
4022
4023 Added two items to legend popup menu: Remove Layer and Show Layer Table
4024
4025 * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
4026 LegendPanel._OnShowTable): New event handlers, call the corresponding
4027 mainwindow methods.
4028 (LegendTree._OnRightClick): Added items to popup menu.
4029
4030 2003-10-30 Bernhard Herzog <[email protected]>
4031
4032 * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
4033 EVT_WINDOW_DESTROY
4034 (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
4035 nothing but is convenient for the derived classes.
4036
4037 * Thuban/UI/tableview.py
4038 (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
4039 Unsubscribe the messages here not in OnClose because that might
4040 get called multiple times. Fixes RT #2196
4041 (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
4042 anymore.
4043
4044 * README: Update the minimum requirement for wxPython. Since we
4045 now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
4046 the version in which that was introduced for all platforms
4047
4048 2003-10-30 Frank Koormann <[email protected]>
4049
4050 * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
4051 the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
4052 frame.
4053
4054 2003-10-30 Jan-Oliver Wagner <[email protected]>
4055
4056 Improved APR import extension, added further EPSG definitions
4057 and some cleanup regarding string class.
4058
4059 * test/test_proj.py (TestProjection.test_get_projection_units_geo):
4060 Added test for alias 'longlat'.
4061
4062 * Resources/Projections/epsg-deprecated.proj: New. Contains
4063 deprecated EPSG definitions.
4064
4065 * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
4066 the variable names for objects.
4067
4068 * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
4069 Copied from importAPR and provided with documentation.
4070
4071 * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
4072 Moved to apr.py.
4073 (APR_View): Added object ref 'ITheme'.
4074
4075 * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
4076 split function by corresponding use of the string class method.
4077
4078 * Thuban/Model/xmlwriter.py: Replaced string replace function by
4079 corresponding string method.
4080
4081 2003-10-29 Bernhard Herzog <[email protected]>
4082
4083 * Thuban/UI/baserenderer.py
4084 (BaseRenderer.draw_shape_layer_incrementally): Speed up the
4085 special case of a classification that only has the default group
4086
4087 2003-10-27 Bernhard Herzog <[email protected]>
4088
4089 * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
4090
4091 * po/de.po: Update.
4092
4093 * Thuban/UI/application.py
4094 (ThubanApplication.ShowExceptionDialog): Handle translation of the
4095 dialog message properly
4096
4097 2003-10-27 Bernhard Herzog <[email protected]>
4098
4099 Rework how localization works so that we use wx's translation
4100 functions when running Thuban as a normal application but not when
4101 we don't need any UI, such as in the test suite. See the comment
4102 in Thuban/__init__.py for details
4103
4104 * Thuban/__init__.py (_): Add one level of indirection to make the
4105 translation handling more flexible and to make it possible to use
4106 either wx's translation services or not.
4107 (gettext_identity, translation_function_installed)
4108 (install_translation_function): New function to help with this
4109
4110 * Thuban/UI/__init__.py: Install the wx specific translation
4111 function if it's OK to do that
4112
4113 * test/support.py (initthuban): Install a dummy translation
4114 function so that importing Thuban.UI doesn't install a wx specific
4115 one for which would need to import wxPython
4116
4117 2003-10-27 Bernhard Herzog <[email protected]>
4118
4119 * HOWTO-Release: Source archives should be created first and the
4120 binary packages should be created from the source archives.
4121 There's an official debian package now so there's no need to test
4122 the rpm on debian anymore
4123
4124 2003-10-27 Bernhard Herzog <[email protected]>
4125
4126 Several rendering changes:
4127
4128 - Render the selection into a separate bitmap so that only that
4129 bitmap needs to be redrawn when the selection changes
4130
4131 - Render incrementally showing previews and allowing interaction
4132 before rendering is complete
4133
4134 - Update the renderer interface a bit. Most parameters of
4135 RenderMap are now parameters of the constructor
4136
4137 * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
4138 and the update region as parameters. Update the doc-string
4139 (BaseRenderer.render_map_incrementally): New. Generator function
4140 to renders the map incrementally
4141 (BaseRenderer.render_map): Remove the map argument (it's now in
4142 the constructor) and simply iterate over the
4143 render_map_incrementally generator to draw the map.
4144 (BaseRenderer.draw_shape_layer_incrementally)
4145 (BaseRenderer.draw_shape_layer): Renamed to
4146 draw_shape_layer_incrementally and changed into a generator that
4147 yields True every 500 shapes. Used by render_map_incrementally to
4148 render shape layers incrementally
4149
4150 * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
4151 map and region parameters which are now in the constructor
4152 (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
4153 the inherited render_map_incrementally.
4154 (BaseRenderer.draw_shape_layer): Removed.
4155 (ScreenRenderer.draw_selection_incrementally): New. The selection
4156 drawing part of the removed draw_shape_layer as a generator
4157 (ScreenRenderer.layer_shapes): Update because of the region
4158 parameter change
4159 (ExportRenderer.__init__): New. Extend the inherited constructor
4160 with the destination region for the drawing
4161 (ExportRenderer.RenderMap): Removed the map and region parameters
4162 which are now in the constructor
4163
4164 * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
4165 bitmap suitable for a preview in a tool
4166 (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
4167 bitmap
4168 (MapPrintout.draw_on_dc): Adapt to new renderer interface
4169 (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
4170 exists
4171 (MapCanvas.OnIdle): Update the logic to deal with incremental
4172 rendering and the selection bitmap
4173 (MapCanvas._do_redraw): Handle the instantiation of the render
4174 iterator and the redraws during rendering
4175 (MapCanvas._render_iterator): New. Generator to incrementally
4176 redraw both bitmaps
4177 (MapCanvas.Export): Adapt to new renderer interface.
4178 (MapCanvas.full_redraw): Reset the selection bitmap and the
4179 renderer iterator too
4180 (MapCanvas.redraw_selection): New. Force a redraw of the selection
4181 bitmap
4182 (MapCanvas.shape_selected): Only redraw the selection bitmap
4183
4184 * test/test_baserenderer.py
4185 (TestBaseRenderer.test_polygon_no_projection)
4186 (TestBaseRenderer.test_raster_no_projection)
4187 (TestBaseRenderer.test_point_map_projection)
4188 (TestBaseRenderer.test_point_layer_and_map_projection)
4189 (TestBaseRenderer.test_point_layer_projection)
4190 (TestBaseRenderer.test_point_with_classification): Adapt to new
4191 renderer interface
4192
4193 2003-10-24 Bernhard Herzog <[email protected]>
4194
4195 * libraries/thuban/wxproj.cpp (draw_polygon_shape)
4196 (point_in_polygon_shape, shape_centroid): Raise an exception if
4197 the shape can't be read. Previously invalid shape ids would lead
4198 to a segfault.
4199
4200 * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
4201 New. test whether an exception is raised for invalid shape ids
4202
4203 2003-10-24 Jan-Oliver Wagner <[email protected]>
4204
4205 * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
4206 as alias for 'latlong'.
4207
4208 * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
4209 as alias for 'latlong'.
4210
4211 2003-10-24 Jan-Oliver Wagner <[email protected]>
4212
4213 * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
4214 the projection even for the UnknownPanel.
4215 (UnknownProjPanel.__init__): Define the text and create the textctrl
4216 widget.
4217 (UnknownProjPanel._DoLayout): Replaced static text widget by the
4218 textctrl created in __init__.
4219 (UnknownProjPanel.SetProjection): Set the text for the text ctrl
4220 including the parameters of the projection.
4221
4222 2003-10-24 Jan-Oliver Wagner <[email protected]>
4223
4224 * Resources/Projections/epsg.proj: New. This is a list of
4225 EPSG codes with parameters for proj. The list has been
4226 generated using devtools/create_epsg.py based on the
4227 file nad/epsg of the proj 4.4.7 package. Four projection
4228 definitions have been deleted as they are not accepted by proj:
4229 "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
4230 and "HD72 / EOV".
4231
4232 2003-10-22 Bernhard Herzog <[email protected]>
4233
4234 Some more tweaks to the projection dialog which should fix RT
4235 #1886.
4236
4237 * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
4238 the ProjFile's messages and call the base class methods correctly
4239 (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
4240 flag on the newly selected item too. Otherwise some other item is
4241 focused and the first time the focus is moved with the keyboard
4242 the selection moves in unexpected ways.
4243
4244 * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
4245 focus on the OK button, only on the projection list. That way the
4246 list really has the focus initially
4247 (ProjFrame.OnClose): Call the projection list's Destroy method to
4248 make it unsubscribe all messages
4249
4250 2003-10-21 Bernhard Herzog <[email protected]>
4251
4252 Rework the projection dialog to fix a few bugs, including RT 2166
4253 and most of 2168
4254
4255 * Thuban/UI/projlist.py: New. The class ProjectionList is a
4256 special wxListCtrl to show a list of projections in a more MVC
4257 fashion
4258
4259 * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
4260 throughout the class. The main change is to use the ProjectionList
4261 class instead of a normal wxListBox. Also, add an explicit
4262 "Unknown" projection to the projection choice control.
4263 (ProjPanel.__init__): Add an "unknown" ellipsoid
4264 (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
4265 instantiation of the panel's controls to make the tab-order more
4266 natural
4267
4268 2003-10-21 Bernhard Herzog <[email protected]>
4269
4270 * test/test_load.py (TestSingleLayer.file_contents)
4271 (TestSingleLayer.test): Add non-ascii characters to the titles of
4272 session, map and layer. This is effectively a port of the
4273 TestUnicodeStrings test in test_load_0_8.py which for some reason
4274 was only added there.
4275
4276 * test/test_load_0_9.py (TestSingleLayer.file_contents)
4277 (TestSingleLayer.test): Same as in test_load.py: add non-ascii
4278 characters to the titles of session, map and layer,.
4279
4280 2003-10-21 Bernhard Herzog <[email protected]>
4281
4282 Add EPSG projection handling to .thuban files
4283
4284 * test/test_save.py (SaveSessionTest.dtd)
4285 (SaveSessionTest.testEmptySession)
4286 (SaveSessionTest.testLayerProjection)
4287 (SaveSessionTest.testRasterLayer)
4288 (SaveSessionTest.testClassifiedLayer)
4289 (SaveSessionTest.test_dbf_table)
4290 (SaveSessionTest.test_joined_table)
4291 (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
4292 (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
4293 use a and epsg projection to test saving them
4294
4295 * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
4296 namespace
4297 (TestLayerVisibility.file_contents, TestLabels.file_contents)
4298 (TestLayerProjection.file_contents)
4299 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
4300 (TestPostGISLayer.file_contents)
4301 (TestPostGISLayerPassword.file_contents)
4302 (TestLoadError.file_contents, TestLoadError.test): Update to use
4303 1.0-dev namespace
4304 (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
4305 use 1.0-dev namespace and use an EPSG projection to test whether
4306 loading it works
4307
4308 * test/test_load_0_9.py: New. Effectively a copy of test_load.py
4309 as of Thuban 0.9. These are now tests to determine whether Thuban
4310 can still read files generated by Thuban 0.9
4311
4312 * Thuban/Model/save.py (SessionSaver.write)
4313 (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
4314 namespace
4315 (SessionSaver.write_projection): Write the projection's epsg
4316 attribute
4317
4318 * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
4319 thuban-1.0-dev.dtd namespace
4320 (SessionLoader.check_attrs): Allow a callable object as conversion
4321 too
4322 (SessionLoader.start_projection, SessionLoader.end_projection)
4323 (SessionLoader.start_parameter): Handle the epsg attribute and
4324 rename a few instance variables to lower case
4325
4326 * Resources/XML/thuban-1.0.dtd: New. Only difference to
4327 thuban-0.9.dtd is the epsg attribute for projections.
4328
4329 2003-10-21 Bernhard Herzog <[email protected]>
4330
4331 * test/runtests.py (main): Let the user specify which tests to run
4332 on the command line
4333
4334 * test/support.py (ThubanTestResult.getDescription): Override to
4335 give a better short description. The description can be used as a
4336 parameter to run_tests to run that particular test in isolation.
4337
4338 2003-10-21 Frank Koormann <[email protected]>
4339
4340 Popup menu for legend. Scheduled for the 1.2 release this was too
4341 simple to implement: The popup menu is bound to the legend tree, while
4342 the events are hanlded by its anchestor, the legend panel. This
4343 allows reuse of all the event handlers already implemented for the
4344 legend toolbar buttons.
4345
4346 * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
4347 to add handlers for the events issued by the popup menu.
4348 (LegendPanel._OnToggleVisibility): Handler for toggling layer
4349 visibility event
4350 (LegendPanel._OnProjection): Handler for layer projection event.
4351 (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
4352 (LegendTree._OnRightClick): Event handler for right click, select item
4353 and pop up menu.
4354 (LegendTree.ToggleVisibility): Toggle layer visibility
4355 (LegendTree.LayerProjection): Raise layer projection dialog for
4356 current layer.
4357
4358 2003-10-21 Bernhard Herzog <[email protected]>
4359
4360 * Resources/Projections/defaults.proj: Use correct DOCTYPE
4361 declaration. The top-level element is projectionlist not projfile
4362
4363 2003-10-20 Bernhard Herzog <[email protected]>
4364
4365 * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
4366 method to write a projfile and display a busy cursor and error
4367 dialogs.
4368 (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
4369 (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
4370 (ProjFrame.__FillAvailList): Translate "<None>" too and display a
4371 busy cursor while loading the user and system prj files.
4372
4373 2003-10-16 Bernhard Herzog <[email protected]>
4374
4375 * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
4376 ProjFile objects
4377 (clear_proj_file_cache): New function to clear the cache. Mainly
4378 useful for use by the test suite
4379 (read_proj_file): Use the cache.
4380
4381 * test/test_proj.py (TestProjFile): Clarify the doc-string
4382 (ProjFileReadTests): Update doc-string
4383 (ProjFileReadTests.test_get_system_proj_file): Check whether the
4384 system proj files is cached.
4385 (ProjFileLoadTestCase): New base class for the proj file tests
4386 derived from support.FileLoadTestCase to provide some common
4387 behavior.
4388 (TestLoadingProjFile)
4389 (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
4390 (TestProjFileWithInvalidParameters.file_contents): Derive from
4391 ProjFileLoadTestCase
4392 (TestLoadingProjFile.test_caching): New. Test whether the cache
4393 works
4394
4395 2003-10-16 Silke Reimer <[email protected]>
4396
4397 * debian/*: New directory with configuration files for building a thuban
4398 deb-package.
4399
4400 2003-10-14 Bernhard Herzog <[email protected]>
4401
4402 * test/test_proj.py: Execute support.run_tests when run as
4403 __main__ so that missing unsubscribes are detected
4404 (TestProjFile.tearDown): Destroy the proj_file properly
4405
4406 2003-10-14 Bernhard Herzog <[email protected]>
4407
4408 * Thuban/Model/messages.py (PROJECTION_ADDED)
4409 (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
4410 the ProjFile objects
4411
4412 * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
4413 easily send messages when the projections change
4414 (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
4415 when the change was successful
4416
4417 * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
4418 proj file messages
4419 (TestProjFile.test_add_remove)
4420 (TestProjFile.test_remove_non_existing)
4421 (TestProjFile.test_replace)
4422 (TestProjFile.test_replace_non_existing): Test whether the right
4423 messages are sent
4424
4425 2003-10-14 Bernhard Herzog <[email protected]>
4426
4427 * test/test_proj.py (TestProjFile.test): Refactor into several
4428 tests
4429 (TestProjFile.test_add_remove)
4430 (TestProjFile.test_remove_non_existing)
4431 (TestProjFile.test_replace)
4432 (TestProjFile.test_replace_non_existing): Some of the new
4433 individual test cases
4434 (TestProjFileSimple): New class for the rest of the test cases
4435 that came out of the refactoring
4436 (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
4437 derived classes don't have to
4438
4439 2003-10-13 Bernhard Herzog <[email protected]>
4440
4441 Add an optional EPSG code to the projection objects and extend the
4442 .proj file format accordingly.
4443
4444 * Resources/XML/projfile.dtd (element projection): Add epsg
4445 attribute
4446
4447 * Thuban/Model/proj.py (Projection.__init__): New parameter and
4448 instance variable epsg. Update doc-string
4449 (Projection.EPSGCode, Projection.Label): New methods to provide
4450 access to EPSG code and a label for use in dialogs
4451
4452 * Thuban/Model/resource.py (ProjFileReader.start_projection)
4453 (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
4454 Handle the epsg code attribute when reading or writing proj files
4455
4456 * Thuban/UI/projdialog.py (ProjFrame._OnSave)
4457 (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
4458 (ProjFrame.__FillAvailList): Use the projection's Label method to
4459 get the string for the list box
4460
4461 * test/test_proj.py (TestProjection.test_label)
4462 (TestProjection.test_label_epsg)
4463 (TestProjection.test_epsgcode_for_non_epsg_projection)
4464 (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
4465 for the label and EPSGCode methods
4466 (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
4467 (WriteProjFileTests.test_write_empty_file): Create the ProjFile
4468 objects in the test cases and put the expected contents into the
4469 test case methods too. Update doTestWrite accordingly
4470 (TestLoadingProjFile)
4471 (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
4472 read tests from TestProjFile.
4473 (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
4474 tests are now in the new classes.
4475 (sample_projfile, sample_projfile_data)
4476 (sample_projfile2, sample_projfile_data2): Removed. Not used
4477 anymore.
4478 (TestProjFile.test_read_unreadable_file): No need to reset the
4479 permissions at the end anymore since we use a unique filename
4480
4481 2003-10-13 Bernhard Herzog <[email protected]>
4482
4483 * test/test_proj.py: Some more refactoring of the test cases
4484 (ProjFileTest): New base class for the proj file tests.
4485 (TestProjFile): Derive from ProjFileTest
4486 (TestProjFile.test_read_unreadable_file)
4487 (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
4488 the new filename method to get a unique filename
4489 (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
4490 (WriteProjFileTests): New class for proj file write tests.
4491 Contains the write test that were in TestProjFile originally.
4492
4493 2003-10-13 Bernhard Herzog <[email protected]>
4494
4495 * test/test_proj.py (TestProjFile.testRead)
4496 (TestProjFile.test_read_non_existing_file)
4497 (TestProjFile.test_read_unreadable_file)
4498 (TestProjFile.test_read_empty_file): Split into several methods.
4499
4500 2003-10-10 Bernhard Herzog <[email protected]>
4501
4502 * Thuban/UI/sizers.py: New file with custom sizers.
4503
4504 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
4505 all projection type specific panels and put them into a
4506 NotebookLikeSizer. This way the dialog doesn't change its size
4507 when a different projection is selected
4508 (ProjFrame.__init__): Rename projection_panels
4509 projection_panel_defs and reuse projection_panels for a list of
4510 the instantiated panels.
4511 (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
4512 (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
4513 the panels
4514 (UnknownProjPanel._DoLayout): Place the newlines in the message
4515 differently to make the panel narrower.
4516 (TMPanel._DoLayout): Layout the parameters in one column.
4517
4518 2003-10-10 Bernhard Herzog <[email protected]>
4519
4520 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
4521 that contains all the setup for the dialog's widgets, layout and
4522 event handling.
4523 (__): Call build_dialog to build the dialog.
4524 (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
4525 Their functionality is now in build_dialog
4526 (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
4527 (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
4528 (ProjFrame.__DoOnProjChoice): Small updates due to slightly
4529 different widget names and hierarchy introduced with build_dialog.
4530
4531 2003-10-10 Bernhard Herzog <[email protected]>
4532
4533 * README: Fix typo.
4534
4535 2003-10-09 Bernhard Herzog <[email protected]>
4536
4537 * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
4538 projection is already in the list. This is *a lot* faster when
4539 loading files with hundreds of projections since it saves a linear
4540 search. OTOH this will allow adding the same projection to the
4541 user.proj file multiple times in the projection dialog but we'll
4542 deal with that later
4543
4544 2003-10-09 Jan-Oliver Wagner <[email protected]>
4545
4546 * devtools: New. Directory for developer tools that are not intended
4547 for the regular user.
4548
4549 * devtools/create_epsg.py: New. Convert the epsg file of proj into
4550 a python .proj file.
4551
4552 2003-10-09 Bernhard Herzog <[email protected]>
4553
4554 * test/test_proj.py
4555 (TestProjection.test_get_parameter_without_equals_sign): New. Test
4556 whether GetParameter handles parameters without "=" sign correctly
4557
4558 * Thuban/Model/proj.py (Projection.GetParameter): Handle
4559 parameters that do not contain a "=". Update the doc-string
4560
4561 2003-10-08 Bernhard Herzog <[email protected]>
4562
4563 * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
4564 length limit on the projname text control
4565
4566 2003-10-08 Bernhard Herzog <[email protected]>
4567
4568 * test/test_proj.py (TestProjection.test_get_projection_units_geo)
4569 (TestProjection.test_get_projection_units_normal): New. Tests for
4570 the Projection.GetProjectedUnits method
4571
4572 2003-10-08 Jan-Oliver Wagner <[email protected]>
4573
4574 * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
4575 Added missing 'val' parameter.
4576
4577 2003-10-08 Bernhard Herzog <[email protected]>
4578
4579 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
4580 projection type of the currently selected projection is not known,
4581 i.e. there's no panel for it, use the UnknownProjPanel
4582 (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
4583 the actual replacing of the proj panel into the new method
4584 _show_proj_panel.
4585 (UnknownProjPanel): Add doc-string.
4586 (UnknownProjPanel._DoLayout): Insert a newline into the text so
4587 that the panel is not so wide.
4588
4589 2003-10-08 Bernhard Herzog <[email protected]>
4590
4591 * Thuban/Model/resource.py (read_proj_file): Return the warnings
4592 too. Update the doc-string
4593 (get_proj_files): Removed. It wasn't used anywhere
4594 (get_system_proj_files, get_system_proj_file): Rename to
4595 get_system_proj_file and return the ProjFile object and not a list
4596 of ProjFile objects. Update the callers.
4597 (get_user_proj_files, get_user_proj_file): Rename to
4598 get_user_proj_file return the ProjFile object and not a list of
4599 ProjFile objects. Update the callers.
4600 (ProjFileReader.__init__): New instance variable for the warnings.
4601 Rename the __pf ivar to projfile. Update the methods referring to
4602 __pf
4603 (ProjFileReader.end_projection): Catch any errors raised when
4604 instantiating the projection and record that as an error. The
4605 projection will not be in the final ProjFile object.
4606 (ProjFileReader.GetWarnings): New method to return the warnings.
4607
4608 * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
4609 show the warnings from the projfile reader
4610 (ProjFrame._OnImport): Deal with any warnings returned by
4611 read_proj_file
4612 (ProjFrame.__FillAvailList): Deal with any warnings returned by
4613 get_system_proj_file or get_user_proj_file.
4614
4615 * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
4616 (TestProjFileWithInvalidParameters.file_contents): New test cases
4617 to test whether read_proj_file handles invalid projection
4618 parameters correctly
4619 (TestProjFile.test_get_system_proj_file): New. Simple test for
4620 resource.get_system_proj_file
4621
4622 2003-10-07 Bernhard Herzog <[email protected]>
4623
4624 * test/test_derivedshapestore.py
4625 (TestDerivedShapeStoreExceptions.tearDown): Clear the session
4626 properly so that the temporary directories get deleted correctly
4627
4628 2003-10-06 Bernhard Herzog <[email protected]>
4629
4630 Handle the title changes in a proper MVC way.
4631
4632 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
4633 canvas' TITLE_CHANGED messages
4634 (MainWindow.update_title): New. Update the main window's title
4635 (MainWindow.__SetTitle): Removed. Use update_title instead.
4636 (MainWindow.SetMap): Use update_title instead of __SetTitle
4637 (MainWindow.RenameMap): Do change the window title explicitly
4638 here. That's handled in a proper MVC way now.
4639 (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
4640 messages
4641
4642 * Thuban/Lib/connector.py (Conduit): New class to help classes
4643 that forward messages
4644
4645 * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
4646 (ViewPort): Derive from Conduit instead of Publisher
4647 (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
4648 when calling the inherited versions
4649 (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
4650 methods to subscribe and unsubscribe map messages
4651 (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
4652 handle the map subscriptions
4653 (ViewPort.Map, ViewPort.map_projection_changed)
4654 (ViewPort.layer_projection_changed): Add or update doc-strings
4655
4656 * test/test_connector.py (TestPublisher.test_issue_simple): Fix
4657 typo
4658 (MyConduit): Helper class for the Conduit test.
4659 (TestConduit): Test cases for Conduit
4660
4661 * test/test_connector.py: Use support.run_tests as main.
4662
4663 * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
4664 the TITLE_CHANGED messages
4665 (ViewPortTest.test_forwarding_title_changed): New test to check
4666 whether the viewport forwards the map's TITLE_CHANGED messages
4667 (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
4668 after the port's because the latter may require a still functional
4669 map.
4670
4671 2003-10-06 Bernhard Herzog <[email protected]>
4672
4673 * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
4674 doc-string
4675
4676 2003-10-06 Bernhard Herzog <[email protected]>
4677
4678 * test/test_viewport.py (ViewPortTest.setUp)
4679 (SimpleViewPortTest.test_init_with_size): Move the test for the
4680 initial size as a constructor parameter from ViewPortTest.setUp
4681 method to a new separate test in SimpleViewPortTest.
4682
4683 2003-10-06 Bernhard Herzog <[email protected]>
4684
4685 * test/test_viewport.py (MockView): New class derived from
4686 ViewPort with a mock implementation of GetTextExtent to be used in
4687 the test cases
4688 (ViewPortTest.setUp): Use MockView instead of ViewPort
4689
4690 * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
4691 into what would be a "pure virtual function" in C++: always raise
4692 NotImplementedError. Mock implementations for test cases don't
4693 belong into the real code
4694
4695 2003-10-02 Bernhard Herzog <[email protected]>
4696
4697 * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
4698 close the dbf file we create so that it's contents have been
4699 written properly.
4700
4701 * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
4702 libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
4703 Update to shapelib 1.2.10
4704
4705 2003-10-01 Jan-Oliver Wagner <[email protected]>
4706
4707 * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
4708 it annoys lintian which warns about these files not being
4709 executable. The #! isn't necessary here since if you absolutely
4710 must execute them you can always say "python <filename>".
4711
4712 2003-09-26 Bernhard Herzog <[email protected]>
4713
4714 * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
4715 only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
4716 is ported to a newer the import will fail, so it should be noticed
4717 immediately that this function is gone.
4718 Fixes RT#1919
4719
4720 2003-09-26 Bernhard Herzog <[email protected]>
4721
4722 Add a DTD for the projection files and make thuban write valid
4723 projection files
4724
4725 * Resources/XML/projfile.dtd: New. DTD for thuban's projection
4726 files
4727
4728 * Thuban/Model/resource.py (ProjFileSaver.write): Use
4729 'projectionlist' as the name in the document type declaration so
4730 that it matches the element type of the root element.
4731
4732 * test/test_proj.py (sample_projfile, sample_projfile2): Use
4733 'projectionlist' as the name in the document type declaration just
4734 as it is done now in the files thuban would write
4735 (sample_projfile, sample_projfile_data): Fix spelling of
4736 "Mercator"
4737 (TestProjFile.doTestWrite): Validate the written and the expected
4738 XML data
4739 (TestProjFile): Derive from ValidationTest so that we can run xml
4740 validation tests
4741
4742 2003-09-24 Bernhard Herzog <[email protected]>
4743
4744 * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
4745 modify the list returned by map.Layers() in place since it is the
4746 actual list of layers used by the map.
4747
4748 2003-09-23 Jan-Oliver Wagner <[email protected]>
4749
4750 * Doc/manual/thuban-manual.xml: Added subsection to chapter
4751 Extensions to describe the extensions coming with the Thuban
4752 standard package (gns2shp and importAPR).
4753
4754 2003-09-23 Bernhard Herzog <[email protected]>
4755
4756 * libraries/thuban/wxproj.cpp (project_point): if there's an
4757 inverse but no forward projection, convert to degrees after
4758 applying the inverse projection. Fixes RT#2096
4759
4760 * test/test_wxproj.py: New. Test cases for wxproj.so. One test
4761 implicitly tests for the fix to RT#2096
4762
4763 * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
4764 Check that the sequences have the same lengths
4765
4766 * Resources/Projections/defaults.proj (Geographic projection): Use
4767 a much more precise value for the to_meter attribute.
4768
4769 2003-09-22 Bernhard Herzog <[email protected]>
4770
4771 * test/support.py (initthuban): Make sure to unset the LANG env.
4772 var. so that tests that compare translated strings work. Solves RT
4773 #2094
4774
4775 2003-09-22 Jan-Oliver Wagner <[email protected]>
4776
4777 Small improvement of APR import.
4778
4779 * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
4780 Added tests for text-ranges.
4781
4782 * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
4783 returns a string object if the range is based on text.
4784
4785 * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
4786 range retrieval.
4787
4788 2003-09-22 Jan-Oliver Wagner <[email protected]>
4789
4790 Initial version of the importAPR extension which is in
4791 experimental state.
4792
4793 * /Extensions/importAPR/, /Extensions/importAPR/samples/,
4794 /Extensions/importAPR/test/: New directories.
4795
4796 * /Extensions/importAPR/samples/README: New: Howto load the samples.
4797
4798 * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
4799 file which refers to the Thuban Iceland demo data.
4800
4801 * /Extensions/importAPR/test/README: New: Howto execute the tests.
4802
4803 * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
4804
4805 * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
4806 as in '.apr'-files.
4807
4808 * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
4809 ODB Objects as in '.apr', '.avl' and other files.
4810
4811 * /Extensions/importAPR/__init__.py: New: Init to make this
4812 directory a package.
4813
4814 * /Extensions/importAPR/importAPR.py: New: Import a ArcView
4815 project file (.apr) and convert it to Thuban.
4816
4817 2003-09-22 Jan-Oliver Wagner <[email protected]>
4818
4819 * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
4820
4821 2003-09-19 Jan-Oliver Wagner <[email protected]>
4822
4823 * Doc/manual/thuban-manual.xml: Extended section 'Installation'
4824 with description on RPM installation and RPM binary package
4825 creation.
4826
4827 2003-09-18 Bernhard Herzog <[email protected]>
4828
4829 * setup.py (data_files): Only add the mo files if the Locales
4830 directory actually exists, so that setup.py works with a fresh CVS
4831 checkout
4832
4833 2003-09-12 Jan-Oliver Wagner <[email protected]>
4834
4835 * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
4836 in viewport, not anymore in view
4837
4838 2003-09-04 Jan-Oliver Wagner <[email protected]>
4839
4840 Introducing first Extension (gns2shp).
4841
4842 * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
4843
4844 * Extensions/__init__.py: New. init to make this dir a package.
4845
4846 * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
4847
4848 * Extensions/gns2shp/test/README: New. some info on this test directory.
4849
4850 * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
4851
4852 * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
4853 of Shapefile from GNS text file format
4854
4855 2003-09-03 Jan-Oliver Wagner <[email protected]>
4856
4857 Fix/workaround for bug #2019:
4858 https://intevation.de/rt/webrt?serial_num=2019
4859
4860 * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
4861 (IdentifyView.__init__): Added another button that allows to
4862 stop the identify mode.
4863 (IdentifyView.OnStop): New. Stops the identify mode.
4864
4865 2003-09-03 Jan-Oliver Wagner <[email protected]>
4866
4867 Introducing a new exception dialog that allows to exit the
4868 application immediately.
4869 This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
4870
4871 * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
4872
4873 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
4874 Made strings available to translations. Exchanged the simple
4875 ScrolledMessageDialog by the new ExceptionDialog.
4876
4877 2003-09-01 Bernhard Herzog <[email protected]>
4878
4879 * NEWS: New. Summary of changes and release notes.
4880
4881 * MANIFEST.in: Add NEWS
4882
4883 2003-09-01 Bernhard Herzog <[email protected]>
4884
4885 * MANIFEST.in: Correct the include statement for the mo-files and
4886 include the documentation too.
4887
4888 * setup.py (data_files): Add the .mo files
4889 (setup call): Up to version 0.9.0
4890
4891 2003-09-01 Bernhard Herzog <[email protected]>
4892
4893 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
4894 parameter list to just parent and session
4895 (ChooseDBTableDialog.__set_properties): Removed. Setting the
4896 selection of empty list boxes is not allowed (and produces C++
4897 assertion errors) and the rest of the setup is better done in
4898 __init__ anyway.
4899 (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
4900 (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
4901 builtins True/False for booleans to avoid warnings from wxPython
4902
4903 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
4904 ChooseDBTableDialog constructor parameters.
4905
4906 2003-09-01 Bernhard Herzog <[email protected]>
4907
4908 * Thuban/Model/postgisdb.py
4909 (PostGISTable): Extend doc-string
4910 (PostGISTable._fetch_table_information): Set the column index
4911 correctly, pretending ignored columns don't exist.
4912
4913 * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
4914 for postgis tables with data types not yet supported by thuban.
4915
4916 2003-08-29 Bernhard Herzog <[email protected]>
4917
4918 * HOWTO-Release: Tweak item about running the tests.
4919
4920 2003-08-29 Jan-Oliver Wagner <[email protected]>
4921
4922 * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
4923
4924 2003-08-29 Bernhard Herzog <[email protected]>
4925
4926 Add some missing parameters to projections. Proj complains about
4927 them on windows but for some reason not on Linux.
4928
4929 * test/test_save.py (SaveSessionTest.testLayerProjection): Add
4930 missing required projection parameters
4931
4932 * test/test_proj.py (TestProjFile.test): Add missing required
4933 projection parameters
4934
4935 * test/test_load_0_8.py (TestLayerProjection.file_contents)
4936 (TestLayerProjection.test): Add missing required projection
4937 parameters and tests for them
4938
4939 * test/test_load.py (TestLayerProjection.file_contents)
4940 (TestLayerProjection.test): Add missing required projection
4941 parameters and tests for them
4942
4943 * test/test_layer.py (TestLayer.test_base_layer): Add missing
4944 required projection parameters
4945
4946 2003-08-29 Bernhard Herzog <[email protected]>
4947
4948 * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
4949 access the pj_errno because directly accessing pj_errno doesn't
4950 work on windows if the proj library is in a DLL
4951
4952 * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
4953
4954 2003-08-28 Bernhard Herzog <[email protected]>
4955
4956 * test/test_proj.py: Import things from Thuban after calling
4957 initthuban
4958
4959 * test/test_load.py (LoadSessionTest.filenames): New class
4960 variable with the filename attributes to normalize
4961 (LoadSessionTest.check_format): Pass self.filenames to
4962 sax_eventlist to normalize the filename attributes
4963
4964 * test/xmlsupport.py: Add cvs keywords
4965 (SaxEventLister.__init__): New parameter filenames which indicates
4966 attributes that contain filenames
4967 (SaxEventLister.startElementNS): Normalize the filename attributes
4968 with os.path.normpath
4969 (sax_eventlist): New parameter filenames to pass through to
4970 SaxEventLister
4971
4972 * test/test_derivedshapestore.py: Make this file callable as a
4973 program to execute the tests
4974 (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
4975 the session to self.session so that it gets destroyed properly
4976
4977 * test/test_layer.py (TestLayer.tearDown): Call the session's
4978 Destroy method
4979
4980 * test/test_map.py (TestMapBase.tearDown): Destroy self.session
4981 too if it exists
4982 (TestMapAddLayer.test_add_layer): Bind the session to self.session
4983 so that it gets destroyed properly
4984
4985 * test/postgissupport.py (reason_for_not_running_tests): Add a
4986 test for the existence of popen2.Popen4.
4987
4988 * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
4989 reliable way to destroy the sessions created in the test cases
4990 (SaveSessionTest.test_dbf_table): Bind the session to self.session
4991 so that it gets destroyed properly
4992 (SaveSessionTest.testLayerProjection): Bind the session to
4993 self.session so that it gets destroyed properly
4994
4995 * test/test_session.py (UnreferencedTablesTests.tearDown): Make
4996 sure that the session is destroyed properly
4997
4998 * test/test_shapefilestore.py: Make this callable as a program to
4999 execute the tests
5000
5001 * test/test_scalebar.py: Remove unnecessary import of _ from
5002 Thuban
5003
5004 * test/support.py (print_garbage_information): Call initthuban
5005 here because it may be called indirectly from test cases that test
5006 test support modules which do not use anything from thuban itself
5007 (ThubanTestProgram.runTests): Remove unnecessary debug print
5008
5009 2003-08-28 Bernhard Herzog <[email protected]>
5010
5011 * Thuban/version.py (longversion): Update to 0.9
5012
5013 * Thuban/UI/mainwindow.py: Remove some unused imports
5014
5015 * README: Add section about required additional software. Add date
5016 and revision CVS keywords
5017
5018 * HOWTO-Release: Add item about the translations. Add date and
5019 revision CVs keywords and change formatting to match README a bit
5020 better
5021
5022 * po/de.po: Update for 0.9
5023
5024 * test/README: Tweak the wording a little because many tests are
5025 not really unittest.
5026
5027 2003-08-27 Bernhard Herzog <[email protected]>
5028
5029 As preparation for the 0.9 release, switch thuban files to a
5030 non-dev namespace
5031
5032 * Thuban/Model/save.py (SessionSaver.write_session): Write files
5033 with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
5034 namespace
5035
5036 * Thuban/Model/load.py (SessionLoader.__init__): Accept the
5037 http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
5038
5039 * test/test_save.py (SaveSessionTest.dtd)
5040 (SaveSessionTest.testEmptySession)
5041 (SaveSessionTest.testSingleLayer)
5042 (SaveSessionTest.testLayerProjection)
5043 (SaveSessionTest.testRasterLayer)
5044 (SaveSessionTest.testClassifiedLayer)
5045 (SaveSessionTest.test_dbf_table)
5046 (SaveSessionTest.test_joined_table)
5047 (SaveSessionTest.test_save_postgis): Update for new namespace
5048
5049 * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
5050 (TestLayerVisibility.file_contents, TestLabels.file_contents)
5051 (TestLayerProjection.file_contents)
5052 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
5053 (TestPostGISLayer.file_contents)
5054 (TestPostGISLayerPassword.file_contents)
5055 (TestLoadError.file_contents, TestLoadError.test): Update for new
5056 namespace
5057
5058 2003-08-27 Bernhard Herzog <[email protected]>
5059
5060 Make the table interface distinguish between row ids (an integer
5061 that uniquely identifies a row) and row ordinals (a simple row
5062 count from 0 to NumRows() - 1)
5063
5064 * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
5065 (PostGISTable.RowOrdinalToId): New methods to conver between row
5066 ids and row ordinals
5067 (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
5068 parameter row_is_ordinal to indicate whether the row parameter is
5069 the row id or the ordinal
5070
5071 * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
5072 (TransientTableBase.RowOrdinalToId)
5073 (AutoTransientTable.RowIdToOrdinal)
5074 (AutoTransientTable.RowOrdinalToId): Same new methods as in
5075 PostGISTable.
5076 (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
5077 (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
5078 Same new parameter as in PostGISTable.
5079
5080 * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
5081 (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
5082 (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
5083 (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
5084 (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
5085 parameter as in PostGISTable.
5086
5087 * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
5088 (DataTable.RowOrdinalToId): New methods to convert between row ids
5089 and row ordinals.
5090 (TableGrid.SelectRowById): New method to select a row based on its
5091 ID as opposed to its ordinal
5092 (DataTable.GetValue, TableGrid.OnRangeSelect)
5093 (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
5094 (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
5095 (LayerTableFrame.__init__): Convert between row ids and row
5096 ordinals as appropriate
5097
5098 * test/postgissupport.py (PostGISDatabase.__init__): Add
5099 doc-string.
5100 (PostGISDatabase.initdb): The optional third item in a tuple in
5101 tables is now a (key, value) list with additional arguments to
5102 pass to upload_shapefile
5103 (upload_shapefile): New parameter gid_offset to allow gids that
5104 are not the same as the shapeids in the shapefile
5105 (PostgreSQLServer.get_default_static_data_db): Use the new
5106 gid_offset to make the gids in landmarks 1000 higher than the
5107 shapeids in the shapefile
5108
5109 * test/test_viewport.py
5110 (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
5111 new shapeids in the landmarks table
5112
5113 * test/test_transientdb.py
5114 (TestTransientTable.run_iceland_political_tests)
5115 (TestTransientTable.test_transient_joined_table): Add tests for
5116 the new table methods and new keywords arguments.
5117
5118 * test/test_postgis_db.py
5119 (TestPostGISTable.test_read_row_as_dict_row_count_mode)
5120 (TestPostGISTable.test_read_value_row_count_mode)
5121 (TestPostGISTable.test_row_id_to_ordinal)
5122 (TestPostGISTable.test_row_oridnal_to_id): New test for the new
5123 table methods and the new arguments
5124 (TestPostGISShapestorePoint.test_shapes_in_region)
5125 (TestPostGISShapestorePoint.test_shape_raw_data)
5126 (TestPostGISShapestorePoint.test_shape_points)
5127 (TestPostGISShapestorePoint.test_shape_shapeid)
5128 (TestPostGISShapestorePoint.test_all_shapes)
5129 (TestPostGISTable.test_simple_query)
5130 (TestPostGISTable.test_simple_query)
5131 (TestPostGISTable.test_simple_query)
5132 (TestPostGISTable.test_read_value)
5133 (TestPostGISTable.test_read_row_as_dict): Adapt to the new
5134 shapeids in the landmarks table
5135
5136 * test/test_memory_table.py
5137 (TestMemoryTable.test_read_row_as_dict_row_count_mode)
5138 (TestMemoryTable.test_read_value_row_count_mode)
5139 (TestMemoryTable.test_row_id_to_ordinal)
5140 (TestMemoryTable.test_row_oridnal_to_id): New test for the new
5141 table methods and the new arguments
5142
5143 * test/test_dbf_table.py
5144 (TestDBFTable.test_read_row_as_dict_row_count_mode)
5145 (TestDBFTable.test_read_value_row_count_mode)
5146 (TestDBFTable.test_row_id_to_ordinal)
5147 (TestDBFTable.test_row_oridnal_to_id): New test for the new table
5148 methods and the new arguments
5149
5150 2003-08-26 Bernhard Herzog <[email protected]>
5151
5152 * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
5153 more postgis specific but much faster method to get the bounding
5154 box
5155
5156 2003-08-26 Bernhard Herzog <[email protected]>
5157
5158 * Thuban/Model/postgisdb.py (PostGISTable.Title)
5159 (PostGISShapeStore.AllShapes): Add these missing methods.
5160 (PostGISShapeStore.ShapesInRegion): No need to raise
5161 StopIteration. We can simply return
5162
5163 * test/test_postgis_db.py (TestPostGISTable.test_title)
5164 (TestPostGISShapestorePoint.test_all_shapes): New tests for the
5165 new methods
5166
5167 2003-08-25 Bernhard Herzog <[email protected]>
5168
5169 * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
5170
5171 * test/test_postgis_db.py (PolygonTests): New class containing
5172 those tests from TestPostGISShapestorePolygon that can also be
5173 used to test MUTLIPOLYGON tables
5174 (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
5175 so derive from that
5176 (TestPostGISShapestoreMultiPolygon): New class with tests for
5177 MUTLIPOLYGON tables
5178
5179 * test/postgissupport.py (PostGISDatabase.initdb): Allow the
5180 tables argument to have tuples with three items to override the
5181 WKT type used.
5182 (PostgreSQLServer.get_default_static_data_db): Use the above to
5183 create a polygon table with MUTLIPOLYGONs
5184 (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
5185 (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
5186 coords_to*
5187 (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
5188 (wkt_converter): New. Map WKT types to converters
5189 (upload_shapefile): New parameter force_wkt_type to use a
5190 different WKT type than the default
5191
5192 2003-08-25 Bernhard Herzog <[email protected]>
5193
5194 * Thuban/UI/application.py
5195 (ThubanApplication.run_db_param_dialog): New. Suitable as a
5196 db_connection_callback. Main difference is that the dialog run
5197 from this method doesn't have a parent so it can be used even when
5198 there is no main window
5199 (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
5200 no db_connection_callback was given. This way the dialog pops up
5201 even when the .thuban file was given as a command line parameter.
5202
5203 2003-08-25 Bernhard Herzog <[email protected]>
5204
5205 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
5206 before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
5207 which leads to an effectively frozen X session because the user
5208 can only interact with the dialog but the mouse is still grabbed
5209 by the canvas.
5210 Also, call the tool's Hide method before MouseLeftUp because
5211 MouseLeftUp may change the tool's coordinates.
5212
5213 2003-08-25 Bernhard Herzog <[email protected]>
5214
5215 * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
5216 LoadCancelled exceptions and handle them by returning immediately.
5217
5218 2003-08-25 Bernhard Herzog <[email protected]>
5219
5220 GUI part of loading sessions with postgis connections which may
5221 require user interaction to get passwords or updated parameters
5222
5223 * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
5224 bit nucer and be more generic.
5225 (DBFrame.OnAdd): Adapt to new DBDialog interface
5226
5227 * Thuban/UI/application.py (ThubanApplication.OpenSession): New
5228 optional parameter db_connection_callback which is passed to
5229 load_session.
5230
5231 * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
5232 Suitable as a db_connection_callback
5233 (MainWindow.OpenSession): Use self.run_db_param_dialog as the
5234 db_connection_callback of the application's OpenSession method
5235
5236
5237 2003-08-25 Bernhard Herzog <[email protected]>
5238
5239 Basic loading of sessions containing postgis connections:
5240
5241 * Thuban/Model/load.py (LoadError): Add doc-string
5242 (LoadCancelled): New exception class to indicate a cancelled load
5243 (SessionLoader.__init__): Add the db_connection_callback parameter
5244 which will be used by the loader to get updated parameters and a
5245 password for a database connection
5246 (SessionLoader.__init__): Add the new XML elements to the
5247 dispatchers dictionary
5248 (SessionLoader.check_attrs): Two new conversions, ascii to convert
5249 to a byte-string object and idref as a generic id reference
5250 (SessionLoader.start_dbconnection)
5251 (SessionLoader.start_dbshapesource): New. Handlers for the new XML
5252 elements
5253 (load_session): Add the db_connection_callback to pass through the
5254 SessionLoader
5255
5256 * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
5257 New classes to test loading of sessions with postgis database
5258 connections.
5259
5260 2003-08-25 Bernhard Herzog <[email protected]>
5261
5262 * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
5263 replace it and the comment with __BuildDate__ by the Source: and
5264 Id: cvs keywords as used in the other files.
5265
5266 2003-08-25 Bernhard Herzog <[email protected]>
5267
5268 * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
5269 LoadError when a required attribute is missing. The code used to
5270 be commented out for some reason, but probably should have been
5271 active.
5272
5273 * test/test_load.py (TestLoadError.test): Test the message in the
5274 LoadError too to make sure it really is about the missing
5275 attribute
5276
5277 2003-08-22 Bernhard Herzog <[email protected]>
5278
5279 * test/test_save.py (SaveSessionTest.test_dbf_table)
5280 (SaveSessionTest.test_joined_table): Add XML validation tests.
5281
5282 2003-08-22 Bernhard Herzog <[email protected]>
5283
5284 Implement saving a session with a postgis connection
5285
5286 * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
5287 elements for database connections and shapestores using db
5288 connections
5289 (session): Add the dbconnections to the content model
5290
5291 * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
5292 Write the db connections
5293 (SessionSaver.write_session): Call write_db_connections to write
5294 the connection before the data sources
5295 (SessionSaver.write_data_containers): Handle postgis shapestores
5296
5297 * test/test_save.py (SaveSessionTest.thubanids)
5298 (SaveSessionTest.thubanidrefs): Update for new DTD
5299 (SaveSessionTest.test_save_postgis): New. Test saving a session
5300 with postgis connections
5301
5302 * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
5303 (PostGISTable.TableName): New accessor methods for the connection
5304 and table name
5305
5306 * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
5307 (TestPostGISTable.test_dbname): New methods to test the new
5308 PostGISConnection methods
5309
5310 2003-08-22 Bernhard Herzog <[email protected]>
5311
5312 * Thuban/Model/postgisdb.py (ConnectionError): New exception class
5313 for exceptions occurring when establishing a Database connection
5314 (PostGISConnection.connect): Catch psycopg.OperationalError during
5315 connects and raise ConnectionError.
5316
5317 * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
5318 tests for database exceptions
5319
5320 2003-08-22 Bernhard Herzog <[email protected]>
5321
5322 Prepare the test suite for tests with required authentication
5323
5324 * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
5325 variables with two predefined users/passwords, one for the admin
5326 and one for a non-privileged user.
5327 (PostgreSQLServer.createdb): Pass the admin name to initdb and add
5328 the non-privileged user to the database and set the admin password
5329 (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
5330 Better error reporting
5331 (PostgreSQLServer.connection_params)
5332 (PostgreSQLServer.connection_string): New methods to return
5333 information about how to connect to the server
5334 (PostgreSQLServer.execute_sql): New. Convenience method to execute
5335 SQL statements
5336 (PostgreSQLServer.require_authentication): Toggle whether the
5337 server requires authentication
5338 (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
5339 Add or alter users
5340 (PostGISDatabase.initdb): Pass the admin name one the
5341 subprocesses' command lines. Grant select rights on
5342 geometry_columns to everybody.
5343 (upload_shapefile): Use the admin name and password when
5344 connecting. Grant select rights on the new table to everybody.
5345
5346 * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
5347 server's new methods to get the connection parameters.
5348
5349 * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
5350 (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
5351 server's new methods to get the connection parameters.
5352
5353 * test/test_postgis_db.py
5354 (TestPostGISConnection.test_gis_tables_empty)
5355 (TestPostGISConnection.test_gis_tables_non_empty)
5356 (PostGISStaticTests.setUp): Use the server's new methods to get
5357 the connection parameters.
5358
5359 2003-08-22 Bernhard Herzog <[email protected]>
5360
5361 * Thuban/UI/about.py (About.__init__): Add the psycopg version.
5362
5363 * Thuban/version.py: Add psycopg version
5364
5365 * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
5366 version of the psycopg module
5367
5368 2003-08-22 Bernhard Herzog <[email protected]>
5369
5370 * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
5371 (DBFrame.OnEdit): Removed because it's not used and wouldn't work
5372 at the moment. The functionality should probably be implemented
5373 some time, though.
5374 (DBFrame.OnRemove): Display a message if the connection can't be
5375 removed because it's still in use.
5376
5377 2003-08-22 Jan-Oliver Wagner <[email protected]>
5378
5379 * Thuban/UI/about.py (About.__init__): split up the huge about
5380 text into elements/lists for easier translation. This fixes bug
5381 https://intevation.de/rt/webrt?serial_num=2058
5382 Also, made some forgotten string available for the i18n.
5383
5384 2003-08-21 Bernhard Herzog <[email protected]>
5385
5386 Make postgis support really optional including insensitive menu
5387 items.
5388
5389 * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
5390 whether the postgis is supported.
5391
5392 * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
5393 to make postgis support optional
5394
5395 * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
5396 version of Thuban.Model.postgisdb.has_postgis_support
5397 (database_management command): Make it only sensitive if postgis
5398 is supported.
5399
5400 2003-08-21 Jan-Oliver Wagner <[email protected]>
5401
5402 * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
5403 (section Adding and Removing Layers): Added text and described
5404 multi-selection.
5405 (chapter Extensions): New.
5406
5407 2003-08-21 Jan-Oliver Wagner <[email protected]>
5408
5409 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
5410 settings to allow multiple files to load into the map.
5411 Also reduced selection to *.shp as a default.
5412
5413 2003-08-20 Bernhard Herzog <[email protected]>
5414
5415 Add dialogs and commands to open database connections and add
5416 database layers.
5417
5418 * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
5419 method to open the database connection management dialog
5420 (MainWindow.AddDBLayer): New method to add a layer from a database
5421 (_has_dbconnections): New helper function to use for sensitivity
5422 (database_management command, layer_add_db command): New commands
5423 that call the above new methods.
5424 (main_menu): Add the new commands to the menu.
5425
5426 * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
5427 (PostGISConnection.connect): Establish the actual connection in a
5428 separate method and call it in __init__. This makes it easier to
5429 override the behavior in test cases
5430 (PostGISConnection.BriefDescription): New method to return a brief
5431 description for use in dialogs.
5432
5433 * test/test_postgis_db.py (NonConnection): DB connection that
5434 doesn't actually connect
5435 (TestBriefDescription): New class with tests for the new
5436 BriefDescription method
5437
5438 2003-08-19 Jan-Oliver Wagner <[email protected]>
5439
5440 Moved anything from extensions to libraries.
5441
5442 * libraries: New.
5443
5444 * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
5445
5446 * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
5447 Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
5448 been moved here from thuban/extensions/pyprojection/
5449 See there in the Attic for the older history.
5450
5451 * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
5452 dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
5453 shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
5454 have been moved here from thuban/extensions/pyshapelib/
5455 See there in the Attic for the older history.
5456
5457 * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
5458 files have been moved here from thuban/extensions/shapelib/
5459 See there in the Attic for the older history.
5460
5461 * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
5462 gdalwarp.cpp, wxproj.cpp: These files have been moved here from
5463 thuban/extensions/thuban/
5464 See there in the Attic for the older history.
5465
5466 * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
5467
5468 * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
5469 gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
5470
5471 * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
5472 Moved to libraries/shapelib.
5473
5474 * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
5475 shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
5476 ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
5477 Moved to libraries/pyshapelib.
5478
5479 * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
5480 LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
5481 Moved to libraries/pyprojection.
5482
5483 * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
5484
5485 * extensions: Removed.
5486
5487 2003-08-19 Bernhard Herzog <[email protected]>
5488
5489 * test/test_viewport.py (ViewPortTest): We don't use the
5490 facilities of FileTestMixin so don't derive from it.
5491 (TestViewportWithPostGIS): New class with tests for using a
5492 viewport on a map with postgis layers.
5493
5494 2003-08-19 Bernhard Herzog <[email protected]>
5495
5496 Add the db connection management to the session.
5497
5498 * Thuban/Model/session.py (Session.__init__): New instance
5499 variable db_connections
5500 (Session.AddDBConnection, Session.DBConnections)
5501 (Session.HasDBConnections, Session.CanRemoveDBConnection)
5502 (Session.RemoveDBConnection): New methods to manage and query the
5503 db connections managed by the session
5504 (Session.OpenDBShapeStore): New method to open a shapestore from a
5505 db connection
5506
5507 * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
5508 messages for the db connection handling in the session
5509
5510 * test/test_postgis_session.py: New. test cases for the session's
5511 db connection handling with postgis connections
5512
5513 2003-08-19 Bernhard Herzog <[email protected]>
5514
5515 Add very basic postgis database support and the corresponding test
5516 cases. The test cases require a PostgreSQL + postgis installation
5517 but no existing database. The database will be created
5518 automatically by the test cases
5519
5520 * test/README: Add note about skipped tests and the requirements
5521 of the postgis tests.
5522
5523 * Thuban/Model/postgisdb.py: New. Basic postgis database support.
5524
5525 * test/test_postgis_db.py: New. Test cases for the postgis
5526 support.
5527
5528 * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
5529 format
5530
5531 * test/test_wellknowntext.py: New. Test cases for the
5532 wellknowntext parser
5533
5534 * test/postgissupport.py: New. Support module for tests involving
5535 a postgis database.
5536
5537 * test/support.py (execute_as_testsuite): Shut down the postmaster
5538 if it's still running after the tests
5539
5540 * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
5541 well known text format
5542
5543 2003-08-19 Jan-Oliver Wagner <[email protected]>
5544
5545 * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
5546 message dialog.
5547
5548 2003-08-18 Bernhard Herzog <[email protected]>
5549
5550 * test/support.py (ThubanTestResult.printErrors): Indent the
5551 reason for the skips in the output to make it a bit more readable.
5552 (execute_as_testsuite): New helper function to run a test suite
5553 and print some more information.
5554 (run_tests): Use execute_as_testsuite to run the tests
5555
5556 * test/runtests.py (main): Use execute_as_testsuite to run the
5557 tests
5558
5559 2003-08-18 Bernhard Herzog <[email protected]>
5560
5561 Fix some bugs in Thuban and the test suite that were uncovered by
5562 changes introduced in Python 2.3:
5563
5564 * Thuban/Model/table.py (DBFTable.__init__): Make sure the
5565 filename is an absolute name
5566
5567 * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
5568 filename is an absolute name
5569
5570 * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
5571 unique filename to save to and use the correct relative filename
5572 in the expected output.
5573 (SaveSessionTest.test_dbf_table): Use the correct relative
5574 filename in the expected output.
5575
5576 * test/test_layer.py (TestLayer.test_raster_layer): Update the
5577 test to check whether the filename is absolute.
5578
5579 2003-08-18 Jan-Oliver Wagner <[email protected]>
5580
5581 * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
5582
5583 2003-08-15 Bernhard Herzog <[email protected]>
5584
5585 Change the way shapes are returned by a shape store. The
5586 ShapesInRegion method returns an iterator over actual shape
5587 objects instead of a list of shape ids.
5588
5589 * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
5590 id.
5591 (ShapefileStore.ShapesInRegion): Return an iterator over the
5592 shapes which yields shape objects instead of returning a list of
5593 shape ids
5594 (ShapefileStore.AllShapes): New. Return an iterator over all
5595 shapes in the shape store
5596 (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
5597
5598 * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
5599 doc-string.
5600
5601 * Thuban/UI/baserenderer.py
5602 (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
5603 layer_shapes and make it return an iterator containg shapes
5604 instead of a list of ids.
5605 (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
5606 layer_shapes() change
5607
5608 * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
5609 (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
5610
5611 * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
5612 changes in the ShapesInRegion return value.
5613 (ViewPort._get_hit_tester): Remove commented out code
5614
5615 * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
5616 new return value.
5617 (SimpleShapeStore.AllShapes): New. Implement this method too.
5618
5619 * test/test_layer.py (TestLayer.test_arc_layer)
5620 (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
5621 (TestLayer.test_point_layer_with_projection)
5622 (TestLayer.test_derived_store): Adapt to changes in the
5623 ShapesInRegion return value.
5624
5625 * test/test_shapefilestore.py
5626 (TestShapefileStoreArc.test_shapes_in_region)
5627 (TestShapefileStorePolygon.test_shapes_in_region)
5628 (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
5629 in the ShapesInRegion return value.
5630 (TestShapefileStorePoint.test_all_shapes)
5631 (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
5632 methods
5633
5634 * test/test_derivedshapestore.py
5635 (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
5636 the ShapesInRegion return value.
5637 (TestDerivedShapeStore.test_all_shapes)
5638 (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
5639 methods
5640
5641 2003-08-15 Bernhard Herzog <[email protected]>
5642
5643 Make the renderers deal correctly with raw vs. python level
5644 representation of shape geometries
5645
5646 * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
5647 Return a flag useraw in addition to the callable and the parameter
5648 to indicate whether the callable can deal with the raw shape data
5649 or uses the higher level python lists of coordinates. The callable
5650 now should accept either the raw data or the return value of the
5651 shape's Points() method.
5652 (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
5653 change
5654 (BaseRenderer.projected_points): Instead of the shape id use the
5655 points list as parameter.
5656 (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
5657 (BaseRenderer.draw_point_shape): Adapt to projected_points()
5658 change and accept the points list as parameter instead of the
5659 shape id.
5660
5661 * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
5662 the useraw flag as required by the BaseRenderer
5663 (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
5664 changes.
5665
5666 * test/test_baserenderer.py
5667 (TestBaseRenderer.test_point_with_classification): New test for
5668 rendering a map with classifications.
5669
5670 2003-08-15 Bernhard Herzog <[email protected]>
5671
5672 * Thuban/UI/viewport.py (ViewPort.find_shape_at)
5673 (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
5674 (ViewPort._get_hit_tester, ViewPort.projected_points)
5675 (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
5676 (ViewPort._find_label_at): Split the find_shape_at method into
5677 several new methods and use the functions in the hit-test module.
5678
5679 * Thuban/UI/hittest.py: New module with Python-level hit-testing
5680 functions
5681
5682 * test/test_hittest.py: New. Test for the new hittest module
5683
5684 2003-08-15 Bernhard Herzog <[email protected]>
5685
5686 * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
5687 projection to all corners of the bounding box to get a better
5688 approximation of the projected bounding box
5689
5690 * test/test_layer.py (TestLayer.test_point_layer_with_projection):
5691 New. Test coordinate handling of a layer with a projection.
5692 Catches the bug fixed in Layer.ShapesInRegion
5693
5694 2003-08-15 Bernhard Herzog <[email protected]>
5695
5696 Move some of the mock objects in test_baserenderer into their own
5697 module so they can easily be used from other tests
5698
5699 * test/mockgeo.py: New test helper module with some mock objects
5700 for geometry related things like shapes, shapestores and
5701 projections.
5702
5703 * test/test_mockgeo.py: New. Tests for the new helper module
5704
5705 * test/test_baserenderer.py: Some of the mock-objects are in
5706 mockgeo now.
5707
5708 2003-08-12 Jan-Oliver Wagner <[email protected]>
5709
5710 * Thuban/UI/about.py (About.__init__): Added Björn Broscheit.
5711
5712 2003-08-12 Bernhard Herzog <[email protected]>
5713
5714 * po/de.po: New. German translations by Bjoern Broscheit
5715
5716 2003-08-12 Bernhard Herzog <[email protected]>
5717
5718 * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
5719 strings have to be one string literal.
5720
5721 2003-08-11 Bernhard Herzog <[email protected]>
5722
5723 * test/support.py (FloatComparisonMixin.assertPointListEquals):
5724 New. This method was used in various derived classes, but it's
5725 better to have it here.
5726
5727 * test/test_shapefilestore.py
5728 (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
5729 FloatComparisonMixin
5730
5731 * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
5732 It's now in FloatComparisonMixin
5733
5734 * test/test_derivedshapestore.py
5735 (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
5736 in FloatComparisonMixin
5737
5738 2003-08-11 Bernhard Herzog <[email protected]>
5739
5740 * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
5741 error message
5742
5743 2003-08-08 Jan-Oliver Wagner <[email protected]>
5744
5745 * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
5746 with version number.
5747 Changed title to reflect version number of Thuban.
5748
5749 2003-08-08 Jan-Oliver Wagner <[email protected]>
5750
5751 * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
5752 the list corresponds to the "About" web page.
5753
5754 2003-08-08 Bernhard Herzog <[email protected]>
5755
5756 * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
5757 Make sure translated strings are recognized as one string literal.
5758
5759 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
5760 Make sure translated strings are recognized as one string literal.
5761
5762 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
5763 translated strings are recognized as one string literal.
5764
5765 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
5766 sure translated strings are recognized as one string literal.
5767
5768 2003-08-07 Bernhard Herzog <[email protected]>
5769
5770 * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
5771 Simply delegates to the original shapestore.
5772
5773 * test/test_derivedshapestore.py
5774 (TestDerivedShapeStore.test_raw_format): New. Test case for
5775 DerivedShapeStore.RawShapeFormat
5776
5777 2003-08-07 Bernhard Herzog <[email protected]>
5778
5779 Add raw data interface to shape objects.
5780
5781 * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
5782 class to ShapefileShape which now holds shapefile specific
5783 information.
5784 (ShapefileShape.compute_bbox): Simplified to not cache any
5785 information. The way this method is used that shouldn't matter
5786 performance wise.
5787 (ShapefileShape.RawData): New. Return the shapeid which is the raw
5788 data format for shapes from shapefiles.
5789 (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
5790 in the shape objects returned by a shapestore. For a
5791 ShapefileStore this is always RAW_SHAPEFILE.
5792 (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
5793 method.
5794
5795 * test/test_shapefilestore.py
5796 (TestShapefileStore.test_raw_format): New test to test the raw
5797 format feature of shapes.
5798
5799 * Thuban/Model/layer.py: Remove the unused import of Shape from
5800 data. It was only there for interface compatibility but it's not
5801 used inside of Thuban and the generic Shape class has gone away.
5802
5803 * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
5804 the raw data format and only use an optimized version of its a
5805 shapefile.
5806
5807 2003-08-07 Bernhard Herzog <[email protected]>
5808
5809 * test/test_baserenderer.py (SimpleShape): Shape class for the
5810 tests.
5811 (SimpleShapeStore.Shape): Use SimpleShape instead of
5812 Thuban.Model.data.Shape to make the tests independed of the coming
5813 changes.
5814
5815 2003-08-07 Bernhard Herzog <[email protected]>
5816
5817 * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
5818 (ThubanTestProgram): New classes that extend the respective
5819 classes from unittest. These new version support skipping tests
5820 under certain expected conditions. In the Thuban test suite we
5821 uses this for tests that require the optional gdal support.
5822 (run_tests): Use ThubanTestProgram instead of the unittest.main()
5823
5824 * test/runtests.py (main): Use the new ThubanTestRunner instead of
5825 the normal one from unittest
5826
5827 * test/test_layer.py (TestLayer.test_raster_layer): If this test
5828 is not run because gdal support isn't available report this to the
5829 runner.
5830
5831 * test/test_baserenderer.py
5832 (TestBaseRenderer.test_raster_no_projection): Do not run this test
5833 if gdal support isn't available and report this to the runner.
5834
5835 2003-08-06 Bernhard Herzog <[email protected]>
5836
5837 Rearrange the renderers a bit, partly in preparation for changes
5838 required for the postgis merge, partly to make it more testable.
5839 Also make the representation of coordinates in Shapes more
5840 consistent.
5841
5842 * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
5843 this class is now in BaseRenderer. This class is now practically
5844 only a specialization of BaseRenderer for rendering to an actual
5845 wx DC.
5846 (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
5847 to get the shapetype specific rendering functions.
5848
5849 * Thuban/UI/baserenderer.py: New file with the basic rendering
5850 logic. The code in this file is completely independend of wx.
5851 (BaseRenderer): Class with the basic rendering logic
5852
5853 * test/test_baserenderer.py: New. Test cases for BaseRenderer
5854
5855 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
5856 error_on_redraw to guard agains endless loops and stack overflows
5857 when there's a bug in the rendering code that raises exceptions.
5858 (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
5859 rendering into a separate method _do_redraw so that error handling
5860 is a bit easier. When an exception occurs, set error_on_redraw to
5861 true. When it's true on entry to OnIdle do nothing and return
5862 immediately.
5863
5864 * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
5865 Shape object will always have the coordinates as a list of list of
5866 coordinate pairs (tuples).
5867 (Shape.compute_bbox): Adapt to new representation.
5868
5869 * Thuban/UI/viewport.py (ViewPort.find_shape_at)
5870 (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
5871 Shape objects.
5872
5873 * test/test_shapefilestore.py
5874 (ShapefileStoreTests.assertFloatTuplesEqual)
5875 (ShapefileStoreTests.assertPointListEquals): Rename to
5876 assertPointListEquals and change purpose to checking equality of
5877 the lists returned by Shape.Points().
5878 (TestShapefileStoreArc.test_shape)
5879 (TestShapefileStorePolygon.test_shape)
5880 (TestShapefileStorePoint.test_shape): Use the new
5881 assertPointListEquals instead of assertFloatTuplesEqual
5882
5883 * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
5884 (TestLayer.assertPointListEquals): Rename to assertPointListEquals
5885 and change purpose to checking equality of the lists returned by
5886 Shape.Points().
5887 (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
5888 (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
5889 (TestLayer.test_derived_store): Use the new assertPointListEquals
5890 instead of assertFloatTuplesEqual
5891
5892 * test/test_derivedshapestore.py
5893 (TestDerivedShapeStore.assertFloatTuplesEqual)
5894 (TestDerivedShapeStore.assertPointListEquals): Rename to
5895 assertPointListEquals and change purpose to checking equality of
5896 the lists returned by Shape.Points().
5897 (TestDerivedShapeStore.test_shape): Use the new
5898 assertPointListEquals instead of assertFloatTuplesEqual
5899
5900 2003-08-06 Jan-Oliver Wagner <[email protected]>
5901
5902 * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
5903 a bounding box. A dialog is raised in case, no bounding box
5904 is found. This fixes bug #2043:
5905 https://intevation.de/rt/webrt?serial_num=2043
5906
5907 2003-08-05 Bernhard Herzog <[email protected]>
5908
5909 * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
5910 object look like a Color instantiation. Formerly it looked like a
5911 tuple.
5912
5913 * test/test_color.py (TestColor.test_repr)
5914 (TestColor.test_equality, TestColor.test_inequality): New. test
5915 some more apects of the Color class
5916 (TestTransparent.test_repr, TestTransparent.test_hex)
5917 (TestTransparent.test_equality): New. Test cases for the
5918 Transparent object.
5919
5920 2003-08-04 Jan-Oliver Wagner <[email protected]>
5921
5922 * Doc/manual/thuban-manual.xml: a number of small improvements.
5923 The resulting file is the version submitted for GREAT-ER II.
5924
5925 2003-08-01 Bernhard Herzog <[email protected]>
5926
5927 * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
5928 Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
5929 Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
5930
5931 * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
5932 (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
5933 (ThubanEndBusyCursor): Add doc-strings
5934
5935 2003-08-01 Bernhard Herzog <[email protected]>
5936
5937 First step towards PostGIS integration. More abstraction by movin
5938 more code from the layer to the shapestore. More methods of the
5939 layer are now simply delegated to the equivalent method of the
5940 shapestore. The SHAPETYPE_* constants are now in data not in
5941 layer.
5942
5943 * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
5944 (SHAPETYPE_POINT, Shape): Move these constants and classes from
5945 layer.py to data.py
5946 (ShapefileStore.__init__): More Initialization for the new methods
5947 and functionality.
5948 (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
5949 (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
5950 (ShapefileStore.Shape): New methods that were formerly implemented
5951 in the layer.
5952 (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
5953 (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
5954 (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
5955 equivalents of the new shape methods. These versions are simply
5956 delegated to the original shapstore.
5957
5958 * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
5959 (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
5960 (Layer.SetShapeStore): Removed the initializatin of instance
5961 variables that were needed for the stuff that's now in
5962 ShapefileStore
5963 (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
5964 (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
5965 shapestore.
5966
5967 * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
5968 Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
5969 instead of layer.
5970
5971 * test/test_shapefilestore.py: New. Tests for ShapefileStore.
5972
5973 * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
5974
5975 * test/test_layer.py: Import the SHAPETYPE_* constants from data
5976 instead of layer.
5977 (TestLayer.test_derived_store): Remove the test for the exception
5978 when instantiating the DerivedShapeStore with an incompatible
5979 table which is now in test_derivedshapestore.py. Add some more
5980 tests of the layer methods to determine whether they work for a
5981 DerivedShapeStore as well.
5982
5983 2003-07-31 Jonathan Coles <[email protected]>
5984
5985 * Doc/manual/thuban-manual.xml: Fix the list of required packages
5986 by just listing the name and where they can be found.
5987
5988 2003-07-31 Frank Koormann <[email protected]>
5989
5990 * Doc/manual/thuban-manual.xml:
5991 Changed the screenshot elements to figure.
5992 Changed some variablelist elements to itemizedlist.
5993 Added section on GDAL formats.
5994
5995 2003-07-31 Jonathan Coles <[email protected]>
5996
5997 * Doc/manual/thuban-manual.xml: Added a few sentences about
5998 the Fix Border Color option when generating classes.
5999
6000 2003-07-30 Jonathan Coles <[email protected]>
6001
6002 * Thuban/Model/classgen.py: Add docstrings. Rename specific
6003 Ramp instances to use lower_case_style.
6004
6005 * Thuban/UI/classgen.py: Use renamed Ramp instances.
6006
6007 * Thuban/UI/classifier.py: Add docstrings.
6008
6009 * Thuban/UI/dock.py: Add docstrings.
6010
6011 * test/test_classgen.py: Use renamed Ramp instances.
6012
6013 2003-07-30 Bernhard Herzog <[email protected]>
6014
6015 * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
6016 was never used in Thuban.
6017
6018 2003-07-30 Bernhard Herzog <[email protected]>
6019
6020 * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
6021 method directly instead of going through the transient_table
6022 method. This faster because transient_table may force the copy of
6023 a DBF file into the transient database and setting a table's title
6024 doesnm't affect the title of the associated transient table, so
6025 this fixes RT #2042
6026
6027 * Thuban/UI/main.py (__version__): Don't import the already
6028 removed show_exception_dialog.
6029
6030 2003-07-29 Jonathan Coles <[email protected]>
6031
6032 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
6033 Put back this method and remove the equivalent function since we
6034 are setting the exception hook from within this class (OnInit).
6035
6036 2003-07-29 Jonathan Coles <[email protected]>
6037
6038 * Doc/manual/images/5_2_custom_ramp.png,
6039 Doc/manual/images/5_2_quantiles.png,
6040 Doc/manual/images/5_2_uniform_dist.png,
6041 Doc/manual/images/5_2_unique_values.png,
6042 Doc/manual/images/8_int_error.png: New screen shots.
6043
6044 * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
6045 some points, and added more screen shots.
6046
6047 2003-07-29 Bernhard Herzog <[email protected]>
6048
6049 * Thuban/Model/data.py: Remove the now unused import of warnings
6050
6051 2003-07-29 Bernhard Herzog <[email protected]>
6052
6053 * Thuban/Model/data.py (SimpleStore): Removed. This class has been
6054 deprecated since before the 0.8 release and isn't used in Thuban
6055 itself anymore.
6056
6057 * Thuban/Model/transientdb.py: Remove some unnecessary imports
6058
6059 2003-07-29 Jonathan Coles <[email protected]>
6060
6061 * Thuban/UI/application.py (ThubanApplication.OnInit): set the
6062 python exception hook here so that we are sure to catch any
6063 Thuban exception that happen during initialization.
6064
6065 * Thuban/UI/main.py (main): Don't set the exception hook here,
6066 it will get set in ThubanApplication.OnInit.
6067
6068 2003-07-29 Jonathan Coles <[email protected]>
6069
6070 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
6071 Removed and called it show_exception_dialog() so that the exception
6072 handler can be set before the class is created.
6073
6074 * Thuban/UI/main.py (main): Install the exception handler before
6075 a ThubanApplication is created.
6076
6077 2003-07-29 Bernhard Herzog <[email protected]>
6078
6079 * po/it.po: New. Italian translation by Maurizio Napolitano
6080
6081 * po/ru.po: New. Russian translation by Alex Shevlakov
6082
6083 2003-07-29 Frank Koormann <[email protected]>
6084
6085 * Doc/manual/thuban-manual.xml: Extended section on supported
6086 projections.
6087
6088 2003-07-29 Frank Koormann <[email protected]>
6089
6090 * Doc/manual/thuban-manual.xml: gaspell-checked.
6091
6092 2003-07-29 Jonathan Coles <[email protected]>
6093
6094 * Doc/manual/images/3_5_legend.png: Added border to improve look
6095 on white background.
6096
6097 2003-07-29 Jonathan Coles <[email protected]>
6098
6099 * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
6100 descriptions for the legend toolbar.
6101
6102 * Doc/manual/images/4_2_raster_layer_properties.png: Removed
6103 cursor from dialog box.
6104
6105 2003-07-28 Jonathan Coles <[email protected]>
6106
6107 * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
6108
6109 * Doc/manual/images/2_4_session_tree.png,
6110 Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
6111 Doc/manual/images/4_2_layer_properties.png,
6112 Doc/manual/images/4_2_raster_layer_properties.png,
6113 Doc/manual/images/5_3_genclass.png,
6114 Doc/manual/images/5_classification.png,
6115 Doc/manual/images/6_projection.png,
6116 Doc/manual/images/7_1_table_view.png,
6117 Doc/manual/images/7_2_5_join.png: New screenshots.
6118
6119 2003-07-24 Jonathan Coles <[email protected]>
6120
6121 * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
6122
6123 2003-07-24 Jonathan Coles <[email protected]>
6124
6125 * Doc/manual/thuban-manual.xml: Added EPS images and wrote
6126 chapter on Layer Management.
6127
6128 * Doc/manual/Makefile: New. Makefile to generate all formats for the
6129 manual and images.
6130
6131 2003-07-24 Bernhard Herzog <[email protected]>
6132
6133 * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
6134 it annoys lintian which warns about these files not being
6135 executable. The #! isn't necessary here since if you absolutely
6136 must execute them you can always say "python <filename>".
6137
6138 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
6139 superfluous code to set brush and pen for point shapes
6140
6141 * Thuban/UI/viewport.py: Remove commented out code that wouldn't
6142 belong in viewport anyway
6143
6144 2003-07-24 Frank Koormann <[email protected]>
6145
6146 * Doc/manual/thuban-manual.xml: Added section on table management.
6147
6148 2003-07-24 Bernhard Herzog <[email protected]>
6149
6150 * test/runtests.py (main): Recognize the long "verbose" option
6151 correctly.
6152
6153 2003-07-22 Jonathan Coles <[email protected]>
6154
6155 * Doc/manual/thuban-manual.xml: Continue to write first revision
6156 of the manual.
6157
6158 * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
6159 with Begin/EndDrawing() calls to ensure we aren't doing to
6160 many updates to the dc during rendering.
6161 (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
6162 a pen and brush argument so they need to be passed to the function.
6163
6164 * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
6165 Calculates the minimum and maximum scale values. Factored out
6166 of set_view_transform so that it could be used to zoom all the
6167 way into a single point.
6168 (ViewPort.set_view_transform): Call calc_min_max_scales().
6169 (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
6170 if only a single point is selected.
6171
6172 * Doc/manual/images/1_2_legend_close.png,
6173 Doc/manual/images/1_2_legend_dock.png,
6174 Doc/manual/images/1_2_mainwindow.png,
6175 Doc/manual/images/1_2_mainwindow.ps,
6176 Doc/manual/images/1_2_mainwindow.sk,
6177 Doc/manual/images/3_2_fullextent.png,
6178 Doc/manual/images/3_2_fulllayerextent.png,
6179 Doc/manual/images/3_2_fullshapeextent.png,
6180 Doc/manual/images/3_2_pan.png,
6181 Doc/manual/images/3_2_zoomin.png,
6182 Doc/manual/images/3_2_zoomout.png,
6183 Doc/manual/images/3_3_identify.png,
6184 Doc/manual/images/3_3_label.png,
6185 Doc/manual/images/3_5_invisible.png,
6186 Doc/manual/images/3_5_movedown.png,
6187 Doc/manual/images/3_5_moveup.png,
6188 Doc/manual/images/3_5_props.png,
6189 Doc/manual/images/3_5_tobottom.png,
6190 Doc/manual/images/3_5_totop.png,
6191 Doc/manual/images/3_5_visible.png: New. Images for the documentation.
6192
6193 2003-07-18 Bernhard Herzog <[email protected]>
6194
6195 * Thuban/UI/messages.py (MAP_REPLACED): New message.
6196
6197 * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
6198 after the new map has been assigned
6199
6200 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
6201 Delegate MAP_REPLACED to the canvas too
6202 (MainWindow.prepare_new_session): Removed. Thanks to the new
6203 MAP_REPLACED message it's no longer needed
6204 (MainWindow.OpenSession, MainWindow.NewSession):
6205 prepare_new_session has been removed.
6206
6207 * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
6208 MAP_REPLACED so that we can close the dialog if a new map is set.
6209 (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
6210 (Classifier.map_replaced): Handle MAP_REPLACED by closing the
6211 dialog
6212
6213 * test/test_viewport.py (SimpleViewPortTest)
6214 (SimpleViewPortTest.test_default_size): Add doc-strings
6215 (ViewPortTest.setUp): Bind map to self.map so we can use it in
6216 tests. Subscribe to MAP_REPLACED messages too.
6217 (ViewPortTest.tearDown): No need to explicitly unsubscribe
6218 (ViewPortTest.test_set_map): New test for the SetMap method.
6219
6220 2003-07-18 Bernhard Herzog <[email protected]>
6221
6222 * test/test_viewport.py (SimpleViewPortTest.test_default_size):
6223 Move this test from ViewPortTest.setUp to this new separate test
6224 case. setUp is not the place for the actual tests.
6225 (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
6226 more of the test from setUp to the new test test_inital_settings.
6227 (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
6228 (ViewPortTest.test_proj_conv): Split test_proj_conv into
6229 test_win_to_proj and test_proj_to_win and make the tests easier to
6230 understand
6231 (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
6232 (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
6233 (ViewPortTest.test_unprojected_rect_around_point)
6234 (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
6235 Reformat to increase readability.
6236
6237 2003-07-18 Bernhard Herzog <[email protected]>
6238
6239 * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
6240
6241 2003-07-18 Bernhard Herzog <[email protected]>
6242
6243 * test/runtests.py: The test suite can now be run without an X
6244 connection. To make sure this remains true, remove the DISPLAY
6245 environment variable so that an error occurs if the wxGTK is
6246 imported accidentally
6247
6248 2003-07-18 Bernhard Herzog <[email protected]>
6249
6250 * Thuban/UI/viewport.py: Remove unused imports
6251
6252 * Thuban/UI/view.py: Remove unused imports
6253
6254 2003-07-18 Bernhard Herzog <[email protected]>
6255
6256 * test/test_export.py Remove unused imports. The OutputTransform
6257 function is now in viewport.py and is called output_transform
6258 (TestScalebar.test_output_transform)
6259 (TestScalebar.test_OutputTransform): Renamed to
6260 test_output_transform and updated to use output_transform instead
6261 of OutputTransform
6262
6263 * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
6264 renamed.
6265 (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
6266 renamed to output_transform
6267
6268 * Thuban/UI/viewport.py (OutputTransform, output_transform):
6269 Rename to output_transform
6270
6271 2003-07-18 Bernhard Herzog <[email protected]>
6272
6273 * Thuban/Model/layer.py (Layer.__init__): Rename
6274 classificationField to classificatin_column and init it here so
6275 that it can be used in SetClassificationColumn
6276 (Layer.GetClassificationColumn, Layer.GetClassificationField):
6277 Rename to GetClassificationColumn.
6278 (Layer.SetClassificationColumn, Layer.SetClassificationField):
6279 Rename to SetClassificationColumn and issue a LAYER_CHANGED
6280 message if the column changes.
6281 (Layer._classification_changed, Layer.ClassChanged): Rename to
6282 _classification_changed. Update the callers.
6283 (Layer.SetShapeStore): Further field->column renames.
6284
6285 * Thuban/Model/load.py (SessionLoader.start_classification)
6286 (SessionLoader.start_clpoint): Updates because of
6287 field->column method name changes in the Layer class
6288
6289 * Thuban/Model/save.py (SessionSaver.write_classification): Updates
6290 because of field->column method name changes in the Layer class
6291
6292 * Thuban/UI/classifier.py (Classifier.__init__)
6293 (Classifier._OnTry, Classifier._OnRevert): Updates because of
6294 field->column method name changes in the Layer class
6295
6296 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
6297 because of field->column method name changes in the Layer class
6298
6299 * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
6300 of field->column method name changes in the Layer class
6301
6302 * test/test_save.py (SaveSessionTest.testClassifiedLayer)
6303 (SaveSessionTest.testClassifiedLayer): Update because of
6304 field->column method name changes in the Layer class
6305
6306 * test/test_layer.py (SetShapeStoreTests.setUp)
6307 (SetShapeStoreTests.test_sanity): Update because of field->column
6308 method name changes in the Layer class
6309 (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
6310 (TestLayerModification.test_sanity)
6311 (TestLayerModification.test_initial_settings): remove unsued code
6312 and rename to test_sanity.
6313 (TestLayerModification.test_set_classification): New test for
6314 SetClassification and SetClassificationField.
6315
6316 2003-07-18 Bernhard Herzog <[email protected]>
6317
6318 * test/test_classgen.py (TestFixedRamp.test): Extend test to check
6319 the non-fixed values as well. The old test would have accepted a
6320 fixed ramp that only returnes the fixed properties
6321
6322 2003-07-17 Jonathan Coles <[email protected]>
6323
6324 * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
6325 shots for the manual. The XCF file is the source image and
6326 has additional layers to support changes.
6327
6328 * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
6329
6330 * Thuban/UI/classifier.py (Classifier.__BuildClassification):
6331 Return both the new class and the field name.
6332
6333 * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
6334 fit the map to the window as this changes any zoom level that
6335 the user may have set.
6336
6337 2003-07-16 Jonathan Coles <[email protected]>
6338
6339 * Thuban/Model/classgen.py (generate_singletons,
6340 generate_uniform_distribution, generate_quantiles): Remove
6341 fixes parameter, but maintain the same functionality by having
6342 the calling function pass a FixedRamp object for the ramp.
6343 (FixedRamp): New. Adapts a ramp to have fixed property values.
6344
6345 * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
6346 (Classification): Inherit from Publisher.
6347 (Classification.__init__): Remove the layer parameter.
6348 Classifications no longer need to have a parent layer.
6349 (Classification.GetField, Classification.GetFieldType,
6350 Classification.SetFieldInfo): Removed. The field name is stored
6351 in the layer, and the type can be retreived by calling
6352 Layer.GetFieldType().
6353 (Classification._set_layer, Classification.GetLayer): Removed.
6354 Classifications no longer have a parent layer.
6355
6356 * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
6357 classification.
6358 (Layer.SetShapeStore): Reset the classification first while
6359 we still have the old shape store to work with.
6360 (Layer.GetClassificationField, Layer.SetClassificationField):
6361 New. Method for getting/setting the field to classify on.
6362 (Layer.SetClassification): Simplified now that the layer
6363 simply has to hold a reference to the classification and not
6364 tell the classification who owns it.
6365 Fixes RTbug #2023.
6366
6367 * Thuban/Model/load.py (SessionLoader.start_classification):
6368 Set the field name on the layer, not the classification.
6369
6370 * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
6371 classification is modified.
6372
6373 * Thuban/Model/save.py (SessionSaver.write_classification):
6374 Get the field name and type from the layer.
6375
6376 * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
6377 parameter records to rows and add docstring. Fixes RTbug #1997.
6378
6379 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
6380 ramp when we need to fix certain values of a ramp rather than
6381 using the old fixes parameter. Fixes RTbug #2024.
6382
6383 * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
6384 parameter.
6385 (ClassTable.Reset): Add fieldType parameter and use it, rather
6386 than asking the classification.
6387 (Classifier.__init__): Remember the original class's field
6388 and ask the layer for the field type, rather than the classification.
6389 (Classifier.__SetGridTable): Retrieve the field and field type
6390 for the table because they are not in the classification.
6391 (Classifier._OnTry, Classifier._OnRevert): Set the classification
6392 field on the layer in addition to the classification itself.
6393
6394 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
6395 classification field from layer.
6396
6397 * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
6398 classification field from layer. Split up tests and remove
6399 *-imports. Fixes RTbug #1992.
6400
6401 * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
6402
6403 * test/test_classification.py
6404 (TestClassification.test_classification): Remove tests for methods
6405 that no longer exist.
6406
6407 * test/test_layer.py (SetShapeStoreTests.setUp): Classification
6408 __init__ no longer has a field parameter, use SetClassificationField.
6409 (SetShapeStoreTests.test_sanity): Use layer object to get class
6410 field info.
6411
6412 * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
6413 SetClassificationField on layer to set class field info.
6414
6415 * test/test_viewport.py: Renamed from test/test_view.py.
6416
6417 2003-07-16 Jan-Oliver Wagner <[email protected]>
6418
6419 * Doc/manual/thuban-manual.xml: Added authors and an initial
6420 coarse structure.
6421
6422 2003-07-15 Bernhard Herzog <[email protected]>
6423
6424 * test/support.py (FloatComparisonMixin): This is a mix-in class
6425 and therefore should not be derived from any other class.
6426
6427 * test/test_range.py (RangeTest): FloatComparisonMixin is a
6428 mix-in, so derive from TestCase as well.
6429
6430 2003-07-15 Bernhard Herzog <[email protected]>
6431
6432 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
6433 draw_func handling a bit to remove one layer of indirection. This
6434 makes the renderer about 10% faster in the non-classifying case
6435 and the code a bit cleaner
6436 (MapRenderer.draw_point_shape): Add the pen and brush parameters
6437 and set them in the dc. Now the draw_point_shape method and
6438 wxproj's draw_polygon_shape function have basically the same
6439 signature so that both can be directly used as draw_func
6440
6441 2003-07-15 Bernhard Herzog <[email protected]>
6442
6443 * Thuban/Model/save.py (SessionSaver.write_classification): Encode
6444 string values (in addition to the labels) as UTF 8
6445
6446 * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
6447 values if the field type is string
6448
6449 * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
6450 saving a session with non-ascii string classification values.
6451
6452 * test/test_load.py (TestClassification.file_contents)
6453 (TestClassification.test): Check for non-ascii values in string
6454 classifications
6455
6456 2003-07-14 Jonathan Coles <[email protected]>
6457
6458 * test/test_view.py: New. Tests for ViewPort.
6459
6460 2003-07-14 Frank Koormann <[email protected]>
6461
6462 * Thuban/Model/load.py (SessionLoader.start_map): Encode map
6463 title to latin1. Fixes https://intevation.de/rt/webrt?serial_num=2013
6464
6465 * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
6466 unicode strings from session file: session title, map title and
6467 projection name.
6468
6469 2003-07-10 Jonathan Coles <[email protected]>
6470
6471 * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
6472 drag_stop, not drag_move when the mouse is released.
6473
6474 2003-07-10 Jonathan Coles <[email protected]>
6475
6476 The most important part of this is the seperation of view.py into
6477 two pieces. viewport.py now has a class called ViewPort which
6478 contains all the non-wx parts of view.py and can therefore be
6479 tested. view.py contains only the wx-specific parts and is fairly
6480 simple.
6481
6482 * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
6483 RTTbug #1992.
6484 * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
6485 RTTbug #1992.
6486
6487 * Thuban/Model/classgen.py (generate_singletons,
6488 generate_uniform_distribution, generate_quantiles):
6489 Added 'fixes' parameter so that property attributes can
6490 be held constant over the generated classification groups.
6491 (CustomRamp.GetProperties): Remove unused variables.
6492
6493 * Thuban/Model/map.py (Map.SetProjection): Send the old
6494 projection as an argument to listeners of the MAP_PROJECTION_CHANGED
6495 event.
6496
6497 * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
6498 parameter which is a list of records that restricts which
6499 records are saved. Fixes RTbug #1997.
6500
6501 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
6502 Port exception dialog from GREAT-ER. Fixes RTbug #1993.
6503
6504 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
6505 to allow the user to fix line color/width on generated groups.
6506 (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
6507 functions to optionally fix group properties.
6508
6509 * Thuban/UI/main.py (main): Set exception hook to the
6510 ShowExceptionDialog. Fixes RTbug #1993.
6511
6512 * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
6513 the table window when it is selectd to be shown.
6514
6515 * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
6516 Export Selection button and move the export buttons underneath
6517 the table.
6518 (QueryTableFrame.UpdateStatusText): Added event argument so
6519 that it can respond to grid selection events. The status text
6520 is now updated even when the table is not associated with a
6521 layer as was previously assumed.
6522 (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
6523 UpdateStatusText responds to these events.
6524 (QueryTableFrame.OnSaveAs): Renamed to doExport.
6525 (QueryTableFrame.doExport): Helper function that saves the
6526 entire table, or selected rows, to a file.
6527 (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
6528 Respond to export button events and call doExport.
6529
6530 * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
6531 the function doesn't return NULL without first setting a Python
6532 Error.
6533
6534 * test/runtests.py (main): Only print "Unknown option" for
6535 unsupported options.
6536
6537 * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
6538 optional epsilon argument to specify floating point accuracy.
6539 (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
6540 for each item test.
6541
6542 * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
6543 tests for saving selected records.
6544
6545 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
6546 tests for saving selected records.
6547
6548 * test/test_map.py (TestMapWithContents.test_set_projection):
6549 MAP_PROJECTION_CHANGED events send the old projection.
6550
6551 * test/test_session.py
6552 (TestSessionWithContent.test_forward_map_projection):
6553 MAP_PROJECTION_CHANGED events send the old projection.
6554
6555 * test/test_table.py (TableTest): Update tests to use non-deprecated
6556 functions.
6557
6558 2003-07-08 Bernhard Herzog <[email protected]>
6559
6560 * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
6561 constants in the column objects are the standard ones defined in
6562 the table module.
6563
6564 * test/test_transientdb.py
6565 (TestTransientTable.test_transienttable_to_dbf): New. Test whether
6566 exporting transient tables as DBF works. This should catch the bug
6567 just fixed in TransientTableBase.Width.
6568
6569 2003-07-08 Bernhard Herzog <[email protected]>
6570
6571 * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
6572 interpolated colors correctly.
6573
6574 * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
6575 New. Test case for the fix in classgen.py
6576
6577 2003-07-08 Bernhard Herzog <[email protected]>
6578
6579 * test/runtests.py (main): Make the default output less verbose
6580 and add a verbosity option (-v) to get the old output
6581
6582 2003-07-08 Bernhard Herzog <[email protected]>
6583
6584 * Resources/XML/thuban-0.9.dtd: New. This will become the DTD for
6585 0.9.
6586
6587 * Thuban/Model/transientdb.py (TransientJoinedTable.JoinType):
6588 New. Return the join type
6589
6590 * Thuban/Model/save.py (SessionSaver.write_session): Use new 0.9
6591 DTD
6592 (SessionSaver.write_data_containers): Save the join type for
6593 joined tables
6594
6595 * Thuban/Model/load.py (SessionLoader.__init__): Add the new 0.9
6596 namespace
6597 (SessionLoader.start_jointable): Handle the jointype attribute
6598
6599 * test/test_load_0_8.py: New. Effectively a copy of test_load.py
6600 as of Thuban 0.8. These are now tests to determine whether Thuban
6601 can still read files generated by Thuban 0.8
6602
6603 * test/test_load.py (LoadSessionTest.dtd)
6604 (TestSingleLayer.file_contents)
6605 (TestLayerVisibility.file_contents, TestLabels.file_contents)
6606 (TestLayerProjection.file_contents)
6607 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
6608 (TestJoinedTable.file_contents)
6609 (TestLoadError.file_contents): Update for new DTD
6610 (TestJoinedTable.file_contents, TestJoinedTable.setUp): Add test
6611 for new join type attribute
6612
6613 * test/test_save.py (SaveSessionTest.dtd)
6614 (SaveSessionTest.testEmptySession)
6615 (SaveSessionTest.testSingleLayer)
6616 (SaveSessionTest.testLayerProjection)
6617 (SaveSessionTest.testRasterLayer)
6618 (SaveSessionTest.testClassifiedLayer)
6619 (SaveSessionTest.test_dbf_table)
6620 (SaveSessionTest.test_joined_table): Update for new DTD
6621 (SaveSessionTest.test_joined_table): Add test for new join type
6622 attribute
6623
6624 2003-07-04 Bernhard Herzog <[email protected]>
6625
6626 * Thuban/Model/table.py (_find_dbf_column_names): New. Helper
6627 function for table_to_dbf
6628 (table_to_dbf): Deal with names longer than the 10 character limit
6629
6630 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
6631 doc-string
6632 (TestTableToDBF.test_table_to_dbf_long_col_names): New test for
6633 long column names
6634
6635 2003-07-03 Bernhard Herzog <[email protected]>
6636
6637 * Doc/manual/thuban-manual.xml: Fix the CVS Revision Tag syntax
6638
6639 2003-07-03 Bernhard Herzog <[email protected]>
6640
6641 * Doc/manual/thuban-manual.xml, Doc/manual/README: New. Skeleton
6642 for the Thuban manual and README with some basic information about
6643 the manual
6644
6645 2003-07-03 Bernhard Herzog <[email protected]>
6646
6647 * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
6648 Update doc-string
6649 (TransientJoinedTable.create): Do not modify the column objects of
6650 the input tables in place and copy all columns of the input tables
6651 into the joined table after all.
6652
6653 * test/test_transientdb.py
6654 (TestTransientTable.test_transient_joined_table_same_column_name):
6655 Update to reflect the new behavior
6656 (TestTransientTable.test_transient_joined_table_with_equal_column_names):
6657 Update to reflect the new behavior
6658 (TestTransientTable.test_transient_joined_table_name_collisions_dont_modify_in_place):
6659 New test case for a bug which modified the column objects in place
6660
6661 2003-07-02 Jonathan Coles <[email protected]>
6662
6663 * Thuban/Model/classgen.py (generate_singletons,
6664 generate_uniform_distribution, generate_quantiles,
6665 GenQuantiles0): Make sure maxValue isn't less than
6666 one, otherwise we could divide by zero.
6667
6668 * test/test_classgen.py (ClassGenTest.doClassRangeTest,
6669 ClassGenTest.doClassSingleTest): Call doBoundsTest to
6670 check the end classification groups against the
6671 proper property values.
6672 (ClassGenTest.doBoundsTest): New. Checks the first and
6673 last classification groups to make sure their properties
6674 are the correct upper and lower bounds for a color ramp.
6675
6676 2003-07-02 Jonathan Coles <[email protected]>
6677
6678 * Thuban/Model/classgen.py (generate_singletons,
6679 generate_uniform_distribution, generate_quantiles,
6680 GenQuantiles0): The denominator was one to high when
6681 calculating the index for the ramp causing the index
6682 to never to reach one.
6683
6684 2003-07-02 Jonathan Coles <[email protected]>
6685
6686 Changed the singature of ClassGroupRange.__init__ and
6687 ClassGroupRange.SetRange() so that the min/max values are
6688 passed as a tuple. This makes a better calling scheme for
6689 when a Range object is passed instead.
6690
6691 * Thuban/Model/classgen.py: Fixed parameters to
6692 ClassGroupRange constructor.
6693
6694 * Thuban/Model/classification.py (ClassGroupRange.__init__):
6695 Consolidate the min/max parameters into a single _range which
6696 can either be a tuple or a Range object.
6697 (ClassGroupRange.SetRange): Consolidate the min/max parameters
6698 into a single _range which can either be a tuple or a Range object.
6699
6700 * Thuban/Model/load.py (SessionLoader.start_clrange): Fix
6701 call to ClassGroupRange constructor to use a tuple.
6702
6703 * Thuban/Model/layer.py (Layer.SetClassification): Switch
6704 the classification instance variable to the new class
6705 before calling _set_layer otherwise subscribers to a
6706 LAYER_CHANGED event will not see any difference.
6707
6708 * test/test_classification.py: Fix tests of ClassGroupRange
6709 so that they use the new signature.
6710
6711 * test/test_load.py: Fix use of ClassGroupRange so that it
6712 uses the new signature.
6713
6714 * test/test_load_0_2.py: Fix use of ClassGroupRange so that it
6715 uses the new signature.
6716
6717 * test/test_save.py: Fix use of ClassGroupRange so that it
6718 uses the new signature.
6719
6720
6721 2003-07-01 Jonathan Coles <[email protected]>
6722
6723 * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.
6724 Import used objects/class from color.
6725 (generate_singletons): We don't
6726 need the numGroups parameter anymore because we are using
6727 the new ramps with GetProperties().
6728 (generate_uniform_distribution): Use new ramp method
6729 GetProperties().
6730 (generate_quantiles, GenQuantiles0): Use new ramp method
6731 GetProperties().
6732 (CustomRamp.SetNumGroups): Removed. The ramps now map
6733 a value from 0 to 1 to class properties so the number
6734 of groups is not needed ahead of time.
6735 (CustomRamp.next): Removed. CustomRamp does not support
6736 interation anymore.
6737 (CustomRamp.GetProperties): Returns a ClassGroupProperties
6738 object based on the index value from 0 to 1 that is
6739 passed to it.
6740 (GreyRamp, RedRamp, GreenRamp, BlueRamp, GreenToRedRamp):
6741 Made into instances of Monochromatic class instread of
6742 deriving from it.
6743 (HotToCold.SetNumGroups): Removed. See CustomRamp.
6744 (HotToCold.next): Removed. See CustomRamp.
6745
6746 * Thuban/Model/classification.py: Fixes RTbug #1973, 1971.
6747 (Classification.SetField, Classification.SetFieldType):
6748 Replaced with SetFieldInfo.
6749 (Classification.SetFieldInfo): New. Does a better job of
6750 what SetField and SetFieldType used to do by combining
6751 their function since they should really always be done
6752 at the same time.
6753 (Classification.SetLayer): Renamed to _set_layer.
6754 (Classification._set_layer): Should only be called from
6755 Layer's SetClassification. This does not cause a recursive
6756 call as SetLayer did because we know that Layer knows about
6757 the classification.
6758
6759 * Thuban/Model/color.py: Fixes RTbug #1971.
6760 (_Transparent): Renamed from Transparent so it doesn't
6761 conflict with the module variable.
6762 (Transparent, Black): Renamed from Color.Transparent,
6763 Color.Black so they are not class variables.
6764
6765 * Thuban/Model/layer.py: Fixes RTbug #1971, 1973.
6766 (Layer.Destroy): We don't need to call SetClassification
6767 anymore to clear out the back reference in the classifcation
6768 to the layer. It's better to set it to None using _set_layer,
6769 and we won't be creating another clas object too.
6770 (Layer.SetClassification): Classification._set_layer is not
6771 recursive so remove all the locking variables. Also clean
6772 up the code so that it remains unchanged if something fails.
6773
6774 * Thuban/Model/load.py: Fixes RTbug #1971.
6775 (SessionLoader.start_classification): Call
6776 Classification.SetFieldInfo().
6777
6778 * Thuban/Model/save.py: Removed import of Color which wasn't
6779 being used.
6780
6781 * Thuban/UI/classgen.py: Fixes RTbug #1972.
6782 (ClassGenDialog.__init__): Color ramps are now instances
6783 already so we don't need to create any new objects.
6784 (ClassGenDialog.OnOK): Check for numGroups is no longer
6785 necessary because we never use it.
6786
6787 * Thuban/UI/classifier.py: Fixes RTbug #1971.
6788 (Classifier.__BuildClassification, Classifier.__SetGridTable):
6789 Call Classification.SetFieldInfo() instead of SetFieldType.
6790
6791 * Thuban/UI/renderer.py: Fixes RTbug #1971.
6792
6793 * Thuban/UI/view.py: Fixes RTbug #1974, 1971.
6794 (MapCanvas.__init__): Subscribe to the idle time event. Set
6795 background color to white.
6796 (MapCanvas.OnPaint): Set a flag indicating that we should
6797 render the map during idle time. If we already have a bitmap
6798 just draw it now.
6799 (MapCanvas.OnIdle): New. Render the map only during idle time.
6800 This also fixes a problem with the busy cursor under gtk.
6801
6802 * test/test_classgen.py (ClassGenTest.test_generate_singletons):
6803 Fix calls to generate_singletons because the signature changed.
6804
6805 * test/test_classification.py: Fix color references and
6806 change calls to Classification.[SetField|SetFieldType] to
6807 SetFieldInfo.
6808
6809 * test/test_load.py: Fix color references.
6810
6811 * test/test_load_0_2.py: Fix color references.
6812
6813 * test/test_save.py (SaveSessionTest.testClassifiedLayer):
6814 Change calls to Classification.[SetField|SetFieldType] to
6815 SetFieldInfo.
6816
6817 2003-07-01 Frank Koormann <[email protected]>
6818
6819 MERGE from the greater-ms3 branch.
6820
6821 * test/test_transientdb.py
6822 (TestTransientTable.test_transient_joined_table_with_equal_column_names):
6823 New. Test join of two tables with partly equal column names.
6824
6825 * Thuban/Model/transientdb.py (TransientJoinedTable.create):
6826 If duplicates in left and right tables column names are found,
6827 append '_' (underscores) to the name until it is unique.
6828 Create always new internal names for the resulting table and reference
6829 columns in the join statement with <table>.<column>
6830
6831 2003-07-01 Bernhard Herzog <[email protected]>
6832
6833 * test/test_transientdb.py
6834 (TestTransientTable.test_transient_joined_table_same_column_name):
6835 New. Test whether joining on columns with the same names in both
6836 tables works.
6837
6838 * Thuban/Model/transientdb.py (TransientJoinedTable.create): Make
6839 sure to use the right internal names even when joining on field
6840 with the same names in both tables. Also, detect duplicate names
6841 in the joined table correctly.
6842
6843 2003-07-01 Frank Koormann <[email protected]>
6844
6845 * Thuban/UI/renderer.py (ExportRenderer.render_legend):
6846 Reverse List of layers to render in same order as in desktop legend.
6847
6848 2003-06-30 Jonathan Coles <[email protected]>
6849
6850 * Thuban/version.py (make_tuple): Takes a version string
6851 and splits it into a tuple of at most three integers.
6852 Used make_tuple() to make tuple versions of the version
6853 numbers.
6854
6855 * Thuban/UI/about.py: Add Thuban email addresses.
6856
6857 2003-06-30 Jonathan Coles <[email protected]>
6858
6859 * Thuban/version.py: SQLite/PySQLite version dependencies
6860 were too high.
6861
6862 2003-06-30 Jonathan Coles <[email protected]>
6863
6864 * Thuban/version.py: Update version to 0.8.1
6865
6866 * MANIFEST.in: Added Projections so that default.proj is
6867 included.
6868
6869 2003-06-26 Jonathan Coles <[email protected]>
6870
6871 New About box with lots more information including library
6872 versions and credits. More/better version checking before
6873 Thuban starts.
6874
6875 * Thuban/UI/about.py: New. New About box that displays
6876 library version information and credits.
6877
6878 * Thuban/version.py: Added new 'versions' dictionary which
6879 contains the verions of various libraries which are checked
6880 when the module loads.
6881 (verify_versions): Check all version numbers and returns
6882 a list of errors.
6883
6884 * Thuban/UI/classifier.py (Classifier.__EnableButtons):
6885 Reset the status of the buttons as the situation warrants,
6886 but in a better more reliable way by not relying on the
6887 current status to determine what needs to change.
6888
6889 * Thuban/UI/main.py (wxCHECK_VERSION): Removed. Not needed.
6890 (verify_versions): Remove most of the code since it is
6891 now in Thuban.version.verify_versions.o
6892
6893 * Thuban/UI/mainwindow.py (MainWindow.About): Call new
6894 About box in Thuban.UI.about.
6895
6896 * extensions/thuban/gdalwarp.cpp (get_gdal_version): New.
6897 Returns the version of gdal library being used as a string.
6898
6899 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
6900 Removed.
6901 (get_proj_version): Return the version of PROJ that the file
6902 was compiled with.
6903 (get_gtk_version): Return th version of GTK that the file
6904 was compiled with.
6905
6906 2003-06-25 Jonathan Coles <[email protected]>
6907
6908 * Thuban/UI/classifier.py (Classifier.EditSymbol): The parent
6909 of the SelectPropertiesDialog should be self so the window
6910 appears on top.
6911 (ClassGroupPropertiesCtrl.DoEdit): The parent
6912 of the SelectPropertiesDialog should be self so the window
6913 appears on top.
6914
6915 * Thuban/UI/resource.py: Cleaned up how we determine file
6916 extensions.
6917 (GetImageResource): Return an wxImage from our Resources.
6918
6919 2003-06-24 Jonathan Coles <[email protected]>
6920
6921 * Thuban/UI/renderer.py (ExportRenderer.render_legend):
6922 Check that a layer has a classification before trying
6923 to get it. Raster layers don't have classifications.
6924
6925 2003-06-23 Jonathan Coles <[email protected]>
6926
6927 * setup.py: Add Resources/XML to resource list.
6928
6929 2003-06-23 Jonathan Coles <[email protected]>
6930
6931 * setup.cfg: Fix copyright dates
6932
6933 2003-06-23 Jonathan Coles <[email protected]>
6934
6935 * MANIFEST.in: Update with Resources/XML
6936
6937 * setup.py: Don't include Locale resources yet as we don't
6938 have any and it causes problems building the distribution
6939 for Windows. Update version to 0.8.0.
6940
6941 * Doc/thuban.dtd: Removed since it is now in Resources/XML.
6942
6943 * Thuban/UI/mainwindow.py: Add blank line at the end because
6944 file was not being read correctly building the Windows
6945 distribution.
6946
6947 2003-06-23 Jonathan Coles <[email protected]>
6948
6949 * Thuban/UI/mainwindow.py (MainWindow.About): Fix text.
6950
6951 * Thuban/version.py: Temporarily update longversion for
6952 the 0.8 release so that it doesn't have the cvs revision.
6953
6954 2003-06-23 Jonathan Coles <[email protected]>
6955
6956 * Thuban/UI/common.py (ThubanBeginBusyCursor): Call wxSafeYield
6957 to make sure that we don't create reentrant possibilities with
6958 wxYield.
6959
6960 * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxBeginBusyCursor()
6961 directly to avoid the wxSafeYield() call which generates an
6962 OnPaint event causing infinite recursion. Don't try to catch
6963 exception anymore. This was for before there were limits on map
6964 scaling.
6965
6966 2003-06-23 Bernhard Herzog <[email protected]>
6967
6968 Bug fix for RT #1961:
6969
6970 * Thuban/Model/load.py (SessionLoader.start_derivedshapesource):
6971 Register DerivedShapestores with the session
6972
6973 * Thuban/Model/session.py (Session.Tables): Make sure each table
6974 is only listed once.
6975
6976 * test/test_load.py (TestJoinedTable.test): Add check_format call.
6977 Update file contents to match the one written out.
6978
6979 2003-06-20 Bernhard Herzog <[email protected]>
6980
6981 * test/xmlsupport.py (SaxEventLister.startElementNS)
6982 (SaxEventLister.endElementNS): Do not include the qname. Python
6983 2.2.1 and 2.2.2 and 2.2.3 differ in this regard. In 2.2.1 qname it
6984 is (presumably incorrectly) None, whereas it's a string with the
6985 element name in the later versions.
6986
6987 * test/test_xmlsupport.py (TestEventList.test_even_list_simple)
6988 (TestEventList.test_even_list_namespace): Update tests to reflect
6989 the new behaviour
6990 (TestEventList.test_even_list_id_normalization): Fix doc-string
6991
6992 2003-06-20 Jonathan Coles <[email protected]>
6993
6994 * Thuban/Model/layer.py (BaseLayer.HasShapes): New. Overridden
6995 by deriving classes to determine if that layer supports shapes.
6996 (Layer): Override HasShapes and return true.
6997
6998 * Thuban/UI/classgen.py: Use Thuban[Begin|End]BusyCursor()
6999 instead of a direct call to wx[Begin|End]CusyCursor().
7000 (GenUniquePanel._OnRetrieve): Set busy cursor while retrieving
7001 table data.
7002
7003 * Thuban/UI/common.py (ThubanBeginBusyCursor, ThubanEndBusyCursor):
7004 New. Wrappers around the wxWindows functions that allow us to
7005 make additional calls such as wxYield which gives the native
7006 system a chance to update the cursor correctly.
7007
7008 * Thuban/UI/tableview.py: Use Thuban[Begin|End]BusyCursor()
7009 instead of a direct call to wx[Begin|End]CusyCursor().
7010
7011 * Thuban/UI/view.py: Use Thuban[Begin|End]BusyCursor()
7012 instead of a direct call to wx[Begin|End]CusyCursor().
7013 (MapCanvas.find_shape_at): Check if the current search layer
7014 support shapes, otherwise go on to the next layer.
7015
7016 * test/test_layer.py: Add tests in each type of layer for
7017 HasClassification() and HasShapes()
7018
7019 2003-06-20 Jonathan Coles <[email protected]>
7020
7021 * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after
7022 turning on the busy cursor to allow the system to change the
7023 cursor before we begin painting. This fixes a problem that
7024 was occuring only under GTK. Fixes RTbug #1840.
7025
7026 2003-06-20 Bernhard Herzog <[email protected]>
7027
7028 * Resources/XML/thuban-0.8.dtd: New DTD for the new file format
7029 version.
7030
7031 * Thuban/Model/save.py (sort_data_stores): New. Make topological
7032 sort of the data sources so they can be written with sources that
7033 data sources that depend on other data sources come after the
7034 sources they depend on.
7035 (SessionSaver.__init__): Add idmap instance variable to map from
7036 objects to the ids used in the file.
7037 (SessionSaver.get_id, SessionSaver.define_id)
7038 (SessionSaver.has_id): New. Methods to manage the idmap
7039 (SessionSaver.write): Use thuban-0.8.dtd
7040 (SessionSaver.write_session): Add a namespace on the session and
7041 write out the data sources before the maps.
7042 (SessionSaver.write_data_containers): New. Write the data
7043 containers.
7044 (SessionSaver.write_layer): Layer elements now refer to a
7045 shapestore and don't contain filenames anymore.
7046
7047 * Thuban/Model/load.py (LoadError): Exception class to raise when
7048 errors in the files are discovered
7049 (SessionLoader.__init__): Define dispatchers for elements with a
7050 thuban-0.8 namespace too.
7051 (SessionLoader.check_attrs): New helper method to check and
7052 convert attributes
7053 (AttrDesc): New. Helper class for SessionLoader.check_attrs
7054 (SessionLoader.start_fileshapesource)
7055 (SessionLoader.start_derivedshapesource)
7056 (SessionLoader.start_filetable, SessionLoader.start_jointable):
7057 Handlers for the new elements in the new fileformat
7058 (SessionLoader.start_layer): Handle the shapestore attribute in
7059 addition to filename.
7060 (SessionLoader.start_table, SessionLoader.end_table): Removed.
7061 They were never used in the old formats and aren't needed for the
7062 new.
7063
7064 * Thuban/Model/session.py (Session.DataContainers): New method to
7065 return all "data containers", i.e. shapestores and tables
7066
7067 * test/xmlsupport.py (SaxEventLister.__init__)
7068 (SaxEventLister.startElementNS, sax_eventlist): Add support to
7069 normalize IDs.
7070
7071 * test/test_xmlsupport.py
7072 (TestEventList.test_even_list_id_normalization): New test case for
7073 id normalization
7074
7075 * test/test_load.py (LoadSessionTest.check_format): Use ID
7076 normalization
7077 (LoadSessionTest.thubanids, LoadSessionTest.thubanidrefs): New
7078 class atrributes used for ID normalization
7079 (TestSingleLayer, TestLayerVisibility, TestLabels.test)
7080 (TestLayerProjection.test, TestRasterLayer.test): Adapt to new
7081 file format
7082 (TestJoinedTable): New test for loading sessions with joined
7083 tables.
7084 (TestLoadError): New. Test whether missing required attributes
7085 cause a LoadError.
7086
7087 * test/test_save.py (SaveSessionTest.thubanids)
7088 (SaveSessionTest.thubanidrefs): New class attributes for ID
7089 normalization in .thuban files.
7090 (SaveSessionTest.compare_xml): Use id-normalization.
7091 (SaveSessionTest.testEmptySession)
7092 (SaveSessionTest.testLayerProjection)
7093 (SaveSessionTest.testRasterLayer)
7094 (SaveSessionTest.testClassifiedLayer): Adapt to new file format.
7095 (SaveSessionTest.testLayerProjection): The filename used was the
7096 same as for testSingleLayer. Use a different one.
7097 (SaveSessionTest.test_dbf_table)
7098 (SaveSessionTest.test_joined_table): New test cases for saving the
7099 new data sources structures.
7100 (TestStoreSort, MockDataStore): Classes to test the sorting of the
7101 data stores for writing.
7102
7103 * test/runtests.py: Add CVS keywords
7104
7105 2003-06-20 Jonathan Coles <[email protected]>
7106
7107 * test/test_session.py
7108 (UnreferencedTablesTests.test_unreferenced_tables_with_joins):
7109 Use the cultural_landmark-point.dbf file for the store so that
7110 the table rows and shape count match.
7111
7112 2003-06-20 Jonathan Coles <[email protected]>
7113
7114 * Thuban/Model/data.py (DerivedShapeStore.__init__): Raise
7115 an exception if the number of shapes is different from the
7116 number of rows in the table. Address RTbug #1933.
7117
7118 * test/test_layer.py (TestLayer.test_derived_store): Add
7119 a test for the new exception in DerivedShapeStore.__init__.
7120
7121 * test/support.py (FloatTestCase): Removed since there is
7122 already FloatComparisonMixin. Fixes RTbug #1954.
7123 (FloatComparisonMixin.assertFloatEqual): Include test for
7124 infinity that was part of FloatTestCase.
7125
7126 * test/test_range.py (RangeTest): Inherit from
7127 support.FloatComparisonMixin now that we don't have
7128 support.FloatTestCase.
7129
7130 2003-06-20 Bernhard Herzog <[email protected]>
7131
7132 * test/test_save.py (SaxEventLister, sax_eventlist): Removed. Use
7133 the implementation in xmlsupport instead.
7134 (SaveSessionTest.compare_xml): sax_eventlist is now in xmlsupport
7135
7136 * test/test_proj.py: Import sax_eventlist from xmlsupport instead
7137 of test_save
7138
7139 2003-06-20 Bernhard Herzog <[email protected]>
7140
7141 * test/test_load.py (LoadSessionTest.check_format): New helper
7142 method to make sure the test files we load might have been written
7143 by the current thuban version.
7144 (ClassificationTest.TestLayers, TestSingleLayer.test)
7145 (TestLayerVisibility.test, TestClassification.test)
7146 (TestLabels.test, TestLayerProjection.test, TestRasterLayer.test):
7147 Add check_format() calls and fix the thuban data to match the data
7148 that would be written by saving the session loaded from it.
7149
7150 * test/xmlsupport.py (SaxEventLister, sax_eventlist): Copies of
7151 the same class and function in test_save.
7152
7153 * test/test_xmlsupport.py (TestEventList): New. test cases for
7154 sax_eventlist
7155
7156 2003-06-20 Bernhard Herzog <[email protected]>
7157
7158 * Resources/XML/thuban.dtd: Add comment about which versions of
7159 Thuban are covered by this DTD
7160 (map): Fix content model for layers and raster layers. There can
7161 be any number or layers and raster layers in any order.
7162
7163 2003-06-20 Jonathan Coles <[email protected]>
7164
7165 This is mainly about fixing RTbug #1949.
7166
7167 * Thuban/Model/classification.py: Remove "from __future__"
7168 import statement since python 2.2 is the earliest supported
7169 version.
7170
7171 * Thuban/Model/proj.py (Projection.GetProjectedUnits): New.
7172 Currently returns PROJ_UNITS_METERS or PROJ_UNITS_DEGREES
7173 depending on the units this projection *forwards* into.
7174
7175 * Thuban/Model/save.py (SessionSaver.write_classification):
7176 Remove unnecessary use of lambdas and nested functions.
7177
7178 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Do scale
7179 adjustment here if the map projection uses degrees.
7180
7181 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Remove
7182 scale adjust code since it is now done before calling
7183 this method. Don't do anything if the map projection
7184 is None.
7185
7186 2003-06-19 Bernhard Herzog <[email protected]>
7187
7188 Move version specific load tests to their own file.
7189
7190 * test/test_load.py: Expand the doc-string to explain a bit how to
7191 handle file format changes.
7192 (TestClassification.test): Update the docstring as this test is
7193 not about Thuban 0.2 anymore.
7194
7195 * test/test_load_0_2.py: New file with the load tests for thuban
7196 files created with Thuban 0.2 and earlier.
7197
7198 2003-06-19 Bernhard Herzog <[email protected]>
7199
7200 Add XML validation to some of the tests. Validation will only be
7201 done if pyRXP is installed (http://reportlab.com/xml/pyrxp.html).
7202 To make the DTD available to the test cases it's moved into
7203 Resources/XML
7204
7205 * Resources/XML/thuban.dtd: New. This is now the real Thuban DTD
7206 for versions up to and including 0.2. Two slight changes: added an
7207 encoding specification and fixed the comment which refered to
7208 GRASS, not Thuban
7209
7210 * test/xmlsupport.py: New support module for tests involving XML.
7211 Currently there's a mix-in class for XML validation.
7212
7213 * test/test_xmlsupport.py: New. Tests for the xmlsupport module
7214
7215 * test/test_save.py (SaveSessionTest): Derive from ValidationTest
7216 so that we can validate the
7217 (SaveSessionTest.testEmptySession)
7218 (SaveSessionTest.testSingleLayer)
7219 (SaveSessionTest.testSingleLayer)
7220 (SaveSessionTest.testLayerProjection)
7221 (SaveSessionTest.testRasterLayer)
7222 (SaveSessionTest.testClassifiedLayer): Validate the generated XML
7223
7224 * test/runtests.py (main): Call print_additional_summary instead
7225 of print_garbage_information
7226
7227 * test/support.py (resource_dir): New function to return the
7228 "Resource" subdirectory
7229 (print_additional_summary): New function to combine several
7230 summary functions
7231 (run_tests): Use print_additional_summary instead of calling
7232 print_garbage_information directly
7233
7234 2003-06-19 Bernhard Herzog <[email protected]>
7235
7236 * Doc/thuban.dtd (classification): Correct the content model of
7237 the classification element.
7238 (projection): Add the "name" attribute
7239
7240 2003-06-19 Frank Koormann <[email protected]>
7241
7242 MERGE from the greater-ms3 branch.
7243
7244 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Apply conversion to
7245 scale if projection is latlong to get better estimate.
7246
7247 Fix problem of hidden properties dialog under windows after double
7248 click on layer tree:
7249 The tree control always gets an Expanded / Collapsed event after
7250 the ItemActivated on double click, which raises the main window again.
7251 We add a second ItemActivated event to the queue, which simply
7252 raises the already displayed window.
7253
7254 * Thuban/UI/legend.py (LegendTree.__init__): Instance variable
7255 raiseProperties initialized to prevent endless loops
7256 (LegendTree._OnItemActivated): Depending on self.raiseProperties
7257 simply raise the properties or open the dialog and issue a second
7258 event.
7259
7260 2003-06-18 Jonathan Coles <[email protected]>
7261
7262 * setup.py: Fix a few problems that occured under Windows.
7263
7264 2003-06-18 Jonathan Coles <[email protected]>
7265
7266 When Thuban loaded the map was redrawn twice because the
7267 legend was being opened after the mainwindow was created
7268 and not during its creation. This meant the map was drawn
7269 initially and then had to be redrawn when the legend
7270 caused the display to change. Now the legend is opened
7271 in the mainwindow constructor which resolves this issue.
7272
7273 Also, although we were checking for the existence of
7274 gdal and gdalwarp modules, the gdalwarp extension was
7275 still being compiled (which may fail if the system doesn't
7276 have gdal installed). the build_ext command to setup.py
7277 now accepts the flags --with-gdal and --without-gdal.
7278 If --without-gdal is specified setup.py will try to
7279 use the gdal parameters specified by gdal-config. Under
7280 windows, those parameters have to be set in setup.py
7281 as with proj4 an wxWindows.
7282
7283 * setup.py: Use a list instead of seperate variables for
7284 extension parameters so we can create a generic function
7285 that runs an appropriate *-config script.
7286 (run_cs_script): Renamed from run_wx_script and modified
7287 to accept a second argument which is a list of lists to
7288 be filled in by the values returned from running the command.
7289 (thuban_build_ext): New. Extends the build_ext command and
7290 provides the options --with-gdal/--without-gdal which then
7291 optionally includes the gdalwarp extension.
7292
7293 * Thuban/Model/resource.py: First check if we can import
7294 the gdalwarp Thuban extension before checking for gdal.
7295 Also added some comments.
7296
7297 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Check if
7298 the map is None which may be the case if none has been loaded
7299 yet.
7300
7301 * Thuban/UI/main.py (main): Remove call to ShowLegend.
7302
7303 * Thuban/UI/mainwindow.py (MainWindow.__init__): Call ShowLegend().
7304
7305 * Thuban/UI/renderer.py: Check for gdal support before importing
7306 gdalwarp.
7307 (MapRenderer.render_map): Only try to optimize if we have gdal
7308 support otherwise nothing will get drawn.
7309
7310 * Thuban/UI/view.py (MapCanvas.FitMapToWindow): This may be called
7311 during startup before a map has been created. Check if map is None
7312 before using it and do nothing if it is.
7313
7314 2003-06-17 Jonathan Coles <[email protected]>
7315
7316 Fix the problem with raster layers under Windows that caused
7317 Thuban to crash. The view should respond to layer projection
7318 changed events to update the display. Changes to a projection
7319 should not cause the map to be set to full extent.
7320
7321 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
7322 current_map_proj to remember the current map projection so that
7323 when the projection changes we know what the previous projection
7324 was.
7325 (MapCanvas.SetMap): Unsubscribe and subscribe to
7326 LAYER_PROJECTION_CHANGED events.
7327 (MapCanvas.projection_changed): Split into two methods that respond
7328 to map and layer projection changes.
7329 (MapCanvas.map_projection_changed): New. Takes the current view and
7330 projects it using the new projection. This does not cause the
7331 map to be redrawn at full extent.
7332 (MapCanvas.layer_projection_changed): New. Cause a redraw which
7333 will draw each layer in its new projection.
7334
7335 * extensions/thuban/bmpdataset.cpp (BMPDataset::Open): Call
7336 VSIFClose() not VSIFCloseL() to close the file. Fixes a crash
7337 under Windows.
7338
7339 * extensions/thuban/gdalwarp.cpp (MFILENAME): Padding should be
7340 to twice sizeof(void*) because there are two digits for each
7341 hex byte.
7342
7343 2003-06-16 Bernhard Herzog <[email protected]>
7344
7345 Update to the layer interface: Direct access to the table,
7346 shapetable, shapefile and filename attributes is now actively
7347 deprecated by issuing deprecation warnings for all places where
7348 this happens.
7349
7350 * Thuban/Model/layer.py (Layer.__getattr__): New. Implement access
7351 to the instance variables table, shapetable, shapefile and
7352 filename via __getattr__ so that we can issue a deprecation
7353 warning.
7354 (Layer.SetShapeStore): Don't set the deprecated instance variables
7355 any more
7356 (Layer.SetShapeStore): Don't use deprecated layer instance
7357 variables
7358 (Layer.Destroy): No need to explicitly remove the instance
7359 variables any more
7360 (Layer.GetFieldType, Layer.Shape): Don't use deprecated layer
7361 instance variables
7362
7363 * Thuban/UI/classgen.py (ClassGenDialog.__init__)
7364 (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve)
7365 (GenQuantilesPanel.GetList, GenQuantilesPanel.OnRetrieve): Don't
7366 use deprecated layer instance variables
7367
7368 * Thuban/UI/classifier.py (Classifier.__init__): Don't use
7369 deprecated layer instance variables
7370
7371 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
7372 (IdentifyGridCtrl.selected_shape): Don't set the deprecated layer
7373 instance variables
7374
7375 * Thuban/UI/tableview.py (LayerTableGrid.select_shapes): Don't use
7376 deprecated layer instance variables
7377
7378 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Don't use
7379 deprecated layer instance variables
7380
7381 * Thuban/Model/save.py (SessionSaver.write_layer): Don't use
7382 deprecated layer instance variables
7383
7384 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer)
7385 (MapRenderer.polygon_render_param): Don't use deprecated layer instance
7386 variables
7387
7388 * test/runtests.py (main): Turn Thuban's deprecation warnings into
7389 errors so that they're cought by the tests
7390
7391 * test/test_load.py (TestSingleLayer.test): Don't use deprecated
7392 layer instance variables
7393
7394 2003-06-16 Jonathan Coles <[email protected]>
7395
7396 Fix a problem under Windows whereby if the user double-clicks on a
7397 layer in the legend that tree item will expand or collapse as well
7398 as open the layer properties dialog. The state of the tree item
7399 should not be affected.
7400
7401 * Thuban/UI/legend.py (LegendTree.__init__): Add instance variable
7402 preventExpandCollapse and subscribe to expanding and collapsing
7403 events.
7404 (LegendTree.OnItemExpandCollapse): New. Responds to expanding and
7405 collapsing events and will veto the event if it has been triggered
7406 by the user double clicking on a layer.
7407 (LegendTree._OnItemActivated): Set preventExpandCollapse to indicate
7408 that an expanding/collapsing event should be vetoed.
7409
7410 2003-06-13 Bernhard Herzog <[email protected]>
7411
7412 * Thuban/UI/classifier.py (Classifier.OnClose)
7413 (Classifier.map_layers_removed)
7414 (Classifier.layer_shapestore_replaced): Unsubscribe the messages
7415 in OnClose and not in map_layers_removed or
7416 layer_shapestore_replaced to make sure it always happens when the
7417 dialog is closed
7418
7419 2003-06-13 Jonathan Coles <[email protected]>
7420
7421 This puts back a fix for Windows where a panel is needed so that
7422 the background of the table view appears correctly.
7423
7424 * Thuban/UI/tableview.py (TableFrame.__init__): Add a panel
7425 object that can be used by derived classes to place any
7426 controls (including the grid) onto.
7427 (QueryTableFrame.__init__): Use the panel as the parent window
7428 for all the controls. Reparent the grid so that the panel is
7429 the parent. Call UpdateStatusText() to correctly initialize
7430 the status bar.
7431
7432 2003-06-13 Jonathan Coles <[email protected]>
7433
7434 * Thuban/UI/dialogs.py (ThubanFrame): New: a class that inherits
7435 from wxFrame (as opposed to wxDialog like the other classes)
7436 but otherwise behaves like the other classes. This is needed
7437 for the TableView which isn't really a dialog and needs to
7438 have a status bar and control buttons.
7439
7440 * Thuban/UI/tableview.py (TableGrid.__init__): Create an
7441 instance variable to keep track of how many rows are selected.
7442 Subscribe once to the the events we are interested in.
7443 (ThubanGrid.OnRangeSelect): Only handle event if event handling
7444 hasn't been turned off.
7445 (ThubanGrid.OnSelectCell): Only handle event if event handling
7446 hasn't been turned off.
7447 (ThubanGrid.ToggleEventListeners): Rather than subscribe None
7448 as an event listener (which changes the event handler stack)
7449 simply set an instance variable to False. This is checked in
7450 the event handlers.
7451 (ThubanGrid.GetNumberSelected): Return the number of currently
7452 selected rows.
7453 (TableFrame): Inherit from ThubanFrame so we can have a
7454 status bar and control buttons.
7455 (QueryTableFrame.__init__): Create a status bar. Fixes RTbug #1942.
7456 Explicitly set which items are selected in the operator choice and
7457 action choice so there is always a valid selection. Fixes RTbug #1941.
7458 Subscribe to grid cell selection events so we can update the
7459 status bar.
7460 (QueryTableFrame.UpdateStatusText): Update the status bar with
7461 how many rows are in the grid, how many columns, and how many
7462 rows are selected.
7463 (QueryTableFrame.OnGridSelectRange, QueryTableFrame.OnGridSelectCell):
7464 Call UpdateStatusText when cells are (de)selected.
7465 (QueryTableFrame.OnQuery): Use the string value in the value
7466 combo if either the selected item index is 0 or if the string
7467 cannot be found in the predefined list (this happens if the
7468 user changes the text). Fixes RTbug #1940.
7469 Only turn off the grid event listeners if there a query comes
7470 back with a none empty list of ids. in the case that the list
7471 is empty this causes a grid.ClearSelection() call to actually
7472 clear the grid selection which causes the selected items in
7473 the map to be deselected. Fixes RTbug #1939.
7474
7475 * test/test_save.py (XMLWriterTest.Encode): Check return values.
7476 Fixes RTbug #1851.
7477
7478 2003-06-13 Bernhard Herzog <[email protected]>
7479
7480 * Thuban/UI/identifyview.py (IdentifyView.__init__): Call
7481 self.selected_shape with the current selection to make sure the
7482 contents of the dialog are up to date when it's shown for the
7483 first time.
7484 The dialog used to work without this by luck. The recent fix to
7485 the connector module 'broke' a 'feature' the identify view was
7486 relying on, i.e that subscribing to a message in response to
7487 receiving a message of that type would mean that the new
7488 subscriber would also be called for the same message.
7489
7490 2003-06-12 Jonathan Coles <[email protected]>
7491
7492 * extensions/thuban/gdalwarp.cpp: Removed debug printing as
7493 the image is rendered. Fixes RTbug #1937.
7494
7495 2003-06-12 Jonathan Coles <[email protected]>
7496
7497 * Thuban/Lib/fileutil.py: As is done under Windows, create the
7498 user directory if it doesn't exist on a posix system.
7499 Fixes RTbug #1815.
7500
7501 * Thuban/Model/resource.py (get_user_proj_files): Moved the
7502 called to get_application_dir here, so that the directory
7503 will only be called if this method is invoked.
7504
7505 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Clear
7506 the projfilepath if no projection is selected.
7507
7508 2003-06-12 Jonathan Coles <[email protected]>
7509
7510 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Don't draw
7511 the scalebar if the current map has no projection set.
7512
7513 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Set the
7514 projfilepath label to just the basename of the projection file
7515 rather than include the entire path.
7516
7517 * Thuban/Model/resource.py: Fix missed proj functions that
7518 needed to be renamed.
7519
7520 2003-06-12 Jonathan Coles <[email protected]>
7521
7522 * Thuban/Model/classification.py: Removed assert statements that
7523 tested if the variable was an instance of Color.
7524
7525 * Thuban/Model/color.py (Color): Remove commented code that isn't
7526 used.
7527 (Transparent): Renamed from NoColor. Doesn't inherit from Color.
7528 Fixes RTbug #1835.
7529 (Transparent.__eq__, Transparent.__ne, Transparent.__repr): New.
7530 Needed now that the class doesn't inherit from Color.
7531
7532 2003-06-12 Jonathan Coles <[email protected]>
7533
7534 * test/test_save.py (XMLWriterTest.testEncode): Explicitly
7535 check unicode strings.
7536
7537 * test/test_layer.py: Check for existence of gdal.
7538
7539 2003-06-12 Jonathan Coles <[email protected]>
7540
7541 * Thuban/Model/xmlreader.py: New. Contains the XMLReader class
7542 that was in load.py
7543
7544 * Thuban/Model/xmlwriter.py: New. Contains the XMLWriter class
7545 that was in save.py
7546
7547 2003-06-12 Jonathan Coles <[email protected]>
7548
7549 This is largely a collection of bug fixes. We also handle the
7550 case where gdal is not on the system. The XMLReader and XMLWriter
7551 classes were moved into there own files to resolve some circular
7552 import references and because they shouldn't really be in the
7553 file that is dediciated to reading/writing session files since
7554 they are also used elsewhere.
7555
7556 * Thuban/Model/classgen.py: Renamed functions to follow the
7557 function_names_with_underscores style. Fixes RTbug #1903.
7558 (calculate_quantiles): Raise ValueError if 'percents' is invalid.
7559
7560 * Thuban/Model/layer.py: Import gdal only if it available.
7561 (RasterLayer): Handle the case where the gdal library is unavailable.
7562 Addresses RTbug #1877.
7563
7564 * Thuban/Model/load.py (XMLReader): Moved into seperate file
7565 xmlreader.py.
7566
7567 2003-06-12 Jonathan Coles <[email protected]>
7568
7569 This is largely a collection of bug fixes. We also handle the
7570 case where gdal is not on the system. The XMLReader and XMLWriter
7571 classes were moved into there own files to resolve some circular
7572 import references and because they shouldn't really be in the
7573 file that is dediciated to reading/writing session files since
7574 they are also used elsewhere.
7575
7576 * Thuban/Model/classgen.py: Renamed functions to follow the
7577 function_names_with_underscores style. Fixes RTbug #1903.
7578 (calculate_quantiles): Raise ValueError if 'percents' is invalid.
7579
7580 * Thuban/Model/layer.py: Import gdal only if it available.
7581 (RasterLayer): Handle the case where the gdal library is unavailable.
7582 Addresses RTbug #1877.
7583
7584 * Thuban/Model/load.py (XMLReader): Moved into seperate file
7585 xmlreader.py.
7586
7587 * Thuban/Model/save.py (escape, XMLWriter): Moved into seperate
7588 file xmlwriter.py.
7589
7590 * Thuban/Model/resource.py: Renamed functions to following the
7591 function_names_with_underscores style.
7592 (has_gdal_support): New function that returns true if the gdal
7593 library is available. Addresses RTbug #1877.
7594
7595 * Thuban/UI/application.py (ThubanApplication.OpenSession):
7596 Display a message box if the gdal library is not available, but
7597 only if there are any layers that would use it. Addresses RTbug #1877.
7598
7599 * Thuban/UI/classgen.py: Use renamed projection resource functions.
7600 (GenUniformPanel.__CalcStepping): Fix a slight discrepency
7601 when using integers versus floats.
7602
7603 * Thuban/UI/mainwindow.py (_has_gdal_support): New. Used to
7604 determine if the "Add Image Layer" menu option should be
7605 greyed out or not. Addresses RTbug #1877.
7606
7607 * Thuban/UI/projdialog.py: Use renamed projection resource functions.
7608
7609 * Thuban/UI/renderer.py (MapRenderer.render_map): Only try to
7610 optimize if a raster layer is visible. Fixes RTbug #1931.
7611 Only draw the raster layer if the gdal library is available.
7612 Addresses RTbug #1877.
7613
7614 * test/test_classgen.py: Add tests for generate_singletons,
7615 generate_uniform_distribution, generate_quantiles. Fixes RTbug #1903.
7616 (test_calculate_quantiles): Fix some tests to catch the new
7617 ValueError that is raised.
7618
7619 * test/test_proj.py: Use renamed projection resource functions.
7620
7621 * test/test_save.py (SaveSessionTest.testClassifiedLayer): New
7622 test for saving classified layers. Fixes RTbug #1902.
7623 (XMLWriterTest): New. Tests the XMLWriter class. Fixes RTbug #1851.
7624
7625 2003-06-12 Jan-Oliver Wagner <[email protected]>
7626
7627 Fix for http://intevation.de/rt/webrt?serial_num=1900.
7628
7629 * Thuban/UI/multiplechoicedialog.py: New. A multiple choice dialog.
7630
7631 * Thuban/UI/mainwindow.py: import wxMultipleChoiceDialog from
7632 multiplechoicedialog.py rather than from the wxPython library.
7633
7634 2003-06-11 Frank Koormann <[email protected]>
7635
7636 * Thuban/Lib/fileutil.py (get_application_dir): Minor stability
7637 update.
7638
7639 2003-06-11 Frank Koormann <[email protected]>
7640
7641 * Thuban/Lib/fileutil.py (get_application_dir): New function to
7642 determine the absolute .thuban/thuban directory under
7643 "posix" (os.expanduser) and "nt" (read AppData registry key).
7644
7645 * Thuban/Model/resource.py: Use get_application_dir
7646
7647 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
7648 Use get_application_dir.
7649
7650 2003-06-10 Bernhard Herzog <[email protected]>
7651
7652 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Subscribe to
7653 the messages MAP_LAYERS_REMOVED messages
7654 (LayerTableFrame.OnClose): Unsubscribe from it.
7655 (LayerTableFrame.map_layers_removed): New. Receiver for
7656 MAP_LAYERS_REMOVED. Close the dialog when the layer whose the
7657 dialog is showing is removed.
7658
7659 2003-06-10 Bernhard Herzog <[email protected]>
7660
7661 * Thuban/Lib/connector.py (Connector.Issue): Iterate over a copy
7662 of the receivers list so that unsubscribing in a receiver doesn't
7663 modify it while iterating over it.
7664
7665 * test/test_connector.py
7666 (ConnectorTest.test_disconnect_in_receiver): New. Test whether
7667 unsubscribing in a receiver works correctly. See docstring for
7668 details
7669
7670 2003-06-10 Bernhard Herzog <[email protected]>
7671
7672 * Thuban/Model/messages.py (LAYER_SHAPESTORE_REPLACED): New
7673 message.
7674
7675 * Thuban/Model/layer.py (Layer.SetShapeStore): Send
7676 LAYER_SHAPESTORE_REPLACED when the shapestore changes. A
7677 LAYER_CHANGED will still be sent if the classification changes.
7678
7679 * Thuban/UI/classifier.py (Classifier.__init__): Add the map as
7680 parameter so we can subscribe to some of its messages
7681 (Classifier.__init__): Subscribe to the map's MAP_LAYERS_REMOVED
7682 and the layer's LAYER_SHAPESTORE_REPLACED
7683 (Classifier.unsubscribe_messages): New. Unsubscribe from message
7684 subscribed to in __init__
7685 (Classifier.map_layers_removed)
7686 (Classifier.layer_shapestore_replaced): receivers for the messages
7687 subscribed to in __init__. Unsubscribe and close the dialog
7688
7689 * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): Pass
7690 the map to the Classifier dialog
7691
7692 * test/test_layer.py (SetShapeStoreTests): Derive from
7693 SubscriberMixin as well so we can test messages
7694 (SetShapeStoreTests.setUp): Subscribe to some of the layer's
7695 messages
7696 (SetShapeStoreTests.tearDown): Clear the messages again
7697 (SetShapeStoreTests.test_sanity): Expand the doc-string and check
7698 for the modified flag too
7699 (SetShapeStoreTests.test_set_shape_store_modified_flag): New test
7700 to check whether SetShapeStore sets the modified flag
7701 (SetShapeStoreTests.test_set_shape_store_different_field_name)
7702 (SetShapeStoreTests.test_set_shape_store_same_field)
7703 (SetShapeStoreTests.test_set_shape_store_same_field_different_type):
7704 Add tests for the messages. This checks both the new
7705 LAYER_SHAPESTORE_REPLACED and the older LAYER_CHANGED
7706
7707 2003-06-06 Jan-Oliver Wagner <[email protected]>
7708
7709 * Thuban/UI/mainwindow.py: Improved and partly added help texts for
7710 the menu items.
7711
7712 2003-06-05 Frank Koormann <[email protected]>
7713
7714 * Thuban/UI/identifyview.py (IdentifyView.__init__):
7715 Layout reimplemented without panel. Make life easier to fit the list
7716 in the dialog.
7717
7718 2003-06-05 Frank Koormann <[email protected]>
7719
7720 * Thuban/UI/projdialog.py (ProjFrame.__init__): Fill the projchoice
7721 once on initialisation (Former implementation resulted in multiple
7722 entries for each projection).
7723 (ProjFrame.__FillAvailList): selectProj as second optional parameter,
7724 if set, select the projection found under the specified name. This
7725 overwrites any other selection estimate.
7726 Removed projchoice filling from this method.
7727 (ProjFrame._OnSave, ProjFrame._OnAddToList):
7728 Updated call of ProjFrame.__FillAvailList
7729 (LCCPanel._DoLayout): Moved parameter controls in more common order.
7730
7731 * Resources/Projections/defaults.proj: Extended defaults representing
7732 various common European projections.
7733
7734 2003-06-05 Frank Koormann <[email protected]>
7735
7736 * Thuban/UI/identifyview.py (IdentifyView.__init__):
7737 Use ListCtrl instead of GridCtrl
7738
7739 * Thuban/Model/resource.py:
7740 Guess location of .thuban directory from tempdir parent directory.
7741
7742 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
7743 Guess location of .thuban directory from tempdir parent directory.
7744
7745 2003-06-04 Bernhard Herzog <[email protected]>
7746
7747 Do not cache the values returned by the tree widget's
7748 GetFirstChild and GetNextChild methods because it led to lots of
7749 segfaults. The new way requires more brute force but is more
7750 reliable.
7751
7752 * Thuban/UI/legend.py (LegendTree.__init__): Remove instance
7753 variable layer2id
7754 (LegendTree.find_layer): New method to do with brute force what
7755 layer2id tried to accomplish
7756 (LegendTree._OnMsgLayerChanged)
7757 (LegendTree._OnMsgLayerTitleChanged, LegendTree.__ShowHideLayer):
7758 Use find_layer instead of layer2id
7759 (LegendTree.__RemoveLayer, LegendTree.__AddLayer): No need to
7760 update layer2id anymore
7761 (LegendTree._OnMsgMapLayersRemoved)
7762 (LegendTree._OnMsgMapLayersAdded): Get by without layer2id.
7763
7764 2003-06-03 Thomas Koester <[email protected]>
7765
7766 * Thuban/Model/classgen.py (GenQuantiles0): New function.
7767
7768 2003-06-02 Bernhard Herzog <[email protected]>
7769
7770 * Thuban/UI/mainwindow.py (layer_rename command, table_rename command):
7771 New commands.
7772 (main_menu): Add the new commands.
7773 (MainWindow.TableRename): New. Implementation of the table_rename
7774 command.
7775 (MainWindow.RenameLayer): New. Implementation of the layer_rename
7776 command.
7777
7778 * Thuban/Model/session.py (Session.AddTable): call self.changed to
7779 set the modified flag
7780
7781 * test/test_session.py (TestSessionSimple.test_add_table): Test
7782 whether the modified flag is set properly
7783
7784 * Thuban/Model/base.py (TitledObject.SetTitle): Call changed
7785 instead of issue so that the modified flags get updated.
7786
7787 * test/test_base.py (SomeTitledObject): Derive from Modifiable
7788 instead of Publisher to reflect reality better and to accomodate
7789 the fact that SetTitle now calls changed instead of issue
7790
7791 2003-06-02 Bernhard Herzog <[email protected]>
7792
7793 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Resource
7794 acquisition has to happen before the try in a try-finally.
7795
7796 2003-06-02 Bernhard Herzog <[email protected]>
7797
7798 * Thuban/UI/legend.py (LegendTree._OnMsgMapLayersRemoved): It's
7799 possible that a layer is removed that is not currently selected in
7800 the legend so don't check for this.
7801
7802 2003-05-30 Bernhard Herzog <[email protected]>
7803
7804 * Thuban/Model/layer.py (Layer.Destroy): Set all instance
7805 variables to None that have direct or indirect references to
7806 shapefiles or dbf files to make sure that they do go away and the
7807 files are closed.
7808
7809 2003-05-30 Bernhard Herzog <[email protected]>
7810
7811 * Thuban/UI/legend.py (LegendTree.GetRootItem): Reset
7812 availImgListIndices when a new image list is created
7813
7814 2003-05-30 Bernhard Herzog <[email protected]>
7815
7816 * Thuban/UI/legend.py (LegendTree.__init__): New instance variable
7817 changing_selection to indicate whether the LegendTree code itself
7818 is currently changing the selection
7819 (LegendTree.normalize_selection): New method to normalize the
7820 selection by selecting the layer item even if the user clicked on
7821 the classification.
7822 (LegendTree._OnSelChanged): normalize the selection. This works
7823 around a bug in wx which doesn't keep track of the selection
7824 properly when subtrees are deleted.
7825
7826 2003-05-30 Bernhard Herzog <[email protected]>
7827
7828 * Thuban/UI/view.py (MapCanvas.set_view_transform): Limit the
7829 maximum and minimum scale factors.
7830
7831 * test/test_classgen.py (ClassGenTest.test): Update to reflect the
7832 changes in classgen.py
7833
7834 2003-05-30 Jonathan Coles <[email protected]>
7835
7836 * Thuban/Model/classgen.py: Remove ClassGenerator class but make
7837 all the methods functions. Fixes RTBug #1903.
7838
7839 * Thuban/Model/map.py (Map.TopLayer, Map.BottomLayer): Renamed
7840 to MoveLayerToTop and MoveLayerToBottom respectively. Fixes
7841 RTBug #1907.
7842
7843 * Thuban/UI/classgen.py: Use classgen functions that were part
7844 of the ClassGenerator class. Put try/finally blocks around
7845 code that uses wxBeginBusyCursor()/wxEndBusyCursor(). Fixes
7846 RTBug #1904.
7847
7848 * Thuban/UI/classifier.py: Remove unused import of ClassGenerator.
7849
7850 * Thuban/UI/legend.py: The legend was cleared and repopulated any
7851 time something changed which caused some state to be lost such
7852 as which children were expanded or collapsed. Fixes RTBug #1901.
7853 (LegendTree._OnMsgMapLayersAdded): Add only new layers.
7854 (LegendTree.__OnMsgMapLayersRemoved): Remove layers that exist in
7855 the legend but not in the map.
7856 (LegendTree.__FillTree): Move main functionality out into smaller
7857 methods that can be used by other methods.
7858 (LegendTree.__FillTreeLayer): Reuse old slots in the image list
7859 if they are available.
7860 (LegendTree.DeleteAllItems): Renamed from __DeleteAllItems so
7861 that we override the wxTreeCtrl method. Iterate over children
7862 and call __RemoveLayer.
7863 (LegendTree.__AddLayer): New. Add a new layer to the legend.
7864 (LegendTree.__RemoveLayer): Remove a layer from the legend.
7865 (LegendTree.DeleteChildren): New, overrides wxTreeCtrl method.
7866 Should only be called with the id of a layer branch.
7867 (LegendTree.GetRootItem): New, overrides wxTreeCtrl method.
7868 Returns the root item or creates one if necessary.
7869
7870 * Thuban/UI/renderer.py (MapRenderer.draw_raster_layer): Call
7871 ProjectRasterFile with tuple arguments instead of strings.
7872
7873 * Thuban/UI/tableview.py (QueryTableFrame.OnQuery): Wrap code
7874 with try/finally. Fixes RTBug #1904.
7875
7876 * Thuban/UI/view.py (MapCanvas.OnPaint): Wrap code
7877 with try/finally. Fixes RTBug #1904.
7878 (MapCanvas.FitSelectedToWindow): If a single point is selected
7879 simply center it on the display. Fixes RTBug #1849.
7880
7881 * extensions/thuban/gdalwarp.cpp: Removed code that allowed gdalwarp
7882 to be compiled as a standalone app. Now the code can only be
7883 called from Python which simplifies the parameter passing.
7884 (ProjectRasterFile): Handle Python arguments. Remove code that
7885 checks for a destination dataset. Add more clean up code.
7886
7887 * test/test_map.py (TestMapWithContents.test_raise_layer_top,
7888 TestMapWithContents.test_lower_layer_bottom):
7889 Test Map.MoveLayerToTop() and Map.MoveLayerToBottom() respectively.
7890 Fixes RTBug #1907.
7891
7892 * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Apply a full
7893 extent to the map when the legend is toggled. Fixes RTBug #1881.
7894
7895 2003-05-29 Jan-Oliver Wagner <[email protected]>
7896
7897 * Thuban/UI/tableview.py (LayerTableFrame.OnClose): Bug-fix: Now
7898 unsubscribes all that is subcribed in __init__.
7899
7900 2003-05-28 Bernhard Herzog <[email protected]>
7901
7902 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer)
7903 (MainWindow.CanDuplicateLayer): New methods to implement the
7904 Layer/Duplicate command.
7905 (layer_duplicate command): New.
7906 (main_menu): Add layer_duplicate to the Layer menu.
7907
7908 2003-05-28 Bernhard Herzog <[email protected]>
7909
7910 * Thuban/UI/tableview.py (NullRenderer.Draw): New. Our own
7911 renderer so that NULL/None values get displayed differently (by a
7912 gray rectangle).
7913 (TableGrid.__init__): Override the default renderers
7914
7915 2003-05-28 Bernhard Herzog <[email protected]>
7916
7917 * Thuban/Model/layer.py (Layer.SetShapeStore): Set the
7918 classification to "None" if the type of the field has changed.
7919
7920 * test/test_layer.py (SetShapeStoreTests): New. Class with a few
7921 test for the Layer.SetShapeStore method
7922
7923 2003-05-28 Jan-Oliver Wagner <[email protected]>
7924
7925 * Thuban/Model/layer.py (Layer.TreeInfo): Fixed a bug (a layer
7926 does not necessarily have a filename).
7927
7928 2003-05-28 Jan-Oliver Wagner <[email protected]>
7929
7930 * Thuban/UI/mainwindow.py (MainWindow.TableClose, MainWindow.TableShow):
7931 sort the selection list for the dialog.
7932
7933 2003-05-28 Frank Koormann <[email protected]>
7934
7935 * extensions/thuban/wxproj.cpp
7936 (project_point): Removed cast to int for projected point coordinates.
7937 (shape_centroid): Return last point if all polygon vertices fall
7938 to one point.
7939
7940 2003-05-28 Bernhard Herzog <[email protected]>
7941
7942 * Thuban/UI/mainwindow.py (_can_unjoin): Add doc-string and cope
7943 with layers that don't have shapestores, i.e. raster layers.
7944
7945 2003-05-28 Bernhard Herzog <[email protected]>
7946
7947 * Thuban/Model/table.py (DBFTable.__init__): Omit the extension
7948 when determining the title from the filename.
7949
7950 * test/test_dbf_table.py (TestDBFTable.test_title): Update to
7951 reflect changes in the way the title is derived from the filename
7952
7953 2003-05-28 Frank Koormann <[email protected]>
7954
7955 * Thuban/UI/mainwindow.py (MainWindow.TableShow):
7956 Added wxDEFAULT_DIALOG_STYLE to show table dialog styles.
7957
7958 2003-05-27 Bernhard Herzog <[email protected]>
7959
7960 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages): Also
7961 delegate SelectedLayer.
7962 (MainWindow.LayerUnjoinTable): Implement.
7963 (_can_unjoin): New. Helper function for the sensitivity of the
7964 layer/unjoin command.
7965
7966 * Thuban/Model/data.py (ShapefileStore.OrigShapeStore)
7967 (DerivedShapeStore.OrigShapeStore): New. Return the original
7968 shapestore. Used to figure out how to unjoin.
7969 (DerivedShapeStore.Shapefile): Fix a typo.
7970
7971 2003-05-27 Bernhard Herzog <[email protected]>
7972
7973 * Thuban/UI/join.py (JoinDialog): Extend to handle layer joins as
7974 well
7975 (JoinDialog.__init__): Use the layer parameter and only build the
7976 left choice when a layer is given
7977 (JoinDialog.OnJoin): Handle layer joins as well
7978 (JoinDialog.OnLeftTable, JoinDialog.OnRightTable): Handle the case
7979 that the user selects the "Select..." item. The sensitivitly
7980 updating is now in update_sensitivity
7981 (JoinDialog.y): New method to refactor the sensitivity update of
7982 the join button into its own method.
7983
7984 * Thuban/UI/mainwindow.py (MainWindow.LayerJoinTable): Implement.
7985
7986 2003-05-27 Bernhard Herzog <[email protected]>
7987
7988 * Thuban/UI/mainwindow.py (table_close command): Make it sensitive
7989 iff there are unreferenced tables in the session
7990
7991 2003-05-27 Bernhard Herzog <[email protected]>
7992
7993 * Thuban/Model/messages.py (TABLE_REMOVED): New message.
7994
7995 * Thuban/Model/session.py (Session.UnreferencedTables): New method
7996 to return tables that are not referenced by other tables or shape
7997 stores and can be removed.
7998 (Session.RemoveTable): Issue a TABLE_REMOVED message after
7999 removing the table
8000
8001 * Thuban/UI/mainwindow.py: Remove unused imports
8002 (MainWindow.TableClose): Implement.
8003
8004 * Thuban/UI/tableview.py (TableFrame.__init__): Subscribe to some
8005 messages so that the frame will be automatically closed when a new
8006 session is opened or the table is removed.
8007 (TableFrame.OnClose): Unsubscribe the Subscriptions made in
8008 __init__
8009 (TableFrame.close_on_session_replaced)
8010 (TableFrame.close_on_table_removed): New. Subscribers that close
8011 the window
8012
8013 * test/test_session.py (TestSessionMessages.test_remove_table)
8014 (TestSessionSimple.test_remove_table): Move the test to
8015 TestSessionSimple and add test for the TABLE_REMOVED message
8016 (TestSessionBase.setUp): Also subscribe to TABLE_REMOVED
8017 (TestSessionSimple.test_unreferenced_tables) New. Test for the
8018 UnreferencedTables method.
8019 (UnreferencedTablesTests): New. Class with some more sophisticated
8020 tests for UnreferencedTables.
8021
8022 2003-05-27 Frank Koormann <[email protected]>
8023
8024 * Thuban/UI/tableview.py (QueryTableFrame.__init__): The "_S_election"
8025 display has some unwanted side effects. Removed again.
8026
8027 2003-05-27 Frank Koormann <[email protected]>
8028
8029 * Resources/Bitmaps/legend_icon_layer.xpm: New, icon for legend.
8030
8031 * Thuban/UI/legend.py (LegendTree.__FillTree): Use "legend_icon_layer"
8032
8033 2003-05-27 Jan-Oliver Wagner <[email protected]>
8034
8035 * test/test_menu.py (MenuTest.test): Added test for
8036 Menu.RemoveItem().
8037
8038 * Thuban/UI/menu.py (Menu.RemoveItem): New. Remove an item from
8039 the menu.
8040
8041 2003-05-27 Frank Koormann <[email protected]>
8042
8043 Nonmodal dialogs without parent (i.e. they can fall behind the main
8044 window)
8045
8046 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Explicitly destroy
8047 all dialogs in the dialogs dictionary and the canvas.
8048
8049 * Thuban/UI/dialogs.py (NonModalNonParentDialog): New class, without
8050 parent, i.e. can fall behind other windows.
8051 (NonModalDialog.OnClose): Check is dialog is in mainwindow.dialog
8052 dictionary before removing it.
8053
8054 * Thuban/UI/classifier.py: Dialog derived from NonModalNonParentDialog
8055
8056 * Thuban/UI/projdialog.py: Dialog derived from NonModalNonParentDialog
8057 * Thuban/UI/tableview.py: Dialog derived from NonModalNonParentDialog
8058 * Thuban/UI/tree.py: Dialog derived from NonModalNonParentDialog
8059
8060 2003-05-27 Bernhard Herzog <[email protected]>
8061
8062 * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): New. Open a
8063 tableview dialog
8064 (MainWindow.TableShow): Use ShowTableView to open the dialogs.
8065 Also, don't use the table's titles as the dialog names. The titles
8066 aren't guaranteed to be unique.
8067 (MainWindow.TableOpen): Open a table view dialog after opening the
8068 table
8069
8070 2003-05-27 Bernhard Herzog <[email protected]>
8071
8072 * Thuban/UI/mainwindow.py: Remove the Table/Hide menu item. Its
8073 effect can be achieved by simply closing the window showing the
8074 table.
8075 (MainWindow.TableHide): Removed.
8076 (main_menu): Removed "table_hide"
8077
8078 2003-05-27 Frank Koormann <[email protected]>
8079
8080 Fix legend tree display problems under Win32
8081
8082 * Thuban/UI/legend.py: BMP_SIZE_W = 15
8083 (LegendTree.__FillTree): Display "legend_icon_map.xpm" with layer title.
8084 (LegendTree.__FillTreeLayer): Explicitely set SelectedImage.
8085
8086 * Resources/Bitmaps/legend_icon_map.xpm: New icon for legend.
8087
8088 2003-05-27 Jan-Oliver Wagner <[email protected]>
8089
8090 * Thuban/UI/menu.py (Menu.InsertSeparator): Additional optional parameter
8091 'after' now allows to insert separators almost anywhere in the menu.
8092
8093 2003-05-27 Frank Koormann <[email protected]>
8094
8095 * Thuban/UI/tableview.py (QueryTableFrame.__init__): Underline the
8096 "S" of selection box label to hint on hot key (Alt-S). Works under
8097 Win32 but is ignored under GTK.
8098
8099 2003-05-26 Frank Koormann <[email protected]>
8100
8101 * Thuban/UI/projdialog.py (ProjFrame.__do_layout, ProjPanel._DoLayout):
8102 Center Choices.
8103
8104 2003-05-26 Bernhard Herzog <[email protected]>
8105
8106 Remove the Precision methods again. They're too DBF specific to be
8107 part of the table interface and they're only used in table_to_dbf
8108 anyway.
8109
8110 * Thuban/Model/transientdb.py (TransientTableBase.Width):Use a
8111 fixed precision of 12 for doubles.
8112 (TransientTableBase.Precision): Removed
8113 (AutoTransientTable.Width): Delegate to self.table.
8114
8115 * Thuban/Model/table.py (DBFTable.Precision)
8116 (MemoryTable.Precision): Removed.
8117 (MemoryTable.Width): Use a fixed precision of 12 for doubles.
8118 (table_to_dbf): Use a fixed precision of 12 for floats unless the
8119 column object specifies something else.
8120
8121 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): New.
8122 test for table_to_dbf
8123
8124 2003-05-26 Bernhard Herzog <[email protected]>
8125
8126 * test/test_transientdb.py
8127 (TestTransientTable.run_iceland_political_tests): Fix a comment.
8128
8129 2003-05-26 Bernhard Herzog <[email protected]>
8130
8131 * Thuban/UI/mainwindow.py (MainWindow.TableOpen): Real
8132 implementation. Mark parts of the file format strings for
8133 localization.
8134
8135 * Thuban/Model/session.py (Session.OpenTableFile): New. Open a dbf
8136 file and add the table to the tables managed by the session
8137
8138 * test/test_session.py (TestSessionSimple.test_open_table_file):
8139 New. test case for OpenTableFile
8140
8141 2003-05-26 Jan-Oliver Wagner <[email protected]>
8142
8143 * Thuban/UI/controls.py, Thuban/UI/identifyview.py, Thuban/UI/join.py,
8144 Thuban/UI/labeldialog.py, Thuban/UI/mainwindow.py,
8145 Thuban/UI/proj4dialog.py, Thuban/UI/tableview.py, Thuban/UI/view.py:
8146 Replace the true/false of wxWindows by True/False of Python 2.2.1.
8147
8148 2003-05-26 Jan-Oliver Wagner <[email protected]>
8149
8150 * Thuban/UI/tableview.py (LayerTableFrame.__init__): If there is
8151 already a selection present, update the grid accordingly.
8152
8153 * Thuban/UI/mainwindow.py (MainWindow.TableShow): Make the dialog
8154 resizeable and increase its initial size.
8155
8156 2003-05-26 Frank Koormann <[email protected]>
8157
8158 Table export functionality
8159
8160 * Thuban/Model/table.py (DBFTable.Width, MemoryTable.Width):
8161 Return width (in characters) for a column.
8162 (DBFTable.Precision, MemoryTable.Precision): Return decimal precision.
8163 (table_to_dbf): Write table to dbf file.
8164 (table_to_csv): Write table to csv file.
8165
8166 * Thuban/Model/transientdb.py (TransientTableBase.Width,
8167 TransientTableBase.Precision): Return column width and precision.
8168
8169 * Thuban/UI/tableview.py (QueryTableFrame.OnSaveAs): Call table_to_dbf
8170 or table_to_csv depending on file selection.
8171
8172 * test/test_dbf_table.py:
8173 Test table_to_dbf (extension of former part of test).
8174
8175 * test/test_csv_table.py:
8176 Test table_to_csv.
8177
8178 2003-05-23 Jan-Oliver Wagner <[email protected]>
8179
8180 * Thuban/UI/join.py (JoinDialog.OnJoin): Use _() for strings.
8181 Use QueryTableFrame instead of TableFrame.
8182
8183 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Prefix the
8184 table window with 'Layer Table:' instead of 'Table:'.
8185
8186 2003-05-23 Jan-Oliver Wagner <[email protected]>
8187
8188 Give all tables a title via mix-in TitledObject.LayerShowTable
8189
8190 * Thuban/Model/base.py (TitledObject.SetTitle): Call method 'issue'
8191 only if it exists.
8192
8193 * Thuban/Model/table.py (DBFTable, MemoryTable): mix-in TitledObject
8194 and call its init-method with a default title. Remove Title() method.
8195
8196 * Thuban/Model/transientdb.py (TransientTable, TransientJoinedTable,
8197 AutoTransientTable): mix-in TitledObject and call its init-method with
8198 a default title. Remove Title() method.
8199
8200 2003-05-23 Bernhard Herzog <[email protected]>
8201
8202 * Thuban/Model/session.py (Session.AddShapeStore): Define
8203 AddShapeStore analogously to AddTable.
8204
8205 * test/test_session.py (TestSessionSimple.test_add_shapestore):
8206 New. Test for AddShapeStore
8207
8208 2003-05-23 Jan-Oliver Wagner <[email protected]>
8209
8210 Introducing QueryTableFrame and a very coarse ShowTable implementation.
8211
8212 * Thuban/UI/tableview.py (LayerTableFrame, QueryTableFrame): Split the
8213 class LayerTableFrame into two classes, LayerTableFrame and QueryTableFrame.
8214 The latter implements the selection GUI without dependency on a layer.
8215 LayerTableFrame now is derived from QueryTableFrame and connects
8216 to a layer.
8217
8218 * Thuban/UI/mainwindow.py (MainWindow.TableShow): A very coarse
8219 implementation that still needs work.
8220
8221 * Thuban/Model/layer.py (Layer.TreeInfo): Added filename.
8222
8223 2003-05-22 Frank Koormann <[email protected]>
8224
8225 * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
8226 Added "outer_join = False" as optional parameter.
8227 (TransientJoinedTable.create): If outer join is true, perform a
8228 "LEFT OUTER JOIN" instead of "JOIN", which preserves all records of
8229 the left table. Records not matching are filled with 0 / None.
8230
8231 * Thuban/UI/join.py (JoinDialog.__init__): Checkbox for outer join.
8232 (JoinDialog.OnJoin): Consider outer join check box.
8233
8234 2003-05-22 Bernhard Herzog <[email protected]>
8235
8236 * Thuban/UI/join.py (JoinDialog.OnJoin): Use exc_info in a
8237 somewhat safer way. Storing the traceback in a local variable can
8238 lead to memory leaks
8239
8240 2003-05-22 Bernhard Herzog <[email protected]>
8241
8242 * Thuban/UI/join.py (JoinDialog.OnJoin): Make sure to really call
8243 the wxMessageDialog's Destroy() method.
8244
8245 2003-05-22 Frank Koormann <[email protected]>
8246
8247 * Thuban/UI/join.py (JoinDialog.__init__): Make use of
8248 TransientTable.Title()
8249
8250 2003-05-22 Frank Koormann <[email protected]>
8251
8252 Join Dialog, initial version.
8253
8254 * Thuban/UI/mainwindow.py (MainWindow.TableJoin): Removed print.
8255
8256 * Thuban/UI/join.py (JoinDialog): Functional implementation of
8257 former framework. Renamed Table1/Table2 to LeftTable/RightTable
8258 in all occurences.
8259
8260 * Thuban/Model/transientdb.py (TransientJoinedTable.__doc__):
8261 Typo fixed.
8262
8263 2003-05-22 Bernhard Herzog <[email protected]>
8264
8265 Give the tables titles so that the GUI can display more meaningful
8266 names. For now the titles are fixed but depend on e.g. filenames
8267 or the titles of the joined tables.
8268
8269 * Thuban/Model/transientdb.py (TransientTable.Title)
8270 (TransientJoinedTable.Title, AutoTransientTable.Title): New.
8271
8272 * Thuban/Model/table.py (DBFTable.Title, MemoryTable.Title): New.
8273
8274 * test/test_transientdb.py
8275 (TestTransientTable.test_auto_transient_table_title): New. Test
8276 for the Title method
8277 (TestTransientTable.test_transient_joined_table)
8278 (TestTransientTable.test_transient_table): Add test for the Title
8279 methods
8280
8281 * test/test_memory_table.py (TestMemoryTable.test_title): New.
8282 Test for the Title method
8283
8284 * test/test_dbf_table.py (TestDBFTable.test_title): New. Test for
8285 the Title method
8286
8287 2003-05-22 Bernhard Herzog <[email protected]>
8288
8289 * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
8290 Provide a better way to destroy the layers
8291 (TestLayer.test_base_layer, TestLayer.test_arc_layer)
8292 (TestLayer.test_point_layer, TestLayer.test_empty_layer)
8293 (TestLayer.test_polygon_layer, TestLayer.test_get_field_type): Use
8294 the new way to destroy the layers.
8295 (TestLayer.test_derived_store): New. Test for using a layer with a
8296 DerivedShapeStore
8297
8298 * Thuban/Model/layer.py (Layer.SetShapeStore): Only set the
8299 filename if the shape store actually has one.
8300
8301 2003-05-22 Bernhard Herzog <[email protected]>
8302
8303 * Thuban/Model/table.py (DBFTable.FileName): New. Accessor method
8304 for the filename
8305
8306 * test/test_dbf_table.py (TestDBFTable.test_filename): New. Test
8307 for the FileName method
8308 (TestDBFTableWriting.test_write): Fix spelling of filename
8309
8310 2003-05-22 Thomas Koester <[email protected]>
8311
8312 * Thuban/Model/range.py, test/test_range.py: Brought over new Range
8313 from SciParam that now really is immutable.
8314
8315 2003-05-22 Frank Koormann <[email protected]>
8316
8317 Layer Top/Bottom placement added to legend.
8318
8319 * Thuban/UI/legend.py
8320 (LegendPanel._OnMoveTop(), LayerPanel._OnMoveBottom): New, methods
8321 bound to tool events.
8322 (LegendTree.MoveCurrentItemTop(), LegendTree.MoveCurrentItemBottom):
8323 New, methods binding the event methods with the map methods.
8324
8325 * Thuban/Model/map.py (Map.TopLayer(), Map.BottomLayer()): New, place
8326 layer at top/bottom of layer stack.
8327
8328 * Resources/Bitmaps/top_layer.xpm: New button icon.
8329
8330 * Resources/Bitmaps/bottom_layer.xpm: New button icon.
8331
8332 2003-05-22 Bernhard Herzog <[email protected]>
8333
8334 * Thuban/Model/session.py (Session.RemoveTable): New method to
8335 remove tables
8336
8337 * test/test_session.py (TestSessionSimple.test_remove_table): New.
8338 Test for RemoveTable
8339
8340 2003-05-22 Thomas Koester <[email protected]>
8341
8342 * Thuban/Model/classgen.py: Added short module doc string and CVS id.
8343 (ClassGenerator.GenUniformDistribution): Use new Range __init__, too.
8344
8345 2003-05-22 Bernhard Herzog <[email protected]>
8346
8347 Implement a way to discover dependencies between tables and
8348 shapestores.
8349
8350 * Thuban/Model/transientdb.py (TransientTableBase.Dependencies)
8351 (TransientJoinedTable.Dependencies)
8352 (AutoTransientTable.SimpleQuery): New. Implement the dependencies
8353 interface
8354 (TransientJoinedTable.__init__): Keep tack of the original table
8355 objects in addition to the corresponding transient tables.
8356
8357 * Thuban/Model/table.py (DBFTable.Dependencies)
8358 (MemoryTable.Dependencies): New. Implement the dependencies
8359 interface
8360
8361 * Thuban/Model/data.py (ShapeTable): New. Helper class for
8362 ShapefileStore
8363 (ShapefileStore.__init__): Use ShapeTable instead of
8364 AutoTransientTable
8365 (ShapefileStore.Table, ShapefileStore.Shapefile): Add doc-strings
8366 (ShapefileStore.FileName, ShapefileStore.FileType): New. Accessor
8367 methods for filename and type
8368 (ShapefileStore.Dependencies): New. Implement the dependencies
8369 interface
8370 (DerivedShapeStore): New class to replace SimpleStore. The main
8371 difference to SimpleStore is that it depends not on a shapefile
8372 but another shapestore which expresses the dependencies a bit
8373 better
8374 (SimpleStore.__init__): Add deprecation warning.
8375
8376 * test/test_dbf_table.py (TestDBFTable.test_dependencies): New.
8377 Test for the Dependencies method.
8378
8379 * test/test_memory_table.py (TestMemoryTable.test_dependencies):
8380 New. Test for the Dependencies method.
8381
8382 * test/test_transientdb.py
8383 (TestTransientTable.test_auto_transient_table_dependencies): New.
8384 Test for the Dependencies method.
8385 (TestTransientTable.test_transient_joined_table): Add test for the
8386 Dependencies method.
8387
8388 * test/test_session.py (TestSessionSimple.setUp)
8389 (TestSessionSimple.tearDown): New. Implement a better way to
8390 destroy the sessions.
8391 (TestSessionSimple.test_initial_state)
8392 (TestSessionSimple.test_add_table): Bind session to self.session
8393 so that it's destroyed by tearDown
8394 (TestSessionSimple.test_open_shapefile): New. Test for
8395 OpenShapefile and the object it returns
8396
8397 2003-05-22 Bernhard Herzog <[email protected]>
8398
8399 * Thuban/Model/session.py (Session.AddTable): New method to
8400 register tables with the session.
8401 (Session.Tables): Return the tables registered with AddTable too.
8402
8403 * test/test_session.py (TestSessionSimple.test_add_table): New.
8404 Test case for the AddTable method
8405
8406 2003-05-22 Frank Koormann <[email protected]>
8407
8408 UI polishing updates: Place main buttons (OK, Cancel, etc) in the
8409 lower right corner, center labels for selections, initialize controls
8410 in reasonable order for keyboard navigation.
8411
8412 * Thuban/UI/projdialog.py (ProjFrame.__init__, ProjFrame.__doLayout)
8413 (ProjFrame.__DoOnProjAvail): Determine position of current projection
8414 using the wxListBox.FindString() method. Still a problem (#1886)
8415
8416 * Thuban/UI/classifier.py
8417 (Classifier.__init__, SelectPropertiesDialog.__init__)
8418
8419 * Thuban/UI/classgen.py (ClassGenDialog.__init__,
8420 (ClassGenDialog.__DoOnGenTypeSelect): Moved initialization of the
8421 different classification types from here to __init__.
8422 (GenUniquePanel.__init__): Set the column width of the first field
8423 in the Field ListCtrl to the full width.
8424
8425 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Rename 'Save As'
8426 Button to 'Export'. Center Buttons in Selection Box, set Focus to
8427 Grid.
8428 (LayerTableFrame.OnKeyDown()): New, bound to the grid with EVT_KEY_DOWN,
8429 changes focus to the Selection when pressing "Alt-S".
8430
8431 * Thuban/UI/legend.py (LegendTree.__SetVisibilityStyle): Only gray out
8432 the text if not visible. The italic font sometimes exceeds the
8433 rendering area.
8434
8435 2003-05-21 Jonathan Coles <[email protected]>
8436
8437 * Thuban/UI/dock.py (DockFrame): Rename references to _OnClose
8438 to OnClose so that Thuban closes correctly.
8439
8440 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Call
8441 DockFrame.OnClose, not DockFrame._OnClose.
8442
8443 2003-05-21 Jonathan Coles <[email protected]>
8444
8445 * Thuban/Model/classgen.py (ClassGenerator.GenQuantiles): Remove
8446 references to 'inf' and use new Range __init__ to pass floats
8447 directly rather than converting them to strings first.
8448 Fixes RTBug #1876.
8449
8450 * Thuban/Model/classification.py (ClassGroupRange.SetRange):
8451 Use new Range ___init__ to pass floats.
8452
8453 * Thuban/Model/layer.py (RasterLayer.__init__): Test if the
8454 filename is a valid image file. Throw IOError otherwise.
8455
8456 * Thuban/Model/range.py: Brought over new Range from SciParam that
8457 is immutable and has an __init__ which can accept floats.
8458
8459 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Move OpenShapefile
8460 into try block. AddLayer doesn't throw any exceptions anymore.
8461 (MainWindow.AddRasterLayer): Move constructor of RasterLayer into
8462 try block.
8463
8464 * Thuban/UI/projdialog.py (GeoPanel.__init__): Put Degrees as
8465 the first item in choices. Fixes RTBug #1882.
8466
8467 * Thuban/UI/renderer.py (MapRenderer.render_map): Check if scale
8468 has gone to 0 which is a serious problem. abort.
8469 (MapRenderer.draw_raster_layer): Catch IOError seperately and
8470 print the error from GDAL.
8471
8472 * Thuban/UI/tableview.py (TableGrid.__init__): Call
8473 ToggleEventListeners to turn on listening.
8474 (TableGrid.ToggleEventListeners): New. Turns event listening on
8475 and off so as to prevent excessive messages.
8476 (LayerTableFrame.OnQuery): Use TableGrid.ToggleEventListeners
8477 to suppress excessive messages when selecting many rows.
8478 Fixes RTBug #1880.
8479
8480 * Thuban/UI/view.py: Added checks against if scale == 0. This
8481 is a serious problem that can occur when an image without
8482 geo data is loading and causes the map projection bounds to
8483 go to infinity. Right now, the solution is to simply try
8484 to recover.
8485
8486 * extensions/thuban/cpl_mfile.cpp (MFILEClose): Make sure
8487 to set the MFILEReceiver attributes even if the data is NULL.
8488
8489 * extensions/thuban/gdalwarp.cpp: Improved the error handling
8490 and passed GDAL messages back up to the Python layer. Also
8491 tried to fix some memory leaks that were present in the original
8492 utility but didn't matter because the program aborted.
8493
8494 * test/test_range.py: Copied over tests from SciParam. Removed
8495 tests against importing. Fixes RTBug #1867.
8496
8497 2003-05-21 Bernhard Herzog <[email protected]>
8498
8499 * test/test_load.py: Remove unused imports and restructure the
8500 test code
8501 (LoadSessionTest): Split into one class for each test and turn
8502 LoadSessionTest itself into the base class for all such session
8503 tests.
8504 (ClassificationTest): New base class for load tests that test
8505 classifications
8506 (TestSingleLayer, TestLayerVisibility, TestClassification)
8507 (TestLabels, TestLayerProjection, TestRasterLayer): New classes
8508 for the individual tests
8509
8510 * test/support.py (FileLoadTestCase.filename): New base class for
8511 file loading tests
8512
8513 2003-05-21 Jan-Oliver Wagner <[email protected]>
8514
8515 * Resources/Projections/defaults.proj: Renamed 'Universal Transverse
8516 Mercator' to 'UTM Zone 32' as a more convenient example.
8517 Added 'Gauss Krueger Zone 6'.
8518
8519 * Data/iceland_sample_raster.thuban: political polygon now
8520 filled transparent to have the raster image visible at once.
8521
8522 2003-05-21 Frank Koormann <[email protected]>
8523
8524 * Thuban/UI/mainwindow.py (MainWindow): Renamed _OnClose() back to
8525 OnClose() to keep in sync with extensions. Internally Thuban
8526 still uses "underscored" names.
8527
8528 2003-05-20 Jonathan Coles <[email protected]>
8529
8530 This puts back Raster layer support. These layers support projections
8531 through the GDAL library. Currently, the CVS version is being used.
8532 There are no Debian packages available although this may change soon.
8533 A GDAL driver was extended to support writing to memory rather to
8534 files.
8535
8536 There is still some work that needs to be done, such as some error
8537 handling when loading invalid images or when there is a problem
8538 projecting the image. This putback simply checks in the majority
8539 of the work.
8540
8541 * setup.py: Add gdalwarp library extension.
8542
8543 * Thuban/Model/layer.py (BaseLayer.HasClassification): New.
8544 Defaults to False, but can be overridden by subclasses if they
8545 support classification.
8546 (RasterLayer): New. Defines a new layer that represents an
8547 image.
8548
8549 * Thuban/Model/load.py (SessionLoader.__init__): Add rasterlayer
8550 tag handler.
8551 (SessionLoader.start_layer): Encode the filename.
8552 (SessionLoader.start_rasterlayer, SessionLoader.end_rasterlayer):
8553 New. Supports reading a rasterlayer tag.
8554
8555 * Thuban/Model/map.py (Map.BoundingBox): Fix typo in comment.
8556
8557 * Thuban/Model/save.py (XMLWriter.encode): Don't assume that we
8558 get a string in Latin1. If we get such as string convert it to
8559 unicode first, otherwise leave if alone before encoding.
8560 (SessionSaver.write_layer): Add support for writing both Layers
8561 and RasterLayers.
8562
8563 * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
8564 The right argument may not be a string, it could also be a Column.
8565
8566 * Thuban/UI/application.py (ThubanApplication.CreateMainWindow):
8567 Make initial window size 600x400. Fixes RTBug #1872.
8568
8569 * Thuban/UI/classifier.py (Classifier.__init__): Rearrange how
8570 the dialog is constructed so that we can support layers that
8571 do not have classifications.
8572 (Classifier._OnTry): Only build a classification if the layer
8573 supports one.
8574
8575 * Thuban/UI/legend.py: Change all checks that a layer is an
8576 instance of Layer into checks against BaseLayer.
8577 (LegendTree.__FillTreeLayer): Only add children to a branch if
8578 the layer supports classification.
8579
8580 * Thuban/UI/mainwindow.py (MainWindow.NewSession,
8581 MainWindow.OpenSession): Don't proceed with an action if the
8582 user chooses Cancel when they are asked to save changes.
8583 (MainWindow.AddRasterLayer): New. Open a dialog to allow the
8584 user to select an image file. Create a new RasterLayer and add
8585 it to the map.
8586
8587 * Thuban/UI/renderer.py (MapRenderer.render_map): Add support
8588 for rendering RasterLayer layers.
8589 (MapRenderer.draw_raster_layer): Actually method that calls
8590 the GDALWarp python wrapper and constructs an image from the
8591 data returned.
8592
8593 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Change the
8594 Choices symbols to match those used in the table query method.
8595 Replace deprecated method calls on table with new method names.
8596
8597 * Thuban/UI/view.py (MapCanvas.set_view_transform): Try to limit
8598 how small the scale can get. This still needs more testing.
8599
8600 * extensions/thuban/bmpdataset.cpp: New, but copied from GDAL.
8601 Provides a driver to output in .bmp format.
8602
8603 * extensions/thuban/cpl_mfile.cpp, extensions/thuban/cpl_mfile.h:
8604 New. Provides IO routines which write to memory, rather than a file.
8605
8606 * extensions/thuban/gdalwarp.cpp: New, but basically a direct copy
8607 of the gdalwarp utility provided in GDAL. Added function calls
8608 that can be accessed from python.
8609
8610 * Data/iceland_sample_raster.thuban: New. Sample file that uses
8611 a raster layer.
8612
8613 * Data/iceland/island.tfw, Data/iceland/island.tif: New. Raster
8614 layer image data.
8615
8616 * Doc/thuban.dtd: Added rasterlayer attribute definition.
8617
8618 * test/test_layer.py, test/test_load.py, test/test_save.py: Added
8619 tests associated with the raster layer code.
8620
8621 * test/test_transientdb.py
8622 (TestTransientTable.test_auto_transient_table_query): Added a test
8623 for using a Column object as the "right" parameter to a query.
8624
8625 2003-05-19 Frank Koormann <[email protected]>
8626
8627 * Thuban/version.py (get_changelog_date):
8628 Catch exceptions if ChangeLog does not exist.
8629
8630 * Thuban/UI/view.py (MapCanvas.Export): Bugfix
8631
8632 2003-05-19 Frank Koormann <[email protected]>
8633
8634 Extended version information for Thuban
8635
8636 * Thuban/version.py: New, version information for Thuban: Last
8637 modification date and last ChangeLog entry date.
8638
8639 * Thuban/UI/mainwindow.py (MainWindow.About()): Extended version
8640 information: Display Thuban, wxPython and Python version.
8641
8642 2003-05-16 Bernhard Herzog <[email protected]>
8643
8644 * Thuban/Model/save.py: Remove some unused imports including the
8645 __future__ import for nested_scopes as Thuban relies on Python 2.2
8646 now.
8647 (XMLWriter.encode): Remove the special case for a None argument.
8648 In the saver encode is always called with a string argument.
8649
8650 2003-05-16 Bernhard Herzog <[email protected]>
8651
8652 * Thuban/UI/__init__.py: Remove the work-around for the locale bug
8653 in wxPython (at least when usinvg wxGTK) prior to 2.4. The symptom
8654 of the bug was that e.g. float("1.2") would fail. Thuban now
8655 requires 2.4.x.
8656
8657 2003-05-16 Frank Koormann <[email protected]>
8658
8659 Printing enhancement and WMF export (under Win32)
8660
8661 * Thuban/UI/renderer.py (ExportRenderer): New, derived from
8662 ScreenRenderer. Renders Map, Legend and Scalebar for export.
8663 (PrinterRenderer): New, derived from ExportRenderer. Replaces the old
8664 PrintRender.
8665
8666 * Thuban/UI/view.py (MapPrintout.__init__): Enhanced parameter set
8667 to fullfil information needed for PrinterRenderer.
8668 (MapCanvas.Export): New. Export Map (currently only to WMF on Win32).
8669 (MapCanvas.Print): Adapted to new MapPrintout.
8670 (OutputTransform): General calculations to transform from canvas
8671 coordinates to export/printing devices.
8672
8673 * Thuban/UI/mainwindow.py (MainWindow.ExportMap()): New. Added also
8674 new method_command to call ExportMap, with platform dependency (only
8675 __WXMSW__)
8676
8677 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Position and Size
8678 of scalebar drawing area as new parameters.
8679
8680 * Thuban/Model/scalebar.py (roundInterval): round long instead of int
8681
8682 * Thuban/UI/legend.py (ScalebarBitmap.__SetScale):
8683 Update to extended scalebar.DrawScalebar header.
8684
8685 * test/test_export.py: New, test Thuban.UI.view.OutputTransform()
8686
8687 * test/test_scalebar.py: Made test executable as standalone.
8688
8689 2003-05-16 Bernhard Herzog <[email protected]>
8690
8691 * Thuban/Model/table.py (Table): Remove this compatibility alias
8692 for DBFTable.
8693
8694 * test/test_table.py: Import DBFTable as Table because that alias
8695 doesn't exist anymore.
8696
8697 * Thuban/UI/classgen.py: Remove some unused imports
8698
8699 2003-05-14 Jonathan Coles <[email protected]>
8700
8701 * Thuban/Model/classgen.py (ClassGenerator.GenSingletonsFromList):
8702 Fix docstring.
8703 (ClassGenerator.GenUniformDistribution): Fix spelling of method name.
8704 (ClassGenerator.GenQuantiles): Use the left/right brackets and min/max
8705 values of the supplied range to determine the beginning and end
8706 bounds of the generated classes.
8707
8708 * Thuban/Model/range.py (Range.number_re): Now accepts floats that
8709 do not have a leading 0 (.5 is now accepted as well as 0.5).
8710
8711 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Fix name of method
8712 call to ClassGenerator.GenUniformDistribution.
8713
8714 * Thuban/UI/projdialog.py (ProjFrame.__do_layout): Fix Windows
8715 layout bug with the 'Projection' label.
8716
8717 * test/support.py (FloatTestCase): New. Needed for the Range tests.
8718
8719 * test/test_range.py: New. Imported from SciParam.
8720
8721 2003-05-12 Jonathan Coles <[email protected]>
8722
8723 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Replace call
8724 to table.UniqueValues() with calls that retrieve all the values
8725 from the table. This will need to be replaced by a method on table
8726 which can simply return the list (perhaps more efficiently).
8727
8728 2003-05-12 Jonathan Coles <[email protected]>
8729
8730 The return value of ClassGenerator.CalculateQuantiles has changed.
8731 Refer to the documentation for details.
8732
8733 * test/test_classgen.py: Modified Quantile tests to use the
8734 new return values.
8735
8736 * Thuban/Model/classgen.py
8737 (ClassGenerator.GenQuantiles): Add comments describing the parameters,
8738 use new return values from CalculateQuantiles to produce the correct
8739 range bounds in the Classification.
8740 (ClassGenerator.CalculateQuantiles): Add more comments describing
8741 the return values and parameters. Make minor adjustments to improve
8742 the legibility of the code. Fix problem with adjusted not being set
8743 in most cases.
8744
8745 2003-05-12 Frank Koormann <[email protected]>
8746
8747 * Thuban/Model/save.py (XMLWriter.encode()): Explicite call to unicode
8748 and latin1. Fixes #1851 finally.
8749
8750 2003-05-09 Jonathan Coles <[email protected]>
8751
8752 * test/test_classgen.py: New. Tests the Quantile algorithm.
8753
8754 * Thuban/Model/classgen.py (ClassGenerator.CalculateQuantiles):
8755 Clean up debugging statement, add comments, fix a small bug in the
8756 returned adjusted percentiles.
8757
8758 2003-05-09 Jonathan Coles <[email protected]>
8759
8760 Introduces Range class from SciParam into the ClassGroupRange class,
8761 and such ranges can now be saved and loaded from disk.
8762
8763 Quantiles are now available in the Classification Generator.
8764
8765 Initial support for building Queries on a table. Doesn't do anything
8766 but run some tests.
8767
8768 * Thuban/Model/classification.py: Explicit imports.
8769 (ClassGroupRange): Use the Range class to store the underlying
8770 range information. The interface remains the same, except for
8771 GetRange(), and you can also supply a Range object as the min
8772 parameter to SetRange or __init__.
8773
8774 * Thuban/Model/load.py (XMLReader.encode): New. Encodes the given
8775 string appropriately for use in Thuban. Fixes RTbug #1851.
8776 (SessionLoader.end_projection): Handle the context of the
8777 projection tag a bit better by looking at what objects are not
8778 None. There was an assumption that a projection tag for a map
8779 could occur before any layers.
8780 (SessionLoader.start_clrange): Provide backward compatibility for
8781 reading min/max values as well as the new range parameter.
8782
8783 * Thuban/Model/map.py: Explicit imports.
8784
8785 * Thuban/Model/resource.py: Import _.
8786 (ProjFileSaver.write): write header using projfile.dtd.
8787
8788 * Thuban/Model/save.py: Explicit imports.
8789 (XMLWriter.encode): New. Encode the given string from a format
8790 used by Thuban into UTF-8. Fixes RTbug #1851.
8791
8792 * Thuban/UI/classgen.py: Explicit imports.
8793 (ClassGenDialog.__init__): Clean up the code and add support
8794 for Quantiles.
8795 (ClassGenDialog.OnOK): Add support for Quantiles.
8796 (GenQuantilesPanel): New. Input panel for Quantiles.
8797 (ClassGenerator, CustomRamp, MonochromaticRamp, GreyRamp, RedRamp,
8798 GreenRamp, BlueRamp, HotToColdRamp): Move to Thuban/Model/classgen.py
8799
8800 * Thuban/Model/classgen.py: New. Contains all the classes named above.
8801
8802 * Thuban/UI/classifier.py: Explicit imports.
8803 (ClassTable.GetValueAsCust, ClassTable.__ParseInput,
8804 ClassTable.SetValueAsCustom): Reworked to use new Range class.
8805
8806 * Thuban/UI/legend.py: Explicit imports.
8807
8808 * Thuban/UI/mainwindow.py: Add support for the Join Dialog. Added
8809 a Table menu and associated method calls.
8810 (MainWindow.choose_color): Removed. No longer needed.
8811
8812 * Thuban/UI/projdialog.py (ProjFrame.__VerifyButtons): Save button
8813 should be disabled if no projection is selected in the available
8814 list.
8815
8816 * Thuban/UI/renderer.py: Explicit imports.
8817
8818 * Thuban/UI/tableview.py (TableGrid.OnRangeSelect): Fix some issues
8819 with correctly selecting the rows and issuing the right events.
8820 Be sure to call Skip() to allow the grid to do some of its own
8821 handling which allows the rows to actually be selected.
8822 (LayerTableGrid.select_shapes): Rename from select_shape. Supports
8823 selecting multiple shapes.
8824 (LayerTableFrame): Support for building Queries.
8825 (LayerTableFrame.select_shapes): Allow multiple shapes to be selected.
8826
8827 * Thuban/UI/tree.py: Explicit imports.
8828
8829 * Thuban/UI/view.py (MapCanvas): Delegate "SelectedShapes" so the
8830 table view can call it.
8831
8832 * test/test_classification.py: Explicit imports.
8833 (TestClassification.test_ClassGroupRange): Fix test for new
8834 Range class.
8835
8836 * Doc/thuban.dtd: Add range parameter for clrange.
8837
8838 * Thuban/Model/range.py: Taken from SciParam. Used as the underlying
8839 object in ClassGroupRange, and also uesd for inputting ranges in
8840 the classifer table and elsewhere.
8841
8842 * Thuban/UI/join.py: New. Initial Join dialog. No real functionality
8843 yet.
8844
8845 2003-05-09 Frank Koormann <[email protected]>
8846
8847 * Thuban/UI/scalebar.py (DrawScaleBar): Draw only if interval > 0.0.
8848
8849 2003-05-08 Frank Koormann <[email protected]>
8850
8851 Coding style updates
8852
8853 * test/test_scalebar.py: Replaced tab indentation by spaces.
8854
8855 * Thuban/UI/scalebar.py: Explicit imports.
8856
8857 2003-05-08 Frank Koormann <[email protected]>
8858
8859 * Thuban/UI/scalebar.py
8860 (ScaleBar.DrawScalebar): Format string bug fixed.
8861
8862 2003-05-08 Frank Koormann <[email protected]>
8863
8864 Reorganization of scalebar component (no wx in Thuban/Model)
8865
8866 * Thuban/Model/scalebar.py: Rendering moved to Thuban/UI/scalebar.py
8867 (deriveInterval):
8868 Calculate scalebar interval and unit which fits in width for scale.
8869 (roundInterval): Round float.
8870
8871 * Thuban/UI/scalebar.py (ScaleBar): Scalebar rendering
8872
8873 * test/test_scalebar.py: Test for Thuban/Model/scalebar.py methods.
8874
8875 * Thuban/UI/legend.py: Import Thuban.UI.scalebar
8876
8877 2003-05-08 Frank Koormann <[email protected]>
8878
8879 * Thuban/UI/legend.py (ScalebarBitmap.SetCanvas):
8880 Initialize ScaleBar with canvas.map
8881
8882 * Thuban/Model/scalebar.py (ScaleBar.roundInterval()): New,
8883 round intervals to display smarter lengths
8884 (ScaleBar.DrawScalebar): Draw Scalebar only if the map contains a
8885 layer. If the maps has no projection applied grey the scalebar.
8886
8887 2003-05-07 Frank Koormann <[email protected]>
8888
8889 Basic Scalebar features added.
8890
8891 * Thuban/Model/scalebar.py (ScaleBar): New, scalebar rendering.
8892
8893 * Thuban/UI/legend.py (LegendPanel): Added scalebar bitmap
8894 (ScaleBarBitmap): New, links the scalebar bitmap with view messages
8895 and the renderer.
8896
8897 * Thuban/UI/view.py (MapCanvas.set_view_transform): Issue SCALE_CHANGED.
8898
8899 * Thuban/UI/messages.py: SCALE_CHANGED added.
8900
8901 2003-05-07 Bernhard Herzog <[email protected]>
8902
8903 * Thuban/Model/session.py (Session.__init__): New instance
8904 variable shapestores to hold a list of all open shapestore objects
8905 (Session.ShapeStores): New. Accessor method for the shapestores
8906 list.
8907 (Session._add_shapestore, Session._clean_weak_store_refs): New.
8908 Internal methods to maintain the shapestores list.
8909 (Session.Tables): New. Return all tables open in the session.
8910 (Session.OpenShapefile): Insert the new ShapeStore into the
8911 shapestores list.
8912
8913 * test/test_session.py (TestSessionSimple.test_initial_state): Add
8914 tests for ShapeStores and Tables
8915 (TestSessionWithContent.test_shape_stores)
8916 (TestSessionWithContent.test_tables): New. Test cases for
8917 ShapeStores and Tables
8918
8919 2003-05-07 Bernhard Herzog <[email protected]>
8920
8921 * Thuban/Model/transientdb.py (TransientTableBase.ReadRowAsDict):
8922 Add comments about the optimizations used.
8923 (AutoTransientTable.ReadValue, TransientTableBase.ReadValue): New.
8924 Implement the ReadValue table interface method.
8925
8926 * test/test_transientdb.py
8927 (TestTransientTable.run_iceland_political_tests)
8928 (TestTransientTable.test_transient_joined_table): Add tests for
8929 ReadValue
8930
8931 2003-05-07 Frank Koormann <[email protected]>
8932
8933 * Resources/Bitmaps/fulllayerextent.xpm,
8934 Resources/Bitmaps/fullselextent.xpm: Replaced the place holders with
8935 new icons.
8936
8937 2003-05-06 Bernhard Herzog <[email protected]>
8938
8939 * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
8940 New. Simply delegate to the transient table's version.
8941
8942 * test/test_transientdb.py
8943 (TestTransientTable.test_auto_transient_table_query): New. Test
8944 case for AutoTransientTable's SimpleQuery
8945
8946 2003-05-06 Bernhard Herzog <[email protected]>
8947
8948 * Thuban/Model/transientdb.py (TransientTableBase.SimpleQuery):
8949 Implement a simple query method for the query dialog
8950 (TransientTableBase.create): Add an INTEGER PRIMARY KEY that holds
8951 the row index or shapeid.
8952 (TransientTable.create): Insert the right value of the row index
8953 (TransientJoinedTable.create): Copy the row index of the left
8954 table to the joined result table
8955
8956 * test/test_transientdb.py
8957 (TestTransientTable.test_transient_table_read_twice): Fix
8958 doc-string
8959 (TestTransientTable.test_transient_table_query): New. Test for the
8960 SimpleQuery method
8961
8962 2003-05-06 Bernhard Herzog <[email protected]>
8963
8964 Convert all table users to use the new table interface. This only
8965 covers Thuban itself, not GREAT-ER or other applications built on
8966 Thuban yet, so the compatibility interface stays in place for the
8967 time being but it now issues DeprecationWarnings.
8968
8969 Finally, the new Table interface has a new method, HasColumn.
8970
8971 * Thuban/Model/table.py (OldTableInterfaceMixin): All methods
8972 issue deprecation warnings when they're. The warnings refer to the
8973 caller of the method.
8974 (OldTableInterfaceMixin.__deprecation_warning): New. Helper method
8975 for the deprecation warnings
8976
8977 * test/test_table.py: Ignore the deprecation warnings for the old
8978 table in the tests in this module. The purpose of the tests is to
8979 test the old interface, after all.
8980
8981 * test/test_transientdb.py
8982 (TestTransientTable.run_iceland_political_tests): Use the
8983 constants for the types. Add a test for HasColumn
8984 (TestTransientTable.test_transient_joined_table): Adapt to new
8985 table interface. Add a test for HasColumn
8986 (TestTransientTable.test_transient_table_read_twice): Adapt to new
8987 table interface
8988
8989 * Thuban/UI/tableview.py (DataTable.SetTable, DataTable.GetValue):
8990 Adapt to new table interface
8991
8992 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Adapt to
8993 new table interface
8994
8995 * Thuban/UI/controls.py (RecordListCtrl.fill_list)
8996 (RecordTable.SetTable): Adapt to new table interface
8997
8998 * Thuban/UI/classifier.py (Classifier.__init__)
8999 (Classifier.__init__): Adapt to new table interface
9000
9001 * Thuban/UI/classgen.py (ClassGenDialog.__init__)
9002 (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve): Adapt
9003 to new table interface
9004
9005 * Thuban/Model/transientdb.py (TransientTableBase.HasColumn)
9006 (AutoTransientTable.HasColumn): Implement the new table interface
9007 method
9008 (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ValueRange)
9009 (AutoTransientTable.UniqueValues): Adapt to new table interface
9010
9011 * Thuban/Model/layer.py (Layer.SetShapeStore, Layer.GetFieldType):
9012 Adapt to new table interface
9013
9014 * test/test_layer.py (TestLayer.open_shapefile): Helper method to
9015 simplify opening shapefiles a bit easier.
9016 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
9017 (TestLayer.test_point_layer): Use the new helper method
9018 (TestLayer.test_get_field_type): New. Test for the GetFieldType
9019 method
9020
9021 * test/test_dbf_table.py (TestDBFTable.test_has_column): Test for
9022 the new table method
9023
9024 * test/test_memory_table.py (TestMemoryTable.test_has_column):
9025 Test for the new table method HasColumn
9026
9027 2003-05-06 Jonathan Coles <[email protected]>
9028
9029 Addresses the "Selection Extent" wish of RTbug #1787.
9030
9031 * Resources/Bitmaps/fulllayerextent.xpm,
9032 Resources/Bitmaps/fullselextent.xpm: Bitmaps for layer and selection
9033 extent. These are just place holders for the real bitmaps.
9034
9035 * Thuban/Model/layer.py (Shape): Since a Shape is immutable only
9036 calculate the bounding box once (the first time compute_bbox() is
9037 called).
9038 (Layer.ShapesBoundingBox): New. Given a list of shape ids, return
9039 the bounding box for the shapes in lat/long coordinates.
9040
9041 * Thuban/UI/mainwindow.py: Added new "Full selection extent" menu
9042 option.
9043 (MainWindow.has_selected_shapes): New. Returns true if there are
9044 any selected shapes.
9045 (MainWindow.FullSelectionExtent): New. Calls
9046 MapCanvas.FitSelectedToWindow() when the user selects the menu option.
9047 (_has_selected_shapes): New. Returns true if there are any
9048 selected shapes.
9049
9050 * Thuban/UI/selection.py (Selection.HasSelectedShapes): New. Returns
9051 true if there are any selected shapes.
9052
9053 * Thuban/UI/view.py (MapCanvas): Added delegated method
9054 HasSelectedShapes.
9055 (MapCanvas.FitSelectedToWindow): New. Centers and scales any selected
9056 shapes on the canvas using the map projection (if any).
9057
9058 * test/test_layer.py (TestLayer.test_arc_layer): Add some tests
9059 for Layer.ShapesBoundingBox().
9060
9061 2003-05-06 Bernhard Herzog <[email protected]>
9062
9063 * Resources/Projections/defaults.proj: Fix spelling of Mercator
9064
9065 2003-05-05 Jonathan Coles <[email protected]>
9066
9067 Addresses the "Full Layer Extent" wish of RTbug #1787.
9068
9069 * Resources/Projections/defaults.proj: Added UK National Grid.
9070
9071 * Thuban/UI/mainwindow.py: Added new "Full layer extent" menu option.
9072 (MainWindow.FullLayerExtent): New. Calls MapCanvas.FitLayerToWindow()
9073 when the user selects the menu option.
9074
9075 * Thuban/UI/view.py (MapCanvas.FitLayerToWindow): New. Centers and
9076 scales the given layer on the canvas using the map projection.
9077
9078 2003-05-05 Bernhard Herzog <[email protected]>
9079
9080 Convert the table implementations to a new table interface. All
9081 tables use a common mixin class to provide backwards compatibility
9082 until all table users have been updated.
9083
9084 * Thuban/Model/table.py (OldTableInterfaceMixin): Mixin class to
9085 provide backwards compatibility for table classes implementing the
9086 new interface
9087 (DBFTable, MemoryTable): Implement the new table interface. Use
9088 OldTableInterfaceMixin as base for compatibility
9089 (DBFColumn, MemoryColumn): New. Column description for DBFTable
9090 and MemoryTable resp.
9091
9092 * test/test_dbf_table.py: New. Test cases for the DBFTable with
9093 the new table interface.
9094
9095 * test/test_memory_table.py: New. Test cases for the MemoryTable
9096 with the new table interface.
9097
9098 * test/test_table.py: Document the all tests in this file as only
9099 for backwards compatibility. The equivalent tests for the new
9100 interface are in test_memory_table.py and test_dbf_table.py
9101 (MemoryTableTest.test_read): field_info should be returning tuples
9102 with four items
9103 (MemoryTableTest.test_write): Make doc-string a more precise.
9104
9105 * Thuban/Model/transientdb.py (TransientTableBase): Convert to new
9106 table interface. Derive from from OldTableInterfaceMixin for
9107 compatibility.
9108 (TransientTableBase.create): New intance variable column_map to
9109 map from names and indices to column objects
9110 (TransientTable.create): Use the new table interface of the input
9111 table
9112 (AutoTransientTable): Convert to new table interface. Derive from
9113 from OldTableInterfaceMixin for compatibility.
9114 (AutoTransientTable.write_record): Removed. It's not implemented
9115 yet and we still have to decide how to handle writing with the new
9116 table and data framework.
9117
9118 * test/test_transientdb.py
9119 (TestTransientTable.run_iceland_political_tests)
9120 (TestTransientTable.test_transient_joined_table): Use the new
9121 table interface
9122
9123 2003-05-05 Jonathan Coles <[email protected]>
9124
9125 This is namely a collection of UI updates to improve user interactivity.
9126 Tabbing between controls now exists and you can use ESC to close dialog
9127 boxes; ENTER will active the default button.
9128
9129 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Rearrange the
9130 order that the controls are created so that tabbing works correctly.
9131 (ClassGenDialog.OnOK): Renamed from _OnGenerate() so that the
9132 wxDialog can handle the default button correctly.
9133 (ClassGenDialog.OnCancel): Renamed from _OnCloseBtn() for the
9134 same reasons as for OnOK.
9135 (GenUniformPanel._OnRetrieve): Call wxBeginBusyCursor/wxEndBusyCursor
9136 when we ask the table for the maximum/minimum values of a field
9137 which could take a very long time.
9138
9139 * Thuban/UI/classifier.py (Classifier.__init__): Rearrange the
9140 order that the controls are created so that tabbing works correctly.
9141 (SelectPropertiesDialog.__init__): Rearrange the order that the
9142 controls are created so that tabbing works correctly.
9143
9144 * Thuban/UI/dialogs.py: Copied NonModalDialog box and changed it
9145 to derive from a wxDialog but behave like the original implementation
9146 which was derived from a wxFrame. wxDialog provides useful key
9147 handling functionality like ESC calling OnCancel and ENTER calling
9148 OnOK which is lost with wxFrame.
9149
9150 * Thuban/UI/mainwindow.py: Add "..." to menu items that will open
9151 new dialogs.
9152
9153 * Thuban/UI/projdialog.py (ProjFrame.__init__): Rearrange the
9154 order that the controls are created so that tabbing works correctly.
9155 (ProjFrame.OnApply): Renamed from _OnTry() to use wxDialog behaviour.
9156 (ProjFrame.OnOK): Renamed from _OnOK() to use wxDialog behaviour.
9157 (ProjFrame.OnCancel): Renamed from _OnClose() to use wxDialog behaviour.
9158 (ProjPanel.__init__): Add "Airy" to the list of ellipsoids so we
9159 can provide the "UK National Grid" as a default projection.
9160 (UTMPanel.__init__): Rearrange the order that the controls are
9161 created so that tabbing works correctly.
9162
9163 2003-05-05 Bernhard Herzog <[email protected]>
9164
9165 * extensions/thuban/wxproj.cpp: Fix some of the comments.
9166 (project_point): If a map projection but no layer projection is
9167 given, convert degrees to radians before applying the map
9168 projection.
9169
9170 * Thuban/UI/tableview.py (TableGrid.disallow_messages)
9171 (TableGrid.allow_messages): New methods to make it possible to
9172 inhibit message sending.
9173 (TableGrid.issue): Only send the message if not inhibited.
9174 (LayerTableGrid.select_shape): Use the new methods to make sure
9175 that no ROW_SELECTED message is sent while we're updating the
9176 selected rows to match the selected shapes.
9177
9178 2003-05-02 Jan-Oliver Wagner <[email protected]>
9179
9180 Implementation of MemoryTable.
9181
9182 * Thuban/Model/table.py (MemoryTable): New. Quite simple table
9183 implementation that operates on a list of tuples. All of the data
9184 are kept in the memory.
9185
9186 * test/test_table.py (MemoryTableTest): New.
9187
9188 * test/test_transientdb.py (SimpleTable): Removed.
9189 (TestTransientTable.test_transient_joined_table,
9190 (TestTransientTable.test_transient_table_read_twice): Replaced
9191 SimpleTable by MemoryTable.
9192
9193 2003-04-30 Jonathan Coles <[email protected]>
9194
9195 * Data/iceland_sample.thuban: Now contains correct projections
9196 for each of the layers.
9197
9198 * Resources/Projections/defaults.proj: Geographic projection
9199 contains unit conversion parameter.
9200
9201 2003-04-30 Jonathan Coles <[email protected]>
9202
9203 The most important part of this putback is the projection changes.
9204 It should now be possible to specify the projection that a layer
9205 is in and then specify a different projection for the map. The
9206 projection dialog has an extra parameter for a geographic projection
9207 which lets the user select if the input is in degrees or radians.
9208
9209 * Thuban/Model/layer.py (Layer.ShapesInRegion): Fix docstring
9210 to say that the parameter is a tuple of unprojected
9211 points (which is what the callers to this method were assuming).
9212 Also, since the points are unprojected we need to projected them.
9213
9214 * Thuban/UI/legend.py (LegendTree.MoveCurrentItemUp,
9215 LegendTree.MoveCurrentItemDown): If the layer or any of the layer's
9216 groups are selected, move the layer up/down. Fixes RTbug #1833.
9217
9218 * Thuban/UI/mainwindow.py: Move menu item map_rename up.
9219
9220 * Thuban/UI/projdialog.py (ProjFrame._OnSave): Add missing
9221 parameter in call to SetClientData.
9222 (GeoPanel): Add support for selecting the units that the
9223 source data is in (Radians or Degrees).
9224
9225 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Optimize
9226 the rendering loop by reducing the number of if's, removing the
9227 unnecessary try/except block, and checking if the old group
9228 is the same as the new one (which happens a lot if there is
9229 no classification, or lots of shapes are in the same group).
9230
9231 * Thuban/UI/view.py (MapCanvas.OnPaint): Add a try/except block
9232 around the redraw routine to try to catch problems that the user
9233 may create by selecting invalid projections for the data set and
9234 map. Clears the display if there are any problems and prints the
9235 error.
9236 (MapCanvas.do_redraw): Use DC.Clear() instead of drawing a filled
9237 rectangle.
9238
9239 * extensions/thuban/wxproj.cpp (project_point): First invert the
9240 supplied point (which should be in projected coordinates) using
9241 the layer's projection and then project the point using the
9242 map's projection.
9243 (project_points): Use project_point() to project each point.
9244
9245 2003-04-30 Jan-Oliver Wagner <[email protected]>
9246
9247 * Thuban/Model/layer.py (Layer.SetShapeStore): Fixed a bug:
9248 don't set the Classification to None if the classfication field
9249 is None (ie only a DEFAULT).
9250
9251 2003-04-30 Bernhard Herzog <[email protected]>
9252
9253 * Thuban/UI/view.py: Fix some typos.
9254
9255 * Thuban/UI/mainwindow.py (MainWindow.identify_view_on_demand): Do
9256 not pop up the dialog if the selection becomes empty (this could
9257 happen if e.g. a new selection is opened while the identify tool
9258 is active and dialog had been closed)
9259
9260 2003-04-30 Bernhard Herzog <[email protected]>
9261
9262 * Thuban/Model/transientdb.py (TransientTableBase.__init__): New
9263 instance variable read_record_last_result
9264 (TransientTableBase.read_record): Make sure reading the same
9265 record twice works. The implementation uses the new instance
9266 variable read_record_last_result
9267
9268 * test/test_transientdb.py
9269 (TestTransientTable.test_transient_table_read_twice): New test
9270 case for the above bug-fix.
9271
9272 2003-04-29 Jonathan Coles <[email protected]>
9273
9274 * Thuban/common.py: Removed. No longer needed Str2Num. RTbug #1832.
9275
9276 * Thuban/UI/classgen.py: Remove all uses of Str2Num.
9277
9278 * Thuban/UI/classifier.py: Remove all uses of Str2Num.
9279 (ClassTable.SetValueAsCustom): Rename keyword argument in
9280 ClassGroup* constructors to match argument name.
9281
9282 2003-04-29 Bernhard Herzog <[email protected]>
9283
9284 * Thuban/Model/session.py (Session.Destroy): Explicitly close the
9285 transient DB if it exists to make sure it doesn't leave a journal
9286 file in the temp directory.
9287
9288 * Thuban/Model/transientdb.py (TransientDatabase.close): Set
9289 self.conn to None after closing the connection to make sure it's
9290 not closed twice
9291
9292 2003-04-29 Jonathan Coles <[email protected]>
9293
9294 Add a visible parameter in the layer XML tag. The default value is
9295 "true". If anything other than "false" is specified we also assume
9296 "true". Addresses RTbug #1025.
9297
9298 * Doc/thuban.dtd: Add visible parameter to a layer.
9299
9300 * Thuban/Model/layer.py (BaseLayer.__init__): Change default value
9301 of visible from 1 to True.
9302 (Layer.__init__): Change default value of visible from 1 to True.
9303
9304 * Thuban/Model/load.py (SessionLoader.start_layer): Read visible
9305 parameter.
9306
9307 * Thuban/Model/save.py (SessionSaver.write_layer): Save visible
9308 parameter.
9309
9310 * test/test_load.py: Add new test data contents_test_visible.
9311 (LoadSessionTest.setUp): save test data.
9312 (LoadSessionTest.testLayerVisibility): Test if the visible flag
9313 is loaded correctly.
9314
9315 * test/test_save.py (SaveSessionTest.testSingleLayer): Add test
9316 for saving an invisible layer.
9317
9318 2003-04-29 Jonathan Coles <[email protected]>
9319
9320 * Thuban/UI/mainwindow.py (MainWindow.SetMap): Look up the
9321 legend dialog box and tell it to change its map to the one
9322 supplied to SetMap(). Fixes RTbug #1770.
9323
9324 2003-04-29 Bernhard Herzog <[email protected]>
9325
9326 Next step of table implementation. Introduce a transient database
9327 using SQLite that some of the data is copied to on demand. This
9328 allows us to do joins and other operations that require an index
9329 for good performance with reasonable efficiency. Thuban now needs
9330 SQLite 2.8.0 and pysqlite 0.4.1. Older versions may work but I
9331 haven't tested that.
9332
9333 * Thuban/Model/transientdb.py: New. Transient database
9334 implementation.
9335
9336 * test/test_transientdb.py: New. Tests for the transient DB
9337 classes.
9338
9339 * Thuban/Model/session.py (AutoRemoveFile, AutoRemoveDir): New
9340 classes to help automatically remove temporary files and
9341 directories.
9342 (Session.__init__): New instance variables temp_dir for the
9343 temporary directory and transient_db for the SQLite database
9344 (Session.temp_directory): New. Create a temporary directory if not
9345 yet done and return its name. Use AutoRemoveDir to have it
9346 automatically deleted
9347 (Session.TransientDB): Instantiate the transient database if not
9348 done yet and return it.
9349
9350 * Thuban/Model/data.py (ShapefileStore.__init__): Use an
9351 AutoTransientTable so that data is copied to the transient DB on
9352 demand.
9353 (SimpleStore): New class that simply combines a table and a
9354 shapefile
9355
9356 * Thuban/Model/table.py (Table, DBFTable): Rename Table into
9357 DBFTable and update its doc-string to reflect the fact that this
9358 is only the table interface to a DBF file. Table is now an alias
9359 for DBFTable for temporary backwards compatibility.
9360
9361 * Thuban/UI/application.py (ThubanApplication.OnExit): Make sure
9362 the last reference to the session goes away so that the temporary
9363 files are removed properly.
9364
9365 * test/test_load.py (LoadSessionTest.tearDown): Remove the
9366 reference to the session to make sure the temporary files are
9367 removed.
9368
9369 2003-04-29 Bernhard Herzog <[email protected]>
9370
9371 * Thuban/Model/load.py (XMLReader.__init__, XMLReader.read): Turn
9372 the __parser instance variable into a normal local variable in
9373 read. It's only used there and read will never be called more than
9374 once. Plus it introduces a reference cycle that keeps can keep the
9375 session object alive for a long time.
9376
9377 2003-04-29 Jonathan Coles <[email protected]>
9378
9379 * Thuban/Model/proj.py (Projection): Removed Set*() methods to make
9380 Projection an immutable item. Fixes RTbug #1825.
9381 (Projection.__init__): Initialize instance variables here.
9382 (ProjFile.Replace): New. Replace the given projection object with
9383 the new projection object. This solves the problem of needing the
9384 mutator Projection.SetProjection() in the ProjFrame class and
9385 allows a projection to change parameters without changing its
9386 location in the file.
9387
9388 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs): Dialog should
9389 be of type wxSAVE and should verify overwriting a file.
9390
9391 * Thuban/UI/projdialog.py (ProjFrame._OnSave): Use the new
9392 ProjFile.Replace() method instead of the mutator
9393 Projection.SetProjection(). Also requires that we reassign the
9394 client data to the new projection.
9395
9396 * test/test_proj.py (TestProjection.test): Test GetName() and
9397 GetAllParameters()
9398 (TestProjFile.test): Remove tests for Set*() methods. Add tests
9399 for Replace().
9400
9401 2003-04-25 Jonathan Coles <[email protected]>
9402
9403 * Thuban/Model/save.py (SessionSaver.write_projection): Make sure
9404 to save the name of the projection.
9405
9406 * test/test_save.py (SaveSessionTest.testLayerProjection): New
9407 test to verify layer projections are saved correctly.
9408
9409 2003-04-25 Jonathan Coles <[email protected]>
9410
9411 * Thuban/Model/proj.py (Projection.SetName): Set the name
9412 to "Unknown" if name is None.
9413 (Projection.SetAllParameters): New. Set the projection's
9414 parameter list to the one supplied.
9415 (Projection.SetProjection): New. Set the projection's
9416 properties to those of the supplied Projection.
9417
9418 * Thuban/UI/mainwindow.py (MainWindow.MapProjection): Set
9419 the dialog title to include the map's title.
9420 (MainWindow.LayerProjection): Set the dialog title to include
9421 the layer's title.
9422
9423 * Thuban/UI/projdialog.py (ProjFrame.__ShowError): Consolidate
9424 error dialogs into a single method call.
9425 (ProjFrame.__VerifyButtons): Add more states to check.
9426 (ProjFrame.__GetProjection): Return the current state of an
9427 edited projection or None.
9428 (ProjFrame.__FillAvailList): Remove checks for states that
9429 shouldn't exist.
9430 (ProjFrame._OnNew): Clear all selected items and supply
9431 a projection panel if necessary.
9432
9433 * test/test_proj.py (TestProjFile.test): Add tests for
9434 ProjFile.SetAllParameters, ProjFile.SetProjection,
9435 ProjFile.SetName.
9436
9437 2003-04-25 Jonathan Coles <[email protected]>
9438
9439 * Thuban/UI/projdialog.py (ProjFrame.__FillAvailList): Now
9440 takes an optional argument to select the current projection.
9441 This does not guarantee that the item is visible due to
9442 limited wxWindows functionality. Fixes RTBug #1821.
9443
9444 2003-04-25 Jonathan Coles <[email protected]>
9445
9446 * Thuban/Model/load.py (SessionLoader.start_projection): Remember
9447 the projection name and use it when constructing the Projection
9448 object.
9449
9450 * Thuban/Model/proj.py (Projection.__init__): Change the default
9451 value for 'name' to None and then test if name is equal to None
9452 in the body of the constructor. This way the caller doesn't have to
9453 know what the default value should be. Namely, useful in load.py
9454 where we have to pick a default value if the 'name' parameter
9455 doesn't exist in the XML file.
9456
9457 * test/test_load.py (LoadSessionTest.testLayerProjection): New.
9458 Tests a file where a layer has a projection.
9459
9460 2003-04-25 Jonathan Coles <[email protected]>
9461
9462 * Thuban/Model/layer.py (Layer.TreeInfo): Add an item to the
9463 tree for projection information.
9464
9465 * Thuban/Model/load.py (XMLReader.GetFilename): Renamed from
9466 XMLReader.GetFileName.
9467 (SessionLoader): Added support for loading projection tags that
9468 appear inside a layer.
9469
9470 * Thuban/Model/proj.py (ProjFile): Document the class. Move
9471 back to using a list because the order of the projections in
9472 the file is important to maintain. Fixes RTbug #1817.
9473
9474 * Thuban/Model/resource.py: Rename calls to ProjFile.GetFileName
9475 to ProjFile.GetFilename.
9476
9477 * Thuban/Model/save.py (SessionSaver.write_layer): Save projection
9478 information.
9479
9480 * Thuban/UI/projdialog.py (ProjFrame._OnAddToList): Renamed from
9481 ProjFrame._OnSaveAs. Removed old dead code from previous
9482 implementation.
9483 (ProjFrame._OnExport): Add support for exporting more than one
9484 projection to a single file.
9485 (ProjFrame.__FillAvailList): use string formatting (% operator)
9486 to build strings that are (partly) translated. Fixes RTbug #1818.
9487
9488 * test/test_proj.py (TestProjFile.test): New. Tests the base ProjFile
9489 class.
9490
9491 2003-04-24 Bernhard Herzog <[email protected]>
9492
9493 * po/es.po: Updated Spanish translation by Daniel Calvelo Aros
9494
9495 * po/fr.po: New. French translation by Daniel Calvelo Aros
9496
9497 * Thuban/UI/projdialog.py (ProjFrame._OnSaveAs): Don't translate
9498 empty strings.
9499
9500 2003-04-24 Jonathan Coles <[email protected]>
9501
9502 * Thuban/Model/layer.py (Layer.GetProjection): New. Needed to
9503 implement the interface that the ProjFrame dialog expects.
9504
9505 * Thuban/Model/proj.py (Projection.SetName): New. Allows the
9506 name of the projection to be changed.
9507 (ProjFile): Use a dictionary instead of a list so that removing
9508 projections is easier and we are sure about uniqueness.
9509 (ProjFile.Remove): Remove the given projection object.
9510
9511 * Thuban/Model/resource.py (GetSystemProjFiles, GetUserProjFiles):
9512 Return a list with only one projection file instead of searching for
9513 any projection file. This simplifies many things if the user can
9514 only have one system file and one user file.
9515
9516 * Thuban/UI/classgen.py: Change all references to
9517 genCombo to genChoice.
9518
9519 * Thuban/UI/mainwindow.py: Add a Projection option under the
9520 layer menu.
9521 (MainWindow.LayerProjection): New. Open up a projection window
9522 for a layer.
9523
9524 * Thuban/UI/projdialog.py: Large changes to how the dialog is
9525 laid out. Use three panels instead of one. One for the list of
9526 projections, one for the edit controls, and one for the buttons.
9527 Fixed resizing problems so that the dialog resizes correctly
9528 when the projection panel changes. Added import/export, save, and
9529 new buttons/functionality.
9530
9531 2003-04-24 Bernhard Herzog <[email protected]>
9532
9533 First step towards table management. Introduce a simple data
9534 abstraction so that we replace the data a layer uses more easily
9535 in the next step.
9536
9537 * Thuban/Model/data.py: New file with a simple data abstraction
9538 that bundles shapefile and dbffile into one object.
9539
9540 * Thuban/Model/session.py (Session.OpenShapefile): New method to
9541 open shapefiles and return a shape store object
9542
9543 * Thuban/Model/layer.py (Layer.__init__): Pass the data as a store
9544 object instead of a shapefile filename. This introduces a new
9545 instance variable store holding the datastore. For intermediate
9546 backwards compatibility keep the old instance variables.
9547 (open_shapefile): Removed. No longer needed with the shape store.
9548 (Layer.SetShapeStore, Layer.ShapeStore): New methods to set and
9549 get the shape store used by a layer.
9550 (Layer.Destroy): No need to explicitly destroy the shapefile or
9551 table anymore.
9552
9553 * Thuban/UI/mainwindow.py (MainWindow.AddLayer)
9554 (MainWindow.AddLayer): Use the session's OpenShapefile method to
9555 open shapefiles
9556
9557 * Thuban/Model/load.py (ProcessSession.start_layer): Use the
9558 session's OpenShapefile method to open shapefiles
9559
9560 * test/test_classification.py
9561 (TestClassification.test_classification): Use the session's
9562 OpenShapefile method to open shapefiles and build the filename in
9563 a more platform independed way
9564
9565 * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
9566 Implement to have a session to use in the tests
9567 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
9568 (TestLayer.test_point_layer, TestLayer.test_empty_layer): Use the
9569 session's OpenShapefile method to open shapefiles
9570 (TestLayerLegend.setUp): Instantiate a session so that we can use
9571 it to open shapefiles.
9572 (TestLayerLegend.tearDown): Make sure that all references to
9573 layers and session are removed otherwise we may get a resource
9574 leak
9575
9576 * test/test_map.py (TestMapAddLayer.test_add_layer)
9577 (TestMapWithContents.setUp): Instantiate a session so that we can
9578 use it to open shapefiles.
9579 (TestMapWithContents.tearDown): Make sure that all references to
9580 layers, maps and sessions are removed otherwise we may get a
9581 resource leak
9582 ("__main__"): use support.run_tests() so that more info about
9583 uncollected garbage is printed
9584
9585 * test/test_save.py (SaveSessionTest.testSingleLayer): Use the
9586 session's OpenShapefile method to open shapefiles
9587 ("__main__"): use support.run_tests() so that more info about
9588 uncollected garbage is printed
9589
9590 * test/test_selection.py (TestSelection.tearDown): Make sure that
9591 all references to the session and the selection are removed
9592 otherwise we may get a resource leak
9593 (TestSelection.get_layer): Instantiate a session so that we can
9594 use it to open shapefiles.
9595 ("__main__"): use support.run_tests() so that more info about
9596 uncollected garbage is printed
9597
9598 * test/test_session.py (TestSessionBase.tearDown)
9599 (TestSessionWithContent.tearDown): Make sure that all references
9600 to the session and layers are removed otherwise we may get a
9601 resource leak
9602 (TestSessionWithContent.setUp): Use the session's OpenShapefile
9603 method to open shapefiles
9604
9605 2003-04-24 Jonathan Coles <[email protected]>
9606
9607 * Thuban/Model/load.py (XMLReader.read): Should have been checking
9608 if the file_or_filename object had the 'read' attribute.
9609
9610 2003-04-23 Jonathan Coles <[email protected]>
9611
9612 * Thuban/Model/resource.py: Fixes RTbug #1813.
9613 (ReadProjFile): Add documentation about which exceptions are raised.
9614 Always pass the exceptions up to the caller.
9615 (GetProjFiles): If the directory can't be read return an empty list.
9616 If any of the proj files can't be read skip that file and go
9617 on to the next one.
9618
9619 * test/test_proj.py: Added test cases to handle nonexistent files,
9620 unreadable files, and files that don't parse correctly.
9621
9622 2003-04-23 Jonathan Coles <[email protected]>
9623
9624 Projection dialog. Allows the user to select from a list
9625 of projection templates and optionally edit them and save new ones.
9626
9627 * Thuban/UI/projdialog.py (ProjFrame): New. Main dialog.
9628 (ProjPanel): Base class for projection specific panels.
9629 (TMPanel): Projection panel for Transverse Mercartor.
9630 (UTMPanel): Projection panel for Universal Transverse Mercartor.
9631 (LCCPanel): Projection panel for Lambert Conic Conformal.
9632 (GeoPanel): Projetion panel for Geographic Projection.
9633
9634 2003-04-23 Jonathan Coles <[email protected]>
9635
9636 * Thuban/Model/load.py (XMLReader): Renamed from XMLProcessor to
9637 promote symmetry. There now exists XMLReader and XMLWriter.
9638 (XMLReader.read): New. Call to read the given file descriptor or
9639 filename.
9640 (XMLReader.close): New. Make sure the file is closed.
9641 (XMLReader.GetFileName): New. Return just the file name that is being
9642 read from.
9643 (XMLReader.GetDirectory): New. Return just the directory of the file
9644 that is being read.
9645 (XMLReader.AddDispatchers): New. Take a dictionary which contains
9646 the names of functions to call as the XML tree is parsed.
9647 (XMLReader.startElementNS): Updated to use new dispatcher dictionary.
9648 (XMLReader.endElementNS): Updated to use new dispatcher dictionary.
9649 (SessionLoader): Removed class variables start_dispatcher and
9650 end_dispatcher since this functionality is now part of a class
9651 instance. Fixes RTbug #1808.
9652 (SessionLoader.__init__): Add dispatcher functions.
9653 (load_xmlfile): Code was moved into the XMLReader.read().
9654 (load_session): Use modified SessionLoader.
9655
9656 * Thuban/Model/map.py (Map.GetProjection): New. Returns the
9657 map's projection.
9658
9659 * Thuban/Model/proj.py (Projection.GetParameters): Renamed to
9660 GetAllParameters.
9661 (Projection.GetParameter): Returns the value for the given parameter.
9662
9663 * Thuban/Model/resource.py: Use XMLReader and XMLWriter.
9664 (GetProjFiles): Renamed from GetProjections. Now returns a list
9665 of ProjFile objects.
9666 (GetSystemProjFiles): Renamed from GetSuppliedProjections. Returns
9667 a list of ProjFile objects whose files are not user defined.
9668 (GetUserProjFiles): Renamed from GetUserProjections. Returns a
9669 list of ProjFile objects whose files are user defined.
9670 (ProjFileReader): Extend new XMLReader.
9671
9672 * Thuban/Model/save.py (XMLWriter): Renamed from XMLSaver to
9673 promote symmetry.
9674
9675 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Use a wxChoice
9676 control instead of a wxComboBox. wxChoice controls do not generate
9677 events as the uses highlights possible choices which fixes problems
9678 with resizing the dialog when the use selects an option.
9679
9680 * Thuban/UI/classifier.py (Classifier.__init__): Use a wxChoice
9681 control instead of a wxComboBox.
9682
9683 * Thuban/UI/mainwindow.py (MainWindow.Projection): Use new projection
9684 dialog.
9685
9686 * test/test_proj.py (TestProjection.test): New tests for GetParameter
9687 method.
9688
9689 2003-04-22 Bernhard Herzog <[email protected]>
9690
9691 * Thuban/UI/mainwindow.py: Remove some unused imports and global
9692 constants
9693
9694 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
9695 (IdentifyGridCtrl.selected_shape): Use table, not shapetable.
9696
9697 2003-04-17 Bernhard Herzog <[email protected]>
9698
9699 * Thuban/Model/layer.py: Don't import LAYER_LEGEND_CHANGED.
9700 (Layer): Update doc-string since LAYER_LEGEND_CHANGED is not used
9701 anymore.
9702 (Layer.BoundingBox, Layer.GetFieldType, Layer.NumShapes)
9703 (Layer.ShapeType, Layer.Shape): No need to call
9704 self.open_shapefile since it's always called in __init__
9705
9706 * Thuban/UI/application.py (ThubanApplication.MainLoop): Removed.
9707 In wxPython 2.4 there's no need to extend MainLoop anymore since
9708 wxPython itself makes sure OnExit is called.
9709
9710 2003-04-16 Jonathan Coles <[email protected]>
9711
9712 Initial putback of projection management code. Includes new
9713 classes to read and write projection files. The current load
9714 and save classes were abstracted a bit so they could be reused.
9715 The Projection class was extended to provide new methods and
9716 have a name.
9717
9718 * Thuban/Model/load.py (XMLProcessor): New. Contains all the
9719 general XML reading methods that were part of ProcessSession.
9720
9721 * Thuban/Model/proj.py (Projection.__init__): Accepts an optional
9722 name.
9723 (ProjFile): New. Represents a file that contains projection
9724 information.
9725
9726 * Thuban/Model/resource.py: New. Contains general utilities
9727 for read and writing projection files.
9728
9729 * Thuban/Model/save.py (XMLSaver): New. Contains all the
9730 general XML writing methods that were part of SessionSaver.
9731 (SessionSaver): Renamed from Saver.
9732
9733 * test/test_proj.py: New test cases for the projection
9734 file read and write functions.
9735
9736 2003-04-16 Jonathan Coles <[email protected]>
9737
9738 * Thuban/Model/classification.py: Use repr() around values
9739 in the ClassGroup*.__repr__() methods so it is clearer when
9740 a value is a string and when it is a number.
9741
9742 * test/test_load.py: Rework the classification test to test
9743 that we can load old files.
9744 (testLabels): Test a file where the groups have labels.
9745
9746 2003-04-16 Bernhard Herzog <[email protected]>
9747
9748 Safer implementation of the performance enhancements of the
9749 low-level renderer:
9750
9751 * extensions/thuban/wxproj.cpp (extract_projection)
9752 (extract_pointer): Rename extract_projection to extract_pointer
9753 and redefine its purpose to return the pointer stored in a CObject
9754 returned by the object's cobject method. Update all callers.
9755 (s_draw_info, free_draw_info, draw_polygon_init): Implement the
9756 handling of these low-level parameters so that each s_draw_info
9757 instance is handled as a CObject at python level that also
9758 contains real references to the actual python objects which
9759 contain the values in the struct. Add free_draw_info as the
9760 destructor.
9761 (draw_polygon_shape): Add the py_draw_info parameter which must a
9762 cobject containing an s_draw_info pointer.
9763
9764 * Thuban/UI/renderer.py (MapRenderer.polygon_render_param): New
9765 method to instantiat the low-level render parameter
9766 (MapRenderer.draw_shape_layer): Use the new method. Remove some
9767 commented out code.
9768 (MapRenderer.draw_polygon_shape): Make the first parameter not the
9769 layer but the low-level render parameter
9770 (ScreenRenderer.draw_shape_layer): Use the low-level render
9771 parameter.
9772
9773 2003-04-15 Jonathan Coles <[email protected]>
9774
9775 * Thuban/Model/classification.py: Implemented __repr__ for
9776 the ClassGroup* classes to make debugging a bit easier.
9777 (ClassGroup.SetLabel): Check that the string is an instance
9778 of StringTypes not StringType. Accounts for Unicode strings.
9779
9780 * Thuban/Model/color.py: Implemented __repr__ to make
9781 debugging a bit easier.
9782
9783 * Thuban/Model/save.py (Saver.write_classification): Need to
9784 save the group label.
9785
9786 * test/test_load.py (testClassification): New. Loads the
9787 iceland_sample_test.thuban file and checks if it was loaded
9788 correctly.
9789
9790 2003-04-15 Jonathan Coles <[email protected]>
9791
9792 * extensions/thuban/wxproj.cpp (draw_polygon_init): New. Used
9793 to improve rendering performance by initializing the variables
9794 that are not change each time draw_polygon_shape() is called.
9795 The values are stored in a global struct draw_info.
9796 (draw_polygon_shape): Removed initialization code that is
9797 now in draw_polygon_init().
9798
9799 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Make
9800 drawing initialization call to draw_polygon_init()
9801 (MapRenderer.draw_polygon_shape): Use new signature of
9802 draw_polygon_shape.
9803
9804 * Thuban/UI/classgen.py (GenUniformPanel): Fix spin control
9805 weirdness by setting the range to (1, maxint).
9806
9807 * Thuban/Model/classification.py (ClassGroupProperties): Make
9808 instance variables private and optimize comparison operator
9809 by first checking if the color references are the same.
9810 (ClassGroupSingleton): Make instance variables private.
9811 (ClassGroupRange): Make instance variables private.
9812
9813 * HOWTO-Release: Filled in missing steps for releasing packages.
9814
9815 2003-04-15 Bernhard Herzog <[email protected]>
9816
9817 First stab at internationalized messages:
9818
9819 * Thuban/__init__.py (_): Implement the translation function for
9820 real using the python gettext module.
9821
9822 * Thuban/UI/classifier.py (ClassTable.GetRowLabelValue): Don't
9823 translate empty strings.
9824
9825 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
9826 Add a missing space to a warning message
9827
9828 * po/README: New. Notes about the management of the translation
9829 files.
9830
9831 * po/Makefile: New. Makefile to help manage the translation files.
9832
9833 * po/es.po: New. Spanish translation by Daniel Calvelo Aros
9834
9835 * MANIFEST.in: Include the *.mo files in Resources/Locale and the
9836 translations and support files in po/
9837
9838 * setup.py (data_files): Add the *.mo files to the data_files too
9839
9840 * README: Add note about the translations when building from CVS
9841
9842 2003-04-14 Jonathan Coles <[email protected]>
9843
9844 * Thuban/UI/dock.py: Fixes some window resizing problems most
9845 noticable under windows. Always assume the button bitmaps will
9846 be there. Code clean up.
9847 (DockabelWindow.Dock, DockableWindow.UnDock): Force all the
9848 images for the dock/undock button to the same images.
9849 Work around for RTbug #1801.
9850
9851 * Thuban/UI/legend.py (LegendPanel.__init__): The toolbar should
9852 be allowed to grow within the sizer. Fixes a bug under Windows
9853 where the toolbar wasn't being drawn.
9854
9855 2003-04-14 Frank Koormann <[email protected]>
9856
9857 * Resources/Bitmaps/dock_12.xpm, Resources/Bitmaps/undock_12.xpm:
9858 Updated design to try to make the button functionality more
9859 transparent.
9860
9861 2003-04-14 Jonathan Coles <[email protected]>
9862
9863 * Thuban/UI/legend.py (LegendPanel.__init__): Call Create() to
9864 finalize the intialization of the panel.
9865
9866 * Thuban/UI/dock.py (DockPanel.Create): New. Finalizes the
9867 creation of the panel. Should be the last thing called in the
9868 initializer of a subclass.
9869
9870 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Actively
9871 set the current selections in the combo boxes. This is needed
9872 under Windows.
9873
9874 * Thuban/UI/classifier.py (Classifier.__init__): Add a top
9875 level panel to the dialog so that the background colors are
9876 consistent under Windows.
9877
9878 2003-04-11 Jonathan Coles <[email protected]>
9879
9880 * Thuban/UI/classgen.py: Change color ramps to start at white
9881 not black.
9882
9883 * Thuban/UI/legend.py: Enable/disable the legend buttons when
9884 the legend changes. Fixes RTbug #1793.
9885
9886 * test/test_classification.py: Added test for copying of
9887 classifications.
9888
9889 2003-04-11 Jonathan Coles <[email protected]>
9890
9891 * Thuban/UI/resource.py: New. Centralize the loading of resources
9892 such as bitmaps.
9893
9894 * Thuban/UI/classgen.py (GenUniquePanel.__init__): Reordered buttons,
9895 added images to the move buttons, added 'reverse' button.
9896 (CustomRampPanel.__init__): Added images to the move buttons.
9897 (GreyRamp): New. Generates a ramp from white to black.
9898 (HotToColdRamp): New. Generates a ramp from cold to hot colors.
9899
9900 * Thuban/UI/classifier.py: Refactored ID's from ID_CLASSIFY_* to
9901 ID_PROPERTY_*.
9902 (Classifier.__init__): Minor changes to the layout.
9903 (Classifier._OnTitleChanged): Listen for when the user edits the
9904 title and update the dialog's title and the layer's title.
9905
9906 * Thuban/UI/dock.py: Use new bitmaps for the control buttons.
9907
9908 * Thuban/UI/legend.py: Use new bitmaps for the control buttons.
9909 (LegendTree._OnMsgLayerTitleChanged): Change the displayed title
9910 if the layer's title changes.
9911
9912 * Thuban/UI/mainwindow.py: Added new menu item and associated code
9913 to open a dialog to rename the map.
9914 (MainWindow): Use new resource class to import bitmaps.
9915
9916 2003-04-11 Jonathan Coles <[email protected]>
9917
9918 * Resources/Bitmaps/close_12.xpm, Resources/Bitmaps/dock_12.xpm,
9919 Resources/Bitmaps/group_use.xpm, Resources/Bitmaps/group_use_all.xpm,
9920 Resources/Bitmaps/group_use_none.xpm,
9921 Resources/Bitmaps/group_use_not.xpm,
9922 Resources/Bitmaps/hide_layer.xpm,
9923 Resources/Bitmaps/layer_properties.xpm,
9924 Resources/Bitmaps/lower_layer.xpm, Resources/Bitmaps/raise_layer.xpm,
9925 Resources/Bitmaps/show_layer.xpm, Resources/Bitmaps/undock_12.xpm:
9926 New.
9927
9928 2003-04-10 Jonathan Coles <[email protected]>
9929
9930 * Thuban/Model/classification.py: (ClassGroupRange.__init__):
9931 Should pass group to ClassGroup constructor.
9932
9933 2003-04-10 Jonathan Coles <[email protected]>
9934
9935 * Thuban/Model/classification.py: (ClassGroup): Move all the common
9936 methods of the derived classes ([Set|Get]Properties(), __eq__, __ne__)
9937 here. Implement SetVisible(), IsVisible().
9938 (ClassGroup.__init__): Add group parameter which acts as a copy
9939 constructor.
9940
9941 * Thuban/UI/classifier.py (ClassTable): Add a new column for the
9942 "Visible" check boxes.
9943 (Classifier): Rename the buttons and refactor the code to match
9944 the new labels.
9945
9946 * Thuban/UI/legend.py: Classify button is now called "Properties".
9947 Refactored the code to change variable names.
9948 (LegendTree.__FillTreeLayer): Only list a group if it is visible.
9949
9950 * Thuban/UI/mainwindow.py: MainWindow.OpenClassifier renamed to
9951 MainWindow.OpenLayerProperties. MainWindow.LayerEditProperties
9952 renamed to MainWindow.LayerEditProperties.
9953 (MainWindow.ToggleLegend): Don't include map name in legend title.
9954 (MainWindow.SetMap): Added the map name to the window title.
9955 (MainWindow.LayerFillColor, MainWindow.LayerTransparentFill,
9956 MainWindow.LayerOutlineColor, MainWindow.LayerNoOutline): Removed.
9957 Functionality is found in the layer properties dialog.
9958
9959 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
9960 draw visible groups.
9961
9962 2003-04-09 Jonathan Coles <[email protected]>
9963
9964 * Thuban/UI/classgen.py: Modifications to allow simple
9965 addition and selection of new color schemes.
9966 (MonochromaticRamp): New. Generates a ramp between two colors.
9967 (RedRamp): New. Generates a ramp of all red.
9968 (GreenRamp): New. Generates a ramp of all green.
9969 (BlueRamp): New. Generates a ramp of all blue.
9970
9971 2003-04-09 Jonathan Coles <[email protected]>
9972
9973 * Thuban/Model/classification.py (Classification.__deepcopy__):
9974 Need to copy over field and fieldType attributes.
9975
9976 * Thuban/Model/table.py (Table.field_range): New. Retrive the
9977 maximum and minimum values over the entire table for a given
9978 field.
9979 (Table.GetUniqueValues): New. Retrieve all the unique values
9980 in the table for a given field.
9981
9982 * Thuban/UI/classgen.py: Renamed GenRangePanel to GenUniformPanel.
9983 (GenUniquePanel): New. Controls to allow the user to select
9984 which unique field values they would like in the classification.
9985 (CustomRampPanel): Code that was in ClassGenDialog that allows
9986 the user to select the properties for a custom ramp.
9987 (ClassGenerator.GenUniformDistribution): Was called GenerateRanges.
9988
9989 * Thuban/UI/classifier.py: Removed a lot of debugging code.
9990 (Classifier._SetClassification): Callback method so that the
9991 class generator can set the classification in the grid.
9992 (ClassGroupPropertiesCtrl): New. Encapsulates the drawing and
9993 editing of a group properties class into a wxWindows control.
9994
9995 * Thuban/UI/dock.py: It was decided that if the user closes
9996 a dockable window the window should simply hide itself. That
9997 way if the user wants to show the dock again it appears in the
9998 same place as it was when it was closed.
9999 (DockableWindow.Destroy): Call renamed method OnDockDestroy().
10000 (DockableWindow._OnButtonClose): Hide the window instead of
10001 destroying it.
10002 (DockableWindow._OnClose): Hide the window instead of
10003 destroying it.
10004
10005 * Thuban/UI/legend.py (LegendTree): Use a private method to
10006 consistently set the font and style of the text. Fixes RTbug #1786.
10007
10008 * Thuban/UI/mainwindow.py: Import just the Classifier class.
10009
10010 2003-04-07 Bernhard Herzog <[email protected]>
10011
10012 * Thuban/UI/mainwindow.py (main_menu): Move the toggle_legend item
10013 to the map module
10014
10015 2003-04-07 Bernhard Herzog <[email protected]>
10016
10017 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree): Removed in
10018 favor of ToggleSessionTree
10019 (MainWindow.ToggleSessionTree): New method to toggle visibility of
10020 the session tree.
10021 (MainWindow.SessionTreeShown): New method to return whether the
10022 session tree is currently shown.
10023 (MainWindow.ToggleLegend): New method to toggle visibility of the
10024 legend
10025 (MainWindow.ShowLegend): Implement in terms of ToggleLegend and
10026 LegendShown
10027 (MainWindow.LegendShown): New method to return whether the legend
10028 is currently shown.
10029 (_method_command): Add checked parameter so we can define check
10030 menu items
10031 (_has_tree_window_shown, _has_legend_shown): Use the appropriate
10032 mainwindow methods.
10033 (show_session_tree, show_legend commands): Removed.
10034 (toggle_session_tree, toggle_legend commands): New commands to
10035 toggle the visibility of the dialogs
10036
10037 2003-04-07 Jonathan Coles <[email protected]>
10038
10039 * Thuban/UI/classgen.py: Fix Windows problem.
10040
10041 * Thuban/UI/dock.py: Fix Windows problem.
10042
10043 * Thuban/UI/mainwindow.py: Use False instead of false.
10044 (MainWindow.ShowLegend): Remove unnecessary switch parameter.
10045
10046 2003-04-07 Jonathan Coles <[email protected]>
10047
10048 Since we now say that the order of the groups in a classification
10049 matters, it makes sense to be able to manipulate that order. Most
10050 of the changes to Thuban/Model/classification.py are to that end.
10051
10052 * Thuban/Model/classification.py (Classification.AppendGroup,
10053 Classification.InsertGroup, Classification.ReplaceGroup,
10054 Classification.RemoveGroup, Classification.GetGroup): Do as the
10055 names imply.
10056 (Classification.FindGroup): This was called GetGroup, but GetGroup
10057 takes an index, while FindGroup takes a value.
10058 (Classification.__deepcopy__): Copy all the groups, BUT NOT THE LAYER
10059 REFERENCE. Currently there is a cyclic reference between the layer
10060 and its classification. If the classification doesn't need to know
10061 its owning layer we can change this, since it may make sense to be
10062 able to use the same classification with different layers.
10063
10064 * Thuban/Model/load.py: Use Classification.AppendGroup(), not AddGroup()
10065
10066 * Thuban/UI/classgen.py: Use Classification.AppendGroup(),
10067 not AddGroup()
10068
10069 * Thuban/UI/classifier.py: Now that we can depend on the order in
10070 a Classification and have methods to manipulate that order we don't
10071 need to use our own data structures in the grid. We can simply make
10072 the grid/table access the information they need from a copy of
10073 the classification object.
10074 (Classifier._OnCloseBtn): Event handler for when the user clicks
10075 'Close'. This is needed so if the user applies changes and then
10076 continues to change the table the user has the option of discarding
10077 the most recent changes and keeping what they applied.
10078
10079 * Thuban/UI/mainwindow.py: Put "Show Legend" and "Show Session Tree"
10080 into the same group.
10081
10082 * extensions/thuban/wxproj.cpp (check_version): If Thuban is compiled
10083 with a really old version of proj, PJ_VERSION won't even be defined.
10084 If it isn't defined then just compile so that the function always
10085 returns Py_False.
10086
10087 * test/test_classification.py: Fix tests to use the renamed methods.
10088 Still need to write tests for the new methods.
10089
10090 2003-04-04 Jonathan Coles <[email protected]>
10091
10092 * Thuban/UI/classifier.py (Classifier.__SelectField): Move the
10093 call to SetSelection out of the method and before the call
10094 to __SelectField in __init__. This prevents a recursion of events
10095 when _OnFieldSelect is triggered by the user.
10096
10097 2003-04-04 Jonathan Coles <[email protected]>
10098
10099 * Thuban/Model/classification.py: Rename Color.None to
10100 Color.Transparent.
10101 (ClassGroupProperties.SetLineColori, ClassGroupProperties.SetFill):
10102 Don't bother copying the color, since Colors are immutable.
10103
10104 * Thuban/Model/color.py, Thuban/Model/layer.py, Thuban/Model/load.py,
10105 Thuban/UI/classifier.py, Thuban/UI/mainwindow.py,
10106 Thuban/UI/renderer.py, Thuban/UI/view.py:
10107 Rename Color.None to Color.Transparent.
10108
10109 * test/test_classification.py, test/test_load.py: Rename Color.None
10110 to Color.Transparent.
10111
10112 2003-04-04 Jonathan Coles <[email protected]>
10113
10114 * Thuban/Model/classification.py: Fix assert calls.
10115 (ClassGroupProperties.SetLineColor, ClassGroupProperties.SetFill):
10116 Copy the color parameter rather than hold onto a reference.
10117
10118 * Thuban/Model/color.py (Color.__copy__, Color.__deepcopy): Copy
10119 the color object.
10120 (NoColor.__copy__, NoColor.__deepcopy): Return 'self' so that we
10121 are sure there exists only one refernce to Color.None in the system.
10122 This allows us to use 'is' rather than the comparision functions.
10123
10124 * Thuban/Model/save.py: Fix assert calls.
10125
10126 * Thuban/UI/classifier.py: Fix assert calls.
10127 (ClassGrid._OnCellDClick): Call up to the classifier to open the
10128 dialog to edit the groups properties.
10129 (ClassGrid._OnCellResize): Make sure that the scollbars are drawn
10130 correctly if a cell is resized.
10131 (ClassTable.SetClassification): New. Changes the classification
10132 that is in the table.
10133 (ClassTable.__SetRow): Allow groups to be prepended.
10134 (Classifier): New code for opening the EditProperties and
10135 GenerateRanges dialogs.
10136 (SelectPropertiesDialog.__GetColor): Only set the color in the
10137 color dialog if the current color is not None.
10138
10139 * Thuban/UI/dock.py: Fix assert calls.
10140
10141 * Thuban/UI/legend.py: Fix assert calls.
10142
10143 * Thuban/UI/renderer.py: Fix assert calls.
10144
10145 * Thuban/UI/classgen.py (ClassGenDialog): Dialog for generating
10146 classifications.
10147 (GenRangePanel): Panel specific to range generation.
10148 (GenSingletonPanel): Panel specific to singleton generation.
10149 (ClassGenerator): Class responsible for actually generating
10150 the classification from the data gathered in the dialog box.
10151 (PropertyRamp): Generates properties whose values range from
10152 a starting property to an ending property.
10153
10154 2003-04-03 Bernhard Herzog <[email protected]>
10155
10156 * test/support.py (print_garbage_information): New function that
10157 prints information about still connected messages and memory
10158 leaks.
10159 (run_suite): Removed.
10160 (run_tests): New function for use as a replacement of
10161 unittest.main in the test_* files. This one calls
10162 print_garbage_information at the end.
10163
10164 * test/runtests.py (main): Use support.print_garbage_information
10165
10166 * test/test_layer.py: Use support.run_tests instead of
10167 unittest.main so we get memory leak information
10168 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
10169 (TestLayer.test_point_layer, TestLayer.test_empty_layer)
10170 (TestLayerLegend.test_visibility): Call the layer's Destroy method
10171 to fix a memory leak.
10172
10173 * test/test_classification.py: Use support.run_tests instead of
10174 unittest.main so we get memory leak information
10175 (TestClassification.test_classification): Call the layer's Destroy
10176 method to fix a memory leak.
10177
10178 2003-04-02 Bernhard Herzog <[email protected]>
10179
10180 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
10181 Handle the reference counts of the return value and errors in
10182 PyArg_ParseTuple correctly.
10183
10184 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
10185 sure the filename is absolute to avoid problems when saving the
10186 session again
10187
10188 * Thuban/Model/table.py: Remove unnecessary import. Fix a typo.
10189
10190 2003-04-01 Jonathan Coles <[email protected]>
10191
10192 * Thuban/UI/renderer.py (MapRenderer.draw_point_shape): Check
10193 that there actually are points in the returned list of points
10194 before trying to index into the list. The list may be empty if
10195 the shape is a Null Shape.
10196
10197 2003-04-01 Bernhard Herzog <[email protected]>
10198
10199 * test/test_map.py: Don't use from <module> import *
10200
10201 2003-04-01 Jonathan Coles <[email protected]>
10202
10203 * Thuban/Model/session.py: Use LAYER_CHANGED instead of
10204 LAYER_LEGEND_CHANGED
10205
10206 * Thuban/UI/dock.py (DockableWindow._OnButtonClose): Call
10207 self.Destroy() to close the window after yesterday's changes.
10208
10209 * test/test_map.py, test/test_session.py: Fix messages that
10210 are sent from maps and layers.
10211
10212 2003-03-31 Jonathan Coles <[email protected]>
10213
10214 * Thuban/UI/classifier.py: Commented out some debugging statements.
10215 (ClassDataPreviewer.Draw): Draw rectangles for polygon layers per
10216 RTbug #1769.
10217
10218 * Thuban/UI/dock.py (DockableWindow.UnDock): Restore size and
10219 position (although position doesn't work yet under GTK).
10220 (DockableWindow.Destroy): New. Called when the window must be
10221 closed. Namely needed when the DockFrame closes and must close
10222 its children.
10223 (DockFrame): Listen for EVT_CLOSE and destroy all children.
10224
10225 * Thuban/UI/legend.py (LegendPanel.Destroy): New. Cleans up
10226 when then window is told to close.
10227 (LegendTree._OnMsgLayerChanged): Fixes a seg fault bug. See
10228 comment in source for more info.
10229
10230 * Thuban/UI/main.py: Show the legend by default when Thuban starts.
10231
10232 * Thuban/UI/mainwindow.py: Renamed OnClose to _OnClose for
10233 symmetry with other such methods.
10234 (MainWindow.ShowLegend): Show the legend docked by default.
10235
10236 2003-03-28 Jonathan Coles <[email protected]>
10237
10238 * Thuban/UI/classifier.py: Support for highlighting a specific
10239 group within the grid when the classification dialog is opened.
10240 Also contains a lot of debugging printouts which will later
10241 be removed.
10242
10243 * Thuban/UI/dock.py: Complete rework on the dock code so that
10244 that it is fairly removed from the rest of the Thuban application.
10245 It is easy to add new docks which the rest of the program having
10246 to be aware of them.
10247
10248 * Thuban/UI/legend.py: Modifications to support selecting a
10249 specific group in the classification dialog. Changed how layers
10250 are drawn when the layer is visible/invisible.
10251
10252 * Thuban/UI/mainwindow.py: Removed legend specific code and
10253 replaced it with calls to the new dock code.
10254
10255 * Thuban/UI/renderer.py (MapRenderer.__init__): Added assert
10256 to check if scale > 0. Trying to track down a divide by zero.
10257
10258 2003-03-26 Jonathan Coles <[email protected]>
10259
10260 * Thuban/UI/legend.py: Removed unnecessary LegendDialog class.
10261 (LegendPanel): Removed _OnDock()/_OnUnDock() methods which are
10262 now part of DockableWindow.
10263 (LegendPanel.DoOnSelChanged): Select the current layer in the
10264 map.
10265 (LegendTree._OnSelChanged): Call LegendPanel.DoOnSelChanged()
10266 with the selected layer and/or group.
10267
10268 2003-03-26 Jonathan Coles <[email protected]>
10269
10270 This putback contains the code for dockable windows. There is
10271 no support in wxWindows as of this date for windows that can
10272 attach themselves to other windows.
10273
10274 The current model contains a DockableWindow which has a parent
10275 window for when it is detached and a dock window that it puts
10276 its contents in when it is docked. The contents of a DockableWindow
10277 must be a DockPanel. DockPanel itself derives from wxPanel.
10278
10279 * Thuban/Model/layer.py (Layer.ClassChanged): Send a LAYER_CHANGED
10280 message, not a LAYER_LEGEND_CHANGED message.
10281
10282 * Thuban/Model/map.py (Map): Forward LAYER_CHANGED messages.
10283
10284 * Thuban/UI/classifier.py (Classifier.__init__): Use wxADJUST_MINSIZE
10285 as one of the style properties for the fieldTypeText item to
10286 be sure that its size is correct when the text changes.
10287
10288 * Thuban/UI/dock.py: New. Classes for the DockPanel and
10289 DockableWindow.
10290
10291 * Thuban/UI/legend.py: Added some more buttons and made the
10292 LegendPanel a DockPanel.
10293
10294 * Thuban/UI/mainwindow.py: Added sash windows to the main window
10295 and supporting functions for manipulating the sashes.
10296 (MainWindow.ShowLegend): Create a DockableWindow with the
10297 LegendPanel as the contents.
10298
10299 * Thuban/UI/messages.py: Added DOCKABLE_* messages
10300
10301 * Thuban/UI/view.py (MapCanves.SetMap): Listen for LAYER_CHANGED,
10302 not LAYER_LEGEND_CHANGED, messages.
10303
10304 2003-03-25 Jonathan Coles <[email protected]>
10305
10306 * setup.py: Added custom script bdist_rpm_build_script so that
10307 when the rpm is built the path to wx-config is correct.
10308
10309 * setup.cfg: Added line saying to use the custom build script
10310
10311 2003-03-20 Jonathan Coles <[email protected]>
10312
10313 Initial implementation of the Legend.
10314
10315 * Thuban/UI/legend.py: New. Creates a window that shows the map's
10316 Legend information and allows the user to add/modify classifications
10317 and how the layers are drawn on the map.
10318
10319 * setup.py: New command 'build_docs' which currently uses
10320 happydoc to generate html documentation for Thuban.
10321
10322 * Thuban/Model/classification.py (ClassGroup.GetDisplayText): New.
10323 Returns a string which is appropriately describes the group.
10324
10325 * Thuban/Model/layer.py (Layer.SetClassification): Generate a
10326 LAYER_CHANGED event instead of a LAYER_LEGEND_CHANGED event.
10327
10328 * Thuban/Model/map.py (Map): Rename messages and use new, more
10329 specific, messages.
10330
10331 * Thuban/Model/messages.py: New message to indicate that a layer's
10332 data has changed (LAYER_CHANGED). New map messages to indicate
10333 when layers have been added/removed/changed or if the stacking order
10334 of the layers has changed.
10335
10336 * Thuban/Model/session.py: Rename and use new messages.
10337
10338 * Thuban/UI/classifier.py: Remember if any changes have actually
10339 been applied so that if the dialog is cancelled without an application
10340 of changes we don't have to set a new classification.
10341 (ClassDataPreviewer): Pulled out the window specific code and put it
10342 ClassDataPreviewWindow. ClassDataPreviewer can then be used to draw
10343 symbols on any DC.
10344
10345 * Thuban/UI/mainwindow.py: New code to open the legend.
10346
10347 * Thuban/UI/view.py: Use new message names.
10348
10349 2003-03-19 Jonathan Coles <[email protected]>
10350
10351 * Thuban/UI/main.py (verify_versions): New. Checks the versions
10352 of Python, wxPython, and some other libraries.
10353
10354 * extensions/thuban/wxproj.cpp (check_version): Checks the given
10355 version against what wxproj was compiled with.
10356 (check_version_gtk): If wxproj was compiled with gtk then check
10357 the given version against the version of the gtk library
10358 currently being used.
10359
10360 2003-03-14 Bernhard Herzog <[email protected]>
10361
10362 * test/test_command.py: Run the tests when the module is run as a
10363 script
10364
10365 2003-03-14 Bernhard Herzog <[email protected]>
10366
10367 Implement selection of multiple selected shapes in the same layer:
10368
10369 - Introduce a new class to hold the selection. This basically
10370 replaces the interactor which was nothing more than the
10371 selection anyway. A major difference is of course that the new
10372 selection class supports multiple selected shapes in one layer
10373
10374 - Move the object that represents the selection from the
10375 application to the canvas. The canvas is a better place than the
10376 application because the selection represents which shapes and
10377 layer of the map displayed by the canvas are selected and
10378 affects how the map is drawn.
10379
10380 - Make the selection and its messages publicly available through
10381 the mainwindow.
10382
10383 - The non-modal dialogs do not get a reference to the interactor
10384 anymore as they can simply refer to their parent, the
10385 mainwindow, for the what the interactor had to offer.
10386
10387 * Thuban/UI/selection.py: New module with a class to represent the
10388 selection.
10389
10390 * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
10391 these unused messages
10392
10393 * Thuban/UI/application.py (ThubanApplication.OnInit)
10394 (ThubanApplication.OnExit, ThubanApplication.SetSession): The
10395 interactor is gone now.
10396 (ThubanApplication.CreateMainWindow): There is no interactor
10397 anymore so we pass None as the interactor argument for now for
10398 compatibility.
10399
10400 * Thuban/UI/view.py (MapCanvas.delegated_messages)
10401 (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
10402 Unsubscribe, delegate messages according to the delegated_messages
10403 class variable.
10404 (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
10405 attributes from instance variables as described with the
10406 delegated_methods class variable.
10407 (MapCanvas.__init__): New instance variable selection holding the
10408 current selection
10409 (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
10410 pass them on to the renderer
10411 (MapCanvas.SetMap): Clear the selection when a different map is
10412 selected.
10413 (MapCanvas.shape_selected): Simple force a complete redraw. The
10414 selection class now takes care of only issueing SHAPES_SELECTED
10415 messages when the set of selected shapes actually does change.
10416 (MapCanvas.SelectShapeAt): The selection is now managed in
10417 self.selection
10418
10419 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
10420 (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
10421 Unsubscribe, delegate messages according to the delegated_messages
10422 class variable.
10423 (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
10424 attributes from instance variables as described with the
10425 delegated_methods class variable.
10426 (MainWindow.__init__): The interactor as ivar is gone. The
10427 parameter is still there for compatibility. The selection messages
10428 now come from the canvas.
10429 (MainWindow.current_layer, MainWindow.has_selected_layer):
10430 Delegate to the the canvas.
10431 (MainWindow.LayerShowTable, MainWindow.Classify)
10432 (MainWindow.identify_view_on_demand): The dialogs don't need the
10433 interactor parameter anymore.
10434
10435 * Thuban/UI/tableview.py (TableFrame.__init__)
10436 (LayerTableFrame.__init__, LayerTableFrame.OnClose)
10437 (LayerTableFrame.row_selected): The interactor is gone. It's job
10438 from the dialog's point of view is now done by the mainwindow,
10439 i.e. the parent. Subscribe to SHAPES_SELECTED instead
10440 of SELECTED_SHAPE
10441
10442 * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
10443 is gone. It's job from the dialog's point of view is now done by
10444 the mainwindow, i.e. the parent.
10445
10446 * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
10447 gone. It's job from the dialog's point of view is now done by the
10448 mainwindow, i.e. the parent.
10449
10450 * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
10451 gone. It's job from the dialog's point of view is now done by the
10452 mainwindow, i.e. the parent.
10453 (SessionTreeCtrl.__init__): New parameter mainwindow which is
10454 stored as self.mainwindow. The mainwindow is need so that the tree
10455 can still subscribe to the selection messages.
10456 (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
10457 (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
10458 selection is now accessible through the mainwindow. Subscribe to
10459 SHAPES_SELECTED instead of SELECTED_SHAPE
10460
10461 * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
10462 SHAPES_SELECTED message now.
10463 (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
10464 so deal with multiple shapes
10465 (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
10466 gone. It's job from the dialog's point of view is now done by the
10467 mainwindow, i.e. the parent.
10468
10469 * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
10470 parameter is now a list of shape ids.
10471 (RecordTable.SetTable): The second parameter is now a list of
10472 indices.
10473
10474 * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
10475 selected_shape parameter and ivar to selected_shapes. It's now a
10476 list of shape ids.
10477 (MapRenderer.draw_label_layer): Deal with multiple selected
10478 shapes. Rearrange the code a bit so that the setup and shape type
10479 distinctions are only executed once.
10480
10481 * test/test_selection.py: Test cases for the selection class
10482
10483 2003-03-11 Jonathan Coles <[email protected]>
10484
10485 * Thuban/Model/load.py: Temporary fix so that the xml reader
10486 doesn't cause Thuban to crash.
10487
10488 * Thuban/Model/layer.py: Handle the cyclic references between
10489 a layer and its classification better, and be sure to disconnect
10490 the classification from the layer when the layer is destroyed
10491 so that we don't maintain a cyclic reference that may not be
10492 garbage collected.
10493
10494 * Thuban/Model/classification.py: See comment for layer.py.
10495
10496 2003-03-12 Jan-Oliver Wagner <[email protected]>
10497
10498 * HOWTO-Release: New. Information on the steps for releasing
10499 a new version of Thuban.
10500
10501 2003-03-11 Jonathan Coles <[email protected]>
10502
10503 * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
10504 Use True instead of true.
10505 (Classifier): Should have a single panel in which all the controls lie.
10506
10507 * Thuban/UI/proj4dialog.py: Add normal border.
10508
10509 * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
10510
10511 * Thuban/UI/mainwindow.py: Use True instead of true.
10512
10513 * setup.py: Update some definitions to use wxWindows2.4 files
10514
10515 * Data/iceland_sample_class.thuban: Fixed file so that the
10516 field_type information is present.
10517
10518 2003-03-10 Jonathan Coles <[email protected]>
10519
10520 * Thuban/UI/classifier.py (Classifier.__init__): Make the
10521 field type label grow so that when the text changes the
10522 size is updated correctly. This may be a wxWindows bug.
10523
10524 2003-03-10 Jonathan Coles <[email protected]>
10525
10526 * Thuban/UI/application.py: Changed SESSION_CHANGED to
10527 SESSION_REPLACED.
10528
10529 * Thuban/UI/classifier.py: Wrap text with _().
10530 (ClassGrid.CreateTable): Set dimensions and size hints here,
10531 instead of in Reset, so we only set the size once.
10532
10533 * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
10534
10535 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
10536 Call Close() instead of Shutdown().
10537
10538 * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
10539
10540 * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
10541 Go back to using OnClose() instead of Shutdown().
10542
10543 2003-03-10 Jonathan Coles <[email protected]>
10544
10545 * Thuban/UI/classifier.py (Classifier): SelectField() needed
10546 to know the old field index as well as the new one.
10547
10548 2003-03-10 Jonathan Coles <[email protected]>
10549
10550 * Thuban/UI/classifier.py (Classifier): Use __SelectField()
10551 to correctly set the table information and call this from
10552 __init__ and from _OnFieldSelect so that all the information
10553 is up to date when the dialog opens and when a field is changed.
10554
10555 2003-03-10 Jonathan Coles <[email protected]>
10556
10557 * Thuban/Model/classification.py (Classification): Don't use
10558 layer's message function directly, use the ClassChanged() method
10559 when then classification changes. SetField/SetFieldType/SetLayer
10560 must keep the information about field name and field type in
10561 sync when an owning layer is set or removed.
10562
10563 * Thuban/Model/layer.py: Added ClassChanged() so that the
10564 classification can tell the layer when its data has changed.
10565 (Layer.SetClassification): Accepts None as an arguement to
10566 remove the current classification and correctly handles
10567 adding a new classification.
10568
10569 * Thuban/Model/load.py: Comment out print statement
10570
10571 * test/test_classification.py, test/test_save.py: New and
10572 improved tests.
10573
10574 2003-03-07 Jonathan Coles <[email protected]>
10575
10576 * Thuban/Model/classification.py: Implemented __copy__ and
10577 __deepcopy__ for ClassGroup* and ClassGroupProperites so
10578 they can easily be copied by the classifier dialog.
10579 (ClassGroupProperites.__init__): The default line color should
10580 have been Color.Black.
10581
10582 * Thuban/UI/classifier.py: Setting and Getting table values now
10583 uses a consistent set of functions.
10584 (Classifier): Now non-modal. Has field type label which changes
10585 as the field changes. Keep track of buttons in a list so that
10586 we can enable/disable the buttons when the None field is selected.
10587 (SelectPropertiesDialog): Add buttons to make the colors transparent.
10588
10589 * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
10590 does what OnClose did, but can be called by the application to
10591 close a window. Needed when a session changes, and we have to
10592 close the classifier windows.
10593
10594 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
10595 Shuts down open dialogs. Used when a new session is created
10596 or a session is opened.
10597 (MainWindow.SaveSession): Should only call application.SaveSession()
10598 if we don't call SaveSessionAs first.
10599 (MainWindow.Classify): Allow different classifier dialogs for
10600 different layers.
10601
10602 * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
10603 the parent class handle it. Add Shutdown() to unsubscibe from
10604 event notification and call the parent Shutdown(). This was
10605 necessary so the application can close the tree window.
10606
10607 2003-03-06 Jonathan Coles <[email protected]>
10608
10609 * Thuban/Model/classification.py: Minor documentation changes,
10610 Addition of __eq__ and __ne__ methods.
10611 (Classification.SetLayer): prevent recursion between this method
10612 and Layer.SetClassification().
10613
10614 * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
10615
10616 * Thuban/Model/layer.py (SetClassification): prevent recursion
10617 between this method and Classification.SetLayer().
10618
10619 * test/test_classification.py, test/test_load.py,
10620 test/test_session.py: Fixed and added tests for the classification
10621 classes.
10622
10623 2003-03-06 Bernhard Herzog <[email protected]>
10624
10625 * Thuban/UI/classifier.py (ClassGrid.__init__)
10626 (ClassGrid.CreateTable): Move the SetSelectionMode call to
10627 CreateTable because otherwise it triggers an assertion in
10628 wxPython/wxGTK 2.4.
10629
10630 2003-03-05 Jonathan Coles <[email protected]>
10631
10632 * Thuban/common.py: Move FIELDTYPE constants back to table.py.
10633
10634 * Thuban/Model/load.py: import FIELDTYPE constants from table.
10635
10636 * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
10637
10638 * Thuban/Model/table.py: Put FIELDTYPE constants back.
10639
10640 2003-03-05 Jonathan Coles <[email protected]>
10641
10642 * Thuban/UI/classifier.py: Added class documentation.
10643 Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
10644 Store just the groups in the table and generate the other
10645 column information when it is requested. Add "None" field
10646 to pull-down to select no classification.
10647
10648 * Thuban/common.py: Moved FIELDTYPE constants from table.py
10649 (Str2Num): Only catch ValueError exceptions.
10650
10651 * Thuban/Model/classification.py: Class documentation. Renaming
10652 of methods with Stroke to Line. Groups are stored in a single
10653 list with the default as the first element. Groups are searched
10654 in the order they appear in the list.
10655
10656 * Thuban/Model/color.py: Documentation.
10657
10658 * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
10659 the kind of data represented by a field.
10660
10661 * Thuban/Model/load.py (ProcessSession): Use proper string
10662 conversion function; fixes RTbug #1713.
10663
10664 * Thuban/Model/save.py (Saver): Store field type information.
10665
10666 * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
10667 (Table): Add field_info_by_name() to retrieve field information
10668 by specifying the field name, not the number.
10669
10670 * Thuban/UI/mainwindow.py: Function name changes.
10671
10672 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
10673 get the layer classification once. Don't try to classify
10674 values when the field is None: just use the default properties.
10675
10676 * Thuban/UI/view.py: Function name changes.
10677
10678 * Doc/thuban.dtd: Add field_type attribute to a classification.
10679
10680 2003-03-04 Bernhard Herzog <[email protected]>
10681
10682 * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
10683 the fill and stroke layer attributes optional with suitable
10684 default values. Add the stroke_width layer attribute. Use correct
10685 syntax for empty elements. Make the attribute list for labels
10686 refer to the label element.
10687
10688 2003-03-04 Bernhard Herzog <[email protected]>
10689
10690 * setup.py (thuban_build_py.build): Add a comment about distutils in
10691 Python 2.3 containing some of the functionality we implement in
10692 setup.py ourselves.
10693
10694 * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
10695 before the selection mode. Doing it the other way round triggers
10696 an assertion in wxWindows.
10697
10698 * Thuban/Model/save.py (escape): Fix typo in doc-string
10699
10700 * Thuban/Model/classification.py: Remove unnecessary wxPython
10701 import
10702
10703 2003-03-04 Jonathan Coles <[email protected]>
10704
10705 * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
10706 Parameter 'value' should default to None.
10707
10708 * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
10709 the class attribute __classification is now private.
10710
10711 * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
10712 Classifier to ClassGrid. Added support for removing selected rows,
10713 which including code for keeping track of when cells are selected,
10714 and deselected.
10715 (ClassTable): Support for added/removing rows. Fixed a problem
10716 with __ParseInput whereby it would not allow strings (only numbers)
10717 to be entered.
10718 (Classifier): Added button and supporting code for removing
10719 selected rows.
10720
10721 2003-02-27 Jonathan Coles <[email protected]>
10722
10723 * Thuban/common.py: Moved color conversion functions into
10724 Thuban/UI/common.py.
10725 (Str2Num): Now converts the float (not the string) to a long/int
10726 so that an exception isn't thrown.
10727
10728 * Thuban/UI/common.py: Common functions used in several UI modules
10729
10730 * Thuban/Model/classification.py: Changed the class hierarchy
10731 so that a Classification consists of Groups which return
10732 Properties when a value matches a Group.
10733
10734 * Thuban/Model/layer.py: Fixed name resolution problem.
10735
10736 * Thuban/Model/load.py: Use new Classification and Group functions.
10737
10738 * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
10739 failure.
10740 (Saver.write_classification): Use new Classification and Group
10741 functions.
10742
10743 * Thuban/UI/classifier.py: Changes to use new Classification and Group
10744 functions. Fix to create a tuple with a single value instead of
10745 simply returning the value.
10746
10747 * Thuban/UI/renderer.py: Use new Classification and Group functions.
10748 Use common.py functions.
10749
10750 * Thuban/UI/tree.py: Use common.py functions.
10751
10752 * test/test_classification.py: Use new Classification and Group
10753 classes.
10754
10755 2003-02-24 Jonathan Coles <[email protected]>
10756
10757 * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
10758 functions from Thuban color objects to wxWindow colour objects.
10759
10760 * Thuban/Model/classification.py (Classification): Renamed
10761 GetProperties() to GetClassData(). Used the new iterator
10762 in TreeInfo().
10763 (ClassIterator): Iterator implementation to iterate over the
10764 ClassData objects in a classification object.
10765
10766 * Thuban/Model/save.py (Saver.write_classificaton): Uses
10767 the new iterator to save the classification information.
10768
10769 * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
10770 for changing the stroke and fill colors and previewing the
10771 changes.
10772
10773 * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
10774 MainWindow.SaveSessionAs): Text string changes so the dialogs
10775 have more meaningful titles.
10776
10777 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
10778 Classification method name from GetProperties to GetClassData.
10779
10780 * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
10781 instead of accessing now non-existent class variables.
10782
10783 2003-02-24 Bernhard Herzog <[email protected]>
10784
10785 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
10786 unneeded Shape() call. Rendering is substantially faster without
10787 it and it avoids some problems with broken shape files.
10788
10789 2003-02-20 Frank Koormann <[email protected]>
10790
10791 Force minimal size of identify and label dialogs. The autosizing
10792 looked too ugly.
10793
10794 * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
10795 * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
10796 Set size of listctrl.
10797 * Thuban/UI/identifyview.py (IdentifyView.__init__):
10798 Set size of dialog.
10799
10800 2003-02-19 Jonathan Coles <[email protected]>
10801
10802 * test/test_classification.py, test/test_layer.py,
10803 test/test_load.py, test/test_map.py, test/test_session.py:
10804 Updated the tests to use the new functions that are in the
10805 respective classes.
10806
10807 * Thuban/Model/classification.py (Classification):
10808 Uses the new ClassData* classes. Modification messages are
10809 passed up to the parent layer (if it exists).
10810 (ClassData): New class to encapsulate the common data in each
10811 classification property.
10812 (ClassDataDefault): Represents the Default class. data.
10813 (ClassDataPoint): Represents a single class. data point
10814 (ClassDataRange): Represents a class. range
10815 (ClassDataMap): Represents a class. map (unused).
10816
10817 * Thuban/Model/color.py: Added Color.None to represent something
10818 with no color. Color.Black represents the color black.
10819 (NoColor): Helper class derived from Color to represent something
10820 with no color.
10821
10822 * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
10823 stroke_width attributes. Made the 'classification' attribute private.
10824 New methods for setting/getting the classification.
10825
10826 * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
10827 to get the classifcation and use the new ClassData* classes to
10828 hold the classification data. Use Str2Num to convert numbers
10829 properly.
10830
10831 * Thuban/Model/save.py (Saver): Use new Color and Classification
10832 methods
10833
10834 * Thuban/UI/classifier.py (ClassGrid): New class to represent a
10835 custom grid.
10836 (ClassTable): Support for editing Values and Labels and for
10837 changing what type (point or range) of data is stored in each
10838 property based on how the user enters the data.
10839 (Classifier): Support for saving the new classifications and
10840 launching the dialog to edit a property.
10841 (SelectPropertiesDialog): New class for editing the visual
10842 properties of a classification (stroke color, width, and fill color)
10843 (ClassPreviewer): Took the Draw method from ClassRenderer and
10844 made most of it into this new class. Intend to use this class in
10845 the SelectPropertiesDialog for previewing changes.
10846
10847 * Thuban/UI/renderer.py: Use new Color and Classification methods.
10848
10849 * Thuban/UI/tree.py: Formatting changes.
10850
10851 * Doc/thuban.dtd: Add 'label' element
10852
10853 * Thuban/common.py: New. Contains common routines used throughout
10854 the code.
10855 (Str2Num): Takes a string and converts it to the "best" type of
10856 number.
10857
10858 2003-02-14 Bernhard Herzog <[email protected]>
10859
10860 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
10861 dragging flag is always set to 0 even when the tool implementation
10862 raises an exception
10863
10864 2003-02-11 Bernhard Herzog <[email protected]>
10865
10866 * Thuban/UI/application.py (ThubanApplication.splash_screen): New
10867 method to create a splash screen.
10868 (ThubanApplication.ShowMainWindow): New. Show the main window.
10869 Needed so the splash screen can display the mainwindow
10870 (ThubanApplication.OnInit): Call the
10871 new splash_screen method to determine whether the application
10872 should display a splash screen. If it displays a splash screen do
10873 not immediately show the main window.
10874
10875 2003-02-11 Jonathan Coles <[email protected]>
10876
10877 * Thuban/Model/classification.py: Added import line to fix
10878 feature conflicts between running on python2.2 and python2.1.
10879
10880 * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
10881 onto the clinfo parameter, so removed the deepcopy().
10882
10883 2003-02-10 Jonathan Coles <[email protected]>
10884
10885 * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
10886 Added element_open variable to track opening and closing of tags
10887 so that tags that don't span more than one line are closed with
10888 /> instead of </tag_name>. Use the GetDefault*() methods of
10889 the Classification class.
10890
10891 * Thuban/Model/classification.py (Classificaton): Added set and
10892 get methods for the default data. The class also takes a layer
10893 reference so that modification messages can be sent. Fixed the
10894 methods to use the new ClassData class.
10895 (ClassData): New class to encapsulate the classification data
10896
10897 * Thuban/Model/layer.py (Layer): Remove the
10898 Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
10899 SetDefault*() methods on the layer's classification object.
10900 (Layer.__init__): Use the new SetDefault*() methods in the
10901 Classification class.
10902
10903 * Thuban/Model/load.py (ProcessSession): Use the new ClassData
10904 object instead of a dictionary.
10905
10906 * Thuban/UI/classifier.py (ClassRenderer): New class to
10907 draw the classifications in the dialog box's table.
10908 (Classifier): Modified to use the ClassRenderer class.
10909
10910 * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
10911 methods of the Classification class.
10912
10913 * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
10914 of the ClassData class.
10915
10916 * test/test_classification.py, test/test_layer.py,
10917 test/test_map.py, test/test_session.py: Fix the tests to work
10918 with the above code changes.
10919
10920 2003-02-03 Jonathan Coles <[email protected]>
10921
10922 * Thuban/Model/classification.py (Classification): Added getNull()
10923 to return the NullData reference
10924
10925 * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
10926 Layer.SetStrokeWidth): Modified these functions to change the
10927 null data in the classification rather than keep these values
10928 directly in the Layer class. Menu options to change these values
10929 work again.
10930
10931 2003-01-28 Jonathan Coles <[email protected]>
10932
10933 * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
10934 Fixed crashing problem on some systems. Dialog box shows
10935 classification data.
10936
10937 * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
10938 Colors in the tree view.
10939
10940 * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
10941 the tree info for classifications. Commented out unnecessary lines.
10942
10943 * Thuban/Model/classification.py (Classification.TreeInfo): New
10944 function to add information about the classification into the
10945 tree view.
10946
10947 2003-01-27 Jan-Oliver Wagner <[email protected]>
10948
10949 * Thuban/__init__.py (_): New.
10950
10951 * Thuban/Model/classification.py, Thuban/Model/extension.py,
10952 Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
10953 Thuban/Model/session.py, Thuban/UI/application.py,
10954 Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
10955 Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
10956 Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
10957 Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
10958 Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
10959
10960 2003-01-27 Jonathan Coles <[email protected]>
10961
10962 * Thuban/Model/layer.py: Classification initialization calls.
10963
10964 * Thuban/Model/classification.py: Created class to encapsulate
10965 a layer classification. Supports specific data points and
10966 ranges.
10967
10968 * Thuban/Model/load.py: Added support for loading classification
10969 information.
10970
10971 * Thuban/Model/save.py: Added support for saving classification
10972 information.
10973
10974 * Thuban/UI/classifier.py: Initial class for a dialog box for
10975 specifying classification information.
10976
10977 * Thuban/UI/mainwindows.py: Support for opening the classifier
10978 dialog.
10979
10980 * Thuban/UI/renderer.py: Support for drawing a layer with the
10981 classification information.
10982
10983 * Data/iceland_sample_class.thuban: iceland_sample with
10984 classification data.
10985
10986 * test/test_classification: Tests for the Classification class.
10987
10988 2002-12-09 Bernhard Herzog <[email protected]>
10989
10990 * test/test_command.py: New. Tests for the command classes.
10991
10992 * Thuban/UI/command.py (ToolCommand): New class for tool commands.
10993 (Command.IsTool): New method to distinguish between command
10994 switching tools and other commands.
10995
10996 * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
10997 the tool to avoid direct assignments to instance variables
10998 (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
10999 (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
11000 change the tool
11001
11002 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
11003 active tool's command turns insensitive, disable the tool.
11004 (_tool_command): Use the new ToolCommand class
11005
11006 * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
11007 SelectTool method to change the tool
11008 (iconfile): Use the ToolCommand class
11009
11010 2002-12-03 Bernhard Herzog <[email protected]>
11011
11012 * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
11013 the case of selected items that are not children of Layers or Maps
11014 properly. Previously this bug would trigger an assertion in
11015 wxWindows.
11016
11017 2002-11-06 Frank Koormann <[email protected]>
11018
11019 * Thuban/UI/mainwindow.py: Altered the order of tools in the
11020 toolbar: First now are all navigation tools (Zoom In/Out, Pan,
11021 Full Extent).
11022
11023 2002-10-23 Bernhard Herzog <[email protected]>
11024
11025 * setup.py (setup call): version now 0.1.3
11026
11027 * MANIFEST.in: Add the files in test/
11028
11029 * test/README: Add note about tests requiring the iceland data
11030
11031 * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
11032 copyright notice.
11033
11034 2002-10-18 Bernhard Herzog <[email protected]>
11035
11036 * test/test_map.py
11037 (TestMapWithContents.test_projected_bounding_box): Use an explicit
11038 epsilon.
11039
11040 * test/support.py (FloatComparisonMixin.assertFloatEqual)
11041 (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
11042 message if the assertion fails and don't return the return value
11043 of self.assert_. In assertFloatSeqEqual the return meant that not
11044 all items of the sequence were compared.
11045
11046 2002-09-20 Bernhard Herzog <[email protected]>
11047
11048 * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
11049
11050 * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
11051
11052 * test/test_map.py (TestMapWithContents.test_tree_info): Create
11053 the string with the bounding box on the fly because of platform
11054 differences in the way %g is handled.
11055
11056 * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
11057 DBFfile too because Thuban layers can't yet cope missing DBF
11058 files.
11059
11060 2002-09-20 Bernhard Herzog <[email protected]>
11061
11062 * test/test_menu.py: Use initthuban instead of
11063 add_thuban_dir_to_path to initialize Thuban.
11064
11065 * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
11066 Mixin class for float comparisons
11067 (SubscriberMixin): New. Mixin class to test messages sent through
11068 the Connector class
11069
11070 * test/README: Fix a typo and add the -v flag to the command for
11071 individual tests
11072
11073 * test/test_session.py: New. Test cases for Thuban.Model.session
11074
11075 * test/test_proj.py: New. Test cases for Thuban.Model.proj
11076
11077 * test/test_map.py: New. Test cases for Thuban.Model.map
11078
11079 * test/test_layer.py: New. Test cases for Thuban.Model.layer
11080
11081 * test/test_label.py: New. Test cases for Thuban.Model.label
11082
11083 * test/test_connector.py: New. Test cases for Thuban.Lib.connector
11084
11085 * test/test_color.py: New. Test cases for Thuban.Model.color
11086
11087 * test/test_base.py: New. Test cases for Thuban.Model.base
11088
11089 2002-09-13 Bernhard Herzog <[email protected]>
11090
11091 * Thuban/Model/session.py (Session.forwarded_channels): Forward
11092 the CHANGED channel too.
11093
11094 * Thuban/Model/map.py (Map.forwarded_channels): Forward the
11095 CHANGED channel too.
11096 (Map.__init__): Call the Modifiable constructor as well.
11097
11098 * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
11099 event if the modified flag changes.
11100 (Modifiable.changed): Tweak the doc-string.
11101
11102 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
11103 (MainWindow.set_position_text): Put the code that puts the text
11104 with the mouse position into the status bar into the new method
11105 set_position_text so that it can overwritten in derived classes.
11106
11107 2002-09-12 Bernhard Herzog <[email protected]>
11108
11109 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
11110 message box on the main window.
11111
11112 2002-09-11 Bernhard Herzog <[email protected]>
11113
11114 * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
11115 the 'E' because it's less likely to interfere with other menu
11116 entries.
11117 (MainWindow.build_menu): remove an incorrect comment.
11118
11119 2002-09-10 Bernhard Herzog <[email protected]>
11120
11121 * Thuban/UI/mainwindow.py (MainWindow.Map): New.
11122 (_tool_command): Add sensitive parameter
11123 (_has_visible_map): Sensitivity callback to tools and other
11124 commands that require a visible map. Use it in map_zoom_in_tool,
11125 map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
11126 and map_full_extent
11127
11128 2002-09-06 Bernhard Herzog <[email protected]>
11129
11130 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
11131 VIEW_POSITION
11132
11133 2002-09-04 Frank Koormann <[email protected]>
11134
11135 * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
11136
11137 2002-09-02 Bernhard Herzog <[email protected]>
11138
11139 * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
11140 wxWindows already and our implementation doesn't work correctly
11141 with wxGTK 2.3:
11142 (MapCanvas.__init__): Remove the instance variable
11143 (MapCanvas.OnPaint): Always call do_redraw when there's a map to
11144 be drawin
11145 (MapCanvas.OnIdle): Removed.
11146
11147 * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
11148 a parameter to determine the size of the rectangle.
11149 (MapCanvas.find_shape_at): Create the box around the point on a
11150 layer by layer basis and make the size depend on the shape type.
11151 This solves a problem with the selection of point shapes at the
11152 border of the layer's bounding box
11153
11154 2002-08-30 Bernhard Herzog <[email protected]>
11155
11156 * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
11157 for the sensitivity of remove layer.
11158 (_can_remove_layer): New. Sensitivity callback for remove layer
11159 (Command layer_remove): Use _can_remove_layer
11160
11161 * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
11162 determine whether a given layer can be deleted.
11163
11164 * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
11165 (MapCanvas.do_redraw): Get rid of the unused update_region
11166 instance variable
11167
11168 * Thuban/UI/view.py: Add/update some doc-strings.
11169
11170 * test/: new subdirectory with a bunch of unit tests.
11171
11172 * test/README, test/test_table.py, test/test_save.py,
11173 test/test_menu.py, test/test_load.py: Initial set of tests and
11174 brief instructions on how to run them
11175
11176 2002-08-29 Bernhard Herzog <[email protected]>
11177
11178 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
11179 arcs with multiple parts.
11180
11181 * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
11182 Handle degenrate rectangles.
11183
11184 * Thuban/Model/table.py: Make writing records work correctly:
11185 (Table.__init__): Keep track of whether the DBF is open for
11186 writing
11187 (Table.write_record): Open the DBF file for writing when necessary
11188
11189 2002-08-27 Bernhard Herzog <[email protected]>
11190
11191 * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
11192 dbf files only for reading by default. Use a new writable dbf
11193 object for writing.
11194
11195 2002-08-26 Bernhard Herzog <[email protected]>
11196
11197 * Thuban/UI/mainwindow.py: Refactor the context creation:
11198 (MainWindow.Context): New method to return a context
11199 (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
11200 new method
11201
11202 * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
11203 layer table specific code from TableGrid into LayerTableGrid
11204 (TableFrame, LayerTableFrame): Split the layer table specific code
11205 from TableFrame into LayerTableFrame
11206 (LayerTableGrid.select_shape): Remove a debug print
11207
11208 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
11209 LayerTableFrame
11210
11211 2002-08-23 Bernhard Herzog <[email protected]>
11212
11213 * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
11214 absolute filename.
11215
11216 2002-08-22 Bernhard Herzog <[email protected]>
11217
11218 * Thuban/Model/table.py (Table.write_record): New method to write
11219 records.
11220 (Table.__init__): Open the DBF file for writing too.
11221
11222 * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
11223 into the underlying table.
11224
11225 * extensions/shapelib/shapefil.h (DBFCommit),
11226 extensions/shapelib/dbfopen.c (DBFCommit): New API function to
11227 commit any changes made to the DBF file.
11228
11229 * Thuban/UI/mainwindow.py (make_check_current_tool)
11230 (_tool_command): Put the code that generates the "checked"
11231 callback into a separate function so that we can reuse it
11232 elsewhere
11233
11234 * Thuban/Model/save.py (Saver): New class to handle serializing a
11235 session into an XML file. The main reason to introduce a class is
11236 that applications built on Thuban can derive from it so that they
11237 can save additional information in a session file.
11238 (save_session): Delegate almost all the work to the Saver class.
11239 Rename the filename argument to file because it may be a file like
11240 object now.
11241
11242 * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
11243 code. Remove the little test code which would be executed when the
11244 module is run as a script which didn't work anymore since it can't
11245 import the other Thuban modules.
11246 (ProcessSession, load_session): Refactor the ProcessSession to
11247 have one method for each element start and end tag so that derived
11248 classes can easily override the processing of individual tags.
11249 Also, always parse with namespaces enabled because applications
11250 built on top of Thuban will likely use namespaces if they extend
11251 the session file format.
11252
11253 2002-08-21 Bernhard Herzog <[email protected]>
11254
11255 * setup.py (ThubanInstall.run): Don't repr install_lib_orig
11256 because thubaninit_contents will do it for us.
11257
11258 2002-08-16 Jan-Oliver Wagner <[email protected]>
11259
11260 * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
11261 tree window already open
11262
11263 2002-08-15 Bernhard Herzog <[email protected]>
11264
11265 * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
11266 with self.
11267
11268 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
11269 when we have actually captured it.
11270
11271 * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
11272 shapefile and destroy the table.
11273
11274 * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
11275
11276 2002-08-14 Bernhard Herzog <[email protected]>
11277
11278 * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
11279 instance variable columns
11280 (RecordTable.GetTypeName): row and col may be negative in some
11281 cases.
11282
11283 * setup.py (InstallLocal.initialize_options)
11284 (InstallLocal.finalize_options, InstallLocal.user_options): New
11285 option create-init-file to build a thubaninit.py when running
11286 install_local
11287 (InstallLocal.run): Create the thubaninit.py module when requested
11288 (thubaninit_contents): Split the template into several parts and
11289 create a new function thubaninit_contents that creates the
11290 contents of a thubaninit module.
11291 (ThubanInstall.run): Use the new function to create the thubaninit
11292 module.
11293
11294 2002-07-30 Bernhard Herzog <[email protected]>
11295
11296 * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
11297 cleanup.
11298 (ThubanApplication.MainLoop): Extend to automatically call OnExit.
11299
11300 * Thuban/Model/session.py (Session.Destroy): Don't bypass the
11301 direct base class' Destroy method.
11302
11303 * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
11304 layers.
11305 (Map.Destroy): Destroy the label_layer as well and call the
11306 inherited Desatroymethod first so that no more messages are
11307 issued.
11308 (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
11309 message if the stacking order actually has changed. Add
11310 doc-strings.
11311 (Map.BoundingBox): Correct the doc-string.
11312 (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
11313 (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
11314
11315 * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
11316 all labels.
11317
11318 2002-07-29 Bernhard Herzog <[email protected]>
11319
11320 * Thuban/Model/map.py (Map.subscribe_layer_channels)
11321 (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
11322 to a layer's channels into separate methods.
11323 (Map.RemoveLayer, Map.AddLayer): Call the new methods
11324 (Map.Destroy): Unsubscribe from a layer's channels before
11325 destroying it.
11326
11327 * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
11328 selected_layer parameter to searched_layer which is the layer to
11329 search in.
11330 (MapCanvas.SelectShapeAt): New parameter layer to restrict the
11331 search to that layer. Return the selected layer and shape.
11332
11333 * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
11334 typo
11335
11336 2002-07-24 Bernhard Herzog <[email protected]>
11337
11338 * Thuban/UI/application.py (ThubanApplication.create_session):
11339 Extend the doc string.
11340 (ThubanApplication.subscribe_session)
11341 (ThubanApplication.unsubscribe_session): New methods to
11342 subscribe/unsubscribe to/from session channels.
11343 (ThubanApplication.SetSession): Call the new methods here.
11344 (ThubanApplication.maps_changed, ThubanApplication.set_map):
11345 Renamed set_map to maps_changed. Its now a subscriber for
11346 MAPS_CHANGED.
11347
11348 * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
11349 x-coordinate in case of simple clicks
11350
11351 * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
11352 don't pass it as a parameter
11353
11354 * Thuban/Model/session.py (Session.RemoveMap): New
11355
11356 * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
11357 window size into a parameter.
11358
11359 2002-07-23 Bernhard Herzog <[email protected]>
11360
11361 * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
11362 just commands.
11363
11364 * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
11365 parameter list a bit to allow setting the window title and the
11366 initial message in the status bar. Update the callers.
11367
11368 * Thuban/UI/application.py (ThubanApplication.OnInit)
11369 (ThubanApplication.CreateMainWindow): Put the mainwindow
11370 instantiation into a separate method so that it can be overridden
11371 by a subclass.
11372
11373 2002-07-19 Bernhard Herzog <[email protected]>
11374
11375 * Thuban/Model/session.py: Issue a CHANGED message every time
11376 another changed message is issued to make it easier to get
11377 notified of changes.
11378 (Session): Update the doc string
11379 (Session.forward): Issue changed-events as CHANGED as well.
11380 (Session.changed): Overwrite the inherited version to issue
11381 CHANGED events as well.
11382
11383 * Thuban/UI/tree.py: We can now simply subscribe to the session's
11384 CHANGED channel to be informed of changes.
11385 (SessionTreeCtrl.session_channels): Not needed any longer.
11386 (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
11387 Only have to (un)subscribe CHANGED
11388
11389 * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
11390
11391 * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
11392 for the wxPython locale bug to __init__.py so that it's
11393 automatically executed by anybody using UI code from Thuban.
11394
11395 2002-07-18 Bernhard Herzog <[email protected]>
11396
11397 * Thuban/UI/main.py (main): app no longer needs to be global
11398
11399 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
11400 as parameter and store it in an instance variable
11401 (MainWindow.invoke_command, MainWindow.update_command_ui)
11402 (MainWindow.save_modified_session, MainWindow.NewSession)
11403 (MainWindow.OpenSession, MainWindow.SaveSession)
11404 (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
11405 application object.
11406
11407 * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
11408 the main window with self.
11409
11410 * Thuban/UI/context.py: New module with the context class
11411
11412 * Thuban/UI/command.py (Command): Update doc string.
11413
11414 * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
11415 MainWindow.update_command_ui): Pass an instance of the context
11416 class to the command's methods
11417 (check_current_tool, call_method): Handle the new context
11418 implementation
11419
11420 * Examples/simple_extensions/simple_tool.py (simple_tool,
11421 check_simple_tool): Handle the new context implementation
11422
11423 * Examples/simple_extensions/simple_command.py (simple_command):
11424 Handle the new context implementation. Update the comments about
11425 the context.
11426
11427 * Thuban/UI/application.py (ThubanApplication.SetSession): Add
11428 doc-string
11429 (ThubanApplication.Session): New method to return the session
11430 object
11431
11432 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
11433 interactor's selected_layer may not be a layer of the current
11434 session when the tree is updated while a new session is being set.
11435
11436 2002-07-17 Bernhard Herzog <[email protected]>
11437
11438 * Thuban/UI/tree.py (color_string): Removed. No longer used.
11439 (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
11440 update_tree into update_tree and add_items. The tree now uses a
11441 more generic way to display the contents of the tree.
11442 (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
11443
11444 * Thuban/Model/layer.py (Layer.TreeInfo),
11445 Thuban/Model/extension.py (Extension.TreeInfo),
11446 Thuban/Model/map.py (Map.TreeInfo),
11447 Thuban/Model/session.py (Session.TreeInfo):
11448 Add TreeInfo methods to implement the new tree view update scheme
11449
11450 2002-07-16 Bernhard Herzog <[email protected]>
11451
11452 * Thuban/UI/application.py: Don't use "import from" for the
11453 MainWindow. It can't always be resolved.
11454 (ThubanApplication.OnInit): change reference to MainWindow
11455 accordingly.
11456
11457 * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
11458 completely
11459
11460 2002-07-10 Bernhard Herzog <[email protected]>
11461
11462 * setup.py (create_init_module): New configurable variable whose
11463 default depends on the platform we're running on.
11464 (ThubanInstall.initialize_options): Initialize
11465 self.create_init_module from the global create_init_module
11466 (ThubanInstall.user_options): indictate that the options
11467 create-init-module and init-module-dir have arguments.
11468
11469 * setup.py: In the setup call change the version number to include
11470 cvs.
11471
11472 * MANIFEST.in: Add the files in Examples
11473
11474 2002-07-09 Bernhard Herzog <[email protected]>
11475
11476 * setup.py: In the setup call, use the thuban homepage as the
11477 value of the url parameter.
11478
11479 * Examples: New subdirectory for examples.
11480
11481 * Examples/simple_extensions/simple_tool.xpm,
11482 Examples/simple_extensions/simple_tool.py,
11483 Examples/simple_extensions/simple_command.py,
11484 Examples/simple_extensions/README: Simple examples showing how to
11485 add new commands and tools.
11486
11487 * setup.cfg (bdist_rpm): Add the default value for prefix and tell
11488 bdist_rpm that we also have an install script.
11489 (bdist_inno): Add 2002 to the copyright notice.
11490
11491 * setup.py: Create a file in python's site-packages directory to
11492 make installation of Thuban as a library easier.
11493 (ThubanInstall.user_options): Add two new options,
11494 create-init-module and init-module-dir
11495 (ThubanInstall.expand_with_pure_python_dirs): New method to expand
11496 filenames for installation in the default directories.
11497 (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
11498 the inherited methods to capture some filenames before they're
11499 transformed too much by distutils.
11500 (ThubanInstall.run): Create the init module if requested.
11501 (ThubanInstall.thuban_init_filename): New method to return the
11502 full name of the init module.
11503 (ThubanInstall.get_outputs): Append the filename of the init
11504 module.
11505
11506 2002-07-08 Bernhard Herzog <[email protected]>
11507
11508 * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
11509 handle the prefix properly which means that the default for the
11510 installation prefix should be /usr for RPMs and /usr/local when
11511 doing a normal source install.
11512 (bdist_rpm_install_script): Script to override the default install
11513 commands in the specfile generated by the bdist_rpm command.
11514 (thuban_bdist_rpm.user_options): Add a prefix option
11515 (thuban_bdist_rpm.initialize_options): Init the prefix option.
11516 Create the script files for the spec files as empty files here
11517 (thuban_bdist_rpm._make_spec_file): Override the inherited method
11518 to fill the script files with content.
11519
11520 * Thuban/Model/save.py (relative_filename): Wrapper around
11521 Thuban.Lib.fileutil.relative_filename that accepts an empty dir
11522 argument. save_session now automatically uses this version,
11523 solving a problem when saving to a relative filename.
11524
11525 * setup.py: In the setup call, make sure that the library
11526 directories are under $prefix/lib not directly under $prefix.
11527
11528 2002-06-20 Jan-Oliver Wagner <[email protected]>
11529
11530 * Thuban/Model/extension.py: new module to handle extension objects.
11531 * Thuban/Model/messages.py: new messages for extensions.
11532 * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
11533 Session.AddExtension): new for handling extensions.
11534 Also some other minor changes to round up extension handling.
11535 * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
11536 of Extension titles and title and names of its objects.
11537
11538 2002-05-29 Bernhard Herzog <[email protected]>
11539
11540 * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
11541 the events for a command.
11542 (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
11543 Call bind_command_events to bind the events. add_toolbar_command
11544 can now bind events too so that it's possible to have commands
11545 that are only available through the toolbar.
11546 (MainWindow.init_ids): New instance variable events_bound to keep
11547 track of for which commands events have been bound.
11548
11549 2002-05-28 Bernhard Herzog <[email protected]>
11550
11551 * Thuban/UI/menu.py: New module to build and manage menus.
11552
11553 * Thuban/UI/mainwindow.py: Remove some unused imports.
11554 (MainWindow.__init__, main_menu): move the definition of the main
11555 menu from __init__ to the Menu instance main_menu.
11556 (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
11557 build the menu bar and sub-menus from a menu description.
11558
11559 * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
11560 startup file
11561 (ThubanApplication.read_startup_files): New method to run
11562 ~/.thuban/thubanstart.py
11563
11564 * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
11565 Move the toolbar definition to the Menu instance main_toolbar.
11566 (MainWindow.build_toolbar): New method to build the toolbar
11567 similar to the build_menu methods
11568
11569 2002-05-23 Bernhard Herzog <[email protected]>
11570
11571 * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
11572 layer_outline_color. Fix it in the definition of the command too.
11573
11574 * Thuban/UI/command.py (Command): Fix typo in doc string
11575
11576 2002-05-22 Bernhard Herzog <[email protected]>
11577
11578 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
11579 in the docstring
11580
11581 2002-05-15 Bernhard Herzog <[email protected]>
11582
11583 * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
11584 when the shapefile is empty.
11585 (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
11586 now return None for empty shapefiles. Update doc-strings.
11587
11588 * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
11589 the layer's bbox being None.
11590
11591 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
11592 layer's bbox being None.
11593
11594 * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
11595 necessary.
11596 (MapCanvas.__init__): New instance variables, last_selected_layer
11597 and last_selected_shape to determine how the selection has
11598 changed.
11599
11600 * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
11601 AutoSizeColumns because it will cause a traversal of the entire
11602 table which for large .dbf files will take a very long time.
11603
11604 2002-05-14 Bernhard Herzog <[email protected]>
11605
11606 * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
11607 maximum depth for the tree than shapelib does by default.
11608
11609 2002-05-10 Bernhard Herzog <[email protected]>
11610
11611 * setup.py (py_modules): The shptree modules doesn't have a
11612 wrapper, so don't include it in the py_modules
11613
11614 2002-05-08 Bernhard Herzog <[email protected]>
11615
11616 * extensions/shapelib/shptree.c (compare_ints): Make arguments
11617 const void * as in the qsort prototype
11618 (SHPTreeFindLikelyShapes): Remove some unused variables.
11619
11620 * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
11621 maintains to redraw the window during a drag.
11622 (MapCanvas.unprojected_rect_around_point): New method to determine
11623 a small region around a point for hit-testing.
11624 (MapCanvas.find_shape_at): Only test the shapes in a small region
11625 around the point.
11626
11627 * setup.py: Increment the version to 0.1.2
11628
11629 * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
11630 debug print and set session to None after unsubscribing
11631
11632 2002-05-07 Bernhard Herzog <[email protected]>
11633
11634 * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
11635 the file to have a .thuban extension.
11636
11637 * Thuban/UI/tree.py (session_channels): New class constant with
11638 all the session channels to subscribe to to update the tree
11639 (SessionTreeCtrl.session_changed): Remember the session so that we
11640 can unsubscribe properly. Use the new class constant to
11641 unsubscribe from the old session and subscribe to the new one.
11642 (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
11643 subscriptions of the SessionTreeCtrl.
11644 (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
11645
11646 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
11647 Session Tree" command to the file menu.
11648
11649 * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
11650 as update_region to the renderer.
11651
11652 * Thuban/UI/renderer.py
11653 (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
11654 update box is now directly a tuple, not a wxRect anymore.
11655
11656 * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
11657 prints.
11658
11659 2002-05-07 Bernhard Herzog <[email protected]>
11660
11661 * setup.py: Add the shptree extension module. See
11662 extensions/pyshapelib/ChangeLog for more details.
11663
11664 * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
11665 extensions/shapelib/dbfopen.c: Really update to the versions of
11666 shapelib 1.2.9. For some reason it wasn't really done on
11667 2002-04-11.
11668
11669 * extensions/shapelib/shptree.c: Modified version of shptree.c of
11670 shapelib 1.2.9. The only real difference is the use of qsort
11671 instead of a bubble sort implementation
11672
11673 * Thuban/Model/layer.py (Layer.__init__): New instance variable
11674 shapetree to hold the shapelib quadtree for the shapefile
11675 (Layer.open_shapefile): Create the quad tree.
11676 (Layer.ShapesInRegion): New method to return the ids of shapes in
11677 a given region using the quad tree.
11678
11679 * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
11680 comment
11681 (draw_polygon_shape): Accept both arcs and polygons.
11682 (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
11683 the api.
11684
11685 * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
11686 return the shape ids to be rendered in a given layer.
11687 (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
11688 ids. Use draw_polygon_shape to draw arc shapes as well.
11689 (ScreenRenderer.RenderMap): New parameter for the rectangle that
11690 has to be updated
11691 (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
11692 calling it's ShapesInRegion method.
11693
11694 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
11695 update_region for the update region.
11696 (MapCanvas.OnPaint): Maintain the update region
11697 (MapCanvas.do_redraw): Pass the bounding box of the update_region
11698 to the renderer when drawing the bitmap. Reset the update_region.
11699
11700 2002-05-03 Bernhard Herzog <[email protected]>
11701
11702 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
11703 MainWindow.OpenSession): Change the file extension of the session
11704 files to .thuban
11705
11706 * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
11707 Move the map channels to be forwarded by the session into the
11708 class constant with forwarded_channels. Also add
11709 LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
11710 forwarded_channels
11711
11712 * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
11713 typo and some rewording).
11714
11715 2002-05-02 Bernhard Herzog <[email protected]>
11716
11717 * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
11718 around to speed up most redraws:
11719 (MapCanvas.__init__): New instance variable bitmap which holds the
11720 bitmap
11721 (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
11722 self.bitmap to draw.
11723 (MapCanvas.full_redraw): New method to force a full redraw
11724 including the bitmap
11725 (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
11726 make sure the bitmap is redrawn.
11727 (MapCanvas.projection_changed, MapCanvas.set_view_transform,
11728 MapCanvas.shape_selected): Call full_redraw instead of readraw to
11729 make sure the bitmap is redrawn.
11730 (MapCanvas.OnSize): New method to handle size events so that the
11731 bitmap can be redrawn.
11732
11733 2002-04-29 Bernhard Herzog <[email protected]>
11734
11735 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
11736 canvas' VIEW_POSITION event
11737 (MainWindow.view_position_changed): Handler for VIEW_POSITION.
11738 Update the text in the status-bar accordingly.
11739
11740 * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
11741 (MapCanvas.__del__): Implement because Publisher.__del__ has to be
11742 called.
11743 (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
11744 current_position
11745 (MapCanvas.set_current_position): New method to set
11746 current_position. Issue a VIEW_POSITION event
11747 (MapCanvas.CurrentPosition): New public method to return the value
11748 of current_position. Should be called when the VIEW_POSITION event
11749 is processed.
11750 (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
11751 Update the position.
11752 (MapCanvas.OnLeaveWindow): Set the position to None.
11753
11754 * Thuban/UI/messages.py (VIEW_POSITION): New message for the
11755 position in the statusbar
11756
11757 2002-04-26 Frank Koormann <[email protected]>
11758
11759 * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
11760
11761 2002-04-24 Frank Koormann <[email protected]>
11762
11763 * Resources/Bitmaps/identify.xpm: shadow added
11764
11765 * Resources/Bitmaps/fullextent.xpm: new
11766
11767 2002-04-22 Jan-Oliver Wagner <[email protected]>
11768
11769 * Thuban/UI/tree.py (update_tree): added test for None on map bounding
11770 box
11771
11772 2002-04-21 Jan-Oliver Wagner <[email protected]>
11773
11774 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
11775
11776 * Thuban/UI/tree.py (update_tree): added added map extent
11777
11778 * Thuban/UI/mainwindow.py (_method_command): extended by parameter
11779 icon; added map_full_extend as tool
11780
11781 2002-04-19 Jan-Oliver Wagner <[email protected]>
11782
11783 * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
11784 saving _new_ sessions
11785
11786 * Thuban/Model/session.py (create_empty_session): new session
11787 don't have a filename (set to None)
11788
11789 * Thuban/UI/tree.py (update_tree): added filename and modified flag
11790
11791 * Thuban/Model/load.py (ProcessSession): convert projection
11792 parameters from unicode to regular string
11793
11794 * Data/iceland_sample.session: Added UTM Zone 26 projection.
11795
11796 2002-04-11 Bernhard Herzog <[email protected]>
11797
11798 * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
11799 extensions/shapelib/dbfopen.c: Update to the versions of shapelib
11800 1.2.9
11801
11802 * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
11803 the pyshapelib directoy into the list of include dirs, so that
11804 pyshapelib_api.h can be found.
11805
11806 * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
11807 holds the pyshapelib C-API
11808 (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
11809 pyshapelib_api to access the shapelib functions.
11810 (initwxproj): Import the c_api from the shapelib module and
11811 initialize pyshapelib_api.
11812
11813 2002-04-04 Bernhard Herzog <[email protected]>
11814
11815 * setup.py (thuban_bdist_rpm.initialize_options): Use
11816 initialize_options to create the scripts for the rpm.
11817
11818 * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
11819
11820 2002-04-03 Bernhard Herzog <[email protected]>
11821
11822 * setup.py: Increment version to 0.1.1
11823
11824 * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
11825 Layer" and "Remove Layer" commands from the layer menu to the map
11826 menu
11827
11828 2002-02-15 Bernhard Herzog <[email protected]>
11829
11830 * Thuban/Model/layer.py (Layer.Shape): list append only takes one
11831 argument (python <= 1.5.2 erroneously accepted multiuple
11832 arguments)
11833
11834 2002-02-04 Bernhard Herzog <[email protected]>
11835
11836 * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
11837 RecordGrid in the identifyview.
11838 (IdentifyView.__init__): Use IdentifyGridCtrl instead of
11839 IdentifyListCtrl. The grid allows editing of the values.
11840
11841 * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
11842 implementing a grid for a single row of a thuban table.
11843
11844 * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
11845 layers by default. Easier to use than the previous default of only
11846 searching through the select layer which meant that if no layer
11847 was selected, you couldn't select a shape.
11848
11849 * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
11850
11851 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
11852 stroke_width attribute
11853
11854 * Thuban/Model/save.py (save_session): Write the new stroke_width
11855 attribute
11856
11857 * Thuban/Model/load.py (ProcessSession.startElement): Read the
11858 stroke_width attribute
11859
11860 * Thuban/Model/layer.py (Layer.__init__): New parameter and
11861 instance variable stroke_width
11862 (Layer.SetStrokeWidth): Set the stroke_width.
11863
11864 2002-02-01 Bernhard Herzog <[email protected]>
11865
11866 * extensions/thuban/wxproj.cpp (project_points): Fix two
11867 off-by-one errors in the last loop that joins the various parts
11868 together.
11869
11870 2002-01-14 Bernhard Herzog <[email protected]>
11871
11872 * setup.py (data_dist.make_distribution): Fix some typos
11873
11874 2001-09-18 Bernhard Herzog <[email protected]>
11875
11876 * README: Slight tweaking in preparation for the 0.1 release
11877
11878 * setup.cfg: Add section for sdist to create both tgz and zip
11879 archives
11880
11881 * setup.py: increase version number to 0.1
11882 (data_dist): New command class for data distribution
11883
11884 2001-09-14 Bernhard Herzog <[email protected]>
11885
11886 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
11887 Handle the case of no layer (i.e. layer is None) properly.
11888
11889 * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
11890 Set the initial selection of the combo boxes to reflect the
11891 projection we're starting with in a way that works on windows,
11892 too.
11893
11894 * Thuban/Lib/connector.py (Connector.print_connections): Print the
11895 puiblisher's ids in hex to make it easier to compare them to the
11896 standard repr of python methods
11897
11898 * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
11899 messages
11900
11901 2001-09-13 Bernhard Herzog <[email protected]>
11902
11903 * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
11904 deselect the layer if no layer is selected
11905
11906 * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
11907 idle time when there actually is something to draw. If there's
11908 nothing to draw simply clear the window
11909 (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
11910 (MapCanvas.SetMap): force a redraw in all cases because
11911 FitMapToWindow doesn't always do it.
11912 (MapCanvas.ZoomFactor): Add an optional parameter, center, to
11913 specify the point to move into the center of the window
11914 (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
11915 dragged, zoon in/out by a factor of 2
11916 (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
11917 index, i.e. reversed drawing order) so that objects appearing to
11918 be in from of others are selected first. This is probably mostly
11919 relevant for point shapes where the symbols used may overlap
11920
11921 * Thuban/Model/session.py (create_empty_session): Unset the
11922 modified bit before returning it
11923
11924 * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
11925 create_empty_session session to create the new, empty session.
11926
11927 * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
11928 the tool bitmaps.
11929 (MainWindow.OnClose, MainWindow.save_modified_session): Separate
11930 the code that asks whether the session should be saved into the
11931 new method save_modified_session.
11932 (MainWindow.OpenSession, MainWindow.NewSession): Use the new
11933 method to save modified session here too.
11934
11935 2001-09-11 Bernhard Herzog <[email protected]>
11936
11937 * setup.py (InnoIconItem): fix typo
11938
11939 (thuban_bdist_inno.run):
11940 (bdist_inno.run): Move the decision not to create symlinks on
11941 non-nt platforms to thuban_bdist_inno and do it unconditinally
11942 since we never want to create the symlinks here
11943
11944 2001-09-10 Bernhard Herzog <[email protected]>
11945
11946 * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
11947 identify view immediately
11948
11949 * Thuban/UI/controls.py: New file with two classes RecordListCtrl
11950 and SelectableRecordListCtrl that implement the code shared by the
11951 identify view and the label dialog
11952
11953 * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
11954 new class RecordListCtrl
11955
11956 * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
11957 return value of GetValue is None instead of using it as a boolean
11958 directly so that Zero numbers are handled properly.
11959 (LabelListCtrl): Derive from the new class
11960 SelectableRecordListCtrl
11961
11962 * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
11963 (Proj4Dialog.dialogLayout): Make the window resizable and set the
11964 size of the text control explicitly to make the sizers work on
11965 both Windows and X.
11966
11967 2001-09-07 Bernhard Herzog <[email protected]>
11968
11969 * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
11970 that can limit the search to the currently selected layer.
11971 (MapCanvas.SelectShapeAt): Make sure that the currently selected
11972 layer stays selected even when no shape is found
11973 (MapCanvas.FitRectToWindow): If the rect has zero with or zero
11974 height do nothing (avoids zero division errors)
11975
11976 2001-09-06 Bernhard Herzog <[email protected]>
11977
11978 * Thuban/UI/tree.py (SessionTreeCtrl, SessionTreeView.__init__):
11979 Correct the spelling of SessionTreeCtrl. dabbrev is too damn
11980 convenient :-)
11981 (SessionTreeCtrl.__init__, SessionTreeCtrl.update_tree): Introduce
11982 a new instvar layer_to_item to map layers to tree items
11983 (SessionTreeCtrl.layer_selected): Select the appropriate tree item
11984 to match the current selection in the interactor
11985
11986 * Thuban/UI/interactor.py (Interactor.SelectedLayer):
11987 (Interactor.HasSelectedLayer): New methods to query the current
11988 selection
11989
11990 * Thuban/UI/mainwindow.py (MainWindow.current_layer):
11991 (MainWindow.has_selected_layer): Simply call the appropriate
11992 interactor method
11993
11994 * Thuban/UI/mainwindow.py (MainWindow.__init__):
11995 (MainWindow.LayerShowTable):
11996 (MainWindow.identify_view_on_demand): Store the interactor in an
11997 instvar and use that reference instead of going through main.app
11998
11999 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
12000 * Thuban/UI/application.py (ThubanApplication.OnInit):
12001 * Thuban/UI/main.py (main): Create the session tree view in main
12002 with the new mainwindow method ShowSessionTree and not directly
12003 the application's OnInit method
12004
12005 * Thuban/UI/tree.py (myTreeCtrlPanel):
12006 (SessioinTreeCtrl): Rename to SessioinTreeCtrl and turn it into a
12007 TreeCtrl isntead of a panel. This affects most method since we now
12008 refer to self instead of self.tree
12009 (SessionTreeView): New class implementing a non-modal dialog
12010 showing the session tree.
12011
12012 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Pass the
12013 layer to the tableview dialog.
12014
12015 * Thuban/UI/tableview.py: Add some doc-strings
12016 (TableGrid):
12017 (TableGrid.OnRangeSelect):
12018 (TableGrid.OnSelectCell):
12019 (TableFrame.__init__):
12020 (TableFrame.row_selected):
12021 Selecting rows in the grid view now updates the selected shapes
12022 through the TableFrame. To achieve this we derive TableGrid from
12023 Publisher and introduce the message type ROW_SELECTED which the
12024 TableFrame subscribes to and which is issued by OnRangeSelect and
12025 OnSelectCell
12026
12027 (DataTable.SelectRow): Removed because it's no longer needed in
12028 the row/shape selection scheme
12029
12030 * Thuban/UI/dialogs.py: New file implementing common classes for
12031 dialogs
12032
12033 * Thuban/UI/tableview.py (TableGrid.__init__): Don't subscribe to
12034 the SELECTED_SHAPE message anymore. This is now handled by the
12035 parent.
12036 (TableGrid.select_shape): Only update the selection if the shape
12037 is not None.
12038 (TableFrame): Inherit from the new NonModalDialog class.
12039 (TableFrame.__init__, TableFrame.select_shape): Handle the
12040 SELECT_SHAPE message.
12041 (TableFrame.OnClose): Extend the inherited method to unsubscribe
12042 SELECT_SHAPE
12043
12044 * Thuban/UI/mainwindow.py (MainWindow.init_dialogs):
12045 (MainWindow.add_dialog):
12046 (MainWindow.dialog_open):
12047 (MainWindow.remove_dialog):
12048 (MainWindow.get_open_dialog): New methods to maintain a dictionary
12049 of opened non-modal dialogs.
12050
12051 (MainWindow.__init__): Initialize the new non-modal dictionary
12052 management code
12053 (MainWindow.LayerShowTable): maintain separate dialogs for each
12054 table using the non-modal dialog management code to only open a
12055 view once for each table.
12056
12057 (MainWindow.IdentifyTool):
12058 (MainWindow.__init__):
12059 (MainWindow.identify_view_on_demand): Don't open the identify view
12060 in IdentifyTool anymore. This will be done automatically by the
12061 new method identify_view_on_demand which handles the
12062 SELECTED_SHAPE message so that the identify view will be opened on
12063 demand
12064
12065 * Thuban/UI/identifyview.py (IdentifyListCtrl.__init__): Remove
12066 the interactor argument. The SELECTED_SHAPE message is now handled
12067 by the parent.
12068 (IdentifyView.__init__): Add the interactor argument so that we
12069 can handle the SELECTED_SHAPE message here
12070 (IdentifyView.selected_shape): New method to handle the
12071 SELECTED_SHAPE messages
12072
12073 * Thuban/UI/identifyview.py (IdentifyView): Derive from the new
12074 NonModalDialog class
12075 (IdentifyView.OnClose): Extend the inherited version to
12076 unsubscribe SELECT_SHAPE
12077
12078 * Thuban/Model/session.py (Session.UnsetModified): Remove debug prints
12079
12080 2001-09-05 Bernhard Herzog <[email protected]>
12081
12082 * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
12083
12084 * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
12085 interactor to pass through to the MapCanvas
12086
12087 * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
12088 argument to the MainWindow constructor to get rid of the ugly hack
12089 that made main.app available early just so that the mapcanvas
12090 could access the interactor object.
12091
12092 2001-09-04 Bernhard Herzog <[email protected]>
12093
12094 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): New method
12095 that runs a modal message box
12096 (MainWindow.OnClose): Use the new method
12097 (MainWindow.RemoveLayer): Just do nothing in case no layer is
12098 selected. The command should be grayed out anyway, so there's no
12099 need to pop up a message box.
12100 (MainWindow.AddLayer): Pop up a message box with an error message
12101 if the shape file can't be opened
12102
12103 * Thuban/Model/layer.py (Layer.__init__): Open the shapefile
12104 immediately. This will cause an exception in case the file can't
12105 be opened and we can display an appropriate message.
12106
12107 * MANIFEST.in: Add extensions/pyprojection/LICENSE
12108
12109 * setup.py (thuban_bdist_rpm): New class implementing a Thuban
12110 specific bdist_rpm command.
12111
12112 * Thuban/UI/main.py: Catch ImportError exceptions when importing
12113 the locale module because it may not be available on some
12114 installations.
12115
12116 * extensions/pyprojection/LICENSE: Copy of the license text in
12117 Projection.i. Having it in a separate file makes it easier to
12118 refer to license text in e.g. RPMs
12119
12120 2001-09-03 Bernhard Herzog <[email protected]>
12121
12122 * setup.py: use wx-config instead of wxgtk-config because it's
12123 more generic
12124
12125 * setup.py (ThubanInstall.get_outputs): Add the symlink in
12126 <prefix>/bin to the outputs
12127 (ThubanInstall.link_file): New method to link files. We need this
12128 because the standard copy_files refuses to link non-existing
12129 files.
12130 (ThubanInstall.run): Remove the leading install root from the
12131 script filename if an install root was specified and use the new
12132 link_file method
12133
12134 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
12135 the window when the first layer is added to the map.
12136
12137 * setup.py (ThubanInstall.run): Honor the build root (self.root)
12138 when linking thuban.py to <prefix>/bin
12139
12140 2001-08-31 Bernhard Herzog <[email protected]>
12141
12142 * setup.py: In the setup call, the install parameters shouldn't
12143 have trailing slashes because distutils on non-posix platforms
12144 doesn't like that. The same applies to other directories like
12145 "Resources/Bitmaps"
12146
12147 In the configuration section for nt, move the wxWindows directory
12148 optins into the part clearly marked as editable.
12149
12150 (InstallLocal.initialize_options):
12151 (InstallLocal.user_options): remove the currently unused debug
12152 flag
12153 (thuban_build_py.find_all_modules): Add this method so that it
12154 works for our case of having packages and modules in one
12155 distribution as well.
12156 (ThubanInstall.initialize_options):
12157 (ThubanInstall.finalize_options):
12158 (ThubanInstall.user_options):
12159 (ThubanInstall.boolean_options): Add new options, do-symlink and
12160 extra files. Since these are the first ThubanInstall specific
12161 options, override user_options and boolean_options
12162 (ThubanInstall.run): Honor the new do-symlink and extra-files
12163 options.
12164 (ThubanInstall.get_outputs): Add to override the base-class's
12165 version and add the extra-files to the outputs
12166 (bdist_inno): New class for windows distributions with Inno Setup
12167 (InnoIconItem): Helper class for bdist_inno
12168 (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
12169 this together with the appropriate parameters, to the setup call.
12170
12171 * setup.cfg (bdist_inno): added new section for the inno setup
12172 installer
12173
12174 * Thuban/UI/tree.py (myTreeCtrlPanel.__init__): New inst var
12175 changing_selection to avoid recursive selection events when
12176 modifying the selection in response to a selection event.
12177 (myTreeCtrlPanel.normalize_selection): Set the new inst var when
12178 changing the tree's selection.
12179 (myTreeCtrlPanel.OnSelChanged): Only normalize the selection when
12180 we're not being called indirectly from normalize_selection.
12181
12182 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): Call
12183 event.Check only if the command is actuall checkable.
12184 (MainWindow.__init__): Call the toolbar's Realize method to make
12185 sure that the items are actually shown
12186
12187 2001-08-28 Bernhard Herzog <[email protected]>
12188
12189 * setup.py: Fix some doc strings
12190
12191 * ChangeLog: started
12192

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26