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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2542 - (show annotations)
Fri Jan 21 14:25:25 2005 UTC (20 years, 1 month ago) by jan
Original Path: trunk/thuban/ChangeLog
File size: 432235 byte(s)
Various formatting issues resolved,
e.g. superflous spaces,
but also added class names to method names
since some methods have the same name in
different classes.

1 2005-01-21 Jonathan Coles <[email protected]>
2
3 * Thuban/UI/baserenderer.py (proj_params_to_str): New. Takes
4 a projection and returns a formatted string representing the
5 parameters to feed to gdalwarp. This function eliminates
6 redundancy in draw_raster_layer().
7 (BaseRenderer.render_map_incrementally): Removed the optimization which
8 drew the top most raster layer first and then only those vector-
9 based layers that are above it. With the support for transparency
10 this optimization breaks correct behaviour.
11 (BaseRenderer.draw_raster_layer): Reorganize code to support possible
12 future enhancements to raster layer bounding box. The old behaviour has
13 not changed. Also, change calling parameters to draw_raster_data()
14 to specify new RAW data format and mask.
15 (BaseRenderer.draw_raster_data): Change signature to include an optional
16 parameter for mask information. Change documentation to mention
17 support for new parameter and added option for RAW data format.
18 The data argument is now a list of [width, height, data].
19
20 * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Add new optional
21 mask parameter. Add new condition for RAW format, which
22 significantly reduces rendering time. Add condition for
23 mask parameter.
24
25 * libraries/thuban/gdalwarp.cpp (GetImageData): New. Creates a
26 data array of RGB values from the projected image returned from
27 the gdal warping functions. In the case of palette based images, it
28 converts the NO_DATA index to the mask color.
29 (ProjectRasterFile): Removed all custom memory driver references
30 and replaced it with the standard in-memory dataset provided
31 by gdal. The return data is no longer a BMP file, but an array
32 of RGB values, one set triple per pixel.
33
34 * libraries/thuban/bmpdataset.cpp: Removed. Unnecessary.
35 * libraries/thuban/cpl_mfile.h: Removed. Unnecessary.
36 * libraries/thuban/cpl_mfile.cpp: Removed. Unnecessary.
37
38 * setup.py (thuban_build_ext.finalize_options): Removed mention
39 of cpl_mfile.cpp and bmpdataset.cpp files in the list of source
40 files. These are obsolete with the new version of gdalwarp.cpp
41
42 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data):
43 Updated signature.
44 (TestBaseRenderer.test_raster_no_projection): Changed the test
45 data to be data in the uncompressed RAW format returned from
46 ProjectRasterFile.
47
48 2005-01-21 Jan-Oliver Wagner <[email protected]>
49
50 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Made
51 string available for i18n.
52
53 2005-01-20 Russell Nelson <[email protected]>
54
55 * Resources/Projections/defaults.proj: Ruin the speling of the
56 Lambert-93 projection so it doesn't run into the wx UTF-8 bug.
57 It's the wrong thing to do in the long run, but it's necessary for
58 those users until that bug is fixed. Otherwise the projection
59 dialog segfaults. Better to annoy some Lambert-93 users with a
60 spelling mistake than every Fedora Core 3 user of Thuban-CVS.
61
62 2005-01-20 Bernhard Reiter <[email protected]>
63
64 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Added
65 docstring and comment that the warning code here is a hack.
66
67 2005-01-20 Russell Nelson <[email protected]>
68
69 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Warn
70 user about misprojected layers when their lat/lon bounding
71 box exceeds rational lat/lon values.
72
73 2005-01-20 Bernhard Reiter <[email protected]>
74
75 * Thuban/UI/about.py (unicodeToLocale): Improved:
76 Use 'ascii' and then 'replace' for other characters
77 when getdefaultlocale returns None. Thanks to Bernhard H. .
78
79 2005-01-20 Bernhard Reiter <[email protected]>
80
81 * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Added a comment
82 that OnRangeText might be called twice and using None as argument.
83
84 2005-01-20 Bernhard Reiter <[email protected]>
85
86 * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Add a
87 OnRangeText(0) to work around a different in wx Behaviour noticed
88 on MacOSX, thanks to Lorenzo Moretti and Daniel Calvelo for the fix.
89
90 2005-01-20 Bernhard Reiter <[email protected]>
91
92 * Thuban/UI/about.py: take iso-8859-15 when getdefaultlocale returns
93 None. (Fixes rt#2910.)
94
95 2005-01-18 Frank Koormann <[email protected]>
96
97 New Extension: mouseposition
98 Tool to collect mouse click positions (map coordinates) in a dialog.
99
100 * Extensions/mouseposition/__init__.py: New, extension registration
101
102 * Extensions/mouseposition/mouseposition.py: New, implements the
103 dialog and adds a tool to Thuban mainwindow.
104
105 * Extensions/mouseposition/position.xpm: New, icon for tool.
106
107 2005-01-14 Jan-Oliver Wagner <[email protected]>
108
109 * Doc/manual/thuban-manual-de.xml: More translations.
110
111 2005-01-11 Frank Koormann <[email protected]>
112
113 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
114 Fix indention bug.
115
116 2005-01-09 Frank Koormann <[email protected]>
117
118 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
119 BugFix 2901: Explicitly copy layers ClassificationColumn since it
120 is not part of the layers Classification.
121
122 2005-01-03 Frank Koormann <[email protected]>
123
124 * Thuban/UI/renderer.py (ScreenRendererdraw_selection_incrementally):
125 BugFix 2883: Former implementation only worked on classified point
126 layers: KeyError was raised, now use the default size if field is None.
127
128 2004-12-27 Bernhard Reiter <[email protected]>
129
130 svgexport 1.0.0cvs: Fixed label export.
131
132 * Extensions/svgexport/test/test_svgmapwriter.py:
133 class TestSVGRenderer(): New class; new test test_label_font().
134
135 * Extensions/svgexport/svgmapwriter.py
136 (SVGRenderer.label_font()): initialised Font size with self.factor now,
137 makes test_label_font happy.
138
139 * Extensions/svgexport/TODO: crossed out fixed label export item.
140 Added item for options.
141
142 * Extensions/svgexport/__init__.py: Bumped version to 1.0.0cvs.
143
144 2004-12-27 Russell Nelson <[email protected]>
145
146 Middle mouse button pans.
147
148 * Thuban/UI/view.py (MapCanvas.__init__): Subscribe also
149 OnMiddleDown and OnMiddleUp events.
150 (MapCanvas.OnMiddleDown): New. Activate the pan tool and remember the
151 previously used tool.
152 (MapCanvas.OnMiddleUp): New. Reactivate the remebered tool used before
153 pressing the middle mouse button.
154
155 2004-12-27 Jan-Oliver Wagner <[email protected]>
156
157 * Doc/manual/thuban-manual-de.xml: More translations.
158
159 2004-12-23 Jan-Oliver Wagner <[email protected]>
160
161 * Thuban/UI/projdialog.py (ProjFrame.load_user_proj): Added a
162 \n to stderr after the warnings. Thanks to Russell Nelson.
163
164 2004-12-20 Nina Hueffmeyer <[email protected]>
165
166 * Extensions/ogr/ogrshapes.py: Fixed some issues from
167 Bernhard (coding guidelines etc.). Additionally it is now possible to
168 display shapefiles containing feature collections (e.g.polygons
169 with holes). Works with gdal 1.2.1 now.
170
171 * Extensions/ogr/test/test_OGRShapestore.py: Fixed some issues
172 from Bernhard (coding guidelines etc.). If ogr can't be imported,
173 tests are skipped now.
174
175 * Extensions/ogr/ogrstart.py: Fixed some typings.
176
177 2004-12-20 Bernhard Reiter <[email protected]>
178
179 * Extensions/svgexport/TODO: updated to add support for
180 raster layers and labels for 1.0.1.
181
182 * Extensions/svgexport/svgmapwriter.py (draw_raster_layer):
183 Issue a warning now.
184
185 2004-12-19 Bernhard Reiter <[email protected]>
186
187 * Extensions/svgexport/TODO: Added idea to support triggering
188 the application down the pipe.
189
190 2004-12-19 Bernhard Reiter <[email protected]>
191
192 svgexport: Improved code quality, mainly by better naming.
193
194 * Extensions/svgexport/svgmapwriter.py:
195 DrawPath() renamed to DrawPolygonPath(),
196 added documentation, improved comments and variable names.
197
198 * Extensions/svgexport/svgmapwriter.py,
199 Extensions/svgexport/test/test_svgmapwriter.py:
200 All using DrawPolygonPath() now, the default parameter closed=True
201 omitted.
202
203 * Extensions/svgexport/test/test_svgmapwriter.py:
204 renamed test_polygon_opened() to test_polyline()
205 renamed test_transparent_polygon() to test_transparent_polyline()
206
207 2004-12-18 Jan-Oliver Wagner <[email protected]>
208
209 Some fixes of gns2shp extension.
210
211 * Extensions/gns2shp/test/__init__.py: New. Make this directory a
212 package.
213
214 * Extensions/gns2shp/test/test_gns2shp.py: Add some import paths
215 dynamically.
216
217 * Extensions/gns2shp/test/README: Simplified description how to test.
218
219 * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed doc-string,
220 fixed some dimensions of fields according to the GNS documentation
221 which seems to change undocumented.
222 Now killing trailing \n and/or \r from MODIFY_DATE.
223 This fixes RT#2453.
224
225 2004-12-18 Bernhard Reiter <[email protected]>
226
227 svgexport 1.0.0: Treats holes and islands nicely. Documentation added.
228
229 * Extensions/svgexport/test/test_svgmapwriter.py:
230 Added new tests: test_export_polygon_with_hole()
231 and test_polygon_with_hole().
232
233 * Extensions/svgexport/svgmapwriter.py
234 (draw_polygon_shape()): Uses DrawPath correctly now.
235
236 * Doc/manual/thuban-manual.xml: Added documentation for stable
237 extention svgexport.
238 * Doc/manual/thuban-manual-de.xml: Copied English section about
239 svexport over.
240
241 * Extensions/svgexport/__init__.py: Bumped version number to 1.0.0.
242
243 * Extensions/svgexport/svgsaver.py,maplegend.py:
244 Moved from experimental to stable extension menu.
245
246 * Extensions/svgexport/TODO: updated.
247
248
249 2004-12-18 Bernhard Reiter <[email protected]>
250
251 Added Extensions/svgexport/TODO
252
253 2004-12-18 Bernhard Reiter <[email protected]>
254
255 Refactored in svgexport:
256 DrawPath replaces DrawPolygon; added newline in front of "M" in paths.
257
258 * Extensions/svgexport/svgmapwriter.py
259 Added verbosity level 3 to print out polygon points.
260 (class Point): added __repr__
261 (class Brush, __str__()): Added space after ,.
262 (DrawPolygon): Renamed to DrawPath()
263 (DrawPath): Takes list of polygons as input now, adds \n before "M"s.
264 (DrawLines): Using DrawPath now.
265
266 * Extensions/svgexport/test/test_svgmapwriter.py:
267 Replaced DrawPolygon() calls with DrawPath() and put the first argument
268 inside another list. Adapted test data with a newline before "M".
269
270 2004-12-18 Bernhard Reiter <[email protected]>
271
272 Refactored svgexport tests: 9 double tests runs eliminated;
273 code size reduced by 8 lines.
274
275 * Extensions/svgexport/test/test_svgmapwriter.py:
276 (class TestWithDC): Renamed to BaseTestWithDC, moved to top.
277 (class BaseWithDCtools): New, subclass from BaseTestWithDC.
278 (class TestDrawSplines): now subclass from BaseTestWithDCtools,
279 this fixed the double running of the nine tests of TestVirtualDC.
280 (class TestVirtualDC): Using self.dc and self.file from setUp().
281
282 2004-12-17 Bernhard Herzog <[email protected]>
283
284 Two windows specific fixes ported from thuban-1­0-branch:
285
286 * Thuban/UI/about.py (unicodeToLocale): Use getdefaultlocale
287 instead of getlocale because getlocale doesn't return a usable
288 encoding name on a german windows 2000
289
290 * setup.py: windows build: Removed the absolute path names and
291 made all prfixes relative to the directory containing setup.py.
292 Makes it a little easier to adapt to a different system.
293
294 2004-12-16 Bernhard Herzog <[email protected]>
295
296 Add support for PostGIS tables with LINESTRING geometries.
297 Fixes RT#2299
298
299 * Thuban/Model/postgisdb.py (shapetype_map): Add LINESTRING
300
301 * test/postgissupport.py
302 (PostgreSQLServer.get_default_static_data_db): Rename the "roads"
303 table to "roads-multi" because it now uses MULTILINESTRING
304 geometries and introduce a new "roads" table that uses LINESTRING
305 (coords_to_multilinestring): Make the doc string more precise
306 (coords_to_linestring): New. Create a LINESTRING WKT
307 representatin
308 (wkt_converter): Add coords_to_linestring
309 (upload_shapefile): Rephrase the doc-string a bit.
310
311 * test/test_postgis_db.py (TestPostGISShapestoreArc)
312 (LineStringTests)
313 (TestPostGISShapestoreLineString)
314 (TestPostGISShapestoreMultiLineString): Split
315 TestPostGISShapestoreArc into a base class LineStringTests and two
316 derived classes TestPostGISShapestoreLineString for LINESTRING
317 geometries and TestPostGISShapestoreMultiLineString for
318 MULTILINESTRING geometries. Most test methods are in the base
319 class with the exception of tests that explicitly check the raw
320 format.
321
322 2004-12-16 Bernhard Herzog <[email protected]>
323
324 Make the test suite work with PostGIS 0.8.2 and PostgreSQL 7.4
325
326 * test/postgissupport.py (find_postgis_sql): Different postgis
327 versions put the postgis.sql file into slightly different places
328 so we have to look in both. The updated doc string describes this
329 is more detail.
330
331 * test/test_postgis_db.py
332 (TestPostGISSpecialCases.test_column_name_quoting): The return
333 value of UniqueValues is unsorted, so it has to be sorted for
334 comparison.
335
336 2004-12-16 Bernhard Herzog <[email protected]>
337
338 Fix for RT#2237
339
340 * Thuban/UI/projdialog.py (ProjFrame._show_proj_panel): If the
341 panel to be shown is the UnknownProjPanel disable the OK and Try
342 buttons. Otherwise enable them.
343 (ProjFrame.__GetProjection): The UnknownProjPanel returns None for
344 the parameters. In that case __GetProjection also returns None
345 now.
346
347 2004-12-15 Bernhard Herzog <[email protected]>
348
349 * Thuban/UI/classgen.py (GenQuantilesPanel.__init__): Set the
350 minimum number of classes to 2. The calculate_quantiles needs at
351 least two and raises an exception otherwise.
352 Fixes RT#2549
353
354 2004-12-15 Bernhard Herzog <[email protected]>
355
356 * test/postgissupport.py (PostgreSQLServer.execute_sql): Extend to
357 so that it returns a result for select statements.
358 (PostgreSQLServer.server_version): New. Return the version of the
359 server software.
360 (PostgreSQLServer.require_authentication): The format of
361 pg_hba.conf has changed between PostgrSQL 7.2 and 7.3. Check the
362 server version and generate the file in the correct format
363
364 2004-12-15 Bernhard Herzog <[email protected]>
365
366 * test/postgissupport.py (PostgreSQLServer.is_running): Fix typo
367 in the doc string and rephrase it a little.
368
369 2004-12-15 Frank Koormann <[email protected]>
370
371 * test/test_load.py (TestAltPath.checkSession): New, extended checks if
372 session has been loaded successfully. The check is called by the relevant
373 tests after executing load_session().
374
375 2004-12-13 Bernhard Herzog <[email protected]>
376
377 Make sure the region used to determine which shapes are visible
378 actually matches the region on the printed page. If this isn't
379 done properly some shapes might not be printed.
380 Fixes RT #2692
381
382 * Thuban/UI/view.py (MapPrintout.draw_on_dc): The region for the
383 renderer has to be at the same position as the mapregion
384
385 * Thuban/UI/renderer.py (ExportRenderer.RenderMap): self.region
386 has to be moved by (self.shiftx, self.shifty) too.
387
388 2004-12-13 Bernhard Herzog <[email protected]>
389
390 * libraries/pyprojection/Projection.i: Work around a bug in the
391 generated python code which leads to exception in the __del__
392 method when the constructor fails. See the comments in the code
393 for more details.
394
395 * libraries/pyprojection/Projection.py: Updated from Projection.i
396 with SWIG.
397
398 2004-12-13 Bernhard Herzog <[email protected]>
399
400 * test/test_load.py (TestAltPath.test_01_single_path_error_fix)
401 (TestAltPath.test_02_path_error_fix_from_list)
402 (TestAltPath.test_05_path_error_fix_from_list_changed)
403 (TestAltPath.test_06_path_error_fix_from_list_fails): self.session
404 is destroyed in tearDown, so there's no need to do it in a test
405 case.
406
407 * Thuban/Model/load.py (SessionLoader.open_shapefile): Remove a
408 debug print
409
410 2004-12-13 Bernhard Herzog <[email protected]>
411
412 * Extensions/svgexport/test/test_svgmapwriter.py
413 (TestDrawSplines.setUp): Do not use super with the unittest
414 classes because in Python 2.2 they're still old-style classes.
415
416 2004-12-13 Frank Koormann <[email protected]>
417
418 Alternative Path feature: When loading a (moved) session where
419 shapefiles cannot be found, ask the user. Use the specified path
420 if further shapefiles are missing. However, ask the usr for confirmation
421 in such cases.
422
423 * test/test_load.py (TestAltPath): New, tests for alternative path feature
424 in load_session()
425 (Shapefile_CallBack): Helper, implements controllable callback.
426
427 * Thuban/UI/application.py (ThubanApplication.OnInit):
428 Added "alt_path" to self.path
429 (ThubanApplication.OpenSession): Added shapefile_callback as second
430 callback similar to db_connection_callback.
431 (ThubanApplication.run_alt_path_dialog): New, implementaion of
432 shapefile_callback. In addition to raising the dialog the control of
433 self.path('alt_path') is implemented here.
434
435 * Thuban/Model/load.py (SessionLoader.__init__): Added shapefile_callback.
436 (SessionLoader.open_shapefile): Open shapefile, eventually with
437 alternative path. This wrapps the "theSession.OpenShapefile(filename)"
438 formerly used in start_fileshapesource()/start_layer().
439 (SessionLoader.start_fileshapesource): Call open_shapefile().
440 (SessionLoader.start_layer): Call open_shapefile().
441 (load_session): Added shapefile_callback.
442
443 * Thuban/UI/altpathdialog.py: New, implements dialogs for alternative path
444 feature (search / check).
445
446 * Doc/manual/thuban-manual.xml: Added documentation of new feature.
447
448 2004-12-11 Bernhard Reiter <[email protected]>
449
450 svgexport 0.9.2: Point size supports for maps.
451
452 * Extensions/svgexport/svgmapwriter.py: Added import of SHAPETYPE_POINT
453 (def draw_point_shape): new parameter size defaults to 2 as before.
454 (draw_shape_layer_incrementally): Moved draw_func log line higher.
455 Added draw_func call with size when dealing with a point layer.
456
457 * Extensions/svgexport/__init__.py: bumped version to 0.9.2.
458
459 2004-12-11 Bernhard Reiter <[email protected]>
460
461 Made sure that newlines are inserted in the svg path d attributes
462 to raise the chance that the line length will be below 255 characters,
463 as recommended by REC SVG 1.1 in section 8.3.1.
464
465 * Extensions/svgexport/svgmapwriter.py(DrawPolygon):
466 Adding \n before L's and changed whitespace handling.
467
468 * Extensions/svgexport/test/test_svgmapwriter.py:
469 Adapted tests to new whitespace handling of DrawPolygon.
470
471 2004-12-11 Bernhard Reiter <[email protected]>
472
473 * Doc/technotes/coding_guidelines.txt: easy typo fixed.
474
475 * Extensions/svgexport/test/test_svgmapwriter.py:
476 Removed test_drawbezier in favour of new test_drawspline3 and
477 test_drawspline4 within new class TestDrawSplines(TestVirtualDC).
478 All only to test DrawSpline.
479
480 * Extensions/svgexport/svgmapwriter.py(DrawSpline):
481 New implementation now really using the strange algorithm of
482 xfig 3.1's approximated splines and its conversion to postscript
483 with one twist: SVG can do quadratic beziers, so skipped translation
484 to cubic beziers.
485 (TestWithDC): Typo in comment fixed.
486
487 2004-12-09 Martin Schulze <[email protected]>
488
489 * Thuban/Model/classgen.py: Added missing character encoding
490
491 * Extensions/wms/properties.py (OpenWMSProperties): removed
492
493 * Extensions/wms/parser.py (WMSCapabilitiesParser.error): Dropped
494 support for get_srs_discrepancies() since there are no
495 discrepancies anymore (was a thinko)
496
497 * Extensions/wms/layer.py (WMSLayer.GetMapImg): Improved graphic
498 format priority now that more formats are supported globally by
499 the render engine.
500
501 2004-12-08 Silke Reimer <[email protected]>
502 * Extensions/ogr/ogrshapes.py: Substituted ogr-method CloseRings
503 because it is not available in all versions of ogr
504
505 2004-12-08 Bernhard Reiter <[email protected]>
506 * Extensions/ogr/__init__.py: Added empty __init__.py to heal
507 global tests until a real one is commited.
508
509 2004-12-07 Nina Hüffmeyer <[email protected]>
510
511 * /Extensions/ogr/: Adding a new extension to read shapefiles with
512 ogr. It is planned to add other vector formats.
513
514 * /test/runtests.py: Adding tests from /Extensions/ogr/test/.
515
516 2004-12-07 Jan-Oliver Wagner <[email protected]>
517
518 * /Extensions/svgexport/test/test_svgmapwriter.py: Reverting
519 part of a (non-)fix to renable that the tests are always
520 executed.
521
522 2004-12-07 Bernhard Reiter <[email protected]>
523
524 * Extensions/svgexport/test/test_svgmapwriter.py:
525 Added test_drawbezier() to test DrawSpline().
526
527 * Extensions/svgexport/svgmapwriter.py(DrawSpline):
528 Really implemented bezier drawing.
529
530 * Extensions/svgexport/__init__.py: Bumped version of svgexport
531 to 0.9.1 because now the legend examples lines styles
532 will be drawing with beziers.
533
534 2004-12-05 Martin Schulze <[email protected]>
535
536 * Thuban/UI/renderer.py (raster_format_map): Added PNG, TIFF and
537 GIF as supported bitmap image formats (helpful for the WMS extension)
538
539 2004-11-30 Martin Schulze <[email protected]>
540
541 * Extensions/wms/test/test_ogclib.py (TestOGCLib.test_compareURLs):
542 Improved the test for the internal compare method
543
544 2004-11-27 Jan-Oliver Wagner <[email protected]>
545
546 * Thuban/UI/about.py (About.__init__): Added
547 Norbert Solymosi for hungarian translation and Ole Rahn
548 as contrbutor. Moved Bernhard Reiter from Contributor
549 to Developer.
550
551 2004-11-27 Bernhard Reiter <[email protected]>
552
553 * Extensions/svgexport/test/test_svgmapwriter.py:
554 Removed Jan from author list as he did not change enough significant
555 lines yet.
556
557 * Extensions/svgexport/__init__.py: Added Bernhard as author
558 of the Extension.
559
560 2004-11-27 Jan-Oliver Wagner <[email protected]>
561
562 * po/hu.po: New. Hungarian translation. Contributed
563 by Norbert Solymosi.
564
565 2004-11-26 Bernhard Herzog <[email protected]>
566
567 * Extensions/svgexport/test/test_svgmapwriter.py
568 (Testobjectexport.test_transparent_polygon): Commented out some
569 debug prints
570
571 2004-11-24 Jan-Oliver Wagner <[email protected]>
572
573 Fix broken tests for svg extension and added svg legend
574 to Experimental menu.
575
576 * Extensions/svgexport/test/test_svgmapwriter.py: Fix to have
577 the test run correctly even if the extension is a package.
578 Also removed the "import Thuban" which makes no sense.
579
580 * Extensions/svgexport/__init__.py: Fix to have the extensions'
581 test module also be executed from the global test routine.
582 This is done by looking for the absense of the DISPLAY variable.
583
584 * Extensions/svgexport/maplegend.py: Moved the menu entry from Extensions
585 to Experimental menu since this module has yet not reached a stable
586 status (ie. 1.0).
587
588 2004-11-22 Bernhard Reiter <[email protected]>
589
590 * Extensions/svgexport/svgmapwriter.py:
591 Added verbose variable and some logging depending on it.
592 (class VirtualDC(XMLWriter)): Minor improvement in the polygon loop,
593 because counting i is not necessary.
594 (class Pen, class Brush): Added simple __str__ methods.
595 (SVGRenderer.draw_polygone_shape): Fix #2698 (transparent polygons are
596 not exported to svg file) Note: holes still unhandled.
597
598 * Extensions/svgexport/test/test_svgmapwriter.py:
599 Made a baseclass TestWithDC for test needed a DC.
600 Added tests for bug #2698 (transparent polygons are not
601 exported to svg file):
602 Testobjectexport.test_transparent_polygon()
603
604 * Thuban/Model/base.py (UnsetModified):
605 Fixed some typos in docstring.
606
607 * Thuban/UI/baserenderer.py (BaseRenderer.draw_polygon_shape()):
608 Added hints on the used algorithm for handling holes.
609
610 2004-11-20 Jan-Oliver Wagner <[email protected]>
611
612 Some face lifting for the examples.
613
614 * Examples/__init__.py: Make this directory a package.
615
616 * Examples/simple_extensions/__init__.py: Make this directory a package.
617
618 * Examples/simple_extensions/hello_world.py: Moved entry from Extensions
619 menu to Examples menu.
620
621 * Examples/simple_extensions/simple_command.py: Some more comments,
622 minor changes.
623
624 * Examples/simple_extensions/simple_tool.py: Minor changes.
625
626 2004-11-20 Jan-Oliver Wagner <[email protected]>
627
628 Changed way of extension registry for wms and added extension
629 registry for umn_mapserver extension.
630
631 * Extensions/wms/__init__.py: Added registry entry and the importing
632 of the actual wms module. Included a test for the required PyOGCLib.
633
634 * Extensions/wms/wms.py: Removed registry entry (moved to __init__.py).
635
636 * Extensions/umn_mapserver/__init__.py: Added registry entry and the
637 importing of the actual umn mapserver management modules.
638 Included a test for the required Python MapScript.
639
640 2004-11-20 Jan-Oliver Wagner <[email protected]>
641
642 Changed way of extension registry for importAPR, bboxdump
643 and added extension registry for svgexport.extension registry for
644 svgexport.
645
646 * Extensions/importAPR/__init__.py: Added registry entry and the importing
647 of the actual importAPR module.
648
649 * Extensions/importAPR/importAPR.py: Removed registry entry (moved to
650 __init__.py).
651
652 * Extensions/bboxdump/__init__.py: Added registry entry and the importing
653 »···of the actual bboxdump module.
654
655 * Extensions/bboxdump/bboxdump.py: Removed registry entry (moved to
656 »···__init__.py).
657
658 * Extensions/svgexport/__init__.py: Added registry entry and the importing
659 of the svgsaver module.
660
661 * Extensions/svgexport/svgsaver.py: Moved the menu entry from Extensions
662 to Experimental menu since this module has yet not reached a stable
663 status (ie. 1.0).
664
665 2004-11-18 Jan-Oliver Wagner <[email protected]>
666
667 Now the hit test considers the size of point symbols.
668
669 * Thuban/UI/viewport.py (ViewPort._hit_point): Added optional parameter
670 'size' defaulting to the previously fixed value 5.
671 Extended doc-string.
672 (Viewport._find_shape_in_layer): Resolved FIXME regarding flexibility
673 for symbols.
674 Now the size of the largest point symbol is determined to find out
675 about whether the point has been hit.
676 This fixes the problem that only clicks inside a fixed distance of
677 5 where found.
678
679 2004-11-17 Jan-Oliver Wagner <[email protected]>
680
681 Another open issue fixed regarding sizeable symbols: correct rendering of
682 selected symbols.
683
684 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
685 Added consideration of the specific size of point symbols.
686 The property for each point symbol is retrieved and the size applied
687 for the rendering method.
688 Added doc-string.
689
690 2004-11-16 Jan-Oliver Wagner <[email protected]>
691
692 Changed way of Extension Registry for gns2shp and profiling.
693
694 * Extensions/gns2shp/gns2shp.py: Removed registry entry (moved to
695 __init__.py).
696
697 * Extensions/gns2shp/__init__.py: Added registry entry and the importing
698 of the actual gns2shp module.
699
700 * Extensions/profiling/profiling.py: Removed registry entry (moved to
701 __init__.py).
702
703 * Extensions/profiling/__init__.py: Added registry entry and the importing
704 of the actual profiling module.
705
706 2004-10-28 Bernhard Reiter <[email protected]>
707
708 * Extensions/svgexport/: Minor improvements to doc strings.
709
710 2004-10-07 Jan-Oliver Wagner <[email protected]>
711
712 Further elements for sizable point objects now
713 making this feature usable though not yet complete.
714
715 * Thuban/Model/save.py (SessionSaver.write_classification): Write
716 attribute 'size' for cldata when the shape layer is of point type.
717 This also now make the test_load.py tests happy.
718
719 * Thuban/Model/classgen.py (CustomRamp.GetProperties): Added size
720 gradient.
721
722 * Thuban/UI/classifier.py (ID_SELPROP_SPINCTRL): Renamed to
723 ID_SELPROP_SPINCTRL_LINEWIDTH.
724 (ID_SELPROP_SPINCTRL_LINEWIDTH): New Id replaces ID_SELPROP_SPINCTRL.
725 (ID_SELPROP_SPINCTRL_SIZE): New Id.
726 (SelectPropertiesDialog.__init__): Added a second spin control
727 for the size in case the corresponding layer is of point type.
728 (SelectPropertiesDialog._OnSpin): Renamed to _OnSpinLineWidth.
729 (SelectPropertiesDialog._OnSpinLineWidth): New. Former _OnSpin.
730 (SelectPropertiesDialog._OnSpinSize): New. Set size of property
731 and refresh preview.
732
733
734
735 2004-10-04 Martin Schulze <[email protected]>
736
737 * Extensions/wms/test/test_parser.py
738 (TestWMSCapabilitiesParser.test_compareLists): Added missing
739 self-test for compareLists()
740 (TestWMSCapabilitiesParser.test_compareDicts): Added missing
741 self-test for compareDicts()
742 (TestWMSCapabilitiesParser.test_compareLists): Adding more tests
743 to verify the test routine fails with non-equal arguments
744 (TestWMSCapabilitiesParser.test_compareDicts): Adding more tests
745 to verify the test routine fails with non-equal arguments
746
747 2004-10-03 Jan-Oliver Wagner <[email protected]>
748
749 First elements for sizeable point objects.
750
751 * Resources/XML/thuban-1.1.dtd: Added size attribute to cldata.
752
753 * Data/iceland_sample_size.thuban: New. Sample for sized point objects.
754
755 * test/test_load.py (ClassificationTest.TestLayers): Added SetSize in case
756 of a corresponding argument is given.
757 (TestSymbolSize): New. Test the size attribute of cldata.
758
759 * Thuban/Model/classification.py: Removed some trailing whitespaces.
760 (ClassGroupProperties.__init__): Set default size.
761 (ClassGroupProperties.SetProperties): Set the size.
762 (ClassGroupProperties.GetSize): New. Return the size.
763 (ClassGroupProperties.SetSize): New. Set the size.
764 (ClassGroupProperties__eq__): Compare also size.
765 (ClassGroupProperties__repr__): Print also size.
766
767 * Thuban/Model/load.py (SessionLoader.start_cldata): Also parse
768 the size attribute.
769
770 * Thuban/UI/classifier.py (ClassDataPreviewer.Draw): Added doc-string.
771 Also, now there is a return value that indicates whether the drawing
772 size exceeded the given rect extent and if so the new extent.
773 Finally, point objects are drawn depending on the size. If either
774 the width or height is exceeded, the new extent is returned.
775 (ClassRenderer.Draw): Now when calling the previewer drawing function,
776 evaluate the return value and, if not None, adapt the grid widget size
777 accordingly and redraw again.
778
779 * Thuban/UI/baserenderer.py (BaseRenderer.draw_shape_layer_incrementally):
780 If the draw function is for points, call it with the size as additional
781 parameter.
782 (BaseRenderer.draw_point_shape): Added additional, optional parameter for
783 the size. Compute the radius using the size.
784
785 * Extensions/importAPR/apr.py (APR_BMkSym.GetThubanProp): Now
786 that Thuban supports size, apply this correctly.
787
788 * Extensions/importAPR/importAPR.py: Bumped version to 0.1.1.
789
790 2004-10-03 Jan-Oliver Wagner <[email protected]>
791
792 * Doc/manual/thuban-manual-de.xml: Started translation of
793 Map chapter.
794
795 2004-10-01 Martin Schulze <[email protected]>
796
797 * Extensions/wms/properties.py (wmsProperties.__init__): Extended
798 argument for general use through properties-dialog selector
799
800 * Thuban/UI/classifier.py: Register properties dialog classes for
801 both provided layer classes/types.
802
803 * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): The
804 map can be retrieved through the parent which is passed to the
805 constructor anyway and doesn't require an argument of its own,
806 required for the unification of arguments for general use through
807 properties-dialog selector.
808 (MainWindow.OpenOrRaiseDialog): Move the logic for checking
809 whether a dialog is already opened (and raising it to the users
810 attention) and creating a new dialog into a function of its own
811 (MainWindow.OpenLayerProperties): Use the new OpenOrRaiseDialog()
812 method
813 (MainWindow.OpenLayerProperties): Utilise the new ClassMapper for
814 global registration of properties dialog classes (which are indeed
815 layer-specific).
816
817 * Thuban/UI/classifier.py (Classifier.__init__): Unify arguments
818 for general use through properties-dialog selector, the map can be
819 retrieved through the parent and doesn't require an argument of
820 its own.
821
822 * Extensions/wms/wms.py: Register the properties dialog class for
823 the provided WMS layer
824
825 2004-09-28 Jan-Oliver Wagner <[email protected]>
826
827 New feature: Registry for Extensions.
828
829 * Thuban/UI/extensionregistry.py: This module defines a registry for
830 Extensions.
831
832 * Thuban/UI/about.py (About.__init__): Added description
833 of the registered extensions with all of the information.
834
835 * Thuban/Model/extension.py (Extension): Improved doc-string.
836
837 * Extensions/gns2shp/gns2shp.py, Extensions/importAPR/importAPR.py,
838 Extensions/bboxdump/bboxdump.py, Extensions/profiling/profiling.py,
839 Extensions/wms/wms.py: Added registration of the extension.
840
841 2004-09-27 Bernhard Reiter <[email protected]>
842
843 More fixes to svgexport to make used ids unique and
844 conforming to XML's Name production.
845
846 * Extensions/svgexport/test/test_svgmapwriter.py: Added new tests
847 test_xml_id_constraints(), test_make_ide_nosetbaseid() and
848 test_make_id_nonintegersetid(). Switched SetID and SetBaseID.
849 Added Bernhard R. as author.
850 * Extensions/svgexport/svgmapwriter.py (make_id): Using "_" as
851 concatenation char now (makes test_make_ide_nosetbaseid() valid).
852 Also transform second id part with "%d" and catch the TypeError
853 to raise SVGMapWriterError (making test_make_id_nonintegersetid() ok).
854 Corrected typo inBernhard's author line.
855 (SetBaseID): Return the transformed base id. Transform characters
856 which are not alnum() or in ".-_" to binascii.b2a_hex(). Added
857 import binascii. If to be set string starts with "xml" or so, add "t".
858 (draw_shape_layer_incrementally): use the returned value of SetBaseID
859 for used_baseids checks.
860
861 2004-09-25 Bernhard Herzog <[email protected]>
862
863 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
864 Remove a debug print and some tab characters.
865
866 2004-09-25 Bernhard Reiter <[email protected]>
867
868 * Extensions/svgexport/svgmapwriter.py: Added Bernhard R. as Author.
869 (SetBaseID, SetID, make_id): Improved docstring comments to explain
870 the interaction of the three functions and the XML id contrains.
871
872
873 2004-09-23 Jan-Oliver Wagner <[email protected]>
874
875 * Doc/ThubanModel.xmi: New. UML file for Thuban Model
876 Module.
877
878 * Doc/README: Added info on ThubanModel.xmi.
879
880 2004-09-23 Jan-Oliver Wagner <[email protected]>
881
882 * Doc/README: New. Some info about how to generate technical
883 documentation from the source code.
884 This text was send to the Thuban developer mailing list on
885 September 21st 2004 by Bernhard Reiter.
886
887 2004-09-21 Bernhard Reiter <[email protected]>
888
889 Improved the svgexport to only use unique ids. Will issues
890 an error message dialoge when two layer names are the same.
891 ShapeIDs are now added with a dash within the svg ids.
892
893 * Extensions/svgexport/svgmapwriter.py (SVGMapWriterError): New.
894 * Extensions/svgexport/test/test_svgmapwriter.py: Added imports
895 (TestSVGRenderer): New test class with test_make_in() and
896 test_check_for_layer_name_clash()
897 * Extensions/svgexport/svgmapwriter.py (SVGRenderer): Fixed __init__()
898 and draw_shape_layer_incrementally() to not use a baseid twice,
899 satisfying test_check_for_layer_name_clash()
900 (VirtualDC.make_id): Use a dash between baseit and id, satisfies
901 test_make_in().
902 * Extensions/svexport/svgsaver.py: Import SVGMapWriterError, wxOK
903 and wxICON_HAND.
904 (write_to_svg): Put dc and rendering in a try statement and on
905 catching SVGmapWriterError notify the user and delete the target file.
906
907 2004-09-20 Bernhard Reiter <[email protected]>
908
909 * Model/base.by, Model/layer.py: Fixed typos in docstrings.
910
911 2004-09-03 Jan Schüngel <[email protected]>
912
913 * Extensions/umn_mapserver/mapfile(MF_Class.add_thubanstyle): Fix a
914 small bug with the line color. Now the line color will now only set
915 if it is set in Thuban an not Transparent.
916
917 * Extensions/umn_mapserver/mf_export(tblayer_to_map): Fixed a bug with
918 deleting the layers from mapfile. Now all layers will delete backwards
919 from the last.
920
921 2004-08-20 Silke Reimer <[email protected]>
922
923 * Thuban/Model/layer.py:
924 Fixes bug in projection handling: Otherwise very large region might not
925 have valid values in the layer's projection.
926
927 2004-08-20 Silke Reimer <[email protected]>
928
929 * Thuban/UI/about.py:
930 small changes to be consistent with coding style.
931
932 2004-08-13 Martin Schulze <[email protected]>
933
934 * Extensions/wms/test/test_ogclib.py (TestOGCLib.compare_URLs):
935 Adjusted a comment
936
937 2004-08-11 Silke Reimer <[email protected]>
938
939 * Thuban/UI/about.py: Small changes to encoding related stuff to avoid
940 too many and too enhanced imports of locale
941
942 2004-08-10 Silke Reimer <[email protected]>
943
944 * Thuban/UI/about.py: Fixed encoding problem of about dialog: Added
945 function unicodeToLocale() to convert special characters to users
946 locale encoding
947
948 2004-08-10 Jan-Oliver Wagner <[email protected]>
949
950 * Doc/technotes/coding_guidelines.txt: Added rule 'Method names start with
951 lower case letter'
952
953 2004-08-09 Jan Schüngel <[email protected]>
954
955 * ChangeLog: Rewrite the last ChangeLog entry to follow
956 the standard way.
957
958 * Extensions/umn_mapserver/mapfile: Moved the import AnnotationLayer to
959 the function where it is needed, because it don't works if it stands
960 at the beginning.
961 (MF_Layer.__init__): Removed the extra numclassed variable. Now
962 numclasses from the mapscript will be used.
963 (MF_Layer.get_index): New. Return the index of the layer in mapfile.
964 (MF_Layer.set_classes): New. A Classlist will be set to the layer.
965 (MF_Layer.set_metadata): New. A Metadata mapscript object will set.
966 (MF_Layer.remove_allclasses): New. All class of the layer will remove.
967 (MF_Map.create_new_layer): New. A new Layer is created and associated
968 with the mapscript object.
969 (MF_Map.set_layerorder): New. The Layer order like in thuban is set in
970 the mapscript.
971 (MF_Map.add_thubanlayer): Now a new layerobj is created if no one is
972 linked to the layer in thuban, else the layerobject linked to the
973 thubanlayer will be used.
974 AnnotationLayer will now store the filename of the shapefile.
975 (MF_Map.remove_layer): If a layer is removed the associated object
976 must be set new.
977
978 * Extensions/umn_mapserver/mf_export.py(tb_layer_to_map): Add all
979 layers which are exists in thuban to the mapobj. All removed Layers
980 will be removed from the mapobj.
981 Added comments to all functions.
982 (thuban_to_map): No layer will be removed here.
983
984 * Extensions/umn_mapserver/mf_handle.py
985 (_has_umn_mapobj_and_selectedlayer): Activating the layer menu. Now
986 Layersettings for the mapserver kann be edited.
987
988 * Extensions/umn_mapserver/mf_import.py: Now all layers which are
989 imported, will be linked with the associated MF_Layer.
990 (import_mapfile): All layers, which are not selected, will be removed.
991 Disable the "import layer from mapfile" menu option.
992
993 * Extensions/umn_mapserver/sample/iceland.map: Set the status of the
994 Annotation Layer from DEFAULT to OFF. The DEFAULT setting turns the
995 layer on permanently.
996
997 2004-08-03 Jan Schüngel <[email protected]>
998
999 * Extensions/umn_mapserver/mapfile.py(MF_Metadata.remove_allmetadata):
1000 New. This function removes all metadata
1001 (MF_Layer.set_group): New. Set the group setting.
1002 (MF_Layer.get_group): New. Get the group setting.
1003 (MF_Map): Removed the extra numlayers variable, used the mapscript
1004 parameter instead.
1005 (MF_Map.get_numlayers): New. This get numlayers.
1006 (MF_Map.remove_all_layers): New. Removes all layers from the mapobj.
1007 (MF_Map.add_thubanlayer): Replaced the exception handling by a check
1008 if the object is an instance. Also added the annotation layer here to
1009 export, but only the layer is created in the mapfile.
1010
1011 * Extensions/umn_mapserver/mf_export.py(export_mapfile): Removed
1012 the check if a mapobj exist, because its not needed anymore. The
1013 export function is only available if a mapobj exist.
1014 Use the new function to remove all layers.
1015
1016 * Extensions/umn_mapserver/mf_handle.py(Layer_Dialog): Added a group
1017 option and the metadata button. The layer dialog is temporary disabled.
1018 (Metadata_CustomDataTable): Added some functions to show the grid
1019 correct.
1020
1021 * Extensions/umn_mapserver/mf_import.py: Moved the code for showing
1022 the number of layer from import_mapfile to this function.
1023 (AnnotationLayer): New. This Class shows the Annotation layer in
1024 thuban. The layer don't do anything. It's only to show the layer
1025 and to save the layer order.
1026 (add_annotationlayer): New. Import an annotation layer to thuban.
1027 (select_layer2import): New. Import only layers to thuban and not
1028 the other settings like projection or scalebar.
1029 (create_new_mapfile): Moved the _has_umn_mapobj function and the
1030 create_new_mapfile functions from mf_handle.py to mf_import.py.
1031
1032 * Extensions/umn_mapserver/sample/iceland.map: Added the group
1033 parameter to the roads and cultural layers. Also added a new
1034 Annotation Layer for the cultural points.
1035
1036 * Extensions/umn_mapserver/sample/iceland.html: Added the select
1037 option for the annotation layer.
1038
1039 * Extensions/umn_mapserver/sample/index.html: Added the start
1040 parameter for the annotation layer.
1041
1042 2004-08-01 Jan-Oliver Wagner <[email protected]>
1043
1044 * Doc/manual/thuban-manual-de.xml (Chapter Session Management):
1045 translation completed.
1046
1047 * Doc/manual/thuban-manual.xml (Chapter Session Management):
1048 Fixed unprecise description for Save Session.
1049
1050 2004-07-31 Jan-Oliver Wagner <[email protected]>
1051
1052 Started translation of Users Manual into german.
1053
1054 * Doc/manual/thuban-manual-de.xml: New. German Users Manual.
1055
1056 * Doc/manual/Makefile: Added build instructions for german
1057 users manual.
1058
1059 * Doc/manual/thuban-manual.xml: Minor corrections in Introduction.
1060
1061 2004-07-28 Jan Schüngel <[email protected]>
1062
1063 * Extensions/umn_mapserver/mapfile.py(MF_Metadata): Changed all class
1064 functions. Now all metadata will handle by the function and its not
1065 needed to initialize it from outside. Therefor the associated mapobj
1066 will be stored in the Metadata Object. So we can use the special
1067 functions from the associated mapobj to get the Metadata.
1068 Therefor all initialization code for the metadata is removed from the
1069 other classes.
1070 (MF_Layer): Added a function to get the metadata object.
1071 (MF_Map): Added a function to set the mappath, the path where
1072 the mapfile ist stored.
1073
1074 * Extensions/umn_mapserver/mf_export.py(thuban_to_map): Changed the code
1075 to set the extent in the mapfile. Now the code is set by the displayed
1076 data in the Thuban-view.
1077 (export_mapfile): The shapepath is now set empty, until relative
1078 pathnames are supported.
1079
1080 * Extension/umn_mapserver/mf_handle.py: Added a dialog to handle
1081 metadata. Yet only mapfile metadata are supported. Layer and class
1082 supported are not implemented.
1083 Added a dialog to handle layer informations. The dialog only shows the
1084 selected layer at the moment.
1085
1086 * Extensions/umn_mapserver/mf_import.py(import_mapfile): Changed the
1087 code for setting the extent in thuban. Now the extent is set to the
1088 given extent from the mapfile.
1089 Fixed a logical mistake. Now the extent is set when realy a layer is
1090 loaded, and not if one is selected to load.
1091
1092 * Extensions/umn_mapserver/sample/iceland.html: Added code to zoom and
1093 move the shown map in the browser.
1094
1095 * Extensions/umn_mapserver/sample/iceland.map: Added a new metadata
1096 line to the mapobj and added metadata to the political layer.
1097
1098 * Extensions/umn_mapserver/test/test_mapserver.py: Changed the test
1099 for Metadata.
1100
1101 2004-07-26 Martin Schulze <[email protected]>
1102
1103 * Thuban/Lib/classmapper.py (ClassMapper.has): Added the new
1104 ClassMapper
1105
1106 * test/test_classmapper.py (TestMapping.test_mapper): Added a Test
1107 case for the new ClassMapper
1108
1109
1110 2004-07-22 Bernhard Herzog <[email protected]>
1111
1112 * Thuban/UI/viewport.py (ViewPort.VisibleExtent): New. Return the
1113 visible extent of the map in projected coordinates
1114
1115 * test/test_viewport.py (SimpleViewPortTest.test_default_size)
1116 (SimpleViewPortTest.test_init_with_size): Add some VisibleExtent()
1117 tests.
1118 (SimpleViewPortTest.test_visible_extent): New. The real test for
1119 VisibleExtent()
1120
1121 2004-07-22 Bernhard Herzog <[email protected]>
1122
1123 * test/test_viewport.py: Use support.run_tests as the main
1124 function when running asa script.
1125
1126 2004-07-22 Jan Schüngel <[email protected]>
1127
1128 * Extensions/umn_mapserver/mf_export.py: Added "import os"
1129 Removed the old "import Thuban.UI.mainwindow" code.
1130 (tbextent_to_map): Removed the extra function and at the code direct
1131 to "thuban_to_map" function.
1132 (write_creatorcomment): Added. Now a short comment is added to the
1133 beginning of an generated mapfile.
1134 (export_mapfile): Now the Path and filename are saved in to variables,
1135 and not together in one variable. This is needed for the new
1136 write_creatorcomment function.
1137
1138 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Added the
1139 import module "re". Also added Range and the ClassGroupRange import
1140 from Thuban. Both are needed for the new range expression import.
1141 (create_rangeexpression): Added. Creates a Range Expression in Thuban
1142 style from a given mapfile expression.
1143 (added_rasterlayer): Make some small code changes. The shapepath is
1144 now stored in an extra variable and the clazz_name is set empty if no
1145 class name set in the mapfile.
1146 Changed the Error message for Range Expressions, becaus the new
1147 function create a error string which will be shown in the dialog.
1148
1149 * Extensions/umn_mapserver/test/test_mapserver.py: Added a test for the
1150 range expression import.
1151
1152 2004-07-21 Jan-Oliver Wagner <[email protected]>
1153
1154 * Extensions/umn_mapserver/README: Added hint that
1155 installation as root can be avoided. Removed all tabs.
1156
1157 2004-07-16 Bernhard Herzog <[email protected]>
1158
1159 * test/test_viewport.py
1160 (ViewPortTest.test_changing_map_projection): Check that changing
1161 the projection of an empty map shown in a viewport doesn't lead to
1162 exceptions in the viewport's handler for the
1163 MAP_PROJECTION_CHANGED messages
1164
1165 * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Only
1166 try to keep the same region visible when the map actually contains
1167 something
1168
1169 2004-07-15 Jan Schüngel <[email protected]>
1170
1171 * Extensions/umn_mapserver/mapfile.py: Added a function to get the
1172 mappath directly from the mapobj. Is needed because of the changes
1173 in mf_import.py.
1174 (MF_Layer.add_thubanclass): Added a new comment.
1175 (MF_Map.set_extent): Fixed a bug with exporting empty mapobj. If the
1176 mapobj is empty there is no extent get from thuban an so no one can
1177 set to th mapobj.
1178
1179 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Updated
1180 the discription.
1181 Split the funktion in to three smaller ones. The new functions are
1182 add_rasterlayer, add_polygonlayer and select_layer2import.
1183 Removed the mapfilepath and filepath initialisation, because its know
1184 include in the new functions.
1185 Now nothing will be imported if cancel is pressed in the
1186 layer choice dialog.
1187
1188 2004-07-14 Jan Schüngel <[email protected]>
1189
1190 * Extensions/umn_mapserver/mapfile.py: Added ClassGroupDefault to
1191 import.
1192 (MF_Symbolset): Removed the extra variable for numsymbols.
1193 (MF_Class.__init__): Added a comment to the exception clause.
1194 Removed the extent init, because it was not needed anymore.
1195 (MF_Layer.add_thubanclass): Added the code to set the class name to
1196 the expression value from thuban if no label is defined.
1197 Added the code to export Range expressions from thuban to the mapfile.
1198 (MF_Map.set_extent): Removed the exception and replace it by some if
1199 code. If the size of a map is not defined the size will be set to 1,1.
1200 This is necessary because if the extent is set, mapscript checks if
1201 the size is greater than zero.
1202 (MF_Web): Added the get and set function for the template.
1203
1204 * Extensions/umn_mapserver/mf_export.py: Added the function to check
1205 if a mapobject exists and used it to set the status of the menu items.
1206 If no mapfile exists the settings could not be edditied.
1207 Define after which menuitem the exportitem will include.
1208
1209 * Extensions/umn_mapserver/mf_handle.py: Removed the import
1210 Thuban.UI.mainwindow clause, because it is not needed.
1211 Added the command Refresh() to all "OnChangeColor()" functions,
1212 because the color preview window was not updated on a color change.
1213 Added the function to check if a mapobject exists and used it to set the
1214 status of the menu items. If no mapobject exists the settings could not
1215 be edditied.
1216 (Map_Dialog): Moved the imagetype selector from the
1217 Outputformat_Dialog to Map_Dialog and removed Outputformat_Dialog.
1218 (Web_Dialog): Removed the name label and added the template textbox.
1219
1220 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Replace
1221 the exception handling on loading the layers by an if statement. It
1222 is not necessary to us the exception there.
1223 The Filepath creation now use os.path.join to build the path.
1224
1225 * Extensions/umn_mapserver/test/test_mapserver.py: Moved the testMap
1226 definition from global to the setUp function. Now the testMap will
1227 initialize new on each test.
1228
1229 * Extensions/umn_mapserver/sample/iceland.map: Include three new
1230 classes in the Line Layer, to test logical Expressions.
1231 Set the status of the class "Point9" in the Point Layer to off
1232
1233 2004-07-13 Bernhard Herzog <[email protected]>
1234
1235 * Thuban/UI/baserenderer.py
1236 (BaseRenderer.render_map_incrementally): Fix a logic bug in the
1237 optimization that tries not to draw layers under a raster layer.
1238 The bug was harmless. All it effectively did was to produce The a
1239 strange messages about not being able to draw Layer instances for
1240 all vector layers below a raster layer which would be invisible
1241 anyway because the raster layer currently always covers the entire
1242 window
1243
1244 2004-07-08 Jan Schüngel <[email protected]>
1245
1246 * Extensions/umn_mapserver/mapfile.py: Added code to generade and get
1247 a list of supported outputformats. This formats are not alle supported
1248 because there is no possibility to get the outputformat without the
1249 name known. Make some formal changes to the code.
1250 (MF_Map.set_name()): Fixed a bug if the name is None.
1251
1252 * Extensions/umn_mapserver/mf_handle.py: Removed the image_type import
1253 statement, because its not needed anymore. The Outputformat is now
1254 given as string from the object. Make some formal changes to the code.
1255
1256 * Extensions/umn_mapserver/test/test_mapserver.py: Added new test for
1257 most of the new setting which were added during the last changes.
1258 Removed the MF_Size Test.
1259
1260 * Extensions/umn_mapserver/test/test.map: Added a new class to the
1261 cultural Layer to test expressions and the the status of that layer
1262 from on to default.
1263 Changed the data path the the correct Thuban Data
1264 Added the Outputformat Object and Symbol Object
1265
1266 2004-07-07 Jan Schüngel <[email protected]>
1267
1268 * Extensions/umn_mapserver/mapfile.py: Added some new
1269 settings to edit (outputformat, label, imagetype)
1270
1271 * Extensions/umn_mapserver/mf_handle.py: Added some setting to
1272 the Label Dialog and add the OutputDialog.
1273 Make some changes to the code order.
1274
1275 2004-07-06 Jan Schüngel <[email protected]>
1276
1277 * Extensions/umn_mapserver/mapfile.py: Added the symbolObj, pointObj
1278 and line Obj and add the scalebar_status_type, scalebar_style_type and
1279 scalebar_position_type.
1280 Added the symbol- and symbolsetObject (MF_Symbol,MF_Symbolset). The
1281 are only used to create a Symbol like the circle in Thuban.
1282 Added the scalebarObject (MF_Scalebar)
1283 (MF_Class): Added set_status and get_status.
1284 (MF_Layer.add_thubanclass): Added code to set the class status
1285 (MF_Map): Added code to handle the symbols and scalebar
1286 (MF_Label): Added the set_partials and get_partials functions
1287
1288 * Extensions/umn_mapserver/mf_export.py: Added MF_Symbol to import
1289 from mapfile. Added a function to create a circle object like the one
1290 from thuban if no one exists.
1291
1292 * Extensions/umn_mapserver/mf_handle.py: All colors are now set when
1293 press ok in the assosiated dialog and not at the end of the
1294 colordialog.
1295 Added the Dialog for the Scalebar.
1296 (Label_Dialog): Added the offset option
1297
1298 * Extensions/umn_mapserver/mf_import.py: Added code to import the
1299 status of the Classes.
1300 Fixed a bug with the projection. Now the to_meter parameter will be
1301 added to the Projection only if it doesn't exists.
1302
1303 2004-07-01 Jan Schüngel <[email protected]>
1304
1305 Added the functionality to handle the content thuban is not
1306 able to handle directly.
1307
1308 * Extensions/umn_mapserver/mf_handle.py: New. This module extents
1309 Thuban with the possibility to edit the mapfile content.
1310
1311 * Extensions/umn_mapserver/mf_import.py: Added the possibility
1312 to import mapfiles without any layer selected. So it is possible
1313 to edit the other settings in a mapfile.
1314 (import_mapfile): Added code to use the editing functions.
1315 Added the possibility to import the projection to a layer if one
1316 is defined.
1317 Status settings (On,Off) will now set in thuban (visible, invisible).
1318 fixed a bug with with classnames. If no classname is set in mapfile
1319 the value in Thuban will set to the expression.
1320
1321 * Extensions/umn_mapserver/mf_export.py(export_mapfile): Added the
1322 possibility to save a new mapfile or use the old one which is
1323 imported or new created.
1324 Added code to use the editing functions.
1325 Remove some not needed import statements
1326
1327 * Extensions/umn_mapserver/mapfile.py: Added new types which are
1328 need for the editing functions.
1329 Added needed set-functions for the editing functions.
1330 Added the possibility to export rasterimages.
1331 Added new classes (MF_Web, MF_Label, MF_Legend, MF_Symbol,
1332 MF_SymbolSet). MF_Symbol and MF_SymbolSet are not needed at the
1333 moment.
1334 (MF_Class.set_thubanstyle): Now point layers will set to a default
1335 symbol to show a circle in mapserver and not only a 1px dot.
1336 (MF_Style.__init__): Fixed a bug with the color. Color was not set
1337 correct before.
1338 (MF_Size): Removed, because it is not needed.
1339
1340 * Extensions/umn_mapserver/README: Added the hints to use the
1341 export and editing functions, too.
1342
1343 * Extensions/umn_mapserver/sample/iceland.map: Added the
1344 new parameter "UNITS METERS".
1345 Change the political layer to status OFF.
1346
1347 * Extensions/umn_mapserver/sample/README: Added some
1348 more details to setup the sample in the MapServer.
1349
1350 2004-06-26 Bernhard Reiter <[email protected]>
1351
1352 * Extensions/svgexport/test/test_svgmapwriter.py:
1353 Removed class VFile and used standard StringIO instead.
1354
1355 2004-06-23 Jan Schüngel <[email protected]>
1356
1357 Add the export function to the umn_mapserver extension.
1358
1359 * Extension/umn_mapserver/mf_export.py: New. This module extents
1360 Thuban with the possibility to export the Thuban content.
1361
1362 * Extensions/umn_mapserver/mapfile.py: Expand the classes to use
1363 with the export module. Especially added the possibility to
1364 add thuban objects directly to the map objects.
1365
1366 * Extensions/umn_mapserver/mf_import.py: Removed the wxCHANGE_DIR,
1367 because of the hint from Bernhard Herzog.
1368 Corrected the handling of absolute pathnames.
1369 Changed the Text of the Menu-Item, now the beginning is upper case.
1370
1371 * Extensions/umn_mapserver/README: Added the --with-tiff statement.
1372
1373 2004-06-16 Jan Schüngel <[email protected]>
1374
1375 Add a sample and make some changes.
1376
1377 * Extension/umn_mapserver/mf_import.py: Changed the wxPython.wx
1378 import from * to explicit used statements. Changed the
1379 Thuban.UI.mainwindow import phrase, too.
1380 (import_mapfile):Corrected a clerical mistake.
1381 Added wxCHANGE_DIR in OpenFile Dialog.
1382 Added a MultipleChoiceDialog, to select the layers to load from
1383 mapfile into thuban. Thereby the projection is only set if one layer
1384 is selected.
1385 Added the possibility to handle relative pathnames which uses
1386 up-level references.
1387 Removed some doubled code.
1388 Corrected an error with integer values used as label in thuban
1389 ClassGroup.
1390
1391 * Extensions/umn_mapserver/sample: New.
1392
1393 * Extensions/umn_mapserver/sample/README: New. Describes the
1394 usage of the sample files.
1395
1396 * Extensions/umn_mapserver/sample/iceland.map: New. This is
1397 a suitable .map-file for the iceland data.
1398
1399 * Extensions/umn_mapserver/sample/index.html: New. The template
1400 for the mapfile.
1401
1402 * Extensions/umn_mapserver/sample/iceland.html: New. Initialisation
1403 file for the Iceland Application on web.
1404
1405 * Extensions/umn_mapserver/README: Corrected a inaccuracy and added
1406 some details.
1407
1408 * Extensions/umn_mapserver/test/test_mapserver
1409 (mapserver_import_Test_generalClasses.test_MF_Color):
1410 Corrected the thubancolor test.
1411
1412 2004-06-15 Jan Schüngel <[email protected]>
1413
1414 * Extensions/umn_mapserver/README: New. Install instruction.
1415
1416 2004-06-14 Bernhard Reiter <[email protected]>
1417
1418 * libraries/thuban/cpl_mfile.h: Added copyright header.
1419
1420 * libraries/thuban/ cpl_mfile.cpp, cpl_mfile.h: Added non-protecting
1421 Free Software License so that it is most useful with gdalwarp
1422 and bmpdataset.
1423
1424 2004-06-14 Bernhard Herzog <[email protected]>
1425
1426 * Thuban/UI/multiplechoicedialog.py (__version__): Add missing
1427 import of wxPython.wx itself (as opposed to the contents of
1428 wxPython.wx). For some reason wxPython.wx is available as
1429 wxPython.wx.wx in at least some 2.4 releases. Fixes RT#2482
1430 wrt. wxPython 2.4.
1431
1432 2004-06-10 Jan Schüngel <[email protected]>
1433
1434 Initial version of new extension "umn_mapserver". This extension aims
1435 to manage configuration for the UMN MapServer application. This
1436 inital version just imports the .map-files and displays all, Thuban is
1437 capable of.
1438
1439 * Extensions/umn_mapserver, Extensions/umn_mapserver/test: New.
1440
1441 * Extensions/umn_mapserver/test/README: New. Describes how to run the
1442 tests.
1443
1444 * Extensions/umn_mapserver/test/test.map: New. This is a test
1445 .map-file for automated tests of the umn_mapserver extension of
1446 Thuban.
1447
1448 * Extensions/umn_mapserver/test/test_mapserver.py: New. Tests for
1449 UMN Mapserver classes.
1450
1451 * Extensions/umn_mapserver/__init__.py: New. Init to make this
1452 directory a package.
1453
1454 * Extensions/umn_mapserver/mapfile.py: New. Classes to represent
1455 '.map'-file objects.
1456
1457 * Extensions/umn_mapserver/mf_import.py: New. This module extends
1458 Thuban with the possibility to handle UMN MapServer mapfiles.
1459
1460 2004-06-03 Bernhard Herzog <[email protected]>
1461
1462 * Thuban/Model/layer.py (Layer.TreeInfo): Convert the bounding box
1463 to a tuple before using it as arguments to the % operator. This
1464 fixes the formatting issue filed in RT#2239 on 2004-01-13 and
1465 reported today on thuban-list by Jan Schüngel
1466
1467 * test/test_layer.py (TestLayerModification.setUp): Save the
1468 filename as an instance variable so we can refer to it in tests
1469 (TestLayerModification.test_tree_info): Uncomment this method
1470 again and make it work. This tests for the formatting issue
1471 filed in RT#2239 on 2004-01-13
1472
1473 2004-05-28 Bernhard Herzog <[email protected]>
1474
1475 * Thuban/UI/baserenderer.py: Fix some typos.
1476
1477 2004-05-18 Jan-Oliver Wagner <[email protected]>
1478
1479 * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed a bug
1480 by increasing a field size.
1481
1482 2004-05-17 Bernhard Herzog <[email protected]>
1483
1484 Update to newest shapelib and get rid of Thuban specific
1485 extensions, i.e. use the new DBFUpdateHeader instead of our
1486 DBFCommit kludge
1487
1488 * libraries/shapelib/shpopen.c: Update to version from current
1489 shapelib CVS.
1490
1491 * libraries/shapelib/shapefil.h: Update to version from current
1492 shapelib CVS.
1493
1494 * libraries/shapelib/dbfopen.c: Update to version from current
1495 shapelib CVS.
1496 (DBFCommit): Effectively removed since shapelib itself has
1497 DBFUpdateHeader now which is better for what DBFCommit wanted to
1498 achieve.
1499 We're now using an unmodified version of dbfopen.
1500
1501 * setup.py (extensions): Add the HAVE_UPDATE_HEADER macro with
1502 value '1' to the Lib.dbflibc extension. This simply reflects the
1503 shapelib and pyshapelib updates
1504
1505 2004-05-16 Jan-Oliver Wagner <[email protected]>
1506
1507 Finished introduction of Menu.FindOrInsertMenu.
1508
1509 * Extensions/drawshape/drawshape.py: Add the command
1510 to the experimental menu additionally to the toolbar.
1511
1512 * Extensions/svgexport/svgsaver.py: Use FindOrInsertMenu() instead of
1513 finding menu on its own.
1514
1515 * Doc/manual/thuban-manual.xml: updated sample file
1516 to use FindOrInsertMenu().
1517
1518 * Examples/simple_extensions/hello_world.py: Use FindOrInsertMenu()
1519 instead of finding menu on its own.
1520
1521 2004-05-11 Jan-Oliver Wagner <[email protected]>
1522
1523 * test/test_menu.py (MenuTest.test): Added testing
1524 of method Menu.FindOrInsertMenu.
1525
1526 2004-05-10 Jan-Oliver Wagner <[email protected]>
1527
1528 Introduce and use Menu.FindOrInsertMenu.
1529
1530 * Thuban/UI/menu.py (Menu.FindOrInsertMenu): New. Find a
1531 given menu or, if not found, insert it.
1532
1533 * Extensions/bboxdump/bboxdump.py, /Extensions/gns2shp/gns2shp.py,
1534 /Extensions/importAPR/importAPR.py, Extensions/profiling/profiling.py,
1535 /Extensions/wms/wms.py: Use FindOrInsertMenu() instead of finding
1536 menu on its own.
1537
1538 2004-05-06 Jan-Oliver Wagner <[email protected]>
1539
1540 Introduce a abstract ColorDialog class and remove
1541 and outdated file.
1542
1543 * Thuban/UI/proj4dialog.py: Removed. It is has been
1544 replaced by projdialog for quite a while and is not used
1545 anymore.
1546
1547 * Thuban/UI/colordialog.py: New. Abstraction for color selection
1548 dialog(s).
1549
1550 * Thuban/UI/classifier.py (SelectPropertiesDialog.__GetColor):
1551 Now calls the abstract ColorDialog instead of wxColourDialog.
1552 This also removed the dependency to Color class conversion
1553 from this function.
1554
1555 2004-05-04 Frank Koormann <[email protected]>
1556
1557 * Extensions/bboxdump/__init__.py: Fixed string left over from
1558 copying.
1559
1560 * Extensions/bboxdump/bboxdump.py (bboxdump):
1561 Use layer.ShapeStore().AllShapes() to loop over shapes instead of
1562 xrange(layer.NumShapes()). Compile the bboxmessage from a list
1563 of formatted outputs (string.join) instead of appending to the
1564 message. Two progress bar dialogs to report progress on the sometimes
1565 lenghty processing.
1566
1567 2004-04-22 Frank Koormann <[email protected]>
1568
1569 New Extension to dump bounding boxes of all shapes of the selected
1570 layer. An optional column can be specified to group the objects,
1571 in this case the bounding box is a union of the separate boxes.
1572 Dump can be displayed in a ScrolledMessageDialog or written to file.
1573 The Extension is simply a combination of available and well tested
1574 Thuban functionality.
1575
1576 * Extensions/bboxdump/__init__.py: New: Init to make this
1577 directory a package.
1578
1579 * Extensions/bboxdump/bboxdump.py: New: Dump bounding boxes of
1580 all shapes of the selected layer.
1581
1582 2004-04-22 Jan-Oliver Wagner <[email protected]>
1583
1584 * Thuban/UI/classgen.py (GenUniquePanel.__init__): Fixed two
1585 strings to be i18n now.
1586
1587 2004-04-18 Jan-Oliver Wagner <[email protected]>
1588
1589 Changing popup menu of legend from direct building
1590 to using the Menu construction as used for the mainwindow.
1591
1592 * Thuban/UI/mainwindow.py: New method commands: layer_to_top,
1593 layer_to_bottom, layer_visibility
1594 (MainWindow.LayerToTop): New. Put current layer to the top.
1595 (MainWindow.LayerToBottom): New. Put current layer to bottom.
1596 (MainWindow.HideLayer, MainWindow.ShowLayer, _has_visible_map):
1597 Replace 1,0 by True, False.
1598 (MainWindow.ToggleLayerVisibility): New. Toggle visibility of
1599 current layer.
1600 (MainWindow.LayerShowTable): Removed raising of dialog.
1601 (_has_selected_layer_visible): New. Support function.
1602
1603 * Thuban/UI/legend.py: ID_POP_xxx: removed.
1604 (LegendPanel.__init__): Removed EVT_MENU bindings.
1605 (LegendTree._OnRightClick): Replace direct creation of
1606 menu via wx Classes by applying the menu definition
1607 as of Menu class of menu.py.
1608
1609 2004-04-16 Jan-Oliver Wagner <[email protected]>
1610
1611 * Thuban/UI/exceptiondialog.py (ExceptionDialog.dialog_layout): Improved
1612 button string to stronger clearify that Thuban will be closed when hitting
1613 the button.
1614
1615 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Added docstring.
1616 Now for layers without a ShapeStore a corresponding message is given
1617 to the user, that this layer has no table to show.
1618
1619 2004-04-15 Martin Schulze <[email protected]>
1620
1621 * Extensions/wms/layer.py (WMSLayer.setWMSFormat): Need to
1622 recalculate the format for the internal render engine as well.
1623
1624 * Extensions/wms/properties.py (wmsProperties): First start for a
1625 properties dialog. It's functional for a first selection of
1626 layers, but still has some weired wxWidgets/GTK problems but
1627 beautification can be done later.
1628
1629 * Extensions/wms/layer.py: Added more documentation
1630 (WMSLayer.getFormats): New: Return list of supported image formats
1631 by the WMS server
1632 (WMSLayer.getLayers): New: Return the list of layer names
1633 supported by the WMS server
1634 (WMSLayer.getLayerTitle): New: Return the title of the named layer
1635 (WMSLayer.getWMSFormat): New: Return the image format that is used
1636 for WMS GetMap requests
1637 (WMSLayer.setWMSFormat): New: Set the image format that is used
1638 for WMS GetMap requests
1639 (WMSLayer.__init__): Move away from using only one layer to using
1640 a list of layers (unsorted at the moment, though).
1641 (WMSLayer.getVisibleLayers): New: Return the list of names for all
1642 visible layers
1643 (WMSLayer.setVisibleLayers): New: Set the list of names for all
1644 visible layers
1645
1646 * Extensions/wms/wms.py: Moved the WMS layer into layer.py in
1647 order to establish a clean structure.
1648
1649 * Extensions/wms/layer.py: Moved the WMS layer into a file on its
1650 own in order to establish a clean structure.
1651
1652 2004-04-13 Martin Schulze <[email protected]>
1653
1654 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Added
1655 support for oldstyle (WMS 1.0 apparently) image format
1656 specification.
1657
1658 * Extensions/wms/wms.py (WMSLayer.calcFormat): Reduce the list of
1659 supported graphic formats back to JPEG and BMP, PNG and others are
1660 too *cough* experimental... Sorry, I meant to filter this out
1661 before I committed this part. This should make the WMS extension
1662 run from CVS again.
1663 (wms_dialog): Reset an empty URL to None so that the subsequent
1664 program can depend on this, since the dialog will indeed return an
1665 empty URL, causing another declaration of love by Python.
1666
1667 * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerBBox):
1668 Whenever a native BoundingBox request cannot be fulfilled, check
1669 whether the requested SRS is EPSG:3426, in which case return the
1670 LatLonBoundingBox values.
1671
1672 * Extensions/wms/test/test_parser.py
1673 (TestWMSCapabilitiesParser.test_LayerSRS): Added a test for
1674 ignoring AUTO:* SRS.
1675 (TestWMSCapabilitiesParser.test_LatLonBoundingBoxes_as_bboxes):
1676 Added another test method to test whether the LatLonBoundingBox
1677 values will be returned if BoundingBox values are requested with
1678 SRS set to EPSG:3426.
1679
1680 * Extensions/wms/parser.py (WMSCapabilitiesParser.peekLayers):
1681 Added rudimentary support for non-EPSG SRS, i.e. ignore them for
1682 the moment by placing them into a variable which is currently
1683 unused. Also test whether the EPSG SRS is numerical as it should
1684 be and add an error message if it is not.
1685
1686 * Extensions/wms/test/sample.xml: Added AUTO:* SRS since they
1687 appear in the real world as well. Since we cannot handle them yet
1688 (OGCLib can't either), we will ignore them for the moment.
1689
1690 * Extensions/wms/parser.py: Use a variable for denoting the sample
1691 filename
1692 (WMSCapabilitiesParser.peekLayers): Added support for error
1693 messages during grok(). They will be aggregated in an array and
1694 may be displayed later. We may have to add a classification
1695 "Warning" and "Error" to this. That requires more experience,
1696 though, since not every error may be lethal.
1697
1698 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Raise the
1699 ShowTable() dialog/frame when the user attempts to display it
1700 while it has been opened before already and not closed again.
1701
1702 2004-04-11 Martin Schulze <[email protected]>
1703
1704 * Extensions/wms/infodialog.py: Adjusted the class documentation
1705
1706 * Extensions/wms/wms.py (WMSLayer.__init__, WMSLayer.GetMapImg):
1707 Switch to using Thuban{Begin,End}BusyCursor instead of the pure
1708 wxWidgets variants.
1709 (WMSLayer.__init__): The epsg_id variable is named top_srs now.
1710
1711 * Extensions/wms/infodialog.py: Added an information dialog that
1712 will display various information about the WMS current resource,
1713 so that additional information such as the title, the abstract,
1714 fees and access constraints can be displayed for the user if they
1715 are documented in the WMS XML.
1716
1717 2004-04-10 Martin Schulze <[email protected]>
1718
1719 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Adjusted
1720 string handling. It's "foo".lower() and not lower(foo) without
1721 lower imported from strings or something.
1722
1723 * Extensions/wms/wms.py (WMSLayer): Incorporated WMSCapabilities
1724 from capabilities.py and parser.py. Implement priority list for
1725 supported graphics formats, take care of wbmp != bmp. PNG, TIFF
1726 and GIF are supported here, but not yet by main Thuban. Hence,
1727 support for them may be removed later. Special contribution to
1728 usability: get wxWidgets to change the cursor when we're waiting
1729 for data from the network so the user won't start to worry. This
1730 causes a redrawing error/warning, though.
1731
1732 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Unlink
1733 the DOM object.
1734
1735 2004-04-01 Martin Schulze <[email protected]>
1736
1737 * Extensions/wms/capabilities.py: Adjusted documentation
1738 (WMSCapabilities.__init__): Improved documentation, fixed syntax
1739 (WMSCapabilities.saveCapabilities): Only catch IOError when
1740 handling files
1741 (WMSCapabilities.loadCapabilities): Only catch IOError when
1742 handling files
1743 __main__: corrected variable naming
1744 (WMSCapabilities.fetchCapabilities,loadCapabilities): Make this
1745 class a specialisation of WMSCapabilitiesParser as well. Also
1746 execute grok() after loading or fetching capabilities, if that
1747 went well, so that subsequent calls can already access the data.
1748 (WMSCapabilities.getVersion): Export the used version of the
1749 GetCapabilities request, so we can use it for subsequent calls,
1750 i.e. for GetMap requests.
1751 (WMSCapabilities.fetchCapabilities): Added proper error handling
1752 when the GetCapabilities request failed, so that the surrounding
1753 program can act accordingly.
1754
1755 2004-03-30 Martin Schulze <[email protected]>
1756
1757 * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerSRS):
1758 Adjusted the getLayerSRS method to return the list of SRSes
1759 extracted from <SRS> elements instead of <BoundingBox> elements.
1760 Added a bit of documentation as well.
1761 (WMSCapabilitiesParser.checkLayerSRS): Removed integrity test
1762 since it was only implemented due to a misunderstanding.
1763
1764 * Extensions/wms/test/test_parser.py
1765 (TestWMSCapabilitiesParser.test_LayerSRS): Adjust the tests to
1766 reflect the corrected interpretation of the standard: i.e. a layer
1767 does not have to define a BoundingBox for all SRSes it supports.
1768 Hence the <SRS></SRS> specification is authoritative, not the list
1769 of BoundingBoxes.
1770 (TestWMSCapabilitiesParser.test_BoundingBoxes): Added a new test
1771 to ensure None is returned for a non-existing SRS.
1772 (TestWMSCapabilitiesParser.test_grok): Removed test_grok method
1773 since it is not applicable anymore. Listing more SRSes in <SRS>
1774 elements is valid according to the specs.
1775
1776 2004-03-26 Bernhard Reiter <[email protected]>
1777
1778 * README: Nicer formatting of text. Improved descriptions.
1779 Reflected wxWidgets name change.
1780
1781 * Thuban/UI/about.py: Extended copyright to 2004 and added
1782 information about the thuban-devel mailinglist.
1783
1784 2004-03-24 Martin Schulze <[email protected]>
1785
1786 * Extensions/wms/capabilities.py: Renamed the class to contain
1787 'WMS', also added a linebreak where required
1788
1789 * Extensions/wms/parser.py: Finally added the XML parser for the
1790 GetCapabilities response.
1791
1792 * Extensions/wms/test/sample.xml: Adjusted the sample file so that
1793 <SRS> elements match the <BoundingBox> elements, except for the
1794 layer 'beschriftung'.
1795
1796 * Extensions/wms/test/test_parser.py: Encode non-ascii strings
1797 since Python uses unicode strings internally, otherwise
1798 comparisons will fail. Removed tests for getLayerBBoxSRS() since
1799 the SRS will be calculated anyway and this method is obsoleted by
1800 getLayerSRS(). Denote SRS as strings and not as cardinal numbers.
1801 Move loading the sample file into the setUp method. Added a test
1802 for finding the integrity problem in the sample response.
1803 Improved formatting.
1804
1805 * Extensions/wms/domutils.py: Added convenience routines for
1806 handling of Document Object Model (DOM) nodes.
1807
1808 * Extensions/wms/test/test_domutils.py: Added a test for the
1809 domutils module
1810
1811 2004-03-19 Martin Schulze <[email protected]>
1812
1813 * Extensions/wms/test/test_parser.py (TestWMSCapabilitiesParser):
1814 Moved path detection and adding into a module of its own,
1815 adjustpath, which exports thubandir as main Thuban directory.
1816
1817 * Extensions/wms/test/test_ogclib.py (TestWMSLib): Moved path
1818 detection and adding into a module of its own, adjustpath, which
1819 exports thubandir as main Thuban directory. Reorganised the
1820 module in order to support the SkipTest feature for Thuban test
1821 cases.
1822
1823 * Extensions/wms/test/adjustpath.py: Moved path detection and
1824 adding into a module of its own.
1825
1826 2004-03-18 Martin Schulze <[email protected]>
1827
1828 * Extensions/wms/test/test_parser.py: Added another test for
1829 checking whether the WMS XML parser (to be implemented) returns
1830 the information we expect. This requires a sample WMS WML file
1831 (sample.xml) which has been extracted from the frida server and
1832 "improved" manually.
1833
1834 * Extensions/wms/test/test_ogclib.py: Added legacy code to add the
1835 main Thuban directory to the path in order to be able to import
1836 random modules. Adjusted the PyOGCLib detection to reuse the
1837 information gathered. Also added a note about the PYTHONPATH
1838 environment variable.
1839
1840 * Extensions/wms/test/test_ogclib.py: The format specification is
1841 a mime-type, not a graphic format, hence image/jpeg wou ld be the
1842 proper format and not JPEG. We'll also have to take care of the
1843 encoding of / as %2F.
1844
1845 2004-03-16 Martin Schulze <[email protected]>
1846
1847 * Extensions/wms/test/test_ogclib.py: Added a (hopefully)
1848 comprehensive test for the getMapURL method, built compare URLs
1849 according to the documentation in OGC 01-068r3
1850
1851 * Extensions/wms/capabilities.py (WMSCapabilities): Added the
1852 class WMSCapabilities to manage capabilites, will incorporate
1853 parsing the capabilities response and provide details for other
1854 classes.
1855
1856 2004-03-12 Bernhard Herzog <[email protected]>
1857
1858 Support views in addition to normal tables in the postgis
1859 shapestore
1860
1861 * Thuban/Model/postgisdb.py
1862 (PostGISShapeStore._fetch_table_information): Add a fallback for
1863 the case where the table name is not in the geometry_columns
1864 table. This is usually the case for views. Also, set
1865 self.shapestore here.
1866 (PostGISShapeStore.ShapeType): No need to query the database all
1867 the time. The shape type is now determined in
1868 _fetch_table_information
1869
1870 * test/postgissupport.py (PostgreSQLServer.new_postgis_db)
1871 (PostgreSQLServer.get_static_data_db, PostGISDatabase.__init__):
1872 New parameter to specify views.
1873 (PostGISDatabase.has_data): Also compare the views. New views
1874 parameter
1875 (PostGISDatabase.initdb): Create the views.
1876 (PostgreSQLServer.get_default_static_data_db): Add the v_landmarks
1877 view
1878
1879 * test/test_postgis_db.py
1880 (TestPostGISShapestorePointFromViews): New. Test a
1881 PostGISShapeStore with a view
1882 (TestPostGISShapestorePointOIDAsGIDColumn.setUp): Pass the name of
1883 the geometry_column explicitly to test whether that works
1884
1885 2004-03-12 Bernhard Herzog <[email protected]>
1886
1887 Final step for explicit id/geometry columns: Loading and saving
1888
1889 * Resources/XML/thuban-1.1.dtd: New. Derived from thuban-1.0.dtd
1890 with the following changes:
1891 (dbshapesource): Two new attributes id_column and geometry_column
1892
1893 * Thuban/Model/save.py (SessionSaver.write): Use the new dtd
1894 (SessionSaver.write_session): Use the new namespace
1895 (SessionSaver.write_data_containers): Write the new dbshapesource
1896 parameters
1897
1898 * Thuban/Model/load.py (SessionLoader.__init__): New namespace for
1899 the new file format version
1900 (SessionLoader.start_dbshapesource): Handle the new db parameters
1901
1902 * test/test_save.py: Update to the new dtd and namespace
1903 (SaveSessionTest.test_save_postgis): Update the NonConnectionStore
1904 mock object to provide a working IDColumn method.
1905
1906 * test/test_load_1_0.py: New. Copy of the test_load.py before
1907 today's changes but with the round-trip tests removed.
1908
1909 * test/test_load_0_9.py: Update doc-string.
1910
1911 * test/test_load.py: Update all .thuban files to the new dtd and
1912 namespace.
1913 (TestPostGISLayer.file_contents): Add the new dbshapesource
1914 paramters
1915
1916 2004-03-11 Bernhard Herzog <[email protected]>
1917
1918 Next step for explicit id/geometry columns: User interaction
1919
1920 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Rework how
1921 the dialog is constructed. Add combo boxes to select id and
1922 geometry column. Rename some instance variables.
1923 (ChooseDBTableDialog.GetTable): Return id and geometry column
1924 names
1925 (ChooseDBTableDialog.OnTableSelect): New. Event handler for
1926 selections in the table list
1927
1928 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Use id_column
1929 and geometry_column
1930
1931 * Thuban/Model/session.py (Session.OpenDBShapeStore): Add the new
1932 parameters for id_column and geometry column of PostGISShapeStore
1933 here as well.
1934
1935 * Thuban/Model/postgisdb.py (type_map): Add ROWID psycog type.
1936 (_raw_type_map): New. Map raw PostgreSQL type ints to thuban types
1937 (PostGISConnection.GeometryTables): Use a better query to
1938 determine which relations in the database might be usable for
1939 shapestores. Now supports views as well but is more PostgreSQL
1940 specific
1941 (PostGISConnection.table_columns): New. Somewhat experimental
1942 method to let the db dialogs provide lists of columns to users so
1943 that they can select id and geometry columns.
1944 (PostGISTable.__init__): The default value of the id_column
1945 parameter is now None it still means "gid" effectively, though.
1946 (PostGISTable.IDColumn): New introspection method to return a
1947 column object for the id column
1948 (PostGISShapeStore.GeometryColumn): New introspection method to
1949 return a column object for the geometry column
1950
1951 * test/test_postgis_db.py
1952 (TestPostGISConnection.test_gis_tables_non_empty):
1953 Removed. Subsumed by the new:
1954 (TestPostGISConnection.test_gis_tables_with_views_and_tables):
1955 New. Tes the GeometryTables and table_columns methods with actual
1956 tables and views.
1957 (PointTests.test_id_column, PointTests.test_geometry_column):
1958 New. tests for the new methods.
1959 (TestPostGISShapestorePoint.setUp)
1960 (TestPostGISShapestorePointSRID.setUp)
1961 (TestPostGISShapestorePointExplicitGIDColumn.setUp): Fill the
1962 instance variables needed by the new tests
1963
1964 2004-03-11 Bernhard Herzog <[email protected]>
1965
1966 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): The row
1967 numbers given to ReadValue are ordinals.
1968
1969 2004-03-11 Bernhard Herzog <[email protected]>
1970
1971 Elimiate the requirement for PostGIS tables to have a column
1972 called "gid".
1973
1974 * Thuban/Model/postgisdb.py (PostGISTable.__init__): New parameter
1975 id_column to specify which column to use to identify rows. Also
1976 new instance variables id_column and quoted_id_column
1977 (PostGISTable.RowIdToOrdinal, PostGISTable.RowOrdinalToId)
1978 (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue)
1979 (PostGISTable.SimpleQuery): Use the id column name provided to the
1980 constructor instead of "gid"
1981 (PostGISShapeStore.__init__): New parameter id_column analogously
1982 to PostGISTable.__init__. This parameter is simply passed through
1983 to the base class constructor
1984 (PostGISShapeStore._create_col_from_description): Fix typo in
1985 doc-string
1986 (PostGISShapeStore.Shape, PostGISShapeStore.AllShapes)
1987 (PostGISShapeStore.ShapesInRegion): Use the id column name
1988 provided to the constructor instead of "gid"
1989
1990 * test/postgissupport.py
1991 (PostgreSQLServer.get_default_static_data_db): New static table
1992 landmarks_point_id with an id column != "gid. Update the comments
1993 a bit.
1994 (skip_if_addgeometrycolumn_does_not_use_quote_ident): Fix typo in
1995 doc-
1996 (upload_shapefile): New parameter gid_column to use a name other
1997 than "gid" for the column to store the shape ids
1998
1999 * test/test_postgis_db.py (TableTests): New. Mixin-class
2000 containing all tests previously in TestPostGISTable. The actual
2001 tests are the same but the code is a bit more configurable to
2002 allow for different id columns etc.
2003 (TestPostGISTable): Derive from TableTests now for the actual
2004 tests.
2005 (TestPostGISTableExplicitGIDColumn): New. Like TestPostGISTable
2006 except that it the landmarks_point_id table to test the id_column
2007 parameter
2008 (PointTests): Extend the doc-string
2009 (TestPostGISShapestorePointExplicitGIDColumn)
2010 (TestPostGISShapestorePointOIDAsGIDColumn): New classes derived
2011 from PointTests to test the explicit id_column parameter. One
2012 tests with the name of the column holding the shape ids, the other
2013 uses PostgreSQL's OID column. For the latter a number of methods
2014 have to be overwritten to make them independent of the actual id
2015 values.
2016
2017 2004-03-08 Silke Reimer <[email protected]>
2018
2019 Update debian directory:
2020
2021 * debian/changelog: Added new version.
2022 * deiban/rules: Updated management of patches (with cbds)
2023 * debian/control: Added cbds to dependencies
2024 * debian/patches/*: New. Adds better support for patches of thuban in
2025 debian
2026 * debian/menu: Syntax of menu changed slightly
2027 * debian/setup.py.patch: removed because it has been moved to
2028 debian/patechs/setup.py.patch
2029
2030
2031 2004-02-26 Bernhard Herzog <[email protected]>
2032
2033 Create the Doc/technotes directory for text files with information
2034 for developers
2035
2036 * Doc/technotes/README: New. README for the technotes
2037
2038 * Doc/technotes/coding_guidelines.txt: New. Coding guidelines for
2039 Thuban
2040
2041 * Doc/technotes/release_process.txt: New. Used to be
2042 HOWTO-Release. Now slightly adapted to technote formatting style.
2043
2044 * HOWTO-Release: Removed. It's contents are now in
2045 Doc/technotes/release_process.txt
2046
2047 2004-02-25 Bernhard Herzog <[email protected]>
2048
2049 * libraries/thuban/wxproj.cpp (get_wx_version): New. Return the
2050 version of wxWindows the module was compiled with so we can check
2051 that against the wxPython version.
2052
2053 * Thuban/version.py (thuban_branch, thuban_release): New variables
2054 controlling which and how Thuban versions are shown. See the
2055 comments for details.
2056 (verify_versions): Also check that the wx version that wxproj is
2057 compiled against matches that of the wxPython we use at runtime
2058
2059 2004-02-20 Bernhard Herzog <[email protected]>
2060
2061 * Extensions/wms/wms.py (epsg_code_to_projection): Use
2062 get_system_proj_file to read the epsg projections. The old way
2063 depended on the current directory being the top Thuban directory.
2064
2065 2004-02-20 Bernhard Herzog <[email protected]>
2066
2067 * Extensions/svgexport/test/test_svgmapwriter.py
2068 (TestVirtualDC.test_clippath): Remove a debug print
2069
2070 2004-02-20 Bernhard Herzog <[email protected]>
2071
2072 * Extensions/svgexport/__init__.py: New. Turn
2073 Extensions/svgexport into a package.
2074
2075 * Extensions/svgexport/svgmapwriter.py: Reorder the imports and
2076 doc-string a bit. The doc-string must come first, otherwise it's
2077 not a doc-string. The __future__ import must be the first thing
2078 after the doc-string. Use only double quotes in doc-strings.
2079 Single quotes trip up emacs syntax highlighting if the text
2080 contains apostrophes.
2081
2082 2004-02-20 Bernhard Herzog <[email protected]>
2083
2084 * Extensions/svgexport/test/__init__.py,
2085 Extensions/svgexport/test/test_svgmapwriter.py: New. Initial test
2086 suite for svgexport
2087
2088 * test/runtests.py (find_test_modules): New. Function with the
2089 module finding code from main.
2090 (main): Use find_test_modules to figure out the default test
2091 modules and take modules from Extensions.svgexport.test too.
2092
2093 2004-02-19 Bernhard Herzog <[email protected]>
2094
2095 * Thuban/UI/application.py (ThubanApplication.OnInit): Make sure
2096 the mainwindow has a reference to the map of the initial session.
2097 This fixes a bug introduced with the fix for RT#2245
2098
2099 2004-02-19 Bernhard Herzog <[email protected]>
2100
2101 * Extensions/svgexport/svgsaver.py,
2102 Extensions/svgexport/svgmapwriter.py,
2103 Extensions/svgexport/maplegend.py: Added again. This time in the
2104 correct place.
2105
2106 2004-02-17 Bernhard Herzog <[email protected]>
2107
2108 Fix for RT#2245
2109
2110 * Thuban/UI/application.py (ThubanApplication.OnInit): Initialize
2111 instance variables before trying to create any windows. Creating
2112 windows can start an event loop if e.g. message boxes are popped
2113 up for some reason, and event handlers, especially EVT_UPDATE_UI
2114 may want to access things from the application.
2115 (ThubanApplication.maps_changed): The mainwindow may not have been
2116 created yet, so check whether it has been created before calling
2117 its methods
2118
2119 * Thuban/UI/view.py (MapCanvas.OnIdle): Only try to redraw if we
2120 have a map
2121
2122 2004-02-17 Bernhard Herzog <[email protected]>
2123
2124 * test/test_svgmapwriter.py, Extensions/svgsaver.py,
2125 Extensions/svgmapwriter.py, Extensions/maplegend.py,
2126 extensions/svgexport/svgsaver.py,
2127 extensions/svgexport/svgmapwriter.py,
2128 extensions/svgexport/maplegend.py: Removed. These files were in
2129 the wrong places or didn't work at all.
2130
2131 2004-02-16 Bernhard Herzog <[email protected]>
2132
2133 * Thuban/UI/view.py (MapCanvas.Export): Remove accidentally added
2134 line
2135
2136 2004-02-16 Bernhard Herzog <[email protected]>
2137
2138 * Thuban/UI/view.py (MapCanvas.Export): Avoid UnboundLocalError.
2139
2140 2004-02-15 Markus Rechtien <[email protected]>
2141
2142 * Extensions/svgexport/svgmapwriter.py: New. Adds the capability
2143 to write a session to a file in SVG format.
2144 * Extensions/svgexport/svgsaver.py: New. Uses svgmapwriter.py
2145 to write a SVG map of a session.
2146 * Extensions/svgexport/maplegend: New. Writes a basic maplegend
2147 in SVG format for the current session.
2148
2149 2004-02-13 Bernhard Herzog <[email protected]>
2150
2151 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): When the layer
2152 can't be created, return immediately after displaying the error
2153 message.
2154
2155 2004-02-11 Bernhard Herzog <[email protected]>
2156
2157 Handle postgis tables with more than one geometry column.
2158
2159 * Thuban/Model/postgisdb.py
2160 (PostGISTable._fetch_table_information): Delegate the creation of
2161 column objects to a different method so that we can extend that in
2162 derived classes
2163 (PostGISTable._create_col_from_description): New. Column object
2164 creation part of _fetch_table_information
2165 (PostGISShapeStore._create_col_from_description): New. Extend
2166 inherited method to handle geometry columns
2167 (PostGISShapeStore.__init__): New parameter geometry_column to
2168 specify which geometry column to use. Optional but mandatory for
2169 tables with more than one geometry column
2170 (PostGISShapeStore._fetch_table_information): Also use the name of
2171 the geometry column when looking for the srid
2172 (PostGISShapeStore.ShapeType): Also use the name of the geometry
2173 column when looking for the shape type
2174
2175 * test/test_save.py (SaveSessionTest.test_save_postgis): Adapt
2176 NonConnectionStore to changes in the PostGISShapeStore
2177
2178 * test/test_postgis_db.py
2179 (TestPostGISSpecialCases.test_shapestore_two_geom_cols): Test
2180 PostGISShapeStore with tables having two geometry columns.
2181
2182 2004-02-10 Bernhard Herzog <[email protected]>
2183
2184 Fix some postgis problems. What remains to be done is real
2185 handling of SRIDs as they affect how reprojection is done
2186
2187 * Thuban/Model/postgisdb.py (quote_identifier): Fix typo in
2188 doc-string
2189 (PostGISShapeStore._fetch_table_information): New. Extend
2190 inherited method to retrieve srid
2191 (PostGISShapeStore.BoundingBox): Handle tables without data.
2192 extent yields NULL for those
2193 (PostGISShapeStore.ShapesInRegion): Use the srid of the table.
2194
2195 * test/test_postgis_db.py
2196 (TestPostGISSpecialCases.test_shapestore_empty_table): New test
2197 for the special case of a table without any data
2198 (TestPostGISShapestorePointSRID): New class with tests for a table
2199 that uses srids
2200 (PolygonTests): Fix a doc-string typo
2201
2202 * test/postgissupport.py (PostGISDatabase.__init__): New parameter
2203 reference_systems with a specification of spacial reference
2204 systems to create in the new db.
2205 (PostgreSQLServer.new_postgis_db)
2206 (PostgreSQLServer.get_static_data_db): New parameter
2207 reference_systems to be passed through ultimately to
2208 PostGISDatabase. In new_postgis_db also check whether an existing
2209 db already has the right srids
2210 (PostgreSQLServer.get_default_static_data_db): Add srids and a
2211 table that uses srids
2212 (PostGISDatabase.initdb): Create the entries for the reference
2213 systems
2214 (PostGISDatabase.has_data): Add reference_systems parameter to
2215 check for those too
2216 (upload_shapefile): New parameter srid to create tables with a
2217 specific srid
2218
2219 2004-02-06 Frank Koormann <[email protected]>
2220
2221 * po/pt_BR.po: Fixed charset
2222
2223 2004-02-05 Frank Koormann <[email protected]>
2224
2225 * po/pt_BR.po: Fixed format string for error message, missing %s
2226 added (Thuban/UI/application.py:273)
2227
2228 2004-02-03 Frank Koormann <[email protected]>
2229
2230 First version of Portuguese (Brazilian) translation
2231
2232 * po/pt_BR.po: New, translation of pot (2004-01-15 16:07+0300) for
2233 Brazilian Portuguese by Eduardo Patto Kanegae.
2234
2235 * Thuban/UI/about.py (About.__init.py__): Added Eduardo to the list of
2236 translators.
2237
2238
2239 2004-01-22 Frank Koormann <[email protected]>
2240
2241 * Doc/manual/thuban-manual.xml: Added section on installation of
2242 Thuban under Win32 systems. Fixed image path references in the postgis
2243 section. Some minor source formattings.
2244
2245 2004-01-21 Frank Koormann <[email protected]>
2246
2247 Make Thuban remember path selections (at least for one application run).
2248
2249 * Thuban/UI/application.py (Application.OnInit): Initialize path as a
2250 attribute of application object. Path is a dictionary of
2251 strings, currently with the items "data" and "projection".
2252 (Application.SetPath): New, stores path for the specified item.
2253 (Application.Path): New, return path for the specified item.
2254
2255 * Thuban/UI/mainwindow.py
2256 (MainWindow.OpenSession, MainWindow.SaveSessionAs,
2257 MainWindow.AddLayer, MainWindow.AddRasterLayer,
2258 MainWindow.TableOpen): Access "data" path information of the
2259 application.
2260
2261 * Thuban/UI/projdialog.py (ProjFrame._OnImport, ProjFrame._OnExport):
2262 Access "projection" path information of the application.
2263
2264 2004-01-05 Bernhard Herzog <[email protected]>
2265
2266 * po/ru.po: Updated translations from Alex Shevlakov
2267
2268 2004-01-05 Bernhard Herzog <[email protected]>
2269
2270 * po/Makefile, po/README: Move the description of how to generate
2271 the translation statistics to the README.
2272
2273 2003-12-23 Bernhard Herzog <[email protected]>
2274
2275 * NEWS: Update for 1.0.0
2276
2277 * po/it.po: Another update from Maurizio Napolitano
2278
2279 2003-12-23 Bernhard Herzog <[email protected]>
2280
2281 * po/it.po: Updated translation from Maurizio Napolitano
2282
2283 2003-12-23 Bernhard Herzog <[email protected]>
2284
2285 * Thuban/UI/join.py (JoinDialog.__init__): Mark one more string
2286 for translation
2287
2288 * Thuban/UI/mainwindow.py (MainWindow.TableRename)
2289 (MainWindow.RenameMap, MainWindow.RenameLayer): Mark some more
2290 strings for translation
2291
2292 * po/de.po: Update with the newly marked strings.
2293
2294 2003-12-22 Bernhard Herzog <[email protected]>
2295
2296 * HOWTO-Release: Fix the places where version numbers have to be
2297 updated
2298
2299 2003-12-22 Bernhard Herzog <[email protected]>
2300
2301 * setup.py (setup call): 1.0.0, yeah!
2302
2303 * Thuban/version.py (longversion): 1.0.0, yeah!
2304
2305 * Thuban/Model/load.py (SessionLoader.__init__): Accept the
2306 1.0.0 namespace too
2307
2308 * Thuban/Model/save.py (SessionSaver.write_session): Save with
2309 1.0.0 namespace
2310
2311 * test/test_load.py (LoadSessionTest.dtd)
2312 (TestSingleLayer.file_contents)
2313 (TestNonAsciiColumnName.file_contents)
2314 (TestLayerVisibility.file_contents)
2315 (TestClassification.file_contents, TestLabels.file_contents)
2316 (TestLayerProjection.file_contents)
2317 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
2318 (TestLabelLayer.file_contents, TestPostGISLayer.file_contents)
2319 (TestPostGISLayerPassword.file_contents)
2320 (TestLoadError.file_contents, TestLoadError.test): Update for
2321 1.0.0 namespace
2322
2323 * test/test_save.py (SaveSessionTest.dtd)
2324 (SaveSessionTest.testEmptySession)
2325 (SaveSessionTest.testSingleLayer)
2326 (SaveSessionTest.testLayerProjection)
2327 (SaveSessionTest.testRasterLayer)
2328 (SaveSessionTest.testClassifiedLayer)
2329 (SaveSessionTest.test_dbf_table)
2330 (SaveSessionTest.test_joined_table)
2331 (SaveSessionTest.test_save_postgis): Update for 1.0.0 namespace
2332
2333 2003-12-22 Bernhard Herzog <[email protected]>
2334
2335 * Thuban/Model/load.py (SessionLoader.start_label): Make sure the
2336 alignment flags are byte strings not unicode and that they have
2337 valid values
2338
2339 * test/test_load.py (TestLabelLayer): New. Test loading (and
2340 indirectly saving) of maps with labels.
2341
2342 2003-12-22 Bernhard Herzog <[email protected]>
2343
2344 * Thuban/UI/tableview.py (TableGrid.OnDestroy)
2345 (TableGrid.__init__): Handle EVT_WINDOW_DESTROY in the grid to
2346 unsubscribe all subscribers.
2347 (LayerTableFrame.OnDestroy): Do not unsubscribe any messages from
2348 self.grid since it may already have been destroyed.
2349 Fixes RT #2256
2350
2351 2003-12-19 Bernhard Herzog <[email protected]>
2352
2353 * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
2354
2355 2003-12-16 Bernhard Herzog <[email protected]>
2356
2357 * debian/bitmappath.patch, debian/setup.py.patch:
2358 added to ensure compliance with FHS for debian
2359 * debian/rules, debian/changelog:
2360 added patches in rules to ensure compliance with FHS for debian
2361
2362 2003-12-16 Bernhard Herzog <[email protected]>
2363
2364 * po/Makefile (mo): Make the output a bit nicer so that it prints
2365 statistics about the translations. Add a comment how produce even
2366 nicer statistics with sed.
2367
2368 2003-12-09 Frank Koormann <[email protected]>
2369
2370 * Resources/Projections/defaults.proj:
2371 French projection sample with correct accents (UNICODE).
2372
2373 2003-12-05 Bernhard Herzog <[email protected]>
2374
2375 * MANIFEST.in: Add the devtools directory
2376
2377 * setup.py (setup call): Use license instead of licence. This
2378 silences a deprecation warning on Python 2.3
2379
2380 2003-12-05 Frank Koormann <[email protected]>
2381
2382 Documentation synced with 1.0rc1
2383
2384 * Doc/manual/thuban-manual.xml:
2385 Minor formatting changes and references to database layers .
2386 Introduction.Internationalization: New section on i18n.
2387 MapManagement.AddingandRemovingLayers: Added item on database layers.
2388 MapManagement.TheLegend: Added section and screenshot on popup menu.
2389 ProjectionManagement: Updated screenshot and sentence on EPSG.
2390 Appendix.SupportedDataSources: Added PostGIS.
2391 Appendix.WorkingwithPostGIS: New section.
2392
2393 * Doc/manual/images/6_projection.png: Updated screenshot including
2394 EPSG checkboxes.
2395
2396 * Doc/manual/images/3_5_popup_menu.png: New, popup menu screenshot.
2397
2398 * Doc/manual/images/app_postgis_add_layer.png,
2399 Doc/manual/images/app_postgis_db_add.png,
2400 Doc/manual/images/app_postgis_db_management.png:
2401 New screenshots focussing on database layers
2402
2403 2003-12-05 Frank Koormann <[email protected]>
2404
2405 * Thuban/UI/projdialog.py (load_user_proj): If user.proj is missing
2406 write warning to stderr instead of rising a warning dialog
2407
2408 2003-12-03 Bernhard Herzog <[email protected]>
2409
2410 Fix for RT #2243
2411
2412 * Thuban/UI/mainwindow.py (MainWindow.has_selected_shape_layer):
2413 New. Like has_selected_layer but for shape layers only
2414 (_has_selected_shape_layer): New. Like _has_selected_layer but for
2415 shape layers only
2416 (layer_show_table command, layer_jointable command): Use these
2417 commands should only be available for shape layers
2418
2419 2003-12-03 Bernhard Herzog <[email protected]>
2420
2421 * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
2422 publishers that are wx objects and may have been destroyed by wx
2423 already. Fixes RT #2242.
2424
2425 2003-12-03 Bernhard Herzog <[email protected]>
2426
2427 * po/ru.po: Updates from Alex Shevlakov
2428
2429 2003-12-03 Silke Reimer <silkeintevation.de>
2430
2431 * debian/control, debian/changelog: Added gdal-support to
2432 debian package, updated to new thuban version
2433
2434
2435 2003-12-03 Bernhard Herzog <[email protected]>
2436
2437 * Thuban/Lib/version.py: New. Module for version number
2438 manipulations. The version of make_tuple here also deals better
2439 with more unusual version number strings, such as e.g.
2440 "1.2+cvs20031111"
2441
2442 * Thuban/version.py (make_tuple): Removed. It's now in
2443 Thuban.Lib.version. Use that implementation instead.
2444
2445 * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
2446
2447 2003-12-02 Bernhard Herzog <[email protected]>
2448
2449 * MANIFEST.in: Add debian files
2450
2451 * setup.py (setup call): Add packages for the Extensions so that
2452 they're installed too
2453 (data_files): Add READMEs and sample data from some Extensions
2454
2455 * NEWS: Add note about the extensions in binary packages
2456
2457 2003-12-02 Bernhard Herzog <[email protected]>
2458
2459 * Thuban/Model/save.py (SessionSaver.write_session): Save files
2460 with the thuban-1.0rc1
2461
2462 * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
2463 thuban-1.0rc1 namespace too
2464
2465 * test/test_save.py (SaveSessionTest.dtd)
2466 (SaveSessionTest.testEmptySession)
2467 (SaveSessionTest.testSingleLayer)
2468 (SaveSessionTest.testLayerProjection)
2469 (SaveSessionTest.testRasterLayer)
2470 (SaveSessionTest.testClassifiedLayer)
2471 (SaveSessionTest.test_dbf_table)
2472 (SaveSessionTest.test_joined_table)
2473 (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
2474 namespace
2475
2476 * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
2477 namespace
2478 (TestSingleLayer.file_contents)
2479 (TestNonAsciiColumnName.file_contents)
2480 (TestLayerVisibility.file_contents)
2481 (TestClassification.file_contents, TestLabels.file_contents)
2482 (TestLayerProjection.file_contents)
2483 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
2484 (TestPostGISLayer.file_contents)
2485 (TestPostGISLayerPassword.file_contents)
2486 (TestLoadError.file_contents, TestLoadError.test): Update to
2487 thuban-1.0rc1 namespace
2488
2489 2003-12-01 Bernhard Herzog <[email protected]>
2490
2491 * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
2492 nt to better match Intevation's current w32 setup
2493
2494 * HOWTO-Release: Add note about updating MANIFEST.in
2495
2496 * MANIFEST.in: Add the Extensions
2497
2498 * NEWS: Update for 1.0rc1
2499
2500 2003-12-01 Bernhard Herzog <[email protected]>
2501
2502 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
2503 cards for the dialog so that shapefiles ending in all uppercase
2504 SHP are listed too
2505
2506 2003-11-28 Bernhard Herzog <[email protected]>
2507
2508 * Thuban/version.py (longversion): Update to 1.0rc1
2509
2510 * setup.py (setup call): Update version to 1.0rc1. Use the
2511 [email protected] email address as author email instead of my
2512 personal one.
2513
2514 2003-11-28 Bernhard Herzog <[email protected]>
2515
2516 * po/de.po: Update german translation.
2517
2518 2003-11-28 Bernhard Herzog <[email protected]>
2519
2520 Unify the filenames stored in .thuban files so that the .thuban
2521 files are more platform independend
2522
2523 * Thuban/Model/save.py (unify_filename): New. Unify filenames so
2524 that they can be used on both windows and unix
2525 (SessionSaver.prepare_filename): New. Handle all filename
2526 transformations for filenames stored in the thuban file
2527 (SessionSaver.write_data_containers, SessionSaver.write_layer):
2528 Use prepare_filename
2529
2530 * test/test_save.py (SaveSessionTest.testSingleLayer)
2531 (SaveSessionTest.testLayerProjection)
2532 (SaveSessionTest.testRasterLayer)
2533 (SaveSessionTest.testClassifiedLayer)
2534 (SaveSessionTest.test_dbf_table)
2535 (SaveSessionTest.test_joined_table): Filenames are always stored
2536 with slashes on all currently supported platforms so adapt all
2537 tests to this
2538
2539 * test/test_load.py (LoadSessionTest.filenames): With the new
2540 filename scheme the filenames in the tests should be
2541 understandable on all currently supported platforms so we turn
2542 this into an empty list because we don't have to normalize them
2543 anymore
2544
2545 2003-11-28 Bernhard Herzog <[email protected]>
2546
2547 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
2548 Add the ellipsoid to the projection since some Proj versions
2549 complain if it's missing.
2550
2551 2003-11-27 Bernhard Herzog <[email protected]>
2552
2553 Corect some bounding box projection problems
2554
2555 * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
2556 version of ForwardBBox
2557 (Projection._transform_bbox): New. common implementation of
2558 ForwardBBox and InverseBBox
2559 (Projection.ForwardBBox): Use _transform_bbox.
2560
2561 * test/test_proj.py (TestProjection.test): Add test for
2562 InverseBBox
2563
2564 * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
2565 (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
2566 new InverseBBox method to determine the unprojected bounding box
2567 (Layer.ShapesInRegion): Use the ForwardBBox method to project the
2568 bbox.
2569
2570 * test/test_layer.py (TestLayer.test_point_layer_with_projection):
2571 Removed.
2572 (TestLayer.test_arc_layer_with_projection): New. This test is
2573 better able to test whether bounding boxes are projected correctly
2574 than test_point_layer_with_projection
2575
2576 * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
2577 InverseBBox to unproject bboxes
2578
2579 2003-11-25 Bernhard Herzog <[email protected]>
2580
2581 * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
2582 source code.
2583
2584 2003-11-25 Bernhard Herzog <[email protected]>
2585
2586 * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
2587 there for backwards compatibility and all code relying on that
2588 should have been updated by now.
2589
2590 2003-11-25 Bernhard Herzog <[email protected]>
2591
2592 * test/test_load.py (TestClassification.test): Add the missing
2593 round trip test.
2594 (TestClassification.file_contents): Update to the newest file
2595 format
2596
2597 2003-11-25 Bernhard Herzog <[email protected]>
2598
2599 Add very experimental (and possibly dangerous) extension to draw
2600 polygons:
2601
2602 * Extensions/drawshape/README: New. Brief installation
2603 instructions
2604
2605 * Extensions/drawshape/drawshape.py: New. Implementation of the
2606 drawshape extensions
2607
2608 * Extensions/drawshape/patch.diff: Patch to apply before the
2609 extension can be used.
2610
2611 2003-11-24 Bernhard Herzog <[email protected]>
2612
2613 * Thuban/Model/data.py (ShapefileStore._open_shapefile)
2614 (ShapefileStore.__init__): Factor opening the shapefile into a
2615 separate method (the new _open_shapefile). This makes the code a
2616 bit more readable but the real reason is that it makes some evil
2617 hacks easier. :-)
2618
2619 2003-11-24 Bernhard Herzog <[email protected]>
2620
2621 * Thuban/Model/load.py (SessionLoader.check_attrs): If no
2622 converter is specified for an attribute assume it's a string
2623 containing only Latin1 characters. Update doc-string accordingly.
2624 This change should fix many places where unicode objects might
2625 accidentally enter Thuban.
2626
2627 * test/test_load.py (TestNonAsciiColumnName): New test to check
2628 what happens with column names in DBF files that contain non-ascii
2629 characters
2630
2631 2003-11-21 Bernhard Herzog <[email protected]>
2632
2633 Enable the experimental attribute editing again and introduce a
2634 command line switch to actually activate it
2635
2636 * Thuban/UI/main.py (options): New. Container for options set on
2637 the commmand line
2638 (main): Add the --enable-attribute-editing flag.
2639
2640 * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
2641 editing is enabled use the grid ctrl which allows editing of the
2642 values
2643
2644 * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
2645 New. Just delegate this to the underlying table.
2646
2647 2003-11-20 Bernhard Herzog <[email protected]>
2648
2649 * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
2650 Skip this test if run under non-posix systems since it only works
2651 there
2652
2653 2003-11-19 Bernhard Herzog <[email protected]>
2654
2655 * Thuban/Model/resource.py: Rework the way gdal support is
2656 determined so that we can give a reason in the about why gdal is
2657 not supported.
2658 (gdal_support_status): New. Variable holding a string with the
2659 reason for no gdal support
2660
2661 * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
2662 not supported to the message
2663
2664 2003-11-19 Bernhard Herzog <[email protected]>
2665
2666 Remove the old table interface and its test cases
2667
2668 * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
2669 (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
2670 anymore
2671
2672 * Thuban/Model/transientdb.py (TransientTableBase)
2673 (AutoTransientTable): Do not derive from OldTableInterfaceMixin
2674 anymore
2675
2676 * test/test_table.py: Removed since the old interface it tests is
2677 gone.
2678
2679 * test/runtests.py (main): The old table interface is gone and
2680 with it the deprecation warnings so remove the code that turns
2681 these warnings into errors
2682
2683 2003-11-19 Bernhard Herzog <[email protected]>
2684
2685 * test/test_table.py: Revert to revision 1.5 again. Changing the
2686 tests to use the new table interface is completely wrong since the
2687 whole purpose of the tests in this module is to test the old
2688 interface.
2689
2690 2003-11-18 Bernhard Herzog <[email protected]>
2691
2692 * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
2693 New. Test whether the connection matches a set of connection
2694 parameters
2695
2696 * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
2697 (DBFrame.OnAdd): Use the new MatchesParameters method when looking
2698 for existing connections with the same parameters and break out of
2699 the loop correctly.
2700
2701 * test/test_postgis_db.py (TestBriefDescription)
2702 (TestPostGISSimple.test_brief_description): Rename
2703 TestBriefDescription to TestPostGISSimple and the test method to
2704 test_brief_description so that we can add more test methods.
2705 (TestPostGISSimple.test_matches_parameters): New. Test the new
2706 MatchesParameters method
2707
2708 2003-11-18 Bernhard Herzog <[email protected]>
2709
2710 * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
2711 _was_destroyed, to indicate whether an publisher instance has
2712 already been destroyed.
2713 (Publisher.Unsubscribe): Only disconnect if the publisher has not
2714 been destroyed yet.
2715 (Publisher.Destroy): Set the _was_destroyed flag to true.
2716
2717 * test/test_connector.py
2718 (TestPublisher.test_unsubscribe_after_destroy): New. Test that
2719 calling Unsubscribe after Destroy doesn't raise an exception
2720
2721 2003-11-14 Bernhard Herzog <[email protected]>
2722
2723 * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
2724 typo in doc-string
2725
2726 2003-11-13 Bernhard Herzog <[email protected]>
2727
2728 Quote table and column names properly for postgis.
2729
2730 * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
2731 quote an identifier for use in an sql statement
2732 (PostGISColumn.__init__): Add the quoted_name attribute
2733 (PostGISTable.__init__): New instance variable quoted_tablename
2734 (PostGISTable._fetch_table_information): Use the quoted table
2735 name. New isntance variable quoted_geo_col with a quoted version
2736 of geometry_column
2737 (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
2738 (PostGISTable.RowOrdinalToId): Use the quoted table name
2739 (PostGISTable.ReadValue, PostGISTable.ValueRange)
2740 (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
2741 (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
2742 (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
2743 Use quoted table and column names
2744
2745 * test/test_postgis_db.py (TestPostGISSpecialCases)
2746 (TestPostGISIgnoredColumns): Rename the class to
2747 TestPostGISSpecialCases because that better describes the new
2748 cases
2749 (TestPostGISSpecialCases.test_unsupported_types)
2750 (TestPostGISSpecialCases.test): Rename the method to
2751 test_unsupported_types because we need a more descriptive name now
2752 that there are more methods
2753 (TestPostGISSpecialCases.test_table_name_quoting)
2754 (TestPostGISSpecialCases.test_column_name_quoting)
2755 (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
2756 cases to test quoting of table and column names in PostGISTable
2757 and PostGISShapeStore
2758
2759 * test/postgissupport.py
2760 (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
2761 AddGeometryColumn desn't support table or column names with sapces
2762 or double quotes
2763
2764 2003-11-12 Jan-Oliver Wagner <[email protected]>
2765
2766 * Extensions/wms/__init__.py: New: Init to make this
2767 directory a package.
2768
2769 * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
2770
2771 2003-11-11 Bernhard Herzog <[email protected]>
2772
2773 * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
2774 Constant for the file woth deprecated epsg projections
2775 (get_system_proj_file): Update doc-string
2776
2777 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
2778 above the EPS widgets, introduce a check box for the deprecated
2779 eps projections and a label for the epsg widgets
2780 (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
2781 too
2782
2783 2003-11-11 Bernhard Herzog <[email protected]>
2784
2785 Avoid warnings when run under Python 2.3
2786
2787 * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
2788 (BaseRenderer.draw_label_layer): Coordinates must be ints.
2789
2790 * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
2791 real method so that we can convert to int.
2792 (MapRenderer.label_font): The font size mist be an int.
2793
2794 * Thuban/UI/common.py (Color2wxColour): The color values must be
2795 ints. Also, remove the unnecessary asserts.
2796
2797 * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
2798 (TestUnicodeStrings.test): Python source code should not contain
2799 non-ascii characters unless an encoding is specified in the file.
2800 Therefore use \x escapes in the string literals for non-ascii
2801 characters.
2802
2803 2003-11-11 Bernhard Herzog <[email protected]>
2804
2805 * Thuban/Model/resource.py (get_system_proj_file): Add a filename
2806 parameter so that this function can be used for all proj files in
2807 Resource/Projections
2808 (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
2809 get_system_proj_file
2810
2811 * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
2812 ProjFile self.__sysProjFile use a dictionary of system ProjFile
2813 objects self._sys_proj_files
2814 (ProjFrame.build_dialog): Adapt to the new changes in the
2815 ProjectionList constructor. Add a check button to toggle whether
2816 EPSG projections are shown
2817 (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
2818 events.
2819 (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
2820 the busy cursor if the files have not yet been loaded by the
2821 dialog.
2822 (ProjFrame.load_system_proj): Add a parameter for the name of the
2823 proj file. Maintain the dictionary of system projections
2824 self._sys_proj_files
2825
2826 * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
2827 user_projs parameters into one parameter proj_files which is a
2828 list of proj files.
2829 (ProjectionList._subscribe_proj_files)
2830 (ProjectionList._unsubscribe_proj_files): New. Move
2831 subscription/unsubscription of projfile messages to separate
2832 methods
2833 (ProjectionList.Destroy): The unsubscribe is now done in
2834 _unsubscribe_proj_files
2835 (ProjectionList.update_projections): We now have a list of proj
2836 file objects
2837 (ProjectionList.SetProjFiles): New method to set a new list of
2838 proj file objects
2839
2840 * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
2841 Specify explicitly which system proj file to load.
2842
2843 2003-11-11 Bernhard Herzog <[email protected]>
2844
2845 * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
2846 instance variables to cut cyclic references. The GC would have
2847 collected the loader eventually but it can happen that it doesn't
2848 run at all until thuban is closed (2.3 but not 2.2 tries a bit
2849 harder and forces a collection when the interpreter terminates)
2850 (load_session): Call the handler's Destroy method to make sure
2851 that it gets garbage collected early. Otherwise it will be
2852 collected very late if at all and it holds some references to e.g.
2853 shapestores and the session which can lead to leaks (of e.g. the
2854 temporary files)
2855
2856 * test/test_load.py (TestSingleLayer.test_leak): New. test for the
2857 resource leak in load_session
2858
2859 2003-11-10 Bernhard Herzog <[email protected]>
2860
2861 * Thuban/UI/baserenderer.py: Add a way to specify how layers in
2862 extensions are to be rendered.
2863 (_renderer_extensions): New. List with renderer for layers in
2864 extensions
2865 (add_renderer_extension): New. Add a renderer extension
2866 (init_renderer_extensions): New. Init the renderer extensions
2867 (BaseRenderer.render_map_incrementally): Search
2868 _renderer_extensions for how to draw unknown layer types
2869 (BaseRenderer.draw_raster_data): Add format parameter so that
2870 formats other than BMP can be drawn
2871 (BaseRenderer.draw_raster_layer): Pass an explicit format to
2872 draw_raster_data
2873
2874 * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
2875 strings of the format parameter of draw_raster_data method to wx
2876 constants
2877 (MapRenderer.draw_raster_data): Add the format parameter and use
2878 raster_format_map to map it to the right wxwindows constant for
2879 wxImageFromStream
2880
2881 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
2882 the format parameter and record it
2883 (TestBaseRenderer.test_raster_no_projection): check the format
2884 paramter of the draw_raster_data method
2885 (TestBaseRenderer.test_renderer_extension): New. Test the renderer
2886 extension facility
2887
2888 2003-11-07 Bernhard Herzog <[email protected]>
2889
2890 Tweak the usage of the sqlite database to make common use cases
2891 more responsive. In most cases copying the data to the sqlite
2892 database takes so long that using sqlite doesn't have enough
2893 advantages.
2894
2895 * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
2896 comments about performance and query the min and max in separate
2897 statements because only that way will indexes be used.
2898 (TransientTableBase.UniqueValues): Add some comments about
2899 performance.
2900 (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
2901 Do not copy the data to the transient DB but use the transient
2902 copy if it exists. See the new comments for the performance trade
2903 offs
2904
2905 * test/test_transientdb.py
2906 (TestTransientTable.test_auto_transient_table): Make sure that the
2907 data is copied to the transient database at some point.
2908
2909 2003-11-03 Bernhard Herzog <[email protected]>
2910
2911 * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
2912 globals to locals so that it's a bit faster
2913
2914 2003-11-03 Bernhard Herzog <[email protected]>
2915
2916 * Thuban/UI/baserenderer.py
2917 (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
2918 method. ReadValue is faster than ReadRowAsDict since it only reads
2919 one cell especially now that the dbf file objects actually
2920 implement it.
2921
2922 * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
2923 read_attribute method of the dbf objects
2924
2925 2003-11-03 Bernhard Herzog <[email protected]>
2926
2927 * Extensions/profiling/profiling.py (popup_dialog_box): New config
2928 variable to indicate whether the result should be shown in a
2929 dialog box
2930 (profile_screen_renderer, time_screen_renderer): Only show a
2931 dialog box if popup_dialog_box is true.
2932 (profile_screen_renderer): Flush stdout after the printing the
2933 first part of the "profiling..." message
2934
2935 * Thuban/UI/baserenderer.py
2936 (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
2937 brushes for the groups so that they're not created over and over
2938 again
2939
2940 * Thuban/Model/classification.py (Classification.__getattr__)
2941 (Classification._compile_classification)
2942 (Classification._clear_compiled_classification): New. Methods to
2943 manage a 'compiled' representation of the classification groups
2944 which is created on demand
2945 (Classification.InsertGroup, Classification.RemoveGroup)
2946 (Classification.ReplaceGroup): reset the compiled representation
2947 (Classification.FindGroup): Use the compiled representation to
2948 find the matching group
2949 (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
2950
2951 2003-10-31 Bernhard Herzog <[email protected]>
2952
2953 * Thuban/Model/classification.py (Classification.SetDefaultGroup):
2954 Send a CLASS_CHANGED message
2955 (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
2956 not return the removed group since it wasn't used.
2957
2958 * test/test_classification.py
2959 (TestClassification.test_set_default_group): New. Test the
2960 SetDefaultGroup method
2961 (TestClassification.test_insert_group): New. Test the InsertGroup
2962 method
2963 (TestClassification.test_remove_group): New. Test the RemoveGroup
2964 method
2965 (TestClassification.test_replace_group): New. Test the
2966 ReplaceGroup method
2967
2968 2003-10-31 Bernhard Herzog <[email protected]>
2969
2970 * test/test_classification.py (TestClassification.setUp):
2971 Subscribe to the CLASS_CHANGED messages
2972 (TestClassification.tearDown): New. Destroy the classification
2973 properly
2974 (TestClassification.test_defaults): Add tests for the default line
2975 width and whether no messages were sent yet
2976 (TestClassification.test_set_default_properties): Add tests for
2977 messages and setting the default line width
2978 (TestClassification.test_add_singleton)
2979 (TestClassification.test_add_range)
2980 (TestClassification.test_multiple_groups): Add tests for messages
2981
2982 2003-10-31 Bernhard Herzog <[email protected]>
2983
2984 Some more refactoring in preparation for new tests:
2985
2986 * test/test_classification.py (TestClassification.setUp): New.
2987 Instantiate the classification here. Update the test methods
2988 accordingly.
2989 (TestClassification.test_multiple_groups): Make sure that the two
2990 singletons matching 1 are considered different.
2991
2992 2003-10-31 Bernhard Herzog <[email protected]>
2993
2994 * test/test_classification.py (red, green, blue): New. These
2995 constants were used in several cases. Update the relevant methods.
2996 (TestClassification.test_defaults)
2997 (TestClassification.test_set_default_properties)
2998 (TestClassification.test_add_singleton)
2999 (TestClassification.test_add_range)
3000 (TestClassification.test_multiple_groups)
3001 (TestClassification.test_deepcopy): New. These were formerly all
3002 part of the single method test.
3003 (TestClassification.test_deepcopy): Removed.
3004 (TestClassIterator): Removed. The test case is now a method of
3005 TestClassification since it tests part of the public interface of
3006 Classification
3007 (TestClassification.test_iterator): New. Used to be
3008 TestClassIterator effectively
3009
3010 2003-10-31 Jan-Oliver Wagner <[email protected]>
3011
3012 GUIfied the functions of the profiling extension.
3013
3014 * /Extensions/profiling/__init__.py: New: Init to make this
3015 directory a package.
3016
3017 * Extensions/profiling/profiling.py: Moved menu entries to
3018 the Extensions menu. Applied _() for strings.
3019 (profile_screen_renderer): Catch the detailed printout and present
3020 it in a dialog.
3021 (time_screen_renderer): Raise a dialog to present the result instead
3022 of printing it to stdout.
3023
3024 2003-10-31 Bernhard Herzog <[email protected]>
3025
3026 * test/test_classification.py (TestClassGroupProperties)
3027 (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
3028 (TestClassGroupSingleton, TestClassIterator, TestClassification):
3029 Split TestClassification into several classes, one for each class
3030 being tested. TestClassification itself now only tests
3031 Classification. This split makes changes to the tests a bit easier
3032
3033 2003-10-31 Bernhard Herzog <[email protected]>
3034
3035 * Extensions/profiling/profiling.py: New. Extension to measure
3036 Thuban performance
3037
3038 2003-10-31 Frank Koormann <[email protected]>
3039
3040 Added two items to legend popup menu: Remove Layer and Show Layer Table
3041
3042 * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
3043 LegendPanel._OnShowTable): New event handlers, call the corresponding
3044 mainwindow methods.
3045 (LegendTree._OnRightClick): Added items to popup menu.
3046
3047 2003-10-30 Bernhard Herzog <[email protected]>
3048
3049 * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
3050 EVT_WINDOW_DESTROY
3051 (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
3052 nothing but is convenient for the derived classes.
3053
3054 * Thuban/UI/tableview.py
3055 (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
3056 Unsubscribe the messages here not in OnClose because that might
3057 get called multiple times. Fixes RT #2196
3058 (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
3059 anymore.
3060
3061 * README: Update the minimum requirement for wxPython. Since we
3062 now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
3063 the version in which that was introduced for all platforms
3064
3065 2003-10-30 Frank Koormann <[email protected]>
3066
3067 * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
3068 the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
3069 frame.
3070
3071 2003-10-30 Jan-Oliver Wagner <[email protected]>
3072
3073 Improved APR import extension, added further EPSG definitions
3074 and some cleanup regarding string class.
3075
3076 * test/test_proj.py (TestProjection.test_get_projection_units_geo):
3077 Added test for alias 'longlat'.
3078
3079 * Resources/Projections/epsg-deprecated.proj: New. Contains
3080 deprecated EPSG definitions.
3081
3082 * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
3083 the variable names for objects.
3084
3085 * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
3086 Copied from importAPR and provided with documentation.
3087
3088 * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
3089 Moved to apr.py.
3090 (APR_View): Added object ref 'ITheme'.
3091
3092 * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
3093 split function by corresponding use of the string class method.
3094
3095 * Thuban/Model/xmlwriter.py: Replaced string replace function by
3096 corresponding string method.
3097
3098 2003-10-29 Bernhard Herzog <[email protected]>
3099
3100 * Thuban/UI/baserenderer.py
3101 (BaseRenderer.draw_shape_layer_incrementally): Speed up the
3102 special case of a classification that only has the default group
3103
3104 2003-10-27 Bernhard Herzog <[email protected]>
3105
3106 * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
3107
3108 * po/de.po: Update.
3109
3110 * Thuban/UI/application.py
3111 (ThubanApplication.ShowExceptionDialog): Handle translation of the
3112 dialog message properly
3113
3114 2003-10-27 Bernhard Herzog <[email protected]>
3115
3116 Rework how localization works so that we use wx's translation
3117 functions when running Thuban as a normal application but not when
3118 we don't need any UI, such as in the test suite. See the comment
3119 in Thuban/__init__.py for details
3120
3121 * Thuban/__init__.py (_): Add one level of indirection to make the
3122 translation handling more flexible and to make it possible to use
3123 either wx's translation services or not.
3124 (gettext_identity, translation_function_installed)
3125 (install_translation_function): New function to help with this
3126
3127 * Thuban/UI/__init__.py: Install the wx specific translation
3128 function if it's OK to do that
3129
3130 * test/support.py (initthuban): Install a dummy translation
3131 function so that importing Thuban.UI doesn't install a wx specific
3132 one for which would need to import wxPython
3133
3134 2003-10-27 Bernhard Herzog <[email protected]>
3135
3136 * HOWTO-Release: Source archives should be created first and the
3137 binary packages should be created from the source archives.
3138 There's an official debian package now so there's no need to test
3139 the rpm on debian anymore
3140
3141 2003-10-27 Bernhard Herzog <[email protected]>
3142
3143 Several rendering changes:
3144
3145 - Render the selection into a separate bitmap so that only that
3146 bitmap needs to be redrawn when the selection changes
3147
3148 - Render incrementally showing previews and allowing interaction
3149 before rendering is complete
3150
3151 - Update the renderer interface a bit. Most parameters of
3152 RenderMap are now parameters of the constructor
3153
3154 * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
3155 and the update region as parameters. Update the doc-string
3156 (BaseRenderer.render_map_incrementally): New. Generator function
3157 to renders the map incrementally
3158 (BaseRenderer.render_map): Remove the map argument (it's now in
3159 the constructor) and simply iterate over the
3160 render_map_incrementally generator to draw the map.
3161 (BaseRenderer.draw_shape_layer_incrementally)
3162 (BaseRenderer.draw_shape_layer): Renamed to
3163 draw_shape_layer_incrementally and changed into a generator that
3164 yields True every 500 shapes. Used by render_map_incrementally to
3165 render shape layers incrementally
3166
3167 * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
3168 map and region parameters which are now in the constructor
3169 (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
3170 the inherited render_map_incrementally.
3171 (BaseRenderer.draw_shape_layer): Removed.
3172 (ScreenRenderer.draw_selection_incrementally): New. The selection
3173 drawing part of the removed draw_shape_layer as a generator
3174 (ScreenRenderer.layer_shapes): Update because of the region
3175 parameter change
3176 (ExportRenderer.__init__): New. Extend the inherited constructor
3177 with the destination region for the drawing
3178 (ExportRenderer.RenderMap): Removed the map and region parameters
3179 which are now in the constructor
3180
3181 * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
3182 bitmap suitable for a preview in a tool
3183 (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
3184 bitmap
3185 (MapPrintout.draw_on_dc): Adapt to new renderer interface
3186 (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
3187 exists
3188 (MapCanvas.OnIdle): Update the logic to deal with incremental
3189 rendering and the selection bitmap
3190 (MapCanvas._do_redraw): Handle the instantiation of the render
3191 iterator and the redraws during rendering
3192 (MapCanvas._render_iterator): New. Generator to incrementally
3193 redraw both bitmaps
3194 (MapCanvas.Export): Adapt to new renderer interface.
3195 (MapCanvas.full_redraw): Reset the selection bitmap and the
3196 renderer iterator too
3197 (MapCanvas.redraw_selection): New. Force a redraw of the selection
3198 bitmap
3199 (MapCanvas.shape_selected): Only redraw the selection bitmap
3200
3201 * test/test_baserenderer.py
3202 (TestBaseRenderer.test_polygon_no_projection)
3203 (TestBaseRenderer.test_raster_no_projection)
3204 (TestBaseRenderer.test_point_map_projection)
3205 (TestBaseRenderer.test_point_layer_and_map_projection)
3206 (TestBaseRenderer.test_point_layer_projection)
3207 (TestBaseRenderer.test_point_with_classification): Adapt to new
3208 renderer interface
3209
3210 2003-10-24 Bernhard Herzog <[email protected]>
3211
3212 * libraries/thuban/wxproj.cpp (draw_polygon_shape)
3213 (point_in_polygon_shape, shape_centroid): Raise an exception if
3214 the shape can't be read. Previously invalid shape ids would lead
3215 to a segfault.
3216
3217 * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
3218 New. test whether an exception is raised for invalid shape ids
3219
3220 2003-10-24 Jan-Oliver Wagner <[email protected]>
3221
3222 * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
3223 as alias for 'latlong'.
3224
3225 * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
3226 as alias for 'latlong'.
3227
3228 2003-10-24 Jan-Oliver Wagner <[email protected]>
3229
3230 * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
3231 the projection even for the UnknownPanel.
3232 (UnknownProjPanel.__init__): Define the text and create the textctrl
3233 widget.
3234 (UnknownProjPanel._DoLayout): Replaced static text widget by the
3235 textctrl created in __init__.
3236 (UnknownProjPanel.SetProjection): Set the text for the text ctrl
3237 including the parameters of the projection.
3238
3239 2003-10-24 Jan-Oliver Wagner <[email protected]>
3240
3241 * Resources/Projections/epsg.proj: New. This is a list of
3242 EPSG codes with parameters for proj. The list has been
3243 generated using devtools/create_epsg.py based on the
3244 file nad/epsg of the proj 4.4.7 package. Four projection
3245 definitions have been deleted as they are not accepted by proj:
3246 "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
3247 and "HD72 / EOV".
3248
3249 2003-10-22 Bernhard Herzog <[email protected]>
3250
3251 Some more tweaks to the projection dialog which should fix RT
3252 #1886.
3253
3254 * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
3255 the ProjFile's messages and call the base class methods correctly
3256 (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
3257 flag on the newly selected item too. Otherwise some other item is
3258 focused and the first time the focus is moved with the keyboard
3259 the selection moves in unexpected ways.
3260
3261 * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
3262 focus on the OK button, only on the projection list. That way the
3263 list really has the focus initially
3264 (ProjFrame.OnClose): Call the projection list's Destroy method to
3265 make it unsubscribe all messages
3266
3267 2003-10-21 Bernhard Herzog <[email protected]>
3268
3269 Rework the projection dialog to fix a few bugs, including RT 2166
3270 and most of 2168
3271
3272 * Thuban/UI/projlist.py: New. The class ProjectionList is a
3273 special wxListCtrl to show a list of projections in a more MVC
3274 fashion
3275
3276 * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
3277 throughout the class. The main change is to use the ProjectionList
3278 class instead of a normal wxListBox. Also, add an explicit
3279 "Unknown" projection to the projection choice control.
3280 (ProjPanel.__init__): Add an "unknown" ellipsoid
3281 (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
3282 instantiation of the panel's controls to make the tab-order more
3283 natural
3284
3285 2003-10-21 Bernhard Herzog <[email protected]>
3286
3287 * test/test_load.py (TestSingleLayer.file_contents)
3288 (TestSingleLayer.test): Add non-ascii characters to the titles of
3289 session, map and layer. This is effectively a port of the
3290 TestUnicodeStrings test in test_load_0_8.py which for some reason
3291 was only added there.
3292
3293 * test/test_load_0_9.py (TestSingleLayer.file_contents)
3294 (TestSingleLayer.test): Same as in test_load.py: add non-ascii
3295 characters to the titles of session, map and layer,.
3296
3297 2003-10-21 Bernhard Herzog <[email protected]>
3298
3299 Add EPSG projection handling to .thuban files
3300
3301 * test/test_save.py (SaveSessionTest.dtd)
3302 (SaveSessionTest.testEmptySession)
3303 (SaveSessionTest.testLayerProjection)
3304 (SaveSessionTest.testRasterLayer)
3305 (SaveSessionTest.testClassifiedLayer)
3306 (SaveSessionTest.test_dbf_table)
3307 (SaveSessionTest.test_joined_table)
3308 (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
3309 (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
3310 use a and epsg projection to test saving them
3311
3312 * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
3313 namespace
3314 (TestLayerVisibility.file_contents, TestLabels.file_contents)
3315 (TestLayerProjection.file_contents)
3316 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3317 (TestPostGISLayer.file_contents)
3318 (TestPostGISLayerPassword.file_contents)
3319 (TestLoadError.file_contents, TestLoadError.test): Update to use
3320 1.0-dev namespace
3321 (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
3322 use 1.0-dev namespace and use an EPSG projection to test whether
3323 loading it works
3324
3325 * test/test_load_0_9.py: New. Effectively a copy of test_load.py
3326 as of Thuban 0.9. These are now tests to determine whether Thuban
3327 can still read files generated by Thuban 0.9
3328
3329 * Thuban/Model/save.py (SessionSaver.write)
3330 (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
3331 namespace
3332 (SessionSaver.write_projection): Write the projection's epsg
3333 attribute
3334
3335 * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
3336 thuban-1.0-dev.dtd namespace
3337 (SessionLoader.check_attrs): Allow a callable object as conversion
3338 too
3339 (SessionLoader.start_projection, SessionLoader.end_projection)
3340 (SessionLoader.start_parameter): Handle the epsg attribute and
3341 rename a few instance variables to lower case
3342
3343 * Resources/XML/thuban-1.0.dtd: New. Only difference to
3344 thuban-0.9.dtd is the epsg attribute for projections.
3345
3346 2003-10-21 Bernhard Herzog <[email protected]>
3347
3348 * test/runtests.py (main): Let the user specify which tests to run
3349 on the command line
3350
3351 * test/support.py (ThubanTestResult.getDescription): Override to
3352 give a better short description. The description can be used as a
3353 parameter to run_tests to run that particular test in isolation.
3354
3355 2003-10-21 Frank Koormann <[email protected]>
3356
3357 Popup menu for legend. Scheduled for the 1.2 release this was too
3358 simple to implement: The popup menu is bound to the legend tree, while
3359 the events are hanlded by its anchestor, the legend panel. This
3360 allows reuse of all the event handlers already implemented for the
3361 legend toolbar buttons.
3362
3363 * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
3364 to add handlers for the events issued by the popup menu.
3365 (LegendPanel._OnToggleVisibility): Handler for toggling layer
3366 visibility event
3367 (LegendPanel._OnProjection): Handler for layer projection event.
3368 (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
3369 (LegendTree._OnRightClick): Event handler for right click, select item
3370 and pop up menu.
3371 (LegendTree.ToggleVisibility): Toggle layer visibility
3372 (LegendTree.LayerProjection): Raise layer projection dialog for
3373 current layer.
3374
3375 2003-10-21 Bernhard Herzog <[email protected]>
3376
3377 * Resources/Projections/defaults.proj: Use correct DOCTYPE
3378 declaration. The top-level element is projectionlist not projfile
3379
3380 2003-10-20 Bernhard Herzog <[email protected]>
3381
3382 * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
3383 method to write a projfile and display a busy cursor and error
3384 dialogs.
3385 (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
3386 (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
3387 (ProjFrame.__FillAvailList): Translate "<None>" too and display a
3388 busy cursor while loading the user and system prj files.
3389
3390 2003-10-16 Bernhard Herzog <[email protected]>
3391
3392 * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
3393 ProjFile objects
3394 (clear_proj_file_cache): New function to clear the cache. Mainly
3395 useful for use by the test suite
3396 (read_proj_file): Use the cache.
3397
3398 * test/test_proj.py (TestProjFile): Clarify the doc-string
3399 (ProjFileReadTests): Update doc-string
3400 (ProjFileReadTests.test_get_system_proj_file): Check whether the
3401 system proj files is cached.
3402 (ProjFileLoadTestCase): New base class for the proj file tests
3403 derived from support.FileLoadTestCase to provide some common
3404 behavior.
3405 (TestLoadingProjFile)
3406 (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
3407 (TestProjFileWithInvalidParameters.file_contents): Derive from
3408 ProjFileLoadTestCase
3409 (TestLoadingProjFile.test_caching): New. Test whether the cache
3410 works
3411
3412 2003-10-16 Silke Reimer <[email protected]>
3413
3414 * debian/*: New directory with configuration files for building a thuban
3415 deb-package.
3416
3417 2003-10-14 Bernhard Herzog <[email protected]>
3418
3419 * test/test_proj.py: Execute support.run_tests when run as
3420 __main__ so that missing unsubscribes are detected
3421 (TestProjFile.tearDown): Destroy the proj_file properly
3422
3423 2003-10-14 Bernhard Herzog <[email protected]>
3424
3425 * Thuban/Model/messages.py (PROJECTION_ADDED)
3426 (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
3427 the ProjFile objects
3428
3429 * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
3430 easily send messages when the projections change
3431 (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
3432 when the change was successful
3433
3434 * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
3435 proj file messages
3436 (TestProjFile.test_add_remove)
3437 (TestProjFile.test_remove_non_existing)
3438 (TestProjFile.test_replace)
3439 (TestProjFile.test_replace_non_existing): Test whether the right
3440 messages are sent
3441
3442 2003-10-14 Bernhard Herzog <[email protected]>
3443
3444 * test/test_proj.py (TestProjFile.test): Refactor into several
3445 tests
3446 (TestProjFile.test_add_remove)
3447 (TestProjFile.test_remove_non_existing)
3448 (TestProjFile.test_replace)
3449 (TestProjFile.test_replace_non_existing): Some of the new
3450 individual test cases
3451 (TestProjFileSimple): New class for the rest of the test cases
3452 that came out of the refactoring
3453 (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
3454 derived classes don't have to
3455
3456 2003-10-13 Bernhard Herzog <[email protected]>
3457
3458 Add an optional EPSG code to the projection objects and extend the
3459 .proj file format accordingly.
3460
3461 * Resources/XML/projfile.dtd (element projection): Add epsg
3462 attribute
3463
3464 * Thuban/Model/proj.py (Projection.__init__): New parameter and
3465 instance variable epsg. Update doc-string
3466 (Projection.EPSGCode, Projection.Label): New methods to provide
3467 access to EPSG code and a label for use in dialogs
3468
3469 * Thuban/Model/resource.py (ProjFileReader.start_projection)
3470 (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
3471 Handle the epsg code attribute when reading or writing proj files
3472
3473 * Thuban/UI/projdialog.py (ProjFrame._OnSave)
3474 (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
3475 (ProjFrame.__FillAvailList): Use the projection's Label method to
3476 get the string for the list box
3477
3478 * test/test_proj.py (TestProjection.test_label)
3479 (TestProjection.test_label_epsg)
3480 (TestProjection.test_epsgcode_for_non_epsg_projection)
3481 (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
3482 for the label and EPSGCode methods
3483 (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
3484 (WriteProjFileTests.test_write_empty_file): Create the ProjFile
3485 objects in the test cases and put the expected contents into the
3486 test case methods too. Update doTestWrite accordingly
3487 (TestLoadingProjFile)
3488 (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
3489 read tests from TestProjFile.
3490 (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
3491 tests are now in the new classes.
3492 (sample_projfile, sample_projfile_data)
3493 (sample_projfile2, sample_projfile_data2): Removed. Not used
3494 anymore.
3495 (TestProjFile.test_read_unreadable_file): No need to reset the
3496 permissions at the end anymore since we use a unique filename
3497
3498 2003-10-13 Bernhard Herzog <[email protected]>
3499
3500 * test/test_proj.py: Some more refactoring of the test cases
3501 (ProjFileTest): New base class for the proj file tests.
3502 (TestProjFile): Derive from ProjFileTest
3503 (TestProjFile.test_read_unreadable_file)
3504 (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
3505 the new filename method to get a unique filename
3506 (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
3507 (WriteProjFileTests): New class for proj file write tests.
3508 Contains the write test that were in TestProjFile originally.
3509
3510 2003-10-13 Bernhard Herzog <[email protected]>
3511
3512 * test/test_proj.py (TestProjFile.testRead)
3513 (TestProjFile.test_read_non_existing_file)
3514 (TestProjFile.test_read_unreadable_file)
3515 (TestProjFile.test_read_empty_file): Split into several methods.
3516
3517 2003-10-10 Bernhard Herzog <[email protected]>
3518
3519 * Thuban/UI/sizers.py: New file with custom sizers.
3520
3521 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
3522 all projection type specific panels and put them into a
3523 NotebookLikeSizer. This way the dialog doesn't change its size
3524 when a different projection is selected
3525 (ProjFrame.__init__): Rename projection_panels
3526 projection_panel_defs and reuse projection_panels for a list of
3527 the instantiated panels.
3528 (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
3529 (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
3530 the panels
3531 (UnknownProjPanel._DoLayout): Place the newlines in the message
3532 differently to make the panel narrower.
3533 (TMPanel._DoLayout): Layout the parameters in one column.
3534
3535 2003-10-10 Bernhard Herzog <[email protected]>
3536
3537 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
3538 that contains all the setup for the dialog's widgets, layout and
3539 event handling.
3540 (__): Call build_dialog to build the dialog.
3541 (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
3542 Their functionality is now in build_dialog
3543 (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
3544 (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
3545 (ProjFrame.__DoOnProjChoice): Small updates due to slightly
3546 different widget names and hierarchy introduced with build_dialog.
3547
3548 2003-10-10 Bernhard Herzog <[email protected]>
3549
3550 * README: Fix typo.
3551
3552 2003-10-09 Bernhard Herzog <[email protected]>
3553
3554 * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
3555 projection is already in the list. This is *a lot* faster when
3556 loading files with hundreds of projections since it saves a linear
3557 search. OTOH this will allow adding the same projection to the
3558 user.proj file multiple times in the projection dialog but we'll
3559 deal with that later
3560
3561 2003-10-09 Jan-Oliver Wagner <[email protected]>
3562
3563 * devtools: New. Directory for developer tools that are not intended
3564 for the regular user.
3565
3566 * devtools/create_epsg.py: New. Convert the epsg file of proj into
3567 a python .proj file.
3568
3569 2003-10-09 Bernhard Herzog <[email protected]>
3570
3571 * test/test_proj.py
3572 (TestProjection.test_get_parameter_without_equals_sign): New. Test
3573 whether GetParameter handles parameters without "=" sign correctly
3574
3575 * Thuban/Model/proj.py (Projection.GetParameter): Handle
3576 parameters that do not contain a "=". Update the doc-string
3577
3578 2003-10-08 Bernhard Herzog <[email protected]>
3579
3580 * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
3581 length limit on the projname text control
3582
3583 2003-10-08 Bernhard Herzog <[email protected]>
3584
3585 * test/test_proj.py (TestProjection.test_get_projection_units_geo)
3586 (TestProjection.test_get_projection_units_normal): New. Tests for
3587 the Projection.GetProjectedUnits method
3588
3589 2003-10-08 Jan-Oliver Wagner <[email protected]>
3590
3591 * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
3592 Added missing 'val' parameter.
3593
3594 2003-10-08 Bernhard Herzog <[email protected]>
3595
3596 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
3597 projection type of the currently selected projection is not known,
3598 i.e. there's no panel for it, use the UnknownProjPanel
3599 (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
3600 the actual replacing of the proj panel into the new method
3601 _show_proj_panel.
3602 (UnknownProjPanel): Add doc-string.
3603 (UnknownProjPanel._DoLayout): Insert a newline into the text so
3604 that the panel is not so wide.
3605
3606 2003-10-08 Bernhard Herzog <[email protected]>
3607
3608 * Thuban/Model/resource.py (read_proj_file): Return the warnings
3609 too. Update the doc-string
3610 (get_proj_files): Removed. It wasn't used anywhere
3611 (get_system_proj_files, get_system_proj_file): Rename to
3612 get_system_proj_file and return the ProjFile object and not a list
3613 of ProjFile objects. Update the callers.
3614 (get_user_proj_files, get_user_proj_file): Rename to
3615 get_user_proj_file return the ProjFile object and not a list of
3616 ProjFile objects. Update the callers.
3617 (ProjFileReader.__init__): New instance variable for the warnings.
3618 Rename the __pf ivar to projfile. Update the methods referring to
3619 __pf
3620 (ProjFileReader.end_projection): Catch any errors raised when
3621 instantiating the projection and record that as an error. The
3622 projection will not be in the final ProjFile object.
3623 (ProjFileReader.GetWarnings): New method to return the warnings.
3624
3625 * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
3626 show the warnings from the projfile reader
3627 (ProjFrame._OnImport): Deal with any warnings returned by
3628 read_proj_file
3629 (ProjFrame.__FillAvailList): Deal with any warnings returned by
3630 get_system_proj_file or get_user_proj_file.
3631
3632 * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
3633 (TestProjFileWithInvalidParameters.file_contents): New test cases
3634 to test whether read_proj_file handles invalid projection
3635 parameters correctly
3636 (TestProjFile.test_get_system_proj_file): New. Simple test for
3637 resource.get_system_proj_file
3638
3639 2003-10-07 Bernhard Herzog <[email protected]>
3640
3641 * test/test_derivedshapestore.py
3642 (TestDerivedShapeStoreExceptions.tearDown): Clear the session
3643 properly so that the temporary directories get deleted correctly
3644
3645 2003-10-06 Bernhard Herzog <[email protected]>
3646
3647 Handle the title changes in a proper MVC way.
3648
3649 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
3650 canvas' TITLE_CHANGED messages
3651 (MainWindow.update_title): New. Update the main window's title
3652 (MainWindow.__SetTitle): Removed. Use update_title instead.
3653 (MainWindow.SetMap): Use update_title instead of __SetTitle
3654 (MainWindow.RenameMap): Do change the window title explicitly
3655 here. That's handled in a proper MVC way now.
3656 (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
3657 messages
3658
3659 * Thuban/Lib/connector.py (Conduit): New class to help classes
3660 that forward messages
3661
3662 * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
3663 (ViewPort): Derive from Conduit instead of Publisher
3664 (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
3665 when calling the inherited versions
3666 (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
3667 methods to subscribe and unsubscribe map messages
3668 (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
3669 handle the map subscriptions
3670 (ViewPort.Map, ViewPort.map_projection_changed)
3671 (ViewPort.layer_projection_changed): Add or update doc-strings
3672
3673 * test/test_connector.py (TestPublisher.test_issue_simple): Fix
3674 typo
3675 (MyConduit): Helper class for the Conduit test.
3676 (TestConduit): Test cases for Conduit
3677
3678 * test/test_connector.py: Use support.run_tests as main.
3679
3680 * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
3681 the TITLE_CHANGED messages
3682 (ViewPortTest.test_forwarding_title_changed): New test to check
3683 whether the viewport forwards the map's TITLE_CHANGED messages
3684 (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
3685 after the port's because the latter may require a still functional
3686 map.
3687
3688 2003-10-06 Bernhard Herzog <[email protected]>
3689
3690 * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
3691 doc-string
3692
3693 2003-10-06 Bernhard Herzog <[email protected]>
3694
3695 * test/test_viewport.py (ViewPortTest.setUp)
3696 (SimpleViewPortTest.test_init_with_size): Move the test for the
3697 initial size as a constructor parameter from ViewPortTest.setUp
3698 method to a new separate test in SimpleViewPortTest.
3699
3700 2003-10-06 Bernhard Herzog <[email protected]>
3701
3702 * test/test_viewport.py (MockView): New class derived from
3703 ViewPort with a mock implementation of GetTextExtent to be used in
3704 the test cases
3705 (ViewPortTest.setUp): Use MockView instead of ViewPort
3706
3707 * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
3708 into what would be a "pure virtual function" in C++: always raise
3709 NotImplementedError. Mock implementations for test cases don't
3710 belong into the real code
3711
3712 2003-10-02 Bernhard Herzog <[email protected]>
3713
3714 * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
3715 close the dbf file we create so that it's contents have been
3716 written properly.
3717
3718 * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
3719 libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
3720 Update to shapelib 1.2.10
3721
3722 2003-10-01 Jan-Oliver Wagner <[email protected]>
3723
3724 * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
3725 it annoys lintian which warns about these files not being
3726 executable. The #! isn't necessary here since if you absolutely
3727 must execute them you can always say "python <filename>".
3728
3729 2003-09-26 Bernhard Herzog <[email protected]>
3730
3731 * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
3732 only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
3733 is ported to a newer the import will fail, so it should be noticed
3734 immediately that this function is gone.
3735 Fixes RT#1919
3736
3737 2003-09-26 Bernhard Herzog <[email protected]>
3738
3739 Add a DTD for the projection files and make thuban write valid
3740 projection files
3741
3742 * Resources/XML/projfile.dtd: New. DTD for thuban's projection
3743 files
3744
3745 * Thuban/Model/resource.py (ProjFileSaver.write): Use
3746 'projectionlist' as the name in the document type declaration so
3747 that it matches the element type of the root element.
3748
3749 * test/test_proj.py (sample_projfile, sample_projfile2): Use
3750 'projectionlist' as the name in the document type declaration just
3751 as it is done now in the files thuban would write
3752 (sample_projfile, sample_projfile_data): Fix spelling of
3753 "Mercator"
3754 (TestProjFile.doTestWrite): Validate the written and the expected
3755 XML data
3756 (TestProjFile): Derive from ValidationTest so that we can run xml
3757 validation tests
3758
3759 2003-09-24 Bernhard Herzog <[email protected]>
3760
3761 * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
3762 modify the list returned by map.Layers() in place since it is the
3763 actual list of layers used by the map.
3764
3765 2003-09-23 Jan-Oliver Wagner <[email protected]>
3766
3767 * Doc/manual/thuban-manual.xml: Added subsection to chapter
3768 Extensions to describe the extensions coming with the Thuban
3769 standard package (gns2shp and importAPR).
3770
3771 2003-09-23 Bernhard Herzog <[email protected]>
3772
3773 * libraries/thuban/wxproj.cpp (project_point): if there's an
3774 inverse but no forward projection, convert to degrees after
3775 applying the inverse projection. Fixes RT#2096
3776
3777 * test/test_wxproj.py: New. Test cases for wxproj.so. One test
3778 implicitly tests for the fix to RT#2096
3779
3780 * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
3781 Check that the sequences have the same lengths
3782
3783 * Resources/Projections/defaults.proj (Geographic projection): Use
3784 a much more precise value for the to_meter attribute.
3785
3786 2003-09-22 Bernhard Herzog <[email protected]>
3787
3788 * test/support.py (initthuban): Make sure to unset the LANG env.
3789 var. so that tests that compare translated strings work. Solves RT
3790 #2094
3791
3792 2003-09-22 Jan-Oliver Wagner <[email protected]>
3793
3794 Small improvement of APR import.
3795
3796 * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
3797 Added tests for text-ranges.
3798
3799 * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
3800 returns a string object if the range is based on text.
3801
3802 * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
3803 range retrieval.
3804
3805 2003-09-22 Jan-Oliver Wagner <[email protected]>
3806
3807 Initial version of the importAPR extension which is in
3808 experimental state.
3809
3810 * /Extensions/importAPR/, /Extensions/importAPR/samples/,
3811 /Extensions/importAPR/test/: New directories.
3812
3813 * /Extensions/importAPR/samples/README: New: Howto load the samples.
3814
3815 * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
3816 file which refers to the Thuban Iceland demo data.
3817
3818 * /Extensions/importAPR/test/README: New: Howto execute the tests.
3819
3820 * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
3821
3822 * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
3823 as in '.apr'-files.
3824
3825 * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
3826 ODB Objects as in '.apr', '.avl' and other files.
3827
3828 * /Extensions/importAPR/__init__.py: New: Init to make this
3829 directory a package.
3830
3831 * /Extensions/importAPR/importAPR.py: New: Import a ArcView
3832 project file (.apr) and convert it to Thuban.
3833
3834 2003-09-22 Jan-Oliver Wagner <[email protected]>
3835
3836 * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
3837
3838 2003-09-19 Jan-Oliver Wagner <[email protected]>
3839
3840 * Doc/manual/thuban-manual.xml: Extended section 'Installation'
3841 with description on RPM installation and RPM binary package
3842 creation.
3843
3844 2003-09-18 Bernhard Herzog <[email protected]>
3845
3846 * setup.py (data_files): Only add the mo files if the Locales
3847 directory actually exists, so that setup.py works with a fresh CVS
3848 checkout
3849
3850 2003-09-12 Jan-Oliver Wagner <[email protected]>
3851
3852 * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
3853 in viewport, not anymore in view
3854
3855 2003-09-04 Jan-Oliver Wagner <[email protected]>
3856
3857 Introducing first Extension (gns2shp).
3858
3859 * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
3860
3861 * Extensions/__init__.py: New. init to make this dir a package.
3862
3863 * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
3864
3865 * Extensions/gns2shp/test/README: New. some info on this test directory.
3866
3867 * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
3868
3869 * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
3870 of Shapefile from GNS text file format
3871
3872 2003-09-03 Jan-Oliver Wagner <[email protected]>
3873
3874 Fix/workaround for bug #2019:
3875 https://intevation.de/rt/webrt?serial_num=2019
3876
3877 * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
3878 (IdentifyView.__init__): Added another button that allows to
3879 stop the identify mode.
3880 (IdentifyView.OnStop): New. Stops the identify mode.
3881
3882 2003-09-03 Jan-Oliver Wagner <[email protected]>
3883
3884 Introducing a new exception dialog that allows to exit the
3885 application immediately.
3886 This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
3887
3888 * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
3889
3890 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
3891 Made strings available to translations. Exchanged the simple
3892 ScrolledMessageDialog by the new ExceptionDialog.
3893
3894 2003-09-01 Bernhard Herzog <[email protected]>
3895
3896 * NEWS: New. Summary of changes and release notes.
3897
3898 * MANIFEST.in: Add NEWS
3899
3900 2003-09-01 Bernhard Herzog <[email protected]>
3901
3902 * MANIFEST.in: Correct the include statement for the mo-files and
3903 include the documentation too.
3904
3905 * setup.py (data_files): Add the .mo files
3906 (setup call): Up to version 0.9.0
3907
3908 2003-09-01 Bernhard Herzog <[email protected]>
3909
3910 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
3911 parameter list to just parent and session
3912 (ChooseDBTableDialog.__set_properties): Removed. Setting the
3913 selection of empty list boxes is not allowed (and produces C++
3914 assertion errors) and the rest of the setup is better done in
3915 __init__ anyway.
3916 (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
3917 (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
3918 builtins True/False for booleans to avoid warnings from wxPython
3919
3920 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
3921 ChooseDBTableDialog constructor parameters.
3922
3923 2003-09-01 Bernhard Herzog <[email protected]>
3924
3925 * Thuban/Model/postgisdb.py
3926 (PostGISTable): Extend doc-string
3927 (PostGISTable._fetch_table_information): Set the column index
3928 correctly, pretending ignored columns don't exist.
3929
3930 * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
3931 for postgis tables with data types not yet supported by thuban.
3932
3933 2003-08-29 Bernhard Herzog <[email protected]>
3934
3935 * HOWTO-Release: Tweak item about running the tests.
3936
3937 2003-08-29 Jan-Oliver Wagner <[email protected]>
3938
3939 * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
3940
3941 2003-08-29 Bernhard Herzog <[email protected]>
3942
3943 Add some missing parameters to projections. Proj complains about
3944 them on windows but for some reason not on Linux.
3945
3946 * test/test_save.py (SaveSessionTest.testLayerProjection): Add
3947 missing required projection parameters
3948
3949 * test/test_proj.py (TestProjFile.test): Add missing required
3950 projection parameters
3951
3952 * test/test_load_0_8.py (TestLayerProjection.file_contents)
3953 (TestLayerProjection.test): Add missing required projection
3954 parameters and tests for them
3955
3956 * test/test_load.py (TestLayerProjection.file_contents)
3957 (TestLayerProjection.test): Add missing required projection
3958 parameters and tests for them
3959
3960 * test/test_layer.py (TestLayer.test_base_layer): Add missing
3961 required projection parameters
3962
3963 2003-08-29 Bernhard Herzog <[email protected]>
3964
3965 * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
3966 access the pj_errno because directly accessing pj_errno doesn't
3967 work on windows if the proj library is in a DLL
3968
3969 * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
3970
3971 2003-08-28 Bernhard Herzog <[email protected]>
3972
3973 * test/test_proj.py: Import things from Thuban after calling
3974 initthuban
3975
3976 * test/test_load.py (LoadSessionTest.filenames): New class
3977 variable with the filename attributes to normalize
3978 (LoadSessionTest.check_format): Pass self.filenames to
3979 sax_eventlist to normalize the filename attributes
3980
3981 * test/xmlsupport.py: Add cvs keywords
3982 (SaxEventLister.__init__): New parameter filenames which indicates
3983 attributes that contain filenames
3984 (SaxEventLister.startElementNS): Normalize the filename attributes
3985 with os.path.normpath
3986 (sax_eventlist): New parameter filenames to pass through to
3987 SaxEventLister
3988
3989 * test/test_derivedshapestore.py: Make this file callable as a
3990 program to execute the tests
3991 (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
3992 the session to self.session so that it gets destroyed properly
3993
3994 * test/test_layer.py (TestLayer.tearDown): Call the session's
3995 Destroy method
3996
3997 * test/test_map.py (TestMapBase.tearDown): Destroy self.session
3998 too if it exists
3999 (TestMapAddLayer.test_add_layer): Bind the session to self.session
4000 so that it gets destroyed properly
4001
4002 * test/postgissupport.py (reason_for_not_running_tests): Add a
4003 test for the existence of popen2.Popen4.
4004
4005 * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
4006 reliable way to destroy the sessions created in the test cases
4007 (SaveSessionTest.test_dbf_table): Bind the session to self.session
4008 so that it gets destroyed properly
4009 (SaveSessionTest.testLayerProjection): Bind the session to
4010 self.session so that it gets destroyed properly
4011
4012 * test/test_session.py (UnreferencedTablesTests.tearDown): Make
4013 sure that the session is destroyed properly
4014
4015 * test/test_shapefilestore.py: Make this callable as a program to
4016 execute the tests
4017
4018 * test/test_scalebar.py: Remove unnecessary import of _ from
4019 Thuban
4020
4021 * test/support.py (print_garbage_information): Call initthuban
4022 here because it may be called indirectly from test cases that test
4023 test support modules which do not use anything from thuban itself
4024 (ThubanTestProgram.runTests): Remove unnecessary debug print
4025
4026 2003-08-28 Bernhard Herzog <[email protected]>
4027
4028 * Thuban/version.py (longversion): Update to 0.9
4029
4030 * Thuban/UI/mainwindow.py: Remove some unused imports
4031
4032 * README: Add section about required additional software. Add date
4033 and revision CVS keywords
4034
4035 * HOWTO-Release: Add item about the translations. Add date and
4036 revision CVs keywords and change formatting to match README a bit
4037 better
4038
4039 * po/de.po: Update for 0.9
4040
4041 * test/README: Tweak the wording a little because many tests are
4042 not really unittest.
4043
4044 2003-08-27 Bernhard Herzog <[email protected]>
4045
4046 As preparation for the 0.9 release, switch thuban files to a
4047 non-dev namespace
4048
4049 * Thuban/Model/save.py (SessionSaver.write_session): Write files
4050 with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
4051 namespace
4052
4053 * Thuban/Model/load.py (SessionLoader.__init__): Accept the
4054 http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
4055
4056 * test/test_save.py (SaveSessionTest.dtd)
4057 (SaveSessionTest.testEmptySession)
4058 (SaveSessionTest.testSingleLayer)
4059 (SaveSessionTest.testLayerProjection)
4060 (SaveSessionTest.testRasterLayer)
4061 (SaveSessionTest.testClassifiedLayer)
4062 (SaveSessionTest.test_dbf_table)
4063 (SaveSessionTest.test_joined_table)
4064 (SaveSessionTest.test_save_postgis): Update for new namespace
4065
4066 * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
4067 (TestLayerVisibility.file_contents, TestLabels.file_contents)
4068 (TestLayerProjection.file_contents)
4069 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
4070 (TestPostGISLayer.file_contents)
4071 (TestPostGISLayerPassword.file_contents)
4072 (TestLoadError.file_contents, TestLoadError.test): Update for new
4073 namespace
4074
4075 2003-08-27 Bernhard Herzog <[email protected]>
4076
4077 Make the table interface distinguish between row ids (an integer
4078 that uniquely identifies a row) and row ordinals (a simple row
4079 count from 0 to NumRows() - 1)
4080
4081 * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
4082 (PostGISTable.RowOrdinalToId): New methods to conver between row
4083 ids and row ordinals
4084 (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
4085 parameter row_is_ordinal to indicate whether the row parameter is
4086 the row id or the ordinal
4087
4088 * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
4089 (TransientTableBase.RowOrdinalToId)
4090 (AutoTransientTable.RowIdToOrdinal)
4091 (AutoTransientTable.RowOrdinalToId): Same new methods as in
4092 PostGISTable.
4093 (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
4094 (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
4095 Same new parameter as in PostGISTable.
4096
4097 * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
4098 (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
4099 (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
4100 (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
4101 (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
4102 parameter as in PostGISTable.
4103
4104 * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
4105 (DataTable.RowOrdinalToId): New methods to convert between row ids
4106 and row ordinals.
4107 (TableGrid.SelectRowById): New method to select a row based on its
4108 ID as opposed to its ordinal
4109 (DataTable.GetValue, TableGrid.OnRangeSelect)
4110 (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
4111 (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
4112 (LayerTableFrame.__init__): Convert between row ids and row
4113 ordinals as appropriate
4114
4115 * test/postgissupport.py (PostGISDatabase.__init__): Add
4116 doc-string.
4117 (PostGISDatabase.initdb): The optional third item in a tuple in
4118 tables is now a (key, value) list with additional arguments to
4119 pass to upload_shapefile
4120 (upload_shapefile): New parameter gid_offset to allow gids that
4121 are not the same as the shapeids in the shapefile
4122 (PostgreSQLServer.get_default_static_data_db): Use the new
4123 gid_offset to make the gids in landmarks 1000 higher than the
4124 shapeids in the shapefile
4125
4126 * test/test_viewport.py
4127 (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
4128 new shapeids in the landmarks table
4129
4130 * test/test_transientdb.py
4131 (TestTransientTable.run_iceland_political_tests)
4132 (TestTransientTable.test_transient_joined_table): Add tests for
4133 the new table methods and new keywords arguments.
4134
4135 * test/test_postgis_db.py
4136 (TestPostGISTable.test_read_row_as_dict_row_count_mode)
4137 (TestPostGISTable.test_read_value_row_count_mode)
4138 (TestPostGISTable.test_row_id_to_ordinal)
4139 (TestPostGISTable.test_row_oridnal_to_id): New test for the new
4140 table methods and the new arguments
4141 (TestPostGISShapestorePoint.test_shapes_in_region)
4142 (TestPostGISShapestorePoint.test_shape_raw_data)
4143 (TestPostGISShapestorePoint.test_shape_points)
4144 (TestPostGISShapestorePoint.test_shape_shapeid)
4145 (TestPostGISShapestorePoint.test_all_shapes)
4146 (TestPostGISTable.test_simple_query)
4147 (TestPostGISTable.test_simple_query)
4148 (TestPostGISTable.test_simple_query)
4149 (TestPostGISTable.test_read_value)
4150 (TestPostGISTable.test_read_row_as_dict): Adapt to the new
4151 shapeids in the landmarks table
4152
4153 * test/test_memory_table.py
4154 (TestMemoryTable.test_read_row_as_dict_row_count_mode)
4155 (TestMemoryTable.test_read_value_row_count_mode)
4156 (TestMemoryTable.test_row_id_to_ordinal)
4157 (TestMemoryTable.test_row_oridnal_to_id): New test for the new
4158 table methods and the new arguments
4159
4160 * test/test_dbf_table.py
4161 (TestDBFTable.test_read_row_as_dict_row_count_mode)
4162 (TestDBFTable.test_read_value_row_count_mode)
4163 (TestDBFTable.test_row_id_to_ordinal)
4164 (TestDBFTable.test_row_oridnal_to_id): New test for the new table
4165 methods and the new arguments
4166
4167 2003-08-26 Bernhard Herzog <[email protected]>
4168
4169 * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
4170 more postgis specific but much faster method to get the bounding
4171 box
4172
4173 2003-08-26 Bernhard Herzog <[email protected]>
4174
4175 * Thuban/Model/postgisdb.py (PostGISTable.Title)
4176 (PostGISShapeStore.AllShapes): Add these missing methods.
4177 (PostGISShapeStore.ShapesInRegion): No need to raise
4178 StopIteration. We can simply return
4179
4180 * test/test_postgis_db.py (TestPostGISTable.test_title)
4181 (TestPostGISShapestorePoint.test_all_shapes): New tests for the
4182 new methods
4183
4184 2003-08-25 Bernhard Herzog <[email protected]>
4185
4186 * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
4187
4188 * test/test_postgis_db.py (PolygonTests): New class containing
4189 those tests from TestPostGISShapestorePolygon that can also be
4190 used to test MUTLIPOLYGON tables
4191 (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
4192 so derive from that
4193 (TestPostGISShapestoreMultiPolygon): New class with tests for
4194 MUTLIPOLYGON tables
4195
4196 * test/postgissupport.py (PostGISDatabase.initdb): Allow the
4197 tables argument to have tuples with three items to override the
4198 WKT type used.
4199 (PostgreSQLServer.get_default_static_data_db): Use the above to
4200 create a polygon table with MUTLIPOLYGONs
4201 (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
4202 (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
4203 coords_to*
4204 (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
4205 (wkt_converter): New. Map WKT types to converters
4206 (upload_shapefile): New parameter force_wkt_type to use a
4207 different WKT type than the default
4208
4209 2003-08-25 Bernhard Herzog <[email protected]>
4210
4211 * Thuban/UI/application.py
4212 (ThubanApplication.run_db_param_dialog): New. Suitable as a
4213 db_connection_callback. Main difference is that the dialog run
4214 from this method doesn't have a parent so it can be used even when
4215 there is no main window
4216 (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
4217 no db_connection_callback was given. This way the dialog pops up
4218 even when the .thuban file was given as a command line parameter.
4219
4220 2003-08-25 Bernhard Herzog <[email protected]>
4221
4222 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
4223 before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
4224 which leads to an effectively frozen X session because the user
4225 can only interact with the dialog but the mouse is still grabbed
4226 by the canvas.
4227 Also, call the tool's Hide method before MouseLeftUp because
4228 MouseLeftUp may change the tool's coordinates.
4229
4230 2003-08-25 Bernhard Herzog <[email protected]>
4231
4232 * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
4233 LoadCancelled exceptions and handle them by returning immediately.
4234
4235 2003-08-25 Bernhard Herzog <[email protected]>
4236
4237 GUI part of loading sessions with postgis connections which may
4238 require user interaction to get passwords or updated parameters
4239
4240 * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
4241 bit nucer and be more generic.
4242 (DBFrame.OnAdd): Adapt to new DBDialog interface
4243
4244 * Thuban/UI/application.py (ThubanApplication.OpenSession): New
4245 optional parameter db_connection_callback which is passed to
4246 load_session.
4247
4248 * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
4249 Suitable as a db_connection_callback
4250 (MainWindow.OpenSession): Use self.run_db_param_dialog as the
4251 db_connection_callback of the application's OpenSession method
4252
4253
4254 2003-08-25 Bernhard Herzog <[email protected]>
4255
4256 Basic loading of sessions containing postgis connections:
4257
4258 * Thuban/Model/load.py (LoadError): Add doc-string
4259 (LoadCancelled): New exception class to indicate a cancelled load
4260 (SessionLoader.__init__): Add the db_connection_callback parameter
4261 which will be used by the loader to get updated parameters and a
4262 password for a database connection
4263 (SessionLoader.__init__): Add the new XML elements to the
4264 dispatchers dictionary
4265 (SessionLoader.check_attrs): Two new conversions, ascii to convert
4266 to a byte-string object and idref as a generic id reference
4267 (SessionLoader.start_dbconnection)
4268 (SessionLoader.start_dbshapesource): New. Handlers for the new XML
4269 elements
4270 (load_session): Add the db_connection_callback to pass through the
4271 SessionLoader
4272
4273 * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
4274 New classes to test loading of sessions with postgis database
4275 connections.
4276
4277 2003-08-25 Bernhard Herzog <[email protected]>
4278
4279 * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
4280 replace it and the comment with __BuildDate__ by the Source: and
4281 Id: cvs keywords as used in the other files.
4282
4283 2003-08-25 Bernhard Herzog <[email protected]>
4284
4285 * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
4286 LoadError when a required attribute is missing. The code used to
4287 be commented out for some reason, but probably should have been
4288 active.
4289
4290 * test/test_load.py (TestLoadError.test): Test the message in the
4291 LoadError too to make sure it really is about the missing
4292 attribute
4293
4294 2003-08-22 Bernhard Herzog <[email protected]>
4295
4296 * test/test_save.py (SaveSessionTest.test_dbf_table)
4297 (SaveSessionTest.test_joined_table): Add XML validation tests.
4298
4299 2003-08-22 Bernhard Herzog <[email protected]>
4300
4301 Implement saving a session with a postgis connection
4302
4303 * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
4304 elements for database connections and shapestores using db
4305 connections
4306 (session): Add the dbconnections to the content model
4307
4308 * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
4309 Write the db connections
4310 (SessionSaver.write_session): Call write_db_connections to write
4311 the connection before the data sources
4312 (SessionSaver.write_data_containers): Handle postgis shapestores
4313
4314 * test/test_save.py (SaveSessionTest.thubanids)
4315 (SaveSessionTest.thubanidrefs): Update for new DTD
4316 (SaveSessionTest.test_save_postgis): New. Test saving a session
4317 with postgis connections
4318
4319 * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
4320 (PostGISTable.TableName): New accessor methods for the connection
4321 and table name
4322
4323 * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
4324 (TestPostGISTable.test_dbname): New methods to test the new
4325 PostGISConnection methods
4326
4327 2003-08-22 Bernhard Herzog <[email protected]>
4328
4329 * Thuban/Model/postgisdb.py (ConnectionError): New exception class
4330 for exceptions occurring when establishing a Database connection
4331 (PostGISConnection.connect): Catch psycopg.OperationalError during
4332 connects and raise ConnectionError.
4333
4334 * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
4335 tests for database exceptions
4336
4337 2003-08-22 Bernhard Herzog <[email protected]>
4338
4339 Prepare the test suite for tests with required authentication
4340
4341 * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
4342 variables with two predefined users/passwords, one for the admin
4343 and one for a non-privileged user.
4344 (PostgreSQLServer.createdb): Pass the admin name to initdb and add
4345 the non-privileged user to the database and set the admin password
4346 (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
4347 Better error reporting
4348 (PostgreSQLServer.connection_params)
4349 (PostgreSQLServer.connection_string): New methods to return
4350 information about how to connect to the server
4351 (PostgreSQLServer.execute_sql): New. Convenience method to execute
4352 SQL statements
4353 (PostgreSQLServer.require_authentication): Toggle whether the
4354 server requires authentication
4355 (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
4356 Add or alter users
4357 (PostGISDatabase.initdb): Pass the admin name one the
4358 subprocesses' command lines. Grant select rights on
4359 geometry_columns to everybody.
4360 (upload_shapefile): Use the admin name and password when
4361 connecting. Grant select rights on the new table to everybody.
4362
4363 * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
4364 server's new methods to get the connection parameters.
4365
4366 * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
4367 (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
4368 server's new methods to get the connection parameters.
4369
4370 * test/test_postgis_db.py
4371 (TestPostGISConnection.test_gis_tables_empty)
4372 (TestPostGISConnection.test_gis_tables_non_empty)
4373 (PostGISStaticTests.setUp): Use the server's new methods to get
4374 the connection parameters.
4375
4376 2003-08-22 Bernhard Herzog <[email protected]>
4377
4378 * Thuban/UI/about.py (About.__init__): Add the psycopg version.
4379
4380 * Thuban/version.py: Add psycopg version
4381
4382 * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
4383 version of the psycopg module
4384
4385 2003-08-22 Bernhard Herzog <[email protected]>
4386
4387 * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
4388 (DBFrame.OnEdit): Removed because it's not used and wouldn't work
4389 at the moment. The functionality should probably be implemented
4390 some time, though.
4391 (DBFrame.OnRemove): Display a message if the connection can't be
4392 removed because it's still in use.
4393
4394 2003-08-22 Jan-Oliver Wagner <[email protected]>
4395
4396 * Thuban/UI/about.py (About.__init__): split up the huge about
4397 text into elements/lists for easier translation. This fixes bug
4398 https://intevation.de/rt/webrt?serial_num=2058
4399 Also, made some forgotten string available for the i18n.
4400
4401 2003-08-21 Bernhard Herzog <[email protected]>
4402
4403 Make postgis support really optional including insensitive menu
4404 items.
4405
4406 * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
4407 whether the postgis is supported.
4408
4409 * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
4410 to make postgis support optional
4411
4412 * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
4413 version of Thuban.Model.postgisdb.has_postgis_support
4414 (database_management command): Make it only sensitive if postgis
4415 is supported.
4416
4417 2003-08-21 Jan-Oliver Wagner <[email protected]>
4418
4419 * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
4420 (section Adding and Removing Layers): Added text and described
4421 multi-selection.
4422 (chapter Extensions): New.
4423
4424 2003-08-21 Jan-Oliver Wagner <[email protected]>
4425
4426 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
4427 settings to allow multiple files to load into the map.
4428 Also reduced selection to *.shp as a default.
4429
4430 2003-08-20 Bernhard Herzog <[email protected]>
4431
4432 Add dialogs and commands to open database connections and add
4433 database layers.
4434
4435 * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
4436 method to open the database connection management dialog
4437 (MainWindow.AddDBLayer): New method to add a layer from a database
4438 (_has_dbconnections): New helper function to use for sensitivity
4439 (database_management command, layer_add_db command): New commands
4440 that call the above new methods.
4441 (main_menu): Add the new commands to the menu.
4442
4443 * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
4444 (PostGISConnection.connect): Establish the actual connection in a
4445 separate method and call it in __init__. This makes it easier to
4446 override the behavior in test cases
4447 (PostGISConnection.BriefDescription): New method to return a brief
4448 description for use in dialogs.
4449
4450 * test/test_postgis_db.py (NonConnection): DB connection that
4451 doesn't actually connect
4452 (TestBriefDescription): New class with tests for the new
4453 BriefDescription method
4454
4455 2003-08-19 Jan-Oliver Wagner <[email protected]>
4456
4457 Moved anything from extensions to libraries.
4458
4459 * libraries: New.
4460
4461 * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
4462
4463 * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
4464 Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
4465 been moved here from thuban/extensions/pyprojection/
4466 See there in the Attic for the older history.
4467
4468 * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
4469 dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
4470 shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
4471 have been moved here from thuban/extensions/pyshapelib/
4472 See there in the Attic for the older history.
4473
4474 * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
4475 files have been moved here from thuban/extensions/shapelib/
4476 See there in the Attic for the older history.
4477
4478 * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
4479 gdalwarp.cpp, wxproj.cpp: These files have been moved here from
4480 thuban/extensions/thuban/
4481 See there in the Attic for the older history.
4482
4483 * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
4484
4485 * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
4486 gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
4487
4488 * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
4489 Moved to libraries/shapelib.
4490
4491 * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
4492 shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
4493 ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
4494 Moved to libraries/pyshapelib.
4495
4496 * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
4497 LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
4498 Moved to libraries/pyprojection.
4499
4500 * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
4501
4502 * extensions: Removed.
4503
4504 2003-08-19 Bernhard Herzog <[email protected]>
4505
4506 * test/test_viewport.py (ViewPortTest): We don't use the
4507 facilities of FileTestMixin so don't derive from it.
4508 (TestViewportWithPostGIS): New class with tests for using a
4509 viewport on a map with postgis layers.
4510
4511 2003-08-19 Bernhard Herzog <[email protected]>
4512
4513 Add the db connection management to the session.
4514
4515 * Thuban/Model/session.py (Session.__init__): New instance
4516 variable db_connections
4517 (Session.AddDBConnection, Session.DBConnections)
4518 (Session.HasDBConnections, Session.CanRemoveDBConnection)
4519 (Session.RemoveDBConnection): New methods to manage and query the
4520 db connections managed by the session
4521 (Session.OpenDBShapeStore): New method to open a shapestore from a
4522 db connection
4523
4524 * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
4525 messages for the db connection handling in the session
4526
4527 * test/test_postgis_session.py: New. test cases for the session's
4528 db connection handling with postgis connections
4529
4530 2003-08-19 Bernhard Herzog <[email protected]>
4531
4532 Add very basic postgis database support and the corresponding test
4533 cases. The test cases require a PostgreSQL + postgis installation
4534 but no existing database. The database will be created
4535 automatically by the test cases
4536
4537 * test/README: Add note about skipped tests and the requirements
4538 of the postgis tests.
4539
4540 * Thuban/Model/postgisdb.py: New. Basic postgis database support.
4541
4542 * test/test_postgis_db.py: New. Test cases for the postgis
4543 support.
4544
4545 * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
4546 format
4547
4548 * test/test_wellknowntext.py: New. Test cases for the
4549 wellknowntext parser
4550
4551 * test/postgissupport.py: New. Support module for tests involving
4552 a postgis database.
4553
4554 * test/support.py (execute_as_testsuite): Shut down the postmaster
4555 if it's still running after the tests
4556
4557 * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
4558 well known text format
4559
4560 2003-08-19 Jan-Oliver Wagner <[email protected]>
4561
4562 * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
4563 message dialog.
4564
4565 2003-08-18 Bernhard Herzog <[email protected]>
4566
4567 * test/support.py (ThubanTestResult.printErrors): Indent the
4568 reason for the skips in the output to make it a bit more readable.
4569 (execute_as_testsuite): New helper function to run a test suite
4570 and print some more information.
4571 (run_tests): Use execute_as_testsuite to run the tests
4572
4573 * test/runtests.py (main): Use execute_as_testsuite to run the
4574 tests
4575
4576 2003-08-18 Bernhard Herzog <[email protected]>
4577
4578 Fix some bugs in Thuban and the test suite that were uncovered by
4579 changes introduced in Python 2.3:
4580
4581 * Thuban/Model/table.py (DBFTable.__init__): Make sure the
4582 filename is an absolute name
4583
4584 * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
4585 filename is an absolute name
4586
4587 * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
4588 unique filename to save to and use the correct relative filename
4589 in the expected output.
4590 (SaveSessionTest.test_dbf_table): Use the correct relative
4591 filename in the expected output.
4592
4593 * test/test_layer.py (TestLayer.test_raster_layer): Update the
4594 test to check whether the filename is absolute.
4595
4596 2003-08-18 Jan-Oliver Wagner <[email protected]>
4597
4598 * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
4599
4600 2003-08-15 Bernhard Herzog <[email protected]>
4601
4602 Change the way shapes are returned by a shape store. The
4603 ShapesInRegion method returns an iterator over actual shape
4604 objects instead of a list of shape ids.
4605
4606 * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
4607 id.
4608 (ShapefileStore.ShapesInRegion): Return an iterator over the
4609 shapes which yields shape objects instead of returning a list of
4610 shape ids
4611 (ShapefileStore.AllShapes): New. Return an iterator over all
4612 shapes in the shape store
4613 (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
4614
4615 * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
4616 doc-string.
4617
4618 * Thuban/UI/baserenderer.py
4619 (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
4620 layer_shapes and make it return an iterator containg shapes
4621 instead of a list of ids.
4622 (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
4623 layer_shapes() change
4624
4625 * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
4626 (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
4627
4628 * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
4629 changes in the ShapesInRegion return value.
4630 (ViewPort._get_hit_tester): Remove commented out code
4631
4632 * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
4633 new return value.
4634 (SimpleShapeStore.AllShapes): New. Implement this method too.
4635
4636 * test/test_layer.py (TestLayer.test_arc_layer)
4637 (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
4638 (TestLayer.test_point_layer_with_projection)
4639 (TestLayer.test_derived_store): Adapt to changes in the
4640 ShapesInRegion return value.
4641
4642 * test/test_shapefilestore.py
4643 (TestShapefileStoreArc.test_shapes_in_region)
4644 (TestShapefileStorePolygon.test_shapes_in_region)
4645 (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
4646 in the ShapesInRegion return value.
4647 (TestShapefileStorePoint.test_all_shapes)
4648 (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
4649 methods
4650
4651 * test/test_derivedshapestore.py
4652 (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
4653 the ShapesInRegion return value.
4654 (TestDerivedShapeStore.test_all_shapes)
4655 (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
4656 methods
4657
4658 2003-08-15 Bernhard Herzog <[email protected]>
4659
4660 Make the renderers deal correctly with raw vs. python level
4661 representation of shape geometries
4662
4663 * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
4664 Return a flag useraw in addition to the callable and the parameter
4665 to indicate whether the callable can deal with the raw shape data
4666 or uses the higher level python lists of coordinates. The callable
4667 now should accept either the raw data or the return value of the
4668 shape's Points() method.
4669 (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
4670 change
4671 (BaseRenderer.projected_points): Instead of the shape id use the
4672 points list as parameter.
4673 (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
4674 (BaseRenderer.draw_point_shape): Adapt to projected_points()
4675 change and accept the points list as parameter instead of the
4676 shape id.
4677
4678 * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
4679 the useraw flag as required by the BaseRenderer
4680 (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
4681 changes.
4682
4683 * test/test_baserenderer.py
4684 (TestBaseRenderer.test_point_with_classification): New test for
4685 rendering a map with classifications.
4686
4687 2003-08-15 Bernhard Herzog <[email protected]>
4688
4689 * Thuban/UI/viewport.py (ViewPort.find_shape_at)
4690 (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
4691 (ViewPort._get_hit_tester, ViewPort.projected_points)
4692 (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
4693 (ViewPort._find_label_at): Split the find_shape_at method into
4694 several new methods and use the functions in the hit-test module.
4695
4696 * Thuban/UI/hittest.py: New module with Python-level hit-testing
4697 functions
4698
4699 * test/test_hittest.py: New. Test for the new hittest module
4700
4701 2003-08-15 Bernhard Herzog <[email protected]>
4702
4703 * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
4704 projection to all corners of the bounding box to get a better
4705 approximation of the projected bounding box
4706
4707 * test/test_layer.py (TestLayer.test_point_layer_with_projection):
4708 New. Test coordinate handling of a layer with a projection.
4709 Catches the bug fixed in Layer.ShapesInRegion
4710
4711 2003-08-15 Bernhard Herzog <[email protected]>
4712
4713 Move some of the mock objects in test_baserenderer into their own
4714 module so they can easily be used from other tests
4715
4716 * test/mockgeo.py: New test helper module with some mock objects
4717 for geometry related things like shapes, shapestores and
4718 projections.
4719
4720 * test/test_mockgeo.py: New. Tests for the new helper module
4721
4722 * test/test_baserenderer.py: Some of the mock-objects are in
4723 mockgeo now.
4724
4725 2003-08-12 Jan-Oliver Wagner <[email protected]>
4726
4727 * Thuban/UI/about.py (About.__init__): Added Björn Broscheit.
4728
4729 2003-08-12 Bernhard Herzog <[email protected]>
4730
4731 * po/de.po: New. German translations by Bjoern Broscheit
4732
4733 2003-08-12 Bernhard Herzog <[email protected]>
4734
4735 * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
4736 strings have to be one string literal.
4737
4738 2003-08-11 Bernhard Herzog <[email protected]>
4739
4740 * test/support.py (FloatComparisonMixin.assertPointListEquals):
4741 New. This method was used in various derived classes, but it's
4742 better to have it here.
4743
4744 * test/test_shapefilestore.py
4745 (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
4746 FloatComparisonMixin
4747
4748 * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
4749 It's now in FloatComparisonMixin
4750
4751 * test/test_derivedshapestore.py
4752 (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
4753 in FloatComparisonMixin
4754
4755 2003-08-11 Bernhard Herzog <[email protected]>
4756
4757 * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
4758 error message
4759
4760 2003-08-08 Jan-Oliver Wagner <[email protected]>
4761
4762 * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
4763 with version number.
4764 Changed title to reflect version number of Thuban.
4765
4766 2003-08-08 Jan-Oliver Wagner <[email protected]>
4767
4768 * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
4769 the list corresponds to the "About" web page.
4770
4771 2003-08-08 Bernhard Herzog <[email protected]>
4772
4773 * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
4774 Make sure translated strings are recognized as one string literal.
4775
4776 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
4777 Make sure translated strings are recognized as one string literal.
4778
4779 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
4780 translated strings are recognized as one string literal.
4781
4782 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
4783 sure translated strings are recognized as one string literal.
4784
4785 2003-08-07 Bernhard Herzog <[email protected]>
4786
4787 * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
4788 Simply delegates to the original shapestore.
4789
4790 * test/test_derivedshapestore.py
4791 (TestDerivedShapeStore.test_raw_format): New. Test case for
4792 DerivedShapeStore.RawShapeFormat
4793
4794 2003-08-07 Bernhard Herzog <[email protected]>
4795
4796 Add raw data interface to shape objects.
4797
4798 * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
4799 class to ShapefileShape which now holds shapefile specific
4800 information.
4801 (ShapefileShape.compute_bbox): Simplified to not cache any
4802 information. The way this method is used that shouldn't matter
4803 performance wise.
4804 (ShapefileShape.RawData): New. Return the shapeid which is the raw
4805 data format for shapes from shapefiles.
4806 (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
4807 in the shape objects returned by a shapestore. For a
4808 ShapefileStore this is always RAW_SHAPEFILE.
4809 (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
4810 method.
4811
4812 * test/test_shapefilestore.py
4813 (TestShapefileStore.test_raw_format): New test to test the raw
4814 format feature of shapes.
4815
4816 * Thuban/Model/layer.py: Remove the unused import of Shape from
4817 data. It was only there for interface compatibility but it's not
4818 used inside of Thuban and the generic Shape class has gone away.
4819
4820 * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
4821 the raw data format and only use an optimized version of its a
4822 shapefile.
4823
4824 2003-08-07 Bernhard Herzog <[email protected]>
4825
4826 * test/test_baserenderer.py (SimpleShape): Shape class for the
4827 tests.
4828 (SimpleShapeStore.Shape): Use SimpleShape instead of
4829 Thuban.Model.data.Shape to make the tests independed of the coming
4830 changes.
4831
4832 2003-08-07 Bernhard Herzog <[email protected]>
4833
4834 * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
4835 (ThubanTestProgram): New classes that extend the respective
4836 classes from unittest. These new version support skipping tests
4837 under certain expected conditions. In the Thuban test suite we
4838 uses this for tests that require the optional gdal support.
4839 (run_tests): Use ThubanTestProgram instead of the unittest.main()
4840
4841 * test/runtests.py (main): Use the new ThubanTestRunner instead of
4842 the normal one from unittest
4843
4844 * test/test_layer.py (TestLayer.test_raster_layer): If this test
4845 is not run because gdal support isn't available report this to the
4846 runner.
4847
4848 * test/test_baserenderer.py
4849 (TestBaseRenderer.test_raster_no_projection): Do not run this test
4850 if gdal support isn't available and report this to the runner.
4851
4852 2003-08-06 Bernhard Herzog <[email protected]>
4853
4854 Rearrange the renderers a bit, partly in preparation for changes
4855 required for the postgis merge, partly to make it more testable.
4856 Also make the representation of coordinates in Shapes more
4857 consistent.
4858
4859 * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
4860 this class is now in BaseRenderer. This class is now practically
4861 only a specialization of BaseRenderer for rendering to an actual
4862 wx DC.
4863 (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
4864 to get the shapetype specific rendering functions.
4865
4866 * Thuban/UI/baserenderer.py: New file with the basic rendering
4867 logic. The code in this file is completely independend of wx.
4868 (BaseRenderer): Class with the basic rendering logic
4869
4870 * test/test_baserenderer.py: New. Test cases for BaseRenderer
4871
4872 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
4873 error_on_redraw to guard agains endless loops and stack overflows
4874 when there's a bug in the rendering code that raises exceptions.
4875 (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
4876 rendering into a separate method _do_redraw so that error handling
4877 is a bit easier. When an exception occurs, set error_on_redraw to
4878 true. When it's true on entry to OnIdle do nothing and return
4879 immediately.
4880
4881 * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
4882 Shape object will always have the coordinates as a list of list of
4883 coordinate pairs (tuples).
4884 (Shape.compute_bbox): Adapt to new representation.
4885
4886 * Thuban/UI/viewport.py (ViewPort.find_shape_at)
4887 (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
4888 Shape objects.
4889
4890 * test/test_shapefilestore.py
4891 (ShapefileStoreTests.assertFloatTuplesEqual)
4892 (ShapefileStoreTests.assertPointListEquals): Rename to
4893 assertPointListEquals and change purpose to checking equality of
4894 the lists returned by Shape.Points().
4895 (TestShapefileStoreArc.test_shape)
4896 (TestShapefileStorePolygon.test_shape)
4897 (TestShapefileStorePoint.test_shape): Use the new
4898 assertPointListEquals instead of assertFloatTuplesEqual
4899
4900 * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
4901 (TestLayer.assertPointListEquals): Rename to assertPointListEquals
4902 and change purpose to checking equality of the lists returned by
4903 Shape.Points().
4904 (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
4905 (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
4906 (TestLayer.test_derived_store): Use the new assertPointListEquals
4907 instead of assertFloatTuplesEqual
4908
4909 * test/test_derivedshapestore.py
4910 (TestDerivedShapeStore.assertFloatTuplesEqual)
4911 (TestDerivedShapeStore.assertPointListEquals): Rename to
4912 assertPointListEquals and change purpose to checking equality of
4913 the lists returned by Shape.Points().
4914 (TestDerivedShapeStore.test_shape): Use the new
4915 assertPointListEquals instead of assertFloatTuplesEqual
4916
4917 2003-08-06 Jan-Oliver Wagner <[email protected]>
4918
4919 * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
4920 a bounding box. A dialog is raised in case, no bounding box
4921 is found. This fixes bug #2043:
4922 https://intevation.de/rt/webrt?serial_num=2043
4923
4924 2003-08-05 Bernhard Herzog <[email protected]>
4925
4926 * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
4927 object look like a Color instantiation. Formerly it looked like a
4928 tuple.
4929
4930 * test/test_color.py (TestColor.test_repr)
4931 (TestColor.test_equality, TestColor.test_inequality): New. test
4932 some more apects of the Color class
4933 (TestTransparent.test_repr, TestTransparent.test_hex)
4934 (TestTransparent.test_equality): New. Test cases for the
4935 Transparent object.
4936
4937 2003-08-04 Jan-Oliver Wagner <[email protected]>
4938
4939 * Doc/manual/thuban-manual.xml: a number of small improvements.
4940 The resulting file is the version submitted for GREAT-ER II.
4941
4942 2003-08-01 Bernhard Herzog <[email protected]>
4943
4944 * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
4945 Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
4946 Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
4947
4948 * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
4949 (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
4950 (ThubanEndBusyCursor): Add doc-strings
4951
4952 2003-08-01 Bernhard Herzog <[email protected]>
4953
4954 First step towards PostGIS integration. More abstraction by movin
4955 more code from the layer to the shapestore. More methods of the
4956 layer are now simply delegated to the equivalent method of the
4957 shapestore. The SHAPETYPE_* constants are now in data not in
4958 layer.
4959
4960 * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
4961 (SHAPETYPE_POINT, Shape): Move these constants and classes from
4962 layer.py to data.py
4963 (ShapefileStore.__init__): More Initialization for the new methods
4964 and functionality.
4965 (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
4966 (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
4967 (ShapefileStore.Shape): New methods that were formerly implemented
4968 in the layer.
4969 (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
4970 (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
4971 (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
4972 equivalents of the new shape methods. These versions are simply
4973 delegated to the original shapstore.
4974
4975 * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
4976 (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
4977 (Layer.SetShapeStore): Removed the initializatin of instance
4978 variables that were needed for the stuff that's now in
4979 ShapefileStore
4980 (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
4981 (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
4982 shapestore.
4983
4984 * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
4985 Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
4986 instead of layer.
4987
4988 * test/test_shapefilestore.py: New. Tests for ShapefileStore.
4989
4990 * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
4991
4992 * test/test_layer.py: Import the SHAPETYPE_* constants from data
4993 instead of layer.
4994 (TestLayer.test_derived_store): Remove the test for the exception
4995 when instantiating the DerivedShapeStore with an incompatible
4996 table which is now in test_derivedshapestore.py. Add some more
4997 tests of the layer methods to determine whether they work for a
4998 DerivedShapeStore as well.
4999
5000 2003-07-31 Jonathan Coles <[email protected]>
5001
5002 * Doc/manual/thuban-manual.xml: Fix the list of required packages
5003 by just listing the name and where they can be found.
5004
5005 2003-07-31 Frank Koormann <[email protected]>
5006
5007 * Doc/manual/thuban-manual.xml:
5008 Changed the screenshot elements to figure.
5009 Changed some variablelist elements to itemizedlist.
5010 Added section on GDAL formats.
5011
5012 2003-07-31 Jonathan Coles <[email protected]>
5013
5014 * Doc/manual/thuban-manual.xml: Added a few sentences about
5015 the Fix Border Color option when generating classes.
5016
5017 2003-07-30 Jonathan Coles <[email protected]>
5018
5019 * Thuban/Model/classgen.py: Add docstrings. Rename specific
5020 Ramp instances to use lower_case_style.
5021
5022 * Thuban/UI/classgen.py: Use renamed Ramp instances.
5023
5024 * Thuban/UI/classifier.py: Add docstrings.
5025
5026 * Thuban/UI/dock.py: Add docstrings.
5027
5028 * test/test_classgen.py: Use renamed Ramp instances.
5029
5030 2003-07-30 Bernhard Herzog <[email protected]>
5031
5032 * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
5033 was never used in Thuban.
5034
5035 2003-07-30 Bernhard Herzog <[email protected]>
5036
5037 * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
5038 method directly instead of going through the transient_table
5039 method. This faster because transient_table may force the copy of
5040 a DBF file into the transient database and setting a table's title
5041 doesnm't affect the title of the associated transient table, so
5042 this fixes RT #2042
5043
5044 * Thuban/UI/main.py (__version__): Don't import the already
5045 removed show_exception_dialog.
5046
5047 2003-07-29 Jonathan Coles <[email protected]>
5048
5049 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
5050 Put back this method and remove the equivalent function since we
5051 are setting the exception hook from within this class (OnInit).
5052
5053 2003-07-29 Jonathan Coles <[email protected]>
5054
5055 * Doc/manual/images/5_2_custom_ramp.png,
5056 Doc/manual/images/5_2_quantiles.png,
5057 Doc/manual/images/5_2_uniform_dist.png,
5058 Doc/manual/images/5_2_unique_values.png,
5059 Doc/manual/images/8_int_error.png: New screen shots.
5060
5061 * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
5062 some points, and added more screen shots.
5063
5064 2003-07-29 Bernhard Herzog <[email protected]>
5065
5066 * Thuban/Model/data.py: Remove the now unused import of warnings
5067
5068 2003-07-29 Bernhard Herzog <[email protected]>
5069
5070 * Thuban/Model/data.py (SimpleStore): Removed. This class has been
5071 deprecated since before the 0.8 release and isn't used in Thuban
5072 itself anymore.
5073
5074 * Thuban/Model/transientdb.py: Remove some unnecessary imports
5075
5076 2003-07-29 Jonathan Coles <[email protected]>
5077
5078 * Thuban/UI/application.py (ThubanApplication.OnInit): set the
5079 python exception hook here so that we are sure to catch any
5080 Thuban exception that happen during initialization.
5081
5082 * Thuban/UI/main.py (main): Don't set the exception hook here,
5083 it will get set in ThubanApplication.OnInit.
5084
5085 2003-07-29 Jonathan Coles <[email protected]>
5086
5087 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
5088 Removed and called it show_exception_dialog() so that the exception
5089 handler can be set before the class is created.
5090
5091 * Thuban/UI/main.py (main): Install the exception handler before
5092 a ThubanApplication is created.
5093
5094 2003-07-29 Bernhard Herzog <[email protected]>
5095
5096 * po/it.po: New. Italian translation by Maurizio Napolitano
5097
5098 * po/ru.po: New. Russian translation by Alex Shevlakov
5099
5100 2003-07-29 Frank Koormann <[email protected]>
5101
5102 * Doc/manual/thuban-manual.xml: Extended section on supported
5103 projections.
5104
5105 2003-07-29 Frank Koormann <[email protected]>
5106
5107 * Doc/manual/thuban-manual.xml: gaspell-checked.
5108
5109 2003-07-29 Jonathan Coles <[email protected]>
5110
5111 * Doc/manual/images/3_5_legend.png: Added border to improve look
5112 on white background.
5113
5114 2003-07-29 Jonathan Coles <[email protected]>
5115
5116 * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
5117 descriptions for the legend toolbar.
5118
5119 * Doc/manual/images/4_2_raster_layer_properties.png: Removed
5120 cursor from dialog box.
5121
5122 2003-07-28 Jonathan Coles <[email protected]>
5123
5124 * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
5125
5126 * Doc/manual/images/2_4_session_tree.png,
5127 Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
5128 Doc/manual/images/4_2_layer_properties.png,
5129 Doc/manual/images/4_2_raster_layer_properties.png,
5130 Doc/manual/images/5_3_genclass.png,
5131 Doc/manual/images/5_classification.png,
5132 Doc/manual/images/6_projection.png,
5133 Doc/manual/images/7_1_table_view.png,
5134 Doc/manual/images/7_2_5_join.png: New screenshots.
5135
5136 2003-07-24 Jonathan Coles <[email protected]>
5137
5138 * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
5139
5140 2003-07-24 Jonathan Coles <[email protected]>
5141
5142 * Doc/manual/thuban-manual.xml: Added EPS images and wrote
5143 chapter on Layer Management.
5144
5145 * Doc/manual/Makefile: New. Makefile to generate all formats for the
5146 manual and images.
5147
5148 2003-07-24 Bernhard Herzog <[email protected]>
5149
5150 * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
5151 it annoys lintian which warns about these files not being
5152 executable. The #! isn't necessary here since if you absolutely
5153 must execute them you can always say "python <filename>".
5154
5155 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
5156 superfluous code to set brush and pen for point shapes
5157
5158 * Thuban/UI/viewport.py: Remove commented out code that wouldn't
5159 belong in viewport anyway
5160
5161 2003-07-24 Frank Koormann <[email protected]>
5162
5163 * Doc/manual/thuban-manual.xml: Added section on table management.
5164
5165 2003-07-24 Bernhard Herzog <[email protected]>
5166
5167 * test/runtests.py (main): Recognize the long "verbose" option
5168 correctly.
5169
5170 2003-07-22 Jonathan Coles <[email protected]>
5171
5172 * Doc/manual/thuban-manual.xml: Continue to write first revision
5173 of the manual.
5174
5175 * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
5176 with Begin/EndDrawing() calls to ensure we aren't doing to
5177 many updates to the dc during rendering.
5178 (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
5179 a pen and brush argument so they need to be passed to the function.
5180
5181 * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
5182 Calculates the minimum and maximum scale values. Factored out
5183 of set_view_transform so that it could be used to zoom all the
5184 way into a single point.
5185 (ViewPort.set_view_transform): Call calc_min_max_scales().
5186 (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
5187 if only a single point is selected.
5188
5189 * Doc/manual/images/1_2_legend_close.png,
5190 Doc/manual/images/1_2_legend_dock.png,
5191 Doc/manual/images/1_2_mainwindow.png,
5192 Doc/manual/images/1_2_mainwindow.ps,
5193 Doc/manual/images/1_2_mainwindow.sk,
5194 Doc/manual/images/3_2_fullextent.png,
5195 Doc/manual/images/3_2_fulllayerextent.png,
5196 Doc/manual/images/3_2_fullshapeextent.png,
5197 Doc/manual/images/3_2_pan.png,
5198 Doc/manual/images/3_2_zoomin.png,
5199 Doc/manual/images/3_2_zoomout.png,
5200 Doc/manual/images/3_3_identify.png,
5201 Doc/manual/images/3_3_label.png,
5202 Doc/manual/images/3_5_invisible.png,
5203 Doc/manual/images/3_5_movedown.png,
5204 Doc/manual/images/3_5_moveup.png,
5205 Doc/manual/images/3_5_props.png,
5206 Doc/manual/images/3_5_tobottom.png,
5207 Doc/manual/images/3_5_totop.png,
5208 Doc/manual/images/3_5_visible.png: New. Images for the documentation.
5209
5210 2003-07-18 Bernhard Herzog <[email protected]>
5211
5212 * Thuban/UI/messages.py (MAP_REPLACED): New message.
5213
5214 * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
5215 after the new map has been assigned
5216
5217 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
5218 Delegate MAP_REPLACED to the canvas too
5219 (MainWindow.prepare_new_session): Removed. Thanks to the new
5220 MAP_REPLACED message it's no longer needed
5221 (MainWindow.OpenSession, MainWindow.NewSession):
5222 prepare_new_session has been removed.
5223
5224 * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
5225 MAP_REPLACED so that we can close the dialog if a new map is set.
5226 (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
5227 (Classifier.map_replaced): Handle MAP_REPLACED by closing the
5228 dialog
5229
5230 * test/test_viewport.py (SimpleViewPortTest)
5231 (SimpleViewPortTest.test_default_size): Add doc-strings
5232 (ViewPortTest.setUp): Bind map to self.map so we can use it in
5233 tests. Subscribe to MAP_REPLACED messages too.
5234 (ViewPortTest.tearDown): No need to explicitly unsubscribe
5235 (ViewPortTest.test_set_map): New test for the SetMap method.
5236
5237 2003-07-18 Bernhard Herzog <[email protected]>
5238
5239 * test/test_viewport.py (SimpleViewPortTest.test_default_size):
5240 Move this test from ViewPortTest.setUp to this new separate test
5241 case. setUp is not the place for the actual tests.
5242 (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
5243 more of the test from setUp to the new test test_inital_settings.
5244 (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
5245 (ViewPortTest.test_proj_conv): Split test_proj_conv into
5246 test_win_to_proj and test_proj_to_win and make the tests easier to
5247 understand
5248 (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
5249 (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
5250 (ViewPortTest.test_unprojected_rect_around_point)
5251 (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
5252 Reformat to increase readability.
5253
5254 2003-07-18 Bernhard Herzog <[email protected]>
5255
5256 * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
5257
5258 2003-07-18 Bernhard Herzog <[email protected]>
5259
5260 * test/runtests.py: The test suite can now be run without an X
5261 connection. To make sure this remains true, remove the DISPLAY
5262 environment variable so that an error occurs if the wxGTK is
5263 imported accidentally
5264
5265 2003-07-18 Bernhard Herzog <[email protected]>
5266
5267 * Thuban/UI/viewport.py: Remove unused imports
5268
5269 * Thuban/UI/view.py: Remove unused imports
5270
5271 2003-07-18 Bernhard Herzog <[email protected]>
5272
5273 * test/test_export.py Remove unused imports. The OutputTransform
5274 function is now in viewport.py and is called output_transform
5275 (TestScalebar.test_output_transform)
5276 (TestScalebar.test_OutputTransform): Renamed to
5277 test_output_transform and updated to use output_transform instead
5278 of OutputTransform
5279
5280 * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
5281 renamed.
5282 (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
5283 renamed to output_transform
5284
5285 * Thuban/UI/viewport.py (OutputTransform, output_transform):
5286 Rename to output_transform
5287
5288 2003-07-18 Bernhard Herzog <[email protected]>
5289
5290 * Thuban/Model/layer.py (Layer.__init__): Rename
5291 classificationField to classificatin_column and init it here so
5292 that it can be used in SetClassificationColumn
5293 (Layer.GetClassificationColumn, Layer.GetClassificationField):
5294 Rename to GetClassificationColumn.
5295 (Layer.SetClassificationColumn, Layer.SetClassificationField):
5296 Rename to SetClassificationColumn and issue a LAYER_CHANGED
5297 message if the column changes.
5298 (Layer._classification_changed, Layer.ClassChanged): Rename to
5299 _classification_changed. Update the callers.
5300 (Layer.SetShapeStore): Further field->column renames.
5301
5302 * Thuban/Model/load.py (SessionLoader.start_classification)
5303 (SessionLoader.start_clpoint): Updates because of
5304 field->column method name changes in the Layer class
5305
5306 * Thuban/Model/save.py (SessionSaver.write_classification): Updates
5307 because of field->column method name changes in the Layer class
5308
5309 * Thuban/UI/classifier.py (Classifier.__init__)
5310 (Classifier._OnTry, Classifier._OnRevert): Updates because of
5311 field->column method name changes in the Layer class
5312
5313 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
5314 because of field->column method name changes in the Layer class
5315
5316 * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
5317 of field->column method name changes in the Layer class
5318
5319 * test/test_save.py (SaveSessionTest.testClassifiedLayer)
5320 (SaveSessionTest.testClassifiedLayer): Update because of
5321 field->column method name changes in the Layer class
5322
5323 * test/test_layer.py (SetShapeStoreTests.setUp)
5324 (SetShapeStoreTests.test_sanity): Update because of field->column
5325 method name changes in the Layer class
5326 (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
5327 (TestLayerModification.test_sanity)
5328 (TestLayerModification.test_initial_settings): remove unsued code
5329 and rename to test_sanity.
5330 (TestLayerModification.test_set_classification): New test for
5331 SetClassification and SetClassificationField.
5332
5333 2003-07-18 Bernhard Herzog <[email protected]>
5334
5335 * test/test_classgen.py (TestFixedRamp.test): Extend test to check
5336 the non-fixed values as well. The old test would have accepted a
5337 fixed ramp that only returnes the fixed properties
5338
5339 2003-07-17 Jonathan Coles <[email protected]>
5340
5341 * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
5342 shots for the manual. The XCF file is the source image and
5343 has additional layers to support changes.
5344
5345 * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
5346
5347 * Thuban/UI/classifier.py (Classifier.__BuildClassification):
5348 Return both the new class and the field name.
5349
5350 * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
5351 fit the map to the window as this changes any zoom level that
5352 the user may have set.
5353
5354 2003-07-16 Jonathan Coles <[email protected]>
5355
5356 * Thuban/Model/classgen.py (generate_singletons,
5357 generate_uniform_distribution, generate_quantiles): Remove
5358 fixes parameter, but maintain the same functionality by having
5359 the calling function pass a FixedRamp object for the ramp.
5360 (FixedRamp): New. Adapts a ramp to have fixed property values.
5361
5362 * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
5363 (Classification): Inherit from Publisher.
5364 (Classification.__init__): Remove the layer parameter.
5365 Classifications no longer need to have a parent layer.
5366 (Classification.GetField, Classification.GetFieldType,
5367 Classification.SetFieldInfo): Removed. The field name is stored
5368 in the layer, and the type can be retreived by calling
5369 Layer.GetFieldType().
5370 (Classification._set_layer, Classification.GetLayer): Removed.
5371 Classifications no longer have a parent layer.
5372
5373 * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
5374 classification.
5375 (Layer.SetShapeStore): Reset the classification first while
5376 we still have the old shape store to work with.
5377 (Layer.GetClassificationField, Layer.SetClassificationField):
5378 New. Method for getting/setting the field to classify on.
5379 (Layer.SetClassification): Simplified now that the layer
5380 simply has to hold a reference to the classification and not
5381 tell the classification who owns it.
5382 Fixes RTbug #2023.
5383
5384 * Thuban/Model/load.py (SessionLoader.start_classification):
5385 Set the field name on the layer, not the classification.
5386
5387 * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
5388 classification is modified.
5389
5390 * Thuban/Model/save.py (SessionSaver.write_classification):
5391 Get the field name and type from the layer.
5392
5393 * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
5394 parameter records to rows and add docstring. Fixes RTbug #1997.
5395
5396 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
5397 ramp when we need to fix certain values of a ramp rather than
5398 using the old fixes parameter. Fixes RTbug #2024.
5399
5400 * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
5401 parameter.
5402 (ClassTable.Reset): Add fieldType parameter and use it, rather
5403 than asking the classification.
5404 (Classifier.__init__): Remember the original class's field
5405 and ask the layer for the field type, rather than the classification.
5406 (Classifier.__SetGridTable): Retrieve the field and field type
5407 for the table because they are not in the classification.
5408 (Classifier._OnTry, Classifier._OnRevert): Set the classification
5409 field on the layer in addition to the classification itself.
5410
5411 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
5412 classification field from layer.
5413
5414 * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
5415 classification field from layer. Split up tests and remove
5416 *-imports. Fixes RTbug #1992.
5417
5418 * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
5419
5420 * test/test_classification.py
5421 (TestClassification.test_classification): Remove tests for methods
5422 that no longer exist.
5423
5424 * test/test_layer.py (SetShapeStoreTests.setUp): Classification
5425 __init__ no longer has a field parameter, use SetClassificationField.
5426 (SetShapeStoreTests.test_sanity): Use layer object to get class
5427 field info.
5428
5429 * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
5430 SetClassificationField on layer to set class field info.
5431
5432 * test/test_viewport.py: Renamed from test/test_view.py.
5433
5434 2003-07-16 Jan-Oliver Wagner <[email protected]>
5435
5436 * Doc/manual/thuban-manual.xml: Added authors and an initial
5437 coarse structure.
5438
5439 2003-07-15 Bernhard Herzog <[email protected]>
5440
5441 * test/support.py (FloatComparisonMixin): This is a mix-in class
5442 and therefore should not be derived from any other class.
5443
5444 * test/test_range.py (RangeTest): FloatComparisonMixin is a
5445 mix-in, so derive from TestCase as well.
5446
5447 2003-07-15 Bernhard Herzog <[email protected]>
5448
5449 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
5450 draw_func handling a bit to remove one layer of indirection. This
5451 makes the renderer about 10% faster in the non-classifying case
5452 and the code a bit cleaner
5453 (MapRenderer.draw_point_shape): Add the pen and brush parameters
5454 and set them in the dc. Now the draw_point_shape method and
5455 wxproj's draw_polygon_shape function have basically the same
5456 signature so that both can be directly used as draw_func
5457
5458 2003-07-15 Bernhard Herzog <[email protected]>
5459
5460 * Thuban/Model/save.py (SessionSaver.write_classification): Encode
5461 string values (in addition to the labels) as UTF 8
5462
5463 * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
5464 values if the field type is string
5465
5466 * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
5467 saving a session with non-ascii string classification values.
5468
5469 * test/test_load.py (TestClassification.file_contents)
5470 (TestClassification.test): Check for non-ascii values in string
5471 classifications
5472
5473 2003-07-14 Jonathan Coles <[email protected]>
5474
5475 * test/test_view.py: New. Tests for ViewPort.
5476
5477 2003-07-14 Frank Koormann <[email protected]>
5478
5479 * Thuban/Model/load.py (SessionLoader.start_map): Encode map
5480 title to latin1. Fixes https://intevation.de/rt/webrt?serial_num=2013
5481
5482 * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
5483 unicode strings from session file: session title, map title and
5484 projection name.
5485
5486 2003-07-10 Jonathan Coles <[email protected]>
5487
5488 * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
5489 drag_stop, not drag_move when the mouse is released.
5490
5491 2003-07-10 Jonathan Coles <[email protected]>
5492
5493 The most important part of this is the seperation of view.py into
5494 two pieces. viewport.py now has a class called ViewPort which
5495 contains all the non-wx parts of view.py and can therefore be
5496 tested. view.py contains only the wx-specific parts and is fairly
5497 simple.
5498
5499 * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
5500 RTTbug #1992.
5501 * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
5502 RTTbug #1992.
5503
5504 * Thuban/Model/classgen.py (generate_singletons,
5505 generate_uniform_distribution, generate_quantiles):
5506 Added 'fixes' parameter so that property attributes can
5507 be held constant over the generated classification groups.
5508 (CustomRamp.GetProperties): Remove unused variables.
5509
5510 * Thuban/Model/map.py (Map.SetProjection): Send the old
5511 projection as an argument to listeners of the MAP_PROJECTION_CHANGED
5512 event.
5513
5514 * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
5515 parameter which is a list of records that restricts which
5516 records are saved. Fixes RTbug #1997.
5517
5518 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
5519 Port exception dialog from GREAT-ER. Fixes RTbug #1993.
5520
5521 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
5522 to allow the user to fix line color/width on generated groups.
5523 (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
5524 functions to optionally fix group properties.
5525
5526 * Thuban/UI/main.py (main): Set exception hook to the
5527 ShowExceptionDialog. Fixes RTbug #1993.
5528
5529 * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
5530 the table window when it is selectd to be shown.
5531
5532 * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
5533 Export Selection button and move the export buttons underneath
5534 the table.
5535 (QueryTableFrame.UpdateStatusText): Added event argument so
5536 that it can respond to grid selection events. The status text
5537 is now updated even when the table is not associated with a
5538 layer as was previously assumed.
5539 (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
5540 UpdateStatusText responds to these events.
5541 (QueryTableFrame.OnSaveAs): Renamed to doExport.
5542 (QueryTableFrame.doExport): Helper function that saves the
5543 entire table, or selected rows, to a file.
5544 (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
5545 Respond to export button events and call doExport.
5546
5547 * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
5548 the function doesn't return NULL without first setting a Python
5549 Error.
5550
5551 * test/runtests.py (main): Only print "Unknown option" for
5552 unsupported options.
5553
5554 * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
5555 optional epsilon argument to specify floating point accuracy.
5556 (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
5557 for each item test.
5558
5559 * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
5560 tests for saving selected records.
5561
5562 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
5563 tests for saving selected records.
5564
5565 * test/test_map.py (TestMapWithContents.test_set_projection):
5566 MAP_PROJECTION_CHANGED events send the old projection.
5567
5568 * test/test_session.py
5569 (TestSessionWithContent.test_forward_map_projection):
5570 MAP_PROJECTION_CHANGED events send the old projection.
5571
5572 * test/test_table.py (TableTest): Update tests to use non-deprecated
5573 functions.
5574
5575 2003-07-08 Bernhard Herzog <[email protected]>
5576
5577 * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
5578 constants in the column objects are the standard ones defined in
5579 the table module.
5580
5581 * test/test_transientdb.py
5582 (TestTransientTable.test_transienttable_to_dbf): New. Test whether
5583 exporting transient tables as DBF works. This should catch the bug
5584 just fixed in TransientTableBase.Width.
5585
5586 2003-07-08 Bernhard Herzog <[email protected]>
5587
5588 * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
5589 interpolated colors correctly.
5590
5591 * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
5592 New. Test case for the fix in classgen.py
5593
5594 2003-07-08 Bernhard Herzog <[email protected]>
5595
5596 * test/runtests.py (main): Make the default output less verbose
5597 and add a verbosity option (-v) to get the old output
5598
5599 2003-07-08 Bernhard Herzog <[email protected]>
5600
5601 * Resources/XML/thuban-0.9.dtd: New. This will become the DTD for
5602 0.9.
5603
5604 * Thuban/Model/transientdb.py (TransientJoinedTable.JoinType):
5605 New. Return the join type
5606
5607 * Thuban/Model/save.py (SessionSaver.write_session): Use new 0.9
5608 DTD
5609 (SessionSaver.write_data_containers): Save the join type for
5610 joined tables
5611
5612 * Thuban/Model/load.py (SessionLoader.__init__): Add the new 0.9
5613 namespace
5614 (SessionLoader.start_jointable): Handle the jointype attribute
5615
5616 * test/test_load_0_8.py: New. Effectively a copy of test_load.py
5617 as of Thuban 0.8. These are now tests to determine whether Thuban
5618 can still read files generated by Thuban 0.8
5619
5620 * test/test_load.py (LoadSessionTest.dtd)
5621 (TestSingleLayer.file_contents)
5622 (TestLayerVisibility.file_contents, TestLabels.file_contents)
5623 (TestLayerProjection.file_contents)
5624 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
5625 (TestJoinedTable.file_contents)
5626 (TestLoadError.file_contents): Update for new DTD
5627 (TestJoinedTable.file_contents, TestJoinedTable.setUp): Add test
5628 for new join type attribute
5629
5630 * test/test_save.py (SaveSessionTest.dtd)
5631 (SaveSessionTest.testEmptySession)
5632 (SaveSessionTest.testSingleLayer)
5633 (SaveSessionTest.testLayerProjection)
5634 (SaveSessionTest.testRasterLayer)
5635 (SaveSessionTest.testClassifiedLayer)
5636 (SaveSessionTest.test_dbf_table)
5637 (SaveSessionTest.test_joined_table): Update for new DTD
5638 (SaveSessionTest.test_joined_table): Add test for new join type
5639 attribute
5640
5641 2003-07-04 Bernhard Herzog <[email protected]>
5642
5643 * Thuban/Model/table.py (_find_dbf_column_names): New. Helper
5644 function for table_to_dbf
5645 (table_to_dbf): Deal with names longer than the 10 character limit
5646
5647 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
5648 doc-string
5649 (TestTableToDBF.test_table_to_dbf_long_col_names): New test for
5650 long column names
5651
5652 2003-07-03 Bernhard Herzog <[email protected]>
5653
5654 * Doc/manual/thuban-manual.xml: Fix the CVS Revision Tag syntax
5655
5656 2003-07-03 Bernhard Herzog <[email protected]>
5657
5658 * Doc/manual/thuban-manual.xml, Doc/manual/README: New. Skeleton
5659 for the Thuban manual and README with some basic information about
5660 the manual
5661
5662 2003-07-03 Bernhard Herzog <[email protected]>
5663
5664 * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
5665 Update doc-string
5666 (TransientJoinedTable.create): Do not modify the column objects of
5667 the input tables in place and copy all columns of the input tables
5668 into the joined table after all.
5669
5670 * test/test_transientdb.py
5671 (TestTransientTable.test_transient_joined_table_same_column_name):
5672 Update to reflect the new behavior
5673 (TestTransientTable.test_transient_joined_table_with_equal_column_names):
5674 Update to reflect the new behavior
5675 (TestTransientTable.test_transient_joined_table_name_collisions_dont_modify_in_place):
5676 New test case for a bug which modified the column objects in place
5677
5678 2003-07-02 Jonathan Coles <[email protected]>
5679
5680 * Thuban/Model/classgen.py (generate_singletons,
5681 generate_uniform_distribution, generate_quantiles,
5682 GenQuantiles0): Make sure maxValue isn't less than
5683 one, otherwise we could divide by zero.
5684
5685 * test/test_classgen.py (ClassGenTest.doClassRangeTest,
5686 ClassGenTest.doClassSingleTest): Call doBoundsTest to
5687 check the end classification groups against the
5688 proper property values.
5689 (ClassGenTest.doBoundsTest): New. Checks the first and
5690 last classification groups to make sure their properties
5691 are the correct upper and lower bounds for a color ramp.
5692
5693 2003-07-02 Jonathan Coles <[email protected]>
5694
5695 * Thuban/Model/classgen.py (generate_singletons,
5696 generate_uniform_distribution, generate_quantiles,
5697 GenQuantiles0): The denominator was one to high when
5698 calculating the index for the ramp causing the index
5699 to never to reach one.
5700
5701 2003-07-02 Jonathan Coles <[email protected]>
5702
5703 Changed the singature of ClassGroupRange.__init__ and
5704 ClassGroupRange.SetRange() so that the min/max values are
5705 passed as a tuple. This makes a better calling scheme for
5706 when a Range object is passed instead.
5707
5708 * Thuban/Model/classgen.py: Fixed parameters to
5709 ClassGroupRange constructor.
5710
5711 * Thuban/Model/classification.py (ClassGroupRange.__init__):
5712 Consolidate the min/max parameters into a single _range which
5713 can either be a tuple or a Range object.
5714 (ClassGroupRange.SetRange): Consolidate the min/max parameters
5715 into a single _range which can either be a tuple or a Range object.
5716
5717 * Thuban/Model/load.py (SessionLoader.start_clrange): Fix
5718 call to ClassGroupRange constructor to use a tuple.
5719
5720 * Thuban/Model/layer.py (Layer.SetClassification): Switch
5721 the classification instance variable to the new class
5722 before calling _set_layer otherwise subscribers to a
5723 LAYER_CHANGED event will not see any difference.
5724
5725 * test/test_classification.py: Fix tests of ClassGroupRange
5726 so that they use the new signature.
5727
5728 * test/test_load.py: Fix use of ClassGroupRange so that it
5729 uses the new signature.
5730
5731 * test/test_load_0_2.py: Fix use of ClassGroupRange so that it
5732 uses the new signature.
5733
5734 * test/test_save.py: Fix use of ClassGroupRange so that it
5735 uses the new signature.
5736
5737
5738 2003-07-01 Jonathan Coles <[email protected]>
5739
5740 * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.
5741 Import used objects/class from color.
5742 (generate_singletons): We don't
5743 need the numGroups parameter anymore because we are using
5744 the new ramps with GetProperties().
5745 (generate_uniform_distribution): Use new ramp method
5746 GetProperties().
5747 (generate_quantiles, GenQuantiles0): Use new ramp method
5748 GetProperties().
5749 (CustomRamp.SetNumGroups): Removed. The ramps now map
5750 a value from 0 to 1 to class properties so the number
5751 of groups is not needed ahead of time.
5752 (CustomRamp.next): Removed. CustomRamp does not support
5753 interation anymore.
5754 (CustomRamp.GetProperties): Returns a ClassGroupProperties
5755 object based on the index value from 0 to 1 that is
5756 passed to it.
5757 (GreyRamp, RedRamp, GreenRamp, BlueRamp, GreenToRedRamp):
5758 Made into instances of Monochromatic class instread of
5759 deriving from it.
5760 (HotToCold.SetNumGroups): Removed. See CustomRamp.
5761 (HotToCold.next): Removed. See CustomRamp.
5762
5763 * Thuban/Model/classification.py: Fixes RTbug #1973, 1971.
5764 (Classification.SetField, Classification.SetFieldType):
5765 Replaced with SetFieldInfo.
5766 (Classification.SetFieldInfo): New. Does a better job of
5767 what SetField and SetFieldType used to do by combining
5768 their function since they should really always be done
5769 at the same time.
5770 (Classification.SetLayer): Renamed to _set_layer.
5771 (Classification._set_layer): Should only be called from
5772 Layer's SetClassification. This does not cause a recursive
5773 call as SetLayer did because we know that Layer knows about
5774 the classification.
5775
5776 * Thuban/Model/color.py: Fixes RTbug #1971.
5777 (_Transparent): Renamed from Transparent so it doesn't
5778 conflict with the module variable.
5779 (Transparent, Black): Renamed from Color.Transparent,
5780 Color.Black so they are not class variables.
5781
5782 * Thuban/Model/layer.py: Fixes RTbug #1971, 1973.
5783 (Layer.Destroy): We don't need to call SetClassification
5784 anymore to clear out the back reference in the classifcation
5785 to the layer. It's better to set it to None using _set_layer,
5786 and we won't be creating another clas object too.
5787 (Layer.SetClassification): Classification._set_layer is not
5788 recursive so remove all the locking variables. Also clean
5789 up the code so that it remains unchanged if something fails.
5790
5791 * Thuban/Model/load.py: Fixes RTbug #1971.
5792 (SessionLoader.start_classification): Call
5793 Classification.SetFieldInfo().
5794
5795 * Thuban/Model/save.py: Removed import of Color which wasn't
5796 being used.
5797
5798 * Thuban/UI/classgen.py: Fixes RTbug #1972.
5799 (ClassGenDialog.__init__): Color ramps are now instances
5800 already so we don't need to create any new objects.
5801 (ClassGenDialog.OnOK): Check for numGroups is no longer
5802 necessary because we never use it.
5803
5804 * Thuban/UI/classifier.py: Fixes RTbug #1971.
5805 (Classifier.__BuildClassification, Classifier.__SetGridTable):
5806 Call Classification.SetFieldInfo() instead of SetFieldType.
5807
5808 * Thuban/UI/renderer.py: Fixes RTbug #1971.
5809
5810 * Thuban/UI/view.py: Fixes RTbug #1974, 1971.
5811 (MapCanvas.__init__): Subscribe to the idle time event. Set
5812 background color to white.
5813 (MapCanvas.OnPaint): Set a flag indicating that we should
5814 render the map during idle time. If we already have a bitmap
5815 just draw it now.
5816 (MapCanvas.OnIdle): New. Render the map only during idle time.
5817 This also fixes a problem with the busy cursor under gtk.
5818
5819 * test/test_classgen.py (ClassGenTest.test_generate_singletons):
5820 Fix calls to generate_singletons because the signature changed.
5821
5822 * test/test_classification.py: Fix color references and
5823 change calls to Classification.[SetField|SetFieldType] to
5824 SetFieldInfo.
5825
5826 * test/test_load.py: Fix color references.
5827
5828 * test/test_load_0_2.py: Fix color references.
5829
5830 * test/test_save.py (SaveSessionTest.testClassifiedLayer):
5831 Change calls to Classification.[SetField|SetFieldType] to
5832 SetFieldInfo.
5833
5834 2003-07-01 Frank Koormann <[email protected]>
5835
5836 MERGE from the greater-ms3 branch.
5837
5838 * test/test_transientdb.py
5839 (TestTransientTable.test_transient_joined_table_with_equal_column_names):
5840 New. Test join of two tables with partly equal column names.
5841
5842 * Thuban/Model/transientdb.py (TransientJoinedTable.create):
5843 If duplicates in left and right tables column names are found,
5844 append '_' (underscores) to the name until it is unique.
5845 Create always new internal names for the resulting table and reference
5846 columns in the join statement with <table>.<column>
5847
5848 2003-07-01 Bernhard Herzog <[email protected]>
5849
5850 * test/test_transientdb.py
5851 (TestTransientTable.test_transient_joined_table_same_column_name):
5852 New. Test whether joining on columns with the same names in both
5853 tables works.
5854
5855 * Thuban/Model/transientdb.py (TransientJoinedTable.create): Make
5856 sure to use the right internal names even when joining on field
5857 with the same names in both tables. Also, detect duplicate names
5858 in the joined table correctly.
5859
5860 2003-07-01 Frank Koormann <[email protected]>
5861
5862 * Thuban/UI/renderer.py (ExportRenderer.render_legend):
5863 Reverse List of layers to render in same order as in desktop legend.
5864
5865 2003-06-30 Jonathan Coles <[email protected]>
5866
5867 * Thuban/version.py (make_tuple): Takes a version string
5868 and splits it into a tuple of at most three integers.
5869 Used make_tuple() to make tuple versions of the version
5870 numbers.
5871
5872 * Thuban/UI/about.py: Add Thuban email addresses.
5873
5874 2003-06-30 Jonathan Coles <[email protected]>
5875
5876 * Thuban/version.py: SQLite/PySQLite version dependencies
5877 were too high.
5878
5879 2003-06-30 Jonathan Coles <[email protected]>
5880
5881 * Thuban/version.py: Update version to 0.8.1
5882
5883 * MANIFEST.in: Added Projections so that default.proj is
5884 included.
5885
5886 2003-06-26 Jonathan Coles <[email protected]>
5887
5888 New About box with lots more information including library
5889 versions and credits. More/better version checking before
5890 Thuban starts.
5891
5892 * Thuban/UI/about.py: New. New About box that displays
5893 library version information and credits.
5894
5895 * Thuban/version.py: Added new 'versions' dictionary which
5896 contains the verions of various libraries which are checked
5897 when the module loads.
5898 (verify_versions): Check all version numbers and returns
5899 a list of errors.
5900
5901 * Thuban/UI/classifier.py (Classifier.__EnableButtons):
5902 Reset the status of the buttons as the situation warrants,
5903 but in a better more reliable way by not relying on the
5904 current status to determine what needs to change.
5905
5906 * Thuban/UI/main.py (wxCHECK_VERSION): Removed. Not needed.
5907 (verify_versions): Remove most of the code since it is
5908 now in Thuban.version.verify_versions.o
5909
5910 * Thuban/UI/mainwindow.py (MainWindow.About): Call new
5911 About box in Thuban.UI.about.
5912
5913 * extensions/thuban/gdalwarp.cpp (get_gdal_version): New.
5914 Returns the version of gdal library being used as a string.
5915
5916 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
5917 Removed.
5918 (get_proj_version): Return the version of PROJ that the file
5919 was compiled with.
5920 (get_gtk_version): Return th version of GTK that the file
5921 was compiled with.
5922
5923 2003-06-25 Jonathan Coles <[email protected]>
5924
5925 * Thuban/UI/classifier.py (Classifier.EditSymbol): The parent
5926 of the SelectPropertiesDialog should be self so the window
5927 appears on top.
5928 (ClassGroupPropertiesCtrl.DoEdit): The parent
5929 of the SelectPropertiesDialog should be self so the window
5930 appears on top.
5931
5932 * Thuban/UI/resource.py: Cleaned up how we determine file
5933 extensions.
5934 (GetImageResource): Return an wxImage from our Resources.
5935
5936 2003-06-24 Jonathan Coles <[email protected]>
5937
5938 * Thuban/UI/renderer.py (ExportRenderer.render_legend):
5939 Check that a layer has a classification before trying
5940 to get it. Raster layers don't have classifications.
5941
5942 2003-06-23 Jonathan Coles <[email protected]>
5943
5944 * setup.py: Add Resources/XML to resource list.
5945
5946 2003-06-23 Jonathan Coles <[email protected]>
5947
5948 * setup.cfg: Fix copyright dates
5949
5950 2003-06-23 Jonathan Coles <[email protected]>
5951
5952 * MANIFEST.in: Update with Resources/XML
5953
5954 * setup.py: Don't include Locale resources yet as we don't
5955 have any and it causes problems building the distribution
5956 for Windows. Update version to 0.8.0.
5957
5958 * Doc/thuban.dtd: Removed since it is now in Resources/XML.
5959
5960 * Thuban/UI/mainwindow.py: Add blank line at the end because
5961 file was not being read correctly building the Windows
5962 distribution.
5963
5964 2003-06-23 Jonathan Coles <[email protected]>
5965
5966 * Thuban/UI/mainwindow.py (MainWindow.About): Fix text.
5967
5968 * Thuban/version.py: Temporarily update longversion for
5969 the 0.8 release so that it doesn't have the cvs revision.
5970
5971 2003-06-23 Jonathan Coles <[email protected]>
5972
5973 * Thuban/UI/common.py (ThubanBeginBusyCursor): Call wxSafeYield
5974 to make sure that we don't create reentrant possibilities with
5975 wxYield.
5976
5977 * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxBeginBusyCursor()
5978 directly to avoid the wxSafeYield() call which generates an
5979 OnPaint event causing infinite recursion. Don't try to catch
5980 exception anymore. This was for before there were limits on map
5981 scaling.
5982
5983 2003-06-23 Bernhard Herzog <[email protected]>
5984
5985 Bug fix for RT #1961:
5986
5987 * Thuban/Model/load.py (SessionLoader.start_derivedshapesource):
5988 Register DerivedShapestores with the session
5989
5990 * Thuban/Model/session.py (Session.Tables): Make sure each table
5991 is only listed once.
5992
5993 * test/test_load.py (TestJoinedTable.test): Add check_format call.
5994 Update file contents to match the one written out.
5995
5996 2003-06-20 Bernhard Herzog <[email protected]>
5997
5998 * test/xmlsupport.py (SaxEventLister.startElementNS)
5999 (SaxEventLister.endElementNS): Do not include the qname. Python
6000 2.2.1 and 2.2.2 and 2.2.3 differ in this regard. In 2.2.1 qname it
6001 is (presumably incorrectly) None, whereas it's a string with the
6002 element name in the later versions.
6003
6004 * test/test_xmlsupport.py (TestEventList.test_even_list_simple)
6005 (TestEventList.test_even_list_namespace): Update tests to reflect
6006 the new behaviour
6007 (TestEventList.test_even_list_id_normalization): Fix doc-string
6008
6009 2003-06-20 Jonathan Coles <[email protected]>
6010
6011 * Thuban/Model/layer.py (BaseLayer.HasShapes): New. Overridden
6012 by deriving classes to determine if that layer supports shapes.
6013 (Layer): Override HasShapes and return true.
6014
6015 * Thuban/UI/classgen.py: Use Thuban[Begin|End]BusyCursor()
6016 instead of a direct call to wx[Begin|End]CusyCursor().
6017 (GenUniquePanel._OnRetrieve): Set busy cursor while retrieving
6018 table data.
6019
6020 * Thuban/UI/common.py (ThubanBeginBusyCursor, ThubanEndBusyCursor):
6021 New. Wrappers around the wxWindows functions that allow us to
6022 make additional calls such as wxYield which gives the native
6023 system a chance to update the cursor correctly.
6024
6025 * Thuban/UI/tableview.py: Use Thuban[Begin|End]BusyCursor()
6026 instead of a direct call to wx[Begin|End]CusyCursor().
6027
6028 * Thuban/UI/view.py: Use Thuban[Begin|End]BusyCursor()
6029 instead of a direct call to wx[Begin|End]CusyCursor().
6030 (MapCanvas.find_shape_at): Check if the current search layer
6031 support shapes, otherwise go on to the next layer.
6032
6033 * test/test_layer.py: Add tests in each type of layer for
6034 HasClassification() and HasShapes()
6035
6036 2003-06-20 Jonathan Coles <[email protected]>
6037
6038 * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after
6039 turning on the busy cursor to allow the system to change the
6040 cursor before we begin painting. This fixes a problem that
6041 was occuring only under GTK. Fixes RTbug #1840.
6042
6043 2003-06-20 Bernhard Herzog <[email protected]>
6044
6045 * Resources/XML/thuban-0.8.dtd: New DTD for the new file format
6046 version.
6047
6048 * Thuban/Model/save.py (sort_data_stores): New. Make topological
6049 sort of the data sources so they can be written with sources that
6050 data sources that depend on other data sources come after the
6051 sources they depend on.
6052 (SessionSaver.__init__): Add idmap instance variable to map from
6053 objects to the ids used in the file.
6054 (SessionSaver.get_id, SessionSaver.define_id)
6055 (SessionSaver.has_id): New. Methods to manage the idmap
6056 (SessionSaver.write): Use thuban-0.8.dtd
6057 (SessionSaver.write_session): Add a namespace on the session and
6058 write out the data sources before the maps.
6059 (SessionSaver.write_data_containers): New. Write the data
6060 containers.
6061 (SessionSaver.write_layer): Layer elements now refer to a
6062 shapestore and don't contain filenames anymore.
6063
6064 * Thuban/Model/load.py (LoadError): Exception class to raise when
6065 errors in the files are discovered
6066 (SessionLoader.__init__): Define dispatchers for elements with a
6067 thuban-0.8 namespace too.
6068 (SessionLoader.check_attrs): New helper method to check and
6069 convert attributes
6070 (AttrDesc): New. Helper class for SessionLoader.check_attrs
6071 (SessionLoader.start_fileshapesource)
6072 (SessionLoader.start_derivedshapesource)
6073 (SessionLoader.start_filetable, SessionLoader.start_jointable):
6074 Handlers for the new elements in the new fileformat
6075 (SessionLoader.start_layer): Handle the shapestore attribute in
6076 addition to filename.
6077 (SessionLoader.start_table, SessionLoader.end_table): Removed.
6078 They were never used in the old formats and aren't needed for the
6079 new.
6080
6081 * Thuban/Model/session.py (Session.DataContainers): New method to
6082 return all "data containers", i.e. shapestores and tables
6083
6084 * test/xmlsupport.py (SaxEventLister.__init__)
6085 (SaxEventLister.startElementNS, sax_eventlist): Add support to
6086 normalize IDs.
6087
6088 * test/test_xmlsupport.py
6089 (TestEventList.test_even_list_id_normalization): New test case for
6090 id normalization
6091
6092 * test/test_load.py (LoadSessionTest.check_format): Use ID
6093 normalization
6094 (LoadSessionTest.thubanids, LoadSessionTest.thubanidrefs): New
6095 class atrributes used for ID normalization
6096 (TestSingleLayer, TestLayerVisibility, TestLabels.test)
6097 (TestLayerProjection.test, TestRasterLayer.test): Adapt to new
6098 file format
6099 (TestJoinedTable): New test for loading sessions with joined
6100 tables.
6101 (TestLoadError): New. Test whether missing required attributes
6102 cause a LoadError.
6103
6104 * test/test_save.py (SaveSessionTest.thubanids)
6105 (SaveSessionTest.thubanidrefs): New class attributes for ID
6106 normalization in .thuban files.
6107 (SaveSessionTest.compare_xml): Use id-normalization.
6108 (SaveSessionTest.testEmptySession)
6109 (SaveSessionTest.testLayerProjection)
6110 (SaveSessionTest.testRasterLayer)
6111 (SaveSessionTest.testClassifiedLayer): Adapt to new file format.
6112 (SaveSessionTest.testLayerProjection): The filename used was the
6113 same as for testSingleLayer. Use a different one.
6114 (SaveSessionTest.test_dbf_table)
6115 (SaveSessionTest.test_joined_table): New test cases for saving the
6116 new data sources structures.
6117 (TestStoreSort, MockDataStore): Classes to test the sorting of the
6118 data stores for writing.
6119
6120 * test/runtests.py: Add CVS keywords
6121
6122 2003-06-20 Jonathan Coles <[email protected]>
6123
6124 * test/test_session.py
6125 (UnreferencedTablesTests.test_unreferenced_tables_with_joins):
6126 Use the cultural_landmark-point.dbf file for the store so that
6127 the table rows and shape count match.
6128
6129 2003-06-20 Jonathan Coles <[email protected]>
6130
6131 * Thuban/Model/data.py (DerivedShapeStore.__init__): Raise
6132 an exception if the number of shapes is different from the
6133 number of rows in the table. Address RTbug #1933.
6134
6135 * test/test_layer.py (TestLayer.test_derived_store): Add
6136 a test for the new exception in DerivedShapeStore.__init__.
6137
6138 * test/support.py (FloatTestCase): Removed since there is
6139 already FloatComparisonMixin. Fixes RTbug #1954.
6140 (FloatComparisonMixin.assertFloatEqual): Include test for
6141 infinity that was part of FloatTestCase.
6142
6143 * test/test_range.py (RangeTest): Inherit from
6144 support.FloatComparisonMixin now that we don't have
6145 support.FloatTestCase.
6146
6147 2003-06-20 Bernhard Herzog <[email protected]>
6148
6149 * test/test_save.py (SaxEventLister, sax_eventlist): Removed. Use
6150 the implementation in xmlsupport instead.
6151 (SaveSessionTest.compare_xml): sax_eventlist is now in xmlsupport
6152
6153 * test/test_proj.py: Import sax_eventlist from xmlsupport instead
6154 of test_save
6155
6156 2003-06-20 Bernhard Herzog <[email protected]>
6157
6158 * test/test_load.py (LoadSessionTest.check_format): New helper
6159 method to make sure the test files we load might have been written
6160 by the current thuban version.
6161 (ClassificationTest.TestLayers, TestSingleLayer.test)
6162 (TestLayerVisibility.test, TestClassification.test)
6163 (TestLabels.test, TestLayerProjection.test, TestRasterLayer.test):
6164 Add check_format() calls and fix the thuban data to match the data
6165 that would be written by saving the session loaded from it.
6166
6167 * test/xmlsupport.py (SaxEventLister, sax_eventlist): Copies of
6168 the same class and function in test_save.
6169
6170 * test/test_xmlsupport.py (TestEventList): New. test cases for
6171 sax_eventlist
6172
6173 2003-06-20 Bernhard Herzog <[email protected]>
6174
6175 * Resources/XML/thuban.dtd: Add comment about which versions of
6176 Thuban are covered by this DTD
6177 (map): Fix content model for layers and raster layers. There can
6178 be any number or layers and raster layers in any order.
6179
6180 2003-06-20 Jonathan Coles <[email protected]>
6181
6182 This is mainly about fixing RTbug #1949.
6183
6184 * Thuban/Model/classification.py: Remove "from __future__"
6185 import statement since python 2.2 is the earliest supported
6186 version.
6187
6188 * Thuban/Model/proj.py (Projection.GetProjectedUnits): New.
6189 Currently returns PROJ_UNITS_METERS or PROJ_UNITS_DEGREES
6190 depending on the units this projection *forwards* into.
6191
6192 * Thuban/Model/save.py (SessionSaver.write_classification):
6193 Remove unnecessary use of lambdas and nested functions.
6194
6195 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Do scale
6196 adjustment here if the map projection uses degrees.
6197
6198 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Remove
6199 scale adjust code since it is now done before calling
6200 this method. Don't do anything if the map projection
6201 is None.
6202
6203 2003-06-19 Bernhard Herzog <[email protected]>
6204
6205 Move version specific load tests to their own file.
6206
6207 * test/test_load.py: Expand the doc-string to explain a bit how to
6208 handle file format changes.
6209 (TestClassification.test): Update the docstring as this test is
6210 not about Thuban 0.2 anymore.
6211
6212 * test/test_load_0_2.py: New file with the load tests for thuban
6213 files created with Thuban 0.2 and earlier.
6214
6215 2003-06-19 Bernhard Herzog <[email protected]>
6216
6217 Add XML validation to some of the tests. Validation will only be
6218 done if pyRXP is installed (http://reportlab.com/xml/pyrxp.html).
6219 To make the DTD available to the test cases it's moved into
6220 Resources/XML
6221
6222 * Resources/XML/thuban.dtd: New. This is now the real Thuban DTD
6223 for versions up to and including 0.2. Two slight changes: added an
6224 encoding specification and fixed the comment which refered to
6225 GRASS, not Thuban
6226
6227 * test/xmlsupport.py: New support module for tests involving XML.
6228 Currently there's a mix-in class for XML validation.
6229
6230 * test/test_xmlsupport.py: New. Tests for the xmlsupport module
6231
6232 * test/test_save.py (SaveSessionTest): Derive from ValidationTest
6233 so that we can validate the
6234 (SaveSessionTest.testEmptySession)
6235 (SaveSessionTest.testSingleLayer)
6236 (SaveSessionTest.testSingleLayer)
6237 (SaveSessionTest.testLayerProjection)
6238 (SaveSessionTest.testRasterLayer)
6239 (SaveSessionTest.testClassifiedLayer): Validate the generated XML
6240
6241 * test/runtests.py (main): Call print_additional_summary instead
6242 of print_garbage_information
6243
6244 * test/support.py (resource_dir): New function to return the
6245 "Resource" subdirectory
6246 (print_additional_summary): New function to combine several
6247 summary functions
6248 (run_tests): Use print_additional_summary instead of calling
6249 print_garbage_information directly
6250
6251 2003-06-19 Bernhard Herzog <[email protected]>
6252
6253 * Doc/thuban.dtd (classification): Correct the content model of
6254 the classification element.
6255 (projection): Add the "name" attribute
6256
6257 2003-06-19 Frank Koormann <[email protected]>
6258
6259 MERGE from the greater-ms3 branch.
6260
6261 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Apply conversion to
6262 scale if projection is latlong to get better estimate.
6263
6264 Fix problem of hidden properties dialog under windows after double
6265 click on layer tree:
6266 The tree control always gets an Expanded / Collapsed event after
6267 the ItemActivated on double click, which raises the main window again.
6268 We add a second ItemActivated event to the queue, which simply
6269 raises the already displayed window.
6270
6271 * Thuban/UI/legend.py (LegendTree.__init__): Instance variable
6272 raiseProperties initialized to prevent endless loops
6273 (LegendTree._OnItemActivated): Depending on self.raiseProperties
6274 simply raise the properties or open the dialog and issue a second
6275 event.
6276
6277 2003-06-18 Jonathan Coles <[email protected]>
6278
6279 * setup.py: Fix a few problems that occured under Windows.
6280
6281 2003-06-18 Jonathan Coles <[email protected]>
6282
6283 When Thuban loaded the map was redrawn twice because the
6284 legend was being opened after the mainwindow was created
6285 and not during its creation. This meant the map was drawn
6286 initially and then had to be redrawn when the legend
6287 caused the display to change. Now the legend is opened
6288 in the mainwindow constructor which resolves this issue.
6289
6290 Also, although we were checking for the existence of
6291 gdal and gdalwarp modules, the gdalwarp extension was
6292 still being compiled (which may fail if the system doesn't
6293 have gdal installed). the build_ext command to setup.py
6294 now accepts the flags --with-gdal and --without-gdal.
6295 If --without-gdal is specified setup.py will try to
6296 use the gdal parameters specified by gdal-config. Under
6297 windows, those parameters have to be set in setup.py
6298 as with proj4 an wxWindows.
6299
6300 * setup.py: Use a list instead of seperate variables for
6301 extension parameters so we can create a generic function
6302 that runs an appropriate *-config script.
6303 (run_cs_script): Renamed from run_wx_script and modified
6304 to accept a second argument which is a list of lists to
6305 be filled in by the values returned from running the command.
6306 (thuban_build_ext): New. Extends the build_ext command and
6307 provides the options --with-gdal/--without-gdal which then
6308 optionally includes the gdalwarp extension.
6309
6310 * Thuban/Model/resource.py: First check if we can import
6311 the gdalwarp Thuban extension before checking for gdal.
6312 Also added some comments.
6313
6314 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Check if
6315 the map is None which may be the case if none has been loaded
6316 yet.
6317
6318 * Thuban/UI/main.py (main): Remove call to ShowLegend.
6319
6320 * Thuban/UI/mainwindow.py (MainWindow.__init__): Call ShowLegend().
6321
6322 * Thuban/UI/renderer.py: Check for gdal support before importing
6323 gdalwarp.
6324 (MapRenderer.render_map): Only try to optimize if we have gdal
6325 support otherwise nothing will get drawn.
6326
6327 * Thuban/UI/view.py (MapCanvas.FitMapToWindow): This may be called
6328 during startup before a map has been created. Check if map is None
6329 before using it and do nothing if it is.
6330
6331 2003-06-17 Jonathan Coles <[email protected]>
6332
6333 Fix the problem with raster layers under Windows that caused
6334 Thuban to crash. The view should respond to layer projection
6335 changed events to update the display. Changes to a projection
6336 should not cause the map to be set to full extent.
6337
6338 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
6339 current_map_proj to remember the current map projection so that
6340 when the projection changes we know what the previous projection
6341 was.
6342 (MapCanvas.SetMap): Unsubscribe and subscribe to
6343 LAYER_PROJECTION_CHANGED events.
6344 (MapCanvas.projection_changed): Split into two methods that respond
6345 to map and layer projection changes.
6346 (MapCanvas.map_projection_changed): New. Takes the current view and
6347 projects it using the new projection. This does not cause the
6348 map to be redrawn at full extent.
6349 (MapCanvas.layer_projection_changed): New. Cause a redraw which
6350 will draw each layer in its new projection.
6351
6352 * extensions/thuban/bmpdataset.cpp (BMPDataset::Open): Call
6353 VSIFClose() not VSIFCloseL() to close the file. Fixes a crash
6354 under Windows.
6355
6356 * extensions/thuban/gdalwarp.cpp (MFILENAME): Padding should be
6357 to twice sizeof(void*) because there are two digits for each
6358 hex byte.
6359
6360 2003-06-16 Bernhard Herzog <[email protected]>
6361
6362 Update to the layer interface: Direct access to the table,
6363 shapetable, shapefile and filename attributes is now actively
6364 deprecated by issuing deprecation warnings for all places where
6365 this happens.
6366
6367 * Thuban/Model/layer.py (Layer.__getattr__): New. Implement access
6368 to the instance variables table, shapetable, shapefile and
6369 filename via __getattr__ so that we can issue a deprecation
6370 warning.
6371 (Layer.SetShapeStore): Don't set the deprecated instance variables
6372 any more
6373 (Layer.SetShapeStore): Don't use deprecated layer instance
6374 variables
6375 (Layer.Destroy): No need to explicitly remove the instance
6376 variables any more
6377 (Layer.GetFieldType, Layer.Shape): Don't use deprecated layer
6378 instance variables
6379
6380 * Thuban/UI/classgen.py (ClassGenDialog.__init__)
6381 (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve)
6382 (GenQuantilesPanel.GetList, GenQuantilesPanel.OnRetrieve): Don't
6383 use deprecated layer instance variables
6384
6385 * Thuban/UI/classifier.py (Classifier.__init__): Don't use
6386 deprecated layer instance variables
6387
6388 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
6389 (IdentifyGridCtrl.selected_shape): Don't set the deprecated layer
6390 instance variables
6391
6392 * Thuban/UI/tableview.py (LayerTableGrid.select_shapes): Don't use
6393 deprecated layer instance variables
6394
6395 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Don't use
6396 deprecated layer instance variables
6397
6398 * Thuban/Model/save.py (SessionSaver.write_layer): Don't use
6399 deprecated layer instance variables
6400
6401 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer)
6402 (MapRenderer.polygon_render_param): Don't use deprecated layer instance
6403 variables
6404
6405 * test/runtests.py (main): Turn Thuban's deprecation warnings into
6406 errors so that they're cought by the tests
6407
6408 * test/test_load.py (TestSingleLayer.test): Don't use deprecated
6409 layer instance variables
6410
6411 2003-06-16 Jonathan Coles <[email protected]>
6412
6413 Fix a problem under Windows whereby if the user double-clicks on a
6414 layer in the legend that tree item will expand or collapse as well
6415 as open the layer properties dialog. The state of the tree item
6416 should not be affected.
6417
6418 * Thuban/UI/legend.py (LegendTree.__init__): Add instance variable
6419 preventExpandCollapse and subscribe to expanding and collapsing
6420 events.
6421 (LegendTree.OnItemExpandCollapse): New. Responds to expanding and
6422 collapsing events and will veto the event if it has been triggered
6423 by the user double clicking on a layer.
6424 (LegendTree._OnItemActivated): Set preventExpandCollapse to indicate
6425 that an expanding/collapsing event should be vetoed.
6426
6427 2003-06-13 Bernhard Herzog <[email protected]>
6428
6429 * Thuban/UI/classifier.py (Classifier.OnClose)
6430 (Classifier.map_layers_removed)
6431 (Classifier.layer_shapestore_replaced): Unsubscribe the messages
6432 in OnClose and not in map_layers_removed or
6433 layer_shapestore_replaced to make sure it always happens when the
6434 dialog is closed
6435
6436 2003-06-13 Jonathan Coles <[email protected]>
6437
6438 This puts back a fix for Windows where a panel is needed so that
6439 the background of the table view appears correctly.
6440
6441 * Thuban/UI/tableview.py (TableFrame.__init__): Add a panel
6442 object that can be used by derived classes to place any
6443 controls (including the grid) onto.
6444 (QueryTableFrame.__init__): Use the panel as the parent window
6445 for all the controls. Reparent the grid so that the panel is
6446 the parent. Call UpdateStatusText() to correctly initialize
6447 the status bar.
6448
6449 2003-06-13 Jonathan Coles <[email protected]>
6450
6451 * Thuban/UI/dialogs.py (ThubanFrame): New: a class that inherits
6452 from wxFrame (as opposed to wxDialog like the other classes)
6453 but otherwise behaves like the other classes. This is needed
6454 for the TableView which isn't really a dialog and needs to
6455 have a status bar and control buttons.
6456
6457 * Thuban/UI/tableview.py (TableGrid.__init__): Create an
6458 instance variable to keep track of how many rows are selected.
6459 Subscribe once to the the events we are interested in.
6460 (ThubanGrid.OnRangeSelect): Only handle event if event handling
6461 hasn't been turned off.
6462 (ThubanGrid.OnSelectCell): Only handle event if event handling
6463 hasn't been turned off.
6464 (ThubanGrid.ToggleEventListeners): Rather than subscribe None
6465 as an event listener (which changes the event handler stack)
6466 simply set an instance variable to False. This is checked in
6467 the event handlers.
6468 (ThubanGrid.GetNumberSelected): Return the number of currently
6469 selected rows.
6470 (TableFrame): Inherit from ThubanFrame so we can have a
6471 status bar and control buttons.
6472 (QueryTableFrame.__init__): Create a status bar. Fixes RTbug #1942.
6473 Explicitly set which items are selected in the operator choice and
6474 action choice so there is always a valid selection. Fixes RTbug #1941.
6475 Subscribe to grid cell selection events so we can update the
6476 status bar.
6477 (QueryTableFrame.UpdateStatusText): Update the status bar with
6478 how many rows are in the grid, how many columns, and how many
6479 rows are selected.
6480 (QueryTableFrame.OnGridSelectRange, QueryTableFrame.OnGridSelectCell):
6481 Call UpdateStatusText when cells are (de)selected.
6482 (QueryTableFrame.OnQuery): Use the string value in the value
6483 combo if either the selected item index is 0 or if the string
6484 cannot be found in the predefined list (this happens if the
6485 user changes the text). Fixes RTbug #1940.
6486 Only turn off the grid event listeners if there a query comes
6487 back with a none empty list of ids. in the case that the list
6488 is empty this causes a grid.ClearSelection() call to actually
6489 clear the grid selection which causes the selected items in
6490 the map to be deselected. Fixes RTbug #1939.
6491
6492 * test/test_save.py (XMLWriterTest.Encode): Check return values.
6493 Fixes RTbug #1851.
6494
6495 2003-06-13 Bernhard Herzog <[email protected]>
6496
6497 * Thuban/UI/identifyview.py (IdentifyView.__init__): Call
6498 self.selected_shape with the current selection to make sure the
6499 contents of the dialog are up to date when it's shown for the
6500 first time.
6501 The dialog used to work without this by luck. The recent fix to
6502 the connector module 'broke' a 'feature' the identify view was
6503 relying on, i.e that subscribing to a message in response to
6504 receiving a message of that type would mean that the new
6505 subscriber would also be called for the same message.
6506
6507 2003-06-12 Jonathan Coles <[email protected]>
6508
6509 * extensions/thuban/gdalwarp.cpp: Removed debug printing as
6510 the image is rendered. Fixes RTbug #1937.
6511
6512 2003-06-12 Jonathan Coles <[email protected]>
6513
6514 * Thuban/Lib/fileutil.py: As is done under Windows, create the
6515 user directory if it doesn't exist on a posix system.
6516 Fixes RTbug #1815.
6517
6518 * Thuban/Model/resource.py (get_user_proj_files): Moved the
6519 called to get_application_dir here, so that the directory
6520 will only be called if this method is invoked.
6521
6522 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Clear
6523 the projfilepath if no projection is selected.
6524
6525 2003-06-12 Jonathan Coles <[email protected]>
6526
6527 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Don't draw
6528 the scalebar if the current map has no projection set.
6529
6530 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Set the
6531 projfilepath label to just the basename of the projection file
6532 rather than include the entire path.
6533
6534 * Thuban/Model/resource.py: Fix missed proj functions that
6535 needed to be renamed.
6536
6537 2003-06-12 Jonathan Coles <[email protected]>
6538
6539 * Thuban/Model/classification.py: Removed assert statements that
6540 tested if the variable was an instance of Color.
6541
6542 * Thuban/Model/color.py (Color): Remove commented code that isn't
6543 used.
6544 (Transparent): Renamed from NoColor. Doesn't inherit from Color.
6545 Fixes RTbug #1835.
6546 (Transparent.__eq__, Transparent.__ne, Transparent.__repr): New.
6547 Needed now that the class doesn't inherit from Color.
6548
6549 2003-06-12 Jonathan Coles <[email protected]>
6550
6551 * test/test_save.py (XMLWriterTest.testEncode): Explicitly
6552 check unicode strings.
6553
6554 * test/test_layer.py: Check for existence of gdal.
6555
6556 2003-06-12 Jonathan Coles <[email protected]>
6557
6558 * Thuban/Model/xmlreader.py: New. Contains the XMLReader class
6559 that was in load.py
6560
6561 * Thuban/Model/xmlwriter.py: New. Contains the XMLWriter class
6562 that was in save.py
6563
6564 2003-06-12 Jonathan Coles <[email protected]>
6565
6566 This is largely a collection of bug fixes. We also handle the
6567 case where gdal is not on the system. The XMLReader and XMLWriter
6568 classes were moved into there own files to resolve some circular
6569 import references and because they shouldn't really be in the
6570 file that is dediciated to reading/writing session files since
6571 they are also used elsewhere.
6572
6573 * Thuban/Model/classgen.py: Renamed functions to follow the
6574 function_names_with_underscores style. Fixes RTbug #1903.
6575 (calculate_quantiles): Raise ValueError if 'percents' is invalid.
6576
6577 * Thuban/Model/layer.py: Import gdal only if it available.
6578 (RasterLayer): Handle the case where the gdal library is unavailable.
6579 Addresses RTbug #1877.
6580
6581 * Thuban/Model/load.py (XMLReader): Moved into seperate file
6582 xmlreader.py.
6583
6584 2003-06-12 Jonathan Coles <[email protected]>
6585
6586 This is largely a collection of bug fixes. We also handle the
6587 case where gdal is not on the system. The XMLReader and XMLWriter
6588 classes were moved into there own files to resolve some circular
6589 import references and because they shouldn't really be in the
6590 file that is dediciated to reading/writing session files since
6591 they are also used elsewhere.
6592
6593 * Thuban/Model/classgen.py: Renamed functions to follow the
6594 function_names_with_underscores style. Fixes RTbug #1903.
6595 (calculate_quantiles): Raise ValueError if 'percents' is invalid.
6596
6597 * Thuban/Model/layer.py: Import gdal only if it available.
6598 (RasterLayer): Handle the case where the gdal library is unavailable.
6599 Addresses RTbug #1877.
6600
6601 * Thuban/Model/load.py (XMLReader): Moved into seperate file
6602 xmlreader.py.
6603
6604 * Thuban/Model/save.py (escape, XMLWriter): Moved into seperate
6605 file xmlwriter.py.
6606
6607 * Thuban/Model/resource.py: Renamed functions to following the
6608 function_names_with_underscores style.
6609 (has_gdal_support): New function that returns true if the gdal
6610 library is available. Addresses RTbug #1877.
6611
6612 * Thuban/UI/application.py (ThubanApplication.OpenSession):
6613 Display a message box if the gdal library is not available, but
6614 only if there are any layers that would use it. Addresses RTbug #1877.
6615
6616 * Thuban/UI/classgen.py: Use renamed projection resource functions.
6617 (GenUniformPanel.__CalcStepping): Fix a slight discrepency
6618 when using integers versus floats.
6619
6620 * Thuban/UI/mainwindow.py (_has_gdal_support): New. Used to
6621 determine if the "Add Image Layer" menu option should be
6622 greyed out or not. Addresses RTbug #1877.
6623
6624 * Thuban/UI/projdialog.py: Use renamed projection resource functions.
6625
6626 * Thuban/UI/renderer.py (MapRenderer.render_map): Only try to
6627 optimize if a raster layer is visible. Fixes RTbug #1931.
6628 Only draw the raster layer if the gdal library is available.
6629 Addresses RTbug #1877.
6630
6631 * test/test_classgen.py: Add tests for generate_singletons,
6632 generate_uniform_distribution, generate_quantiles. Fixes RTbug #1903.
6633 (test_calculate_quantiles): Fix some tests to catch the new
6634 ValueError that is raised.
6635
6636 * test/test_proj.py: Use renamed projection resource functions.
6637
6638 * test/test_save.py (SaveSessionTest.testClassifiedLayer): New
6639 test for saving classified layers. Fixes RTbug #1902.
6640 (XMLWriterTest): New. Tests the XMLWriter class. Fixes RTbug #1851.
6641
6642 2003-06-12 Jan-Oliver Wagner <[email protected]>
6643
6644 Fix for http://intevation.de/rt/webrt?serial_num=1900.
6645
6646 * Thuban/UI/multiplechoicedialog.py: New. A multiple choice dialog.
6647
6648 * Thuban/UI/mainwindow.py: import wxMultipleChoiceDialog from
6649 multiplechoicedialog.py rather than from the wxPython library.
6650
6651 2003-06-11 Frank Koormann <[email protected]>
6652
6653 * Thuban/Lib/fileutil.py (get_application_dir): Minor stability
6654 update.
6655
6656 2003-06-11 Frank Koormann <[email protected]>
6657
6658 * Thuban/Lib/fileutil.py (get_application_dir): New function to
6659 determine the absolute .thuban/thuban directory under
6660 "posix" (os.expanduser) and "nt" (read AppData registry key).
6661
6662 * Thuban/Model/resource.py: Use get_application_dir
6663
6664 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
6665 Use get_application_dir.
6666
6667 2003-06-10 Bernhard Herzog <[email protected]>
6668
6669 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Subscribe to
6670 the messages MAP_LAYERS_REMOVED messages
6671 (LayerTableFrame.OnClose): Unsubscribe from it.
6672 (LayerTableFrame.map_layers_removed): New. Receiver for
6673 MAP_LAYERS_REMOVED. Close the dialog when the layer whose the
6674 dialog is showing is removed.
6675
6676 2003-06-10 Bernhard Herzog <[email protected]>
6677
6678 * Thuban/Lib/connector.py (Connector.Issue): Iterate over a copy
6679 of the receivers list so that unsubscribing in a receiver doesn't
6680 modify it while iterating over it.
6681
6682 * test/test_connector.py
6683 (ConnectorTest.test_disconnect_in_receiver): New. Test whether
6684 unsubscribing in a receiver works correctly. See docstring for
6685 details
6686
6687 2003-06-10 Bernhard Herzog <[email protected]>
6688
6689 * Thuban/Model/messages.py (LAYER_SHAPESTORE_REPLACED): New
6690 message.
6691
6692 * Thuban/Model/layer.py (Layer.SetShapeStore): Send
6693 LAYER_SHAPESTORE_REPLACED when the shapestore changes. A
6694 LAYER_CHANGED will still be sent if the classification changes.
6695
6696 * Thuban/UI/classifier.py (Classifier.__init__): Add the map as
6697 parameter so we can subscribe to some of its messages
6698 (Classifier.__init__): Subscribe to the map's MAP_LAYERS_REMOVED
6699 and the layer's LAYER_SHAPESTORE_REPLACED
6700 (Classifier.unsubscribe_messages): New. Unsubscribe from message
6701 subscribed to in __init__
6702 (Classifier.map_layers_removed)
6703 (Classifier.layer_shapestore_replaced): receivers for the messages
6704 subscribed to in __init__. Unsubscribe and close the dialog
6705
6706 * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): Pass
6707 the map to the Classifier dialog
6708
6709 * test/test_layer.py (SetShapeStoreTests): Derive from
6710 SubscriberMixin as well so we can test messages
6711 (SetShapeStoreTests.setUp): Subscribe to some of the layer's
6712 messages
6713 (SetShapeStoreTests.tearDown): Clear the messages again
6714 (SetShapeStoreTests.test_sanity): Expand the doc-string and check
6715 for the modified flag too
6716 (SetShapeStoreTests.test_set_shape_store_modified_flag): New test
6717 to check whether SetShapeStore sets the modified flag
6718 (SetShapeStoreTests.test_set_shape_store_different_field_name)
6719 (SetShapeStoreTests.test_set_shape_store_same_field)
6720 (SetShapeStoreTests.test_set_shape_store_same_field_different_type):
6721 Add tests for the messages. This checks both the new
6722 LAYER_SHAPESTORE_REPLACED and the older LAYER_CHANGED
6723
6724 2003-06-06 Jan-Oliver Wagner <[email protected]>
6725
6726 * Thuban/UI/mainwindow.py: Improved and partly added help texts for
6727 the menu items.
6728
6729 2003-06-05 Frank Koormann <[email protected]>
6730
6731 * Thuban/UI/identifyview.py (IdentifyView.__init__):
6732 Layout reimplemented without panel. Make life easier to fit the list
6733 in the dialog.
6734
6735 2003-06-05 Frank Koormann <[email protected]>
6736
6737 * Thuban/UI/projdialog.py (ProjFrame.__init__): Fill the projchoice
6738 once on initialisation (Former implementation resulted in multiple
6739 entries for each projection).
6740 (ProjFrame.__FillAvailList): selectProj as second optional parameter,
6741 if set, select the projection found under the specified name. This
6742 overwrites any other selection estimate.
6743 Removed projchoice filling from this method.
6744 (ProjFrame._OnSave, ProjFrame._OnAddToList):
6745 Updated call of ProjFrame.__FillAvailList
6746 (LCCPanel._DoLayout): Moved parameter controls in more common order.
6747
6748 * Resources/Projections/defaults.proj: Extended defaults representing
6749 various common European projections.
6750
6751 2003-06-05 Frank Koormann <[email protected]>
6752
6753 * Thuban/UI/identifyview.py (IdentifyView.__init__):
6754 Use ListCtrl instead of GridCtrl
6755
6756 * Thuban/Model/resource.py:
6757 Guess location of .thuban directory from tempdir parent directory.
6758
6759 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
6760 Guess location of .thuban directory from tempdir parent directory.
6761
6762 2003-06-04 Bernhard Herzog <[email protected]>
6763
6764 Do not cache the values returned by the tree widget's
6765 GetFirstChild and GetNextChild methods because it led to lots of
6766 segfaults. The new way requires more brute force but is more
6767 reliable.
6768
6769 * Thuban/UI/legend.py (LegendTree.__init__): Remove instance
6770 variable layer2id
6771 (LegendTree.find_layer): New method to do with brute force what
6772 layer2id tried to accomplish
6773 (LegendTree._OnMsgLayerChanged)
6774 (LegendTree._OnMsgLayerTitleChanged, LegendTree.__ShowHideLayer):
6775 Use find_layer instead of layer2id
6776 (LegendTree.__RemoveLayer, LegendTree.__AddLayer): No need to
6777 update layer2id anymore
6778 (LegendTree._OnMsgMapLayersRemoved)
6779 (LegendTree._OnMsgMapLayersAdded): Get by without layer2id.
6780
6781 2003-06-03 Thomas Koester <[email protected]>
6782
6783 * Thuban/Model/classgen.py (GenQuantiles0): New function.
6784
6785 2003-06-02 Bernhard Herzog <[email protected]>
6786
6787 * Thuban/UI/mainwindow.py (layer_rename command, table_rename command):
6788 New commands.
6789 (main_menu): Add the new commands.
6790 (MainWindow.TableRename): New. Implementation of the table_rename
6791 command.
6792 (MainWindow.RenameLayer): New. Implementation of the layer_rename
6793 command.
6794
6795 * Thuban/Model/session.py (Session.AddTable): call self.changed to
6796 set the modified flag
6797
6798 * test/test_session.py (TestSessionSimple.test_add_table): Test
6799 whether the modified flag is set properly
6800
6801 * Thuban/Model/base.py (TitledObject.SetTitle): Call changed
6802 instead of issue so that the modified flags get updated.
6803
6804 * test/test_base.py (SomeTitledObject): Derive from Modifiable
6805 instead of Publisher to reflect reality better and to accomodate
6806 the fact that SetTitle now calls changed instead of issue
6807
6808 2003-06-02 Bernhard Herzog <[email protected]>
6809
6810 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Resource
6811 acquisition has to happen before the try in a try-finally.
6812
6813 2003-06-02 Bernhard Herzog <[email protected]>
6814
6815 * Thuban/UI/legend.py (LegendTree._OnMsgMapLayersRemoved): It's
6816 possible that a layer is removed that is not currently selected in
6817 the legend so don't check for this.
6818
6819 2003-05-30 Bernhard Herzog <[email protected]>
6820
6821 * Thuban/Model/layer.py (Layer.Destroy): Set all instance
6822 variables to None that have direct or indirect references to
6823 shapefiles or dbf files to make sure that they do go away and the
6824 files are closed.
6825
6826 2003-05-30 Bernhard Herzog <[email protected]>
6827
6828 * Thuban/UI/legend.py (LegendTree.GetRootItem): Reset
6829 availImgListIndices when a new image list is created
6830
6831 2003-05-30 Bernhard Herzog <[email protected]>
6832
6833 * Thuban/UI/legend.py (LegendTree.__init__): New instance variable
6834 changing_selection to indicate whether the LegendTree code itself
6835 is currently changing the selection
6836 (LegendTree.normalize_selection): New method to normalize the
6837 selection by selecting the layer item even if the user clicked on
6838 the classification.
6839 (LegendTree._OnSelChanged): normalize the selection. This works
6840 around a bug in wx which doesn't keep track of the selection
6841 properly when subtrees are deleted.
6842
6843 2003-05-30 Bernhard Herzog <[email protected]>
6844
6845 * Thuban/UI/view.py (MapCanvas.set_view_transform): Limit the
6846 maximum and minimum scale factors.
6847
6848 * test/test_classgen.py (ClassGenTest.test): Update to reflect the
6849 changes in classgen.py
6850
6851 2003-05-30 Jonathan Coles <[email protected]>
6852
6853 * Thuban/Model/classgen.py: Remove ClassGenerator class but make
6854 all the methods functions. Fixes RTBug #1903.
6855
6856 * Thuban/Model/map.py (Map.TopLayer, Map.BottomLayer): Renamed
6857 to MoveLayerToTop and MoveLayerToBottom respectively. Fixes
6858 RTBug #1907.
6859
6860 * Thuban/UI/classgen.py: Use classgen functions that were part
6861 of the ClassGenerator class. Put try/finally blocks around
6862 code that uses wxBeginBusyCursor()/wxEndBusyCursor(). Fixes
6863 RTBug #1904.
6864
6865 * Thuban/UI/classifier.py: Remove unused import of ClassGenerator.
6866
6867 * Thuban/UI/legend.py: The legend was cleared and repopulated any
6868 time something changed which caused some state to be lost such
6869 as which children were expanded or collapsed. Fixes RTBug #1901.
6870 (LegendTree._OnMsgMapLayersAdded): Add only new layers.
6871 (LegendTree.__OnMsgMapLayersRemoved): Remove layers that exist in
6872 the legend but not in the map.
6873 (LegendTree.__FillTree): Move main functionality out into smaller
6874 methods that can be used by other methods.
6875 (LegendTree.__FillTreeLayer): Reuse old slots in the image list
6876 if they are available.
6877 (LegendTree.DeleteAllItems): Renamed from __DeleteAllItems so
6878 that we override the wxTreeCtrl method. Iterate over children
6879 and call __RemoveLayer.
6880 (LegendTree.__AddLayer): New. Add a new layer to the legend.
6881 (LegendTree.__RemoveLayer): Remove a layer from the legend.
6882 (LegendTree.DeleteChildren): New, overrides wxTreeCtrl method.
6883 Should only be called with the id of a layer branch.
6884 (LegendTree.GetRootItem): New, overrides wxTreeCtrl method.
6885 Returns the root item or creates one if necessary.
6886
6887 * Thuban/UI/renderer.py (MapRenderer.draw_raster_layer): Call
6888 ProjectRasterFile with tuple arguments instead of strings.
6889
6890 * Thuban/UI/tableview.py (QueryTableFrame.OnQuery): Wrap code
6891 with try/finally. Fixes RTBug #1904.
6892
6893 * Thuban/UI/view.py (MapCanvas.OnPaint): Wrap code
6894 with try/finally. Fixes RTBug #1904.
6895 (MapCanvas.FitSelectedToWindow): If a single point is selected
6896 simply center it on the display. Fixes RTBug #1849.
6897
6898 * extensions/thuban/gdalwarp.cpp: Removed code that allowed gdalwarp
6899 to be compiled as a standalone app. Now the code can only be
6900 called from Python which simplifies the parameter passing.
6901 (ProjectRasterFile): Handle Python arguments. Remove code that
6902 checks for a destination dataset. Add more clean up code.
6903
6904 * test/test_map.py (TestMapWithContents.test_raise_layer_top,
6905 TestMapWithContents.test_lower_layer_bottom):
6906 Test Map.MoveLayerToTop() and Map.MoveLayerToBottom() respectively.
6907 Fixes RTBug #1907.
6908
6909 * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Apply a full
6910 extent to the map when the legend is toggled. Fixes RTBug #1881.
6911
6912 2003-05-29 Jan-Oliver Wagner <[email protected]>
6913
6914 * Thuban/UI/tableview.py (LayerTableFrame.OnClose): Bug-fix: Now
6915 unsubscribes all that is subcribed in __init__.
6916
6917 2003-05-28 Bernhard Herzog <[email protected]>
6918
6919 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer)
6920 (MainWindow.CanDuplicateLayer): New methods to implement the
6921 Layer/Duplicate command.
6922 (layer_duplicate command): New.
6923 (main_menu): Add layer_duplicate to the Layer menu.
6924
6925 2003-05-28 Bernhard Herzog <[email protected]>
6926
6927 * Thuban/UI/tableview.py (NullRenderer.Draw): New. Our own
6928 renderer so that NULL/None values get displayed differently (by a
6929 gray rectangle).
6930 (TableGrid.__init__): Override the default renderers
6931
6932 2003-05-28 Bernhard Herzog <[email protected]>
6933
6934 * Thuban/Model/layer.py (Layer.SetShapeStore): Set the
6935 classification to "None" if the type of the field has changed.
6936
6937 * test/test_layer.py (SetShapeStoreTests): New. Class with a few
6938 test for the Layer.SetShapeStore method
6939
6940 2003-05-28 Jan-Oliver Wagner <[email protected]>
6941
6942 * Thuban/Model/layer.py (Layer.TreeInfo): Fixed a bug (a layer
6943 does not necessarily have a filename).
6944
6945 2003-05-28 Jan-Oliver Wagner <[email protected]>
6946
6947 * Thuban/UI/mainwindow.py (MainWindow.TableClose, MainWindow.TableShow):
6948 sort the selection list for the dialog.
6949
6950 2003-05-28 Frank Koormann <[email protected]>
6951
6952 * extensions/thuban/wxproj.cpp
6953 (project_point): Removed cast to int for projected point coordinates.
6954 (shape_centroid): Return last point if all polygon vertices fall
6955 to one point.
6956
6957 2003-05-28 Bernhard Herzog <[email protected]>
6958
6959 * Thuban/UI/mainwindow.py (_can_unjoin): Add doc-string and cope
6960 with layers that don't have shapestores, i.e. raster layers.
6961
6962 2003-05-28 Bernhard Herzog <[email protected]>
6963
6964 * Thuban/Model/table.py (DBFTable.__init__): Omit the extension
6965 when determining the title from the filename.
6966
6967 * test/test_dbf_table.py (TestDBFTable.test_title): Update to
6968 reflect changes in the way the title is derived from the filename
6969
6970 2003-05-28 Frank Koormann <[email protected]>
6971
6972 * Thuban/UI/mainwindow.py (MainWindow.TableShow):
6973 Added wxDEFAULT_DIALOG_STYLE to show table dialog styles.
6974
6975 2003-05-27 Bernhard Herzog <[email protected]>
6976
6977 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages): Also
6978 delegate SelectedLayer.
6979 (MainWindow.LayerUnjoinTable): Implement.
6980 (_can_unjoin): New. Helper function for the sensitivity of the
6981 layer/unjoin command.
6982
6983 * Thuban/Model/data.py (ShapefileStore.OrigShapeStore)
6984 (DerivedShapeStore.OrigShapeStore): New. Return the original
6985 shapestore. Used to figure out how to unjoin.
6986 (DerivedShapeStore.Shapefile): Fix a typo.
6987
6988 2003-05-27 Bernhard Herzog <[email protected]>
6989
6990 * Thuban/UI/join.py (JoinDialog): Extend to handle layer joins as
6991 well
6992 (JoinDialog.__init__): Use the layer parameter and only build the
6993 left choice when a layer is given
6994 (JoinDialog.OnJoin): Handle layer joins as well
6995 (JoinDialog.OnLeftTable, JoinDialog.OnRightTable): Handle the case
6996 that the user selects the "Select..." item. The sensitivitly
6997 updating is now in update_sensitivity
6998 (JoinDialog.y): New method to refactor the sensitivity update of
6999 the join button into its own method.
7000
7001 * Thuban/UI/mainwindow.py (MainWindow.LayerJoinTable): Implement.
7002
7003 2003-05-27 Bernhard Herzog <[email protected]>
7004
7005 * Thuban/UI/mainwindow.py (table_close command): Make it sensitive
7006 iff there are unreferenced tables in the session
7007
7008 2003-05-27 Bernhard Herzog <[email protected]>
7009
7010 * Thuban/Model/messages.py (TABLE_REMOVED): New message.
7011
7012 * Thuban/Model/session.py (Session.UnreferencedTables): New method
7013 to return tables that are not referenced by other tables or shape
7014 stores and can be removed.
7015 (Session.RemoveTable): Issue a TABLE_REMOVED message after
7016 removing the table
7017
7018 * Thuban/UI/mainwindow.py: Remove unused imports
7019 (MainWindow.TableClose): Implement.
7020
7021 * Thuban/UI/tableview.py (TableFrame.__init__): Subscribe to some
7022 messages so that the frame will be automatically closed when a new
7023 session is opened or the table is removed.
7024 (TableFrame.OnClose): Unsubscribe the Subscriptions made in
7025 __init__
7026 (TableFrame.close_on_session_replaced)
7027 (TableFrame.close_on_table_removed): New. Subscribers that close
7028 the window
7029
7030 * test/test_session.py (TestSessionMessages.test_remove_table)
7031 (TestSessionSimple.test_remove_table): Move the test to
7032 TestSessionSimple and add test for the TABLE_REMOVED message
7033 (TestSessionBase.setUp): Also subscribe to TABLE_REMOVED
7034 (TestSessionSimple.test_unreferenced_tables) New. Test for the
7035 UnreferencedTables method.
7036 (UnreferencedTablesTests): New. Class with some more sophisticated
7037 tests for UnreferencedTables.
7038
7039 2003-05-27 Frank Koormann <[email protected]>
7040
7041 * Thuban/UI/tableview.py (QueryTableFrame.__init__): The "_S_election"
7042 display has some unwanted side effects. Removed again.
7043
7044 2003-05-27 Frank Koormann <[email protected]>
7045
7046 * Resources/Bitmaps/legend_icon_layer.xpm: New, icon for legend.
7047
7048 * Thuban/UI/legend.py (LegendTree.__FillTree): Use "legend_icon_layer"
7049
7050 2003-05-27 Jan-Oliver Wagner <[email protected]>
7051
7052 * test/test_menu.py (MenuTest.test): Added test for
7053 Menu.RemoveItem().
7054
7055 * Thuban/UI/menu.py (Menu.RemoveItem): New. Remove an item from
7056 the menu.
7057
7058 2003-05-27 Frank Koormann <[email protected]>
7059
7060 Nonmodal dialogs without parent (i.e. they can fall behind the main
7061 window)
7062
7063 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Explicitly destroy
7064 all dialogs in the dialogs dictionary and the canvas.
7065
7066 * Thuban/UI/dialogs.py (NonModalNonParentDialog): New class, without
7067 parent, i.e. can fall behind other windows.
7068 (NonModalDialog.OnClose): Check is dialog is in mainwindow.dialog
7069 dictionary before removing it.
7070
7071 * Thuban/UI/classifier.py: Dialog derived from NonModalNonParentDialog
7072
7073 * Thuban/UI/projdialog.py: Dialog derived from NonModalNonParentDialog
7074 * Thuban/UI/tableview.py: Dialog derived from NonModalNonParentDialog
7075 * Thuban/UI/tree.py: Dialog derived from NonModalNonParentDialog
7076
7077 2003-05-27 Bernhard Herzog <[email protected]>
7078
7079 * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): New. Open a
7080 tableview dialog
7081 (MainWindow.TableShow): Use ShowTableView to open the dialogs.
7082 Also, don't use the table's titles as the dialog names. The titles
7083 aren't guaranteed to be unique.
7084 (MainWindow.TableOpen): Open a table view dialog after opening the
7085 table
7086
7087 2003-05-27 Bernhard Herzog <[email protected]>
7088
7089 * Thuban/UI/mainwindow.py: Remove the Table/Hide menu item. Its
7090 effect can be achieved by simply closing the window showing the
7091 table.
7092 (MainWindow.TableHide): Removed.
7093 (main_menu): Removed "table_hide"
7094
7095 2003-05-27 Frank Koormann <[email protected]>
7096
7097 Fix legend tree display problems under Win32
7098
7099 * Thuban/UI/legend.py: BMP_SIZE_W = 15
7100 (LegendTree.__FillTree): Display "legend_icon_map.xpm" with layer title.
7101 (LegendTree.__FillTreeLayer): Explicitely set SelectedImage.
7102
7103 * Resources/Bitmaps/legend_icon_map.xpm: New icon for legend.
7104
7105 2003-05-27 Jan-Oliver Wagner <[email protected]>
7106
7107 * Thuban/UI/menu.py (Menu.InsertSeparator): Additional optional parameter
7108 'after' now allows to insert separators almost anywhere in the menu.
7109
7110 2003-05-27 Frank Koormann <[email protected]>
7111
7112 * Thuban/UI/tableview.py (QueryTableFrame.__init__): Underline the
7113 "S" of selection box label to hint on hot key (Alt-S). Works under
7114 Win32 but is ignored under GTK.
7115
7116 2003-05-26 Frank Koormann <[email protected]>
7117
7118 * Thuban/UI/projdialog.py (ProjFrame.__do_layout, ProjPanel._DoLayout):
7119 Center Choices.
7120
7121 2003-05-26 Bernhard Herzog <[email protected]>
7122
7123 Remove the Precision methods again. They're too DBF specific to be
7124 part of the table interface and they're only used in table_to_dbf
7125 anyway.
7126
7127 * Thuban/Model/transientdb.py (TransientTableBase.Width):Use a
7128 fixed precision of 12 for doubles.
7129 (TransientTableBase.Precision): Removed
7130 (AutoTransientTable.Width): Delegate to self.table.
7131
7132 * Thuban/Model/table.py (DBFTable.Precision)
7133 (MemoryTable.Precision): Removed.
7134 (MemoryTable.Width): Use a fixed precision of 12 for doubles.
7135 (table_to_dbf): Use a fixed precision of 12 for floats unless the
7136 column object specifies something else.
7137
7138 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): New.
7139 test for table_to_dbf
7140
7141 2003-05-26 Bernhard Herzog <[email protected]>
7142
7143 * test/test_transientdb.py
7144 (TestTransientTable.run_iceland_political_tests): Fix a comment.
7145
7146 2003-05-26 Bernhard Herzog <[email protected]>
7147
7148 * Thuban/UI/mainwindow.py (MainWindow.TableOpen): Real
7149 implementation. Mark parts of the file format strings for
7150 localization.
7151
7152 * Thuban/Model/session.py (Session.OpenTableFile): New. Open a dbf
7153 file and add the table to the tables managed by the session
7154
7155 * test/test_session.py (TestSessionSimple.test_open_table_file):
7156 New. test case for OpenTableFile
7157
7158 2003-05-26 Jan-Oliver Wagner <[email protected]>
7159
7160 * Thuban/UI/controls.py, Thuban/UI/identifyview.py, Thuban/UI/join.py,
7161 Thuban/UI/labeldialog.py, Thuban/UI/mainwindow.py,
7162 Thuban/UI/proj4dialog.py, Thuban/UI/tableview.py, Thuban/UI/view.py:
7163 Replace the true/false of wxWindows by True/False of Python 2.2.1.
7164
7165 2003-05-26 Jan-Oliver Wagner <[email protected]>
7166
7167 * Thuban/UI/tableview.py (LayerTableFrame.__init__): If there is
7168 already a selection present, update the grid accordingly.
7169
7170 * Thuban/UI/mainwindow.py (MainWindow.TableShow): Make the dialog
7171 resizeable and increase its initial size.
7172
7173 2003-05-26 Frank Koormann <[email protected]>
7174
7175 Table export functionality
7176
7177 * Thuban/Model/table.py (DBFTable.Width, MemoryTable.Width):
7178 Return width (in characters) for a column.
7179 (DBFTable.Precision, MemoryTable.Precision): Return decimal precision.
7180 (table_to_dbf): Write table to dbf file.
7181 (table_to_csv): Write table to csv file.
7182
7183 * Thuban/Model/transientdb.py (TransientTableBase.Width,
7184 TransientTableBase.Precision): Return column width and precision.
7185
7186 * Thuban/UI/tableview.py (QueryTableFrame.OnSaveAs): Call table_to_dbf
7187 or table_to_csv depending on file selection.
7188
7189 * test/test_dbf_table.py:
7190 Test table_to_dbf (extension of former part of test).
7191
7192 * test/test_csv_table.py:
7193 Test table_to_csv.
7194
7195 2003-05-23 Jan-Oliver Wagner <[email protected]>
7196
7197 * Thuban/UI/join.py (JoinDialog.OnJoin): Use _() for strings.
7198 Use QueryTableFrame instead of TableFrame.
7199
7200 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Prefix the
7201 table window with 'Layer Table:' instead of 'Table:'.
7202
7203 2003-05-23 Jan-Oliver Wagner <[email protected]>
7204
7205 Give all tables a title via mix-in TitledObject.LayerShowTable
7206
7207 * Thuban/Model/base.py (TitledObject.SetTitle): Call method 'issue'
7208 only if it exists.
7209
7210 * Thuban/Model/table.py (DBFTable, MemoryTable): mix-in TitledObject
7211 and call its init-method with a default title. Remove Title() method.
7212
7213 * Thuban/Model/transientdb.py (TransientTable, TransientJoinedTable,
7214 AutoTransientTable): mix-in TitledObject and call its init-method with
7215 a default title. Remove Title() method.
7216
7217 2003-05-23 Bernhard Herzog <[email protected]>
7218
7219 * Thuban/Model/session.py (Session.AddShapeStore): Define
7220 AddShapeStore analogously to AddTable.
7221
7222 * test/test_session.py (TestSessionSimple.test_add_shapestore):
7223 New. Test for AddShapeStore
7224
7225 2003-05-23 Jan-Oliver Wagner <[email protected]>
7226
7227 Introducing QueryTableFrame and a very coarse ShowTable implementation.
7228
7229 * Thuban/UI/tableview.py (LayerTableFrame, QueryTableFrame): Split the
7230 class LayerTableFrame into two classes, LayerTableFrame and QueryTableFrame.
7231 The latter implements the selection GUI without dependency on a layer.
7232 LayerTableFrame now is derived from QueryTableFrame and connects
7233 to a layer.
7234
7235 * Thuban/UI/mainwindow.py (MainWindow.TableShow): A very coarse
7236 implementation that still needs work.
7237
7238 * Thuban/Model/layer.py (Layer.TreeInfo): Added filename.
7239
7240 2003-05-22 Frank Koormann <[email protected]>
7241
7242 * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
7243 Added "outer_join = False" as optional parameter.
7244 (TransientJoinedTable.create): If outer join is true, perform a
7245 "LEFT OUTER JOIN" instead of "JOIN", which preserves all records of
7246 the left table. Records not matching are filled with 0 / None.
7247
7248 * Thuban/UI/join.py (JoinDialog.__init__): Checkbox for outer join.
7249 (JoinDialog.OnJoin): Consider outer join check box.
7250
7251 2003-05-22 Bernhard Herzog <[email protected]>
7252
7253 * Thuban/UI/join.py (JoinDialog.OnJoin): Use exc_info in a
7254 somewhat safer way. Storing the traceback in a local variable can
7255 lead to memory leaks
7256
7257 2003-05-22 Bernhard Herzog <[email protected]>
7258
7259 * Thuban/UI/join.py (JoinDialog.OnJoin): Make sure to really call
7260 the wxMessageDialog's Destroy() method.
7261
7262 2003-05-22 Frank Koormann <[email protected]>
7263
7264 * Thuban/UI/join.py (JoinDialog.__init__): Make use of
7265 TransientTable.Title()
7266
7267 2003-05-22 Frank Koormann <[email protected]>
7268
7269 Join Dialog, initial version.
7270
7271 * Thuban/UI/mainwindow.py (MainWindow.TableJoin): Removed print.
7272
7273 * Thuban/UI/join.py (JoinDialog): Functional implementation of
7274 former framework. Renamed Table1/Table2 to LeftTable/RightTable
7275 in all occurences.
7276
7277 * Thuban/Model/transientdb.py (TransientJoinedTable.__doc__):
7278 Typo fixed.
7279
7280 2003-05-22 Bernhard Herzog <[email protected]>
7281
7282 Give the tables titles so that the GUI can display more meaningful
7283 names. For now the titles are fixed but depend on e.g. filenames
7284 or the titles of the joined tables.
7285
7286 * Thuban/Model/transientdb.py (TransientTable.Title)
7287 (TransientJoinedTable.Title, AutoTransientTable.Title): New.
7288
7289 * Thuban/Model/table.py (DBFTable.Title, MemoryTable.Title): New.
7290
7291 * test/test_transientdb.py
7292 (TestTransientTable.test_auto_transient_table_title): New. Test
7293 for the Title method
7294 (TestTransientTable.test_transient_joined_table)
7295 (TestTransientTable.test_transient_table): Add test for the Title
7296 methods
7297
7298 * test/test_memory_table.py (TestMemoryTable.test_title): New.
7299 Test for the Title method
7300
7301 * test/test_dbf_table.py (TestDBFTable.test_title): New. Test for
7302 the Title method
7303
7304 2003-05-22 Bernhard Herzog <[email protected]>
7305
7306 * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
7307 Provide a better way to destroy the layers
7308 (TestLayer.test_base_layer, TestLayer.test_arc_layer)
7309 (TestLayer.test_point_layer, TestLayer.test_empty_layer)
7310 (TestLayer.test_polygon_layer, TestLayer.test_get_field_type): Use
7311 the new way to destroy the layers.
7312 (TestLayer.test_derived_store): New. Test for using a layer with a
7313 DerivedShapeStore
7314
7315 * Thuban/Model/layer.py (Layer.SetShapeStore): Only set the
7316 filename if the shape store actually has one.
7317
7318 2003-05-22 Bernhard Herzog <[email protected]>
7319
7320 * Thuban/Model/table.py (DBFTable.FileName): New. Accessor method
7321 for the filename
7322
7323 * test/test_dbf_table.py (TestDBFTable.test_filename): New. Test
7324 for the FileName method
7325 (TestDBFTableWriting.test_write): Fix spelling of filename
7326
7327 2003-05-22 Thomas Koester <[email protected]>
7328
7329 * Thuban/Model/range.py, test/test_range.py: Brought over new Range
7330 from SciParam that now really is immutable.
7331
7332 2003-05-22 Frank Koormann <[email protected]>
7333
7334 Layer Top/Bottom placement added to legend.
7335
7336 * Thuban/UI/legend.py
7337 (LegendPanel._OnMoveTop(), LayerPanel._OnMoveBottom): New, methods
7338 bound to tool events.
7339 (LegendTree.MoveCurrentItemTop(), LegendTree.MoveCurrentItemBottom):
7340 New, methods binding the event methods with the map methods.
7341
7342 * Thuban/Model/map.py (Map.TopLayer(), Map.BottomLayer()): New, place
7343 layer at top/bottom of layer stack.
7344
7345 * Resources/Bitmaps/top_layer.xpm: New button icon.
7346
7347 * Resources/Bitmaps/bottom_layer.xpm: New button icon.
7348
7349 2003-05-22 Bernhard Herzog <[email protected]>
7350
7351 * Thuban/Model/session.py (Session.RemoveTable): New method to
7352 remove tables
7353
7354 * test/test_session.py (TestSessionSimple.test_remove_table): New.
7355 Test for RemoveTable
7356
7357 2003-05-22 Thomas Koester <[email protected]>
7358
7359 * Thuban/Model/classgen.py: Added short module doc string and CVS id.
7360 (ClassGenerator.GenUniformDistribution): Use new Range __init__, too.
7361
7362 2003-05-22 Bernhard Herzog <[email protected]>
7363
7364 Implement a way to discover dependencies between tables and
7365 shapestores.
7366
7367 * Thuban/Model/transientdb.py (TransientTableBase.Dependencies)
7368 (TransientJoinedTable.Dependencies)
7369 (AutoTransientTable.SimpleQuery): New. Implement the dependencies
7370 interface
7371 (TransientJoinedTable.__init__): Keep tack of the original table
7372 objects in addition to the corresponding transient tables.
7373
7374 * Thuban/Model/table.py (DBFTable.Dependencies)
7375 (MemoryTable.Dependencies): New. Implement the dependencies
7376 interface
7377
7378 * Thuban/Model/data.py (ShapeTable): New. Helper class for
7379 ShapefileStore
7380 (ShapefileStore.__init__): Use ShapeTable instead of
7381 AutoTransientTable
7382 (ShapefileStore.Table, ShapefileStore.Shapefile): Add doc-strings
7383 (ShapefileStore.FileName, ShapefileStore.FileType): New. Accessor
7384 methods for filename and type
7385 (ShapefileStore.Dependencies): New. Implement the dependencies
7386 interface
7387 (DerivedShapeStore): New class to replace SimpleStore. The main
7388 difference to SimpleStore is that it depends not on a shapefile
7389 but another shapestore which expresses the dependencies a bit
7390 better
7391 (SimpleStore.__init__): Add deprecation warning.
7392
7393 * test/test_dbf_table.py (TestDBFTable.test_dependencies): New.
7394 Test for the Dependencies method.
7395
7396 * test/test_memory_table.py (TestMemoryTable.test_dependencies):
7397 New. Test for the Dependencies method.
7398
7399 * test/test_transientdb.py
7400 (TestTransientTable.test_auto_transient_table_dependencies): New.
7401 Test for the Dependencies method.
7402 (TestTransientTable.test_transient_joined_table): Add test for the
7403 Dependencies method.
7404
7405 * test/test_session.py (TestSessionSimple.setUp)
7406 (TestSessionSimple.tearDown): New. Implement a better way to
7407 destroy the sessions.
7408 (TestSessionSimple.test_initial_state)
7409 (TestSessionSimple.test_add_table): Bind session to self.session
7410 so that it's destroyed by tearDown
7411 (TestSessionSimple.test_open_shapefile): New. Test for
7412 OpenShapefile and the object it returns
7413
7414 2003-05-22 Bernhard Herzog <[email protected]>
7415
7416 * Thuban/Model/session.py (Session.AddTable): New method to
7417 register tables with the session.
7418 (Session.Tables): Return the tables registered with AddTable too.
7419
7420 * test/test_session.py (TestSessionSimple.test_add_table): New.
7421 Test case for the AddTable method
7422
7423 2003-05-22 Frank Koormann <[email protected]>
7424
7425 UI polishing updates: Place main buttons (OK, Cancel, etc) in the
7426 lower right corner, center labels for selections, initialize controls
7427 in reasonable order for keyboard navigation.
7428
7429 * Thuban/UI/projdialog.py (ProjFrame.__init__, ProjFrame.__doLayout)
7430 (ProjFrame.__DoOnProjAvail): Determine position of current projection
7431 using the wxListBox.FindString() method. Still a problem (#1886)
7432
7433 * Thuban/UI/classifier.py
7434 (Classifier.__init__, SelectPropertiesDialog.__init__)
7435
7436 * Thuban/UI/classgen.py (ClassGenDialog.__init__,
7437 (ClassGenDialog.__DoOnGenTypeSelect): Moved initialization of the
7438 different classification types from here to __init__.
7439 (GenUniquePanel.__init__): Set the column width of the first field
7440 in the Field ListCtrl to the full width.
7441
7442 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Rename 'Save As'
7443 Button to 'Export'. Center Buttons in Selection Box, set Focus to
7444 Grid.
7445 (LayerTableFrame.OnKeyDown()): New, bound to the grid with EVT_KEY_DOWN,
7446 changes focus to the Selection when pressing "Alt-S".
7447
7448 * Thuban/UI/legend.py (LegendTree.__SetVisibilityStyle): Only gray out
7449 the text if not visible. The italic font sometimes exceeds the
7450 rendering area.
7451
7452 2003-05-21 Jonathan Coles <[email protected]>
7453
7454 * Thuban/UI/dock.py (DockFrame): Rename references to _OnClose
7455 to OnClose so that Thuban closes correctly.
7456
7457 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Call
7458 DockFrame.OnClose, not DockFrame._OnClose.
7459
7460 2003-05-21 Jonathan Coles <[email protected]>
7461
7462 * Thuban/Model/classgen.py (ClassGenerator.GenQuantiles): Remove
7463 references to 'inf' and use new Range __init__ to pass floats
7464 directly rather than converting them to strings first.
7465 Fixes RTBug #1876.
7466
7467 * Thuban/Model/classification.py (ClassGroupRange.SetRange):
7468 Use new Range ___init__ to pass floats.
7469
7470 * Thuban/Model/layer.py (RasterLayer.__init__): Test if the
7471 filename is a valid image file. Throw IOError otherwise.
7472
7473 * Thuban/Model/range.py: Brought over new Range from SciParam that
7474 is immutable and has an __init__ which can accept floats.
7475
7476 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Move OpenShapefile
7477 into try block. AddLayer doesn't throw any exceptions anymore.
7478 (MainWindow.AddRasterLayer): Move constructor of RasterLayer into
7479 try block.
7480
7481 * Thuban/UI/projdialog.py (GeoPanel.__init__): Put Degrees as
7482 the first item in choices. Fixes RTBug #1882.
7483
7484 * Thuban/UI/renderer.py (MapRenderer.render_map): Check if scale
7485 has gone to 0 which is a serious problem. abort.
7486 (MapRenderer.draw_raster_layer): Catch IOError seperately and
7487 print the error from GDAL.
7488
7489 * Thuban/UI/tableview.py (TableGrid.__init__): Call
7490 ToggleEventListeners to turn on listening.
7491 (TableGrid.ToggleEventListeners): New. Turns event listening on
7492 and off so as to prevent excessive messages.
7493 (LayerTableFrame.OnQuery): Use TableGrid.ToggleEventListeners
7494 to suppress excessive messages when selecting many rows.
7495 Fixes RTBug #1880.
7496
7497 * Thuban/UI/view.py: Added checks against if scale == 0. This
7498 is a serious problem that can occur when an image without
7499 geo data is loading and causes the map projection bounds to
7500 go to infinity. Right now, the solution is to simply try
7501 to recover.
7502
7503 * extensions/thuban/cpl_mfile.cpp (MFILEClose): Make sure
7504 to set the MFILEReceiver attributes even if the data is NULL.
7505
7506 * extensions/thuban/gdalwarp.cpp: Improved the error handling
7507 and passed GDAL messages back up to the Python layer. Also
7508 tried to fix some memory leaks that were present in the original
7509 utility but didn't matter because the program aborted.
7510
7511 * test/test_range.py: Copied over tests from SciParam. Removed
7512 tests against importing. Fixes RTBug #1867.
7513
7514 2003-05-21 Bernhard Herzog <[email protected]>
7515
7516 * test/test_load.py: Remove unused imports and restructure the
7517 test code
7518 (LoadSessionTest): Split into one class for each test and turn
7519 LoadSessionTest itself into the base class for all such session
7520 tests.
7521 (ClassificationTest): New base class for load tests that test
7522 classifications
7523 (TestSingleLayer, TestLayerVisibility, TestClassification)
7524 (TestLabels, TestLayerProjection, TestRasterLayer): New classes
7525 for the individual tests
7526
7527 * test/support.py (FileLoadTestCase.filename): New base class for
7528 file loading tests
7529
7530 2003-05-21 Jan-Oliver Wagner <[email protected]>
7531
7532 * Resources/Projections/defaults.proj: Renamed 'Universal Transverse
7533 Mercator' to 'UTM Zone 32' as a more convenient example.
7534 Added 'Gauss Krueger Zone 6'.
7535
7536 * Data/iceland_sample_raster.thuban: political polygon now
7537 filled transparent to have the raster image visible at once.
7538
7539 2003-05-21 Frank Koormann <[email protected]>
7540
7541 * Thuban/UI/mainwindow.py (MainWindow): Renamed _OnClose() back to
7542 OnClose() to keep in sync with extensions. Internally Thuban
7543 still uses "underscored" names.
7544
7545 2003-05-20 Jonathan Coles <[email protected]>
7546
7547 This puts back Raster layer support. These layers support projections
7548 through the GDAL library. Currently, the CVS version is being used.
7549 There are no Debian packages available although this may change soon.
7550 A GDAL driver was extended to support writing to memory rather to
7551 files.
7552
7553 There is still some work that needs to be done, such as some error
7554 handling when loading invalid images or when there is a problem
7555 projecting the image. This putback simply checks in the majority
7556 of the work.
7557
7558 * setup.py: Add gdalwarp library extension.
7559
7560 * Thuban/Model/layer.py (BaseLayer.HasClassification): New.
7561 Defaults to False, but can be overridden by subclasses if they
7562 support classification.
7563 (RasterLayer): New. Defines a new layer that represents an
7564 image.
7565
7566 * Thuban/Model/load.py (SessionLoader.__init__): Add rasterlayer
7567 tag handler.
7568 (SessionLoader.start_layer): Encode the filename.
7569 (SessionLoader.start_rasterlayer, SessionLoader.end_rasterlayer):
7570 New. Supports reading a rasterlayer tag.
7571
7572 * Thuban/Model/map.py (Map.BoundingBox): Fix typo in comment.
7573
7574 * Thuban/Model/save.py (XMLWriter.encode): Don't assume that we
7575 get a string in Latin1. If we get such as string convert it to
7576 unicode first, otherwise leave if alone before encoding.
7577 (SessionSaver.write_layer): Add support for writing both Layers
7578 and RasterLayers.
7579
7580 * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
7581 The right argument may not be a string, it could also be a Column.
7582
7583 * Thuban/UI/application.py (ThubanApplication.CreateMainWindow):
7584 Make initial window size 600x400. Fixes RTBug #1872.
7585
7586 * Thuban/UI/classifier.py (Classifier.__init__): Rearrange how
7587 the dialog is constructed so that we can support layers that
7588 do not have classifications.
7589 (Classifier._OnTry): Only build a classification if the layer
7590 supports one.
7591
7592 * Thuban/UI/legend.py: Change all checks that a layer is an
7593 instance of Layer into checks against BaseLayer.
7594 (LegendTree.__FillTreeLayer): Only add children to a branch if
7595 the layer supports classification.
7596
7597 * Thuban/UI/mainwindow.py (MainWindow.NewSession,
7598 MainWindow.OpenSession): Don't proceed with an action if the
7599 user chooses Cancel when they are asked to save changes.
7600 (MainWindow.AddRasterLayer): New. Open a dialog to allow the
7601 user to select an image file. Create a new RasterLayer and add
7602 it to the map.
7603
7604 * Thuban/UI/renderer.py (MapRenderer.render_map): Add support
7605 for rendering RasterLayer layers.
7606 (MapRenderer.draw_raster_layer): Actually method that calls
7607 the GDALWarp python wrapper and constructs an image from the
7608 data returned.
7609
7610 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Change the
7611 Choices symbols to match those used in the table query method.
7612 Replace deprecated method calls on table with new method names.
7613
7614 * Thuban/UI/view.py (MapCanvas.set_view_transform): Try to limit
7615 how small the scale can get. This still needs more testing.
7616
7617 * extensions/thuban/bmpdataset.cpp: New, but copied from GDAL.
7618 Provides a driver to output in .bmp format.
7619
7620 * extensions/thuban/cpl_mfile.cpp, extensions/thuban/cpl_mfile.h:
7621 New. Provides IO routines which write to memory, rather than a file.
7622
7623 * extensions/thuban/gdalwarp.cpp: New, but basically a direct copy
7624 of the gdalwarp utility provided in GDAL. Added function calls
7625 that can be accessed from python.
7626
7627 * Data/iceland_sample_raster.thuban: New. Sample file that uses
7628 a raster layer.
7629
7630 * Data/iceland/island.tfw, Data/iceland/island.tif: New. Raster
7631 layer image data.
7632
7633 * Doc/thuban.dtd: Added rasterlayer attribute definition.
7634
7635 * test/test_layer.py, test/test_load.py, test/test_save.py: Added
7636 tests associated with the raster layer code.
7637
7638 * test/test_transientdb.py
7639 (TestTransientTable.test_auto_transient_table_query): Added a test
7640 for using a Column object as the "right" parameter to a query.
7641
7642 2003-05-19 Frank Koormann <[email protected]>
7643
7644 * Thuban/version.py (get_changelog_date):
7645 Catch exceptions if ChangeLog does not exist.
7646
7647 * Thuban/UI/view.py (MapCanvas.Export): Bugfix
7648
7649 2003-05-19 Frank Koormann <[email protected]>
7650
7651 Extended version information for Thuban
7652
7653 * Thuban/version.py: New, version information for Thuban: Last
7654 modification date and last ChangeLog entry date.
7655
7656 * Thuban/UI/mainwindow.py (MainWindow.About()): Extended version
7657 information: Display Thuban, wxPython and Python version.
7658
7659 2003-05-16 Bernhard Herzog <[email protected]>
7660
7661 * Thuban/Model/save.py: Remove some unused imports including the
7662 __future__ import for nested_scopes as Thuban relies on Python 2.2
7663 now.
7664 (XMLWriter.encode): Remove the special case for a None argument.
7665 In the saver encode is always called with a string argument.
7666
7667 2003-05-16 Bernhard Herzog <[email protected]>
7668
7669 * Thuban/UI/__init__.py: Remove the work-around for the locale bug
7670 in wxPython (at least when usinvg wxGTK) prior to 2.4. The symptom
7671 of the bug was that e.g. float("1.2") would fail. Thuban now
7672 requires 2.4.x.
7673
7674 2003-05-16 Frank Koormann <[email protected]>
7675
7676 Printing enhancement and WMF export (under Win32)
7677
7678 * Thuban/UI/renderer.py (ExportRenderer): New, derived from
7679 ScreenRenderer. Renders Map, Legend and Scalebar for export.
7680 (PrinterRenderer): New, derived from ExportRenderer. Replaces the old
7681 PrintRender.
7682
7683 * Thuban/UI/view.py (MapPrintout.__init__): Enhanced parameter set
7684 to fullfil information needed for PrinterRenderer.
7685 (MapCanvas.Export): New. Export Map (currently only to WMF on Win32).
7686 (MapCanvas.Print): Adapted to new MapPrintout.
7687 (OutputTransform): General calculations to transform from canvas
7688 coordinates to export/printing devices.
7689
7690 * Thuban/UI/mainwindow.py (MainWindow.ExportMap()): New. Added also
7691 new method_command to call ExportMap, with platform dependency (only
7692 __WXMSW__)
7693
7694 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Position and Size
7695 of scalebar drawing area as new parameters.
7696
7697 * Thuban/Model/scalebar.py (roundInterval): round long instead of int
7698
7699 * Thuban/UI/legend.py (ScalebarBitmap.__SetScale):
7700 Update to extended scalebar.DrawScalebar header.
7701
7702 * test/test_export.py: New, test Thuban.UI.view.OutputTransform()
7703
7704 * test/test_scalebar.py: Made test executable as standalone.
7705
7706 2003-05-16 Bernhard Herzog <[email protected]>
7707
7708 * Thuban/Model/table.py (Table): Remove this compatibility alias
7709 for DBFTable.
7710
7711 * test/test_table.py: Import DBFTable as Table because that alias
7712 doesn't exist anymore.
7713
7714 * Thuban/UI/classgen.py: Remove some unused imports
7715
7716 2003-05-14 Jonathan Coles <[email protected]>
7717
7718 * Thuban/Model/classgen.py (ClassGenerator.GenSingletonsFromList):
7719 Fix docstring.
7720 (ClassGenerator.GenUniformDistribution): Fix spelling of method name.
7721 (ClassGenerator.GenQuantiles): Use the left/right brackets and min/max
7722 values of the supplied range to determine the beginning and end
7723 bounds of the generated classes.
7724
7725 * Thuban/Model/range.py (Range.number_re): Now accepts floats that
7726 do not have a leading 0 (.5 is now accepted as well as 0.5).
7727
7728 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Fix name of method
7729 call to ClassGenerator.GenUniformDistribution.
7730
7731 * Thuban/UI/projdialog.py (ProjFrame.__do_layout): Fix Windows
7732 layout bug with the 'Projection' label.
7733
7734 * test/support.py (FloatTestCase): New. Needed for the Range tests.
7735
7736 * test/test_range.py: New. Imported from SciParam.
7737
7738 2003-05-12 Jonathan Coles <[email protected]>
7739
7740 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Replace call
7741 to table.UniqueValues() with calls that retrieve all the values
7742 from the table. This will need to be replaced by a method on table
7743 which can simply return the list (perhaps more efficiently).
7744
7745 2003-05-12 Jonathan Coles <[email protected]>
7746
7747 The return value of ClassGenerator.CalculateQuantiles has changed.
7748 Refer to the documentation for details.
7749
7750 * test/test_classgen.py: Modified Quantile tests to use the
7751 new return values.
7752
7753 * Thuban/Model/classgen.py
7754 (ClassGenerator.GenQuantiles): Add comments describing the parameters,
7755 use new return values from CalculateQuantiles to produce the correct
7756 range bounds in the Classification.
7757 (ClassGenerator.CalculateQuantiles): Add more comments describing
7758 the return values and parameters. Make minor adjustments to improve
7759 the legibility of the code. Fix problem with adjusted not being set
7760 in most cases.
7761
7762 2003-05-12 Frank Koormann <[email protected]>
7763
7764 * Thuban/Model/save.py (XMLWriter.encode()): Explicite call to unicode
7765 and latin1. Fixes #1851 finally.
7766
7767 2003-05-09 Jonathan Coles <[email protected]>
7768
7769 * test/test_classgen.py: New. Tests the Quantile algorithm.
7770
7771 * Thuban/Model/classgen.py (ClassGenerator.CalculateQuantiles):
7772 Clean up debugging statement, add comments, fix a small bug in the
7773 returned adjusted percentiles.
7774
7775 2003-05-09 Jonathan Coles <[email protected]>
7776
7777 Introduces Range class from SciParam into the ClassGroupRange class,
7778 and such ranges can now be saved and loaded from disk.
7779
7780 Quantiles are now available in the Classification Generator.
7781
7782 Initial support for building Queries on a table. Doesn't do anything
7783 but run some tests.
7784
7785 * Thuban/Model/classification.py: Explicit imports.
7786 (ClassGroupRange): Use the Range class to store the underlying
7787 range information. The interface remains the same, except for
7788 GetRange(), and you can also supply a Range object as the min
7789 parameter to SetRange or __init__.
7790
7791 * Thuban/Model/load.py (XMLReader.encode): New. Encodes the given
7792 string appropriately for use in Thuban. Fixes RTbug #1851.
7793 (SessionLoader.end_projection): Handle the context of the
7794 projection tag a bit better by looking at what objects are not
7795 None. There was an assumption that a projection tag for a map
7796 could occur before any layers.
7797 (SessionLoader.start_clrange): Provide backward compatibility for
7798 reading min/max values as well as the new range parameter.
7799
7800 * Thuban/Model/map.py: Explicit imports.
7801
7802 * Thuban/Model/resource.py: Import _.
7803 (ProjFileSaver.write): write header using projfile.dtd.
7804
7805 * Thuban/Model/save.py: Explicit imports.
7806 (XMLWriter.encode): New. Encode the given string from a format
7807 used by Thuban into UTF-8. Fixes RTbug #1851.
7808
7809 * Thuban/UI/classgen.py: Explicit imports.
7810 (ClassGenDialog.__init__): Clean up the code and add support
7811 for Quantiles.
7812 (ClassGenDialog.OnOK): Add support for Quantiles.
7813 (GenQuantilesPanel): New. Input panel for Quantiles.
7814 (ClassGenerator, CustomRamp, MonochromaticRamp, GreyRamp, RedRamp,
7815 GreenRamp, BlueRamp, HotToColdRamp): Move to Thuban/Model/classgen.py
7816
7817 * Thuban/Model/classgen.py: New. Contains all the classes named above.
7818
7819 * Thuban/UI/classifier.py: Explicit imports.
7820 (ClassTable.GetValueAsCust, ClassTable.__ParseInput,
7821 ClassTable.SetValueAsCustom): Reworked to use new Range class.
7822
7823 * Thuban/UI/legend.py: Explicit imports.
7824
7825 * Thuban/UI/mainwindow.py: Add support for the Join Dialog. Added
7826 a Table menu and associated method calls.
7827 (MainWindow.choose_color): Removed. No longer needed.
7828
7829 * Thuban/UI/projdialog.py (ProjFrame.__VerifyButtons): Save button
7830 should be disabled if no projection is selected in the available
7831 list.
7832
7833 * Thuban/UI/renderer.py: Explicit imports.
7834
7835 * Thuban/UI/tableview.py (TableGrid.OnRangeSelect): Fix some issues
7836 with correctly selecting the rows and issuing the right events.
7837 Be sure to call Skip() to allow the grid to do some of its own
7838 handling which allows the rows to actually be selected.
7839 (LayerTableGrid.select_shapes): Rename from select_shape. Supports
7840 selecting multiple shapes.
7841 (LayerTableFrame): Support for building Queries.
7842 (LayerTableFrame.select_shapes): Allow multiple shapes to be selected.
7843
7844 * Thuban/UI/tree.py: Explicit imports.
7845
7846 * Thuban/UI/view.py (MapCanvas): Delegate "SelectedShapes" so the
7847 table view can call it.
7848
7849 * test/test_classification.py: Explicit imports.
7850 (TestClassification.test_ClassGroupRange): Fix test for new
7851 Range class.
7852
7853 * Doc/thuban.dtd: Add range parameter for clrange.
7854
7855 * Thuban/Model/range.py: Taken from SciParam. Used as the underlying
7856 object in ClassGroupRange, and also uesd for inputting ranges in
7857 the classifer table and elsewhere.
7858
7859 * Thuban/UI/join.py: New. Initial Join dialog. No real functionality
7860 yet.
7861
7862 2003-05-09 Frank Koormann <[email protected]>
7863
7864 * Thuban/UI/scalebar.py (DrawScaleBar): Draw only if interval > 0.0.
7865
7866 2003-05-08 Frank Koormann <[email protected]>
7867
7868 Coding style updates
7869
7870 * test/test_scalebar.py: Replaced tab indentation by spaces.
7871
7872 * Thuban/UI/scalebar.py: Explicit imports.
7873
7874 2003-05-08 Frank Koormann <[email protected]>
7875
7876 * Thuban/UI/scalebar.py
7877 (ScaleBar.DrawScalebar): Format string bug fixed.
7878
7879 2003-05-08 Frank Koormann <[email protected]>
7880
7881 Reorganization of scalebar component (no wx in Thuban/Model)
7882
7883 * Thuban/Model/scalebar.py: Rendering moved to Thuban/UI/scalebar.py
7884 (deriveInterval):
7885 Calculate scalebar interval and unit which fits in width for scale.
7886 (roundInterval): Round float.
7887
7888 * Thuban/UI/scalebar.py (ScaleBar): Scalebar rendering
7889
7890 * test/test_scalebar.py: Test for Thuban/Model/scalebar.py methods.
7891
7892 * Thuban/UI/legend.py: Import Thuban.UI.scalebar
7893
7894 2003-05-08 Frank Koormann <[email protected]>
7895
7896 * Thuban/UI/legend.py (ScalebarBitmap.SetCanvas):
7897 Initialize ScaleBar with canvas.map
7898
7899 * Thuban/Model/scalebar.py (ScaleBar.roundInterval()): New,
7900 round intervals to display smarter lengths
7901 (ScaleBar.DrawScalebar): Draw Scalebar only if the map contains a
7902 layer. If the maps has no projection applied grey the scalebar.
7903
7904 2003-05-07 Frank Koormann <[email protected]>
7905
7906 Basic Scalebar features added.
7907
7908 * Thuban/Model/scalebar.py (ScaleBar): New, scalebar rendering.
7909
7910 * Thuban/UI/legend.py (LegendPanel): Added scalebar bitmap
7911 (ScaleBarBitmap): New, links the scalebar bitmap with view messages
7912 and the renderer.
7913
7914 * Thuban/UI/view.py (MapCanvas.set_view_transform): Issue SCALE_CHANGED.
7915
7916 * Thuban/UI/messages.py: SCALE_CHANGED added.
7917
7918 2003-05-07 Bernhard Herzog <[email protected]>
7919
7920 * Thuban/Model/session.py (Session.__init__): New instance
7921 variable shapestores to hold a list of all open shapestore objects
7922 (Session.ShapeStores): New. Accessor method for the shapestores
7923 list.
7924 (Session._add_shapestore, Session._clean_weak_store_refs): New.
7925 Internal methods to maintain the shapestores list.
7926 (Session.Tables): New. Return all tables open in the session.
7927 (Session.OpenShapefile): Insert the new ShapeStore into the
7928 shapestores list.
7929
7930 * test/test_session.py (TestSessionSimple.test_initial_state): Add
7931 tests for ShapeStores and Tables
7932 (TestSessionWithContent.test_shape_stores)
7933 (TestSessionWithContent.test_tables): New. Test cases for
7934 ShapeStores and Tables
7935
7936 2003-05-07 Bernhard Herzog <[email protected]>
7937
7938 * Thuban/Model/transientdb.py (TransientTableBase.ReadRowAsDict):
7939 Add comments about the optimizations used.
7940 (AutoTransientTable.ReadValue, TransientTableBase.ReadValue): New.
7941 Implement the ReadValue table interface method.
7942
7943 * test/test_transientdb.py
7944 (TestTransientTable.run_iceland_political_tests)
7945 (TestTransientTable.test_transient_joined_table): Add tests for
7946 ReadValue
7947
7948 2003-05-07 Frank Koormann <[email protected]>
7949
7950 * Resources/Bitmaps/fulllayerextent.xpm,
7951 Resources/Bitmaps/fullselextent.xpm: Replaced the place holders with
7952 new icons.
7953
7954 2003-05-06 Bernhard Herzog <[email protected]>
7955
7956 * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
7957 New. Simply delegate to the transient table's version.
7958
7959 * test/test_transientdb.py
7960 (TestTransientTable.test_auto_transient_table_query): New. Test
7961 case for AutoTransientTable's SimpleQuery
7962
7963 2003-05-06 Bernhard Herzog <[email protected]>
7964
7965 * Thuban/Model/transientdb.py (TransientTableBase.SimpleQuery):
7966 Implement a simple query method for the query dialog
7967 (TransientTableBase.create): Add an INTEGER PRIMARY KEY that holds
7968 the row index or shapeid.
7969 (TransientTable.create): Insert the right value of the row index
7970 (TransientJoinedTable.create): Copy the row index of the left
7971 table to the joined result table
7972
7973 * test/test_transientdb.py
7974 (TestTransientTable.test_transient_table_read_twice): Fix
7975 doc-string
7976 (TestTransientTable.test_transient_table_query): New. Test for the
7977 SimpleQuery method
7978
7979 2003-05-06 Bernhard Herzog <[email protected]>
7980
7981 Convert all table users to use the new table interface. This only
7982 covers Thuban itself, not GREAT-ER or other applications built on
7983 Thuban yet, so the compatibility interface stays in place for the
7984 time being but it now issues DeprecationWarnings.
7985
7986 Finally, the new Table interface has a new method, HasColumn.
7987
7988 * Thuban/Model/table.py (OldTableInterfaceMixin): All methods
7989 issue deprecation warnings when they're. The warnings refer to the
7990 caller of the method.
7991 (OldTableInterfaceMixin.__deprecation_warning): New. Helper method
7992 for the deprecation warnings
7993
7994 * test/test_table.py: Ignore the deprecation warnings for the old
7995 table in the tests in this module. The purpose of the tests is to
7996 test the old interface, after all.
7997
7998 * test/test_transientdb.py
7999 (TestTransientTable.run_iceland_political_tests): Use the
8000 constants for the types. Add a test for HasColumn
8001 (TestTransientTable.test_transient_joined_table): Adapt to new
8002 table interface. Add a test for HasColumn
8003 (TestTransientTable.test_transient_table_read_twice): Adapt to new
8004 table interface
8005
8006 * Thuban/UI/tableview.py (DataTable.SetTable, DataTable.GetValue):
8007 Adapt to new table interface
8008
8009 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Adapt to
8010 new table interface
8011
8012 * Thuban/UI/controls.py (RecordListCtrl.fill_list)
8013 (RecordTable.SetTable): Adapt to new table interface
8014
8015 * Thuban/UI/classifier.py (Classifier.__init__)
8016 (Classifier.__init__): Adapt to new table interface
8017
8018 * Thuban/UI/classgen.py (ClassGenDialog.__init__)
8019 (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve): Adapt
8020 to new table interface
8021
8022 * Thuban/Model/transientdb.py (TransientTableBase.HasColumn)
8023 (AutoTransientTable.HasColumn): Implement the new table interface
8024 method
8025 (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ValueRange)
8026 (AutoTransientTable.UniqueValues): Adapt to new table interface
8027
8028 * Thuban/Model/layer.py (Layer.SetShapeStore, Layer.GetFieldType):
8029 Adapt to new table interface
8030
8031 * test/test_layer.py (TestLayer.open_shapefile): Helper method to
8032 simplify opening shapefiles a bit easier.
8033 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
8034 (TestLayer.test_point_layer): Use the new helper method
8035 (TestLayer.test_get_field_type): New. Test for the GetFieldType
8036 method
8037
8038 * test/test_dbf_table.py (TestDBFTable.test_has_column): Test for
8039 the new table method
8040
8041 * test/test_memory_table.py (TestMemoryTable.test_has_column):
8042 Test for the new table method HasColumn
8043
8044 2003-05-06 Jonathan Coles <[email protected]>
8045
8046 Addresses the "Selection Extent" wish of RTbug #1787.
8047
8048 * Resources/Bitmaps/fulllayerextent.xpm,
8049 Resources/Bitmaps/fullselextent.xpm: Bitmaps for layer and selection
8050 extent. These are just place holders for the real bitmaps.
8051
8052 * Thuban/Model/layer.py (Shape): Since a Shape is immutable only
8053 calculate the bounding box once (the first time compute_bbox() is
8054 called).
8055 (Layer.ShapesBoundingBox): New. Given a list of shape ids, return
8056 the bounding box for the shapes in lat/long coordinates.
8057
8058 * Thuban/UI/mainwindow.py: Added new "Full selection extent" menu
8059 option.
8060 (MainWindow.has_selected_shapes): New. Returns true if there are
8061 any selected shapes.
8062 (MainWindow.FullSelectionExtent): New. Calls
8063 MapCanvas.FitSelectedToWindow() when the user selects the menu option.
8064 (_has_selected_shapes): New. Returns true if there are any
8065 selected shapes.
8066
8067 * Thuban/UI/selection.py (Selection.HasSelectedShapes): New. Returns
8068 true if there are any selected shapes.
8069
8070 * Thuban/UI/view.py (MapCanvas): Added delegated method
8071 HasSelectedShapes.
8072 (MapCanvas.FitSelectedToWindow): New. Centers and scales any selected
8073 shapes on the canvas using the map projection (if any).
8074
8075 * test/test_layer.py (TestLayer.test_arc_layer): Add some tests
8076 for Layer.ShapesBoundingBox().
8077
8078 2003-05-06 Bernhard Herzog <[email protected]>
8079
8080 * Resources/Projections/defaults.proj: Fix spelling of Mercator
8081
8082 2003-05-05 Jonathan Coles <[email protected]>
8083
8084 Addresses the "Full Layer Extent" wish of RTbug #1787.
8085
8086 * Resources/Projections/defaults.proj: Added UK National Grid.
8087
8088 * Thuban/UI/mainwindow.py: Added new "Full layer extent" menu option.
8089 (MainWindow.FullLayerExtent): New. Calls MapCanvas.FitLayerToWindow()
8090 when the user selects the menu option.
8091
8092 * Thuban/UI/view.py (MapCanvas.FitLayerToWindow): New. Centers and
8093 scales the given layer on the canvas using the map projection.
8094
8095 2003-05-05 Bernhard Herzog <[email protected]>
8096
8097 Convert the table implementations to a new table interface. All
8098 tables use a common mixin class to provide backwards compatibility
8099 until all table users have been updated.
8100
8101 * Thuban/Model/table.py (OldTableInterfaceMixin): Mixin class to
8102 provide backwards compatibility for table classes implementing the
8103 new interface
8104 (DBFTable, MemoryTable): Implement the new table interface. Use
8105 OldTableInterfaceMixin as base for compatibility
8106 (DBFColumn, MemoryColumn): New. Column description for DBFTable
8107 and MemoryTable resp.
8108
8109 * test/test_dbf_table.py: New. Test cases for the DBFTable with
8110 the new table interface.
8111
8112 * test/test_memory_table.py: New. Test cases for the MemoryTable
8113 with the new table interface.
8114
8115 * test/test_table.py: Document the all tests in this file as only
8116 for backwards compatibility. The equivalent tests for the new
8117 interface are in test_memory_table.py and test_dbf_table.py
8118 (MemoryTableTest.test_read): field_info should be returning tuples
8119 with four items
8120 (MemoryTableTest.test_write): Make doc-string a more precise.
8121
8122 * Thuban/Model/transientdb.py (TransientTableBase): Convert to new
8123 table interface. Derive from from OldTableInterfaceMixin for
8124 compatibility.
8125 (TransientTableBase.create): New intance variable column_map to
8126 map from names and indices to column objects
8127 (TransientTable.create): Use the new table interface of the input
8128 table
8129 (AutoTransientTable): Convert to new table interface. Derive from
8130 from OldTableInterfaceMixin for compatibility.
8131 (AutoTransientTable.write_record): Removed. It's not implemented
8132 yet and we still have to decide how to handle writing with the new
8133 table and data framework.
8134
8135 * test/test_transientdb.py
8136 (TestTransientTable.run_iceland_political_tests)
8137 (TestTransientTable.test_transient_joined_table): Use the new
8138 table interface
8139
8140 2003-05-05 Jonathan Coles <[email protected]>
8141
8142 This is namely a collection of UI updates to improve user interactivity.
8143 Tabbing between controls now exists and you can use ESC to close dialog
8144 boxes; ENTER will active the default button.
8145
8146 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Rearrange the
8147 order that the controls are created so that tabbing works correctly.
8148 (ClassGenDialog.OnOK): Renamed from _OnGenerate() so that the
8149 wxDialog can handle the default button correctly.
8150 (ClassGenDialog.OnCancel): Renamed from _OnCloseBtn() for the
8151 same reasons as for OnOK.
8152 (GenUniformPanel._OnRetrieve): Call wxBeginBusyCursor/wxEndBusyCursor
8153 when we ask the table for the maximum/minimum values of a field
8154 which could take a very long time.
8155
8156 * Thuban/UI/classifier.py (Classifier.__init__): Rearrange the
8157 order that the controls are created so that tabbing works correctly.
8158 (SelectPropertiesDialog.__init__): Rearrange the order that the
8159 controls are created so that tabbing works correctly.
8160
8161 * Thuban/UI/dialogs.py: Copied NonModalDialog box and changed it
8162 to derive from a wxDialog but behave like the original implementation
8163 which was derived from a wxFrame. wxDialog provides useful key
8164 handling functionality like ESC calling OnCancel and ENTER calling
8165 OnOK which is lost with wxFrame.
8166
8167 * Thuban/UI/mainwindow.py: Add "..." to menu items that will open
8168 new dialogs.
8169
8170 * Thuban/UI/projdialog.py (ProjFrame.__init__): Rearrange the
8171 order that the controls are created so that tabbing works correctly.
8172 (ProjFrame.OnApply): Renamed from _OnTry() to use wxDialog behaviour.
8173 (ProjFrame.OnOK): Renamed from _OnOK() to use wxDialog behaviour.
8174 (ProjFrame.OnCancel): Renamed from _OnClose() to use wxDialog behaviour.
8175 (ProjPanel.__init__): Add "Airy" to the list of ellipsoids so we
8176 can provide the "UK National Grid" as a default projection.
8177 (UTMPanel.__init__): Rearrange the order that the controls are
8178 created so that tabbing works correctly.
8179
8180 2003-05-05 Bernhard Herzog <[email protected]>
8181
8182 * extensions/thuban/wxproj.cpp: Fix some of the comments.
8183 (project_point): If a map projection but no layer projection is
8184 given, convert degrees to radians before applying the map
8185 projection.
8186
8187 * Thuban/UI/tableview.py (TableGrid.disallow_messages)
8188 (TableGrid.allow_messages): New methods to make it possible to
8189 inhibit message sending.
8190 (TableGrid.issue): Only send the message if not inhibited.
8191 (LayerTableGrid.select_shape): Use the new methods to make sure
8192 that no ROW_SELECTED message is sent while we're updating the
8193 selected rows to match the selected shapes.
8194
8195 2003-05-02 Jan-Oliver Wagner <[email protected]>
8196
8197 Implementation of MemoryTable.
8198
8199 * Thuban/Model/table.py (MemoryTable): New. Quite simple table
8200 implementation that operates on a list of tuples. All of the data
8201 are kept in the memory.
8202
8203 * test/test_table.py (MemoryTableTest): New.
8204
8205 * test/test_transientdb.py (SimpleTable): Removed.
8206 (TestTransientTable.test_transient_joined_table,
8207 (TestTransientTable.test_transient_table_read_twice): Replaced
8208 SimpleTable by MemoryTable.
8209
8210 2003-04-30 Jonathan Coles <[email protected]>
8211
8212 * Data/iceland_sample.thuban: Now contains correct projections
8213 for each of the layers.
8214
8215 * Resources/Projections/defaults.proj: Geographic projection
8216 contains unit conversion parameter.
8217
8218 2003-04-30 Jonathan Coles <[email protected]>
8219
8220 The most important part of this putback is the projection changes.
8221 It should now be possible to specify the projection that a layer
8222 is in and then specify a different projection for the map. The
8223 projection dialog has an extra parameter for a geographic projection
8224 which lets the user select if the input is in degrees or radians.
8225
8226 * Thuban/Model/layer.py (Layer.ShapesInRegion): Fix docstring
8227 to say that the parameter is a tuple of unprojected
8228 points (which is what the callers to this method were assuming).
8229 Also, since the points are unprojected we need to projected them.
8230
8231 * Thuban/UI/legend.py (LegendTree.MoveCurrentItemUp,
8232 LegendTree.MoveCurrentItemDown): If the layer or any of the layer's
8233 groups are selected, move the layer up/down. Fixes RTbug #1833.
8234
8235 * Thuban/UI/mainwindow.py: Move menu item map_rename up.
8236
8237 * Thuban/UI/projdialog.py (ProjFrame._OnSave): Add missing
8238 parameter in call to SetClientData.
8239 (GeoPanel): Add support for selecting the units that the
8240 source data is in (Radians or Degrees).
8241
8242 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Optimize
8243 the rendering loop by reducing the number of if's, removing the
8244 unnecessary try/except block, and checking if the old group
8245 is the same as the new one (which happens a lot if there is
8246 no classification, or lots of shapes are in the same group).
8247
8248 * Thuban/UI/view.py (MapCanvas.OnPaint): Add a try/except block
8249 around the redraw routine to try to catch problems that the user
8250 may create by selecting invalid projections for the data set and
8251 map. Clears the display if there are any problems and prints the
8252 error.
8253 (MapCanvas.do_redraw): Use DC.Clear() instead of drawing a filled
8254 rectangle.
8255
8256 * extensions/thuban/wxproj.cpp (project_point): First invert the
8257 supplied point (which should be in projected coordinates) using
8258 the layer's projection and then project the point using the
8259 map's projection.
8260 (project_points): Use project_point() to project each point.
8261
8262 2003-04-30 Jan-Oliver Wagner <[email protected]>
8263
8264 * Thuban/Model/layer.py (Layer.SetShapeStore): Fixed a bug:
8265 don't set the Classification to None if the classfication field
8266 is None (ie only a DEFAULT).
8267
8268 2003-04-30 Bernhard Herzog <[email protected]>
8269
8270 * Thuban/UI/view.py: Fix some typos.
8271
8272 * Thuban/UI/mainwindow.py (MainWindow.identify_view_on_demand): Do
8273 not pop up the dialog if the selection becomes empty (this could
8274 happen if e.g. a new selection is opened while the identify tool
8275 is active and dialog had been closed)
8276
8277 2003-04-30 Bernhard Herzog <[email protected]>
8278
8279 * Thuban/Model/transientdb.py (TransientTableBase.__init__): New
8280 instance variable read_record_last_result
8281 (TransientTableBase.read_record): Make sure reading the same
8282 record twice works. The implementation uses the new instance
8283 variable read_record_last_result
8284
8285 * test/test_transientdb.py
8286 (TestTransientTable.test_transient_table_read_twice): New test
8287 case for the above bug-fix.
8288
8289 2003-04-29 Jonathan Coles <[email protected]>
8290
8291 * Thuban/common.py: Removed. No longer needed Str2Num. RTbug #1832.
8292
8293 * Thuban/UI/classgen.py: Remove all uses of Str2Num.
8294
8295 * Thuban/UI/classifier.py: Remove all uses of Str2Num.
8296 (ClassTable.SetValueAsCustom): Rename keyword argument in
8297 ClassGroup* constructors to match argument name.
8298
8299 2003-04-29 Bernhard Herzog <[email protected]>
8300
8301 * Thuban/Model/session.py (Session.Destroy): Explicitly close the
8302 transient DB if it exists to make sure it doesn't leave a journal
8303 file in the temp directory.
8304
8305 * Thuban/Model/transientdb.py (TransientDatabase.close): Set
8306 self.conn to None after closing the connection to make sure it's
8307 not closed twice
8308
8309 2003-04-29 Jonathan Coles <[email protected]>
8310
8311 Add a visible parameter in the layer XML tag. The default value is
8312 "true". If anything other than "false" is specified we also assume
8313 "true". Addresses RTbug #1025.
8314
8315 * Doc/thuban.dtd: Add visible parameter to a layer.
8316
8317 * Thuban/Model/layer.py (BaseLayer.__init__): Change default value
8318 of visible from 1 to True.
8319 (Layer.__init__): Change default value of visible from 1 to True.
8320
8321 * Thuban/Model/load.py (SessionLoader.start_layer): Read visible
8322 parameter.
8323
8324 * Thuban/Model/save.py (SessionSaver.write_layer): Save visible
8325 parameter.
8326
8327 * test/test_load.py: Add new test data contents_test_visible.
8328 (LoadSessionTest.setUp): save test data.
8329 (LoadSessionTest.testLayerVisibility): Test if the visible flag
8330 is loaded correctly.
8331
8332 * test/test_save.py (SaveSessionTest.testSingleLayer): Add test
8333 for saving an invisible layer.
8334
8335 2003-04-29 Jonathan Coles <[email protected]>
8336
8337 * Thuban/UI/mainwindow.py (MainWindow.SetMap): Look up the
8338 legend dialog box and tell it to change its map to the one
8339 supplied to SetMap(). Fixes RTbug #1770.
8340
8341 2003-04-29 Bernhard Herzog <[email protected]>
8342
8343 Next step of table implementation. Introduce a transient database
8344 using SQLite that some of the data is copied to on demand. This
8345 allows us to do joins and other operations that require an index
8346 for good performance with reasonable efficiency. Thuban now needs
8347 SQLite 2.8.0 and pysqlite 0.4.1. Older versions may work but I
8348 haven't tested that.
8349
8350 * Thuban/Model/transientdb.py: New. Transient database
8351 implementation.
8352
8353 * test/test_transientdb.py: New. Tests for the transient DB
8354 classes.
8355
8356 * Thuban/Model/session.py (AutoRemoveFile, AutoRemoveDir): New
8357 classes to help automatically remove temporary files and
8358 directories.
8359 (Session.__init__): New instance variables temp_dir for the
8360 temporary directory and transient_db for the SQLite database
8361 (Session.temp_directory): New. Create a temporary directory if not
8362 yet done and return its name. Use AutoRemoveDir to have it
8363 automatically deleted
8364 (Session.TransientDB): Instantiate the transient database if not
8365 done yet and return it.
8366
8367 * Thuban/Model/data.py (ShapefileStore.__init__): Use an
8368 AutoTransientTable so that data is copied to the transient DB on
8369 demand.
8370 (SimpleStore): New class that simply combines a table and a
8371 shapefile
8372
8373 * Thuban/Model/table.py (Table, DBFTable): Rename Table into
8374 DBFTable and update its doc-string to reflect the fact that this
8375 is only the table interface to a DBF file. Table is now an alias
8376 for DBFTable for temporary backwards compatibility.
8377
8378 * Thuban/UI/application.py (ThubanApplication.OnExit): Make sure
8379 the last reference to the session goes away so that the temporary
8380 files are removed properly.
8381
8382 * test/test_load.py (LoadSessionTest.tearDown): Remove the
8383 reference to the session to make sure the temporary files are
8384 removed.
8385
8386 2003-04-29 Bernhard Herzog <[email protected]>
8387
8388 * Thuban/Model/load.py (XMLReader.__init__, XMLReader.read): Turn
8389 the __parser instance variable into a normal local variable in
8390 read. It's only used there and read will never be called more than
8391 once. Plus it introduces a reference cycle that keeps can keep the
8392 session object alive for a long time.
8393
8394 2003-04-29 Jonathan Coles <[email protected]>
8395
8396 * Thuban/Model/proj.py (Projection): Removed Set*() methods to make
8397 Projection an immutable item. Fixes RTbug #1825.
8398 (Projection.__init__): Initialize instance variables here.
8399 (ProjFile.Replace): New. Replace the given projection object with
8400 the new projection object. This solves the problem of needing the
8401 mutator Projection.SetProjection() in the ProjFrame class and
8402 allows a projection to change parameters without changing its
8403 location in the file.
8404
8405 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs): Dialog should
8406 be of type wxSAVE and should verify overwriting a file.
8407
8408 * Thuban/UI/projdialog.py (ProjFrame._OnSave): Use the new
8409 ProjFile.Replace() method instead of the mutator
8410 Projection.SetProjection(). Also requires that we reassign the
8411 client data to the new projection.
8412
8413 * test/test_proj.py (TestProjection.test): Test GetName() and
8414 GetAllParameters()
8415 (TestProjFile.test): Remove tests for Set*() methods. Add tests
8416 for Replace().
8417
8418 2003-04-25 Jonathan Coles <[email protected]>
8419
8420 * Thuban/Model/save.py (SessionSaver.write_projection): Make sure
8421 to save the name of the projection.
8422
8423 * test/test_save.py (SaveSessionTest.testLayerProjection): New
8424 test to verify layer projections are saved correctly.
8425
8426 2003-04-25 Jonathan Coles <[email protected]>
8427
8428 * Thuban/Model/proj.py (Projection.SetName): Set the name
8429 to "Unknown" if name is None.
8430 (Projection.SetAllParameters): New. Set the projection's
8431 parameter list to the one supplied.
8432 (Projection.SetProjection): New. Set the projection's
8433 properties to those of the supplied Projection.
8434
8435 * Thuban/UI/mainwindow.py (MainWindow.MapProjection): Set
8436 the dialog title to include the map's title.
8437 (MainWindow.LayerProjection): Set the dialog title to include
8438 the layer's title.
8439
8440 * Thuban/UI/projdialog.py (ProjFrame.__ShowError): Consolidate
8441 error dialogs into a single method call.
8442 (ProjFrame.__VerifyButtons): Add more states to check.
8443 (ProjFrame.__GetProjection): Return the current state of an
8444 edited projection or None.
8445 (ProjFrame.__FillAvailList): Remove checks for states that
8446 shouldn't exist.
8447 (ProjFrame._OnNew): Clear all selected items and supply
8448 a projection panel if necessary.
8449
8450 * test/test_proj.py (TestProjFile.test): Add tests for
8451 ProjFile.SetAllParameters, ProjFile.SetProjection,
8452 ProjFile.SetName.
8453
8454 2003-04-25 Jonathan Coles <[email protected]>
8455
8456 * Thuban/UI/projdialog.py (ProjFrame.__FillAvailList): Now
8457 takes an optional argument to select the current projection.
8458 This does not guarantee that the item is visible due to
8459 limited wxWindows functionality. Fixes RTBug #1821.
8460
8461 2003-04-25 Jonathan Coles <[email protected]>
8462
8463 * Thuban/Model/load.py (SessionLoader.start_projection): Remember
8464 the projection name and use it when constructing the Projection
8465 object.
8466
8467 * Thuban/Model/proj.py (Projection.__init__): Change the default
8468 value for 'name' to None and then test if name is equal to None
8469 in the body of the constructor. This way the caller doesn't have to
8470 know what the default value should be. Namely, useful in load.py
8471 where we have to pick a default value if the 'name' parameter
8472 doesn't exist in the XML file.
8473
8474 * test/test_load.py (LoadSessionTest.testLayerProjection): New.
8475 Tests a file where a layer has a projection.
8476
8477 2003-04-25 Jonathan Coles <[email protected]>
8478
8479 * Thuban/Model/layer.py (Layer.TreeInfo): Add an item to the
8480 tree for projection information.
8481
8482 * Thuban/Model/load.py (XMLReader.GetFilename): Renamed from
8483 XMLReader.GetFileName.
8484 (SessionLoader): Added support for loading projection tags that
8485 appear inside a layer.
8486
8487 * Thuban/Model/proj.py (ProjFile): Document the class. Move
8488 back to using a list because the order of the projections in
8489 the file is important to maintain. Fixes RTbug #1817.
8490
8491 * Thuban/Model/resource.py: Rename calls to ProjFile.GetFileName
8492 to ProjFile.GetFilename.
8493
8494 * Thuban/Model/save.py (SessionSaver.write_layer): Save projection
8495 information.
8496
8497 * Thuban/UI/projdialog.py (ProjFrame._OnAddToList): Renamed from
8498 ProjFrame._OnSaveAs. Removed old dead code from previous
8499 implementation.
8500 (ProjFrame._OnExport): Add support for exporting more than one
8501 projection to a single file.
8502 (ProjFrame.__FillAvailList): use string formatting (% operator)
8503 to build strings that are (partly) translated. Fixes RTbug #1818.
8504
8505 * test/test_proj.py (TestProjFile.test): New. Tests the base ProjFile
8506 class.
8507
8508 2003-04-24 Bernhard Herzog <[email protected]>
8509
8510 * po/es.po: Updated Spanish translation by Daniel Calvelo Aros
8511
8512 * po/fr.po: New. French translation by Daniel Calvelo Aros
8513
8514 * Thuban/UI/projdialog.py (ProjFrame._OnSaveAs): Don't translate
8515 empty strings.
8516
8517 2003-04-24 Jonathan Coles <[email protected]>
8518
8519 * Thuban/Model/layer.py (Layer.GetProjection): New. Needed to
8520 implement the interface that the ProjFrame dialog expects.
8521
8522 * Thuban/Model/proj.py (Projection.SetName): New. Allows the
8523 name of the projection to be changed.
8524 (ProjFile): Use a dictionary instead of a list so that removing
8525 projections is easier and we are sure about uniqueness.
8526 (ProjFile.Remove): Remove the given projection object.
8527
8528 * Thuban/Model/resource.py (GetSystemProjFiles, GetUserProjFiles):
8529 Return a list with only one projection file instead of searching for
8530 any projection file. This simplifies many things if the user can
8531 only have one system file and one user file.
8532
8533 * Thuban/UI/classgen.py: Change all references to
8534 genCombo to genChoice.
8535
8536 * Thuban/UI/mainwindow.py: Add a Projection option under the
8537 layer menu.
8538 (MainWindow.LayerProjection): New. Open up a projection window
8539 for a layer.
8540
8541 * Thuban/UI/projdialog.py: Large changes to how the dialog is
8542 laid out. Use three panels instead of one. One for the list of
8543 projections, one for the edit controls, and one for the buttons.
8544 Fixed resizing problems so that the dialog resizes correctly
8545 when the projection panel changes. Added import/export, save, and
8546 new buttons/functionality.
8547
8548 2003-04-24 Bernhard Herzog <[email protected]>
8549
8550 First step towards table management. Introduce a simple data
8551 abstraction so that we replace the data a layer uses more easily
8552 in the next step.
8553
8554 * Thuban/Model/data.py: New file with a simple data abstraction
8555 that bundles shapefile and dbffile into one object.
8556
8557 * Thuban/Model/session.py (Session.OpenShapefile): New method to
8558 open shapefiles and return a shape store object
8559
8560 * Thuban/Model/layer.py (Layer.__init__): Pass the data as a store
8561 object instead of a shapefile filename. This introduces a new
8562 instance variable store holding the datastore. For intermediate
8563 backwards compatibility keep the old instance variables.
8564 (open_shapefile): Removed. No longer needed with the shape store.
8565 (Layer.SetShapeStore, Layer.ShapeStore): New methods to set and
8566 get the shape store used by a layer.
8567 (Layer.Destroy): No need to explicitly destroy the shapefile or
8568 table anymore.
8569
8570 * Thuban/UI/mainwindow.py (MainWindow.AddLayer)
8571 (MainWindow.AddLayer): Use the session's OpenShapefile method to
8572 open shapefiles
8573
8574 * Thuban/Model/load.py (ProcessSession.start_layer): Use the
8575 session's OpenShapefile method to open shapefiles
8576
8577 * test/test_classification.py
8578 (TestClassification.test_classification): Use the session's
8579 OpenShapefile method to open shapefiles and build the filename in
8580 a more platform independed way
8581
8582 * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
8583 Implement to have a session to use in the tests
8584 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
8585 (TestLayer.test_point_layer, TestLayer.test_empty_layer): Use the
8586 session's OpenShapefile method to open shapefiles
8587 (TestLayerLegend.setUp): Instantiate a session so that we can use
8588 it to open shapefiles.
8589 (TestLayerLegend.tearDown): Make sure that all references to
8590 layers and session are removed otherwise we may get a resource
8591 leak
8592
8593 * test/test_map.py (TestMapAddLayer.test_add_layer)
8594 (TestMapWithContents.setUp): Instantiate a session so that we can
8595 use it to open shapefiles.
8596 (TestMapWithContents.tearDown): Make sure that all references to
8597 layers, maps and sessions are removed otherwise we may get a
8598 resource leak
8599 ("__main__"): use support.run_tests() so that more info about
8600 uncollected garbage is printed
8601
8602 * test/test_save.py (SaveSessionTest.testSingleLayer): Use the
8603 session's OpenShapefile method to open shapefiles
8604 ("__main__"): use support.run_tests() so that more info about
8605 uncollected garbage is printed
8606
8607 * test/test_selection.py (TestSelection.tearDown): Make sure that
8608 all references to the session and the selection are removed
8609 otherwise we may get a resource leak
8610 (TestSelection.get_layer): Instantiate a session so that we can
8611 use it to open shapefiles.
8612 ("__main__"): use support.run_tests() so that more info about
8613 uncollected garbage is printed
8614
8615 * test/test_session.py (TestSessionBase.tearDown)
8616 (TestSessionWithContent.tearDown): Make sure that all references
8617 to the session and layers are removed otherwise we may get a
8618 resource leak
8619 (TestSessionWithContent.setUp): Use the session's OpenShapefile
8620 method to open shapefiles
8621
8622 2003-04-24 Jonathan Coles <[email protected]>
8623
8624 * Thuban/Model/load.py (XMLReader.read): Should have been checking
8625 if the file_or_filename object had the 'read' attribute.
8626
8627 2003-04-23 Jonathan Coles <[email protected]>
8628
8629 * Thuban/Model/resource.py: Fixes RTbug #1813.
8630 (ReadProjFile): Add documentation about which exceptions are raised.
8631 Always pass the exceptions up to the caller.
8632 (GetProjFiles): If the directory can't be read return an empty list.
8633 If any of the proj files can't be read skip that file and go
8634 on to the next one.
8635
8636 * test/test_proj.py: Added test cases to handle nonexistent files,
8637 unreadable files, and files that don't parse correctly.
8638
8639 2003-04-23 Jonathan Coles <[email protected]>
8640
8641 Projection dialog. Allows the user to select from a list
8642 of projection templates and optionally edit them and save new ones.
8643
8644 * Thuban/UI/projdialog.py (ProjFrame): New. Main dialog.
8645 (ProjPanel): Base class for projection specific panels.
8646 (TMPanel): Projection panel for Transverse Mercartor.
8647 (UTMPanel): Projection panel for Universal Transverse Mercartor.
8648 (LCCPanel): Projection panel for Lambert Conic Conformal.
8649 (GeoPanel): Projetion panel for Geographic Projection.
8650
8651 2003-04-23 Jonathan Coles <[email protected]>
8652
8653 * Thuban/Model/load.py (XMLReader): Renamed from XMLProcessor to
8654 promote symmetry. There now exists XMLReader and XMLWriter.
8655 (XMLReader.read): New. Call to read the given file descriptor or
8656 filename.
8657 (XMLReader.close): New. Make sure the file is closed.
8658 (XMLReader.GetFileName): New. Return just the file name that is being
8659 read from.
8660 (XMLReader.GetDirectory): New. Return just the directory of the file
8661 that is being read.
8662 (XMLReader.AddDispatchers): New. Take a dictionary which contains
8663 the names of functions to call as the XML tree is parsed.
8664 (XMLReader.startElementNS): Updated to use new dispatcher dictionary.
8665 (XMLReader.endElementNS): Updated to use new dispatcher dictionary.
8666 (SessionLoader): Removed class variables start_dispatcher and
8667 end_dispatcher since this functionality is now part of a class
8668 instance. Fixes RTbug #1808.
8669 (SessionLoader.__init__): Add dispatcher functions.
8670 (load_xmlfile): Code was moved into the XMLReader.read().
8671 (load_session): Use modified SessionLoader.
8672
8673 * Thuban/Model/map.py (Map.GetProjection): New. Returns the
8674 map's projection.
8675
8676 * Thuban/Model/proj.py (Projection.GetParameters): Renamed to
8677 GetAllParameters.
8678 (Projection.GetParameter): Returns the value for the given parameter.
8679
8680 * Thuban/Model/resource.py: Use XMLReader and XMLWriter.
8681 (GetProjFiles): Renamed from GetProjections. Now returns a list
8682 of ProjFile objects.
8683 (GetSystemProjFiles): Renamed from GetSuppliedProjections. Returns
8684 a list of ProjFile objects whose files are not user defined.
8685 (GetUserProjFiles): Renamed from GetUserProjections. Returns a
8686 list of ProjFile objects whose files are user defined.
8687 (ProjFileReader): Extend new XMLReader.
8688
8689 * Thuban/Model/save.py (XMLWriter): Renamed from XMLSaver to
8690 promote symmetry.
8691
8692 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Use a wxChoice
8693 control instead of a wxComboBox. wxChoice controls do not generate
8694 events as the uses highlights possible choices which fixes problems
8695 with resizing the dialog when the use selects an option.
8696
8697 * Thuban/UI/classifier.py (Classifier.__init__): Use a wxChoice
8698 control instead of a wxComboBox.
8699
8700 * Thuban/UI/mainwindow.py (MainWindow.Projection): Use new projection
8701 dialog.
8702
8703 * test/test_proj.py (TestProjection.test): New tests for GetParameter
8704 method.
8705
8706 2003-04-22 Bernhard Herzog <[email protected]>
8707
8708 * Thuban/UI/mainwindow.py: Remove some unused imports and global
8709 constants
8710
8711 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
8712 (IdentifyGridCtrl.selected_shape): Use table, not shapetable.
8713
8714 2003-04-17 Bernhard Herzog <[email protected]>
8715
8716 * Thuban/Model/layer.py: Don't import LAYER_LEGEND_CHANGED.
8717 (Layer): Update doc-string since LAYER_LEGEND_CHANGED is not used
8718 anymore.
8719 (Layer.BoundingBox, Layer.GetFieldType, Layer.NumShapes)
8720 (Layer.ShapeType, Layer.Shape): No need to call
8721 self.open_shapefile since it's always called in __init__
8722
8723 * Thuban/UI/application.py (ThubanApplication.MainLoop): Removed.
8724 In wxPython 2.4 there's no need to extend MainLoop anymore since
8725 wxPython itself makes sure OnExit is called.
8726
8727 2003-04-16 Jonathan Coles <[email protected]>
8728
8729 Initial putback of projection management code. Includes new
8730 classes to read and write projection files. The current load
8731 and save classes were abstracted a bit so they could be reused.
8732 The Projection class was extended to provide new methods and
8733 have a name.
8734
8735 * Thuban/Model/load.py (XMLProcessor): New. Contains all the
8736 general XML reading methods that were part of ProcessSession.
8737
8738 * Thuban/Model/proj.py (Projection.__init__): Accepts an optional
8739 name.
8740 (ProjFile): New. Represents a file that contains projection
8741 information.
8742
8743 * Thuban/Model/resource.py: New. Contains general utilities
8744 for read and writing projection files.
8745
8746 * Thuban/Model/save.py (XMLSaver): New. Contains all the
8747 general XML writing methods that were part of SessionSaver.
8748 (SessionSaver): Renamed from Saver.
8749
8750 * test/test_proj.py: New test cases for the projection
8751 file read and write functions.
8752
8753 2003-04-16 Jonathan Coles <[email protected]>
8754
8755 * Thuban/Model/classification.py: Use repr() around values
8756 in the ClassGroup*.__repr__() methods so it is clearer when
8757 a value is a string and when it is a number.
8758
8759 * test/test_load.py: Rework the classification test to test
8760 that we can load old files.
8761 (testLabels): Test a file where the groups have labels.
8762
8763 2003-04-16 Bernhard Herzog <[email protected]>
8764
8765 Safer implementation of the performance enhancements of the
8766 low-level renderer:
8767
8768 * extensions/thuban/wxproj.cpp (extract_projection)
8769 (extract_pointer): Rename extract_projection to extract_pointer
8770 and redefine its purpose to return the pointer stored in a CObject
8771 returned by the object's cobject method. Update all callers.
8772 (s_draw_info, free_draw_info, draw_polygon_init): Implement the
8773 handling of these low-level parameters so that each s_draw_info
8774 instance is handled as a CObject at python level that also
8775 contains real references to the actual python objects which
8776 contain the values in the struct. Add free_draw_info as the
8777 destructor.
8778 (draw_polygon_shape): Add the py_draw_info parameter which must a
8779 cobject containing an s_draw_info pointer.
8780
8781 * Thuban/UI/renderer.py (MapRenderer.polygon_render_param): New
8782 method to instantiat the low-level render parameter
8783 (MapRenderer.draw_shape_layer): Use the new method. Remove some
8784 commented out code.
8785 (MapRenderer.draw_polygon_shape): Make the first parameter not the
8786 layer but the low-level render parameter
8787 (ScreenRenderer.draw_shape_layer): Use the low-level render
8788 parameter.
8789
8790 2003-04-15 Jonathan Coles <[email protected]>
8791
8792 * Thuban/Model/classification.py: Implemented __repr__ for
8793 the ClassGroup* classes to make debugging a bit easier.
8794 (ClassGroup.SetLabel): Check that the string is an instance
8795 of StringTypes not StringType. Accounts for Unicode strings.
8796
8797 * Thuban/Model/color.py: Implemented __repr__ to make
8798 debugging a bit easier.
8799
8800 * Thuban/Model/save.py (Saver.write_classification): Need to
8801 save the group label.
8802
8803 * test/test_load.py (testClassification): New. Loads the
8804 iceland_sample_test.thuban file and checks if it was loaded
8805 correctly.
8806
8807 2003-04-15 Jonathan Coles <[email protected]>
8808
8809 * extensions/thuban/wxproj.cpp (draw_polygon_init): New. Used
8810 to improve rendering performance by initializing the variables
8811 that are not change each time draw_polygon_shape() is called.
8812 The values are stored in a global struct draw_info.
8813 (draw_polygon_shape): Removed initialization code that is
8814 now in draw_polygon_init().
8815
8816 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Make
8817 drawing initialization call to draw_polygon_init()
8818 (MapRenderer.draw_polygon_shape): Use new signature of
8819 draw_polygon_shape.
8820
8821 * Thuban/UI/classgen.py (GenUniformPanel): Fix spin control
8822 weirdness by setting the range to (1, maxint).
8823
8824 * Thuban/Model/classification.py (ClassGroupProperties): Make
8825 instance variables private and optimize comparison operator
8826 by first checking if the color references are the same.
8827 (ClassGroupSingleton): Make instance variables private.
8828 (ClassGroupRange): Make instance variables private.
8829
8830 * HOWTO-Release: Filled in missing steps for releasing packages.
8831
8832 2003-04-15 Bernhard Herzog <[email protected]>
8833
8834 First stab at internationalized messages:
8835
8836 * Thuban/__init__.py (_): Implement the translation function for
8837 real using the python gettext module.
8838
8839 * Thuban/UI/classifier.py (ClassTable.GetRowLabelValue): Don't
8840 translate empty strings.
8841
8842 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
8843 Add a missing space to a warning message
8844
8845 * po/README: New. Notes about the management of the translation
8846 files.
8847
8848 * po/Makefile: New. Makefile to help manage the translation files.
8849
8850 * po/es.po: New. Spanish translation by Daniel Calvelo Aros
8851
8852 * MANIFEST.in: Include the *.mo files in Resources/Locale and the
8853 translations and support files in po/
8854
8855 * setup.py (data_files): Add the *.mo files to the data_files too
8856
8857 * README: Add note about the translations when building from CVS
8858
8859 2003-04-14 Jonathan Coles <[email protected]>
8860
8861 * Thuban/UI/dock.py: Fixes some window resizing problems most
8862 noticable under windows. Always assume the button bitmaps will
8863 be there. Code clean up.
8864 (DockabelWindow.Dock, DockableWindow.UnDock): Force all the
8865 images for the dock/undock button to the same images.
8866 Work around for RTbug #1801.
8867
8868 * Thuban/UI/legend.py (LegendPanel.__init__): The toolbar should
8869 be allowed to grow within the sizer. Fixes a bug under Windows
8870 where the toolbar wasn't being drawn.
8871
8872 2003-04-14 Frank Koormann <[email protected]>
8873
8874 * Resources/Bitmaps/dock_12.xpm, Resources/Bitmaps/undock_12.xpm:
8875 Updated design to try to make the button functionality more
8876 transparent.
8877
8878 2003-04-14 Jonathan Coles <[email protected]>
8879
8880 * Thuban/UI/legend.py (LegendPanel.__init__): Call Create() to
8881 finalize the intialization of the panel.
8882
8883 * Thuban/UI/dock.py (DockPanel.Create): New. Finalizes the
8884 creation of the panel. Should be the last thing called in the
8885 initializer of a subclass.
8886
8887 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Actively
8888 set the current selections in the combo boxes. This is needed
8889 under Windows.
8890
8891 * Thuban/UI/classifier.py (Classifier.__init__): Add a top
8892 level panel to the dialog so that the background colors are
8893 consistent under Windows.
8894
8895 2003-04-11 Jonathan Coles <[email protected]>
8896
8897 * Thuban/UI/classgen.py: Change color ramps to start at white
8898 not black.
8899
8900 * Thuban/UI/legend.py: Enable/disable the legend buttons when
8901 the legend changes. Fixes RTbug #1793.
8902
8903 * test/test_classification.py: Added test for copying of
8904 classifications.
8905
8906 2003-04-11 Jonathan Coles <[email protected]>
8907
8908 * Thuban/UI/resource.py: New. Centralize the loading of resources
8909 such as bitmaps.
8910
8911 * Thuban/UI/classgen.py (GenUniquePanel.__init__): Reordered buttons,
8912 added images to the move buttons, added 'reverse' button.
8913 (CustomRampPanel.__init__): Added images to the move buttons.
8914 (GreyRamp): New. Generates a ramp from white to black.
8915 (HotToColdRamp): New. Generates a ramp from cold to hot colors.
8916
8917 * Thuban/UI/classifier.py: Refactored ID's from ID_CLASSIFY_* to
8918 ID_PROPERTY_*.
8919 (Classifier.__init__): Minor changes to the layout.
8920 (Classifier._OnTitleChanged): Listen for when the user edits the
8921 title and update the dialog's title and the layer's title.
8922
8923 * Thuban/UI/dock.py: Use new bitmaps for the control buttons.
8924
8925 * Thuban/UI/legend.py: Use new bitmaps for the control buttons.
8926 (LegendTree._OnMsgLayerTitleChanged): Change the displayed title
8927 if the layer's title changes.
8928
8929 * Thuban/UI/mainwindow.py: Added new menu item and associated code
8930 to open a dialog to rename the map.
8931 (MainWindow): Use new resource class to import bitmaps.
8932
8933 2003-04-11 Jonathan Coles <[email protected]>
8934
8935 * Resources/Bitmaps/close_12.xpm, Resources/Bitmaps/dock_12.xpm,
8936 Resources/Bitmaps/group_use.xpm, Resources/Bitmaps/group_use_all.xpm,
8937 Resources/Bitmaps/group_use_none.xpm,
8938 Resources/Bitmaps/group_use_not.xpm,
8939 Resources/Bitmaps/hide_layer.xpm,
8940 Resources/Bitmaps/layer_properties.xpm,
8941 Resources/Bitmaps/lower_layer.xpm, Resources/Bitmaps/raise_layer.xpm,
8942 Resources/Bitmaps/show_layer.xpm, Resources/Bitmaps/undock_12.xpm:
8943 New.
8944
8945 2003-04-10 Jonathan Coles <[email protected]>
8946
8947 * Thuban/Model/classification.py: (ClassGroupRange.__init__):
8948 Should pass group to ClassGroup constructor.
8949
8950 2003-04-10 Jonathan Coles <[email protected]>
8951
8952 * Thuban/Model/classification.py: (ClassGroup): Move all the common
8953 methods of the derived classes ([Set|Get]Properties(), __eq__, __ne__)
8954 here. Implement SetVisible(), IsVisible().
8955 (ClassGroup.__init__): Add group parameter which acts as a copy
8956 constructor.
8957
8958 * Thuban/UI/classifier.py (ClassTable): Add a new column for the
8959 "Visible" check boxes.
8960 (Classifier): Rename the buttons and refactor the code to match
8961 the new labels.
8962
8963 * Thuban/UI/legend.py: Classify button is now called "Properties".
8964 Refactored the code to change variable names.
8965 (LegendTree.__FillTreeLayer): Only list a group if it is visible.
8966
8967 * Thuban/UI/mainwindow.py: MainWindow.OpenClassifier renamed to
8968 MainWindow.OpenLayerProperties. MainWindow.LayerEditProperties
8969 renamed to MainWindow.LayerEditProperties.
8970 (MainWindow.ToggleLegend): Don't include map name in legend title.
8971 (MainWindow.SetMap): Added the map name to the window title.
8972 (MainWindow.LayerFillColor, MainWindow.LayerTransparentFill,
8973 MainWindow.LayerOutlineColor, MainWindow.LayerNoOutline): Removed.
8974 Functionality is found in the layer properties dialog.
8975
8976 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
8977 draw visible groups.
8978
8979 2003-04-09 Jonathan Coles <[email protected]>
8980
8981 * Thuban/UI/classgen.py: Modifications to allow simple
8982 addition and selection of new color schemes.
8983 (MonochromaticRamp): New. Generates a ramp between two colors.
8984 (RedRamp): New. Generates a ramp of all red.
8985 (GreenRamp): New. Generates a ramp of all green.
8986 (BlueRamp): New. Generates a ramp of all blue.
8987
8988 2003-04-09 Jonathan Coles <[email protected]>
8989
8990 * Thuban/Model/classification.py (Classification.__deepcopy__):
8991 Need to copy over field and fieldType attributes.
8992
8993 * Thuban/Model/table.py (Table.field_range): New. Retrive the
8994 maximum and minimum values over the entire table for a given
8995 field.
8996 (Table.GetUniqueValues): New. Retrieve all the unique values
8997 in the table for a given field.
8998
8999 * Thuban/UI/classgen.py: Renamed GenRangePanel to GenUniformPanel.
9000 (GenUniquePanel): New. Controls to allow the user to select
9001 which unique field values they would like in the classification.
9002 (CustomRampPanel): Code that was in ClassGenDialog that allows
9003 the user to select the properties for a custom ramp.
9004 (ClassGenerator.GenUniformDistribution): Was called GenerateRanges.
9005
9006 * Thuban/UI/classifier.py: Removed a lot of debugging code.
9007 (Classifier._SetClassification): Callback method so that the
9008 class generator can set the classification in the grid.
9009 (ClassGroupPropertiesCtrl): New. Encapsulates the drawing and
9010 editing of a group properties class into a wxWindows control.
9011
9012 * Thuban/UI/dock.py: It was decided that if the user closes
9013 a dockable window the window should simply hide itself. That
9014 way if the user wants to show the dock again it appears in the
9015 same place as it was when it was closed.
9016 (DockableWindow.Destroy): Call renamed method OnDockDestroy().
9017 (DockableWindow._OnButtonClose): Hide the window instead of
9018 destroying it.
9019 (DockableWindow._OnClose): Hide the window instead of
9020 destroying it.
9021
9022 * Thuban/UI/legend.py (LegendTree): Use a private method to
9023 consistently set the font and style of the text. Fixes RTbug #1786.
9024
9025 * Thuban/UI/mainwindow.py: Import just the Classifier class.
9026
9027 2003-04-07 Bernhard Herzog <[email protected]>
9028
9029 * Thuban/UI/mainwindow.py (main_menu): Move the toggle_legend item
9030 to the map module
9031
9032 2003-04-07 Bernhard Herzog <[email protected]>
9033
9034 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree): Removed in
9035 favor of ToggleSessionTree
9036 (MainWindow.ToggleSessionTree): New method to toggle visibility of
9037 the session tree.
9038 (MainWindow.SessionTreeShown): New method to return whether the
9039 session tree is currently shown.
9040 (MainWindow.ToggleLegend): New method to toggle visibility of the
9041 legend
9042 (MainWindow.ShowLegend): Implement in terms of ToggleLegend and
9043 LegendShown
9044 (MainWindow.LegendShown): New method to return whether the legend
9045 is currently shown.
9046 (_method_command): Add checked parameter so we can define check
9047 menu items
9048 (_has_tree_window_shown, _has_legend_shown): Use the appropriate
9049 mainwindow methods.
9050 (show_session_tree, show_legend commands): Removed.
9051 (toggle_session_tree, toggle_legend commands): New commands to
9052 toggle the visibility of the dialogs
9053
9054 2003-04-07 Jonathan Coles <[email protected]>
9055
9056 * Thuban/UI/classgen.py: Fix Windows problem.
9057
9058 * Thuban/UI/dock.py: Fix Windows problem.
9059
9060 * Thuban/UI/mainwindow.py: Use False instead of false.
9061 (MainWindow.ShowLegend): Remove unnecessary switch parameter.
9062
9063 2003-04-07 Jonathan Coles <[email protected]>
9064
9065 Since we now say that the order of the groups in a classification
9066 matters, it makes sense to be able to manipulate that order. Most
9067 of the changes to Thuban/Model/classification.py are to that end.
9068
9069 * Thuban/Model/classification.py (Classification.AppendGroup,
9070 Classification.InsertGroup, Classification.ReplaceGroup,
9071 Classification.RemoveGroup, Classification.GetGroup): Do as the
9072 names imply.
9073 (Classification.FindGroup): This was called GetGroup, but GetGroup
9074 takes an index, while FindGroup takes a value.
9075 (Classification.__deepcopy__): Copy all the groups, BUT NOT THE LAYER
9076 REFERENCE. Currently there is a cyclic reference between the layer
9077 and its classification. If the classification doesn't need to know
9078 its owning layer we can change this, since it may make sense to be
9079 able to use the same classification with different layers.
9080
9081 * Thuban/Model/load.py: Use Classification.AppendGroup(), not AddGroup()
9082
9083 * Thuban/UI/classgen.py: Use Classification.AppendGroup(),
9084 not AddGroup()
9085
9086 * Thuban/UI/classifier.py: Now that we can depend on the order in
9087 a Classification and have methods to manipulate that order we don't
9088 need to use our own data structures in the grid. We can simply make
9089 the grid/table access the information they need from a copy of
9090 the classification object.
9091 (Classifier._OnCloseBtn): Event handler for when the user clicks
9092 'Close'. This is needed so if the user applies changes and then
9093 continues to change the table the user has the option of discarding
9094 the most recent changes and keeping what they applied.
9095
9096 * Thuban/UI/mainwindow.py: Put "Show Legend" and "Show Session Tree"
9097 into the same group.
9098
9099 * extensions/thuban/wxproj.cpp (check_version): If Thuban is compiled
9100 with a really old version of proj, PJ_VERSION won't even be defined.
9101 If it isn't defined then just compile so that the function always
9102 returns Py_False.
9103
9104 * test/test_classification.py: Fix tests to use the renamed methods.
9105 Still need to write tests for the new methods.
9106
9107 2003-04-04 Jonathan Coles <[email protected]>
9108
9109 * Thuban/UI/classifier.py (Classifier.__SelectField): Move the
9110 call to SetSelection out of the method and before the call
9111 to __SelectField in __init__. This prevents a recursion of events
9112 when _OnFieldSelect is triggered by the user.
9113
9114 2003-04-04 Jonathan Coles <[email protected]>
9115
9116 * Thuban/Model/classification.py: Rename Color.None to
9117 Color.Transparent.
9118 (ClassGroupProperties.SetLineColori, ClassGroupProperties.SetFill):
9119 Don't bother copying the color, since Colors are immutable.
9120
9121 * Thuban/Model/color.py, Thuban/Model/layer.py, Thuban/Model/load.py,
9122 Thuban/UI/classifier.py, Thuban/UI/mainwindow.py,
9123 Thuban/UI/renderer.py, Thuban/UI/view.py:
9124 Rename Color.None to Color.Transparent.
9125
9126 * test/test_classification.py, test/test_load.py: Rename Color.None
9127 to Color.Transparent.
9128
9129 2003-04-04 Jonathan Coles <[email protected]>
9130
9131 * Thuban/Model/classification.py: Fix assert calls.
9132 (ClassGroupProperties.SetLineColor, ClassGroupProperties.SetFill):
9133 Copy the color parameter rather than hold onto a reference.
9134
9135 * Thuban/Model/color.py (Color.__copy__, Color.__deepcopy): Copy
9136 the color object.
9137 (NoColor.__copy__, NoColor.__deepcopy): Return 'self' so that we
9138 are sure there exists only one refernce to Color.None in the system.
9139 This allows us to use 'is' rather than the comparision functions.
9140
9141 * Thuban/Model/save.py: Fix assert calls.
9142
9143 * Thuban/UI/classifier.py: Fix assert calls.
9144 (ClassGrid._OnCellDClick): Call up to the classifier to open the
9145 dialog to edit the groups properties.
9146 (ClassGrid._OnCellResize): Make sure that the scollbars are drawn
9147 correctly if a cell is resized.
9148 (ClassTable.SetClassification): New. Changes the classification
9149 that is in the table.
9150 (ClassTable.__SetRow): Allow groups to be prepended.
9151 (Classifier): New code for opening the EditProperties and
9152 GenerateRanges dialogs.
9153 (SelectPropertiesDialog.__GetColor): Only set the color in the
9154 color dialog if the current color is not None.
9155
9156 * Thuban/UI/dock.py: Fix assert calls.
9157
9158 * Thuban/UI/legend.py: Fix assert calls.
9159
9160 * Thuban/UI/renderer.py: Fix assert calls.
9161
9162 * Thuban/UI/classgen.py (ClassGenDialog): Dialog for generating
9163 classifications.
9164 (GenRangePanel): Panel specific to range generation.
9165 (GenSingletonPanel): Panel specific to singleton generation.
9166 (ClassGenerator): Class responsible for actually generating
9167 the classification from the data gathered in the dialog box.
9168 (PropertyRamp): Generates properties whose values range from
9169 a starting property to an ending property.
9170
9171 2003-04-03 Bernhard Herzog <[email protected]>
9172
9173 * test/support.py (print_garbage_information): New function that
9174 prints information about still connected messages and memory
9175 leaks.
9176 (run_suite): Removed.
9177 (run_tests): New function for use as a replacement of
9178 unittest.main in the test_* files. This one calls
9179 print_garbage_information at the end.
9180
9181 * test/runtests.py (main): Use support.print_garbage_information
9182
9183 * test/test_layer.py: Use support.run_tests instead of
9184 unittest.main so we get memory leak information
9185 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
9186 (TestLayer.test_point_layer, TestLayer.test_empty_layer)
9187 (TestLayerLegend.test_visibility): Call the layer's Destroy method
9188 to fix a memory leak.
9189
9190 * test/test_classification.py: Use support.run_tests instead of
9191 unittest.main so we get memory leak information
9192 (TestClassification.test_classification): Call the layer's Destroy
9193 method to fix a memory leak.
9194
9195 2003-04-02 Bernhard Herzog <[email protected]>
9196
9197 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
9198 Handle the reference counts of the return value and errors in
9199 PyArg_ParseTuple correctly.
9200
9201 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
9202 sure the filename is absolute to avoid problems when saving the
9203 session again
9204
9205 * Thuban/Model/table.py: Remove unnecessary import. Fix a typo.
9206
9207 2003-04-01 Jonathan Coles <[email protected]>
9208
9209 * Thuban/UI/renderer.py (MapRenderer.draw_point_shape): Check
9210 that there actually are points in the returned list of points
9211 before trying to index into the list. The list may be empty if
9212 the shape is a Null Shape.
9213
9214 2003-04-01 Bernhard Herzog <[email protected]>
9215
9216 * test/test_map.py: Don't use from <module> import *
9217
9218 2003-04-01 Jonathan Coles <[email protected]>
9219
9220 * Thuban/Model/session.py: Use LAYER_CHANGED instead of
9221 LAYER_LEGEND_CHANGED
9222
9223 * Thuban/UI/dock.py (DockableWindow._OnButtonClose): Call
9224 self.Destroy() to close the window after yesterday's changes.
9225
9226 * test/test_map.py, test/test_session.py: Fix messages that
9227 are sent from maps and layers.
9228
9229 2003-03-31 Jonathan Coles <[email protected]>
9230
9231 * Thuban/UI/classifier.py: Commented out some debugging statements.
9232 (ClassDataPreviewer.Draw): Draw rectangles for polygon layers per
9233 RTbug #1769.
9234
9235 * Thuban/UI/dock.py (DockableWindow.UnDock): Restore size and
9236 position (although position doesn't work yet under GTK).
9237 (DockableWindow.Destroy): New. Called when the window must be
9238 closed. Namely needed when the DockFrame closes and must close
9239 its children.
9240 (DockFrame): Listen for EVT_CLOSE and destroy all children.
9241
9242 * Thuban/UI/legend.py (LegendPanel.Destroy): New. Cleans up
9243 when then window is told to close.
9244 (LegendTree._OnMsgLayerChanged): Fixes a seg fault bug. See
9245 comment in source for more info.
9246
9247 * Thuban/UI/main.py: Show the legend by default when Thuban starts.
9248
9249 * Thuban/UI/mainwindow.py: Renamed OnClose to _OnClose for
9250 symmetry with other such methods.
9251 (MainWindow.ShowLegend): Show the legend docked by default.
9252
9253 2003-03-28 Jonathan Coles <[email protected]>
9254
9255 * Thuban/UI/classifier.py: Support for highlighting a specific
9256 group within the grid when the classification dialog is opened.
9257 Also contains a lot of debugging printouts which will later
9258 be removed.
9259
9260 * Thuban/UI/dock.py: Complete rework on the dock code so that
9261 that it is fairly removed from the rest of the Thuban application.
9262 It is easy to add new docks which the rest of the program having
9263 to be aware of them.
9264
9265 * Thuban/UI/legend.py: Modifications to support selecting a
9266 specific group in the classification dialog. Changed how layers
9267 are drawn when the layer is visible/invisible.
9268
9269 * Thuban/UI/mainwindow.py: Removed legend specific code and
9270 replaced it with calls to the new dock code.
9271
9272 * Thuban/UI/renderer.py (MapRenderer.__init__): Added assert
9273 to check if scale > 0. Trying to track down a divide by zero.
9274
9275 2003-03-26 Jonathan Coles <[email protected]>
9276
9277 * Thuban/UI/legend.py: Removed unnecessary LegendDialog class.
9278 (LegendPanel): Removed _OnDock()/_OnUnDock() methods which are
9279 now part of DockableWindow.
9280 (LegendPanel.DoOnSelChanged): Select the current layer in the
9281 map.
9282 (LegendTree._OnSelChanged): Call LegendPanel.DoOnSelChanged()
9283 with the selected layer and/or group.
9284
9285 2003-03-26 Jonathan Coles <[email protected]>
9286
9287 This putback contains the code for dockable windows. There is
9288 no support in wxWindows as of this date for windows that can
9289 attach themselves to other windows.
9290
9291 The current model contains a DockableWindow which has a parent
9292 window for when it is detached and a dock window that it puts
9293 its contents in when it is docked. The contents of a DockableWindow
9294 must be a DockPanel. DockPanel itself derives from wxPanel.
9295
9296 * Thuban/Model/layer.py (Layer.ClassChanged): Send a LAYER_CHANGED
9297 message, not a LAYER_LEGEND_CHANGED message.
9298
9299 * Thuban/Model/map.py (Map): Forward LAYER_CHANGED messages.
9300
9301 * Thuban/UI/classifier.py (Classifier.__init__): Use wxADJUST_MINSIZE
9302 as one of the style properties for the fieldTypeText item to
9303 be sure that its size is correct when the text changes.
9304
9305 * Thuban/UI/dock.py: New. Classes for the DockPanel and
9306 DockableWindow.
9307
9308 * Thuban/UI/legend.py: Added some more buttons and made the
9309 LegendPanel a DockPanel.
9310
9311 * Thuban/UI/mainwindow.py: Added sash windows to the main window
9312 and supporting functions for manipulating the sashes.
9313 (MainWindow.ShowLegend): Create a DockableWindow with the
9314 LegendPanel as the contents.
9315
9316 * Thuban/UI/messages.py: Added DOCKABLE_* messages
9317
9318 * Thuban/UI/view.py (MapCanves.SetMap): Listen for LAYER_CHANGED,
9319 not LAYER_LEGEND_CHANGED, messages.
9320
9321 2003-03-25 Jonathan Coles <[email protected]>
9322
9323 * setup.py: Added custom script bdist_rpm_build_script so that
9324 when the rpm is built the path to wx-config is correct.
9325
9326 * setup.cfg: Added line saying to use the custom build script
9327
9328 2003-03-20 Jonathan Coles <[email protected]>
9329
9330 Initial implementation of the Legend.
9331
9332 * Thuban/UI/legend.py: New. Creates a window that shows the map's
9333 Legend information and allows the user to add/modify classifications
9334 and how the layers are drawn on the map.
9335
9336 * setup.py: New command 'build_docs' which currently uses
9337 happydoc to generate html documentation for Thuban.
9338
9339 * Thuban/Model/classification.py (ClassGroup.GetDisplayText): New.
9340 Returns a string which is appropriately describes the group.
9341
9342 * Thuban/Model/layer.py (Layer.SetClassification): Generate a
9343 LAYER_CHANGED event instead of a LAYER_LEGEND_CHANGED event.
9344
9345 * Thuban/Model/map.py (Map): Rename messages and use new, more
9346 specific, messages.
9347
9348 * Thuban/Model/messages.py: New message to indicate that a layer's
9349 data has changed (LAYER_CHANGED). New map messages to indicate
9350 when layers have been added/removed/changed or if the stacking order
9351 of the layers has changed.
9352
9353 * Thuban/Model/session.py: Rename and use new messages.
9354
9355 * Thuban/UI/classifier.py: Remember if any changes have actually
9356 been applied so that if the dialog is cancelled without an application
9357 of changes we don't have to set a new classification.
9358 (ClassDataPreviewer): Pulled out the window specific code and put it
9359 ClassDataPreviewWindow. ClassDataPreviewer can then be used to draw
9360 symbols on any DC.
9361
9362 * Thuban/UI/mainwindow.py: New code to open the legend.
9363
9364 * Thuban/UI/view.py: Use new message names.
9365
9366 2003-03-19 Jonathan Coles <[email protected]>
9367
9368 * Thuban/UI/main.py (verify_versions): New. Checks the versions
9369 of Python, wxPython, and some other libraries.
9370
9371 * extensions/thuban/wxproj.cpp (check_version): Checks the given
9372 version against what wxproj was compiled with.
9373 (check_version_gtk): If wxproj was compiled with gtk then check
9374 the given version against the version of the gtk library
9375 currently being used.
9376
9377 2003-03-14 Bernhard Herzog <[email protected]>
9378
9379 * test/test_command.py: Run the tests when the module is run as a
9380 script
9381
9382 2003-03-14 Bernhard Herzog <[email protected]>
9383
9384 Implement selection of multiple selected shapes in the same layer:
9385
9386 - Introduce a new class to hold the selection. This basically
9387 replaces the interactor which was nothing more than the
9388 selection anyway. A major difference is of course that the new
9389 selection class supports multiple selected shapes in one layer
9390
9391 - Move the object that represents the selection from the
9392 application to the canvas. The canvas is a better place than the
9393 application because the selection represents which shapes and
9394 layer of the map displayed by the canvas are selected and
9395 affects how the map is drawn.
9396
9397 - Make the selection and its messages publicly available through
9398 the mainwindow.
9399
9400 - The non-modal dialogs do not get a reference to the interactor
9401 anymore as they can simply refer to their parent, the
9402 mainwindow, for the what the interactor had to offer.
9403
9404 * Thuban/UI/selection.py: New module with a class to represent the
9405 selection.
9406
9407 * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
9408 these unused messages
9409
9410 * Thuban/UI/application.py (ThubanApplication.OnInit)
9411 (ThubanApplication.OnExit, ThubanApplication.SetSession): The
9412 interactor is gone now.
9413 (ThubanApplication.CreateMainWindow): There is no interactor
9414 anymore so we pass None as the interactor argument for now for
9415 compatibility.
9416
9417 * Thuban/UI/view.py (MapCanvas.delegated_messages)
9418 (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
9419 Unsubscribe, delegate messages according to the delegated_messages
9420 class variable.
9421 (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
9422 attributes from instance variables as described with the
9423 delegated_methods class variable.
9424 (MapCanvas.__init__): New instance variable selection holding the
9425 current selection
9426 (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
9427 pass them on to the renderer
9428 (MapCanvas.SetMap): Clear the selection when a different map is
9429 selected.
9430 (MapCanvas.shape_selected): Simple force a complete redraw. The
9431 selection class now takes care of only issueing SHAPES_SELECTED
9432 messages when the set of selected shapes actually does change.
9433 (MapCanvas.SelectShapeAt): The selection is now managed in
9434 self.selection
9435
9436 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
9437 (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
9438 Unsubscribe, delegate messages according to the delegated_messages
9439 class variable.
9440 (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
9441 attributes from instance variables as described with the
9442 delegated_methods class variable.
9443 (MainWindow.__init__): The interactor as ivar is gone. The
9444 parameter is still there for compatibility. The selection messages
9445 now come from the canvas.
9446 (MainWindow.current_layer, MainWindow.has_selected_layer):
9447 Delegate to the the canvas.
9448 (MainWindow.LayerShowTable, MainWindow.Classify)
9449 (MainWindow.identify_view_on_demand): The dialogs don't need the
9450 interactor parameter anymore.
9451
9452 * Thuban/UI/tableview.py (TableFrame.__init__)
9453 (LayerTableFrame.__init__, LayerTableFrame.OnClose)
9454 (LayerTableFrame.row_selected): The interactor is gone. It's job
9455 from the dialog's point of view is now done by the mainwindow,
9456 i.e. the parent. Subscribe to SHAPES_SELECTED instead
9457 of SELECTED_SHAPE
9458
9459 * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
9460 is gone. It's job from the dialog's point of view is now done by
9461 the mainwindow, i.e. the parent.
9462
9463 * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
9464 gone. It's job from the dialog's point of view is now done by the
9465 mainwindow, i.e. the parent.
9466
9467 * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
9468 gone. It's job from the dialog's point of view is now done by the
9469 mainwindow, i.e. the parent.
9470 (SessionTreeCtrl.__init__): New parameter mainwindow which is
9471 stored as self.mainwindow. The mainwindow is need so that the tree
9472 can still subscribe to the selection messages.
9473 (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
9474 (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
9475 selection is now accessible through the mainwindow. Subscribe to
9476 SHAPES_SELECTED instead of SELECTED_SHAPE
9477
9478 * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
9479 SHAPES_SELECTED message now.
9480 (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
9481 so deal with multiple shapes
9482 (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
9483 gone. It's job from the dialog's point of view is now done by the
9484 mainwindow, i.e. the parent.
9485
9486 * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
9487 parameter is now a list of shape ids.
9488 (RecordTable.SetTable): The second parameter is now a list of
9489 indices.
9490
9491 * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
9492 selected_shape parameter and ivar to selected_shapes. It's now a
9493 list of shape ids.
9494 (MapRenderer.draw_label_layer): Deal with multiple selected
9495 shapes. Rearrange the code a bit so that the setup and shape type
9496 distinctions are only executed once.
9497
9498 * test/test_selection.py: Test cases for the selection class
9499
9500 2003-03-11 Jonathan Coles <[email protected]>
9501
9502 * Thuban/Model/load.py: Temporary fix so that the xml reader
9503 doesn't cause Thuban to crash.
9504
9505 * Thuban/Model/layer.py: Handle the cyclic references between
9506 a layer and its classification better, and be sure to disconnect
9507 the classification from the layer when the layer is destroyed
9508 so that we don't maintain a cyclic reference that may not be
9509 garbage collected.
9510
9511 * Thuban/Model/classification.py: See comment for layer.py.
9512
9513 2003-03-12 Jan-Oliver Wagner <[email protected]>
9514
9515 * HOWTO-Release: New. Information on the steps for releasing
9516 a new version of Thuban.
9517
9518 2003-03-11 Jonathan Coles <[email protected]>
9519
9520 * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
9521 Use True instead of true.
9522 (Classifier): Should have a single panel in which all the controls lie.
9523
9524 * Thuban/UI/proj4dialog.py: Add normal border.
9525
9526 * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
9527
9528 * Thuban/UI/mainwindow.py: Use True instead of true.
9529
9530 * setup.py: Update some definitions to use wxWindows2.4 files
9531
9532 * Data/iceland_sample_class.thuban: Fixed file so that the
9533 field_type information is present.
9534
9535 2003-03-10 Jonathan Coles <[email protected]>
9536
9537 * Thuban/UI/classifier.py (Classifier.__init__): Make the
9538 field type label grow so that when the text changes the
9539 size is updated correctly. This may be a wxWindows bug.
9540
9541 2003-03-10 Jonathan Coles <[email protected]>
9542
9543 * Thuban/UI/application.py: Changed SESSION_CHANGED to
9544 SESSION_REPLACED.
9545
9546 * Thuban/UI/classifier.py: Wrap text with _().
9547 (ClassGrid.CreateTable): Set dimensions and size hints here,
9548 instead of in Reset, so we only set the size once.
9549
9550 * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
9551
9552 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
9553 Call Close() instead of Shutdown().
9554
9555 * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
9556
9557 * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
9558 Go back to using OnClose() instead of Shutdown().
9559
9560 2003-03-10 Jonathan Coles <[email protected]>
9561
9562 * Thuban/UI/classifier.py (Classifier): SelectField() needed
9563 to know the old field index as well as the new one.
9564
9565 2003-03-10 Jonathan Coles <[email protected]>
9566
9567 * Thuban/UI/classifier.py (Classifier): Use __SelectField()
9568 to correctly set the table information and call this from
9569 __init__ and from _OnFieldSelect so that all the information
9570 is up to date when the dialog opens and when a field is changed.
9571
9572 2003-03-10 Jonathan Coles <[email protected]>
9573
9574 * Thuban/Model/classification.py (Classification): Don't use
9575 layer's message function directly, use the ClassChanged() method
9576 when then classification changes. SetField/SetFieldType/SetLayer
9577 must keep the information about field name and field type in
9578 sync when an owning layer is set or removed.
9579
9580 * Thuban/Model/layer.py: Added ClassChanged() so that the
9581 classification can tell the layer when its data has changed.
9582 (Layer.SetClassification): Accepts None as an arguement to
9583 remove the current classification and correctly handles
9584 adding a new classification.
9585
9586 * Thuban/Model/load.py: Comment out print statement
9587
9588 * test/test_classification.py, test/test_save.py: New and
9589 improved tests.
9590
9591 2003-03-07 Jonathan Coles <[email protected]>
9592
9593 * Thuban/Model/classification.py: Implemented __copy__ and
9594 __deepcopy__ for ClassGroup* and ClassGroupProperites so
9595 they can easily be copied by the classifier dialog.
9596 (ClassGroupProperites.__init__): The default line color should
9597 have been Color.Black.
9598
9599 * Thuban/UI/classifier.py: Setting and Getting table values now
9600 uses a consistent set of functions.
9601 (Classifier): Now non-modal. Has field type label which changes
9602 as the field changes. Keep track of buttons in a list so that
9603 we can enable/disable the buttons when the None field is selected.
9604 (SelectPropertiesDialog): Add buttons to make the colors transparent.
9605
9606 * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
9607 does what OnClose did, but can be called by the application to
9608 close a window. Needed when a session changes, and we have to
9609 close the classifier windows.
9610
9611 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
9612 Shuts down open dialogs. Used when a new session is created
9613 or a session is opened.
9614 (MainWindow.SaveSession): Should only call application.SaveSession()
9615 if we don't call SaveSessionAs first.
9616 (MainWindow.Classify): Allow different classifier dialogs for
9617 different layers.
9618
9619 * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
9620 the parent class handle it. Add Shutdown() to unsubscibe from
9621 event notification and call the parent Shutdown(). This was
9622 necessary so the application can close the tree window.
9623
9624 2003-03-06 Jonathan Coles <[email protected]>
9625
9626 * Thuban/Model/classification.py: Minor documentation changes,
9627 Addition of __eq__ and __ne__ methods.
9628 (Classification.SetLayer): prevent recursion between this method
9629 and Layer.SetClassification().
9630
9631 * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
9632
9633 * Thuban/Model/layer.py (SetClassification): prevent recursion
9634 between this method and Classification.SetLayer().
9635
9636 * test/test_classification.py, test/test_load.py,
9637 test/test_session.py: Fixed and added tests for the classification
9638 classes.
9639
9640 2003-03-06 Bernhard Herzog <[email protected]>
9641
9642 * Thuban/UI/classifier.py (ClassGrid.__init__)
9643 (ClassGrid.CreateTable): Move the SetSelectionMode call to
9644 CreateTable because otherwise it triggers an assertion in
9645 wxPython/wxGTK 2.4.
9646
9647 2003-03-05 Jonathan Coles <[email protected]>
9648
9649 * Thuban/common.py: Move FIELDTYPE constants back to table.py.
9650
9651 * Thuban/Model/load.py: import FIELDTYPE constants from table.
9652
9653 * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
9654
9655 * Thuban/Model/table.py: Put FIELDTYPE constants back.
9656
9657 2003-03-05 Jonathan Coles <[email protected]>
9658
9659 * Thuban/UI/classifier.py: Added class documentation.
9660 Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
9661 Store just the groups in the table and generate the other
9662 column information when it is requested. Add "None" field
9663 to pull-down to select no classification.
9664
9665 * Thuban/common.py: Moved FIELDTYPE constants from table.py
9666 (Str2Num): Only catch ValueError exceptions.
9667
9668 * Thuban/Model/classification.py: Class documentation. Renaming
9669 of methods with Stroke to Line. Groups are stored in a single
9670 list with the default as the first element. Groups are searched
9671 in the order they appear in the list.
9672
9673 * Thuban/Model/color.py: Documentation.
9674
9675 * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
9676 the kind of data represented by a field.
9677
9678 * Thuban/Model/load.py (ProcessSession): Use proper string
9679 conversion function; fixes RTbug #1713.
9680
9681 * Thuban/Model/save.py (Saver): Store field type information.
9682
9683 * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
9684 (Table): Add field_info_by_name() to retrieve field information
9685 by specifying the field name, not the number.
9686
9687 * Thuban/UI/mainwindow.py: Function name changes.
9688
9689 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
9690 get the layer classification once. Don't try to classify
9691 values when the field is None: just use the default properties.
9692
9693 * Thuban/UI/view.py: Function name changes.
9694
9695 * Doc/thuban.dtd: Add field_type attribute to a classification.
9696
9697 2003-03-04 Bernhard Herzog <[email protected]>
9698
9699 * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
9700 the fill and stroke layer attributes optional with suitable
9701 default values. Add the stroke_width layer attribute. Use correct
9702 syntax for empty elements. Make the attribute list for labels
9703 refer to the label element.
9704
9705 2003-03-04 Bernhard Herzog <[email protected]>
9706
9707 * setup.py (thuban_build_py.build): Add a comment about distutils in
9708 Python 2.3 containing some of the functionality we implement in
9709 setup.py ourselves.
9710
9711 * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
9712 before the selection mode. Doing it the other way round triggers
9713 an assertion in wxWindows.
9714
9715 * Thuban/Model/save.py (escape): Fix typo in doc-string
9716
9717 * Thuban/Model/classification.py: Remove unnecessary wxPython
9718 import
9719
9720 2003-03-04 Jonathan Coles <[email protected]>
9721
9722 * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
9723 Parameter 'value' should default to None.
9724
9725 * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
9726 the class attribute __classification is now private.
9727
9728 * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
9729 Classifier to ClassGrid. Added support for removing selected rows,
9730 which including code for keeping track of when cells are selected,
9731 and deselected.
9732 (ClassTable): Support for added/removing rows. Fixed a problem
9733 with __ParseInput whereby it would not allow strings (only numbers)
9734 to be entered.
9735 (Classifier): Added button and supporting code for removing
9736 selected rows.
9737
9738 2003-02-27 Jonathan Coles <[email protected]>
9739
9740 * Thuban/common.py: Moved color conversion functions into
9741 Thuban/UI/common.py.
9742 (Str2Num): Now converts the float (not the string) to a long/int
9743 so that an exception isn't thrown.
9744
9745 * Thuban/UI/common.py: Common functions used in several UI modules
9746
9747 * Thuban/Model/classification.py: Changed the class hierarchy
9748 so that a Classification consists of Groups which return
9749 Properties when a value matches a Group.
9750
9751 * Thuban/Model/layer.py: Fixed name resolution problem.
9752
9753 * Thuban/Model/load.py: Use new Classification and Group functions.
9754
9755 * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
9756 failure.
9757 (Saver.write_classification): Use new Classification and Group
9758 functions.
9759
9760 * Thuban/UI/classifier.py: Changes to use new Classification and Group
9761 functions. Fix to create a tuple with a single value instead of
9762 simply returning the value.
9763
9764 * Thuban/UI/renderer.py: Use new Classification and Group functions.
9765 Use common.py functions.
9766
9767 * Thuban/UI/tree.py: Use common.py functions.
9768
9769 * test/test_classification.py: Use new Classification and Group
9770 classes.
9771
9772 2003-02-24 Jonathan Coles <[email protected]>
9773
9774 * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
9775 functions from Thuban color objects to wxWindow colour objects.
9776
9777 * Thuban/Model/classification.py (Classification): Renamed
9778 GetProperties() to GetClassData(). Used the new iterator
9779 in TreeInfo().
9780 (ClassIterator): Iterator implementation to iterate over the
9781 ClassData objects in a classification object.
9782
9783 * Thuban/Model/save.py (Saver.write_classificaton): Uses
9784 the new iterator to save the classification information.
9785
9786 * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
9787 for changing the stroke and fill colors and previewing the
9788 changes.
9789
9790 * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
9791 MainWindow.SaveSessionAs): Text string changes so the dialogs
9792 have more meaningful titles.
9793
9794 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
9795 Classification method name from GetProperties to GetClassData.
9796
9797 * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
9798 instead of accessing now non-existent class variables.
9799
9800 2003-02-24 Bernhard Herzog <[email protected]>
9801
9802 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
9803 unneeded Shape() call. Rendering is substantially faster without
9804 it and it avoids some problems with broken shape files.
9805
9806 2003-02-20 Frank Koormann <[email protected]>
9807
9808 Force minimal size of identify and label dialogs. The autosizing
9809 looked too ugly.
9810
9811 * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
9812 * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
9813 Set size of listctrl.
9814 * Thuban/UI/identifyview.py (IdentifyView.__init__):
9815 Set size of dialog.
9816
9817 2003-02-19 Jonathan Coles <[email protected]>
9818
9819 * test/test_classification.py, test/test_layer.py,
9820 test/test_load.py, test/test_map.py, test/test_session.py:
9821 Updated the tests to use the new functions that are in the
9822 respective classes.
9823
9824 * Thuban/Model/classification.py (Classification):
9825 Uses the new ClassData* classes. Modification messages are
9826 passed up to the parent layer (if it exists).
9827 (ClassData): New class to encapsulate the common data in each
9828 classification property.
9829 (ClassDataDefault): Represents the Default class. data.
9830 (ClassDataPoint): Represents a single class. data point
9831 (ClassDataRange): Represents a class. range
9832 (ClassDataMap): Represents a class. map (unused).
9833
9834 * Thuban/Model/color.py: Added Color.None to represent something
9835 with no color. Color.Black represents the color black.
9836 (NoColor): Helper class derived from Color to represent something
9837 with no color.
9838
9839 * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
9840 stroke_width attributes. Made the 'classification' attribute private.
9841 New methods for setting/getting the classification.
9842
9843 * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
9844 to get the classifcation and use the new ClassData* classes to
9845 hold the classification data. Use Str2Num to convert numbers
9846 properly.
9847
9848 * Thuban/Model/save.py (Saver): Use new Color and Classification
9849 methods
9850
9851 * Thuban/UI/classifier.py (ClassGrid): New class to represent a
9852 custom grid.
9853 (ClassTable): Support for editing Values and Labels and for
9854 changing what type (point or range) of data is stored in each
9855 property based on how the user enters the data.
9856 (Classifier): Support for saving the new classifications and
9857 launching the dialog to edit a property.
9858 (SelectPropertiesDialog): New class for editing the visual
9859 properties of a classification (stroke color, width, and fill color)
9860 (ClassPreviewer): Took the Draw method from ClassRenderer and
9861 made most of it into this new class. Intend to use this class in
9862 the SelectPropertiesDialog for previewing changes.
9863
9864 * Thuban/UI/renderer.py: Use new Color and Classification methods.
9865
9866 * Thuban/UI/tree.py: Formatting changes.
9867
9868 * Doc/thuban.dtd: Add 'label' element
9869
9870 * Thuban/common.py: New. Contains common routines used throughout
9871 the code.
9872 (Str2Num): Takes a string and converts it to the "best" type of
9873 number.
9874
9875 2003-02-14 Bernhard Herzog <[email protected]>
9876
9877 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
9878 dragging flag is always set to 0 even when the tool implementation
9879 raises an exception
9880
9881 2003-02-11 Bernhard Herzog <[email protected]>
9882
9883 * Thuban/UI/application.py (ThubanApplication.splash_screen): New
9884 method to create a splash screen.
9885 (ThubanApplication.ShowMainWindow): New. Show the main window.
9886 Needed so the splash screen can display the mainwindow
9887 (ThubanApplication.OnInit): Call the
9888 new splash_screen method to determine whether the application
9889 should display a splash screen. If it displays a splash screen do
9890 not immediately show the main window.
9891
9892 2003-02-11 Jonathan Coles <[email protected]>
9893
9894 * Thuban/Model/classification.py: Added import line to fix
9895 feature conflicts between running on python2.2 and python2.1.
9896
9897 * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
9898 onto the clinfo parameter, so removed the deepcopy().
9899
9900 2003-02-10 Jonathan Coles <[email protected]>
9901
9902 * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
9903 Added element_open variable to track opening and closing of tags
9904 so that tags that don't span more than one line are closed with
9905 /> instead of </tag_name>. Use the GetDefault*() methods of
9906 the Classification class.
9907
9908 * Thuban/Model/classification.py (Classificaton): Added set and
9909 get methods for the default data. The class also takes a layer
9910 reference so that modification messages can be sent. Fixed the
9911 methods to use the new ClassData class.
9912 (ClassData): New class to encapsulate the classification data
9913
9914 * Thuban/Model/layer.py (Layer): Remove the
9915 Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
9916 SetDefault*() methods on the layer's classification object.
9917 (Layer.__init__): Use the new SetDefault*() methods in the
9918 Classification class.
9919
9920 * Thuban/Model/load.py (ProcessSession): Use the new ClassData
9921 object instead of a dictionary.
9922
9923 * Thuban/UI/classifier.py (ClassRenderer): New class to
9924 draw the classifications in the dialog box's table.
9925 (Classifier): Modified to use the ClassRenderer class.
9926
9927 * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
9928 methods of the Classification class.
9929
9930 * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
9931 of the ClassData class.
9932
9933 * test/test_classification.py, test/test_layer.py,
9934 test/test_map.py, test/test_session.py: Fix the tests to work
9935 with the above code changes.
9936
9937 2003-02-03 Jonathan Coles <[email protected]>
9938
9939 * Thuban/Model/classification.py (Classification): Added getNull()
9940 to return the NullData reference
9941
9942 * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
9943 Layer.SetStrokeWidth): Modified these functions to change the
9944 null data in the classification rather than keep these values
9945 directly in the Layer class. Menu options to change these values
9946 work again.
9947
9948 2003-01-28 Jonathan Coles <[email protected]>
9949
9950 * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
9951 Fixed crashing problem on some systems. Dialog box shows
9952 classification data.
9953
9954 * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
9955 Colors in the tree view.
9956
9957 * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
9958 the tree info for classifications. Commented out unnecessary lines.
9959
9960 * Thuban/Model/classification.py (Classification.TreeInfo): New
9961 function to add information about the classification into the
9962 tree view.
9963
9964 2003-01-27 Jan-Oliver Wagner <[email protected]>
9965
9966 * Thuban/__init__.py (_): New.
9967
9968 * Thuban/Model/classification.py, Thuban/Model/extension.py,
9969 Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
9970 Thuban/Model/session.py, Thuban/UI/application.py,
9971 Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
9972 Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
9973 Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
9974 Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
9975 Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
9976
9977 2003-01-27 Jonathan Coles <[email protected]>
9978
9979 * Thuban/Model/layer.py: Classification initialization calls.
9980
9981 * Thuban/Model/classification.py: Created class to encapsulate
9982 a layer classification. Supports specific data points and
9983 ranges.
9984
9985 * Thuban/Model/load.py: Added support for loading classification
9986 information.
9987
9988 * Thuban/Model/save.py: Added support for saving classification
9989 information.
9990
9991 * Thuban/UI/classifier.py: Initial class for a dialog box for
9992 specifying classification information.
9993
9994 * Thuban/UI/mainwindows.py: Support for opening the classifier
9995 dialog.
9996
9997 * Thuban/UI/renderer.py: Support for drawing a layer with the
9998 classification information.
9999
10000 * Data/iceland_sample_class.thuban: iceland_sample with
10001 classification data.
10002
10003 * test/test_classification: Tests for the Classification class.
10004
10005 2002-12-09 Bernhard Herzog <[email protected]>
10006
10007 * test/test_command.py: New. Tests for the command classes.
10008
10009 * Thuban/UI/command.py (ToolCommand): New class for tool commands.
10010 (Command.IsTool): New method to distinguish between command
10011 switching tools and other commands.
10012
10013 * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
10014 the tool to avoid direct assignments to instance variables
10015 (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
10016 (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
10017 change the tool
10018
10019 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
10020 active tool's command turns insensitive, disable the tool.
10021 (_tool_command): Use the new ToolCommand class
10022
10023 * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
10024 SelectTool method to change the tool
10025 (iconfile): Use the ToolCommand class
10026
10027 2002-12-03 Bernhard Herzog <[email protected]>
10028
10029 * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
10030 the case of selected items that are not children of Layers or Maps
10031 properly. Previously this bug would trigger an assertion in
10032 wxWindows.
10033
10034 2002-11-06 Frank Koormann <[email protected]>
10035
10036 * Thuban/UI/mainwindow.py: Altered the order of tools in the
10037 toolbar: First now are all navigation tools (Zoom In/Out, Pan,
10038 Full Extent).
10039
10040 2002-10-23 Bernhard Herzog <[email protected]>
10041
10042 * setup.py (setup call): version now 0.1.3
10043
10044 * MANIFEST.in: Add the files in test/
10045
10046 * test/README: Add note about tests requiring the iceland data
10047
10048 * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
10049 copyright notice.
10050
10051 2002-10-18 Bernhard Herzog <[email protected]>
10052
10053 * test/test_map.py
10054 (TestMapWithContents.test_projected_bounding_box): Use an explicit
10055 epsilon.
10056
10057 * test/support.py (FloatComparisonMixin.assertFloatEqual)
10058 (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
10059 message if the assertion fails and don't return the return value
10060 of self.assert_. In assertFloatSeqEqual the return meant that not
10061 all items of the sequence were compared.
10062
10063 2002-09-20 Bernhard Herzog <[email protected]>
10064
10065 * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
10066
10067 * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
10068
10069 * test/test_map.py (TestMapWithContents.test_tree_info): Create
10070 the string with the bounding box on the fly because of platform
10071 differences in the way %g is handled.
10072
10073 * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
10074 DBFfile too because Thuban layers can't yet cope missing DBF
10075 files.
10076
10077 2002-09-20 Bernhard Herzog <[email protected]>
10078
10079 * test/test_menu.py: Use initthuban instead of
10080 add_thuban_dir_to_path to initialize Thuban.
10081
10082 * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
10083 Mixin class for float comparisons
10084 (SubscriberMixin): New. Mixin class to test messages sent through
10085 the Connector class
10086
10087 * test/README: Fix a typo and add the -v flag to the command for
10088 individual tests
10089
10090 * test/test_session.py: New. Test cases for Thuban.Model.session
10091
10092 * test/test_proj.py: New. Test cases for Thuban.Model.proj
10093
10094 * test/test_map.py: New. Test cases for Thuban.Model.map
10095
10096 * test/test_layer.py: New. Test cases for Thuban.Model.layer
10097
10098 * test/test_label.py: New. Test cases for Thuban.Model.label
10099
10100 * test/test_connector.py: New. Test cases for Thuban.Lib.connector
10101
10102 * test/test_color.py: New. Test cases for Thuban.Model.color
10103
10104 * test/test_base.py: New. Test cases for Thuban.Model.base
10105
10106 2002-09-13 Bernhard Herzog <[email protected]>
10107
10108 * Thuban/Model/session.py (Session.forwarded_channels): Forward
10109 the CHANGED channel too.
10110
10111 * Thuban/Model/map.py (Map.forwarded_channels): Forward the
10112 CHANGED channel too.
10113 (Map.__init__): Call the Modifiable constructor as well.
10114
10115 * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
10116 event if the modified flag changes.
10117 (Modifiable.changed): Tweak the doc-string.
10118
10119 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
10120 (MainWindow.set_position_text): Put the code that puts the text
10121 with the mouse position into the status bar into the new method
10122 set_position_text so that it can overwritten in derived classes.
10123
10124 2002-09-12 Bernhard Herzog <[email protected]>
10125
10126 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
10127 message box on the main window.
10128
10129 2002-09-11 Bernhard Herzog <[email protected]>
10130
10131 * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
10132 the 'E' because it's less likely to interfere with other menu
10133 entries.
10134 (MainWindow.build_menu): remove an incorrect comment.
10135
10136 2002-09-10 Bernhard Herzog <[email protected]>
10137
10138 * Thuban/UI/mainwindow.py (MainWindow.Map): New.
10139 (_tool_command): Add sensitive parameter
10140 (_has_visible_map): Sensitivity callback to tools and other
10141 commands that require a visible map. Use it in map_zoom_in_tool,
10142 map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
10143 and map_full_extent
10144
10145 2002-09-06 Bernhard Herzog <[email protected]>
10146
10147 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
10148 VIEW_POSITION
10149
10150 2002-09-04 Frank Koormann <[email protected]>
10151
10152 * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
10153
10154 2002-09-02 Bernhard Herzog <[email protected]>
10155
10156 * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
10157 wxWindows already and our implementation doesn't work correctly
10158 with wxGTK 2.3:
10159 (MapCanvas.__init__): Remove the instance variable
10160 (MapCanvas.OnPaint): Always call do_redraw when there's a map to
10161 be drawin
10162 (MapCanvas.OnIdle): Removed.
10163
10164 * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
10165 a parameter to determine the size of the rectangle.
10166 (MapCanvas.find_shape_at): Create the box around the point on a
10167 layer by layer basis and make the size depend on the shape type.
10168 This solves a problem with the selection of point shapes at the
10169 border of the layer's bounding box
10170
10171 2002-08-30 Bernhard Herzog <[email protected]>
10172
10173 * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
10174 for the sensitivity of remove layer.
10175 (_can_remove_layer): New. Sensitivity callback for remove layer
10176 (Command layer_remove): Use _can_remove_layer
10177
10178 * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
10179 determine whether a given layer can be deleted.
10180
10181 * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
10182 (MapCanvas.do_redraw): Get rid of the unused update_region
10183 instance variable
10184
10185 * Thuban/UI/view.py: Add/update some doc-strings.
10186
10187 * test/: new subdirectory with a bunch of unit tests.
10188
10189 * test/README, test/test_table.py, test/test_save.py,
10190 test/test_menu.py, test/test_load.py: Initial set of tests and
10191 brief instructions on how to run them
10192
10193 2002-08-29 Bernhard Herzog <[email protected]>
10194
10195 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
10196 arcs with multiple parts.
10197
10198 * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
10199 Handle degenrate rectangles.
10200
10201 * Thuban/Model/table.py: Make writing records work correctly:
10202 (Table.__init__): Keep track of whether the DBF is open for
10203 writing
10204 (Table.write_record): Open the DBF file for writing when necessary
10205
10206 2002-08-27 Bernhard Herzog <[email protected]>
10207
10208 * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
10209 dbf files only for reading by default. Use a new writable dbf
10210 object for writing.
10211
10212 2002-08-26 Bernhard Herzog <[email protected]>
10213
10214 * Thuban/UI/mainwindow.py: Refactor the context creation:
10215 (MainWindow.Context): New method to return a context
10216 (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
10217 new method
10218
10219 * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
10220 layer table specific code from TableGrid into LayerTableGrid
10221 (TableFrame, LayerTableFrame): Split the layer table specific code
10222 from TableFrame into LayerTableFrame
10223 (LayerTableGrid.select_shape): Remove a debug print
10224
10225 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
10226 LayerTableFrame
10227
10228 2002-08-23 Bernhard Herzog <[email protected]>
10229
10230 * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
10231 absolute filename.
10232
10233 2002-08-22 Bernhard Herzog <[email protected]>
10234
10235 * Thuban/Model/table.py (Table.write_record): New method to write
10236 records.
10237 (Table.__init__): Open the DBF file for writing too.
10238
10239 * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
10240 into the underlying table.
10241
10242 * extensions/shapelib/shapefil.h (DBFCommit),
10243 extensions/shapelib/dbfopen.c (DBFCommit): New API function to
10244 commit any changes made to the DBF file.
10245
10246 * Thuban/UI/mainwindow.py (make_check_current_tool)
10247 (_tool_command): Put the code that generates the "checked"
10248 callback into a separate function so that we can reuse it
10249 elsewhere
10250
10251 * Thuban/Model/save.py (Saver): New class to handle serializing a
10252 session into an XML file. The main reason to introduce a class is
10253 that applications built on Thuban can derive from it so that they
10254 can save additional information in a session file.
10255 (save_session): Delegate almost all the work to the Saver class.
10256 Rename the filename argument to file because it may be a file like
10257 object now.
10258
10259 * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
10260 code. Remove the little test code which would be executed when the
10261 module is run as a script which didn't work anymore since it can't
10262 import the other Thuban modules.
10263 (ProcessSession, load_session): Refactor the ProcessSession to
10264 have one method for each element start and end tag so that derived
10265 classes can easily override the processing of individual tags.
10266 Also, always parse with namespaces enabled because applications
10267 built on top of Thuban will likely use namespaces if they extend
10268 the session file format.
10269
10270 2002-08-21 Bernhard Herzog <[email protected]>
10271
10272 * setup.py (ThubanInstall.run): Don't repr install_lib_orig
10273 because thubaninit_contents will do it for us.
10274
10275 2002-08-16 Jan-Oliver Wagner <[email protected]>
10276
10277 * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
10278 tree window already open
10279
10280 2002-08-15 Bernhard Herzog <[email protected]>
10281
10282 * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
10283 with self.
10284
10285 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
10286 when we have actually captured it.
10287
10288 * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
10289 shapefile and destroy the table.
10290
10291 * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
10292
10293 2002-08-14 Bernhard Herzog <[email protected]>
10294
10295 * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
10296 instance variable columns
10297 (RecordTable.GetTypeName): row and col may be negative in some
10298 cases.
10299
10300 * setup.py (InstallLocal.initialize_options)
10301 (InstallLocal.finalize_options, InstallLocal.user_options): New
10302 option create-init-file to build a thubaninit.py when running
10303 install_local
10304 (InstallLocal.run): Create the thubaninit.py module when requested
10305 (thubaninit_contents): Split the template into several parts and
10306 create a new function thubaninit_contents that creates the
10307 contents of a thubaninit module.
10308 (ThubanInstall.run): Use the new function to create the thubaninit
10309 module.
10310
10311 2002-07-30 Bernhard Herzog <[email protected]>
10312
10313 * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
10314 cleanup.
10315 (ThubanApplication.MainLoop): Extend to automatically call OnExit.
10316
10317 * Thuban/Model/session.py (Session.Destroy): Don't bypass the
10318 direct base class' Destroy method.
10319
10320 * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
10321 layers.
10322 (Map.Destroy): Destroy the label_layer as well and call the
10323 inherited Desatroymethod first so that no more messages are
10324 issued.
10325 (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
10326 message if the stacking order actually has changed. Add
10327 doc-strings.
10328 (Map.BoundingBox): Correct the doc-string.
10329 (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
10330 (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
10331
10332 * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
10333 all labels.
10334
10335 2002-07-29 Bernhard Herzog <[email protected]>
10336
10337 * Thuban/Model/map.py (Map.subscribe_layer_channels)
10338 (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
10339 to a layer's channels into separate methods.
10340 (Map.RemoveLayer, Map.AddLayer): Call the new methods
10341 (Map.Destroy): Unsubscribe from a layer's channels before
10342 destroying it.
10343
10344 * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
10345 selected_layer parameter to searched_layer which is the layer to
10346 search in.
10347 (MapCanvas.SelectShapeAt): New parameter layer to restrict the
10348 search to that layer. Return the selected layer and shape.
10349
10350 * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
10351 typo
10352
10353 2002-07-24 Bernhard Herzog <[email protected]>
10354
10355 * Thuban/UI/application.py (ThubanApplication.create_session):
10356 Extend the doc string.
10357 (ThubanApplication.subscribe_session)
10358 (ThubanApplication.unsubscribe_session): New methods to
10359 subscribe/unsubscribe to/from session channels.
10360 (ThubanApplication.SetSession): Call the new methods here.
10361 (ThubanApplication.maps_changed, ThubanApplication.set_map):
10362 Renamed set_map to maps_changed. Its now a subscriber for
10363 MAPS_CHANGED.
10364
10365 * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
10366 x-coordinate in case of simple clicks
10367
10368 * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
10369 don't pass it as a parameter
10370
10371 * Thuban/Model/session.py (Session.RemoveMap): New
10372
10373 * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
10374 window size into a parameter.
10375
10376 2002-07-23 Bernhard Herzog <[email protected]>
10377
10378 * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
10379 just commands.
10380
10381 * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
10382 parameter list a bit to allow setting the window title and the
10383 initial message in the status bar. Update the callers.
10384
10385 * Thuban/UI/application.py (ThubanApplication.OnInit)
10386 (ThubanApplication.CreateMainWindow): Put the mainwindow
10387 instantiation into a separate method so that it can be overridden
10388 by a subclass.
10389
10390 2002-07-19 Bernhard Herzog <[email protected]>
10391
10392 * Thuban/Model/session.py: Issue a CHANGED message every time
10393 another changed message is issued to make it easier to get
10394 notified of changes.
10395 (Session): Update the doc string
10396 (Session.forward): Issue changed-events as CHANGED as well.
10397 (Session.changed): Overwrite the inherited version to issue
10398 CHANGED events as well.
10399
10400 * Thuban/UI/tree.py: We can now simply subscribe to the session's
10401 CHANGED channel to be informed of changes.
10402 (SessionTreeCtrl.session_channels): Not needed any longer.
10403 (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
10404 Only have to (un)subscribe CHANGED
10405
10406 * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
10407
10408 * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
10409 for the wxPython locale bug to __init__.py so that it's
10410 automatically executed by anybody using UI code from Thuban.
10411
10412 2002-07-18 Bernhard Herzog <[email protected]>
10413
10414 * Thuban/UI/main.py (main): app no longer needs to be global
10415
10416 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
10417 as parameter and store it in an instance variable
10418 (MainWindow.invoke_command, MainWindow.update_command_ui)
10419 (MainWindow.save_modified_session, MainWindow.NewSession)
10420 (MainWindow.OpenSession, MainWindow.SaveSession)
10421 (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
10422 application object.
10423
10424 * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
10425 the main window with self.
10426
10427 * Thuban/UI/context.py: New module with the context class
10428
10429 * Thuban/UI/command.py (Command): Update doc string.
10430
10431 * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
10432 MainWindow.update_command_ui): Pass an instance of the context
10433 class to the command's methods
10434 (check_current_tool, call_method): Handle the new context
10435 implementation
10436
10437 * Examples/simple_extensions/simple_tool.py (simple_tool,
10438 check_simple_tool): Handle the new context implementation
10439
10440 * Examples/simple_extensions/simple_command.py (simple_command):
10441 Handle the new context implementation. Update the comments about
10442 the context.
10443
10444 * Thuban/UI/application.py (ThubanApplication.SetSession): Add
10445 doc-string
10446 (ThubanApplication.Session): New method to return the session
10447 object
10448
10449 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
10450 interactor's selected_layer may not be a layer of the current
10451 session when the tree is updated while a new session is being set.
10452
10453 2002-07-17 Bernhard Herzog <[email protected]>
10454
10455 * Thuban/UI/tree.py (color_string): Removed. No longer used.
10456 (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
10457 update_tree into update_tree and add_items. The tree now uses a
10458 more generic way to display the contents of the tree.
10459 (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
10460
10461 * Thuban/Model/layer.py (Layer.TreeInfo),
10462 Thuban/Model/extension.py (Extension.TreeInfo),
10463 Thuban/Model/map.py (Map.TreeInfo),
10464 Thuban/Model/session.py (Session.TreeInfo):
10465 Add TreeInfo methods to implement the new tree view update scheme
10466
10467 2002-07-16 Bernhard Herzog <[email protected]>
10468
10469 * Thuban/UI/application.py: Don't use "import from" for the
10470 MainWindow. It can't always be resolved.
10471 (ThubanApplication.OnInit): change reference to MainWindow
10472 accordingly.
10473
10474 * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
10475 completely
10476
10477 2002-07-10 Bernhard Herzog <[email protected]>
10478
10479 * setup.py (create_init_module): New configurable variable whose
10480 default depends on the platform we're running on.
10481 (ThubanInstall.initialize_options): Initialize
10482 self.create_init_module from the global create_init_module
10483 (ThubanInstall.user_options): indictate that the options
10484 create-init-module and init-module-dir have arguments.
10485
10486 * setup.py: In the setup call change the version number to include
10487 cvs.
10488
10489 * MANIFEST.in: Add the files in Examples
10490
10491 2002-07-09 Bernhard Herzog <[email protected]>
10492
10493 * setup.py: In the setup call, use the thuban homepage as the
10494 value of the url parameter.
10495
10496 * Examples: New subdirectory for examples.
10497
10498 * Examples/simple_extensions/simple_tool.xpm,
10499 Examples/simple_extensions/simple_tool.py,
10500 Examples/simple_extensions/simple_command.py,
10501 Examples/simple_extensions/README: Simple examples showing how to
10502 add new commands and tools.
10503
10504 * setup.cfg (bdist_rpm): Add the default value for prefix and tell
10505 bdist_rpm that we also have an install script.
10506 (bdist_inno): Add 2002 to the copyright notice.
10507
10508 * setup.py: Create a file in python's site-packages directory to
10509 make installation of Thuban as a library easier.
10510 (ThubanInstall.user_options): Add two new options,
10511 create-init-module and init-module-dir
10512 (ThubanInstall.expand_with_pure_python_dirs): New method to expand
10513 filenames for installation in the default directories.
10514 (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
10515 the inherited methods to capture some filenames before they're
10516 transformed too much by distutils.
10517 (ThubanInstall.run): Create the init module if requested.
10518 (ThubanInstall.thuban_init_filename): New method to return the
10519 full name of the init module.
10520 (ThubanInstall.get_outputs): Append the filename of the init
10521 module.
10522
10523 2002-07-08 Bernhard Herzog <[email protected]>
10524
10525 * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
10526 handle the prefix properly which means that the default for the
10527 installation prefix should be /usr for RPMs and /usr/local when
10528 doing a normal source install.
10529 (bdist_rpm_install_script): Script to override the default install
10530 commands in the specfile generated by the bdist_rpm command.
10531 (thuban_bdist_rpm.user_options): Add a prefix option
10532 (thuban_bdist_rpm.initialize_options): Init the prefix option.
10533 Create the script files for the spec files as empty files here
10534 (thuban_bdist_rpm._make_spec_file): Override the inherited method
10535 to fill the script files with content.
10536
10537 * Thuban/Model/save.py (relative_filename): Wrapper around
10538 Thuban.Lib.fileutil.relative_filename that accepts an empty dir
10539 argument. save_session now automatically uses this version,
10540 solving a problem when saving to a relative filename.
10541
10542 * setup.py: In the setup call, make sure that the library
10543 directories are under $prefix/lib not directly under $prefix.
10544
10545 2002-06-20 Jan-Oliver Wagner <[email protected]>
10546
10547 * Thuban/Model/extension.py: new module to handle extension objects.
10548 * Thuban/Model/messages.py: new messages for extensions.
10549 * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
10550 Session.AddExtension): new for handling extensions.
10551 Also some other minor changes to round up extension handling.
10552 * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
10553 of Extension titles and title and names of its objects.
10554
10555 2002-05-29 Bernhard Herzog <[email protected]>
10556
10557 * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
10558 the events for a command.
10559 (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
10560 Call bind_command_events to bind the events. add_toolbar_command
10561 can now bind events too so that it's possible to have commands
10562 that are only available through the toolbar.
10563 (MainWindow.init_ids): New instance variable events_bound to keep
10564 track of for which commands events have been bound.
10565
10566 2002-05-28 Bernhard Herzog <[email protected]>
10567
10568 * Thuban/UI/menu.py: New module to build and manage menus.
10569
10570 * Thuban/UI/mainwindow.py: Remove some unused imports.
10571 (MainWindow.__init__, main_menu): move the definition of the main
10572 menu from __init__ to the Menu instance main_menu.
10573 (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
10574 build the menu bar and sub-menus from a menu description.
10575
10576 * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
10577 startup file
10578 (ThubanApplication.read_startup_files): New method to run
10579 ~/.thuban/thubanstart.py
10580
10581 * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
10582 Move the toolbar definition to the Menu instance main_toolbar.
10583 (MainWindow.build_toolbar): New method to build the toolbar
10584 similar to the build_menu methods
10585
10586 2002-05-23 Bernhard Herzog <[email protected]>
10587
10588 * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
10589 layer_outline_color. Fix it in the definition of the command too.
10590
10591 * Thuban/UI/command.py (Command): Fix typo in doc string
10592
10593 2002-05-22 Bernhard Herzog <[email protected]>
10594
10595 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
10596 in the docstring
10597
10598 2002-05-15 Bernhard Herzog <[email protected]>
10599
10600 * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
10601 when the shapefile is empty.
10602 (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
10603 now return None for empty shapefiles. Update doc-strings.
10604
10605 * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
10606 the layer's bbox being None.
10607
10608 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
10609 layer's bbox being None.
10610
10611 * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
10612 necessary.
10613 (MapCanvas.__init__): New instance variables, last_selected_layer
10614 and last_selected_shape to determine how the selection has
10615 changed.
10616
10617 * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
10618 AutoSizeColumns because it will cause a traversal of the entire
10619 table which for large .dbf files will take a very long time.
10620
10621 2002-05-14 Bernhard Herzog <[email protected]>
10622
10623 * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
10624 maximum depth for the tree than shapelib does by default.
10625
10626 2002-05-10 Bernhard Herzog <[email protected]>
10627
10628 * setup.py (py_modules): The shptree modules doesn't have a
10629 wrapper, so don't include it in the py_modules
10630
10631 2002-05-08 Bernhard Herzog <[email protected]>
10632
10633 * extensions/shapelib/shptree.c (compare_ints): Make arguments
10634 const void * as in the qsort prototype
10635 (SHPTreeFindLikelyShapes): Remove some unused variables.
10636
10637 * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
10638 maintains to redraw the window during a drag.
10639 (MapCanvas.unprojected_rect_around_point): New method to determine
10640 a small region around a point for hit-testing.
10641 (MapCanvas.find_shape_at): Only test the shapes in a small region
10642 around the point.
10643
10644 * setup.py: Increment the version to 0.1.2
10645
10646 * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
10647 debug print and set session to None after unsubscribing
10648
10649 2002-05-07 Bernhard Herzog <[email protected]>
10650
10651 * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
10652 the file to have a .thuban extension.
10653
10654 * Thuban/UI/tree.py (session_channels): New class constant with
10655 all the session channels to subscribe to to update the tree
10656 (SessionTreeCtrl.session_changed): Remember the session so that we
10657 can unsubscribe properly. Use the new class constant to
10658 unsubscribe from the old session and subscribe to the new one.
10659 (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
10660 subscriptions of the SessionTreeCtrl.
10661 (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
10662
10663 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
10664 Session Tree" command to the file menu.
10665
10666 * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
10667 as update_region to the renderer.
10668
10669 * Thuban/UI/renderer.py
10670 (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
10671 update box is now directly a tuple, not a wxRect anymore.
10672
10673 * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
10674 prints.
10675
10676 2002-05-07 Bernhard Herzog <[email protected]>
10677
10678 * setup.py: Add the shptree extension module. See
10679 extensions/pyshapelib/ChangeLog for more details.
10680
10681 * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
10682 extensions/shapelib/dbfopen.c: Really update to the versions of
10683 shapelib 1.2.9. For some reason it wasn't really done on
10684 2002-04-11.
10685
10686 * extensions/shapelib/shptree.c: Modified version of shptree.c of
10687 shapelib 1.2.9. The only real difference is the use of qsort
10688 instead of a bubble sort implementation
10689
10690 * Thuban/Model/layer.py (Layer.__init__): New instance variable
10691 shapetree to hold the shapelib quadtree for the shapefile
10692 (Layer.open_shapefile): Create the quad tree.
10693 (Layer.ShapesInRegion): New method to return the ids of shapes in
10694 a given region using the quad tree.
10695
10696 * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
10697 comment
10698 (draw_polygon_shape): Accept both arcs and polygons.
10699 (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
10700 the api.
10701
10702 * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
10703 return the shape ids to be rendered in a given layer.
10704 (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
10705 ids. Use draw_polygon_shape to draw arc shapes as well.
10706 (ScreenRenderer.RenderMap): New parameter for the rectangle that
10707 has to be updated
10708 (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
10709 calling it's ShapesInRegion method.
10710
10711 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
10712 update_region for the update region.
10713 (MapCanvas.OnPaint): Maintain the update region
10714 (MapCanvas.do_redraw): Pass the bounding box of the update_region
10715 to the renderer when drawing the bitmap. Reset the update_region.
10716
10717 2002-05-03 Bernhard Herzog <[email protected]>
10718
10719 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
10720 MainWindow.OpenSession): Change the file extension of the session
10721 files to .thuban
10722
10723 * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
10724 Move the map channels to be forwarded by the session into the
10725 class constant with forwarded_channels. Also add
10726 LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
10727 forwarded_channels
10728
10729 * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
10730 typo and some rewording).
10731
10732 2002-05-02 Bernhard Herzog <[email protected]>
10733
10734 * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
10735 around to speed up most redraws:
10736 (MapCanvas.__init__): New instance variable bitmap which holds the
10737 bitmap
10738 (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
10739 self.bitmap to draw.
10740 (MapCanvas.full_redraw): New method to force a full redraw
10741 including the bitmap
10742 (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
10743 make sure the bitmap is redrawn.
10744 (MapCanvas.projection_changed, MapCanvas.set_view_transform,
10745 MapCanvas.shape_selected): Call full_redraw instead of readraw to
10746 make sure the bitmap is redrawn.
10747 (MapCanvas.OnSize): New method to handle size events so that the
10748 bitmap can be redrawn.
10749
10750 2002-04-29 Bernhard Herzog <[email protected]>
10751
10752 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
10753 canvas' VIEW_POSITION event
10754 (MainWindow.view_position_changed): Handler for VIEW_POSITION.
10755 Update the text in the status-bar accordingly.
10756
10757 * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
10758 (MapCanvas.__del__): Implement because Publisher.__del__ has to be
10759 called.
10760 (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
10761 current_position
10762 (MapCanvas.set_current_position): New method to set
10763 current_position. Issue a VIEW_POSITION event
10764 (MapCanvas.CurrentPosition): New public method to return the value
10765 of current_position. Should be called when the VIEW_POSITION event
10766 is processed.
10767 (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
10768 Update the position.
10769 (MapCanvas.OnLeaveWindow): Set the position to None.
10770
10771 * Thuban/UI/messages.py (VIEW_POSITION): New message for the
10772 position in the statusbar
10773
10774 2002-04-26 Frank Koormann <[email protected]>
10775
10776 * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
10777
10778 2002-04-24 Frank Koormann <[email protected]>
10779
10780 * Resources/Bitmaps/identify.xpm: shadow added
10781
10782 * Resources/Bitmaps/fullextent.xpm: new
10783
10784 2002-04-22 Jan-Oliver Wagner <[email protected]>
10785
10786 * Thuban/UI/tree.py (update_tree): added test for None on map bounding
10787 box
10788
10789 2002-04-21 Jan-Oliver Wagner <[email protected]>
10790
10791 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
10792
10793 * Thuban/UI/tree.py (update_tree): added added map extent
10794
10795 * Thuban/UI/mainwindow.py (_method_command): extended by parameter
10796 icon; added map_full_extend as tool
10797
10798 2002-04-19 Jan-Oliver Wagner <[email protected]>
10799
10800 * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
10801 saving _new_ sessions
10802
10803 * Thuban/Model/session.py (create_empty_session): new session
10804 don't have a filename (set to None)
10805
10806 * Thuban/UI/tree.py (update_tree): added filename and modified flag
10807
10808 * Thuban/Model/load.py (ProcessSession): convert projection
10809 parameters from unicode to regular string
10810
10811 * Data/iceland_sample.session: Added UTM Zone 26 projection.
10812
10813 2002-04-11 Bernhard Herzog <[email protected]>
10814
10815 * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
10816 extensions/shapelib/dbfopen.c: Update to the versions of shapelib
10817 1.2.9
10818
10819 * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
10820 the pyshapelib directoy into the list of include dirs, so that
10821 pyshapelib_api.h can be found.
10822
10823 * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
10824 holds the pyshapelib C-API
10825 (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
10826 pyshapelib_api to access the shapelib functions.
10827 (initwxproj): Import the c_api from the shapelib module and
10828 initialize pyshapelib_api.
10829
10830 2002-04-04 Bernhard Herzog <[email protected]>
10831
10832 * setup.py (thuban_bdist_rpm.initialize_options): Use
10833 initialize_options to create the scripts for the rpm.
10834
10835 * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
10836
10837 2002-04-03 Bernhard Herzog <[email protected]>
10838
10839 * setup.py: Increment version to 0.1.1
10840
10841 * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
10842 Layer" and "Remove Layer" commands from the layer menu to the map
10843 menu
10844
10845 2002-02-15 Bernhard Herzog <[email protected]>
10846
10847 * Thuban/Model/layer.py (Layer.Shape): list append only takes one
10848 argument (python <= 1.5.2 erroneously accepted multiuple
10849 arguments)
10850
10851 2002-02-04 Bernhard Herzog <[email protected]>
10852
10853 * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
10854 RecordGrid in the identifyview.
10855 (IdentifyView.__init__): Use IdentifyGridCtrl instead of
10856 IdentifyListCtrl. The grid allows editing of the values.
10857
10858 * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
10859 implementing a grid for a single row of a thuban table.
10860
10861 * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
10862 layers by default. Easier to use than the previous default of only
10863 searching through the select layer which meant that if no layer
10864 was selected, you couldn't select a shape.
10865
10866 * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
10867
10868 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
10869 stroke_width attribute
10870
10871 * Thuban/Model/save.py (save_session): Write the new stroke_width
10872 attribute
10873
10874 * Thuban/Model/load.py (ProcessSession.startElement): Read the
10875 stroke_width attribute
10876
10877 * Thuban/Model/layer.py (Layer.__init__): New parameter and
10878 instance variable stroke_width
10879 (Layer.SetStrokeWidth): Set the stroke_width.
10880
10881 2002-02-01 Bernhard Herzog <[email protected]>
10882
10883 * extensions/thuban/wxproj.cpp (project_points): Fix two
10884 off-by-one errors in the last loop that joins the various parts
10885 together.
10886
10887 2002-01-14 Bernhard Herzog <[email protected]>
10888
10889 * setup.py (data_dist.make_distribution): Fix some typos
10890
10891 2001-09-18 Bernhard Herzog <[email protected]>
10892
10893 * README: Slight tweaking in preparation for the 0.1 release
10894
10895 * setup.cfg: Add section for sdist to create both tgz and zip
10896 archives
10897
10898 * setup.py: increase version number to 0.1
10899 (data_dist): New command class for data distribution
10900
10901 2001-09-14 Bernhard Herzog <[email protected]>
10902
10903 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
10904 Handle the case of no layer (i.e. layer is None) properly.
10905
10906 * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
10907 Set the initial selection of the combo boxes to reflect the
10908 projection we're starting with in a way that works on windows,
10909 too.
10910
10911 * Thuban/Lib/connector.py (Connector.print_connections): Print the
10912 puiblisher's ids in hex to make it easier to compare them to the
10913 standard repr of python methods
10914
10915 * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
10916 messages
10917
10918 2001-09-13 Bernhard Herzog <[email protected]>
10919
10920 * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
10921 deselect the layer if no layer is selected
10922
10923 * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
10924 idle time when there actually is something to draw. If there's
10925 nothing to draw simply clear the window
10926 (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
10927 (MapCanvas.SetMap): force a redraw in all cases because
10928 FitMapToWindow doesn't always do it.
10929 (MapCanvas.ZoomFactor): Add an optional parameter, center, to
10930 specify the point to move into the center of the window
10931 (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
10932 dragged, zoon in/out by a factor of 2
10933 (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
10934 index, i.e. reversed drawing order) so that objects appearing to
10935 be in from of others are selected first. This is probably mostly
10936 relevant for point shapes where the symbols used may overlap
10937
10938 * Thuban/Model/session.py (create_empty_session): Unset the
10939 modified bit before returning it
10940
10941 * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
10942 create_empty_session session to create the new, empty session.
10943
10944 * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
10945 the tool bitmaps.
10946 (MainWindow.OnClose, MainWindow.save_modified_session): Separate
10947 the code that asks whether the session should be saved into the
10948 new method save_modified_session.
10949 (MainWindow.OpenSession, MainWindow.NewSession): Use the new
10950 method to save modified session here too.
10951
10952 2001-09-11 Bernhard Herzog <[email protected]>
10953
10954 * setup.py (InnoIconItem): fix typo
10955
10956 (thuban_bdist_inno.run):
10957 (bdist_inno.run): Move the decision not to create symlinks on
10958 non-nt platforms to thuban_bdist_inno and do it unconditinally
10959 since we never want to create the symlinks here
10960
10961 2001-09-10 Bernhard Herzog <[email protected]>
10962
10963 * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
10964 identify view immediately
10965
10966 * Thuban/UI/controls.py: New file with two classes RecordListCtrl
10967 and SelectableRecordListCtrl that implement the code shared by the
10968 identify view and the label dialog
10969
10970 * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
10971 new class RecordListCtrl
10972
10973 * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
10974 return value of GetValue is None instead of using it as a boolean
10975 directly so that Zero numbers are handled properly.
10976 (LabelListCtrl): Derive from the new class
10977 SelectableRecordListCtrl
10978
10979 * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
10980 (Proj4Dialog.dialogLayout): Make the window resizable and set the
10981 size of the text control explicitly to make the sizers work on
10982 both Windows and X.
10983
10984 2001-09-07 Bernhard Herzog <[email protected]>
10985
10986 * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
10987 that can limit the search to the currently selected layer.
10988 (MapCanvas.SelectShapeAt): Make sure that the currently selected
10989 layer stays selected even when no shape is found
10990 (MapCanvas.FitRectToWindow): If the rect has zero with or zero
10991 height do nothing (avoids zero division errors)
10992
10993 2001-09-06 Bernhard Herzog <[email protected]>
10994
10995 * Thuban/UI/tree.py (SessionTreeCtrl, SessionTreeView.__init__):
10996 Correct the spelling of SessionTreeCtrl. dabbrev is too damn
10997 convenient :-)
10998 (SessionTreeCtrl.__init__, SessionTreeCtrl.update_tree): Introduce
10999 a new instvar layer_to_item to map layers to tree items
11000 (SessionTreeCtrl.layer_selected): Select the appropriate tree item
11001 to match the current selection in the interactor
11002
11003 * Thuban/UI/interactor.py (Interactor.SelectedLayer):
11004 (Interactor.HasSelectedLayer): New methods to query the current
11005 selection
11006
11007 * Thuban/UI/mainwindow.py (MainWindow.current_layer):
11008 (MainWindow.has_selected_layer): Simply call the appropriate
11009 interactor method
11010
11011 * Thuban/UI/mainwindow.py (MainWindow.__init__):
11012 (MainWindow.LayerShowTable):
11013 (MainWindow.identify_view_on_demand): Store the interactor in an
11014 instvar and use that reference instead of going through main.app
11015
11016 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
11017 * Thuban/UI/application.py (ThubanApplication.OnInit):
11018 * Thuban/UI/main.py (main): Create the session tree view in main
11019 with the new mainwindow method ShowSessionTree and not directly
11020 the application's OnInit method
11021
11022 * Thuban/UI/tree.py (myTreeCtrlPanel):
11023 (SessioinTreeCtrl): Rename to SessioinTreeCtrl and turn it into a
11024 TreeCtrl isntead of a panel. This affects most method since we now
11025 refer to self instead of self.tree
11026 (SessionTreeView): New class implementing a non-modal dialog
11027 showing the session tree.
11028
11029 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Pass the
11030 layer to the tableview dialog.
11031
11032 * Thuban/UI/tableview.py: Add some doc-strings
11033 (TableGrid):
11034 (TableGrid.OnRangeSelect):
11035 (TableGrid.OnSelectCell):
11036 (TableFrame.__init__):
11037 (TableFrame.row_selected):
11038 Selecting rows in the grid view now updates the selected shapes
11039 through the TableFrame. To achieve this we derive TableGrid from
11040 Publisher and introduce the message type ROW_SELECTED which the
11041 TableFrame subscribes to and which is issued by OnRangeSelect and
11042 OnSelectCell
11043
11044 (DataTable.SelectRow): Removed because it's no longer needed in
11045 the row/shape selection scheme
11046
11047 * Thuban/UI/dialogs.py: New file implementing common classes for
11048 dialogs
11049
11050 * Thuban/UI/tableview.py (TableGrid.__init__): Don't subscribe to
11051 the SELECTED_SHAPE message anymore. This is now handled by the
11052 parent.
11053 (TableGrid.select_shape): Only update the selection if the shape
11054 is not None.
11055 (TableFrame): Inherit from the new NonModalDialog class.
11056 (TableFrame.__init__, TableFrame.select_shape): Handle the
11057 SELECT_SHAPE message.
11058 (TableFrame.OnClose): Extend the inherited method to unsubscribe
11059 SELECT_SHAPE
11060
11061 * Thuban/UI/mainwindow.py (MainWindow.init_dialogs):
11062 (MainWindow.add_dialog):
11063 (MainWindow.dialog_open):
11064 (MainWindow.remove_dialog):
11065 (MainWindow.get_open_dialog): New methods to maintain a dictionary
11066 of opened non-modal dialogs.
11067
11068 (MainWindow.__init__): Initialize the new non-modal dictionary
11069 management code
11070 (MainWindow.LayerShowTable): maintain separate dialogs for each
11071 table using the non-modal dialog management code to only open a
11072 view once for each table.
11073
11074 (MainWindow.IdentifyTool):
11075 (MainWindow.__init__):
11076 (MainWindow.identify_view_on_demand): Don't open the identify view
11077 in IdentifyTool anymore. This will be done automatically by the
11078 new method identify_view_on_demand which handles the
11079 SELECTED_SHAPE message so that the identify view will be opened on
11080 demand
11081
11082 * Thuban/UI/identifyview.py (IdentifyListCtrl.__init__): Remove
11083 the interactor argument. The SELECTED_SHAPE message is now handled
11084 by the parent.
11085 (IdentifyView.__init__): Add the interactor argument so that we
11086 can handle the SELECTED_SHAPE message here
11087 (IdentifyView.selected_shape): New method to handle the
11088 SELECTED_SHAPE messages
11089
11090 * Thuban/UI/identifyview.py (IdentifyView): Derive from the new
11091 NonModalDialog class
11092 (IdentifyView.OnClose): Extend the inherited version to
11093 unsubscribe SELECT_SHAPE
11094
11095 * Thuban/Model/session.py (Session.UnsetModified): Remove debug prints
11096
11097 2001-09-05 Bernhard Herzog <[email protected]>
11098
11099 * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
11100
11101 * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
11102 interactor to pass through to the MapCanvas
11103
11104 * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
11105 argument to the MainWindow constructor to get rid of the ugly hack
11106 that made main.app available early just so that the mapcanvas
11107 could access the interactor object.
11108
11109 2001-09-04 Bernhard Herzog <[email protected]>
11110
11111 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): New method
11112 that runs a modal message box
11113 (MainWindow.OnClose): Use the new method
11114 (MainWindow.RemoveLayer): Just do nothing in case no layer is
11115 selected. The command should be grayed out anyway, so there's no
11116 need to pop up a message box.
11117 (MainWindow.AddLayer): Pop up a message box with an error message
11118 if the shape file can't be opened
11119
11120 * Thuban/Model/layer.py (Layer.__init__): Open the shapefile
11121 immediately. This will cause an exception in case the file can't
11122 be opened and we can display an appropriate message.
11123
11124 * MANIFEST.in: Add extensions/pyprojection/LICENSE
11125
11126 * setup.py (thuban_bdist_rpm): New class implementing a Thuban
11127 specific bdist_rpm command.
11128
11129 * Thuban/UI/main.py: Catch ImportError exceptions when importing
11130 the locale module because it may not be available on some
11131 installations.
11132
11133 * extensions/pyprojection/LICENSE: Copy of the license text in
11134 Projection.i. Having it in a separate file makes it easier to
11135 refer to license text in e.g. RPMs
11136
11137 2001-09-03 Bernhard Herzog <[email protected]>
11138
11139 * setup.py: use wx-config instead of wxgtk-config because it's
11140 more generic
11141
11142 * setup.py (ThubanInstall.get_outputs): Add the symlink in
11143 <prefix>/bin to the outputs
11144 (ThubanInstall.link_file): New method to link files. We need this
11145 because the standard copy_files refuses to link non-existing
11146 files.
11147 (ThubanInstall.run): Remove the leading install root from the
11148 script filename if an install root was specified and use the new
11149 link_file method
11150
11151 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
11152 the window when the first layer is added to the map.
11153
11154 * setup.py (ThubanInstall.run): Honor the build root (self.root)
11155 when linking thuban.py to <prefix>/bin
11156
11157 2001-08-31 Bernhard Herzog <[email protected]>
11158
11159 * setup.py: In the setup call, the install parameters shouldn't
11160 have trailing slashes because distutils on non-posix platforms
11161 doesn't like that. The same applies to other directories like
11162 "Resources/Bitmaps"
11163
11164 In the configuration section for nt, move the wxWindows directory
11165 optins into the part clearly marked as editable.
11166
11167 (InstallLocal.initialize_options):
11168 (InstallLocal.user_options): remove the currently unused debug
11169 flag
11170 (thuban_build_py.find_all_modules): Add this method so that it
11171 works for our case of having packages and modules in one
11172 distribution as well.
11173 (ThubanInstall.initialize_options):
11174 (ThubanInstall.finalize_options):
11175 (ThubanInstall.user_options):
11176 (ThubanInstall.boolean_options): Add new options, do-symlink and
11177 extra files. Since these are the first ThubanInstall specific
11178 options, override user_options and boolean_options
11179 (ThubanInstall.run): Honor the new do-symlink and extra-files
11180 options.
11181 (ThubanInstall.get_outputs): Add to override the base-class's
11182 version and add the extra-files to the outputs
11183 (bdist_inno): New class for windows distributions with Inno Setup
11184 (InnoIconItem): Helper class for bdist_inno
11185 (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
11186 this together with the appropriate parameters, to the setup call.
11187
11188 * setup.cfg (bdist_inno): added new section for the inno setup
11189 installer
11190
11191 * Thuban/UI/tree.py (myTreeCtrlPanel.__init__): New inst var
11192 changing_selection to avoid recursive selection events when
11193 modifying the selection in response to a selection event.
11194 (myTreeCtrlPanel.normalize_selection): Set the new inst var when
11195 changing the tree's selection.
11196 (myTreeCtrlPanel.OnSelChanged): Only normalize the selection when
11197 we're not being called indirectly from normalize_selection.
11198
11199 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): Call
11200 event.Check only if the command is actuall checkable.
11201 (MainWindow.__init__): Call the toolbar's Realize method to make
11202 sure that the items are actually shown
11203
11204 2001-08-28 Bernhard Herzog <[email protected]>
11205
11206 * setup.py: Fix some doc strings
11207
11208 * ChangeLog: started
11209

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26