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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

    * Thuban/version.py: Bugfix determination of SQLite on old and recent
        systems (support pysqlite1 and pysqlite2)


1 2006-06-28 Didrik Pinte <[email protected]>
2
3 * Thuban/version.py: Bugfix determination of SQLite on old and recent
4 systems (support pysqlite1 and pysqlite2)
5
6 2006-06-27 Frank Koormann <[email protected]>
7
8 * Thuban/version.py: Bugfix determination of SQLite on old systems.
9
10 2006-05-17 Didrik Pinte <[email protected]>
11 * Extensions/ogr/__init__.py : updated test for win32 and correct
12 imports
13
14 2006-05-15 Didrik Pinte <[email protected]>
15 Ashamed ... still some tabs in the files
16
17 * Thuban/version.py : tabs removed
18 * Thuban/Model/transientdb.py : tabs removed
19
20 2006-05-15 Didrik Pinte <[email protected]>
21
22 * Thuban/version.py : coding style correction
23 * Thuban/Model/transientdb.py : coding style correction
24
25 2006-05-15 Didrik Pinte <[email protected]>
26
27 * Thuban/version.py : Updated imports to support pysqlite2
28
29 * Thuban/Model/transientdb.py : Updated imports to support pysqlite2
30 Patched the querying system to support the param style of pysqlite2
31
32 2006-04-24 Didrik Pinte <[email protected]>
33 * Extensions/svgexport/__init__.py: The extension now works on win32
34 architecture. Bug #87 corrected.
35
36 2006-04-20 Bernhard Reiter <[email protected]>
37 * Doc/technotes/coding_guidelines.txt: Changed text from CVS to SVN.
38 Removed emacs specific hint and replaced it with a general hint
39 that editors might support writing changelogs.
40
41 2006-04-12 Bernhard Reiter <[email protected]>
42
43 * Thuban/version.py: Changed thuban_release mechanism to use "svn"
44 instead of "cvs".
45
46 2006-03-31 Bernhard Reiter <[email protected]>
47
48 * libraries/thuban/wxproj.cpp: including proj_api.h instead of
49 projects.h now. According the Frank Warmerdam and man pj_init
50 this is the public interface to proj. Thus I have changed PJ to projPJ.
51 And I could remove the hack to avoid clashes with typedef PVALUE
52 and #define LP in projects.h clashing with symbols when trying to
53 build on windows. The file is cleaner and nicer now.
54
55 2006-03-29 Bernhard Reiter <[email protected]>
56
57 * libraries/thuban/wxproj.cpp: undef LP to avoid clash when
58 trying to build with mingw.
59
60 2005-10-18 Bernhard Reiter <[email protected]>
61
62 * Thuban/UI/about.py: remove unused import of getdefaultlocale.
63 Added display of internal encoding to the about dialog text.
64
65 * Extensions/svgexport/__init__.py: changed version to "1.0.0+cvs".
66
67 2005-10-18 Bernhard Reiter <[email protected]>
68
69 Startup improved: We fail right away if the internal encoding could
70 not be determined.
71
72 * Thuban/__init__.py (get_internal_encoding): new.
73
74 * test/test_stringrepresentation.py (class TestInternalEncoding):
75 Preserve the internal encoding for the tests in this class.
76
77 2005-10-17 Bernhard Reiter <[email protected]>
78
79 * test/test_stringrepresentation.py: New file, for now testing
80 that set_internal_coding() is throwing an exception for bad exceptions.
81
82 * Thuban/__init__.py (set_internal_encoding): added a forwards
83 and backward translation, so that we fail early if the
84 internal_encoding is bad.
85
86 2005-10-17 Bernhard Reiter <[email protected]>
87
88 svgexport 1.0.0cvs: Fixed ARC layer writing: No filling is done.
89 You could actually get polylines with filling in between,
90 when the classification for the lines had a fill color.
91 E.g. this happens when you generate a classification from a ramp.
92
93 * Extensions/svgexport/test/test_svgmapwriter.py:
94 New test_export_arc_no_fill(). Extend copyright notice to 2005.
95
96 * Extensions/svgexport/svgmapwriter.py
97 (SVGRenderer.draw_shape_layer_incrementally()):
98 Setting TRANSPARENT_BRUSH for shaptype ARC.
99 Extend copyright notice to 2005.
100
101 * Extensions/svgexport/__init__.py: Extend copyright notice to 2005.
102
103 2005-09-08 Frank Koormann <[email protected]>
104
105 * Doc/manual/thuban-manual.xml (Map Management): Fixed typo reported
106 by Erik (sigra.at.home.se)
107
108 2005-08-18 Jan-Oliver Wagner <[email protected]>
109
110 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
111 Call the right method for the default size.
112
113 2005-08-11 Jan-Oliver Wagner <[email protected]>
114
115 * Extensions/export_shapefile: New.
116
117 * Extensions/export_shapefile/__init__.py: New. Initialize
118 the export_shapefile extension.
119
120 * Extensions/export_shapefile/export_shapefile.py: New.
121 Exports a layer as a Shapefile.
122
123 2005-08-08 Jan-Oliver Wagner <[email protected]>
124
125 * po/de.po: String fixes. This fixes Debian bug #313843.
126
127 2005-07-27 Jan-Oliver Wagner <[email protected]>
128
129 Remove the attributes from the layer element in
130 .thuban files for the save routine.
131 This also solves RT bug #3149,
132 https://intevation.de/rt/webrt?serial_num=3149
133
134 * test/test_load.py: (TestSingleLayer, TestNonAsciiColumnName,
135 TestLayerVisibility, TestSymbolSize, TestClassification, TestLabels,
136 TestLayerProjection, TestJoinedTable, TestLabelLayer): Removed
137 attributes from layer element to classification clnull element.
138
139 * test/test_save.py (SaveSessionTest.testSingleLayer,
140 SaveSessionTest.testLayerProjection,
141 SaveSessionTest.testClassifiedLayer,
142 SaveSessionTest.test_joined_table, SaveSessionTest.test_save_postgis):
143 Removed attributes from layer element to classification clnull element.
144 (test_save_postgis.NonConnectionStore._fetch_table_information):
145 added pretending to have a shape_type.
146
147 * Resources/XML/thuban-1.1.dtd: Make the attributes field
148 and field_type of classification optional.
149
150 * Thuban/Model/classification.py (Classification.TreeItem.build_info):
151 Added output of size.
152
153 * Thuban/Model/load.py (SessionLoader.start_classification):
154 Change attribute 'field' and 'field_type' from obligatory to
155 optional to allow empty classes (ie. only with a default=clnull).
156
157 * Thuban/Model/save.py (SessionSaver.write_layer): Don't write
158 any attributes anymore for the layer element.
159 (SessionSaver.write_classification): Even if there is no
160 classification field, still write the classification because
161 the clnull (default) symbol will not be defined anymore as
162 part of the layer element.
163
164 2005-07-05 Bernhard Herzog <[email protected]>
165
166 * setup.py (setup call): Version 1.1.0
167
168 * NEWS: Update for 1.1.0
169
170 * MANIFEST.in: Add *.txt to files taken from Doc. Otherwise the
171 technores won't be included
172
173 * Thuban/UI/about.py (About.__init__): Extend copyright notice to
174 2005
175
176 * po/de.po: Updated.
177
178 2005-07-05 Bernhard Herzog <[email protected]>
179
180 * README: gdal 1.1.8 is too old. 1.2.5 works.
181
182 2005-07-05 Bernhard Herzog <[email protected]>
183
184 * Resources/XML/thuban-1.1.dtd (rasterlayer): Add the opacity and
185 masktype attributes.
186
187 2005-07-05 Bernhard Herzog <[email protected]>
188
189 * Thuban/Model/layer.py (Layer.__mangle_bounding_box)
190 (Layer.ClipBoundingBox): Rename ClipBoundingBox to
191 __mangle_bounding_box. See the comments in the code and RT #2845
192
193 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
194 Remove the explicit test of ClipBoundingBox. The method isn't
195 public anymore and the direct call in the test wasn't necessary in
196 the first place. If ClipBoundingBox (now __mangle_bounding_box)
197 isn't called, the return value of ShapesInRegion will be
198 different.
199
200 2005-07-05 Bernhard Herzog <[email protected]>
201
202 * Thuban/UI/viewport.py (ViewPort.set_view_transform): Handle
203 ZeroDivisionError exceptions. I don't know when they happen
204 exactly. It probably happens when the projections aren't set
205 properly.
206
207 2005-07-01 Bernhard Herzog <[email protected]>
208
209 First step towards unicode. With this roughly we're at step 1
210 string_representation.txt
211
212 * Doc/technotes/string_representation.txt: New. Document how
213 strings are represented in Thuban and how to get to a Unicode
214 Thuban.
215
216 * Thuban/__init__.py (set_internal_encoding)
217 (unicode_from_internal, internal_from_unicode): New. The first few
218 functions for the internal string representation
219
220 * Thuban/UI/about.py (unicodeToLocale): Removed. Use
221 internal_from_unicode instead.
222
223 * Thuban/UI/__init__.py (install_wx_translation): Determine the
224 encoding to use for the internal string representation. Also,
225 change the translation function to return strings in internal
226 representation even on unicode builds of wxPython
227
228 * Thuban/Model/load.py (SessionLoader.check_attrs): Decode
229 filenames too.
230 (SessionLoader.start_clrange): Use check_attrs to decode and check
231 the attributes.
232
233 * Thuban/Model/xmlreader.py (XMLReader.encode): Use
234 internal_from_unicode to convert unicode strings.
235
236 * Thuban/Model/xmlwriter.py (XMLWriter.encode): Use
237 unicode_from_internal when applicable
238
239 * test/runtests.py (main): New command line option:
240 internal-encoding to specify the internal string encoding to use
241 in the tests.
242
243 * test/support.py (initthuban): Set the internal encoding to
244 latin-1
245
246 * test/test_load.py (TestSingleLayer.test, TestClassification.test)
247 (TestLabelLayer.test): Use the internal string representation when
248 dealing with non-ascii characters
249
250 * test/test_load_1_0.py (TestSingleLayer.test)
251 (TestClassification.test, TestLabelLayer.test): Use the internal
252 string representation when dealing with non-ascii characters
253
254 * test/test_load_0_9.py (TestSingleLayer.test)
255 (TestClassification.test): Use the internal string representation
256 when dealing with non-ascii characters
257
258 * test/test_load_0_8.py (TestUnicodeStrings.test): Use the
259 internal string representation when dealing with non-ascii
260 characters
261
262 * test/test_save.py (XMLWriterTest.testEncode)
263 (SaveSessionTest.testClassifiedLayer): Use the internal string
264 representation when dealing with non-ascii characters where
265 applicable
266
267 2005-06-30 Bernhard Herzog <[email protected]>
268
269 * test/runtests.py: Untabify.
270
271 2005-06-30 Bernhard Herzog <[email protected]>
272
273 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
274 untabify.
275
276 2005-06-30 Bernhard Herzog <[email protected]>
277
278 * Extensions/ogr/test/__init__.py: Add missing coding directive
279
280 2005-06-28 Jan-Oliver Wagner <[email protected]>
281
282 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
283 Use the default size for rendering selected items of default type.
284 Fixes part 2 of https://intevation.de/rt/webrt?serial_num=3149
285
286 2005-06-28 Jan-Oliver Wagner <[email protected]>
287
288 * Extensions/importAPR/apr.py (APR_BShSym): Extend by 'Stripple'.
289 (APR_TClr.GetThubanColor): Fix bug in color interpretation.
290 Thanks to Frank Koormann who identified this problem.
291
292 * Extensions/importAPR/importAPR.py (APR_VShSym): New. Just
293 another symbol identified.
294
295 2005-06-27 Jan-Oliver Wagner <[email protected]>
296
297 * Doc/manual/thuban-manual-de.xml: More translations.
298
299 2005-05-12 Jonathan Coles <[email protected]>
300
301 * Thuban/UI/projdialog.py: Add missing import, which led to an
302 exception when opening a layer's projection.
303
304 2005-05-09 Bernhard Herzog <[email protected]>
305
306 * test/support.py (FileLoadTestCase.filename): Fix doc-string.
307
308 2005-05-09 Bernhard Herzog <[email protected]>
309
310 * Thuban/Model/postgisdb.py (PostGISConnection.connect): Set the
311 connection to autoconnect. Fixes RT#3148.
312
313 * test/test_postgis_db.py
314 (TestPostGISSpecialCases.test_simple_error_handling): New test
315 that attempts to reproduce RT#3148.
316
317 2005-05-06 Jonathan Coles <[email protected]>
318
319 Add support for saving and loading the opacity and mask type
320 properties of RasterLayers. Also add support for proper use
321 of alpha information while drawing images not in 'RAW' format.
322 If transparency in an image format (e.g, PNG) is supported by
323 wxWidgets then the image would previously have been draw with
324 transparent regions, but the opaque regions would have been
325 unaffected by a change in the layer's opacity. This patch
326 corrects the problem.
327
328 * Thuban/Model/layer.py (RasterLayer): Added opacity and
329 masktype parameters to the constructor, and set the
330 appropriate variables to those values.
331
332 * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Added
333 code to read the opacity and mask type of the layer and construct
334 a new layer with the additional parameters.
335
336 * Thuban/Model/save.py (SessionSaver.write_layer): Added code
337 to save the opacity and mask type of a layer.
338
339 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Pass
340 the opacity of the layer to draw_raster_data rather than the layer.
341 (BaseRenderer.draw_raster_data): Remove the layer parameter because
342 the function doesn't need to know about the layer. Add the optional
343 opacity parameter whose default is 1.0. Add 'PNG' as a supported
344 graphics format.
345
346 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Fixed
347 signature to match that in BaseRenderer. Use the new opacity argument
348 in place of calling layer.Opacity(). In the case where the
349 format is not 'RAW', alpha_data is None and the loaded image has
350 alpha information, use the file's alpha information. This is
351 still subject to the layer's opacity setting.
352
353 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data):
354 Fixed signature to match that in BaseRenderer.
355
356 * test/test_load.py (TestRasterLayer): Change file_contents to
357 include opacity and masktype variables.
358 (TestRasterLayer.test): Include tests for opacity and masktype
359 changes.
360
361 * test/test_save.py (SaveSessionTest.testRasterLayer): Restructure
362 test to cover a variety of combinations of masktype and opacity
363 settings.
364
365 2005-05-02 Jan-Oliver Wagner <[email protected]>
366
367 * debian/rules: add --use-wx-python-swig-hack
368 to the build command.
369 Thanks to Moritz Lennert for pointing this out.
370
371 2005-04-28 Jan-Oliver Wagner <[email protected]>
372
373 Introduce OGRFileShapeStore in ogr extension.
374 This allows at least that loaded shapefile shape stores
375 can be saved correctly in the thuban session file
376 and reloaded again (reload is via core shapefile
377 routine, not OGR). For other types, .thuban files
378 can not be reloaded for the time being.
379
380 * Extensions/ogr/ogrshapes.py (OGRFileShapeStore): New. This
381 class ist to be used for any file-based shape stores
382 accessed through OGR.
383
384 * Extensions/ogr/ogrstart.py (open_with_ogr): Added
385 forgotten _ for i18n. Adapted call OpenFileShapestore
386 regarding new parameter.
387 (OpenFileShapestore): Use OGRFileShapeStore instead of
388 OGRShapeStore. Fix return value (None instead of null).
389 Add new parameter "mainwindow" to avoid accessing global
390 context.
391
392 2005-04-27 Jan-Oliver Wagner <[email protected]>
393
394 Introduce FileShapeStore as generalization for
395 file-based shape stores. In a first instance
396 this allows additional modules to handle shapefile
397 format as well, namely the OGR extension.
398
399 * Thuban/Model/data.py: Various small fixes in doc-strings.
400 (FileShapeStore): New class.
401 (ShapefileStore): Derive from FileShapeStore.
402 (ShapefileStore.__init__): Call __init__ of FileShapeStore,
403 rename self.table to self._table, initialize self._bbox
404 (ShapefileStore._open_shapefile): Use self._bbox instead of self.bbox
405 and self.FileName() instead of self.filename.
406 (ShapefileStore.Table): Use self._table instead of self.table.
407 (ShapefileStore.FileName): Removed (moved to FileShapeStore).
408 (ShapefileStore.BoundingBox): Use self._bbox instead of self.bbox.
409
410 * Thuban/Model/save.py: Replace ShapefileStore by FileShapeStore.
411 (SessionSaver.write_data_containers): Only use methods of the
412 base class FileShapeStore.
413
414 2005-04-26 Martin Schulze <[email protected]>
415
416 * Extensions/wms/wms.py (render_wms_layer): Adjusted the render
417 function to the modified render engine
418
419 2005-04-25 Martin Schulze <[email protected]>
420
421 * Thuban/UI/renderer.py (MapRenderer.projected_raster_layer):
422 Added a description according to the CVS log message
423
424 2005-04-23 Martin Schulze <[email protected]>
425
426 * Thuban/UI/renderer.py: Added a missing import
427
428 2005-04-23 Russell Nelson <[email protected]>
429
430 * Thuban/UI/view.py (MapCanvas.OnMiddle{Up,Down}): Changed the
431 way the previous tool is remembered, so that middle-button
432 panning works even if you haven't selected a tool.
433
434 2005-04-11 Bernhard Herzog <[email protected]>
435
436 * libraries/thuban/wxproj.cpp: Move the compatibility code that
437 deals with the wxPython 2.4 version of wxPython.h into the #ifdef
438 branch that includes wxPython.h because it's only needed when
439 wxPython.h is used. Also, it won't compile when
440 USE_WX_PYTHON_SWIG_HACK is set otherwise.
441
442 2005-04-07 Bernhard Herzog <[email protected]>
443
444 * Thuban/UI/classifier.py (ClassGrid.__init__): Use -1 as the ID.
445 (ID_CLASS_TABLE): Removed. It wasn't used anywhere except in
446 ClassGrid.__init__ and it's value is outside of the valid
447 range (must be < 32768). wxPython 2.5 complains about it with an
448 exception.
449
450 2005-04-05 Jan-Oliver Wagner <[email protected]>
451
452 * Doc/manual/thuban-manual-de.xml: More translations.
453
454 2005-04-05 Bernhard Herzog <[email protected]>
455
456 * libraries/thuban/wxproj.cpp: Make it work with a wxPython.h from
457 wxPython 2.4 as well. Also, remove a now obsolete comment.
458
459 2005-04-05 Bernhard Herzog <[email protected]>
460
461 Use wxPython.h by default but provide a workaround when it isn't
462 available.
463
464 * setup.py (wxproj_extension): New variable. Assign the Extension
465 instance for Lib.wxproj to this variable instead of putting it
466 directly into the listso that it can be accessed by other code
467 later.
468 (thuban_build_ext.user_options): Added boolean option
469 --use-wx-python-swig-hack.
470 (thuban_build_ext.initialize_options): Initialize the new option
471 to False.
472 (thuban_build_ext.finalize_options): If the new option was given,
473 define the preprocesser macro USE_WX_PYTHON_SWIG_HACK.
474 (thuban_build_ext): Update the doc-string
475
476 * libraries/thuban/wxproj.cpp: Normally we use
477 wx/wxPython/wxPython.h now. Only if USE_WX_PYTHON_SWIG_HACK is
478 defined, use swigPtrConvertHack.h instead.
479
480 * libraries/thuban/swigPtrConvertHack.h: Remove the code that was
481 copied over from wxPython.h.
482 (decode_pointer_new): New. Equivalent of decode_pointer for
483 wxPython 2.5.
484 (wxPyConvertSwigPtr): Modified to cope with wxPython 2.5 as well.
485
486 * README: Add section on potential build problems which explains
487 how the work-around for a missing wxPython.h is activated.
488
489 2005-03-29 Bernhard Herzog <[email protected]>
490
491 * test/postgissupport.py (find_postgis_sql): Added yet another
492 potential location for (lw)postgis.sql because the file has moved
493 again in postgis 1.0.0 rc4.
494
495 2005-03-29 Bernhard Herzog <[email protected]>
496
497 * Thuban/UI/legend.py (BMP_SIZE_W, BMP_SIZE_H): Set both to 16 to
498 match the site of the legend_icon_layer icon. Otherwise wxpython
499 2.5 complains when the legend is created with the error:
500
501 PyAssertionError: C++ assertion "(bitmap.GetWidth() == m_width &&
502 bitmap.GetHeight() == m_height) || (m_width == 0 && m_height ==
503 0)" failed in ./src/generic/imaglist.cpp(81): invalid bitmap size
504 in wxImageList: this might work on this platform but definitely
505 won't under Windows.
506
507 2005-03-23 Jonathan Coles <[email protected]>
508
509 These changes add support for adjusting the opacity of a raster layer.
510
511 * Thuban/Model/layer.py (RasterLayer.Opacity): Replaces AlphaOpacity.
512 (RasterLayer.SetOpacity): Replaces SetAlphaOpacity. Also triggers
513 a LAYER_CHANGED event if the opacity actually changes.
514
515 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_data): Added
516 layer parameter needed in the implementation of this method in
517 renderer.py.
518
519 * Thuban/UI/layerproperties.py (LayerProperties.dialog_layout): Fixed
520 typo 00 -> 0.
521
522 * Thuban/UI/rasterlayerproperties.py (RasterLayerProperties): Added
523 control to adjust opacity.
524
525 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Scale the
526 alpha data based on the opacity level of the layer.
527
528 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Now
529 accepts a layer parameter.
530
531 * test/test_layer.py (TestLayerModification.test_raster_layer):
532 Rename opacity method calls and add test for LAYER_CHANGED.
533
534 2005-03-16 Bernhard Herzog <[email protected]>
535
536 * test/test_connector.py (DeletionTestMixin.check_deletions)
537 (DeletionTestMixin.check_deletetions): renamed to check_deletions.
538 update the callers.
539
540 2005-03-14 Jan-Oliver Wagner <[email protected]>
541
542 * Doc/manual/thuban-manual-de.xml: More translations.
543
544 2005-03-10 Jan-Oliver Wagner <[email protected]>
545
546 Introducing initialization callbacks for extensions.
547
548 * Thuban/UI/extensionregistry.py (ExtensionDesc.__init__): Added
549 optional parameter init_callback.
550 (ExtensionDesc.init_ext): New. Executes the callback and sets
551 a status.
552
553 * Thuban/UI/application.py (ThubanApplication.OnInit): Add the
554 initialization of the extensions.
555 (ThubanApplication.init_extensions): Init all extensions.
556
557 * Thuban/UI/about.py (About.__init__): Added status of the extensions
558 to the about text.
559
560 * Extensions/gns2shp/__init__.py: Added init method for Extension
561 description.
562 (init): New. Contains the initialization of the module.
563
564 2005-03-04 Nina Hüffmeyer <[email protected]>
565
566 * Extensions/ogr/ogrdialog.py: Added a dialog, which asks for
567 OGRConnection to open a datasource. Removed dialog to display all
568 available drivers. Added some doc strings.
569
570 * Extensions/ogr/ogrstart.py: Added menu entry for opening an
571 OGRDatasource with a string. Added two opening methods which return an
572 OGRDatasource (either data from file or from DB).
573
574 * Extensions/ogr/ogrshapes.py: Added class OGRGeometry, which
575 represents a geometry reference of an OGRFeature. OGRShape now has a
576 list of referenced geometry objects (important for geometry
577 collections).
578 For OGRShapeStores loaded from a DB an ID column can be specified now.
579
580 2005-02-22 Jan-Oliver Wagner <[email protected]>
581
582 * test/test_map.py (TestMapWithContents.test_tree_info):
583 Added label layer for comparison.
584
585 2005-02-18 Jonathan Coles <[email protected]>
586
587 * libraries/thuban/gdalwarp.cpp (GetImageData): Optimize the loop
588 which builds a mask. Handle the majority of an image in a loop,
589 creating 8 bits at a time. Later, handle the edge case where less
590 than 8 bits are packed.
591
592 2005-02-18 Bernhard Herzog <[email protected]>
593
594 * test/test_baserenderer.py (TestBaseRenderer.setUp): Fix
595 doc-string
596
597 2005-02-18 Jonathan Coles <[email protected]>
598
599 * setup.py: Remove wx_cs_params from gdal compile options.
600
601 2005-02-18 Jonathan Coles <[email protected]>
602
603 Refactored baserenderer.py and renderer.py to remove baserenderer.py's
604 dependencies on wxPython. Added a new method projected_raster_layer()
605 that returns a raster layer image in projected space. This must be
606 implemented in classes derived from BaseRenderer. This also eliminates
607 the dependency on gdal in baserenderer.py.
608
609 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Call
610 new projected_raster_layer() to get projected raster image instead
611 of directly calling ProjectRasterFile().
612 (BaseRenderer.projected_raster_layer): New. This must be implemented
613 by derived classes. It takes almost the same arguments as ProjectRasterFile
614 did and returns a projected image with mask and alpha data (if requested).
615 (BaseRenderer.render_map_incrementally): Remove the check for gdal since
616 that check will be done in MapRenderer.projected_raster_layer(). This
617 also allows other implementations to use different projection code.
618
619 * Thuban/UI/renderer.py (MapRenderer.projected_raster_layer):
620 Implementation of BaseRenderer.projected_raster_layer. Checks for
621 gdal support and wxPython version. Also handles exceptions from
622 ProjectRasterFile.
623
624 * libraries/thuban/gdalwarp.cpp: Removed checks for wxPython versions
625 and added a variable which can be set through the options argument
626 of ProjectRasterFile.
627
628 * test/test_baserenderer.py (SimpleRenderer.projected_raster_layer): New.
629 Calls ProjectRasterFile and returns the result.
630 (TestBaseRenderer.test_projected_raster_layer): New. Tests the results
631 of calling projected_raster_layer() with different options.
632 (TestBaseRenderer.test_raster_no_projection): Removed tests based on
633 wxPython version and all tests of masks and alpha channels. These are
634 now in test_projected_raster_layer().
635
636 2005-02-17 Jan-Oliver Wagner <[email protected]>
637
638 * Thuban/Model/map.py, Thuban/Model/label.py: Fixed
639 doc-strings to comply with coding_guidelines.
640
641 2005-02-17 Jan-Oliver Wagner <[email protected]>
642
643 Docstring improvements and minor fixes for labellayer.
644
645 * Thuban/Model/map.py:
646 (Map, Map.Destroy, Map.RemoveLayer, Map.ClearLayers,
647 Map.Layers, Map.HasLayers, Map.MoveLayerToTop,
648 Map.RaiseLayer, Map.LowerLayer, Map.MoveLayerToBottom,
649 Map.ProjectedBoundingBox, Map.GetProjection): Improved/added
650 doc string.
651 (Map.BoundingBox): Removed superfluous test for label_layer
652 and improved doc string.
653 (Map.TreeInfo): Added label_layer and improved sdo string.
654
655 * Thuban/Model/label.py: Added import of _.
656 (Label, Label.__init__): Improved/added doc string.
657 (LabelLayer, LabelLayer.__init__, LabelLayer.Labels,
658 LabelLayer.RemoveLabel, LabelLayer.ClearLabels):
659 Improved/added doc string.
660 (LabelLayer.AddLabel): Use already defined names for
661 align strings and improved doc string.
662 (LabelLayer.TreeInfo): New. Return the object data for
663 the tree view.
664
665 2005-02-16 Jonathan Coles <[email protected]>
666
667 Further wxPython 2.5 changes using patches from Daniel Calvelo Aros
668 so that that wxproj doesn't crash. Added GUI support for selecting
669 alpha channel (opacity can't be selected yet).
670
671 NOTE: If wxPython.h is including in future distribution packages
672 then it will not be necessary to have the files swigPtrConvertHack.h
673 and wxPython_int.h included with Thuban. This is hopefully
674 a temporary workaround.
675
676 * setup.py (thuban_build_ext.finalize_options): gdalwarp needs
677 access to the macro wxCHECK_VERSION so that it will properly
678 generate a bit mask. There was a problem between wx2.4 and wx2.5
679 that this works around.
680
681 * Thuban/Model/layer.py (RasterLayer.UseMask): Removed in favor
682 of RasterLayer.MaskType.
683 (RasterLayer.SetUseMask): Removed in favor of RasterLayer.SetMaskType
684 (RasterLayer.MaskType): New. Returns the type of mask to use. Can
685 specify none, a bitmap, or an alpha channel.
686 (RasterLayer.SetMaskType): New. Set what kind of mask to use.
687
688 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer):
689 Set the raster warping options for the mask based on the value
690 of RasterLayer.MaskType.
691
692 * Thuban/UI/legend.py (LegendTree.__FillTreeLayer): Remove
693 deprecated calls to SetItemSelectedImage in favor of SetItemImage
694 with wxTreeItemIcon_Selected.
695
696 * Thuban/UI/rasterlayerproperties.py: Support selecting to use
697 an alpha channel for the mask.
698
699 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Use alpha
700 data if it is available and an alpha channel is supported under
701 the current version of wxPython.
702
703 * libraries/thuban/gdalwarp.cpp (GetImageData): Added compiler define
704 to select whether 1's or 0's select the desired portion of an image
705 in the bit mask. wx2.4 has a bug where the documentation is the opposite
706 from behavior.
707 (ProjectRasterFile): Only generate an alpha channel if the version
708 of wxPython is >= 2.5.3.
709
710 * libraries/thuban/wxproj.cpp: Applied patches from Daniel Calvelo Aros.
711 When wxPython >= 2.5.3 use the special swig functions to decode an
712 object's address.
713
714 * libraries/thuban/swigPtrConvertHack.h: Includes conditional code
715 based on the version of wxPython. If >= 2.5.3 use the special swig
716 functions from wxPython to decode wxPython objects, otherwise use
717 the old method of retrieving the address from the object __repr__ string.
718
719 * libraries/thuban/wxPython_int.h: Copied from wxPython source.
720 Unnecessary code was removed to make it smaller.
721
722 * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
723 Add tests for returning an alpha channel.
724
725 * test/test_layer.py (TestLayerModification.test_raster_layer): Fix
726 tests that used removed functions UseMask and SetUseMask
727
728
729 2005-02-08 Bernhard Herzog <[email protected]>
730
731 More wxPython 2.5 changes. This time taken from a patch from
732 Daniel Calvelo Aros.
733
734 * Thuban/UI/tableview.py (QueryTableFrame.__init__)
735 (QueryTableFrame.__init__): Pass the size of a spacer as a single
736 item.
737
738 * Thuban/UI/projdialog.py (ProjFrame.build_dialog)
739 (ProjFrame.build_dialog): Pass the size of a spacer as a single
740 item.
741
742 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Pass the
743 size of a spacer as a single item.
744
745 * Thuban/UI/classifier.py (Classifier.dialog_layout): Pass the
746 size of a spacer as a single item.
747
748 2005-02-08 Bernhard Herzog <[email protected]>
749
750 Compatibility with wxPython 2.5. The changes should make it work
751 better with 2.5 while still keeping compatibility with 2.4. There
752 are still problems with 2.5, though.
753
754 * Thuban/UI/dock.py (DockableWindow.__CreateBorder): Pass the size
755 of a spacer as a single item.
756
757 * Thuban/UI/classifier.py (ClassGroupPropertiesCtrl): Derive only
758 from wxControl
759
760 * Thuban/UI/legend.py (LegendTree): When running with wxPython <
761 2.5, add an implementation of the GetFirstChild method that does
762 not require the second parameter.
763 (LegendTree.find_layer, LegendTree._OnMsgMapLayersAdded)
764 (LegendTree._OnMsgMapLayersRemoved, LegendTree.DeleteAllItems)
765 (LegendTree.DeleteChildren, LegendTree.__ShowHideLayer): Do not
766 pass the second parameter to GetFirstChild
767
768 2005-02-08 Nina Hüffmeyer <[email protected]>
769
770 * Extensions/ogr/ogrshapes.py: Removed some print commands.
771
772 * Extensions/ogr/ogrstart.py: Changed the GUI. OGR is no longer an
773 additional menu but appears as a possibility in the menu Map.
774
775 2005-02-07 Jonathan Coles <[email protected]>
776 * libraries/thuban/gdalwarp.cpp: Removed the macros PYTHON_ERR
777 and PYTHON_ERRF since they were no longer necessary.
778
779 2005-02-07 Bernhard Reiter <[email protected]>
780 * Thuban/UI/classifier.py (ClassGrid.DeleteSelectedRows):
781 Enable translation for message string.
782
783 2005-02-06 Martin Schulze <[email protected]>
784
785 * Extensions/wms/infodialog.py (wmsInfoDialog.__init__): Adjusted
786 the arguments of the contstructor to fit the global scheme
787
788 2005-01-31 Nina Hüffmeyer <[email protected]>
789
790 * Extensions/ogr/ogrdialog.py: Added class ogrdialog.py, which provides
791 some dialogs needed to start ogr.
792
793 * Extensions/ogr/__init__.py: Changed comments to avoid encoding
794 warnings.
795
796 * Extensions/ogr/test/test_OGRShapestore.py: Changed comments to avoid
797 encoding warnings.
798
799 2005-01-28 Jonathan Coles <[email protected]>
800
801 * libraries/thuban/gdalwarp.cpp (GetImageData): Recode how the
802 mask is packed into a bit array. It's now slightly faster.
803
804 2005-01-28 Jonathan Coles <[email protected]>
805
806 * Thuban/Model/layer.py (RasterLayer.__init__): Make use_mask
807 default to true.
808
809 * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Remove
810 code that loads the state of the layer's use_mask flag. Its
811 usefulness is still being debated.
812
813 * Thuban/Model/save.py (SessionSaver.write_layer): Remove
814 code that saves the state of the layer's use_mask flag. Its
815 usefulness is still being debated.
816
817 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Pass
818 options to ProjectRasterFile based on the state of layer.UseMask().
819 Catch more exceptions from ProjectRasterFile so that Thuban doesn't
820 quit is there is a problem projecting.
821 (BaseRenderer.draw_raster_data): Change the documentation to
822 describe the new format (XBM) that the mask data will be in.
823
824 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): The mask
825 data is in XBM format when format='RAW' which means it doesn't
826 need to be converted to a wxImage before being used as a mask
827 for a wxBitmap. Assume that if format != 'RAW' that the image
828 data and mask data are in the same format.
829
830 * libraries/thuban/gdalwarp.cpp (GetImageData): If alpha is enabled
831 and a mask is requested, convert the alpha band to a bit array in
832 XBM format. if an alpha channel is requested, simply return the
833 data in the alpha band. Provide better error handling by returning
834 python error messages (also fixes RT #2947).
835 (ProjectRasterFile): Support multiple mask options, rather than simply
836 a flag indicating that a mask should or should not be used. Provide
837 better error handling by returning python error messages.
838
839 * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
840 Add mask data to test.
841
842 * test/test_layer.py (TestLayer.test_raster_layer): Test that a layer
843 should use the mask by default.
844 (TestLayerModificaton.test_raster_layer): Test that a layer should use
845 the mask by default.
846
847 * test/test_load.py (TestRasterLayer.test): Remove testing for
848 use_mask flag in file.
849
850 * test/test_save.py (SaveSessionTest.testRasterLayer): Remove testing
851 for use_mask in file.
852
853 * test/test_load_1_0_1.py: Removed. Shouldn't have been checked in.
854
855 2005-01-26 Jonathan Coles <[email protected]>
856
857 Add a new dialog box for raster layers. The dialog box allows
858 the user to toggle a mask that is generated by ProjectRasterFile
859 and is used to only draw the real parts of the projected image.
860
861 * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer):
862 Instruct the warping code to generate a mask if the raster layer
863 requests one.
864 (BaseRenderer.draw_raster_data): Removed obsolete optional mask argument.
865
866 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Removed
867 obsolete optional mask argument.
868
869 * Thuban/UI/classifier.py (Classifier): Change the parent class
870 to LayerProperties and rework the code to support layout calls
871 from the parent.
872 (Classifier.dialog_layout): New. Layout the dialog box.
873 (Classifier.map_layers_removed): Removed. Moved to parent class.
874 (Classifier.map_replaced): Removed. Moved to parent class.
875 (Classifier._OnTry): Renamed to OnTry to support parent class.
876 (Classifier.OnClose): Removed. Supplied in parent class.
877 (Classifier._OnCloseBtn): Removed. Supplied in parent class as OnCloseBtn.
878 (Classifier._OnOK): Renamed to OnOK to support parent class.
879 (Classifier._OnRevert): Renamed to OnRevert to support parent class.
880
881 * Thuban/UI/layerproperties.py: New. Base class for layer properties
882 dialog boxes.
883
884 * Thuban/UI/rasterlayerproperties.py: New. Class for displaying
885 raster layer properties.
886
887 * libraries/thuban/gdalwarp.cpp: Replace the old gdalwarp.cpp code
888 with the non-simple version supplied with gdal. This allows added
889 features such as creating an alpha band.
890 (GetImageData): Generate a mask array from the alpha band that is
891 generated by gdal if the user has selected it. Try to support images
892 that have more than three bands, such as images with RGB plus an
893 alpha band.
894 (ProjectRasterFile): Convert python argument for mask and tell
895 gdal to enable or disable an alpha band.
896
897 * Thuban/Model/layer.py (BaseLayer.Type): New. Returns a string
898 describing what kind of layer the class is. Defaults to "Unknown",
899 but should be overridden by subclasses.
900 (Layer.Type): New. Override base class method.
901 (RasterLayer.__init__): Create a flag for using a mask. Record extra
902 data from gdal for display in the properties dialog.
903 (RasterLayer.Type): New. Override base class method.
904 (RasterLayer.UseMask): New. Returns True if the mask should be used.
905 (RasterLayer.SetUseMask): New. Set if the mask should be used.
906 (RasterLayer.ImageInfo): New. Return extra information about the image.
907
908 * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Load
909 the mask information.
910
911 * Thuban/Model/save.py (SessionSaver.write_layer): Save mask information.
912
913 * Thuban/UI/mainwindow.py: Register the RasterLayerProperties and
914 Classifier classes as dialogs to use with the proper layer types.
915
916 * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
917 Fix test.
918
919 * test/test_layer.py (TestLayer.test_raster_layer): Test new methods.
920 (TestLayerModification.build_path): New. Support function.
921 (TestLayerModification.test_raster_layer): New. Test new methods.
922
923 * test/test_save.py (SaveSessionTest.testRasterLayer): Add tests for mask.
924
925 * test/test_load.py (TestRasterLayer): Add tests for mask.
926
927 * test/test_load_1_0_1.py: New. Copied from test_load.py.
928
929 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Removed
930 obsolete optional mask argument.
931
932 2005-01-26 Nina Hüffmeyer <[email protected]>
933
934 * Extensions/ogr/ogrshapes.py: Added two dictionaries to ShapeStore
935 which maps the ids and the ordinals. Fixed RowIdToOrdinal(),
936 RowOrdinalToId() and ReadRowAsDict().
937
938 * Extensions/ogr/ogrstart.py: Added menu item which opens database
939 layers for existing database connections.
940
941 * Extensions/ogr/test/test_OGRShapestore.py: Fixed a message string.
942
943
944 2005-01-26 Jan-Oliver Wagner <[email protected]>
945
946 * Doc/manual/thuban-manual-de.xml: More translations.
947
948 2005-01-24 Bernhard Herzog <[email protected]>
949
950 Rework the status bar updates a bit to make sure the message about
951 the projections is produced at the right times.
952
953 * Thuban/UI/mainwindow.py (MainWindow.update_status_bar_messages):
954 New class variable with messages that may require a status bar
955 update.
956 (MainWindow.view_position_changed)
957 (MainWindow.update_status_bar): Rename from view_position_changed
958 to update_status_bar. It's meaning has changed now that it may
959 also generate messages about problems with projection settings.
960 (MainWindow.__init__): Use the new update_status_bar_messages
961 class variable to subscribe update_status_bar
962 (MainWindow.set_position_text): Update doc-string. This method
963 has to be renamed at some point. See doc-string and comments.
964 (MainWindow.OnClose): Unsubscribe update_status_bar from all
965 messages in update_status_bar_messages
966
967 * Thuban/UI/viewport.py (ViewPort.forwarded_map_messages): New
968 class attribute. map messages to be forwarded by the viewport.
969 (ViewPort._subscribe_map, ViewPort._unsubscribe_map): (un)subscribe
970 the messages in forwarded_map_messages
971
972 2005-01-21 Bernhard Herzog <[email protected]>
973
974 * test/postgissupport.py (PostGISDatabase.__init__): Tweak
975 doc-string
976 (find_postgis_sql): Update for postgis-1.0.0-rc1, which uses a
977 different name for the initialization SQL file.
978
979 2005-01-21 Jonathan Coles <[email protected]>
980
981 * Thuban/UI/baserenderer.py (proj_params_to_str): New. Takes
982 a projection and returns a formatted string representing the
983 parameters to feed to gdalwarp. This function eliminates
984 redundancy in draw_raster_layer().
985 (BaseRenderer.render_map_incrementally): Removed the optimization which
986 drew the top most raster layer first and then only those vector-
987 based layers that are above it. With the support for transparency
988 this optimization breaks correct behaviour.
989 (BaseRenderer.draw_raster_layer): Reorganize code to support possible
990 future enhancements to raster layer bounding box. The old behaviour has
991 not changed. Also, change calling parameters to draw_raster_data()
992 to specify new RAW data format and mask.
993 (BaseRenderer.draw_raster_data): Change signature to include an optional
994 parameter for mask information. Change documentation to mention
995 support for new parameter and added option for RAW data format.
996 The data argument is now a list of [width, height, data].
997
998 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Add new optional
999 mask parameter. Add new condition for RAW format, which
1000 significantly reduces rendering time. Add condition for
1001 mask parameter.
1002
1003 * libraries/thuban/gdalwarp.cpp (GetImageData): New. Creates a
1004 data array of RGB values from the projected image returned from
1005 the gdal warping functions. In the case of palette based images, it
1006 converts the NO_DATA index to the mask color.
1007 (ProjectRasterFile): Removed all custom memory driver references
1008 and replaced it with the standard in-memory dataset provided
1009 by gdal. The return data is no longer a BMP file, but an array
1010 of RGB values, one set triple per pixel.
1011
1012 * libraries/thuban/bmpdataset.cpp: Removed. Unnecessary.
1013 * libraries/thuban/cpl_mfile.h: Removed. Unnecessary.
1014 * libraries/thuban/cpl_mfile.cpp: Removed. Unnecessary.
1015
1016 * setup.py (thuban_build_ext.finalize_options): Removed mention
1017 of cpl_mfile.cpp and bmpdataset.cpp files in the list of source
1018 files. These are obsolete with the new version of gdalwarp.cpp
1019
1020 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data):
1021 Updated signature.
1022 (TestBaseRenderer.test_raster_no_projection): Changed the test
1023 data to be data in the uncompressed RAW format returned from
1024 ProjectRasterFile.
1025
1026 2005-01-21 Jan-Oliver Wagner <[email protected]>
1027
1028 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Made
1029 string available for i18n.
1030
1031 2005-01-20 Russell Nelson <[email protected]>
1032
1033 * Resources/Projections/defaults.proj: Ruin the speling of the
1034 Lambert-93 projection so it doesn't run into the wx UTF-8 bug.
1035 It's the wrong thing to do in the long run, but it's necessary for
1036 those users until that bug is fixed. Otherwise the projection
1037 dialog segfaults. Better to annoy some Lambert-93 users with a
1038 spelling mistake than every Fedora Core 3 user of Thuban-CVS.
1039
1040 2005-01-20 Bernhard Reiter <[email protected]>
1041
1042 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Added
1043 docstring and comment that the warning code here is a hack.
1044
1045 2005-01-20 Russell Nelson <[email protected]>
1046
1047 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Warn
1048 user about misprojected layers when their lat/lon bounding
1049 box exceeds rational lat/lon values.
1050
1051 2005-01-20 Bernhard Reiter <[email protected]>
1052
1053 * Thuban/UI/about.py (unicodeToLocale): Improved:
1054 Use 'ascii' and then 'replace' for other characters
1055 when getdefaultlocale returns None. Thanks to Bernhard H. .
1056
1057 2005-01-20 Bernhard Reiter <[email protected]>
1058
1059 * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Added a comment
1060 that OnRangeText might be called twice and using None as argument.
1061
1062 2005-01-20 Bernhard Reiter <[email protected]>
1063
1064 * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Add a
1065 OnRangeText(0) to work around a different in wx Behaviour noticed
1066 on MacOSX, thanks to Lorenzo Moretti and Daniel Calvelo for the fix.
1067
1068 2005-01-20 Bernhard Reiter <[email protected]>
1069
1070 * Thuban/UI/about.py: take iso-8859-15 when getdefaultlocale returns
1071 None. (Fixes rt#2910.)
1072
1073 2005-01-18 Frank Koormann <[email protected]>
1074
1075 New Extension: mouseposition
1076 Tool to collect mouse click positions (map coordinates) in a dialog.
1077
1078 * Extensions/mouseposition/__init__.py: New, extension registration
1079
1080 * Extensions/mouseposition/mouseposition.py: New, implements the
1081 dialog and adds a tool to Thuban mainwindow.
1082
1083 * Extensions/mouseposition/position.xpm: New, icon for tool.
1084
1085 2005-01-14 Jan-Oliver Wagner <[email protected]>
1086
1087 * Doc/manual/thuban-manual-de.xml: More translations.
1088
1089 2005-01-11 Frank Koormann <[email protected]>
1090
1091 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
1092 Fix indention bug.
1093
1094 2005-01-09 Frank Koormann <[email protected]>
1095
1096 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
1097 BugFix 2901: Explicitly copy layers ClassificationColumn since it
1098 is not part of the layers Classification.
1099
1100 2005-01-03 Frank Koormann <[email protected]>
1101
1102 * Thuban/UI/renderer.py (ScreenRendererdraw_selection_incrementally):
1103 BugFix 2883: Former implementation only worked on classified point
1104 layers: KeyError was raised, now use the default size if field is None.
1105
1106 2004-12-27 Bernhard Reiter <[email protected]>
1107
1108 svgexport 1.0.0cvs: Fixed label export.
1109
1110 * Extensions/svgexport/test/test_svgmapwriter.py:
1111 class TestSVGRenderer(): New class; new test test_label_font().
1112
1113 * Extensions/svgexport/svgmapwriter.py
1114 (SVGRenderer.label_font()): initialised Font size with self.factor now,
1115 makes test_label_font happy.
1116
1117 * Extensions/svgexport/TODO: crossed out fixed label export item.
1118 Added item for options.
1119
1120 * Extensions/svgexport/__init__.py: Bumped version to 1.0.0cvs.
1121
1122 2004-12-27 Russell Nelson <[email protected]>
1123
1124 Middle mouse button pans.
1125
1126 * Thuban/UI/view.py (MapCanvas.__init__): Subscribe also
1127 OnMiddleDown and OnMiddleUp events.
1128 (MapCanvas.OnMiddleDown): New. Activate the pan tool and remember the
1129 previously used tool.
1130 (MapCanvas.OnMiddleUp): New. Reactivate the remebered tool used before
1131 pressing the middle mouse button.
1132
1133 2004-12-27 Jan-Oliver Wagner <[email protected]>
1134
1135 * Doc/manual/thuban-manual-de.xml: More translations.
1136
1137 2004-12-23 Jan-Oliver Wagner <[email protected]>
1138
1139 * Thuban/UI/projdialog.py (ProjFrame.load_user_proj): Added a
1140 \n to stderr after the warnings. Thanks to Russell Nelson.
1141
1142 2004-12-20 Nina Hueffmeyer <[email protected]>
1143
1144 * Extensions/ogr/ogrshapes.py: Fixed some issues from
1145 Bernhard (coding guidelines etc.). Additionally it is now possible to
1146 display shapefiles containing feature collections (e.g.polygons
1147 with holes). Works with gdal 1.2.1 now.
1148
1149 * Extensions/ogr/test/test_OGRShapestore.py: Fixed some issues
1150 from Bernhard (coding guidelines etc.). If ogr can't be imported,
1151 tests are skipped now.
1152
1153 * Extensions/ogr/ogrstart.py: Fixed some typings.
1154
1155 2004-12-20 Bernhard Reiter <[email protected]>
1156
1157 * Extensions/svgexport/TODO: updated to add support for
1158 raster layers and labels for 1.0.1.
1159
1160 * Extensions/svgexport/svgmapwriter.py (draw_raster_layer):
1161 Issue a warning now.
1162
1163 2004-12-19 Bernhard Reiter <[email protected]>
1164
1165 * Extensions/svgexport/TODO: Added idea to support triggering
1166 the application down the pipe.
1167
1168 2004-12-19 Bernhard Reiter <[email protected]>
1169
1170 svgexport: Improved code quality, mainly by better naming.
1171
1172 * Extensions/svgexport/svgmapwriter.py:
1173 DrawPath() renamed to DrawPolygonPath(),
1174 added documentation, improved comments and variable names.
1175
1176 * Extensions/svgexport/svgmapwriter.py,
1177 Extensions/svgexport/test/test_svgmapwriter.py:
1178 All using DrawPolygonPath() now, the default parameter closed=True
1179 omitted.
1180
1181 * Extensions/svgexport/test/test_svgmapwriter.py:
1182 renamed test_polygon_opened() to test_polyline()
1183 renamed test_transparent_polygon() to test_transparent_polyline()
1184
1185 2004-12-18 Jan-Oliver Wagner <[email protected]>
1186
1187 Some fixes of gns2shp extension.
1188
1189 * Extensions/gns2shp/test/__init__.py: New. Make this directory a
1190 package.
1191
1192 * Extensions/gns2shp/test/test_gns2shp.py: Add some import paths
1193 dynamically.
1194
1195 * Extensions/gns2shp/test/README: Simplified description how to test.
1196
1197 * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed doc-string,
1198 fixed some dimensions of fields according to the GNS documentation
1199 which seems to change undocumented.
1200 Now killing trailing \n and/or \r from MODIFY_DATE.
1201 This fixes RT#2453.
1202
1203 2004-12-18 Bernhard Reiter <[email protected]>
1204
1205 svgexport 1.0.0: Treats holes and islands nicely. Documentation added.
1206
1207 * Extensions/svgexport/test/test_svgmapwriter.py:
1208 Added new tests: test_export_polygon_with_hole()
1209 and test_polygon_with_hole().
1210
1211 * Extensions/svgexport/svgmapwriter.py
1212 (draw_polygon_shape()): Uses DrawPath correctly now.
1213
1214 * Doc/manual/thuban-manual.xml: Added documentation for stable
1215 extention svgexport.
1216 * Doc/manual/thuban-manual-de.xml: Copied English section about
1217 svexport over.
1218
1219 * Extensions/svgexport/__init__.py: Bumped version number to 1.0.0.
1220
1221 * Extensions/svgexport/svgsaver.py,maplegend.py:
1222 Moved from experimental to stable extension menu.
1223
1224 * Extensions/svgexport/TODO: updated.
1225
1226
1227 2004-12-18 Bernhard Reiter <[email protected]>
1228
1229 Added Extensions/svgexport/TODO
1230
1231 2004-12-18 Bernhard Reiter <[email protected]>
1232
1233 Refactored in svgexport:
1234 DrawPath replaces DrawPolygon; added newline in front of "M" in paths.
1235
1236 * Extensions/svgexport/svgmapwriter.py
1237 Added verbosity level 3 to print out polygon points.
1238 (class Point): added __repr__
1239 (class Brush, __str__()): Added space after ,.
1240 (DrawPolygon): Renamed to DrawPath()
1241 (DrawPath): Takes list of polygons as input now, adds \n before "M"s.
1242 (DrawLines): Using DrawPath now.
1243
1244 * Extensions/svgexport/test/test_svgmapwriter.py:
1245 Replaced DrawPolygon() calls with DrawPath() and put the first argument
1246 inside another list. Adapted test data with a newline before "M".
1247
1248 2004-12-18 Bernhard Reiter <[email protected]>
1249
1250 Refactored svgexport tests: 9 double tests runs eliminated;
1251 code size reduced by 8 lines.
1252
1253 * Extensions/svgexport/test/test_svgmapwriter.py:
1254 (class TestWithDC): Renamed to BaseTestWithDC, moved to top.
1255 (class BaseWithDCtools): New, subclass from BaseTestWithDC.
1256 (class TestDrawSplines): now subclass from BaseTestWithDCtools,
1257 this fixed the double running of the nine tests of TestVirtualDC.
1258 (class TestVirtualDC): Using self.dc and self.file from setUp().
1259
1260 2004-12-17 Bernhard Herzog <[email protected]>
1261
1262 Two windows specific fixes ported from thuban-1­0-branch:
1263
1264 * Thuban/UI/about.py (unicodeToLocale): Use getdefaultlocale
1265 instead of getlocale because getlocale doesn't return a usable
1266 encoding name on a german windows 2000
1267
1268 * setup.py: windows build: Removed the absolute path names and
1269 made all prfixes relative to the directory containing setup.py.
1270 Makes it a little easier to adapt to a different system.
1271
1272 2004-12-16 Bernhard Herzog <[email protected]>
1273
1274 Add support for PostGIS tables with LINESTRING geometries.
1275 Fixes RT#2299
1276
1277 * Thuban/Model/postgisdb.py (shapetype_map): Add LINESTRING
1278
1279 * test/postgissupport.py
1280 (PostgreSQLServer.get_default_static_data_db): Rename the "roads"
1281 table to "roads-multi" because it now uses MULTILINESTRING
1282 geometries and introduce a new "roads" table that uses LINESTRING
1283 (coords_to_multilinestring): Make the doc string more precise
1284 (coords_to_linestring): New. Create a LINESTRING WKT
1285 representatin
1286 (wkt_converter): Add coords_to_linestring
1287 (upload_shapefile): Rephrase the doc-string a bit.
1288
1289 * test/test_postgis_db.py (TestPostGISShapestoreArc)
1290 (LineStringTests)
1291 (TestPostGISShapestoreLineString)
1292 (TestPostGISShapestoreMultiLineString): Split
1293 TestPostGISShapestoreArc into a base class LineStringTests and two
1294 derived classes TestPostGISShapestoreLineString for LINESTRING
1295 geometries and TestPostGISShapestoreMultiLineString for
1296 MULTILINESTRING geometries. Most test methods are in the base
1297 class with the exception of tests that explicitly check the raw
1298 format.
1299
1300 2004-12-16 Bernhard Herzog <[email protected]>
1301
1302 Make the test suite work with PostGIS 0.8.2 and PostgreSQL 7.4
1303
1304 * test/postgissupport.py (find_postgis_sql): Different postgis
1305 versions put the postgis.sql file into slightly different places
1306 so we have to look in both. The updated doc string describes this
1307 is more detail.
1308
1309 * test/test_postgis_db.py
1310 (TestPostGISSpecialCases.test_column_name_quoting): The return
1311 value of UniqueValues is unsorted, so it has to be sorted for
1312 comparison.
1313
1314 2004-12-16 Bernhard Herzog <[email protected]>
1315
1316 Fix for RT#2237
1317
1318 * Thuban/UI/projdialog.py (ProjFrame._show_proj_panel): If the
1319 panel to be shown is the UnknownProjPanel disable the OK and Try
1320 buttons. Otherwise enable them.
1321 (ProjFrame.__GetProjection): The UnknownProjPanel returns None for
1322 the parameters. In that case __GetProjection also returns None
1323 now.
1324
1325 2004-12-15 Bernhard Herzog <[email protected]>
1326
1327 * Thuban/UI/classgen.py (GenQuantilesPanel.__init__): Set the
1328 minimum number of classes to 2. The calculate_quantiles needs at
1329 least two and raises an exception otherwise.
1330 Fixes RT#2549
1331
1332 2004-12-15 Bernhard Herzog <[email protected]>
1333
1334 * test/postgissupport.py (PostgreSQLServer.execute_sql): Extend to
1335 so that it returns a result for select statements.
1336 (PostgreSQLServer.server_version): New. Return the version of the
1337 server software.
1338 (PostgreSQLServer.require_authentication): The format of
1339 pg_hba.conf has changed between PostgrSQL 7.2 and 7.3. Check the
1340 server version and generate the file in the correct format
1341
1342 2004-12-15 Bernhard Herzog <[email protected]>
1343
1344 * test/postgissupport.py (PostgreSQLServer.is_running): Fix typo
1345 in the doc string and rephrase it a little.
1346
1347 2004-12-15 Frank Koormann <[email protected]>
1348
1349 * test/test_load.py (TestAltPath.checkSession): New, extended checks if
1350 session has been loaded successfully. The check is called by the relevant
1351 tests after executing load_session().
1352
1353 2004-12-13 Bernhard Herzog <[email protected]>
1354
1355 Make sure the region used to determine which shapes are visible
1356 actually matches the region on the printed page. If this isn't
1357 done properly some shapes might not be printed.
1358 Fixes RT #2692
1359
1360 * Thuban/UI/view.py (MapPrintout.draw_on_dc): The region for the
1361 renderer has to be at the same position as the mapregion
1362
1363 * Thuban/UI/renderer.py (ExportRenderer.RenderMap): self.region
1364 has to be moved by (self.shiftx, self.shifty) too.
1365
1366 2004-12-13 Bernhard Herzog <[email protected]>
1367
1368 * libraries/pyprojection/Projection.i: Work around a bug in the
1369 generated python code which leads to exception in the __del__
1370 method when the constructor fails. See the comments in the code
1371 for more details.
1372
1373 * libraries/pyprojection/Projection.py: Updated from Projection.i
1374 with SWIG.
1375
1376 2004-12-13 Bernhard Herzog <[email protected]>
1377
1378 * test/test_load.py (TestAltPath.test_01_single_path_error_fix)
1379 (TestAltPath.test_02_path_error_fix_from_list)
1380 (TestAltPath.test_05_path_error_fix_from_list_changed)
1381 (TestAltPath.test_06_path_error_fix_from_list_fails): self.session
1382 is destroyed in tearDown, so there's no need to do it in a test
1383 case.
1384
1385 * Thuban/Model/load.py (SessionLoader.open_shapefile): Remove a
1386 debug print
1387
1388 2004-12-13 Bernhard Herzog <[email protected]>
1389
1390 * Extensions/svgexport/test/test_svgmapwriter.py
1391 (TestDrawSplines.setUp): Do not use super with the unittest
1392 classes because in Python 2.2 they're still old-style classes.
1393
1394 2004-12-13 Frank Koormann <[email protected]>
1395
1396 Alternative Path feature: When loading a (moved) session where
1397 shapefiles cannot be found, ask the user. Use the specified path
1398 if further shapefiles are missing. However, ask the usr for confirmation
1399 in such cases.
1400
1401 * test/test_load.py (TestAltPath): New, tests for alternative path feature
1402 in load_session()
1403 (Shapefile_CallBack): Helper, implements controllable callback.
1404
1405 * Thuban/UI/application.py (ThubanApplication.OnInit):
1406 Added "alt_path" to self.path
1407 (ThubanApplication.OpenSession): Added shapefile_callback as second
1408 callback similar to db_connection_callback.
1409 (ThubanApplication.run_alt_path_dialog): New, implementaion of
1410 shapefile_callback. In addition to raising the dialog the control of
1411 self.path('alt_path') is implemented here.
1412
1413 * Thuban/Model/load.py (SessionLoader.__init__): Added shapefile_callback.
1414 (SessionLoader.open_shapefile): Open shapefile, eventually with
1415 alternative path. This wrapps the "theSession.OpenShapefile(filename)"
1416 formerly used in start_fileshapesource()/start_layer().
1417 (SessionLoader.start_fileshapesource): Call open_shapefile().
1418 (SessionLoader.start_layer): Call open_shapefile().
1419 (load_session): Added shapefile_callback.
1420
1421 * Thuban/UI/altpathdialog.py: New, implements dialogs for alternative path
1422 feature (search / check).
1423
1424 * Doc/manual/thuban-manual.xml: Added documentation of new feature.
1425
1426 2004-12-11 Bernhard Reiter <[email protected]>
1427
1428 svgexport 0.9.2: Point size supports for maps.
1429
1430 * Extensions/svgexport/svgmapwriter.py: Added import of SHAPETYPE_POINT
1431 (def draw_point_shape): new parameter size defaults to 2 as before.
1432 (draw_shape_layer_incrementally): Moved draw_func log line higher.
1433 Added draw_func call with size when dealing with a point layer.
1434
1435 * Extensions/svgexport/__init__.py: bumped version to 0.9.2.
1436
1437 2004-12-11 Bernhard Reiter <[email protected]>
1438
1439 Made sure that newlines are inserted in the svg path d attributes
1440 to raise the chance that the line length will be below 255 characters,
1441 as recommended by REC SVG 1.1 in section 8.3.1.
1442
1443 * Extensions/svgexport/svgmapwriter.py(DrawPolygon):
1444 Adding \n before L's and changed whitespace handling.
1445
1446 * Extensions/svgexport/test/test_svgmapwriter.py:
1447 Adapted tests to new whitespace handling of DrawPolygon.
1448
1449 2004-12-11 Bernhard Reiter <[email protected]>
1450
1451 * Doc/technotes/coding_guidelines.txt: easy typo fixed.
1452
1453 * Extensions/svgexport/test/test_svgmapwriter.py:
1454 Removed test_drawbezier in favour of new test_drawspline3 and
1455 test_drawspline4 within new class TestDrawSplines(TestVirtualDC).
1456 All only to test DrawSpline.
1457
1458 * Extensions/svgexport/svgmapwriter.py(DrawSpline):
1459 New implementation now really using the strange algorithm of
1460 xfig 3.1's approximated splines and its conversion to postscript
1461 with one twist: SVG can do quadratic beziers, so skipped translation
1462 to cubic beziers.
1463 (TestWithDC): Typo in comment fixed.
1464
1465 2004-12-09 Martin Schulze <[email protected]>
1466
1467 * Thuban/Model/classgen.py: Added missing character encoding
1468
1469 * Extensions/wms/properties.py (OpenWMSProperties): removed
1470
1471 * Extensions/wms/parser.py (WMSCapabilitiesParser.error): Dropped
1472 support for get_srs_discrepancies() since there are no
1473 discrepancies anymore (was a thinko)
1474
1475 * Extensions/wms/layer.py (WMSLayer.GetMapImg): Improved graphic
1476 format priority now that more formats are supported globally by
1477 the render engine.
1478
1479 2004-12-08 Silke Reimer <[email protected]>
1480 * Extensions/ogr/ogrshapes.py: Substituted ogr-method CloseRings
1481 because it is not available in all versions of ogr
1482
1483 2004-12-08 Bernhard Reiter <[email protected]>
1484 * Extensions/ogr/__init__.py: Added empty __init__.py to heal
1485 global tests until a real one is commited.
1486
1487 2004-12-07 Nina Hüffmeyer <[email protected]>
1488
1489 * /Extensions/ogr/: Adding a new extension to read shapefiles with
1490 ogr. It is planned to add other vector formats.
1491
1492 * /test/runtests.py: Adding tests from /Extensions/ogr/test/.
1493
1494 2004-12-07 Jan-Oliver Wagner <[email protected]>
1495
1496 * /Extensions/svgexport/test/test_svgmapwriter.py: Reverting
1497 part of a (non-)fix to renable that the tests are always
1498 executed.
1499
1500 2004-12-07 Bernhard Reiter <[email protected]>
1501
1502 * Extensions/svgexport/test/test_svgmapwriter.py:
1503 Added test_drawbezier() to test DrawSpline().
1504
1505 * Extensions/svgexport/svgmapwriter.py(DrawSpline):
1506 Really implemented bezier drawing.
1507
1508 * Extensions/svgexport/__init__.py: Bumped version of svgexport
1509 to 0.9.1 because now the legend examples lines styles
1510 will be drawing with beziers.
1511
1512 2004-12-05 Martin Schulze <[email protected]>
1513
1514 * Thuban/UI/renderer.py (raster_format_map): Added PNG, TIFF and
1515 GIF as supported bitmap image formats (helpful for the WMS extension)
1516
1517 2004-11-30 Martin Schulze <[email protected]>
1518
1519 * Extensions/wms/test/test_ogclib.py (TestOGCLib.test_compareURLs):
1520 Improved the test for the internal compare method
1521
1522 2004-11-27 Jan-Oliver Wagner <[email protected]>
1523
1524 * Thuban/UI/about.py (About.__init__): Added
1525 Norbert Solymosi for hungarian translation and Ole Rahn
1526 as contrbutor. Moved Bernhard Reiter from Contributor
1527 to Developer.
1528
1529 2004-11-27 Bernhard Reiter <[email protected]>
1530
1531 * Extensions/svgexport/test/test_svgmapwriter.py:
1532 Removed Jan from author list as he did not change enough significant
1533 lines yet.
1534
1535 * Extensions/svgexport/__init__.py: Added Bernhard as author
1536 of the Extension.
1537
1538 2004-11-27 Jan-Oliver Wagner <[email protected]>
1539
1540 * po/hu.po: New. Hungarian translation. Contributed
1541 by Norbert Solymosi.
1542
1543 2004-11-26 Bernhard Herzog <[email protected]>
1544
1545 * Extensions/svgexport/test/test_svgmapwriter.py
1546 (Testobjectexport.test_transparent_polygon): Commented out some
1547 debug prints
1548
1549 2004-11-24 Jan-Oliver Wagner <[email protected]>
1550
1551 Fix broken tests for svg extension and added svg legend
1552 to Experimental menu.
1553
1554 * Extensions/svgexport/test/test_svgmapwriter.py: Fix to have
1555 the test run correctly even if the extension is a package.
1556 Also removed the "import Thuban" which makes no sense.
1557
1558 * Extensions/svgexport/__init__.py: Fix to have the extensions'
1559 test module also be executed from the global test routine.
1560 This is done by looking for the absense of the DISPLAY variable.
1561
1562 * Extensions/svgexport/maplegend.py: Moved the menu entry from Extensions
1563 to Experimental menu since this module has yet not reached a stable
1564 status (ie. 1.0).
1565
1566 2004-11-22 Bernhard Reiter <[email protected]>
1567
1568 * Extensions/svgexport/svgmapwriter.py:
1569 Added verbose variable and some logging depending on it.
1570 (class VirtualDC(XMLWriter)): Minor improvement in the polygon loop,
1571 because counting i is not necessary.
1572 (class Pen, class Brush): Added simple __str__ methods.
1573 (SVGRenderer.draw_polygone_shape): Fix #2698 (transparent polygons are
1574 not exported to svg file) Note: holes still unhandled.
1575
1576 * Extensions/svgexport/test/test_svgmapwriter.py:
1577 Made a baseclass TestWithDC for test needed a DC.
1578 Added tests for bug #2698 (transparent polygons are not
1579 exported to svg file):
1580 Testobjectexport.test_transparent_polygon()
1581
1582 * Thuban/Model/base.py (UnsetModified):
1583 Fixed some typos in docstring.
1584
1585 * Thuban/UI/baserenderer.py (BaseRenderer.draw_polygon_shape()):
1586 Added hints on the used algorithm for handling holes.
1587
1588 2004-11-20 Jan-Oliver Wagner <[email protected]>
1589
1590 Some face lifting for the examples.
1591
1592 * Examples/__init__.py: Make this directory a package.
1593
1594 * Examples/simple_extensions/__init__.py: Make this directory a package.
1595
1596 * Examples/simple_extensions/hello_world.py: Moved entry from Extensions
1597 menu to Examples menu.
1598
1599 * Examples/simple_extensions/simple_command.py: Some more comments,
1600 minor changes.
1601
1602 * Examples/simple_extensions/simple_tool.py: Minor changes.
1603
1604 2004-11-20 Jan-Oliver Wagner <[email protected]>
1605
1606 Changed way of extension registry for wms and added extension
1607 registry for umn_mapserver extension.
1608
1609 * Extensions/wms/__init__.py: Added registry entry and the importing
1610 of the actual wms module. Included a test for the required PyOGCLib.
1611
1612 * Extensions/wms/wms.py: Removed registry entry (moved to __init__.py).
1613
1614 * Extensions/umn_mapserver/__init__.py: Added registry entry and the
1615 importing of the actual umn mapserver management modules.
1616 Included a test for the required Python MapScript.
1617
1618 2004-11-20 Jan-Oliver Wagner <[email protected]>
1619
1620 Changed way of extension registry for importAPR, bboxdump
1621 and added extension registry for svgexport.extension registry for
1622 svgexport.
1623
1624 * Extensions/importAPR/__init__.py: Added registry entry and the importing
1625 of the actual importAPR module.
1626
1627 * Extensions/importAPR/importAPR.py: Removed registry entry (moved to
1628 __init__.py).
1629
1630 * Extensions/bboxdump/__init__.py: Added registry entry and the importing
1631 »···of the actual bboxdump module.
1632
1633 * Extensions/bboxdump/bboxdump.py: Removed registry entry (moved to
1634 »···__init__.py).
1635
1636 * Extensions/svgexport/__init__.py: Added registry entry and the importing
1637 of the svgsaver module.
1638
1639 * Extensions/svgexport/svgsaver.py: Moved the menu entry from Extensions
1640 to Experimental menu since this module has yet not reached a stable
1641 status (ie. 1.0).
1642
1643 2004-11-18 Jan-Oliver Wagner <[email protected]>
1644
1645 Now the hit test considers the size of point symbols.
1646
1647 * Thuban/UI/viewport.py (ViewPort._hit_point): Added optional parameter
1648 'size' defaulting to the previously fixed value 5.
1649 Extended doc-string.
1650 (Viewport._find_shape_in_layer): Resolved FIXME regarding flexibility
1651 for symbols.
1652 Now the size of the largest point symbol is determined to find out
1653 about whether the point has been hit.
1654 This fixes the problem that only clicks inside a fixed distance of
1655 5 where found.
1656
1657 2004-11-17 Jan-Oliver Wagner <[email protected]>
1658
1659 Another open issue fixed regarding sizeable symbols: correct rendering of
1660 selected symbols.
1661
1662 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
1663 Added consideration of the specific size of point symbols.
1664 The property for each point symbol is retrieved and the size applied
1665 for the rendering method.
1666 Added doc-string.
1667
1668 2004-11-16 Jan-Oliver Wagner <[email protected]>
1669
1670 Changed way of Extension Registry for gns2shp and profiling.
1671
1672 * Extensions/gns2shp/gns2shp.py: Removed registry entry (moved to
1673 __init__.py).
1674
1675 * Extensions/gns2shp/__init__.py: Added registry entry and the importing
1676 of the actual gns2shp module.
1677
1678 * Extensions/profiling/profiling.py: Removed registry entry (moved to
1679 __init__.py).
1680
1681 * Extensions/profiling/__init__.py: Added registry entry and the importing
1682 of the actual profiling module.
1683
1684 2004-10-28 Bernhard Reiter <[email protected]>
1685
1686 * Extensions/svgexport/: Minor improvements to doc strings.
1687
1688 2004-10-07 Jan-Oliver Wagner <[email protected]>
1689
1690 Further elements for sizable point objects now
1691 making this feature usable though not yet complete.
1692
1693 * Thuban/Model/save.py (SessionSaver.write_classification): Write
1694 attribute 'size' for cldata when the shape layer is of point type.
1695 This also now make the test_load.py tests happy.
1696
1697 * Thuban/Model/classgen.py (CustomRamp.GetProperties): Added size
1698 gradient.
1699
1700 * Thuban/UI/classifier.py (ID_SELPROP_SPINCTRL): Renamed to
1701 ID_SELPROP_SPINCTRL_LINEWIDTH.
1702 (ID_SELPROP_SPINCTRL_LINEWIDTH): New Id replaces ID_SELPROP_SPINCTRL.
1703 (ID_SELPROP_SPINCTRL_SIZE): New Id.
1704 (SelectPropertiesDialog.__init__): Added a second spin control
1705 for the size in case the corresponding layer is of point type.
1706 (SelectPropertiesDialog._OnSpin): Renamed to _OnSpinLineWidth.
1707 (SelectPropertiesDialog._OnSpinLineWidth): New. Former _OnSpin.
1708 (SelectPropertiesDialog._OnSpinSize): New. Set size of property
1709 and refresh preview.
1710
1711
1712
1713 2004-10-04 Martin Schulze <[email protected]>
1714
1715 * Extensions/wms/test/test_parser.py
1716 (TestWMSCapabilitiesParser.test_compareLists): Added missing
1717 self-test for compareLists()
1718 (TestWMSCapabilitiesParser.test_compareDicts): Added missing
1719 self-test for compareDicts()
1720 (TestWMSCapabilitiesParser.test_compareLists): Adding more tests
1721 to verify the test routine fails with non-equal arguments
1722 (TestWMSCapabilitiesParser.test_compareDicts): Adding more tests
1723 to verify the test routine fails with non-equal arguments
1724
1725 2004-10-03 Jan-Oliver Wagner <[email protected]>
1726
1727 First elements for sizeable point objects.
1728
1729 * Resources/XML/thuban-1.1.dtd: Added size attribute to cldata.
1730
1731 * Data/iceland_sample_size.thuban: New. Sample for sized point objects.
1732
1733 * test/test_load.py (ClassificationTest.TestLayers): Added SetSize in case
1734 of a corresponding argument is given.
1735 (TestSymbolSize): New. Test the size attribute of cldata.
1736
1737 * Thuban/Model/classification.py: Removed some trailing whitespaces.
1738 (ClassGroupProperties.__init__): Set default size.
1739 (ClassGroupProperties.SetProperties): Set the size.
1740 (ClassGroupProperties.GetSize): New. Return the size.
1741 (ClassGroupProperties.SetSize): New. Set the size.
1742 (ClassGroupProperties__eq__): Compare also size.
1743 (ClassGroupProperties__repr__): Print also size.
1744
1745 * Thuban/Model/load.py (SessionLoader.start_cldata): Also parse
1746 the size attribute.
1747
1748 * Thuban/UI/classifier.py (ClassDataPreviewer.Draw): Added doc-string.
1749 Also, now there is a return value that indicates whether the drawing
1750 size exceeded the given rect extent and if so the new extent.
1751 Finally, point objects are drawn depending on the size. If either
1752 the width or height is exceeded, the new extent is returned.
1753 (ClassRenderer.Draw): Now when calling the previewer drawing function,
1754 evaluate the return value and, if not None, adapt the grid widget size
1755 accordingly and redraw again.
1756
1757 * Thuban/UI/baserenderer.py (BaseRenderer.draw_shape_layer_incrementally):
1758 If the draw function is for points, call it with the size as additional
1759 parameter.
1760 (BaseRenderer.draw_point_shape): Added additional, optional parameter for
1761 the size. Compute the radius using the size.
1762
1763 * Extensions/importAPR/apr.py (APR_BMkSym.GetThubanProp): Now
1764 that Thuban supports size, apply this correctly.
1765
1766 * Extensions/importAPR/importAPR.py: Bumped version to 0.1.1.
1767
1768 2004-10-03 Jan-Oliver Wagner <[email protected]>
1769
1770 * Doc/manual/thuban-manual-de.xml: Started translation of
1771 Map chapter.
1772
1773 2004-10-01 Martin Schulze <[email protected]>
1774
1775 * Extensions/wms/properties.py (wmsProperties.__init__): Extended
1776 argument for general use through properties-dialog selector
1777
1778 * Thuban/UI/classifier.py: Register properties dialog classes for
1779 both provided layer classes/types.
1780
1781 * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): The
1782 map can be retrieved through the parent which is passed to the
1783 constructor anyway and doesn't require an argument of its own,
1784 required for the unification of arguments for general use through
1785 properties-dialog selector.
1786 (MainWindow.OpenOrRaiseDialog): Move the logic for checking
1787 whether a dialog is already opened (and raising it to the users
1788 attention) and creating a new dialog into a function of its own
1789 (MainWindow.OpenLayerProperties): Use the new OpenOrRaiseDialog()
1790 method
1791 (MainWindow.OpenLayerProperties): Utilise the new ClassMapper for
1792 global registration of properties dialog classes (which are indeed
1793 layer-specific).
1794
1795 * Thuban/UI/classifier.py (Classifier.__init__): Unify arguments
1796 for general use through properties-dialog selector, the map can be
1797 retrieved through the parent and doesn't require an argument of
1798 its own.
1799
1800 * Extensions/wms/wms.py: Register the properties dialog class for
1801 the provided WMS layer
1802
1803 2004-09-28 Jan-Oliver Wagner <[email protected]>
1804
1805 New feature: Registry for Extensions.
1806
1807 * Thuban/UI/extensionregistry.py: This module defines a registry for
1808 Extensions.
1809
1810 * Thuban/UI/about.py (About.__init__): Added description
1811 of the registered extensions with all of the information.
1812
1813 * Thuban/Model/extension.py (Extension): Improved doc-string.
1814
1815 * Extensions/gns2shp/gns2shp.py, Extensions/importAPR/importAPR.py,
1816 Extensions/bboxdump/bboxdump.py, Extensions/profiling/profiling.py,
1817 Extensions/wms/wms.py: Added registration of the extension.
1818
1819 2004-09-27 Bernhard Reiter <[email protected]>
1820
1821 More fixes to svgexport to make used ids unique and
1822 conforming to XML's Name production.
1823
1824 * Extensions/svgexport/test/test_svgmapwriter.py: Added new tests
1825 test_xml_id_constraints(), test_make_ide_nosetbaseid() and
1826 test_make_id_nonintegersetid(). Switched SetID and SetBaseID.
1827 Added Bernhard R. as author.
1828 * Extensions/svgexport/svgmapwriter.py (make_id): Using "_" as
1829 concatenation char now (makes test_make_ide_nosetbaseid() valid).
1830 Also transform second id part with "%d" and catch the TypeError
1831 to raise SVGMapWriterError (making test_make_id_nonintegersetid() ok).
1832 Corrected typo inBernhard's author line.
1833 (SetBaseID): Return the transformed base id. Transform characters
1834 which are not alnum() or in ".-_" to binascii.b2a_hex(). Added
1835 import binascii. If to be set string starts with "xml" or so, add "t".
1836 (draw_shape_layer_incrementally): use the returned value of SetBaseID
1837 for used_baseids checks.
1838
1839 2004-09-25 Bernhard Herzog <[email protected]>
1840
1841 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
1842 Remove a debug print and some tab characters.
1843
1844 2004-09-25 Bernhard Reiter <[email protected]>
1845
1846 * Extensions/svgexport/svgmapwriter.py: Added Bernhard R. as Author.
1847 (SetBaseID, SetID, make_id): Improved docstring comments to explain
1848 the interaction of the three functions and the XML id contrains.
1849
1850
1851 2004-09-23 Jan-Oliver Wagner <[email protected]>
1852
1853 * Doc/ThubanModel.xmi: New. UML file for Thuban Model
1854 Module.
1855
1856 * Doc/README: Added info on ThubanModel.xmi.
1857
1858 2004-09-23 Jan-Oliver Wagner <[email protected]>
1859
1860 * Doc/README: New. Some info about how to generate technical
1861 documentation from the source code.
1862 This text was send to the Thuban developer mailing list on
1863 September 21st 2004 by Bernhard Reiter.
1864
1865 2004-09-21 Bernhard Reiter <[email protected]>
1866
1867 Improved the svgexport to only use unique ids. Will issues
1868 an error message dialoge when two layer names are the same.
1869 ShapeIDs are now added with a dash within the svg ids.
1870
1871 * Extensions/svgexport/svgmapwriter.py (SVGMapWriterError): New.
1872 * Extensions/svgexport/test/test_svgmapwriter.py: Added imports
1873 (TestSVGRenderer): New test class with test_make_in() and
1874 test_check_for_layer_name_clash()
1875 * Extensions/svgexport/svgmapwriter.py (SVGRenderer): Fixed __init__()
1876 and draw_shape_layer_incrementally() to not use a baseid twice,
1877 satisfying test_check_for_layer_name_clash()
1878 (VirtualDC.make_id): Use a dash between baseit and id, satisfies
1879 test_make_in().
1880 * Extensions/svexport/svgsaver.py: Import SVGMapWriterError, wxOK
1881 and wxICON_HAND.
1882 (write_to_svg): Put dc and rendering in a try statement and on
1883 catching SVGmapWriterError notify the user and delete the target file.
1884
1885 2004-09-20 Bernhard Reiter <[email protected]>
1886
1887 * Model/base.by, Model/layer.py: Fixed typos in docstrings.
1888
1889 2004-09-03 Jan Schüngel <[email protected]>
1890
1891 * Extensions/umn_mapserver/mapfile(MF_Class.add_thubanstyle): Fix a
1892 small bug with the line color. Now the line color will now only set
1893 if it is set in Thuban an not Transparent.
1894
1895 * Extensions/umn_mapserver/mf_export(tblayer_to_map): Fixed a bug with
1896 deleting the layers from mapfile. Now all layers will delete backwards
1897 from the last.
1898
1899 2004-08-20 Silke Reimer <[email protected]>
1900
1901 * Thuban/Model/layer.py:
1902 Fixes bug in projection handling: Otherwise very large region might not
1903 have valid values in the layer's projection.
1904
1905 2004-08-20 Silke Reimer <[email protected]>
1906
1907 * Thuban/UI/about.py:
1908 small changes to be consistent with coding style.
1909
1910 2004-08-13 Martin Schulze <[email protected]>
1911
1912 * Extensions/wms/test/test_ogclib.py (TestOGCLib.compare_URLs):
1913 Adjusted a comment
1914
1915 2004-08-11 Silke Reimer <[email protected]>
1916
1917 * Thuban/UI/about.py: Small changes to encoding related stuff to avoid
1918 too many and too enhanced imports of locale
1919
1920 2004-08-10 Silke Reimer <[email protected]>
1921
1922 * Thuban/UI/about.py: Fixed encoding problem of about dialog: Added
1923 function unicodeToLocale() to convert special characters to users
1924 locale encoding
1925
1926 2004-08-10 Jan-Oliver Wagner <[email protected]>
1927
1928 * Doc/technotes/coding_guidelines.txt: Added rule 'Method names start with
1929 lower case letter'
1930
1931 2004-08-09 Jan Schüngel <[email protected]>
1932
1933 * ChangeLog: Rewrite the last ChangeLog entry to follow
1934 the standard way.
1935
1936 * Extensions/umn_mapserver/mapfile: Moved the import AnnotationLayer to
1937 the function where it is needed, because it don't works if it stands
1938 at the beginning.
1939 (MF_Layer.__init__): Removed the extra numclassed variable. Now
1940 numclasses from the mapscript will be used.
1941 (MF_Layer.get_index): New. Return the index of the layer in mapfile.
1942 (MF_Layer.set_classes): New. A Classlist will be set to the layer.
1943 (MF_Layer.set_metadata): New. A Metadata mapscript object will set.
1944 (MF_Layer.remove_allclasses): New. All class of the layer will remove.
1945 (MF_Map.create_new_layer): New. A new Layer is created and associated
1946 with the mapscript object.
1947 (MF_Map.set_layerorder): New. The Layer order like in thuban is set in
1948 the mapscript.
1949 (MF_Map.add_thubanlayer): Now a new layerobj is created if no one is
1950 linked to the layer in thuban, else the layerobject linked to the
1951 thubanlayer will be used.
1952 AnnotationLayer will now store the filename of the shapefile.
1953 (MF_Map.remove_layer): If a layer is removed the associated object
1954 must be set new.
1955
1956 * Extensions/umn_mapserver/mf_export.py(tb_layer_to_map): Add all
1957 layers which are exists in thuban to the mapobj. All removed Layers
1958 will be removed from the mapobj.
1959 Added comments to all functions.
1960 (thuban_to_map): No layer will be removed here.
1961
1962 * Extensions/umn_mapserver/mf_handle.py
1963 (_has_umn_mapobj_and_selectedlayer): Activating the layer menu. Now
1964 Layersettings for the mapserver kann be edited.
1965
1966 * Extensions/umn_mapserver/mf_import.py: Now all layers which are
1967 imported, will be linked with the associated MF_Layer.
1968 (import_mapfile): All layers, which are not selected, will be removed.
1969 Disable the "import layer from mapfile" menu option.
1970
1971 * Extensions/umn_mapserver/sample/iceland.map: Set the status of the
1972 Annotation Layer from DEFAULT to OFF. The DEFAULT setting turns the
1973 layer on permanently.
1974
1975 2004-08-03 Jan Schüngel <[email protected]>
1976
1977 * Extensions/umn_mapserver/mapfile.py(MF_Metadata.remove_allmetadata):
1978 New. This function removes all metadata
1979 (MF_Layer.set_group): New. Set the group setting.
1980 (MF_Layer.get_group): New. Get the group setting.
1981 (MF_Map): Removed the extra numlayers variable, used the mapscript
1982 parameter instead.
1983 (MF_Map.get_numlayers): New. This get numlayers.
1984 (MF_Map.remove_all_layers): New. Removes all layers from the mapobj.
1985 (MF_Map.add_thubanlayer): Replaced the exception handling by a check
1986 if the object is an instance. Also added the annotation layer here to
1987 export, but only the layer is created in the mapfile.
1988
1989 * Extensions/umn_mapserver/mf_export.py(export_mapfile): Removed
1990 the check if a mapobj exist, because its not needed anymore. The
1991 export function is only available if a mapobj exist.
1992 Use the new function to remove all layers.
1993
1994 * Extensions/umn_mapserver/mf_handle.py(Layer_Dialog): Added a group
1995 option and the metadata button. The layer dialog is temporary disabled.
1996 (Metadata_CustomDataTable): Added some functions to show the grid
1997 correct.
1998
1999 * Extensions/umn_mapserver/mf_import.py: Moved the code for showing
2000 the number of layer from import_mapfile to this function.
2001 (AnnotationLayer): New. This Class shows the Annotation layer in
2002 thuban. The layer don't do anything. It's only to show the layer
2003 and to save the layer order.
2004 (add_annotationlayer): New. Import an annotation layer to thuban.
2005 (select_layer2import): New. Import only layers to thuban and not
2006 the other settings like projection or scalebar.
2007 (create_new_mapfile): Moved the _has_umn_mapobj function and the
2008 create_new_mapfile functions from mf_handle.py to mf_import.py.
2009
2010 * Extensions/umn_mapserver/sample/iceland.map: Added the group
2011 parameter to the roads and cultural layers. Also added a new
2012 Annotation Layer for the cultural points.
2013
2014 * Extensions/umn_mapserver/sample/iceland.html: Added the select
2015 option for the annotation layer.
2016
2017 * Extensions/umn_mapserver/sample/index.html: Added the start
2018 parameter for the annotation layer.
2019
2020 2004-08-01 Jan-Oliver Wagner <[email protected]>
2021
2022 * Doc/manual/thuban-manual-de.xml (Chapter Session Management):
2023 translation completed.
2024
2025 * Doc/manual/thuban-manual.xml (Chapter Session Management):
2026 Fixed unprecise description for Save Session.
2027
2028 2004-07-31 Jan-Oliver Wagner <[email protected]>
2029
2030 Started translation of Users Manual into german.
2031
2032 * Doc/manual/thuban-manual-de.xml: New. German Users Manual.
2033
2034 * Doc/manual/Makefile: Added build instructions for german
2035 users manual.
2036
2037 * Doc/manual/thuban-manual.xml: Minor corrections in Introduction.
2038
2039 2004-07-28 Jan Schüngel <[email protected]>
2040
2041 * Extensions/umn_mapserver/mapfile.py(MF_Metadata): Changed all class
2042 functions. Now all metadata will handle by the function and its not
2043 needed to initialize it from outside. Therefor the associated mapobj
2044 will be stored in the Metadata Object. So we can use the special
2045 functions from the associated mapobj to get the Metadata.
2046 Therefor all initialization code for the metadata is removed from the
2047 other classes.
2048 (MF_Layer): Added a function to get the metadata object.
2049 (MF_Map): Added a function to set the mappath, the path where
2050 the mapfile ist stored.
2051
2052 * Extensions/umn_mapserver/mf_export.py(thuban_to_map): Changed the code
2053 to set the extent in the mapfile. Now the code is set by the displayed
2054 data in the Thuban-view.
2055 (export_mapfile): The shapepath is now set empty, until relative
2056 pathnames are supported.
2057
2058 * Extension/umn_mapserver/mf_handle.py: Added a dialog to handle
2059 metadata. Yet only mapfile metadata are supported. Layer and class
2060 supported are not implemented.
2061 Added a dialog to handle layer informations. The dialog only shows the
2062 selected layer at the moment.
2063
2064 * Extensions/umn_mapserver/mf_import.py(import_mapfile): Changed the
2065 code for setting the extent in thuban. Now the extent is set to the
2066 given extent from the mapfile.
2067 Fixed a logical mistake. Now the extent is set when realy a layer is
2068 loaded, and not if one is selected to load.
2069
2070 * Extensions/umn_mapserver/sample/iceland.html: Added code to zoom and
2071 move the shown map in the browser.
2072
2073 * Extensions/umn_mapserver/sample/iceland.map: Added a new metadata
2074 line to the mapobj and added metadata to the political layer.
2075
2076 * Extensions/umn_mapserver/test/test_mapserver.py: Changed the test
2077 for Metadata.
2078
2079 2004-07-26 Martin Schulze <[email protected]>
2080
2081 * Thuban/Lib/classmapper.py (ClassMapper.has): Added the new
2082 ClassMapper
2083
2084 * test/test_classmapper.py (TestMapping.test_mapper): Added a Test
2085 case for the new ClassMapper
2086
2087
2088 2004-07-22 Bernhard Herzog <[email protected]>
2089
2090 * Thuban/UI/viewport.py (ViewPort.VisibleExtent): New. Return the
2091 visible extent of the map in projected coordinates
2092
2093 * test/test_viewport.py (SimpleViewPortTest.test_default_size)
2094 (SimpleViewPortTest.test_init_with_size): Add some VisibleExtent()
2095 tests.
2096 (SimpleViewPortTest.test_visible_extent): New. The real test for
2097 VisibleExtent()
2098
2099 2004-07-22 Bernhard Herzog <[email protected]>
2100
2101 * test/test_viewport.py: Use support.run_tests as the main
2102 function when running asa script.
2103
2104 2004-07-22 Jan Schüngel <[email protected]>
2105
2106 * Extensions/umn_mapserver/mf_export.py: Added "import os"
2107 Removed the old "import Thuban.UI.mainwindow" code.
2108 (tbextent_to_map): Removed the extra function and at the code direct
2109 to "thuban_to_map" function.
2110 (write_creatorcomment): Added. Now a short comment is added to the
2111 beginning of an generated mapfile.
2112 (export_mapfile): Now the Path and filename are saved in to variables,
2113 and not together in one variable. This is needed for the new
2114 write_creatorcomment function.
2115
2116 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Added the
2117 import module "re". Also added Range and the ClassGroupRange import
2118 from Thuban. Both are needed for the new range expression import.
2119 (create_rangeexpression): Added. Creates a Range Expression in Thuban
2120 style from a given mapfile expression.
2121 (added_rasterlayer): Make some small code changes. The shapepath is
2122 now stored in an extra variable and the clazz_name is set empty if no
2123 class name set in the mapfile.
2124 Changed the Error message for Range Expressions, becaus the new
2125 function create a error string which will be shown in the dialog.
2126
2127 * Extensions/umn_mapserver/test/test_mapserver.py: Added a test for the
2128 range expression import.
2129
2130 2004-07-21 Jan-Oliver Wagner <[email protected]>
2131
2132 * Extensions/umn_mapserver/README: Added hint that
2133 installation as root can be avoided. Removed all tabs.
2134
2135 2004-07-16 Bernhard Herzog <[email protected]>
2136
2137 * test/test_viewport.py
2138 (ViewPortTest.test_changing_map_projection): Check that changing
2139 the projection of an empty map shown in a viewport doesn't lead to
2140 exceptions in the viewport's handler for the
2141 MAP_PROJECTION_CHANGED messages
2142
2143 * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Only
2144 try to keep the same region visible when the map actually contains
2145 something
2146
2147 2004-07-15 Jan Schüngel <[email protected]>
2148
2149 * Extensions/umn_mapserver/mapfile.py: Added a function to get the
2150 mappath directly from the mapobj. Is needed because of the changes
2151 in mf_import.py.
2152 (MF_Layer.add_thubanclass): Added a new comment.
2153 (MF_Map.set_extent): Fixed a bug with exporting empty mapobj. If the
2154 mapobj is empty there is no extent get from thuban an so no one can
2155 set to th mapobj.
2156
2157 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Updated
2158 the discription.
2159 Split the funktion in to three smaller ones. The new functions are
2160 add_rasterlayer, add_polygonlayer and select_layer2import.
2161 Removed the mapfilepath and filepath initialisation, because its know
2162 include in the new functions.
2163 Now nothing will be imported if cancel is pressed in the
2164 layer choice dialog.
2165
2166 2004-07-14 Jan Schüngel <[email protected]>
2167
2168 * Extensions/umn_mapserver/mapfile.py: Added ClassGroupDefault to
2169 import.
2170 (MF_Symbolset): Removed the extra variable for numsymbols.
2171 (MF_Class.__init__): Added a comment to the exception clause.
2172 Removed the extent init, because it was not needed anymore.
2173 (MF_Layer.add_thubanclass): Added the code to set the class name to
2174 the expression value from thuban if no label is defined.
2175 Added the code to export Range expressions from thuban to the mapfile.
2176 (MF_Map.set_extent): Removed the exception and replace it by some if
2177 code. If the size of a map is not defined the size will be set to 1,1.
2178 This is necessary because if the extent is set, mapscript checks if
2179 the size is greater than zero.
2180 (MF_Web): Added the get and set function for the template.
2181
2182 * Extensions/umn_mapserver/mf_export.py: Added the function to check
2183 if a mapobject exists and used it to set the status of the menu items.
2184 If no mapfile exists the settings could not be edditied.
2185 Define after which menuitem the exportitem will include.
2186
2187 * Extensions/umn_mapserver/mf_handle.py: Removed the import
2188 Thuban.UI.mainwindow clause, because it is not needed.
2189 Added the command Refresh() to all "OnChangeColor()" functions,
2190 because the color preview window was not updated on a color change.
2191 Added the function to check if a mapobject exists and used it to set the
2192 status of the menu items. If no mapobject exists the settings could not
2193 be edditied.
2194 (Map_Dialog): Moved the imagetype selector from the
2195 Outputformat_Dialog to Map_Dialog and removed Outputformat_Dialog.
2196 (Web_Dialog): Removed the name label and added the template textbox.
2197
2198 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Replace
2199 the exception handling on loading the layers by an if statement. It
2200 is not necessary to us the exception there.
2201 The Filepath creation now use os.path.join to build the path.
2202
2203 * Extensions/umn_mapserver/test/test_mapserver.py: Moved the testMap
2204 definition from global to the setUp function. Now the testMap will
2205 initialize new on each test.
2206
2207 * Extensions/umn_mapserver/sample/iceland.map: Include three new
2208 classes in the Line Layer, to test logical Expressions.
2209 Set the status of the class "Point9" in the Point Layer to off
2210
2211 2004-07-13 Bernhard Herzog <[email protected]>
2212
2213 * Thuban/UI/baserenderer.py
2214 (BaseRenderer.render_map_incrementally): Fix a logic bug in the
2215 optimization that tries not to draw layers under a raster layer.
2216 The bug was harmless. All it effectively did was to produce The a
2217 strange messages about not being able to draw Layer instances for
2218 all vector layers below a raster layer which would be invisible
2219 anyway because the raster layer currently always covers the entire
2220 window
2221
2222 2004-07-08 Jan Schüngel <[email protected]>
2223
2224 * Extensions/umn_mapserver/mapfile.py: Added code to generade and get
2225 a list of supported outputformats. This formats are not alle supported
2226 because there is no possibility to get the outputformat without the
2227 name known. Make some formal changes to the code.
2228 (MF_Map.set_name()): Fixed a bug if the name is None.
2229
2230 * Extensions/umn_mapserver/mf_handle.py: Removed the image_type import
2231 statement, because its not needed anymore. The Outputformat is now
2232 given as string from the object. Make some formal changes to the code.
2233
2234 * Extensions/umn_mapserver/test/test_mapserver.py: Added new test for
2235 most of the new setting which were added during the last changes.
2236 Removed the MF_Size Test.
2237
2238 * Extensions/umn_mapserver/test/test.map: Added a new class to the
2239 cultural Layer to test expressions and the the status of that layer
2240 from on to default.
2241 Changed the data path the the correct Thuban Data
2242 Added the Outputformat Object and Symbol Object
2243
2244 2004-07-07 Jan Schüngel <[email protected]>
2245
2246 * Extensions/umn_mapserver/mapfile.py: Added some new
2247 settings to edit (outputformat, label, imagetype)
2248
2249 * Extensions/umn_mapserver/mf_handle.py: Added some setting to
2250 the Label Dialog and add the OutputDialog.
2251 Make some changes to the code order.
2252
2253 2004-07-06 Jan Schüngel <[email protected]>
2254
2255 * Extensions/umn_mapserver/mapfile.py: Added the symbolObj, pointObj
2256 and line Obj and add the scalebar_status_type, scalebar_style_type and
2257 scalebar_position_type.
2258 Added the symbol- and symbolsetObject (MF_Symbol,MF_Symbolset). The
2259 are only used to create a Symbol like the circle in Thuban.
2260 Added the scalebarObject (MF_Scalebar)
2261 (MF_Class): Added set_status and get_status.
2262 (MF_Layer.add_thubanclass): Added code to set the class status
2263 (MF_Map): Added code to handle the symbols and scalebar
2264 (MF_Label): Added the set_partials and get_partials functions
2265
2266 * Extensions/umn_mapserver/mf_export.py: Added MF_Symbol to import
2267 from mapfile. Added a function to create a circle object like the one
2268 from thuban if no one exists.
2269
2270 * Extensions/umn_mapserver/mf_handle.py: All colors are now set when
2271 press ok in the assosiated dialog and not at the end of the
2272 colordialog.
2273 Added the Dialog for the Scalebar.
2274 (Label_Dialog): Added the offset option
2275
2276 * Extensions/umn_mapserver/mf_import.py: Added code to import the
2277 status of the Classes.
2278 Fixed a bug with the projection. Now the to_meter parameter will be
2279 added to the Projection only if it doesn't exists.
2280
2281 2004-07-01 Jan Schüngel <[email protected]>
2282
2283 Added the functionality to handle the content thuban is not
2284 able to handle directly.
2285
2286 * Extensions/umn_mapserver/mf_handle.py: New. This module extents
2287 Thuban with the possibility to edit the mapfile content.
2288
2289 * Extensions/umn_mapserver/mf_import.py: Added the possibility
2290 to import mapfiles without any layer selected. So it is possible
2291 to edit the other settings in a mapfile.
2292 (import_mapfile): Added code to use the editing functions.
2293 Added the possibility to import the projection to a layer if one
2294 is defined.
2295 Status settings (On,Off) will now set in thuban (visible, invisible).
2296 fixed a bug with with classnames. If no classname is set in mapfile
2297 the value in Thuban will set to the expression.
2298
2299 * Extensions/umn_mapserver/mf_export.py(export_mapfile): Added the
2300 possibility to save a new mapfile or use the old one which is
2301 imported or new created.
2302 Added code to use the editing functions.
2303 Remove some not needed import statements
2304
2305 * Extensions/umn_mapserver/mapfile.py: Added new types which are
2306 need for the editing functions.
2307 Added needed set-functions for the editing functions.
2308 Added the possibility to export rasterimages.
2309 Added new classes (MF_Web, MF_Label, MF_Legend, MF_Symbol,
2310 MF_SymbolSet). MF_Symbol and MF_SymbolSet are not needed at the
2311 moment.
2312 (MF_Class.set_thubanstyle): Now point layers will set to a default
2313 symbol to show a circle in mapserver and not only a 1px dot.
2314 (MF_Style.__init__): Fixed a bug with the color. Color was not set
2315 correct before.
2316 (MF_Size): Removed, because it is not needed.
2317
2318 * Extensions/umn_mapserver/README: Added the hints to use the
2319 export and editing functions, too.
2320
2321 * Extensions/umn_mapserver/sample/iceland.map: Added the
2322 new parameter "UNITS METERS".
2323 Change the political layer to status OFF.
2324
2325 * Extensions/umn_mapserver/sample/README: Added some
2326 more details to setup the sample in the MapServer.
2327
2328 2004-06-26 Bernhard Reiter <[email protected]>
2329
2330 * Extensions/svgexport/test/test_svgmapwriter.py:
2331 Removed class VFile and used standard StringIO instead.
2332
2333 2004-06-23 Jan Schüngel <[email protected]>
2334
2335 Add the export function to the umn_mapserver extension.
2336
2337 * Extension/umn_mapserver/mf_export.py: New. This module extents
2338 Thuban with the possibility to export the Thuban content.
2339
2340 * Extensions/umn_mapserver/mapfile.py: Expand the classes to use
2341 with the export module. Especially added the possibility to
2342 add thuban objects directly to the map objects.
2343
2344 * Extensions/umn_mapserver/mf_import.py: Removed the wxCHANGE_DIR,
2345 because of the hint from Bernhard Herzog.
2346 Corrected the handling of absolute pathnames.
2347 Changed the Text of the Menu-Item, now the beginning is upper case.
2348
2349 * Extensions/umn_mapserver/README: Added the --with-tiff statement.
2350
2351 2004-06-16 Jan Schüngel <[email protected]>
2352
2353 Add a sample and make some changes.
2354
2355 * Extension/umn_mapserver/mf_import.py: Changed the wxPython.wx
2356 import from * to explicit used statements. Changed the
2357 Thuban.UI.mainwindow import phrase, too.
2358 (import_mapfile):Corrected a clerical mistake.
2359 Added wxCHANGE_DIR in OpenFile Dialog.
2360 Added a MultipleChoiceDialog, to select the layers to load from
2361 mapfile into thuban. Thereby the projection is only set if one layer
2362 is selected.
2363 Added the possibility to handle relative pathnames which uses
2364 up-level references.
2365 Removed some doubled code.
2366 Corrected an error with integer values used as label in thuban
2367 ClassGroup.
2368
2369 * Extensions/umn_mapserver/sample: New.
2370
2371 * Extensions/umn_mapserver/sample/README: New. Describes the
2372 usage of the sample files.
2373
2374 * Extensions/umn_mapserver/sample/iceland.map: New. This is
2375 a suitable .map-file for the iceland data.
2376
2377 * Extensions/umn_mapserver/sample/index.html: New. The template
2378 for the mapfile.
2379
2380 * Extensions/umn_mapserver/sample/iceland.html: New. Initialisation
2381 file for the Iceland Application on web.
2382
2383 * Extensions/umn_mapserver/README: Corrected a inaccuracy and added
2384 some details.
2385
2386 * Extensions/umn_mapserver/test/test_mapserver
2387 (mapserver_import_Test_generalClasses.test_MF_Color):
2388 Corrected the thubancolor test.
2389
2390 2004-06-15 Jan Schüngel <[email protected]>
2391
2392 * Extensions/umn_mapserver/README: New. Install instruction.
2393
2394 2004-06-14 Bernhard Reiter <[email protected]>
2395
2396 * libraries/thuban/cpl_mfile.h: Added copyright header.
2397
2398 * libraries/thuban/ cpl_mfile.cpp, cpl_mfile.h: Added non-protecting
2399 Free Software License so that it is most useful with gdalwarp
2400 and bmpdataset.
2401
2402 2004-06-14 Bernhard Herzog <[email protected]>
2403
2404 * Thuban/UI/multiplechoicedialog.py (__version__): Add missing
2405 import of wxPython.wx itself (as opposed to the contents of
2406 wxPython.wx). For some reason wxPython.wx is available as
2407 wxPython.wx.wx in at least some 2.4 releases. Fixes RT#2482
2408 wrt. wxPython 2.4.
2409
2410 2004-06-10 Jan Schüngel <[email protected]>
2411
2412 Initial version of new extension "umn_mapserver". This extension aims
2413 to manage configuration for the UMN MapServer application. This
2414 inital version just imports the .map-files and displays all, Thuban is
2415 capable of.
2416
2417 * Extensions/umn_mapserver, Extensions/umn_mapserver/test: New.
2418
2419 * Extensions/umn_mapserver/test/README: New. Describes how to run the
2420 tests.
2421
2422 * Extensions/umn_mapserver/test/test.map: New. This is a test
2423 .map-file for automated tests of the umn_mapserver extension of
2424 Thuban.
2425
2426 * Extensions/umn_mapserver/test/test_mapserver.py: New. Tests for
2427 UMN Mapserver classes.
2428
2429 * Extensions/umn_mapserver/__init__.py: New. Init to make this
2430 directory a package.
2431
2432 * Extensions/umn_mapserver/mapfile.py: New. Classes to represent
2433 '.map'-file objects.
2434
2435 * Extensions/umn_mapserver/mf_import.py: New. This module extends
2436 Thuban with the possibility to handle UMN MapServer mapfiles.
2437
2438 2004-06-03 Bernhard Herzog <[email protected]>
2439
2440 * Thuban/Model/layer.py (Layer.TreeInfo): Convert the bounding box
2441 to a tuple before using it as arguments to the % operator. This
2442 fixes the formatting issue filed in RT#2239 on 2004-01-13 and
2443 reported today on thuban-list by Jan Schüngel
2444
2445 * test/test_layer.py (TestLayerModification.setUp): Save the
2446 filename as an instance variable so we can refer to it in tests
2447 (TestLayerModification.test_tree_info): Uncomment this method
2448 again and make it work. This tests for the formatting issue
2449 filed in RT#2239 on 2004-01-13
2450
2451 2004-05-28 Bernhard Herzog <[email protected]>
2452
2453 * Thuban/UI/baserenderer.py: Fix some typos.
2454
2455 2004-05-18 Jan-Oliver Wagner <[email protected]>
2456
2457 * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed a bug
2458 by increasing a field size.
2459
2460 2004-05-17 Bernhard Herzog <[email protected]>
2461
2462 Update to newest shapelib and get rid of Thuban specific
2463 extensions, i.e. use the new DBFUpdateHeader instead of our
2464 DBFCommit kludge
2465
2466 * libraries/shapelib/shpopen.c: Update to version from current
2467 shapelib CVS.
2468
2469 * libraries/shapelib/shapefil.h: Update to version from current
2470 shapelib CVS.
2471
2472 * libraries/shapelib/dbfopen.c: Update to version from current
2473 shapelib CVS.
2474 (DBFCommit): Effectively removed since shapelib itself has
2475 DBFUpdateHeader now which is better for what DBFCommit wanted to
2476 achieve.
2477 We're now using an unmodified version of dbfopen.
2478
2479 * setup.py (extensions): Add the HAVE_UPDATE_HEADER macro with
2480 value '1' to the Lib.dbflibc extension. This simply reflects the
2481 shapelib and pyshapelib updates
2482
2483 2004-05-16 Jan-Oliver Wagner <[email protected]>
2484
2485 Finished introduction of Menu.FindOrInsertMenu.
2486
2487 * Extensions/drawshape/drawshape.py: Add the command
2488 to the experimental menu additionally to the toolbar.
2489
2490 * Extensions/svgexport/svgsaver.py: Use FindOrInsertMenu() instead of
2491 finding menu on its own.
2492
2493 * Doc/manual/thuban-manual.xml: updated sample file
2494 to use FindOrInsertMenu().
2495
2496 * Examples/simple_extensions/hello_world.py: Use FindOrInsertMenu()
2497 instead of finding menu on its own.
2498
2499 2004-05-11 Jan-Oliver Wagner <[email protected]>
2500
2501 * test/test_menu.py (MenuTest.test): Added testing
2502 of method Menu.FindOrInsertMenu.
2503
2504 2004-05-10 Jan-Oliver Wagner <[email protected]>
2505
2506 Introduce and use Menu.FindOrInsertMenu.
2507
2508 * Thuban/UI/menu.py (Menu.FindOrInsertMenu): New. Find a
2509 given menu or, if not found, insert it.
2510
2511 * Extensions/bboxdump/bboxdump.py, /Extensions/gns2shp/gns2shp.py,
2512 /Extensions/importAPR/importAPR.py, Extensions/profiling/profiling.py,
2513 /Extensions/wms/wms.py: Use FindOrInsertMenu() instead of finding
2514 menu on its own.
2515
2516 2004-05-06 Jan-Oliver Wagner <[email protected]>
2517
2518 Introduce a abstract ColorDialog class and remove
2519 and outdated file.
2520
2521 * Thuban/UI/proj4dialog.py: Removed. It is has been
2522 replaced by projdialog for quite a while and is not used
2523 anymore.
2524
2525 * Thuban/UI/colordialog.py: New. Abstraction for color selection
2526 dialog(s).
2527
2528 * Thuban/UI/classifier.py (SelectPropertiesDialog.__GetColor):
2529 Now calls the abstract ColorDialog instead of wxColourDialog.
2530 This also removed the dependency to Color class conversion
2531 from this function.
2532
2533 2004-05-04 Frank Koormann <[email protected]>
2534
2535 * Extensions/bboxdump/__init__.py: Fixed string left over from
2536 copying.
2537
2538 * Extensions/bboxdump/bboxdump.py (bboxdump):
2539 Use layer.ShapeStore().AllShapes() to loop over shapes instead of
2540 xrange(layer.NumShapes()). Compile the bboxmessage from a list
2541 of formatted outputs (string.join) instead of appending to the
2542 message. Two progress bar dialogs to report progress on the sometimes
2543 lenghty processing.
2544
2545 2004-04-22 Frank Koormann <[email protected]>
2546
2547 New Extension to dump bounding boxes of all shapes of the selected
2548 layer. An optional column can be specified to group the objects,
2549 in this case the bounding box is a union of the separate boxes.
2550 Dump can be displayed in a ScrolledMessageDialog or written to file.
2551 The Extension is simply a combination of available and well tested
2552 Thuban functionality.
2553
2554 * Extensions/bboxdump/__init__.py: New: Init to make this
2555 directory a package.
2556
2557 * Extensions/bboxdump/bboxdump.py: New: Dump bounding boxes of
2558 all shapes of the selected layer.
2559
2560 2004-04-22 Jan-Oliver Wagner <[email protected]>
2561
2562 * Thuban/UI/classgen.py (GenUniquePanel.__init__): Fixed two
2563 strings to be i18n now.
2564
2565 2004-04-18 Jan-Oliver Wagner <[email protected]>
2566
2567 Changing popup menu of legend from direct building
2568 to using the Menu construction as used for the mainwindow.
2569
2570 * Thuban/UI/mainwindow.py: New method commands: layer_to_top,
2571 layer_to_bottom, layer_visibility
2572 (MainWindow.LayerToTop): New. Put current layer to the top.
2573 (MainWindow.LayerToBottom): New. Put current layer to bottom.
2574 (MainWindow.HideLayer, MainWindow.ShowLayer, _has_visible_map):
2575 Replace 1,0 by True, False.
2576 (MainWindow.ToggleLayerVisibility): New. Toggle visibility of
2577 current layer.
2578 (MainWindow.LayerShowTable): Removed raising of dialog.
2579 (_has_selected_layer_visible): New. Support function.
2580
2581 * Thuban/UI/legend.py: ID_POP_xxx: removed.
2582 (LegendPanel.__init__): Removed EVT_MENU bindings.
2583 (LegendTree._OnRightClick): Replace direct creation of
2584 menu via wx Classes by applying the menu definition
2585 as of Menu class of menu.py.
2586
2587 2004-04-16 Jan-Oliver Wagner <[email protected]>
2588
2589 * Thuban/UI/exceptiondialog.py (ExceptionDialog.dialog_layout): Improved
2590 button string to stronger clearify that Thuban will be closed when hitting
2591 the button.
2592
2593 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Added docstring.
2594 Now for layers without a ShapeStore a corresponding message is given
2595 to the user, that this layer has no table to show.
2596
2597 2004-04-15 Martin Schulze <[email protected]>
2598
2599 * Extensions/wms/layer.py (WMSLayer.setWMSFormat): Need to
2600 recalculate the format for the internal render engine as well.
2601
2602 * Extensions/wms/properties.py (wmsProperties): First start for a
2603 properties dialog. It's functional for a first selection of
2604 layers, but still has some weired wxWidgets/GTK problems but
2605 beautification can be done later.
2606
2607 * Extensions/wms/layer.py: Added more documentation
2608 (WMSLayer.getFormats): New: Return list of supported image formats
2609 by the WMS server
2610 (WMSLayer.getLayers): New: Return the list of layer names
2611 supported by the WMS server
2612 (WMSLayer.getLayerTitle): New: Return the title of the named layer
2613 (WMSLayer.getWMSFormat): New: Return the image format that is used
2614 for WMS GetMap requests
2615 (WMSLayer.setWMSFormat): New: Set the image format that is used
2616 for WMS GetMap requests
2617 (WMSLayer.__init__): Move away from using only one layer to using
2618 a list of layers (unsorted at the moment, though).
2619 (WMSLayer.getVisibleLayers): New: Return the list of names for all
2620 visible layers
2621 (WMSLayer.setVisibleLayers): New: Set the list of names for all
2622 visible layers
2623
2624 * Extensions/wms/wms.py: Moved the WMS layer into layer.py in
2625 order to establish a clean structure.
2626
2627 * Extensions/wms/layer.py: Moved the WMS layer into a file on its
2628 own in order to establish a clean structure.
2629
2630 2004-04-13 Martin Schulze <[email protected]>
2631
2632 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Added
2633 support for oldstyle (WMS 1.0 apparently) image format
2634 specification.
2635
2636 * Extensions/wms/wms.py (WMSLayer.calcFormat): Reduce the list of
2637 supported graphic formats back to JPEG and BMP, PNG and others are
2638 too *cough* experimental... Sorry, I meant to filter this out
2639 before I committed this part. This should make the WMS extension
2640 run from CVS again.
2641 (wms_dialog): Reset an empty URL to None so that the subsequent
2642 program can depend on this, since the dialog will indeed return an
2643 empty URL, causing another declaration of love by Python.
2644
2645 * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerBBox):
2646 Whenever a native BoundingBox request cannot be fulfilled, check
2647 whether the requested SRS is EPSG:3426, in which case return the
2648 LatLonBoundingBox values.
2649
2650 * Extensions/wms/test/test_parser.py
2651 (TestWMSCapabilitiesParser.test_LayerSRS): Added a test for
2652 ignoring AUTO:* SRS.
2653 (TestWMSCapabilitiesParser.test_LatLonBoundingBoxes_as_bboxes):
2654 Added another test method to test whether the LatLonBoundingBox
2655 values will be returned if BoundingBox values are requested with
2656 SRS set to EPSG:3426.
2657
2658 * Extensions/wms/parser.py (WMSCapabilitiesParser.peekLayers):
2659 Added rudimentary support for non-EPSG SRS, i.e. ignore them for
2660 the moment by placing them into a variable which is currently
2661 unused. Also test whether the EPSG SRS is numerical as it should
2662 be and add an error message if it is not.
2663
2664 * Extensions/wms/test/sample.xml: Added AUTO:* SRS since they
2665 appear in the real world as well. Since we cannot handle them yet
2666 (OGCLib can't either), we will ignore them for the moment.
2667
2668 * Extensions/wms/parser.py: Use a variable for denoting the sample
2669 filename
2670 (WMSCapabilitiesParser.peekLayers): Added support for error
2671 messages during grok(). They will be aggregated in an array and
2672 may be displayed later. We may have to add a classification
2673 "Warning" and "Error" to this. That requires more experience,
2674 though, since not every error may be lethal.
2675
2676 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Raise the
2677 ShowTable() dialog/frame when the user attempts to display it
2678 while it has been opened before already and not closed again.
2679
2680 2004-04-11 Martin Schulze <[email protected]>
2681
2682 * Extensions/wms/infodialog.py: Adjusted the class documentation
2683
2684 * Extensions/wms/wms.py (WMSLayer.__init__, WMSLayer.GetMapImg):
2685 Switch to using Thuban{Begin,End}BusyCursor instead of the pure
2686 wxWidgets variants.
2687 (WMSLayer.__init__): The epsg_id variable is named top_srs now.
2688
2689 * Extensions/wms/infodialog.py: Added an information dialog that
2690 will display various information about the WMS current resource,
2691 so that additional information such as the title, the abstract,
2692 fees and access constraints can be displayed for the user if they
2693 are documented in the WMS XML.
2694
2695 2004-04-10 Martin Schulze <[email protected]>
2696
2697 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Adjusted
2698 string handling. It's "foo".lower() and not lower(foo) without
2699 lower imported from strings or something.
2700
2701 * Extensions/wms/wms.py (WMSLayer): Incorporated WMSCapabilities
2702 from capabilities.py and parser.py. Implement priority list for
2703 supported graphics formats, take care of wbmp != bmp. PNG, TIFF
2704 and GIF are supported here, but not yet by main Thuban. Hence,
2705 support for them may be removed later. Special contribution to
2706 usability: get wxWidgets to change the cursor when we're waiting
2707 for data from the network so the user won't start to worry. This
2708 causes a redrawing error/warning, though.
2709
2710 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Unlink
2711 the DOM object.
2712
2713 2004-04-01 Martin Schulze <[email protected]>
2714
2715 * Extensions/wms/capabilities.py: Adjusted documentation
2716 (WMSCapabilities.__init__): Improved documentation, fixed syntax
2717 (WMSCapabilities.saveCapabilities): Only catch IOError when
2718 handling files
2719 (WMSCapabilities.loadCapabilities): Only catch IOError when
2720 handling files
2721 __main__: corrected variable naming
2722 (WMSCapabilities.fetchCapabilities,loadCapabilities): Make this
2723 class a specialisation of WMSCapabilitiesParser as well. Also
2724 execute grok() after loading or fetching capabilities, if that
2725 went well, so that subsequent calls can already access the data.
2726 (WMSCapabilities.getVersion): Export the used version of the
2727 GetCapabilities request, so we can use it for subsequent calls,
2728 i.e. for GetMap requests.
2729 (WMSCapabilities.fetchCapabilities): Added proper error handling
2730 when the GetCapabilities request failed, so that the surrounding
2731 program can act accordingly.
2732
2733 2004-03-30 Martin Schulze <[email protected]>
2734
2735 * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerSRS):
2736 Adjusted the getLayerSRS method to return the list of SRSes
2737 extracted from <SRS> elements instead of <BoundingBox> elements.
2738 Added a bit of documentation as well.
2739 (WMSCapabilitiesParser.checkLayerSRS): Removed integrity test
2740 since it was only implemented due to a misunderstanding.
2741
2742 * Extensions/wms/test/test_parser.py
2743 (TestWMSCapabilitiesParser.test_LayerSRS): Adjust the tests to
2744 reflect the corrected interpretation of the standard: i.e. a layer
2745 does not have to define a BoundingBox for all SRSes it supports.
2746 Hence the <SRS></SRS> specification is authoritative, not the list
2747 of BoundingBoxes.
2748 (TestWMSCapabilitiesParser.test_BoundingBoxes): Added a new test
2749 to ensure None is returned for a non-existing SRS.
2750 (TestWMSCapabilitiesParser.test_grok): Removed test_grok method
2751 since it is not applicable anymore. Listing more SRSes in <SRS>
2752 elements is valid according to the specs.
2753
2754 2004-03-26 Bernhard Reiter <[email protected]>
2755
2756 * README: Nicer formatting of text. Improved descriptions.
2757 Reflected wxWidgets name change.
2758
2759 * Thuban/UI/about.py: Extended copyright to 2004 and added
2760 information about the thuban-devel mailinglist.
2761
2762 2004-03-24 Martin Schulze <[email protected]>
2763
2764 * Extensions/wms/capabilities.py: Renamed the class to contain
2765 'WMS', also added a linebreak where required
2766
2767 * Extensions/wms/parser.py: Finally added the XML parser for the
2768 GetCapabilities response.
2769
2770 * Extensions/wms/test/sample.xml: Adjusted the sample file so that
2771 <SRS> elements match the <BoundingBox> elements, except for the
2772 layer 'beschriftung'.
2773
2774 * Extensions/wms/test/test_parser.py: Encode non-ascii strings
2775 since Python uses unicode strings internally, otherwise
2776 comparisons will fail. Removed tests for getLayerBBoxSRS() since
2777 the SRS will be calculated anyway and this method is obsoleted by
2778 getLayerSRS(). Denote SRS as strings and not as cardinal numbers.
2779 Move loading the sample file into the setUp method. Added a test
2780 for finding the integrity problem in the sample response.
2781 Improved formatting.
2782
2783 * Extensions/wms/domutils.py: Added convenience routines for
2784 handling of Document Object Model (DOM) nodes.
2785
2786 * Extensions/wms/test/test_domutils.py: Added a test for the
2787 domutils module
2788
2789 2004-03-19 Martin Schulze <[email protected]>
2790
2791 * Extensions/wms/test/test_parser.py (TestWMSCapabilitiesParser):
2792 Moved path detection and adding into a module of its own,
2793 adjustpath, which exports thubandir as main Thuban directory.
2794
2795 * Extensions/wms/test/test_ogclib.py (TestWMSLib): Moved path
2796 detection and adding into a module of its own, adjustpath, which
2797 exports thubandir as main Thuban directory. Reorganised the
2798 module in order to support the SkipTest feature for Thuban test
2799 cases.
2800
2801 * Extensions/wms/test/adjustpath.py: Moved path detection and
2802 adding into a module of its own.
2803
2804 2004-03-18 Martin Schulze <[email protected]>
2805
2806 * Extensions/wms/test/test_parser.py: Added another test for
2807 checking whether the WMS XML parser (to be implemented) returns
2808 the information we expect. This requires a sample WMS WML file
2809 (sample.xml) which has been extracted from the frida server and
2810 "improved" manually.
2811
2812 * Extensions/wms/test/test_ogclib.py: Added legacy code to add the
2813 main Thuban directory to the path in order to be able to import
2814 random modules. Adjusted the PyOGCLib detection to reuse the
2815 information gathered. Also added a note about the PYTHONPATH
2816 environment variable.
2817
2818 * Extensions/wms/test/test_ogclib.py: The format specification is
2819 a mime-type, not a graphic format, hence image/jpeg wou ld be the
2820 proper format and not JPEG. We'll also have to take care of the
2821 encoding of / as %2F.
2822
2823 2004-03-16 Martin Schulze <[email protected]>
2824
2825 * Extensions/wms/test/test_ogclib.py: Added a (hopefully)
2826 comprehensive test for the getMapURL method, built compare URLs
2827 according to the documentation in OGC 01-068r3
2828
2829 * Extensions/wms/capabilities.py (WMSCapabilities): Added the
2830 class WMSCapabilities to manage capabilites, will incorporate
2831 parsing the capabilities response and provide details for other
2832 classes.
2833
2834 2004-03-12 Bernhard Herzog <[email protected]>
2835
2836 Support views in addition to normal tables in the postgis
2837 shapestore
2838
2839 * Thuban/Model/postgisdb.py
2840 (PostGISShapeStore._fetch_table_information): Add a fallback for
2841 the case where the table name is not in the geometry_columns
2842 table. This is usually the case for views. Also, set
2843 self.shapestore here.
2844 (PostGISShapeStore.ShapeType): No need to query the database all
2845 the time. The shape type is now determined in
2846 _fetch_table_information
2847
2848 * test/postgissupport.py (PostgreSQLServer.new_postgis_db)
2849 (PostgreSQLServer.get_static_data_db, PostGISDatabase.__init__):
2850 New parameter to specify views.
2851 (PostGISDatabase.has_data): Also compare the views. New views
2852 parameter
2853 (PostGISDatabase.initdb): Create the views.
2854 (PostgreSQLServer.get_default_static_data_db): Add the v_landmarks
2855 view
2856
2857 * test/test_postgis_db.py
2858 (TestPostGISShapestorePointFromViews): New. Test a
2859 PostGISShapeStore with a view
2860 (TestPostGISShapestorePointOIDAsGIDColumn.setUp): Pass the name of
2861 the geometry_column explicitly to test whether that works
2862
2863 2004-03-12 Bernhard Herzog <[email protected]>
2864
2865 Final step for explicit id/geometry columns: Loading and saving
2866
2867 * Resources/XML/thuban-1.1.dtd: New. Derived from thuban-1.0.dtd
2868 with the following changes:
2869 (dbshapesource): Two new attributes id_column and geometry_column
2870
2871 * Thuban/Model/save.py (SessionSaver.write): Use the new dtd
2872 (SessionSaver.write_session): Use the new namespace
2873 (SessionSaver.write_data_containers): Write the new dbshapesource
2874 parameters
2875
2876 * Thuban/Model/load.py (SessionLoader.__init__): New namespace for
2877 the new file format version
2878 (SessionLoader.start_dbshapesource): Handle the new db parameters
2879
2880 * test/test_save.py: Update to the new dtd and namespace
2881 (SaveSessionTest.test_save_postgis): Update the NonConnectionStore
2882 mock object to provide a working IDColumn method.
2883
2884 * test/test_load_1_0.py: New. Copy of the test_load.py before
2885 today's changes but with the round-trip tests removed.
2886
2887 * test/test_load_0_9.py: Update doc-string.
2888
2889 * test/test_load.py: Update all .thuban files to the new dtd and
2890 namespace.
2891 (TestPostGISLayer.file_contents): Add the new dbshapesource
2892 paramters
2893
2894 2004-03-11 Bernhard Herzog <[email protected]>
2895
2896 Next step for explicit id/geometry columns: User interaction
2897
2898 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Rework how
2899 the dialog is constructed. Add combo boxes to select id and
2900 geometry column. Rename some instance variables.
2901 (ChooseDBTableDialog.GetTable): Return id and geometry column
2902 names
2903 (ChooseDBTableDialog.OnTableSelect): New. Event handler for
2904 selections in the table list
2905
2906 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Use id_column
2907 and geometry_column
2908
2909 * Thuban/Model/session.py (Session.OpenDBShapeStore): Add the new
2910 parameters for id_column and geometry column of PostGISShapeStore
2911 here as well.
2912
2913 * Thuban/Model/postgisdb.py (type_map): Add ROWID psycog type.
2914 (_raw_type_map): New. Map raw PostgreSQL type ints to thuban types
2915 (PostGISConnection.GeometryTables): Use a better query to
2916 determine which relations in the database might be usable for
2917 shapestores. Now supports views as well but is more PostgreSQL
2918 specific
2919 (PostGISConnection.table_columns): New. Somewhat experimental
2920 method to let the db dialogs provide lists of columns to users so
2921 that they can select id and geometry columns.
2922 (PostGISTable.__init__): The default value of the id_column
2923 parameter is now None it still means "gid" effectively, though.
2924 (PostGISTable.IDColumn): New introspection method to return a
2925 column object for the id column
2926 (PostGISShapeStore.GeometryColumn): New introspection method to
2927 return a column object for the geometry column
2928
2929 * test/test_postgis_db.py
2930 (TestPostGISConnection.test_gis_tables_non_empty):
2931 Removed. Subsumed by the new:
2932 (TestPostGISConnection.test_gis_tables_with_views_and_tables):
2933 New. Tes the GeometryTables and table_columns methods with actual
2934 tables and views.
2935 (PointTests.test_id_column, PointTests.test_geometry_column):
2936 New. tests for the new methods.
2937 (TestPostGISShapestorePoint.setUp)
2938 (TestPostGISShapestorePointSRID.setUp)
2939 (TestPostGISShapestorePointExplicitGIDColumn.setUp): Fill the
2940 instance variables needed by the new tests
2941
2942 2004-03-11 Bernhard Herzog <[email protected]>
2943
2944 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): The row
2945 numbers given to ReadValue are ordinals.
2946
2947 2004-03-11 Bernhard Herzog <[email protected]>
2948
2949 Elimiate the requirement for PostGIS tables to have a column
2950 called "gid".
2951
2952 * Thuban/Model/postgisdb.py (PostGISTable.__init__): New parameter
2953 id_column to specify which column to use to identify rows. Also
2954 new instance variables id_column and quoted_id_column
2955 (PostGISTable.RowIdToOrdinal, PostGISTable.RowOrdinalToId)
2956 (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue)
2957 (PostGISTable.SimpleQuery): Use the id column name provided to the
2958 constructor instead of "gid"
2959 (PostGISShapeStore.__init__): New parameter id_column analogously
2960 to PostGISTable.__init__. This parameter is simply passed through
2961 to the base class constructor
2962 (PostGISShapeStore._create_col_from_description): Fix typo in
2963 doc-string
2964 (PostGISShapeStore.Shape, PostGISShapeStore.AllShapes)
2965 (PostGISShapeStore.ShapesInRegion): Use the id column name
2966 provided to the constructor instead of "gid"
2967
2968 * test/postgissupport.py
2969 (PostgreSQLServer.get_default_static_data_db): New static table
2970 landmarks_point_id with an id column != "gid. Update the comments
2971 a bit.
2972 (skip_if_addgeometrycolumn_does_not_use_quote_ident): Fix typo in
2973 doc-
2974 (upload_shapefile): New parameter gid_column to use a name other
2975 than "gid" for the column to store the shape ids
2976
2977 * test/test_postgis_db.py (TableTests): New. Mixin-class
2978 containing all tests previously in TestPostGISTable. The actual
2979 tests are the same but the code is a bit more configurable to
2980 allow for different id columns etc.
2981 (TestPostGISTable): Derive from TableTests now for the actual
2982 tests.
2983 (TestPostGISTableExplicitGIDColumn): New. Like TestPostGISTable
2984 except that it the landmarks_point_id table to test the id_column
2985 parameter
2986 (PointTests): Extend the doc-string
2987 (TestPostGISShapestorePointExplicitGIDColumn)
2988 (TestPostGISShapestorePointOIDAsGIDColumn): New classes derived
2989 from PointTests to test the explicit id_column parameter. One
2990 tests with the name of the column holding the shape ids, the other
2991 uses PostgreSQL's OID column. For the latter a number of methods
2992 have to be overwritten to make them independent of the actual id
2993 values.
2994
2995 2004-03-08 Silke Reimer <[email protected]>
2996
2997 Update debian directory:
2998
2999 * debian/changelog: Added new version.
3000 * deiban/rules: Updated management of patches (with cbds)
3001 * debian/control: Added cbds to dependencies
3002 * debian/patches/*: New. Adds better support for patches of thuban in
3003 debian
3004 * debian/menu: Syntax of menu changed slightly
3005 * debian/setup.py.patch: removed because it has been moved to
3006 debian/patechs/setup.py.patch
3007
3008
3009 2004-02-26 Bernhard Herzog <[email protected]>
3010
3011 Create the Doc/technotes directory for text files with information
3012 for developers
3013
3014 * Doc/technotes/README: New. README for the technotes
3015
3016 * Doc/technotes/coding_guidelines.txt: New. Coding guidelines for
3017 Thuban
3018
3019 * Doc/technotes/release_process.txt: New. Used to be
3020 HOWTO-Release. Now slightly adapted to technote formatting style.
3021
3022 * HOWTO-Release: Removed. It's contents are now in
3023 Doc/technotes/release_process.txt
3024
3025 2004-02-25 Bernhard Herzog <[email protected]>
3026
3027 * libraries/thuban/wxproj.cpp (get_wx_version): New. Return the
3028 version of wxWindows the module was compiled with so we can check
3029 that against the wxPython version.
3030
3031 * Thuban/version.py (thuban_branch, thuban_release): New variables
3032 controlling which and how Thuban versions are shown. See the
3033 comments for details.
3034 (verify_versions): Also check that the wx version that wxproj is
3035 compiled against matches that of the wxPython we use at runtime
3036
3037 2004-02-20 Bernhard Herzog <[email protected]>
3038
3039 * Extensions/wms/wms.py (epsg_code_to_projection): Use
3040 get_system_proj_file to read the epsg projections. The old way
3041 depended on the current directory being the top Thuban directory.
3042
3043 2004-02-20 Bernhard Herzog <[email protected]>
3044
3045 * Extensions/svgexport/test/test_svgmapwriter.py
3046 (TestVirtualDC.test_clippath): Remove a debug print
3047
3048 2004-02-20 Bernhard Herzog <[email protected]>
3049
3050 * Extensions/svgexport/__init__.py: New. Turn
3051 Extensions/svgexport into a package.
3052
3053 * Extensions/svgexport/svgmapwriter.py: Reorder the imports and
3054 doc-string a bit. The doc-string must come first, otherwise it's
3055 not a doc-string. The __future__ import must be the first thing
3056 after the doc-string. Use only double quotes in doc-strings.
3057 Single quotes trip up emacs syntax highlighting if the text
3058 contains apostrophes.
3059
3060 2004-02-20 Bernhard Herzog <[email protected]>
3061
3062 * Extensions/svgexport/test/__init__.py,
3063 Extensions/svgexport/test/test_svgmapwriter.py: New. Initial test
3064 suite for svgexport
3065
3066 * test/runtests.py (find_test_modules): New. Function with the
3067 module finding code from main.
3068 (main): Use find_test_modules to figure out the default test
3069 modules and take modules from Extensions.svgexport.test too.
3070
3071 2004-02-19 Bernhard Herzog <[email protected]>
3072
3073 * Thuban/UI/application.py (ThubanApplication.OnInit): Make sure
3074 the mainwindow has a reference to the map of the initial session.
3075 This fixes a bug introduced with the fix for RT#2245
3076
3077 2004-02-19 Bernhard Herzog <[email protected]>
3078
3079 * Extensions/svgexport/svgsaver.py,
3080 Extensions/svgexport/svgmapwriter.py,
3081 Extensions/svgexport/maplegend.py: Added again. This time in the
3082 correct place.
3083
3084 2004-02-17 Bernhard Herzog <[email protected]>
3085
3086 Fix for RT#2245
3087
3088 * Thuban/UI/application.py (ThubanApplication.OnInit): Initialize
3089 instance variables before trying to create any windows. Creating
3090 windows can start an event loop if e.g. message boxes are popped
3091 up for some reason, and event handlers, especially EVT_UPDATE_UI
3092 may want to access things from the application.
3093 (ThubanApplication.maps_changed): The mainwindow may not have been
3094 created yet, so check whether it has been created before calling
3095 its methods
3096
3097 * Thuban/UI/view.py (MapCanvas.OnIdle): Only try to redraw if we
3098 have a map
3099
3100 2004-02-17 Bernhard Herzog <[email protected]>
3101
3102 * test/test_svgmapwriter.py, Extensions/svgsaver.py,
3103 Extensions/svgmapwriter.py, Extensions/maplegend.py,
3104 extensions/svgexport/svgsaver.py,
3105 extensions/svgexport/svgmapwriter.py,
3106 extensions/svgexport/maplegend.py: Removed. These files were in
3107 the wrong places or didn't work at all.
3108
3109 2004-02-16 Bernhard Herzog <[email protected]>
3110
3111 * Thuban/UI/view.py (MapCanvas.Export): Remove accidentally added
3112 line
3113
3114 2004-02-16 Bernhard Herzog <[email protected]>
3115
3116 * Thuban/UI/view.py (MapCanvas.Export): Avoid UnboundLocalError.
3117
3118 2004-02-15 Markus Rechtien <[email protected]>
3119
3120 * Extensions/svgexport/svgmapwriter.py: New. Adds the capability
3121 to write a session to a file in SVG format.
3122 * Extensions/svgexport/svgsaver.py: New. Uses svgmapwriter.py
3123 to write a SVG map of a session.
3124 * Extensions/svgexport/maplegend: New. Writes a basic maplegend
3125 in SVG format for the current session.
3126
3127 2004-02-13 Bernhard Herzog <[email protected]>
3128
3129 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): When the layer
3130 can't be created, return immediately after displaying the error
3131 message.
3132
3133 2004-02-11 Bernhard Herzog <[email protected]>
3134
3135 Handle postgis tables with more than one geometry column.
3136
3137 * Thuban/Model/postgisdb.py
3138 (PostGISTable._fetch_table_information): Delegate the creation of
3139 column objects to a different method so that we can extend that in
3140 derived classes
3141 (PostGISTable._create_col_from_description): New. Column object
3142 creation part of _fetch_table_information
3143 (PostGISShapeStore._create_col_from_description): New. Extend
3144 inherited method to handle geometry columns
3145 (PostGISShapeStore.__init__): New parameter geometry_column to
3146 specify which geometry column to use. Optional but mandatory for
3147 tables with more than one geometry column
3148 (PostGISShapeStore._fetch_table_information): Also use the name of
3149 the geometry column when looking for the srid
3150 (PostGISShapeStore.ShapeType): Also use the name of the geometry
3151 column when looking for the shape type
3152
3153 * test/test_save.py (SaveSessionTest.test_save_postgis): Adapt
3154 NonConnectionStore to changes in the PostGISShapeStore
3155
3156 * test/test_postgis_db.py
3157 (TestPostGISSpecialCases.test_shapestore_two_geom_cols): Test
3158 PostGISShapeStore with tables having two geometry columns.
3159
3160 2004-02-10 Bernhard Herzog <[email protected]>
3161
3162 Fix some postgis problems. What remains to be done is real
3163 handling of SRIDs as they affect how reprojection is done
3164
3165 * Thuban/Model/postgisdb.py (quote_identifier): Fix typo in
3166 doc-string
3167 (PostGISShapeStore._fetch_table_information): New. Extend
3168 inherited method to retrieve srid
3169 (PostGISShapeStore.BoundingBox): Handle tables without data.
3170 extent yields NULL for those
3171 (PostGISShapeStore.ShapesInRegion): Use the srid of the table.
3172
3173 * test/test_postgis_db.py
3174 (TestPostGISSpecialCases.test_shapestore_empty_table): New test
3175 for the special case of a table without any data
3176 (TestPostGISShapestorePointSRID): New class with tests for a table
3177 that uses srids
3178 (PolygonTests): Fix a doc-string typo
3179
3180 * test/postgissupport.py (PostGISDatabase.__init__): New parameter
3181 reference_systems with a specification of spacial reference
3182 systems to create in the new db.
3183 (PostgreSQLServer.new_postgis_db)
3184 (PostgreSQLServer.get_static_data_db): New parameter
3185 reference_systems to be passed through ultimately to
3186 PostGISDatabase. In new_postgis_db also check whether an existing
3187 db already has the right srids
3188 (PostgreSQLServer.get_default_static_data_db): Add srids and a
3189 table that uses srids
3190 (PostGISDatabase.initdb): Create the entries for the reference
3191 systems
3192 (PostGISDatabase.has_data): Add reference_systems parameter to
3193 check for those too
3194 (upload_shapefile): New parameter srid to create tables with a
3195 specific srid
3196
3197 2004-02-06 Frank Koormann <[email protected]>
3198
3199 * po/pt_BR.po: Fixed charset
3200
3201 2004-02-05 Frank Koormann <[email protected]>
3202
3203 * po/pt_BR.po: Fixed format string for error message, missing %s
3204 added (Thuban/UI/application.py:273)
3205
3206 2004-02-03 Frank Koormann <[email protected]>
3207
3208 First version of Portuguese (Brazilian) translation
3209
3210 * po/pt_BR.po: New, translation of pot (2004-01-15 16:07+0300) for
3211 Brazilian Portuguese by Eduardo Patto Kanegae.
3212
3213 * Thuban/UI/about.py (About.__init.py__): Added Eduardo to the list of
3214 translators.
3215
3216
3217 2004-01-22 Frank Koormann <[email protected]>
3218
3219 * Doc/manual/thuban-manual.xml: Added section on installation of
3220 Thuban under Win32 systems. Fixed image path references in the postgis
3221 section. Some minor source formattings.
3222
3223 2004-01-21 Frank Koormann <[email protected]>
3224
3225 Make Thuban remember path selections (at least for one application run).
3226
3227 * Thuban/UI/application.py (Application.OnInit): Initialize path as a
3228 attribute of application object. Path is a dictionary of
3229 strings, currently with the items "data" and "projection".
3230 (Application.SetPath): New, stores path for the specified item.
3231 (Application.Path): New, return path for the specified item.
3232
3233 * Thuban/UI/mainwindow.py
3234 (MainWindow.OpenSession, MainWindow.SaveSessionAs,
3235 MainWindow.AddLayer, MainWindow.AddRasterLayer,
3236 MainWindow.TableOpen): Access "data" path information of the
3237 application.
3238
3239 * Thuban/UI/projdialog.py (ProjFrame._OnImport, ProjFrame._OnExport):
3240 Access "projection" path information of the application.
3241
3242 2004-01-05 Bernhard Herzog <[email protected]>
3243
3244 * po/ru.po: Updated translations from Alex Shevlakov
3245
3246 2004-01-05 Bernhard Herzog <[email protected]>
3247
3248 * po/Makefile, po/README: Move the description of how to generate
3249 the translation statistics to the README.
3250
3251 2003-12-23 Bernhard Herzog <[email protected]>
3252
3253 * NEWS: Update for 1.0.0
3254
3255 * po/it.po: Another update from Maurizio Napolitano
3256
3257 2003-12-23 Bernhard Herzog <[email protected]>
3258
3259 * po/it.po: Updated translation from Maurizio Napolitano
3260
3261 2003-12-23 Bernhard Herzog <[email protected]>
3262
3263 * Thuban/UI/join.py (JoinDialog.__init__): Mark one more string
3264 for translation
3265
3266 * Thuban/UI/mainwindow.py (MainWindow.TableRename)
3267 (MainWindow.RenameMap, MainWindow.RenameLayer): Mark some more
3268 strings for translation
3269
3270 * po/de.po: Update with the newly marked strings.
3271
3272 2003-12-22 Bernhard Herzog <[email protected]>
3273
3274 * HOWTO-Release: Fix the places where version numbers have to be
3275 updated
3276
3277 2003-12-22 Bernhard Herzog <[email protected]>
3278
3279 * setup.py (setup call): 1.0.0, yeah!
3280
3281 * Thuban/version.py (longversion): 1.0.0, yeah!
3282
3283 * Thuban/Model/load.py (SessionLoader.__init__): Accept the
3284 1.0.0 namespace too
3285
3286 * Thuban/Model/save.py (SessionSaver.write_session): Save with
3287 1.0.0 namespace
3288
3289 * test/test_load.py (LoadSessionTest.dtd)
3290 (TestSingleLayer.file_contents)
3291 (TestNonAsciiColumnName.file_contents)
3292 (TestLayerVisibility.file_contents)
3293 (TestClassification.file_contents, TestLabels.file_contents)
3294 (TestLayerProjection.file_contents)
3295 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3296 (TestLabelLayer.file_contents, TestPostGISLayer.file_contents)
3297 (TestPostGISLayerPassword.file_contents)
3298 (TestLoadError.file_contents, TestLoadError.test): Update for
3299 1.0.0 namespace
3300
3301 * test/test_save.py (SaveSessionTest.dtd)
3302 (SaveSessionTest.testEmptySession)
3303 (SaveSessionTest.testSingleLayer)
3304 (SaveSessionTest.testLayerProjection)
3305 (SaveSessionTest.testRasterLayer)
3306 (SaveSessionTest.testClassifiedLayer)
3307 (SaveSessionTest.test_dbf_table)
3308 (SaveSessionTest.test_joined_table)
3309 (SaveSessionTest.test_save_postgis): Update for 1.0.0 namespace
3310
3311 2003-12-22 Bernhard Herzog <[email protected]>
3312
3313 * Thuban/Model/load.py (SessionLoader.start_label): Make sure the
3314 alignment flags are byte strings not unicode and that they have
3315 valid values
3316
3317 * test/test_load.py (TestLabelLayer): New. Test loading (and
3318 indirectly saving) of maps with labels.
3319
3320 2003-12-22 Bernhard Herzog <[email protected]>
3321
3322 * Thuban/UI/tableview.py (TableGrid.OnDestroy)
3323 (TableGrid.__init__): Handle EVT_WINDOW_DESTROY in the grid to
3324 unsubscribe all subscribers.
3325 (LayerTableFrame.OnDestroy): Do not unsubscribe any messages from
3326 self.grid since it may already have been destroyed.
3327 Fixes RT #2256
3328
3329 2003-12-19 Bernhard Herzog <[email protected]>
3330
3331 * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
3332
3333 2003-12-16 Bernhard Herzog <[email protected]>
3334
3335 * debian/bitmappath.patch, debian/setup.py.patch:
3336 added to ensure compliance with FHS for debian
3337 * debian/rules, debian/changelog:
3338 added patches in rules to ensure compliance with FHS for debian
3339
3340 2003-12-16 Bernhard Herzog <[email protected]>
3341
3342 * po/Makefile (mo): Make the output a bit nicer so that it prints
3343 statistics about the translations. Add a comment how produce even
3344 nicer statistics with sed.
3345
3346 2003-12-09 Frank Koormann <[email protected]>
3347
3348 * Resources/Projections/defaults.proj:
3349 French projection sample with correct accents (UNICODE).
3350
3351 2003-12-05 Bernhard Herzog <[email protected]>
3352
3353 * MANIFEST.in: Add the devtools directory
3354
3355 * setup.py (setup call): Use license instead of licence. This
3356 silences a deprecation warning on Python 2.3
3357
3358 2003-12-05 Frank Koormann <[email protected]>
3359
3360 Documentation synced with 1.0rc1
3361
3362 * Doc/manual/thuban-manual.xml:
3363 Minor formatting changes and references to database layers .
3364 Introduction.Internationalization: New section on i18n.
3365 MapManagement.AddingandRemovingLayers: Added item on database layers.
3366 MapManagement.TheLegend: Added section and screenshot on popup menu.
3367 ProjectionManagement: Updated screenshot and sentence on EPSG.
3368 Appendix.SupportedDataSources: Added PostGIS.
3369 Appendix.WorkingwithPostGIS: New section.
3370
3371 * Doc/manual/images/6_projection.png: Updated screenshot including
3372 EPSG checkboxes.
3373
3374 * Doc/manual/images/3_5_popup_menu.png: New, popup menu screenshot.
3375
3376 * Doc/manual/images/app_postgis_add_layer.png,
3377 Doc/manual/images/app_postgis_db_add.png,
3378 Doc/manual/images/app_postgis_db_management.png:
3379 New screenshots focussing on database layers
3380
3381 2003-12-05 Frank Koormann <[email protected]>
3382
3383 * Thuban/UI/projdialog.py (load_user_proj): If user.proj is missing
3384 write warning to stderr instead of rising a warning dialog
3385
3386 2003-12-03 Bernhard Herzog <[email protected]>
3387
3388 Fix for RT #2243
3389
3390 * Thuban/UI/mainwindow.py (MainWindow.has_selected_shape_layer):
3391 New. Like has_selected_layer but for shape layers only
3392 (_has_selected_shape_layer): New. Like _has_selected_layer but for
3393 shape layers only
3394 (layer_show_table command, layer_jointable command): Use these
3395 commands should only be available for shape layers
3396
3397 2003-12-03 Bernhard Herzog <[email protected]>
3398
3399 * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
3400 publishers that are wx objects and may have been destroyed by wx
3401 already. Fixes RT #2242.
3402
3403 2003-12-03 Bernhard Herzog <[email protected]>
3404
3405 * po/ru.po: Updates from Alex Shevlakov
3406
3407 2003-12-03 Silke Reimer <silkeintevation.de>
3408
3409 * debian/control, debian/changelog: Added gdal-support to
3410 debian package, updated to new thuban version
3411
3412
3413 2003-12-03 Bernhard Herzog <[email protected]>
3414
3415 * Thuban/Lib/version.py: New. Module for version number
3416 manipulations. The version of make_tuple here also deals better
3417 with more unusual version number strings, such as e.g.
3418 "1.2+cvs20031111"
3419
3420 * Thuban/version.py (make_tuple): Removed. It's now in
3421 Thuban.Lib.version. Use that implementation instead.
3422
3423 * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
3424
3425 2003-12-02 Bernhard Herzog <[email protected]>
3426
3427 * MANIFEST.in: Add debian files
3428
3429 * setup.py (setup call): Add packages for the Extensions so that
3430 they're installed too
3431 (data_files): Add READMEs and sample data from some Extensions
3432
3433 * NEWS: Add note about the extensions in binary packages
3434
3435 2003-12-02 Bernhard Herzog <[email protected]>
3436
3437 * Thuban/Model/save.py (SessionSaver.write_session): Save files
3438 with the thuban-1.0rc1
3439
3440 * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
3441 thuban-1.0rc1 namespace too
3442
3443 * test/test_save.py (SaveSessionTest.dtd)
3444 (SaveSessionTest.testEmptySession)
3445 (SaveSessionTest.testSingleLayer)
3446 (SaveSessionTest.testLayerProjection)
3447 (SaveSessionTest.testRasterLayer)
3448 (SaveSessionTest.testClassifiedLayer)
3449 (SaveSessionTest.test_dbf_table)
3450 (SaveSessionTest.test_joined_table)
3451 (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
3452 namespace
3453
3454 * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
3455 namespace
3456 (TestSingleLayer.file_contents)
3457 (TestNonAsciiColumnName.file_contents)
3458 (TestLayerVisibility.file_contents)
3459 (TestClassification.file_contents, TestLabels.file_contents)
3460 (TestLayerProjection.file_contents)
3461 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3462 (TestPostGISLayer.file_contents)
3463 (TestPostGISLayerPassword.file_contents)
3464 (TestLoadError.file_contents, TestLoadError.test): Update to
3465 thuban-1.0rc1 namespace
3466
3467 2003-12-01 Bernhard Herzog <[email protected]>
3468
3469 * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
3470 nt to better match Intevation's current w32 setup
3471
3472 * HOWTO-Release: Add note about updating MANIFEST.in
3473
3474 * MANIFEST.in: Add the Extensions
3475
3476 * NEWS: Update for 1.0rc1
3477
3478 2003-12-01 Bernhard Herzog <[email protected]>
3479
3480 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
3481 cards for the dialog so that shapefiles ending in all uppercase
3482 SHP are listed too
3483
3484 2003-11-28 Bernhard Herzog <[email protected]>
3485
3486 * Thuban/version.py (longversion): Update to 1.0rc1
3487
3488 * setup.py (setup call): Update version to 1.0rc1. Use the
3489 [email protected] email address as author email instead of my
3490 personal one.
3491
3492 2003-11-28 Bernhard Herzog <[email protected]>
3493
3494 * po/de.po: Update german translation.
3495
3496 2003-11-28 Bernhard Herzog <[email protected]>
3497
3498 Unify the filenames stored in .thuban files so that the .thuban
3499 files are more platform independend
3500
3501 * Thuban/Model/save.py (unify_filename): New. Unify filenames so
3502 that they can be used on both windows and unix
3503 (SessionSaver.prepare_filename): New. Handle all filename
3504 transformations for filenames stored in the thuban file
3505 (SessionSaver.write_data_containers, SessionSaver.write_layer):
3506 Use prepare_filename
3507
3508 * test/test_save.py (SaveSessionTest.testSingleLayer)
3509 (SaveSessionTest.testLayerProjection)
3510 (SaveSessionTest.testRasterLayer)
3511 (SaveSessionTest.testClassifiedLayer)
3512 (SaveSessionTest.test_dbf_table)
3513 (SaveSessionTest.test_joined_table): Filenames are always stored
3514 with slashes on all currently supported platforms so adapt all
3515 tests to this
3516
3517 * test/test_load.py (LoadSessionTest.filenames): With the new
3518 filename scheme the filenames in the tests should be
3519 understandable on all currently supported platforms so we turn
3520 this into an empty list because we don't have to normalize them
3521 anymore
3522
3523 2003-11-28 Bernhard Herzog <[email protected]>
3524
3525 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
3526 Add the ellipsoid to the projection since some Proj versions
3527 complain if it's missing.
3528
3529 2003-11-27 Bernhard Herzog <[email protected]>
3530
3531 Corect some bounding box projection problems
3532
3533 * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
3534 version of ForwardBBox
3535 (Projection._transform_bbox): New. common implementation of
3536 ForwardBBox and InverseBBox
3537 (Projection.ForwardBBox): Use _transform_bbox.
3538
3539 * test/test_proj.py (TestProjection.test): Add test for
3540 InverseBBox
3541
3542 * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
3543 (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
3544 new InverseBBox method to determine the unprojected bounding box
3545 (Layer.ShapesInRegion): Use the ForwardBBox method to project the
3546 bbox.
3547
3548 * test/test_layer.py (TestLayer.test_point_layer_with_projection):
3549 Removed.
3550 (TestLayer.test_arc_layer_with_projection): New. This test is
3551 better able to test whether bounding boxes are projected correctly
3552 than test_point_layer_with_projection
3553
3554 * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
3555 InverseBBox to unproject bboxes
3556
3557 2003-11-25 Bernhard Herzog <[email protected]>
3558
3559 * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
3560 source code.
3561
3562 2003-11-25 Bernhard Herzog <[email protected]>
3563
3564 * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
3565 there for backwards compatibility and all code relying on that
3566 should have been updated by now.
3567
3568 2003-11-25 Bernhard Herzog <[email protected]>
3569
3570 * test/test_load.py (TestClassification.test): Add the missing
3571 round trip test.
3572 (TestClassification.file_contents): Update to the newest file
3573 format
3574
3575 2003-11-25 Bernhard Herzog <[email protected]>
3576
3577 Add very experimental (and possibly dangerous) extension to draw
3578 polygons:
3579
3580 * Extensions/drawshape/README: New. Brief installation
3581 instructions
3582
3583 * Extensions/drawshape/drawshape.py: New. Implementation of the
3584 drawshape extensions
3585
3586 * Extensions/drawshape/patch.diff: Patch to apply before the
3587 extension can be used.
3588
3589 2003-11-24 Bernhard Herzog <[email protected]>
3590
3591 * Thuban/Model/data.py (ShapefileStore._open_shapefile)
3592 (ShapefileStore.__init__): Factor opening the shapefile into a
3593 separate method (the new _open_shapefile). This makes the code a
3594 bit more readable but the real reason is that it makes some evil
3595 hacks easier. :-)
3596
3597 2003-11-24 Bernhard Herzog <[email protected]>
3598
3599 * Thuban/Model/load.py (SessionLoader.check_attrs): If no
3600 converter is specified for an attribute assume it's a string
3601 containing only Latin1 characters. Update doc-string accordingly.
3602 This change should fix many places where unicode objects might
3603 accidentally enter Thuban.
3604
3605 * test/test_load.py (TestNonAsciiColumnName): New test to check
3606 what happens with column names in DBF files that contain non-ascii
3607 characters
3608
3609 2003-11-21 Bernhard Herzog <[email protected]>
3610
3611 Enable the experimental attribute editing again and introduce a
3612 command line switch to actually activate it
3613
3614 * Thuban/UI/main.py (options): New. Container for options set on
3615 the commmand line
3616 (main): Add the --enable-attribute-editing flag.
3617
3618 * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
3619 editing is enabled use the grid ctrl which allows editing of the
3620 values
3621
3622 * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
3623 New. Just delegate this to the underlying table.
3624
3625 2003-11-20 Bernhard Herzog <[email protected]>
3626
3627 * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
3628 Skip this test if run under non-posix systems since it only works
3629 there
3630
3631 2003-11-19 Bernhard Herzog <[email protected]>
3632
3633 * Thuban/Model/resource.py: Rework the way gdal support is
3634 determined so that we can give a reason in the about why gdal is
3635 not supported.
3636 (gdal_support_status): New. Variable holding a string with the
3637 reason for no gdal support
3638
3639 * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
3640 not supported to the message
3641
3642 2003-11-19 Bernhard Herzog <[email protected]>
3643
3644 Remove the old table interface and its test cases
3645
3646 * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
3647 (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
3648 anymore
3649
3650 * Thuban/Model/transientdb.py (TransientTableBase)
3651 (AutoTransientTable): Do not derive from OldTableInterfaceMixin
3652 anymore
3653
3654 * test/test_table.py: Removed since the old interface it tests is
3655 gone.
3656
3657 * test/runtests.py (main): The old table interface is gone and
3658 with it the deprecation warnings so remove the code that turns
3659 these warnings into errors
3660
3661 2003-11-19 Bernhard Herzog <[email protected]>
3662
3663 * test/test_table.py: Revert to revision 1.5 again. Changing the
3664 tests to use the new table interface is completely wrong since the
3665 whole purpose of the tests in this module is to test the old
3666 interface.
3667
3668 2003-11-18 Bernhard Herzog <[email protected]>
3669
3670 * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
3671 New. Test whether the connection matches a set of connection
3672 parameters
3673
3674 * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
3675 (DBFrame.OnAdd): Use the new MatchesParameters method when looking
3676 for existing connections with the same parameters and break out of
3677 the loop correctly.
3678
3679 * test/test_postgis_db.py (TestBriefDescription)
3680 (TestPostGISSimple.test_brief_description): Rename
3681 TestBriefDescription to TestPostGISSimple and the test method to
3682 test_brief_description so that we can add more test methods.
3683 (TestPostGISSimple.test_matches_parameters): New. Test the new
3684 MatchesParameters method
3685
3686 2003-11-18 Bernhard Herzog <[email protected]>
3687
3688 * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
3689 _was_destroyed, to indicate whether an publisher instance has
3690 already been destroyed.
3691 (Publisher.Unsubscribe): Only disconnect if the publisher has not
3692 been destroyed yet.
3693 (Publisher.Destroy): Set the _was_destroyed flag to true.
3694
3695 * test/test_connector.py
3696 (TestPublisher.test_unsubscribe_after_destroy): New. Test that
3697 calling Unsubscribe after Destroy doesn't raise an exception
3698
3699 2003-11-14 Bernhard Herzog <[email protected]>
3700
3701 * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
3702 typo in doc-string
3703
3704 2003-11-13 Bernhard Herzog <[email protected]>
3705
3706 Quote table and column names properly for postgis.
3707
3708 * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
3709 quote an identifier for use in an sql statement
3710 (PostGISColumn.__init__): Add the quoted_name attribute
3711 (PostGISTable.__init__): New instance variable quoted_tablename
3712 (PostGISTable._fetch_table_information): Use the quoted table
3713 name. New isntance variable quoted_geo_col with a quoted version
3714 of geometry_column
3715 (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
3716 (PostGISTable.RowOrdinalToId): Use the quoted table name
3717 (PostGISTable.ReadValue, PostGISTable.ValueRange)
3718 (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
3719 (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
3720 (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
3721 Use quoted table and column names
3722
3723 * test/test_postgis_db.py (TestPostGISSpecialCases)
3724 (TestPostGISIgnoredColumns): Rename the class to
3725 TestPostGISSpecialCases because that better describes the new
3726 cases
3727 (TestPostGISSpecialCases.test_unsupported_types)
3728 (TestPostGISSpecialCases.test): Rename the method to
3729 test_unsupported_types because we need a more descriptive name now
3730 that there are more methods
3731 (TestPostGISSpecialCases.test_table_name_quoting)
3732 (TestPostGISSpecialCases.test_column_name_quoting)
3733 (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
3734 cases to test quoting of table and column names in PostGISTable
3735 and PostGISShapeStore
3736
3737 * test/postgissupport.py
3738 (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
3739 AddGeometryColumn desn't support table or column names with sapces
3740 or double quotes
3741
3742 2003-11-12 Jan-Oliver Wagner <[email protected]>
3743
3744 * Extensions/wms/__init__.py: New: Init to make this
3745 directory a package.
3746
3747 * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
3748
3749 2003-11-11 Bernhard Herzog <[email protected]>
3750
3751 * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
3752 Constant for the file woth deprecated epsg projections
3753 (get_system_proj_file): Update doc-string
3754
3755 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
3756 above the EPS widgets, introduce a check box for the deprecated
3757 eps projections and a label for the epsg widgets
3758 (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
3759 too
3760
3761 2003-11-11 Bernhard Herzog <[email protected]>
3762
3763 Avoid warnings when run under Python 2.3
3764
3765 * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
3766 (BaseRenderer.draw_label_layer): Coordinates must be ints.
3767
3768 * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
3769 real method so that we can convert to int.
3770 (MapRenderer.label_font): The font size mist be an int.
3771
3772 * Thuban/UI/common.py (Color2wxColour): The color values must be
3773 ints. Also, remove the unnecessary asserts.
3774
3775 * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
3776 (TestUnicodeStrings.test): Python source code should not contain
3777 non-ascii characters unless an encoding is specified in the file.
3778 Therefore use \x escapes in the string literals for non-ascii
3779 characters.
3780
3781 2003-11-11 Bernhard Herzog <[email protected]>
3782
3783 * Thuban/Model/resource.py (get_system_proj_file): Add a filename
3784 parameter so that this function can be used for all proj files in
3785 Resource/Projections
3786 (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
3787 get_system_proj_file
3788
3789 * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
3790 ProjFile self.__sysProjFile use a dictionary of system ProjFile
3791 objects self._sys_proj_files
3792 (ProjFrame.build_dialog): Adapt to the new changes in the
3793 ProjectionList constructor. Add a check button to toggle whether
3794 EPSG projections are shown
3795 (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
3796 events.
3797 (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
3798 the busy cursor if the files have not yet been loaded by the
3799 dialog.
3800 (ProjFrame.load_system_proj): Add a parameter for the name of the
3801 proj file. Maintain the dictionary of system projections
3802 self._sys_proj_files
3803
3804 * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
3805 user_projs parameters into one parameter proj_files which is a
3806 list of proj files.
3807 (ProjectionList._subscribe_proj_files)
3808 (ProjectionList._unsubscribe_proj_files): New. Move
3809 subscription/unsubscription of projfile messages to separate
3810 methods
3811 (ProjectionList.Destroy): The unsubscribe is now done in
3812 _unsubscribe_proj_files
3813 (ProjectionList.update_projections): We now have a list of proj
3814 file objects
3815 (ProjectionList.SetProjFiles): New method to set a new list of
3816 proj file objects
3817
3818 * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
3819 Specify explicitly which system proj file to load.
3820
3821 2003-11-11 Bernhard Herzog <[email protected]>
3822
3823 * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
3824 instance variables to cut cyclic references. The GC would have
3825 collected the loader eventually but it can happen that it doesn't
3826 run at all until thuban is closed (2.3 but not 2.2 tries a bit
3827 harder and forces a collection when the interpreter terminates)
3828 (load_session): Call the handler's Destroy method to make sure
3829 that it gets garbage collected early. Otherwise it will be
3830 collected very late if at all and it holds some references to e.g.
3831 shapestores and the session which can lead to leaks (of e.g. the
3832 temporary files)
3833
3834 * test/test_load.py (TestSingleLayer.test_leak): New. test for the
3835 resource leak in load_session
3836
3837 2003-11-10 Bernhard Herzog <[email protected]>
3838
3839 * Thuban/UI/baserenderer.py: Add a way to specify how layers in
3840 extensions are to be rendered.
3841 (_renderer_extensions): New. List with renderer for layers in
3842 extensions
3843 (add_renderer_extension): New. Add a renderer extension
3844 (init_renderer_extensions): New. Init the renderer extensions
3845 (BaseRenderer.render_map_incrementally): Search
3846 _renderer_extensions for how to draw unknown layer types
3847 (BaseRenderer.draw_raster_data): Add format parameter so that
3848 formats other than BMP can be drawn
3849 (BaseRenderer.draw_raster_layer): Pass an explicit format to
3850 draw_raster_data
3851
3852 * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
3853 strings of the format parameter of draw_raster_data method to wx
3854 constants
3855 (MapRenderer.draw_raster_data): Add the format parameter and use
3856 raster_format_map to map it to the right wxwindows constant for
3857 wxImageFromStream
3858
3859 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
3860 the format parameter and record it
3861 (TestBaseRenderer.test_raster_no_projection): check the format
3862 paramter of the draw_raster_data method
3863 (TestBaseRenderer.test_renderer_extension): New. Test the renderer
3864 extension facility
3865
3866 2003-11-07 Bernhard Herzog <[email protected]>
3867
3868 Tweak the usage of the sqlite database to make common use cases
3869 more responsive. In most cases copying the data to the sqlite
3870 database takes so long that using sqlite doesn't have enough
3871 advantages.
3872
3873 * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
3874 comments about performance and query the min and max in separate
3875 statements because only that way will indexes be used.
3876 (TransientTableBase.UniqueValues): Add some comments about
3877 performance.
3878 (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
3879 Do not copy the data to the transient DB but use the transient
3880 copy if it exists. See the new comments for the performance trade
3881 offs
3882
3883 * test/test_transientdb.py
3884 (TestTransientTable.test_auto_transient_table): Make sure that the
3885 data is copied to the transient database at some point.
3886
3887 2003-11-03 Bernhard Herzog <[email protected]>
3888
3889 * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
3890 globals to locals so that it's a bit faster
3891
3892 2003-11-03 Bernhard Herzog <[email protected]>
3893
3894 * Thuban/UI/baserenderer.py
3895 (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
3896 method. ReadValue is faster than ReadRowAsDict since it only reads
3897 one cell especially now that the dbf file objects actually
3898 implement it.
3899
3900 * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
3901 read_attribute method of the dbf objects
3902
3903 2003-11-03 Bernhard Herzog <[email protected]>
3904
3905 * Extensions/profiling/profiling.py (popup_dialog_box): New config
3906 variable to indicate whether the result should be shown in a
3907 dialog box
3908 (profile_screen_renderer, time_screen_renderer): Only show a
3909 dialog box if popup_dialog_box is true.
3910 (profile_screen_renderer): Flush stdout after the printing the
3911 first part of the "profiling..." message
3912
3913 * Thuban/UI/baserenderer.py
3914 (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
3915 brushes for the groups so that they're not created over and over
3916 again
3917
3918 * Thuban/Model/classification.py (Classification.__getattr__)
3919 (Classification._compile_classification)
3920 (Classification._clear_compiled_classification): New. Methods to
3921 manage a 'compiled' representation of the classification groups
3922 which is created on demand
3923 (Classification.InsertGroup, Classification.RemoveGroup)
3924 (Classification.ReplaceGroup): reset the compiled representation
3925 (Classification.FindGroup): Use the compiled representation to
3926 find the matching group
3927 (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
3928
3929 2003-10-31 Bernhard Herzog <[email protected]>
3930
3931 * Thuban/Model/classification.py (Classification.SetDefaultGroup):
3932 Send a CLASS_CHANGED message
3933 (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
3934 not return the removed group since it wasn't used.
3935
3936 * test/test_classification.py
3937 (TestClassification.test_set_default_group): New. Test the
3938 SetDefaultGroup method
3939 (TestClassification.test_insert_group): New. Test the InsertGroup
3940 method
3941 (TestClassification.test_remove_group): New. Test the RemoveGroup
3942 method
3943 (TestClassification.test_replace_group): New. Test the
3944 ReplaceGroup method
3945
3946 2003-10-31 Bernhard Herzog <[email protected]>
3947
3948 * test/test_classification.py (TestClassification.setUp):
3949 Subscribe to the CLASS_CHANGED messages
3950 (TestClassification.tearDown): New. Destroy the classification
3951 properly
3952 (TestClassification.test_defaults): Add tests for the default line
3953 width and whether no messages were sent yet
3954 (TestClassification.test_set_default_properties): Add tests for
3955 messages and setting the default line width
3956 (TestClassification.test_add_singleton)
3957 (TestClassification.test_add_range)
3958 (TestClassification.test_multiple_groups): Add tests for messages
3959
3960 2003-10-31 Bernhard Herzog <[email protected]>
3961
3962 Some more refactoring in preparation for new tests:
3963
3964 * test/test_classification.py (TestClassification.setUp): New.
3965 Instantiate the classification here. Update the test methods
3966 accordingly.
3967 (TestClassification.test_multiple_groups): Make sure that the two
3968 singletons matching 1 are considered different.
3969
3970 2003-10-31 Bernhard Herzog <[email protected]>
3971
3972 * test/test_classification.py (red, green, blue): New. These
3973 constants were used in several cases. Update the relevant methods.
3974 (TestClassification.test_defaults)
3975 (TestClassification.test_set_default_properties)
3976 (TestClassification.test_add_singleton)
3977 (TestClassification.test_add_range)
3978 (TestClassification.test_multiple_groups)
3979 (TestClassification.test_deepcopy): New. These were formerly all
3980 part of the single method test.
3981 (TestClassification.test_deepcopy): Removed.
3982 (TestClassIterator): Removed. The test case is now a method of
3983 TestClassification since it tests part of the public interface of
3984 Classification
3985 (TestClassification.test_iterator): New. Used to be
3986 TestClassIterator effectively
3987
3988 2003-10-31 Jan-Oliver Wagner <[email protected]>
3989
3990 GUIfied the functions of the profiling extension.
3991
3992 * /Extensions/profiling/__init__.py: New: Init to make this
3993 directory a package.
3994
3995 * Extensions/profiling/profiling.py: Moved menu entries to
3996 the Extensions menu. Applied _() for strings.
3997 (profile_screen_renderer): Catch the detailed printout and present
3998 it in a dialog.
3999 (time_screen_renderer): Raise a dialog to present the result instead
4000 of printing it to stdout.
4001
4002 2003-10-31 Bernhard Herzog <[email protected]>
4003
4004 * test/test_classification.py (TestClassGroupProperties)
4005 (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
4006 (TestClassGroupSingleton, TestClassIterator, TestClassification):
4007 Split TestClassification into several classes, one for each class
4008 being tested. TestClassification itself now only tests
4009 Classification. This split makes changes to the tests a bit easier
4010
4011 2003-10-31 Bernhard Herzog <[email protected]>
4012
4013 * Extensions/profiling/profiling.py: New. Extension to measure
4014 Thuban performance
4015
4016 2003-10-31 Frank Koormann <[email protected]>
4017
4018 Added two items to legend popup menu: Remove Layer and Show Layer Table
4019
4020 * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
4021 LegendPanel._OnShowTable): New event handlers, call the corresponding
4022 mainwindow methods.
4023 (LegendTree._OnRightClick): Added items to popup menu.
4024
4025 2003-10-30 Bernhard Herzog <[email protected]>
4026
4027 * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
4028 EVT_WINDOW_DESTROY
4029 (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
4030 nothing but is convenient for the derived classes.
4031
4032 * Thuban/UI/tableview.py
4033 (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
4034 Unsubscribe the messages here not in OnClose because that might
4035 get called multiple times. Fixes RT #2196
4036 (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
4037 anymore.
4038
4039 * README: Update the minimum requirement for wxPython. Since we
4040 now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
4041 the version in which that was introduced for all platforms
4042
4043 2003-10-30 Frank Koormann <[email protected]>
4044
4045 * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
4046 the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
4047 frame.
4048
4049 2003-10-30 Jan-Oliver Wagner <[email protected]>
4050
4051 Improved APR import extension, added further EPSG definitions
4052 and some cleanup regarding string class.
4053
4054 * test/test_proj.py (TestProjection.test_get_projection_units_geo):
4055 Added test for alias 'longlat'.
4056
4057 * Resources/Projections/epsg-deprecated.proj: New. Contains
4058 deprecated EPSG definitions.
4059
4060 * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
4061 the variable names for objects.
4062
4063 * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
4064 Copied from importAPR and provided with documentation.
4065
4066 * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
4067 Moved to apr.py.
4068 (APR_View): Added object ref 'ITheme'.
4069
4070 * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
4071 split function by corresponding use of the string class method.
4072
4073 * Thuban/Model/xmlwriter.py: Replaced string replace function by
4074 corresponding string method.
4075
4076 2003-10-29 Bernhard Herzog <[email protected]>
4077
4078 * Thuban/UI/baserenderer.py
4079 (BaseRenderer.draw_shape_layer_incrementally): Speed up the
4080 special case of a classification that only has the default group
4081
4082 2003-10-27 Bernhard Herzog <[email protected]>
4083
4084 * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
4085
4086 * po/de.po: Update.
4087
4088 * Thuban/UI/application.py
4089 (ThubanApplication.ShowExceptionDialog): Handle translation of the
4090 dialog message properly
4091
4092 2003-10-27 Bernhard Herzog <[email protected]>
4093
4094 Rework how localization works so that we use wx's translation
4095 functions when running Thuban as a normal application but not when
4096 we don't need any UI, such as in the test suite. See the comment
4097 in Thuban/__init__.py for details
4098
4099 * Thuban/__init__.py (_): Add one level of indirection to make the
4100 translation handling more flexible and to make it possible to use
4101 either wx's translation services or not.
4102 (gettext_identity, translation_function_installed)
4103 (install_translation_function): New function to help with this
4104
4105 * Thuban/UI/__init__.py: Install the wx specific translation
4106 function if it's OK to do that
4107
4108 * test/support.py (initthuban): Install a dummy translation
4109 function so that importing Thuban.UI doesn't install a wx specific
4110 one for which would need to import wxPython
4111
4112 2003-10-27 Bernhard Herzog <[email protected]>
4113
4114 * HOWTO-Release: Source archives should be created first and the
4115 binary packages should be created from the source archives.
4116 There's an official debian package now so there's no need to test
4117 the rpm on debian anymore
4118
4119 2003-10-27 Bernhard Herzog <[email protected]>
4120
4121 Several rendering changes:
4122
4123 - Render the selection into a separate bitmap so that only that
4124 bitmap needs to be redrawn when the selection changes
4125
4126 - Render incrementally showing previews and allowing interaction
4127 before rendering is complete
4128
4129 - Update the renderer interface a bit. Most parameters of
4130 RenderMap are now parameters of the constructor
4131
4132 * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
4133 and the update region as parameters. Update the doc-string
4134 (BaseRenderer.render_map_incrementally): New. Generator function
4135 to renders the map incrementally
4136 (BaseRenderer.render_map): Remove the map argument (it's now in
4137 the constructor) and simply iterate over the
4138 render_map_incrementally generator to draw the map.
4139 (BaseRenderer.draw_shape_layer_incrementally)
4140 (BaseRenderer.draw_shape_layer): Renamed to
4141 draw_shape_layer_incrementally and changed into a generator that
4142 yields True every 500 shapes. Used by render_map_incrementally to
4143 render shape layers incrementally
4144
4145 * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
4146 map and region parameters which are now in the constructor
4147 (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
4148 the inherited render_map_incrementally.
4149 (BaseRenderer.draw_shape_layer): Removed.
4150 (ScreenRenderer.draw_selection_incrementally): New. The selection
4151 drawing part of the removed draw_shape_layer as a generator
4152 (ScreenRenderer.layer_shapes): Update because of the region
4153 parameter change
4154 (ExportRenderer.__init__): New. Extend the inherited constructor
4155 with the destination region for the drawing
4156 (ExportRenderer.RenderMap): Removed the map and region parameters
4157 which are now in the constructor
4158
4159 * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
4160 bitmap suitable for a preview in a tool
4161 (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
4162 bitmap
4163 (MapPrintout.draw_on_dc): Adapt to new renderer interface
4164 (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
4165 exists
4166 (MapCanvas.OnIdle): Update the logic to deal with incremental
4167 rendering and the selection bitmap
4168 (MapCanvas._do_redraw): Handle the instantiation of the render
4169 iterator and the redraws during rendering
4170 (MapCanvas._render_iterator): New. Generator to incrementally
4171 redraw both bitmaps
4172 (MapCanvas.Export): Adapt to new renderer interface.
4173 (MapCanvas.full_redraw): Reset the selection bitmap and the
4174 renderer iterator too
4175 (MapCanvas.redraw_selection): New. Force a redraw of the selection
4176 bitmap
4177 (MapCanvas.shape_selected): Only redraw the selection bitmap
4178
4179 * test/test_baserenderer.py
4180 (TestBaseRenderer.test_polygon_no_projection)
4181 (TestBaseRenderer.test_raster_no_projection)
4182 (TestBaseRenderer.test_point_map_projection)
4183 (TestBaseRenderer.test_point_layer_and_map_projection)
4184 (TestBaseRenderer.test_point_layer_projection)
4185 (TestBaseRenderer.test_point_with_classification): Adapt to new
4186 renderer interface
4187
4188 2003-10-24 Bernhard Herzog <[email protected]>
4189
4190 * libraries/thuban/wxproj.cpp (draw_polygon_shape)
4191 (point_in_polygon_shape, shape_centroid): Raise an exception if
4192 the shape can't be read. Previously invalid shape ids would lead
4193 to a segfault.
4194
4195 * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
4196 New. test whether an exception is raised for invalid shape ids
4197
4198 2003-10-24 Jan-Oliver Wagner <[email protected]>
4199
4200 * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
4201 as alias for 'latlong'.
4202
4203 * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
4204 as alias for 'latlong'.
4205
4206 2003-10-24 Jan-Oliver Wagner <[email protected]>
4207
4208 * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
4209 the projection even for the UnknownPanel.
4210 (UnknownProjPanel.__init__): Define the text and create the textctrl
4211 widget.
4212 (UnknownProjPanel._DoLayout): Replaced static text widget by the
4213 textctrl created in __init__.
4214 (UnknownProjPanel.SetProjection): Set the text for the text ctrl
4215 including the parameters of the projection.
4216
4217 2003-10-24 Jan-Oliver Wagner <[email protected]>
4218
4219 * Resources/Projections/epsg.proj: New. This is a list of
4220 EPSG codes with parameters for proj. The list has been
4221 generated using devtools/create_epsg.py based on the
4222 file nad/epsg of the proj 4.4.7 package. Four projection
4223 definitions have been deleted as they are not accepted by proj:
4224 "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
4225 and "HD72 / EOV".
4226
4227 2003-10-22 Bernhard Herzog <[email protected]>
4228
4229 Some more tweaks to the projection dialog which should fix RT
4230 #1886.
4231
4232 * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
4233 the ProjFile's messages and call the base class methods correctly
4234 (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
4235 flag on the newly selected item too. Otherwise some other item is
4236 focused and the first time the focus is moved with the keyboard
4237 the selection moves in unexpected ways.
4238
4239 * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
4240 focus on the OK button, only on the projection list. That way the
4241 list really has the focus initially
4242 (ProjFrame.OnClose): Call the projection list's Destroy method to
4243 make it unsubscribe all messages
4244
4245 2003-10-21 Bernhard Herzog <[email protected]>
4246
4247 Rework the projection dialog to fix a few bugs, including RT 2166
4248 and most of 2168
4249
4250 * Thuban/UI/projlist.py: New. The class ProjectionList is a
4251 special wxListCtrl to show a list of projections in a more MVC
4252 fashion
4253
4254 * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
4255 throughout the class. The main change is to use the ProjectionList
4256 class instead of a normal wxListBox. Also, add an explicit
4257 "Unknown" projection to the projection choice control.
4258 (ProjPanel.__init__): Add an "unknown" ellipsoid
4259 (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
4260 instantiation of the panel's controls to make the tab-order more
4261 natural
4262
4263 2003-10-21 Bernhard Herzog <[email protected]>
4264
4265 * test/test_load.py (TestSingleLayer.file_contents)
4266 (TestSingleLayer.test): Add non-ascii characters to the titles of
4267 session, map and layer. This is effectively a port of the
4268 TestUnicodeStrings test in test_load_0_8.py which for some reason
4269 was only added there.
4270
4271 * test/test_load_0_9.py (TestSingleLayer.file_contents)
4272 (TestSingleLayer.test): Same as in test_load.py: add non-ascii
4273 characters to the titles of session, map and layer,.
4274
4275 2003-10-21 Bernhard Herzog <[email protected]>
4276
4277 Add EPSG projection handling to .thuban files
4278
4279 * test/test_save.py (SaveSessionTest.dtd)
4280 (SaveSessionTest.testEmptySession)
4281 (SaveSessionTest.testLayerProjection)
4282 (SaveSessionTest.testRasterLayer)
4283 (SaveSessionTest.testClassifiedLayer)
4284 (SaveSessionTest.test_dbf_table)
4285 (SaveSessionTest.test_joined_table)
4286 (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
4287 (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
4288 use a and epsg projection to test saving them
4289
4290 * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
4291 namespace
4292 (TestLayerVisibility.file_contents, TestLabels.file_contents)
4293 (TestLayerProjection.file_contents)
4294 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
4295 (TestPostGISLayer.file_contents)
4296 (TestPostGISLayerPassword.file_contents)
4297 (TestLoadError.file_contents, TestLoadError.test): Update to use
4298 1.0-dev namespace
4299 (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
4300 use 1.0-dev namespace and use an EPSG projection to test whether
4301 loading it works
4302
4303 * test/test_load_0_9.py: New. Effectively a copy of test_load.py
4304 as of Thuban 0.9. These are now tests to determine whether Thuban
4305 can still read files generated by Thuban 0.9
4306
4307 * Thuban/Model/save.py (SessionSaver.write)
4308 (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
4309 namespace
4310 (SessionSaver.write_projection): Write the projection's epsg
4311 attribute
4312
4313 * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
4314 thuban-1.0-dev.dtd namespace
4315 (SessionLoader.check_attrs): Allow a callable object as conversion
4316 too
4317 (SessionLoader.start_projection, SessionLoader.end_projection)
4318 (SessionLoader.start_parameter): Handle the epsg attribute and
4319 rename a few instance variables to lower case
4320
4321 * Resources/XML/thuban-1.0.dtd: New. Only difference to
4322 thuban-0.9.dtd is the epsg attribute for projections.
4323
4324 2003-10-21 Bernhard Herzog <[email protected]>
4325
4326 * test/runtests.py (main): Let the user specify which tests to run
4327 on the command line
4328
4329 * test/support.py (ThubanTestResult.getDescription): Override to
4330 give a better short description. The description can be used as a
4331 parameter to run_tests to run that particular test in isolation.
4332
4333 2003-10-21 Frank Koormann <[email protected]>
4334
4335 Popup menu for legend. Scheduled for the 1.2 release this was too
4336 simple to implement: The popup menu is bound to the legend tree, while
4337 the events are hanlded by its anchestor, the legend panel. This
4338 allows reuse of all the event handlers already implemented for the
4339 legend toolbar buttons.
4340
4341 * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
4342 to add handlers for the events issued by the popup menu.
4343 (LegendPanel._OnToggleVisibility): Handler for toggling layer
4344 visibility event
4345 (LegendPanel._OnProjection): Handler for layer projection event.
4346 (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
4347 (LegendTree._OnRightClick): Event handler for right click, select item
4348 and pop up menu.
4349 (LegendTree.ToggleVisibility): Toggle layer visibility
4350 (LegendTree.LayerProjection): Raise layer projection dialog for
4351 current layer.
4352
4353 2003-10-21 Bernhard Herzog <[email protected]>
4354
4355 * Resources/Projections/defaults.proj: Use correct DOCTYPE
4356 declaration. The top-level element is projectionlist not projfile
4357
4358 2003-10-20 Bernhard Herzog <[email protected]>
4359
4360 * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
4361 method to write a projfile and display a busy cursor and error
4362 dialogs.
4363 (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
4364 (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
4365 (ProjFrame.__FillAvailList): Translate "<None>" too and display a
4366 busy cursor while loading the user and system prj files.
4367
4368 2003-10-16 Bernhard Herzog <[email protected]>
4369
4370 * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
4371 ProjFile objects
4372 (clear_proj_file_cache): New function to clear the cache. Mainly
4373 useful for use by the test suite
4374 (read_proj_file): Use the cache.
4375
4376 * test/test_proj.py (TestProjFile): Clarify the doc-string
4377 (ProjFileReadTests): Update doc-string
4378 (ProjFileReadTests.test_get_system_proj_file): Check whether the
4379 system proj files is cached.
4380 (ProjFileLoadTestCase): New base class for the proj file tests
4381 derived from support.FileLoadTestCase to provide some common
4382 behavior.
4383 (TestLoadingProjFile)
4384 (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
4385 (TestProjFileWithInvalidParameters.file_contents): Derive from
4386 ProjFileLoadTestCase
4387 (TestLoadingProjFile.test_caching): New. Test whether the cache
4388 works
4389
4390 2003-10-16 Silke Reimer <[email protected]>
4391
4392 * debian/*: New directory with configuration files for building a thuban
4393 deb-package.
4394
4395 2003-10-14 Bernhard Herzog <[email protected]>
4396
4397 * test/test_proj.py: Execute support.run_tests when run as
4398 __main__ so that missing unsubscribes are detected
4399 (TestProjFile.tearDown): Destroy the proj_file properly
4400
4401 2003-10-14 Bernhard Herzog <[email protected]>
4402
4403 * Thuban/Model/messages.py (PROJECTION_ADDED)
4404 (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
4405 the ProjFile objects
4406
4407 * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
4408 easily send messages when the projections change
4409 (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
4410 when the change was successful
4411
4412 * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
4413 proj file messages
4414 (TestProjFile.test_add_remove)
4415 (TestProjFile.test_remove_non_existing)
4416 (TestProjFile.test_replace)
4417 (TestProjFile.test_replace_non_existing): Test whether the right
4418 messages are sent
4419
4420 2003-10-14 Bernhard Herzog <[email protected]>
4421
4422 * test/test_proj.py (TestProjFile.test): Refactor into several
4423 tests
4424 (TestProjFile.test_add_remove)
4425 (TestProjFile.test_remove_non_existing)
4426 (TestProjFile.test_replace)
4427 (TestProjFile.test_replace_non_existing): Some of the new
4428 individual test cases
4429 (TestProjFileSimple): New class for the rest of the test cases
4430 that came out of the refactoring
4431 (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
4432 derived classes don't have to
4433
4434 2003-10-13 Bernhard Herzog <[email protected]>
4435
4436 Add an optional EPSG code to the projection objects and extend the
4437 .proj file format accordingly.
4438
4439 * Resources/XML/projfile.dtd (element projection): Add epsg
4440 attribute
4441
4442 * Thuban/Model/proj.py (Projection.__init__): New parameter and
4443 instance variable epsg. Update doc-string
4444 (Projection.EPSGCode, Projection.Label): New methods to provide
4445 access to EPSG code and a label for use in dialogs
4446
4447 * Thuban/Model/resource.py (ProjFileReader.start_projection)
4448 (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
4449 Handle the epsg code attribute when reading or writing proj files
4450
4451 * Thuban/UI/projdialog.py (ProjFrame._OnSave)
4452 (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
4453 (ProjFrame.__FillAvailList): Use the projection's Label method to
4454 get the string for the list box
4455
4456 * test/test_proj.py (TestProjection.test_label)
4457 (TestProjection.test_label_epsg)
4458 (TestProjection.test_epsgcode_for_non_epsg_projection)
4459 (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
4460 for the label and EPSGCode methods
4461 (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
4462 (WriteProjFileTests.test_write_empty_file): Create the ProjFile
4463 objects in the test cases and put the expected contents into the
4464 test case methods too. Update doTestWrite accordingly
4465 (TestLoadingProjFile)
4466 (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
4467 read tests from TestProjFile.
4468 (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
4469 tests are now in the new classes.
4470 (sample_projfile, sample_projfile_data)
4471 (sample_projfile2, sample_projfile_data2): Removed. Not used
4472 anymore.
4473 (TestProjFile.test_read_unreadable_file): No need to reset the
4474 permissions at the end anymore since we use a unique filename
4475
4476 2003-10-13 Bernhard Herzog <[email protected]>
4477
4478 * test/test_proj.py: Some more refactoring of the test cases
4479 (ProjFileTest): New base class for the proj file tests.
4480 (TestProjFile): Derive from ProjFileTest
4481 (TestProjFile.test_read_unreadable_file)
4482 (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
4483 the new filename method to get a unique filename
4484 (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
4485 (WriteProjFileTests): New class for proj file write tests.
4486 Contains the write test that were in TestProjFile originally.
4487
4488 2003-10-13 Bernhard Herzog <[email protected]>
4489
4490 * test/test_proj.py (TestProjFile.testRead)
4491 (TestProjFile.test_read_non_existing_file)
4492 (TestProjFile.test_read_unreadable_file)
4493 (TestProjFile.test_read_empty_file): Split into several methods.
4494
4495 2003-10-10 Bernhard Herzog <[email protected]>
4496
4497 * Thuban/UI/sizers.py: New file with custom sizers.
4498
4499 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
4500 all projection type specific panels and put them into a
4501 NotebookLikeSizer. This way the dialog doesn't change its size
4502 when a different projection is selected
4503 (ProjFrame.__init__): Rename projection_panels
4504 projection_panel_defs and reuse projection_panels for a list of
4505 the instantiated panels.
4506 (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
4507 (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
4508 the panels
4509 (UnknownProjPanel._DoLayout): Place the newlines in the message
4510 differently to make the panel narrower.
4511 (TMPanel._DoLayout): Layout the parameters in one column.
4512
4513 2003-10-10 Bernhard Herzog <[email protected]>
4514
4515 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
4516 that contains all the setup for the dialog's widgets, layout and
4517 event handling.
4518 (__): Call build_dialog to build the dialog.
4519 (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
4520 Their functionality is now in build_dialog
4521 (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
4522 (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
4523 (ProjFrame.__DoOnProjChoice): Small updates due to slightly
4524 different widget names and hierarchy introduced with build_dialog.
4525
4526 2003-10-10 Bernhard Herzog <[email protected]>
4527
4528 * README: Fix typo.
4529
4530 2003-10-09 Bernhard Herzog <[email protected]>
4531
4532 * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
4533 projection is already in the list. This is *a lot* faster when
4534 loading files with hundreds of projections since it saves a linear
4535 search. OTOH this will allow adding the same projection to the
4536 user.proj file multiple times in the projection dialog but we'll
4537 deal with that later
4538
4539 2003-10-09 Jan-Oliver Wagner <[email protected]>
4540
4541 * devtools: New. Directory for developer tools that are not intended
4542 for the regular user.
4543
4544 * devtools/create_epsg.py: New. Convert the epsg file of proj into
4545 a python .proj file.
4546
4547 2003-10-09 Bernhard Herzog <[email protected]>
4548
4549 * test/test_proj.py
4550 (TestProjection.test_get_parameter_without_equals_sign): New. Test
4551 whether GetParameter handles parameters without "=" sign correctly
4552
4553 * Thuban/Model/proj.py (Projection.GetParameter): Handle
4554 parameters that do not contain a "=". Update the doc-string
4555
4556 2003-10-08 Bernhard Herzog <[email protected]>
4557
4558 * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
4559 length limit on the projname text control
4560
4561 2003-10-08 Bernhard Herzog <[email protected]>
4562
4563 * test/test_proj.py (TestProjection.test_get_projection_units_geo)
4564 (TestProjection.test_get_projection_units_normal): New. Tests for
4565 the Projection.GetProjectedUnits method
4566
4567 2003-10-08 Jan-Oliver Wagner <[email protected]>
4568
4569 * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
4570 Added missing 'val' parameter.
4571
4572 2003-10-08 Bernhard Herzog <[email protected]>
4573
4574 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
4575 projection type of the currently selected projection is not known,
4576 i.e. there's no panel for it, use the UnknownProjPanel
4577 (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
4578 the actual replacing of the proj panel into the new method
4579 _show_proj_panel.
4580 (UnknownProjPanel): Add doc-string.
4581 (UnknownProjPanel._DoLayout): Insert a newline into the text so
4582 that the panel is not so wide.
4583
4584 2003-10-08 Bernhard Herzog <[email protected]>
4585
4586 * Thuban/Model/resource.py (read_proj_file): Return the warnings
4587 too. Update the doc-string
4588 (get_proj_files): Removed. It wasn't used anywhere
4589 (get_system_proj_files, get_system_proj_file): Rename to
4590 get_system_proj_file and return the ProjFile object and not a list
4591 of ProjFile objects. Update the callers.
4592 (get_user_proj_files, get_user_proj_file): Rename to
4593 get_user_proj_file return the ProjFile object and not a list of
4594 ProjFile objects. Update the callers.
4595 (ProjFileReader.__init__): New instance variable for the warnings.
4596 Rename the __pf ivar to projfile. Update the methods referring to
4597 __pf
4598 (ProjFileReader.end_projection): Catch any errors raised when
4599 instantiating the projection and record that as an error. The
4600 projection will not be in the final ProjFile object.
4601 (ProjFileReader.GetWarnings): New method to return the warnings.
4602
4603 * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
4604 show the warnings from the projfile reader
4605 (ProjFrame._OnImport): Deal with any warnings returned by
4606 read_proj_file
4607 (ProjFrame.__FillAvailList): Deal with any warnings returned by
4608 get_system_proj_file or get_user_proj_file.
4609
4610 * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
4611 (TestProjFileWithInvalidParameters.file_contents): New test cases
4612 to test whether read_proj_file handles invalid projection
4613 parameters correctly
4614 (TestProjFile.test_get_system_proj_file): New. Simple test for
4615 resource.get_system_proj_file
4616
4617 2003-10-07 Bernhard Herzog <[email protected]>
4618
4619 * test/test_derivedshapestore.py
4620 (TestDerivedShapeStoreExceptions.tearDown): Clear the session
4621 properly so that the temporary directories get deleted correctly
4622
4623 2003-10-06 Bernhard Herzog <[email protected]>
4624
4625 Handle the title changes in a proper MVC way.
4626
4627 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
4628 canvas' TITLE_CHANGED messages
4629 (MainWindow.update_title): New. Update the main window's title
4630 (MainWindow.__SetTitle): Removed. Use update_title instead.
4631 (MainWindow.SetMap): Use update_title instead of __SetTitle
4632 (MainWindow.RenameMap): Do change the window title explicitly
4633 here. That's handled in a proper MVC way now.
4634 (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
4635 messages
4636
4637 * Thuban/Lib/connector.py (Conduit): New class to help classes
4638 that forward messages
4639
4640 * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
4641 (ViewPort): Derive from Conduit instead of Publisher
4642 (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
4643 when calling the inherited versions
4644 (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
4645 methods to subscribe and unsubscribe map messages
4646 (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
4647 handle the map subscriptions
4648 (ViewPort.Map, ViewPort.map_projection_changed)
4649 (ViewPort.layer_projection_changed): Add or update doc-strings
4650
4651 * test/test_connector.py (TestPublisher.test_issue_simple): Fix
4652 typo
4653 (MyConduit): Helper class for the Conduit test.
4654 (TestConduit): Test cases for Conduit
4655
4656 * test/test_connector.py: Use support.run_tests as main.
4657
4658 * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
4659 the TITLE_CHANGED messages
4660 (ViewPortTest.test_forwarding_title_changed): New test to check
4661 whether the viewport forwards the map's TITLE_CHANGED messages
4662 (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
4663 after the port's because the latter may require a still functional
4664 map.
4665
4666 2003-10-06 Bernhard Herzog <[email protected]>
4667
4668 * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
4669 doc-string
4670
4671 2003-10-06 Bernhard Herzog <[email protected]>
4672
4673 * test/test_viewport.py (ViewPortTest.setUp)
4674 (SimpleViewPortTest.test_init_with_size): Move the test for the
4675 initial size as a constructor parameter from ViewPortTest.setUp
4676 method to a new separate test in SimpleViewPortTest.
4677
4678 2003-10-06 Bernhard Herzog <[email protected]>
4679
4680 * test/test_viewport.py (MockView): New class derived from
4681 ViewPort with a mock implementation of GetTextExtent to be used in
4682 the test cases
4683 (ViewPortTest.setUp): Use MockView instead of ViewPort
4684
4685 * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
4686 into what would be a "pure virtual function" in C++: always raise
4687 NotImplementedError. Mock implementations for test cases don't
4688 belong into the real code
4689
4690 2003-10-02 Bernhard Herzog <[email protected]>
4691
4692 * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
4693 close the dbf file we create so that it's contents have been
4694 written properly.
4695
4696 * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
4697 libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
4698 Update to shapelib 1.2.10
4699
4700 2003-10-01 Jan-Oliver Wagner <[email protected]>
4701
4702 * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
4703 it annoys lintian which warns about these files not being
4704 executable. The #! isn't necessary here since if you absolutely
4705 must execute them you can always say "python <filename>".
4706
4707 2003-09-26 Bernhard Herzog <[email protected]>
4708
4709 * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
4710 only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
4711 is ported to a newer the import will fail, so it should be noticed
4712 immediately that this function is gone.
4713 Fixes RT#1919
4714
4715 2003-09-26 Bernhard Herzog <[email protected]>
4716
4717 Add a DTD for the projection files and make thuban write valid
4718 projection files
4719
4720 * Resources/XML/projfile.dtd: New. DTD for thuban's projection
4721 files
4722
4723 * Thuban/Model/resource.py (ProjFileSaver.write): Use
4724 'projectionlist' as the name in the document type declaration so
4725 that it matches the element type of the root element.
4726
4727 * test/test_proj.py (sample_projfile, sample_projfile2): Use
4728 'projectionlist' as the name in the document type declaration just
4729 as it is done now in the files thuban would write
4730 (sample_projfile, sample_projfile_data): Fix spelling of
4731 "Mercator"
4732 (TestProjFile.doTestWrite): Validate the written and the expected
4733 XML data
4734 (TestProjFile): Derive from ValidationTest so that we can run xml
4735 validation tests
4736
4737 2003-09-24 Bernhard Herzog <[email protected]>
4738
4739 * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
4740 modify the list returned by map.Layers() in place since it is the
4741 actual list of layers used by the map.
4742
4743 2003-09-23 Jan-Oliver Wagner <[email protected]>
4744
4745 * Doc/manual/thuban-manual.xml: Added subsection to chapter
4746 Extensions to describe the extensions coming with the Thuban
4747 standard package (gns2shp and importAPR).
4748
4749 2003-09-23 Bernhard Herzog <[email protected]>
4750
4751 * libraries/thuban/wxproj.cpp (project_point): if there's an
4752 inverse but no forward projection, convert to degrees after
4753 applying the inverse projection. Fixes RT#2096
4754
4755 * test/test_wxproj.py: New. Test cases for wxproj.so. One test
4756 implicitly tests for the fix to RT#2096
4757
4758 * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
4759 Check that the sequences have the same lengths
4760
4761 * Resources/Projections/defaults.proj (Geographic projection): Use
4762 a much more precise value for the to_meter attribute.
4763
4764 2003-09-22 Bernhard Herzog <[email protected]>
4765
4766 * test/support.py (initthuban): Make sure to unset the LANG env.
4767 var. so that tests that compare translated strings work. Solves RT
4768 #2094
4769
4770 2003-09-22 Jan-Oliver Wagner <[email protected]>
4771
4772 Small improvement of APR import.
4773
4774 * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
4775 Added tests for text-ranges.
4776
4777 * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
4778 returns a string object if the range is based on text.
4779
4780 * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
4781 range retrieval.
4782
4783 2003-09-22 Jan-Oliver Wagner <[email protected]>
4784
4785 Initial version of the importAPR extension which is in
4786 experimental state.
4787
4788 * /Extensions/importAPR/, /Extensions/importAPR/samples/,
4789 /Extensions/importAPR/test/: New directories.
4790
4791 * /Extensions/importAPR/samples/README: New: Howto load the samples.
4792
4793 * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
4794 file which refers to the Thuban Iceland demo data.
4795
4796 * /Extensions/importAPR/test/README: New: Howto execute the tests.
4797
4798 * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
4799
4800 * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
4801 as in '.apr'-files.
4802
4803 * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
4804 ODB Objects as in '.apr', '.avl' and other files.
4805
4806 * /Extensions/importAPR/__init__.py: New: Init to make this
4807 directory a package.
4808
4809 * /Extensions/importAPR/importAPR.py: New: Import a ArcView
4810 project file (.apr) and convert it to Thuban.
4811
4812 2003-09-22 Jan-Oliver Wagner <[email protected]>
4813
4814 * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
4815
4816 2003-09-19 Jan-Oliver Wagner <[email protected]>
4817
4818 * Doc/manual/thuban-manual.xml: Extended section 'Installation'
4819 with description on RPM installation and RPM binary package
4820 creation.
4821
4822 2003-09-18 Bernhard Herzog <[email protected]>
4823
4824 * setup.py (data_files): Only add the mo files if the Locales
4825 directory actually exists, so that setup.py works with a fresh CVS
4826 checkout
4827
4828 2003-09-12 Jan-Oliver Wagner <[email protected]>
4829
4830 * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
4831 in viewport, not anymore in view
4832
4833 2003-09-04 Jan-Oliver Wagner <[email protected]>
4834
4835 Introducing first Extension (gns2shp).
4836
4837 * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
4838
4839 * Extensions/__init__.py: New. init to make this dir a package.
4840
4841 * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
4842
4843 * Extensions/gns2shp/test/README: New. some info on this test directory.
4844
4845 * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
4846
4847 * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
4848 of Shapefile from GNS text file format
4849
4850 2003-09-03 Jan-Oliver Wagner <[email protected]>
4851
4852 Fix/workaround for bug #2019:
4853 https://intevation.de/rt/webrt?serial_num=2019
4854
4855 * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
4856 (IdentifyView.__init__): Added another button that allows to
4857 stop the identify mode.
4858 (IdentifyView.OnStop): New. Stops the identify mode.
4859
4860 2003-09-03 Jan-Oliver Wagner <[email protected]>
4861
4862 Introducing a new exception dialog that allows to exit the
4863 application immediately.
4864 This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
4865
4866 * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
4867
4868 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
4869 Made strings available to translations. Exchanged the simple
4870 ScrolledMessageDialog by the new ExceptionDialog.
4871
4872 2003-09-01 Bernhard Herzog <[email protected]>
4873
4874 * NEWS: New. Summary of changes and release notes.
4875
4876 * MANIFEST.in: Add NEWS
4877
4878 2003-09-01 Bernhard Herzog <[email protected]>
4879
4880 * MANIFEST.in: Correct the include statement for the mo-files and
4881 include the documentation too.
4882
4883 * setup.py (data_files): Add the .mo files
4884 (setup call): Up to version 0.9.0
4885
4886 2003-09-01 Bernhard Herzog <[email protected]>
4887
4888 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
4889 parameter list to just parent and session
4890 (ChooseDBTableDialog.__set_properties): Removed. Setting the
4891 selection of empty list boxes is not allowed (and produces C++
4892 assertion errors) and the rest of the setup is better done in
4893 __init__ anyway.
4894 (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
4895 (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
4896 builtins True/False for booleans to avoid warnings from wxPython
4897
4898 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
4899 ChooseDBTableDialog constructor parameters.
4900
4901 2003-09-01 Bernhard Herzog <[email protected]>
4902
4903 * Thuban/Model/postgisdb.py
4904 (PostGISTable): Extend doc-string
4905 (PostGISTable._fetch_table_information): Set the column index
4906 correctly, pretending ignored columns don't exist.
4907
4908 * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
4909 for postgis tables with data types not yet supported by thuban.
4910
4911 2003-08-29 Bernhard Herzog <[email protected]>
4912
4913 * HOWTO-Release: Tweak item about running the tests.
4914
4915 2003-08-29 Jan-Oliver Wagner <[email protected]>
4916
4917 * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
4918
4919 2003-08-29 Bernhard Herzog <[email protected]>
4920
4921 Add some missing parameters to projections. Proj complains about
4922 them on windows but for some reason not on Linux.
4923
4924 * test/test_save.py (SaveSessionTest.testLayerProjection): Add
4925 missing required projection parameters
4926
4927 * test/test_proj.py (TestProjFile.test): Add missing required
4928 projection parameters
4929
4930 * test/test_load_0_8.py (TestLayerProjection.file_contents)
4931 (TestLayerProjection.test): Add missing required projection
4932 parameters and tests for them
4933
4934 * test/test_load.py (TestLayerProjection.file_contents)
4935 (TestLayerProjection.test): Add missing required projection
4936 parameters and tests for them
4937
4938 * test/test_layer.py (TestLayer.test_base_layer): Add missing
4939 required projection parameters
4940
4941 2003-08-29 Bernhard Herzog <[email protected]>
4942
4943 * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
4944 access the pj_errno because directly accessing pj_errno doesn't
4945 work on windows if the proj library is in a DLL
4946
4947 * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
4948
4949 2003-08-28 Bernhard Herzog <[email protected]>
4950
4951 * test/test_proj.py: Import things from Thuban after calling
4952 initthuban
4953
4954 * test/test_load.py (LoadSessionTest.filenames): New class
4955 variable with the filename attributes to normalize
4956 (LoadSessionTest.check_format): Pass self.filenames to
4957 sax_eventlist to normalize the filename attributes
4958
4959 * test/xmlsupport.py: Add cvs keywords
4960 (SaxEventLister.__init__): New parameter filenames which indicates
4961 attributes that contain filenames
4962 (SaxEventLister.startElementNS): Normalize the filename attributes
4963 with os.path.normpath
4964 (sax_eventlist): New parameter filenames to pass through to
4965 SaxEventLister
4966
4967 * test/test_derivedshapestore.py: Make this file callable as a
4968 program to execute the tests
4969 (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
4970 the session to self.session so that it gets destroyed properly
4971
4972 * test/test_layer.py (TestLayer.tearDown): Call the session's
4973 Destroy method
4974
4975 * test/test_map.py (TestMapBase.tearDown): Destroy self.session
4976 too if it exists
4977 (TestMapAddLayer.test_add_layer): Bind the session to self.session
4978 so that it gets destroyed properly
4979
4980 * test/postgissupport.py (reason_for_not_running_tests): Add a
4981 test for the existence of popen2.Popen4.
4982
4983 * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
4984 reliable way to destroy the sessions created in the test cases
4985 (SaveSessionTest.test_dbf_table): Bind the session to self.session
4986 so that it gets destroyed properly
4987 (SaveSessionTest.testLayerProjection): Bind the session to
4988 self.session so that it gets destroyed properly
4989
4990 * test/test_session.py (UnreferencedTablesTests.tearDown): Make
4991 sure that the session is destroyed properly
4992
4993 * test/test_shapefilestore.py: Make this callable as a program to
4994 execute the tests
4995
4996 * test/test_scalebar.py: Remove unnecessary import of _ from
4997 Thuban
4998
4999 * test/support.py (print_garbage_information): Call initthuban
5000 here because it may be called indirectly from test cases that test
5001 test support modules which do not use anything from thuban itself
5002 (ThubanTestProgram.runTests): Remove unnecessary debug print
5003
5004 2003-08-28 Bernhard Herzog <[email protected]>
5005
5006 * Thuban/version.py (longversion): Update to 0.9
5007
5008 * Thuban/UI/mainwindow.py: Remove some unused imports
5009
5010 * README: Add section about required additional software. Add date
5011 and revision CVS keywords
5012
5013 * HOWTO-Release: Add item about the translations. Add date and
5014 revision CVs keywords and change formatting to match README a bit
5015 better
5016
5017 * po/de.po: Update for 0.9
5018
5019 * test/README: Tweak the wording a little because many tests are
5020 not really unittest.
5021
5022 2003-08-27 Bernhard Herzog <[email protected]>
5023
5024 As preparation for the 0.9 release, switch thuban files to a
5025 non-dev namespace
5026
5027 * Thuban/Model/save.py (SessionSaver.write_session): Write files
5028 with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
5029 namespace
5030
5031 * Thuban/Model/load.py (SessionLoader.__init__): Accept the
5032 http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
5033
5034 * test/test_save.py (SaveSessionTest.dtd)
5035 (SaveSessionTest.testEmptySession)
5036 (SaveSessionTest.testSingleLayer)
5037 (SaveSessionTest.testLayerProjection)
5038 (SaveSessionTest.testRasterLayer)
5039 (SaveSessionTest.testClassifiedLayer)
5040 (SaveSessionTest.test_dbf_table)
5041 (SaveSessionTest.test_joined_table)
5042 (SaveSessionTest.test_save_postgis): Update for new namespace
5043
5044 * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
5045 (TestLayerVisibility.file_contents, TestLabels.file_contents)
5046 (TestLayerProjection.file_contents)
5047 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
5048 (TestPostGISLayer.file_contents)
5049 (TestPostGISLayerPassword.file_contents)
5050 (TestLoadError.file_contents, TestLoadError.test): Update for new
5051 namespace
5052
5053 2003-08-27 Bernhard Herzog <[email protected]>
5054
5055 Make the table interface distinguish between row ids (an integer
5056 that uniquely identifies a row) and row ordinals (a simple row
5057 count from 0 to NumRows() - 1)
5058
5059 * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
5060 (PostGISTable.RowOrdinalToId): New methods to conver between row
5061 ids and row ordinals
5062 (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
5063 parameter row_is_ordinal to indicate whether the row parameter is
5064 the row id or the ordinal
5065
5066 * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
5067 (TransientTableBase.RowOrdinalToId)
5068 (AutoTransientTable.RowIdToOrdinal)
5069 (AutoTransientTable.RowOrdinalToId): Same new methods as in
5070 PostGISTable.
5071 (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
5072 (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
5073 Same new parameter as in PostGISTable.
5074
5075 * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
5076 (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
5077 (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
5078 (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
5079 (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
5080 parameter as in PostGISTable.
5081
5082 * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
5083 (DataTable.RowOrdinalToId): New methods to convert between row ids
5084 and row ordinals.
5085 (TableGrid.SelectRowById): New method to select a row based on its
5086 ID as opposed to its ordinal
5087 (DataTable.GetValue, TableGrid.OnRangeSelect)
5088 (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
5089 (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
5090 (LayerTableFrame.__init__): Convert between row ids and row
5091 ordinals as appropriate
5092
5093 * test/postgissupport.py (PostGISDatabase.__init__): Add
5094 doc-string.
5095 (PostGISDatabase.initdb): The optional third item in a tuple in
5096 tables is now a (key, value) list with additional arguments to
5097 pass to upload_shapefile
5098 (upload_shapefile): New parameter gid_offset to allow gids that
5099 are not the same as the shapeids in the shapefile
5100 (PostgreSQLServer.get_default_static_data_db): Use the new
5101 gid_offset to make the gids in landmarks 1000 higher than the
5102 shapeids in the shapefile
5103
5104 * test/test_viewport.py
5105 (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
5106 new shapeids in the landmarks table
5107
5108 * test/test_transientdb.py
5109 (TestTransientTable.run_iceland_political_tests)
5110 (TestTransientTable.test_transient_joined_table): Add tests for
5111 the new table methods and new keywords arguments.
5112
5113 * test/test_postgis_db.py
5114 (TestPostGISTable.test_read_row_as_dict_row_count_mode)
5115 (TestPostGISTable.test_read_value_row_count_mode)
5116 (TestPostGISTable.test_row_id_to_ordinal)
5117 (TestPostGISTable.test_row_oridnal_to_id): New test for the new
5118 table methods and the new arguments
5119 (TestPostGISShapestorePoint.test_shapes_in_region)
5120 (TestPostGISShapestorePoint.test_shape_raw_data)
5121 (TestPostGISShapestorePoint.test_shape_points)
5122 (TestPostGISShapestorePoint.test_shape_shapeid)
5123 (TestPostGISShapestorePoint.test_all_shapes)
5124 (TestPostGISTable.test_simple_query)
5125 (TestPostGISTable.test_simple_query)
5126 (TestPostGISTable.test_simple_query)
5127 (TestPostGISTable.test_read_value)
5128 (TestPostGISTable.test_read_row_as_dict): Adapt to the new
5129 shapeids in the landmarks table
5130
5131 * test/test_memory_table.py
5132 (TestMemoryTable.test_read_row_as_dict_row_count_mode)
5133 (TestMemoryTable.test_read_value_row_count_mode)
5134 (TestMemoryTable.test_row_id_to_ordinal)
5135 (TestMemoryTable.test_row_oridnal_to_id): New test for the new
5136 table methods and the new arguments
5137
5138 * test/test_dbf_table.py
5139 (TestDBFTable.test_read_row_as_dict_row_count_mode)
5140 (TestDBFTable.test_read_value_row_count_mode)
5141 (TestDBFTable.test_row_id_to_ordinal)
5142 (TestDBFTable.test_row_oridnal_to_id): New test for the new table
5143 methods and the new arguments
5144
5145 2003-08-26 Bernhard Herzog <[email protected]>
5146
5147 * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
5148 more postgis specific but much faster method to get the bounding
5149 box
5150
5151 2003-08-26 Bernhard Herzog <[email protected]>
5152
5153 * Thuban/Model/postgisdb.py (PostGISTable.Title)
5154 (PostGISShapeStore.AllShapes): Add these missing methods.
5155 (PostGISShapeStore.ShapesInRegion): No need to raise
5156 StopIteration. We can simply return
5157
5158 * test/test_postgis_db.py (TestPostGISTable.test_title)
5159 (TestPostGISShapestorePoint.test_all_shapes): New tests for the
5160 new methods
5161
5162 2003-08-25 Bernhard Herzog <[email protected]>
5163
5164 * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
5165
5166 * test/test_postgis_db.py (PolygonTests): New class containing
5167 those tests from TestPostGISShapestorePolygon that can also be
5168 used to test MUTLIPOLYGON tables
5169 (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
5170 so derive from that
5171 (TestPostGISShapestoreMultiPolygon): New class with tests for
5172 MUTLIPOLYGON tables
5173
5174 * test/postgissupport.py (PostGISDatabase.initdb): Allow the
5175 tables argument to have tuples with three items to override the
5176 WKT type used.
5177 (PostgreSQLServer.get_default_static_data_db): Use the above to
5178 create a polygon table with MUTLIPOLYGONs
5179 (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
5180 (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
5181 coords_to*
5182 (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
5183 (wkt_converter): New. Map WKT types to converters
5184 (upload_shapefile): New parameter force_wkt_type to use a
5185 different WKT type than the default
5186
5187 2003-08-25 Bernhard Herzog <[email protected]>
5188
5189 * Thuban/UI/application.py
5190 (ThubanApplication.run_db_param_dialog): New. Suitable as a
5191 db_connection_callback. Main difference is that the dialog run
5192 from this method doesn't have a parent so it can be used even when
5193 there is no main window
5194 (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
5195 no db_connection_callback was given. This way the dialog pops up
5196 even when the .thuban file was given as a command line parameter.
5197
5198 2003-08-25 Bernhard Herzog <[email protected]>
5199
5200 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
5201 before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
5202 which leads to an effectively frozen X session because the user
5203 can only interact with the dialog but the mouse is still grabbed
5204 by the canvas.
5205 Also, call the tool's Hide method before MouseLeftUp because
5206 MouseLeftUp may change the tool's coordinates.
5207
5208 2003-08-25 Bernhard Herzog <[email protected]>
5209
5210 * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
5211 LoadCancelled exceptions and handle them by returning immediately.
5212
5213 2003-08-25 Bernhard Herzog <[email protected]>
5214
5215 GUI part of loading sessions with postgis connections which may
5216 require user interaction to get passwords or updated parameters
5217
5218 * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
5219 bit nucer and be more generic.
5220 (DBFrame.OnAdd): Adapt to new DBDialog interface
5221
5222 * Thuban/UI/application.py (ThubanApplication.OpenSession): New
5223 optional parameter db_connection_callback which is passed to
5224 load_session.
5225
5226 * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
5227 Suitable as a db_connection_callback
5228 (MainWindow.OpenSession): Use self.run_db_param_dialog as the
5229 db_connection_callback of the application's OpenSession method
5230
5231
5232 2003-08-25 Bernhard Herzog <[email protected]>
5233
5234 Basic loading of sessions containing postgis connections:
5235
5236 * Thuban/Model/load.py (LoadError): Add doc-string
5237 (LoadCancelled): New exception class to indicate a cancelled load
5238 (SessionLoader.__init__): Add the db_connection_callback parameter
5239 which will be used by the loader to get updated parameters and a
5240 password for a database connection
5241 (SessionLoader.__init__): Add the new XML elements to the
5242 dispatchers dictionary
5243 (SessionLoader.check_attrs): Two new conversions, ascii to convert
5244 to a byte-string object and idref as a generic id reference
5245 (SessionLoader.start_dbconnection)
5246 (SessionLoader.start_dbshapesource): New. Handlers for the new XML
5247 elements
5248 (load_session): Add the db_connection_callback to pass through the
5249 SessionLoader
5250
5251 * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
5252 New classes to test loading of sessions with postgis database
5253 connections.
5254
5255 2003-08-25 Bernhard Herzog <[email protected]>
5256
5257 * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
5258 replace it and the comment with __BuildDate__ by the Source: and
5259 Id: cvs keywords as used in the other files.
5260
5261 2003-08-25 Bernhard Herzog <[email protected]>
5262
5263 * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
5264 LoadError when a required attribute is missing. The code used to
5265 be commented out for some reason, but probably should have been
5266 active.
5267
5268 * test/test_load.py (TestLoadError.test): Test the message in the
5269 LoadError too to make sure it really is about the missing
5270 attribute
5271
5272 2003-08-22 Bernhard Herzog <[email protected]>
5273
5274 * test/test_save.py (SaveSessionTest.test_dbf_table)
5275 (SaveSessionTest.test_joined_table): Add XML validation tests.
5276
5277 2003-08-22 Bernhard Herzog <[email protected]>
5278
5279 Implement saving a session with a postgis connection
5280
5281 * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
5282 elements for database connections and shapestores using db
5283 connections
5284 (session): Add the dbconnections to the content model
5285
5286 * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
5287 Write the db connections
5288 (SessionSaver.write_session): Call write_db_connections to write
5289 the connection before the data sources
5290 (SessionSaver.write_data_containers): Handle postgis shapestores
5291
5292 * test/test_save.py (SaveSessionTest.thubanids)
5293 (SaveSessionTest.thubanidrefs): Update for new DTD
5294 (SaveSessionTest.test_save_postgis): New. Test saving a session
5295 with postgis connections
5296
5297 * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
5298 (PostGISTable.TableName): New accessor methods for the connection
5299 and table name
5300
5301 * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
5302 (TestPostGISTable.test_dbname): New methods to test the new
5303 PostGISConnection methods
5304
5305 2003-08-22 Bernhard Herzog <[email protected]>
5306
5307 * Thuban/Model/postgisdb.py (ConnectionError): New exception class
5308 for exceptions occurring when establishing a Database connection
5309 (PostGISConnection.connect): Catch psycopg.OperationalError during
5310 connects and raise ConnectionError.
5311
5312 * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
5313 tests for database exceptions
5314
5315 2003-08-22 Bernhard Herzog <[email protected]>
5316
5317 Prepare the test suite for tests with required authentication
5318
5319 * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
5320 variables with two predefined users/passwords, one for the admin
5321 and one for a non-privileged user.
5322 (PostgreSQLServer.createdb): Pass the admin name to initdb and add
5323 the non-privileged user to the database and set the admin password
5324 (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
5325 Better error reporting
5326 (PostgreSQLServer.connection_params)
5327 (PostgreSQLServer.connection_string): New methods to return
5328 information about how to connect to the server
5329 (PostgreSQLServer.execute_sql): New. Convenience method to execute
5330 SQL statements
5331 (PostgreSQLServer.require_authentication): Toggle whether the
5332 server requires authentication
5333 (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
5334 Add or alter users
5335 (PostGISDatabase.initdb): Pass the admin name one the
5336 subprocesses' command lines. Grant select rights on
5337 geometry_columns to everybody.
5338 (upload_shapefile): Use the admin name and password when
5339 connecting. Grant select rights on the new table to everybody.
5340
5341 * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
5342 server's new methods to get the connection parameters.
5343
5344 * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
5345 (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
5346 server's new methods to get the connection parameters.
5347
5348 * test/test_postgis_db.py
5349 (TestPostGISConnection.test_gis_tables_empty)
5350 (TestPostGISConnection.test_gis_tables_non_empty)
5351 (PostGISStaticTests.setUp): Use the server's new methods to get
5352 the connection parameters.
5353
5354 2003-08-22 Bernhard Herzog <[email protected]>
5355
5356 * Thuban/UI/about.py (About.__init__): Add the psycopg version.
5357
5358 * Thuban/version.py: Add psycopg version
5359
5360 * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
5361 version of the psycopg module
5362
5363 2003-08-22 Bernhard Herzog <[email protected]>
5364
5365 * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
5366 (DBFrame.OnEdit): Removed because it's not used and wouldn't work
5367 at the moment. The functionality should probably be implemented
5368 some time, though.
5369 (DBFrame.OnRemove): Display a message if the connection can't be
5370 removed because it's still in use.
5371
5372 2003-08-22 Jan-Oliver Wagner <[email protected]>
5373
5374 * Thuban/UI/about.py (About.__init__): split up the huge about
5375 text into elements/lists for easier translation. This fixes bug
5376 https://intevation.de/rt/webrt?serial_num=2058
5377 Also, made some forgotten string available for the i18n.
5378
5379 2003-08-21 Bernhard Herzog <[email protected]>
5380
5381 Make postgis support really optional including insensitive menu
5382 items.
5383
5384 * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
5385 whether the postgis is supported.
5386
5387 * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
5388 to make postgis support optional
5389
5390 * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
5391 version of Thuban.Model.postgisdb.has_postgis_support
5392 (database_management command): Make it only sensitive if postgis
5393 is supported.
5394
5395 2003-08-21 Jan-Oliver Wagner <[email protected]>
5396
5397 * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
5398 (section Adding and Removing Layers): Added text and described
5399 multi-selection.
5400 (chapter Extensions): New.
5401
5402 2003-08-21 Jan-Oliver Wagner <[email protected]>
5403
5404 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
5405 settings to allow multiple files to load into the map.
5406 Also reduced selection to *.shp as a default.
5407
5408 2003-08-20 Bernhard Herzog <[email protected]>
5409
5410 Add dialogs and commands to open database connections and add
5411 database layers.
5412
5413 * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
5414 method to open the database connection management dialog
5415 (MainWindow.AddDBLayer): New method to add a layer from a database
5416 (_has_dbconnections): New helper function to use for sensitivity
5417 (database_management command, layer_add_db command): New commands
5418 that call the above new methods.
5419 (main_menu): Add the new commands to the menu.
5420
5421 * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
5422 (PostGISConnection.connect): Establish the actual connection in a
5423 separate method and call it in __init__. This makes it easier to
5424 override the behavior in test cases
5425 (PostGISConnection.BriefDescription): New method to return a brief
5426 description for use in dialogs.
5427
5428 * test/test_postgis_db.py (NonConnection): DB connection that
5429 doesn't actually connect
5430 (TestBriefDescription): New class with tests for the new
5431 BriefDescription method
5432
5433 2003-08-19 Jan-Oliver Wagner <[email protected]>
5434
5435 Moved anything from extensions to libraries.
5436
5437 * libraries: New.
5438
5439 * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
5440
5441 * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
5442 Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
5443 been moved here from thuban/extensions/pyprojection/
5444 See there in the Attic for the older history.
5445
5446 * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
5447 dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
5448 shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
5449 have been moved here from thuban/extensions/pyshapelib/
5450 See there in the Attic for the older history.
5451
5452 * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
5453 files have been moved here from thuban/extensions/shapelib/
5454 See there in the Attic for the older history.
5455
5456 * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
5457 gdalwarp.cpp, wxproj.cpp: These files have been moved here from
5458 thuban/extensions/thuban/
5459 See there in the Attic for the older history.
5460
5461 * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
5462
5463 * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
5464 gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
5465
5466 * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
5467 Moved to libraries/shapelib.
5468
5469 * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
5470 shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
5471 ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
5472 Moved to libraries/pyshapelib.
5473
5474 * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
5475 LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
5476 Moved to libraries/pyprojection.
5477
5478 * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
5479
5480 * extensions: Removed.
5481
5482 2003-08-19 Bernhard Herzog <[email protected]>
5483
5484 * test/test_viewport.py (ViewPortTest): We don't use the
5485 facilities of FileTestMixin so don't derive from it.
5486 (TestViewportWithPostGIS): New class with tests for using a
5487 viewport on a map with postgis layers.
5488
5489 2003-08-19 Bernhard Herzog <[email protected]>
5490
5491 Add the db connection management to the session.
5492
5493 * Thuban/Model/session.py (Session.__init__): New instance
5494 variable db_connections
5495 (Session.AddDBConnection, Session.DBConnections)
5496 (Session.HasDBConnections, Session.CanRemoveDBConnection)
5497 (Session.RemoveDBConnection): New methods to manage and query the
5498 db connections managed by the session
5499 (Session.OpenDBShapeStore): New method to open a shapestore from a
5500 db connection
5501
5502 * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
5503 messages for the db connection handling in the session
5504
5505 * test/test_postgis_session.py: New. test cases for the session's
5506 db connection handling with postgis connections
5507
5508 2003-08-19 Bernhard Herzog <[email protected]>
5509
5510 Add very basic postgis database support and the corresponding test
5511 cases. The test cases require a PostgreSQL + postgis installation
5512 but no existing database. The database will be created
5513 automatically by the test cases
5514
5515 * test/README: Add note about skipped tests and the requirements
5516 of the postgis tests.
5517
5518 * Thuban/Model/postgisdb.py: New. Basic postgis database support.
5519
5520 * test/test_postgis_db.py: New. Test cases for the postgis
5521 support.
5522
5523 * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
5524 format
5525
5526 * test/test_wellknowntext.py: New. Test cases for the
5527 wellknowntext parser
5528
5529 * test/postgissupport.py: New. Support module for tests involving
5530 a postgis database.
5531
5532 * test/support.py (execute_as_testsuite): Shut down the postmaster
5533 if it's still running after the tests
5534
5535 * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
5536 well known text format
5537
5538 2003-08-19 Jan-Oliver Wagner <[email protected]>
5539
5540 * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
5541 message dialog.
5542
5543 2003-08-18 Bernhard Herzog <[email protected]>
5544
5545 * test/support.py (ThubanTestResult.printErrors): Indent the
5546 reason for the skips in the output to make it a bit more readable.
5547 (execute_as_testsuite): New helper function to run a test suite
5548 and print some more information.
5549 (run_tests): Use execute_as_testsuite to run the tests
5550
5551 * test/runtests.py (main): Use execute_as_testsuite to run the
5552 tests
5553
5554 2003-08-18 Bernhard Herzog <[email protected]>
5555
5556 Fix some bugs in Thuban and the test suite that were uncovered by
5557 changes introduced in Python 2.3:
5558
5559 * Thuban/Model/table.py (DBFTable.__init__): Make sure the
5560 filename is an absolute name
5561
5562 * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
5563 filename is an absolute name
5564
5565 * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
5566 unique filename to save to and use the correct relative filename
5567 in the expected output.
5568 (SaveSessionTest.test_dbf_table): Use the correct relative
5569 filename in the expected output.
5570
5571 * test/test_layer.py (TestLayer.test_raster_layer): Update the
5572 test to check whether the filename is absolute.
5573
5574 2003-08-18 Jan-Oliver Wagner <[email protected]>
5575
5576 * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
5577
5578 2003-08-15 Bernhard Herzog <[email protected]>
5579
5580 Change the way shapes are returned by a shape store. The
5581 ShapesInRegion method returns an iterator over actual shape
5582 objects instead of a list of shape ids.
5583
5584 * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
5585 id.
5586 (ShapefileStore.ShapesInRegion): Return an iterator over the
5587 shapes which yields shape objects instead of returning a list of
5588 shape ids
5589 (ShapefileStore.AllShapes): New. Return an iterator over all
5590 shapes in the shape store
5591 (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
5592
5593 * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
5594 doc-string.
5595
5596 * Thuban/UI/baserenderer.py
5597 (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
5598 layer_shapes and make it return an iterator containg shapes
5599 instead of a list of ids.
5600 (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
5601 layer_shapes() change
5602
5603 * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
5604 (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
5605
5606 * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
5607 changes in the ShapesInRegion return value.
5608 (ViewPort._get_hit_tester): Remove commented out code
5609
5610 * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
5611 new return value.
5612 (SimpleShapeStore.AllShapes): New. Implement this method too.
5613
5614 * test/test_layer.py (TestLayer.test_arc_layer)
5615 (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
5616 (TestLayer.test_point_layer_with_projection)
5617 (TestLayer.test_derived_store): Adapt to changes in the
5618 ShapesInRegion return value.
5619
5620 * test/test_shapefilestore.py
5621 (TestShapefileStoreArc.test_shapes_in_region)
5622 (TestShapefileStorePolygon.test_shapes_in_region)
5623 (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
5624 in the ShapesInRegion return value.
5625 (TestShapefileStorePoint.test_all_shapes)
5626 (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
5627 methods
5628
5629 * test/test_derivedshapestore.py
5630 (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
5631 the ShapesInRegion return value.
5632 (TestDerivedShapeStore.test_all_shapes)
5633 (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
5634 methods
5635
5636 2003-08-15 Bernhard Herzog <[email protected]>
5637
5638 Make the renderers deal correctly with raw vs. python level
5639 representation of shape geometries
5640
5641 * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
5642 Return a flag useraw in addition to the callable and the parameter
5643 to indicate whether the callable can deal with the raw shape data
5644 or uses the higher level python lists of coordinates. The callable
5645 now should accept either the raw data or the return value of the
5646 shape's Points() method.
5647 (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
5648 change
5649 (BaseRenderer.projected_points): Instead of the shape id use the
5650 points list as parameter.
5651 (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
5652 (BaseRenderer.draw_point_shape): Adapt to projected_points()
5653 change and accept the points list as parameter instead of the
5654 shape id.
5655
5656 * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
5657 the useraw flag as required by the BaseRenderer
5658 (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
5659 changes.
5660
5661 * test/test_baserenderer.py
5662 (TestBaseRenderer.test_point_with_classification): New test for
5663 rendering a map with classifications.
5664
5665 2003-08-15 Bernhard Herzog <[email protected]>
5666
5667 * Thuban/UI/viewport.py (ViewPort.find_shape_at)
5668 (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
5669 (ViewPort._get_hit_tester, ViewPort.projected_points)
5670 (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
5671 (ViewPort._find_label_at): Split the find_shape_at method into
5672 several new methods and use the functions in the hit-test module.
5673
5674 * Thuban/UI/hittest.py: New module with Python-level hit-testing
5675 functions
5676
5677 * test/test_hittest.py: New. Test for the new hittest module
5678
5679 2003-08-15 Bernhard Herzog <[email protected]>
5680
5681 * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
5682 projection to all corners of the bounding box to get a better
5683 approximation of the projected bounding box
5684
5685 * test/test_layer.py (TestLayer.test_point_layer_with_projection):
5686 New. Test coordinate handling of a layer with a projection.
5687 Catches the bug fixed in Layer.ShapesInRegion
5688
5689 2003-08-15 Bernhard Herzog <[email protected]>
5690
5691 Move some of the mock objects in test_baserenderer into their own
5692 module so they can easily be used from other tests
5693
5694 * test/mockgeo.py: New test helper module with some mock objects
5695 for geometry related things like shapes, shapestores and
5696 projections.
5697
5698 * test/test_mockgeo.py: New. Tests for the new helper module
5699
5700 * test/test_baserenderer.py: Some of the mock-objects are in
5701 mockgeo now.
5702
5703 2003-08-12 Jan-Oliver Wagner <[email protected]>
5704
5705 * Thuban/UI/about.py (About.__init__): Added Björn Broscheit.
5706
5707 2003-08-12 Bernhard Herzog <[email protected]>
5708
5709 * po/de.po: New. German translations by Bjoern Broscheit
5710
5711 2003-08-12 Bernhard Herzog <[email protected]>
5712
5713 * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
5714 strings have to be one string literal.
5715
5716 2003-08-11 Bernhard Herzog <[email protected]>
5717
5718 * test/support.py (FloatComparisonMixin.assertPointListEquals):
5719 New. This method was used in various derived classes, but it's
5720 better to have it here.
5721
5722 * test/test_shapefilestore.py
5723 (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
5724 FloatComparisonMixin
5725
5726 * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
5727 It's now in FloatComparisonMixin
5728
5729 * test/test_derivedshapestore.py
5730 (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
5731 in FloatComparisonMixin
5732
5733 2003-08-11 Bernhard Herzog <[email protected]>
5734
5735 * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
5736 error message
5737
5738 2003-08-08 Jan-Oliver Wagner <[email protected]>
5739
5740 * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
5741 with version number.
5742 Changed title to reflect version number of Thuban.
5743
5744 2003-08-08 Jan-Oliver Wagner <[email protected]>
5745
5746 * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
5747 the list corresponds to the "About" web page.
5748
5749 2003-08-08 Bernhard Herzog <[email protected]>
5750
5751 * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
5752 Make sure translated strings are recognized as one string literal.
5753
5754 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
5755 Make sure translated strings are recognized as one string literal.
5756
5757 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
5758 translated strings are recognized as one string literal.
5759
5760 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
5761 sure translated strings are recognized as one string literal.
5762
5763 2003-08-07 Bernhard Herzog <[email protected]>
5764
5765 * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
5766 Simply delegates to the original shapestore.
5767
5768 * test/test_derivedshapestore.py
5769 (TestDerivedShapeStore.test_raw_format): New. Test case for
5770 DerivedShapeStore.RawShapeFormat
5771
5772 2003-08-07 Bernhard Herzog <[email protected]>
5773
5774 Add raw data interface to shape objects.
5775
5776 * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
5777 class to ShapefileShape which now holds shapefile specific
5778 information.
5779 (ShapefileShape.compute_bbox): Simplified to not cache any
5780 information. The way this method is used that shouldn't matter
5781 performance wise.
5782 (ShapefileShape.RawData): New. Return the shapeid which is the raw
5783 data format for shapes from shapefiles.
5784 (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
5785 in the shape objects returned by a shapestore. For a
5786 ShapefileStore this is always RAW_SHAPEFILE.
5787 (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
5788 method.
5789
5790 * test/test_shapefilestore.py
5791 (TestShapefileStore.test_raw_format): New test to test the raw
5792 format feature of shapes.
5793
5794 * Thuban/Model/layer.py: Remove the unused import of Shape from
5795 data. It was only there for interface compatibility but it's not
5796 used inside of Thuban and the generic Shape class has gone away.
5797
5798 * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
5799 the raw data format and only use an optimized version of its a
5800 shapefile.
5801
5802 2003-08-07 Bernhard Herzog <[email protected]>
5803
5804 * test/test_baserenderer.py (SimpleShape): Shape class for the
5805 tests.
5806 (SimpleShapeStore.Shape): Use SimpleShape instead of
5807 Thuban.Model.data.Shape to make the tests independed of the coming
5808 changes.
5809
5810 2003-08-07 Bernhard Herzog <[email protected]>
5811
5812 * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
5813 (ThubanTestProgram): New classes that extend the respective
5814 classes from unittest. These new version support skipping tests
5815 under certain expected conditions. In the Thuban test suite we
5816 uses this for tests that require the optional gdal support.
5817 (run_tests): Use ThubanTestProgram instead of the unittest.main()
5818
5819 * test/runtests.py (main): Use the new ThubanTestRunner instead of
5820 the normal one from unittest
5821
5822 * test/test_layer.py (TestLayer.test_raster_layer): If this test
5823 is not run because gdal support isn't available report this to the
5824 runner.
5825
5826 * test/test_baserenderer.py
5827 (TestBaseRenderer.test_raster_no_projection): Do not run this test
5828 if gdal support isn't available and report this to the runner.
5829
5830 2003-08-06 Bernhard Herzog <[email protected]>
5831
5832 Rearrange the renderers a bit, partly in preparation for changes
5833 required for the postgis merge, partly to make it more testable.
5834 Also make the representation of coordinates in Shapes more
5835 consistent.
5836
5837 * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
5838 this class is now in BaseRenderer. This class is now practically
5839 only a specialization of BaseRenderer for rendering to an actual
5840 wx DC.
5841 (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
5842 to get the shapetype specific rendering functions.
5843
5844 * Thuban/UI/baserenderer.py: New file with the basic rendering
5845 logic. The code in this file is completely independend of wx.
5846 (BaseRenderer): Class with the basic rendering logic
5847
5848 * test/test_baserenderer.py: New. Test cases for BaseRenderer
5849
5850 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
5851 error_on_redraw to guard agains endless loops and stack overflows
5852 when there's a bug in the rendering code that raises exceptions.
5853 (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
5854 rendering into a separate method _do_redraw so that error handling
5855 is a bit easier. When an exception occurs, set error_on_redraw to
5856 true. When it's true on entry to OnIdle do nothing and return
5857 immediately.
5858
5859 * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
5860 Shape object will always have the coordinates as a list of list of
5861 coordinate pairs (tuples).
5862 (Shape.compute_bbox): Adapt to new representation.
5863
5864 * Thuban/UI/viewport.py (ViewPort.find_shape_at)
5865 (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
5866 Shape objects.
5867
5868 * test/test_shapefilestore.py
5869 (ShapefileStoreTests.assertFloatTuplesEqual)
5870 (ShapefileStoreTests.assertPointListEquals): Rename to
5871 assertPointListEquals and change purpose to checking equality of
5872 the lists returned by Shape.Points().
5873 (TestShapefileStoreArc.test_shape)
5874 (TestShapefileStorePolygon.test_shape)
5875 (TestShapefileStorePoint.test_shape): Use the new
5876 assertPointListEquals instead of assertFloatTuplesEqual
5877
5878 * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
5879 (TestLayer.assertPointListEquals): Rename to assertPointListEquals
5880 and change purpose to checking equality of the lists returned by
5881 Shape.Points().
5882 (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
5883 (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
5884 (TestLayer.test_derived_store): Use the new assertPointListEquals
5885 instead of assertFloatTuplesEqual
5886
5887 * test/test_derivedshapestore.py
5888 (TestDerivedShapeStore.assertFloatTuplesEqual)
5889 (TestDerivedShapeStore.assertPointListEquals): Rename to
5890 assertPointListEquals and change purpose to checking equality of
5891 the lists returned by Shape.Points().
5892 (TestDerivedShapeStore.test_shape): Use the new
5893 assertPointListEquals instead of assertFloatTuplesEqual
5894
5895 2003-08-06 Jan-Oliver Wagner <[email protected]>
5896
5897 * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
5898 a bounding box. A dialog is raised in case, no bounding box
5899 is found. This fixes bug #2043:
5900 https://intevation.de/rt/webrt?serial_num=2043
5901
5902 2003-08-05 Bernhard Herzog <[email protected]>
5903
5904 * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
5905 object look like a Color instantiation. Formerly it looked like a
5906 tuple.
5907
5908 * test/test_color.py (TestColor.test_repr)
5909 (TestColor.test_equality, TestColor.test_inequality): New. test
5910 some more apects of the Color class
5911 (TestTransparent.test_repr, TestTransparent.test_hex)
5912 (TestTransparent.test_equality): New. Test cases for the
5913 Transparent object.
5914
5915 2003-08-04 Jan-Oliver Wagner <[email protected]>
5916
5917 * Doc/manual/thuban-manual.xml: a number of small improvements.
5918 The resulting file is the version submitted for GREAT-ER II.
5919
5920 2003-08-01 Bernhard Herzog <[email protected]>
5921
5922 * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
5923 Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
5924 Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
5925
5926 * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
5927 (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
5928 (ThubanEndBusyCursor): Add doc-strings
5929
5930 2003-08-01 Bernhard Herzog <[email protected]>
5931
5932 First step towards PostGIS integration. More abstraction by movin
5933 more code from the layer to the shapestore. More methods of the
5934 layer are now simply delegated to the equivalent method of the
5935 shapestore. The SHAPETYPE_* constants are now in data not in
5936 layer.
5937
5938 * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
5939 (SHAPETYPE_POINT, Shape): Move these constants and classes from
5940 layer.py to data.py
5941 (ShapefileStore.__init__): More Initialization for the new methods
5942 and functionality.
5943 (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
5944 (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
5945 (ShapefileStore.Shape): New methods that were formerly implemented
5946 in the layer.
5947 (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
5948 (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
5949 (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
5950 equivalents of the new shape methods. These versions are simply
5951 delegated to the original shapstore.
5952
5953 * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
5954 (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
5955 (Layer.SetShapeStore): Removed the initializatin of instance
5956 variables that were needed for the stuff that's now in
5957 ShapefileStore
5958 (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
5959 (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
5960 shapestore.
5961
5962 * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
5963 Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
5964 instead of layer.
5965
5966 * test/test_shapefilestore.py: New. Tests for ShapefileStore.
5967
5968 * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
5969
5970 * test/test_layer.py: Import the SHAPETYPE_* constants from data
5971 instead of layer.
5972 (TestLayer.test_derived_store): Remove the test for the exception
5973 when instantiating the DerivedShapeStore with an incompatible
5974 table which is now in test_derivedshapestore.py. Add some more
5975 tests of the layer methods to determine whether they work for a
5976 DerivedShapeStore as well.
5977
5978 2003-07-31 Jonathan Coles <[email protected]>
5979
5980 * Doc/manual/thuban-manual.xml: Fix the list of required packages
5981 by just listing the name and where they can be found.
5982
5983 2003-07-31 Frank Koormann <[email protected]>
5984
5985 * Doc/manual/thuban-manual.xml:
5986 Changed the screenshot elements to figure.
5987 Changed some variablelist elements to itemizedlist.
5988 Added section on GDAL formats.
5989
5990 2003-07-31 Jonathan Coles <[email protected]>
5991
5992 * Doc/manual/thuban-manual.xml: Added a few sentences about
5993 the Fix Border Color option when generating classes.
5994
5995 2003-07-30 Jonathan Coles <[email protected]>
5996
5997 * Thuban/Model/classgen.py: Add docstrings. Rename specific
5998 Ramp instances to use lower_case_style.
5999
6000 * Thuban/UI/classgen.py: Use renamed Ramp instances.
6001
6002 * Thuban/UI/classifier.py: Add docstrings.
6003
6004 * Thuban/UI/dock.py: Add docstrings.
6005
6006 * test/test_classgen.py: Use renamed Ramp instances.
6007
6008 2003-07-30 Bernhard Herzog <[email protected]>
6009
6010 * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
6011 was never used in Thuban.
6012
6013 2003-07-30 Bernhard Herzog <[email protected]>
6014
6015 * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
6016 method directly instead of going through the transient_table
6017 method. This faster because transient_table may force the copy of
6018 a DBF file into the transient database and setting a table's title
6019 doesnm't affect the title of the associated transient table, so
6020 this fixes RT #2042
6021
6022 * Thuban/UI/main.py (__version__): Don't import the already
6023 removed show_exception_dialog.
6024
6025 2003-07-29 Jonathan Coles <[email protected]>
6026
6027 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
6028 Put back this method and remove the equivalent function since we
6029 are setting the exception hook from within this class (OnInit).
6030
6031 2003-07-29 Jonathan Coles <[email protected]>
6032
6033 * Doc/manual/images/5_2_custom_ramp.png,
6034 Doc/manual/images/5_2_quantiles.png,
6035 Doc/manual/images/5_2_uniform_dist.png,
6036 Doc/manual/images/5_2_unique_values.png,
6037 Doc/manual/images/8_int_error.png: New screen shots.
6038
6039 * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
6040 some points, and added more screen shots.
6041
6042 2003-07-29 Bernhard Herzog <[email protected]>
6043
6044 * Thuban/Model/data.py: Remove the now unused import of warnings
6045
6046 2003-07-29 Bernhard Herzog <[email protected]>
6047
6048 * Thuban/Model/data.py (SimpleStore): Removed. This class has been
6049 deprecated since before the 0.8 release and isn't used in Thuban
6050 itself anymore.
6051
6052 * Thuban/Model/transientdb.py: Remove some unnecessary imports
6053
6054 2003-07-29 Jonathan Coles <[email protected]>
6055
6056 * Thuban/UI/application.py (ThubanApplication.OnInit): set the
6057 python exception hook here so that we are sure to catch any
6058 Thuban exception that happen during initialization.
6059
6060 * Thuban/UI/main.py (main): Don't set the exception hook here,
6061 it will get set in ThubanApplication.OnInit.
6062
6063 2003-07-29 Jonathan Coles <[email protected]>
6064
6065 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
6066 Removed and called it show_exception_dialog() so that the exception
6067 handler can be set before the class is created.
6068
6069 * Thuban/UI/main.py (main): Install the exception handler before
6070 a ThubanApplication is created.
6071
6072 2003-07-29 Bernhard Herzog <[email protected]>
6073
6074 * po/it.po: New. Italian translation by Maurizio Napolitano
6075
6076 * po/ru.po: New. Russian translation by Alex Shevlakov
6077
6078 2003-07-29 Frank Koormann <[email protected]>
6079
6080 * Doc/manual/thuban-manual.xml: Extended section on supported
6081 projections.
6082
6083 2003-07-29 Frank Koormann <[email protected]>
6084
6085 * Doc/manual/thuban-manual.xml: gaspell-checked.
6086
6087 2003-07-29 Jonathan Coles <[email protected]>
6088
6089 * Doc/manual/images/3_5_legend.png: Added border to improve look
6090 on white background.
6091
6092 2003-07-29 Jonathan Coles <[email protected]>
6093
6094 * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
6095 descriptions for the legend toolbar.
6096
6097 * Doc/manual/images/4_2_raster_layer_properties.png: Removed
6098 cursor from dialog box.
6099
6100 2003-07-28 Jonathan Coles <[email protected]>
6101
6102 * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
6103
6104 * Doc/manual/images/2_4_session_tree.png,
6105 Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
6106 Doc/manual/images/4_2_layer_properties.png,
6107 Doc/manual/images/4_2_raster_layer_properties.png,
6108 Doc/manual/images/5_3_genclass.png,
6109 Doc/manual/images/5_classification.png,
6110 Doc/manual/images/6_projection.png,
6111 Doc/manual/images/7_1_table_view.png,
6112 Doc/manual/images/7_2_5_join.png: New screenshots.
6113
6114 2003-07-24 Jonathan Coles <[email protected]>
6115
6116 * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
6117
6118 2003-07-24 Jonathan Coles <[email protected]>
6119
6120 * Doc/manual/thuban-manual.xml: Added EPS images and wrote
6121 chapter on Layer Management.
6122
6123 * Doc/manual/Makefile: New. Makefile to generate all formats for the
6124 manual and images.
6125
6126 2003-07-24 Bernhard Herzog <[email protected]>
6127
6128 * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
6129 it annoys lintian which warns about these files not being
6130 executable. The #! isn't necessary here since if you absolutely
6131 must execute them you can always say "python <filename>".
6132
6133 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
6134 superfluous code to set brush and pen for point shapes
6135
6136 * Thuban/UI/viewport.py: Remove commented out code that wouldn't
6137 belong in viewport anyway
6138
6139 2003-07-24 Frank Koormann <[email protected]>
6140
6141 * Doc/manual/thuban-manual.xml: Added section on table management.
6142
6143 2003-07-24 Bernhard Herzog <[email protected]>
6144
6145 * test/runtests.py (main): Recognize the long "verbose" option
6146 correctly.
6147
6148 2003-07-22 Jonathan Coles <[email protected]>
6149
6150 * Doc/manual/thuban-manual.xml: Continue to write first revision
6151 of the manual.
6152
6153 * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
6154 with Begin/EndDrawing() calls to ensure we aren't doing to
6155 many updates to the dc during rendering.
6156 (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
6157 a pen and brush argument so they need to be passed to the function.
6158
6159 * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
6160 Calculates the minimum and maximum scale values. Factored out
6161 of set_view_transform so that it could be used to zoom all the
6162 way into a single point.
6163 (ViewPort.set_view_transform): Call calc_min_max_scales().
6164 (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
6165 if only a single point is selected.
6166
6167 * Doc/manual/images/1_2_legend_close.png,
6168 Doc/manual/images/1_2_legend_dock.png,
6169 Doc/manual/images/1_2_mainwindow.png,
6170 Doc/manual/images/1_2_mainwindow.ps,
6171 Doc/manual/images/1_2_mainwindow.sk,
6172 Doc/manual/images/3_2_fullextent.png,
6173 Doc/manual/images/3_2_fulllayerextent.png,
6174 Doc/manual/images/3_2_fullshapeextent.png,
6175 Doc/manual/images/3_2_pan.png,
6176 Doc/manual/images/3_2_zoomin.png,
6177 Doc/manual/images/3_2_zoomout.png,
6178 Doc/manual/images/3_3_identify.png,
6179 Doc/manual/images/3_3_label.png,
6180 Doc/manual/images/3_5_invisible.png,
6181 Doc/manual/images/3_5_movedown.png,
6182 Doc/manual/images/3_5_moveup.png,
6183 Doc/manual/images/3_5_props.png,
6184 Doc/manual/images/3_5_tobottom.png,
6185 Doc/manual/images/3_5_totop.png,
6186 Doc/manual/images/3_5_visible.png: New. Images for the documentation.
6187
6188 2003-07-18 Bernhard Herzog <[email protected]>
6189
6190 * Thuban/UI/messages.py (MAP_REPLACED): New message.
6191
6192 * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
6193 after the new map has been assigned
6194
6195 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
6196 Delegate MAP_REPLACED to the canvas too
6197 (MainWindow.prepare_new_session): Removed. Thanks to the new
6198 MAP_REPLACED message it's no longer needed
6199 (MainWindow.OpenSession, MainWindow.NewSession):
6200 prepare_new_session has been removed.
6201
6202 * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
6203 MAP_REPLACED so that we can close the dialog if a new map is set.
6204 (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
6205 (Classifier.map_replaced): Handle MAP_REPLACED by closing the
6206 dialog
6207
6208 * test/test_viewport.py (SimpleViewPortTest)
6209 (SimpleViewPortTest.test_default_size): Add doc-strings
6210 (ViewPortTest.setUp): Bind map to self.map so we can use it in
6211 tests. Subscribe to MAP_REPLACED messages too.
6212 (ViewPortTest.tearDown): No need to explicitly unsubscribe
6213 (ViewPortTest.test_set_map): New test for the SetMap method.
6214
6215 2003-07-18 Bernhard Herzog <[email protected]>
6216
6217 * test/test_viewport.py (SimpleViewPortTest.test_default_size):
6218 Move this test from ViewPortTest.setUp to this new separate test
6219 case. setUp is not the place for the actual tests.
6220 (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
6221 more of the test from setUp to the new test test_inital_settings.
6222 (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
6223 (ViewPortTest.test_proj_conv): Split test_proj_conv into
6224 test_win_to_proj and test_proj_to_win and make the tests easier to
6225 understand
6226 (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
6227 (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
6228 (ViewPortTest.test_unprojected_rect_around_point)
6229 (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
6230 Reformat to increase readability.
6231
6232 2003-07-18 Bernhard Herzog <[email protected]>
6233
6234 * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
6235
6236 2003-07-18 Bernhard Herzog <[email protected]>
6237
6238 * test/runtests.py: The test suite can now be run without an X
6239 connection. To make sure this remains true, remove the DISPLAY
6240 environment variable so that an error occurs if the wxGTK is
6241 imported accidentally
6242
6243 2003-07-18 Bernhard Herzog <[email protected]>
6244
6245 * Thuban/UI/viewport.py: Remove unused imports
6246
6247 * Thuban/UI/view.py: Remove unused imports
6248
6249 2003-07-18 Bernhard Herzog <[email protected]>
6250
6251 * test/test_export.py Remove unused imports. The OutputTransform
6252 function is now in viewport.py and is called output_transform
6253 (TestScalebar.test_output_transform)
6254 (TestScalebar.test_OutputTransform): Renamed to
6255 test_output_transform and updated to use output_transform instead
6256 of OutputTransform
6257
6258 * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
6259 renamed.
6260 (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
6261 renamed to output_transform
6262
6263 * Thuban/UI/viewport.py (OutputTransform, output_transform):
6264 Rename to output_transform
6265
6266 2003-07-18 Bernhard Herzog <[email protected]>
6267
6268 * Thuban/Model/layer.py (Layer.__init__): Rename
6269 classificationField to classificatin_column and init it here so
6270 that it can be used in SetClassificationColumn
6271 (Layer.GetClassificationColumn, Layer.GetClassificationField):
6272 Rename to GetClassificationColumn.
6273 (Layer.SetClassificationColumn, Layer.SetClassificationField):
6274 Rename to SetClassificationColumn and issue a LAYER_CHANGED
6275 message if the column changes.
6276 (Layer._classification_changed, Layer.ClassChanged): Rename to
6277 _classification_changed. Update the callers.
6278 (Layer.SetShapeStore): Further field->column renames.
6279
6280 * Thuban/Model/load.py (SessionLoader.start_classification)
6281 (SessionLoader.start_clpoint): Updates because of
6282 field->column method name changes in the Layer class
6283
6284 * Thuban/Model/save.py (SessionSaver.write_classification): Updates
6285 because of field->column method name changes in the Layer class
6286
6287 * Thuban/UI/classifier.py (Classifier.__init__)
6288 (Classifier._OnTry, Classifier._OnRevert): Updates because of
6289 field->column method name changes in the Layer class
6290
6291 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
6292 because of field->column method name changes in the Layer class
6293
6294 * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
6295 of field->column method name changes in the Layer class
6296
6297 * test/test_save.py (SaveSessionTest.testClassifiedLayer)
6298 (SaveSessionTest.testClassifiedLayer): Update because of
6299 field->column method name changes in the Layer class
6300
6301 * test/test_layer.py (SetShapeStoreTests.setUp)
6302 (SetShapeStoreTests.test_sanity): Update because of field->column
6303 method name changes in the Layer class
6304 (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
6305 (TestLayerModification.test_sanity)
6306 (TestLayerModification.test_initial_settings): remove unsued code
6307 and rename to test_sanity.
6308 (TestLayerModification.test_set_classification): New test for
6309 SetClassification and SetClassificationField.
6310
6311 2003-07-18 Bernhard Herzog <[email protected]>
6312
6313 * test/test_classgen.py (TestFixedRamp.test): Extend test to check
6314 the non-fixed values as well. The old test would have accepted a
6315 fixed ramp that only returnes the fixed properties
6316
6317 2003-07-17 Jonathan Coles <[email protected]>
6318
6319 * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
6320 shots for the manual. The XCF file is the source image and
6321 has additional layers to support changes.
6322
6323 * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
6324
6325 * Thuban/UI/classifier.py (Classifier.__BuildClassification):
6326 Return both the new class and the field name.
6327
6328 * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
6329 fit the map to the window as this changes any zoom level that
6330 the user may have set.
6331
6332 2003-07-16 Jonathan Coles <[email protected]>
6333
6334 * Thuban/Model/classgen.py (generate_singletons,
6335 generate_uniform_distribution, generate_quantiles): Remove
6336 fixes parameter, but maintain the same functionality by having
6337 the calling function pass a FixedRamp object for the ramp.
6338 (FixedRamp): New. Adapts a ramp to have fixed property values.
6339
6340 * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
6341 (Classification): Inherit from Publisher.
6342 (Classification.__init__): Remove the layer parameter.
6343 Classifications no longer need to have a parent layer.
6344 (Classification.GetField, Classification.GetFieldType,
6345 Classification.SetFieldInfo): Removed. The field name is stored
6346 in the layer, and the type can be retreived by calling
6347 Layer.GetFieldType().
6348 (Classification._set_layer, Classification.GetLayer): Removed.
6349 Classifications no longer have a parent layer.
6350
6351 * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
6352 classification.
6353 (Layer.SetShapeStore): Reset the classification first while
6354 we still have the old shape store to work with.
6355 (Layer.GetClassificationField, Layer.SetClassificationField):
6356 New. Method for getting/setting the field to classify on.
6357 (Layer.SetClassification): Simplified now that the layer
6358 simply has to hold a reference to the classification and not
6359 tell the classification who owns it.
6360 Fixes RTbug #2023.
6361
6362 * Thuban/Model/load.py (SessionLoader.start_classification):
6363 Set the field name on the layer, not the classification.
6364
6365 * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
6366 classification is modified.
6367
6368 * Thuban/Model/save.py (SessionSaver.write_classification):
6369 Get the field name and type from the layer.
6370
6371 * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
6372 parameter records to rows and add docstring. Fixes RTbug #1997.
6373
6374 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
6375 ramp when we need to fix certain values of a ramp rather than
6376 using the old fixes parameter. Fixes RTbug #2024.
6377
6378 * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
6379 parameter.
6380 (ClassTable.Reset): Add fieldType parameter and use it, rather
6381 than asking the classification.
6382 (Classifier.__init__): Remember the original class's field
6383 and ask the layer for the field type, rather than the classification.
6384 (Classifier.__SetGridTable): Retrieve the field and field type
6385 for the table because they are not in the classification.
6386 (Classifier._OnTry, Classifier._OnRevert): Set the classification
6387 field on the layer in addition to the classification itself.
6388
6389 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
6390 classification field from layer.
6391
6392 * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
6393 classification field from layer. Split up tests and remove
6394 *-imports. Fixes RTbug #1992.
6395
6396 * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
6397
6398 * test/test_classification.py
6399 (TestClassification.test_classification): Remove tests for methods
6400 that no longer exist.
6401
6402 * test/test_layer.py (SetShapeStoreTests.setUp): Classification
6403 __init__ no longer has a field parameter, use SetClassificationField.
6404 (SetShapeStoreTests.test_sanity): Use layer object to get class
6405 field info.
6406
6407 * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
6408 SetClassificationField on layer to set class field info.
6409
6410 * test/test_viewport.py: Renamed from test/test_view.py.
6411
6412 2003-07-16 Jan-Oliver Wagner <[email protected]>
6413
6414 * Doc/manual/thuban-manual.xml: Added authors and an initial
6415 coarse structure.
6416
6417 2003-07-15 Bernhard Herzog <[email protected]>
6418
6419 * test/support.py (FloatComparisonMixin): This is a mix-in class
6420 and therefore should not be derived from any other class.
6421
6422 * test/test_range.py (RangeTest): FloatComparisonMixin is a
6423 mix-in, so derive from TestCase as well.
6424
6425 2003-07-15 Bernhard Herzog <[email protected]>
6426
6427 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
6428 draw_func handling a bit to remove one layer of indirection. This
6429 makes the renderer about 10% faster in the non-classifying case
6430 and the code a bit cleaner
6431 (MapRenderer.draw_point_shape): Add the pen and brush parameters
6432 and set them in the dc. Now the draw_point_shape method and
6433 wxproj's draw_polygon_shape function have basically the same
6434 signature so that both can be directly used as draw_func
6435
6436 2003-07-15 Bernhard Herzog <[email protected]>
6437
6438 * Thuban/Model/save.py (SessionSaver.write_classification): Encode
6439 string values (in addition to the labels) as UTF 8
6440
6441 * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
6442 values if the field type is string
6443
6444 * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
6445 saving a session with non-ascii string classification values.
6446
6447 * test/test_load.py (TestClassification.file_contents)
6448 (TestClassification.test): Check for non-ascii values in string
6449 classifications
6450
6451 2003-07-14 Jonathan Coles <[email protected]>
6452
6453 * test/test_view.py: New. Tests for ViewPort.
6454
6455 2003-07-14 Frank Koormann <[email protected]>
6456
6457 * Thuban/Model/load.py (SessionLoader.start_map): Encode map
6458 title to latin1. Fixes https://intevation.de/rt/webrt?serial_num=2013
6459
6460 * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
6461 unicode strings from session file: session title, map title and
6462 projection name.
6463
6464 2003-07-10 Jonathan Coles <[email protected]>
6465
6466 * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
6467 drag_stop, not drag_move when the mouse is released.
6468
6469 2003-07-10 Jonathan Coles <[email protected]>
6470
6471 The most important part of this is the seperation of view.py into
6472 two pieces. viewport.py now has a class called ViewPort which
6473 contains all the non-wx parts of view.py and can therefore be
6474 tested. view.py contains only the wx-specific parts and is fairly
6475 simple.
6476
6477 * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
6478 RTTbug #1992.
6479 * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
6480 RTTbug #1992.
6481
6482 * Thuban/Model/classgen.py (generate_singletons,
6483 generate_uniform_distribution, generate_quantiles):
6484 Added 'fixes' parameter so that property attributes can
6485 be held constant over the generated classification groups.
6486 (CustomRamp.GetProperties): Remove unused variables.
6487
6488 * Thuban/Model/map.py (Map.SetProjection): Send the old
6489 projection as an argument to listeners of the MAP_PROJECTION_CHANGED
6490 event.
6491
6492 * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
6493 parameter which is a list of records that restricts which
6494 records are saved. Fixes RTbug #1997.
6495
6496 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
6497 Port exception dialog from GREAT-ER. Fixes RTbug #1993.
6498
6499 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
6500 to allow the user to fix line color/width on generated groups.
6501 (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
6502 functions to optionally fix group properties.
6503
6504 * Thuban/UI/main.py (main): Set exception hook to the
6505 ShowExceptionDialog. Fixes RTbug #1993.
6506
6507 * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
6508 the table window when it is selectd to be shown.
6509
6510 * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
6511 Export Selection button and move the export buttons underneath
6512 the table.
6513 (QueryTableFrame.UpdateStatusText): Added event argument so
6514 that it can respond to grid selection events. The status text
6515 is now updated even when the table is not associated with a
6516 layer as was previously assumed.
6517 (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
6518 UpdateStatusText responds to these events.
6519 (QueryTableFrame.OnSaveAs): Renamed to doExport.
6520 (QueryTableFrame.doExport): Helper function that saves the
6521 entire table, or selected rows, to a file.
6522 (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
6523 Respond to export button events and call doExport.
6524
6525 * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
6526 the function doesn't return NULL without first setting a Python
6527 Error.
6528
6529 * test/runtests.py (main): Only print "Unknown option" for
6530 unsupported options.
6531
6532 * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
6533 optional epsilon argument to specify floating point accuracy.
6534 (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
6535 for each item test.
6536
6537 * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
6538 tests for saving selected records.
6539
6540 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
6541 tests for saving selected records.
6542
6543 * test/test_map.py (TestMapWithContents.test_set_projection):
6544 MAP_PROJECTION_CHANGED events send the old projection.
6545
6546 * test/test_session.py
6547 (TestSessionWithContent.test_forward_map_projection):
6548 MAP_PROJECTION_CHANGED events send the old projection.
6549
6550 * test/test_table.py (TableTest): Update tests to use non-deprecated
6551 functions.
6552
6553 2003-07-08 Bernhard Herzog <[email protected]>
6554
6555 * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
6556 constants in the column objects are the standard ones defined in
6557 the table module.
6558
6559 * test/test_transientdb.py
6560 (TestTransientTable.test_transienttable_to_dbf): New. Test whether
6561 exporting transient tables as DBF works. This should catch the bug
6562 just fixed in TransientTableBase.Width.
6563
6564 2003-07-08 Bernhard Herzog <[email protected]>
6565
6566 * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
6567 interpolated colors correctly.
6568
6569 * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
6570 New. Test case for the fix in classgen.py
6571
6572 2003-07-08 Bernhard Herzog <[email protected]>
6573
6574 * test/runtests.py (main): Make the default output less verbose
6575 and add a verbosity option (-v) to get the old output
6576
6577 2003-07-08 Bernhard Herzog <[email protected]>
6578
6579 * Resources/XML/thuban-0.9.dtd: New. This will become the DTD for
6580 0.9.
6581
6582 * Thuban/Model/transientdb.py (TransientJoinedTable.JoinType):
6583 New. Return the join type
6584
6585 * Thuban/Model/save.py (SessionSaver.write_session): Use new 0.9
6586 DTD
6587 (SessionSaver.write_data_containers): Save the join type for
6588 joined tables
6589
6590 * Thuban/Model/load.py (SessionLoader.__init__): Add the new 0.9
6591 namespace
6592 (SessionLoader.start_jointable): Handle the jointype attribute
6593
6594 * test/test_load_0_8.py: New. Effectively a copy of test_load.py
6595 as of Thuban 0.8. These are now tests to determine whether Thuban
6596 can still read files generated by Thuban 0.8
6597
6598 * test/test_load.py (LoadSessionTest.dtd)
6599 (TestSingleLayer.file_contents)
6600 (TestLayerVisibility.file_contents, TestLabels.file_contents)
6601 (TestLayerProjection.file_contents)
6602 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
6603 (TestJoinedTable.file_contents)
6604 (TestLoadError.file_contents): Update for new DTD
6605 (TestJoinedTable.file_contents, TestJoinedTable.setUp): Add test
6606 for new join type attribute
6607
6608 * test/test_save.py (SaveSessionTest.dtd)
6609 (SaveSessionTest.testEmptySession)
6610 (SaveSessionTest.testSingleLayer)
6611 (SaveSessionTest.testLayerProjection)
6612 (SaveSessionTest.testRasterLayer)
6613 (SaveSessionTest.testClassifiedLayer)
6614 (SaveSessionTest.test_dbf_table)
6615 (SaveSessionTest.test_joined_table): Update for new DTD
6616 (SaveSessionTest.test_joined_table): Add test for new join type
6617 attribute
6618
6619 2003-07-04 Bernhard Herzog <[email protected]>
6620
6621 * Thuban/Model/table.py (_find_dbf_column_names): New. Helper
6622 function for table_to_dbf
6623 (table_to_dbf): Deal with names longer than the 10 character limit
6624
6625 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
6626 doc-string
6627 (TestTableToDBF.test_table_to_dbf_long_col_names): New test for
6628 long column names
6629
6630 2003-07-03 Bernhard Herzog <[email protected]>
6631
6632 * Doc/manual/thuban-manual.xml: Fix the CVS Revision Tag syntax
6633
6634 2003-07-03 Bernhard Herzog <[email protected]>
6635
6636 * Doc/manual/thuban-manual.xml, Doc/manual/README: New. Skeleton
6637 for the Thuban manual and README with some basic information about
6638 the manual
6639
6640 2003-07-03 Bernhard Herzog <[email protected]>
6641
6642 * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
6643 Update doc-string
6644 (TransientJoinedTable.create): Do not modify the column objects of
6645 the input tables in place and copy all columns of the input tables
6646 into the joined table after all.
6647
6648 * test/test_transientdb.py
6649 (TestTransientTable.test_transient_joined_table_same_column_name):
6650 Update to reflect the new behavior
6651 (TestTransientTable.test_transient_joined_table_with_equal_column_names):
6652 Update to reflect the new behavior
6653 (TestTransientTable.test_transient_joined_table_name_collisions_dont_modify_in_place):
6654 New test case for a bug which modified the column objects in place
6655
6656 2003-07-02 Jonathan Coles <[email protected]>
6657
6658 * Thuban/Model/classgen.py (generate_singletons,
6659 generate_uniform_distribution, generate_quantiles,
6660 GenQuantiles0): Make sure maxValue isn't less than
6661 one, otherwise we could divide by zero.
6662
6663 * test/test_classgen.py (ClassGenTest.doClassRangeTest,
6664 ClassGenTest.doClassSingleTest): Call doBoundsTest to
6665 check the end classification groups against the
6666 proper property values.
6667 (ClassGenTest.doBoundsTest): New. Checks the first and
6668 last classification groups to make sure their properties
6669 are the correct upper and lower bounds for a color ramp.
6670
6671 2003-07-02 Jonathan Coles <[email protected]>
6672
6673 * Thuban/Model/classgen.py (generate_singletons,
6674 generate_uniform_distribution, generate_quantiles,
6675 GenQuantiles0): The denominator was one to high when
6676 calculating the index for the ramp causing the index
6677 to never to reach one.
6678
6679 2003-07-02 Jonathan Coles <[email protected]>
6680
6681 Changed the singature of ClassGroupRange.__init__ and
6682 ClassGroupRange.SetRange() so that the min/max values are
6683 passed as a tuple. This makes a better calling scheme for
6684 when a Range object is passed instead.
6685
6686 * Thuban/Model/classgen.py: Fixed parameters to
6687 ClassGroupRange constructor.
6688
6689 * Thuban/Model/classification.py (ClassGroupRange.__init__):
6690 Consolidate the min/max parameters into a single _range which
6691 can either be a tuple or a Range object.
6692 (ClassGroupRange.SetRange): Consolidate the min/max parameters
6693 into a single _range which can either be a tuple or a Range object.
6694
6695 * Thuban/Model/load.py (SessionLoader.start_clrange): Fix
6696 call to ClassGroupRange constructor to use a tuple.
6697
6698 * Thuban/Model/layer.py (Layer.SetClassification): Switch
6699 the classification instance variable to the new class
6700 before calling _set_layer otherwise subscribers to a
6701 LAYER_CHANGED event will not see any difference.
6702
6703 * test/test_classification.py: Fix tests of ClassGroupRange
6704 so that they use the new signature.
6705
6706 * test/test_load.py: Fix use of ClassGroupRange so that it
6707 uses the new signature.
6708
6709 * test/test_load_0_2.py: Fix use of ClassGroupRange so that it
6710 uses the new signature.
6711
6712 * test/test_save.py: Fix use of ClassGroupRange so that it
6713 uses the new signature.
6714
6715
6716 2003-07-01 Jonathan Coles <[email protected]>
6717
6718 * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.
6719 Import used objects/class from color.
6720 (generate_singletons): We don't
6721 need the numGroups parameter anymore because we are using
6722 the new ramps with GetProperties().
6723 (generate_uniform_distribution): Use new ramp method
6724 GetProperties().
6725 (generate_quantiles, GenQuantiles0): Use new ramp method
6726 GetProperties().
6727 (CustomRamp.SetNumGroups): Removed. The ramps now map
6728 a value from 0 to 1 to class properties so the number
6729 of groups is not needed ahead of time.
6730 (CustomRamp.next): Removed. CustomRamp does not support
6731 interation anymore.
6732 (CustomRamp.GetProperties): Returns a ClassGroupProperties
6733 object based on the index value from 0 to 1 that is
6734 passed to it.
6735 (GreyRamp, RedRamp, GreenRamp, BlueRamp, GreenToRedRamp):
6736 Made into instances of Monochromatic class instread of
6737 deriving from it.
6738 (HotToCold.SetNumGroups): Removed. See CustomRamp.
6739 (HotToCold.next): Removed. See CustomRamp.
6740
6741 * Thuban/Model/classification.py: Fixes RTbug #1973, 1971.
6742 (Classification.SetField, Classification.SetFieldType):
6743 Replaced with SetFieldInfo.
6744 (Classification.SetFieldInfo): New. Does a better job of
6745 what SetField and SetFieldType used to do by combining
6746 their function since they should really always be done
6747 at the same time.
6748 (Classification.SetLayer): Renamed to _set_layer.
6749 (Classification._set_layer): Should only be called from
6750 Layer's SetClassification. This does not cause a recursive
6751 call as SetLayer did because we know that Layer knows about
6752 the classification.
6753
6754 * Thuban/Model/color.py: Fixes RTbug #1971.
6755 (_Transparent): Renamed from Transparent so it doesn't
6756 conflict with the module variable.
6757 (Transparent, Black): Renamed from Color.Transparent,
6758 Color.Black so they are not class variables.
6759
6760 * Thuban/Model/layer.py: Fixes RTbug #1971, 1973.
6761 (Layer.Destroy): We don't need to call SetClassification
6762 anymore to clear out the back reference in the classifcation
6763 to the layer. It's better to set it to None using _set_layer,
6764 and we won't be creating another clas object too.
6765 (Layer.SetClassification): Classification._set_layer is not
6766 recursive so remove all the locking variables. Also clean
6767 up the code so that it remains unchanged if something fails.
6768
6769 * Thuban/Model/load.py: Fixes RTbug #1971.
6770 (SessionLoader.start_classification): Call
6771 Classification.SetFieldInfo().
6772
6773 * Thuban/Model/save.py: Removed import of Color which wasn't
6774 being used.
6775
6776 * Thuban/UI/classgen.py: Fixes RTbug #1972.
6777 (ClassGenDialog.__init__): Color ramps are now instances
6778 already so we don't need to create any new objects.
6779 (ClassGenDialog.OnOK): Check for numGroups is no longer
6780 necessary because we never use it.
6781
6782 * Thuban/UI/classifier.py: Fixes RTbug #1971.
6783 (Classifier.__BuildClassification, Classifier.__SetGridTable):
6784 Call Classification.SetFieldInfo() instead of SetFieldType.
6785
6786 * Thuban/UI/renderer.py: Fixes RTbug #1971.
6787
6788 * Thuban/UI/view.py: Fixes RTbug #1974, 1971.
6789 (MapCanvas.__init__): Subscribe to the idle time event. Set
6790 background color to white.
6791 (MapCanvas.OnPaint): Set a flag indicating that we should
6792 render the map during idle time. If we already have a bitmap
6793 just draw it now.
6794 (MapCanvas.OnIdle): New. Render the map only during idle time.
6795 This also fixes a problem with the busy cursor under gtk.
6796
6797 * test/test_classgen.py (ClassGenTest.test_generate_singletons):
6798 Fix calls to generate_singletons because the signature changed.
6799
6800 * test/test_classification.py: Fix color references and
6801 change calls to Classification.[SetField|SetFieldType] to
6802 SetFieldInfo.
6803
6804 * test/test_load.py: Fix color references.
6805
6806 * test/test_load_0_2.py: Fix color references.
6807
6808 * test/test_save.py (SaveSessionTest.testClassifiedLayer):
6809 Change calls to Classification.[SetField|SetFieldType] to
6810 SetFieldInfo.
6811
6812 2003-07-01 Frank Koormann <[email protected]>
6813
6814 MERGE from the greater-ms3 branch.
6815
6816 * test/test_transientdb.py
6817 (TestTransientTable.test_transient_joined_table_with_equal_column_names):
6818 New. Test join of two tables with partly equal column names.
6819
6820 * Thuban/Model/transientdb.py (TransientJoinedTable.create):
6821 If duplicates in left and right tables column names are found,
6822 append '_' (underscores) to the name until it is unique.
6823 Create always new internal names for the resulting table and reference
6824 columns in the join statement with <table>.<column>
6825
6826 2003-07-01 Bernhard Herzog <[email protected]>
6827
6828 * test/test_transientdb.py
6829 (TestTransientTable.test_transient_joined_table_same_column_name):
6830 New. Test whether joining on columns with the same names in both
6831 tables works.
6832
6833 * Thuban/Model/transientdb.py (TransientJoinedTable.create): Make
6834 sure to use the right internal names even when joining on field
6835 with the same names in both tables. Also, detect duplicate names
6836 in the joined table correctly.
6837
6838 2003-07-01 Frank Koormann <[email protected]>
6839
6840 * Thuban/UI/renderer.py (ExportRenderer.render_legend):
6841 Reverse List of layers to render in same order as in desktop legend.
6842
6843 2003-06-30 Jonathan Coles <[email protected]>
6844
6845 * Thuban/version.py (make_tuple): Takes a version string
6846 and splits it into a tuple of at most three integers.
6847 Used make_tuple() to make tuple versions of the version
6848 numbers.
6849
6850 * Thuban/UI/about.py: Add Thuban email addresses.
6851
6852 2003-06-30 Jonathan Coles <[email protected]>
6853
6854 * Thuban/version.py: SQLite/PySQLite version dependencies
6855 were too high.
6856
6857 2003-06-30 Jonathan Coles <[email protected]>
6858
6859 * Thuban/version.py: Update version to 0.8.1
6860
6861 * MANIFEST.in: Added Projections so that default.proj is
6862 included.
6863
6864 2003-06-26 Jonathan Coles <[email protected]>
6865
6866 New About box with lots more information including library
6867 versions and credits. More/better version checking before
6868 Thuban starts.
6869
6870 * Thuban/UI/about.py: New. New About box that displays
6871 library version information and credits.
6872
6873 * Thuban/version.py: Added new 'versions' dictionary which
6874 contains the verions of various libraries which are checked
6875 when the module loads.
6876 (verify_versions): Check all version numbers and returns
6877 a list of errors.
6878
6879 * Thuban/UI/classifier.py (Classifier.__EnableButtons):
6880 Reset the status of the buttons as the situation warrants,
6881 but in a better more reliable way by not relying on the
6882 current status to determine what needs to change.
6883
6884 * Thuban/UI/main.py (wxCHECK_VERSION): Removed. Not needed.
6885 (verify_versions): Remove most of the code since it is
6886 now in Thuban.version.verify_versions.o
6887
6888 * Thuban/UI/mainwindow.py (MainWindow.About): Call new
6889 About box in Thuban.UI.about.
6890
6891 * extensions/thuban/gdalwarp.cpp (get_gdal_version): New.
6892 Returns the version of gdal library being used as a string.
6893
6894 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
6895 Removed.
6896 (get_proj_version): Return the version of PROJ that the file
6897 was compiled with.
6898 (get_gtk_version): Return th version of GTK that the file
6899 was compiled with.
6900
6901 2003-06-25 Jonathan Coles <[email protected]>
6902
6903 * Thuban/UI/classifier.py (Classifier.EditSymbol): The parent
6904 of the SelectPropertiesDialog should be self so the window
6905 appears on top.
6906 (ClassGroupPropertiesCtrl.DoEdit): The parent
6907 of the SelectPropertiesDialog should be self so the window
6908 appears on top.
6909
6910 * Thuban/UI/resource.py: Cleaned up how we determine file
6911 extensions.
6912 (GetImageResource): Return an wxImage from our Resources.
6913
6914 2003-06-24 Jonathan Coles <[email protected]>
6915
6916 * Thuban/UI/renderer.py (ExportRenderer.render_legend):
6917 Check that a layer has a classification before trying
6918 to get it. Raster layers don't have classifications.
6919
6920 2003-06-23 Jonathan Coles <[email protected]>
6921
6922 * setup.py: Add Resources/XML to resource list.
6923
6924 2003-06-23 Jonathan Coles <[email protected]>
6925
6926 * setup.cfg: Fix copyright dates
6927
6928 2003-06-23 Jonathan Coles <[email protected]>
6929
6930 * MANIFEST.in: Update with Resources/XML
6931
6932 * setup.py: Don't include Locale resources yet as we don't
6933 have any and it causes problems building the distribution
6934 for Windows. Update version to 0.8.0.
6935
6936 * Doc/thuban.dtd: Removed since it is now in Resources/XML.
6937
6938 * Thuban/UI/mainwindow.py: Add blank line at the end because
6939 file was not being read correctly building the Windows
6940 distribution.
6941
6942 2003-06-23 Jonathan Coles <[email protected]>
6943
6944 * Thuban/UI/mainwindow.py (MainWindow.About): Fix text.
6945
6946 * Thuban/version.py: Temporarily update longversion for
6947 the 0.8 release so that it doesn't have the cvs revision.
6948
6949 2003-06-23 Jonathan Coles <[email protected]>
6950
6951 * Thuban/UI/common.py (ThubanBeginBusyCursor): Call wxSafeYield
6952 to make sure that we don't create reentrant possibilities with
6953 wxYield.
6954
6955 * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxBeginBusyCursor()
6956 directly to avoid the wxSafeYield() call which generates an
6957 OnPaint event causing infinite recursion. Don't try to catch
6958 exception anymore. This was for before there were limits on map
6959 scaling.
6960
6961 2003-06-23 Bernhard Herzog <[email protected]>
6962
6963 Bug fix for RT #1961:
6964
6965 * Thuban/Model/load.py (SessionLoader.start_derivedshapesource):
6966 Register DerivedShapestores with the session
6967
6968 * Thuban/Model/session.py (Session.Tables): Make sure each table
6969 is only listed once.
6970
6971 * test/test_load.py (TestJoinedTable.test): Add check_format call.
6972 Update file contents to match the one written out.
6973
6974 2003-06-20 Bernhard Herzog <[email protected]>
6975
6976 * test/xmlsupport.py (SaxEventLister.startElementNS)
6977 (SaxEventLister.endElementNS): Do not include the qname. Python
6978 2.2.1 and 2.2.2 and 2.2.3 differ in this regard. In 2.2.1 qname it
6979 is (presumably incorrectly) None, whereas it's a string with the
6980 element name in the later versions.
6981
6982 * test/test_xmlsupport.py (TestEventList.test_even_list_simple)
6983 (TestEventList.test_even_list_namespace): Update tests to reflect
6984 the new behaviour
6985 (TestEventList.test_even_list_id_normalization): Fix doc-string
6986
6987 2003-06-20 Jonathan Coles <[email protected]>
6988
6989 * Thuban/Model/layer.py (BaseLayer.HasShapes): New. Overridden
6990 by deriving classes to determine if that layer supports shapes.
6991 (Layer): Override HasShapes and return true.
6992
6993 * Thuban/UI/classgen.py: Use Thuban[Begin|End]BusyCursor()
6994 instead of a direct call to wx[Begin|End]CusyCursor().
6995 (GenUniquePanel._OnRetrieve): Set busy cursor while retrieving
6996 table data.
6997
6998 * Thuban/UI/common.py (ThubanBeginBusyCursor, ThubanEndBusyCursor):
6999 New. Wrappers around the wxWindows functions that allow us to
7000 make additional calls such as wxYield which gives the native
7001 system a chance to update the cursor correctly.
7002
7003 * Thuban/UI/tableview.py: Use Thuban[Begin|End]BusyCursor()
7004 instead of a direct call to wx[Begin|End]CusyCursor().
7005
7006 * Thuban/UI/view.py: Use Thuban[Begin|End]BusyCursor()
7007 instead of a direct call to wx[Begin|End]CusyCursor().
7008 (MapCanvas.find_shape_at): Check if the current search layer
7009 support shapes, otherwise go on to the next layer.
7010
7011 * test/test_layer.py: Add tests in each type of layer for
7012 HasClassification() and HasShapes()
7013
7014 2003-06-20 Jonathan Coles <[email protected]>
7015
7016 * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after
7017 turning on the busy cursor to allow the system to change the
7018 cursor before we begin painting. This fixes a problem that
7019 was occuring only under GTK. Fixes RTbug #1840.
7020
7021 2003-06-20 Bernhard Herzog <[email protected]>
7022
7023 * Resources/XML/thuban-0.8.dtd: New DTD for the new file format
7024 version.
7025
7026 * Thuban/Model/save.py (sort_data_stores): New. Make topological
7027 sort of the data sources so they can be written with sources that
7028 data sources that depend on other data sources come after the
7029 sources they depend on.
7030 (SessionSaver.__init__): Add idmap instance variable to map from
7031 objects to the ids used in the file.
7032 (SessionSaver.get_id, SessionSaver.define_id)
7033 (SessionSaver.has_id): New. Methods to manage the idmap
7034 (SessionSaver.write): Use thuban-0.8.dtd
7035 (SessionSaver.write_session): Add a namespace on the session and
7036 write out the data sources before the maps.
7037 (SessionSaver.write_data_containers): New. Write the data
7038 containers.
7039 (SessionSaver.write_layer): Layer elements now refer to a
7040 shapestore and don't contain filenames anymore.
7041
7042 * Thuban/Model/load.py (LoadError): Exception class to raise when
7043 errors in the files are discovered
7044 (SessionLoader.__init__): Define dispatchers for elements with a
7045 thuban-0.8 namespace too.
7046 (SessionLoader.check_attrs): New helper method to check and
7047 convert attributes
7048 (AttrDesc): New. Helper class for SessionLoader.check_attrs
7049 (SessionLoader.start_fileshapesource)
7050 (SessionLoader.start_derivedshapesource)
7051 (SessionLoader.start_filetable, SessionLoader.start_jointable):
7052 Handlers for the new elements in the new fileformat
7053 (SessionLoader.start_layer): Handle the shapestore attribute in
7054 addition to filename.
7055 (SessionLoader.start_table, SessionLoader.end_table): Removed.
7056 They were never used in the old formats and aren't needed for the
7057 new.
7058
7059 * Thuban/Model/session.py (Session.DataContainers): New method to
7060 return all "data containers", i.e. shapestores and tables
7061
7062 * test/xmlsupport.py (SaxEventLister.__init__)
7063 (SaxEventLister.startElementNS, sax_eventlist): Add support to
7064 normalize IDs.
7065
7066 * test/test_xmlsupport.py
7067 (TestEventList.test_even_list_id_normalization): New test case for
7068 id normalization
7069
7070 * test/test_load.py (LoadSessionTest.check_format): Use ID
7071 normalization
7072 (LoadSessionTest.thubanids, LoadSessionTest.thubanidrefs): New
7073 class atrributes used for ID normalization
7074 (TestSingleLayer, TestLayerVisibility, TestLabels.test)
7075 (TestLayerProjection.test, TestRasterLayer.test): Adapt to new
7076 file format
7077 (TestJoinedTable): New test for loading sessions with joined
7078 tables.
7079 (TestLoadError): New. Test whether missing required attributes
7080 cause a LoadError.
7081
7082 * test/test_save.py (SaveSessionTest.thubanids)
7083 (SaveSessionTest.thubanidrefs): New class attributes for ID
7084 normalization in .thuban files.
7085 (SaveSessionTest.compare_xml): Use id-normalization.
7086 (SaveSessionTest.testEmptySession)
7087 (SaveSessionTest.testLayerProjection)
7088 (SaveSessionTest.testRasterLayer)
7089 (SaveSessionTest.testClassifiedLayer): Adapt to new file format.
7090 (SaveSessionTest.testLayerProjection): The filename used was the
7091 same as for testSingleLayer. Use a different one.
7092 (SaveSessionTest.test_dbf_table)
7093 (SaveSessionTest.test_joined_table): New test cases for saving the
7094 new data sources structures.
7095 (TestStoreSort, MockDataStore): Classes to test the sorting of the
7096 data stores for writing.
7097
7098 * test/runtests.py: Add CVS keywords
7099
7100 2003-06-20 Jonathan Coles <[email protected]>
7101
7102 * test/test_session.py
7103 (UnreferencedTablesTests.test_unreferenced_tables_with_joins):
7104 Use the cultural_landmark-point.dbf file for the store so that
7105 the table rows and shape count match.
7106
7107 2003-06-20 Jonathan Coles <[email protected]>
7108
7109 * Thuban/Model/data.py (DerivedShapeStore.__init__): Raise
7110 an exception if the number of shapes is different from the
7111 number of rows in the table. Address RTbug #1933.
7112
7113 * test/test_layer.py (TestLayer.test_derived_store): Add
7114 a test for the new exception in DerivedShapeStore.__init__.
7115
7116 * test/support.py (FloatTestCase): Removed since there is
7117 already FloatComparisonMixin. Fixes RTbug #1954.
7118 (FloatComparisonMixin.assertFloatEqual): Include test for
7119 infinity that was part of FloatTestCase.
7120
7121 * test/test_range.py (RangeTest): Inherit from
7122 support.FloatComparisonMixin now that we don't have
7123 support.FloatTestCase.
7124
7125 2003-06-20 Bernhard Herzog <[email protected]>
7126
7127 * test/test_save.py (SaxEventLister, sax_eventlist): Removed. Use
7128 the implementation in xmlsupport instead.
7129 (SaveSessionTest.compare_xml): sax_eventlist is now in xmlsupport
7130
7131 * test/test_proj.py: Import sax_eventlist from xmlsupport instead
7132 of test_save
7133
7134 2003-06-20 Bernhard Herzog <[email protected]>
7135
7136 * test/test_load.py (LoadSessionTest.check_format): New helper
7137 method to make sure the test files we load might have been written
7138 by the current thuban version.
7139 (ClassificationTest.TestLayers, TestSingleLayer.test)
7140 (TestLayerVisibility.test, TestClassification.test)
7141 (TestLabels.test, TestLayerProjection.test, TestRasterLayer.test):
7142 Add check_format() calls and fix the thuban data to match the data
7143 that would be written by saving the session loaded from it.
7144
7145 * test/xmlsupport.py (SaxEventLister, sax_eventlist): Copies of
7146 the same class and function in test_save.
7147
7148 * test/test_xmlsupport.py (TestEventList): New. test cases for
7149 sax_eventlist
7150
7151 2003-06-20 Bernhard Herzog <[email protected]>
7152
7153 * Resources/XML/thuban.dtd: Add comment about which versions of
7154 Thuban are covered by this DTD
7155 (map): Fix content model for layers and raster layers. There can
7156 be any number or layers and raster layers in any order.
7157
7158 2003-06-20 Jonathan Coles <[email protected]>
7159
7160 This is mainly about fixing RTbug #1949.
7161
7162 * Thuban/Model/classification.py: Remove "from __future__"
7163 import statement since python 2.2 is the earliest supported
7164 version.
7165
7166 * Thuban/Model/proj.py (Projection.GetProjectedUnits): New.
7167 Currently returns PROJ_UNITS_METERS or PROJ_UNITS_DEGREES
7168 depending on the units this projection *forwards* into.
7169
7170 * Thuban/Model/save.py (SessionSaver.write_classification):
7171 Remove unnecessary use of lambdas and nested functions.
7172
7173 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Do scale
7174 adjustment here if the map projection uses degrees.
7175
7176 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Remove
7177 scale adjust code since it is now done before calling
7178 this method. Don't do anything if the map projection
7179 is None.
7180
7181 2003-06-19 Bernhard Herzog <[email protected]>
7182
7183 Move version specific load tests to their own file.
7184
7185 * test/test_load.py: Expand the doc-string to explain a bit how to
7186 handle file format changes.
7187 (TestClassification.test): Update the docstring as this test is
7188 not about Thuban 0.2 anymore.
7189
7190 * test/test_load_0_2.py: New file with the load tests for thuban
7191 files created with Thuban 0.2 and earlier.
7192
7193 2003-06-19 Bernhard Herzog <[email protected]>
7194
7195 Add XML validation to some of the tests. Validation will only be
7196 done if pyRXP is installed (http://reportlab.com/xml/pyrxp.html).
7197 To make the DTD available to the test cases it's moved into
7198 Resources/XML
7199
7200 * Resources/XML/thuban.dtd: New. This is now the real Thuban DTD
7201 for versions up to and including 0.2. Two slight changes: added an
7202 encoding specification and fixed the comment which refered to
7203 GRASS, not Thuban
7204
7205 * test/xmlsupport.py: New support module for tests involving XML.
7206 Currently there's a mix-in class for XML validation.
7207
7208 * test/test_xmlsupport.py: New. Tests for the xmlsupport module
7209
7210 * test/test_save.py (SaveSessionTest): Derive from ValidationTest
7211 so that we can validate the
7212 (SaveSessionTest.testEmptySession)
7213 (SaveSessionTest.testSingleLayer)
7214 (SaveSessionTest.testSingleLayer)
7215 (SaveSessionTest.testLayerProjection)
7216 (SaveSessionTest.testRasterLayer)
7217 (SaveSessionTest.testClassifiedLayer): Validate the generated XML
7218
7219 * test/runtests.py (main): Call print_additional_summary instead
7220 of print_garbage_information
7221
7222 * test/support.py (resource_dir): New function to return the
7223 "Resource" subdirectory
7224 (print_additional_summary): New function to combine several
7225 summary functions
7226 (run_tests): Use print_additional_summary instead of calling
7227 print_garbage_information directly
7228
7229 2003-06-19 Bernhard Herzog <[email protected]>
7230
7231 * Doc/thuban.dtd (classification): Correct the content model of
7232 the classification element.
7233 (projection): Add the "name" attribute
7234
7235 2003-06-19 Frank Koormann <[email protected]>
7236
7237 MERGE from the greater-ms3 branch.
7238
7239 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Apply conversion to
7240 scale if projection is latlong to get better estimate.
7241
7242 Fix problem of hidden properties dialog under windows after double
7243 click on layer tree:
7244 The tree control always gets an Expanded / Collapsed event after
7245 the ItemActivated on double click, which raises the main window again.
7246 We add a second ItemActivated event to the queue, which simply
7247 raises the already displayed window.
7248
7249 * Thuban/UI/legend.py (LegendTree.__init__): Instance variable
7250 raiseProperties initialized to prevent endless loops
7251 (LegendTree._OnItemActivated): Depending on self.raiseProperties
7252 simply raise the properties or open the dialog and issue a second
7253 event.
7254
7255 2003-06-18 Jonathan Coles <[email protected]>
7256
7257 * setup.py: Fix a few problems that occured under Windows.
7258
7259 2003-06-18 Jonathan Coles <[email protected]>
7260
7261 When Thuban loaded the map was redrawn twice because the
7262 legend was being opened after the mainwindow was created
7263 and not during its creation. This meant the map was drawn
7264 initially and then had to be redrawn when the legend
7265 caused the display to change. Now the legend is opened
7266 in the mainwindow constructor which resolves this issue.
7267
7268 Also, although we were checking for the existence of
7269 gdal and gdalwarp modules, the gdalwarp extension was
7270 still being compiled (which may fail if the system doesn't
7271 have gdal installed). the build_ext command to setup.py
7272 now accepts the flags --with-gdal and --without-gdal.
7273 If --without-gdal is specified setup.py will try to
7274 use the gdal parameters specified by gdal-config. Under
7275 windows, those parameters have to be set in setup.py
7276 as with proj4 an wxWindows.
7277
7278 * setup.py: Use a list instead of seperate variables for
7279 extension parameters so we can create a generic function
7280 that runs an appropriate *-config script.
7281 (run_cs_script): Renamed from run_wx_script and modified
7282 to accept a second argument which is a list of lists to
7283 be filled in by the values returned from running the command.
7284 (thuban_build_ext): New. Extends the build_ext command and
7285 provides the options --with-gdal/--without-gdal which then
7286 optionally includes the gdalwarp extension.
7287
7288 * Thuban/Model/resource.py: First check if we can import
7289 the gdalwarp Thuban extension before checking for gdal.
7290 Also added some comments.
7291
7292 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Check if
7293 the map is None which may be the case if none has been loaded
7294 yet.
7295
7296 * Thuban/UI/main.py (main): Remove call to ShowLegend.
7297
7298 * Thuban/UI/mainwindow.py (MainWindow.__init__): Call ShowLegend().
7299
7300 * Thuban/UI/renderer.py: Check for gdal support before importing
7301 gdalwarp.
7302 (MapRenderer.render_map): Only try to optimize if we have gdal
7303 support otherwise nothing will get drawn.
7304
7305 * Thuban/UI/view.py (MapCanvas.FitMapToWindow): This may be called
7306 during startup before a map has been created. Check if map is None
7307 before using it and do nothing if it is.
7308
7309 2003-06-17 Jonathan Coles <[email protected]>
7310
7311 Fix the problem with raster layers under Windows that caused
7312 Thuban to crash. The view should respond to layer projection
7313 changed events to update the display. Changes to a projection
7314 should not cause the map to be set to full extent.
7315
7316 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
7317 current_map_proj to remember the current map projection so that
7318 when the projection changes we know what the previous projection
7319 was.
7320 (MapCanvas.SetMap): Unsubscribe and subscribe to
7321 LAYER_PROJECTION_CHANGED events.
7322 (MapCanvas.projection_changed): Split into two methods that respond
7323 to map and layer projection changes.
7324 (MapCanvas.map_projection_changed): New. Takes the current view and
7325 projects it using the new projection. This does not cause the
7326 map to be redrawn at full extent.
7327 (MapCanvas.layer_projection_changed): New. Cause a redraw which
7328 will draw each layer in its new projection.
7329
7330 * extensions/thuban/bmpdataset.cpp (BMPDataset::Open): Call
7331 VSIFClose() not VSIFCloseL() to close the file. Fixes a crash
7332 under Windows.
7333
7334 * extensions/thuban/gdalwarp.cpp (MFILENAME): Padding should be
7335 to twice sizeof(void*) because there are two digits for each
7336 hex byte.
7337
7338 2003-06-16 Bernhard Herzog <[email protected]>
7339
7340 Update to the layer interface: Direct access to the table,
7341 shapetable, shapefile and filename attributes is now actively
7342 deprecated by issuing deprecation warnings for all places where
7343 this happens.
7344
7345 * Thuban/Model/layer.py (Layer.__getattr__): New. Implement access
7346 to the instance variables table, shapetable, shapefile and
7347 filename via __getattr__ so that we can issue a deprecation
7348 warning.
7349 (Layer.SetShapeStore): Don't set the deprecated instance variables
7350 any more
7351 (Layer.SetShapeStore): Don't use deprecated layer instance
7352 variables
7353 (Layer.Destroy): No need to explicitly remove the instance
7354 variables any more
7355 (Layer.GetFieldType, Layer.Shape): Don't use deprecated layer
7356 instance variables
7357
7358 * Thuban/UI/classgen.py (ClassGenDialog.__init__)
7359 (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve)
7360 (GenQuantilesPanel.GetList, GenQuantilesPanel.OnRetrieve): Don't
7361 use deprecated layer instance variables
7362
7363 * Thuban/UI/classifier.py (Classifier.__init__): Don't use
7364 deprecated layer instance variables
7365
7366 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
7367 (IdentifyGridCtrl.selected_shape): Don't set the deprecated layer
7368 instance variables
7369
7370 * Thuban/UI/tableview.py (LayerTableGrid.select_shapes): Don't use
7371 deprecated layer instance variables
7372
7373 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Don't use
7374 deprecated layer instance variables
7375
7376 * Thuban/Model/save.py (SessionSaver.write_layer): Don't use
7377 deprecated layer instance variables
7378
7379 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer)
7380 (MapRenderer.polygon_render_param): Don't use deprecated layer instance
7381 variables
7382
7383 * test/runtests.py (main): Turn Thuban's deprecation warnings into
7384 errors so that they're cought by the tests
7385
7386 * test/test_load.py (TestSingleLayer.test): Don't use deprecated
7387 layer instance variables
7388
7389 2003-06-16 Jonathan Coles <[email protected]>
7390
7391 Fix a problem under Windows whereby if the user double-clicks on a
7392 layer in the legend that tree item will expand or collapse as well
7393 as open the layer properties dialog. The state of the tree item
7394 should not be affected.
7395
7396 * Thuban/UI/legend.py (LegendTree.__init__): Add instance variable
7397 preventExpandCollapse and subscribe to expanding and collapsing
7398 events.
7399 (LegendTree.OnItemExpandCollapse): New. Responds to expanding and
7400 collapsing events and will veto the event if it has been triggered
7401 by the user double clicking on a layer.
7402 (LegendTree._OnItemActivated): Set preventExpandCollapse to indicate
7403 that an expanding/collapsing event should be vetoed.
7404
7405 2003-06-13 Bernhard Herzog <[email protected]>
7406
7407 * Thuban/UI/classifier.py (Classifier.OnClose)
7408 (Classifier.map_layers_removed)
7409 (Classifier.layer_shapestore_replaced): Unsubscribe the messages
7410 in OnClose and not in map_layers_removed or
7411 layer_shapestore_replaced to make sure it always happens when the
7412 dialog is closed
7413
7414 2003-06-13 Jonathan Coles <[email protected]>
7415
7416 This puts back a fix for Windows where a panel is needed so that
7417 the background of the table view appears correctly.
7418
7419 * Thuban/UI/tableview.py (TableFrame.__init__): Add a panel
7420 object that can be used by derived classes to place any
7421 controls (including the grid) onto.
7422 (QueryTableFrame.__init__): Use the panel as the parent window
7423 for all the controls. Reparent the grid so that the panel is
7424 the parent. Call UpdateStatusText() to correctly initialize
7425 the status bar.
7426
7427 2003-06-13 Jonathan Coles <[email protected]>
7428
7429 * Thuban/UI/dialogs.py (ThubanFrame): New: a class that inherits
7430 from wxFrame (as opposed to wxDialog like the other classes)
7431 but otherwise behaves like the other classes. This is needed
7432 for the TableView which isn't really a dialog and needs to
7433 have a status bar and control buttons.
7434
7435 * Thuban/UI/tableview.py (TableGrid.__init__): Create an
7436 instance variable to keep track of how many rows are selected.
7437 Subscribe once to the the events we are interested in.
7438 (ThubanGrid.OnRangeSelect): Only handle event if event handling
7439 hasn't been turned off.
7440 (ThubanGrid.OnSelectCell): Only handle event if event handling
7441 hasn't been turned off.
7442 (ThubanGrid.ToggleEventListeners): Rather than subscribe None
7443 as an event listener (which changes the event handler stack)
7444 simply set an instance variable to False. This is checked in
7445 the event handlers.
7446 (ThubanGrid.GetNumberSelected): Return the number of currently
7447 selected rows.
7448 (TableFrame): Inherit from ThubanFrame so we can have a
7449 status bar and control buttons.
7450 (QueryTableFrame.__init__): Create a status bar. Fixes RTbug #1942.
7451 Explicitly set which items are selected in the operator choice and
7452 action choice so there is always a valid selection. Fixes RTbug #1941.
7453 Subscribe to grid cell selection events so we can update the
7454 status bar.
7455 (QueryTableFrame.UpdateStatusText): Update the status bar with
7456 how many rows are in the grid, how many columns, and how many
7457 rows are selected.
7458 (QueryTableFrame.OnGridSelectRange, QueryTableFrame.OnGridSelectCell):
7459 Call UpdateStatusText when cells are (de)selected.
7460 (QueryTableFrame.OnQuery): Use the string value in the value
7461 combo if either the selected item index is 0 or if the string
7462 cannot be found in the predefined list (this happens if the
7463 user changes the text). Fixes RTbug #1940.
7464 Only turn off the grid event listeners if there a query comes
7465 back with a none empty list of ids. in the case that the list
7466 is empty this causes a grid.ClearSelection() call to actually
7467 clear the grid selection which causes the selected items in
7468 the map to be deselected. Fixes RTbug #1939.
7469
7470 * test/test_save.py (XMLWriterTest.Encode): Check return values.
7471 Fixes RTbug #1851.
7472
7473 2003-06-13 Bernhard Herzog <[email protected]>
7474
7475 * Thuban/UI/identifyview.py (IdentifyView.__init__): Call
7476 self.selected_shape with the current selection to make sure the
7477 contents of the dialog are up to date when it's shown for the
7478 first time.
7479 The dialog used to work without this by luck. The recent fix to
7480 the connector module 'broke' a 'feature' the identify view was
7481 relying on, i.e that subscribing to a message in response to
7482 receiving a message of that type would mean that the new
7483 subscriber would also be called for the same message.
7484
7485 2003-06-12 Jonathan Coles <[email protected]>
7486
7487 * extensions/thuban/gdalwarp.cpp: Removed debug printing as
7488 the image is rendered. Fixes RTbug #1937.
7489
7490 2003-06-12 Jonathan Coles <[email protected]>
7491
7492 * Thuban/Lib/fileutil.py: As is done under Windows, create the
7493 user directory if it doesn't exist on a posix system.
7494 Fixes RTbug #1815.
7495
7496 * Thuban/Model/resource.py (get_user_proj_files): Moved the
7497 called to get_application_dir here, so that the directory
7498 will only be called if this method is invoked.
7499
7500 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Clear
7501 the projfilepath if no projection is selected.
7502
7503 2003-06-12 Jonathan Coles <[email protected]>
7504
7505 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Don't draw
7506 the scalebar if the current map has no projection set.
7507
7508 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Set the
7509 projfilepath label to just the basename of the projection file
7510 rather than include the entire path.
7511
7512 * Thuban/Model/resource.py: Fix missed proj functions that
7513 needed to be renamed.
7514
7515 2003-06-12 Jonathan Coles <[email protected]>
7516
7517 * Thuban/Model/classification.py: Removed assert statements that
7518 tested if the variable was an instance of Color.
7519
7520 * Thuban/Model/color.py (Color): Remove commented code that isn't
7521 used.
7522 (Transparent): Renamed from NoColor. Doesn't inherit from Color.
7523 Fixes RTbug #1835.
7524 (Transparent.__eq__, Transparent.__ne, Transparent.__repr): New.
7525 Needed now that the class doesn't inherit from Color.
7526
7527 2003-06-12 Jonathan Coles <[email protected]>
7528
7529 * test/test_save.py (XMLWriterTest.testEncode): Explicitly
7530 check unicode strings.
7531
7532 * test/test_layer.py: Check for existence of gdal.
7533
7534 2003-06-12 Jonathan Coles <[email protected]>
7535
7536 * Thuban/Model/xmlreader.py: New. Contains the XMLReader class
7537 that was in load.py
7538
7539 * Thuban/Model/xmlwriter.py: New. Contains the XMLWriter class
7540 that was in save.py
7541
7542 2003-06-12 Jonathan Coles <[email protected]>
7543
7544 This is largely a collection of bug fixes. We also handle the
7545 case where gdal is not on the system. The XMLReader and XMLWriter
7546 classes were moved into there own files to resolve some circular
7547 import references and because they shouldn't really be in the
7548 file that is dediciated to reading/writing session files since
7549 they are also used elsewhere.
7550
7551 * Thuban/Model/classgen.py: Renamed functions to follow the
7552 function_names_with_underscores style. Fixes RTbug #1903.
7553 (calculate_quantiles): Raise ValueError if 'percents' is invalid.
7554
7555 * Thuban/Model/layer.py: Import gdal only if it available.
7556 (RasterLayer): Handle the case where the gdal library is unavailable.
7557 Addresses RTbug #1877.
7558
7559 * Thuban/Model/load.py (XMLReader): Moved into seperate file
7560 xmlreader.py.
7561
7562 2003-06-12 Jonathan Coles <[email protected]>
7563
7564 This is largely a collection of bug fixes. We also handle the
7565 case where gdal is not on the system. The XMLReader and XMLWriter
7566 classes were moved into there own files to resolve some circular
7567 import references and because they shouldn't really be in the
7568 file that is dediciated to reading/writing session files since
7569 they are also used elsewhere.
7570
7571 * Thuban/Model/classgen.py: Renamed functions to follow the
7572 function_names_with_underscores style. Fixes RTbug #1903.
7573 (calculate_quantiles): Raise ValueError if 'percents' is invalid.
7574
7575 * Thuban/Model/layer.py: Import gdal only if it available.
7576 (RasterLayer): Handle the case where the gdal library is unavailable.
7577 Addresses RTbug #1877.
7578
7579 * Thuban/Model/load.py (XMLReader): Moved into seperate file
7580 xmlreader.py.
7581
7582 * Thuban/Model/save.py (escape, XMLWriter): Moved into seperate
7583 file xmlwriter.py.
7584
7585 * Thuban/Model/resource.py: Renamed functions to following the
7586 function_names_with_underscores style.
7587 (has_gdal_support): New function that returns true if the gdal
7588 library is available. Addresses RTbug #1877.
7589
7590 * Thuban/UI/application.py (ThubanApplication.OpenSession):
7591 Display a message box if the gdal library is not available, but
7592 only if there are any layers that would use it. Addresses RTbug #1877.
7593
7594 * Thuban/UI/classgen.py: Use renamed projection resource functions.
7595 (GenUniformPanel.__CalcStepping): Fix a slight discrepency
7596 when using integers versus floats.
7597
7598 * Thuban/UI/mainwindow.py (_has_gdal_support): New. Used to
7599 determine if the "Add Image Layer" menu option should be
7600 greyed out or not. Addresses RTbug #1877.
7601
7602 * Thuban/UI/projdialog.py: Use renamed projection resource functions.
7603
7604 * Thuban/UI/renderer.py (MapRenderer.render_map): Only try to
7605 optimize if a raster layer is visible. Fixes RTbug #1931.
7606 Only draw the raster layer if the gdal library is available.
7607 Addresses RTbug #1877.
7608
7609 * test/test_classgen.py: Add tests for generate_singletons,
7610 generate_uniform_distribution, generate_quantiles. Fixes RTbug #1903.
7611 (test_calculate_quantiles): Fix some tests to catch the new
7612 ValueError that is raised.
7613
7614 * test/test_proj.py: Use renamed projection resource functions.
7615
7616 * test/test_save.py (SaveSessionTest.testClassifiedLayer): New
7617 test for saving classified layers. Fixes RTbug #1902.
7618 (XMLWriterTest): New. Tests the XMLWriter class. Fixes RTbug #1851.
7619
7620 2003-06-12 Jan-Oliver Wagner <[email protected]>
7621
7622 Fix for http://intevation.de/rt/webrt?serial_num=1900.
7623
7624 * Thuban/UI/multiplechoicedialog.py: New. A multiple choice dialog.
7625
7626 * Thuban/UI/mainwindow.py: import wxMultipleChoiceDialog from
7627 multiplechoicedialog.py rather than from the wxPython library.
7628
7629 2003-06-11 Frank Koormann <[email protected]>
7630
7631 * Thuban/Lib/fileutil.py (get_application_dir): Minor stability
7632 update.
7633
7634 2003-06-11 Frank Koormann <[email protected]>
7635
7636 * Thuban/Lib/fileutil.py (get_application_dir): New function to
7637 determine the absolute .thuban/thuban directory under
7638 "posix" (os.expanduser) and "nt" (read AppData registry key).
7639
7640 * Thuban/Model/resource.py: Use get_application_dir
7641
7642 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
7643 Use get_application_dir.
7644
7645 2003-06-10 Bernhard Herzog <[email protected]>
7646
7647 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Subscribe to
7648 the messages MAP_LAYERS_REMOVED messages
7649 (LayerTableFrame.OnClose): Unsubscribe from it.
7650 (LayerTableFrame.map_layers_removed): New. Receiver for
7651 MAP_LAYERS_REMOVED. Close the dialog when the layer whose the
7652 dialog is showing is removed.
7653
7654 2003-06-10 Bernhard Herzog <[email protected]>
7655
7656 * Thuban/Lib/connector.py (Connector.Issue): Iterate over a copy
7657 of the receivers list so that unsubscribing in a receiver doesn't
7658 modify it while iterating over it.
7659
7660 * test/test_connector.py
7661 (ConnectorTest.test_disconnect_in_receiver): New. Test whether
7662 unsubscribing in a receiver works correctly. See docstring for
7663 details
7664
7665 2003-06-10 Bernhard Herzog <[email protected]>
7666
7667 * Thuban/Model/messages.py (LAYER_SHAPESTORE_REPLACED): New
7668 message.
7669
7670 * Thuban/Model/layer.py (Layer.SetShapeStore): Send
7671 LAYER_SHAPESTORE_REPLACED when the shapestore changes. A
7672 LAYER_CHANGED will still be sent if the classification changes.
7673
7674 * Thuban/UI/classifier.py (Classifier.__init__): Add the map as
7675 parameter so we can subscribe to some of its messages
7676 (Classifier.__init__): Subscribe to the map's MAP_LAYERS_REMOVED
7677 and the layer's LAYER_SHAPESTORE_REPLACED
7678 (Classifier.unsubscribe_messages): New. Unsubscribe from message
7679 subscribed to in __init__
7680 (Classifier.map_layers_removed)
7681 (Classifier.layer_shapestore_replaced): receivers for the messages
7682 subscribed to in __init__. Unsubscribe and close the dialog
7683
7684 * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): Pass
7685 the map to the Classifier dialog
7686
7687 * test/test_layer.py (SetShapeStoreTests): Derive from
7688 SubscriberMixin as well so we can test messages
7689 (SetShapeStoreTests.setUp): Subscribe to some of the layer's
7690 messages
7691 (SetShapeStoreTests.tearDown): Clear the messages again
7692 (SetShapeStoreTests.test_sanity): Expand the doc-string and check
7693 for the modified flag too
7694 (SetShapeStoreTests.test_set_shape_store_modified_flag): New test
7695 to check whether SetShapeStore sets the modified flag
7696 (SetShapeStoreTests.test_set_shape_store_different_field_name)
7697 (SetShapeStoreTests.test_set_shape_store_same_field)
7698 (SetShapeStoreTests.test_set_shape_store_same_field_different_type):
7699 Add tests for the messages. This checks both the new
7700 LAYER_SHAPESTORE_REPLACED and the older LAYER_CHANGED
7701
7702 2003-06-06 Jan-Oliver Wagner <[email protected]>
7703
7704 * Thuban/UI/mainwindow.py: Improved and partly added help texts for
7705 the menu items.
7706
7707 2003-06-05 Frank Koormann <[email protected]>
7708
7709 * Thuban/UI/identifyview.py (IdentifyView.__init__):
7710 Layout reimplemented without panel. Make life easier to fit the list
7711 in the dialog.
7712
7713 2003-06-05 Frank Koormann <[email protected]>
7714
7715 * Thuban/UI/projdialog.py (ProjFrame.__init__): Fill the projchoice
7716 once on initialisation (Former implementation resulted in multiple
7717 entries for each projection).
7718 (ProjFrame.__FillAvailList): selectProj as second optional parameter,
7719 if set, select the projection found under the specified name. This
7720 overwrites any other selection estimate.
7721 Removed projchoice filling from this method.
7722 (ProjFrame._OnSave, ProjFrame._OnAddToList):
7723 Updated call of ProjFrame.__FillAvailList
7724 (LCCPanel._DoLayout): Moved parameter controls in more common order.
7725
7726 * Resources/Projections/defaults.proj: Extended defaults representing
7727 various common European projections.
7728
7729 2003-06-05 Frank Koormann <[email protected]>
7730
7731 * Thuban/UI/identifyview.py (IdentifyView.__init__):
7732 Use ListCtrl instead of GridCtrl
7733
7734 * Thuban/Model/resource.py:
7735 Guess location of .thuban directory from tempdir parent directory.
7736
7737 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
7738 Guess location of .thuban directory from tempdir parent directory.
7739
7740 2003-06-04 Bernhard Herzog <[email protected]>
7741
7742 Do not cache the values returned by the tree widget's
7743 GetFirstChild and GetNextChild methods because it led to lots of
7744 segfaults. The new way requires more brute force but is more
7745 reliable.
7746
7747 * Thuban/UI/legend.py (LegendTree.__init__): Remove instance
7748 variable layer2id
7749 (LegendTree.find_layer): New method to do with brute force what
7750 layer2id tried to accomplish
7751 (LegendTree._OnMsgLayerChanged)
7752 (LegendTree._OnMsgLayerTitleChanged, LegendTree.__ShowHideLayer):
7753 Use find_layer instead of layer2id
7754 (LegendTree.__RemoveLayer, LegendTree.__AddLayer): No need to
7755 update layer2id anymore
7756 (LegendTree._OnMsgMapLayersRemoved)
7757 (LegendTree._OnMsgMapLayersAdded): Get by without layer2id.
7758
7759 2003-06-03 Thomas Koester <[email protected]>
7760
7761 * Thuban/Model/classgen.py (GenQuantiles0): New function.
7762
7763 2003-06-02 Bernhard Herzog <[email protected]>
7764
7765 * Thuban/UI/mainwindow.py (layer_rename command, table_rename command):
7766 New commands.
7767 (main_menu): Add the new commands.
7768 (MainWindow.TableRename): New. Implementation of the table_rename
7769 command.
7770 (MainWindow.RenameLayer): New. Implementation of the layer_rename
7771 command.
7772
7773 * Thuban/Model/session.py (Session.AddTable): call self.changed to
7774 set the modified flag
7775
7776 * test/test_session.py (TestSessionSimple.test_add_table): Test
7777 whether the modified flag is set properly
7778
7779 * Thuban/Model/base.py (TitledObject.SetTitle): Call changed
7780 instead of issue so that the modified flags get updated.
7781
7782 * test/test_base.py (SomeTitledObject): Derive from Modifiable
7783 instead of Publisher to reflect reality better and to accomodate
7784 the fact that SetTitle now calls changed instead of issue
7785
7786 2003-06-02 Bernhard Herzog <[email protected]>
7787
7788 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Resource
7789 acquisition has to happen before the try in a try-finally.
7790
7791 2003-06-02 Bernhard Herzog <[email protected]>
7792
7793 * Thuban/UI/legend.py (LegendTree._OnMsgMapLayersRemoved): It's
7794 possible that a layer is removed that is not currently selected in
7795 the legend so don't check for this.
7796
7797 2003-05-30 Bernhard Herzog <[email protected]>
7798
7799 * Thuban/Model/layer.py (Layer.Destroy): Set all instance
7800 variables to None that have direct or indirect references to
7801 shapefiles or dbf files to make sure that they do go away and the
7802 files are closed.
7803
7804 2003-05-30 Bernhard Herzog <[email protected]>
7805
7806 * Thuban/UI/legend.py (LegendTree.GetRootItem): Reset
7807 availImgListIndices when a new image list is created
7808
7809 2003-05-30 Bernhard Herzog <[email protected]>
7810
7811 * Thuban/UI/legend.py (LegendTree.__init__): New instance variable
7812 changing_selection to indicate whether the LegendTree code itself
7813 is currently changing the selection
7814 (LegendTree.normalize_selection): New method to normalize the
7815 selection by selecting the layer item even if the user clicked on
7816 the classification.
7817 (LegendTree._OnSelChanged): normalize the selection. This works
7818 around a bug in wx which doesn't keep track of the selection
7819 properly when subtrees are deleted.
7820
7821 2003-05-30 Bernhard Herzog <[email protected]>
7822
7823 * Thuban/UI/view.py (MapCanvas.set_view_transform): Limit the
7824 maximum and minimum scale factors.
7825
7826 * test/test_classgen.py (ClassGenTest.test): Update to reflect the
7827 changes in classgen.py
7828
7829 2003-05-30 Jonathan Coles <[email protected]>
7830
7831 * Thuban/Model/classgen.py: Remove ClassGenerator class but make
7832 all the methods functions. Fixes RTBug #1903.
7833
7834 * Thuban/Model/map.py (Map.TopLayer, Map.BottomLayer): Renamed
7835 to MoveLayerToTop and MoveLayerToBottom respectively. Fixes
7836 RTBug #1907.
7837
7838 * Thuban/UI/classgen.py: Use classgen functions that were part
7839 of the ClassGenerator class. Put try/finally blocks around
7840 code that uses wxBeginBusyCursor()/wxEndBusyCursor(). Fixes
7841 RTBug #1904.
7842
7843 * Thuban/UI/classifier.py: Remove unused import of ClassGenerator.
7844
7845 * Thuban/UI/legend.py: The legend was cleared and repopulated any
7846 time something changed which caused some state to be lost such
7847 as which children were expanded or collapsed. Fixes RTBug #1901.
7848 (LegendTree._OnMsgMapLayersAdded): Add only new layers.
7849 (LegendTree.__OnMsgMapLayersRemoved): Remove layers that exist in
7850 the legend but not in the map.
7851 (LegendTree.__FillTree): Move main functionality out into smaller
7852 methods that can be used by other methods.
7853 (LegendTree.__FillTreeLayer): Reuse old slots in the image list
7854 if they are available.
7855 (LegendTree.DeleteAllItems): Renamed from __DeleteAllItems so
7856 that we override the wxTreeCtrl method. Iterate over children
7857 and call __RemoveLayer.
7858 (LegendTree.__AddLayer): New. Add a new layer to the legend.
7859 (LegendTree.__RemoveLayer): Remove a layer from the legend.
7860 (LegendTree.DeleteChildren): New, overrides wxTreeCtrl method.
7861 Should only be called with the id of a layer branch.
7862 (LegendTree.GetRootItem): New, overrides wxTreeCtrl method.
7863 Returns the root item or creates one if necessary.
7864
7865 * Thuban/UI/renderer.py (MapRenderer.draw_raster_layer): Call
7866 ProjectRasterFile with tuple arguments instead of strings.
7867
7868 * Thuban/UI/tableview.py (QueryTableFrame.OnQuery): Wrap code
7869 with try/finally. Fixes RTBug #1904.
7870
7871 * Thuban/UI/view.py (MapCanvas.OnPaint): Wrap code
7872 with try/finally. Fixes RTBug #1904.
7873 (MapCanvas.FitSelectedToWindow): If a single point is selected
7874 simply center it on the display. Fixes RTBug #1849.
7875
7876 * extensions/thuban/gdalwarp.cpp: Removed code that allowed gdalwarp
7877 to be compiled as a standalone app. Now the code can only be
7878 called from Python which simplifies the parameter passing.
7879 (ProjectRasterFile): Handle Python arguments. Remove code that
7880 checks for a destination dataset. Add more clean up code.
7881
7882 * test/test_map.py (TestMapWithContents.test_raise_layer_top,
7883 TestMapWithContents.test_lower_layer_bottom):
7884 Test Map.MoveLayerToTop() and Map.MoveLayerToBottom() respectively.
7885 Fixes RTBug #1907.
7886
7887 * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Apply a full
7888 extent to the map when the legend is toggled. Fixes RTBug #1881.
7889
7890 2003-05-29 Jan-Oliver Wagner <[email protected]>
7891
7892 * Thuban/UI/tableview.py (LayerTableFrame.OnClose): Bug-fix: Now
7893 unsubscribes all that is subcribed in __init__.
7894
7895 2003-05-28 Bernhard Herzog <[email protected]>
7896
7897 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer)
7898 (MainWindow.CanDuplicateLayer): New methods to implement the
7899 Layer/Duplicate command.
7900 (layer_duplicate command): New.
7901 (main_menu): Add layer_duplicate to the Layer menu.
7902
7903 2003-05-28 Bernhard Herzog <[email protected]>
7904
7905 * Thuban/UI/tableview.py (NullRenderer.Draw): New. Our own
7906 renderer so that NULL/None values get displayed differently (by a
7907 gray rectangle).
7908 (TableGrid.__init__): Override the default renderers
7909
7910 2003-05-28 Bernhard Herzog <[email protected]>
7911
7912 * Thuban/Model/layer.py (Layer.SetShapeStore): Set the
7913 classification to "None" if the type of the field has changed.
7914
7915 * test/test_layer.py (SetShapeStoreTests): New. Class with a few
7916 test for the Layer.SetShapeStore method
7917
7918 2003-05-28 Jan-Oliver Wagner <[email protected]>
7919
7920 * Thuban/Model/layer.py (Layer.TreeInfo): Fixed a bug (a layer
7921 does not necessarily have a filename).
7922
7923 2003-05-28 Jan-Oliver Wagner <[email protected]>
7924
7925 * Thuban/UI/mainwindow.py (MainWindow.TableClose, MainWindow.TableShow):
7926 sort the selection list for the dialog.
7927
7928 2003-05-28 Frank Koormann <[email protected]>
7929
7930 * extensions/thuban/wxproj.cpp
7931 (project_point): Removed cast to int for projected point coordinates.
7932 (shape_centroid): Return last point if all polygon vertices fall
7933 to one point.
7934
7935 2003-05-28 Bernhard Herzog <[email protected]>
7936
7937 * Thuban/UI/mainwindow.py (_can_unjoin): Add doc-string and cope
7938 with layers that don't have shapestores, i.e. raster layers.
7939
7940 2003-05-28 Bernhard Herzog <[email protected]>
7941
7942 * Thuban/Model/table.py (DBFTable.__init__): Omit the extension
7943 when determining the title from the filename.
7944
7945 * test/test_dbf_table.py (TestDBFTable.test_title): Update to
7946 reflect changes in the way the title is derived from the filename
7947
7948 2003-05-28 Frank Koormann <[email protected]>
7949
7950 * Thuban/UI/mainwindow.py (MainWindow.TableShow):
7951 Added wxDEFAULT_DIALOG_STYLE to show table dialog styles.
7952
7953 2003-05-27 Bernhard Herzog <[email protected]>
7954
7955 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages): Also
7956 delegate SelectedLayer.
7957 (MainWindow.LayerUnjoinTable): Implement.
7958 (_can_unjoin): New. Helper function for the sensitivity of the
7959 layer/unjoin command.
7960
7961 * Thuban/Model/data.py (ShapefileStore.OrigShapeStore)
7962 (DerivedShapeStore.OrigShapeStore): New. Return the original
7963 shapestore. Used to figure out how to unjoin.
7964 (DerivedShapeStore.Shapefile): Fix a typo.
7965
7966 2003-05-27 Bernhard Herzog <[email protected]>
7967
7968 * Thuban/UI/join.py (JoinDialog): Extend to handle layer joins as
7969 well
7970 (JoinDialog.__init__): Use the layer parameter and only build the
7971 left choice when a layer is given
7972 (JoinDialog.OnJoin): Handle layer joins as well
7973 (JoinDialog.OnLeftTable, JoinDialog.OnRightTable): Handle the case
7974 that the user selects the "Select..." item. The sensitivitly
7975 updating is now in update_sensitivity
7976 (JoinDialog.y): New method to refactor the sensitivity update of
7977 the join button into its own method.
7978
7979 * Thuban/UI/mainwindow.py (MainWindow.LayerJoinTable): Implement.
7980
7981 2003-05-27 Bernhard Herzog <[email protected]>
7982
7983 * Thuban/UI/mainwindow.py (table_close command): Make it sensitive
7984 iff there are unreferenced tables in the session
7985
7986 2003-05-27 Bernhard Herzog <[email protected]>
7987
7988 * Thuban/Model/messages.py (TABLE_REMOVED): New message.
7989
7990 * Thuban/Model/session.py (Session.UnreferencedTables): New method
7991 to return tables that are not referenced by other tables or shape
7992 stores and can be removed.
7993 (Session.RemoveTable): Issue a TABLE_REMOVED message after
7994 removing the table
7995
7996 * Thuban/UI/mainwindow.py: Remove unused imports
7997 (MainWindow.TableClose): Implement.
7998
7999 * Thuban/UI/tableview.py (TableFrame.__init__): Subscribe to some
8000 messages so that the frame will be automatically closed when a new
8001 session is opened or the table is removed.
8002 (TableFrame.OnClose): Unsubscribe the Subscriptions made in
8003 __init__
8004 (TableFrame.close_on_session_replaced)
8005 (TableFrame.close_on_table_removed): New. Subscribers that close
8006 the window
8007
8008 * test/test_session.py (TestSessionMessages.test_remove_table)
8009 (TestSessionSimple.test_remove_table): Move the test to
8010 TestSessionSimple and add test for the TABLE_REMOVED message
8011 (TestSessionBase.setUp): Also subscribe to TABLE_REMOVED
8012 (TestSessionSimple.test_unreferenced_tables) New. Test for the
8013 UnreferencedTables method.
8014 (UnreferencedTablesTests): New. Class with some more sophisticated
8015 tests for UnreferencedTables.
8016
8017 2003-05-27 Frank Koormann <[email protected]>
8018
8019 * Thuban/UI/tableview.py (QueryTableFrame.__init__): The "_S_election"
8020 display has some unwanted side effects. Removed again.
8021
8022 2003-05-27 Frank Koormann <[email protected]>
8023
8024 * Resources/Bitmaps/legend_icon_layer.xpm: New, icon for legend.
8025
8026 * Thuban/UI/legend.py (LegendTree.__FillTree): Use "legend_icon_layer"
8027
8028 2003-05-27 Jan-Oliver Wagner <[email protected]>
8029
8030 * test/test_menu.py (MenuTest.test): Added test for
8031 Menu.RemoveItem().
8032
8033 * Thuban/UI/menu.py (Menu.RemoveItem): New. Remove an item from
8034 the menu.
8035
8036 2003-05-27 Frank Koormann <[email protected]>
8037
8038 Nonmodal dialogs without parent (i.e. they can fall behind the main
8039 window)
8040
8041 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Explicitly destroy
8042 all dialogs in the dialogs dictionary and the canvas.
8043
8044 * Thuban/UI/dialogs.py (NonModalNonParentDialog): New class, without
8045 parent, i.e. can fall behind other windows.
8046 (NonModalDialog.OnClose): Check is dialog is in mainwindow.dialog
8047 dictionary before removing it.
8048
8049 * Thuban/UI/classifier.py: Dialog derived from NonModalNonParentDialog
8050
8051 * Thuban/UI/projdialog.py: Dialog derived from NonModalNonParentDialog
8052 * Thuban/UI/tableview.py: Dialog derived from NonModalNonParentDialog
8053 * Thuban/UI/tree.py: Dialog derived from NonModalNonParentDialog
8054
8055 2003-05-27 Bernhard Herzog <[email protected]>
8056
8057 * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): New. Open a
8058 tableview dialog
8059 (MainWindow.TableShow): Use ShowTableView to open the dialogs.
8060 Also, don't use the table's titles as the dialog names. The titles
8061 aren't guaranteed to be unique.
8062 (MainWindow.TableOpen): Open a table view dialog after opening the
8063 table
8064
8065 2003-05-27 Bernhard Herzog <[email protected]>
8066
8067 * Thuban/UI/mainwindow.py: Remove the Table/Hide menu item. Its
8068 effect can be achieved by simply closing the window showing the
8069 table.
8070 (MainWindow.TableHide): Removed.
8071 (main_menu): Removed "table_hide"
8072
8073 2003-05-27 Frank Koormann <[email protected]>
8074
8075 Fix legend tree display problems under Win32
8076
8077 * Thuban/UI/legend.py: BMP_SIZE_W = 15
8078 (LegendTree.__FillTree): Display "legend_icon_map.xpm" with layer title.
8079 (LegendTree.__FillTreeLayer): Explicitely set SelectedImage.
8080
8081 * Resources/Bitmaps/legend_icon_map.xpm: New icon for legend.
8082
8083 2003-05-27 Jan-Oliver Wagner <[email protected]>
8084
8085 * Thuban/UI/menu.py (Menu.InsertSeparator): Additional optional parameter
8086 'after' now allows to insert separators almost anywhere in the menu.
8087
8088 2003-05-27 Frank Koormann <[email protected]>
8089
8090 * Thuban/UI/tableview.py (QueryTableFrame.__init__): Underline the
8091 "S" of selection box label to hint on hot key (Alt-S). Works under
8092 Win32 but is ignored under GTK.
8093
8094 2003-05-26 Frank Koormann <[email protected]>
8095
8096 * Thuban/UI/projdialog.py (ProjFrame.__do_layout, ProjPanel._DoLayout):
8097 Center Choices.
8098
8099 2003-05-26 Bernhard Herzog <[email protected]>
8100
8101 Remove the Precision methods again. They're too DBF specific to be
8102 part of the table interface and they're only used in table_to_dbf
8103 anyway.
8104
8105 * Thuban/Model/transientdb.py (TransientTableBase.Width):Use a
8106 fixed precision of 12 for doubles.
8107 (TransientTableBase.Precision): Removed
8108 (AutoTransientTable.Width): Delegate to self.table.
8109
8110 * Thuban/Model/table.py (DBFTable.Precision)
8111 (MemoryTable.Precision): Removed.
8112 (MemoryTable.Width): Use a fixed precision of 12 for doubles.
8113 (table_to_dbf): Use a fixed precision of 12 for floats unless the
8114 column object specifies something else.
8115
8116 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): New.
8117 test for table_to_dbf
8118
8119 2003-05-26 Bernhard Herzog <[email protected]>
8120
8121 * test/test_transientdb.py
8122 (TestTransientTable.run_iceland_political_tests): Fix a comment.
8123
8124 2003-05-26 Bernhard Herzog <[email protected]>
8125
8126 * Thuban/UI/mainwindow.py (MainWindow.TableOpen): Real
8127 implementation. Mark parts of the file format strings for
8128 localization.
8129
8130 * Thuban/Model/session.py (Session.OpenTableFile): New. Open a dbf
8131 file and add the table to the tables managed by the session
8132
8133 * test/test_session.py (TestSessionSimple.test_open_table_file):
8134 New. test case for OpenTableFile
8135
8136 2003-05-26 Jan-Oliver Wagner <[email protected]>
8137
8138 * Thuban/UI/controls.py, Thuban/UI/identifyview.py, Thuban/UI/join.py,
8139 Thuban/UI/labeldialog.py, Thuban/UI/mainwindow.py,
8140 Thuban/UI/proj4dialog.py, Thuban/UI/tableview.py, Thuban/UI/view.py:
8141 Replace the true/false of wxWindows by True/False of Python 2.2.1.
8142
8143 2003-05-26 Jan-Oliver Wagner <[email protected]>
8144
8145 * Thuban/UI/tableview.py (LayerTableFrame.__init__): If there is
8146 already a selection present, update the grid accordingly.
8147
8148 * Thuban/UI/mainwindow.py (MainWindow.TableShow): Make the dialog
8149 resizeable and increase its initial size.
8150
8151 2003-05-26 Frank Koormann <[email protected]>
8152
8153 Table export functionality
8154
8155 * Thuban/Model/table.py (DBFTable.Width, MemoryTable.Width):
8156 Return width (in characters) for a column.
8157 (DBFTable.Precision, MemoryTable.Precision): Return decimal precision.
8158 (table_to_dbf): Write table to dbf file.
8159 (table_to_csv): Write table to csv file.
8160
8161 * Thuban/Model/transientdb.py (TransientTableBase.Width,
8162 TransientTableBase.Precision): Return column width and precision.
8163
8164 * Thuban/UI/tableview.py (QueryTableFrame.OnSaveAs): Call table_to_dbf
8165 or table_to_csv depending on file selection.
8166
8167 * test/test_dbf_table.py:
8168 Test table_to_dbf (extension of former part of test).
8169
8170 * test/test_csv_table.py:
8171 Test table_to_csv.
8172
8173 2003-05-23 Jan-Oliver Wagner <[email protected]>
8174
8175 * Thuban/UI/join.py (JoinDialog.OnJoin): Use _() for strings.
8176 Use QueryTableFrame instead of TableFrame.
8177
8178 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Prefix the
8179 table window with 'Layer Table:' instead of 'Table:'.
8180
8181 2003-05-23 Jan-Oliver Wagner <[email protected]>
8182
8183 Give all tables a title via mix-in TitledObject.LayerShowTable
8184
8185 * Thuban/Model/base.py (TitledObject.SetTitle): Call method 'issue'
8186 only if it exists.
8187
8188 * Thuban/Model/table.py (DBFTable, MemoryTable): mix-in TitledObject
8189 and call its init-method with a default title. Remove Title() method.
8190
8191 * Thuban/Model/transientdb.py (TransientTable, TransientJoinedTable,
8192 AutoTransientTable): mix-in TitledObject and call its init-method with
8193 a default title. Remove Title() method.
8194
8195 2003-05-23 Bernhard Herzog <[email protected]>
8196
8197 * Thuban/Model/session.py (Session.AddShapeStore): Define
8198 AddShapeStore analogously to AddTable.
8199
8200 * test/test_session.py (TestSessionSimple.test_add_shapestore):
8201 New. Test for AddShapeStore
8202
8203 2003-05-23 Jan-Oliver Wagner <[email protected]>
8204
8205 Introducing QueryTableFrame and a very coarse ShowTable implementation.
8206
8207 * Thuban/UI/tableview.py (LayerTableFrame, QueryTableFrame): Split the
8208 class LayerTableFrame into two classes, LayerTableFrame and QueryTableFrame.
8209 The latter implements the selection GUI without dependency on a layer.
8210 LayerTableFrame now is derived from QueryTableFrame and connects
8211 to a layer.
8212
8213 * Thuban/UI/mainwindow.py (MainWindow.TableShow): A very coarse
8214 implementation that still needs work.
8215
8216 * Thuban/Model/layer.py (Layer.TreeInfo): Added filename.
8217
8218 2003-05-22 Frank Koormann <[email protected]>
8219
8220 * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
8221 Added "outer_join = False" as optional parameter.
8222 (TransientJoinedTable.create): If outer join is true, perform a
8223 "LEFT OUTER JOIN" instead of "JOIN", which preserves all records of
8224 the left table. Records not matching are filled with 0 / None.
8225
8226 * Thuban/UI/join.py (JoinDialog.__init__): Checkbox for outer join.
8227 (JoinDialog.OnJoin): Consider outer join check box.
8228
8229 2003-05-22 Bernhard Herzog <[email protected]>
8230
8231 * Thuban/UI/join.py (JoinDialog.OnJoin): Use exc_info in a
8232 somewhat safer way. Storing the traceback in a local variable can
8233 lead to memory leaks
8234
8235 2003-05-22 Bernhard Herzog <[email protected]>
8236
8237 * Thuban/UI/join.py (JoinDialog.OnJoin): Make sure to really call
8238 the wxMessageDialog's Destroy() method.
8239
8240 2003-05-22 Frank Koormann <[email protected]>
8241
8242 * Thuban/UI/join.py (JoinDialog.__init__): Make use of
8243 TransientTable.Title()
8244
8245 2003-05-22 Frank Koormann <[email protected]>
8246
8247 Join Dialog, initial version.
8248
8249 * Thuban/UI/mainwindow.py (MainWindow.TableJoin): Removed print.
8250
8251 * Thuban/UI/join.py (JoinDialog): Functional implementation of
8252 former framework. Renamed Table1/Table2 to LeftTable/RightTable
8253 in all occurences.
8254
8255 * Thuban/Model/transientdb.py (TransientJoinedTable.__doc__):
8256 Typo fixed.
8257
8258 2003-05-22 Bernhard Herzog <[email protected]>
8259
8260 Give the tables titles so that the GUI can display more meaningful
8261 names. For now the titles are fixed but depend on e.g. filenames
8262 or the titles of the joined tables.
8263
8264 * Thuban/Model/transientdb.py (TransientTable.Title)
8265 (TransientJoinedTable.Title, AutoTransientTable.Title): New.
8266
8267 * Thuban/Model/table.py (DBFTable.Title, MemoryTable.Title): New.
8268
8269 * test/test_transientdb.py
8270 (TestTransientTable.test_auto_transient_table_title): New. Test
8271 for the Title method
8272 (TestTransientTable.test_transient_joined_table)
8273 (TestTransientTable.test_transient_table): Add test for the Title
8274 methods
8275
8276 * test/test_memory_table.py (TestMemoryTable.test_title): New.
8277 Test for the Title method
8278
8279 * test/test_dbf_table.py (TestDBFTable.test_title): New. Test for
8280 the Title method
8281
8282 2003-05-22 Bernhard Herzog <[email protected]>
8283
8284 * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
8285 Provide a better way to destroy the layers
8286 (TestLayer.test_base_layer, TestLayer.test_arc_layer)
8287 (TestLayer.test_point_layer, TestLayer.test_empty_layer)
8288 (TestLayer.test_polygon_layer, TestLayer.test_get_field_type): Use
8289 the new way to destroy the layers.
8290 (TestLayer.test_derived_store): New. Test for using a layer with a
8291 DerivedShapeStore
8292
8293 * Thuban/Model/layer.py (Layer.SetShapeStore): Only set the
8294 filename if the shape store actually has one.
8295
8296 2003-05-22 Bernhard Herzog <[email protected]>
8297
8298 * Thuban/Model/table.py (DBFTable.FileName): New. Accessor method
8299 for the filename
8300
8301 * test/test_dbf_table.py (TestDBFTable.test_filename): New. Test
8302 for the FileName method
8303 (TestDBFTableWriting.test_write): Fix spelling of filename
8304
8305 2003-05-22 Thomas Koester <[email protected]>
8306
8307 * Thuban/Model/range.py, test/test_range.py: Brought over new Range
8308 from SciParam that now really is immutable.
8309
8310 2003-05-22 Frank Koormann <[email protected]>
8311
8312 Layer Top/Bottom placement added to legend.
8313
8314 * Thuban/UI/legend.py
8315 (LegendPanel._OnMoveTop(), LayerPanel._OnMoveBottom): New, methods
8316 bound to tool events.
8317 (LegendTree.MoveCurrentItemTop(), LegendTree.MoveCurrentItemBottom):
8318 New, methods binding the event methods with the map methods.
8319
8320 * Thuban/Model/map.py (Map.TopLayer(), Map.BottomLayer()): New, place
8321 layer at top/bottom of layer stack.
8322
8323 * Resources/Bitmaps/top_layer.xpm: New button icon.
8324
8325 * Resources/Bitmaps/bottom_layer.xpm: New button icon.
8326
8327 2003-05-22 Bernhard Herzog <[email protected]>
8328
8329 * Thuban/Model/session.py (Session.RemoveTable): New method to
8330 remove tables
8331
8332 * test/test_session.py (TestSessionSimple.test_remove_table): New.
8333 Test for RemoveTable
8334
8335 2003-05-22 Thomas Koester <[email protected]>
8336
8337 * Thuban/Model/classgen.py: Added short module doc string and CVS id.
8338 (ClassGenerator.GenUniformDistribution): Use new Range __init__, too.
8339
8340 2003-05-22 Bernhard Herzog <[email protected]>
8341
8342 Implement a way to discover dependencies between tables and
8343 shapestores.
8344
8345 * Thuban/Model/transientdb.py (TransientTableBase.Dependencies)
8346 (TransientJoinedTable.Dependencies)
8347 (AutoTransientTable.SimpleQuery): New. Implement the dependencies
8348 interface
8349 (TransientJoinedTable.__init__): Keep tack of the original table
8350 objects in addition to the corresponding transient tables.
8351
8352 * Thuban/Model/table.py (DBFTable.Dependencies)
8353 (MemoryTable.Dependencies): New. Implement the dependencies
8354 interface
8355
8356 * Thuban/Model/data.py (ShapeTable): New. Helper class for
8357 ShapefileStore
8358 (ShapefileStore.__init__): Use ShapeTable instead of
8359 AutoTransientTable
8360 (ShapefileStore.Table, ShapefileStore.Shapefile): Add doc-strings
8361 (ShapefileStore.FileName, ShapefileStore.FileType): New. Accessor
8362 methods for filename and type
8363 (ShapefileStore.Dependencies): New. Implement the dependencies
8364 interface
8365 (DerivedShapeStore): New class to replace SimpleStore. The main
8366 difference to SimpleStore is that it depends not on a shapefile
8367 but another shapestore which expresses the dependencies a bit
8368 better
8369 (SimpleStore.__init__): Add deprecation warning.
8370
8371 * test/test_dbf_table.py (TestDBFTable.test_dependencies): New.
8372 Test for the Dependencies method.
8373
8374 * test/test_memory_table.py (TestMemoryTable.test_dependencies):
8375 New. Test for the Dependencies method.
8376
8377 * test/test_transientdb.py
8378 (TestTransientTable.test_auto_transient_table_dependencies): New.
8379 Test for the Dependencies method.
8380 (TestTransientTable.test_transient_joined_table): Add test for the
8381 Dependencies method.
8382
8383 * test/test_session.py (TestSessionSimple.setUp)
8384 (TestSessionSimple.tearDown): New. Implement a better way to
8385 destroy the sessions.
8386 (TestSessionSimple.test_initial_state)
8387 (TestSessionSimple.test_add_table): Bind session to self.session
8388 so that it's destroyed by tearDown
8389 (TestSessionSimple.test_open_shapefile): New. Test for
8390 OpenShapefile and the object it returns
8391
8392 2003-05-22 Bernhard Herzog <[email protected]>
8393
8394 * Thuban/Model/session.py (Session.AddTable): New method to
8395 register tables with the session.
8396 (Session.Tables): Return the tables registered with AddTable too.
8397
8398 * test/test_session.py (TestSessionSimple.test_add_table): New.
8399 Test case for the AddTable method
8400
8401 2003-05-22 Frank Koormann <[email protected]>
8402
8403 UI polishing updates: Place main buttons (OK, Cancel, etc) in the
8404 lower right corner, center labels for selections, initialize controls
8405 in reasonable order for keyboard navigation.
8406
8407 * Thuban/UI/projdialog.py (ProjFrame.__init__, ProjFrame.__doLayout)
8408 (ProjFrame.__DoOnProjAvail): Determine position of current projection
8409 using the wxListBox.FindString() method. Still a problem (#1886)
8410
8411 * Thuban/UI/classifier.py
8412 (Classifier.__init__, SelectPropertiesDialog.__init__)
8413
8414 * Thuban/UI/classgen.py (ClassGenDialog.__init__,
8415 (ClassGenDialog.__DoOnGenTypeSelect): Moved initialization of the
8416 different classification types from here to __init__.
8417 (GenUniquePanel.__init__): Set the column width of the first field
8418 in the Field ListCtrl to the full width.
8419
8420 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Rename 'Save As'
8421 Button to 'Export'. Center Buttons in Selection Box, set Focus to
8422 Grid.
8423 (LayerTableFrame.OnKeyDown()): New, bound to the grid with EVT_KEY_DOWN,
8424 changes focus to the Selection when pressing "Alt-S".
8425
8426 * Thuban/UI/legend.py (LegendTree.__SetVisibilityStyle): Only gray out
8427 the text if not visible. The italic font sometimes exceeds the
8428 rendering area.
8429
8430 2003-05-21 Jonathan Coles <[email protected]>
8431
8432 * Thuban/UI/dock.py (DockFrame): Rename references to _OnClose
8433 to OnClose so that Thuban closes correctly.
8434
8435 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Call
8436 DockFrame.OnClose, not DockFrame._OnClose.
8437
8438 2003-05-21 Jonathan Coles <[email protected]>
8439
8440 * Thuban/Model/classgen.py (ClassGenerator.GenQuantiles): Remove
8441 references to 'inf' and use new Range __init__ to pass floats
8442 directly rather than converting them to strings first.
8443 Fixes RTBug #1876.
8444
8445 * Thuban/Model/classification.py (ClassGroupRange.SetRange):
8446 Use new Range ___init__ to pass floats.
8447
8448 * Thuban/Model/layer.py (RasterLayer.__init__): Test if the
8449 filename is a valid image file. Throw IOError otherwise.
8450
8451 * Thuban/Model/range.py: Brought over new Range from SciParam that
8452 is immutable and has an __init__ which can accept floats.
8453
8454 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Move OpenShapefile
8455 into try block. AddLayer doesn't throw any exceptions anymore.
8456 (MainWindow.AddRasterLayer): Move constructor of RasterLayer into
8457 try block.
8458
8459 * Thuban/UI/projdialog.py (GeoPanel.__init__): Put Degrees as
8460 the first item in choices. Fixes RTBug #1882.
8461
8462 * Thuban/UI/renderer.py (MapRenderer.render_map): Check if scale
8463 has gone to 0 which is a serious problem. abort.
8464 (MapRenderer.draw_raster_layer): Catch IOError seperately and
8465 print the error from GDAL.
8466
8467 * Thuban/UI/tableview.py (TableGrid.__init__): Call
8468 ToggleEventListeners to turn on listening.
8469 (TableGrid.ToggleEventListeners): New. Turns event listening on
8470 and off so as to prevent excessive messages.
8471 (LayerTableFrame.OnQuery): Use TableGrid.ToggleEventListeners
8472 to suppress excessive messages when selecting many rows.
8473 Fixes RTBug #1880.
8474
8475 * Thuban/UI/view.py: Added checks against if scale == 0. This
8476 is a serious problem that can occur when an image without
8477 geo data is loading and causes the map projection bounds to
8478 go to infinity. Right now, the solution is to simply try
8479 to recover.
8480
8481 * extensions/thuban/cpl_mfile.cpp (MFILEClose): Make sure
8482 to set the MFILEReceiver attributes even if the data is NULL.
8483
8484 * extensions/thuban/gdalwarp.cpp: Improved the error handling
8485 and passed GDAL messages back up to the Python layer. Also
8486 tried to fix some memory leaks that were present in the original
8487 utility but didn't matter because the program aborted.
8488
8489 * test/test_range.py: Copied over tests from SciParam. Removed
8490 tests against importing. Fixes RTBug #1867.
8491
8492 2003-05-21 Bernhard Herzog <[email protected]>
8493
8494 * test/test_load.py: Remove unused imports and restructure the
8495 test code
8496 (LoadSessionTest): Split into one class for each test and turn
8497 LoadSessionTest itself into the base class for all such session
8498 tests.
8499 (ClassificationTest): New base class for load tests that test
8500 classifications
8501 (TestSingleLayer, TestLayerVisibility, TestClassification)
8502 (TestLabels, TestLayerProjection, TestRasterLayer): New classes
8503 for the individual tests
8504
8505 * test/support.py (FileLoadTestCase.filename): New base class for
8506 file loading tests
8507
8508 2003-05-21 Jan-Oliver Wagner <[email protected]>
8509
8510 * Resources/Projections/defaults.proj: Renamed 'Universal Transverse
8511 Mercator' to 'UTM Zone 32' as a more convenient example.
8512 Added 'Gauss Krueger Zone 6'.
8513
8514 * Data/iceland_sample_raster.thuban: political polygon now
8515 filled transparent to have the raster image visible at once.
8516
8517 2003-05-21 Frank Koormann <[email protected]>
8518
8519 * Thuban/UI/mainwindow.py (MainWindow): Renamed _OnClose() back to
8520 OnClose() to keep in sync with extensions. Internally Thuban
8521 still uses "underscored" names.
8522
8523 2003-05-20 Jonathan Coles <[email protected]>
8524
8525 This puts back Raster layer support. These layers support projections
8526 through the GDAL library. Currently, the CVS version is being used.
8527 There are no Debian packages available although this may change soon.
8528 A GDAL driver was extended to support writing to memory rather to
8529 files.
8530
8531 There is still some work that needs to be done, such as some error
8532 handling when loading invalid images or when there is a problem
8533 projecting the image. This putback simply checks in the majority
8534 of the work.
8535
8536 * setup.py: Add gdalwarp library extension.
8537
8538 * Thuban/Model/layer.py (BaseLayer.HasClassification): New.
8539 Defaults to False, but can be overridden by subclasses if they
8540 support classification.
8541 (RasterLayer): New. Defines a new layer that represents an
8542 image.
8543
8544 * Thuban/Model/load.py (SessionLoader.__init__): Add rasterlayer
8545 tag handler.
8546 (SessionLoader.start_layer): Encode the filename.
8547 (SessionLoader.start_rasterlayer, SessionLoader.end_rasterlayer):
8548 New. Supports reading a rasterlayer tag.
8549
8550 * Thuban/Model/map.py (Map.BoundingBox): Fix typo in comment.
8551
8552 * Thuban/Model/save.py (XMLWriter.encode): Don't assume that we
8553 get a string in Latin1. If we get such as string convert it to
8554 unicode first, otherwise leave if alone before encoding.
8555 (SessionSaver.write_layer): Add support for writing both Layers
8556 and RasterLayers.
8557
8558 * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
8559 The right argument may not be a string, it could also be a Column.
8560
8561 * Thuban/UI/application.py (ThubanApplication.CreateMainWindow):
8562 Make initial window size 600x400. Fixes RTBug #1872.
8563
8564 * Thuban/UI/classifier.py (Classifier.__init__): Rearrange how
8565 the dialog is constructed so that we can support layers that
8566 do not have classifications.
8567 (Classifier._OnTry): Only build a classification if the layer
8568 supports one.
8569
8570 * Thuban/UI/legend.py: Change all checks that a layer is an
8571 instance of Layer into checks against BaseLayer.
8572 (LegendTree.__FillTreeLayer): Only add children to a branch if
8573 the layer supports classification.
8574
8575 * Thuban/UI/mainwindow.py (MainWindow.NewSession,
8576 MainWindow.OpenSession): Don't proceed with an action if the
8577 user chooses Cancel when they are asked to save changes.
8578 (MainWindow.AddRasterLayer): New. Open a dialog to allow the
8579 user to select an image file. Create a new RasterLayer and add
8580 it to the map.
8581
8582 * Thuban/UI/renderer.py (MapRenderer.render_map): Add support
8583 for rendering RasterLayer layers.
8584 (MapRenderer.draw_raster_layer): Actually method that calls
8585 the GDALWarp python wrapper and constructs an image from the
8586 data returned.
8587
8588 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Change the
8589 Choices symbols to match those used in the table query method.
8590 Replace deprecated method calls on table with new method names.
8591
8592 * Thuban/UI/view.py (MapCanvas.set_view_transform): Try to limit
8593 how small the scale can get. This still needs more testing.
8594
8595 * extensions/thuban/bmpdataset.cpp: New, but copied from GDAL.
8596 Provides a driver to output in .bmp format.
8597
8598 * extensions/thuban/cpl_mfile.cpp, extensions/thuban/cpl_mfile.h:
8599 New. Provides IO routines which write to memory, rather than a file.
8600
8601 * extensions/thuban/gdalwarp.cpp: New, but basically a direct copy
8602 of the gdalwarp utility provided in GDAL. Added function calls
8603 that can be accessed from python.
8604
8605 * Data/iceland_sample_raster.thuban: New. Sample file that uses
8606 a raster layer.
8607
8608 * Data/iceland/island.tfw, Data/iceland/island.tif: New. Raster
8609 layer image data.
8610
8611 * Doc/thuban.dtd: Added rasterlayer attribute definition.
8612
8613 * test/test_layer.py, test/test_load.py, test/test_save.py: Added
8614 tests associated with the raster layer code.
8615
8616 * test/test_transientdb.py
8617 (TestTransientTable.test_auto_transient_table_query): Added a test
8618 for using a Column object as the "right" parameter to a query.
8619
8620 2003-05-19 Frank Koormann <[email protected]>
8621
8622 * Thuban/version.py (get_changelog_date):
8623 Catch exceptions if ChangeLog does not exist.
8624
8625 * Thuban/UI/view.py (MapCanvas.Export): Bugfix
8626
8627 2003-05-19 Frank Koormann <[email protected]>
8628
8629 Extended version information for Thuban
8630
8631 * Thuban/version.py: New, version information for Thuban: Last
8632 modification date and last ChangeLog entry date.
8633
8634 * Thuban/UI/mainwindow.py (MainWindow.About()): Extended version
8635 information: Display Thuban, wxPython and Python version.
8636
8637 2003-05-16 Bernhard Herzog <[email protected]>
8638
8639 * Thuban/Model/save.py: Remove some unused imports including the
8640 __future__ import for nested_scopes as Thuban relies on Python 2.2
8641 now.
8642 (XMLWriter.encode): Remove the special case for a None argument.
8643 In the saver encode is always called with a string argument.
8644
8645 2003-05-16 Bernhard Herzog <[email protected]>
8646
8647 * Thuban/UI/__init__.py: Remove the work-around for the locale bug
8648 in wxPython (at least when usinvg wxGTK) prior to 2.4. The symptom
8649 of the bug was that e.g. float("1.2") would fail. Thuban now
8650 requires 2.4.x.
8651
8652 2003-05-16 Frank Koormann <[email protected]>
8653
8654 Printing enhancement and WMF export (under Win32)
8655
8656 * Thuban/UI/renderer.py (ExportRenderer): New, derived from
8657 ScreenRenderer. Renders Map, Legend and Scalebar for export.
8658 (PrinterRenderer): New, derived from ExportRenderer. Replaces the old
8659 PrintRender.
8660
8661 * Thuban/UI/view.py (MapPrintout.__init__): Enhanced parameter set
8662 to fullfil information needed for PrinterRenderer.
8663 (MapCanvas.Export): New. Export Map (currently only to WMF on Win32).
8664 (MapCanvas.Print): Adapted to new MapPrintout.
8665 (OutputTransform): General calculations to transform from canvas
8666 coordinates to export/printing devices.
8667
8668 * Thuban/UI/mainwindow.py (MainWindow.ExportMap()): New. Added also
8669 new method_command to call ExportMap, with platform dependency (only
8670 __WXMSW__)
8671
8672 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Position and Size
8673 of scalebar drawing area as new parameters.
8674
8675 * Thuban/Model/scalebar.py (roundInterval): round long instead of int
8676
8677 * Thuban/UI/legend.py (ScalebarBitmap.__SetScale):
8678 Update to extended scalebar.DrawScalebar header.
8679
8680 * test/test_export.py: New, test Thuban.UI.view.OutputTransform()
8681
8682 * test/test_scalebar.py: Made test executable as standalone.
8683
8684 2003-05-16 Bernhard Herzog <[email protected]>
8685
8686 * Thuban/Model/table.py (Table): Remove this compatibility alias
8687 for DBFTable.
8688
8689 * test/test_table.py: Import DBFTable as Table because that alias
8690 doesn't exist anymore.
8691
8692 * Thuban/UI/classgen.py: Remove some unused imports
8693
8694 2003-05-14 Jonathan Coles <[email protected]>
8695
8696 * Thuban/Model/classgen.py (ClassGenerator.GenSingletonsFromList):
8697 Fix docstring.
8698 (ClassGenerator.GenUniformDistribution): Fix spelling of method name.
8699 (ClassGenerator.GenQuantiles): Use the left/right brackets and min/max
8700 values of the supplied range to determine the beginning and end
8701 bounds of the generated classes.
8702
8703 * Thuban/Model/range.py (Range.number_re): Now accepts floats that
8704 do not have a leading 0 (.5 is now accepted as well as 0.5).
8705
8706 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Fix name of method
8707 call to ClassGenerator.GenUniformDistribution.
8708
8709 * Thuban/UI/projdialog.py (ProjFrame.__do_layout): Fix Windows
8710 layout bug with the 'Projection' label.
8711
8712 * test/support.py (FloatTestCase): New. Needed for the Range tests.
8713
8714 * test/test_range.py: New. Imported from SciParam.
8715
8716 2003-05-12 Jonathan Coles <[email protected]>
8717
8718 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Replace call
8719 to table.UniqueValues() with calls that retrieve all the values
8720 from the table. This will need to be replaced by a method on table
8721 which can simply return the list (perhaps more efficiently).
8722
8723 2003-05-12 Jonathan Coles <[email protected]>
8724
8725 The return value of ClassGenerator.CalculateQuantiles has changed.
8726 Refer to the documentation for details.
8727
8728 * test/test_classgen.py: Modified Quantile tests to use the
8729 new return values.
8730
8731 * Thuban/Model/classgen.py
8732 (ClassGenerator.GenQuantiles): Add comments describing the parameters,
8733 use new return values from CalculateQuantiles to produce the correct
8734 range bounds in the Classification.
8735 (ClassGenerator.CalculateQuantiles): Add more comments describing
8736 the return values and parameters. Make minor adjustments to improve
8737 the legibility of the code. Fix problem with adjusted not being set
8738 in most cases.
8739
8740 2003-05-12 Frank Koormann <[email protected]>
8741
8742 * Thuban/Model/save.py (XMLWriter.encode()): Explicite call to unicode
8743 and latin1. Fixes #1851 finally.
8744
8745 2003-05-09 Jonathan Coles <[email protected]>
8746
8747 * test/test_classgen.py: New. Tests the Quantile algorithm.
8748
8749 * Thuban/Model/classgen.py (ClassGenerator.CalculateQuantiles):
8750 Clean up debugging statement, add comments, fix a small bug in the
8751 returned adjusted percentiles.
8752
8753 2003-05-09 Jonathan Coles <[email protected]>
8754
8755 Introduces Range class from SciParam into the ClassGroupRange class,
8756 and such ranges can now be saved and loaded from disk.
8757
8758 Quantiles are now available in the Classification Generator.
8759
8760 Initial support for building Queries on a table. Doesn't do anything
8761 but run some tests.
8762
8763 * Thuban/Model/classification.py: Explicit imports.
8764 (ClassGroupRange): Use the Range class to store the underlying
8765 range information. The interface remains the same, except for
8766 GetRange(), and you can also supply a Range object as the min
8767 parameter to SetRange or __init__.
8768
8769 * Thuban/Model/load.py (XMLReader.encode): New. Encodes the given
8770 string appropriately for use in Thuban. Fixes RTbug #1851.
8771 (SessionLoader.end_projection): Handle the context of the
8772 projection tag a bit better by looking at what objects are not
8773 None. There was an assumption that a projection tag for a map
8774 could occur before any layers.
8775 (SessionLoader.start_clrange): Provide backward compatibility for
8776 reading min/max values as well as the new range parameter.
8777
8778 * Thuban/Model/map.py: Explicit imports.
8779
8780 * Thuban/Model/resource.py: Import _.
8781 (ProjFileSaver.write): write header using projfile.dtd.
8782
8783 * Thuban/Model/save.py: Explicit imports.
8784 (XMLWriter.encode): New. Encode the given string from a format
8785 used by Thuban into UTF-8. Fixes RTbug #1851.
8786
8787 * Thuban/UI/classgen.py: Explicit imports.
8788 (ClassGenDialog.__init__): Clean up the code and add support
8789 for Quantiles.
8790 (ClassGenDialog.OnOK): Add support for Quantiles.
8791 (GenQuantilesPanel): New. Input panel for Quantiles.
8792 (ClassGenerator, CustomRamp, MonochromaticRamp, GreyRamp, RedRamp,
8793 GreenRamp, BlueRamp, HotToColdRamp): Move to Thuban/Model/classgen.py
8794
8795 * Thuban/Model/classgen.py: New. Contains all the classes named above.
8796
8797 * Thuban/UI/classifier.py: Explicit imports.
8798 (ClassTable.GetValueAsCust, ClassTable.__ParseInput,
8799 ClassTable.SetValueAsCustom): Reworked to use new Range class.
8800
8801 * Thuban/UI/legend.py: Explicit imports.
8802
8803 * Thuban/UI/mainwindow.py: Add support for the Join Dialog. Added
8804 a Table menu and associated method calls.
8805 (MainWindow.choose_color): Removed. No longer needed.
8806
8807 * Thuban/UI/projdialog.py (ProjFrame.__VerifyButtons): Save button
8808 should be disabled if no projection is selected in the available
8809 list.
8810
8811 * Thuban/UI/renderer.py: Explicit imports.
8812
8813 * Thuban/UI/tableview.py (TableGrid.OnRangeSelect): Fix some issues
8814 with correctly selecting the rows and issuing the right events.
8815 Be sure to call Skip() to allow the grid to do some of its own
8816 handling which allows the rows to actually be selected.
8817 (LayerTableGrid.select_shapes): Rename from select_shape. Supports
8818 selecting multiple shapes.
8819 (LayerTableFrame): Support for building Queries.
8820 (LayerTableFrame.select_shapes): Allow multiple shapes to be selected.
8821
8822 * Thuban/UI/tree.py: Explicit imports.
8823
8824 * Thuban/UI/view.py (MapCanvas): Delegate "SelectedShapes" so the
8825 table view can call it.
8826
8827 * test/test_classification.py: Explicit imports.
8828 (TestClassification.test_ClassGroupRange): Fix test for new
8829 Range class.
8830
8831 * Doc/thuban.dtd: Add range parameter for clrange.
8832
8833 * Thuban/Model/range.py: Taken from SciParam. Used as the underlying
8834 object in ClassGroupRange, and also uesd for inputting ranges in
8835 the classifer table and elsewhere.
8836
8837 * Thuban/UI/join.py: New. Initial Join dialog. No real functionality
8838 yet.
8839
8840 2003-05-09 Frank Koormann <[email protected]>
8841
8842 * Thuban/UI/scalebar.py (DrawScaleBar): Draw only if interval > 0.0.
8843
8844 2003-05-08 Frank Koormann <[email protected]>
8845
8846 Coding style updates
8847
8848 * test/test_scalebar.py: Replaced tab indentation by spaces.
8849
8850 * Thuban/UI/scalebar.py: Explicit imports.
8851
8852 2003-05-08 Frank Koormann <[email protected]>
8853
8854 * Thuban/UI/scalebar.py
8855 (ScaleBar.DrawScalebar): Format string bug fixed.
8856
8857 2003-05-08 Frank Koormann <[email protected]>
8858
8859 Reorganization of scalebar component (no wx in Thuban/Model)
8860
8861 * Thuban/Model/scalebar.py: Rendering moved to Thuban/UI/scalebar.py
8862 (deriveInterval):
8863 Calculate scalebar interval and unit which fits in width for scale.
8864 (roundInterval): Round float.
8865
8866 * Thuban/UI/scalebar.py (ScaleBar): Scalebar rendering
8867
8868 * test/test_scalebar.py: Test for Thuban/Model/scalebar.py methods.
8869
8870 * Thuban/UI/legend.py: Import Thuban.UI.scalebar
8871
8872 2003-05-08 Frank Koormann <[email protected]>
8873
8874 * Thuban/UI/legend.py (ScalebarBitmap.SetCanvas):
8875 Initialize ScaleBar with canvas.map
8876
8877 * Thuban/Model/scalebar.py (ScaleBar.roundInterval()): New,
8878 round intervals to display smarter lengths
8879 (ScaleBar.DrawScalebar): Draw Scalebar only if the map contains a
8880 layer. If the maps has no projection applied grey the scalebar.
8881
8882 2003-05-07 Frank Koormann <[email protected]>
8883
8884 Basic Scalebar features added.
8885
8886 * Thuban/Model/scalebar.py (ScaleBar): New, scalebar rendering.
8887
8888 * Thuban/UI/legend.py (LegendPanel): Added scalebar bitmap
8889 (ScaleBarBitmap): New, links the scalebar bitmap with view messages
8890 and the renderer.
8891
8892 * Thuban/UI/view.py (MapCanvas.set_view_transform): Issue SCALE_CHANGED.
8893
8894 * Thuban/UI/messages.py: SCALE_CHANGED added.
8895
8896 2003-05-07 Bernhard Herzog <[email protected]>
8897
8898 * Thuban/Model/session.py (Session.__init__): New instance
8899 variable shapestores to hold a list of all open shapestore objects
8900 (Session.ShapeStores): New. Accessor method for the shapestores
8901 list.
8902 (Session._add_shapestore, Session._clean_weak_store_refs): New.
8903 Internal methods to maintain the shapestores list.
8904 (Session.Tables): New. Return all tables open in the session.
8905 (Session.OpenShapefile): Insert the new ShapeStore into the
8906 shapestores list.
8907
8908 * test/test_session.py (TestSessionSimple.test_initial_state): Add
8909 tests for ShapeStores and Tables
8910 (TestSessionWithContent.test_shape_stores)
8911 (TestSessionWithContent.test_tables): New. Test cases for
8912 ShapeStores and Tables
8913
8914 2003-05-07 Bernhard Herzog <[email protected]>
8915
8916 * Thuban/Model/transientdb.py (TransientTableBase.ReadRowAsDict):
8917 Add comments about the optimizations used.
8918 (AutoTransientTable.ReadValue, TransientTableBase.ReadValue): New.
8919 Implement the ReadValue table interface method.
8920
8921 * test/test_transientdb.py
8922 (TestTransientTable.run_iceland_political_tests)
8923 (TestTransientTable.test_transient_joined_table): Add tests for
8924 ReadValue
8925
8926 2003-05-07 Frank Koormann <[email protected]>
8927
8928 * Resources/Bitmaps/fulllayerextent.xpm,
8929 Resources/Bitmaps/fullselextent.xpm: Replaced the place holders with
8930 new icons.
8931
8932 2003-05-06 Bernhard Herzog <[email protected]>
8933
8934 * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
8935 New. Simply delegate to the transient table's version.
8936
8937 * test/test_transientdb.py
8938 (TestTransientTable.test_auto_transient_table_query): New. Test
8939 case for AutoTransientTable's SimpleQuery
8940
8941 2003-05-06 Bernhard Herzog <[email protected]>
8942
8943 * Thuban/Model/transientdb.py (TransientTableBase.SimpleQuery):
8944 Implement a simple query method for the query dialog
8945 (TransientTableBase.create): Add an INTEGER PRIMARY KEY that holds
8946 the row index or shapeid.
8947 (TransientTable.create): Insert the right value of the row index
8948 (TransientJoinedTable.create): Copy the row index of the left
8949 table to the joined result table
8950
8951 * test/test_transientdb.py
8952 (TestTransientTable.test_transient_table_read_twice): Fix
8953 doc-string
8954 (TestTransientTable.test_transient_table_query): New. Test for the
8955 SimpleQuery method
8956
8957 2003-05-06 Bernhard Herzog <[email protected]>
8958
8959 Convert all table users to use the new table interface. This only
8960 covers Thuban itself, not GREAT-ER or other applications built on
8961 Thuban yet, so the compatibility interface stays in place for the
8962 time being but it now issues DeprecationWarnings.
8963
8964 Finally, the new Table interface has a new method, HasColumn.
8965
8966 * Thuban/Model/table.py (OldTableInterfaceMixin): All methods
8967 issue deprecation warnings when they're. The warnings refer to the
8968 caller of the method.
8969 (OldTableInterfaceMixin.__deprecation_warning): New. Helper method
8970 for the deprecation warnings
8971
8972 * test/test_table.py: Ignore the deprecation warnings for the old
8973 table in the tests in this module. The purpose of the tests is to
8974 test the old interface, after all.
8975
8976 * test/test_transientdb.py
8977 (TestTransientTable.run_iceland_political_tests): Use the
8978 constants for the types. Add a test for HasColumn
8979 (TestTransientTable.test_transient_joined_table): Adapt to new
8980 table interface. Add a test for HasColumn
8981 (TestTransientTable.test_transient_table_read_twice): Adapt to new
8982 table interface
8983
8984 * Thuban/UI/tableview.py (DataTable.SetTable, DataTable.GetValue):
8985 Adapt to new table interface
8986
8987 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Adapt to
8988 new table interface
8989
8990 * Thuban/UI/controls.py (RecordListCtrl.fill_list)
8991 (RecordTable.SetTable): Adapt to new table interface
8992
8993 * Thuban/UI/classifier.py (Classifier.__init__)
8994 (Classifier.__init__): Adapt to new table interface
8995
8996 * Thuban/UI/classgen.py (ClassGenDialog.__init__)
8997 (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve): Adapt
8998 to new table interface
8999
9000 * Thuban/Model/transientdb.py (TransientTableBase.HasColumn)
9001 (AutoTransientTable.HasColumn): Implement the new table interface
9002 method
9003 (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ValueRange)
9004 (AutoTransientTable.UniqueValues): Adapt to new table interface
9005
9006 * Thuban/Model/layer.py (Layer.SetShapeStore, Layer.GetFieldType):
9007 Adapt to new table interface
9008
9009 * test/test_layer.py (TestLayer.open_shapefile): Helper method to
9010 simplify opening shapefiles a bit easier.
9011 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
9012 (TestLayer.test_point_layer): Use the new helper method
9013 (TestLayer.test_get_field_type): New. Test for the GetFieldType
9014 method
9015
9016 * test/test_dbf_table.py (TestDBFTable.test_has_column): Test for
9017 the new table method
9018
9019 * test/test_memory_table.py (TestMemoryTable.test_has_column):
9020 Test for the new table method HasColumn
9021
9022 2003-05-06 Jonathan Coles <[email protected]>
9023
9024 Addresses the "Selection Extent" wish of RTbug #1787.
9025
9026 * Resources/Bitmaps/fulllayerextent.xpm,
9027 Resources/Bitmaps/fullselextent.xpm: Bitmaps for layer and selection
9028 extent. These are just place holders for the real bitmaps.
9029
9030 * Thuban/Model/layer.py (Shape): Since a Shape is immutable only
9031 calculate the bounding box once (the first time compute_bbox() is
9032 called).
9033 (Layer.ShapesBoundingBox): New. Given a list of shape ids, return
9034 the bounding box for the shapes in lat/long coordinates.
9035
9036 * Thuban/UI/mainwindow.py: Added new "Full selection extent" menu
9037 option.
9038 (MainWindow.has_selected_shapes): New. Returns true if there are
9039 any selected shapes.
9040 (MainWindow.FullSelectionExtent): New. Calls
9041 MapCanvas.FitSelectedToWindow() when the user selects the menu option.
9042 (_has_selected_shapes): New. Returns true if there are any
9043 selected shapes.
9044
9045 * Thuban/UI/selection.py (Selection.HasSelectedShapes): New. Returns
9046 true if there are any selected shapes.
9047
9048 * Thuban/UI/view.py (MapCanvas): Added delegated method
9049 HasSelectedShapes.
9050 (MapCanvas.FitSelectedToWindow): New. Centers and scales any selected
9051 shapes on the canvas using the map projection (if any).
9052
9053 * test/test_layer.py (TestLayer.test_arc_layer): Add some tests
9054 for Layer.ShapesBoundingBox().
9055
9056 2003-05-06 Bernhard Herzog <[email protected]>
9057
9058 * Resources/Projections/defaults.proj: Fix spelling of Mercator
9059
9060 2003-05-05 Jonathan Coles <[email protected]>
9061
9062 Addresses the "Full Layer Extent" wish of RTbug #1787.
9063
9064 * Resources/Projections/defaults.proj: Added UK National Grid.
9065
9066 * Thuban/UI/mainwindow.py: Added new "Full layer extent" menu option.
9067 (MainWindow.FullLayerExtent): New. Calls MapCanvas.FitLayerToWindow()
9068 when the user selects the menu option.
9069
9070 * Thuban/UI/view.py (MapCanvas.FitLayerToWindow): New. Centers and
9071 scales the given layer on the canvas using the map projection.
9072
9073 2003-05-05 Bernhard Herzog <[email protected]>
9074
9075 Convert the table implementations to a new table interface. All
9076 tables use a common mixin class to provide backwards compatibility
9077 until all table users have been updated.
9078
9079 * Thuban/Model/table.py (OldTableInterfaceMixin): Mixin class to
9080 provide backwards compatibility for table classes implementing the
9081 new interface
9082 (DBFTable, MemoryTable): Implement the new table interface. Use
9083 OldTableInterfaceMixin as base for compatibility
9084 (DBFColumn, MemoryColumn): New. Column description for DBFTable
9085 and MemoryTable resp.
9086
9087 * test/test_dbf_table.py: New. Test cases for the DBFTable with
9088 the new table interface.
9089
9090 * test/test_memory_table.py: New. Test cases for the MemoryTable
9091 with the new table interface.
9092
9093 * test/test_table.py: Document the all tests in this file as only
9094 for backwards compatibility. The equivalent tests for the new
9095 interface are in test_memory_table.py and test_dbf_table.py
9096 (MemoryTableTest.test_read): field_info should be returning tuples
9097 with four items
9098 (MemoryTableTest.test_write): Make doc-string a more precise.
9099
9100 * Thuban/Model/transientdb.py (TransientTableBase): Convert to new
9101 table interface. Derive from from OldTableInterfaceMixin for
9102 compatibility.
9103 (TransientTableBase.create): New intance variable column_map to
9104 map from names and indices to column objects
9105 (TransientTable.create): Use the new table interface of the input
9106 table
9107 (AutoTransientTable): Convert to new table interface. Derive from
9108 from OldTableInterfaceMixin for compatibility.
9109 (AutoTransientTable.write_record): Removed. It's not implemented
9110 yet and we still have to decide how to handle writing with the new
9111 table and data framework.
9112
9113 * test/test_transientdb.py
9114 (TestTransientTable.run_iceland_political_tests)
9115 (TestTransientTable.test_transient_joined_table): Use the new
9116 table interface
9117
9118 2003-05-05 Jonathan Coles <[email protected]>
9119
9120 This is namely a collection of UI updates to improve user interactivity.
9121 Tabbing between controls now exists and you can use ESC to close dialog
9122 boxes; ENTER will active the default button.
9123
9124 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Rearrange the
9125 order that the controls are created so that tabbing works correctly.
9126 (ClassGenDialog.OnOK): Renamed from _OnGenerate() so that the
9127 wxDialog can handle the default button correctly.
9128 (ClassGenDialog.OnCancel): Renamed from _OnCloseBtn() for the
9129 same reasons as for OnOK.
9130 (GenUniformPanel._OnRetrieve): Call wxBeginBusyCursor/wxEndBusyCursor
9131 when we ask the table for the maximum/minimum values of a field
9132 which could take a very long time.
9133
9134 * Thuban/UI/classifier.py (Classifier.__init__): Rearrange the
9135 order that the controls are created so that tabbing works correctly.
9136 (SelectPropertiesDialog.__init__): Rearrange the order that the
9137 controls are created so that tabbing works correctly.
9138
9139 * Thuban/UI/dialogs.py: Copied NonModalDialog box and changed it
9140 to derive from a wxDialog but behave like the original implementation
9141 which was derived from a wxFrame. wxDialog provides useful key
9142 handling functionality like ESC calling OnCancel and ENTER calling
9143 OnOK which is lost with wxFrame.
9144
9145 * Thuban/UI/mainwindow.py: Add "..." to menu items that will open
9146 new dialogs.
9147
9148 * Thuban/UI/projdialog.py (ProjFrame.__init__): Rearrange the
9149 order that the controls are created so that tabbing works correctly.
9150 (ProjFrame.OnApply): Renamed from _OnTry() to use wxDialog behaviour.
9151 (ProjFrame.OnOK): Renamed from _OnOK() to use wxDialog behaviour.
9152 (ProjFrame.OnCancel): Renamed from _OnClose() to use wxDialog behaviour.
9153 (ProjPanel.__init__): Add "Airy" to the list of ellipsoids so we
9154 can provide the "UK National Grid" as a default projection.
9155 (UTMPanel.__init__): Rearrange the order that the controls are
9156 created so that tabbing works correctly.
9157
9158 2003-05-05 Bernhard Herzog <[email protected]>
9159
9160 * extensions/thuban/wxproj.cpp: Fix some of the comments.
9161 (project_point): If a map projection but no layer projection is
9162 given, convert degrees to radians before applying the map
9163 projection.
9164
9165 * Thuban/UI/tableview.py (TableGrid.disallow_messages)
9166 (TableGrid.allow_messages): New methods to make it possible to
9167 inhibit message sending.
9168 (TableGrid.issue): Only send the message if not inhibited.
9169 (LayerTableGrid.select_shape): Use the new methods to make sure
9170 that no ROW_SELECTED message is sent while we're updating the
9171 selected rows to match the selected shapes.
9172
9173 2003-05-02 Jan-Oliver Wagner <[email protected]>
9174
9175 Implementation of MemoryTable.
9176
9177 * Thuban/Model/table.py (MemoryTable): New. Quite simple table
9178 implementation that operates on a list of tuples. All of the data
9179 are kept in the memory.
9180
9181 * test/test_table.py (MemoryTableTest): New.
9182
9183 * test/test_transientdb.py (SimpleTable): Removed.
9184 (TestTransientTable.test_transient_joined_table,
9185 (TestTransientTable.test_transient_table_read_twice): Replaced
9186 SimpleTable by MemoryTable.
9187
9188 2003-04-30 Jonathan Coles <[email protected]>
9189
9190 * Data/iceland_sample.thuban: Now contains correct projections
9191 for each of the layers.
9192
9193 * Resources/Projections/defaults.proj: Geographic projection
9194 contains unit conversion parameter.
9195
9196 2003-04-30 Jonathan Coles <[email protected]>
9197
9198 The most important part of this putback is the projection changes.
9199 It should now be possible to specify the projection that a layer
9200 is in and then specify a different projection for the map. The
9201 projection dialog has an extra parameter for a geographic projection
9202 which lets the user select if the input is in degrees or radians.
9203
9204 * Thuban/Model/layer.py (Layer.ShapesInRegion): Fix docstring
9205 to say that the parameter is a tuple of unprojected
9206 points (which is what the callers to this method were assuming).
9207 Also, since the points are unprojected we need to projected them.
9208
9209 * Thuban/UI/legend.py (LegendTree.MoveCurrentItemUp,
9210 LegendTree.MoveCurrentItemDown): If the layer or any of the layer's
9211 groups are selected, move the layer up/down. Fixes RTbug #1833.
9212
9213 * Thuban/UI/mainwindow.py: Move menu item map_rename up.
9214
9215 * Thuban/UI/projdialog.py (ProjFrame._OnSave): Add missing
9216 parameter in call to SetClientData.
9217 (GeoPanel): Add support for selecting the units that the
9218 source data is in (Radians or Degrees).
9219
9220 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Optimize
9221 the rendering loop by reducing the number of if's, removing the
9222 unnecessary try/except block, and checking if the old group
9223 is the same as the new one (which happens a lot if there is
9224 no classification, or lots of shapes are in the same group).
9225
9226 * Thuban/UI/view.py (MapCanvas.OnPaint): Add a try/except block
9227 around the redraw routine to try to catch problems that the user
9228 may create by selecting invalid projections for the data set and
9229 map. Clears the display if there are any problems and prints the
9230 error.
9231 (MapCanvas.do_redraw): Use DC.Clear() instead of drawing a filled
9232 rectangle.
9233
9234 * extensions/thuban/wxproj.cpp (project_point): First invert the
9235 supplied point (which should be in projected coordinates) using
9236 the layer's projection and then project the point using the
9237 map's projection.
9238 (project_points): Use project_point() to project each point.
9239
9240 2003-04-30 Jan-Oliver Wagner <[email protected]>
9241
9242 * Thuban/Model/layer.py (Layer.SetShapeStore): Fixed a bug:
9243 don't set the Classification to None if the classfication field
9244 is None (ie only a DEFAULT).
9245
9246 2003-04-30 Bernhard Herzog <[email protected]>
9247
9248 * Thuban/UI/view.py: Fix some typos.
9249
9250 * Thuban/UI/mainwindow.py (MainWindow.identify_view_on_demand): Do
9251 not pop up the dialog if the selection becomes empty (this could
9252 happen if e.g. a new selection is opened while the identify tool
9253 is active and dialog had been closed)
9254
9255 2003-04-30 Bernhard Herzog <[email protected]>
9256
9257 * Thuban/Model/transientdb.py (TransientTableBase.__init__): New
9258 instance variable read_record_last_result
9259 (TransientTableBase.read_record): Make sure reading the same
9260 record twice works. The implementation uses the new instance
9261 variable read_record_last_result
9262
9263 * test/test_transientdb.py
9264 (TestTransientTable.test_transient_table_read_twice): New test
9265 case for the above bug-fix.
9266
9267 2003-04-29 Jonathan Coles <[email protected]>
9268
9269 * Thuban/common.py: Removed. No longer needed Str2Num. RTbug #1832.
9270
9271 * Thuban/UI/classgen.py: Remove all uses of Str2Num.
9272
9273 * Thuban/UI/classifier.py: Remove all uses of Str2Num.
9274 (ClassTable.SetValueAsCustom): Rename keyword argument in
9275 ClassGroup* constructors to match argument name.
9276
9277 2003-04-29 Bernhard Herzog <[email protected]>
9278
9279 * Thuban/Model/session.py (Session.Destroy): Explicitly close the
9280 transient DB if it exists to make sure it doesn't leave a journal
9281 file in the temp directory.
9282
9283 * Thuban/Model/transientdb.py (TransientDatabase.close): Set
9284 self.conn to None after closing the connection to make sure it's
9285 not closed twice
9286
9287 2003-04-29 Jonathan Coles <[email protected]>
9288
9289 Add a visible parameter in the layer XML tag. The default value is
9290 "true". If anything other than "false" is specified we also assume
9291 "true". Addresses RTbug #1025.
9292
9293 * Doc/thuban.dtd: Add visible parameter to a layer.
9294
9295 * Thuban/Model/layer.py (BaseLayer.__init__): Change default value
9296 of visible from 1 to True.
9297 (Layer.__init__): Change default value of visible from 1 to True.
9298
9299 * Thuban/Model/load.py (SessionLoader.start_layer): Read visible
9300 parameter.
9301
9302 * Thuban/Model/save.py (SessionSaver.write_layer): Save visible
9303 parameter.
9304
9305 * test/test_load.py: Add new test data contents_test_visible.
9306 (LoadSessionTest.setUp): save test data.
9307 (LoadSessionTest.testLayerVisibility): Test if the visible flag
9308 is loaded correctly.
9309
9310 * test/test_save.py (SaveSessionTest.testSingleLayer): Add test
9311 for saving an invisible layer.
9312
9313 2003-04-29 Jonathan Coles <[email protected]>
9314
9315 * Thuban/UI/mainwindow.py (MainWindow.SetMap): Look up the
9316 legend dialog box and tell it to change its map to the one
9317 supplied to SetMap(). Fixes RTbug #1770.
9318
9319 2003-04-29 Bernhard Herzog <[email protected]>
9320
9321 Next step of table implementation. Introduce a transient database
9322 using SQLite that some of the data is copied to on demand. This
9323 allows us to do joins and other operations that require an index
9324 for good performance with reasonable efficiency. Thuban now needs
9325 SQLite 2.8.0 and pysqlite 0.4.1. Older versions may work but I
9326 haven't tested that.
9327
9328 * Thuban/Model/transientdb.py: New. Transient database
9329 implementation.
9330
9331 * test/test_transientdb.py: New. Tests for the transient DB
9332 classes.
9333
9334 * Thuban/Model/session.py (AutoRemoveFile, AutoRemoveDir): New
9335 classes to help automatically remove temporary files and
9336 directories.
9337 (Session.__init__): New instance variables temp_dir for the
9338 temporary directory and transient_db for the SQLite database
9339 (Session.temp_directory): New. Create a temporary directory if not
9340 yet done and return its name. Use AutoRemoveDir to have it
9341 automatically deleted
9342 (Session.TransientDB): Instantiate the transient database if not
9343 done yet and return it.
9344
9345 * Thuban/Model/data.py (ShapefileStore.__init__): Use an
9346 AutoTransientTable so that data is copied to the transient DB on
9347 demand.
9348 (SimpleStore): New class that simply combines a table and a
9349 shapefile
9350
9351 * Thuban/Model/table.py (Table, DBFTable): Rename Table into
9352 DBFTable and update its doc-string to reflect the fact that this
9353 is only the table interface to a DBF file. Table is now an alias
9354 for DBFTable for temporary backwards compatibility.
9355
9356 * Thuban/UI/application.py (ThubanApplication.OnExit): Make sure
9357 the last reference to the session goes away so that the temporary
9358 files are removed properly.
9359
9360 * test/test_load.py (LoadSessionTest.tearDown): Remove the
9361 reference to the session to make sure the temporary files are
9362 removed.
9363
9364 2003-04-29 Bernhard Herzog <[email protected]>
9365
9366 * Thuban/Model/load.py (XMLReader.__init__, XMLReader.read): Turn
9367 the __parser instance variable into a normal local variable in
9368 read. It's only used there and read will never be called more than
9369 once. Plus it introduces a reference cycle that keeps can keep the
9370 session object alive for a long time.
9371
9372 2003-04-29 Jonathan Coles <[email protected]>
9373
9374 * Thuban/Model/proj.py (Projection): Removed Set*() methods to make
9375 Projection an immutable item. Fixes RTbug #1825.
9376 (Projection.__init__): Initialize instance variables here.
9377 (ProjFile.Replace): New. Replace the given projection object with
9378 the new projection object. This solves the problem of needing the
9379 mutator Projection.SetProjection() in the ProjFrame class and
9380 allows a projection to change parameters without changing its
9381 location in the file.
9382
9383 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs): Dialog should
9384 be of type wxSAVE and should verify overwriting a file.
9385
9386 * Thuban/UI/projdialog.py (ProjFrame._OnSave): Use the new
9387 ProjFile.Replace() method instead of the mutator
9388 Projection.SetProjection(). Also requires that we reassign the
9389 client data to the new projection.
9390
9391 * test/test_proj.py (TestProjection.test): Test GetName() and
9392 GetAllParameters()
9393 (TestProjFile.test): Remove tests for Set*() methods. Add tests
9394 for Replace().
9395
9396 2003-04-25 Jonathan Coles <[email protected]>
9397
9398 * Thuban/Model/save.py (SessionSaver.write_projection): Make sure
9399 to save the name of the projection.
9400
9401 * test/test_save.py (SaveSessionTest.testLayerProjection): New
9402 test to verify layer projections are saved correctly.
9403
9404 2003-04-25 Jonathan Coles <[email protected]>
9405
9406 * Thuban/Model/proj.py (Projection.SetName): Set the name
9407 to "Unknown" if name is None.
9408 (Projection.SetAllParameters): New. Set the projection's
9409 parameter list to the one supplied.
9410 (Projection.SetProjection): New. Set the projection's
9411 properties to those of the supplied Projection.
9412
9413 * Thuban/UI/mainwindow.py (MainWindow.MapProjection): Set
9414 the dialog title to include the map's title.
9415 (MainWindow.LayerProjection): Set the dialog title to include
9416 the layer's title.
9417
9418 * Thuban/UI/projdialog.py (ProjFrame.__ShowError): Consolidate
9419 error dialogs into a single method call.
9420 (ProjFrame.__VerifyButtons): Add more states to check.
9421 (ProjFrame.__GetProjection): Return the current state of an
9422 edited projection or None.
9423 (ProjFrame.__FillAvailList): Remove checks for states that
9424 shouldn't exist.
9425 (ProjFrame._OnNew): Clear all selected items and supply
9426 a projection panel if necessary.
9427
9428 * test/test_proj.py (TestProjFile.test): Add tests for
9429 ProjFile.SetAllParameters, ProjFile.SetProjection,
9430 ProjFile.SetName.
9431
9432 2003-04-25 Jonathan Coles <[email protected]>
9433
9434 * Thuban/UI/projdialog.py (ProjFrame.__FillAvailList): Now
9435 takes an optional argument to select the current projection.
9436 This does not guarantee that the item is visible due to
9437 limited wxWindows functionality. Fixes RTBug #1821.
9438
9439 2003-04-25 Jonathan Coles <[email protected]>
9440
9441 * Thuban/Model/load.py (SessionLoader.start_projection): Remember
9442 the projection name and use it when constructing the Projection
9443 object.
9444
9445 * Thuban/Model/proj.py (Projection.__init__): Change the default
9446 value for 'name' to None and then test if name is equal to None
9447 in the body of the constructor. This way the caller doesn't have to
9448 know what the default value should be. Namely, useful in load.py
9449 where we have to pick a default value if the 'name' parameter
9450 doesn't exist in the XML file.
9451
9452 * test/test_load.py (LoadSessionTest.testLayerProjection): New.
9453 Tests a file where a layer has a projection.
9454
9455 2003-04-25 Jonathan Coles <[email protected]>
9456
9457 * Thuban/Model/layer.py (Layer.TreeInfo): Add an item to the
9458 tree for projection information.
9459
9460 * Thuban/Model/load.py (XMLReader.GetFilename): Renamed from
9461 XMLReader.GetFileName.
9462 (SessionLoader): Added support for loading projection tags that
9463 appear inside a layer.
9464
9465 * Thuban/Model/proj.py (ProjFile): Document the class. Move
9466 back to using a list because the order of the projections in
9467 the file is important to maintain. Fixes RTbug #1817.
9468
9469 * Thuban/Model/resource.py: Rename calls to ProjFile.GetFileName
9470 to ProjFile.GetFilename.
9471
9472 * Thuban/Model/save.py (SessionSaver.write_layer): Save projection
9473 information.
9474
9475 * Thuban/UI/projdialog.py (ProjFrame._OnAddToList): Renamed from
9476 ProjFrame._OnSaveAs. Removed old dead code from previous
9477 implementation.
9478 (ProjFrame._OnExport): Add support for exporting more than one
9479 projection to a single file.
9480 (ProjFrame.__FillAvailList): use string formatting (% operator)
9481 to build strings that are (partly) translated. Fixes RTbug #1818.
9482
9483 * test/test_proj.py (TestProjFile.test): New. Tests the base ProjFile
9484 class.
9485
9486 2003-04-24 Bernhard Herzog <[email protected]>
9487
9488 * po/es.po: Updated Spanish translation by Daniel Calvelo Aros
9489
9490 * po/fr.po: New. French translation by Daniel Calvelo Aros
9491
9492 * Thuban/UI/projdialog.py (ProjFrame._OnSaveAs): Don't translate
9493 empty strings.
9494
9495 2003-04-24 Jonathan Coles <[email protected]>
9496
9497 * Thuban/Model/layer.py (Layer.GetProjection): New. Needed to
9498 implement the interface that the ProjFrame dialog expects.
9499
9500 * Thuban/Model/proj.py (Projection.SetName): New. Allows the
9501 name of the projection to be changed.
9502 (ProjFile): Use a dictionary instead of a list so that removing
9503 projections is easier and we are sure about uniqueness.
9504 (ProjFile.Remove): Remove the given projection object.
9505
9506 * Thuban/Model/resource.py (GetSystemProjFiles, GetUserProjFiles):
9507 Return a list with only one projection file instead of searching for
9508 any projection file. This simplifies many things if the user can
9509 only have one system file and one user file.
9510
9511 * Thuban/UI/classgen.py: Change all references to
9512 genCombo to genChoice.
9513
9514 * Thuban/UI/mainwindow.py: Add a Projection option under the
9515 layer menu.
9516 (MainWindow.LayerProjection): New. Open up a projection window
9517 for a layer.
9518
9519 * Thuban/UI/projdialog.py: Large changes to how the dialog is
9520 laid out. Use three panels instead of one. One for the list of
9521 projections, one for the edit controls, and one for the buttons.
9522 Fixed resizing problems so that the dialog resizes correctly
9523 when the projection panel changes. Added import/export, save, and
9524 new buttons/functionality.
9525
9526 2003-04-24 Bernhard Herzog <[email protected]>
9527
9528 First step towards table management. Introduce a simple data
9529 abstraction so that we replace the data a layer uses more easily
9530 in the next step.
9531
9532 * Thuban/Model/data.py: New file with a simple data abstraction
9533 that bundles shapefile and dbffile into one object.
9534
9535 * Thuban/Model/session.py (Session.OpenShapefile): New method to
9536 open shapefiles and return a shape store object
9537
9538 * Thuban/Model/layer.py (Layer.__init__): Pass the data as a store
9539 object instead of a shapefile filename. This introduces a new
9540 instance variable store holding the datastore. For intermediate
9541 backwards compatibility keep the old instance variables.
9542 (open_shapefile): Removed. No longer needed with the shape store.
9543 (Layer.SetShapeStore, Layer.ShapeStore): New methods to set and
9544 get the shape store used by a layer.
9545 (Layer.Destroy): No need to explicitly destroy the shapefile or
9546 table anymore.
9547
9548 * Thuban/UI/mainwindow.py (MainWindow.AddLayer)
9549 (MainWindow.AddLayer): Use the session's OpenShapefile method to
9550 open shapefiles
9551
9552 * Thuban/Model/load.py (ProcessSession.start_layer): Use the
9553 session's OpenShapefile method to open shapefiles
9554
9555 * test/test_classification.py
9556 (TestClassification.test_classification): Use the session's
9557 OpenShapefile method to open shapefiles and build the filename in
9558 a more platform independed way
9559
9560 * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
9561 Implement to have a session to use in the tests
9562 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
9563 (TestLayer.test_point_layer, TestLayer.test_empty_layer): Use the
9564 session's OpenShapefile method to open shapefiles
9565 (TestLayerLegend.setUp): Instantiate a session so that we can use
9566 it to open shapefiles.
9567 (TestLayerLegend.tearDown): Make sure that all references to
9568 layers and session are removed otherwise we may get a resource
9569 leak
9570
9571 * test/test_map.py (TestMapAddLayer.test_add_layer)
9572 (TestMapWithContents.setUp): Instantiate a session so that we can
9573 use it to open shapefiles.
9574 (TestMapWithContents.tearDown): Make sure that all references to
9575 layers, maps and sessions are removed otherwise we may get a
9576 resource leak
9577 ("__main__"): use support.run_tests() so that more info about
9578 uncollected garbage is printed
9579
9580 * test/test_save.py (SaveSessionTest.testSingleLayer): Use the
9581 session's OpenShapefile method to open shapefiles
9582 ("__main__"): use support.run_tests() so that more info about
9583 uncollected garbage is printed
9584
9585 * test/test_selection.py (TestSelection.tearDown): Make sure that
9586 all references to the session and the selection are removed
9587 otherwise we may get a resource leak
9588 (TestSelection.get_layer): Instantiate a session so that we can
9589 use it to open shapefiles.
9590 ("__main__"): use support.run_tests() so that more info about
9591 uncollected garbage is printed
9592
9593 * test/test_session.py (TestSessionBase.tearDown)
9594 (TestSessionWithContent.tearDown): Make sure that all references
9595 to the session and layers are removed otherwise we may get a
9596 resource leak
9597 (TestSessionWithContent.setUp): Use the session's OpenShapefile
9598 method to open shapefiles
9599
9600 2003-04-24 Jonathan Coles <[email protected]>
9601
9602 * Thuban/Model/load.py (XMLReader.read): Should have been checking
9603 if the file_or_filename object had the 'read' attribute.
9604
9605 2003-04-23 Jonathan Coles <[email protected]>
9606
9607 * Thuban/Model/resource.py: Fixes RTbug #1813.
9608 (ReadProjFile): Add documentation about which exceptions are raised.
9609 Always pass the exceptions up to the caller.
9610 (GetProjFiles): If the directory can't be read return an empty list.
9611 If any of the proj files can't be read skip that file and go
9612 on to the next one.
9613
9614 * test/test_proj.py: Added test cases to handle nonexistent files,
9615 unreadable files, and files that don't parse correctly.
9616
9617 2003-04-23 Jonathan Coles <[email protected]>
9618
9619 Projection dialog. Allows the user to select from a list
9620 of projection templates and optionally edit them and save new ones.
9621
9622 * Thuban/UI/projdialog.py (ProjFrame): New. Main dialog.
9623 (ProjPanel): Base class for projection specific panels.
9624 (TMPanel): Projection panel for Transverse Mercartor.
9625 (UTMPanel): Projection panel for Universal Transverse Mercartor.
9626 (LCCPanel): Projection panel for Lambert Conic Conformal.
9627 (GeoPanel): Projetion panel for Geographic Projection.
9628
9629 2003-04-23 Jonathan Coles <[email protected]>
9630
9631 * Thuban/Model/load.py (XMLReader): Renamed from XMLProcessor to
9632 promote symmetry. There now exists XMLReader and XMLWriter.
9633 (XMLReader.read): New. Call to read the given file descriptor or
9634 filename.
9635 (XMLReader.close): New. Make sure the file is closed.
9636 (XMLReader.GetFileName): New. Return just the file name that is being
9637 read from.
9638 (XMLReader.GetDirectory): New. Return just the directory of the file
9639 that is being read.
9640 (XMLReader.AddDispatchers): New. Take a dictionary which contains
9641 the names of functions to call as the XML tree is parsed.
9642 (XMLReader.startElementNS): Updated to use new dispatcher dictionary.
9643 (XMLReader.endElementNS): Updated to use new dispatcher dictionary.
9644 (SessionLoader): Removed class variables start_dispatcher and
9645 end_dispatcher since this functionality is now part of a class
9646 instance. Fixes RTbug #1808.
9647 (SessionLoader.__init__): Add dispatcher functions.
9648 (load_xmlfile): Code was moved into the XMLReader.read().
9649 (load_session): Use modified SessionLoader.
9650
9651 * Thuban/Model/map.py (Map.GetProjection): New. Returns the
9652 map's projection.
9653
9654 * Thuban/Model/proj.py (Projection.GetParameters): Renamed to
9655 GetAllParameters.
9656 (Projection.GetParameter): Returns the value for the given parameter.
9657
9658 * Thuban/Model/resource.py: Use XMLReader and XMLWriter.
9659 (GetProjFiles): Renamed from GetProjections. Now returns a list
9660 of ProjFile objects.
9661 (GetSystemProjFiles): Renamed from GetSuppliedProjections. Returns
9662 a list of ProjFile objects whose files are not user defined.
9663 (GetUserProjFiles): Renamed from GetUserProjections. Returns a
9664 list of ProjFile objects whose files are user defined.
9665 (ProjFileReader): Extend new XMLReader.
9666
9667 * Thuban/Model/save.py (XMLWriter): Renamed from XMLSaver to
9668 promote symmetry.
9669
9670 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Use a wxChoice
9671 control instead of a wxComboBox. wxChoice controls do not generate
9672 events as the uses highlights possible choices which fixes problems
9673 with resizing the dialog when the use selects an option.
9674
9675 * Thuban/UI/classifier.py (Classifier.__init__): Use a wxChoice
9676 control instead of a wxComboBox.
9677
9678 * Thuban/UI/mainwindow.py (MainWindow.Projection): Use new projection
9679 dialog.
9680
9681 * test/test_proj.py (TestProjection.test): New tests for GetParameter
9682 method.
9683
9684 2003-04-22 Bernhard Herzog <[email protected]>
9685
9686 * Thuban/UI/mainwindow.py: Remove some unused imports and global
9687 constants
9688
9689 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
9690 (IdentifyGridCtrl.selected_shape): Use table, not shapetable.
9691
9692 2003-04-17 Bernhard Herzog <[email protected]>
9693
9694 * Thuban/Model/layer.py: Don't import LAYER_LEGEND_CHANGED.
9695 (Layer): Update doc-string since LAYER_LEGEND_CHANGED is not used
9696 anymore.
9697 (Layer.BoundingBox, Layer.GetFieldType, Layer.NumShapes)
9698 (Layer.ShapeType, Layer.Shape): No need to call
9699 self.open_shapefile since it's always called in __init__
9700
9701 * Thuban/UI/application.py (ThubanApplication.MainLoop): Removed.
9702 In wxPython 2.4 there's no need to extend MainLoop anymore since
9703 wxPython itself makes sure OnExit is called.
9704
9705 2003-04-16 Jonathan Coles <[email protected]>
9706
9707 Initial putback of projection management code. Includes new
9708 classes to read and write projection files. The current load
9709 and save classes were abstracted a bit so they could be reused.
9710 The Projection class was extended to provide new methods and
9711 have a name.
9712
9713 * Thuban/Model/load.py (XMLProcessor): New. Contains all the
9714 general XML reading methods that were part of ProcessSession.
9715
9716 * Thuban/Model/proj.py (Projection.__init__): Accepts an optional
9717 name.
9718 (ProjFile): New. Represents a file that contains projection
9719 information.
9720
9721 * Thuban/Model/resource.py: New. Contains general utilities
9722 for read and writing projection files.
9723
9724 * Thuban/Model/save.py (XMLSaver): New. Contains all the
9725 general XML writing methods that were part of SessionSaver.
9726 (SessionSaver): Renamed from Saver.
9727
9728 * test/test_proj.py: New test cases for the projection
9729 file read and write functions.
9730
9731 2003-04-16 Jonathan Coles <[email protected]>
9732
9733 * Thuban/Model/classification.py: Use repr() around values
9734 in the ClassGroup*.__repr__() methods so it is clearer when
9735 a value is a string and when it is a number.
9736
9737 * test/test_load.py: Rework the classification test to test
9738 that we can load old files.
9739 (testLabels): Test a file where the groups have labels.
9740
9741 2003-04-16 Bernhard Herzog <[email protected]>
9742
9743 Safer implementation of the performance enhancements of the
9744 low-level renderer:
9745
9746 * extensions/thuban/wxproj.cpp (extract_projection)
9747 (extract_pointer): Rename extract_projection to extract_pointer
9748 and redefine its purpose to return the pointer stored in a CObject
9749 returned by the object's cobject method. Update all callers.
9750 (s_draw_info, free_draw_info, draw_polygon_init): Implement the
9751 handling of these low-level parameters so that each s_draw_info
9752 instance is handled as a CObject at python level that also
9753 contains real references to the actual python objects which
9754 contain the values in the struct. Add free_draw_info as the
9755 destructor.
9756 (draw_polygon_shape): Add the py_draw_info parameter which must a
9757 cobject containing an s_draw_info pointer.
9758
9759 * Thuban/UI/renderer.py (MapRenderer.polygon_render_param): New
9760 method to instantiat the low-level render parameter
9761 (MapRenderer.draw_shape_layer): Use the new method. Remove some
9762 commented out code.
9763 (MapRenderer.draw_polygon_shape): Make the first parameter not the
9764 layer but the low-level render parameter
9765 (ScreenRenderer.draw_shape_layer): Use the low-level render
9766 parameter.
9767
9768 2003-04-15 Jonathan Coles <[email protected]>
9769
9770 * Thuban/Model/classification.py: Implemented __repr__ for
9771 the ClassGroup* classes to make debugging a bit easier.
9772 (ClassGroup.SetLabel): Check that the string is an instance
9773 of StringTypes not StringType. Accounts for Unicode strings.
9774
9775 * Thuban/Model/color.py: Implemented __repr__ to make
9776 debugging a bit easier.
9777
9778 * Thuban/Model/save.py (Saver.write_classification): Need to
9779 save the group label.
9780
9781 * test/test_load.py (testClassification): New. Loads the
9782 iceland_sample_test.thuban file and checks if it was loaded
9783 correctly.
9784
9785 2003-04-15 Jonathan Coles <[email protected]>
9786
9787 * extensions/thuban/wxproj.cpp (draw_polygon_init): New. Used
9788 to improve rendering performance by initializing the variables
9789 that are not change each time draw_polygon_shape() is called.
9790 The values are stored in a global struct draw_info.
9791 (draw_polygon_shape): Removed initialization code that is
9792 now in draw_polygon_init().
9793
9794 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Make
9795 drawing initialization call to draw_polygon_init()
9796 (MapRenderer.draw_polygon_shape): Use new signature of
9797 draw_polygon_shape.
9798
9799 * Thuban/UI/classgen.py (GenUniformPanel): Fix spin control
9800 weirdness by setting the range to (1, maxint).
9801
9802 * Thuban/Model/classification.py (ClassGroupProperties): Make
9803 instance variables private and optimize comparison operator
9804 by first checking if the color references are the same.
9805 (ClassGroupSingleton): Make instance variables private.
9806 (ClassGroupRange): Make instance variables private.
9807
9808 * HOWTO-Release: Filled in missing steps for releasing packages.
9809
9810 2003-04-15 Bernhard Herzog <[email protected]>
9811
9812 First stab at internationalized messages:
9813
9814 * Thuban/__init__.py (_): Implement the translation function for
9815 real using the python gettext module.
9816
9817 * Thuban/UI/classifier.py (ClassTable.GetRowLabelValue): Don't
9818 translate empty strings.
9819
9820 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
9821 Add a missing space to a warning message
9822
9823 * po/README: New. Notes about the management of the translation
9824 files.
9825
9826 * po/Makefile: New. Makefile to help manage the translation files.
9827
9828 * po/es.po: New. Spanish translation by Daniel Calvelo Aros
9829
9830 * MANIFEST.in: Include the *.mo files in Resources/Locale and the
9831 translations and support files in po/
9832
9833 * setup.py (data_files): Add the *.mo files to the data_files too
9834
9835 * README: Add note about the translations when building from CVS
9836
9837 2003-04-14 Jonathan Coles <[email protected]>
9838
9839 * Thuban/UI/dock.py: Fixes some window resizing problems most
9840 noticable under windows. Always assume the button bitmaps will
9841 be there. Code clean up.
9842 (DockabelWindow.Dock, DockableWindow.UnDock): Force all the
9843 images for the dock/undock button to the same images.
9844 Work around for RTbug #1801.
9845
9846 * Thuban/UI/legend.py (LegendPanel.__init__): The toolbar should
9847 be allowed to grow within the sizer. Fixes a bug under Windows
9848 where the toolbar wasn't being drawn.
9849
9850 2003-04-14 Frank Koormann <[email protected]>
9851
9852 * Resources/Bitmaps/dock_12.xpm, Resources/Bitmaps/undock_12.xpm:
9853 Updated design to try to make the button functionality more
9854 transparent.
9855
9856 2003-04-14 Jonathan Coles <[email protected]>
9857
9858 * Thuban/UI/legend.py (LegendPanel.__init__): Call Create() to
9859 finalize the intialization of the panel.
9860
9861 * Thuban/UI/dock.py (DockPanel.Create): New. Finalizes the
9862 creation of the panel. Should be the last thing called in the
9863 initializer of a subclass.
9864
9865 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Actively
9866 set the current selections in the combo boxes. This is needed
9867 under Windows.
9868
9869 * Thuban/UI/classifier.py (Classifier.__init__): Add a top
9870 level panel to the dialog so that the background colors are
9871 consistent under Windows.
9872
9873 2003-04-11 Jonathan Coles <[email protected]>
9874
9875 * Thuban/UI/classgen.py: Change color ramps to start at white
9876 not black.
9877
9878 * Thuban/UI/legend.py: Enable/disable the legend buttons when
9879 the legend changes. Fixes RTbug #1793.
9880
9881 * test/test_classification.py: Added test for copying of
9882 classifications.
9883
9884 2003-04-11 Jonathan Coles <[email protected]>
9885
9886 * Thuban/UI/resource.py: New. Centralize the loading of resources
9887 such as bitmaps.
9888
9889 * Thuban/UI/classgen.py (GenUniquePanel.__init__): Reordered buttons,
9890 added images to the move buttons, added 'reverse' button.
9891 (CustomRampPanel.__init__): Added images to the move buttons.
9892 (GreyRamp): New. Generates a ramp from white to black.
9893 (HotToColdRamp): New. Generates a ramp from cold to hot colors.
9894
9895 * Thuban/UI/classifier.py: Refactored ID's from ID_CLASSIFY_* to
9896 ID_PROPERTY_*.
9897 (Classifier.__init__): Minor changes to the layout.
9898 (Classifier._OnTitleChanged): Listen for when the user edits the
9899 title and update the dialog's title and the layer's title.
9900
9901 * Thuban/UI/dock.py: Use new bitmaps for the control buttons.
9902
9903 * Thuban/UI/legend.py: Use new bitmaps for the control buttons.
9904 (LegendTree._OnMsgLayerTitleChanged): Change the displayed title
9905 if the layer's title changes.
9906
9907 * Thuban/UI/mainwindow.py: Added new menu item and associated code
9908 to open a dialog to rename the map.
9909 (MainWindow): Use new resource class to import bitmaps.
9910
9911 2003-04-11 Jonathan Coles <[email protected]>
9912
9913 * Resources/Bitmaps/close_12.xpm, Resources/Bitmaps/dock_12.xpm,
9914 Resources/Bitmaps/group_use.xpm, Resources/Bitmaps/group_use_all.xpm,
9915 Resources/Bitmaps/group_use_none.xpm,
9916 Resources/Bitmaps/group_use_not.xpm,
9917 Resources/Bitmaps/hide_layer.xpm,
9918 Resources/Bitmaps/layer_properties.xpm,
9919 Resources/Bitmaps/lower_layer.xpm, Resources/Bitmaps/raise_layer.xpm,
9920 Resources/Bitmaps/show_layer.xpm, Resources/Bitmaps/undock_12.xpm:
9921 New.
9922
9923 2003-04-10 Jonathan Coles <[email protected]>
9924
9925 * Thuban/Model/classification.py: (ClassGroupRange.__init__):
9926 Should pass group to ClassGroup constructor.
9927
9928 2003-04-10 Jonathan Coles <[email protected]>
9929
9930 * Thuban/Model/classification.py: (ClassGroup): Move all the common
9931 methods of the derived classes ([Set|Get]Properties(), __eq__, __ne__)
9932 here. Implement SetVisible(), IsVisible().
9933 (ClassGroup.__init__): Add group parameter which acts as a copy
9934 constructor.
9935
9936 * Thuban/UI/classifier.py (ClassTable): Add a new column for the
9937 "Visible" check boxes.
9938 (Classifier): Rename the buttons and refactor the code to match
9939 the new labels.
9940
9941 * Thuban/UI/legend.py: Classify button is now called "Properties".
9942 Refactored the code to change variable names.
9943 (LegendTree.__FillTreeLayer): Only list a group if it is visible.
9944
9945 * Thuban/UI/mainwindow.py: MainWindow.OpenClassifier renamed to
9946 MainWindow.OpenLayerProperties. MainWindow.LayerEditProperties
9947 renamed to MainWindow.LayerEditProperties.
9948 (MainWindow.ToggleLegend): Don't include map name in legend title.
9949 (MainWindow.SetMap): Added the map name to the window title.
9950 (MainWindow.LayerFillColor, MainWindow.LayerTransparentFill,
9951 MainWindow.LayerOutlineColor, MainWindow.LayerNoOutline): Removed.
9952 Functionality is found in the layer properties dialog.
9953
9954 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
9955 draw visible groups.
9956
9957 2003-04-09 Jonathan Coles <[email protected]>
9958
9959 * Thuban/UI/classgen.py: Modifications to allow simple
9960 addition and selection of new color schemes.
9961 (MonochromaticRamp): New. Generates a ramp between two colors.
9962 (RedRamp): New. Generates a ramp of all red.
9963 (GreenRamp): New. Generates a ramp of all green.
9964 (BlueRamp): New. Generates a ramp of all blue.
9965
9966 2003-04-09 Jonathan Coles <[email protected]>
9967
9968 * Thuban/Model/classification.py (Classification.__deepcopy__):
9969 Need to copy over field and fieldType attributes.
9970
9971 * Thuban/Model/table.py (Table.field_range): New. Retrive the
9972 maximum and minimum values over the entire table for a given
9973 field.
9974 (Table.GetUniqueValues): New. Retrieve all the unique values
9975 in the table for a given field.
9976
9977 * Thuban/UI/classgen.py: Renamed GenRangePanel to GenUniformPanel.
9978 (GenUniquePanel): New. Controls to allow the user to select
9979 which unique field values they would like in the classification.
9980 (CustomRampPanel): Code that was in ClassGenDialog that allows
9981 the user to select the properties for a custom ramp.
9982 (ClassGenerator.GenUniformDistribution): Was called GenerateRanges.
9983
9984 * Thuban/UI/classifier.py: Removed a lot of debugging code.
9985 (Classifier._SetClassification): Callback method so that the
9986 class generator can set the classification in the grid.
9987 (ClassGroupPropertiesCtrl): New. Encapsulates the drawing and
9988 editing of a group properties class into a wxWindows control.
9989
9990 * Thuban/UI/dock.py: It was decided that if the user closes
9991 a dockable window the window should simply hide itself. That
9992 way if the user wants to show the dock again it appears in the
9993 same place as it was when it was closed.
9994 (DockableWindow.Destroy): Call renamed method OnDockDestroy().
9995 (DockableWindow._OnButtonClose): Hide the window instead of
9996 destroying it.
9997 (DockableWindow._OnClose): Hide the window instead of
9998 destroying it.
9999
10000 * Thuban/UI/legend.py (LegendTree): Use a private method to
10001 consistently set the font and style of the text. Fixes RTbug #1786.
10002
10003 * Thuban/UI/mainwindow.py: Import just the Classifier class.
10004
10005 2003-04-07 Bernhard Herzog <[email protected]>
10006
10007 * Thuban/UI/mainwindow.py (main_menu): Move the toggle_legend item
10008 to the map module
10009
10010 2003-04-07 Bernhard Herzog <[email protected]>
10011
10012 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree): Removed in
10013 favor of ToggleSessionTree
10014 (MainWindow.ToggleSessionTree): New method to toggle visibility of
10015 the session tree.
10016 (MainWindow.SessionTreeShown): New method to return whether the
10017 session tree is currently shown.
10018 (MainWindow.ToggleLegend): New method to toggle visibility of the
10019 legend
10020 (MainWindow.ShowLegend): Implement in terms of ToggleLegend and
10021 LegendShown
10022 (MainWindow.LegendShown): New method to return whether the legend
10023 is currently shown.
10024 (_method_command): Add checked parameter so we can define check
10025 menu items
10026 (_has_tree_window_shown, _has_legend_shown): Use the appropriate
10027 mainwindow methods.
10028 (show_session_tree, show_legend commands): Removed.
10029 (toggle_session_tree, toggle_legend commands): New commands to
10030 toggle the visibility of the dialogs
10031
10032 2003-04-07 Jonathan Coles <[email protected]>
10033
10034 * Thuban/UI/classgen.py: Fix Windows problem.
10035
10036 * Thuban/UI/dock.py: Fix Windows problem.
10037
10038 * Thuban/UI/mainwindow.py: Use False instead of false.
10039 (MainWindow.ShowLegend): Remove unnecessary switch parameter.
10040
10041 2003-04-07 Jonathan Coles <[email protected]>
10042
10043 Since we now say that the order of the groups in a classification
10044 matters, it makes sense to be able to manipulate that order. Most
10045 of the changes to Thuban/Model/classification.py are to that end.
10046
10047 * Thuban/Model/classification.py (Classification.AppendGroup,
10048 Classification.InsertGroup, Classification.ReplaceGroup,
10049 Classification.RemoveGroup, Classification.GetGroup): Do as the
10050 names imply.
10051 (Classification.FindGroup): This was called GetGroup, but GetGroup
10052 takes an index, while FindGroup takes a value.
10053 (Classification.__deepcopy__): Copy all the groups, BUT NOT THE LAYER
10054 REFERENCE. Currently there is a cyclic reference between the layer
10055 and its classification. If the classification doesn't need to know
10056 its owning layer we can change this, since it may make sense to be
10057 able to use the same classification with different layers.
10058
10059 * Thuban/Model/load.py: Use Classification.AppendGroup(), not AddGroup()
10060
10061 * Thuban/UI/classgen.py: Use Classification.AppendGroup(),
10062 not AddGroup()
10063
10064 * Thuban/UI/classifier.py: Now that we can depend on the order in
10065 a Classification and have methods to manipulate that order we don't
10066 need to use our own data structures in the grid. We can simply make
10067 the grid/table access the information they need from a copy of
10068 the classification object.
10069 (Classifier._OnCloseBtn): Event handler for when the user clicks
10070 'Close'. This is needed so if the user applies changes and then
10071 continues to change the table the user has the option of discarding
10072 the most recent changes and keeping what they applied.
10073
10074 * Thuban/UI/mainwindow.py: Put "Show Legend" and "Show Session Tree"
10075 into the same group.
10076
10077 * extensions/thuban/wxproj.cpp (check_version): If Thuban is compiled
10078 with a really old version of proj, PJ_VERSION won't even be defined.
10079 If it isn't defined then just compile so that the function always
10080 returns Py_False.
10081
10082 * test/test_classification.py: Fix tests to use the renamed methods.
10083 Still need to write tests for the new methods.
10084
10085 2003-04-04 Jonathan Coles <[email protected]>
10086
10087 * Thuban/UI/classifier.py (Classifier.__SelectField): Move the
10088 call to SetSelection out of the method and before the call
10089 to __SelectField in __init__. This prevents a recursion of events
10090 when _OnFieldSelect is triggered by the user.
10091
10092 2003-04-04 Jonathan Coles <[email protected]>
10093
10094 * Thuban/Model/classification.py: Rename Color.None to
10095 Color.Transparent.
10096 (ClassGroupProperties.SetLineColori, ClassGroupProperties.SetFill):
10097 Don't bother copying the color, since Colors are immutable.
10098
10099 * Thuban/Model/color.py, Thuban/Model/layer.py, Thuban/Model/load.py,
10100 Thuban/UI/classifier.py, Thuban/UI/mainwindow.py,
10101 Thuban/UI/renderer.py, Thuban/UI/view.py:
10102 Rename Color.None to Color.Transparent.
10103
10104 * test/test_classification.py, test/test_load.py: Rename Color.None
10105 to Color.Transparent.
10106
10107 2003-04-04 Jonathan Coles <[email protected]>
10108
10109 * Thuban/Model/classification.py: Fix assert calls.
10110 (ClassGroupProperties.SetLineColor, ClassGroupProperties.SetFill):
10111 Copy the color parameter rather than hold onto a reference.
10112
10113 * Thuban/Model/color.py (Color.__copy__, Color.__deepcopy): Copy
10114 the color object.
10115 (NoColor.__copy__, NoColor.__deepcopy): Return 'self' so that we
10116 are sure there exists only one refernce to Color.None in the system.
10117 This allows us to use 'is' rather than the comparision functions.
10118
10119 * Thuban/Model/save.py: Fix assert calls.
10120
10121 * Thuban/UI/classifier.py: Fix assert calls.
10122 (ClassGrid._OnCellDClick): Call up to the classifier to open the
10123 dialog to edit the groups properties.
10124 (ClassGrid._OnCellResize): Make sure that the scollbars are drawn
10125 correctly if a cell is resized.
10126 (ClassTable.SetClassification): New. Changes the classification
10127 that is in the table.
10128 (ClassTable.__SetRow): Allow groups to be prepended.
10129 (Classifier): New code for opening the EditProperties and
10130 GenerateRanges dialogs.
10131 (SelectPropertiesDialog.__GetColor): Only set the color in the
10132 color dialog if the current color is not None.
10133
10134 * Thuban/UI/dock.py: Fix assert calls.
10135
10136 * Thuban/UI/legend.py: Fix assert calls.
10137
10138 * Thuban/UI/renderer.py: Fix assert calls.
10139
10140 * Thuban/UI/classgen.py (ClassGenDialog): Dialog for generating
10141 classifications.
10142 (GenRangePanel): Panel specific to range generation.
10143 (GenSingletonPanel): Panel specific to singleton generation.
10144 (ClassGenerator): Class responsible for actually generating
10145 the classification from the data gathered in the dialog box.
10146 (PropertyRamp): Generates properties whose values range from
10147 a starting property to an ending property.
10148
10149 2003-04-03 Bernhard Herzog <[email protected]>
10150
10151 * test/support.py (print_garbage_information): New function that
10152 prints information about still connected messages and memory
10153 leaks.
10154 (run_suite): Removed.
10155 (run_tests): New function for use as a replacement of
10156 unittest.main in the test_* files. This one calls
10157 print_garbage_information at the end.
10158
10159 * test/runtests.py (main): Use support.print_garbage_information
10160
10161 * test/test_layer.py: Use support.run_tests instead of
10162 unittest.main so we get memory leak information
10163 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
10164 (TestLayer.test_point_layer, TestLayer.test_empty_layer)
10165 (TestLayerLegend.test_visibility): Call the layer's Destroy method
10166 to fix a memory leak.
10167
10168 * test/test_classification.py: Use support.run_tests instead of
10169 unittest.main so we get memory leak information
10170 (TestClassification.test_classification): Call the layer's Destroy
10171 method to fix a memory leak.
10172
10173 2003-04-02 Bernhard Herzog <[email protected]>
10174
10175 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
10176 Handle the reference counts of the return value and errors in
10177 PyArg_ParseTuple correctly.
10178
10179 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
10180 sure the filename is absolute to avoid problems when saving the
10181 session again
10182
10183 * Thuban/Model/table.py: Remove unnecessary import. Fix a typo.
10184
10185 2003-04-01 Jonathan Coles <[email protected]>
10186
10187 * Thuban/UI/renderer.py (MapRenderer.draw_point_shape): Check
10188 that there actually are points in the returned list of points
10189 before trying to index into the list. The list may be empty if
10190 the shape is a Null Shape.
10191
10192 2003-04-01 Bernhard Herzog <[email protected]>
10193
10194 * test/test_map.py: Don't use from <module> import *
10195
10196 2003-04-01 Jonathan Coles <[email protected]>
10197
10198 * Thuban/Model/session.py: Use LAYER_CHANGED instead of
10199 LAYER_LEGEND_CHANGED
10200
10201 * Thuban/UI/dock.py (DockableWindow._OnButtonClose): Call
10202 self.Destroy() to close the window after yesterday's changes.
10203
10204 * test/test_map.py, test/test_session.py: Fix messages that
10205 are sent from maps and layers.
10206
10207 2003-03-31 Jonathan Coles <[email protected]>
10208
10209 * Thuban/UI/classifier.py: Commented out some debugging statements.
10210 (ClassDataPreviewer.Draw): Draw rectangles for polygon layers per
10211 RTbug #1769.
10212
10213 * Thuban/UI/dock.py (DockableWindow.UnDock): Restore size and
10214 position (although position doesn't work yet under GTK).
10215 (DockableWindow.Destroy): New. Called when the window must be
10216 closed. Namely needed when the DockFrame closes and must close
10217 its children.
10218 (DockFrame): Listen for EVT_CLOSE and destroy all children.
10219
10220 * Thuban/UI/legend.py (LegendPanel.Destroy): New. Cleans up
10221 when then window is told to close.
10222 (LegendTree._OnMsgLayerChanged): Fixes a seg fault bug. See
10223 comment in source for more info.
10224
10225 * Thuban/UI/main.py: Show the legend by default when Thuban starts.
10226
10227 * Thuban/UI/mainwindow.py: Renamed OnClose to _OnClose for
10228 symmetry with other such methods.
10229 (MainWindow.ShowLegend): Show the legend docked by default.
10230
10231 2003-03-28 Jonathan Coles <[email protected]>
10232
10233 * Thuban/UI/classifier.py: Support for highlighting a specific
10234 group within the grid when the classification dialog is opened.
10235 Also contains a lot of debugging printouts which will later
10236 be removed.
10237
10238 * Thuban/UI/dock.py: Complete rework on the dock code so that
10239 that it is fairly removed from the rest of the Thuban application.
10240 It is easy to add new docks which the rest of the program having
10241 to be aware of them.
10242
10243 * Thuban/UI/legend.py: Modifications to support selecting a
10244 specific group in the classification dialog. Changed how layers
10245 are drawn when the layer is visible/invisible.
10246
10247 * Thuban/UI/mainwindow.py: Removed legend specific code and
10248 replaced it with calls to the new dock code.
10249
10250 * Thuban/UI/renderer.py (MapRenderer.__init__): Added assert
10251 to check if scale > 0. Trying to track down a divide by zero.
10252
10253 2003-03-26 Jonathan Coles <[email protected]>
10254
10255 * Thuban/UI/legend.py: Removed unnecessary LegendDialog class.
10256 (LegendPanel): Removed _OnDock()/_OnUnDock() methods which are
10257 now part of DockableWindow.
10258 (LegendPanel.DoOnSelChanged): Select the current layer in the
10259 map.
10260 (LegendTree._OnSelChanged): Call LegendPanel.DoOnSelChanged()
10261 with the selected layer and/or group.
10262
10263 2003-03-26 Jonathan Coles <[email protected]>
10264
10265 This putback contains the code for dockable windows. There is
10266 no support in wxWindows as of this date for windows that can
10267 attach themselves to other windows.
10268
10269 The current model contains a DockableWindow which has a parent
10270 window for when it is detached and a dock window that it puts
10271 its contents in when it is docked. The contents of a DockableWindow
10272 must be a DockPanel. DockPanel itself derives from wxPanel.
10273
10274 * Thuban/Model/layer.py (Layer.ClassChanged): Send a LAYER_CHANGED
10275 message, not a LAYER_LEGEND_CHANGED message.
10276
10277 * Thuban/Model/map.py (Map): Forward LAYER_CHANGED messages.
10278
10279 * Thuban/UI/classifier.py (Classifier.__init__): Use wxADJUST_MINSIZE
10280 as one of the style properties for the fieldTypeText item to
10281 be sure that its size is correct when the text changes.
10282
10283 * Thuban/UI/dock.py: New. Classes for the DockPanel and
10284 DockableWindow.
10285
10286 * Thuban/UI/legend.py: Added some more buttons and made the
10287 LegendPanel a DockPanel.
10288
10289 * Thuban/UI/mainwindow.py: Added sash windows to the main window
10290 and supporting functions for manipulating the sashes.
10291 (MainWindow.ShowLegend): Create a DockableWindow with the
10292 LegendPanel as the contents.
10293
10294 * Thuban/UI/messages.py: Added DOCKABLE_* messages
10295
10296 * Thuban/UI/view.py (MapCanves.SetMap): Listen for LAYER_CHANGED,
10297 not LAYER_LEGEND_CHANGED, messages.
10298
10299 2003-03-25 Jonathan Coles <[email protected]>
10300
10301 * setup.py: Added custom script bdist_rpm_build_script so that
10302 when the rpm is built the path to wx-config is correct.
10303
10304 * setup.cfg: Added line saying to use the custom build script
10305
10306 2003-03-20 Jonathan Coles <[email protected]>
10307
10308 Initial implementation of the Legend.
10309
10310 * Thuban/UI/legend.py: New. Creates a window that shows the map's
10311 Legend information and allows the user to add/modify classifications
10312 and how the layers are drawn on the map.
10313
10314 * setup.py: New command 'build_docs' which currently uses
10315 happydoc to generate html documentation for Thuban.
10316
10317 * Thuban/Model/classification.py (ClassGroup.GetDisplayText): New.
10318 Returns a string which is appropriately describes the group.
10319
10320 * Thuban/Model/layer.py (Layer.SetClassification): Generate a
10321 LAYER_CHANGED event instead of a LAYER_LEGEND_CHANGED event.
10322
10323 * Thuban/Model/map.py (Map): Rename messages and use new, more
10324 specific, messages.
10325
10326 * Thuban/Model/messages.py: New message to indicate that a layer's
10327 data has changed (LAYER_CHANGED). New map messages to indicate
10328 when layers have been added/removed/changed or if the stacking order
10329 of the layers has changed.
10330
10331 * Thuban/Model/session.py: Rename and use new messages.
10332
10333 * Thuban/UI/classifier.py: Remember if any changes have actually
10334 been applied so that if the dialog is cancelled without an application
10335 of changes we don't have to set a new classification.
10336 (ClassDataPreviewer): Pulled out the window specific code and put it
10337 ClassDataPreviewWindow. ClassDataPreviewer can then be used to draw
10338 symbols on any DC.
10339
10340 * Thuban/UI/mainwindow.py: New code to open the legend.
10341
10342 * Thuban/UI/view.py: Use new message names.
10343
10344 2003-03-19 Jonathan Coles <[email protected]>
10345
10346 * Thuban/UI/main.py (verify_versions): New. Checks the versions
10347 of Python, wxPython, and some other libraries.
10348
10349 * extensions/thuban/wxproj.cpp (check_version): Checks the given
10350 version against what wxproj was compiled with.
10351 (check_version_gtk): If wxproj was compiled with gtk then check
10352 the given version against the version of the gtk library
10353 currently being used.
10354
10355 2003-03-14 Bernhard Herzog <[email protected]>
10356
10357 * test/test_command.py: Run the tests when the module is run as a
10358 script
10359
10360 2003-03-14 Bernhard Herzog <[email protected]>
10361
10362 Implement selection of multiple selected shapes in the same layer:
10363
10364 - Introduce a new class to hold the selection. This basically
10365 replaces the interactor which was nothing more than the
10366 selection anyway. A major difference is of course that the new
10367 selection class supports multiple selected shapes in one layer
10368
10369 - Move the object that represents the selection from the
10370 application to the canvas. The canvas is a better place than the
10371 application because the selection represents which shapes and
10372 layer of the map displayed by the canvas are selected and
10373 affects how the map is drawn.
10374
10375 - Make the selection and its messages publicly available through
10376 the mainwindow.
10377
10378 - The non-modal dialogs do not get a reference to the interactor
10379 anymore as they can simply refer to their parent, the
10380 mainwindow, for the what the interactor had to offer.
10381
10382 * Thuban/UI/selection.py: New module with a class to represent the
10383 selection.
10384
10385 * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
10386 these unused messages
10387
10388 * Thuban/UI/application.py (ThubanApplication.OnInit)
10389 (ThubanApplication.OnExit, ThubanApplication.SetSession): The
10390 interactor is gone now.
10391 (ThubanApplication.CreateMainWindow): There is no interactor
10392 anymore so we pass None as the interactor argument for now for
10393 compatibility.
10394
10395 * Thuban/UI/view.py (MapCanvas.delegated_messages)
10396 (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
10397 Unsubscribe, delegate messages according to the delegated_messages
10398 class variable.
10399 (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
10400 attributes from instance variables as described with the
10401 delegated_methods class variable.
10402 (MapCanvas.__init__): New instance variable selection holding the
10403 current selection
10404 (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
10405 pass them on to the renderer
10406 (MapCanvas.SetMap): Clear the selection when a different map is
10407 selected.
10408 (MapCanvas.shape_selected): Simple force a complete redraw. The
10409 selection class now takes care of only issueing SHAPES_SELECTED
10410 messages when the set of selected shapes actually does change.
10411 (MapCanvas.SelectShapeAt): The selection is now managed in
10412 self.selection
10413
10414 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
10415 (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
10416 Unsubscribe, delegate messages according to the delegated_messages
10417 class variable.
10418 (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
10419 attributes from instance variables as described with the
10420 delegated_methods class variable.
10421 (MainWindow.__init__): The interactor as ivar is gone. The
10422 parameter is still there for compatibility. The selection messages
10423 now come from the canvas.
10424 (MainWindow.current_layer, MainWindow.has_selected_layer):
10425 Delegate to the the canvas.
10426 (MainWindow.LayerShowTable, MainWindow.Classify)
10427 (MainWindow.identify_view_on_demand): The dialogs don't need the
10428 interactor parameter anymore.
10429
10430 * Thuban/UI/tableview.py (TableFrame.__init__)
10431 (LayerTableFrame.__init__, LayerTableFrame.OnClose)
10432 (LayerTableFrame.row_selected): The interactor is gone. It's job
10433 from the dialog's point of view is now done by the mainwindow,
10434 i.e. the parent. Subscribe to SHAPES_SELECTED instead
10435 of SELECTED_SHAPE
10436
10437 * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
10438 is gone. It's job from the dialog's point of view is now done by
10439 the mainwindow, i.e. the parent.
10440
10441 * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
10442 gone. It's job from the dialog's point of view is now done by the
10443 mainwindow, i.e. the parent.
10444
10445 * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
10446 gone. It's job from the dialog's point of view is now done by the
10447 mainwindow, i.e. the parent.
10448 (SessionTreeCtrl.__init__): New parameter mainwindow which is
10449 stored as self.mainwindow. The mainwindow is need so that the tree
10450 can still subscribe to the selection messages.
10451 (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
10452 (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
10453 selection is now accessible through the mainwindow. Subscribe to
10454 SHAPES_SELECTED instead of SELECTED_SHAPE
10455
10456 * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
10457 SHAPES_SELECTED message now.
10458 (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
10459 so deal with multiple shapes
10460 (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
10461 gone. It's job from the dialog's point of view is now done by the
10462 mainwindow, i.e. the parent.
10463
10464 * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
10465 parameter is now a list of shape ids.
10466 (RecordTable.SetTable): The second parameter is now a list of
10467 indices.
10468
10469 * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
10470 selected_shape parameter and ivar to selected_shapes. It's now a
10471 list of shape ids.
10472 (MapRenderer.draw_label_layer): Deal with multiple selected
10473 shapes. Rearrange the code a bit so that the setup and shape type
10474 distinctions are only executed once.
10475
10476 * test/test_selection.py: Test cases for the selection class
10477
10478 2003-03-11 Jonathan Coles <[email protected]>
10479
10480 * Thuban/Model/load.py: Temporary fix so that the xml reader
10481 doesn't cause Thuban to crash.
10482
10483 * Thuban/Model/layer.py: Handle the cyclic references between
10484 a layer and its classification better, and be sure to disconnect
10485 the classification from the layer when the layer is destroyed
10486 so that we don't maintain a cyclic reference that may not be
10487 garbage collected.
10488
10489 * Thuban/Model/classification.py: See comment for layer.py.
10490
10491 2003-03-12 Jan-Oliver Wagner <[email protected]>
10492
10493 * HOWTO-Release: New. Information on the steps for releasing
10494 a new version of Thuban.
10495
10496 2003-03-11 Jonathan Coles <[email protected]>
10497
10498 * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
10499 Use True instead of true.
10500 (Classifier): Should have a single panel in which all the controls lie.
10501
10502 * Thuban/UI/proj4dialog.py: Add normal border.
10503
10504 * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
10505
10506 * Thuban/UI/mainwindow.py: Use True instead of true.
10507
10508 * setup.py: Update some definitions to use wxWindows2.4 files
10509
10510 * Data/iceland_sample_class.thuban: Fixed file so that the
10511 field_type information is present.
10512
10513 2003-03-10 Jonathan Coles <[email protected]>
10514
10515 * Thuban/UI/classifier.py (Classifier.__init__): Make the
10516 field type label grow so that when the text changes the
10517 size is updated correctly. This may be a wxWindows bug.
10518
10519 2003-03-10 Jonathan Coles <[email protected]>
10520
10521 * Thuban/UI/application.py: Changed SESSION_CHANGED to
10522 SESSION_REPLACED.
10523
10524 * Thuban/UI/classifier.py: Wrap text with _().
10525 (ClassGrid.CreateTable): Set dimensions and size hints here,
10526 instead of in Reset, so we only set the size once.
10527
10528 * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
10529
10530 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
10531 Call Close() instead of Shutdown().
10532
10533 * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
10534
10535 * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
10536 Go back to using OnClose() instead of Shutdown().
10537
10538 2003-03-10 Jonathan Coles <[email protected]>
10539
10540 * Thuban/UI/classifier.py (Classifier): SelectField() needed
10541 to know the old field index as well as the new one.
10542
10543 2003-03-10 Jonathan Coles <[email protected]>
10544
10545 * Thuban/UI/classifier.py (Classifier): Use __SelectField()
10546 to correctly set the table information and call this from
10547 __init__ and from _OnFieldSelect so that all the information
10548 is up to date when the dialog opens and when a field is changed.
10549
10550 2003-03-10 Jonathan Coles <[email protected]>
10551
10552 * Thuban/Model/classification.py (Classification): Don't use
10553 layer's message function directly, use the ClassChanged() method
10554 when then classification changes. SetField/SetFieldType/SetLayer
10555 must keep the information about field name and field type in
10556 sync when an owning layer is set or removed.
10557
10558 * Thuban/Model/layer.py: Added ClassChanged() so that the
10559 classification can tell the layer when its data has changed.
10560 (Layer.SetClassification): Accepts None as an arguement to
10561 remove the current classification and correctly handles
10562 adding a new classification.
10563
10564 * Thuban/Model/load.py: Comment out print statement
10565
10566 * test/test_classification.py, test/test_save.py: New and
10567 improved tests.
10568
10569 2003-03-07 Jonathan Coles <[email protected]>
10570
10571 * Thuban/Model/classification.py: Implemented __copy__ and
10572 __deepcopy__ for ClassGroup* and ClassGroupProperites so
10573 they can easily be copied by the classifier dialog.
10574 (ClassGroupProperites.__init__): The default line color should
10575 have been Color.Black.
10576
10577 * Thuban/UI/classifier.py: Setting and Getting table values now
10578 uses a consistent set of functions.
10579 (Classifier): Now non-modal. Has field type label which changes
10580 as the field changes. Keep track of buttons in a list so that
10581 we can enable/disable the buttons when the None field is selected.
10582 (SelectPropertiesDialog): Add buttons to make the colors transparent.
10583
10584 * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
10585 does what OnClose did, but can be called by the application to
10586 close a window. Needed when a session changes, and we have to
10587 close the classifier windows.
10588
10589 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
10590 Shuts down open dialogs. Used when a new session is created
10591 or a session is opened.
10592 (MainWindow.SaveSession): Should only call application.SaveSession()
10593 if we don't call SaveSessionAs first.
10594 (MainWindow.Classify): Allow different classifier dialogs for
10595 different layers.
10596
10597 * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
10598 the parent class handle it. Add Shutdown() to unsubscibe from
10599 event notification and call the parent Shutdown(). This was
10600 necessary so the application can close the tree window.
10601
10602 2003-03-06 Jonathan Coles <[email protected]>
10603
10604 * Thuban/Model/classification.py: Minor documentation changes,
10605 Addition of __eq__ and __ne__ methods.
10606 (Classification.SetLayer): prevent recursion between this method
10607 and Layer.SetClassification().
10608
10609 * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
10610
10611 * Thuban/Model/layer.py (SetClassification): prevent recursion
10612 between this method and Classification.SetLayer().
10613
10614 * test/test_classification.py, test/test_load.py,
10615 test/test_session.py: Fixed and added tests for the classification
10616 classes.
10617
10618 2003-03-06 Bernhard Herzog <[email protected]>
10619
10620 * Thuban/UI/classifier.py (ClassGrid.__init__)
10621 (ClassGrid.CreateTable): Move the SetSelectionMode call to
10622 CreateTable because otherwise it triggers an assertion in
10623 wxPython/wxGTK 2.4.
10624
10625 2003-03-05 Jonathan Coles <[email protected]>
10626
10627 * Thuban/common.py: Move FIELDTYPE constants back to table.py.
10628
10629 * Thuban/Model/load.py: import FIELDTYPE constants from table.
10630
10631 * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
10632
10633 * Thuban/Model/table.py: Put FIELDTYPE constants back.
10634
10635 2003-03-05 Jonathan Coles <[email protected]>
10636
10637 * Thuban/UI/classifier.py: Added class documentation.
10638 Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
10639 Store just the groups in the table and generate the other
10640 column information when it is requested. Add "None" field
10641 to pull-down to select no classification.
10642
10643 * Thuban/common.py: Moved FIELDTYPE constants from table.py
10644 (Str2Num): Only catch ValueError exceptions.
10645
10646 * Thuban/Model/classification.py: Class documentation. Renaming
10647 of methods with Stroke to Line. Groups are stored in a single
10648 list with the default as the first element. Groups are searched
10649 in the order they appear in the list.
10650
10651 * Thuban/Model/color.py: Documentation.
10652
10653 * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
10654 the kind of data represented by a field.
10655
10656 * Thuban/Model/load.py (ProcessSession): Use proper string
10657 conversion function; fixes RTbug #1713.
10658
10659 * Thuban/Model/save.py (Saver): Store field type information.
10660
10661 * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
10662 (Table): Add field_info_by_name() to retrieve field information
10663 by specifying the field name, not the number.
10664
10665 * Thuban/UI/mainwindow.py: Function name changes.
10666
10667 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
10668 get the layer classification once. Don't try to classify
10669 values when the field is None: just use the default properties.
10670
10671 * Thuban/UI/view.py: Function name changes.
10672
10673 * Doc/thuban.dtd: Add field_type attribute to a classification.
10674
10675 2003-03-04 Bernhard Herzog <[email protected]>
10676
10677 * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
10678 the fill and stroke layer attributes optional with suitable
10679 default values. Add the stroke_width layer attribute. Use correct
10680 syntax for empty elements. Make the attribute list for labels
10681 refer to the label element.
10682
10683 2003-03-04 Bernhard Herzog <[email protected]>
10684
10685 * setup.py (thuban_build_py.build): Add a comment about distutils in
10686 Python 2.3 containing some of the functionality we implement in
10687 setup.py ourselves.
10688
10689 * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
10690 before the selection mode. Doing it the other way round triggers
10691 an assertion in wxWindows.
10692
10693 * Thuban/Model/save.py (escape): Fix typo in doc-string
10694
10695 * Thuban/Model/classification.py: Remove unnecessary wxPython
10696 import
10697
10698 2003-03-04 Jonathan Coles <[email protected]>
10699
10700 * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
10701 Parameter 'value' should default to None.
10702
10703 * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
10704 the class attribute __classification is now private.
10705
10706 * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
10707 Classifier to ClassGrid. Added support for removing selected rows,
10708 which including code for keeping track of when cells are selected,
10709 and deselected.
10710 (ClassTable): Support for added/removing rows. Fixed a problem
10711 with __ParseInput whereby it would not allow strings (only numbers)
10712 to be entered.
10713 (Classifier): Added button and supporting code for removing
10714 selected rows.
10715
10716 2003-02-27 Jonathan Coles <[email protected]>
10717
10718 * Thuban/common.py: Moved color conversion functions into
10719 Thuban/UI/common.py.
10720 (Str2Num): Now converts the float (not the string) to a long/int
10721 so that an exception isn't thrown.
10722
10723 * Thuban/UI/common.py: Common functions used in several UI modules
10724
10725 * Thuban/Model/classification.py: Changed the class hierarchy
10726 so that a Classification consists of Groups which return
10727 Properties when a value matches a Group.
10728
10729 * Thuban/Model/layer.py: Fixed name resolution problem.
10730
10731 * Thuban/Model/load.py: Use new Classification and Group functions.
10732
10733 * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
10734 failure.
10735 (Saver.write_classification): Use new Classification and Group
10736 functions.
10737
10738 * Thuban/UI/classifier.py: Changes to use new Classification and Group
10739 functions. Fix to create a tuple with a single value instead of
10740 simply returning the value.
10741
10742 * Thuban/UI/renderer.py: Use new Classification and Group functions.
10743 Use common.py functions.
10744
10745 * Thuban/UI/tree.py: Use common.py functions.
10746
10747 * test/test_classification.py: Use new Classification and Group
10748 classes.
10749
10750 2003-02-24 Jonathan Coles <[email protected]>
10751
10752 * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
10753 functions from Thuban color objects to wxWindow colour objects.
10754
10755 * Thuban/Model/classification.py (Classification): Renamed
10756 GetProperties() to GetClassData(). Used the new iterator
10757 in TreeInfo().
10758 (ClassIterator): Iterator implementation to iterate over the
10759 ClassData objects in a classification object.
10760
10761 * Thuban/Model/save.py (Saver.write_classificaton): Uses
10762 the new iterator to save the classification information.
10763
10764 * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
10765 for changing the stroke and fill colors and previewing the
10766 changes.
10767
10768 * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
10769 MainWindow.SaveSessionAs): Text string changes so the dialogs
10770 have more meaningful titles.
10771
10772 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
10773 Classification method name from GetProperties to GetClassData.
10774
10775 * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
10776 instead of accessing now non-existent class variables.
10777
10778 2003-02-24 Bernhard Herzog <[email protected]>
10779
10780 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
10781 unneeded Shape() call. Rendering is substantially faster without
10782 it and it avoids some problems with broken shape files.
10783
10784 2003-02-20 Frank Koormann <[email protected]>
10785
10786 Force minimal size of identify and label dialogs. The autosizing
10787 looked too ugly.
10788
10789 * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
10790 * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
10791 Set size of listctrl.
10792 * Thuban/UI/identifyview.py (IdentifyView.__init__):
10793 Set size of dialog.
10794
10795 2003-02-19 Jonathan Coles <[email protected]>
10796
10797 * test/test_classification.py, test/test_layer.py,
10798 test/test_load.py, test/test_map.py, test/test_session.py:
10799 Updated the tests to use the new functions that are in the
10800 respective classes.
10801
10802 * Thuban/Model/classification.py (Classification):
10803 Uses the new ClassData* classes. Modification messages are
10804 passed up to the parent layer (if it exists).
10805 (ClassData): New class to encapsulate the common data in each
10806 classification property.
10807 (ClassDataDefault): Represents the Default class. data.
10808 (ClassDataPoint): Represents a single class. data point
10809 (ClassDataRange): Represents a class. range
10810 (ClassDataMap): Represents a class. map (unused).
10811
10812 * Thuban/Model/color.py: Added Color.None to represent something
10813 with no color. Color.Black represents the color black.
10814 (NoColor): Helper class derived from Color to represent something
10815 with no color.
10816
10817 * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
10818 stroke_width attributes. Made the 'classification' attribute private.
10819 New methods for setting/getting the classification.
10820
10821 * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
10822 to get the classifcation and use the new ClassData* classes to
10823 hold the classification data. Use Str2Num to convert numbers
10824 properly.
10825
10826 * Thuban/Model/save.py (Saver): Use new Color and Classification
10827 methods
10828
10829 * Thuban/UI/classifier.py (ClassGrid): New class to represent a
10830 custom grid.
10831 (ClassTable): Support for editing Values and Labels and for
10832 changing what type (point or range) of data is stored in each
10833 property based on how the user enters the data.
10834 (Classifier): Support for saving the new classifications and
10835 launching the dialog to edit a property.
10836 (SelectPropertiesDialog): New class for editing the visual
10837 properties of a classification (stroke color, width, and fill color)
10838 (ClassPreviewer): Took the Draw method from ClassRenderer and
10839 made most of it into this new class. Intend to use this class in
10840 the SelectPropertiesDialog for previewing changes.
10841
10842 * Thuban/UI/renderer.py: Use new Color and Classification methods.
10843
10844 * Thuban/UI/tree.py: Formatting changes.
10845
10846 * Doc/thuban.dtd: Add 'label' element
10847
10848 * Thuban/common.py: New. Contains common routines used throughout
10849 the code.
10850 (Str2Num): Takes a string and converts it to the "best" type of
10851 number.
10852
10853 2003-02-14 Bernhard Herzog <[email protected]>
10854
10855 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
10856 dragging flag is always set to 0 even when the tool implementation
10857 raises an exception
10858
10859 2003-02-11 Bernhard Herzog <[email protected]>
10860
10861 * Thuban/UI/application.py (ThubanApplication.splash_screen): New
10862 method to create a splash screen.
10863 (ThubanApplication.ShowMainWindow): New. Show the main window.
10864 Needed so the splash screen can display the mainwindow
10865 (ThubanApplication.OnInit): Call the
10866 new splash_screen method to determine whether the application
10867 should display a splash screen. If it displays a splash screen do
10868 not immediately show the main window.
10869
10870 2003-02-11 Jonathan Coles <[email protected]>
10871
10872 * Thuban/Model/classification.py: Added import line to fix
10873 feature conflicts between running on python2.2 and python2.1.
10874
10875 * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
10876 onto the clinfo parameter, so removed the deepcopy().
10877
10878 2003-02-10 Jonathan Coles <[email protected]>
10879
10880 * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
10881 Added element_open variable to track opening and closing of tags
10882 so that tags that don't span more than one line are closed with
10883 /> instead of </tag_name>. Use the GetDefault*() methods of
10884 the Classification class.
10885
10886 * Thuban/Model/classification.py (Classificaton): Added set and
10887 get methods for the default data. The class also takes a layer
10888 reference so that modification messages can be sent. Fixed the
10889 methods to use the new ClassData class.
10890 (ClassData): New class to encapsulate the classification data
10891
10892 * Thuban/Model/layer.py (Layer): Remove the
10893 Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
10894 SetDefault*() methods on the layer's classification object.
10895 (Layer.__init__): Use the new SetDefault*() methods in the
10896 Classification class.
10897
10898 * Thuban/Model/load.py (ProcessSession): Use the new ClassData
10899 object instead of a dictionary.
10900
10901 * Thuban/UI/classifier.py (ClassRenderer): New class to
10902 draw the classifications in the dialog box's table.
10903 (Classifier): Modified to use the ClassRenderer class.
10904
10905 * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
10906 methods of the Classification class.
10907
10908 * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
10909 of the ClassData class.
10910
10911 * test/test_classification.py, test/test_layer.py,
10912 test/test_map.py, test/test_session.py: Fix the tests to work
10913 with the above code changes.
10914
10915 2003-02-03 Jonathan Coles <[email protected]>
10916
10917 * Thuban/Model/classification.py (Classification): Added getNull()
10918 to return the NullData reference
10919
10920 * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
10921 Layer.SetStrokeWidth): Modified these functions to change the
10922 null data in the classification rather than keep these values
10923 directly in the Layer class. Menu options to change these values
10924 work again.
10925
10926 2003-01-28 Jonathan Coles <[email protected]>
10927
10928 * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
10929 Fixed crashing problem on some systems. Dialog box shows
10930 classification data.
10931
10932 * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
10933 Colors in the tree view.
10934
10935 * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
10936 the tree info for classifications. Commented out unnecessary lines.
10937
10938 * Thuban/Model/classification.py (Classification.TreeInfo): New
10939 function to add information about the classification into the
10940 tree view.
10941
10942 2003-01-27 Jan-Oliver Wagner <[email protected]>
10943
10944 * Thuban/__init__.py (_): New.
10945
10946 * Thuban/Model/classification.py, Thuban/Model/extension.py,
10947 Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
10948 Thuban/Model/session.py, Thuban/UI/application.py,
10949 Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
10950 Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
10951 Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
10952 Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
10953 Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
10954
10955 2003-01-27 Jonathan Coles <[email protected]>
10956
10957 * Thuban/Model/layer.py: Classification initialization calls.
10958
10959 * Thuban/Model/classification.py: Created class to encapsulate
10960 a layer classification. Supports specific data points and
10961 ranges.
10962
10963 * Thuban/Model/load.py: Added support for loading classification
10964 information.
10965
10966 * Thuban/Model/save.py: Added support for saving classification
10967 information.
10968
10969 * Thuban/UI/classifier.py: Initial class for a dialog box for
10970 specifying classification information.
10971
10972 * Thuban/UI/mainwindows.py: Support for opening the classifier
10973 dialog.
10974
10975 * Thuban/UI/renderer.py: Support for drawing a layer with the
10976 classification information.
10977
10978 * Data/iceland_sample_class.thuban: iceland_sample with
10979 classification data.
10980
10981 * test/test_classification: Tests for the Classification class.
10982
10983 2002-12-09 Bernhard Herzog <[email protected]>
10984
10985 * test/test_command.py: New. Tests for the command classes.
10986
10987 * Thuban/UI/command.py (ToolCommand): New class for tool commands.
10988 (Command.IsTool): New method to distinguish between command
10989 switching tools and other commands.
10990
10991 * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
10992 the tool to avoid direct assignments to instance variables
10993 (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
10994 (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
10995 change the tool
10996
10997 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
10998 active tool's command turns insensitive, disable the tool.
10999 (_tool_command): Use the new ToolCommand class
11000
11001 * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
11002 SelectTool method to change the tool
11003 (iconfile): Use the ToolCommand class
11004
11005 2002-12-03 Bernhard Herzog <[email protected]>
11006
11007 * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
11008 the case of selected items that are not children of Layers or Maps
11009 properly. Previously this bug would trigger an assertion in
11010 wxWindows.
11011
11012 2002-11-06 Frank Koormann <[email protected]>
11013
11014 * Thuban/UI/mainwindow.py: Altered the order of tools in the
11015 toolbar: First now are all navigation tools (Zoom In/Out, Pan,
11016 Full Extent).
11017
11018 2002-10-23 Bernhard Herzog <[email protected]>
11019
11020 * setup.py (setup call): version now 0.1.3
11021
11022 * MANIFEST.in: Add the files in test/
11023
11024 * test/README: Add note about tests requiring the iceland data
11025
11026 * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
11027 copyright notice.
11028
11029 2002-10-18 Bernhard Herzog <[email protected]>
11030
11031 * test/test_map.py
11032 (TestMapWithContents.test_projected_bounding_box): Use an explicit
11033 epsilon.
11034
11035 * test/support.py (FloatComparisonMixin.assertFloatEqual)
11036 (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
11037 message if the assertion fails and don't return the return value
11038 of self.assert_. In assertFloatSeqEqual the return meant that not
11039 all items of the sequence were compared.
11040
11041 2002-09-20 Bernhard Herzog <[email protected]>
11042
11043 * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
11044
11045 * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
11046
11047 * test/test_map.py (TestMapWithContents.test_tree_info): Create
11048 the string with the bounding box on the fly because of platform
11049 differences in the way %g is handled.
11050
11051 * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
11052 DBFfile too because Thuban layers can't yet cope missing DBF
11053 files.
11054
11055 2002-09-20 Bernhard Herzog <[email protected]>
11056
11057 * test/test_menu.py: Use initthuban instead of
11058 add_thuban_dir_to_path to initialize Thuban.
11059
11060 * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
11061 Mixin class for float comparisons
11062 (SubscriberMixin): New. Mixin class to test messages sent through
11063 the Connector class
11064
11065 * test/README: Fix a typo and add the -v flag to the command for
11066 individual tests
11067
11068 * test/test_session.py: New. Test cases for Thuban.Model.session
11069
11070 * test/test_proj.py: New. Test cases for Thuban.Model.proj
11071
11072 * test/test_map.py: New. Test cases for Thuban.Model.map
11073
11074 * test/test_layer.py: New. Test cases for Thuban.Model.layer
11075
11076 * test/test_label.py: New. Test cases for Thuban.Model.label
11077
11078 * test/test_connector.py: New. Test cases for Thuban.Lib.connector
11079
11080 * test/test_color.py: New. Test cases for Thuban.Model.color
11081
11082 * test/test_base.py: New. Test cases for Thuban.Model.base
11083
11084 2002-09-13 Bernhard Herzog <[email protected]>
11085
11086 * Thuban/Model/session.py (Session.forwarded_channels): Forward
11087 the CHANGED channel too.
11088
11089 * Thuban/Model/map.py (Map.forwarded_channels): Forward the
11090 CHANGED channel too.
11091 (Map.__init__): Call the Modifiable constructor as well.
11092
11093 * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
11094 event if the modified flag changes.
11095 (Modifiable.changed): Tweak the doc-string.
11096
11097 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
11098 (MainWindow.set_position_text): Put the code that puts the text
11099 with the mouse position into the status bar into the new method
11100 set_position_text so that it can overwritten in derived classes.
11101
11102 2002-09-12 Bernhard Herzog <[email protected]>
11103
11104 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
11105 message box on the main window.
11106
11107 2002-09-11 Bernhard Herzog <[email protected]>
11108
11109 * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
11110 the 'E' because it's less likely to interfere with other menu
11111 entries.
11112 (MainWindow.build_menu): remove an incorrect comment.
11113
11114 2002-09-10 Bernhard Herzog <[email protected]>
11115
11116 * Thuban/UI/mainwindow.py (MainWindow.Map): New.
11117 (_tool_command): Add sensitive parameter
11118 (_has_visible_map): Sensitivity callback to tools and other
11119 commands that require a visible map. Use it in map_zoom_in_tool,
11120 map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
11121 and map_full_extent
11122
11123 2002-09-06 Bernhard Herzog <[email protected]>
11124
11125 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
11126 VIEW_POSITION
11127
11128 2002-09-04 Frank Koormann <[email protected]>
11129
11130 * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
11131
11132 2002-09-02 Bernhard Herzog <[email protected]>
11133
11134 * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
11135 wxWindows already and our implementation doesn't work correctly
11136 with wxGTK 2.3:
11137 (MapCanvas.__init__): Remove the instance variable
11138 (MapCanvas.OnPaint): Always call do_redraw when there's a map to
11139 be drawin
11140 (MapCanvas.OnIdle): Removed.
11141
11142 * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
11143 a parameter to determine the size of the rectangle.
11144 (MapCanvas.find_shape_at): Create the box around the point on a
11145 layer by layer basis and make the size depend on the shape type.
11146 This solves a problem with the selection of point shapes at the
11147 border of the layer's bounding box
11148
11149 2002-08-30 Bernhard Herzog <[email protected]>
11150
11151 * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
11152 for the sensitivity of remove layer.
11153 (_can_remove_layer): New. Sensitivity callback for remove layer
11154 (Command layer_remove): Use _can_remove_layer
11155
11156 * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
11157 determine whether a given layer can be deleted.
11158
11159 * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
11160 (MapCanvas.do_redraw): Get rid of the unused update_region
11161 instance variable
11162
11163 * Thuban/UI/view.py: Add/update some doc-strings.
11164
11165 * test/: new subdirectory with a bunch of unit tests.
11166
11167 * test/README, test/test_table.py, test/test_save.py,
11168 test/test_menu.py, test/test_load.py: Initial set of tests and
11169 brief instructions on how to run them
11170
11171 2002-08-29 Bernhard Herzog <[email protected]>
11172
11173 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
11174 arcs with multiple parts.
11175
11176 * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
11177 Handle degenrate rectangles.
11178
11179 * Thuban/Model/table.py: Make writing records work correctly:
11180 (Table.__init__): Keep track of whether the DBF is open for
11181 writing
11182 (Table.write_record): Open the DBF file for writing when necessary
11183
11184 2002-08-27 Bernhard Herzog <[email protected]>
11185
11186 * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
11187 dbf files only for reading by default. Use a new writable dbf
11188 object for writing.
11189
11190 2002-08-26 Bernhard Herzog <[email protected]>
11191
11192 * Thuban/UI/mainwindow.py: Refactor the context creation:
11193 (MainWindow.Context): New method to return a context
11194 (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
11195 new method
11196
11197 * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
11198 layer table specific code from TableGrid into LayerTableGrid
11199 (TableFrame, LayerTableFrame): Split the layer table specific code
11200 from TableFrame into LayerTableFrame
11201 (LayerTableGrid.select_shape): Remove a debug print
11202
11203 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
11204 LayerTableFrame
11205
11206 2002-08-23 Bernhard Herzog <[email protected]>
11207
11208 * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
11209 absolute filename.
11210
11211 2002-08-22 Bernhard Herzog <[email protected]>
11212
11213 * Thuban/Model/table.py (Table.write_record): New method to write
11214 records.
11215 (Table.__init__): Open the DBF file for writing too.
11216
11217 * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
11218 into the underlying table.
11219
11220 * extensions/shapelib/shapefil.h (DBFCommit),
11221 extensions/shapelib/dbfopen.c (DBFCommit): New API function to
11222 commit any changes made to the DBF file.
11223
11224 * Thuban/UI/mainwindow.py (make_check_current_tool)
11225 (_tool_command): Put the code that generates the "checked"
11226 callback into a separate function so that we can reuse it
11227 elsewhere
11228
11229 * Thuban/Model/save.py (Saver): New class to handle serializing a
11230 session into an XML file. The main reason to introduce a class is
11231 that applications built on Thuban can derive from it so that they
11232 can save additional information in a session file.
11233 (save_session): Delegate almost all the work to the Saver class.
11234 Rename the filename argument to file because it may be a file like
11235 object now.
11236
11237 * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
11238 code. Remove the little test code which would be executed when the
11239 module is run as a script which didn't work anymore since it can't
11240 import the other Thuban modules.
11241 (ProcessSession, load_session): Refactor the ProcessSession to
11242 have one method for each element start and end tag so that derived
11243 classes can easily override the processing of individual tags.
11244 Also, always parse with namespaces enabled because applications
11245 built on top of Thuban will likely use namespaces if they extend
11246 the session file format.
11247
11248 2002-08-21 Bernhard Herzog <[email protected]>
11249
11250 * setup.py (ThubanInstall.run): Don't repr install_lib_orig
11251 because thubaninit_contents will do it for us.
11252
11253 2002-08-16 Jan-Oliver Wagner <[email protected]>
11254
11255 * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
11256 tree window already open
11257
11258 2002-08-15 Bernhard Herzog <[email protected]>
11259
11260 * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
11261 with self.
11262
11263 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
11264 when we have actually captured it.
11265
11266 * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
11267 shapefile and destroy the table.
11268
11269 * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
11270
11271 2002-08-14 Bernhard Herzog <[email protected]>
11272
11273 * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
11274 instance variable columns
11275 (RecordTable.GetTypeName): row and col may be negative in some
11276 cases.
11277
11278 * setup.py (InstallLocal.initialize_options)
11279 (InstallLocal.finalize_options, InstallLocal.user_options): New
11280 option create-init-file to build a thubaninit.py when running
11281 install_local
11282 (InstallLocal.run): Create the thubaninit.py module when requested
11283 (thubaninit_contents): Split the template into several parts and
11284 create a new function thubaninit_contents that creates the
11285 contents of a thubaninit module.
11286 (ThubanInstall.run): Use the new function to create the thubaninit
11287 module.
11288
11289 2002-07-30 Bernhard Herzog <[email protected]>
11290
11291 * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
11292 cleanup.
11293 (ThubanApplication.MainLoop): Extend to automatically call OnExit.
11294
11295 * Thuban/Model/session.py (Session.Destroy): Don't bypass the
11296 direct base class' Destroy method.
11297
11298 * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
11299 layers.
11300 (Map.Destroy): Destroy the label_layer as well and call the
11301 inherited Desatroymethod first so that no more messages are
11302 issued.
11303 (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
11304 message if the stacking order actually has changed. Add
11305 doc-strings.
11306 (Map.BoundingBox): Correct the doc-string.
11307 (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
11308 (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
11309
11310 * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
11311 all labels.
11312
11313 2002-07-29 Bernhard Herzog <[email protected]>
11314
11315 * Thuban/Model/map.py (Map.subscribe_layer_channels)
11316 (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
11317 to a layer's channels into separate methods.
11318 (Map.RemoveLayer, Map.AddLayer): Call the new methods
11319 (Map.Destroy): Unsubscribe from a layer's channels before
11320 destroying it.
11321
11322 * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
11323 selected_layer parameter to searched_layer which is the layer to
11324 search in.
11325 (MapCanvas.SelectShapeAt): New parameter layer to restrict the
11326 search to that layer. Return the selected layer and shape.
11327
11328 * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
11329 typo
11330
11331 2002-07-24 Bernhard Herzog <[email protected]>
11332
11333 * Thuban/UI/application.py (ThubanApplication.create_session):
11334 Extend the doc string.
11335 (ThubanApplication.subscribe_session)
11336 (ThubanApplication.unsubscribe_session): New methods to
11337 subscribe/unsubscribe to/from session channels.
11338 (ThubanApplication.SetSession): Call the new methods here.
11339 (ThubanApplication.maps_changed, ThubanApplication.set_map):
11340 Renamed set_map to maps_changed. Its now a subscriber for
11341 MAPS_CHANGED.
11342
11343 * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
11344 x-coordinate in case of simple clicks
11345
11346 * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
11347 don't pass it as a parameter
11348
11349 * Thuban/Model/session.py (Session.RemoveMap): New
11350
11351 * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
11352 window size into a parameter.
11353
11354 2002-07-23 Bernhard Herzog <[email protected]>
11355
11356 * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
11357 just commands.
11358
11359 * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
11360 parameter list a bit to allow setting the window title and the
11361 initial message in the status bar. Update the callers.
11362
11363 * Thuban/UI/application.py (ThubanApplication.OnInit)
11364 (ThubanApplication.CreateMainWindow): Put the mainwindow
11365 instantiation into a separate method so that it can be overridden
11366 by a subclass.
11367
11368 2002-07-19 Bernhard Herzog <[email protected]>
11369
11370 * Thuban/Model/session.py: Issue a CHANGED message every time
11371 another changed message is issued to make it easier to get
11372 notified of changes.
11373 (Session): Update the doc string
11374 (Session.forward): Issue changed-events as CHANGED as well.
11375 (Session.changed): Overwrite the inherited version to issue
11376 CHANGED events as well.
11377
11378 * Thuban/UI/tree.py: We can now simply subscribe to the session's
11379 CHANGED channel to be informed of changes.
11380 (SessionTreeCtrl.session_channels): Not needed any longer.
11381 (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
11382 Only have to (un)subscribe CHANGED
11383
11384 * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
11385
11386 * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
11387 for the wxPython locale bug to __init__.py so that it's
11388 automatically executed by anybody using UI code from Thuban.
11389
11390 2002-07-18 Bernhard Herzog <[email protected]>
11391
11392 * Thuban/UI/main.py (main): app no longer needs to be global
11393
11394 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
11395 as parameter and store it in an instance variable
11396 (MainWindow.invoke_command, MainWindow.update_command_ui)
11397 (MainWindow.save_modified_session, MainWindow.NewSession)
11398 (MainWindow.OpenSession, MainWindow.SaveSession)
11399 (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
11400 application object.
11401
11402 * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
11403 the main window with self.
11404
11405 * Thuban/UI/context.py: New module with the context class
11406
11407 * Thuban/UI/command.py (Command): Update doc string.
11408
11409 * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
11410 MainWindow.update_command_ui): Pass an instance of the context
11411 class to the command's methods
11412 (check_current_tool, call_method): Handle the new context
11413 implementation
11414
11415 * Examples/simple_extensions/simple_tool.py (simple_tool,
11416 check_simple_tool): Handle the new context implementation
11417
11418 * Examples/simple_extensions/simple_command.py (simple_command):
11419 Handle the new context implementation. Update the comments about
11420 the context.
11421
11422 * Thuban/UI/application.py (ThubanApplication.SetSession): Add
11423 doc-string
11424 (ThubanApplication.Session): New method to return the session
11425 object
11426
11427 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
11428 interactor's selected_layer may not be a layer of the current
11429 session when the tree is updated while a new session is being set.
11430
11431 2002-07-17 Bernhard Herzog <[email protected]>
11432
11433 * Thuban/UI/tree.py (color_string): Removed. No longer used.
11434 (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
11435 update_tree into update_tree and add_items. The tree now uses a
11436 more generic way to display the contents of the tree.
11437 (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
11438
11439 * Thuban/Model/layer.py (Layer.TreeInfo),
11440 Thuban/Model/extension.py (Extension.TreeInfo),
11441 Thuban/Model/map.py (Map.TreeInfo),
11442 Thuban/Model/session.py (Session.TreeInfo):
11443 Add TreeInfo methods to implement the new tree view update scheme
11444
11445 2002-07-16 Bernhard Herzog <[email protected]>
11446
11447 * Thuban/UI/application.py: Don't use "import from" for the
11448 MainWindow. It can't always be resolved.
11449 (ThubanApplication.OnInit): change reference to MainWindow
11450 accordingly.
11451
11452 * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
11453 completely
11454
11455 2002-07-10 Bernhard Herzog <[email protected]>
11456
11457 * setup.py (create_init_module): New configurable variable whose
11458 default depends on the platform we're running on.
11459 (ThubanInstall.initialize_options): Initialize
11460 self.create_init_module from the global create_init_module
11461 (ThubanInstall.user_options): indictate that the options
11462 create-init-module and init-module-dir have arguments.
11463
11464 * setup.py: In the setup call change the version number to include
11465 cvs.
11466
11467 * MANIFEST.in: Add the files in Examples
11468
11469 2002-07-09 Bernhard Herzog <[email protected]>
11470
11471 * setup.py: In the setup call, use the thuban homepage as the
11472 value of the url parameter.
11473
11474 * Examples: New subdirectory for examples.
11475
11476 * Examples/simple_extensions/simple_tool.xpm,
11477 Examples/simple_extensions/simple_tool.py,
11478 Examples/simple_extensions/simple_command.py,
11479 Examples/simple_extensions/README: Simple examples showing how to
11480 add new commands and tools.
11481
11482 * setup.cfg (bdist_rpm): Add the default value for prefix and tell
11483 bdist_rpm that we also have an install script.
11484 (bdist_inno): Add 2002 to the copyright notice.
11485
11486 * setup.py: Create a file in python's site-packages directory to
11487 make installation of Thuban as a library easier.
11488 (ThubanInstall.user_options): Add two new options,
11489 create-init-module and init-module-dir
11490 (ThubanInstall.expand_with_pure_python_dirs): New method to expand
11491 filenames for installation in the default directories.
11492 (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
11493 the inherited methods to capture some filenames before they're
11494 transformed too much by distutils.
11495 (ThubanInstall.run): Create the init module if requested.
11496 (ThubanInstall.thuban_init_filename): New method to return the
11497 full name of the init module.
11498 (ThubanInstall.get_outputs): Append the filename of the init
11499 module.
11500
11501 2002-07-08 Bernhard Herzog <[email protected]>
11502
11503 * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
11504 handle the prefix properly which means that the default for the
11505 installation prefix should be /usr for RPMs and /usr/local when
11506 doing a normal source install.
11507 (bdist_rpm_install_script): Script to override the default install
11508 commands in the specfile generated by the bdist_rpm command.
11509 (thuban_bdist_rpm.user_options): Add a prefix option
11510 (thuban_bdist_rpm.initialize_options): Init the prefix option.
11511 Create the script files for the spec files as empty files here
11512 (thuban_bdist_rpm._make_spec_file): Override the inherited method
11513 to fill the script files with content.
11514
11515 * Thuban/Model/save.py (relative_filename): Wrapper around
11516 Thuban.Lib.fileutil.relative_filename that accepts an empty dir
11517 argument. save_session now automatically uses this version,
11518 solving a problem when saving to a relative filename.
11519
11520 * setup.py: In the setup call, make sure that the library
11521 directories are under $prefix/lib not directly under $prefix.
11522
11523 2002-06-20 Jan-Oliver Wagner <[email protected]>
11524
11525 * Thuban/Model/extension.py: new module to handle extension objects.
11526 * Thuban/Model/messages.py: new messages for extensions.
11527 * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
11528 Session.AddExtension): new for handling extensions.
11529 Also some other minor changes to round up extension handling.
11530 * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
11531 of Extension titles and title and names of its objects.
11532
11533 2002-05-29 Bernhard Herzog <[email protected]>
11534
11535 * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
11536 the events for a command.
11537 (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
11538 Call bind_command_events to bind the events. add_toolbar_command
11539 can now bind events too so that it's possible to have commands
11540 that are only available through the toolbar.
11541 (MainWindow.init_ids): New instance variable events_bound to keep
11542 track of for which commands events have been bound.
11543
11544 2002-05-28 Bernhard Herzog <[email protected]>
11545
11546 * Thuban/UI/menu.py: New module to build and manage menus.
11547
11548 * Thuban/UI/mainwindow.py: Remove some unused imports.
11549 (MainWindow.__init__, main_menu): move the definition of the main
11550 menu from __init__ to the Menu instance main_menu.
11551 (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
11552 build the menu bar and sub-menus from a menu description.
11553
11554 * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
11555 startup file
11556 (ThubanApplication.read_startup_files): New method to run
11557 ~/.thuban/thubanstart.py
11558
11559 * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
11560 Move the toolbar definition to the Menu instance main_toolbar.
11561 (MainWindow.build_toolbar): New method to build the toolbar
11562 similar to the build_menu methods
11563
11564 2002-05-23 Bernhard Herzog <[email protected]>
11565
11566 * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
11567 layer_outline_color. Fix it in the definition of the command too.
11568
11569 * Thuban/UI/command.py (Command): Fix typo in doc string
11570
11571 2002-05-22 Bernhard Herzog <[email protected]>
11572
11573 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
11574 in the docstring
11575
11576 2002-05-15 Bernhard Herzog <[email protected]>
11577
11578 * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
11579 when the shapefile is empty.
11580 (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
11581 now return None for empty shapefiles. Update doc-strings.
11582
11583 * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
11584 the layer's bbox being None.
11585
11586 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
11587 layer's bbox being None.
11588
11589 * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
11590 necessary.
11591 (MapCanvas.__init__): New instance variables, last_selected_layer
11592 and last_selected_shape to determine how the selection has
11593 changed.
11594
11595 * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
11596 AutoSizeColumns because it will cause a traversal of the entire
11597 table which for large .dbf files will take a very long time.
11598
11599 2002-05-14 Bernhard Herzog <[email protected]>
11600
11601 * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
11602 maximum depth for the tree than shapelib does by default.
11603
11604 2002-05-10 Bernhard Herzog <[email protected]>
11605
11606 * setup.py (py_modules): The shptree modules doesn't have a
11607 wrapper, so don't include it in the py_modules
11608
11609 2002-05-08 Bernhard Herzog <[email protected]>
11610
11611 * extensions/shapelib/shptree.c (compare_ints): Make arguments
11612 const void * as in the qsort prototype
11613 (SHPTreeFindLikelyShapes): Remove some unused variables.
11614
11615 * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
11616 maintains to redraw the window during a drag.
11617 (MapCanvas.unprojected_rect_around_point): New method to determine
11618 a small region around a point for hit-testing.
11619 (MapCanvas.find_shape_at): Only test the shapes in a small region
11620 around the point.
11621
11622 * setup.py: Increment the version to 0.1.2
11623
11624 * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
11625 debug print and set session to None after unsubscribing
11626
11627 2002-05-07 Bernhard Herzog <[email protected]>
11628
11629 * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
11630 the file to have a .thuban extension.
11631
11632 * Thuban/UI/tree.py (session_channels): New class constant with
11633 all the session channels to subscribe to to update the tree
11634 (SessionTreeCtrl.session_changed): Remember the session so that we
11635 can unsubscribe properly. Use the new class constant to
11636 unsubscribe from the old session and subscribe to the new one.
11637 (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
11638 subscriptions of the SessionTreeCtrl.
11639 (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
11640
11641 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
11642 Session Tree" command to the file menu.
11643
11644 * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
11645 as update_region to the renderer.
11646
11647 * Thuban/UI/renderer.py
11648 (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
11649 update box is now directly a tuple, not a wxRect anymore.
11650
11651 * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
11652 prints.
11653
11654 2002-05-07 Bernhard Herzog <[email protected]>
11655
11656 * setup.py: Add the shptree extension module. See
11657 extensions/pyshapelib/ChangeLog for more details.
11658
11659 * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
11660 extensions/shapelib/dbfopen.c: Really update to the versions of
11661 shapelib 1.2.9. For some reason it wasn't really done on
11662 2002-04-11.
11663
11664 * extensions/shapelib/shptree.c: Modified version of shptree.c of
11665 shapelib 1.2.9. The only real difference is the use of qsort
11666 instead of a bubble sort implementation
11667
11668 * Thuban/Model/layer.py (Layer.__init__): New instance variable
11669 shapetree to hold the shapelib quadtree for the shapefile
11670 (Layer.open_shapefile): Create the quad tree.
11671 (Layer.ShapesInRegion): New method to return the ids of shapes in
11672 a given region using the quad tree.
11673
11674 * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
11675 comment
11676 (draw_polygon_shape): Accept both arcs and polygons.
11677 (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
11678 the api.
11679
11680 * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
11681 return the shape ids to be rendered in a given layer.
11682 (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
11683 ids. Use draw_polygon_shape to draw arc shapes as well.
11684 (ScreenRenderer.RenderMap): New parameter for the rectangle that
11685 has to be updated
11686 (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
11687 calling it's ShapesInRegion method.
11688
11689 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
11690 update_region for the update region.
11691 (MapCanvas.OnPaint): Maintain the update region
11692 (MapCanvas.do_redraw): Pass the bounding box of the update_region
11693 to the renderer when drawing the bitmap. Reset the update_region.
11694
11695 2002-05-03 Bernhard Herzog <[email protected]>
11696
11697 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
11698 MainWindow.OpenSession): Change the file extension of the session
11699 files to .thuban
11700
11701 * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
11702 Move the map channels to be forwarded by the session into the
11703 class constant with forwarded_channels. Also add
11704 LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
11705 forwarded_channels
11706
11707 * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
11708 typo and some rewording).
11709
11710 2002-05-02 Bernhard Herzog <[email protected]>
11711
11712 * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
11713 around to speed up most redraws:
11714 (MapCanvas.__init__): New instance variable bitmap which holds the
11715 bitmap
11716 (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
11717 self.bitmap to draw.
11718 (MapCanvas.full_redraw): New method to force a full redraw
11719 including the bitmap
11720 (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
11721 make sure the bitmap is redrawn.
11722 (MapCanvas.projection_changed, MapCanvas.set_view_transform,
11723 MapCanvas.shape_selected): Call full_redraw instead of readraw to
11724 make sure the bitmap is redrawn.
11725 (MapCanvas.OnSize): New method to handle size events so that the
11726 bitmap can be redrawn.
11727
11728 2002-04-29 Bernhard Herzog <[email protected]>
11729
11730 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
11731 canvas' VIEW_POSITION event
11732 (MainWindow.view_position_changed): Handler for VIEW_POSITION.
11733 Update the text in the status-bar accordingly.
11734
11735 * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
11736 (MapCanvas.__del__): Implement because Publisher.__del__ has to be
11737 called.
11738 (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
11739 current_position
11740 (MapCanvas.set_current_position): New method to set
11741 current_position. Issue a VIEW_POSITION event
11742 (MapCanvas.CurrentPosition): New public method to return the value
11743 of current_position. Should be called when the VIEW_POSITION event
11744 is processed.
11745 (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
11746 Update the position.
11747 (MapCanvas.OnLeaveWindow): Set the position to None.
11748
11749 * Thuban/UI/messages.py (VIEW_POSITION): New message for the
11750 position in the statusbar
11751
11752 2002-04-26 Frank Koormann <[email protected]>
11753
11754 * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
11755
11756 2002-04-24 Frank Koormann <[email protected]>
11757
11758 * Resources/Bitmaps/identify.xpm: shadow added
11759
11760 * Resources/Bitmaps/fullextent.xpm: new
11761
11762 2002-04-22 Jan-Oliver Wagner <[email protected]>
11763
11764 * Thuban/UI/tree.py (update_tree): added test for None on map bounding
11765 box
11766
11767 2002-04-21 Jan-Oliver Wagner <[email protected]>
11768
11769 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
11770
11771 * Thuban/UI/tree.py (update_tree): added added map extent
11772
11773 * Thuban/UI/mainwindow.py (_method_command): extended by parameter
11774 icon; added map_full_extend as tool
11775
11776 2002-04-19 Jan-Oliver Wagner <[email protected]>
11777
11778 * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
11779 saving _new_ sessions
11780
11781 * Thuban/Model/session.py (create_empty_session): new session
11782 don't have a filename (set to None)
11783
11784 * Thuban/UI/tree.py (update_tree): added filename and modified flag
11785
11786 * Thuban/Model/load.py (ProcessSession): convert projection
11787 parameters from unicode to regular string
11788
11789 * Data/iceland_sample.session: Added UTM Zone 26 projection.
11790
11791 2002-04-11 Bernhard Herzog <[email protected]>
11792
11793 * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
11794 extensions/shapelib/dbfopen.c: Update to the versions of shapelib
11795 1.2.9
11796
11797 * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
11798 the pyshapelib directoy into the list of include dirs, so that
11799 pyshapelib_api.h can be found.
11800
11801 * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
11802 holds the pyshapelib C-API
11803 (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
11804 pyshapelib_api to access the shapelib functions.
11805 (initwxproj): Import the c_api from the shapelib module and
11806 initialize pyshapelib_api.
11807
11808 2002-04-04 Bernhard Herzog <[email protected]>
11809
11810 * setup.py (thuban_bdist_rpm.initialize_options): Use
11811 initialize_options to create the scripts for the rpm.
11812
11813 * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
11814
11815 2002-04-03 Bernhard Herzog <[email protected]>
11816
11817 * setup.py: Increment version to 0.1.1
11818
11819 * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
11820 Layer" and "Remove Layer" commands from the layer menu to the map
11821 menu
11822
11823 2002-02-15 Bernhard Herzog <[email protected]>
11824
11825 * Thuban/Model/layer.py (Layer.Shape): list append only takes one
11826 argument (python <= 1.5.2 erroneously accepted multiuple
11827 arguments)
11828
11829 2002-02-04 Bernhard Herzog <[email protected]>
11830
11831 * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
11832 RecordGrid in the identifyview.
11833 (IdentifyView.__init__): Use IdentifyGridCtrl instead of
11834 IdentifyListCtrl. The grid allows editing of the values.
11835
11836 * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
11837 implementing a grid for a single row of a thuban table.
11838
11839 * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
11840 layers by default. Easier to use than the previous default of only
11841 searching through the select layer which meant that if no layer
11842 was selected, you couldn't select a shape.
11843
11844 * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
11845
11846 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
11847 stroke_width attribute
11848
11849 * Thuban/Model/save.py (save_session): Write the new stroke_width
11850 attribute
11851
11852 * Thuban/Model/load.py (ProcessSession.startElement): Read the
11853 stroke_width attribute
11854
11855 * Thuban/Model/layer.py (Layer.__init__): New parameter and
11856 instance variable stroke_width
11857 (Layer.SetStrokeWidth): Set the stroke_width.
11858
11859 2002-02-01 Bernhard Herzog <[email protected]>
11860
11861 * extensions/thuban/wxproj.cpp (project_points): Fix two
11862 off-by-one errors in the last loop that joins the various parts
11863 together.
11864
11865 2002-01-14 Bernhard Herzog <[email protected]>
11866
11867 * setup.py (data_dist.make_distribution): Fix some typos
11868
11869 2001-09-18 Bernhard Herzog <[email protected]>
11870
11871 * README: Slight tweaking in preparation for the 0.1 release
11872
11873 * setup.cfg: Add section for sdist to create both tgz and zip
11874 archives
11875
11876 * setup.py: increase version number to 0.1
11877 (data_dist): New command class for data distribution
11878
11879 2001-09-14 Bernhard Herzog <[email protected]>
11880
11881 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
11882 Handle the case of no layer (i.e. layer is None) properly.
11883
11884 * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
11885 Set the initial selection of the combo boxes to reflect the
11886 projection we're starting with in a way that works on windows,
11887 too.
11888
11889 * Thuban/Lib/connector.py (Connector.print_connections): Print the
11890 puiblisher's ids in hex to make it easier to compare them to the
11891 standard repr of python methods
11892
11893 * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
11894 messages
11895
11896 2001-09-13 Bernhard Herzog <[email protected]>
11897
11898 * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
11899 deselect the layer if no layer is selected
11900
11901 * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
11902 idle time when there actually is something to draw. If there's
11903 nothing to draw simply clear the window
11904 (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
11905 (MapCanvas.SetMap): force a redraw in all cases because
11906 FitMapToWindow doesn't always do it.
11907 (MapCanvas.ZoomFactor): Add an optional parameter, center, to
11908 specify the point to move into the center of the window
11909 (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
11910 dragged, zoon in/out by a factor of 2
11911 (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
11912 index, i.e. reversed drawing order) so that objects appearing to
11913 be in from of others are selected first. This is probably mostly
11914 relevant for point shapes where the symbols used may overlap
11915
11916 * Thuban/Model/session.py (create_empty_session): Unset the
11917 modified bit before returning it
11918
11919 * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
11920 create_empty_session session to create the new, empty session.
11921
11922 * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
11923 the tool bitmaps.
11924 (MainWindow.OnClose, MainWindow.save_modified_session): Separate
11925 the code that asks whether the session should be saved into the
11926 new method save_modified_session.
11927 (MainWindow.OpenSession, MainWindow.NewSession): Use the new
11928 method to save modified session here too.
11929
11930 2001-09-11 Bernhard Herzog <[email protected]>
11931
11932 * setup.py (InnoIconItem): fix typo
11933
11934 (thuban_bdist_inno.run):
11935 (bdist_inno.run): Move the decision not to create symlinks on
11936 non-nt platforms to thuban_bdist_inno and do it unconditinally
11937 since we never want to create the symlinks here
11938
11939 2001-09-10 Bernhard Herzog <[email protected]>
11940
11941 * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
11942 identify view immediately
11943
11944 * Thuban/UI/controls.py: New file with two classes RecordListCtrl
11945 and SelectableRecordListCtrl that implement the code shared by the
11946 identify view and the label dialog
11947
11948 * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
11949 new class RecordListCtrl
11950
11951 * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
11952 return value of GetValue is None instead of using it as a boolean
11953 directly so that Zero numbers are handled properly.
11954 (LabelListCtrl): Derive from the new class
11955 SelectableRecordListCtrl
11956
11957 * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
11958 (Proj4Dialog.dialogLayout): Make the window resizable and set the
11959 size of the text control explicitly to make the sizers work on
11960 both Windows and X.
11961
11962 2001-09-07 Bernhard Herzog <[email protected]>
11963
11964 * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
11965 that can limit the search to the currently selected layer.
11966 (MapCanvas.SelectShapeAt): Make sure that the currently selected
11967 layer stays selected even when no shape is found
11968 (MapCanvas.FitRectToWindow): If the rect has zero with or zero
11969 height do nothing (avoids zero division errors)
11970
11971 2001-09-06 Bernhard Herzog <[email protected]>
11972
11973 * Thuban/UI/tree.py (SessionTreeCtrl, SessionTreeView.__init__):
11974 Correct the spelling of SessionTreeCtrl. dabbrev is too damn
11975 convenient :-)
11976 (SessionTreeCtrl.__init__, SessionTreeCtrl.update_tree): Introduce
11977 a new instvar layer_to_item to map layers to tree items
11978 (SessionTreeCtrl.layer_selected): Select the appropriate tree item
11979 to match the current selection in the interactor
11980
11981 * Thuban/UI/interactor.py (Interactor.SelectedLayer):
11982 (Interactor.HasSelectedLayer): New methods to query the current
11983 selection
11984
11985 * Thuban/UI/mainwindow.py (MainWindow.current_layer):
11986 (MainWindow.has_selected_layer): Simply call the appropriate
11987 interactor method
11988
11989 * Thuban/UI/mainwindow.py (MainWindow.__init__):
11990 (MainWindow.LayerShowTable):
11991 (MainWindow.identify_view_on_demand): Store the interactor in an
11992 instvar and use that reference instead of going through main.app
11993
11994 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
11995 * Thuban/UI/application.py (ThubanApplication.OnInit):
11996 * Thuban/UI/main.py (main): Create the session tree view in main
11997 with the new mainwindow method ShowSessionTree and not directly
11998 the application's OnInit method
11999
12000 * Thuban/UI/tree.py (myTreeCtrlPanel):
12001 (SessioinTreeCtrl): Rename to SessioinTreeCtrl and turn it into a
12002 TreeCtrl isntead of a panel. This affects most method since we now
12003 refer to self instead of self.tree
12004 (SessionTreeView): New class implementing a non-modal dialog
12005 showing the session tree.
12006
12007 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Pass the
12008 layer to the tableview dialog.
12009
12010 * Thuban/UI/tableview.py: Add some doc-strings
12011 (TableGrid):
12012 (TableGrid.OnRangeSelect):
12013 (TableGrid.OnSelectCell):
12014 (TableFrame.__init__):
12015 (TableFrame.row_selected):
12016 Selecting rows in the grid view now updates the selected shapes
12017 through the TableFrame. To achieve this we derive TableGrid from
12018 Publisher and introduce the message type ROW_SELECTED which the
12019 TableFrame subscribes to and which is issued by OnRangeSelect and
12020 OnSelectCell
12021
12022 (DataTable.SelectRow): Removed because it's no longer needed in
12023 the row/shape selection scheme
12024
12025 * Thuban/UI/dialogs.py: New file implementing common classes for
12026 dialogs
12027
12028 * Thuban/UI/tableview.py (TableGrid.__init__): Don't subscribe to
12029 the SELECTED_SHAPE message anymore. This is now handled by the
12030 parent.
12031 (TableGrid.select_shape): Only update the selection if the shape
12032 is not None.
12033 (TableFrame): Inherit from the new NonModalDialog class.
12034 (TableFrame.__init__, TableFrame.select_shape): Handle the
12035 SELECT_SHAPE message.
12036 (TableFrame.OnClose): Extend the inherited method to unsubscribe
12037 SELECT_SHAPE
12038
12039 * Thuban/UI/mainwindow.py (MainWindow.init_dialogs):
12040 (MainWindow.add_dialog):
12041 (MainWindow.dialog_open):
12042 (MainWindow.remove_dialog):
12043 (MainWindow.get_open_dialog): New methods to maintain a dictionary
12044 of opened non-modal dialogs.
12045
12046 (MainWindow.__init__): Initialize the new non-modal dictionary
12047 management code
12048 (MainWindow.LayerShowTable): maintain separate dialogs for each
12049 table using the non-modal dialog management code to only open a
12050 view once for each table.
12051
12052 (MainWindow.IdentifyTool):
12053 (MainWindow.__init__):
12054 (MainWindow.identify_view_on_demand): Don't open the identify view
12055 in IdentifyTool anymore. This will be done automatically by the
12056 new method identify_view_on_demand which handles the
12057 SELECTED_SHAPE message so that the identify view will be opened on
12058 demand
12059
12060 * Thuban/UI/identifyview.py (IdentifyListCtrl.__init__): Remove
12061 the interactor argument. The SELECTED_SHAPE message is now handled
12062 by the parent.
12063 (IdentifyView.__init__): Add the interactor argument so that we
12064 can handle the SELECTED_SHAPE message here
12065 (IdentifyView.selected_shape): New method to handle the
12066 SELECTED_SHAPE messages
12067
12068 * Thuban/UI/identifyview.py (IdentifyView): Derive from the new
12069 NonModalDialog class
12070 (IdentifyView.OnClose): Extend the inherited version to
12071 unsubscribe SELECT_SHAPE
12072
12073 * Thuban/Model/session.py (Session.UnsetModified): Remove debug prints
12074
12075 2001-09-05 Bernhard Herzog <[email protected]>
12076
12077 * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
12078
12079 * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
12080 interactor to pass through to the MapCanvas
12081
12082 * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
12083 argument to the MainWindow constructor to get rid of the ugly hack
12084 that made main.app available early just so that the mapcanvas
12085 could access the interactor object.
12086
12087 2001-09-04 Bernhard Herzog <[email protected]>
12088
12089 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): New method
12090 that runs a modal message box
12091 (MainWindow.OnClose): Use the new method
12092 (MainWindow.RemoveLayer): Just do nothing in case no layer is
12093 selected. The command should be grayed out anyway, so there's no
12094 need to pop up a message box.
12095 (MainWindow.AddLayer): Pop up a message box with an error message
12096 if the shape file can't be opened
12097
12098 * Thuban/Model/layer.py (Layer.__init__): Open the shapefile
12099 immediately. This will cause an exception in case the file can't
12100 be opened and we can display an appropriate message.
12101
12102 * MANIFEST.in: Add extensions/pyprojection/LICENSE
12103
12104 * setup.py (thuban_bdist_rpm): New class implementing a Thuban
12105 specific bdist_rpm command.
12106
12107 * Thuban/UI/main.py: Catch ImportError exceptions when importing
12108 the locale module because it may not be available on some
12109 installations.
12110
12111 * extensions/pyprojection/LICENSE: Copy of the license text in
12112 Projection.i. Having it in a separate file makes it easier to
12113 refer to license text in e.g. RPMs
12114
12115 2001-09-03 Bernhard Herzog <[email protected]>
12116
12117 * setup.py: use wx-config instead of wxgtk-config because it's
12118 more generic
12119
12120 * setup.py (ThubanInstall.get_outputs): Add the symlink in
12121 <prefix>/bin to the outputs
12122 (ThubanInstall.link_file): New method to link files. We need this
12123 because the standard copy_files refuses to link non-existing
12124 files.
12125 (ThubanInstall.run): Remove the leading install root from the
12126 script filename if an install root was specified and use the new
12127 link_file method
12128
12129 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
12130 the window when the first layer is added to the map.
12131
12132 * setup.py (ThubanInstall.run): Honor the build root (self.root)
12133 when linking thuban.py to <prefix>/bin
12134
12135 2001-08-31 Bernhard Herzog <[email protected]>
12136
12137 * setup.py: In the setup call, the install parameters shouldn't
12138 have trailing slashes because distutils on non-posix platforms
12139 doesn't like that. The same applies to other directories like
12140 "Resources/Bitmaps"
12141
12142 In the configuration section for nt, move the wxWindows directory
12143 optins into the part clearly marked as editable.
12144
12145 (InstallLocal.initialize_options):
12146 (InstallLocal.user_options): remove the currently unused debug
12147 flag
12148 (thuban_build_py.find_all_modules): Add this method so that it
12149 works for our case of having packages and modules in one
12150 distribution as well.
12151 (ThubanInstall.initialize_options):
12152 (ThubanInstall.finalize_options):
12153 (ThubanInstall.user_options):
12154 (ThubanInstall.boolean_options): Add new options, do-symlink and
12155 extra files. Since these are the first ThubanInstall specific
12156 options, override user_options and boolean_options
12157 (ThubanInstall.run): Honor the new do-symlink and extra-files
12158 options.
12159 (ThubanInstall.get_outputs): Add to override the base-class's
12160 version and add the extra-files to the outputs
12161 (bdist_inno): New class for windows distributions with Inno Setup
12162 (InnoIconItem): Helper class for bdist_inno
12163 (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
12164 this together with the appropriate parameters, to the setup call.
12165
12166 * setup.cfg (bdist_inno): added new section for the inno setup
12167 installer
12168
12169 * Thuban/UI/tree.py (myTreeCtrlPanel.__init__): New inst var
12170 changing_selection to avoid recursive selection events when
12171 modifying the selection in response to a selection event.
12172 (myTreeCtrlPanel.normalize_selection): Set the new inst var when
12173 changing the tree's selection.
12174 (myTreeCtrlPanel.OnSelChanged): Only normalize the selection when
12175 we're not being called indirectly from normalize_selection.
12176
12177 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): Call
12178 event.Check only if the command is actuall checkable.
12179 (MainWindow.__init__): Call the toolbar's Realize method to make
12180 sure that the items are actually shown
12181
12182 2001-08-28 Bernhard Herzog <[email protected]>
12183
12184 * setup.py: Fix some doc strings
12185
12186 * ChangeLog: started
12187

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26