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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2530 - (show annotations)
Thu Jan 20 18:32:59 2005 UTC (20 years, 1 month ago) by bernhard
Original Path: trunk/thuban/ChangeLog
File size: 429098 byte(s)
Small Changelog entry improvement.

1 2005-01-20 Russell Nelson <[email protected]>
2
3 * Thuban/UI/mainwindow.py(view_position_changed): Warn user about
4 misprojected layers when their lat/lon bounding
5 box exceeds rational lat/lon values.
6
7 2005-01-20 Bernhard Reiter <[email protected]>
8
9 * Thuban/UI/about.py (unicodeToLocale()): Improved:
10 Use 'ascii' and then 'replace' for other characters
11 when getdefaultlocale returns None. Thanks to Bernhard H. .
12
13 2005-01-20 Bernhard Reiter <[email protected]>
14
15 * Thuban/UI/classgen.py (OnRetrieve()): Added a comment
16 that OnRangeText might be called twice and using None as argument.
17
18 2005-01-20 Bernhard Reiter <[email protected]>
19
20 * Thuban/UI/classgen.py (OnRetrieve()): Add a OnRangeText(0)
21 to work around a different in wx Behaviour noticed on MacOSX,
22 thanks to Lorenzo Moretti and Daniel Calvelo for the fix.
23
24 2005-01-20 Bernhard Reiter <[email protected]>
25
26 * Thuban/UI/about.py: take iso-8859-15 when getdefaultlocale returns
27 None. (Fixes rt#2910.)
28
29 2005-01-18 Frank Koormann <[email protected]>
30
31 New Extension: mouseposition
32 Tool to collect mouse click positions (map coordinates) in a dialog.
33
34 * Extensions/mouseposition/__init__.py: New, extension registration
35
36 * Extensions/mouseposition/mouseposition.py: New, implements the
37 dialog and adds a tool to Thuban mainwindow.
38
39 * Extensions/mouseposition/position.xpm: New, icon for tool.
40
41 2005-01-14 Jan-Oliver Wagner <[email protected]>
42
43 * Doc/manual/thuban-manual-de.xml: More translations.
44
45 2005-01-11 Frank Koormann <[email protected]>
46
47 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
48 Fix indention bug.
49
50 2005-01-09 Frank Koormann <[email protected]>
51
52 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
53 BugFix 2901: Explicitly copy layers ClassificationColumn since it
54 is not part of the layers Classification.
55
56 2005-01-03 Frank Koormann <[email protected]>
57
58 * Thuban/UI/renderer.py (ScreenRendererdraw_selection_incrementally):
59 BugFix 2883: Former implementation only worked on classified point
60 layers: KeyError was raised, now use the default size if field is None.
61
62 2004-12-27 Bernhard Reiter <[email protected]>
63
64 svgexport 1.0.0cvs: Fixed label export.
65
66 * Extensions/svgexport/test/test_svgmapwriter.py:
67 class TestSVGRenderer(): New class; new test test_label_font().
68
69 * Extensions/svgexport/svgmapwriter.py
70 (SVGRenderer.label_font()): initialised Font size with self.factor now,
71 makes test_label_font happy.
72
73 * Extensions/svgexport/TODO: crossed out fixed label export item.
74 Added item for options.
75
76 * Extensions/svgexport/__init__.py: Bumped version to 1.0.0cvs.
77
78 2004-12-27 Russell Nelson <[email protected]>
79
80 Middle mouse button pans.
81
82 * Thuban/UI/view.py (MapCanvas.__init__): Subscribe also
83 OnMiddleDown and OnMiddleUp events.
84 (MapCanvas.OnMiddleDown): New. Activate the pan tool and remember the
85 previously used tool.
86 (MapCanvas.OnMiddleUp): New. Reactivate the remebered tool used before
87 pressing the middle mouse button.
88
89 2004-12-27 Jan-Oliver Wagner <[email protected]>
90
91 * Doc/manual/thuban-manual-de.xml: More translations.
92
93 2004-12-23 Jan-Oliver Wagner <[email protected]>
94
95 * Thuban/UI/projdialog.py (ProjFrame.load_user_proj): Added a
96 \n to stderr after the warnings. Thanks to Russell Nelson.
97
98 2004-12-20 Nina Hueffmeyer <[email protected]>
99
100 * Extensions/ogr/ogrshapes.py: Fixed some issues from
101 Bernhard (coding guidelines etc.). Additionally it is now possible to
102 display shapefiles containing feature collections (e.g.polygons
103 with holes). Works with gdal 1.2.1 now.
104
105 * Extensions/ogr/test/test_OGRShapestore.py: Fixed some issues
106 from Bernhard (coding guidelines etc.). If ogr can't be imported,
107 tests are skipped now.
108
109 * Extensions/ogr/ogrstart.py: Fixed some typings.
110
111 2004-12-20 Bernhard Reiter <[email protected]>
112
113 * Extensions/svgexport/TODO: updated to add support for
114 raster layers and labels for 1.0.1.
115
116 * Extensions/svgexport/svgmapwriter.py (draw_raster_layer):
117 Issue a warning now.
118
119 2004-12-19 Bernhard Reiter <[email protected]>
120
121 * Extensions/svgexport/TODO: Added idea to support triggering
122 the application down the pipe.
123
124 2004-12-19 Bernhard Reiter <[email protected]>
125
126 svgexport: Improved code quality, mainly by better naming.
127
128 * Extensions/svgexport/svgmapwriter.py:
129 DrawPath() renamed to DrawPolygonPath(),
130 added documentation, improved comments and variable names.
131
132 * Extensions/svgexport/svgmapwriter.py,
133 Extensions/svgexport/test/test_svgmapwriter.py:
134 All using DrawPolygonPath() now, the default parameter closed=True
135 omitted.
136
137 * Extensions/svgexport/test/test_svgmapwriter.py:
138 renamed test_polygon_opened() to test_polyline()
139 renamed test_transparent_polygon() to test_transparent_polyline()
140
141 2004-12-18 Jan-Oliver Wagner <[email protected]>
142
143 Some fixes of gns2shp extension.
144
145 * Extensions/gns2shp/test/__init__.py: New. Make this directory a
146 package.
147
148 * Extensions/gns2shp/test/test_gns2shp.py: Add some import paths
149 dynamically.
150
151 * Extensions/gns2shp/test/README: Simplified description how to test.
152
153 * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed doc-string,
154 fixed some dimensions of fields according to the GNS documentation
155 which seems to change undocumented.
156 Now killing trailing \n and/or \r from MODIFY_DATE.
157 This fixes RT#2453.
158
159 2004-12-18 Bernhard Reiter <[email protected]>
160
161 svgexport 1.0.0: Treats holes and islands nicely. Documentation added.
162
163 * Extensions/svgexport/test/test_svgmapwriter.py:
164 Added new tests: test_export_polygon_with_hole()
165 and test_polygon_with_hole().
166
167 * Extensions/svgexport/svgmapwriter.py
168 (draw_polygon_shape()): Uses DrawPath correctly now.
169
170 * Doc/manual/thuban-manual.xml: Added documentation for stable
171 extention svgexport.
172 * Doc/manual/thuban-manual-de.xml: Copied English section about
173 svexport over.
174
175 * Extensions/svgexport/__init__.py: Bumped version number to 1.0.0.
176
177 * Extensions/svgexport/svgsaver.py,maplegend.py:
178 Moved from experimental to stable extension menu.
179
180 * Extensions/svgexport/TODO: updated.
181
182
183 2004-12-18 Bernhard Reiter <[email protected]>
184
185 Added Extensions/svgexport/TODO
186
187 2004-12-18 Bernhard Reiter <[email protected]>
188
189 Refactored in svgexport:
190 DrawPath replaces DrawPolygon; added newline in front of "M" in paths.
191
192 * Extensions/svgexport/svgmapwriter.py
193 Added verbosity level 3 to print out polygon points.
194 (class Point): added __repr__
195 (class Brush, __str__()): Added space after ,.
196 (DrawPolygon): Renamed to DrawPath()
197 (DrawPath): Takes list of polygons as input now, adds \n before "M"s.
198 (DrawLines): Using DrawPath now.
199
200 * Extensions/svgexport/test/test_svgmapwriter.py:
201 Replaced DrawPolygon() calls with DrawPath() and put the first argument
202 inside another list. Adapted test data with a newline before "M".
203
204 2004-12-18 Bernhard Reiter <[email protected]>
205
206 Refactored svgexport tests: 9 double tests runs eliminated;
207 code size reduced by 8 lines.
208
209 * Extensions/svgexport/test/test_svgmapwriter.py:
210 (class TestWithDC): Renamed to BaseTestWithDC, moved to top.
211 (class BaseWithDCtools): New, subclass from BaseTestWithDC.
212 (class TestDrawSplines): now subclass from BaseTestWithDCtools,
213 this fixed the double running of the nine tests of TestVirtualDC.
214 (class TestVirtualDC): Using self.dc and self.file from setUp().
215
216 2004-12-17 Bernhard Herzog <[email protected]>
217
218 Two windows specific fixes ported from thuban-1­0-branch:
219
220 * Thuban/UI/about.py (unicodeToLocale): Use getdefaultlocale
221 instead of getlocale because getlocale doesn't return a usable
222 encoding name on a german windows 2000
223
224 * setup.py: windows build: Removed the absolute path names and
225 made all prfixes relative to the directory containing setup.py.
226 Makes it a little easier to adapt to a different system.
227
228 2004-12-16 Bernhard Herzog <[email protected]>
229
230 Add support for PostGIS tables with LINESTRING geometries.
231 Fixes RT#2299
232
233 * Thuban/Model/postgisdb.py (shapetype_map): Add LINESTRING
234
235 * test/postgissupport.py
236 (PostgreSQLServer.get_default_static_data_db): Rename the "roads"
237 table to "roads-multi" because it now uses MULTILINESTRING
238 geometries and introduce a new "roads" table that uses LINESTRING
239 (coords_to_multilinestring): Make the doc string more precise
240 (coords_to_linestring): New. Create a LINESTRING WKT
241 representatin
242 (wkt_converter): Add coords_to_linestring
243 (upload_shapefile): Rephrase the doc-string a bit.
244
245 * test/test_postgis_db.py (TestPostGISShapestoreArc)
246 (LineStringTests)
247 (TestPostGISShapestoreLineString)
248 (TestPostGISShapestoreMultiLineString): Split
249 TestPostGISShapestoreArc into a base class LineStringTests and two
250 derived classes TestPostGISShapestoreLineString for LINESTRING
251 geometries and TestPostGISShapestoreMultiLineString for
252 MULTILINESTRING geometries. Most test methods are in the base
253 class with the exception of tests that explicitly check the raw
254 format.
255
256 2004-12-16 Bernhard Herzog <[email protected]>
257
258 Make the test suite work with PostGIS 0.8.2 and PostgreSQL 7.4
259
260 * test/postgissupport.py (find_postgis_sql): Different postgis
261 versions put the postgis.sql file into slightly different places
262 so we have to look in both. The updated doc string describes this
263 is more detail.
264
265 * test/test_postgis_db.py
266 (TestPostGISSpecialCases.test_column_name_quoting): The return
267 value of UniqueValues is unsorted, so it has to be sorted for
268 comparison.
269
270 2004-12-16 Bernhard Herzog <[email protected]>
271
272 Fix for RT#2237
273
274 * Thuban/UI/projdialog.py (ProjFrame._show_proj_panel): If the
275 panel to be shown is the UnknownProjPanel disable the OK and Try
276 buttons. Otherwise enable them.
277 (ProjFrame.__GetProjection): The UnknownProjPanel returns None for
278 the parameters. In that case __GetProjection also returns None
279 now.
280
281 2004-12-15 Bernhard Herzog <[email protected]>
282
283 * Thuban/UI/classgen.py (GenQuantilesPanel.__init__): Set the
284 minimum number of classes to 2. The calculate_quantiles needs at
285 least two and raises an exception otherwise.
286 Fixes RT#2549
287
288 2004-12-15 Bernhard Herzog <[email protected]>
289
290 * test/postgissupport.py (PostgreSQLServer.execute_sql): Extend to
291 so that it returns a result for select statements.
292 (PostgreSQLServer.server_version): New. Return the version of the
293 server software.
294 (PostgreSQLServer.require_authentication): The format of
295 pg_hba.conf has changed between PostgrSQL 7.2 and 7.3. Check the
296 server version and generate the file in the correct format
297
298 2004-12-15 Bernhard Herzog <[email protected]>
299
300 * test/postgissupport.py (PostgreSQLServer.is_running): Fix typo
301 in the doc string and rephrase it a little.
302
303 2004-12-15 Frank Koormann <[email protected]>
304
305 * test/test_load.py (TestAltPath.checkSession): New, extended checks if
306 session has been loaded successfully. The check is called by the relevant
307 tests after executing load_session().
308
309 2004-12-13 Bernhard Herzog <[email protected]>
310
311 Make sure the region used to determine which shapes are visible
312 actually matches the region on the printed page. If this isn't
313 done properly some shapes might not be printed.
314 Fixes RT #2692
315
316 * Thuban/UI/view.py (MapPrintout.draw_on_dc): The region for the
317 renderer has to be at the same position as the mapregion
318
319 * Thuban/UI/renderer.py (ExportRenderer.RenderMap): self.region
320 has to be moved by (self.shiftx, self.shifty) too.
321
322 2004-12-13 Bernhard Herzog <[email protected]>
323
324 * libraries/pyprojection/Projection.i: Work around a bug in the
325 generated python code which leads to exception in the __del__
326 method when the constructor fails. See the comments in the code
327 for more details.
328
329 * libraries/pyprojection/Projection.py: Updated from Projection.i
330 with SWIG.
331
332 2004-12-13 Bernhard Herzog <[email protected]>
333
334 * test/test_load.py (TestAltPath.test_01_single_path_error_fix)
335 (TestAltPath.test_02_path_error_fix_from_list)
336 (TestAltPath.test_05_path_error_fix_from_list_changed)
337 (TestAltPath.test_06_path_error_fix_from_list_fails): self.session
338 is destroyed in tearDown, so there's no need to do it in a test
339 case.
340
341 * Thuban/Model/load.py (SessionLoader.open_shapefile): Remove a
342 debug print
343
344 2004-12-13 Bernhard Herzog <[email protected]>
345
346 * Extensions/svgexport/test/test_svgmapwriter.py
347 (TestDrawSplines.setUp): Do not use super with the unittest
348 classes because in Python 2.2 they're still old-style classes.
349
350 2004-12-13 Frank Koormann <[email protected]>
351
352 Alternative Path feature: When loading a (moved) session where
353 shapefiles cannot be found, ask the user. Use the specified path
354 if further shapefiles are missing. However, ask the usr for confirmation
355 in such cases.
356
357 * test/test_load.py (TestAltPath): New, tests for alternative path feature
358 in load_session()
359 (Shapefile_CallBack): Helper, implements controllable callback.
360
361 * Thuban/UI/application.py (ThubanApplication.OnInit):
362 Added "alt_path" to self.path
363 (ThubanApplication.OpenSession): Added shapefile_callback as second
364 callback similar to db_connection_callback.
365 (ThubanApplication.run_alt_path_dialog): New, implementaion of
366 shapefile_callback. In addition to raising the dialog the control of
367 self.path('alt_path') is implemented here.
368
369 * Thuban/Model/load.py (SessionLoader.__init__): Added shapefile_callback.
370 (SessionLoader.open_shapefile): Open shapefile, eventually with
371 alternative path. This wrapps the "theSession.OpenShapefile(filename)"
372 formerly used in start_fileshapesource()/start_layer().
373 (SessionLoader.start_fileshapesource): Call open_shapefile().
374 (SessionLoader.start_layer): Call open_shapefile().
375 (load_session): Added shapefile_callback.
376
377 * Thuban/UI/altpathdialog.py: New, implements dialogs for alternative path
378 feature (search / check).
379
380 * Doc/manual/thuban-manual.xml: Added documentation of new feature.
381
382 2004-12-11 Bernhard Reiter <[email protected]>
383
384 svgexport 0.9.2: Point size supports for maps.
385
386 * Extensions/svgexport/svgmapwriter.py: Added import of SHAPETYPE_POINT
387 (def draw_point_shape): new parameter size defaults to 2 as before.
388 (draw_shape_layer_incrementally): Moved draw_func log line higher.
389 Added draw_func call with size when dealing with a point layer.
390
391 * Extensions/svgexport/__init__.py: bumped version to 0.9.2.
392
393 2004-12-11 Bernhard Reiter <[email protected]>
394
395 Made sure that newlines are inserted in the svg path d attributes
396 to raise the chance that the line length will be below 255 characters,
397 as recommended by REC SVG 1.1 in section 8.3.1.
398
399 * Extensions/svgexport/svgmapwriter.py(DrawPolygon):
400 Adding \n before L's and changed whitespace handling.
401
402 * Extensions/svgexport/test/test_svgmapwriter.py:
403 Adapted tests to new whitespace handling of DrawPolygon.
404
405 2004-12-11 Bernhard Reiter <[email protected]>
406
407 * Doc/technotes/coding_guidelines.txt: easy typo fixed.
408
409 * Extensions/svgexport/test/test_svgmapwriter.py:
410 Removed test_drawbezier in favour of new test_drawspline3 and
411 test_drawspline4 within new class TestDrawSplines(TestVirtualDC).
412 All only to test DrawSpline.
413
414 * Extensions/svgexport/svgmapwriter.py(DrawSpline):
415 New implementation now really using the strange algorithm of
416 xfig 3.1's approximated splines and its conversion to postscript
417 with one twist: SVG can do quadratic beziers, so skipped translation
418 to cubic beziers.
419 (TestWithDC): Typo in comment fixed.
420
421 2004-12-09 Martin Schulze <[email protected]>
422
423 * Thuban/Model/classgen.py: Added missing character encoding
424
425 * Extensions/wms/properties.py (OpenWMSProperties): removed
426
427 * Extensions/wms/parser.py (WMSCapabilitiesParser.error): Dropped
428 support for get_srs_discrepancies() since there are no
429 discrepancies anymore (was a thinko)
430
431 * Extensions/wms/layer.py (WMSLayer.GetMapImg): Improved graphic
432 format priority now that more formats are supported globally by
433 the render engine.
434
435 2004-12-08 Silke Reimer <[email protected]>
436 * Extensions/ogr/ogrshapes.py: Substituted ogr-method CloseRings
437 because it is not available in all versions of ogr
438
439 2004-12-08 Bernhard Reiter <[email protected]>
440 * Extensions/ogr/__init__.py: Added empty __init__.py to heal
441 global tests until a real one is commited.
442
443 2004-12-07 Nina Hüffmeyer <[email protected]>
444
445 * /Extensions/ogr/: Adding a new extension to read shapefiles with
446 ogr. It is planned to add other vector formats.
447
448 * /test/runtests.py: Adding tests from /Extensions/ogr/test/.
449
450 2004-12-07 Jan-Oliver Wagner <[email protected]>
451
452 * /Extensions/svgexport/test/test_svgmapwriter.py: Reverting
453 part of a (non-)fix to renable that the tests are always
454 executed.
455
456 2004-12-07 Bernhard Reiter <[email protected]>
457
458 * Extensions/svgexport/test/test_svgmapwriter.py:
459 Added test_drawbezier() to test DrawSpline().
460
461 * Extensions/svgexport/svgmapwriter.py(DrawSpline):
462 Really implemented bezier drawing.
463
464 * Extensions/svgexport/__init__.py: Bumped version of svgexport
465 to 0.9.1 because now the legend examples lines styles
466 will be drawing with beziers.
467
468 2004-12-05 Martin Schulze <[email protected]>
469
470 * Thuban/UI/renderer.py (raster_format_map): Added PNG, TIFF and
471 GIF as supported bitmap image formats (helpful for the WMS extension)
472
473 2004-11-30 Martin Schulze <[email protected]>
474
475 * Extensions/wms/test/test_ogclib.py (TestOGCLib.test_compareURLs):
476 Improved the test for the internal compare method
477
478 2004-11-27 Jan-Oliver Wagner <[email protected]>
479
480 * Thuban/UI/about.py (About.__init__): Added
481 Norbert Solymosi for hungarian translation and Ole Rahn
482 as contrbutor. Moved Bernhard Reiter from Contributor
483 to Developer.
484
485 2004-11-27 Bernhard Reiter <[email protected]>
486
487 * Extensions/svgexport/test/test_svgmapwriter.py:
488 Removed Jan from author list as he did not change enough significant
489 lines yet.
490
491 * Extensions/svgexport/__init__.py: Added Bernhard as author
492 of the Extension.
493
494 2004-11-27 Jan-Oliver Wagner <[email protected]>
495
496 * po/hu.po: New. Hungarian translation. Contributed
497 by Norbert Solymosi.
498
499 2004-11-26 Bernhard Herzog <[email protected]>
500
501 * Extensions/svgexport/test/test_svgmapwriter.py
502 (Testobjectexport.test_transparent_polygon): Commented out some
503 debug prints
504
505 2004-11-24 Jan-Oliver Wagner <[email protected]>
506
507 Fix broken tests for svg extension and added svg legend
508 to Experimental menu.
509
510 * Extensions/svgexport/test/test_svgmapwriter.py: Fix to have
511 the test run correctly even if the extension is a package.
512 Also removed the "import Thuban" which makes no sense.
513
514 * Extensions/svgexport/__init__.py: Fix to have the extensions'
515 test module also be executed from the global test routine.
516 This is done by looking for the absense of the DISPLAY variable.
517
518 * Extensions/svgexport/maplegend.py: Moved the menu entry from Extensions
519 to Experimental menu since this module has yet not reached a stable
520 status (ie. 1.0).
521
522 2004-11-22 Bernhard Reiter <[email protected]>
523
524 * Extensions/svgexport/svgmapwriter.py:
525 Added verbose variable and some logging depending on it.
526 (class VirtualDC(XMLWriter)): Minor improvement in the polygon loop,
527 because counting i is not necessary.
528 (class Pen, class Brush): Added simple __str__ methods.
529 (SVGRenderer.draw_polygone_shape): Fix #2698 (transparent polygons are
530 not exported to svg file) Note: holes still unhandled.
531
532 * Extensions/svgexport/test/test_svgmapwriter.py:
533 Made a baseclass TestWithDC for test needed a DC.
534 Added tests for bug #2698 (transparent polygons are not
535 exported to svg file):
536 Testobjectexport.test_transparent_polygon()
537
538 * Thuban/Model/base.py (UnsetModified):
539 Fixed some typos in docstring.
540
541 * Thuban/UI/baserenderer.py (BaseRenderer.draw_polygon_shape()):
542 Added hints on the used algorithm for handling holes.
543
544 2004-11-20 Jan-Oliver Wagner <[email protected]>
545
546 Some face lifting for the examples.
547
548 * Examples/__init__.py: Make this directory a package.
549
550 * Examples/simple_extensions/__init__.py: Make this directory a package.
551
552 * Examples/simple_extensions/hello_world.py: Moved entry from Extensions
553 menu to Examples menu.
554
555 * Examples/simple_extensions/simple_command.py: Some more comments,
556 minor changes.
557
558 * Examples/simple_extensions/simple_tool.py: Minor changes.
559
560 2004-11-20 Jan-Oliver Wagner <[email protected]>
561
562 Changed way of extension registry for wms and added extension
563 registry for umn_mapserver extension.
564
565 * Extensions/wms/__init__.py: Added registry entry and the importing
566 of the actual wms module. Included a test for the required PyOGCLib.
567
568 * Extensions/wms/wms.py: Removed registry entry (moved to __init__.py).
569
570 * Extensions/umn_mapserver/__init__.py: Added registry entry and the
571 importing of the actual umn mapserver management modules.
572 Included a test for the required Python MapScript.
573
574 2004-11-20 Jan-Oliver Wagner <[email protected]>
575
576 Changed way of extension registry for importAPR, bboxdump
577 and added extension registry for svgexport.extension registry for
578 svgexport.
579
580 * Extensions/importAPR/__init__.py: Added registry entry and the importing
581 of the actual importAPR module.
582
583 * Extensions/importAPR/importAPR.py: Removed registry entry (moved to
584 __init__.py).
585
586 * Extensions/bboxdump/__init__.py: Added registry entry and the importing
587 »···of the actual bboxdump module.
588
589 * Extensions/bboxdump/bboxdump.py: Removed registry entry (moved to
590 »···__init__.py).
591
592 * Extensions/svgexport/__init__.py: Added registry entry and the importing
593 of the svgsaver module.
594
595 * Extensions/svgexport/svgsaver.py: Moved the menu entry from Extensions
596 to Experimental menu since this module has yet not reached a stable
597 status (ie. 1.0).
598
599 2004-11-18 Jan-Oliver Wagner <[email protected]>
600
601 Now the hit test considers the size of point symbols.
602
603 * Thuban/UI/viewport.py (ViewPort._hit_point): Added optional parameter
604 'size' defaulting to the previously fixed value 5.
605 Extended doc-string.
606 (Viewport._find_shape_in_layer): Resolved FIXME regarding flexibility
607 for symbols.
608 Now the size of the largest point symbol is determined to find out
609 about whether the point has been hit.
610 This fixes the problem that only clicks inside a fixed distance of
611 5 where found.
612
613 2004-11-17 Jan-Oliver Wagner <[email protected]>
614
615 Another open issue fixed regarding sizeable symbols: correct rendering of
616 selected symbols.
617
618 * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
619 Added consideration of the specific size of point symbols.
620 The property for each point symbol is retrieved and the size applied
621 for the rendering method.
622 Added doc-string.
623
624 2004-11-16 Jan-Oliver Wagner <[email protected]>
625
626 Changed way of Extension Registry for gns2shp and profiling.
627
628 * Extensions/gns2shp/gns2shp.py: Removed registry entry (moved to
629 __init__.py).
630
631 * Extensions/gns2shp/__init__.py: Added registry entry and the importing
632 of the actual gns2shp module.
633
634 * Extensions/profiling/profiling.py: Removed registry entry (moved to
635 __init__.py).
636
637 * Extensions/profiling/__init__.py: Added registry entry and the importing
638 of the actual profiling module.
639
640 2004-10-28 Bernhard Reiter <[email protected]>
641
642 * Extensions/svgexport/: Minor improvements to doc strings.
643
644 2004-10-07 Jan-Oliver Wagner <[email protected]>
645
646 Further elements for sizable point objects now
647 making this feature usable though not yet complete.
648
649 * Thuban/Model/save.py (SessionSaver.write_classification): Write
650 attribute 'size' for cldata when the shape layer is of point type.
651 This also now make the test_load.py tests happy.
652
653 * Thuban/Model/classgen.py (CustomRamp.GetProperties): Added size
654 gradient.
655
656 * Thuban/UI/classifier.py (ID_SELPROP_SPINCTRL): Renamed to
657 ID_SELPROP_SPINCTRL_LINEWIDTH.
658 (ID_SELPROP_SPINCTRL_LINEWIDTH): New Id replaces ID_SELPROP_SPINCTRL.
659 (ID_SELPROP_SPINCTRL_SIZE): New Id.
660 (SelectPropertiesDialog.__init__): Added a second spin control
661 for the size in case the corresponding layer is of point type.
662 (SelectPropertiesDialog._OnSpin): Renamed to _OnSpinLineWidth.
663 (SelectPropertiesDialog._OnSpinLineWidth): New. Former _OnSpin.
664 (SelectPropertiesDialog._OnSpinSize): New. Set size of property
665 and refresh preview.
666
667
668
669 2004-10-04 Martin Schulze <[email protected]>
670
671 * Extensions/wms/test/test_parser.py
672 (TestWMSCapabilitiesParser.test_compareLists): Added missing
673 self-test for compareLists()
674 (TestWMSCapabilitiesParser.test_compareDicts): Added missing
675 self-test for compareDicts()
676 (TestWMSCapabilitiesParser.test_compareLists): Adding more tests
677 to verify the test routine fails with non-equal arguments
678 (TestWMSCapabilitiesParser.test_compareDicts): Adding more tests
679 to verify the test routine fails with non-equal arguments
680
681 2004-10-03 Jan-Oliver Wagner <[email protected]>
682
683 First elements for sizeable point objects.
684
685 * Resources/XML/thuban-1.1.dtd: Added size attribute to cldata.
686
687 * Data/iceland_sample_size.thuban: New. Sample for sized point objects.
688
689 * test/test_load.py (ClassificationTest.TestLayers): Added SetSize in case
690 of a corresponding argument is given.
691 (TestSymbolSize): New. Test the size attribute of cldata.
692
693 * Thuban/Model/classification.py: Removed some trailing whitespaces.
694 (ClassGroupProperties.__init__): Set default size.
695 (ClassGroupProperties.SetProperties): Set the size.
696 (ClassGroupProperties.GetSize): New. Return the size.
697 (ClassGroupProperties.SetSize): New. Set the size.
698 (ClassGroupProperties__eq__): Compare also size.
699 (ClassGroupProperties__repr__): Print also size.
700
701 * Thuban/Model/load.py (SessionLoader.start_cldata): Also parse
702 the size attribute.
703
704 * Thuban/UI/classifier.py (ClassDataPreviewer.Draw): Added doc-string.
705 Also, now there is a return value that indicates whether the drawing
706 size exceeded the given rect extent and if so the new extent.
707 Finally, point objects are drawn depending on the size. If either
708 the width or height is exceeded, the new extent is returned.
709 (ClassRenderer.Draw): Now when calling the previewer drawing function,
710 evaluate the return value and, if not None, adapt the grid widget size
711 accordingly and redraw again.
712
713 * Thuban/UI/baserenderer.py (BaseRenderer.draw_shape_layer_incrementally):
714 If the draw function is for points, call it with the size as additional
715 parameter.
716 (BaseRenderer.draw_point_shape): Added additional, optional parameter for
717 the size. Compute the radius using the size.
718
719 * Extensions/importAPR/apr.py (APR_BMkSym.GetThubanProp): Now
720 that Thuban supports size, apply this correctly.
721
722 * Extensions/importAPR/importAPR.py: Bumped version to 0.1.1.
723
724 2004-10-03 Jan-Oliver Wagner <[email protected]>
725
726 * Doc/manual/thuban-manual-de.xml: Started translation of
727 Map chapter.
728
729 2004-10-01 Martin Schulze <[email protected]>
730
731 * Extensions/wms/properties.py (wmsProperties.__init__): Extended
732 argument for general use through properties-dialog selector
733
734 * Thuban/UI/classifier.py: Register properties dialog classes for
735 both provided layer classes/types.
736
737 * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): The
738 map can be retrieved through the parent which is passed to the
739 constructor anyway and doesn't require an argument of its own,
740 required for the unification of arguments for general use through
741 properties-dialog selector.
742 (MainWindow.OpenOrRaiseDialog): Move the logic for checking
743 whether a dialog is already opened (and raising it to the users
744 attention) and creating a new dialog into a function of its own
745 (MainWindow.OpenLayerProperties): Use the new OpenOrRaiseDialog()
746 method
747 (MainWindow.OpenLayerProperties): Utilise the new ClassMapper for
748 global registration of properties dialog classes (which are indeed
749 layer-specific).
750
751 * Thuban/UI/classifier.py (Classifier.__init__): Unify arguments
752 for general use through properties-dialog selector, the map can be
753 retrieved through the parent and doesn't require an argument of
754 its own.
755
756 * Extensions/wms/wms.py: Register the properties dialog class for
757 the provided WMS layer
758
759 2004-09-28 Jan-Oliver Wagner <[email protected]>
760
761 New feature: Registry for Extensions.
762
763 * Thuban/UI/extensionregistry.py: This module defines a registry for
764 Extensions.
765
766 * Thuban/UI/about.py (About.__init__): Added description
767 of the registered extensions with all of the information.
768
769 * Thuban/Model/extension.py (Extension): Improved doc-string.
770
771 * Extensions/gns2shp/gns2shp.py, Extensions/importAPR/importAPR.py,
772 Extensions/bboxdump/bboxdump.py, Extensions/profiling/profiling.py,
773 Extensions/wms/wms.py: Added registration of the extension.
774
775 2004-09-27 Bernhard Reiter <[email protected]>
776
777 More fixes to svgexport to make used ids unique and
778 conforming to XML's Name production.
779
780 * Extensions/svgexport/test/test_svgmapwriter.py: Added new tests
781 test_xml_id_constraints(), test_make_ide_nosetbaseid() and
782 test_make_id_nonintegersetid(). Switched SetID and SetBaseID.
783 Added Bernhard R. as author.
784 * Extensions/svgexport/svgmapwriter.py (make_id): Using "_" as
785 concatenation char now (makes test_make_ide_nosetbaseid() valid).
786 Also transform second id part with "%d" and catch the TypeError
787 to raise SVGMapWriterError (making test_make_id_nonintegersetid() ok).
788 Corrected typo inBernhard's author line.
789 (SetBaseID): Return the transformed base id. Transform characters
790 which are not alnum() or in ".-_" to binascii.b2a_hex(). Added
791 import binascii. If to be set string starts with "xml" or so, add "t".
792 (draw_shape_layer_incrementally): use the returned value of SetBaseID
793 for used_baseids checks.
794
795 2004-09-25 Bernhard Herzog <[email protected]>
796
797 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
798 Remove a debug print and some tab characters.
799
800 2004-09-25 Bernhard Reiter <[email protected]>
801
802 * Extensions/svgexport/svgmapwriter.py: Added Bernhard R. as Author.
803 (SetBaseID, SetID, make_id): Improved docstring comments to explain
804 the interaction of the three functions and the XML id contrains.
805
806
807 2004-09-23 Jan-Oliver Wagner <[email protected]>
808
809 * Doc/ThubanModel.xmi: New. UML file for Thuban Model
810 Module.
811
812 * Doc/README: Added info on ThubanModel.xmi.
813
814 2004-09-23 Jan-Oliver Wagner <[email protected]>
815
816 * Doc/README: New. Some info about how to generate technical
817 documentation from the source code.
818 This text was send to the Thuban developer mailing list on
819 September 21st 2004 by Bernhard Reiter.
820
821 2004-09-21 Bernhard Reiter <[email protected]>
822
823 Improved the svgexport to only use unique ids. Will issues
824 an error message dialoge when two layer names are the same.
825 ShapeIDs are now added with a dash within the svg ids.
826
827 * Extensions/svgexport/svgmapwriter.py (SVGMapWriterError): New.
828 * Extensions/svgexport/test/test_svgmapwriter.py: Added imports
829 (TestSVGRenderer): New test class with test_make_in() and
830 test_check_for_layer_name_clash()
831 * Extensions/svgexport/svgmapwriter.py (SVGRenderer): Fixed __init__()
832 and draw_shape_layer_incrementally() to not use a baseid twice,
833 satisfying test_check_for_layer_name_clash()
834 (VirtualDC.make_id): Use a dash between baseit and id, satisfies
835 test_make_in().
836 * Extensions/svexport/svgsaver.py: Import SVGMapWriterError, wxOK
837 and wxICON_HAND.
838 (write_to_svg): Put dc and rendering in a try statement and on
839 catching SVGmapWriterError notify the user and delete the target file.
840
841 2004-09-20 Bernhard Reiter <[email protected]>
842
843 * Model/base.by, Model/layer.py: Fixed typos in docstrings.
844
845 2004-09-03 Jan Schüngel <[email protected]>
846
847 * Extensions/umn_mapserver/mapfile(MF_Class.add_thubanstyle): Fix a
848 small bug with the line color. Now the line color will now only set
849 if it is set in Thuban an not Transparent.
850
851 * Extensions/umn_mapserver/mf_export(tblayer_to_map): Fixed a bug with
852 deleting the layers from mapfile. Now all layers will delete backwards
853 from the last.
854
855 2004-08-20 Silke Reimer <[email protected]>
856
857 * Thuban/Model/layer.py:
858 Fixes bug in projection handling: Otherwise very large region might not
859 have valid values in the layer's projection.
860
861 2004-08-20 Silke Reimer <[email protected]>
862
863 * Thuban/UI/about.py:
864 small changes to be consistent with coding style.
865
866 2004-08-13 Martin Schulze <[email protected]>
867
868 * Extensions/wms/test/test_ogclib.py (TestOGCLib.compare_URLs):
869 Adjusted a comment
870
871 2004-08-11 Silke Reimer <[email protected]>
872
873 * Thuban/UI/about.py: Small changes to encoding related stuff to avoid
874 too many and too enhanced imports of locale
875
876 2004-08-10 Silke Reimer <[email protected]>
877
878 * Thuban/UI/about.py: Fixed encoding problem of about dialog: Added
879 function unicodeToLocale() to convert special characters to users
880 locale encoding
881
882 2004-08-10 Jan-Oliver Wagner <[email protected]>
883
884 * Doc/technotes/coding_guidelines.txt: Added rule 'Method names start with
885 lower case letter'
886
887 2004-08-09 Jan Schüngel <[email protected]>
888
889 * ChangeLog: Rewrite the last ChangeLog entry to follow
890 the standard way.
891
892 * Extensions/umn_mapserver/mapfile: Moved the import AnnotationLayer to
893 the function where it is needed, because it don't works if it stands
894 at the beginning.
895 (MF_Layer.__init__): Removed the extra numclassed variable. Now
896 numclasses from the mapscript will be used.
897 (MF_Layer.get_index): New. Return the index of the layer in mapfile.
898 (MF_Layer.set_classes): New. A Classlist will be set to the layer.
899 (MF_Layer.set_metadata): New. A Metadata mapscript object will set.
900 (MF_Layer.remove_allclasses): New. All class of the layer will remove.
901 (MF_Map.create_new_layer): New. A new Layer is created and associated
902 with the mapscript object.
903 (MF_Map.set_layerorder): New. The Layer order like in thuban is set in
904 the mapscript.
905 (MF_Map.add_thubanlayer): Now a new layerobj is created if no one is
906 linked to the layer in thuban, else the layerobject linked to the
907 thubanlayer will be used.
908 AnnotationLayer will now store the filename of the shapefile.
909 (MF_Map.remove_layer): If a layer is removed the associated object
910 must be set new.
911
912 * Extensions/umn_mapserver/mf_export.py(tb_layer_to_map): Add all
913 layers which are exists in thuban to the mapobj. All removed Layers
914 will be removed from the mapobj.
915 Added comments to all functions.
916 (thuban_to_map): No layer will be removed here.
917
918 * Extensions/umn_mapserver/mf_handle.py
919 (_has_umn_mapobj_and_selectedlayer): Activating the layer menu. Now
920 Layersettings for the mapserver kann be edited.
921
922 * Extensions/umn_mapserver/mf_import.py: Now all layers which are
923 imported, will be linked with the associated MF_Layer.
924 (import_mapfile): All layers, which are not selected, will be removed.
925 Disable the "import layer from mapfile" menu option.
926
927 * Extensions/umn_mapserver/sample/iceland.map: Set the status of the
928 Annotation Layer from DEFAULT to OFF. The DEFAULT setting turns the
929 layer on permanently.
930
931 2004-08-03 Jan Schüngel <[email protected]>
932
933 * Extensions/umn_mapserver/mapfile.py(MF_Metadata.remove_allmetadata):
934 New. This function removes all metadata
935 (MF_Layer.set_group): New. Set the group setting.
936 (MF_Layer.get_group): New. Get the group setting.
937 (MF_Map): Removed the extra numlayers variable, used the mapscript
938 parameter instead.
939 (MF_Map.get_numlayers): New. This get numlayers.
940 (MF_Map.remove_all_layers): New. Removes all layers from the mapobj.
941 (MF_Map.add_thubanlayer): Replaced the exception handling by a check
942 if the object is an instance. Also added the annotation layer here to
943 export, but only the layer is created in the mapfile.
944
945 * Extensions/umn_mapserver/mf_export.py(export_mapfile): Removed
946 the check if a mapobj exist, because its not needed anymore. The
947 export function is only available if a mapobj exist.
948 Use the new function to remove all layers.
949
950 * Extensions/umn_mapserver/mf_handle.py(Layer_Dialog): Added a group
951 option and the metadata button. The layer dialog is temporary disabled.
952 (Metadata_CustomDataTable): Added some functions to show the grid
953 correct.
954
955 * Extensions/umn_mapserver/mf_import.py: Moved the code for showing
956 the number of layer from import_mapfile to this function.
957 (AnnotationLayer): New. This Class shows the Annotation layer in
958 thuban. The layer don't do anything. It's only to show the layer
959 and to save the layer order.
960 (add_annotationlayer): New. Import an annotation layer to thuban.
961 (select_layer2import): New. Import only layers to thuban and not
962 the other settings like projection or scalebar.
963 (create_new_mapfile): Moved the _has_umn_mapobj function and the
964 create_new_mapfile functions from mf_handle.py to mf_import.py.
965
966 * Extensions/umn_mapserver/sample/iceland.map: Added the group
967 parameter to the roads and cultural layers. Also added a new
968 Annotation Layer for the cultural points.
969
970 * Extensions/umn_mapserver/sample/iceland.html: Added the select
971 option for the annotation layer.
972
973 * Extensions/umn_mapserver/sample/index.html: Added the start
974 parameter for the annotation layer.
975
976 2004-08-01 Jan-Oliver Wagner <[email protected]>
977
978 * Doc/manual/thuban-manual-de.xml (Chapter Session Management):
979 translation completed.
980
981 * Doc/manual/thuban-manual.xml (Chapter Session Management):
982 Fixed unprecise description for Save Session.
983
984 2004-07-31 Jan-Oliver Wagner <[email protected]>
985
986 Started translation of Users Manual into german.
987
988 * Doc/manual/thuban-manual-de.xml: New. German Users Manual.
989
990 * Doc/manual/Makefile: Added build instructions for german
991 users manual.
992
993 * Doc/manual/thuban-manual.xml: Minor corrections in Introduction.
994
995 2004-07-28 Jan Schüngel <[email protected]>
996
997 * Extensions/umn_mapserver/mapfile.py(MF_Metadata): Changed all class
998 functions. Now all metadata will handle by the function and its not
999 needed to initialize it from outside. Therefor the associated mapobj
1000 will be stored in the Metadata Object. So we can use the special
1001 functions from the associated mapobj to get the Metadata.
1002 Therefor all initialization code for the metadata is removed from the
1003 other classes.
1004 (MF_Layer): Added a function to get the metadata object.
1005 (MF_Map): Added a function to set the mappath, the path where
1006 the mapfile ist stored.
1007
1008 * Extensions/umn_mapserver/mf_export.py(thuban_to_map): Changed the code
1009 to set the extent in the mapfile. Now the code is set by the displayed
1010 data in the Thuban-view.
1011 (export_mapfile): The shapepath is now set empty, until relative
1012 pathnames are supported.
1013
1014 * Extension/umn_mapserver/mf_handle.py: Added a dialog to handle
1015 metadata. Yet only mapfile metadata are supported. Layer and class
1016 supported are not implemented.
1017 Added a dialog to handle layer informations. The dialog only shows the
1018 selected layer at the moment.
1019
1020 * Extensions/umn_mapserver/mf_import.py(import_mapfile): Changed the
1021 code for setting the extent in thuban. Now the extent is set to the
1022 given extent from the mapfile.
1023 Fixed a logical mistake. Now the extent is set when realy a layer is
1024 loaded, and not if one is selected to load.
1025
1026 * Extensions/umn_mapserver/sample/iceland.html: Added code to zoom and
1027 move the shown map in the browser.
1028
1029 * Extensions/umn_mapserver/sample/iceland.map: Added a new metadata
1030 line to the mapobj and added metadata to the political layer.
1031
1032 * Extensions/umn_mapserver/test/test_mapserver.py: Changed the test
1033 for Metadata.
1034
1035 2004-07-26 Martin Schulze <[email protected]>
1036
1037 * Thuban/Lib/classmapper.py (ClassMapper.has): Added the new
1038 ClassMapper
1039
1040 * test/test_classmapper.py (TestMapping.test_mapper): Added a Test
1041 case for the new ClassMapper
1042
1043
1044 2004-07-22 Bernhard Herzog <[email protected]>
1045
1046 * Thuban/UI/viewport.py (ViewPort.VisibleExtent): New. Return the
1047 visible extent of the map in projected coordinates
1048
1049 * test/test_viewport.py (SimpleViewPortTest.test_default_size)
1050 (SimpleViewPortTest.test_init_with_size): Add some VisibleExtent()
1051 tests.
1052 (SimpleViewPortTest.test_visible_extent): New. The real test for
1053 VisibleExtent()
1054
1055 2004-07-22 Bernhard Herzog <[email protected]>
1056
1057 * test/test_viewport.py: Use support.run_tests as the main
1058 function when running asa script.
1059
1060 2004-07-22 Jan Schüngel <[email protected]>
1061
1062 * Extensions/umn_mapserver/mf_export.py: Added "import os"
1063 Removed the old "import Thuban.UI.mainwindow" code.
1064 (tbextent_to_map): Removed the extra function and at the code direct
1065 to "thuban_to_map" function.
1066 (write_creatorcomment): Added. Now a short comment is added to the
1067 beginning of an generated mapfile.
1068 (export_mapfile): Now the Path and filename are saved in to variables,
1069 and not together in one variable. This is needed for the new
1070 write_creatorcomment function.
1071
1072 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Added the
1073 import module "re". Also added Range and the ClassGroupRange import
1074 from Thuban. Both are needed for the new range expression import.
1075 (create_rangeexpression): Added. Creates a Range Expression in Thuban
1076 style from a given mapfile expression.
1077 (added_rasterlayer): Make some small code changes. The shapepath is
1078 now stored in an extra variable and the clazz_name is set empty if no
1079 class name set in the mapfile.
1080 Changed the Error message for Range Expressions, becaus the new
1081 function create a error string which will be shown in the dialog.
1082
1083 * Extensions/umn_mapserver/test/test_mapserver.py: Added a test for the
1084 range expression import.
1085
1086 2004-07-21 Jan-Oliver Wagner <[email protected]>
1087
1088 * Extensions/umn_mapserver/README: Added hint that
1089 installation as root can be avoided. Removed all tabs.
1090
1091 2004-07-16 Bernhard Herzog <[email protected]>
1092
1093 * test/test_viewport.py
1094 (ViewPortTest.test_changing_map_projection): Check that changing
1095 the projection of an empty map shown in a viewport doesn't lead to
1096 exceptions in the viewport's handler for the
1097 MAP_PROJECTION_CHANGED messages
1098
1099 * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Only
1100 try to keep the same region visible when the map actually contains
1101 something
1102
1103 2004-07-15 Jan Schüngel <[email protected]>
1104
1105 * Extensions/umn_mapserver/mapfile.py: Added a function to get the
1106 mappath directly from the mapobj. Is needed because of the changes
1107 in mf_import.py.
1108 (MF_Layer.add_thubanclass): Added a new comment.
1109 (MF_Map.set_extent): Fixed a bug with exporting empty mapobj. If the
1110 mapobj is empty there is no extent get from thuban an so no one can
1111 set to th mapobj.
1112
1113 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Updated
1114 the discription.
1115 Split the funktion in to three smaller ones. The new functions are
1116 add_rasterlayer, add_polygonlayer and select_layer2import.
1117 Removed the mapfilepath and filepath initialisation, because its know
1118 include in the new functions.
1119 Now nothing will be imported if cancel is pressed in the
1120 layer choice dialog.
1121
1122 2004-07-14 Jan Schüngel <[email protected]>
1123
1124 * Extensions/umn_mapserver/mapfile.py: Added ClassGroupDefault to
1125 import.
1126 (MF_Symbolset): Removed the extra variable for numsymbols.
1127 (MF_Class.__init__): Added a comment to the exception clause.
1128 Removed the extent init, because it was not needed anymore.
1129 (MF_Layer.add_thubanclass): Added the code to set the class name to
1130 the expression value from thuban if no label is defined.
1131 Added the code to export Range expressions from thuban to the mapfile.
1132 (MF_Map.set_extent): Removed the exception and replace it by some if
1133 code. If the size of a map is not defined the size will be set to 1,1.
1134 This is necessary because if the extent is set, mapscript checks if
1135 the size is greater than zero.
1136 (MF_Web): Added the get and set function for the template.
1137
1138 * Extensions/umn_mapserver/mf_export.py: Added the function to check
1139 if a mapobject exists and used it to set the status of the menu items.
1140 If no mapfile exists the settings could not be edditied.
1141 Define after which menuitem the exportitem will include.
1142
1143 * Extensions/umn_mapserver/mf_handle.py: Removed the import
1144 Thuban.UI.mainwindow clause, because it is not needed.
1145 Added the command Refresh() to all "OnChangeColor()" functions,
1146 because the color preview window was not updated on a color change.
1147 Added the function to check if a mapobject exists and used it to set the
1148 status of the menu items. If no mapobject exists the settings could not
1149 be edditied.
1150 (Map_Dialog): Moved the imagetype selector from the
1151 Outputformat_Dialog to Map_Dialog and removed Outputformat_Dialog.
1152 (Web_Dialog): Removed the name label and added the template textbox.
1153
1154 * Extensions/umn_mapserver/mf_import.py (import_mapfile): Replace
1155 the exception handling on loading the layers by an if statement. It
1156 is not necessary to us the exception there.
1157 The Filepath creation now use os.path.join to build the path.
1158
1159 * Extensions/umn_mapserver/test/test_mapserver.py: Moved the testMap
1160 definition from global to the setUp function. Now the testMap will
1161 initialize new on each test.
1162
1163 * Extensions/umn_mapserver/sample/iceland.map: Include three new
1164 classes in the Line Layer, to test logical Expressions.
1165 Set the status of the class "Point9" in the Point Layer to off
1166
1167 2004-07-13 Bernhard Herzog <[email protected]>
1168
1169 * Thuban/UI/baserenderer.py
1170 (BaseRenderer.render_map_incrementally): Fix a logic bug in the
1171 optimization that tries not to draw layers under a raster layer.
1172 The bug was harmless. All it effectively did was to produce The a
1173 strange messages about not being able to draw Layer instances for
1174 all vector layers below a raster layer which would be invisible
1175 anyway because the raster layer currently always covers the entire
1176 window
1177
1178 2004-07-08 Jan Schüngel <[email protected]>
1179
1180 * Extensions/umn_mapserver/mapfile.py: Added code to generade and get
1181 a list of supported outputformats. This formats are not alle supported
1182 because there is no possibility to get the outputformat without the
1183 name known. Make some formal changes to the code.
1184 (MF_Map.set_name()): Fixed a bug if the name is None.
1185
1186 * Extensions/umn_mapserver/mf_handle.py: Removed the image_type import
1187 statement, because its not needed anymore. The Outputformat is now
1188 given as string from the object. Make some formal changes to the code.
1189
1190 * Extensions/umn_mapserver/test/test_mapserver.py: Added new test for
1191 most of the new setting which were added during the last changes.
1192 Removed the MF_Size Test.
1193
1194 * Extensions/umn_mapserver/test/test.map: Added a new class to the
1195 cultural Layer to test expressions and the the status of that layer
1196 from on to default.
1197 Changed the data path the the correct Thuban Data
1198 Added the Outputformat Object and Symbol Object
1199
1200 2004-07-07 Jan Schüngel <[email protected]>
1201
1202 * Extensions/umn_mapserver/mapfile.py: Added some new
1203 settings to edit (outputformat, label, imagetype)
1204
1205 * Extensions/umn_mapserver/mf_handle.py: Added some setting to
1206 the Label Dialog and add the OutputDialog.
1207 Make some changes to the code order.
1208
1209 2004-07-06 Jan Schüngel <[email protected]>
1210
1211 * Extensions/umn_mapserver/mapfile.py: Added the symbolObj, pointObj
1212 and line Obj and add the scalebar_status_type, scalebar_style_type and
1213 scalebar_position_type.
1214 Added the symbol- and symbolsetObject (MF_Symbol,MF_Symbolset). The
1215 are only used to create a Symbol like the circle in Thuban.
1216 Added the scalebarObject (MF_Scalebar)
1217 (MF_Class): Added set_status and get_status.
1218 (MF_Layer.add_thubanclass): Added code to set the class status
1219 (MF_Map): Added code to handle the symbols and scalebar
1220 (MF_Label): Added the set_partials and get_partials functions
1221
1222 * Extensions/umn_mapserver/mf_export.py: Added MF_Symbol to import
1223 from mapfile. Added a function to create a circle object like the one
1224 from thuban if no one exists.
1225
1226 * Extensions/umn_mapserver/mf_handle.py: All colors are now set when
1227 press ok in the assosiated dialog and not at the end of the
1228 colordialog.
1229 Added the Dialog for the Scalebar.
1230 (Label_Dialog): Added the offset option
1231
1232 * Extensions/umn_mapserver/mf_import.py: Added code to import the
1233 status of the Classes.
1234 Fixed a bug with the projection. Now the to_meter parameter will be
1235 added to the Projection only if it doesn't exists.
1236
1237 2004-07-01 Jan Schüngel <[email protected]>
1238
1239 Added the functionality to handle the content thuban is not
1240 able to handle directly.
1241
1242 * Extensions/umn_mapserver/mf_handle.py: New. This module extents
1243 Thuban with the possibility to edit the mapfile content.
1244
1245 * Extensions/umn_mapserver/mf_import.py: Added the possibility
1246 to import mapfiles without any layer selected. So it is possible
1247 to edit the other settings in a mapfile.
1248 (import_mapfile): Added code to use the editing functions.
1249 Added the possibility to import the projection to a layer if one
1250 is defined.
1251 Status settings (On,Off) will now set in thuban (visible, invisible).
1252 fixed a bug with with classnames. If no classname is set in mapfile
1253 the value in Thuban will set to the expression.
1254
1255 * Extensions/umn_mapserver/mf_export.py(export_mapfile): Added the
1256 possibility to save a new mapfile or use the old one which is
1257 imported or new created.
1258 Added code to use the editing functions.
1259 Remove some not needed import statements
1260
1261 * Extensions/umn_mapserver/mapfile.py: Added new types which are
1262 need for the editing functions.
1263 Added needed set-functions for the editing functions.
1264 Added the possibility to export rasterimages.
1265 Added new classes (MF_Web, MF_Label, MF_Legend, MF_Symbol,
1266 MF_SymbolSet). MF_Symbol and MF_SymbolSet are not needed at the
1267 moment.
1268 (MF_Class.set_thubanstyle): Now point layers will set to a default
1269 symbol to show a circle in mapserver and not only a 1px dot.
1270 (MF_Style.__init__): Fixed a bug with the color. Color was not set
1271 correct before.
1272 (MF_Size): Removed, because it is not needed.
1273
1274 * Extensions/umn_mapserver/README: Added the hints to use the
1275 export and editing functions, too.
1276
1277 * Extensions/umn_mapserver/sample/iceland.map: Added the
1278 new parameter "UNITS METERS".
1279 Change the political layer to status OFF.
1280
1281 * Extensions/umn_mapserver/sample/README: Added some
1282 more details to setup the sample in the MapServer.
1283
1284 2004-06-26 Bernhard Reiter <[email protected]>
1285
1286 * Extensions/svgexport/test/test_svgmapwriter.py:
1287 Removed class VFile and used standard StringIO instead.
1288
1289 2004-06-23 Jan Schüngel <[email protected]>
1290
1291 Add the export function to the umn_mapserver extension.
1292
1293 * Extension/umn_mapserver/mf_export.py: New. This module extents
1294 Thuban with the possibility to export the Thuban content.
1295
1296 * Extensions/umn_mapserver/mapfile.py: Expand the classes to use
1297 with the export module. Especially added the possibility to
1298 add thuban objects directly to the map objects.
1299
1300 * Extensions/umn_mapserver/mf_import.py: Removed the wxCHANGE_DIR,
1301 because of the hint from Bernhard Herzog.
1302 Corrected the handling of absolute pathnames.
1303 Changed the Text of the Menu-Item, now the beginning is upper case.
1304
1305 * Extensions/umn_mapserver/README: Added the --with-tiff statement.
1306
1307 2004-06-16 Jan Schüngel <[email protected]>
1308
1309 Add a sample and make some changes.
1310
1311 * Extension/umn_mapserver/mf_import.py: Changed the wxPython.wx
1312 import from * to explicit used statements. Changed the
1313 Thuban.UI.mainwindow import phrase, too.
1314 (import_mapfile):Corrected a clerical mistake.
1315 Added wxCHANGE_DIR in OpenFile Dialog.
1316 Added a MultipleChoiceDialog, to select the layers to load from
1317 mapfile into thuban. Thereby the projection is only set if one layer
1318 is selected.
1319 Added the possibility to handle relative pathnames which uses
1320 up-level references.
1321 Removed some doubled code.
1322 Corrected an error with integer values used as label in thuban
1323 ClassGroup.
1324
1325 * Extensions/umn_mapserver/sample: New.
1326
1327 * Extensions/umn_mapserver/sample/README: New. Describes the
1328 usage of the sample files.
1329
1330 * Extensions/umn_mapserver/sample/iceland.map: New. This is
1331 a suitable .map-file for the iceland data.
1332
1333 * Extensions/umn_mapserver/sample/index.html: New. The template
1334 for the mapfile.
1335
1336 * Extensions/umn_mapserver/sample/iceland.html: New. Initialisation
1337 file for the Iceland Application on web.
1338
1339 * Extensions/umn_mapserver/README: Corrected a inaccuracy and added
1340 some details.
1341
1342 * Extensions/umn_mapserver/test/test_mapserver
1343 (mapserver_import_Test_generalClasses.test_MF_Color):
1344 Corrected the thubancolor test.
1345
1346 2004-06-15 Jan Schüngel <[email protected]>
1347
1348 * Extensions/umn_mapserver/README: New. Install instruction.
1349
1350 2004-06-14 Bernhard Reiter <[email protected]>
1351
1352 * libraries/thuban/cpl_mfile.h: Added copyright header.
1353
1354 * libraries/thuban/ cpl_mfile.cpp, cpl_mfile.h: Added non-protecting
1355 Free Software License so that it is most useful with gdalwarp
1356 and bmpdataset.
1357
1358 2004-06-14 Bernhard Herzog <[email protected]>
1359
1360 * Thuban/UI/multiplechoicedialog.py (__version__): Add missing
1361 import of wxPython.wx itself (as opposed to the contents of
1362 wxPython.wx). For some reason wxPython.wx is available as
1363 wxPython.wx.wx in at least some 2.4 releases. Fixes RT#2482
1364 wrt. wxPython 2.4.
1365
1366 2004-06-10 Jan Schüngel <[email protected]>
1367
1368 Initial version of new extension "umn_mapserver". This extension aims
1369 to manage configuration for the UMN MapServer application. This
1370 inital version just imports the .map-files and displays all, Thuban is
1371 capable of.
1372
1373 * Extensions/umn_mapserver, Extensions/umn_mapserver/test: New.
1374
1375 * Extensions/umn_mapserver/test/README: New. Describes how to run the
1376 tests.
1377
1378 * Extensions/umn_mapserver/test/test.map: New. This is a test
1379 .map-file for automated tests of the umn_mapserver extension of
1380 Thuban.
1381
1382 * Extensions/umn_mapserver/test/test_mapserver.py: New. Tests for
1383 UMN Mapserver classes.
1384
1385 * Extensions/umn_mapserver/__init__.py: New. Init to make this
1386 directory a package.
1387
1388 * Extensions/umn_mapserver/mapfile.py: New. Classes to represent
1389 '.map'-file objects.
1390
1391 * Extensions/umn_mapserver/mf_import.py: New. This module extends
1392 Thuban with the possibility to handle UMN MapServer mapfiles.
1393
1394 2004-06-03 Bernhard Herzog <[email protected]>
1395
1396 * Thuban/Model/layer.py (Layer.TreeInfo): Convert the bounding box
1397 to a tuple before using it as arguments to the % operator. This
1398 fixes the formatting issue filed in RT#2239 on 2004-01-13 and
1399 reported today on thuban-list by Jan Schüngel
1400
1401 * test/test_layer.py (TestLayerModification.setUp): Save the
1402 filename as an instance variable so we can refer to it in tests
1403 (TestLayerModification.test_tree_info): Uncomment this method
1404 again and make it work. This tests for the formatting issue
1405 filed in RT#2239 on 2004-01-13
1406
1407 2004-05-28 Bernhard Herzog <[email protected]>
1408
1409 * Thuban/UI/baserenderer.py: Fix some typos.
1410
1411 2004-05-18 Jan-Oliver Wagner <[email protected]>
1412
1413 * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed a bug
1414 by increasing a field size.
1415
1416 2004-05-17 Bernhard Herzog <[email protected]>
1417
1418 Update to newest shapelib and get rid of Thuban specific
1419 extensions, i.e. use the new DBFUpdateHeader instead of our
1420 DBFCommit kludge
1421
1422 * libraries/shapelib/shpopen.c: Update to version from current
1423 shapelib CVS.
1424
1425 * libraries/shapelib/shapefil.h: Update to version from current
1426 shapelib CVS.
1427
1428 * libraries/shapelib/dbfopen.c: Update to version from current
1429 shapelib CVS.
1430 (DBFCommit): Effectively removed since shapelib itself has
1431 DBFUpdateHeader now which is better for what DBFCommit wanted to
1432 achieve.
1433 We're now using an unmodified version of dbfopen.
1434
1435 * setup.py (extensions): Add the HAVE_UPDATE_HEADER macro with
1436 value '1' to the Lib.dbflibc extension. This simply reflects the
1437 shapelib and pyshapelib updates
1438
1439 2004-05-16 Jan-Oliver Wagner <[email protected]>
1440
1441 Finished introduction of Menu.FindOrInsertMenu.
1442
1443 * Extensions/drawshape/drawshape.py: Add the command
1444 to the experimental menu additionally to the toolbar.
1445
1446 * Extensions/svgexport/svgsaver.py: Use FindOrInsertMenu() instead of
1447 finding menu on its own.
1448
1449 * Doc/manual/thuban-manual.xml: updated sample file
1450 to use FindOrInsertMenu().
1451
1452 * Examples/simple_extensions/hello_world.py: Use FindOrInsertMenu()
1453 instead of finding menu on its own.
1454
1455 2004-05-11 Jan-Oliver Wagner <[email protected]>
1456
1457 * test/test_menu.py (MenuTest.test): Added testing
1458 of method Menu.FindOrInsertMenu.
1459
1460 2004-05-10 Jan-Oliver Wagner <[email protected]>
1461
1462 Introduce and use Menu.FindOrInsertMenu.
1463
1464 * Thuban/UI/menu.py (Menu.FindOrInsertMenu): New. Find a
1465 given menu or, if not found, insert it.
1466
1467 * Extensions/bboxdump/bboxdump.py, /Extensions/gns2shp/gns2shp.py,
1468 /Extensions/importAPR/importAPR.py, Extensions/profiling/profiling.py,
1469 /Extensions/wms/wms.py: Use FindOrInsertMenu() instead of finding
1470 menu on its own.
1471
1472 2004-05-06 Jan-Oliver Wagner <[email protected]>
1473
1474 Introduce a abstract ColorDialog class and remove
1475 and outdated file.
1476
1477 * Thuban/UI/proj4dialog.py: Removed. It is has been
1478 replaced by projdialog for quite a while and is not used
1479 anymore.
1480
1481 * Thuban/UI/colordialog.py: New. Abstraction for color selection
1482 dialog(s).
1483
1484 * Thuban/UI/classifier.py (SelectPropertiesDialog.__GetColor):
1485 Now calls the abstract ColorDialog instead of wxColourDialog.
1486 This also removed the dependency to Color class conversion
1487 from this function.
1488
1489 2004-05-04 Frank Koormann <[email protected]>
1490
1491 * Extensions/bboxdump/__init__.py: Fixed string left over from
1492 copying.
1493
1494 * Extensions/bboxdump/bboxdump.py (bboxdump):
1495 Use layer.ShapeStore().AllShapes() to loop over shapes instead of
1496 xrange(layer.NumShapes()). Compile the bboxmessage from a list
1497 of formatted outputs (string.join) instead of appending to the
1498 message. Two progress bar dialogs to report progress on the sometimes
1499 lenghty processing.
1500
1501 2004-04-22 Frank Koormann <[email protected]>
1502
1503 New Extension to dump bounding boxes of all shapes of the selected
1504 layer. An optional column can be specified to group the objects,
1505 in this case the bounding box is a union of the separate boxes.
1506 Dump can be displayed in a ScrolledMessageDialog or written to file.
1507 The Extension is simply a combination of available and well tested
1508 Thuban functionality.
1509
1510 * Extensions/bboxdump/__init__.py: New: Init to make this
1511 directory a package.
1512
1513 * Extensions/bboxdump/bboxdump.py: New: Dump bounding boxes of
1514 all shapes of the selected layer.
1515
1516 2004-04-22 Jan-Oliver Wagner <[email protected]>
1517
1518 * Thuban/UI/classgen.py (GenUniquePanel.__init__): Fixed two
1519 strings to be i18n now.
1520
1521 2004-04-18 Jan-Oliver Wagner <[email protected]>
1522
1523 Changing popup menu of legend from direct building
1524 to using the Menu construction as used for the mainwindow.
1525
1526 * Thuban/UI/mainwindow.py: New method commands: layer_to_top,
1527 layer_to_bottom, layer_visibility
1528 (MainWindow.LayerToTop): New. Put current layer to the top.
1529 (MainWindow.LayerToBottom): New. Put current layer to bottom.
1530 (MainWindow.HideLayer, MainWindow.ShowLayer, _has_visible_map):
1531 Replace 1,0 by True, False.
1532 (MainWindow.ToggleLayerVisibility): New. Toggle visibility of
1533 current layer.
1534 (MainWindow.LayerShowTable): Removed raising of dialog.
1535 (_has_selected_layer_visible): New. Support function.
1536
1537 * Thuban/UI/legend.py: ID_POP_xxx: removed.
1538 (LegendPanel.__init__): Removed EVT_MENU bindings.
1539 (LegendTree._OnRightClick): Replace direct creation of
1540 menu via wx Classes by applying the menu definition
1541 as of Menu class of menu.py.
1542
1543 2004-04-16 Jan-Oliver Wagner <[email protected]>
1544
1545 * Thuban/UI/exceptiondialog.py (ExceptionDialog.dialog_layout): Improved
1546 button string to stronger clearify that Thuban will be closed when hitting
1547 the button.
1548
1549 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Added docstring.
1550 Now for layers without a ShapeStore a corresponding message is given
1551 to the user, that this layer has no table to show.
1552
1553 2004-04-15 Martin Schulze <[email protected]>
1554
1555 * Extensions/wms/layer.py (WMSLayer.setWMSFormat): Need to
1556 recalculate the format for the internal render engine as well.
1557
1558 * Extensions/wms/properties.py (wmsProperties): First start for a
1559 properties dialog. It's functional for a first selection of
1560 layers, but still has some weired wxWidgets/GTK problems but
1561 beautification can be done later.
1562
1563 * Extensions/wms/layer.py: Added more documentation
1564 (WMSLayer.getFormats): New: Return list of supported image formats
1565 by the WMS server
1566 (WMSLayer.getLayers): New: Return the list of layer names
1567 supported by the WMS server
1568 (WMSLayer.getLayerTitle): New: Return the title of the named layer
1569 (WMSLayer.getWMSFormat): New: Return the image format that is used
1570 for WMS GetMap requests
1571 (WMSLayer.setWMSFormat): New: Set the image format that is used
1572 for WMS GetMap requests
1573 (WMSLayer.__init__): Move away from using only one layer to using
1574 a list of layers (unsorted at the moment, though).
1575 (WMSLayer.getVisibleLayers): New: Return the list of names for all
1576 visible layers
1577 (WMSLayer.setVisibleLayers): New: Set the list of names for all
1578 visible layers
1579
1580 * Extensions/wms/wms.py: Moved the WMS layer into layer.py in
1581 order to establish a clean structure.
1582
1583 * Extensions/wms/layer.py: Moved the WMS layer into a file on its
1584 own in order to establish a clean structure.
1585
1586 2004-04-13 Martin Schulze <[email protected]>
1587
1588 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Added
1589 support for oldstyle (WMS 1.0 apparently) image format
1590 specification.
1591
1592 * Extensions/wms/wms.py (WMSLayer.calcFormat): Reduce the list of
1593 supported graphic formats back to JPEG and BMP, PNG and others are
1594 too *cough* experimental... Sorry, I meant to filter this out
1595 before I committed this part. This should make the WMS extension
1596 run from CVS again.
1597 (wms_dialog): Reset an empty URL to None so that the subsequent
1598 program can depend on this, since the dialog will indeed return an
1599 empty URL, causing another declaration of love by Python.
1600
1601 * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerBBox):
1602 Whenever a native BoundingBox request cannot be fulfilled, check
1603 whether the requested SRS is EPSG:3426, in which case return the
1604 LatLonBoundingBox values.
1605
1606 * Extensions/wms/test/test_parser.py
1607 (TestWMSCapabilitiesParser.test_LayerSRS): Added a test for
1608 ignoring AUTO:* SRS.
1609 (TestWMSCapabilitiesParser.test_LatLonBoundingBoxes_as_bboxes):
1610 Added another test method to test whether the LatLonBoundingBox
1611 values will be returned if BoundingBox values are requested with
1612 SRS set to EPSG:3426.
1613
1614 * Extensions/wms/parser.py (WMSCapabilitiesParser.peekLayers):
1615 Added rudimentary support for non-EPSG SRS, i.e. ignore them for
1616 the moment by placing them into a variable which is currently
1617 unused. Also test whether the EPSG SRS is numerical as it should
1618 be and add an error message if it is not.
1619
1620 * Extensions/wms/test/sample.xml: Added AUTO:* SRS since they
1621 appear in the real world as well. Since we cannot handle them yet
1622 (OGCLib can't either), we will ignore them for the moment.
1623
1624 * Extensions/wms/parser.py: Use a variable for denoting the sample
1625 filename
1626 (WMSCapabilitiesParser.peekLayers): Added support for error
1627 messages during grok(). They will be aggregated in an array and
1628 may be displayed later. We may have to add a classification
1629 "Warning" and "Error" to this. That requires more experience,
1630 though, since not every error may be lethal.
1631
1632 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Raise the
1633 ShowTable() dialog/frame when the user attempts to display it
1634 while it has been opened before already and not closed again.
1635
1636 2004-04-11 Martin Schulze <[email protected]>
1637
1638 * Extensions/wms/infodialog.py: Adjusted the class documentation
1639
1640 * Extensions/wms/wms.py (WMSLayer.__init__, WMSLayer.GetMapImg):
1641 Switch to using Thuban{Begin,End}BusyCursor instead of the pure
1642 wxWidgets variants.
1643 (WMSLayer.__init__): The epsg_id variable is named top_srs now.
1644
1645 * Extensions/wms/infodialog.py: Added an information dialog that
1646 will display various information about the WMS current resource,
1647 so that additional information such as the title, the abstract,
1648 fees and access constraints can be displayed for the user if they
1649 are documented in the WMS XML.
1650
1651 2004-04-10 Martin Schulze <[email protected]>
1652
1653 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Adjusted
1654 string handling. It's "foo".lower() and not lower(foo) without
1655 lower imported from strings or something.
1656
1657 * Extensions/wms/wms.py (WMSLayer): Incorporated WMSCapabilities
1658 from capabilities.py and parser.py. Implement priority list for
1659 supported graphics formats, take care of wbmp != bmp. PNG, TIFF
1660 and GIF are supported here, but not yet by main Thuban. Hence,
1661 support for them may be removed later. Special contribution to
1662 usability: get wxWidgets to change the cursor when we're waiting
1663 for data from the network so the user won't start to worry. This
1664 causes a redrawing error/warning, though.
1665
1666 * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Unlink
1667 the DOM object.
1668
1669 2004-04-01 Martin Schulze <[email protected]>
1670
1671 * Extensions/wms/capabilities.py: Adjusted documentation
1672 (WMSCapabilities.__init__): Improved documentation, fixed syntax
1673 (WMSCapabilities.saveCapabilities): Only catch IOError when
1674 handling files
1675 (WMSCapabilities.loadCapabilities): Only catch IOError when
1676 handling files
1677 __main__: corrected variable naming
1678 (WMSCapabilities.fetchCapabilities,loadCapabilities): Make this
1679 class a specialisation of WMSCapabilitiesParser as well. Also
1680 execute grok() after loading or fetching capabilities, if that
1681 went well, so that subsequent calls can already access the data.
1682 (WMSCapabilities.getVersion): Export the used version of the
1683 GetCapabilities request, so we can use it for subsequent calls,
1684 i.e. for GetMap requests.
1685 (WMSCapabilities.fetchCapabilities): Added proper error handling
1686 when the GetCapabilities request failed, so that the surrounding
1687 program can act accordingly.
1688
1689 2004-03-30 Martin Schulze <[email protected]>
1690
1691 * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerSRS):
1692 Adjusted the getLayerSRS method to return the list of SRSes
1693 extracted from <SRS> elements instead of <BoundingBox> elements.
1694 Added a bit of documentation as well.
1695 (WMSCapabilitiesParser.checkLayerSRS): Removed integrity test
1696 since it was only implemented due to a misunderstanding.
1697
1698 * Extensions/wms/test/test_parser.py
1699 (TestWMSCapabilitiesParser.test_LayerSRS): Adjust the tests to
1700 reflect the corrected interpretation of the standard: i.e. a layer
1701 does not have to define a BoundingBox for all SRSes it supports.
1702 Hence the <SRS></SRS> specification is authoritative, not the list
1703 of BoundingBoxes.
1704 (TestWMSCapabilitiesParser.test_BoundingBoxes): Added a new test
1705 to ensure None is returned for a non-existing SRS.
1706 (TestWMSCapabilitiesParser.test_grok): Removed test_grok method
1707 since it is not applicable anymore. Listing more SRSes in <SRS>
1708 elements is valid according to the specs.
1709
1710 2004-03-26 Bernhard Reiter <[email protected]>
1711
1712 * README: Nicer formatting of text. Improved descriptions.
1713 Reflected wxWidgets name change.
1714
1715 * Thuban/UI/about.py: Extended copyright to 2004 and added
1716 information about the thuban-devel mailinglist.
1717
1718 2004-03-24 Martin Schulze <[email protected]>
1719
1720 * Extensions/wms/capabilities.py: Renamed the class to contain
1721 'WMS', also added a linebreak where required
1722
1723 * Extensions/wms/parser.py: Finally added the XML parser for the
1724 GetCapabilities response.
1725
1726 * Extensions/wms/test/sample.xml: Adjusted the sample file so that
1727 <SRS> elements match the <BoundingBox> elements, except for the
1728 layer 'beschriftung'.
1729
1730 * Extensions/wms/test/test_parser.py: Encode non-ascii strings
1731 since Python uses unicode strings internally, otherwise
1732 comparisons will fail. Removed tests for getLayerBBoxSRS() since
1733 the SRS will be calculated anyway and this method is obsoleted by
1734 getLayerSRS(). Denote SRS as strings and not as cardinal numbers.
1735 Move loading the sample file into the setUp method. Added a test
1736 for finding the integrity problem in the sample response.
1737 Improved formatting.
1738
1739 * Extensions/wms/domutils.py: Added convenience routines for
1740 handling of Document Object Model (DOM) nodes.
1741
1742 * Extensions/wms/test/test_domutils.py: Added a test for the
1743 domutils module
1744
1745 2004-03-19 Martin Schulze <[email protected]>
1746
1747 * Extensions/wms/test/test_parser.py (TestWMSCapabilitiesParser):
1748 Moved path detection and adding into a module of its own,
1749 adjustpath, which exports thubandir as main Thuban directory.
1750
1751 * Extensions/wms/test/test_ogclib.py (TestWMSLib): Moved path
1752 detection and adding into a module of its own, adjustpath, which
1753 exports thubandir as main Thuban directory. Reorganised the
1754 module in order to support the SkipTest feature for Thuban test
1755 cases.
1756
1757 * Extensions/wms/test/adjustpath.py: Moved path detection and
1758 adding into a module of its own.
1759
1760 2004-03-18 Martin Schulze <[email protected]>
1761
1762 * Extensions/wms/test/test_parser.py: Added another test for
1763 checking whether the WMS XML parser (to be implemented) returns
1764 the information we expect. This requires a sample WMS WML file
1765 (sample.xml) which has been extracted from the frida server and
1766 "improved" manually.
1767
1768 * Extensions/wms/test/test_ogclib.py: Added legacy code to add the
1769 main Thuban directory to the path in order to be able to import
1770 random modules. Adjusted the PyOGCLib detection to reuse the
1771 information gathered. Also added a note about the PYTHONPATH
1772 environment variable.
1773
1774 * Extensions/wms/test/test_ogclib.py: The format specification is
1775 a mime-type, not a graphic format, hence image/jpeg wou ld be the
1776 proper format and not JPEG. We'll also have to take care of the
1777 encoding of / as %2F.
1778
1779 2004-03-16 Martin Schulze <[email protected]>
1780
1781 * Extensions/wms/test/test_ogclib.py: Added a (hopefully)
1782 comprehensive test for the getMapURL method, built compare URLs
1783 according to the documentation in OGC 01-068r3
1784
1785 * Extensions/wms/capabilities.py (WMSCapabilities): Added the
1786 class WMSCapabilities to manage capabilites, will incorporate
1787 parsing the capabilities response and provide details for other
1788 classes.
1789
1790 2004-03-12 Bernhard Herzog <[email protected]>
1791
1792 Support views in addition to normal tables in the postgis
1793 shapestore
1794
1795 * Thuban/Model/postgisdb.py
1796 (PostGISShapeStore._fetch_table_information): Add a fallback for
1797 the case where the table name is not in the geometry_columns
1798 table. This is usually the case for views. Also, set
1799 self.shapestore here.
1800 (PostGISShapeStore.ShapeType): No need to query the database all
1801 the time. The shape type is now determined in
1802 _fetch_table_information
1803
1804 * test/postgissupport.py (PostgreSQLServer.new_postgis_db)
1805 (PostgreSQLServer.get_static_data_db, PostGISDatabase.__init__):
1806 New parameter to specify views.
1807 (PostGISDatabase.has_data): Also compare the views. New views
1808 parameter
1809 (PostGISDatabase.initdb): Create the views.
1810 (PostgreSQLServer.get_default_static_data_db): Add the v_landmarks
1811 view
1812
1813 * test/test_postgis_db.py
1814 (TestPostGISShapestorePointFromViews): New. Test a
1815 PostGISShapeStore with a view
1816 (TestPostGISShapestorePointOIDAsGIDColumn.setUp): Pass the name of
1817 the geometry_column explicitly to test whether that works
1818
1819 2004-03-12 Bernhard Herzog <[email protected]>
1820
1821 Final step for explicit id/geometry columns: Loading and saving
1822
1823 * Resources/XML/thuban-1.1.dtd: New. Derived from thuban-1.0.dtd
1824 with the following changes:
1825 (dbshapesource): Two new attributes id_column and geometry_column
1826
1827 * Thuban/Model/save.py (SessionSaver.write): Use the new dtd
1828 (SessionSaver.write_session): Use the new namespace
1829 (SessionSaver.write_data_containers): Write the new dbshapesource
1830 parameters
1831
1832 * Thuban/Model/load.py (SessionLoader.__init__): New namespace for
1833 the new file format version
1834 (SessionLoader.start_dbshapesource): Handle the new db parameters
1835
1836 * test/test_save.py: Update to the new dtd and namespace
1837 (SaveSessionTest.test_save_postgis): Update the NonConnectionStore
1838 mock object to provide a working IDColumn method.
1839
1840 * test/test_load_1_0.py: New. Copy of the test_load.py before
1841 today's changes but with the round-trip tests removed.
1842
1843 * test/test_load_0_9.py: Update doc-string.
1844
1845 * test/test_load.py: Update all .thuban files to the new dtd and
1846 namespace.
1847 (TestPostGISLayer.file_contents): Add the new dbshapesource
1848 paramters
1849
1850 2004-03-11 Bernhard Herzog <[email protected]>
1851
1852 Next step for explicit id/geometry columns: User interaction
1853
1854 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Rework how
1855 the dialog is constructed. Add combo boxes to select id and
1856 geometry column. Rename some instance variables.
1857 (ChooseDBTableDialog.GetTable): Return id and geometry column
1858 names
1859 (ChooseDBTableDialog.OnTableSelect): New. Event handler for
1860 selections in the table list
1861
1862 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Use id_column
1863 and geometry_column
1864
1865 * Thuban/Model/session.py (Session.OpenDBShapeStore): Add the new
1866 parameters for id_column and geometry column of PostGISShapeStore
1867 here as well.
1868
1869 * Thuban/Model/postgisdb.py (type_map): Add ROWID psycog type.
1870 (_raw_type_map): New. Map raw PostgreSQL type ints to thuban types
1871 (PostGISConnection.GeometryTables): Use a better query to
1872 determine which relations in the database might be usable for
1873 shapestores. Now supports views as well but is more PostgreSQL
1874 specific
1875 (PostGISConnection.table_columns): New. Somewhat experimental
1876 method to let the db dialogs provide lists of columns to users so
1877 that they can select id and geometry columns.
1878 (PostGISTable.__init__): The default value of the id_column
1879 parameter is now None it still means "gid" effectively, though.
1880 (PostGISTable.IDColumn): New introspection method to return a
1881 column object for the id column
1882 (PostGISShapeStore.GeometryColumn): New introspection method to
1883 return a column object for the geometry column
1884
1885 * test/test_postgis_db.py
1886 (TestPostGISConnection.test_gis_tables_non_empty):
1887 Removed. Subsumed by the new:
1888 (TestPostGISConnection.test_gis_tables_with_views_and_tables):
1889 New. Tes the GeometryTables and table_columns methods with actual
1890 tables and views.
1891 (PointTests.test_id_column, PointTests.test_geometry_column):
1892 New. tests for the new methods.
1893 (TestPostGISShapestorePoint.setUp)
1894 (TestPostGISShapestorePointSRID.setUp)
1895 (TestPostGISShapestorePointExplicitGIDColumn.setUp): Fill the
1896 instance variables needed by the new tests
1897
1898 2004-03-11 Bernhard Herzog <[email protected]>
1899
1900 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): The row
1901 numbers given to ReadValue are ordinals.
1902
1903 2004-03-11 Bernhard Herzog <[email protected]>
1904
1905 Elimiate the requirement for PostGIS tables to have a column
1906 called "gid".
1907
1908 * Thuban/Model/postgisdb.py (PostGISTable.__init__): New parameter
1909 id_column to specify which column to use to identify rows. Also
1910 new instance variables id_column and quoted_id_column
1911 (PostGISTable.RowIdToOrdinal, PostGISTable.RowOrdinalToId)
1912 (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue)
1913 (PostGISTable.SimpleQuery): Use the id column name provided to the
1914 constructor instead of "gid"
1915 (PostGISShapeStore.__init__): New parameter id_column analogously
1916 to PostGISTable.__init__. This parameter is simply passed through
1917 to the base class constructor
1918 (PostGISShapeStore._create_col_from_description): Fix typo in
1919 doc-string
1920 (PostGISShapeStore.Shape, PostGISShapeStore.AllShapes)
1921 (PostGISShapeStore.ShapesInRegion): Use the id column name
1922 provided to the constructor instead of "gid"
1923
1924 * test/postgissupport.py
1925 (PostgreSQLServer.get_default_static_data_db): New static table
1926 landmarks_point_id with an id column != "gid. Update the comments
1927 a bit.
1928 (skip_if_addgeometrycolumn_does_not_use_quote_ident): Fix typo in
1929 doc-
1930 (upload_shapefile): New parameter gid_column to use a name other
1931 than "gid" for the column to store the shape ids
1932
1933 * test/test_postgis_db.py (TableTests): New. Mixin-class
1934 containing all tests previously in TestPostGISTable. The actual
1935 tests are the same but the code is a bit more configurable to
1936 allow for different id columns etc.
1937 (TestPostGISTable): Derive from TableTests now for the actual
1938 tests.
1939 (TestPostGISTableExplicitGIDColumn): New. Like TestPostGISTable
1940 except that it the landmarks_point_id table to test the id_column
1941 parameter
1942 (PointTests): Extend the doc-string
1943 (TestPostGISShapestorePointExplicitGIDColumn)
1944 (TestPostGISShapestorePointOIDAsGIDColumn): New classes derived
1945 from PointTests to test the explicit id_column parameter. One
1946 tests with the name of the column holding the shape ids, the other
1947 uses PostgreSQL's OID column. For the latter a number of methods
1948 have to be overwritten to make them independent of the actual id
1949 values.
1950
1951 2004-03-08 Silke Reimer <[email protected]>
1952
1953 Update debian directory:
1954
1955 * debian/changelog: Added new version.
1956 * deiban/rules: Updated management of patches (with cbds)
1957 * debian/control: Added cbds to dependencies
1958 * debian/patches/*: New. Adds better support for patches of thuban in
1959 debian
1960 * debian/menu: Syntax of menu changed slightly
1961 * debian/setup.py.patch: removed because it has been moved to
1962 debian/patechs/setup.py.patch
1963
1964
1965 2004-02-26 Bernhard Herzog <[email protected]>
1966
1967 Create the Doc/technotes directory for text files with information
1968 for developers
1969
1970 * Doc/technotes/README: New. README for the technotes
1971
1972 * Doc/technotes/coding_guidelines.txt: New. Coding guidelines for
1973 Thuban
1974
1975 * Doc/technotes/release_process.txt: New. Used to be
1976 HOWTO-Release. Now slightly adapted to technote formatting style.
1977
1978 * HOWTO-Release: Removed. It's contents are now in
1979 Doc/technotes/release_process.txt
1980
1981 2004-02-25 Bernhard Herzog <[email protected]>
1982
1983 * libraries/thuban/wxproj.cpp (get_wx_version): New. Return the
1984 version of wxWindows the module was compiled with so we can check
1985 that against the wxPython version.
1986
1987 * Thuban/version.py (thuban_branch, thuban_release): New variables
1988 controlling which and how Thuban versions are shown. See the
1989 comments for details.
1990 (verify_versions): Also check that the wx version that wxproj is
1991 compiled against matches that of the wxPython we use at runtime
1992
1993 2004-02-20 Bernhard Herzog <[email protected]>
1994
1995 * Extensions/wms/wms.py (epsg_code_to_projection): Use
1996 get_system_proj_file to read the epsg projections. The old way
1997 depended on the current directory being the top Thuban directory.
1998
1999 2004-02-20 Bernhard Herzog <[email protected]>
2000
2001 * Extensions/svgexport/test/test_svgmapwriter.py
2002 (TestVirtualDC.test_clippath): Remove a debug print
2003
2004 2004-02-20 Bernhard Herzog <[email protected]>
2005
2006 * Extensions/svgexport/__init__.py: New. Turn
2007 Extensions/svgexport into a package.
2008
2009 * Extensions/svgexport/svgmapwriter.py: Reorder the imports and
2010 doc-string a bit. The doc-string must come first, otherwise it's
2011 not a doc-string. The __future__ import must be the first thing
2012 after the doc-string. Use only double quotes in doc-strings.
2013 Single quotes trip up emacs syntax highlighting if the text
2014 contains apostrophes.
2015
2016 2004-02-20 Bernhard Herzog <[email protected]>
2017
2018 * Extensions/svgexport/test/__init__.py,
2019 Extensions/svgexport/test/test_svgmapwriter.py: New. Initial test
2020 suite for svgexport
2021
2022 * test/runtests.py (find_test_modules): New. Function with the
2023 module finding code from main.
2024 (main): Use find_test_modules to figure out the default test
2025 modules and take modules from Extensions.svgexport.test too.
2026
2027 2004-02-19 Bernhard Herzog <[email protected]>
2028
2029 * Thuban/UI/application.py (ThubanApplication.OnInit): Make sure
2030 the mainwindow has a reference to the map of the initial session.
2031 This fixes a bug introduced with the fix for RT#2245
2032
2033 2004-02-19 Bernhard Herzog <[email protected]>
2034
2035 * Extensions/svgexport/svgsaver.py,
2036 Extensions/svgexport/svgmapwriter.py,
2037 Extensions/svgexport/maplegend.py: Added again. This time in the
2038 correct place.
2039
2040 2004-02-17 Bernhard Herzog <[email protected]>
2041
2042 Fix for RT#2245
2043
2044 * Thuban/UI/application.py (ThubanApplication.OnInit): Initialize
2045 instance variables before trying to create any windows. Creating
2046 windows can start an event loop if e.g. message boxes are popped
2047 up for some reason, and event handlers, especially EVT_UPDATE_UI
2048 may want to access things from the application.
2049 (ThubanApplication.maps_changed): The mainwindow may not have been
2050 created yet, so check whether it has been created before calling
2051 its methods
2052
2053 * Thuban/UI/view.py (MapCanvas.OnIdle): Only try to redraw if we
2054 have a map
2055
2056 2004-02-17 Bernhard Herzog <[email protected]>
2057
2058 * test/test_svgmapwriter.py, Extensions/svgsaver.py,
2059 Extensions/svgmapwriter.py, Extensions/maplegend.py,
2060 extensions/svgexport/svgsaver.py,
2061 extensions/svgexport/svgmapwriter.py,
2062 extensions/svgexport/maplegend.py: Removed. These files were in
2063 the wrong places or didn't work at all.
2064
2065 2004-02-16 Bernhard Herzog <[email protected]>
2066
2067 * Thuban/UI/view.py (MapCanvas.Export): Remove accidentally added
2068 line
2069
2070 2004-02-16 Bernhard Herzog <[email protected]>
2071
2072 * Thuban/UI/view.py (MapCanvas.Export): Avoid UnboundLocalError.
2073
2074 2004-02-15 Markus Rechtien <[email protected]>
2075
2076 * Extensions/svgexport/svgmapwriter.py: New. Adds the capability
2077 to write a session to a file in SVG format.
2078 * Extensions/svgexport/svgsaver.py: New. Uses svgmapwriter.py
2079 to write a SVG map of a session.
2080 * Extensions/svgexport/maplegend: New. Writes a basic maplegend
2081 in SVG format for the current session.
2082
2083 2004-02-13 Bernhard Herzog <[email protected]>
2084
2085 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): When the layer
2086 can't be created, return immediately after displaying the error
2087 message.
2088
2089 2004-02-11 Bernhard Herzog <[email protected]>
2090
2091 Handle postgis tables with more than one geometry column.
2092
2093 * Thuban/Model/postgisdb.py
2094 (PostGISTable._fetch_table_information): Delegate the creation of
2095 column objects to a different method so that we can extend that in
2096 derived classes
2097 (PostGISTable._create_col_from_description): New. Column object
2098 creation part of _fetch_table_information
2099 (PostGISShapeStore._create_col_from_description): New. Extend
2100 inherited method to handle geometry columns
2101 (PostGISShapeStore.__init__): New parameter geometry_column to
2102 specify which geometry column to use. Optional but mandatory for
2103 tables with more than one geometry column
2104 (PostGISShapeStore._fetch_table_information): Also use the name of
2105 the geometry column when looking for the srid
2106 (PostGISShapeStore.ShapeType): Also use the name of the geometry
2107 column when looking for the shape type
2108
2109 * test/test_save.py (SaveSessionTest.test_save_postgis): Adapt
2110 NonConnectionStore to changes in the PostGISShapeStore
2111
2112 * test/test_postgis_db.py
2113 (TestPostGISSpecialCases.test_shapestore_two_geom_cols): Test
2114 PostGISShapeStore with tables having two geometry columns.
2115
2116 2004-02-10 Bernhard Herzog <[email protected]>
2117
2118 Fix some postgis problems. What remains to be done is real
2119 handling of SRIDs as they affect how reprojection is done
2120
2121 * Thuban/Model/postgisdb.py (quote_identifier): Fix typo in
2122 doc-string
2123 (PostGISShapeStore._fetch_table_information): New. Extend
2124 inherited method to retrieve srid
2125 (PostGISShapeStore.BoundingBox): Handle tables without data.
2126 extent yields NULL for those
2127 (PostGISShapeStore.ShapesInRegion): Use the srid of the table.
2128
2129 * test/test_postgis_db.py
2130 (TestPostGISSpecialCases.test_shapestore_empty_table): New test
2131 for the special case of a table without any data
2132 (TestPostGISShapestorePointSRID): New class with tests for a table
2133 that uses srids
2134 (PolygonTests): Fix a doc-string typo
2135
2136 * test/postgissupport.py (PostGISDatabase.__init__): New parameter
2137 reference_systems with a specification of spacial reference
2138 systems to create in the new db.
2139 (PostgreSQLServer.new_postgis_db)
2140 (PostgreSQLServer.get_static_data_db): New parameter
2141 reference_systems to be passed through ultimately to
2142 PostGISDatabase. In new_postgis_db also check whether an existing
2143 db already has the right srids
2144 (PostgreSQLServer.get_default_static_data_db): Add srids and a
2145 table that uses srids
2146 (PostGISDatabase.initdb): Create the entries for the reference
2147 systems
2148 (PostGISDatabase.has_data): Add reference_systems parameter to
2149 check for those too
2150 (upload_shapefile): New parameter srid to create tables with a
2151 specific srid
2152
2153 2004-02-06 Frank Koormann <[email protected]>
2154
2155 * po/pt_BR.po: Fixed charset
2156
2157 2004-02-05 Frank Koormann <[email protected]>
2158
2159 * po/pt_BR.po: Fixed format string for error message, missing %s
2160 added (Thuban/UI/application.py:273)
2161
2162 2004-02-03 Frank Koormann <[email protected]>
2163
2164 First version of Portuguese (Brazilian) translation
2165
2166 * po/pt_BR.po: New, translation of pot (2004-01-15 16:07+0300) for
2167 Brazilian Portuguese by Eduardo Patto Kanegae.
2168
2169 * Thuban/UI/about.py (About.__init.py__): Added Eduardo to the list of
2170 translators.
2171
2172
2173 2004-01-22 Frank Koormann <[email protected]>
2174
2175 * Doc/manual/thuban-manual.xml: Added section on installation of
2176 Thuban under Win32 systems. Fixed image path references in the postgis
2177 section. Some minor source formattings.
2178
2179 2004-01-21 Frank Koormann <[email protected]>
2180
2181 Make Thuban remember path selections (at least for one application run).
2182
2183 * Thuban/UI/application.py (Application.OnInit): Initialize path as a
2184 attribute of application object. Path is a dictionary of
2185 strings, currently with the items "data" and "projection".
2186 (Application.SetPath): New, stores path for the specified item.
2187 (Application.Path): New, return path for the specified item.
2188
2189 * Thuban/UI/mainwindow.py
2190 (MainWindow.OpenSession, MainWindow.SaveSessionAs,
2191 MainWindow.AddLayer, MainWindow.AddRasterLayer,
2192 MainWindow.TableOpen): Access "data" path information of the
2193 application.
2194
2195 * Thuban/UI/projdialog.py (ProjFrame._OnImport, ProjFrame._OnExport):
2196 Access "projection" path information of the application.
2197
2198 2004-01-05 Bernhard Herzog <[email protected]>
2199
2200 * po/ru.po: Updated translations from Alex Shevlakov
2201
2202 2004-01-05 Bernhard Herzog <[email protected]>
2203
2204 * po/Makefile, po/README: Move the description of how to generate
2205 the translation statistics to the README.
2206
2207 2003-12-23 Bernhard Herzog <[email protected]>
2208
2209 * NEWS: Update for 1.0.0
2210
2211 * po/it.po: Another update from Maurizio Napolitano
2212
2213 2003-12-23 Bernhard Herzog <[email protected]>
2214
2215 * po/it.po: Updated translation from Maurizio Napolitano
2216
2217 2003-12-23 Bernhard Herzog <[email protected]>
2218
2219 * Thuban/UI/join.py (JoinDialog.__init__): Mark one more string
2220 for translation
2221
2222 * Thuban/UI/mainwindow.py (MainWindow.TableRename)
2223 (MainWindow.RenameMap, MainWindow.RenameLayer): Mark some more
2224 strings for translation
2225
2226 * po/de.po: Update with the newly marked strings.
2227
2228 2003-12-22 Bernhard Herzog <[email protected]>
2229
2230 * HOWTO-Release: Fix the places where version numbers have to be
2231 updated
2232
2233 2003-12-22 Bernhard Herzog <[email protected]>
2234
2235 * setup.py (setup call): 1.0.0, yeah!
2236
2237 * Thuban/version.py (longversion): 1.0.0, yeah!
2238
2239 * Thuban/Model/load.py (SessionLoader.__init__): Accept the
2240 1.0.0 namespace too
2241
2242 * Thuban/Model/save.py (SessionSaver.write_session): Save with
2243 1.0.0 namespace
2244
2245 * test/test_load.py (LoadSessionTest.dtd)
2246 (TestSingleLayer.file_contents)
2247 (TestNonAsciiColumnName.file_contents)
2248 (TestLayerVisibility.file_contents)
2249 (TestClassification.file_contents, TestLabels.file_contents)
2250 (TestLayerProjection.file_contents)
2251 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
2252 (TestLabelLayer.file_contents, TestPostGISLayer.file_contents)
2253 (TestPostGISLayerPassword.file_contents)
2254 (TestLoadError.file_contents, TestLoadError.test): Update for
2255 1.0.0 namespace
2256
2257 * test/test_save.py (SaveSessionTest.dtd)
2258 (SaveSessionTest.testEmptySession)
2259 (SaveSessionTest.testSingleLayer)
2260 (SaveSessionTest.testLayerProjection)
2261 (SaveSessionTest.testRasterLayer)
2262 (SaveSessionTest.testClassifiedLayer)
2263 (SaveSessionTest.test_dbf_table)
2264 (SaveSessionTest.test_joined_table)
2265 (SaveSessionTest.test_save_postgis): Update for 1.0.0 namespace
2266
2267 2003-12-22 Bernhard Herzog <[email protected]>
2268
2269 * Thuban/Model/load.py (SessionLoader.start_label): Make sure the
2270 alignment flags are byte strings not unicode and that they have
2271 valid values
2272
2273 * test/test_load.py (TestLabelLayer): New. Test loading (and
2274 indirectly saving) of maps with labels.
2275
2276 2003-12-22 Bernhard Herzog <[email protected]>
2277
2278 * Thuban/UI/tableview.py (TableGrid.OnDestroy)
2279 (TableGrid.__init__): Handle EVT_WINDOW_DESTROY in the grid to
2280 unsubscribe all subscribers.
2281 (LayerTableFrame.OnDestroy): Do not unsubscribe any messages from
2282 self.grid since it may already have been destroyed.
2283 Fixes RT #2256
2284
2285 2003-12-19 Bernhard Herzog <[email protected]>
2286
2287 * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
2288
2289 2003-12-16 Bernhard Herzog <[email protected]>
2290
2291 * debian/bitmappath.patch, debian/setup.py.patch:
2292 added to ensure compliance with FHS for debian
2293 * debian/rules, debian/changelog:
2294 added patches in rules to ensure compliance with FHS for debian
2295
2296 2003-12-16 Bernhard Herzog <[email protected]>
2297
2298 * po/Makefile (mo): Make the output a bit nicer so that it prints
2299 statistics about the translations. Add a comment how produce even
2300 nicer statistics with sed.
2301
2302 2003-12-09 Frank Koormann <[email protected]>
2303
2304 * Resources/Projections/defaults.proj:
2305 French projection sample with correct accents (UNICODE).
2306
2307 2003-12-05 Bernhard Herzog <[email protected]>
2308
2309 * MANIFEST.in: Add the devtools directory
2310
2311 * setup.py (setup call): Use license instead of licence. This
2312 silences a deprecation warning on Python 2.3
2313
2314 2003-12-05 Frank Koormann <[email protected]>
2315
2316 Documentation synced with 1.0rc1
2317
2318 * Doc/manual/thuban-manual.xml:
2319 Minor formatting changes and references to database layers .
2320 Introduction.Internationalization: New section on i18n.
2321 MapManagement.AddingandRemovingLayers: Added item on database layers.
2322 MapManagement.TheLegend: Added section and screenshot on popup menu.
2323 ProjectionManagement: Updated screenshot and sentence on EPSG.
2324 Appendix.SupportedDataSources: Added PostGIS.
2325 Appendix.WorkingwithPostGIS: New section.
2326
2327 * Doc/manual/images/6_projection.png: Updated screenshot including
2328 EPSG checkboxes.
2329
2330 * Doc/manual/images/3_5_popup_menu.png: New, popup menu screenshot.
2331
2332 * Doc/manual/images/app_postgis_add_layer.png,
2333 Doc/manual/images/app_postgis_db_add.png,
2334 Doc/manual/images/app_postgis_db_management.png:
2335 New screenshots focussing on database layers
2336
2337 2003-12-05 Frank Koormann <[email protected]>
2338
2339 * Thuban/UI/projdialog.py (load_user_proj): If user.proj is missing
2340 write warning to stderr instead of rising a warning dialog
2341
2342 2003-12-03 Bernhard Herzog <[email protected]>
2343
2344 Fix for RT #2243
2345
2346 * Thuban/UI/mainwindow.py (MainWindow.has_selected_shape_layer):
2347 New. Like has_selected_layer but for shape layers only
2348 (_has_selected_shape_layer): New. Like _has_selected_layer but for
2349 shape layers only
2350 (layer_show_table command, layer_jointable command): Use these
2351 commands should only be available for shape layers
2352
2353 2003-12-03 Bernhard Herzog <[email protected]>
2354
2355 * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
2356 publishers that are wx objects and may have been destroyed by wx
2357 already. Fixes RT #2242.
2358
2359 2003-12-03 Bernhard Herzog <[email protected]>
2360
2361 * po/ru.po: Updates from Alex Shevlakov
2362
2363 2003-12-03 Silke Reimer <silkeintevation.de>
2364
2365 * debian/control, debian/changelog: Added gdal-support to
2366 debian package, updated to new thuban version
2367
2368
2369 2003-12-03 Bernhard Herzog <[email protected]>
2370
2371 * Thuban/Lib/version.py: New. Module for version number
2372 manipulations. The version of make_tuple here also deals better
2373 with more unusual version number strings, such as e.g.
2374 "1.2+cvs20031111"
2375
2376 * Thuban/version.py (make_tuple): Removed. It's now in
2377 Thuban.Lib.version. Use that implementation instead.
2378
2379 * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
2380
2381 2003-12-02 Bernhard Herzog <[email protected]>
2382
2383 * MANIFEST.in: Add debian files
2384
2385 * setup.py (setup call): Add packages for the Extensions so that
2386 they're installed too
2387 (data_files): Add READMEs and sample data from some Extensions
2388
2389 * NEWS: Add note about the extensions in binary packages
2390
2391 2003-12-02 Bernhard Herzog <[email protected]>
2392
2393 * Thuban/Model/save.py (SessionSaver.write_session): Save files
2394 with the thuban-1.0rc1
2395
2396 * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
2397 thuban-1.0rc1 namespace too
2398
2399 * test/test_save.py (SaveSessionTest.dtd)
2400 (SaveSessionTest.testEmptySession)
2401 (SaveSessionTest.testSingleLayer)
2402 (SaveSessionTest.testLayerProjection)
2403 (SaveSessionTest.testRasterLayer)
2404 (SaveSessionTest.testClassifiedLayer)
2405 (SaveSessionTest.test_dbf_table)
2406 (SaveSessionTest.test_joined_table)
2407 (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
2408 namespace
2409
2410 * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
2411 namespace
2412 (TestSingleLayer.file_contents)
2413 (TestNonAsciiColumnName.file_contents)
2414 (TestLayerVisibility.file_contents)
2415 (TestClassification.file_contents, TestLabels.file_contents)
2416 (TestLayerProjection.file_contents)
2417 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
2418 (TestPostGISLayer.file_contents)
2419 (TestPostGISLayerPassword.file_contents)
2420 (TestLoadError.file_contents, TestLoadError.test): Update to
2421 thuban-1.0rc1 namespace
2422
2423 2003-12-01 Bernhard Herzog <[email protected]>
2424
2425 * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
2426 nt to better match Intevation's current w32 setup
2427
2428 * HOWTO-Release: Add note about updating MANIFEST.in
2429
2430 * MANIFEST.in: Add the Extensions
2431
2432 * NEWS: Update for 1.0rc1
2433
2434 2003-12-01 Bernhard Herzog <[email protected]>
2435
2436 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
2437 cards for the dialog so that shapefiles ending in all uppercase
2438 SHP are listed too
2439
2440 2003-11-28 Bernhard Herzog <[email protected]>
2441
2442 * Thuban/version.py (longversion): Update to 1.0rc1
2443
2444 * setup.py (setup call): Update version to 1.0rc1. Use the
2445 [email protected] email address as author email instead of my
2446 personal one.
2447
2448 2003-11-28 Bernhard Herzog <[email protected]>
2449
2450 * po/de.po: Update german translation.
2451
2452 2003-11-28 Bernhard Herzog <[email protected]>
2453
2454 Unify the filenames stored in .thuban files so that the .thuban
2455 files are more platform independend
2456
2457 * Thuban/Model/save.py (unify_filename): New. Unify filenames so
2458 that they can be used on both windows and unix
2459 (SessionSaver.prepare_filename): New. Handle all filename
2460 transformations for filenames stored in the thuban file
2461 (SessionSaver.write_data_containers, SessionSaver.write_layer):
2462 Use prepare_filename
2463
2464 * test/test_save.py (SaveSessionTest.testSingleLayer)
2465 (SaveSessionTest.testLayerProjection)
2466 (SaveSessionTest.testRasterLayer)
2467 (SaveSessionTest.testClassifiedLayer)
2468 (SaveSessionTest.test_dbf_table)
2469 (SaveSessionTest.test_joined_table): Filenames are always stored
2470 with slashes on all currently supported platforms so adapt all
2471 tests to this
2472
2473 * test/test_load.py (LoadSessionTest.filenames): With the new
2474 filename scheme the filenames in the tests should be
2475 understandable on all currently supported platforms so we turn
2476 this into an empty list because we don't have to normalize them
2477 anymore
2478
2479 2003-11-28 Bernhard Herzog <[email protected]>
2480
2481 * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
2482 Add the ellipsoid to the projection since some Proj versions
2483 complain if it's missing.
2484
2485 2003-11-27 Bernhard Herzog <[email protected]>
2486
2487 Corect some bounding box projection problems
2488
2489 * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
2490 version of ForwardBBox
2491 (Projection._transform_bbox): New. common implementation of
2492 ForwardBBox and InverseBBox
2493 (Projection.ForwardBBox): Use _transform_bbox.
2494
2495 * test/test_proj.py (TestProjection.test): Add test for
2496 InverseBBox
2497
2498 * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
2499 (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
2500 new InverseBBox method to determine the unprojected bounding box
2501 (Layer.ShapesInRegion): Use the ForwardBBox method to project the
2502 bbox.
2503
2504 * test/test_layer.py (TestLayer.test_point_layer_with_projection):
2505 Removed.
2506 (TestLayer.test_arc_layer_with_projection): New. This test is
2507 better able to test whether bounding boxes are projected correctly
2508 than test_point_layer_with_projection
2509
2510 * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
2511 InverseBBox to unproject bboxes
2512
2513 2003-11-25 Bernhard Herzog <[email protected]>
2514
2515 * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
2516 source code.
2517
2518 2003-11-25 Bernhard Herzog <[email protected]>
2519
2520 * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
2521 there for backwards compatibility and all code relying on that
2522 should have been updated by now.
2523
2524 2003-11-25 Bernhard Herzog <[email protected]>
2525
2526 * test/test_load.py (TestClassification.test): Add the missing
2527 round trip test.
2528 (TestClassification.file_contents): Update to the newest file
2529 format
2530
2531 2003-11-25 Bernhard Herzog <[email protected]>
2532
2533 Add very experimental (and possibly dangerous) extension to draw
2534 polygons:
2535
2536 * Extensions/drawshape/README: New. Brief installation
2537 instructions
2538
2539 * Extensions/drawshape/drawshape.py: New. Implementation of the
2540 drawshape extensions
2541
2542 * Extensions/drawshape/patch.diff: Patch to apply before the
2543 extension can be used.
2544
2545 2003-11-24 Bernhard Herzog <[email protected]>
2546
2547 * Thuban/Model/data.py (ShapefileStore._open_shapefile)
2548 (ShapefileStore.__init__): Factor opening the shapefile into a
2549 separate method (the new _open_shapefile). This makes the code a
2550 bit more readable but the real reason is that it makes some evil
2551 hacks easier. :-)
2552
2553 2003-11-24 Bernhard Herzog <[email protected]>
2554
2555 * Thuban/Model/load.py (SessionLoader.check_attrs): If no
2556 converter is specified for an attribute assume it's a string
2557 containing only Latin1 characters. Update doc-string accordingly.
2558 This change should fix many places where unicode objects might
2559 accidentally enter Thuban.
2560
2561 * test/test_load.py (TestNonAsciiColumnName): New test to check
2562 what happens with column names in DBF files that contain non-ascii
2563 characters
2564
2565 2003-11-21 Bernhard Herzog <[email protected]>
2566
2567 Enable the experimental attribute editing again and introduce a
2568 command line switch to actually activate it
2569
2570 * Thuban/UI/main.py (options): New. Container for options set on
2571 the commmand line
2572 (main): Add the --enable-attribute-editing flag.
2573
2574 * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
2575 editing is enabled use the grid ctrl which allows editing of the
2576 values
2577
2578 * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
2579 New. Just delegate this to the underlying table.
2580
2581 2003-11-20 Bernhard Herzog <[email protected]>
2582
2583 * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
2584 Skip this test if run under non-posix systems since it only works
2585 there
2586
2587 2003-11-19 Bernhard Herzog <[email protected]>
2588
2589 * Thuban/Model/resource.py: Rework the way gdal support is
2590 determined so that we can give a reason in the about why gdal is
2591 not supported.
2592 (gdal_support_status): New. Variable holding a string with the
2593 reason for no gdal support
2594
2595 * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
2596 not supported to the message
2597
2598 2003-11-19 Bernhard Herzog <[email protected]>
2599
2600 Remove the old table interface and its test cases
2601
2602 * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
2603 (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
2604 anymore
2605
2606 * Thuban/Model/transientdb.py (TransientTableBase)
2607 (AutoTransientTable): Do not derive from OldTableInterfaceMixin
2608 anymore
2609
2610 * test/test_table.py: Removed since the old interface it tests is
2611 gone.
2612
2613 * test/runtests.py (main): The old table interface is gone and
2614 with it the deprecation warnings so remove the code that turns
2615 these warnings into errors
2616
2617 2003-11-19 Bernhard Herzog <[email protected]>
2618
2619 * test/test_table.py: Revert to revision 1.5 again. Changing the
2620 tests to use the new table interface is completely wrong since the
2621 whole purpose of the tests in this module is to test the old
2622 interface.
2623
2624 2003-11-18 Bernhard Herzog <[email protected]>
2625
2626 * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
2627 New. Test whether the connection matches a set of connection
2628 parameters
2629
2630 * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
2631 (DBFrame.OnAdd): Use the new MatchesParameters method when looking
2632 for existing connections with the same parameters and break out of
2633 the loop correctly.
2634
2635 * test/test_postgis_db.py (TestBriefDescription)
2636 (TestPostGISSimple.test_brief_description): Rename
2637 TestBriefDescription to TestPostGISSimple and the test method to
2638 test_brief_description so that we can add more test methods.
2639 (TestPostGISSimple.test_matches_parameters): New. Test the new
2640 MatchesParameters method
2641
2642 2003-11-18 Bernhard Herzog <[email protected]>
2643
2644 * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
2645 _was_destroyed, to indicate whether an publisher instance has
2646 already been destroyed.
2647 (Publisher.Unsubscribe): Only disconnect if the publisher has not
2648 been destroyed yet.
2649 (Publisher.Destroy): Set the _was_destroyed flag to true.
2650
2651 * test/test_connector.py
2652 (TestPublisher.test_unsubscribe_after_destroy): New. Test that
2653 calling Unsubscribe after Destroy doesn't raise an exception
2654
2655 2003-11-14 Bernhard Herzog <[email protected]>
2656
2657 * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
2658 typo in doc-string
2659
2660 2003-11-13 Bernhard Herzog <[email protected]>
2661
2662 Quote table and column names properly for postgis.
2663
2664 * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
2665 quote an identifier for use in an sql statement
2666 (PostGISColumn.__init__): Add the quoted_name attribute
2667 (PostGISTable.__init__): New instance variable quoted_tablename
2668 (PostGISTable._fetch_table_information): Use the quoted table
2669 name. New isntance variable quoted_geo_col with a quoted version
2670 of geometry_column
2671 (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
2672 (PostGISTable.RowOrdinalToId): Use the quoted table name
2673 (PostGISTable.ReadValue, PostGISTable.ValueRange)
2674 (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
2675 (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
2676 (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
2677 Use quoted table and column names
2678
2679 * test/test_postgis_db.py (TestPostGISSpecialCases)
2680 (TestPostGISIgnoredColumns): Rename the class to
2681 TestPostGISSpecialCases because that better describes the new
2682 cases
2683 (TestPostGISSpecialCases.test_unsupported_types)
2684 (TestPostGISSpecialCases.test): Rename the method to
2685 test_unsupported_types because we need a more descriptive name now
2686 that there are more methods
2687 (TestPostGISSpecialCases.test_table_name_quoting)
2688 (TestPostGISSpecialCases.test_column_name_quoting)
2689 (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
2690 cases to test quoting of table and column names in PostGISTable
2691 and PostGISShapeStore
2692
2693 * test/postgissupport.py
2694 (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
2695 AddGeometryColumn desn't support table or column names with sapces
2696 or double quotes
2697
2698 2003-11-12 Jan-Oliver Wagner <[email protected]>
2699
2700 * Extensions/wms/__init__.py: New: Init to make this
2701 directory a package.
2702
2703 * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
2704
2705 2003-11-11 Bernhard Herzog <[email protected]>
2706
2707 * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
2708 Constant for the file woth deprecated epsg projections
2709 (get_system_proj_file): Update doc-string
2710
2711 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
2712 above the EPS widgets, introduce a check box for the deprecated
2713 eps projections and a label for the epsg widgets
2714 (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
2715 too
2716
2717 2003-11-11 Bernhard Herzog <[email protected]>
2718
2719 Avoid warnings when run under Python 2.3
2720
2721 * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
2722 (BaseRenderer.draw_label_layer): Coordinates must be ints.
2723
2724 * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
2725 real method so that we can convert to int.
2726 (MapRenderer.label_font): The font size mist be an int.
2727
2728 * Thuban/UI/common.py (Color2wxColour): The color values must be
2729 ints. Also, remove the unnecessary asserts.
2730
2731 * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
2732 (TestUnicodeStrings.test): Python source code should not contain
2733 non-ascii characters unless an encoding is specified in the file.
2734 Therefore use \x escapes in the string literals for non-ascii
2735 characters.
2736
2737 2003-11-11 Bernhard Herzog <[email protected]>
2738
2739 * Thuban/Model/resource.py (get_system_proj_file): Add a filename
2740 parameter so that this function can be used for all proj files in
2741 Resource/Projections
2742 (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
2743 get_system_proj_file
2744
2745 * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
2746 ProjFile self.__sysProjFile use a dictionary of system ProjFile
2747 objects self._sys_proj_files
2748 (ProjFrame.build_dialog): Adapt to the new changes in the
2749 ProjectionList constructor. Add a check button to toggle whether
2750 EPSG projections are shown
2751 (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
2752 events.
2753 (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
2754 the busy cursor if the files have not yet been loaded by the
2755 dialog.
2756 (ProjFrame.load_system_proj): Add a parameter for the name of the
2757 proj file. Maintain the dictionary of system projections
2758 self._sys_proj_files
2759
2760 * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
2761 user_projs parameters into one parameter proj_files which is a
2762 list of proj files.
2763 (ProjectionList._subscribe_proj_files)
2764 (ProjectionList._unsubscribe_proj_files): New. Move
2765 subscription/unsubscription of projfile messages to separate
2766 methods
2767 (ProjectionList.Destroy): The unsubscribe is now done in
2768 _unsubscribe_proj_files
2769 (ProjectionList.update_projections): We now have a list of proj
2770 file objects
2771 (ProjectionList.SetProjFiles): New method to set a new list of
2772 proj file objects
2773
2774 * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
2775 Specify explicitly which system proj file to load.
2776
2777 2003-11-11 Bernhard Herzog <[email protected]>
2778
2779 * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
2780 instance variables to cut cyclic references. The GC would have
2781 collected the loader eventually but it can happen that it doesn't
2782 run at all until thuban is closed (2.3 but not 2.2 tries a bit
2783 harder and forces a collection when the interpreter terminates)
2784 (load_session): Call the handler's Destroy method to make sure
2785 that it gets garbage collected early. Otherwise it will be
2786 collected very late if at all and it holds some references to e.g.
2787 shapestores and the session which can lead to leaks (of e.g. the
2788 temporary files)
2789
2790 * test/test_load.py (TestSingleLayer.test_leak): New. test for the
2791 resource leak in load_session
2792
2793 2003-11-10 Bernhard Herzog <[email protected]>
2794
2795 * Thuban/UI/baserenderer.py: Add a way to specify how layers in
2796 extensions are to be rendered.
2797 (_renderer_extensions): New. List with renderer for layers in
2798 extensions
2799 (add_renderer_extension): New. Add a renderer extension
2800 (init_renderer_extensions): New. Init the renderer extensions
2801 (BaseRenderer.render_map_incrementally): Search
2802 _renderer_extensions for how to draw unknown layer types
2803 (BaseRenderer.draw_raster_data): Add format parameter so that
2804 formats other than BMP can be drawn
2805 (BaseRenderer.draw_raster_layer): Pass an explicit format to
2806 draw_raster_data
2807
2808 * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
2809 strings of the format parameter of draw_raster_data method to wx
2810 constants
2811 (MapRenderer.draw_raster_data): Add the format parameter and use
2812 raster_format_map to map it to the right wxwindows constant for
2813 wxImageFromStream
2814
2815 * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
2816 the format parameter and record it
2817 (TestBaseRenderer.test_raster_no_projection): check the format
2818 paramter of the draw_raster_data method
2819 (TestBaseRenderer.test_renderer_extension): New. Test the renderer
2820 extension facility
2821
2822 2003-11-07 Bernhard Herzog <[email protected]>
2823
2824 Tweak the usage of the sqlite database to make common use cases
2825 more responsive. In most cases copying the data to the sqlite
2826 database takes so long that using sqlite doesn't have enough
2827 advantages.
2828
2829 * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
2830 comments about performance and query the min and max in separate
2831 statements because only that way will indexes be used.
2832 (TransientTableBase.UniqueValues): Add some comments about
2833 performance.
2834 (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
2835 Do not copy the data to the transient DB but use the transient
2836 copy if it exists. See the new comments for the performance trade
2837 offs
2838
2839 * test/test_transientdb.py
2840 (TestTransientTable.test_auto_transient_table): Make sure that the
2841 data is copied to the transient database at some point.
2842
2843 2003-11-03 Bernhard Herzog <[email protected]>
2844
2845 * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
2846 globals to locals so that it's a bit faster
2847
2848 2003-11-03 Bernhard Herzog <[email protected]>
2849
2850 * Thuban/UI/baserenderer.py
2851 (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
2852 method. ReadValue is faster than ReadRowAsDict since it only reads
2853 one cell especially now that the dbf file objects actually
2854 implement it.
2855
2856 * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
2857 read_attribute method of the dbf objects
2858
2859 2003-11-03 Bernhard Herzog <[email protected]>
2860
2861 * Extensions/profiling/profiling.py (popup_dialog_box): New config
2862 variable to indicate whether the result should be shown in a
2863 dialog box
2864 (profile_screen_renderer, time_screen_renderer): Only show a
2865 dialog box if popup_dialog_box is true.
2866 (profile_screen_renderer): Flush stdout after the printing the
2867 first part of the "profiling..." message
2868
2869 * Thuban/UI/baserenderer.py
2870 (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
2871 brushes for the groups so that they're not created over and over
2872 again
2873
2874 * Thuban/Model/classification.py (Classification.__getattr__)
2875 (Classification._compile_classification)
2876 (Classification._clear_compiled_classification): New. Methods to
2877 manage a 'compiled' representation of the classification groups
2878 which is created on demand
2879 (Classification.InsertGroup, Classification.RemoveGroup)
2880 (Classification.ReplaceGroup): reset the compiled representation
2881 (Classification.FindGroup): Use the compiled representation to
2882 find the matching group
2883 (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
2884
2885 2003-10-31 Bernhard Herzog <[email protected]>
2886
2887 * Thuban/Model/classification.py (Classification.SetDefaultGroup):
2888 Send a CLASS_CHANGED message
2889 (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
2890 not return the removed group since it wasn't used.
2891
2892 * test/test_classification.py
2893 (TestClassification.test_set_default_group): New. Test the
2894 SetDefaultGroup method
2895 (TestClassification.test_insert_group): New. Test the InsertGroup
2896 method
2897 (TestClassification.test_remove_group): New. Test the RemoveGroup
2898 method
2899 (TestClassification.test_replace_group): New. Test the
2900 ReplaceGroup method
2901
2902 2003-10-31 Bernhard Herzog <[email protected]>
2903
2904 * test/test_classification.py (TestClassification.setUp):
2905 Subscribe to the CLASS_CHANGED messages
2906 (TestClassification.tearDown): New. Destroy the classification
2907 properly
2908 (TestClassification.test_defaults): Add tests for the default line
2909 width and whether no messages were sent yet
2910 (TestClassification.test_set_default_properties): Add tests for
2911 messages and setting the default line width
2912 (TestClassification.test_add_singleton)
2913 (TestClassification.test_add_range)
2914 (TestClassification.test_multiple_groups): Add tests for messages
2915
2916 2003-10-31 Bernhard Herzog <[email protected]>
2917
2918 Some more refactoring in preparation for new tests:
2919
2920 * test/test_classification.py (TestClassification.setUp): New.
2921 Instantiate the classification here. Update the test methods
2922 accordingly.
2923 (TestClassification.test_multiple_groups): Make sure that the two
2924 singletons matching 1 are considered different.
2925
2926 2003-10-31 Bernhard Herzog <[email protected]>
2927
2928 * test/test_classification.py (red, green, blue): New. These
2929 constants were used in several cases. Update the relevant methods.
2930 (TestClassification.test_defaults)
2931 (TestClassification.test_set_default_properties)
2932 (TestClassification.test_add_singleton)
2933 (TestClassification.test_add_range)
2934 (TestClassification.test_multiple_groups)
2935 (TestClassification.test_deepcopy): New. These were formerly all
2936 part of the single method test.
2937 (TestClassification.test_deepcopy): Removed.
2938 (TestClassIterator): Removed. The test case is now a method of
2939 TestClassification since it tests part of the public interface of
2940 Classification
2941 (TestClassification.test_iterator): New. Used to be
2942 TestClassIterator effectively
2943
2944 2003-10-31 Jan-Oliver Wagner <[email protected]>
2945
2946 GUIfied the functions of the profiling extension.
2947
2948 * /Extensions/profiling/__init__.py: New: Init to make this
2949 directory a package.
2950
2951 * Extensions/profiling/profiling.py: Moved menu entries to
2952 the Extensions menu. Applied _() for strings.
2953 (profile_screen_renderer): Catch the detailed printout and present
2954 it in a dialog.
2955 (time_screen_renderer): Raise a dialog to present the result instead
2956 of printing it to stdout.
2957
2958 2003-10-31 Bernhard Herzog <[email protected]>
2959
2960 * test/test_classification.py (TestClassGroupProperties)
2961 (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
2962 (TestClassGroupSingleton, TestClassIterator, TestClassification):
2963 Split TestClassification into several classes, one for each class
2964 being tested. TestClassification itself now only tests
2965 Classification. This split makes changes to the tests a bit easier
2966
2967 2003-10-31 Bernhard Herzog <[email protected]>
2968
2969 * Extensions/profiling/profiling.py: New. Extension to measure
2970 Thuban performance
2971
2972 2003-10-31 Frank Koormann <[email protected]>
2973
2974 Added two items to legend popup menu: Remove Layer and Show Layer Table
2975
2976 * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
2977 LegendPanel._OnShowTable): New event handlers, call the corresponding
2978 mainwindow methods.
2979 (LegendTree._OnRightClick): Added items to popup menu.
2980
2981 2003-10-30 Bernhard Herzog <[email protected]>
2982
2983 * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
2984 EVT_WINDOW_DESTROY
2985 (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
2986 nothing but is convenient for the derived classes.
2987
2988 * Thuban/UI/tableview.py
2989 (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
2990 Unsubscribe the messages here not in OnClose because that might
2991 get called multiple times. Fixes RT #2196
2992 (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
2993 anymore.
2994
2995 * README: Update the minimum requirement for wxPython. Since we
2996 now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
2997 the version in which that was introduced for all platforms
2998
2999 2003-10-30 Frank Koormann <[email protected]>
3000
3001 * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
3002 the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
3003 frame.
3004
3005 2003-10-30 Jan-Oliver Wagner <[email protected]>
3006
3007 Improved APR import extension, added further EPSG definitions
3008 and some cleanup regarding string class.
3009
3010 * test/test_proj.py (TestProjection.test_get_projection_units_geo):
3011 Added test for alias 'longlat'.
3012
3013 * Resources/Projections/epsg-deprecated.proj: New. Contains
3014 deprecated EPSG definitions.
3015
3016 * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
3017 the variable names for objects.
3018
3019 * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
3020 Copied from importAPR and provided with documentation.
3021
3022 * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
3023 Moved to apr.py.
3024 (APR_View): Added object ref 'ITheme'.
3025
3026 * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
3027 split function by corresponding use of the string class method.
3028
3029 * Thuban/Model/xmlwriter.py: Replaced string replace function by
3030 corresponding string method.
3031
3032 2003-10-29 Bernhard Herzog <[email protected]>
3033
3034 * Thuban/UI/baserenderer.py
3035 (BaseRenderer.draw_shape_layer_incrementally): Speed up the
3036 special case of a classification that only has the default group
3037
3038 2003-10-27 Bernhard Herzog <[email protected]>
3039
3040 * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
3041
3042 * po/de.po: Update.
3043
3044 * Thuban/UI/application.py
3045 (ThubanApplication.ShowExceptionDialog): Handle translation of the
3046 dialog message properly
3047
3048 2003-10-27 Bernhard Herzog <[email protected]>
3049
3050 Rework how localization works so that we use wx's translation
3051 functions when running Thuban as a normal application but not when
3052 we don't need any UI, such as in the test suite. See the comment
3053 in Thuban/__init__.py for details
3054
3055 * Thuban/__init__.py (_): Add one level of indirection to make the
3056 translation handling more flexible and to make it possible to use
3057 either wx's translation services or not.
3058 (gettext_identity, translation_function_installed)
3059 (install_translation_function): New function to help with this
3060
3061 * Thuban/UI/__init__.py: Install the wx specific translation
3062 function if it's OK to do that
3063
3064 * test/support.py (initthuban): Install a dummy translation
3065 function so that importing Thuban.UI doesn't install a wx specific
3066 one for which would need to import wxPython
3067
3068 2003-10-27 Bernhard Herzog <[email protected]>
3069
3070 * HOWTO-Release: Source archives should be created first and the
3071 binary packages should be created from the source archives.
3072 There's an official debian package now so there's no need to test
3073 the rpm on debian anymore
3074
3075 2003-10-27 Bernhard Herzog <[email protected]>
3076
3077 Several rendering changes:
3078
3079 - Render the selection into a separate bitmap so that only that
3080 bitmap needs to be redrawn when the selection changes
3081
3082 - Render incrementally showing previews and allowing interaction
3083 before rendering is complete
3084
3085 - Update the renderer interface a bit. Most parameters of
3086 RenderMap are now parameters of the constructor
3087
3088 * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
3089 and the update region as parameters. Update the doc-string
3090 (BaseRenderer.render_map_incrementally): New. Generator function
3091 to renders the map incrementally
3092 (BaseRenderer.render_map): Remove the map argument (it's now in
3093 the constructor) and simply iterate over the
3094 render_map_incrementally generator to draw the map.
3095 (BaseRenderer.draw_shape_layer_incrementally)
3096 (BaseRenderer.draw_shape_layer): Renamed to
3097 draw_shape_layer_incrementally and changed into a generator that
3098 yields True every 500 shapes. Used by render_map_incrementally to
3099 render shape layers incrementally
3100
3101 * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
3102 map and region parameters which are now in the constructor
3103 (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
3104 the inherited render_map_incrementally.
3105 (BaseRenderer.draw_shape_layer): Removed.
3106 (ScreenRenderer.draw_selection_incrementally): New. The selection
3107 drawing part of the removed draw_shape_layer as a generator
3108 (ScreenRenderer.layer_shapes): Update because of the region
3109 parameter change
3110 (ExportRenderer.__init__): New. Extend the inherited constructor
3111 with the destination region for the drawing
3112 (ExportRenderer.RenderMap): Removed the map and region parameters
3113 which are now in the constructor
3114
3115 * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
3116 bitmap suitable for a preview in a tool
3117 (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
3118 bitmap
3119 (MapPrintout.draw_on_dc): Adapt to new renderer interface
3120 (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
3121 exists
3122 (MapCanvas.OnIdle): Update the logic to deal with incremental
3123 rendering and the selection bitmap
3124 (MapCanvas._do_redraw): Handle the instantiation of the render
3125 iterator and the redraws during rendering
3126 (MapCanvas._render_iterator): New. Generator to incrementally
3127 redraw both bitmaps
3128 (MapCanvas.Export): Adapt to new renderer interface.
3129 (MapCanvas.full_redraw): Reset the selection bitmap and the
3130 renderer iterator too
3131 (MapCanvas.redraw_selection): New. Force a redraw of the selection
3132 bitmap
3133 (MapCanvas.shape_selected): Only redraw the selection bitmap
3134
3135 * test/test_baserenderer.py
3136 (TestBaseRenderer.test_polygon_no_projection)
3137 (TestBaseRenderer.test_raster_no_projection)
3138 (TestBaseRenderer.test_point_map_projection)
3139 (TestBaseRenderer.test_point_layer_and_map_projection)
3140 (TestBaseRenderer.test_point_layer_projection)
3141 (TestBaseRenderer.test_point_with_classification): Adapt to new
3142 renderer interface
3143
3144 2003-10-24 Bernhard Herzog <[email protected]>
3145
3146 * libraries/thuban/wxproj.cpp (draw_polygon_shape)
3147 (point_in_polygon_shape, shape_centroid): Raise an exception if
3148 the shape can't be read. Previously invalid shape ids would lead
3149 to a segfault.
3150
3151 * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
3152 New. test whether an exception is raised for invalid shape ids
3153
3154 2003-10-24 Jan-Oliver Wagner <[email protected]>
3155
3156 * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
3157 as alias for 'latlong'.
3158
3159 * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
3160 as alias for 'latlong'.
3161
3162 2003-10-24 Jan-Oliver Wagner <[email protected]>
3163
3164 * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
3165 the projection even for the UnknownPanel.
3166 (UnknownProjPanel.__init__): Define the text and create the textctrl
3167 widget.
3168 (UnknownProjPanel._DoLayout): Replaced static text widget by the
3169 textctrl created in __init__.
3170 (UnknownProjPanel.SetProjection): Set the text for the text ctrl
3171 including the parameters of the projection.
3172
3173 2003-10-24 Jan-Oliver Wagner <[email protected]>
3174
3175 * Resources/Projections/epsg.proj: New. This is a list of
3176 EPSG codes with parameters for proj. The list has been
3177 generated using devtools/create_epsg.py based on the
3178 file nad/epsg of the proj 4.4.7 package. Four projection
3179 definitions have been deleted as they are not accepted by proj:
3180 "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
3181 and "HD72 / EOV".
3182
3183 2003-10-22 Bernhard Herzog <[email protected]>
3184
3185 Some more tweaks to the projection dialog which should fix RT
3186 #1886.
3187
3188 * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
3189 the ProjFile's messages and call the base class methods correctly
3190 (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
3191 flag on the newly selected item too. Otherwise some other item is
3192 focused and the first time the focus is moved with the keyboard
3193 the selection moves in unexpected ways.
3194
3195 * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
3196 focus on the OK button, only on the projection list. That way the
3197 list really has the focus initially
3198 (ProjFrame.OnClose): Call the projection list's Destroy method to
3199 make it unsubscribe all messages
3200
3201 2003-10-21 Bernhard Herzog <[email protected]>
3202
3203 Rework the projection dialog to fix a few bugs, including RT 2166
3204 and most of 2168
3205
3206 * Thuban/UI/projlist.py: New. The class ProjectionList is a
3207 special wxListCtrl to show a list of projections in a more MVC
3208 fashion
3209
3210 * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
3211 throughout the class. The main change is to use the ProjectionList
3212 class instead of a normal wxListBox. Also, add an explicit
3213 "Unknown" projection to the projection choice control.
3214 (ProjPanel.__init__): Add an "unknown" ellipsoid
3215 (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
3216 instantiation of the panel's controls to make the tab-order more
3217 natural
3218
3219 2003-10-21 Bernhard Herzog <[email protected]>
3220
3221 * test/test_load.py (TestSingleLayer.file_contents)
3222 (TestSingleLayer.test): Add non-ascii characters to the titles of
3223 session, map and layer. This is effectively a port of the
3224 TestUnicodeStrings test in test_load_0_8.py which for some reason
3225 was only added there.
3226
3227 * test/test_load_0_9.py (TestSingleLayer.file_contents)
3228 (TestSingleLayer.test): Same as in test_load.py: add non-ascii
3229 characters to the titles of session, map and layer,.
3230
3231 2003-10-21 Bernhard Herzog <[email protected]>
3232
3233 Add EPSG projection handling to .thuban files
3234
3235 * test/test_save.py (SaveSessionTest.dtd)
3236 (SaveSessionTest.testEmptySession)
3237 (SaveSessionTest.testLayerProjection)
3238 (SaveSessionTest.testRasterLayer)
3239 (SaveSessionTest.testClassifiedLayer)
3240 (SaveSessionTest.test_dbf_table)
3241 (SaveSessionTest.test_joined_table)
3242 (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
3243 (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
3244 use a and epsg projection to test saving them
3245
3246 * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
3247 namespace
3248 (TestLayerVisibility.file_contents, TestLabels.file_contents)
3249 (TestLayerProjection.file_contents)
3250 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3251 (TestPostGISLayer.file_contents)
3252 (TestPostGISLayerPassword.file_contents)
3253 (TestLoadError.file_contents, TestLoadError.test): Update to use
3254 1.0-dev namespace
3255 (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
3256 use 1.0-dev namespace and use an EPSG projection to test whether
3257 loading it works
3258
3259 * test/test_load_0_9.py: New. Effectively a copy of test_load.py
3260 as of Thuban 0.9. These are now tests to determine whether Thuban
3261 can still read files generated by Thuban 0.9
3262
3263 * Thuban/Model/save.py (SessionSaver.write)
3264 (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
3265 namespace
3266 (SessionSaver.write_projection): Write the projection's epsg
3267 attribute
3268
3269 * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
3270 thuban-1.0-dev.dtd namespace
3271 (SessionLoader.check_attrs): Allow a callable object as conversion
3272 too
3273 (SessionLoader.start_projection, SessionLoader.end_projection)
3274 (SessionLoader.start_parameter): Handle the epsg attribute and
3275 rename a few instance variables to lower case
3276
3277 * Resources/XML/thuban-1.0.dtd: New. Only difference to
3278 thuban-0.9.dtd is the epsg attribute for projections.
3279
3280 2003-10-21 Bernhard Herzog <[email protected]>
3281
3282 * test/runtests.py (main): Let the user specify which tests to run
3283 on the command line
3284
3285 * test/support.py (ThubanTestResult.getDescription): Override to
3286 give a better short description. The description can be used as a
3287 parameter to run_tests to run that particular test in isolation.
3288
3289 2003-10-21 Frank Koormann <[email protected]>
3290
3291 Popup menu for legend. Scheduled for the 1.2 release this was too
3292 simple to implement: The popup menu is bound to the legend tree, while
3293 the events are hanlded by its anchestor, the legend panel. This
3294 allows reuse of all the event handlers already implemented for the
3295 legend toolbar buttons.
3296
3297 * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
3298 to add handlers for the events issued by the popup menu.
3299 (LegendPanel._OnToggleVisibility): Handler for toggling layer
3300 visibility event
3301 (LegendPanel._OnProjection): Handler for layer projection event.
3302 (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
3303 (LegendTree._OnRightClick): Event handler for right click, select item
3304 and pop up menu.
3305 (LegendTree.ToggleVisibility): Toggle layer visibility
3306 (LegendTree.LayerProjection): Raise layer projection dialog for
3307 current layer.
3308
3309 2003-10-21 Bernhard Herzog <[email protected]>
3310
3311 * Resources/Projections/defaults.proj: Use correct DOCTYPE
3312 declaration. The top-level element is projectionlist not projfile
3313
3314 2003-10-20 Bernhard Herzog <[email protected]>
3315
3316 * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
3317 method to write a projfile and display a busy cursor and error
3318 dialogs.
3319 (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
3320 (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
3321 (ProjFrame.__FillAvailList): Translate "<None>" too and display a
3322 busy cursor while loading the user and system prj files.
3323
3324 2003-10-16 Bernhard Herzog <[email protected]>
3325
3326 * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
3327 ProjFile objects
3328 (clear_proj_file_cache): New function to clear the cache. Mainly
3329 useful for use by the test suite
3330 (read_proj_file): Use the cache.
3331
3332 * test/test_proj.py (TestProjFile): Clarify the doc-string
3333 (ProjFileReadTests): Update doc-string
3334 (ProjFileReadTests.test_get_system_proj_file): Check whether the
3335 system proj files is cached.
3336 (ProjFileLoadTestCase): New base class for the proj file tests
3337 derived from support.FileLoadTestCase to provide some common
3338 behavior.
3339 (TestLoadingProjFile)
3340 (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
3341 (TestProjFileWithInvalidParameters.file_contents): Derive from
3342 ProjFileLoadTestCase
3343 (TestLoadingProjFile.test_caching): New. Test whether the cache
3344 works
3345
3346 2003-10-16 Silke Reimer <[email protected]>
3347
3348 * debian/*: New directory with configuration files for building a thuban
3349 deb-package.
3350
3351 2003-10-14 Bernhard Herzog <[email protected]>
3352
3353 * test/test_proj.py: Execute support.run_tests when run as
3354 __main__ so that missing unsubscribes are detected
3355 (TestProjFile.tearDown): Destroy the proj_file properly
3356
3357 2003-10-14 Bernhard Herzog <[email protected]>
3358
3359 * Thuban/Model/messages.py (PROJECTION_ADDED)
3360 (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
3361 the ProjFile objects
3362
3363 * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
3364 easily send messages when the projections change
3365 (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
3366 when the change was successful
3367
3368 * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
3369 proj file messages
3370 (TestProjFile.test_add_remove)
3371 (TestProjFile.test_remove_non_existing)
3372 (TestProjFile.test_replace)
3373 (TestProjFile.test_replace_non_existing): Test whether the right
3374 messages are sent
3375
3376 2003-10-14 Bernhard Herzog <[email protected]>
3377
3378 * test/test_proj.py (TestProjFile.test): Refactor into several
3379 tests
3380 (TestProjFile.test_add_remove)
3381 (TestProjFile.test_remove_non_existing)
3382 (TestProjFile.test_replace)
3383 (TestProjFile.test_replace_non_existing): Some of the new
3384 individual test cases
3385 (TestProjFileSimple): New class for the rest of the test cases
3386 that came out of the refactoring
3387 (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
3388 derived classes don't have to
3389
3390 2003-10-13 Bernhard Herzog <[email protected]>
3391
3392 Add an optional EPSG code to the projection objects and extend the
3393 .proj file format accordingly.
3394
3395 * Resources/XML/projfile.dtd (element projection): Add epsg
3396 attribute
3397
3398 * Thuban/Model/proj.py (Projection.__init__): New parameter and
3399 instance variable epsg. Update doc-string
3400 (Projection.EPSGCode, Projection.Label): New methods to provide
3401 access to EPSG code and a label for use in dialogs
3402
3403 * Thuban/Model/resource.py (ProjFileReader.start_projection)
3404 (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
3405 Handle the epsg code attribute when reading or writing proj files
3406
3407 * Thuban/UI/projdialog.py (ProjFrame._OnSave)
3408 (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
3409 (ProjFrame.__FillAvailList): Use the projection's Label method to
3410 get the string for the list box
3411
3412 * test/test_proj.py (TestProjection.test_label)
3413 (TestProjection.test_label_epsg)
3414 (TestProjection.test_epsgcode_for_non_epsg_projection)
3415 (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
3416 for the label and EPSGCode methods
3417 (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
3418 (WriteProjFileTests.test_write_empty_file): Create the ProjFile
3419 objects in the test cases and put the expected contents into the
3420 test case methods too. Update doTestWrite accordingly
3421 (TestLoadingProjFile)
3422 (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
3423 read tests from TestProjFile.
3424 (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
3425 tests are now in the new classes.
3426 (sample_projfile, sample_projfile_data)
3427 (sample_projfile2, sample_projfile_data2): Removed. Not used
3428 anymore.
3429 (TestProjFile.test_read_unreadable_file): No need to reset the
3430 permissions at the end anymore since we use a unique filename
3431
3432 2003-10-13 Bernhard Herzog <[email protected]>
3433
3434 * test/test_proj.py: Some more refactoring of the test cases
3435 (ProjFileTest): New base class for the proj file tests.
3436 (TestProjFile): Derive from ProjFileTest
3437 (TestProjFile.test_read_unreadable_file)
3438 (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
3439 the new filename method to get a unique filename
3440 (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
3441 (WriteProjFileTests): New class for proj file write tests.
3442 Contains the write test that were in TestProjFile originally.
3443
3444 2003-10-13 Bernhard Herzog <[email protected]>
3445
3446 * test/test_proj.py (TestProjFile.testRead)
3447 (TestProjFile.test_read_non_existing_file)
3448 (TestProjFile.test_read_unreadable_file)
3449 (TestProjFile.test_read_empty_file): Split into several methods.
3450
3451 2003-10-10 Bernhard Herzog <[email protected]>
3452
3453 * Thuban/UI/sizers.py: New file with custom sizers.
3454
3455 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
3456 all projection type specific panels and put them into a
3457 NotebookLikeSizer. This way the dialog doesn't change its size
3458 when a different projection is selected
3459 (ProjFrame.__init__): Rename projection_panels
3460 projection_panel_defs and reuse projection_panels for a list of
3461 the instantiated panels.
3462 (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
3463 (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
3464 the panels
3465 (UnknownProjPanel._DoLayout): Place the newlines in the message
3466 differently to make the panel narrower.
3467 (TMPanel._DoLayout): Layout the parameters in one column.
3468
3469 2003-10-10 Bernhard Herzog <[email protected]>
3470
3471 * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
3472 that contains all the setup for the dialog's widgets, layout and
3473 event handling.
3474 (__): Call build_dialog to build the dialog.
3475 (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
3476 Their functionality is now in build_dialog
3477 (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
3478 (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
3479 (ProjFrame.__DoOnProjChoice): Small updates due to slightly
3480 different widget names and hierarchy introduced with build_dialog.
3481
3482 2003-10-10 Bernhard Herzog <[email protected]>
3483
3484 * README: Fix typo.
3485
3486 2003-10-09 Bernhard Herzog <[email protected]>
3487
3488 * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
3489 projection is already in the list. This is *a lot* faster when
3490 loading files with hundreds of projections since it saves a linear
3491 search. OTOH this will allow adding the same projection to the
3492 user.proj file multiple times in the projection dialog but we'll
3493 deal with that later
3494
3495 2003-10-09 Jan-Oliver Wagner <[email protected]>
3496
3497 * devtools: New. Directory for developer tools that are not intended
3498 for the regular user.
3499
3500 * devtools/create_epsg.py: New. Convert the epsg file of proj into
3501 a python .proj file.
3502
3503 2003-10-09 Bernhard Herzog <[email protected]>
3504
3505 * test/test_proj.py
3506 (TestProjection.test_get_parameter_without_equals_sign): New. Test
3507 whether GetParameter handles parameters without "=" sign correctly
3508
3509 * Thuban/Model/proj.py (Projection.GetParameter): Handle
3510 parameters that do not contain a "=". Update the doc-string
3511
3512 2003-10-08 Bernhard Herzog <[email protected]>
3513
3514 * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
3515 length limit on the projname text control
3516
3517 2003-10-08 Bernhard Herzog <[email protected]>
3518
3519 * test/test_proj.py (TestProjection.test_get_projection_units_geo)
3520 (TestProjection.test_get_projection_units_normal): New. Tests for
3521 the Projection.GetProjectedUnits method
3522
3523 2003-10-08 Jan-Oliver Wagner <[email protected]>
3524
3525 * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
3526 Added missing 'val' parameter.
3527
3528 2003-10-08 Bernhard Herzog <[email protected]>
3529
3530 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
3531 projection type of the currently selected projection is not known,
3532 i.e. there's no panel for it, use the UnknownProjPanel
3533 (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
3534 the actual replacing of the proj panel into the new method
3535 _show_proj_panel.
3536 (UnknownProjPanel): Add doc-string.
3537 (UnknownProjPanel._DoLayout): Insert a newline into the text so
3538 that the panel is not so wide.
3539
3540 2003-10-08 Bernhard Herzog <[email protected]>
3541
3542 * Thuban/Model/resource.py (read_proj_file): Return the warnings
3543 too. Update the doc-string
3544 (get_proj_files): Removed. It wasn't used anywhere
3545 (get_system_proj_files, get_system_proj_file): Rename to
3546 get_system_proj_file and return the ProjFile object and not a list
3547 of ProjFile objects. Update the callers.
3548 (get_user_proj_files, get_user_proj_file): Rename to
3549 get_user_proj_file return the ProjFile object and not a list of
3550 ProjFile objects. Update the callers.
3551 (ProjFileReader.__init__): New instance variable for the warnings.
3552 Rename the __pf ivar to projfile. Update the methods referring to
3553 __pf
3554 (ProjFileReader.end_projection): Catch any errors raised when
3555 instantiating the projection and record that as an error. The
3556 projection will not be in the final ProjFile object.
3557 (ProjFileReader.GetWarnings): New method to return the warnings.
3558
3559 * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
3560 show the warnings from the projfile reader
3561 (ProjFrame._OnImport): Deal with any warnings returned by
3562 read_proj_file
3563 (ProjFrame.__FillAvailList): Deal with any warnings returned by
3564 get_system_proj_file or get_user_proj_file.
3565
3566 * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
3567 (TestProjFileWithInvalidParameters.file_contents): New test cases
3568 to test whether read_proj_file handles invalid projection
3569 parameters correctly
3570 (TestProjFile.test_get_system_proj_file): New. Simple test for
3571 resource.get_system_proj_file
3572
3573 2003-10-07 Bernhard Herzog <[email protected]>
3574
3575 * test/test_derivedshapestore.py
3576 (TestDerivedShapeStoreExceptions.tearDown): Clear the session
3577 properly so that the temporary directories get deleted correctly
3578
3579 2003-10-06 Bernhard Herzog <[email protected]>
3580
3581 Handle the title changes in a proper MVC way.
3582
3583 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
3584 canvas' TITLE_CHANGED messages
3585 (MainWindow.update_title): New. Update the main window's title
3586 (MainWindow.__SetTitle): Removed. Use update_title instead.
3587 (MainWindow.SetMap): Use update_title instead of __SetTitle
3588 (MainWindow.RenameMap): Do change the window title explicitly
3589 here. That's handled in a proper MVC way now.
3590 (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
3591 messages
3592
3593 * Thuban/Lib/connector.py (Conduit): New class to help classes
3594 that forward messages
3595
3596 * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
3597 (ViewPort): Derive from Conduit instead of Publisher
3598 (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
3599 when calling the inherited versions
3600 (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
3601 methods to subscribe and unsubscribe map messages
3602 (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
3603 handle the map subscriptions
3604 (ViewPort.Map, ViewPort.map_projection_changed)
3605 (ViewPort.layer_projection_changed): Add or update doc-strings
3606
3607 * test/test_connector.py (TestPublisher.test_issue_simple): Fix
3608 typo
3609 (MyConduit): Helper class for the Conduit test.
3610 (TestConduit): Test cases for Conduit
3611
3612 * test/test_connector.py: Use support.run_tests as main.
3613
3614 * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
3615 the TITLE_CHANGED messages
3616 (ViewPortTest.test_forwarding_title_changed): New test to check
3617 whether the viewport forwards the map's TITLE_CHANGED messages
3618 (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
3619 after the port's because the latter may require a still functional
3620 map.
3621
3622 2003-10-06 Bernhard Herzog <[email protected]>
3623
3624 * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
3625 doc-string
3626
3627 2003-10-06 Bernhard Herzog <[email protected]>
3628
3629 * test/test_viewport.py (ViewPortTest.setUp)
3630 (SimpleViewPortTest.test_init_with_size): Move the test for the
3631 initial size as a constructor parameter from ViewPortTest.setUp
3632 method to a new separate test in SimpleViewPortTest.
3633
3634 2003-10-06 Bernhard Herzog <[email protected]>
3635
3636 * test/test_viewport.py (MockView): New class derived from
3637 ViewPort with a mock implementation of GetTextExtent to be used in
3638 the test cases
3639 (ViewPortTest.setUp): Use MockView instead of ViewPort
3640
3641 * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
3642 into what would be a "pure virtual function" in C++: always raise
3643 NotImplementedError. Mock implementations for test cases don't
3644 belong into the real code
3645
3646 2003-10-02 Bernhard Herzog <[email protected]>
3647
3648 * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
3649 close the dbf file we create so that it's contents have been
3650 written properly.
3651
3652 * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
3653 libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
3654 Update to shapelib 1.2.10
3655
3656 2003-10-01 Jan-Oliver Wagner <[email protected]>
3657
3658 * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
3659 it annoys lintian which warns about these files not being
3660 executable. The #! isn't necessary here since if you absolutely
3661 must execute them you can always say "python <filename>".
3662
3663 2003-09-26 Bernhard Herzog <[email protected]>
3664
3665 * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
3666 only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
3667 is ported to a newer the import will fail, so it should be noticed
3668 immediately that this function is gone.
3669 Fixes RT#1919
3670
3671 2003-09-26 Bernhard Herzog <[email protected]>
3672
3673 Add a DTD for the projection files and make thuban write valid
3674 projection files
3675
3676 * Resources/XML/projfile.dtd: New. DTD for thuban's projection
3677 files
3678
3679 * Thuban/Model/resource.py (ProjFileSaver.write): Use
3680 'projectionlist' as the name in the document type declaration so
3681 that it matches the element type of the root element.
3682
3683 * test/test_proj.py (sample_projfile, sample_projfile2): Use
3684 'projectionlist' as the name in the document type declaration just
3685 as it is done now in the files thuban would write
3686 (sample_projfile, sample_projfile_data): Fix spelling of
3687 "Mercator"
3688 (TestProjFile.doTestWrite): Validate the written and the expected
3689 XML data
3690 (TestProjFile): Derive from ValidationTest so that we can run xml
3691 validation tests
3692
3693 2003-09-24 Bernhard Herzog <[email protected]>
3694
3695 * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
3696 modify the list returned by map.Layers() in place since it is the
3697 actual list of layers used by the map.
3698
3699 2003-09-23 Jan-Oliver Wagner <[email protected]>
3700
3701 * Doc/manual/thuban-manual.xml: Added subsection to chapter
3702 Extensions to describe the extensions coming with the Thuban
3703 standard package (gns2shp and importAPR).
3704
3705 2003-09-23 Bernhard Herzog <[email protected]>
3706
3707 * libraries/thuban/wxproj.cpp (project_point): if there's an
3708 inverse but no forward projection, convert to degrees after
3709 applying the inverse projection. Fixes RT#2096
3710
3711 * test/test_wxproj.py: New. Test cases for wxproj.so. One test
3712 implicitly tests for the fix to RT#2096
3713
3714 * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
3715 Check that the sequences have the same lengths
3716
3717 * Resources/Projections/defaults.proj (Geographic projection): Use
3718 a much more precise value for the to_meter attribute.
3719
3720 2003-09-22 Bernhard Herzog <[email protected]>
3721
3722 * test/support.py (initthuban): Make sure to unset the LANG env.
3723 var. so that tests that compare translated strings work. Solves RT
3724 #2094
3725
3726 2003-09-22 Jan-Oliver Wagner <[email protected]>
3727
3728 Small improvement of APR import.
3729
3730 * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
3731 Added tests for text-ranges.
3732
3733 * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
3734 returns a string object if the range is based on text.
3735
3736 * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
3737 range retrieval.
3738
3739 2003-09-22 Jan-Oliver Wagner <[email protected]>
3740
3741 Initial version of the importAPR extension which is in
3742 experimental state.
3743
3744 * /Extensions/importAPR/, /Extensions/importAPR/samples/,
3745 /Extensions/importAPR/test/: New directories.
3746
3747 * /Extensions/importAPR/samples/README: New: Howto load the samples.
3748
3749 * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
3750 file which refers to the Thuban Iceland demo data.
3751
3752 * /Extensions/importAPR/test/README: New: Howto execute the tests.
3753
3754 * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
3755
3756 * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
3757 as in '.apr'-files.
3758
3759 * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
3760 ODB Objects as in '.apr', '.avl' and other files.
3761
3762 * /Extensions/importAPR/__init__.py: New: Init to make this
3763 directory a package.
3764
3765 * /Extensions/importAPR/importAPR.py: New: Import a ArcView
3766 project file (.apr) and convert it to Thuban.
3767
3768 2003-09-22 Jan-Oliver Wagner <[email protected]>
3769
3770 * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
3771
3772 2003-09-19 Jan-Oliver Wagner <[email protected]>
3773
3774 * Doc/manual/thuban-manual.xml: Extended section 'Installation'
3775 with description on RPM installation and RPM binary package
3776 creation.
3777
3778 2003-09-18 Bernhard Herzog <[email protected]>
3779
3780 * setup.py (data_files): Only add the mo files if the Locales
3781 directory actually exists, so that setup.py works with a fresh CVS
3782 checkout
3783
3784 2003-09-12 Jan-Oliver Wagner <[email protected]>
3785
3786 * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
3787 in viewport, not anymore in view
3788
3789 2003-09-04 Jan-Oliver Wagner <[email protected]>
3790
3791 Introducing first Extension (gns2shp).
3792
3793 * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
3794
3795 * Extensions/__init__.py: New. init to make this dir a package.
3796
3797 * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
3798
3799 * Extensions/gns2shp/test/README: New. some info on this test directory.
3800
3801 * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
3802
3803 * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
3804 of Shapefile from GNS text file format
3805
3806 2003-09-03 Jan-Oliver Wagner <[email protected]>
3807
3808 Fix/workaround for bug #2019:
3809 https://intevation.de/rt/webrt?serial_num=2019
3810
3811 * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
3812 (IdentifyView.__init__): Added another button that allows to
3813 stop the identify mode.
3814 (IdentifyView.OnStop): New. Stops the identify mode.
3815
3816 2003-09-03 Jan-Oliver Wagner <[email protected]>
3817
3818 Introducing a new exception dialog that allows to exit the
3819 application immediately.
3820 This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
3821
3822 * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
3823
3824 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
3825 Made strings available to translations. Exchanged the simple
3826 ScrolledMessageDialog by the new ExceptionDialog.
3827
3828 2003-09-01 Bernhard Herzog <[email protected]>
3829
3830 * NEWS: New. Summary of changes and release notes.
3831
3832 * MANIFEST.in: Add NEWS
3833
3834 2003-09-01 Bernhard Herzog <[email protected]>
3835
3836 * MANIFEST.in: Correct the include statement for the mo-files and
3837 include the documentation too.
3838
3839 * setup.py (data_files): Add the .mo files
3840 (setup call): Up to version 0.9.0
3841
3842 2003-09-01 Bernhard Herzog <[email protected]>
3843
3844 * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
3845 parameter list to just parent and session
3846 (ChooseDBTableDialog.__set_properties): Removed. Setting the
3847 selection of empty list boxes is not allowed (and produces C++
3848 assertion errors) and the rest of the setup is better done in
3849 __init__ anyway.
3850 (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
3851 (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
3852 builtins True/False for booleans to avoid warnings from wxPython
3853
3854 * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
3855 ChooseDBTableDialog constructor parameters.
3856
3857 2003-09-01 Bernhard Herzog <[email protected]>
3858
3859 * Thuban/Model/postgisdb.py
3860 (PostGISTable): Extend doc-string
3861 (PostGISTable._fetch_table_information): Set the column index
3862 correctly, pretending ignored columns don't exist.
3863
3864 * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
3865 for postgis tables with data types not yet supported by thuban.
3866
3867 2003-08-29 Bernhard Herzog <[email protected]>
3868
3869 * HOWTO-Release: Tweak item about running the tests.
3870
3871 2003-08-29 Jan-Oliver Wagner <[email protected]>
3872
3873 * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
3874
3875 2003-08-29 Bernhard Herzog <[email protected]>
3876
3877 Add some missing parameters to projections. Proj complains about
3878 them on windows but for some reason not on Linux.
3879
3880 * test/test_save.py (SaveSessionTest.testLayerProjection): Add
3881 missing required projection parameters
3882
3883 * test/test_proj.py (TestProjFile.test): Add missing required
3884 projection parameters
3885
3886 * test/test_load_0_8.py (TestLayerProjection.file_contents)
3887 (TestLayerProjection.test): Add missing required projection
3888 parameters and tests for them
3889
3890 * test/test_load.py (TestLayerProjection.file_contents)
3891 (TestLayerProjection.test): Add missing required projection
3892 parameters and tests for them
3893
3894 * test/test_layer.py (TestLayer.test_base_layer): Add missing
3895 required projection parameters
3896
3897 2003-08-29 Bernhard Herzog <[email protected]>
3898
3899 * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
3900 access the pj_errno because directly accessing pj_errno doesn't
3901 work on windows if the proj library is in a DLL
3902
3903 * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
3904
3905 2003-08-28 Bernhard Herzog <[email protected]>
3906
3907 * test/test_proj.py: Import things from Thuban after calling
3908 initthuban
3909
3910 * test/test_load.py (LoadSessionTest.filenames): New class
3911 variable with the filename attributes to normalize
3912 (LoadSessionTest.check_format): Pass self.filenames to
3913 sax_eventlist to normalize the filename attributes
3914
3915 * test/xmlsupport.py: Add cvs keywords
3916 (SaxEventLister.__init__): New parameter filenames which indicates
3917 attributes that contain filenames
3918 (SaxEventLister.startElementNS): Normalize the filename attributes
3919 with os.path.normpath
3920 (sax_eventlist): New parameter filenames to pass through to
3921 SaxEventLister
3922
3923 * test/test_derivedshapestore.py: Make this file callable as a
3924 program to execute the tests
3925 (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
3926 the session to self.session so that it gets destroyed properly
3927
3928 * test/test_layer.py (TestLayer.tearDown): Call the session's
3929 Destroy method
3930
3931 * test/test_map.py (TestMapBase.tearDown): Destroy self.session
3932 too if it exists
3933 (TestMapAddLayer.test_add_layer): Bind the session to self.session
3934 so that it gets destroyed properly
3935
3936 * test/postgissupport.py (reason_for_not_running_tests): Add a
3937 test for the existence of popen2.Popen4.
3938
3939 * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
3940 reliable way to destroy the sessions created in the test cases
3941 (SaveSessionTest.test_dbf_table): Bind the session to self.session
3942 so that it gets destroyed properly
3943 (SaveSessionTest.testLayerProjection): Bind the session to
3944 self.session so that it gets destroyed properly
3945
3946 * test/test_session.py (UnreferencedTablesTests.tearDown): Make
3947 sure that the session is destroyed properly
3948
3949 * test/test_shapefilestore.py: Make this callable as a program to
3950 execute the tests
3951
3952 * test/test_scalebar.py: Remove unnecessary import of _ from
3953 Thuban
3954
3955 * test/support.py (print_garbage_information): Call initthuban
3956 here because it may be called indirectly from test cases that test
3957 test support modules which do not use anything from thuban itself
3958 (ThubanTestProgram.runTests): Remove unnecessary debug print
3959
3960 2003-08-28 Bernhard Herzog <[email protected]>
3961
3962 * Thuban/version.py (longversion): Update to 0.9
3963
3964 * Thuban/UI/mainwindow.py: Remove some unused imports
3965
3966 * README: Add section about required additional software. Add date
3967 and revision CVS keywords
3968
3969 * HOWTO-Release: Add item about the translations. Add date and
3970 revision CVs keywords and change formatting to match README a bit
3971 better
3972
3973 * po/de.po: Update for 0.9
3974
3975 * test/README: Tweak the wording a little because many tests are
3976 not really unittest.
3977
3978 2003-08-27 Bernhard Herzog <[email protected]>
3979
3980 As preparation for the 0.9 release, switch thuban files to a
3981 non-dev namespace
3982
3983 * Thuban/Model/save.py (SessionSaver.write_session): Write files
3984 with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
3985 namespace
3986
3987 * Thuban/Model/load.py (SessionLoader.__init__): Accept the
3988 http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
3989
3990 * test/test_save.py (SaveSessionTest.dtd)
3991 (SaveSessionTest.testEmptySession)
3992 (SaveSessionTest.testSingleLayer)
3993 (SaveSessionTest.testLayerProjection)
3994 (SaveSessionTest.testRasterLayer)
3995 (SaveSessionTest.testClassifiedLayer)
3996 (SaveSessionTest.test_dbf_table)
3997 (SaveSessionTest.test_joined_table)
3998 (SaveSessionTest.test_save_postgis): Update for new namespace
3999
4000 * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
4001 (TestLayerVisibility.file_contents, TestLabels.file_contents)
4002 (TestLayerProjection.file_contents)
4003 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
4004 (TestPostGISLayer.file_contents)
4005 (TestPostGISLayerPassword.file_contents)
4006 (TestLoadError.file_contents, TestLoadError.test): Update for new
4007 namespace
4008
4009 2003-08-27 Bernhard Herzog <[email protected]>
4010
4011 Make the table interface distinguish between row ids (an integer
4012 that uniquely identifies a row) and row ordinals (a simple row
4013 count from 0 to NumRows() - 1)
4014
4015 * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
4016 (PostGISTable.RowOrdinalToId): New methods to conver between row
4017 ids and row ordinals
4018 (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
4019 parameter row_is_ordinal to indicate whether the row parameter is
4020 the row id or the ordinal
4021
4022 * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
4023 (TransientTableBase.RowOrdinalToId)
4024 (AutoTransientTable.RowIdToOrdinal)
4025 (AutoTransientTable.RowOrdinalToId): Same new methods as in
4026 PostGISTable.
4027 (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
4028 (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
4029 Same new parameter as in PostGISTable.
4030
4031 * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
4032 (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
4033 (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
4034 (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
4035 (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
4036 parameter as in PostGISTable.
4037
4038 * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
4039 (DataTable.RowOrdinalToId): New methods to convert between row ids
4040 and row ordinals.
4041 (TableGrid.SelectRowById): New method to select a row based on its
4042 ID as opposed to its ordinal
4043 (DataTable.GetValue, TableGrid.OnRangeSelect)
4044 (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
4045 (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
4046 (LayerTableFrame.__init__): Convert between row ids and row
4047 ordinals as appropriate
4048
4049 * test/postgissupport.py (PostGISDatabase.__init__): Add
4050 doc-string.
4051 (PostGISDatabase.initdb): The optional third item in a tuple in
4052 tables is now a (key, value) list with additional arguments to
4053 pass to upload_shapefile
4054 (upload_shapefile): New parameter gid_offset to allow gids that
4055 are not the same as the shapeids in the shapefile
4056 (PostgreSQLServer.get_default_static_data_db): Use the new
4057 gid_offset to make the gids in landmarks 1000 higher than the
4058 shapeids in the shapefile
4059
4060 * test/test_viewport.py
4061 (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
4062 new shapeids in the landmarks table
4063
4064 * test/test_transientdb.py
4065 (TestTransientTable.run_iceland_political_tests)
4066 (TestTransientTable.test_transient_joined_table): Add tests for
4067 the new table methods and new keywords arguments.
4068
4069 * test/test_postgis_db.py
4070 (TestPostGISTable.test_read_row_as_dict_row_count_mode)
4071 (TestPostGISTable.test_read_value_row_count_mode)
4072 (TestPostGISTable.test_row_id_to_ordinal)
4073 (TestPostGISTable.test_row_oridnal_to_id): New test for the new
4074 table methods and the new arguments
4075 (TestPostGISShapestorePoint.test_shapes_in_region)
4076 (TestPostGISShapestorePoint.test_shape_raw_data)
4077 (TestPostGISShapestorePoint.test_shape_points)
4078 (TestPostGISShapestorePoint.test_shape_shapeid)
4079 (TestPostGISShapestorePoint.test_all_shapes)
4080 (TestPostGISTable.test_simple_query)
4081 (TestPostGISTable.test_simple_query)
4082 (TestPostGISTable.test_simple_query)
4083 (TestPostGISTable.test_read_value)
4084 (TestPostGISTable.test_read_row_as_dict): Adapt to the new
4085 shapeids in the landmarks table
4086
4087 * test/test_memory_table.py
4088 (TestMemoryTable.test_read_row_as_dict_row_count_mode)
4089 (TestMemoryTable.test_read_value_row_count_mode)
4090 (TestMemoryTable.test_row_id_to_ordinal)
4091 (TestMemoryTable.test_row_oridnal_to_id): New test for the new
4092 table methods and the new arguments
4093
4094 * test/test_dbf_table.py
4095 (TestDBFTable.test_read_row_as_dict_row_count_mode)
4096 (TestDBFTable.test_read_value_row_count_mode)
4097 (TestDBFTable.test_row_id_to_ordinal)
4098 (TestDBFTable.test_row_oridnal_to_id): New test for the new table
4099 methods and the new arguments
4100
4101 2003-08-26 Bernhard Herzog <[email protected]>
4102
4103 * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
4104 more postgis specific but much faster method to get the bounding
4105 box
4106
4107 2003-08-26 Bernhard Herzog <[email protected]>
4108
4109 * Thuban/Model/postgisdb.py (PostGISTable.Title)
4110 (PostGISShapeStore.AllShapes): Add these missing methods.
4111 (PostGISShapeStore.ShapesInRegion): No need to raise
4112 StopIteration. We can simply return
4113
4114 * test/test_postgis_db.py (TestPostGISTable.test_title)
4115 (TestPostGISShapestorePoint.test_all_shapes): New tests for the
4116 new methods
4117
4118 2003-08-25 Bernhard Herzog <[email protected]>
4119
4120 * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
4121
4122 * test/test_postgis_db.py (PolygonTests): New class containing
4123 those tests from TestPostGISShapestorePolygon that can also be
4124 used to test MUTLIPOLYGON tables
4125 (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
4126 so derive from that
4127 (TestPostGISShapestoreMultiPolygon): New class with tests for
4128 MUTLIPOLYGON tables
4129
4130 * test/postgissupport.py (PostGISDatabase.initdb): Allow the
4131 tables argument to have tuples with three items to override the
4132 WKT type used.
4133 (PostgreSQLServer.get_default_static_data_db): Use the above to
4134 create a polygon table with MUTLIPOLYGONs
4135 (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
4136 (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
4137 coords_to*
4138 (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
4139 (wkt_converter): New. Map WKT types to converters
4140 (upload_shapefile): New parameter force_wkt_type to use a
4141 different WKT type than the default
4142
4143 2003-08-25 Bernhard Herzog <[email protected]>
4144
4145 * Thuban/UI/application.py
4146 (ThubanApplication.run_db_param_dialog): New. Suitable as a
4147 db_connection_callback. Main difference is that the dialog run
4148 from this method doesn't have a parent so it can be used even when
4149 there is no main window
4150 (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
4151 no db_connection_callback was given. This way the dialog pops up
4152 even when the .thuban file was given as a command line parameter.
4153
4154 2003-08-25 Bernhard Herzog <[email protected]>
4155
4156 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
4157 before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
4158 which leads to an effectively frozen X session because the user
4159 can only interact with the dialog but the mouse is still grabbed
4160 by the canvas.
4161 Also, call the tool's Hide method before MouseLeftUp because
4162 MouseLeftUp may change the tool's coordinates.
4163
4164 2003-08-25 Bernhard Herzog <[email protected]>
4165
4166 * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
4167 LoadCancelled exceptions and handle them by returning immediately.
4168
4169 2003-08-25 Bernhard Herzog <[email protected]>
4170
4171 GUI part of loading sessions with postgis connections which may
4172 require user interaction to get passwords or updated parameters
4173
4174 * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
4175 bit nucer and be more generic.
4176 (DBFrame.OnAdd): Adapt to new DBDialog interface
4177
4178 * Thuban/UI/application.py (ThubanApplication.OpenSession): New
4179 optional parameter db_connection_callback which is passed to
4180 load_session.
4181
4182 * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
4183 Suitable as a db_connection_callback
4184 (MainWindow.OpenSession): Use self.run_db_param_dialog as the
4185 db_connection_callback of the application's OpenSession method
4186
4187
4188 2003-08-25 Bernhard Herzog <[email protected]>
4189
4190 Basic loading of sessions containing postgis connections:
4191
4192 * Thuban/Model/load.py (LoadError): Add doc-string
4193 (LoadCancelled): New exception class to indicate a cancelled load
4194 (SessionLoader.__init__): Add the db_connection_callback parameter
4195 which will be used by the loader to get updated parameters and a
4196 password for a database connection
4197 (SessionLoader.__init__): Add the new XML elements to the
4198 dispatchers dictionary
4199 (SessionLoader.check_attrs): Two new conversions, ascii to convert
4200 to a byte-string object and idref as a generic id reference
4201 (SessionLoader.start_dbconnection)
4202 (SessionLoader.start_dbshapesource): New. Handlers for the new XML
4203 elements
4204 (load_session): Add the db_connection_callback to pass through the
4205 SessionLoader
4206
4207 * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
4208 New classes to test loading of sessions with postgis database
4209 connections.
4210
4211 2003-08-25 Bernhard Herzog <[email protected]>
4212
4213 * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
4214 replace it and the comment with __BuildDate__ by the Source: and
4215 Id: cvs keywords as used in the other files.
4216
4217 2003-08-25 Bernhard Herzog <[email protected]>
4218
4219 * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
4220 LoadError when a required attribute is missing. The code used to
4221 be commented out for some reason, but probably should have been
4222 active.
4223
4224 * test/test_load.py (TestLoadError.test): Test the message in the
4225 LoadError too to make sure it really is about the missing
4226 attribute
4227
4228 2003-08-22 Bernhard Herzog <[email protected]>
4229
4230 * test/test_save.py (SaveSessionTest.test_dbf_table)
4231 (SaveSessionTest.test_joined_table): Add XML validation tests.
4232
4233 2003-08-22 Bernhard Herzog <[email protected]>
4234
4235 Implement saving a session with a postgis connection
4236
4237 * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
4238 elements for database connections and shapestores using db
4239 connections
4240 (session): Add the dbconnections to the content model
4241
4242 * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
4243 Write the db connections
4244 (SessionSaver.write_session): Call write_db_connections to write
4245 the connection before the data sources
4246 (SessionSaver.write_data_containers): Handle postgis shapestores
4247
4248 * test/test_save.py (SaveSessionTest.thubanids)
4249 (SaveSessionTest.thubanidrefs): Update for new DTD
4250 (SaveSessionTest.test_save_postgis): New. Test saving a session
4251 with postgis connections
4252
4253 * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
4254 (PostGISTable.TableName): New accessor methods for the connection
4255 and table name
4256
4257 * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
4258 (TestPostGISTable.test_dbname): New methods to test the new
4259 PostGISConnection methods
4260
4261 2003-08-22 Bernhard Herzog <[email protected]>
4262
4263 * Thuban/Model/postgisdb.py (ConnectionError): New exception class
4264 for exceptions occurring when establishing a Database connection
4265 (PostGISConnection.connect): Catch psycopg.OperationalError during
4266 connects and raise ConnectionError.
4267
4268 * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
4269 tests for database exceptions
4270
4271 2003-08-22 Bernhard Herzog <[email protected]>
4272
4273 Prepare the test suite for tests with required authentication
4274
4275 * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
4276 variables with two predefined users/passwords, one for the admin
4277 and one for a non-privileged user.
4278 (PostgreSQLServer.createdb): Pass the admin name to initdb and add
4279 the non-privileged user to the database and set the admin password
4280 (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
4281 Better error reporting
4282 (PostgreSQLServer.connection_params)
4283 (PostgreSQLServer.connection_string): New methods to return
4284 information about how to connect to the server
4285 (PostgreSQLServer.execute_sql): New. Convenience method to execute
4286 SQL statements
4287 (PostgreSQLServer.require_authentication): Toggle whether the
4288 server requires authentication
4289 (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
4290 Add or alter users
4291 (PostGISDatabase.initdb): Pass the admin name one the
4292 subprocesses' command lines. Grant select rights on
4293 geometry_columns to everybody.
4294 (upload_shapefile): Use the admin name and password when
4295 connecting. Grant select rights on the new table to everybody.
4296
4297 * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
4298 server's new methods to get the connection parameters.
4299
4300 * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
4301 (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
4302 server's new methods to get the connection parameters.
4303
4304 * test/test_postgis_db.py
4305 (TestPostGISConnection.test_gis_tables_empty)
4306 (TestPostGISConnection.test_gis_tables_non_empty)
4307 (PostGISStaticTests.setUp): Use the server's new methods to get
4308 the connection parameters.
4309
4310 2003-08-22 Bernhard Herzog <[email protected]>
4311
4312 * Thuban/UI/about.py (About.__init__): Add the psycopg version.
4313
4314 * Thuban/version.py: Add psycopg version
4315
4316 * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
4317 version of the psycopg module
4318
4319 2003-08-22 Bernhard Herzog <[email protected]>
4320
4321 * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
4322 (DBFrame.OnEdit): Removed because it's not used and wouldn't work
4323 at the moment. The functionality should probably be implemented
4324 some time, though.
4325 (DBFrame.OnRemove): Display a message if the connection can't be
4326 removed because it's still in use.
4327
4328 2003-08-22 Jan-Oliver Wagner <[email protected]>
4329
4330 * Thuban/UI/about.py (About.__init__): split up the huge about
4331 text into elements/lists for easier translation. This fixes bug
4332 https://intevation.de/rt/webrt?serial_num=2058
4333 Also, made some forgotten string available for the i18n.
4334
4335 2003-08-21 Bernhard Herzog <[email protected]>
4336
4337 Make postgis support really optional including insensitive menu
4338 items.
4339
4340 * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
4341 whether the postgis is supported.
4342
4343 * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
4344 to make postgis support optional
4345
4346 * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
4347 version of Thuban.Model.postgisdb.has_postgis_support
4348 (database_management command): Make it only sensitive if postgis
4349 is supported.
4350
4351 2003-08-21 Jan-Oliver Wagner <[email protected]>
4352
4353 * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
4354 (section Adding and Removing Layers): Added text and described
4355 multi-selection.
4356 (chapter Extensions): New.
4357
4358 2003-08-21 Jan-Oliver Wagner <[email protected]>
4359
4360 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
4361 settings to allow multiple files to load into the map.
4362 Also reduced selection to *.shp as a default.
4363
4364 2003-08-20 Bernhard Herzog <[email protected]>
4365
4366 Add dialogs and commands to open database connections and add
4367 database layers.
4368
4369 * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
4370 method to open the database connection management dialog
4371 (MainWindow.AddDBLayer): New method to add a layer from a database
4372 (_has_dbconnections): New helper function to use for sensitivity
4373 (database_management command, layer_add_db command): New commands
4374 that call the above new methods.
4375 (main_menu): Add the new commands to the menu.
4376
4377 * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
4378 (PostGISConnection.connect): Establish the actual connection in a
4379 separate method and call it in __init__. This makes it easier to
4380 override the behavior in test cases
4381 (PostGISConnection.BriefDescription): New method to return a brief
4382 description for use in dialogs.
4383
4384 * test/test_postgis_db.py (NonConnection): DB connection that
4385 doesn't actually connect
4386 (TestBriefDescription): New class with tests for the new
4387 BriefDescription method
4388
4389 2003-08-19 Jan-Oliver Wagner <[email protected]>
4390
4391 Moved anything from extensions to libraries.
4392
4393 * libraries: New.
4394
4395 * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
4396
4397 * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
4398 Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
4399 been moved here from thuban/extensions/pyprojection/
4400 See there in the Attic for the older history.
4401
4402 * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
4403 dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
4404 shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
4405 have been moved here from thuban/extensions/pyshapelib/
4406 See there in the Attic for the older history.
4407
4408 * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
4409 files have been moved here from thuban/extensions/shapelib/
4410 See there in the Attic for the older history.
4411
4412 * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
4413 gdalwarp.cpp, wxproj.cpp: These files have been moved here from
4414 thuban/extensions/thuban/
4415 See there in the Attic for the older history.
4416
4417 * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
4418
4419 * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
4420 gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
4421
4422 * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
4423 Moved to libraries/shapelib.
4424
4425 * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
4426 shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
4427 ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
4428 Moved to libraries/pyshapelib.
4429
4430 * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
4431 LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
4432 Moved to libraries/pyprojection.
4433
4434 * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
4435
4436 * extensions: Removed.
4437
4438 2003-08-19 Bernhard Herzog <[email protected]>
4439
4440 * test/test_viewport.py (ViewPortTest): We don't use the
4441 facilities of FileTestMixin so don't derive from it.
4442 (TestViewportWithPostGIS): New class with tests for using a
4443 viewport on a map with postgis layers.
4444
4445 2003-08-19 Bernhard Herzog <[email protected]>
4446
4447 Add the db connection management to the session.
4448
4449 * Thuban/Model/session.py (Session.__init__): New instance
4450 variable db_connections
4451 (Session.AddDBConnection, Session.DBConnections)
4452 (Session.HasDBConnections, Session.CanRemoveDBConnection)
4453 (Session.RemoveDBConnection): New methods to manage and query the
4454 db connections managed by the session
4455 (Session.OpenDBShapeStore): New method to open a shapestore from a
4456 db connection
4457
4458 * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
4459 messages for the db connection handling in the session
4460
4461 * test/test_postgis_session.py: New. test cases for the session's
4462 db connection handling with postgis connections
4463
4464 2003-08-19 Bernhard Herzog <[email protected]>
4465
4466 Add very basic postgis database support and the corresponding test
4467 cases. The test cases require a PostgreSQL + postgis installation
4468 but no existing database. The database will be created
4469 automatically by the test cases
4470
4471 * test/README: Add note about skipped tests and the requirements
4472 of the postgis tests.
4473
4474 * Thuban/Model/postgisdb.py: New. Basic postgis database support.
4475
4476 * test/test_postgis_db.py: New. Test cases for the postgis
4477 support.
4478
4479 * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
4480 format
4481
4482 * test/test_wellknowntext.py: New. Test cases for the
4483 wellknowntext parser
4484
4485 * test/postgissupport.py: New. Support module for tests involving
4486 a postgis database.
4487
4488 * test/support.py (execute_as_testsuite): Shut down the postmaster
4489 if it's still running after the tests
4490
4491 * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
4492 well known text format
4493
4494 2003-08-19 Jan-Oliver Wagner <[email protected]>
4495
4496 * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
4497 message dialog.
4498
4499 2003-08-18 Bernhard Herzog <[email protected]>
4500
4501 * test/support.py (ThubanTestResult.printErrors): Indent the
4502 reason for the skips in the output to make it a bit more readable.
4503 (execute_as_testsuite): New helper function to run a test suite
4504 and print some more information.
4505 (run_tests): Use execute_as_testsuite to run the tests
4506
4507 * test/runtests.py (main): Use execute_as_testsuite to run the
4508 tests
4509
4510 2003-08-18 Bernhard Herzog <[email protected]>
4511
4512 Fix some bugs in Thuban and the test suite that were uncovered by
4513 changes introduced in Python 2.3:
4514
4515 * Thuban/Model/table.py (DBFTable.__init__): Make sure the
4516 filename is an absolute name
4517
4518 * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
4519 filename is an absolute name
4520
4521 * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
4522 unique filename to save to and use the correct relative filename
4523 in the expected output.
4524 (SaveSessionTest.test_dbf_table): Use the correct relative
4525 filename in the expected output.
4526
4527 * test/test_layer.py (TestLayer.test_raster_layer): Update the
4528 test to check whether the filename is absolute.
4529
4530 2003-08-18 Jan-Oliver Wagner <[email protected]>
4531
4532 * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
4533
4534 2003-08-15 Bernhard Herzog <[email protected]>
4535
4536 Change the way shapes are returned by a shape store. The
4537 ShapesInRegion method returns an iterator over actual shape
4538 objects instead of a list of shape ids.
4539
4540 * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
4541 id.
4542 (ShapefileStore.ShapesInRegion): Return an iterator over the
4543 shapes which yields shape objects instead of returning a list of
4544 shape ids
4545 (ShapefileStore.AllShapes): New. Return an iterator over all
4546 shapes in the shape store
4547 (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
4548
4549 * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
4550 doc-string.
4551
4552 * Thuban/UI/baserenderer.py
4553 (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
4554 layer_shapes and make it return an iterator containg shapes
4555 instead of a list of ids.
4556 (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
4557 layer_shapes() change
4558
4559 * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
4560 (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
4561
4562 * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
4563 changes in the ShapesInRegion return value.
4564 (ViewPort._get_hit_tester): Remove commented out code
4565
4566 * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
4567 new return value.
4568 (SimpleShapeStore.AllShapes): New. Implement this method too.
4569
4570 * test/test_layer.py (TestLayer.test_arc_layer)
4571 (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
4572 (TestLayer.test_point_layer_with_projection)
4573 (TestLayer.test_derived_store): Adapt to changes in the
4574 ShapesInRegion return value.
4575
4576 * test/test_shapefilestore.py
4577 (TestShapefileStoreArc.test_shapes_in_region)
4578 (TestShapefileStorePolygon.test_shapes_in_region)
4579 (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
4580 in the ShapesInRegion return value.
4581 (TestShapefileStorePoint.test_all_shapes)
4582 (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
4583 methods
4584
4585 * test/test_derivedshapestore.py
4586 (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
4587 the ShapesInRegion return value.
4588 (TestDerivedShapeStore.test_all_shapes)
4589 (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
4590 methods
4591
4592 2003-08-15 Bernhard Herzog <[email protected]>
4593
4594 Make the renderers deal correctly with raw vs. python level
4595 representation of shape geometries
4596
4597 * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
4598 Return a flag useraw in addition to the callable and the parameter
4599 to indicate whether the callable can deal with the raw shape data
4600 or uses the higher level python lists of coordinates. The callable
4601 now should accept either the raw data or the return value of the
4602 shape's Points() method.
4603 (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
4604 change
4605 (BaseRenderer.projected_points): Instead of the shape id use the
4606 points list as parameter.
4607 (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
4608 (BaseRenderer.draw_point_shape): Adapt to projected_points()
4609 change and accept the points list as parameter instead of the
4610 shape id.
4611
4612 * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
4613 the useraw flag as required by the BaseRenderer
4614 (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
4615 changes.
4616
4617 * test/test_baserenderer.py
4618 (TestBaseRenderer.test_point_with_classification): New test for
4619 rendering a map with classifications.
4620
4621 2003-08-15 Bernhard Herzog <[email protected]>
4622
4623 * Thuban/UI/viewport.py (ViewPort.find_shape_at)
4624 (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
4625 (ViewPort._get_hit_tester, ViewPort.projected_points)
4626 (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
4627 (ViewPort._find_label_at): Split the find_shape_at method into
4628 several new methods and use the functions in the hit-test module.
4629
4630 * Thuban/UI/hittest.py: New module with Python-level hit-testing
4631 functions
4632
4633 * test/test_hittest.py: New. Test for the new hittest module
4634
4635 2003-08-15 Bernhard Herzog <[email protected]>
4636
4637 * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
4638 projection to all corners of the bounding box to get a better
4639 approximation of the projected bounding box
4640
4641 * test/test_layer.py (TestLayer.test_point_layer_with_projection):
4642 New. Test coordinate handling of a layer with a projection.
4643 Catches the bug fixed in Layer.ShapesInRegion
4644
4645 2003-08-15 Bernhard Herzog <[email protected]>
4646
4647 Move some of the mock objects in test_baserenderer into their own
4648 module so they can easily be used from other tests
4649
4650 * test/mockgeo.py: New test helper module with some mock objects
4651 for geometry related things like shapes, shapestores and
4652 projections.
4653
4654 * test/test_mockgeo.py: New. Tests for the new helper module
4655
4656 * test/test_baserenderer.py: Some of the mock-objects are in
4657 mockgeo now.
4658
4659 2003-08-12 Jan-Oliver Wagner <[email protected]>
4660
4661 * Thuban/UI/about.py (About.__init__): Added Björn Broscheit.
4662
4663 2003-08-12 Bernhard Herzog <[email protected]>
4664
4665 * po/de.po: New. German translations by Bjoern Broscheit
4666
4667 2003-08-12 Bernhard Herzog <[email protected]>
4668
4669 * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
4670 strings have to be one string literal.
4671
4672 2003-08-11 Bernhard Herzog <[email protected]>
4673
4674 * test/support.py (FloatComparisonMixin.assertPointListEquals):
4675 New. This method was used in various derived classes, but it's
4676 better to have it here.
4677
4678 * test/test_shapefilestore.py
4679 (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
4680 FloatComparisonMixin
4681
4682 * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
4683 It's now in FloatComparisonMixin
4684
4685 * test/test_derivedshapestore.py
4686 (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
4687 in FloatComparisonMixin
4688
4689 2003-08-11 Bernhard Herzog <[email protected]>
4690
4691 * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
4692 error message
4693
4694 2003-08-08 Jan-Oliver Wagner <[email protected]>
4695
4696 * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
4697 with version number.
4698 Changed title to reflect version number of Thuban.
4699
4700 2003-08-08 Jan-Oliver Wagner <[email protected]>
4701
4702 * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
4703 the list corresponds to the "About" web page.
4704
4705 2003-08-08 Bernhard Herzog <[email protected]>
4706
4707 * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
4708 Make sure translated strings are recognized as one string literal.
4709
4710 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
4711 Make sure translated strings are recognized as one string literal.
4712
4713 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
4714 translated strings are recognized as one string literal.
4715
4716 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
4717 sure translated strings are recognized as one string literal.
4718
4719 2003-08-07 Bernhard Herzog <[email protected]>
4720
4721 * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
4722 Simply delegates to the original shapestore.
4723
4724 * test/test_derivedshapestore.py
4725 (TestDerivedShapeStore.test_raw_format): New. Test case for
4726 DerivedShapeStore.RawShapeFormat
4727
4728 2003-08-07 Bernhard Herzog <[email protected]>
4729
4730 Add raw data interface to shape objects.
4731
4732 * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
4733 class to ShapefileShape which now holds shapefile specific
4734 information.
4735 (ShapefileShape.compute_bbox): Simplified to not cache any
4736 information. The way this method is used that shouldn't matter
4737 performance wise.
4738 (ShapefileShape.RawData): New. Return the shapeid which is the raw
4739 data format for shapes from shapefiles.
4740 (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
4741 in the shape objects returned by a shapestore. For a
4742 ShapefileStore this is always RAW_SHAPEFILE.
4743 (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
4744 method.
4745
4746 * test/test_shapefilestore.py
4747 (TestShapefileStore.test_raw_format): New test to test the raw
4748 format feature of shapes.
4749
4750 * Thuban/Model/layer.py: Remove the unused import of Shape from
4751 data. It was only there for interface compatibility but it's not
4752 used inside of Thuban and the generic Shape class has gone away.
4753
4754 * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
4755 the raw data format and only use an optimized version of its a
4756 shapefile.
4757
4758 2003-08-07 Bernhard Herzog <[email protected]>
4759
4760 * test/test_baserenderer.py (SimpleShape): Shape class for the
4761 tests.
4762 (SimpleShapeStore.Shape): Use SimpleShape instead of
4763 Thuban.Model.data.Shape to make the tests independed of the coming
4764 changes.
4765
4766 2003-08-07 Bernhard Herzog <[email protected]>
4767
4768 * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
4769 (ThubanTestProgram): New classes that extend the respective
4770 classes from unittest. These new version support skipping tests
4771 under certain expected conditions. In the Thuban test suite we
4772 uses this for tests that require the optional gdal support.
4773 (run_tests): Use ThubanTestProgram instead of the unittest.main()
4774
4775 * test/runtests.py (main): Use the new ThubanTestRunner instead of
4776 the normal one from unittest
4777
4778 * test/test_layer.py (TestLayer.test_raster_layer): If this test
4779 is not run because gdal support isn't available report this to the
4780 runner.
4781
4782 * test/test_baserenderer.py
4783 (TestBaseRenderer.test_raster_no_projection): Do not run this test
4784 if gdal support isn't available and report this to the runner.
4785
4786 2003-08-06 Bernhard Herzog <[email protected]>
4787
4788 Rearrange the renderers a bit, partly in preparation for changes
4789 required for the postgis merge, partly to make it more testable.
4790 Also make the representation of coordinates in Shapes more
4791 consistent.
4792
4793 * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
4794 this class is now in BaseRenderer. This class is now practically
4795 only a specialization of BaseRenderer for rendering to an actual
4796 wx DC.
4797 (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
4798 to get the shapetype specific rendering functions.
4799
4800 * Thuban/UI/baserenderer.py: New file with the basic rendering
4801 logic. The code in this file is completely independend of wx.
4802 (BaseRenderer): Class with the basic rendering logic
4803
4804 * test/test_baserenderer.py: New. Test cases for BaseRenderer
4805
4806 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
4807 error_on_redraw to guard agains endless loops and stack overflows
4808 when there's a bug in the rendering code that raises exceptions.
4809 (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
4810 rendering into a separate method _do_redraw so that error handling
4811 is a bit easier. When an exception occurs, set error_on_redraw to
4812 true. When it's true on entry to OnIdle do nothing and return
4813 immediately.
4814
4815 * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
4816 Shape object will always have the coordinates as a list of list of
4817 coordinate pairs (tuples).
4818 (Shape.compute_bbox): Adapt to new representation.
4819
4820 * Thuban/UI/viewport.py (ViewPort.find_shape_at)
4821 (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
4822 Shape objects.
4823
4824 * test/test_shapefilestore.py
4825 (ShapefileStoreTests.assertFloatTuplesEqual)
4826 (ShapefileStoreTests.assertPointListEquals): Rename to
4827 assertPointListEquals and change purpose to checking equality of
4828 the lists returned by Shape.Points().
4829 (TestShapefileStoreArc.test_shape)
4830 (TestShapefileStorePolygon.test_shape)
4831 (TestShapefileStorePoint.test_shape): Use the new
4832 assertPointListEquals instead of assertFloatTuplesEqual
4833
4834 * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
4835 (TestLayer.assertPointListEquals): Rename to assertPointListEquals
4836 and change purpose to checking equality of the lists returned by
4837 Shape.Points().
4838 (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
4839 (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
4840 (TestLayer.test_derived_store): Use the new assertPointListEquals
4841 instead of assertFloatTuplesEqual
4842
4843 * test/test_derivedshapestore.py
4844 (TestDerivedShapeStore.assertFloatTuplesEqual)
4845 (TestDerivedShapeStore.assertPointListEquals): Rename to
4846 assertPointListEquals and change purpose to checking equality of
4847 the lists returned by Shape.Points().
4848 (TestDerivedShapeStore.test_shape): Use the new
4849 assertPointListEquals instead of assertFloatTuplesEqual
4850
4851 2003-08-06 Jan-Oliver Wagner <[email protected]>
4852
4853 * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
4854 a bounding box. A dialog is raised in case, no bounding box
4855 is found. This fixes bug #2043:
4856 https://intevation.de/rt/webrt?serial_num=2043
4857
4858 2003-08-05 Bernhard Herzog <[email protected]>
4859
4860 * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
4861 object look like a Color instantiation. Formerly it looked like a
4862 tuple.
4863
4864 * test/test_color.py (TestColor.test_repr)
4865 (TestColor.test_equality, TestColor.test_inequality): New. test
4866 some more apects of the Color class
4867 (TestTransparent.test_repr, TestTransparent.test_hex)
4868 (TestTransparent.test_equality): New. Test cases for the
4869 Transparent object.
4870
4871 2003-08-04 Jan-Oliver Wagner <[email protected]>
4872
4873 * Doc/manual/thuban-manual.xml: a number of small improvements.
4874 The resulting file is the version submitted for GREAT-ER II.
4875
4876 2003-08-01 Bernhard Herzog <[email protected]>
4877
4878 * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
4879 Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
4880 Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
4881
4882 * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
4883 (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
4884 (ThubanEndBusyCursor): Add doc-strings
4885
4886 2003-08-01 Bernhard Herzog <[email protected]>
4887
4888 First step towards PostGIS integration. More abstraction by movin
4889 more code from the layer to the shapestore. More methods of the
4890 layer are now simply delegated to the equivalent method of the
4891 shapestore. The SHAPETYPE_* constants are now in data not in
4892 layer.
4893
4894 * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
4895 (SHAPETYPE_POINT, Shape): Move these constants and classes from
4896 layer.py to data.py
4897 (ShapefileStore.__init__): More Initialization for the new methods
4898 and functionality.
4899 (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
4900 (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
4901 (ShapefileStore.Shape): New methods that were formerly implemented
4902 in the layer.
4903 (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
4904 (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
4905 (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
4906 equivalents of the new shape methods. These versions are simply
4907 delegated to the original shapstore.
4908
4909 * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
4910 (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
4911 (Layer.SetShapeStore): Removed the initializatin of instance
4912 variables that were needed for the stuff that's now in
4913 ShapefileStore
4914 (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
4915 (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
4916 shapestore.
4917
4918 * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
4919 Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
4920 instead of layer.
4921
4922 * test/test_shapefilestore.py: New. Tests for ShapefileStore.
4923
4924 * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
4925
4926 * test/test_layer.py: Import the SHAPETYPE_* constants from data
4927 instead of layer.
4928 (TestLayer.test_derived_store): Remove the test for the exception
4929 when instantiating the DerivedShapeStore with an incompatible
4930 table which is now in test_derivedshapestore.py. Add some more
4931 tests of the layer methods to determine whether they work for a
4932 DerivedShapeStore as well.
4933
4934 2003-07-31 Jonathan Coles <[email protected]>
4935
4936 * Doc/manual/thuban-manual.xml: Fix the list of required packages
4937 by just listing the name and where they can be found.
4938
4939 2003-07-31 Frank Koormann <[email protected]>
4940
4941 * Doc/manual/thuban-manual.xml:
4942 Changed the screenshot elements to figure.
4943 Changed some variablelist elements to itemizedlist.
4944 Added section on GDAL formats.
4945
4946 2003-07-31 Jonathan Coles <[email protected]>
4947
4948 * Doc/manual/thuban-manual.xml: Added a few sentences about
4949 the Fix Border Color option when generating classes.
4950
4951 2003-07-30 Jonathan Coles <[email protected]>
4952
4953 * Thuban/Model/classgen.py: Add docstrings. Rename specific
4954 Ramp instances to use lower_case_style.
4955
4956 * Thuban/UI/classgen.py: Use renamed Ramp instances.
4957
4958 * Thuban/UI/classifier.py: Add docstrings.
4959
4960 * Thuban/UI/dock.py: Add docstrings.
4961
4962 * test/test_classgen.py: Use renamed Ramp instances.
4963
4964 2003-07-30 Bernhard Herzog <[email protected]>
4965
4966 * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
4967 was never used in Thuban.
4968
4969 2003-07-30 Bernhard Herzog <[email protected]>
4970
4971 * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
4972 method directly instead of going through the transient_table
4973 method. This faster because transient_table may force the copy of
4974 a DBF file into the transient database and setting a table's title
4975 doesnm't affect the title of the associated transient table, so
4976 this fixes RT #2042
4977
4978 * Thuban/UI/main.py (__version__): Don't import the already
4979 removed show_exception_dialog.
4980
4981 2003-07-29 Jonathan Coles <[email protected]>
4982
4983 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
4984 Put back this method and remove the equivalent function since we
4985 are setting the exception hook from within this class (OnInit).
4986
4987 2003-07-29 Jonathan Coles <[email protected]>
4988
4989 * Doc/manual/images/5_2_custom_ramp.png,
4990 Doc/manual/images/5_2_quantiles.png,
4991 Doc/manual/images/5_2_uniform_dist.png,
4992 Doc/manual/images/5_2_unique_values.png,
4993 Doc/manual/images/8_int_error.png: New screen shots.
4994
4995 * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
4996 some points, and added more screen shots.
4997
4998 2003-07-29 Bernhard Herzog <[email protected]>
4999
5000 * Thuban/Model/data.py: Remove the now unused import of warnings
5001
5002 2003-07-29 Bernhard Herzog <[email protected]>
5003
5004 * Thuban/Model/data.py (SimpleStore): Removed. This class has been
5005 deprecated since before the 0.8 release and isn't used in Thuban
5006 itself anymore.
5007
5008 * Thuban/Model/transientdb.py: Remove some unnecessary imports
5009
5010 2003-07-29 Jonathan Coles <[email protected]>
5011
5012 * Thuban/UI/application.py (ThubanApplication.OnInit): set the
5013 python exception hook here so that we are sure to catch any
5014 Thuban exception that happen during initialization.
5015
5016 * Thuban/UI/main.py (main): Don't set the exception hook here,
5017 it will get set in ThubanApplication.OnInit.
5018
5019 2003-07-29 Jonathan Coles <[email protected]>
5020
5021 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
5022 Removed and called it show_exception_dialog() so that the exception
5023 handler can be set before the class is created.
5024
5025 * Thuban/UI/main.py (main): Install the exception handler before
5026 a ThubanApplication is created.
5027
5028 2003-07-29 Bernhard Herzog <[email protected]>
5029
5030 * po/it.po: New. Italian translation by Maurizio Napolitano
5031
5032 * po/ru.po: New. Russian translation by Alex Shevlakov
5033
5034 2003-07-29 Frank Koormann <[email protected]>
5035
5036 * Doc/manual/thuban-manual.xml: Extended section on supported
5037 projections.
5038
5039 2003-07-29 Frank Koormann <[email protected]>
5040
5041 * Doc/manual/thuban-manual.xml: gaspell-checked.
5042
5043 2003-07-29 Jonathan Coles <[email protected]>
5044
5045 * Doc/manual/images/3_5_legend.png: Added border to improve look
5046 on white background.
5047
5048 2003-07-29 Jonathan Coles <[email protected]>
5049
5050 * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
5051 descriptions for the legend toolbar.
5052
5053 * Doc/manual/images/4_2_raster_layer_properties.png: Removed
5054 cursor from dialog box.
5055
5056 2003-07-28 Jonathan Coles <[email protected]>
5057
5058 * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
5059
5060 * Doc/manual/images/2_4_session_tree.png,
5061 Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
5062 Doc/manual/images/4_2_layer_properties.png,
5063 Doc/manual/images/4_2_raster_layer_properties.png,
5064 Doc/manual/images/5_3_genclass.png,
5065 Doc/manual/images/5_classification.png,
5066 Doc/manual/images/6_projection.png,
5067 Doc/manual/images/7_1_table_view.png,
5068 Doc/manual/images/7_2_5_join.png: New screenshots.
5069
5070 2003-07-24 Jonathan Coles <[email protected]>
5071
5072 * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
5073
5074 2003-07-24 Jonathan Coles <[email protected]>
5075
5076 * Doc/manual/thuban-manual.xml: Added EPS images and wrote
5077 chapter on Layer Management.
5078
5079 * Doc/manual/Makefile: New. Makefile to generate all formats for the
5080 manual and images.
5081
5082 2003-07-24 Bernhard Herzog <[email protected]>
5083
5084 * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
5085 it annoys lintian which warns about these files not being
5086 executable. The #! isn't necessary here since if you absolutely
5087 must execute them you can always say "python <filename>".
5088
5089 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
5090 superfluous code to set brush and pen for point shapes
5091
5092 * Thuban/UI/viewport.py: Remove commented out code that wouldn't
5093 belong in viewport anyway
5094
5095 2003-07-24 Frank Koormann <[email protected]>
5096
5097 * Doc/manual/thuban-manual.xml: Added section on table management.
5098
5099 2003-07-24 Bernhard Herzog <[email protected]>
5100
5101 * test/runtests.py (main): Recognize the long "verbose" option
5102 correctly.
5103
5104 2003-07-22 Jonathan Coles <[email protected]>
5105
5106 * Doc/manual/thuban-manual.xml: Continue to write first revision
5107 of the manual.
5108
5109 * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
5110 with Begin/EndDrawing() calls to ensure we aren't doing to
5111 many updates to the dc during rendering.
5112 (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
5113 a pen and brush argument so they need to be passed to the function.
5114
5115 * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
5116 Calculates the minimum and maximum scale values. Factored out
5117 of set_view_transform so that it could be used to zoom all the
5118 way into a single point.
5119 (ViewPort.set_view_transform): Call calc_min_max_scales().
5120 (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
5121 if only a single point is selected.
5122
5123 * Doc/manual/images/1_2_legend_close.png,
5124 Doc/manual/images/1_2_legend_dock.png,
5125 Doc/manual/images/1_2_mainwindow.png,
5126 Doc/manual/images/1_2_mainwindow.ps,
5127 Doc/manual/images/1_2_mainwindow.sk,
5128 Doc/manual/images/3_2_fullextent.png,
5129 Doc/manual/images/3_2_fulllayerextent.png,
5130 Doc/manual/images/3_2_fullshapeextent.png,
5131 Doc/manual/images/3_2_pan.png,
5132 Doc/manual/images/3_2_zoomin.png,
5133 Doc/manual/images/3_2_zoomout.png,
5134 Doc/manual/images/3_3_identify.png,
5135 Doc/manual/images/3_3_label.png,
5136 Doc/manual/images/3_5_invisible.png,
5137 Doc/manual/images/3_5_movedown.png,
5138 Doc/manual/images/3_5_moveup.png,
5139 Doc/manual/images/3_5_props.png,
5140 Doc/manual/images/3_5_tobottom.png,
5141 Doc/manual/images/3_5_totop.png,
5142 Doc/manual/images/3_5_visible.png: New. Images for the documentation.
5143
5144 2003-07-18 Bernhard Herzog <[email protected]>
5145
5146 * Thuban/UI/messages.py (MAP_REPLACED): New message.
5147
5148 * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
5149 after the new map has been assigned
5150
5151 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
5152 Delegate MAP_REPLACED to the canvas too
5153 (MainWindow.prepare_new_session): Removed. Thanks to the new
5154 MAP_REPLACED message it's no longer needed
5155 (MainWindow.OpenSession, MainWindow.NewSession):
5156 prepare_new_session has been removed.
5157
5158 * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
5159 MAP_REPLACED so that we can close the dialog if a new map is set.
5160 (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
5161 (Classifier.map_replaced): Handle MAP_REPLACED by closing the
5162 dialog
5163
5164 * test/test_viewport.py (SimpleViewPortTest)
5165 (SimpleViewPortTest.test_default_size): Add doc-strings
5166 (ViewPortTest.setUp): Bind map to self.map so we can use it in
5167 tests. Subscribe to MAP_REPLACED messages too.
5168 (ViewPortTest.tearDown): No need to explicitly unsubscribe
5169 (ViewPortTest.test_set_map): New test for the SetMap method.
5170
5171 2003-07-18 Bernhard Herzog <[email protected]>
5172
5173 * test/test_viewport.py (SimpleViewPortTest.test_default_size):
5174 Move this test from ViewPortTest.setUp to this new separate test
5175 case. setUp is not the place for the actual tests.
5176 (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
5177 more of the test from setUp to the new test test_inital_settings.
5178 (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
5179 (ViewPortTest.test_proj_conv): Split test_proj_conv into
5180 test_win_to_proj and test_proj_to_win and make the tests easier to
5181 understand
5182 (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
5183 (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
5184 (ViewPortTest.test_unprojected_rect_around_point)
5185 (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
5186 Reformat to increase readability.
5187
5188 2003-07-18 Bernhard Herzog <[email protected]>
5189
5190 * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
5191
5192 2003-07-18 Bernhard Herzog <[email protected]>
5193
5194 * test/runtests.py: The test suite can now be run without an X
5195 connection. To make sure this remains true, remove the DISPLAY
5196 environment variable so that an error occurs if the wxGTK is
5197 imported accidentally
5198
5199 2003-07-18 Bernhard Herzog <[email protected]>
5200
5201 * Thuban/UI/viewport.py: Remove unused imports
5202
5203 * Thuban/UI/view.py: Remove unused imports
5204
5205 2003-07-18 Bernhard Herzog <[email protected]>
5206
5207 * test/test_export.py Remove unused imports. The OutputTransform
5208 function is now in viewport.py and is called output_transform
5209 (TestScalebar.test_output_transform)
5210 (TestScalebar.test_OutputTransform): Renamed to
5211 test_output_transform and updated to use output_transform instead
5212 of OutputTransform
5213
5214 * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
5215 renamed.
5216 (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
5217 renamed to output_transform
5218
5219 * Thuban/UI/viewport.py (OutputTransform, output_transform):
5220 Rename to output_transform
5221
5222 2003-07-18 Bernhard Herzog <[email protected]>
5223
5224 * Thuban/Model/layer.py (Layer.__init__): Rename
5225 classificationField to classificatin_column and init it here so
5226 that it can be used in SetClassificationColumn
5227 (Layer.GetClassificationColumn, Layer.GetClassificationField):
5228 Rename to GetClassificationColumn.
5229 (Layer.SetClassificationColumn, Layer.SetClassificationField):
5230 Rename to SetClassificationColumn and issue a LAYER_CHANGED
5231 message if the column changes.
5232 (Layer._classification_changed, Layer.ClassChanged): Rename to
5233 _classification_changed. Update the callers.
5234 (Layer.SetShapeStore): Further field->column renames.
5235
5236 * Thuban/Model/load.py (SessionLoader.start_classification)
5237 (SessionLoader.start_clpoint): Updates because of
5238 field->column method name changes in the Layer class
5239
5240 * Thuban/Model/save.py (SessionSaver.write_classification): Updates
5241 because of field->column method name changes in the Layer class
5242
5243 * Thuban/UI/classifier.py (Classifier.__init__)
5244 (Classifier._OnTry, Classifier._OnRevert): Updates because of
5245 field->column method name changes in the Layer class
5246
5247 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
5248 because of field->column method name changes in the Layer class
5249
5250 * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
5251 of field->column method name changes in the Layer class
5252
5253 * test/test_save.py (SaveSessionTest.testClassifiedLayer)
5254 (SaveSessionTest.testClassifiedLayer): Update because of
5255 field->column method name changes in the Layer class
5256
5257 * test/test_layer.py (SetShapeStoreTests.setUp)
5258 (SetShapeStoreTests.test_sanity): Update because of field->column
5259 method name changes in the Layer class
5260 (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
5261 (TestLayerModification.test_sanity)
5262 (TestLayerModification.test_initial_settings): remove unsued code
5263 and rename to test_sanity.
5264 (TestLayerModification.test_set_classification): New test for
5265 SetClassification and SetClassificationField.
5266
5267 2003-07-18 Bernhard Herzog <[email protected]>
5268
5269 * test/test_classgen.py (TestFixedRamp.test): Extend test to check
5270 the non-fixed values as well. The old test would have accepted a
5271 fixed ramp that only returnes the fixed properties
5272
5273 2003-07-17 Jonathan Coles <[email protected]>
5274
5275 * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
5276 shots for the manual. The XCF file is the source image and
5277 has additional layers to support changes.
5278
5279 * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
5280
5281 * Thuban/UI/classifier.py (Classifier.__BuildClassification):
5282 Return both the new class and the field name.
5283
5284 * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
5285 fit the map to the window as this changes any zoom level that
5286 the user may have set.
5287
5288 2003-07-16 Jonathan Coles <[email protected]>
5289
5290 * Thuban/Model/classgen.py (generate_singletons,
5291 generate_uniform_distribution, generate_quantiles): Remove
5292 fixes parameter, but maintain the same functionality by having
5293 the calling function pass a FixedRamp object for the ramp.
5294 (FixedRamp): New. Adapts a ramp to have fixed property values.
5295
5296 * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
5297 (Classification): Inherit from Publisher.
5298 (Classification.__init__): Remove the layer parameter.
5299 Classifications no longer need to have a parent layer.
5300 (Classification.GetField, Classification.GetFieldType,
5301 Classification.SetFieldInfo): Removed. The field name is stored
5302 in the layer, and the type can be retreived by calling
5303 Layer.GetFieldType().
5304 (Classification._set_layer, Classification.GetLayer): Removed.
5305 Classifications no longer have a parent layer.
5306
5307 * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
5308 classification.
5309 (Layer.SetShapeStore): Reset the classification first while
5310 we still have the old shape store to work with.
5311 (Layer.GetClassificationField, Layer.SetClassificationField):
5312 New. Method for getting/setting the field to classify on.
5313 (Layer.SetClassification): Simplified now that the layer
5314 simply has to hold a reference to the classification and not
5315 tell the classification who owns it.
5316 Fixes RTbug #2023.
5317
5318 * Thuban/Model/load.py (SessionLoader.start_classification):
5319 Set the field name on the layer, not the classification.
5320
5321 * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
5322 classification is modified.
5323
5324 * Thuban/Model/save.py (SessionSaver.write_classification):
5325 Get the field name and type from the layer.
5326
5327 * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
5328 parameter records to rows and add docstring. Fixes RTbug #1997.
5329
5330 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
5331 ramp when we need to fix certain values of a ramp rather than
5332 using the old fixes parameter. Fixes RTbug #2024.
5333
5334 * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
5335 parameter.
5336 (ClassTable.Reset): Add fieldType parameter and use it, rather
5337 than asking the classification.
5338 (Classifier.__init__): Remember the original class's field
5339 and ask the layer for the field type, rather than the classification.
5340 (Classifier.__SetGridTable): Retrieve the field and field type
5341 for the table because they are not in the classification.
5342 (Classifier._OnTry, Classifier._OnRevert): Set the classification
5343 field on the layer in addition to the classification itself.
5344
5345 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
5346 classification field from layer.
5347
5348 * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
5349 classification field from layer. Split up tests and remove
5350 *-imports. Fixes RTbug #1992.
5351
5352 * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
5353
5354 * test/test_classification.py
5355 (TestClassification.test_classification): Remove tests for methods
5356 that no longer exist.
5357
5358 * test/test_layer.py (SetShapeStoreTests.setUp): Classification
5359 __init__ no longer has a field parameter, use SetClassificationField.
5360 (SetShapeStoreTests.test_sanity): Use layer object to get class
5361 field info.
5362
5363 * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
5364 SetClassificationField on layer to set class field info.
5365
5366 * test/test_viewport.py: Renamed from test/test_view.py.
5367
5368 2003-07-16 Jan-Oliver Wagner <[email protected]>
5369
5370 * Doc/manual/thuban-manual.xml: Added authors and an initial
5371 coarse structure.
5372
5373 2003-07-15 Bernhard Herzog <[email protected]>
5374
5375 * test/support.py (FloatComparisonMixin): This is a mix-in class
5376 and therefore should not be derived from any other class.
5377
5378 * test/test_range.py (RangeTest): FloatComparisonMixin is a
5379 mix-in, so derive from TestCase as well.
5380
5381 2003-07-15 Bernhard Herzog <[email protected]>
5382
5383 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
5384 draw_func handling a bit to remove one layer of indirection. This
5385 makes the renderer about 10% faster in the non-classifying case
5386 and the code a bit cleaner
5387 (MapRenderer.draw_point_shape): Add the pen and brush parameters
5388 and set them in the dc. Now the draw_point_shape method and
5389 wxproj's draw_polygon_shape function have basically the same
5390 signature so that both can be directly used as draw_func
5391
5392 2003-07-15 Bernhard Herzog <[email protected]>
5393
5394 * Thuban/Model/save.py (SessionSaver.write_classification): Encode
5395 string values (in addition to the labels) as UTF 8
5396
5397 * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
5398 values if the field type is string
5399
5400 * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
5401 saving a session with non-ascii string classification values.
5402
5403 * test/test_load.py (TestClassification.file_contents)
5404 (TestClassification.test): Check for non-ascii values in string
5405 classifications
5406
5407 2003-07-14 Jonathan Coles <[email protected]>
5408
5409 * test/test_view.py: New. Tests for ViewPort.
5410
5411 2003-07-14 Frank Koormann <[email protected]>
5412
5413 * Thuban/Model/load.py (SessionLoader.start_map): Encode map
5414 title to latin1. Fixes https://intevation.de/rt/webrt?serial_num=2013
5415
5416 * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
5417 unicode strings from session file: session title, map title and
5418 projection name.
5419
5420 2003-07-10 Jonathan Coles <[email protected]>
5421
5422 * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
5423 drag_stop, not drag_move when the mouse is released.
5424
5425 2003-07-10 Jonathan Coles <[email protected]>
5426
5427 The most important part of this is the seperation of view.py into
5428 two pieces. viewport.py now has a class called ViewPort which
5429 contains all the non-wx parts of view.py and can therefore be
5430 tested. view.py contains only the wx-specific parts and is fairly
5431 simple.
5432
5433 * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
5434 RTTbug #1992.
5435 * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
5436 RTTbug #1992.
5437
5438 * Thuban/Model/classgen.py (generate_singletons,
5439 generate_uniform_distribution, generate_quantiles):
5440 Added 'fixes' parameter so that property attributes can
5441 be held constant over the generated classification groups.
5442 (CustomRamp.GetProperties): Remove unused variables.
5443
5444 * Thuban/Model/map.py (Map.SetProjection): Send the old
5445 projection as an argument to listeners of the MAP_PROJECTION_CHANGED
5446 event.
5447
5448 * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
5449 parameter which is a list of records that restricts which
5450 records are saved. Fixes RTbug #1997.
5451
5452 * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
5453 Port exception dialog from GREAT-ER. Fixes RTbug #1993.
5454
5455 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
5456 to allow the user to fix line color/width on generated groups.
5457 (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
5458 functions to optionally fix group properties.
5459
5460 * Thuban/UI/main.py (main): Set exception hook to the
5461 ShowExceptionDialog. Fixes RTbug #1993.
5462
5463 * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
5464 the table window when it is selectd to be shown.
5465
5466 * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
5467 Export Selection button and move the export buttons underneath
5468 the table.
5469 (QueryTableFrame.UpdateStatusText): Added event argument so
5470 that it can respond to grid selection events. The status text
5471 is now updated even when the table is not associated with a
5472 layer as was previously assumed.
5473 (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
5474 UpdateStatusText responds to these events.
5475 (QueryTableFrame.OnSaveAs): Renamed to doExport.
5476 (QueryTableFrame.doExport): Helper function that saves the
5477 entire table, or selected rows, to a file.
5478 (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
5479 Respond to export button events and call doExport.
5480
5481 * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
5482 the function doesn't return NULL without first setting a Python
5483 Error.
5484
5485 * test/runtests.py (main): Only print "Unknown option" for
5486 unsupported options.
5487
5488 * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
5489 optional epsilon argument to specify floating point accuracy.
5490 (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
5491 for each item test.
5492
5493 * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
5494 tests for saving selected records.
5495
5496 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
5497 tests for saving selected records.
5498
5499 * test/test_map.py (TestMapWithContents.test_set_projection):
5500 MAP_PROJECTION_CHANGED events send the old projection.
5501
5502 * test/test_session.py
5503 (TestSessionWithContent.test_forward_map_projection):
5504 MAP_PROJECTION_CHANGED events send the old projection.
5505
5506 * test/test_table.py (TableTest): Update tests to use non-deprecated
5507 functions.
5508
5509 2003-07-08 Bernhard Herzog <[email protected]>
5510
5511 * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
5512 constants in the column objects are the standard ones defined in
5513 the table module.
5514
5515 * test/test_transientdb.py
5516 (TestTransientTable.test_transienttable_to_dbf): New. Test whether
5517 exporting transient tables as DBF works. This should catch the bug
5518 just fixed in TransientTableBase.Width.
5519
5520 2003-07-08 Bernhard Herzog <[email protected]>
5521
5522 * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
5523 interpolated colors correctly.
5524
5525 * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
5526 New. Test case for the fix in classgen.py
5527
5528 2003-07-08 Bernhard Herzog <[email protected]>
5529
5530 * test/runtests.py (main): Make the default output less verbose
5531 and add a verbosity option (-v) to get the old output
5532
5533 2003-07-08 Bernhard Herzog <[email protected]>
5534
5535 * Resources/XML/thuban-0.9.dtd: New. This will become the DTD for
5536 0.9.
5537
5538 * Thuban/Model/transientdb.py (TransientJoinedTable.JoinType):
5539 New. Return the join type
5540
5541 * Thuban/Model/save.py (SessionSaver.write_session): Use new 0.9
5542 DTD
5543 (SessionSaver.write_data_containers): Save the join type for
5544 joined tables
5545
5546 * Thuban/Model/load.py (SessionLoader.__init__): Add the new 0.9
5547 namespace
5548 (SessionLoader.start_jointable): Handle the jointype attribute
5549
5550 * test/test_load_0_8.py: New. Effectively a copy of test_load.py
5551 as of Thuban 0.8. These are now tests to determine whether Thuban
5552 can still read files generated by Thuban 0.8
5553
5554 * test/test_load.py (LoadSessionTest.dtd)
5555 (TestSingleLayer.file_contents)
5556 (TestLayerVisibility.file_contents, TestLabels.file_contents)
5557 (TestLayerProjection.file_contents)
5558 (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
5559 (TestJoinedTable.file_contents)
5560 (TestLoadError.file_contents): Update for new DTD
5561 (TestJoinedTable.file_contents, TestJoinedTable.setUp): Add test
5562 for new join type attribute
5563
5564 * test/test_save.py (SaveSessionTest.dtd)
5565 (SaveSessionTest.testEmptySession)
5566 (SaveSessionTest.testSingleLayer)
5567 (SaveSessionTest.testLayerProjection)
5568 (SaveSessionTest.testRasterLayer)
5569 (SaveSessionTest.testClassifiedLayer)
5570 (SaveSessionTest.test_dbf_table)
5571 (SaveSessionTest.test_joined_table): Update for new DTD
5572 (SaveSessionTest.test_joined_table): Add test for new join type
5573 attribute
5574
5575 2003-07-04 Bernhard Herzog <[email protected]>
5576
5577 * Thuban/Model/table.py (_find_dbf_column_names): New. Helper
5578 function for table_to_dbf
5579 (table_to_dbf): Deal with names longer than the 10 character limit
5580
5581 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
5582 doc-string
5583 (TestTableToDBF.test_table_to_dbf_long_col_names): New test for
5584 long column names
5585
5586 2003-07-03 Bernhard Herzog <[email protected]>
5587
5588 * Doc/manual/thuban-manual.xml: Fix the CVS Revision Tag syntax
5589
5590 2003-07-03 Bernhard Herzog <[email protected]>
5591
5592 * Doc/manual/thuban-manual.xml, Doc/manual/README: New. Skeleton
5593 for the Thuban manual and README with some basic information about
5594 the manual
5595
5596 2003-07-03 Bernhard Herzog <[email protected]>
5597
5598 * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
5599 Update doc-string
5600 (TransientJoinedTable.create): Do not modify the column objects of
5601 the input tables in place and copy all columns of the input tables
5602 into the joined table after all.
5603
5604 * test/test_transientdb.py
5605 (TestTransientTable.test_transient_joined_table_same_column_name):
5606 Update to reflect the new behavior
5607 (TestTransientTable.test_transient_joined_table_with_equal_column_names):
5608 Update to reflect the new behavior
5609 (TestTransientTable.test_transient_joined_table_name_collisions_dont_modify_in_place):
5610 New test case for a bug which modified the column objects in place
5611
5612 2003-07-02 Jonathan Coles <[email protected]>
5613
5614 * Thuban/Model/classgen.py (generate_singletons,
5615 generate_uniform_distribution, generate_quantiles,
5616 GenQuantiles0): Make sure maxValue isn't less than
5617 one, otherwise we could divide by zero.
5618
5619 * test/test_classgen.py (ClassGenTest.doClassRangeTest,
5620 ClassGenTest.doClassSingleTest): Call doBoundsTest to
5621 check the end classification groups against the
5622 proper property values.
5623 (ClassGenTest.doBoundsTest): New. Checks the first and
5624 last classification groups to make sure their properties
5625 are the correct upper and lower bounds for a color ramp.
5626
5627 2003-07-02 Jonathan Coles <[email protected]>
5628
5629 * Thuban/Model/classgen.py (generate_singletons,
5630 generate_uniform_distribution, generate_quantiles,
5631 GenQuantiles0): The denominator was one to high when
5632 calculating the index for the ramp causing the index
5633 to never to reach one.
5634
5635 2003-07-02 Jonathan Coles <[email protected]>
5636
5637 Changed the singature of ClassGroupRange.__init__ and
5638 ClassGroupRange.SetRange() so that the min/max values are
5639 passed as a tuple. This makes a better calling scheme for
5640 when a Range object is passed instead.
5641
5642 * Thuban/Model/classgen.py: Fixed parameters to
5643 ClassGroupRange constructor.
5644
5645 * Thuban/Model/classification.py (ClassGroupRange.__init__):
5646 Consolidate the min/max parameters into a single _range which
5647 can either be a tuple or a Range object.
5648 (ClassGroupRange.SetRange): Consolidate the min/max parameters
5649 into a single _range which can either be a tuple or a Range object.
5650
5651 * Thuban/Model/load.py (SessionLoader.start_clrange): Fix
5652 call to ClassGroupRange constructor to use a tuple.
5653
5654 * Thuban/Model/layer.py (Layer.SetClassification): Switch
5655 the classification instance variable to the new class
5656 before calling _set_layer otherwise subscribers to a
5657 LAYER_CHANGED event will not see any difference.
5658
5659 * test/test_classification.py: Fix tests of ClassGroupRange
5660 so that they use the new signature.
5661
5662 * test/test_load.py: Fix use of ClassGroupRange so that it
5663 uses the new signature.
5664
5665 * test/test_load_0_2.py: Fix use of ClassGroupRange so that it
5666 uses the new signature.
5667
5668 * test/test_save.py: Fix use of ClassGroupRange so that it
5669 uses the new signature.
5670
5671
5672 2003-07-01 Jonathan Coles <[email protected]>
5673
5674 * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.
5675 Import used objects/class from color.
5676 (generate_singletons): We don't
5677 need the numGroups parameter anymore because we are using
5678 the new ramps with GetProperties().
5679 (generate_uniform_distribution): Use new ramp method
5680 GetProperties().
5681 (generate_quantiles, GenQuantiles0): Use new ramp method
5682 GetProperties().
5683 (CustomRamp.SetNumGroups): Removed. The ramps now map
5684 a value from 0 to 1 to class properties so the number
5685 of groups is not needed ahead of time.
5686 (CustomRamp.next): Removed. CustomRamp does not support
5687 interation anymore.
5688 (CustomRamp.GetProperties): Returns a ClassGroupProperties
5689 object based on the index value from 0 to 1 that is
5690 passed to it.
5691 (GreyRamp, RedRamp, GreenRamp, BlueRamp, GreenToRedRamp):
5692 Made into instances of Monochromatic class instread of
5693 deriving from it.
5694 (HotToCold.SetNumGroups): Removed. See CustomRamp.
5695 (HotToCold.next): Removed. See CustomRamp.
5696
5697 * Thuban/Model/classification.py: Fixes RTbug #1973, 1971.
5698 (Classification.SetField, Classification.SetFieldType):
5699 Replaced with SetFieldInfo.
5700 (Classification.SetFieldInfo): New. Does a better job of
5701 what SetField and SetFieldType used to do by combining
5702 their function since they should really always be done
5703 at the same time.
5704 (Classification.SetLayer): Renamed to _set_layer.
5705 (Classification._set_layer): Should only be called from
5706 Layer's SetClassification. This does not cause a recursive
5707 call as SetLayer did because we know that Layer knows about
5708 the classification.
5709
5710 * Thuban/Model/color.py: Fixes RTbug #1971.
5711 (_Transparent): Renamed from Transparent so it doesn't
5712 conflict with the module variable.
5713 (Transparent, Black): Renamed from Color.Transparent,
5714 Color.Black so they are not class variables.
5715
5716 * Thuban/Model/layer.py: Fixes RTbug #1971, 1973.
5717 (Layer.Destroy): We don't need to call SetClassification
5718 anymore to clear out the back reference in the classifcation
5719 to the layer. It's better to set it to None using _set_layer,
5720 and we won't be creating another clas object too.
5721 (Layer.SetClassification): Classification._set_layer is not
5722 recursive so remove all the locking variables. Also clean
5723 up the code so that it remains unchanged if something fails.
5724
5725 * Thuban/Model/load.py: Fixes RTbug #1971.
5726 (SessionLoader.start_classification): Call
5727 Classification.SetFieldInfo().
5728
5729 * Thuban/Model/save.py: Removed import of Color which wasn't
5730 being used.
5731
5732 * Thuban/UI/classgen.py: Fixes RTbug #1972.
5733 (ClassGenDialog.__init__): Color ramps are now instances
5734 already so we don't need to create any new objects.
5735 (ClassGenDialog.OnOK): Check for numGroups is no longer
5736 necessary because we never use it.
5737
5738 * Thuban/UI/classifier.py: Fixes RTbug #1971.
5739 (Classifier.__BuildClassification, Classifier.__SetGridTable):
5740 Call Classification.SetFieldInfo() instead of SetFieldType.
5741
5742 * Thuban/UI/renderer.py: Fixes RTbug #1971.
5743
5744 * Thuban/UI/view.py: Fixes RTbug #1974, 1971.
5745 (MapCanvas.__init__): Subscribe to the idle time event. Set
5746 background color to white.
5747 (MapCanvas.OnPaint): Set a flag indicating that we should
5748 render the map during idle time. If we already have a bitmap
5749 just draw it now.
5750 (MapCanvas.OnIdle): New. Render the map only during idle time.
5751 This also fixes a problem with the busy cursor under gtk.
5752
5753 * test/test_classgen.py (ClassGenTest.test_generate_singletons):
5754 Fix calls to generate_singletons because the signature changed.
5755
5756 * test/test_classification.py: Fix color references and
5757 change calls to Classification.[SetField|SetFieldType] to
5758 SetFieldInfo.
5759
5760 * test/test_load.py: Fix color references.
5761
5762 * test/test_load_0_2.py: Fix color references.
5763
5764 * test/test_save.py (SaveSessionTest.testClassifiedLayer):
5765 Change calls to Classification.[SetField|SetFieldType] to
5766 SetFieldInfo.
5767
5768 2003-07-01 Frank Koormann <[email protected]>
5769
5770 MERGE from the greater-ms3 branch.
5771
5772 * test/test_transientdb.py
5773 (TestTransientTable.test_transient_joined_table_with_equal_column_names):
5774 New. Test join of two tables with partly equal column names.
5775
5776 * Thuban/Model/transientdb.py (TransientJoinedTable.create):
5777 If duplicates in left and right tables column names are found,
5778 append '_' (underscores) to the name until it is unique.
5779 Create always new internal names for the resulting table and reference
5780 columns in the join statement with <table>.<column>
5781
5782 2003-07-01 Bernhard Herzog <[email protected]>
5783
5784 * test/test_transientdb.py
5785 (TestTransientTable.test_transient_joined_table_same_column_name):
5786 New. Test whether joining on columns with the same names in both
5787 tables works.
5788
5789 * Thuban/Model/transientdb.py (TransientJoinedTable.create): Make
5790 sure to use the right internal names even when joining on field
5791 with the same names in both tables. Also, detect duplicate names
5792 in the joined table correctly.
5793
5794 2003-07-01 Frank Koormann <[email protected]>
5795
5796 * Thuban/UI/renderer.py (ExportRenderer.render_legend):
5797 Reverse List of layers to render in same order as in desktop legend.
5798
5799 2003-06-30 Jonathan Coles <[email protected]>
5800
5801 * Thuban/version.py (make_tuple): Takes a version string
5802 and splits it into a tuple of at most three integers.
5803 Used make_tuple() to make tuple versions of the version
5804 numbers.
5805
5806 * Thuban/UI/about.py: Add Thuban email addresses.
5807
5808 2003-06-30 Jonathan Coles <[email protected]>
5809
5810 * Thuban/version.py: SQLite/PySQLite version dependencies
5811 were too high.
5812
5813 2003-06-30 Jonathan Coles <[email protected]>
5814
5815 * Thuban/version.py: Update version to 0.8.1
5816
5817 * MANIFEST.in: Added Projections so that default.proj is
5818 included.
5819
5820 2003-06-26 Jonathan Coles <[email protected]>
5821
5822 New About box with lots more information including library
5823 versions and credits. More/better version checking before
5824 Thuban starts.
5825
5826 * Thuban/UI/about.py: New. New About box that displays
5827 library version information and credits.
5828
5829 * Thuban/version.py: Added new 'versions' dictionary which
5830 contains the verions of various libraries which are checked
5831 when the module loads.
5832 (verify_versions): Check all version numbers and returns
5833 a list of errors.
5834
5835 * Thuban/UI/classifier.py (Classifier.__EnableButtons):
5836 Reset the status of the buttons as the situation warrants,
5837 but in a better more reliable way by not relying on the
5838 current status to determine what needs to change.
5839
5840 * Thuban/UI/main.py (wxCHECK_VERSION): Removed. Not needed.
5841 (verify_versions): Remove most of the code since it is
5842 now in Thuban.version.verify_versions.o
5843
5844 * Thuban/UI/mainwindow.py (MainWindow.About): Call new
5845 About box in Thuban.UI.about.
5846
5847 * extensions/thuban/gdalwarp.cpp (get_gdal_version): New.
5848 Returns the version of gdal library being used as a string.
5849
5850 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
5851 Removed.
5852 (get_proj_version): Return the version of PROJ that the file
5853 was compiled with.
5854 (get_gtk_version): Return th version of GTK that the file
5855 was compiled with.
5856
5857 2003-06-25 Jonathan Coles <[email protected]>
5858
5859 * Thuban/UI/classifier.py (Classifier.EditSymbol): The parent
5860 of the SelectPropertiesDialog should be self so the window
5861 appears on top.
5862 (ClassGroupPropertiesCtrl.DoEdit): The parent
5863 of the SelectPropertiesDialog should be self so the window
5864 appears on top.
5865
5866 * Thuban/UI/resource.py: Cleaned up how we determine file
5867 extensions.
5868 (GetImageResource): Return an wxImage from our Resources.
5869
5870 2003-06-24 Jonathan Coles <[email protected]>
5871
5872 * Thuban/UI/renderer.py (ExportRenderer.render_legend):
5873 Check that a layer has a classification before trying
5874 to get it. Raster layers don't have classifications.
5875
5876 2003-06-23 Jonathan Coles <[email protected]>
5877
5878 * setup.py: Add Resources/XML to resource list.
5879
5880 2003-06-23 Jonathan Coles <[email protected]>
5881
5882 * setup.cfg: Fix copyright dates
5883
5884 2003-06-23 Jonathan Coles <[email protected]>
5885
5886 * MANIFEST.in: Update with Resources/XML
5887
5888 * setup.py: Don't include Locale resources yet as we don't
5889 have any and it causes problems building the distribution
5890 for Windows. Update version to 0.8.0.
5891
5892 * Doc/thuban.dtd: Removed since it is now in Resources/XML.
5893
5894 * Thuban/UI/mainwindow.py: Add blank line at the end because
5895 file was not being read correctly building the Windows
5896 distribution.
5897
5898 2003-06-23 Jonathan Coles <[email protected]>
5899
5900 * Thuban/UI/mainwindow.py (MainWindow.About): Fix text.
5901
5902 * Thuban/version.py: Temporarily update longversion for
5903 the 0.8 release so that it doesn't have the cvs revision.
5904
5905 2003-06-23 Jonathan Coles <[email protected]>
5906
5907 * Thuban/UI/common.py (ThubanBeginBusyCursor): Call wxSafeYield
5908 to make sure that we don't create reentrant possibilities with
5909 wxYield.
5910
5911 * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxBeginBusyCursor()
5912 directly to avoid the wxSafeYield() call which generates an
5913 OnPaint event causing infinite recursion. Don't try to catch
5914 exception anymore. This was for before there were limits on map
5915 scaling.
5916
5917 2003-06-23 Bernhard Herzog <[email protected]>
5918
5919 Bug fix for RT #1961:
5920
5921 * Thuban/Model/load.py (SessionLoader.start_derivedshapesource):
5922 Register DerivedShapestores with the session
5923
5924 * Thuban/Model/session.py (Session.Tables): Make sure each table
5925 is only listed once.
5926
5927 * test/test_load.py (TestJoinedTable.test): Add check_format call.
5928 Update file contents to match the one written out.
5929
5930 2003-06-20 Bernhard Herzog <[email protected]>
5931
5932 * test/xmlsupport.py (SaxEventLister.startElementNS)
5933 (SaxEventLister.endElementNS): Do not include the qname. Python
5934 2.2.1 and 2.2.2 and 2.2.3 differ in this regard. In 2.2.1 qname it
5935 is (presumably incorrectly) None, whereas it's a string with the
5936 element name in the later versions.
5937
5938 * test/test_xmlsupport.py (TestEventList.test_even_list_simple)
5939 (TestEventList.test_even_list_namespace): Update tests to reflect
5940 the new behaviour
5941 (TestEventList.test_even_list_id_normalization): Fix doc-string
5942
5943 2003-06-20 Jonathan Coles <[email protected]>
5944
5945 * Thuban/Model/layer.py (BaseLayer.HasShapes): New. Overridden
5946 by deriving classes to determine if that layer supports shapes.
5947 (Layer): Override HasShapes and return true.
5948
5949 * Thuban/UI/classgen.py: Use Thuban[Begin|End]BusyCursor()
5950 instead of a direct call to wx[Begin|End]CusyCursor().
5951 (GenUniquePanel._OnRetrieve): Set busy cursor while retrieving
5952 table data.
5953
5954 * Thuban/UI/common.py (ThubanBeginBusyCursor, ThubanEndBusyCursor):
5955 New. Wrappers around the wxWindows functions that allow us to
5956 make additional calls such as wxYield which gives the native
5957 system a chance to update the cursor correctly.
5958
5959 * Thuban/UI/tableview.py: Use Thuban[Begin|End]BusyCursor()
5960 instead of a direct call to wx[Begin|End]CusyCursor().
5961
5962 * Thuban/UI/view.py: Use Thuban[Begin|End]BusyCursor()
5963 instead of a direct call to wx[Begin|End]CusyCursor().
5964 (MapCanvas.find_shape_at): Check if the current search layer
5965 support shapes, otherwise go on to the next layer.
5966
5967 * test/test_layer.py: Add tests in each type of layer for
5968 HasClassification() and HasShapes()
5969
5970 2003-06-20 Jonathan Coles <[email protected]>
5971
5972 * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after
5973 turning on the busy cursor to allow the system to change the
5974 cursor before we begin painting. This fixes a problem that
5975 was occuring only under GTK. Fixes RTbug #1840.
5976
5977 2003-06-20 Bernhard Herzog <[email protected]>
5978
5979 * Resources/XML/thuban-0.8.dtd: New DTD for the new file format
5980 version.
5981
5982 * Thuban/Model/save.py (sort_data_stores): New. Make topological
5983 sort of the data sources so they can be written with sources that
5984 data sources that depend on other data sources come after the
5985 sources they depend on.
5986 (SessionSaver.__init__): Add idmap instance variable to map from
5987 objects to the ids used in the file.
5988 (SessionSaver.get_id, SessionSaver.define_id)
5989 (SessionSaver.has_id): New. Methods to manage the idmap
5990 (SessionSaver.write): Use thuban-0.8.dtd
5991 (SessionSaver.write_session): Add a namespace on the session and
5992 write out the data sources before the maps.
5993 (SessionSaver.write_data_containers): New. Write the data
5994 containers.
5995 (SessionSaver.write_layer): Layer elements now refer to a
5996 shapestore and don't contain filenames anymore.
5997
5998 * Thuban/Model/load.py (LoadError): Exception class to raise when
5999 errors in the files are discovered
6000 (SessionLoader.__init__): Define dispatchers for elements with a
6001 thuban-0.8 namespace too.
6002 (SessionLoader.check_attrs): New helper method to check and
6003 convert attributes
6004 (AttrDesc): New. Helper class for SessionLoader.check_attrs
6005 (SessionLoader.start_fileshapesource)
6006 (SessionLoader.start_derivedshapesource)
6007 (SessionLoader.start_filetable, SessionLoader.start_jointable):
6008 Handlers for the new elements in the new fileformat
6009 (SessionLoader.start_layer): Handle the shapestore attribute in
6010 addition to filename.
6011 (SessionLoader.start_table, SessionLoader.end_table): Removed.
6012 They were never used in the old formats and aren't needed for the
6013 new.
6014
6015 * Thuban/Model/session.py (Session.DataContainers): New method to
6016 return all "data containers", i.e. shapestores and tables
6017
6018 * test/xmlsupport.py (SaxEventLister.__init__)
6019 (SaxEventLister.startElementNS, sax_eventlist): Add support to
6020 normalize IDs.
6021
6022 * test/test_xmlsupport.py
6023 (TestEventList.test_even_list_id_normalization): New test case for
6024 id normalization
6025
6026 * test/test_load.py (LoadSessionTest.check_format): Use ID
6027 normalization
6028 (LoadSessionTest.thubanids, LoadSessionTest.thubanidrefs): New
6029 class atrributes used for ID normalization
6030 (TestSingleLayer, TestLayerVisibility, TestLabels.test)
6031 (TestLayerProjection.test, TestRasterLayer.test): Adapt to new
6032 file format
6033 (TestJoinedTable): New test for loading sessions with joined
6034 tables.
6035 (TestLoadError): New. Test whether missing required attributes
6036 cause a LoadError.
6037
6038 * test/test_save.py (SaveSessionTest.thubanids)
6039 (SaveSessionTest.thubanidrefs): New class attributes for ID
6040 normalization in .thuban files.
6041 (SaveSessionTest.compare_xml): Use id-normalization.
6042 (SaveSessionTest.testEmptySession)
6043 (SaveSessionTest.testLayerProjection)
6044 (SaveSessionTest.testRasterLayer)
6045 (SaveSessionTest.testClassifiedLayer): Adapt to new file format.
6046 (SaveSessionTest.testLayerProjection): The filename used was the
6047 same as for testSingleLayer. Use a different one.
6048 (SaveSessionTest.test_dbf_table)
6049 (SaveSessionTest.test_joined_table): New test cases for saving the
6050 new data sources structures.
6051 (TestStoreSort, MockDataStore): Classes to test the sorting of the
6052 data stores for writing.
6053
6054 * test/runtests.py: Add CVS keywords
6055
6056 2003-06-20 Jonathan Coles <[email protected]>
6057
6058 * test/test_session.py
6059 (UnreferencedTablesTests.test_unreferenced_tables_with_joins):
6060 Use the cultural_landmark-point.dbf file for the store so that
6061 the table rows and shape count match.
6062
6063 2003-06-20 Jonathan Coles <[email protected]>
6064
6065 * Thuban/Model/data.py (DerivedShapeStore.__init__): Raise
6066 an exception if the number of shapes is different from the
6067 number of rows in the table. Address RTbug #1933.
6068
6069 * test/test_layer.py (TestLayer.test_derived_store): Add
6070 a test for the new exception in DerivedShapeStore.__init__.
6071
6072 * test/support.py (FloatTestCase): Removed since there is
6073 already FloatComparisonMixin. Fixes RTbug #1954.
6074 (FloatComparisonMixin.assertFloatEqual): Include test for
6075 infinity that was part of FloatTestCase.
6076
6077 * test/test_range.py (RangeTest): Inherit from
6078 support.FloatComparisonMixin now that we don't have
6079 support.FloatTestCase.
6080
6081 2003-06-20 Bernhard Herzog <[email protected]>
6082
6083 * test/test_save.py (SaxEventLister, sax_eventlist): Removed. Use
6084 the implementation in xmlsupport instead.
6085 (SaveSessionTest.compare_xml): sax_eventlist is now in xmlsupport
6086
6087 * test/test_proj.py: Import sax_eventlist from xmlsupport instead
6088 of test_save
6089
6090 2003-06-20 Bernhard Herzog <[email protected]>
6091
6092 * test/test_load.py (LoadSessionTest.check_format): New helper
6093 method to make sure the test files we load might have been written
6094 by the current thuban version.
6095 (ClassificationTest.TestLayers, TestSingleLayer.test)
6096 (TestLayerVisibility.test, TestClassification.test)
6097 (TestLabels.test, TestLayerProjection.test, TestRasterLayer.test):
6098 Add check_format() calls and fix the thuban data to match the data
6099 that would be written by saving the session loaded from it.
6100
6101 * test/xmlsupport.py (SaxEventLister, sax_eventlist): Copies of
6102 the same class and function in test_save.
6103
6104 * test/test_xmlsupport.py (TestEventList): New. test cases for
6105 sax_eventlist
6106
6107 2003-06-20 Bernhard Herzog <[email protected]>
6108
6109 * Resources/XML/thuban.dtd: Add comment about which versions of
6110 Thuban are covered by this DTD
6111 (map): Fix content model for layers and raster layers. There can
6112 be any number or layers and raster layers in any order.
6113
6114 2003-06-20 Jonathan Coles <[email protected]>
6115
6116 This is mainly about fixing RTbug #1949.
6117
6118 * Thuban/Model/classification.py: Remove "from __future__"
6119 import statement since python 2.2 is the earliest supported
6120 version.
6121
6122 * Thuban/Model/proj.py (Projection.GetProjectedUnits): New.
6123 Currently returns PROJ_UNITS_METERS or PROJ_UNITS_DEGREES
6124 depending on the units this projection *forwards* into.
6125
6126 * Thuban/Model/save.py (SessionSaver.write_classification):
6127 Remove unnecessary use of lambdas and nested functions.
6128
6129 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Do scale
6130 adjustment here if the map projection uses degrees.
6131
6132 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Remove
6133 scale adjust code since it is now done before calling
6134 this method. Don't do anything if the map projection
6135 is None.
6136
6137 2003-06-19 Bernhard Herzog <[email protected]>
6138
6139 Move version specific load tests to their own file.
6140
6141 * test/test_load.py: Expand the doc-string to explain a bit how to
6142 handle file format changes.
6143 (TestClassification.test): Update the docstring as this test is
6144 not about Thuban 0.2 anymore.
6145
6146 * test/test_load_0_2.py: New file with the load tests for thuban
6147 files created with Thuban 0.2 and earlier.
6148
6149 2003-06-19 Bernhard Herzog <[email protected]>
6150
6151 Add XML validation to some of the tests. Validation will only be
6152 done if pyRXP is installed (http://reportlab.com/xml/pyrxp.html).
6153 To make the DTD available to the test cases it's moved into
6154 Resources/XML
6155
6156 * Resources/XML/thuban.dtd: New. This is now the real Thuban DTD
6157 for versions up to and including 0.2. Two slight changes: added an
6158 encoding specification and fixed the comment which refered to
6159 GRASS, not Thuban
6160
6161 * test/xmlsupport.py: New support module for tests involving XML.
6162 Currently there's a mix-in class for XML validation.
6163
6164 * test/test_xmlsupport.py: New. Tests for the xmlsupport module
6165
6166 * test/test_save.py (SaveSessionTest): Derive from ValidationTest
6167 so that we can validate the
6168 (SaveSessionTest.testEmptySession)
6169 (SaveSessionTest.testSingleLayer)
6170 (SaveSessionTest.testSingleLayer)
6171 (SaveSessionTest.testLayerProjection)
6172 (SaveSessionTest.testRasterLayer)
6173 (SaveSessionTest.testClassifiedLayer): Validate the generated XML
6174
6175 * test/runtests.py (main): Call print_additional_summary instead
6176 of print_garbage_information
6177
6178 * test/support.py (resource_dir): New function to return the
6179 "Resource" subdirectory
6180 (print_additional_summary): New function to combine several
6181 summary functions
6182 (run_tests): Use print_additional_summary instead of calling
6183 print_garbage_information directly
6184
6185 2003-06-19 Bernhard Herzog <[email protected]>
6186
6187 * Doc/thuban.dtd (classification): Correct the content model of
6188 the classification element.
6189 (projection): Add the "name" attribute
6190
6191 2003-06-19 Frank Koormann <[email protected]>
6192
6193 MERGE from the greater-ms3 branch.
6194
6195 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Apply conversion to
6196 scale if projection is latlong to get better estimate.
6197
6198 Fix problem of hidden properties dialog under windows after double
6199 click on layer tree:
6200 The tree control always gets an Expanded / Collapsed event after
6201 the ItemActivated on double click, which raises the main window again.
6202 We add a second ItemActivated event to the queue, which simply
6203 raises the already displayed window.
6204
6205 * Thuban/UI/legend.py (LegendTree.__init__): Instance variable
6206 raiseProperties initialized to prevent endless loops
6207 (LegendTree._OnItemActivated): Depending on self.raiseProperties
6208 simply raise the properties or open the dialog and issue a second
6209 event.
6210
6211 2003-06-18 Jonathan Coles <[email protected]>
6212
6213 * setup.py: Fix a few problems that occured under Windows.
6214
6215 2003-06-18 Jonathan Coles <[email protected]>
6216
6217 When Thuban loaded the map was redrawn twice because the
6218 legend was being opened after the mainwindow was created
6219 and not during its creation. This meant the map was drawn
6220 initially and then had to be redrawn when the legend
6221 caused the display to change. Now the legend is opened
6222 in the mainwindow constructor which resolves this issue.
6223
6224 Also, although we were checking for the existence of
6225 gdal and gdalwarp modules, the gdalwarp extension was
6226 still being compiled (which may fail if the system doesn't
6227 have gdal installed). the build_ext command to setup.py
6228 now accepts the flags --with-gdal and --without-gdal.
6229 If --without-gdal is specified setup.py will try to
6230 use the gdal parameters specified by gdal-config. Under
6231 windows, those parameters have to be set in setup.py
6232 as with proj4 an wxWindows.
6233
6234 * setup.py: Use a list instead of seperate variables for
6235 extension parameters so we can create a generic function
6236 that runs an appropriate *-config script.
6237 (run_cs_script): Renamed from run_wx_script and modified
6238 to accept a second argument which is a list of lists to
6239 be filled in by the values returned from running the command.
6240 (thuban_build_ext): New. Extends the build_ext command and
6241 provides the options --with-gdal/--without-gdal which then
6242 optionally includes the gdalwarp extension.
6243
6244 * Thuban/Model/resource.py: First check if we can import
6245 the gdalwarp Thuban extension before checking for gdal.
6246 Also added some comments.
6247
6248 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Check if
6249 the map is None which may be the case if none has been loaded
6250 yet.
6251
6252 * Thuban/UI/main.py (main): Remove call to ShowLegend.
6253
6254 * Thuban/UI/mainwindow.py (MainWindow.__init__): Call ShowLegend().
6255
6256 * Thuban/UI/renderer.py: Check for gdal support before importing
6257 gdalwarp.
6258 (MapRenderer.render_map): Only try to optimize if we have gdal
6259 support otherwise nothing will get drawn.
6260
6261 * Thuban/UI/view.py (MapCanvas.FitMapToWindow): This may be called
6262 during startup before a map has been created. Check if map is None
6263 before using it and do nothing if it is.
6264
6265 2003-06-17 Jonathan Coles <[email protected]>
6266
6267 Fix the problem with raster layers under Windows that caused
6268 Thuban to crash. The view should respond to layer projection
6269 changed events to update the display. Changes to a projection
6270 should not cause the map to be set to full extent.
6271
6272 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
6273 current_map_proj to remember the current map projection so that
6274 when the projection changes we know what the previous projection
6275 was.
6276 (MapCanvas.SetMap): Unsubscribe and subscribe to
6277 LAYER_PROJECTION_CHANGED events.
6278 (MapCanvas.projection_changed): Split into two methods that respond
6279 to map and layer projection changes.
6280 (MapCanvas.map_projection_changed): New. Takes the current view and
6281 projects it using the new projection. This does not cause the
6282 map to be redrawn at full extent.
6283 (MapCanvas.layer_projection_changed): New. Cause a redraw which
6284 will draw each layer in its new projection.
6285
6286 * extensions/thuban/bmpdataset.cpp (BMPDataset::Open): Call
6287 VSIFClose() not VSIFCloseL() to close the file. Fixes a crash
6288 under Windows.
6289
6290 * extensions/thuban/gdalwarp.cpp (MFILENAME): Padding should be
6291 to twice sizeof(void*) because there are two digits for each
6292 hex byte.
6293
6294 2003-06-16 Bernhard Herzog <[email protected]>
6295
6296 Update to the layer interface: Direct access to the table,
6297 shapetable, shapefile and filename attributes is now actively
6298 deprecated by issuing deprecation warnings for all places where
6299 this happens.
6300
6301 * Thuban/Model/layer.py (Layer.__getattr__): New. Implement access
6302 to the instance variables table, shapetable, shapefile and
6303 filename via __getattr__ so that we can issue a deprecation
6304 warning.
6305 (Layer.SetShapeStore): Don't set the deprecated instance variables
6306 any more
6307 (Layer.SetShapeStore): Don't use deprecated layer instance
6308 variables
6309 (Layer.Destroy): No need to explicitly remove the instance
6310 variables any more
6311 (Layer.GetFieldType, Layer.Shape): Don't use deprecated layer
6312 instance variables
6313
6314 * Thuban/UI/classgen.py (ClassGenDialog.__init__)
6315 (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve)
6316 (GenQuantilesPanel.GetList, GenQuantilesPanel.OnRetrieve): Don't
6317 use deprecated layer instance variables
6318
6319 * Thuban/UI/classifier.py (Classifier.__init__): Don't use
6320 deprecated layer instance variables
6321
6322 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
6323 (IdentifyGridCtrl.selected_shape): Don't set the deprecated layer
6324 instance variables
6325
6326 * Thuban/UI/tableview.py (LayerTableGrid.select_shapes): Don't use
6327 deprecated layer instance variables
6328
6329 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Don't use
6330 deprecated layer instance variables
6331
6332 * Thuban/Model/save.py (SessionSaver.write_layer): Don't use
6333 deprecated layer instance variables
6334
6335 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer)
6336 (MapRenderer.polygon_render_param): Don't use deprecated layer instance
6337 variables
6338
6339 * test/runtests.py (main): Turn Thuban's deprecation warnings into
6340 errors so that they're cought by the tests
6341
6342 * test/test_load.py (TestSingleLayer.test): Don't use deprecated
6343 layer instance variables
6344
6345 2003-06-16 Jonathan Coles <[email protected]>
6346
6347 Fix a problem under Windows whereby if the user double-clicks on a
6348 layer in the legend that tree item will expand or collapse as well
6349 as open the layer properties dialog. The state of the tree item
6350 should not be affected.
6351
6352 * Thuban/UI/legend.py (LegendTree.__init__): Add instance variable
6353 preventExpandCollapse and subscribe to expanding and collapsing
6354 events.
6355 (LegendTree.OnItemExpandCollapse): New. Responds to expanding and
6356 collapsing events and will veto the event if it has been triggered
6357 by the user double clicking on a layer.
6358 (LegendTree._OnItemActivated): Set preventExpandCollapse to indicate
6359 that an expanding/collapsing event should be vetoed.
6360
6361 2003-06-13 Bernhard Herzog <[email protected]>
6362
6363 * Thuban/UI/classifier.py (Classifier.OnClose)
6364 (Classifier.map_layers_removed)
6365 (Classifier.layer_shapestore_replaced): Unsubscribe the messages
6366 in OnClose and not in map_layers_removed or
6367 layer_shapestore_replaced to make sure it always happens when the
6368 dialog is closed
6369
6370 2003-06-13 Jonathan Coles <[email protected]>
6371
6372 This puts back a fix for Windows where a panel is needed so that
6373 the background of the table view appears correctly.
6374
6375 * Thuban/UI/tableview.py (TableFrame.__init__): Add a panel
6376 object that can be used by derived classes to place any
6377 controls (including the grid) onto.
6378 (QueryTableFrame.__init__): Use the panel as the parent window
6379 for all the controls. Reparent the grid so that the panel is
6380 the parent. Call UpdateStatusText() to correctly initialize
6381 the status bar.
6382
6383 2003-06-13 Jonathan Coles <[email protected]>
6384
6385 * Thuban/UI/dialogs.py (ThubanFrame): New: a class that inherits
6386 from wxFrame (as opposed to wxDialog like the other classes)
6387 but otherwise behaves like the other classes. This is needed
6388 for the TableView which isn't really a dialog and needs to
6389 have a status bar and control buttons.
6390
6391 * Thuban/UI/tableview.py (TableGrid.__init__): Create an
6392 instance variable to keep track of how many rows are selected.
6393 Subscribe once to the the events we are interested in.
6394 (ThubanGrid.OnRangeSelect): Only handle event if event handling
6395 hasn't been turned off.
6396 (ThubanGrid.OnSelectCell): Only handle event if event handling
6397 hasn't been turned off.
6398 (ThubanGrid.ToggleEventListeners): Rather than subscribe None
6399 as an event listener (which changes the event handler stack)
6400 simply set an instance variable to False. This is checked in
6401 the event handlers.
6402 (ThubanGrid.GetNumberSelected): Return the number of currently
6403 selected rows.
6404 (TableFrame): Inherit from ThubanFrame so we can have a
6405 status bar and control buttons.
6406 (QueryTableFrame.__init__): Create a status bar. Fixes RTbug #1942.
6407 Explicitly set which items are selected in the operator choice and
6408 action choice so there is always a valid selection. Fixes RTbug #1941.
6409 Subscribe to grid cell selection events so we can update the
6410 status bar.
6411 (QueryTableFrame.UpdateStatusText): Update the status bar with
6412 how many rows are in the grid, how many columns, and how many
6413 rows are selected.
6414 (QueryTableFrame.OnGridSelectRange, QueryTableFrame.OnGridSelectCell):
6415 Call UpdateStatusText when cells are (de)selected.
6416 (QueryTableFrame.OnQuery): Use the string value in the value
6417 combo if either the selected item index is 0 or if the string
6418 cannot be found in the predefined list (this happens if the
6419 user changes the text). Fixes RTbug #1940.
6420 Only turn off the grid event listeners if there a query comes
6421 back with a none empty list of ids. in the case that the list
6422 is empty this causes a grid.ClearSelection() call to actually
6423 clear the grid selection which causes the selected items in
6424 the map to be deselected. Fixes RTbug #1939.
6425
6426 * test/test_save.py (XMLWriterTest.Encode): Check return values.
6427 Fixes RTbug #1851.
6428
6429 2003-06-13 Bernhard Herzog <[email protected]>
6430
6431 * Thuban/UI/identifyview.py (IdentifyView.__init__): Call
6432 self.selected_shape with the current selection to make sure the
6433 contents of the dialog are up to date when it's shown for the
6434 first time.
6435 The dialog used to work without this by luck. The recent fix to
6436 the connector module 'broke' a 'feature' the identify view was
6437 relying on, i.e that subscribing to a message in response to
6438 receiving a message of that type would mean that the new
6439 subscriber would also be called for the same message.
6440
6441 2003-06-12 Jonathan Coles <[email protected]>
6442
6443 * extensions/thuban/gdalwarp.cpp: Removed debug printing as
6444 the image is rendered. Fixes RTbug #1937.
6445
6446 2003-06-12 Jonathan Coles <[email protected]>
6447
6448 * Thuban/Lib/fileutil.py: As is done under Windows, create the
6449 user directory if it doesn't exist on a posix system.
6450 Fixes RTbug #1815.
6451
6452 * Thuban/Model/resource.py (get_user_proj_files): Moved the
6453 called to get_application_dir here, so that the directory
6454 will only be called if this method is invoked.
6455
6456 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Clear
6457 the projfilepath if no projection is selected.
6458
6459 2003-06-12 Jonathan Coles <[email protected]>
6460
6461 * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Don't draw
6462 the scalebar if the current map has no projection set.
6463
6464 * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Set the
6465 projfilepath label to just the basename of the projection file
6466 rather than include the entire path.
6467
6468 * Thuban/Model/resource.py: Fix missed proj functions that
6469 needed to be renamed.
6470
6471 2003-06-12 Jonathan Coles <[email protected]>
6472
6473 * Thuban/Model/classification.py: Removed assert statements that
6474 tested if the variable was an instance of Color.
6475
6476 * Thuban/Model/color.py (Color): Remove commented code that isn't
6477 used.
6478 (Transparent): Renamed from NoColor. Doesn't inherit from Color.
6479 Fixes RTbug #1835.
6480 (Transparent.__eq__, Transparent.__ne, Transparent.__repr): New.
6481 Needed now that the class doesn't inherit from Color.
6482
6483 2003-06-12 Jonathan Coles <[email protected]>
6484
6485 * test/test_save.py (XMLWriterTest.testEncode): Explicitly
6486 check unicode strings.
6487
6488 * test/test_layer.py: Check for existence of gdal.
6489
6490 2003-06-12 Jonathan Coles <[email protected]>
6491
6492 * Thuban/Model/xmlreader.py: New. Contains the XMLReader class
6493 that was in load.py
6494
6495 * Thuban/Model/xmlwriter.py: New. Contains the XMLWriter class
6496 that was in save.py
6497
6498 2003-06-12 Jonathan Coles <[email protected]>
6499
6500 This is largely a collection of bug fixes. We also handle the
6501 case where gdal is not on the system. The XMLReader and XMLWriter
6502 classes were moved into there own files to resolve some circular
6503 import references and because they shouldn't really be in the
6504 file that is dediciated to reading/writing session files since
6505 they are also used elsewhere.
6506
6507 * Thuban/Model/classgen.py: Renamed functions to follow the
6508 function_names_with_underscores style. Fixes RTbug #1903.
6509 (calculate_quantiles): Raise ValueError if 'percents' is invalid.
6510
6511 * Thuban/Model/layer.py: Import gdal only if it available.
6512 (RasterLayer): Handle the case where the gdal library is unavailable.
6513 Addresses RTbug #1877.
6514
6515 * Thuban/Model/load.py (XMLReader): Moved into seperate file
6516 xmlreader.py.
6517
6518 2003-06-12 Jonathan Coles <[email protected]>
6519
6520 This is largely a collection of bug fixes. We also handle the
6521 case where gdal is not on the system. The XMLReader and XMLWriter
6522 classes were moved into there own files to resolve some circular
6523 import references and because they shouldn't really be in the
6524 file that is dediciated to reading/writing session files since
6525 they are also used elsewhere.
6526
6527 * Thuban/Model/classgen.py: Renamed functions to follow the
6528 function_names_with_underscores style. Fixes RTbug #1903.
6529 (calculate_quantiles): Raise ValueError if 'percents' is invalid.
6530
6531 * Thuban/Model/layer.py: Import gdal only if it available.
6532 (RasterLayer): Handle the case where the gdal library is unavailable.
6533 Addresses RTbug #1877.
6534
6535 * Thuban/Model/load.py (XMLReader): Moved into seperate file
6536 xmlreader.py.
6537
6538 * Thuban/Model/save.py (escape, XMLWriter): Moved into seperate
6539 file xmlwriter.py.
6540
6541 * Thuban/Model/resource.py: Renamed functions to following the
6542 function_names_with_underscores style.
6543 (has_gdal_support): New function that returns true if the gdal
6544 library is available. Addresses RTbug #1877.
6545
6546 * Thuban/UI/application.py (ThubanApplication.OpenSession):
6547 Display a message box if the gdal library is not available, but
6548 only if there are any layers that would use it. Addresses RTbug #1877.
6549
6550 * Thuban/UI/classgen.py: Use renamed projection resource functions.
6551 (GenUniformPanel.__CalcStepping): Fix a slight discrepency
6552 when using integers versus floats.
6553
6554 * Thuban/UI/mainwindow.py (_has_gdal_support): New. Used to
6555 determine if the "Add Image Layer" menu option should be
6556 greyed out or not. Addresses RTbug #1877.
6557
6558 * Thuban/UI/projdialog.py: Use renamed projection resource functions.
6559
6560 * Thuban/UI/renderer.py (MapRenderer.render_map): Only try to
6561 optimize if a raster layer is visible. Fixes RTbug #1931.
6562 Only draw the raster layer if the gdal library is available.
6563 Addresses RTbug #1877.
6564
6565 * test/test_classgen.py: Add tests for generate_singletons,
6566 generate_uniform_distribution, generate_quantiles. Fixes RTbug #1903.
6567 (test_calculate_quantiles): Fix some tests to catch the new
6568 ValueError that is raised.
6569
6570 * test/test_proj.py: Use renamed projection resource functions.
6571
6572 * test/test_save.py (SaveSessionTest.testClassifiedLayer): New
6573 test for saving classified layers. Fixes RTbug #1902.
6574 (XMLWriterTest): New. Tests the XMLWriter class. Fixes RTbug #1851.
6575
6576 2003-06-12 Jan-Oliver Wagner <[email protected]>
6577
6578 Fix for http://intevation.de/rt/webrt?serial_num=1900.
6579
6580 * Thuban/UI/multiplechoicedialog.py: New. A multiple choice dialog.
6581
6582 * Thuban/UI/mainwindow.py: import wxMultipleChoiceDialog from
6583 multiplechoicedialog.py rather than from the wxPython library.
6584
6585 2003-06-11 Frank Koormann <[email protected]>
6586
6587 * Thuban/Lib/fileutil.py (get_application_dir): Minor stability
6588 update.
6589
6590 2003-06-11 Frank Koormann <[email protected]>
6591
6592 * Thuban/Lib/fileutil.py (get_application_dir): New function to
6593 determine the absolute .thuban/thuban directory under
6594 "posix" (os.expanduser) and "nt" (read AppData registry key).
6595
6596 * Thuban/Model/resource.py: Use get_application_dir
6597
6598 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
6599 Use get_application_dir.
6600
6601 2003-06-10 Bernhard Herzog <[email protected]>
6602
6603 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Subscribe to
6604 the messages MAP_LAYERS_REMOVED messages
6605 (LayerTableFrame.OnClose): Unsubscribe from it.
6606 (LayerTableFrame.map_layers_removed): New. Receiver for
6607 MAP_LAYERS_REMOVED. Close the dialog when the layer whose the
6608 dialog is showing is removed.
6609
6610 2003-06-10 Bernhard Herzog <[email protected]>
6611
6612 * Thuban/Lib/connector.py (Connector.Issue): Iterate over a copy
6613 of the receivers list so that unsubscribing in a receiver doesn't
6614 modify it while iterating over it.
6615
6616 * test/test_connector.py
6617 (ConnectorTest.test_disconnect_in_receiver): New. Test whether
6618 unsubscribing in a receiver works correctly. See docstring for
6619 details
6620
6621 2003-06-10 Bernhard Herzog <[email protected]>
6622
6623 * Thuban/Model/messages.py (LAYER_SHAPESTORE_REPLACED): New
6624 message.
6625
6626 * Thuban/Model/layer.py (Layer.SetShapeStore): Send
6627 LAYER_SHAPESTORE_REPLACED when the shapestore changes. A
6628 LAYER_CHANGED will still be sent if the classification changes.
6629
6630 * Thuban/UI/classifier.py (Classifier.__init__): Add the map as
6631 parameter so we can subscribe to some of its messages
6632 (Classifier.__init__): Subscribe to the map's MAP_LAYERS_REMOVED
6633 and the layer's LAYER_SHAPESTORE_REPLACED
6634 (Classifier.unsubscribe_messages): New. Unsubscribe from message
6635 subscribed to in __init__
6636 (Classifier.map_layers_removed)
6637 (Classifier.layer_shapestore_replaced): receivers for the messages
6638 subscribed to in __init__. Unsubscribe and close the dialog
6639
6640 * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): Pass
6641 the map to the Classifier dialog
6642
6643 * test/test_layer.py (SetShapeStoreTests): Derive from
6644 SubscriberMixin as well so we can test messages
6645 (SetShapeStoreTests.setUp): Subscribe to some of the layer's
6646 messages
6647 (SetShapeStoreTests.tearDown): Clear the messages again
6648 (SetShapeStoreTests.test_sanity): Expand the doc-string and check
6649 for the modified flag too
6650 (SetShapeStoreTests.test_set_shape_store_modified_flag): New test
6651 to check whether SetShapeStore sets the modified flag
6652 (SetShapeStoreTests.test_set_shape_store_different_field_name)
6653 (SetShapeStoreTests.test_set_shape_store_same_field)
6654 (SetShapeStoreTests.test_set_shape_store_same_field_different_type):
6655 Add tests for the messages. This checks both the new
6656 LAYER_SHAPESTORE_REPLACED and the older LAYER_CHANGED
6657
6658 2003-06-06 Jan-Oliver Wagner <[email protected]>
6659
6660 * Thuban/UI/mainwindow.py: Improved and partly added help texts for
6661 the menu items.
6662
6663 2003-06-05 Frank Koormann <[email protected]>
6664
6665 * Thuban/UI/identifyview.py (IdentifyView.__init__):
6666 Layout reimplemented without panel. Make life easier to fit the list
6667 in the dialog.
6668
6669 2003-06-05 Frank Koormann <[email protected]>
6670
6671 * Thuban/UI/projdialog.py (ProjFrame.__init__): Fill the projchoice
6672 once on initialisation (Former implementation resulted in multiple
6673 entries for each projection).
6674 (ProjFrame.__FillAvailList): selectProj as second optional parameter,
6675 if set, select the projection found under the specified name. This
6676 overwrites any other selection estimate.
6677 Removed projchoice filling from this method.
6678 (ProjFrame._OnSave, ProjFrame._OnAddToList):
6679 Updated call of ProjFrame.__FillAvailList
6680 (LCCPanel._DoLayout): Moved parameter controls in more common order.
6681
6682 * Resources/Projections/defaults.proj: Extended defaults representing
6683 various common European projections.
6684
6685 2003-06-05 Frank Koormann <[email protected]>
6686
6687 * Thuban/UI/identifyview.py (IdentifyView.__init__):
6688 Use ListCtrl instead of GridCtrl
6689
6690 * Thuban/Model/resource.py:
6691 Guess location of .thuban directory from tempdir parent directory.
6692
6693 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
6694 Guess location of .thuban directory from tempdir parent directory.
6695
6696 2003-06-04 Bernhard Herzog <[email protected]>
6697
6698 Do not cache the values returned by the tree widget's
6699 GetFirstChild and GetNextChild methods because it led to lots of
6700 segfaults. The new way requires more brute force but is more
6701 reliable.
6702
6703 * Thuban/UI/legend.py (LegendTree.__init__): Remove instance
6704 variable layer2id
6705 (LegendTree.find_layer): New method to do with brute force what
6706 layer2id tried to accomplish
6707 (LegendTree._OnMsgLayerChanged)
6708 (LegendTree._OnMsgLayerTitleChanged, LegendTree.__ShowHideLayer):
6709 Use find_layer instead of layer2id
6710 (LegendTree.__RemoveLayer, LegendTree.__AddLayer): No need to
6711 update layer2id anymore
6712 (LegendTree._OnMsgMapLayersRemoved)
6713 (LegendTree._OnMsgMapLayersAdded): Get by without layer2id.
6714
6715 2003-06-03 Thomas Koester <[email protected]>
6716
6717 * Thuban/Model/classgen.py (GenQuantiles0): New function.
6718
6719 2003-06-02 Bernhard Herzog <[email protected]>
6720
6721 * Thuban/UI/mainwindow.py (layer_rename command, table_rename command):
6722 New commands.
6723 (main_menu): Add the new commands.
6724 (MainWindow.TableRename): New. Implementation of the table_rename
6725 command.
6726 (MainWindow.RenameLayer): New. Implementation of the layer_rename
6727 command.
6728
6729 * Thuban/Model/session.py (Session.AddTable): call self.changed to
6730 set the modified flag
6731
6732 * test/test_session.py (TestSessionSimple.test_add_table): Test
6733 whether the modified flag is set properly
6734
6735 * Thuban/Model/base.py (TitledObject.SetTitle): Call changed
6736 instead of issue so that the modified flags get updated.
6737
6738 * test/test_base.py (SomeTitledObject): Derive from Modifiable
6739 instead of Publisher to reflect reality better and to accomodate
6740 the fact that SetTitle now calls changed instead of issue
6741
6742 2003-06-02 Bernhard Herzog <[email protected]>
6743
6744 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Resource
6745 acquisition has to happen before the try in a try-finally.
6746
6747 2003-06-02 Bernhard Herzog <[email protected]>
6748
6749 * Thuban/UI/legend.py (LegendTree._OnMsgMapLayersRemoved): It's
6750 possible that a layer is removed that is not currently selected in
6751 the legend so don't check for this.
6752
6753 2003-05-30 Bernhard Herzog <[email protected]>
6754
6755 * Thuban/Model/layer.py (Layer.Destroy): Set all instance
6756 variables to None that have direct or indirect references to
6757 shapefiles or dbf files to make sure that they do go away and the
6758 files are closed.
6759
6760 2003-05-30 Bernhard Herzog <[email protected]>
6761
6762 * Thuban/UI/legend.py (LegendTree.GetRootItem): Reset
6763 availImgListIndices when a new image list is created
6764
6765 2003-05-30 Bernhard Herzog <[email protected]>
6766
6767 * Thuban/UI/legend.py (LegendTree.__init__): New instance variable
6768 changing_selection to indicate whether the LegendTree code itself
6769 is currently changing the selection
6770 (LegendTree.normalize_selection): New method to normalize the
6771 selection by selecting the layer item even if the user clicked on
6772 the classification.
6773 (LegendTree._OnSelChanged): normalize the selection. This works
6774 around a bug in wx which doesn't keep track of the selection
6775 properly when subtrees are deleted.
6776
6777 2003-05-30 Bernhard Herzog <[email protected]>
6778
6779 * Thuban/UI/view.py (MapCanvas.set_view_transform): Limit the
6780 maximum and minimum scale factors.
6781
6782 * test/test_classgen.py (ClassGenTest.test): Update to reflect the
6783 changes in classgen.py
6784
6785 2003-05-30 Jonathan Coles <[email protected]>
6786
6787 * Thuban/Model/classgen.py: Remove ClassGenerator class but make
6788 all the methods functions. Fixes RTBug #1903.
6789
6790 * Thuban/Model/map.py (Map.TopLayer, Map.BottomLayer): Renamed
6791 to MoveLayerToTop and MoveLayerToBottom respectively. Fixes
6792 RTBug #1907.
6793
6794 * Thuban/UI/classgen.py: Use classgen functions that were part
6795 of the ClassGenerator class. Put try/finally blocks around
6796 code that uses wxBeginBusyCursor()/wxEndBusyCursor(). Fixes
6797 RTBug #1904.
6798
6799 * Thuban/UI/classifier.py: Remove unused import of ClassGenerator.
6800
6801 * Thuban/UI/legend.py: The legend was cleared and repopulated any
6802 time something changed which caused some state to be lost such
6803 as which children were expanded or collapsed. Fixes RTBug #1901.
6804 (LegendTree._OnMsgMapLayersAdded): Add only new layers.
6805 (LegendTree.__OnMsgMapLayersRemoved): Remove layers that exist in
6806 the legend but not in the map.
6807 (LegendTree.__FillTree): Move main functionality out into smaller
6808 methods that can be used by other methods.
6809 (LegendTree.__FillTreeLayer): Reuse old slots in the image list
6810 if they are available.
6811 (LegendTree.DeleteAllItems): Renamed from __DeleteAllItems so
6812 that we override the wxTreeCtrl method. Iterate over children
6813 and call __RemoveLayer.
6814 (LegendTree.__AddLayer): New. Add a new layer to the legend.
6815 (LegendTree.__RemoveLayer): Remove a layer from the legend.
6816 (LegendTree.DeleteChildren): New, overrides wxTreeCtrl method.
6817 Should only be called with the id of a layer branch.
6818 (LegendTree.GetRootItem): New, overrides wxTreeCtrl method.
6819 Returns the root item or creates one if necessary.
6820
6821 * Thuban/UI/renderer.py (MapRenderer.draw_raster_layer): Call
6822 ProjectRasterFile with tuple arguments instead of strings.
6823
6824 * Thuban/UI/tableview.py (QueryTableFrame.OnQuery): Wrap code
6825 with try/finally. Fixes RTBug #1904.
6826
6827 * Thuban/UI/view.py (MapCanvas.OnPaint): Wrap code
6828 with try/finally. Fixes RTBug #1904.
6829 (MapCanvas.FitSelectedToWindow): If a single point is selected
6830 simply center it on the display. Fixes RTBug #1849.
6831
6832 * extensions/thuban/gdalwarp.cpp: Removed code that allowed gdalwarp
6833 to be compiled as a standalone app. Now the code can only be
6834 called from Python which simplifies the parameter passing.
6835 (ProjectRasterFile): Handle Python arguments. Remove code that
6836 checks for a destination dataset. Add more clean up code.
6837
6838 * test/test_map.py (TestMapWithContents.test_raise_layer_top,
6839 TestMapWithContents.test_lower_layer_bottom):
6840 Test Map.MoveLayerToTop() and Map.MoveLayerToBottom() respectively.
6841 Fixes RTBug #1907.
6842
6843 * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Apply a full
6844 extent to the map when the legend is toggled. Fixes RTBug #1881.
6845
6846 2003-05-29 Jan-Oliver Wagner <[email protected]>
6847
6848 * Thuban/UI/tableview.py (LayerTableFrame.OnClose): Bug-fix: Now
6849 unsubscribes all that is subcribed in __init__.
6850
6851 2003-05-28 Bernhard Herzog <[email protected]>
6852
6853 * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer)
6854 (MainWindow.CanDuplicateLayer): New methods to implement the
6855 Layer/Duplicate command.
6856 (layer_duplicate command): New.
6857 (main_menu): Add layer_duplicate to the Layer menu.
6858
6859 2003-05-28 Bernhard Herzog <[email protected]>
6860
6861 * Thuban/UI/tableview.py (NullRenderer.Draw): New. Our own
6862 renderer so that NULL/None values get displayed differently (by a
6863 gray rectangle).
6864 (TableGrid.__init__): Override the default renderers
6865
6866 2003-05-28 Bernhard Herzog <[email protected]>
6867
6868 * Thuban/Model/layer.py (Layer.SetShapeStore): Set the
6869 classification to "None" if the type of the field has changed.
6870
6871 * test/test_layer.py (SetShapeStoreTests): New. Class with a few
6872 test for the Layer.SetShapeStore method
6873
6874 2003-05-28 Jan-Oliver Wagner <[email protected]>
6875
6876 * Thuban/Model/layer.py (Layer.TreeInfo): Fixed a bug (a layer
6877 does not necessarily have a filename).
6878
6879 2003-05-28 Jan-Oliver Wagner <[email protected]>
6880
6881 * Thuban/UI/mainwindow.py (MainWindow.TableClose, MainWindow.TableShow):
6882 sort the selection list for the dialog.
6883
6884 2003-05-28 Frank Koormann <[email protected]>
6885
6886 * extensions/thuban/wxproj.cpp
6887 (project_point): Removed cast to int for projected point coordinates.
6888 (shape_centroid): Return last point if all polygon vertices fall
6889 to one point.
6890
6891 2003-05-28 Bernhard Herzog <[email protected]>
6892
6893 * Thuban/UI/mainwindow.py (_can_unjoin): Add doc-string and cope
6894 with layers that don't have shapestores, i.e. raster layers.
6895
6896 2003-05-28 Bernhard Herzog <[email protected]>
6897
6898 * Thuban/Model/table.py (DBFTable.__init__): Omit the extension
6899 when determining the title from the filename.
6900
6901 * test/test_dbf_table.py (TestDBFTable.test_title): Update to
6902 reflect changes in the way the title is derived from the filename
6903
6904 2003-05-28 Frank Koormann <[email protected]>
6905
6906 * Thuban/UI/mainwindow.py (MainWindow.TableShow):
6907 Added wxDEFAULT_DIALOG_STYLE to show table dialog styles.
6908
6909 2003-05-27 Bernhard Herzog <[email protected]>
6910
6911 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages): Also
6912 delegate SelectedLayer.
6913 (MainWindow.LayerUnjoinTable): Implement.
6914 (_can_unjoin): New. Helper function for the sensitivity of the
6915 layer/unjoin command.
6916
6917 * Thuban/Model/data.py (ShapefileStore.OrigShapeStore)
6918 (DerivedShapeStore.OrigShapeStore): New. Return the original
6919 shapestore. Used to figure out how to unjoin.
6920 (DerivedShapeStore.Shapefile): Fix a typo.
6921
6922 2003-05-27 Bernhard Herzog <[email protected]>
6923
6924 * Thuban/UI/join.py (JoinDialog): Extend to handle layer joins as
6925 well
6926 (JoinDialog.__init__): Use the layer parameter and only build the
6927 left choice when a layer is given
6928 (JoinDialog.OnJoin): Handle layer joins as well
6929 (JoinDialog.OnLeftTable, JoinDialog.OnRightTable): Handle the case
6930 that the user selects the "Select..." item. The sensitivitly
6931 updating is now in update_sensitivity
6932 (JoinDialog.y): New method to refactor the sensitivity update of
6933 the join button into its own method.
6934
6935 * Thuban/UI/mainwindow.py (MainWindow.LayerJoinTable): Implement.
6936
6937 2003-05-27 Bernhard Herzog <[email protected]>
6938
6939 * Thuban/UI/mainwindow.py (table_close command): Make it sensitive
6940 iff there are unreferenced tables in the session
6941
6942 2003-05-27 Bernhard Herzog <[email protected]>
6943
6944 * Thuban/Model/messages.py (TABLE_REMOVED): New message.
6945
6946 * Thuban/Model/session.py (Session.UnreferencedTables): New method
6947 to return tables that are not referenced by other tables or shape
6948 stores and can be removed.
6949 (Session.RemoveTable): Issue a TABLE_REMOVED message after
6950 removing the table
6951
6952 * Thuban/UI/mainwindow.py: Remove unused imports
6953 (MainWindow.TableClose): Implement.
6954
6955 * Thuban/UI/tableview.py (TableFrame.__init__): Subscribe to some
6956 messages so that the frame will be automatically closed when a new
6957 session is opened or the table is removed.
6958 (TableFrame.OnClose): Unsubscribe the Subscriptions made in
6959 __init__
6960 (TableFrame.close_on_session_replaced)
6961 (TableFrame.close_on_table_removed): New. Subscribers that close
6962 the window
6963
6964 * test/test_session.py (TestSessionMessages.test_remove_table)
6965 (TestSessionSimple.test_remove_table): Move the test to
6966 TestSessionSimple and add test for the TABLE_REMOVED message
6967 (TestSessionBase.setUp): Also subscribe to TABLE_REMOVED
6968 (TestSessionSimple.test_unreferenced_tables) New. Test for the
6969 UnreferencedTables method.
6970 (UnreferencedTablesTests): New. Class with some more sophisticated
6971 tests for UnreferencedTables.
6972
6973 2003-05-27 Frank Koormann <[email protected]>
6974
6975 * Thuban/UI/tableview.py (QueryTableFrame.__init__): The "_S_election"
6976 display has some unwanted side effects. Removed again.
6977
6978 2003-05-27 Frank Koormann <[email protected]>
6979
6980 * Resources/Bitmaps/legend_icon_layer.xpm: New, icon for legend.
6981
6982 * Thuban/UI/legend.py (LegendTree.__FillTree): Use "legend_icon_layer"
6983
6984 2003-05-27 Jan-Oliver Wagner <[email protected]>
6985
6986 * test/test_menu.py (MenuTest.test): Added test for
6987 Menu.RemoveItem().
6988
6989 * Thuban/UI/menu.py (Menu.RemoveItem): New. Remove an item from
6990 the menu.
6991
6992 2003-05-27 Frank Koormann <[email protected]>
6993
6994 Nonmodal dialogs without parent (i.e. they can fall behind the main
6995 window)
6996
6997 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Explicitly destroy
6998 all dialogs in the dialogs dictionary and the canvas.
6999
7000 * Thuban/UI/dialogs.py (NonModalNonParentDialog): New class, without
7001 parent, i.e. can fall behind other windows.
7002 (NonModalDialog.OnClose): Check is dialog is in mainwindow.dialog
7003 dictionary before removing it.
7004
7005 * Thuban/UI/classifier.py: Dialog derived from NonModalNonParentDialog
7006
7007 * Thuban/UI/projdialog.py: Dialog derived from NonModalNonParentDialog
7008 * Thuban/UI/tableview.py: Dialog derived from NonModalNonParentDialog
7009 * Thuban/UI/tree.py: Dialog derived from NonModalNonParentDialog
7010
7011 2003-05-27 Bernhard Herzog <[email protected]>
7012
7013 * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): New. Open a
7014 tableview dialog
7015 (MainWindow.TableShow): Use ShowTableView to open the dialogs.
7016 Also, don't use the table's titles as the dialog names. The titles
7017 aren't guaranteed to be unique.
7018 (MainWindow.TableOpen): Open a table view dialog after opening the
7019 table
7020
7021 2003-05-27 Bernhard Herzog <[email protected]>
7022
7023 * Thuban/UI/mainwindow.py: Remove the Table/Hide menu item. Its
7024 effect can be achieved by simply closing the window showing the
7025 table.
7026 (MainWindow.TableHide): Removed.
7027 (main_menu): Removed "table_hide"
7028
7029 2003-05-27 Frank Koormann <[email protected]>
7030
7031 Fix legend tree display problems under Win32
7032
7033 * Thuban/UI/legend.py: BMP_SIZE_W = 15
7034 (LegendTree.__FillTree): Display "legend_icon_map.xpm" with layer title.
7035 (LegendTree.__FillTreeLayer): Explicitely set SelectedImage.
7036
7037 * Resources/Bitmaps/legend_icon_map.xpm: New icon for legend.
7038
7039 2003-05-27 Jan-Oliver Wagner <[email protected]>
7040
7041 * Thuban/UI/menu.py (Menu.InsertSeparator): Additional optional parameter
7042 'after' now allows to insert separators almost anywhere in the menu.
7043
7044 2003-05-27 Frank Koormann <[email protected]>
7045
7046 * Thuban/UI/tableview.py (QueryTableFrame.__init__): Underline the
7047 "S" of selection box label to hint on hot key (Alt-S). Works under
7048 Win32 but is ignored under GTK.
7049
7050 2003-05-26 Frank Koormann <[email protected]>
7051
7052 * Thuban/UI/projdialog.py (ProjFrame.__do_layout, ProjPanel._DoLayout):
7053 Center Choices.
7054
7055 2003-05-26 Bernhard Herzog <[email protected]>
7056
7057 Remove the Precision methods again. They're too DBF specific to be
7058 part of the table interface and they're only used in table_to_dbf
7059 anyway.
7060
7061 * Thuban/Model/transientdb.py (TransientTableBase.Width):Use a
7062 fixed precision of 12 for doubles.
7063 (TransientTableBase.Precision): Removed
7064 (AutoTransientTable.Width): Delegate to self.table.
7065
7066 * Thuban/Model/table.py (DBFTable.Precision)
7067 (MemoryTable.Precision): Removed.
7068 (MemoryTable.Width): Use a fixed precision of 12 for doubles.
7069 (table_to_dbf): Use a fixed precision of 12 for floats unless the
7070 column object specifies something else.
7071
7072 * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): New.
7073 test for table_to_dbf
7074
7075 2003-05-26 Bernhard Herzog <[email protected]>
7076
7077 * test/test_transientdb.py
7078 (TestTransientTable.run_iceland_political_tests): Fix a comment.
7079
7080 2003-05-26 Bernhard Herzog <[email protected]>
7081
7082 * Thuban/UI/mainwindow.py (MainWindow.TableOpen): Real
7083 implementation. Mark parts of the file format strings for
7084 localization.
7085
7086 * Thuban/Model/session.py (Session.OpenTableFile): New. Open a dbf
7087 file and add the table to the tables managed by the session
7088
7089 * test/test_session.py (TestSessionSimple.test_open_table_file):
7090 New. test case for OpenTableFile
7091
7092 2003-05-26 Jan-Oliver Wagner <[email protected]>
7093
7094 * Thuban/UI/controls.py, Thuban/UI/identifyview.py, Thuban/UI/join.py,
7095 Thuban/UI/labeldialog.py, Thuban/UI/mainwindow.py,
7096 Thuban/UI/proj4dialog.py, Thuban/UI/tableview.py, Thuban/UI/view.py:
7097 Replace the true/false of wxWindows by True/False of Python 2.2.1.
7098
7099 2003-05-26 Jan-Oliver Wagner <[email protected]>
7100
7101 * Thuban/UI/tableview.py (LayerTableFrame.__init__): If there is
7102 already a selection present, update the grid accordingly.
7103
7104 * Thuban/UI/mainwindow.py (MainWindow.TableShow): Make the dialog
7105 resizeable and increase its initial size.
7106
7107 2003-05-26 Frank Koormann <[email protected]>
7108
7109 Table export functionality
7110
7111 * Thuban/Model/table.py (DBFTable.Width, MemoryTable.Width):
7112 Return width (in characters) for a column.
7113 (DBFTable.Precision, MemoryTable.Precision): Return decimal precision.
7114 (table_to_dbf): Write table to dbf file.
7115 (table_to_csv): Write table to csv file.
7116
7117 * Thuban/Model/transientdb.py (TransientTableBase.Width,
7118 TransientTableBase.Precision): Return column width and precision.
7119
7120 * Thuban/UI/tableview.py (QueryTableFrame.OnSaveAs): Call table_to_dbf
7121 or table_to_csv depending on file selection.
7122
7123 * test/test_dbf_table.py:
7124 Test table_to_dbf (extension of former part of test).
7125
7126 * test/test_csv_table.py:
7127 Test table_to_csv.
7128
7129 2003-05-23 Jan-Oliver Wagner <[email protected]>
7130
7131 * Thuban/UI/join.py (JoinDialog.OnJoin): Use _() for strings.
7132 Use QueryTableFrame instead of TableFrame.
7133
7134 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Prefix the
7135 table window with 'Layer Table:' instead of 'Table:'.
7136
7137 2003-05-23 Jan-Oliver Wagner <[email protected]>
7138
7139 Give all tables a title via mix-in TitledObject.LayerShowTable
7140
7141 * Thuban/Model/base.py (TitledObject.SetTitle): Call method 'issue'
7142 only if it exists.
7143
7144 * Thuban/Model/table.py (DBFTable, MemoryTable): mix-in TitledObject
7145 and call its init-method with a default title. Remove Title() method.
7146
7147 * Thuban/Model/transientdb.py (TransientTable, TransientJoinedTable,
7148 AutoTransientTable): mix-in TitledObject and call its init-method with
7149 a default title. Remove Title() method.
7150
7151 2003-05-23 Bernhard Herzog <[email protected]>
7152
7153 * Thuban/Model/session.py (Session.AddShapeStore): Define
7154 AddShapeStore analogously to AddTable.
7155
7156 * test/test_session.py (TestSessionSimple.test_add_shapestore):
7157 New. Test for AddShapeStore
7158
7159 2003-05-23 Jan-Oliver Wagner <[email protected]>
7160
7161 Introducing QueryTableFrame and a very coarse ShowTable implementation.
7162
7163 * Thuban/UI/tableview.py (LayerTableFrame, QueryTableFrame): Split the
7164 class LayerTableFrame into two classes, LayerTableFrame and QueryTableFrame.
7165 The latter implements the selection GUI without dependency on a layer.
7166 LayerTableFrame now is derived from QueryTableFrame and connects
7167 to a layer.
7168
7169 * Thuban/UI/mainwindow.py (MainWindow.TableShow): A very coarse
7170 implementation that still needs work.
7171
7172 * Thuban/Model/layer.py (Layer.TreeInfo): Added filename.
7173
7174 2003-05-22 Frank Koormann <[email protected]>
7175
7176 * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
7177 Added "outer_join = False" as optional parameter.
7178 (TransientJoinedTable.create): If outer join is true, perform a
7179 "LEFT OUTER JOIN" instead of "JOIN", which preserves all records of
7180 the left table. Records not matching are filled with 0 / None.
7181
7182 * Thuban/UI/join.py (JoinDialog.__init__): Checkbox for outer join.
7183 (JoinDialog.OnJoin): Consider outer join check box.
7184
7185 2003-05-22 Bernhard Herzog <[email protected]>
7186
7187 * Thuban/UI/join.py (JoinDialog.OnJoin): Use exc_info in a
7188 somewhat safer way. Storing the traceback in a local variable can
7189 lead to memory leaks
7190
7191 2003-05-22 Bernhard Herzog <[email protected]>
7192
7193 * Thuban/UI/join.py (JoinDialog.OnJoin): Make sure to really call
7194 the wxMessageDialog's Destroy() method.
7195
7196 2003-05-22 Frank Koormann <[email protected]>
7197
7198 * Thuban/UI/join.py (JoinDialog.__init__): Make use of
7199 TransientTable.Title()
7200
7201 2003-05-22 Frank Koormann <[email protected]>
7202
7203 Join Dialog, initial version.
7204
7205 * Thuban/UI/mainwindow.py (MainWindow.TableJoin): Removed print.
7206
7207 * Thuban/UI/join.py (JoinDialog): Functional implementation of
7208 former framework. Renamed Table1/Table2 to LeftTable/RightTable
7209 in all occurences.
7210
7211 * Thuban/Model/transientdb.py (TransientJoinedTable.__doc__):
7212 Typo fixed.
7213
7214 2003-05-22 Bernhard Herzog <[email protected]>
7215
7216 Give the tables titles so that the GUI can display more meaningful
7217 names. For now the titles are fixed but depend on e.g. filenames
7218 or the titles of the joined tables.
7219
7220 * Thuban/Model/transientdb.py (TransientTable.Title)
7221 (TransientJoinedTable.Title, AutoTransientTable.Title): New.
7222
7223 * Thuban/Model/table.py (DBFTable.Title, MemoryTable.Title): New.
7224
7225 * test/test_transientdb.py
7226 (TestTransientTable.test_auto_transient_table_title): New. Test
7227 for the Title method
7228 (TestTransientTable.test_transient_joined_table)
7229 (TestTransientTable.test_transient_table): Add test for the Title
7230 methods
7231
7232 * test/test_memory_table.py (TestMemoryTable.test_title): New.
7233 Test for the Title method
7234
7235 * test/test_dbf_table.py (TestDBFTable.test_title): New. Test for
7236 the Title method
7237
7238 2003-05-22 Bernhard Herzog <[email protected]>
7239
7240 * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
7241 Provide a better way to destroy the layers
7242 (TestLayer.test_base_layer, TestLayer.test_arc_layer)
7243 (TestLayer.test_point_layer, TestLayer.test_empty_layer)
7244 (TestLayer.test_polygon_layer, TestLayer.test_get_field_type): Use
7245 the new way to destroy the layers.
7246 (TestLayer.test_derived_store): New. Test for using a layer with a
7247 DerivedShapeStore
7248
7249 * Thuban/Model/layer.py (Layer.SetShapeStore): Only set the
7250 filename if the shape store actually has one.
7251
7252 2003-05-22 Bernhard Herzog <[email protected]>
7253
7254 * Thuban/Model/table.py (DBFTable.FileName): New. Accessor method
7255 for the filename
7256
7257 * test/test_dbf_table.py (TestDBFTable.test_filename): New. Test
7258 for the FileName method
7259 (TestDBFTableWriting.test_write): Fix spelling of filename
7260
7261 2003-05-22 Thomas Koester <[email protected]>
7262
7263 * Thuban/Model/range.py, test/test_range.py: Brought over new Range
7264 from SciParam that now really is immutable.
7265
7266 2003-05-22 Frank Koormann <[email protected]>
7267
7268 Layer Top/Bottom placement added to legend.
7269
7270 * Thuban/UI/legend.py
7271 (LegendPanel._OnMoveTop(), LayerPanel._OnMoveBottom): New, methods
7272 bound to tool events.
7273 (LegendTree.MoveCurrentItemTop(), LegendTree.MoveCurrentItemBottom):
7274 New, methods binding the event methods with the map methods.
7275
7276 * Thuban/Model/map.py (Map.TopLayer(), Map.BottomLayer()): New, place
7277 layer at top/bottom of layer stack.
7278
7279 * Resources/Bitmaps/top_layer.xpm: New button icon.
7280
7281 * Resources/Bitmaps/bottom_layer.xpm: New button icon.
7282
7283 2003-05-22 Bernhard Herzog <[email protected]>
7284
7285 * Thuban/Model/session.py (Session.RemoveTable): New method to
7286 remove tables
7287
7288 * test/test_session.py (TestSessionSimple.test_remove_table): New.
7289 Test for RemoveTable
7290
7291 2003-05-22 Thomas Koester <[email protected]>
7292
7293 * Thuban/Model/classgen.py: Added short module doc string and CVS id.
7294 (ClassGenerator.GenUniformDistribution): Use new Range __init__, too.
7295
7296 2003-05-22 Bernhard Herzog <[email protected]>
7297
7298 Implement a way to discover dependencies between tables and
7299 shapestores.
7300
7301 * Thuban/Model/transientdb.py (TransientTableBase.Dependencies)
7302 (TransientJoinedTable.Dependencies)
7303 (AutoTransientTable.SimpleQuery): New. Implement the dependencies
7304 interface
7305 (TransientJoinedTable.__init__): Keep tack of the original table
7306 objects in addition to the corresponding transient tables.
7307
7308 * Thuban/Model/table.py (DBFTable.Dependencies)
7309 (MemoryTable.Dependencies): New. Implement the dependencies
7310 interface
7311
7312 * Thuban/Model/data.py (ShapeTable): New. Helper class for
7313 ShapefileStore
7314 (ShapefileStore.__init__): Use ShapeTable instead of
7315 AutoTransientTable
7316 (ShapefileStore.Table, ShapefileStore.Shapefile): Add doc-strings
7317 (ShapefileStore.FileName, ShapefileStore.FileType): New. Accessor
7318 methods for filename and type
7319 (ShapefileStore.Dependencies): New. Implement the dependencies
7320 interface
7321 (DerivedShapeStore): New class to replace SimpleStore. The main
7322 difference to SimpleStore is that it depends not on a shapefile
7323 but another shapestore which expresses the dependencies a bit
7324 better
7325 (SimpleStore.__init__): Add deprecation warning.
7326
7327 * test/test_dbf_table.py (TestDBFTable.test_dependencies): New.
7328 Test for the Dependencies method.
7329
7330 * test/test_memory_table.py (TestMemoryTable.test_dependencies):
7331 New. Test for the Dependencies method.
7332
7333 * test/test_transientdb.py
7334 (TestTransientTable.test_auto_transient_table_dependencies): New.
7335 Test for the Dependencies method.
7336 (TestTransientTable.test_transient_joined_table): Add test for the
7337 Dependencies method.
7338
7339 * test/test_session.py (TestSessionSimple.setUp)
7340 (TestSessionSimple.tearDown): New. Implement a better way to
7341 destroy the sessions.
7342 (TestSessionSimple.test_initial_state)
7343 (TestSessionSimple.test_add_table): Bind session to self.session
7344 so that it's destroyed by tearDown
7345 (TestSessionSimple.test_open_shapefile): New. Test for
7346 OpenShapefile and the object it returns
7347
7348 2003-05-22 Bernhard Herzog <[email protected]>
7349
7350 * Thuban/Model/session.py (Session.AddTable): New method to
7351 register tables with the session.
7352 (Session.Tables): Return the tables registered with AddTable too.
7353
7354 * test/test_session.py (TestSessionSimple.test_add_table): New.
7355 Test case for the AddTable method
7356
7357 2003-05-22 Frank Koormann <[email protected]>
7358
7359 UI polishing updates: Place main buttons (OK, Cancel, etc) in the
7360 lower right corner, center labels for selections, initialize controls
7361 in reasonable order for keyboard navigation.
7362
7363 * Thuban/UI/projdialog.py (ProjFrame.__init__, ProjFrame.__doLayout)
7364 (ProjFrame.__DoOnProjAvail): Determine position of current projection
7365 using the wxListBox.FindString() method. Still a problem (#1886)
7366
7367 * Thuban/UI/classifier.py
7368 (Classifier.__init__, SelectPropertiesDialog.__init__)
7369
7370 * Thuban/UI/classgen.py (ClassGenDialog.__init__,
7371 (ClassGenDialog.__DoOnGenTypeSelect): Moved initialization of the
7372 different classification types from here to __init__.
7373 (GenUniquePanel.__init__): Set the column width of the first field
7374 in the Field ListCtrl to the full width.
7375
7376 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Rename 'Save As'
7377 Button to 'Export'. Center Buttons in Selection Box, set Focus to
7378 Grid.
7379 (LayerTableFrame.OnKeyDown()): New, bound to the grid with EVT_KEY_DOWN,
7380 changes focus to the Selection when pressing "Alt-S".
7381
7382 * Thuban/UI/legend.py (LegendTree.__SetVisibilityStyle): Only gray out
7383 the text if not visible. The italic font sometimes exceeds the
7384 rendering area.
7385
7386 2003-05-21 Jonathan Coles <[email protected]>
7387
7388 * Thuban/UI/dock.py (DockFrame): Rename references to _OnClose
7389 to OnClose so that Thuban closes correctly.
7390
7391 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Call
7392 DockFrame.OnClose, not DockFrame._OnClose.
7393
7394 2003-05-21 Jonathan Coles <[email protected]>
7395
7396 * Thuban/Model/classgen.py (ClassGenerator.GenQuantiles): Remove
7397 references to 'inf' and use new Range __init__ to pass floats
7398 directly rather than converting them to strings first.
7399 Fixes RTBug #1876.
7400
7401 * Thuban/Model/classification.py (ClassGroupRange.SetRange):
7402 Use new Range ___init__ to pass floats.
7403
7404 * Thuban/Model/layer.py (RasterLayer.__init__): Test if the
7405 filename is a valid image file. Throw IOError otherwise.
7406
7407 * Thuban/Model/range.py: Brought over new Range from SciParam that
7408 is immutable and has an __init__ which can accept floats.
7409
7410 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Move OpenShapefile
7411 into try block. AddLayer doesn't throw any exceptions anymore.
7412 (MainWindow.AddRasterLayer): Move constructor of RasterLayer into
7413 try block.
7414
7415 * Thuban/UI/projdialog.py (GeoPanel.__init__): Put Degrees as
7416 the first item in choices. Fixes RTBug #1882.
7417
7418 * Thuban/UI/renderer.py (MapRenderer.render_map): Check if scale
7419 has gone to 0 which is a serious problem. abort.
7420 (MapRenderer.draw_raster_layer): Catch IOError seperately and
7421 print the error from GDAL.
7422
7423 * Thuban/UI/tableview.py (TableGrid.__init__): Call
7424 ToggleEventListeners to turn on listening.
7425 (TableGrid.ToggleEventListeners): New. Turns event listening on
7426 and off so as to prevent excessive messages.
7427 (LayerTableFrame.OnQuery): Use TableGrid.ToggleEventListeners
7428 to suppress excessive messages when selecting many rows.
7429 Fixes RTBug #1880.
7430
7431 * Thuban/UI/view.py: Added checks against if scale == 0. This
7432 is a serious problem that can occur when an image without
7433 geo data is loading and causes the map projection bounds to
7434 go to infinity. Right now, the solution is to simply try
7435 to recover.
7436
7437 * extensions/thuban/cpl_mfile.cpp (MFILEClose): Make sure
7438 to set the MFILEReceiver attributes even if the data is NULL.
7439
7440 * extensions/thuban/gdalwarp.cpp: Improved the error handling
7441 and passed GDAL messages back up to the Python layer. Also
7442 tried to fix some memory leaks that were present in the original
7443 utility but didn't matter because the program aborted.
7444
7445 * test/test_range.py: Copied over tests from SciParam. Removed
7446 tests against importing. Fixes RTBug #1867.
7447
7448 2003-05-21 Bernhard Herzog <[email protected]>
7449
7450 * test/test_load.py: Remove unused imports and restructure the
7451 test code
7452 (LoadSessionTest): Split into one class for each test and turn
7453 LoadSessionTest itself into the base class for all such session
7454 tests.
7455 (ClassificationTest): New base class for load tests that test
7456 classifications
7457 (TestSingleLayer, TestLayerVisibility, TestClassification)
7458 (TestLabels, TestLayerProjection, TestRasterLayer): New classes
7459 for the individual tests
7460
7461 * test/support.py (FileLoadTestCase.filename): New base class for
7462 file loading tests
7463
7464 2003-05-21 Jan-Oliver Wagner <[email protected]>
7465
7466 * Resources/Projections/defaults.proj: Renamed 'Universal Transverse
7467 Mercator' to 'UTM Zone 32' as a more convenient example.
7468 Added 'Gauss Krueger Zone 6'.
7469
7470 * Data/iceland_sample_raster.thuban: political polygon now
7471 filled transparent to have the raster image visible at once.
7472
7473 2003-05-21 Frank Koormann <[email protected]>
7474
7475 * Thuban/UI/mainwindow.py (MainWindow): Renamed _OnClose() back to
7476 OnClose() to keep in sync with extensions. Internally Thuban
7477 still uses "underscored" names.
7478
7479 2003-05-20 Jonathan Coles <[email protected]>
7480
7481 This puts back Raster layer support. These layers support projections
7482 through the GDAL library. Currently, the CVS version is being used.
7483 There are no Debian packages available although this may change soon.
7484 A GDAL driver was extended to support writing to memory rather to
7485 files.
7486
7487 There is still some work that needs to be done, such as some error
7488 handling when loading invalid images or when there is a problem
7489 projecting the image. This putback simply checks in the majority
7490 of the work.
7491
7492 * setup.py: Add gdalwarp library extension.
7493
7494 * Thuban/Model/layer.py (BaseLayer.HasClassification): New.
7495 Defaults to False, but can be overridden by subclasses if they
7496 support classification.
7497 (RasterLayer): New. Defines a new layer that represents an
7498 image.
7499
7500 * Thuban/Model/load.py (SessionLoader.__init__): Add rasterlayer
7501 tag handler.
7502 (SessionLoader.start_layer): Encode the filename.
7503 (SessionLoader.start_rasterlayer, SessionLoader.end_rasterlayer):
7504 New. Supports reading a rasterlayer tag.
7505
7506 * Thuban/Model/map.py (Map.BoundingBox): Fix typo in comment.
7507
7508 * Thuban/Model/save.py (XMLWriter.encode): Don't assume that we
7509 get a string in Latin1. If we get such as string convert it to
7510 unicode first, otherwise leave if alone before encoding.
7511 (SessionSaver.write_layer): Add support for writing both Layers
7512 and RasterLayers.
7513
7514 * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
7515 The right argument may not be a string, it could also be a Column.
7516
7517 * Thuban/UI/application.py (ThubanApplication.CreateMainWindow):
7518 Make initial window size 600x400. Fixes RTBug #1872.
7519
7520 * Thuban/UI/classifier.py (Classifier.__init__): Rearrange how
7521 the dialog is constructed so that we can support layers that
7522 do not have classifications.
7523 (Classifier._OnTry): Only build a classification if the layer
7524 supports one.
7525
7526 * Thuban/UI/legend.py: Change all checks that a layer is an
7527 instance of Layer into checks against BaseLayer.
7528 (LegendTree.__FillTreeLayer): Only add children to a branch if
7529 the layer supports classification.
7530
7531 * Thuban/UI/mainwindow.py (MainWindow.NewSession,
7532 MainWindow.OpenSession): Don't proceed with an action if the
7533 user chooses Cancel when they are asked to save changes.
7534 (MainWindow.AddRasterLayer): New. Open a dialog to allow the
7535 user to select an image file. Create a new RasterLayer and add
7536 it to the map.
7537
7538 * Thuban/UI/renderer.py (MapRenderer.render_map): Add support
7539 for rendering RasterLayer layers.
7540 (MapRenderer.draw_raster_layer): Actually method that calls
7541 the GDALWarp python wrapper and constructs an image from the
7542 data returned.
7543
7544 * Thuban/UI/tableview.py (LayerTableFrame.__init__): Change the
7545 Choices symbols to match those used in the table query method.
7546 Replace deprecated method calls on table with new method names.
7547
7548 * Thuban/UI/view.py (MapCanvas.set_view_transform): Try to limit
7549 how small the scale can get. This still needs more testing.
7550
7551 * extensions/thuban/bmpdataset.cpp: New, but copied from GDAL.
7552 Provides a driver to output in .bmp format.
7553
7554 * extensions/thuban/cpl_mfile.cpp, extensions/thuban/cpl_mfile.h:
7555 New. Provides IO routines which write to memory, rather than a file.
7556
7557 * extensions/thuban/gdalwarp.cpp: New, but basically a direct copy
7558 of the gdalwarp utility provided in GDAL. Added function calls
7559 that can be accessed from python.
7560
7561 * Data/iceland_sample_raster.thuban: New. Sample file that uses
7562 a raster layer.
7563
7564 * Data/iceland/island.tfw, Data/iceland/island.tif: New. Raster
7565 layer image data.
7566
7567 * Doc/thuban.dtd: Added rasterlayer attribute definition.
7568
7569 * test/test_layer.py, test/test_load.py, test/test_save.py: Added
7570 tests associated with the raster layer code.
7571
7572 * test/test_transientdb.py
7573 (TestTransientTable.test_auto_transient_table_query): Added a test
7574 for using a Column object as the "right" parameter to a query.
7575
7576 2003-05-19 Frank Koormann <[email protected]>
7577
7578 * Thuban/version.py (get_changelog_date):
7579 Catch exceptions if ChangeLog does not exist.
7580
7581 * Thuban/UI/view.py (MapCanvas.Export): Bugfix
7582
7583 2003-05-19 Frank Koormann <[email protected]>
7584
7585 Extended version information for Thuban
7586
7587 * Thuban/version.py: New, version information for Thuban: Last
7588 modification date and last ChangeLog entry date.
7589
7590 * Thuban/UI/mainwindow.py (MainWindow.About()): Extended version
7591 information: Display Thuban, wxPython and Python version.
7592
7593 2003-05-16 Bernhard Herzog <[email protected]>
7594
7595 * Thuban/Model/save.py: Remove some unused imports including the
7596 __future__ import for nested_scopes as Thuban relies on Python 2.2
7597 now.
7598 (XMLWriter.encode): Remove the special case for a None argument.
7599 In the saver encode is always called with a string argument.
7600
7601 2003-05-16 Bernhard Herzog <[email protected]>
7602
7603 * Thuban/UI/__init__.py: Remove the work-around for the locale bug
7604 in wxPython (at least when usinvg wxGTK) prior to 2.4. The symptom
7605 of the bug was that e.g. float("1.2") would fail. Thuban now
7606 requires 2.4.x.
7607
7608 2003-05-16 Frank Koormann <[email protected]>
7609
7610 Printing enhancement and WMF export (under Win32)
7611
7612 * Thuban/UI/renderer.py (ExportRenderer): New, derived from
7613 ScreenRenderer. Renders Map, Legend and Scalebar for export.
7614 (PrinterRenderer): New, derived from ExportRenderer. Replaces the old
7615 PrintRender.
7616
7617 * Thuban/UI/view.py (MapPrintout.__init__): Enhanced parameter set
7618 to fullfil information needed for PrinterRenderer.
7619 (MapCanvas.Export): New. Export Map (currently only to WMF on Win32).
7620 (MapCanvas.Print): Adapted to new MapPrintout.
7621 (OutputTransform): General calculations to transform from canvas
7622 coordinates to export/printing devices.
7623
7624 * Thuban/UI/mainwindow.py (MainWindow.ExportMap()): New. Added also
7625 new method_command to call ExportMap, with platform dependency (only
7626 __WXMSW__)
7627
7628 * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Position and Size
7629 of scalebar drawing area as new parameters.
7630
7631 * Thuban/Model/scalebar.py (roundInterval): round long instead of int
7632
7633 * Thuban/UI/legend.py (ScalebarBitmap.__SetScale):
7634 Update to extended scalebar.DrawScalebar header.
7635
7636 * test/test_export.py: New, test Thuban.UI.view.OutputTransform()
7637
7638 * test/test_scalebar.py: Made test executable as standalone.
7639
7640 2003-05-16 Bernhard Herzog <[email protected]>
7641
7642 * Thuban/Model/table.py (Table): Remove this compatibility alias
7643 for DBFTable.
7644
7645 * test/test_table.py: Import DBFTable as Table because that alias
7646 doesn't exist anymore.
7647
7648 * Thuban/UI/classgen.py: Remove some unused imports
7649
7650 2003-05-14 Jonathan Coles <[email protected]>
7651
7652 * Thuban/Model/classgen.py (ClassGenerator.GenSingletonsFromList):
7653 Fix docstring.
7654 (ClassGenerator.GenUniformDistribution): Fix spelling of method name.
7655 (ClassGenerator.GenQuantiles): Use the left/right brackets and min/max
7656 values of the supplied range to determine the beginning and end
7657 bounds of the generated classes.
7658
7659 * Thuban/Model/range.py (Range.number_re): Now accepts floats that
7660 do not have a leading 0 (.5 is now accepted as well as 0.5).
7661
7662 * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Fix name of method
7663 call to ClassGenerator.GenUniformDistribution.
7664
7665 * Thuban/UI/projdialog.py (ProjFrame.__do_layout): Fix Windows
7666 layout bug with the 'Projection' label.
7667
7668 * test/support.py (FloatTestCase): New. Needed for the Range tests.
7669
7670 * test/test_range.py: New. Imported from SciParam.
7671
7672 2003-05-12 Jonathan Coles <[email protected]>
7673
7674 * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Replace call
7675 to table.UniqueValues() with calls that retrieve all the values
7676 from the table. This will need to be replaced by a method on table
7677 which can simply return the list (perhaps more efficiently).
7678
7679 2003-05-12 Jonathan Coles <[email protected]>
7680
7681 The return value of ClassGenerator.CalculateQuantiles has changed.
7682 Refer to the documentation for details.
7683
7684 * test/test_classgen.py: Modified Quantile tests to use the
7685 new return values.
7686
7687 * Thuban/Model/classgen.py
7688 (ClassGenerator.GenQuantiles): Add comments describing the parameters,
7689 use new return values from CalculateQuantiles to produce the correct
7690 range bounds in the Classification.
7691 (ClassGenerator.CalculateQuantiles): Add more comments describing
7692 the return values and parameters. Make minor adjustments to improve
7693 the legibility of the code. Fix problem with adjusted not being set
7694 in most cases.
7695
7696 2003-05-12 Frank Koormann <[email protected]>
7697
7698 * Thuban/Model/save.py (XMLWriter.encode()): Explicite call to unicode
7699 and latin1. Fixes #1851 finally.
7700
7701 2003-05-09 Jonathan Coles <[email protected]>
7702
7703 * test/test_classgen.py: New. Tests the Quantile algorithm.
7704
7705 * Thuban/Model/classgen.py (ClassGenerator.CalculateQuantiles):
7706 Clean up debugging statement, add comments, fix a small bug in the
7707 returned adjusted percentiles.
7708
7709 2003-05-09 Jonathan Coles <[email protected]>
7710
7711 Introduces Range class from SciParam into the ClassGroupRange class,
7712 and such ranges can now be saved and loaded from disk.
7713
7714 Quantiles are now available in the Classification Generator.
7715
7716 Initial support for building Queries on a table. Doesn't do anything
7717 but run some tests.
7718
7719 * Thuban/Model/classification.py: Explicit imports.
7720 (ClassGroupRange): Use the Range class to store the underlying
7721 range information. The interface remains the same, except for
7722 GetRange(), and you can also supply a Range object as the min
7723 parameter to SetRange or __init__.
7724
7725 * Thuban/Model/load.py (XMLReader.encode): New. Encodes the given
7726 string appropriately for use in Thuban. Fixes RTbug #1851.
7727 (SessionLoader.end_projection): Handle the context of the
7728 projection tag a bit better by looking at what objects are not
7729 None. There was an assumption that a projection tag for a map
7730 could occur before any layers.
7731 (SessionLoader.start_clrange): Provide backward compatibility for
7732 reading min/max values as well as the new range parameter.
7733
7734 * Thuban/Model/map.py: Explicit imports.
7735
7736 * Thuban/Model/resource.py: Import _.
7737 (ProjFileSaver.write): write header using projfile.dtd.
7738
7739 * Thuban/Model/save.py: Explicit imports.
7740 (XMLWriter.encode): New. Encode the given string from a format
7741 used by Thuban into UTF-8. Fixes RTbug #1851.
7742
7743 * Thuban/UI/classgen.py: Explicit imports.
7744 (ClassGenDialog.__init__): Clean up the code and add support
7745 for Quantiles.
7746 (ClassGenDialog.OnOK): Add support for Quantiles.
7747 (GenQuantilesPanel): New. Input panel for Quantiles.
7748 (ClassGenerator, CustomRamp, MonochromaticRamp, GreyRamp, RedRamp,
7749 GreenRamp, BlueRamp, HotToColdRamp): Move to Thuban/Model/classgen.py
7750
7751 * Thuban/Model/classgen.py: New. Contains all the classes named above.
7752
7753 * Thuban/UI/classifier.py: Explicit imports.
7754 (ClassTable.GetValueAsCust, ClassTable.__ParseInput,
7755 ClassTable.SetValueAsCustom): Reworked to use new Range class.
7756
7757 * Thuban/UI/legend.py: Explicit imports.
7758
7759 * Thuban/UI/mainwindow.py: Add support for the Join Dialog. Added
7760 a Table menu and associated method calls.
7761 (MainWindow.choose_color): Removed. No longer needed.
7762
7763 * Thuban/UI/projdialog.py (ProjFrame.__VerifyButtons): Save button
7764 should be disabled if no projection is selected in the available
7765 list.
7766
7767 * Thuban/UI/renderer.py: Explicit imports.
7768
7769 * Thuban/UI/tableview.py (TableGrid.OnRangeSelect): Fix some issues
7770 with correctly selecting the rows and issuing the right events.
7771 Be sure to call Skip() to allow the grid to do some of its own
7772 handling which allows the rows to actually be selected.
7773 (LayerTableGrid.select_shapes): Rename from select_shape. Supports
7774 selecting multiple shapes.
7775 (LayerTableFrame): Support for building Queries.
7776 (LayerTableFrame.select_shapes): Allow multiple shapes to be selected.
7777
7778 * Thuban/UI/tree.py: Explicit imports.
7779
7780 * Thuban/UI/view.py (MapCanvas): Delegate "SelectedShapes" so the
7781 table view can call it.
7782
7783 * test/test_classification.py: Explicit imports.
7784 (TestClassification.test_ClassGroupRange): Fix test for new
7785 Range class.
7786
7787 * Doc/thuban.dtd: Add range parameter for clrange.
7788
7789 * Thuban/Model/range.py: Taken from SciParam. Used as the underlying
7790 object in ClassGroupRange, and also uesd for inputting ranges in
7791 the classifer table and elsewhere.
7792
7793 * Thuban/UI/join.py: New. Initial Join dialog. No real functionality
7794 yet.
7795
7796 2003-05-09 Frank Koormann <[email protected]>
7797
7798 * Thuban/UI/scalebar.py (DrawScaleBar): Draw only if interval > 0.0.
7799
7800 2003-05-08 Frank Koormann <[email protected]>
7801
7802 Coding style updates
7803
7804 * test/test_scalebar.py: Replaced tab indentation by spaces.
7805
7806 * Thuban/UI/scalebar.py: Explicit imports.
7807
7808 2003-05-08 Frank Koormann <[email protected]>
7809
7810 * Thuban/UI/scalebar.py
7811 (ScaleBar.DrawScalebar): Format string bug fixed.
7812
7813 2003-05-08 Frank Koormann <[email protected]>
7814
7815 Reorganization of scalebar component (no wx in Thuban/Model)
7816
7817 * Thuban/Model/scalebar.py: Rendering moved to Thuban/UI/scalebar.py
7818 (deriveInterval):
7819 Calculate scalebar interval and unit which fits in width for scale.
7820 (roundInterval): Round float.
7821
7822 * Thuban/UI/scalebar.py (ScaleBar): Scalebar rendering
7823
7824 * test/test_scalebar.py: Test for Thuban/Model/scalebar.py methods.
7825
7826 * Thuban/UI/legend.py: Import Thuban.UI.scalebar
7827
7828 2003-05-08 Frank Koormann <[email protected]>
7829
7830 * Thuban/UI/legend.py (ScalebarBitmap.SetCanvas):
7831 Initialize ScaleBar with canvas.map
7832
7833 * Thuban/Model/scalebar.py (ScaleBar.roundInterval()): New,
7834 round intervals to display smarter lengths
7835 (ScaleBar.DrawScalebar): Draw Scalebar only if the map contains a
7836 layer. If the maps has no projection applied grey the scalebar.
7837
7838 2003-05-07 Frank Koormann <[email protected]>
7839
7840 Basic Scalebar features added.
7841
7842 * Thuban/Model/scalebar.py (ScaleBar): New, scalebar rendering.
7843
7844 * Thuban/UI/legend.py (LegendPanel): Added scalebar bitmap
7845 (ScaleBarBitmap): New, links the scalebar bitmap with view messages
7846 and the renderer.
7847
7848 * Thuban/UI/view.py (MapCanvas.set_view_transform): Issue SCALE_CHANGED.
7849
7850 * Thuban/UI/messages.py: SCALE_CHANGED added.
7851
7852 2003-05-07 Bernhard Herzog <[email protected]>
7853
7854 * Thuban/Model/session.py (Session.__init__): New instance
7855 variable shapestores to hold a list of all open shapestore objects
7856 (Session.ShapeStores): New. Accessor method for the shapestores
7857 list.
7858 (Session._add_shapestore, Session._clean_weak_store_refs): New.
7859 Internal methods to maintain the shapestores list.
7860 (Session.Tables): New. Return all tables open in the session.
7861 (Session.OpenShapefile): Insert the new ShapeStore into the
7862 shapestores list.
7863
7864 * test/test_session.py (TestSessionSimple.test_initial_state): Add
7865 tests for ShapeStores and Tables
7866 (TestSessionWithContent.test_shape_stores)
7867 (TestSessionWithContent.test_tables): New. Test cases for
7868 ShapeStores and Tables
7869
7870 2003-05-07 Bernhard Herzog <[email protected]>
7871
7872 * Thuban/Model/transientdb.py (TransientTableBase.ReadRowAsDict):
7873 Add comments about the optimizations used.
7874 (AutoTransientTable.ReadValue, TransientTableBase.ReadValue): New.
7875 Implement the ReadValue table interface method.
7876
7877 * test/test_transientdb.py
7878 (TestTransientTable.run_iceland_political_tests)
7879 (TestTransientTable.test_transient_joined_table): Add tests for
7880 ReadValue
7881
7882 2003-05-07 Frank Koormann <[email protected]>
7883
7884 * Resources/Bitmaps/fulllayerextent.xpm,
7885 Resources/Bitmaps/fullselextent.xpm: Replaced the place holders with
7886 new icons.
7887
7888 2003-05-06 Bernhard Herzog <[email protected]>
7889
7890 * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
7891 New. Simply delegate to the transient table's version.
7892
7893 * test/test_transientdb.py
7894 (TestTransientTable.test_auto_transient_table_query): New. Test
7895 case for AutoTransientTable's SimpleQuery
7896
7897 2003-05-06 Bernhard Herzog <[email protected]>
7898
7899 * Thuban/Model/transientdb.py (TransientTableBase.SimpleQuery):
7900 Implement a simple query method for the query dialog
7901 (TransientTableBase.create): Add an INTEGER PRIMARY KEY that holds
7902 the row index or shapeid.
7903 (TransientTable.create): Insert the right value of the row index
7904 (TransientJoinedTable.create): Copy the row index of the left
7905 table to the joined result table
7906
7907 * test/test_transientdb.py
7908 (TestTransientTable.test_transient_table_read_twice): Fix
7909 doc-string
7910 (TestTransientTable.test_transient_table_query): New. Test for the
7911 SimpleQuery method
7912
7913 2003-05-06 Bernhard Herzog <[email protected]>
7914
7915 Convert all table users to use the new table interface. This only
7916 covers Thuban itself, not GREAT-ER or other applications built on
7917 Thuban yet, so the compatibility interface stays in place for the
7918 time being but it now issues DeprecationWarnings.
7919
7920 Finally, the new Table interface has a new method, HasColumn.
7921
7922 * Thuban/Model/table.py (OldTableInterfaceMixin): All methods
7923 issue deprecation warnings when they're. The warnings refer to the
7924 caller of the method.
7925 (OldTableInterfaceMixin.__deprecation_warning): New. Helper method
7926 for the deprecation warnings
7927
7928 * test/test_table.py: Ignore the deprecation warnings for the old
7929 table in the tests in this module. The purpose of the tests is to
7930 test the old interface, after all.
7931
7932 * test/test_transientdb.py
7933 (TestTransientTable.run_iceland_political_tests): Use the
7934 constants for the types. Add a test for HasColumn
7935 (TestTransientTable.test_transient_joined_table): Adapt to new
7936 table interface. Add a test for HasColumn
7937 (TestTransientTable.test_transient_table_read_twice): Adapt to new
7938 table interface
7939
7940 * Thuban/UI/tableview.py (DataTable.SetTable, DataTable.GetValue):
7941 Adapt to new table interface
7942
7943 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Adapt to
7944 new table interface
7945
7946 * Thuban/UI/controls.py (RecordListCtrl.fill_list)
7947 (RecordTable.SetTable): Adapt to new table interface
7948
7949 * Thuban/UI/classifier.py (Classifier.__init__)
7950 (Classifier.__init__): Adapt to new table interface
7951
7952 * Thuban/UI/classgen.py (ClassGenDialog.__init__)
7953 (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve): Adapt
7954 to new table interface
7955
7956 * Thuban/Model/transientdb.py (TransientTableBase.HasColumn)
7957 (AutoTransientTable.HasColumn): Implement the new table interface
7958 method
7959 (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ValueRange)
7960 (AutoTransientTable.UniqueValues): Adapt to new table interface
7961
7962 * Thuban/Model/layer.py (Layer.SetShapeStore, Layer.GetFieldType):
7963 Adapt to new table interface
7964
7965 * test/test_layer.py (TestLayer.open_shapefile): Helper method to
7966 simplify opening shapefiles a bit easier.
7967 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
7968 (TestLayer.test_point_layer): Use the new helper method
7969 (TestLayer.test_get_field_type): New. Test for the GetFieldType
7970 method
7971
7972 * test/test_dbf_table.py (TestDBFTable.test_has_column): Test for
7973 the new table method
7974
7975 * test/test_memory_table.py (TestMemoryTable.test_has_column):
7976 Test for the new table method HasColumn
7977
7978 2003-05-06 Jonathan Coles <[email protected]>
7979
7980 Addresses the "Selection Extent" wish of RTbug #1787.
7981
7982 * Resources/Bitmaps/fulllayerextent.xpm,
7983 Resources/Bitmaps/fullselextent.xpm: Bitmaps for layer and selection
7984 extent. These are just place holders for the real bitmaps.
7985
7986 * Thuban/Model/layer.py (Shape): Since a Shape is immutable only
7987 calculate the bounding box once (the first time compute_bbox() is
7988 called).
7989 (Layer.ShapesBoundingBox): New. Given a list of shape ids, return
7990 the bounding box for the shapes in lat/long coordinates.
7991
7992 * Thuban/UI/mainwindow.py: Added new "Full selection extent" menu
7993 option.
7994 (MainWindow.has_selected_shapes): New. Returns true if there are
7995 any selected shapes.
7996 (MainWindow.FullSelectionExtent): New. Calls
7997 MapCanvas.FitSelectedToWindow() when the user selects the menu option.
7998 (_has_selected_shapes): New. Returns true if there are any
7999 selected shapes.
8000
8001 * Thuban/UI/selection.py (Selection.HasSelectedShapes): New. Returns
8002 true if there are any selected shapes.
8003
8004 * Thuban/UI/view.py (MapCanvas): Added delegated method
8005 HasSelectedShapes.
8006 (MapCanvas.FitSelectedToWindow): New. Centers and scales any selected
8007 shapes on the canvas using the map projection (if any).
8008
8009 * test/test_layer.py (TestLayer.test_arc_layer): Add some tests
8010 for Layer.ShapesBoundingBox().
8011
8012 2003-05-06 Bernhard Herzog <[email protected]>
8013
8014 * Resources/Projections/defaults.proj: Fix spelling of Mercator
8015
8016 2003-05-05 Jonathan Coles <[email protected]>
8017
8018 Addresses the "Full Layer Extent" wish of RTbug #1787.
8019
8020 * Resources/Projections/defaults.proj: Added UK National Grid.
8021
8022 * Thuban/UI/mainwindow.py: Added new "Full layer extent" menu option.
8023 (MainWindow.FullLayerExtent): New. Calls MapCanvas.FitLayerToWindow()
8024 when the user selects the menu option.
8025
8026 * Thuban/UI/view.py (MapCanvas.FitLayerToWindow): New. Centers and
8027 scales the given layer on the canvas using the map projection.
8028
8029 2003-05-05 Bernhard Herzog <[email protected]>
8030
8031 Convert the table implementations to a new table interface. All
8032 tables use a common mixin class to provide backwards compatibility
8033 until all table users have been updated.
8034
8035 * Thuban/Model/table.py (OldTableInterfaceMixin): Mixin class to
8036 provide backwards compatibility for table classes implementing the
8037 new interface
8038 (DBFTable, MemoryTable): Implement the new table interface. Use
8039 OldTableInterfaceMixin as base for compatibility
8040 (DBFColumn, MemoryColumn): New. Column description for DBFTable
8041 and MemoryTable resp.
8042
8043 * test/test_dbf_table.py: New. Test cases for the DBFTable with
8044 the new table interface.
8045
8046 * test/test_memory_table.py: New. Test cases for the MemoryTable
8047 with the new table interface.
8048
8049 * test/test_table.py: Document the all tests in this file as only
8050 for backwards compatibility. The equivalent tests for the new
8051 interface are in test_memory_table.py and test_dbf_table.py
8052 (MemoryTableTest.test_read): field_info should be returning tuples
8053 with four items
8054 (MemoryTableTest.test_write): Make doc-string a more precise.
8055
8056 * Thuban/Model/transientdb.py (TransientTableBase): Convert to new
8057 table interface. Derive from from OldTableInterfaceMixin for
8058 compatibility.
8059 (TransientTableBase.create): New intance variable column_map to
8060 map from names and indices to column objects
8061 (TransientTable.create): Use the new table interface of the input
8062 table
8063 (AutoTransientTable): Convert to new table interface. Derive from
8064 from OldTableInterfaceMixin for compatibility.
8065 (AutoTransientTable.write_record): Removed. It's not implemented
8066 yet and we still have to decide how to handle writing with the new
8067 table and data framework.
8068
8069 * test/test_transientdb.py
8070 (TestTransientTable.run_iceland_political_tests)
8071 (TestTransientTable.test_transient_joined_table): Use the new
8072 table interface
8073
8074 2003-05-05 Jonathan Coles <[email protected]>
8075
8076 This is namely a collection of UI updates to improve user interactivity.
8077 Tabbing between controls now exists and you can use ESC to close dialog
8078 boxes; ENTER will active the default button.
8079
8080 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Rearrange the
8081 order that the controls are created so that tabbing works correctly.
8082 (ClassGenDialog.OnOK): Renamed from _OnGenerate() so that the
8083 wxDialog can handle the default button correctly.
8084 (ClassGenDialog.OnCancel): Renamed from _OnCloseBtn() for the
8085 same reasons as for OnOK.
8086 (GenUniformPanel._OnRetrieve): Call wxBeginBusyCursor/wxEndBusyCursor
8087 when we ask the table for the maximum/minimum values of a field
8088 which could take a very long time.
8089
8090 * Thuban/UI/classifier.py (Classifier.__init__): Rearrange the
8091 order that the controls are created so that tabbing works correctly.
8092 (SelectPropertiesDialog.__init__): Rearrange the order that the
8093 controls are created so that tabbing works correctly.
8094
8095 * Thuban/UI/dialogs.py: Copied NonModalDialog box and changed it
8096 to derive from a wxDialog but behave like the original implementation
8097 which was derived from a wxFrame. wxDialog provides useful key
8098 handling functionality like ESC calling OnCancel and ENTER calling
8099 OnOK which is lost with wxFrame.
8100
8101 * Thuban/UI/mainwindow.py: Add "..." to menu items that will open
8102 new dialogs.
8103
8104 * Thuban/UI/projdialog.py (ProjFrame.__init__): Rearrange the
8105 order that the controls are created so that tabbing works correctly.
8106 (ProjFrame.OnApply): Renamed from _OnTry() to use wxDialog behaviour.
8107 (ProjFrame.OnOK): Renamed from _OnOK() to use wxDialog behaviour.
8108 (ProjFrame.OnCancel): Renamed from _OnClose() to use wxDialog behaviour.
8109 (ProjPanel.__init__): Add "Airy" to the list of ellipsoids so we
8110 can provide the "UK National Grid" as a default projection.
8111 (UTMPanel.__init__): Rearrange the order that the controls are
8112 created so that tabbing works correctly.
8113
8114 2003-05-05 Bernhard Herzog <[email protected]>
8115
8116 * extensions/thuban/wxproj.cpp: Fix some of the comments.
8117 (project_point): If a map projection but no layer projection is
8118 given, convert degrees to radians before applying the map
8119 projection.
8120
8121 * Thuban/UI/tableview.py (TableGrid.disallow_messages)
8122 (TableGrid.allow_messages): New methods to make it possible to
8123 inhibit message sending.
8124 (TableGrid.issue): Only send the message if not inhibited.
8125 (LayerTableGrid.select_shape): Use the new methods to make sure
8126 that no ROW_SELECTED message is sent while we're updating the
8127 selected rows to match the selected shapes.
8128
8129 2003-05-02 Jan-Oliver Wagner <[email protected]>
8130
8131 Implementation of MemoryTable.
8132
8133 * Thuban/Model/table.py (MemoryTable): New. Quite simple table
8134 implementation that operates on a list of tuples. All of the data
8135 are kept in the memory.
8136
8137 * test/test_table.py (MemoryTableTest): New.
8138
8139 * test/test_transientdb.py (SimpleTable): Removed.
8140 (TestTransientTable.test_transient_joined_table,
8141 (TestTransientTable.test_transient_table_read_twice): Replaced
8142 SimpleTable by MemoryTable.
8143
8144 2003-04-30 Jonathan Coles <[email protected]>
8145
8146 * Data/iceland_sample.thuban: Now contains correct projections
8147 for each of the layers.
8148
8149 * Resources/Projections/defaults.proj: Geographic projection
8150 contains unit conversion parameter.
8151
8152 2003-04-30 Jonathan Coles <[email protected]>
8153
8154 The most important part of this putback is the projection changes.
8155 It should now be possible to specify the projection that a layer
8156 is in and then specify a different projection for the map. The
8157 projection dialog has an extra parameter for a geographic projection
8158 which lets the user select if the input is in degrees or radians.
8159
8160 * Thuban/Model/layer.py (Layer.ShapesInRegion): Fix docstring
8161 to say that the parameter is a tuple of unprojected
8162 points (which is what the callers to this method were assuming).
8163 Also, since the points are unprojected we need to projected them.
8164
8165 * Thuban/UI/legend.py (LegendTree.MoveCurrentItemUp,
8166 LegendTree.MoveCurrentItemDown): If the layer or any of the layer's
8167 groups are selected, move the layer up/down. Fixes RTbug #1833.
8168
8169 * Thuban/UI/mainwindow.py: Move menu item map_rename up.
8170
8171 * Thuban/UI/projdialog.py (ProjFrame._OnSave): Add missing
8172 parameter in call to SetClientData.
8173 (GeoPanel): Add support for selecting the units that the
8174 source data is in (Radians or Degrees).
8175
8176 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Optimize
8177 the rendering loop by reducing the number of if's, removing the
8178 unnecessary try/except block, and checking if the old group
8179 is the same as the new one (which happens a lot if there is
8180 no classification, or lots of shapes are in the same group).
8181
8182 * Thuban/UI/view.py (MapCanvas.OnPaint): Add a try/except block
8183 around the redraw routine to try to catch problems that the user
8184 may create by selecting invalid projections for the data set and
8185 map. Clears the display if there are any problems and prints the
8186 error.
8187 (MapCanvas.do_redraw): Use DC.Clear() instead of drawing a filled
8188 rectangle.
8189
8190 * extensions/thuban/wxproj.cpp (project_point): First invert the
8191 supplied point (which should be in projected coordinates) using
8192 the layer's projection and then project the point using the
8193 map's projection.
8194 (project_points): Use project_point() to project each point.
8195
8196 2003-04-30 Jan-Oliver Wagner <[email protected]>
8197
8198 * Thuban/Model/layer.py (Layer.SetShapeStore): Fixed a bug:
8199 don't set the Classification to None if the classfication field
8200 is None (ie only a DEFAULT).
8201
8202 2003-04-30 Bernhard Herzog <[email protected]>
8203
8204 * Thuban/UI/view.py: Fix some typos.
8205
8206 * Thuban/UI/mainwindow.py (MainWindow.identify_view_on_demand): Do
8207 not pop up the dialog if the selection becomes empty (this could
8208 happen if e.g. a new selection is opened while the identify tool
8209 is active and dialog had been closed)
8210
8211 2003-04-30 Bernhard Herzog <[email protected]>
8212
8213 * Thuban/Model/transientdb.py (TransientTableBase.__init__): New
8214 instance variable read_record_last_result
8215 (TransientTableBase.read_record): Make sure reading the same
8216 record twice works. The implementation uses the new instance
8217 variable read_record_last_result
8218
8219 * test/test_transientdb.py
8220 (TestTransientTable.test_transient_table_read_twice): New test
8221 case for the above bug-fix.
8222
8223 2003-04-29 Jonathan Coles <[email protected]>
8224
8225 * Thuban/common.py: Removed. No longer needed Str2Num. RTbug #1832.
8226
8227 * Thuban/UI/classgen.py: Remove all uses of Str2Num.
8228
8229 * Thuban/UI/classifier.py: Remove all uses of Str2Num.
8230 (ClassTable.SetValueAsCustom): Rename keyword argument in
8231 ClassGroup* constructors to match argument name.
8232
8233 2003-04-29 Bernhard Herzog <[email protected]>
8234
8235 * Thuban/Model/session.py (Session.Destroy): Explicitly close the
8236 transient DB if it exists to make sure it doesn't leave a journal
8237 file in the temp directory.
8238
8239 * Thuban/Model/transientdb.py (TransientDatabase.close): Set
8240 self.conn to None after closing the connection to make sure it's
8241 not closed twice
8242
8243 2003-04-29 Jonathan Coles <[email protected]>
8244
8245 Add a visible parameter in the layer XML tag. The default value is
8246 "true". If anything other than "false" is specified we also assume
8247 "true". Addresses RTbug #1025.
8248
8249 * Doc/thuban.dtd: Add visible parameter to a layer.
8250
8251 * Thuban/Model/layer.py (BaseLayer.__init__): Change default value
8252 of visible from 1 to True.
8253 (Layer.__init__): Change default value of visible from 1 to True.
8254
8255 * Thuban/Model/load.py (SessionLoader.start_layer): Read visible
8256 parameter.
8257
8258 * Thuban/Model/save.py (SessionSaver.write_layer): Save visible
8259 parameter.
8260
8261 * test/test_load.py: Add new test data contents_test_visible.
8262 (LoadSessionTest.setUp): save test data.
8263 (LoadSessionTest.testLayerVisibility): Test if the visible flag
8264 is loaded correctly.
8265
8266 * test/test_save.py (SaveSessionTest.testSingleLayer): Add test
8267 for saving an invisible layer.
8268
8269 2003-04-29 Jonathan Coles <[email protected]>
8270
8271 * Thuban/UI/mainwindow.py (MainWindow.SetMap): Look up the
8272 legend dialog box and tell it to change its map to the one
8273 supplied to SetMap(). Fixes RTbug #1770.
8274
8275 2003-04-29 Bernhard Herzog <[email protected]>
8276
8277 Next step of table implementation. Introduce a transient database
8278 using SQLite that some of the data is copied to on demand. This
8279 allows us to do joins and other operations that require an index
8280 for good performance with reasonable efficiency. Thuban now needs
8281 SQLite 2.8.0 and pysqlite 0.4.1. Older versions may work but I
8282 haven't tested that.
8283
8284 * Thuban/Model/transientdb.py: New. Transient database
8285 implementation.
8286
8287 * test/test_transientdb.py: New. Tests for the transient DB
8288 classes.
8289
8290 * Thuban/Model/session.py (AutoRemoveFile, AutoRemoveDir): New
8291 classes to help automatically remove temporary files and
8292 directories.
8293 (Session.__init__): New instance variables temp_dir for the
8294 temporary directory and transient_db for the SQLite database
8295 (Session.temp_directory): New. Create a temporary directory if not
8296 yet done and return its name. Use AutoRemoveDir to have it
8297 automatically deleted
8298 (Session.TransientDB): Instantiate the transient database if not
8299 done yet and return it.
8300
8301 * Thuban/Model/data.py (ShapefileStore.__init__): Use an
8302 AutoTransientTable so that data is copied to the transient DB on
8303 demand.
8304 (SimpleStore): New class that simply combines a table and a
8305 shapefile
8306
8307 * Thuban/Model/table.py (Table, DBFTable): Rename Table into
8308 DBFTable and update its doc-string to reflect the fact that this
8309 is only the table interface to a DBF file. Table is now an alias
8310 for DBFTable for temporary backwards compatibility.
8311
8312 * Thuban/UI/application.py (ThubanApplication.OnExit): Make sure
8313 the last reference to the session goes away so that the temporary
8314 files are removed properly.
8315
8316 * test/test_load.py (LoadSessionTest.tearDown): Remove the
8317 reference to the session to make sure the temporary files are
8318 removed.
8319
8320 2003-04-29 Bernhard Herzog <[email protected]>
8321
8322 * Thuban/Model/load.py (XMLReader.__init__, XMLReader.read): Turn
8323 the __parser instance variable into a normal local variable in
8324 read. It's only used there and read will never be called more than
8325 once. Plus it introduces a reference cycle that keeps can keep the
8326 session object alive for a long time.
8327
8328 2003-04-29 Jonathan Coles <[email protected]>
8329
8330 * Thuban/Model/proj.py (Projection): Removed Set*() methods to make
8331 Projection an immutable item. Fixes RTbug #1825.
8332 (Projection.__init__): Initialize instance variables here.
8333 (ProjFile.Replace): New. Replace the given projection object with
8334 the new projection object. This solves the problem of needing the
8335 mutator Projection.SetProjection() in the ProjFrame class and
8336 allows a projection to change parameters without changing its
8337 location in the file.
8338
8339 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs): Dialog should
8340 be of type wxSAVE and should verify overwriting a file.
8341
8342 * Thuban/UI/projdialog.py (ProjFrame._OnSave): Use the new
8343 ProjFile.Replace() method instead of the mutator
8344 Projection.SetProjection(). Also requires that we reassign the
8345 client data to the new projection.
8346
8347 * test/test_proj.py (TestProjection.test): Test GetName() and
8348 GetAllParameters()
8349 (TestProjFile.test): Remove tests for Set*() methods. Add tests
8350 for Replace().
8351
8352 2003-04-25 Jonathan Coles <[email protected]>
8353
8354 * Thuban/Model/save.py (SessionSaver.write_projection): Make sure
8355 to save the name of the projection.
8356
8357 * test/test_save.py (SaveSessionTest.testLayerProjection): New
8358 test to verify layer projections are saved correctly.
8359
8360 2003-04-25 Jonathan Coles <[email protected]>
8361
8362 * Thuban/Model/proj.py (Projection.SetName): Set the name
8363 to "Unknown" if name is None.
8364 (Projection.SetAllParameters): New. Set the projection's
8365 parameter list to the one supplied.
8366 (Projection.SetProjection): New. Set the projection's
8367 properties to those of the supplied Projection.
8368
8369 * Thuban/UI/mainwindow.py (MainWindow.MapProjection): Set
8370 the dialog title to include the map's title.
8371 (MainWindow.LayerProjection): Set the dialog title to include
8372 the layer's title.
8373
8374 * Thuban/UI/projdialog.py (ProjFrame.__ShowError): Consolidate
8375 error dialogs into a single method call.
8376 (ProjFrame.__VerifyButtons): Add more states to check.
8377 (ProjFrame.__GetProjection): Return the current state of an
8378 edited projection or None.
8379 (ProjFrame.__FillAvailList): Remove checks for states that
8380 shouldn't exist.
8381 (ProjFrame._OnNew): Clear all selected items and supply
8382 a projection panel if necessary.
8383
8384 * test/test_proj.py (TestProjFile.test): Add tests for
8385 ProjFile.SetAllParameters, ProjFile.SetProjection,
8386 ProjFile.SetName.
8387
8388 2003-04-25 Jonathan Coles <[email protected]>
8389
8390 * Thuban/UI/projdialog.py (ProjFrame.__FillAvailList): Now
8391 takes an optional argument to select the current projection.
8392 This does not guarantee that the item is visible due to
8393 limited wxWindows functionality. Fixes RTBug #1821.
8394
8395 2003-04-25 Jonathan Coles <[email protected]>
8396
8397 * Thuban/Model/load.py (SessionLoader.start_projection): Remember
8398 the projection name and use it when constructing the Projection
8399 object.
8400
8401 * Thuban/Model/proj.py (Projection.__init__): Change the default
8402 value for 'name' to None and then test if name is equal to None
8403 in the body of the constructor. This way the caller doesn't have to
8404 know what the default value should be. Namely, useful in load.py
8405 where we have to pick a default value if the 'name' parameter
8406 doesn't exist in the XML file.
8407
8408 * test/test_load.py (LoadSessionTest.testLayerProjection): New.
8409 Tests a file where a layer has a projection.
8410
8411 2003-04-25 Jonathan Coles <[email protected]>
8412
8413 * Thuban/Model/layer.py (Layer.TreeInfo): Add an item to the
8414 tree for projection information.
8415
8416 * Thuban/Model/load.py (XMLReader.GetFilename): Renamed from
8417 XMLReader.GetFileName.
8418 (SessionLoader): Added support for loading projection tags that
8419 appear inside a layer.
8420
8421 * Thuban/Model/proj.py (ProjFile): Document the class. Move
8422 back to using a list because the order of the projections in
8423 the file is important to maintain. Fixes RTbug #1817.
8424
8425 * Thuban/Model/resource.py: Rename calls to ProjFile.GetFileName
8426 to ProjFile.GetFilename.
8427
8428 * Thuban/Model/save.py (SessionSaver.write_layer): Save projection
8429 information.
8430
8431 * Thuban/UI/projdialog.py (ProjFrame._OnAddToList): Renamed from
8432 ProjFrame._OnSaveAs. Removed old dead code from previous
8433 implementation.
8434 (ProjFrame._OnExport): Add support for exporting more than one
8435 projection to a single file.
8436 (ProjFrame.__FillAvailList): use string formatting (% operator)
8437 to build strings that are (partly) translated. Fixes RTbug #1818.
8438
8439 * test/test_proj.py (TestProjFile.test): New. Tests the base ProjFile
8440 class.
8441
8442 2003-04-24 Bernhard Herzog <[email protected]>
8443
8444 * po/es.po: Updated Spanish translation by Daniel Calvelo Aros
8445
8446 * po/fr.po: New. French translation by Daniel Calvelo Aros
8447
8448 * Thuban/UI/projdialog.py (ProjFrame._OnSaveAs): Don't translate
8449 empty strings.
8450
8451 2003-04-24 Jonathan Coles <[email protected]>
8452
8453 * Thuban/Model/layer.py (Layer.GetProjection): New. Needed to
8454 implement the interface that the ProjFrame dialog expects.
8455
8456 * Thuban/Model/proj.py (Projection.SetName): New. Allows the
8457 name of the projection to be changed.
8458 (ProjFile): Use a dictionary instead of a list so that removing
8459 projections is easier and we are sure about uniqueness.
8460 (ProjFile.Remove): Remove the given projection object.
8461
8462 * Thuban/Model/resource.py (GetSystemProjFiles, GetUserProjFiles):
8463 Return a list with only one projection file instead of searching for
8464 any projection file. This simplifies many things if the user can
8465 only have one system file and one user file.
8466
8467 * Thuban/UI/classgen.py: Change all references to
8468 genCombo to genChoice.
8469
8470 * Thuban/UI/mainwindow.py: Add a Projection option under the
8471 layer menu.
8472 (MainWindow.LayerProjection): New. Open up a projection window
8473 for a layer.
8474
8475 * Thuban/UI/projdialog.py: Large changes to how the dialog is
8476 laid out. Use three panels instead of one. One for the list of
8477 projections, one for the edit controls, and one for the buttons.
8478 Fixed resizing problems so that the dialog resizes correctly
8479 when the projection panel changes. Added import/export, save, and
8480 new buttons/functionality.
8481
8482 2003-04-24 Bernhard Herzog <[email protected]>
8483
8484 First step towards table management. Introduce a simple data
8485 abstraction so that we replace the data a layer uses more easily
8486 in the next step.
8487
8488 * Thuban/Model/data.py: New file with a simple data abstraction
8489 that bundles shapefile and dbffile into one object.
8490
8491 * Thuban/Model/session.py (Session.OpenShapefile): New method to
8492 open shapefiles and return a shape store object
8493
8494 * Thuban/Model/layer.py (Layer.__init__): Pass the data as a store
8495 object instead of a shapefile filename. This introduces a new
8496 instance variable store holding the datastore. For intermediate
8497 backwards compatibility keep the old instance variables.
8498 (open_shapefile): Removed. No longer needed with the shape store.
8499 (Layer.SetShapeStore, Layer.ShapeStore): New methods to set and
8500 get the shape store used by a layer.
8501 (Layer.Destroy): No need to explicitly destroy the shapefile or
8502 table anymore.
8503
8504 * Thuban/UI/mainwindow.py (MainWindow.AddLayer)
8505 (MainWindow.AddLayer): Use the session's OpenShapefile method to
8506 open shapefiles
8507
8508 * Thuban/Model/load.py (ProcessSession.start_layer): Use the
8509 session's OpenShapefile method to open shapefiles
8510
8511 * test/test_classification.py
8512 (TestClassification.test_classification): Use the session's
8513 OpenShapefile method to open shapefiles and build the filename in
8514 a more platform independed way
8515
8516 * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
8517 Implement to have a session to use in the tests
8518 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
8519 (TestLayer.test_point_layer, TestLayer.test_empty_layer): Use the
8520 session's OpenShapefile method to open shapefiles
8521 (TestLayerLegend.setUp): Instantiate a session so that we can use
8522 it to open shapefiles.
8523 (TestLayerLegend.tearDown): Make sure that all references to
8524 layers and session are removed otherwise we may get a resource
8525 leak
8526
8527 * test/test_map.py (TestMapAddLayer.test_add_layer)
8528 (TestMapWithContents.setUp): Instantiate a session so that we can
8529 use it to open shapefiles.
8530 (TestMapWithContents.tearDown): Make sure that all references to
8531 layers, maps and sessions are removed otherwise we may get a
8532 resource leak
8533 ("__main__"): use support.run_tests() so that more info about
8534 uncollected garbage is printed
8535
8536 * test/test_save.py (SaveSessionTest.testSingleLayer): Use the
8537 session's OpenShapefile method to open shapefiles
8538 ("__main__"): use support.run_tests() so that more info about
8539 uncollected garbage is printed
8540
8541 * test/test_selection.py (TestSelection.tearDown): Make sure that
8542 all references to the session and the selection are removed
8543 otherwise we may get a resource leak
8544 (TestSelection.get_layer): Instantiate a session so that we can
8545 use it to open shapefiles.
8546 ("__main__"): use support.run_tests() so that more info about
8547 uncollected garbage is printed
8548
8549 * test/test_session.py (TestSessionBase.tearDown)
8550 (TestSessionWithContent.tearDown): Make sure that all references
8551 to the session and layers are removed otherwise we may get a
8552 resource leak
8553 (TestSessionWithContent.setUp): Use the session's OpenShapefile
8554 method to open shapefiles
8555
8556 2003-04-24 Jonathan Coles <[email protected]>
8557
8558 * Thuban/Model/load.py (XMLReader.read): Should have been checking
8559 if the file_or_filename object had the 'read' attribute.
8560
8561 2003-04-23 Jonathan Coles <[email protected]>
8562
8563 * Thuban/Model/resource.py: Fixes RTbug #1813.
8564 (ReadProjFile): Add documentation about which exceptions are raised.
8565 Always pass the exceptions up to the caller.
8566 (GetProjFiles): If the directory can't be read return an empty list.
8567 If any of the proj files can't be read skip that file and go
8568 on to the next one.
8569
8570 * test/test_proj.py: Added test cases to handle nonexistent files,
8571 unreadable files, and files that don't parse correctly.
8572
8573 2003-04-23 Jonathan Coles <[email protected]>
8574
8575 Projection dialog. Allows the user to select from a list
8576 of projection templates and optionally edit them and save new ones.
8577
8578 * Thuban/UI/projdialog.py (ProjFrame): New. Main dialog.
8579 (ProjPanel): Base class for projection specific panels.
8580 (TMPanel): Projection panel for Transverse Mercartor.
8581 (UTMPanel): Projection panel for Universal Transverse Mercartor.
8582 (LCCPanel): Projection panel for Lambert Conic Conformal.
8583 (GeoPanel): Projetion panel for Geographic Projection.
8584
8585 2003-04-23 Jonathan Coles <[email protected]>
8586
8587 * Thuban/Model/load.py (XMLReader): Renamed from XMLProcessor to
8588 promote symmetry. There now exists XMLReader and XMLWriter.
8589 (XMLReader.read): New. Call to read the given file descriptor or
8590 filename.
8591 (XMLReader.close): New. Make sure the file is closed.
8592 (XMLReader.GetFileName): New. Return just the file name that is being
8593 read from.
8594 (XMLReader.GetDirectory): New. Return just the directory of the file
8595 that is being read.
8596 (XMLReader.AddDispatchers): New. Take a dictionary which contains
8597 the names of functions to call as the XML tree is parsed.
8598 (XMLReader.startElementNS): Updated to use new dispatcher dictionary.
8599 (XMLReader.endElementNS): Updated to use new dispatcher dictionary.
8600 (SessionLoader): Removed class variables start_dispatcher and
8601 end_dispatcher since this functionality is now part of a class
8602 instance. Fixes RTbug #1808.
8603 (SessionLoader.__init__): Add dispatcher functions.
8604 (load_xmlfile): Code was moved into the XMLReader.read().
8605 (load_session): Use modified SessionLoader.
8606
8607 * Thuban/Model/map.py (Map.GetProjection): New. Returns the
8608 map's projection.
8609
8610 * Thuban/Model/proj.py (Projection.GetParameters): Renamed to
8611 GetAllParameters.
8612 (Projection.GetParameter): Returns the value for the given parameter.
8613
8614 * Thuban/Model/resource.py: Use XMLReader and XMLWriter.
8615 (GetProjFiles): Renamed from GetProjections. Now returns a list
8616 of ProjFile objects.
8617 (GetSystemProjFiles): Renamed from GetSuppliedProjections. Returns
8618 a list of ProjFile objects whose files are not user defined.
8619 (GetUserProjFiles): Renamed from GetUserProjections. Returns a
8620 list of ProjFile objects whose files are user defined.
8621 (ProjFileReader): Extend new XMLReader.
8622
8623 * Thuban/Model/save.py (XMLWriter): Renamed from XMLSaver to
8624 promote symmetry.
8625
8626 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Use a wxChoice
8627 control instead of a wxComboBox. wxChoice controls do not generate
8628 events as the uses highlights possible choices which fixes problems
8629 with resizing the dialog when the use selects an option.
8630
8631 * Thuban/UI/classifier.py (Classifier.__init__): Use a wxChoice
8632 control instead of a wxComboBox.
8633
8634 * Thuban/UI/mainwindow.py (MainWindow.Projection): Use new projection
8635 dialog.
8636
8637 * test/test_proj.py (TestProjection.test): New tests for GetParameter
8638 method.
8639
8640 2003-04-22 Bernhard Herzog <[email protected]>
8641
8642 * Thuban/UI/mainwindow.py: Remove some unused imports and global
8643 constants
8644
8645 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
8646 (IdentifyGridCtrl.selected_shape): Use table, not shapetable.
8647
8648 2003-04-17 Bernhard Herzog <[email protected]>
8649
8650 * Thuban/Model/layer.py: Don't import LAYER_LEGEND_CHANGED.
8651 (Layer): Update doc-string since LAYER_LEGEND_CHANGED is not used
8652 anymore.
8653 (Layer.BoundingBox, Layer.GetFieldType, Layer.NumShapes)
8654 (Layer.ShapeType, Layer.Shape): No need to call
8655 self.open_shapefile since it's always called in __init__
8656
8657 * Thuban/UI/application.py (ThubanApplication.MainLoop): Removed.
8658 In wxPython 2.4 there's no need to extend MainLoop anymore since
8659 wxPython itself makes sure OnExit is called.
8660
8661 2003-04-16 Jonathan Coles <[email protected]>
8662
8663 Initial putback of projection management code. Includes new
8664 classes to read and write projection files. The current load
8665 and save classes were abstracted a bit so they could be reused.
8666 The Projection class was extended to provide new methods and
8667 have a name.
8668
8669 * Thuban/Model/load.py (XMLProcessor): New. Contains all the
8670 general XML reading methods that were part of ProcessSession.
8671
8672 * Thuban/Model/proj.py (Projection.__init__): Accepts an optional
8673 name.
8674 (ProjFile): New. Represents a file that contains projection
8675 information.
8676
8677 * Thuban/Model/resource.py: New. Contains general utilities
8678 for read and writing projection files.
8679
8680 * Thuban/Model/save.py (XMLSaver): New. Contains all the
8681 general XML writing methods that were part of SessionSaver.
8682 (SessionSaver): Renamed from Saver.
8683
8684 * test/test_proj.py: New test cases for the projection
8685 file read and write functions.
8686
8687 2003-04-16 Jonathan Coles <[email protected]>
8688
8689 * Thuban/Model/classification.py: Use repr() around values
8690 in the ClassGroup*.__repr__() methods so it is clearer when
8691 a value is a string and when it is a number.
8692
8693 * test/test_load.py: Rework the classification test to test
8694 that we can load old files.
8695 (testLabels): Test a file where the groups have labels.
8696
8697 2003-04-16 Bernhard Herzog <[email protected]>
8698
8699 Safer implementation of the performance enhancements of the
8700 low-level renderer:
8701
8702 * extensions/thuban/wxproj.cpp (extract_projection)
8703 (extract_pointer): Rename extract_projection to extract_pointer
8704 and redefine its purpose to return the pointer stored in a CObject
8705 returned by the object's cobject method. Update all callers.
8706 (s_draw_info, free_draw_info, draw_polygon_init): Implement the
8707 handling of these low-level parameters so that each s_draw_info
8708 instance is handled as a CObject at python level that also
8709 contains real references to the actual python objects which
8710 contain the values in the struct. Add free_draw_info as the
8711 destructor.
8712 (draw_polygon_shape): Add the py_draw_info parameter which must a
8713 cobject containing an s_draw_info pointer.
8714
8715 * Thuban/UI/renderer.py (MapRenderer.polygon_render_param): New
8716 method to instantiat the low-level render parameter
8717 (MapRenderer.draw_shape_layer): Use the new method. Remove some
8718 commented out code.
8719 (MapRenderer.draw_polygon_shape): Make the first parameter not the
8720 layer but the low-level render parameter
8721 (ScreenRenderer.draw_shape_layer): Use the low-level render
8722 parameter.
8723
8724 2003-04-15 Jonathan Coles <[email protected]>
8725
8726 * Thuban/Model/classification.py: Implemented __repr__ for
8727 the ClassGroup* classes to make debugging a bit easier.
8728 (ClassGroup.SetLabel): Check that the string is an instance
8729 of StringTypes not StringType. Accounts for Unicode strings.
8730
8731 * Thuban/Model/color.py: Implemented __repr__ to make
8732 debugging a bit easier.
8733
8734 * Thuban/Model/save.py (Saver.write_classification): Need to
8735 save the group label.
8736
8737 * test/test_load.py (testClassification): New. Loads the
8738 iceland_sample_test.thuban file and checks if it was loaded
8739 correctly.
8740
8741 2003-04-15 Jonathan Coles <[email protected]>
8742
8743 * extensions/thuban/wxproj.cpp (draw_polygon_init): New. Used
8744 to improve rendering performance by initializing the variables
8745 that are not change each time draw_polygon_shape() is called.
8746 The values are stored in a global struct draw_info.
8747 (draw_polygon_shape): Removed initialization code that is
8748 now in draw_polygon_init().
8749
8750 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Make
8751 drawing initialization call to draw_polygon_init()
8752 (MapRenderer.draw_polygon_shape): Use new signature of
8753 draw_polygon_shape.
8754
8755 * Thuban/UI/classgen.py (GenUniformPanel): Fix spin control
8756 weirdness by setting the range to (1, maxint).
8757
8758 * Thuban/Model/classification.py (ClassGroupProperties): Make
8759 instance variables private and optimize comparison operator
8760 by first checking if the color references are the same.
8761 (ClassGroupSingleton): Make instance variables private.
8762 (ClassGroupRange): Make instance variables private.
8763
8764 * HOWTO-Release: Filled in missing steps for releasing packages.
8765
8766 2003-04-15 Bernhard Herzog <[email protected]>
8767
8768 First stab at internationalized messages:
8769
8770 * Thuban/__init__.py (_): Implement the translation function for
8771 real using the python gettext module.
8772
8773 * Thuban/UI/classifier.py (ClassTable.GetRowLabelValue): Don't
8774 translate empty strings.
8775
8776 * Thuban/UI/application.py (ThubanApplication.read_startup_files):
8777 Add a missing space to a warning message
8778
8779 * po/README: New. Notes about the management of the translation
8780 files.
8781
8782 * po/Makefile: New. Makefile to help manage the translation files.
8783
8784 * po/es.po: New. Spanish translation by Daniel Calvelo Aros
8785
8786 * MANIFEST.in: Include the *.mo files in Resources/Locale and the
8787 translations and support files in po/
8788
8789 * setup.py (data_files): Add the *.mo files to the data_files too
8790
8791 * README: Add note about the translations when building from CVS
8792
8793 2003-04-14 Jonathan Coles <[email protected]>
8794
8795 * Thuban/UI/dock.py: Fixes some window resizing problems most
8796 noticable under windows. Always assume the button bitmaps will
8797 be there. Code clean up.
8798 (DockabelWindow.Dock, DockableWindow.UnDock): Force all the
8799 images for the dock/undock button to the same images.
8800 Work around for RTbug #1801.
8801
8802 * Thuban/UI/legend.py (LegendPanel.__init__): The toolbar should
8803 be allowed to grow within the sizer. Fixes a bug under Windows
8804 where the toolbar wasn't being drawn.
8805
8806 2003-04-14 Frank Koormann <[email protected]>
8807
8808 * Resources/Bitmaps/dock_12.xpm, Resources/Bitmaps/undock_12.xpm:
8809 Updated design to try to make the button functionality more
8810 transparent.
8811
8812 2003-04-14 Jonathan Coles <[email protected]>
8813
8814 * Thuban/UI/legend.py (LegendPanel.__init__): Call Create() to
8815 finalize the intialization of the panel.
8816
8817 * Thuban/UI/dock.py (DockPanel.Create): New. Finalizes the
8818 creation of the panel. Should be the last thing called in the
8819 initializer of a subclass.
8820
8821 * Thuban/UI/classgen.py (ClassGenDialog.__init__): Actively
8822 set the current selections in the combo boxes. This is needed
8823 under Windows.
8824
8825 * Thuban/UI/classifier.py (Classifier.__init__): Add a top
8826 level panel to the dialog so that the background colors are
8827 consistent under Windows.
8828
8829 2003-04-11 Jonathan Coles <[email protected]>
8830
8831 * Thuban/UI/classgen.py: Change color ramps to start at white
8832 not black.
8833
8834 * Thuban/UI/legend.py: Enable/disable the legend buttons when
8835 the legend changes. Fixes RTbug #1793.
8836
8837 * test/test_classification.py: Added test for copying of
8838 classifications.
8839
8840 2003-04-11 Jonathan Coles <[email protected]>
8841
8842 * Thuban/UI/resource.py: New. Centralize the loading of resources
8843 such as bitmaps.
8844
8845 * Thuban/UI/classgen.py (GenUniquePanel.__init__): Reordered buttons,
8846 added images to the move buttons, added 'reverse' button.
8847 (CustomRampPanel.__init__): Added images to the move buttons.
8848 (GreyRamp): New. Generates a ramp from white to black.
8849 (HotToColdRamp): New. Generates a ramp from cold to hot colors.
8850
8851 * Thuban/UI/classifier.py: Refactored ID's from ID_CLASSIFY_* to
8852 ID_PROPERTY_*.
8853 (Classifier.__init__): Minor changes to the layout.
8854 (Classifier._OnTitleChanged): Listen for when the user edits the
8855 title and update the dialog's title and the layer's title.
8856
8857 * Thuban/UI/dock.py: Use new bitmaps for the control buttons.
8858
8859 * Thuban/UI/legend.py: Use new bitmaps for the control buttons.
8860 (LegendTree._OnMsgLayerTitleChanged): Change the displayed title
8861 if the layer's title changes.
8862
8863 * Thuban/UI/mainwindow.py: Added new menu item and associated code
8864 to open a dialog to rename the map.
8865 (MainWindow): Use new resource class to import bitmaps.
8866
8867 2003-04-11 Jonathan Coles <[email protected]>
8868
8869 * Resources/Bitmaps/close_12.xpm, Resources/Bitmaps/dock_12.xpm,
8870 Resources/Bitmaps/group_use.xpm, Resources/Bitmaps/group_use_all.xpm,
8871 Resources/Bitmaps/group_use_none.xpm,
8872 Resources/Bitmaps/group_use_not.xpm,
8873 Resources/Bitmaps/hide_layer.xpm,
8874 Resources/Bitmaps/layer_properties.xpm,
8875 Resources/Bitmaps/lower_layer.xpm, Resources/Bitmaps/raise_layer.xpm,
8876 Resources/Bitmaps/show_layer.xpm, Resources/Bitmaps/undock_12.xpm:
8877 New.
8878
8879 2003-04-10 Jonathan Coles <[email protected]>
8880
8881 * Thuban/Model/classification.py: (ClassGroupRange.__init__):
8882 Should pass group to ClassGroup constructor.
8883
8884 2003-04-10 Jonathan Coles <[email protected]>
8885
8886 * Thuban/Model/classification.py: (ClassGroup): Move all the common
8887 methods of the derived classes ([Set|Get]Properties(), __eq__, __ne__)
8888 here. Implement SetVisible(), IsVisible().
8889 (ClassGroup.__init__): Add group parameter which acts as a copy
8890 constructor.
8891
8892 * Thuban/UI/classifier.py (ClassTable): Add a new column for the
8893 "Visible" check boxes.
8894 (Classifier): Rename the buttons and refactor the code to match
8895 the new labels.
8896
8897 * Thuban/UI/legend.py: Classify button is now called "Properties".
8898 Refactored the code to change variable names.
8899 (LegendTree.__FillTreeLayer): Only list a group if it is visible.
8900
8901 * Thuban/UI/mainwindow.py: MainWindow.OpenClassifier renamed to
8902 MainWindow.OpenLayerProperties. MainWindow.LayerEditProperties
8903 renamed to MainWindow.LayerEditProperties.
8904 (MainWindow.ToggleLegend): Don't include map name in legend title.
8905 (MainWindow.SetMap): Added the map name to the window title.
8906 (MainWindow.LayerFillColor, MainWindow.LayerTransparentFill,
8907 MainWindow.LayerOutlineColor, MainWindow.LayerNoOutline): Removed.
8908 Functionality is found in the layer properties dialog.
8909
8910 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
8911 draw visible groups.
8912
8913 2003-04-09 Jonathan Coles <[email protected]>
8914
8915 * Thuban/UI/classgen.py: Modifications to allow simple
8916 addition and selection of new color schemes.
8917 (MonochromaticRamp): New. Generates a ramp between two colors.
8918 (RedRamp): New. Generates a ramp of all red.
8919 (GreenRamp): New. Generates a ramp of all green.
8920 (BlueRamp): New. Generates a ramp of all blue.
8921
8922 2003-04-09 Jonathan Coles <[email protected]>
8923
8924 * Thuban/Model/classification.py (Classification.__deepcopy__):
8925 Need to copy over field and fieldType attributes.
8926
8927 * Thuban/Model/table.py (Table.field_range): New. Retrive the
8928 maximum and minimum values over the entire table for a given
8929 field.
8930 (Table.GetUniqueValues): New. Retrieve all the unique values
8931 in the table for a given field.
8932
8933 * Thuban/UI/classgen.py: Renamed GenRangePanel to GenUniformPanel.
8934 (GenUniquePanel): New. Controls to allow the user to select
8935 which unique field values they would like in the classification.
8936 (CustomRampPanel): Code that was in ClassGenDialog that allows
8937 the user to select the properties for a custom ramp.
8938 (ClassGenerator.GenUniformDistribution): Was called GenerateRanges.
8939
8940 * Thuban/UI/classifier.py: Removed a lot of debugging code.
8941 (Classifier._SetClassification): Callback method so that the
8942 class generator can set the classification in the grid.
8943 (ClassGroupPropertiesCtrl): New. Encapsulates the drawing and
8944 editing of a group properties class into a wxWindows control.
8945
8946 * Thuban/UI/dock.py: It was decided that if the user closes
8947 a dockable window the window should simply hide itself. That
8948 way if the user wants to show the dock again it appears in the
8949 same place as it was when it was closed.
8950 (DockableWindow.Destroy): Call renamed method OnDockDestroy().
8951 (DockableWindow._OnButtonClose): Hide the window instead of
8952 destroying it.
8953 (DockableWindow._OnClose): Hide the window instead of
8954 destroying it.
8955
8956 * Thuban/UI/legend.py (LegendTree): Use a private method to
8957 consistently set the font and style of the text. Fixes RTbug #1786.
8958
8959 * Thuban/UI/mainwindow.py: Import just the Classifier class.
8960
8961 2003-04-07 Bernhard Herzog <[email protected]>
8962
8963 * Thuban/UI/mainwindow.py (main_menu): Move the toggle_legend item
8964 to the map module
8965
8966 2003-04-07 Bernhard Herzog <[email protected]>
8967
8968 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree): Removed in
8969 favor of ToggleSessionTree
8970 (MainWindow.ToggleSessionTree): New method to toggle visibility of
8971 the session tree.
8972 (MainWindow.SessionTreeShown): New method to return whether the
8973 session tree is currently shown.
8974 (MainWindow.ToggleLegend): New method to toggle visibility of the
8975 legend
8976 (MainWindow.ShowLegend): Implement in terms of ToggleLegend and
8977 LegendShown
8978 (MainWindow.LegendShown): New method to return whether the legend
8979 is currently shown.
8980 (_method_command): Add checked parameter so we can define check
8981 menu items
8982 (_has_tree_window_shown, _has_legend_shown): Use the appropriate
8983 mainwindow methods.
8984 (show_session_tree, show_legend commands): Removed.
8985 (toggle_session_tree, toggle_legend commands): New commands to
8986 toggle the visibility of the dialogs
8987
8988 2003-04-07 Jonathan Coles <[email protected]>
8989
8990 * Thuban/UI/classgen.py: Fix Windows problem.
8991
8992 * Thuban/UI/dock.py: Fix Windows problem.
8993
8994 * Thuban/UI/mainwindow.py: Use False instead of false.
8995 (MainWindow.ShowLegend): Remove unnecessary switch parameter.
8996
8997 2003-04-07 Jonathan Coles <[email protected]>
8998
8999 Since we now say that the order of the groups in a classification
9000 matters, it makes sense to be able to manipulate that order. Most
9001 of the changes to Thuban/Model/classification.py are to that end.
9002
9003 * Thuban/Model/classification.py (Classification.AppendGroup,
9004 Classification.InsertGroup, Classification.ReplaceGroup,
9005 Classification.RemoveGroup, Classification.GetGroup): Do as the
9006 names imply.
9007 (Classification.FindGroup): This was called GetGroup, but GetGroup
9008 takes an index, while FindGroup takes a value.
9009 (Classification.__deepcopy__): Copy all the groups, BUT NOT THE LAYER
9010 REFERENCE. Currently there is a cyclic reference between the layer
9011 and its classification. If the classification doesn't need to know
9012 its owning layer we can change this, since it may make sense to be
9013 able to use the same classification with different layers.
9014
9015 * Thuban/Model/load.py: Use Classification.AppendGroup(), not AddGroup()
9016
9017 * Thuban/UI/classgen.py: Use Classification.AppendGroup(),
9018 not AddGroup()
9019
9020 * Thuban/UI/classifier.py: Now that we can depend on the order in
9021 a Classification and have methods to manipulate that order we don't
9022 need to use our own data structures in the grid. We can simply make
9023 the grid/table access the information they need from a copy of
9024 the classification object.
9025 (Classifier._OnCloseBtn): Event handler for when the user clicks
9026 'Close'. This is needed so if the user applies changes and then
9027 continues to change the table the user has the option of discarding
9028 the most recent changes and keeping what they applied.
9029
9030 * Thuban/UI/mainwindow.py: Put "Show Legend" and "Show Session Tree"
9031 into the same group.
9032
9033 * extensions/thuban/wxproj.cpp (check_version): If Thuban is compiled
9034 with a really old version of proj, PJ_VERSION won't even be defined.
9035 If it isn't defined then just compile so that the function always
9036 returns Py_False.
9037
9038 * test/test_classification.py: Fix tests to use the renamed methods.
9039 Still need to write tests for the new methods.
9040
9041 2003-04-04 Jonathan Coles <[email protected]>
9042
9043 * Thuban/UI/classifier.py (Classifier.__SelectField): Move the
9044 call to SetSelection out of the method and before the call
9045 to __SelectField in __init__. This prevents a recursion of events
9046 when _OnFieldSelect is triggered by the user.
9047
9048 2003-04-04 Jonathan Coles <[email protected]>
9049
9050 * Thuban/Model/classification.py: Rename Color.None to
9051 Color.Transparent.
9052 (ClassGroupProperties.SetLineColori, ClassGroupProperties.SetFill):
9053 Don't bother copying the color, since Colors are immutable.
9054
9055 * Thuban/Model/color.py, Thuban/Model/layer.py, Thuban/Model/load.py,
9056 Thuban/UI/classifier.py, Thuban/UI/mainwindow.py,
9057 Thuban/UI/renderer.py, Thuban/UI/view.py:
9058 Rename Color.None to Color.Transparent.
9059
9060 * test/test_classification.py, test/test_load.py: Rename Color.None
9061 to Color.Transparent.
9062
9063 2003-04-04 Jonathan Coles <[email protected]>
9064
9065 * Thuban/Model/classification.py: Fix assert calls.
9066 (ClassGroupProperties.SetLineColor, ClassGroupProperties.SetFill):
9067 Copy the color parameter rather than hold onto a reference.
9068
9069 * Thuban/Model/color.py (Color.__copy__, Color.__deepcopy): Copy
9070 the color object.
9071 (NoColor.__copy__, NoColor.__deepcopy): Return 'self' so that we
9072 are sure there exists only one refernce to Color.None in the system.
9073 This allows us to use 'is' rather than the comparision functions.
9074
9075 * Thuban/Model/save.py: Fix assert calls.
9076
9077 * Thuban/UI/classifier.py: Fix assert calls.
9078 (ClassGrid._OnCellDClick): Call up to the classifier to open the
9079 dialog to edit the groups properties.
9080 (ClassGrid._OnCellResize): Make sure that the scollbars are drawn
9081 correctly if a cell is resized.
9082 (ClassTable.SetClassification): New. Changes the classification
9083 that is in the table.
9084 (ClassTable.__SetRow): Allow groups to be prepended.
9085 (Classifier): New code for opening the EditProperties and
9086 GenerateRanges dialogs.
9087 (SelectPropertiesDialog.__GetColor): Only set the color in the
9088 color dialog if the current color is not None.
9089
9090 * Thuban/UI/dock.py: Fix assert calls.
9091
9092 * Thuban/UI/legend.py: Fix assert calls.
9093
9094 * Thuban/UI/renderer.py: Fix assert calls.
9095
9096 * Thuban/UI/classgen.py (ClassGenDialog): Dialog for generating
9097 classifications.
9098 (GenRangePanel): Panel specific to range generation.
9099 (GenSingletonPanel): Panel specific to singleton generation.
9100 (ClassGenerator): Class responsible for actually generating
9101 the classification from the data gathered in the dialog box.
9102 (PropertyRamp): Generates properties whose values range from
9103 a starting property to an ending property.
9104
9105 2003-04-03 Bernhard Herzog <[email protected]>
9106
9107 * test/support.py (print_garbage_information): New function that
9108 prints information about still connected messages and memory
9109 leaks.
9110 (run_suite): Removed.
9111 (run_tests): New function for use as a replacement of
9112 unittest.main in the test_* files. This one calls
9113 print_garbage_information at the end.
9114
9115 * test/runtests.py (main): Use support.print_garbage_information
9116
9117 * test/test_layer.py: Use support.run_tests instead of
9118 unittest.main so we get memory leak information
9119 (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
9120 (TestLayer.test_point_layer, TestLayer.test_empty_layer)
9121 (TestLayerLegend.test_visibility): Call the layer's Destroy method
9122 to fix a memory leak.
9123
9124 * test/test_classification.py: Use support.run_tests instead of
9125 unittest.main so we get memory leak information
9126 (TestClassification.test_classification): Call the layer's Destroy
9127 method to fix a memory leak.
9128
9129 2003-04-02 Bernhard Herzog <[email protected]>
9130
9131 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
9132 Handle the reference counts of the return value and errors in
9133 PyArg_ParseTuple correctly.
9134
9135 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
9136 sure the filename is absolute to avoid problems when saving the
9137 session again
9138
9139 * Thuban/Model/table.py: Remove unnecessary import. Fix a typo.
9140
9141 2003-04-01 Jonathan Coles <[email protected]>
9142
9143 * Thuban/UI/renderer.py (MapRenderer.draw_point_shape): Check
9144 that there actually are points in the returned list of points
9145 before trying to index into the list. The list may be empty if
9146 the shape is a Null Shape.
9147
9148 2003-04-01 Bernhard Herzog <[email protected]>
9149
9150 * test/test_map.py: Don't use from <module> import *
9151
9152 2003-04-01 Jonathan Coles <[email protected]>
9153
9154 * Thuban/Model/session.py: Use LAYER_CHANGED instead of
9155 LAYER_LEGEND_CHANGED
9156
9157 * Thuban/UI/dock.py (DockableWindow._OnButtonClose): Call
9158 self.Destroy() to close the window after yesterday's changes.
9159
9160 * test/test_map.py, test/test_session.py: Fix messages that
9161 are sent from maps and layers.
9162
9163 2003-03-31 Jonathan Coles <[email protected]>
9164
9165 * Thuban/UI/classifier.py: Commented out some debugging statements.
9166 (ClassDataPreviewer.Draw): Draw rectangles for polygon layers per
9167 RTbug #1769.
9168
9169 * Thuban/UI/dock.py (DockableWindow.UnDock): Restore size and
9170 position (although position doesn't work yet under GTK).
9171 (DockableWindow.Destroy): New. Called when the window must be
9172 closed. Namely needed when the DockFrame closes and must close
9173 its children.
9174 (DockFrame): Listen for EVT_CLOSE and destroy all children.
9175
9176 * Thuban/UI/legend.py (LegendPanel.Destroy): New. Cleans up
9177 when then window is told to close.
9178 (LegendTree._OnMsgLayerChanged): Fixes a seg fault bug. See
9179 comment in source for more info.
9180
9181 * Thuban/UI/main.py: Show the legend by default when Thuban starts.
9182
9183 * Thuban/UI/mainwindow.py: Renamed OnClose to _OnClose for
9184 symmetry with other such methods.
9185 (MainWindow.ShowLegend): Show the legend docked by default.
9186
9187 2003-03-28 Jonathan Coles <[email protected]>
9188
9189 * Thuban/UI/classifier.py: Support for highlighting a specific
9190 group within the grid when the classification dialog is opened.
9191 Also contains a lot of debugging printouts which will later
9192 be removed.
9193
9194 * Thuban/UI/dock.py: Complete rework on the dock code so that
9195 that it is fairly removed from the rest of the Thuban application.
9196 It is easy to add new docks which the rest of the program having
9197 to be aware of them.
9198
9199 * Thuban/UI/legend.py: Modifications to support selecting a
9200 specific group in the classification dialog. Changed how layers
9201 are drawn when the layer is visible/invisible.
9202
9203 * Thuban/UI/mainwindow.py: Removed legend specific code and
9204 replaced it with calls to the new dock code.
9205
9206 * Thuban/UI/renderer.py (MapRenderer.__init__): Added assert
9207 to check if scale > 0. Trying to track down a divide by zero.
9208
9209 2003-03-26 Jonathan Coles <[email protected]>
9210
9211 * Thuban/UI/legend.py: Removed unnecessary LegendDialog class.
9212 (LegendPanel): Removed _OnDock()/_OnUnDock() methods which are
9213 now part of DockableWindow.
9214 (LegendPanel.DoOnSelChanged): Select the current layer in the
9215 map.
9216 (LegendTree._OnSelChanged): Call LegendPanel.DoOnSelChanged()
9217 with the selected layer and/or group.
9218
9219 2003-03-26 Jonathan Coles <[email protected]>
9220
9221 This putback contains the code for dockable windows. There is
9222 no support in wxWindows as of this date for windows that can
9223 attach themselves to other windows.
9224
9225 The current model contains a DockableWindow which has a parent
9226 window for when it is detached and a dock window that it puts
9227 its contents in when it is docked. The contents of a DockableWindow
9228 must be a DockPanel. DockPanel itself derives from wxPanel.
9229
9230 * Thuban/Model/layer.py (Layer.ClassChanged): Send a LAYER_CHANGED
9231 message, not a LAYER_LEGEND_CHANGED message.
9232
9233 * Thuban/Model/map.py (Map): Forward LAYER_CHANGED messages.
9234
9235 * Thuban/UI/classifier.py (Classifier.__init__): Use wxADJUST_MINSIZE
9236 as one of the style properties for the fieldTypeText item to
9237 be sure that its size is correct when the text changes.
9238
9239 * Thuban/UI/dock.py: New. Classes for the DockPanel and
9240 DockableWindow.
9241
9242 * Thuban/UI/legend.py: Added some more buttons and made the
9243 LegendPanel a DockPanel.
9244
9245 * Thuban/UI/mainwindow.py: Added sash windows to the main window
9246 and supporting functions for manipulating the sashes.
9247 (MainWindow.ShowLegend): Create a DockableWindow with the
9248 LegendPanel as the contents.
9249
9250 * Thuban/UI/messages.py: Added DOCKABLE_* messages
9251
9252 * Thuban/UI/view.py (MapCanves.SetMap): Listen for LAYER_CHANGED,
9253 not LAYER_LEGEND_CHANGED, messages.
9254
9255 2003-03-25 Jonathan Coles <[email protected]>
9256
9257 * setup.py: Added custom script bdist_rpm_build_script so that
9258 when the rpm is built the path to wx-config is correct.
9259
9260 * setup.cfg: Added line saying to use the custom build script
9261
9262 2003-03-20 Jonathan Coles <[email protected]>
9263
9264 Initial implementation of the Legend.
9265
9266 * Thuban/UI/legend.py: New. Creates a window that shows the map's
9267 Legend information and allows the user to add/modify classifications
9268 and how the layers are drawn on the map.
9269
9270 * setup.py: New command 'build_docs' which currently uses
9271 happydoc to generate html documentation for Thuban.
9272
9273 * Thuban/Model/classification.py (ClassGroup.GetDisplayText): New.
9274 Returns a string which is appropriately describes the group.
9275
9276 * Thuban/Model/layer.py (Layer.SetClassification): Generate a
9277 LAYER_CHANGED event instead of a LAYER_LEGEND_CHANGED event.
9278
9279 * Thuban/Model/map.py (Map): Rename messages and use new, more
9280 specific, messages.
9281
9282 * Thuban/Model/messages.py: New message to indicate that a layer's
9283 data has changed (LAYER_CHANGED). New map messages to indicate
9284 when layers have been added/removed/changed or if the stacking order
9285 of the layers has changed.
9286
9287 * Thuban/Model/session.py: Rename and use new messages.
9288
9289 * Thuban/UI/classifier.py: Remember if any changes have actually
9290 been applied so that if the dialog is cancelled without an application
9291 of changes we don't have to set a new classification.
9292 (ClassDataPreviewer): Pulled out the window specific code and put it
9293 ClassDataPreviewWindow. ClassDataPreviewer can then be used to draw
9294 symbols on any DC.
9295
9296 * Thuban/UI/mainwindow.py: New code to open the legend.
9297
9298 * Thuban/UI/view.py: Use new message names.
9299
9300 2003-03-19 Jonathan Coles <[email protected]>
9301
9302 * Thuban/UI/main.py (verify_versions): New. Checks the versions
9303 of Python, wxPython, and some other libraries.
9304
9305 * extensions/thuban/wxproj.cpp (check_version): Checks the given
9306 version against what wxproj was compiled with.
9307 (check_version_gtk): If wxproj was compiled with gtk then check
9308 the given version against the version of the gtk library
9309 currently being used.
9310
9311 2003-03-14 Bernhard Herzog <[email protected]>
9312
9313 * test/test_command.py: Run the tests when the module is run as a
9314 script
9315
9316 2003-03-14 Bernhard Herzog <[email protected]>
9317
9318 Implement selection of multiple selected shapes in the same layer:
9319
9320 - Introduce a new class to hold the selection. This basically
9321 replaces the interactor which was nothing more than the
9322 selection anyway. A major difference is of course that the new
9323 selection class supports multiple selected shapes in one layer
9324
9325 - Move the object that represents the selection from the
9326 application to the canvas. The canvas is a better place than the
9327 application because the selection represents which shapes and
9328 layer of the map displayed by the canvas are selected and
9329 affects how the map is drawn.
9330
9331 - Make the selection and its messages publicly available through
9332 the mainwindow.
9333
9334 - The non-modal dialogs do not get a reference to the interactor
9335 anymore as they can simply refer to their parent, the
9336 mainwindow, for the what the interactor had to offer.
9337
9338 * Thuban/UI/selection.py: New module with a class to represent the
9339 selection.
9340
9341 * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
9342 these unused messages
9343
9344 * Thuban/UI/application.py (ThubanApplication.OnInit)
9345 (ThubanApplication.OnExit, ThubanApplication.SetSession): The
9346 interactor is gone now.
9347 (ThubanApplication.CreateMainWindow): There is no interactor
9348 anymore so we pass None as the interactor argument for now for
9349 compatibility.
9350
9351 * Thuban/UI/view.py (MapCanvas.delegated_messages)
9352 (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
9353 Unsubscribe, delegate messages according to the delegated_messages
9354 class variable.
9355 (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
9356 attributes from instance variables as described with the
9357 delegated_methods class variable.
9358 (MapCanvas.__init__): New instance variable selection holding the
9359 current selection
9360 (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
9361 pass them on to the renderer
9362 (MapCanvas.SetMap): Clear the selection when a different map is
9363 selected.
9364 (MapCanvas.shape_selected): Simple force a complete redraw. The
9365 selection class now takes care of only issueing SHAPES_SELECTED
9366 messages when the set of selected shapes actually does change.
9367 (MapCanvas.SelectShapeAt): The selection is now managed in
9368 self.selection
9369
9370 * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
9371 (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
9372 Unsubscribe, delegate messages according to the delegated_messages
9373 class variable.
9374 (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
9375 attributes from instance variables as described with the
9376 delegated_methods class variable.
9377 (MainWindow.__init__): The interactor as ivar is gone. The
9378 parameter is still there for compatibility. The selection messages
9379 now come from the canvas.
9380 (MainWindow.current_layer, MainWindow.has_selected_layer):
9381 Delegate to the the canvas.
9382 (MainWindow.LayerShowTable, MainWindow.Classify)
9383 (MainWindow.identify_view_on_demand): The dialogs don't need the
9384 interactor parameter anymore.
9385
9386 * Thuban/UI/tableview.py (TableFrame.__init__)
9387 (LayerTableFrame.__init__, LayerTableFrame.OnClose)
9388 (LayerTableFrame.row_selected): The interactor is gone. It's job
9389 from the dialog's point of view is now done by the mainwindow,
9390 i.e. the parent. Subscribe to SHAPES_SELECTED instead
9391 of SELECTED_SHAPE
9392
9393 * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
9394 is gone. It's job from the dialog's point of view is now done by
9395 the mainwindow, i.e. the parent.
9396
9397 * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
9398 gone. It's job from the dialog's point of view is now done by the
9399 mainwindow, i.e. the parent.
9400
9401 * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
9402 gone. It's job from the dialog's point of view is now done by the
9403 mainwindow, i.e. the parent.
9404 (SessionTreeCtrl.__init__): New parameter mainwindow which is
9405 stored as self.mainwindow. The mainwindow is need so that the tree
9406 can still subscribe to the selection messages.
9407 (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
9408 (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
9409 selection is now accessible through the mainwindow. Subscribe to
9410 SHAPES_SELECTED instead of SELECTED_SHAPE
9411
9412 * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
9413 SHAPES_SELECTED message now.
9414 (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
9415 so deal with multiple shapes
9416 (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
9417 gone. It's job from the dialog's point of view is now done by the
9418 mainwindow, i.e. the parent.
9419
9420 * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
9421 parameter is now a list of shape ids.
9422 (RecordTable.SetTable): The second parameter is now a list of
9423 indices.
9424
9425 * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
9426 selected_shape parameter and ivar to selected_shapes. It's now a
9427 list of shape ids.
9428 (MapRenderer.draw_label_layer): Deal with multiple selected
9429 shapes. Rearrange the code a bit so that the setup and shape type
9430 distinctions are only executed once.
9431
9432 * test/test_selection.py: Test cases for the selection class
9433
9434 2003-03-11 Jonathan Coles <[email protected]>
9435
9436 * Thuban/Model/load.py: Temporary fix so that the xml reader
9437 doesn't cause Thuban to crash.
9438
9439 * Thuban/Model/layer.py: Handle the cyclic references between
9440 a layer and its classification better, and be sure to disconnect
9441 the classification from the layer when the layer is destroyed
9442 so that we don't maintain a cyclic reference that may not be
9443 garbage collected.
9444
9445 * Thuban/Model/classification.py: See comment for layer.py.
9446
9447 2003-03-12 Jan-Oliver Wagner <[email protected]>
9448
9449 * HOWTO-Release: New. Information on the steps for releasing
9450 a new version of Thuban.
9451
9452 2003-03-11 Jonathan Coles <[email protected]>
9453
9454 * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
9455 Use True instead of true.
9456 (Classifier): Should have a single panel in which all the controls lie.
9457
9458 * Thuban/UI/proj4dialog.py: Add normal border.
9459
9460 * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
9461
9462 * Thuban/UI/mainwindow.py: Use True instead of true.
9463
9464 * setup.py: Update some definitions to use wxWindows2.4 files
9465
9466 * Data/iceland_sample_class.thuban: Fixed file so that the
9467 field_type information is present.
9468
9469 2003-03-10 Jonathan Coles <[email protected]>
9470
9471 * Thuban/UI/classifier.py (Classifier.__init__): Make the
9472 field type label grow so that when the text changes the
9473 size is updated correctly. This may be a wxWindows bug.
9474
9475 2003-03-10 Jonathan Coles <[email protected]>
9476
9477 * Thuban/UI/application.py: Changed SESSION_CHANGED to
9478 SESSION_REPLACED.
9479
9480 * Thuban/UI/classifier.py: Wrap text with _().
9481 (ClassGrid.CreateTable): Set dimensions and size hints here,
9482 instead of in Reset, so we only set the size once.
9483
9484 * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
9485
9486 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
9487 Call Close() instead of Shutdown().
9488
9489 * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
9490
9491 * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
9492 Go back to using OnClose() instead of Shutdown().
9493
9494 2003-03-10 Jonathan Coles <[email protected]>
9495
9496 * Thuban/UI/classifier.py (Classifier): SelectField() needed
9497 to know the old field index as well as the new one.
9498
9499 2003-03-10 Jonathan Coles <[email protected]>
9500
9501 * Thuban/UI/classifier.py (Classifier): Use __SelectField()
9502 to correctly set the table information and call this from
9503 __init__ and from _OnFieldSelect so that all the information
9504 is up to date when the dialog opens and when a field is changed.
9505
9506 2003-03-10 Jonathan Coles <[email protected]>
9507
9508 * Thuban/Model/classification.py (Classification): Don't use
9509 layer's message function directly, use the ClassChanged() method
9510 when then classification changes. SetField/SetFieldType/SetLayer
9511 must keep the information about field name and field type in
9512 sync when an owning layer is set or removed.
9513
9514 * Thuban/Model/layer.py: Added ClassChanged() so that the
9515 classification can tell the layer when its data has changed.
9516 (Layer.SetClassification): Accepts None as an arguement to
9517 remove the current classification and correctly handles
9518 adding a new classification.
9519
9520 * Thuban/Model/load.py: Comment out print statement
9521
9522 * test/test_classification.py, test/test_save.py: New and
9523 improved tests.
9524
9525 2003-03-07 Jonathan Coles <[email protected]>
9526
9527 * Thuban/Model/classification.py: Implemented __copy__ and
9528 __deepcopy__ for ClassGroup* and ClassGroupProperites so
9529 they can easily be copied by the classifier dialog.
9530 (ClassGroupProperites.__init__): The default line color should
9531 have been Color.Black.
9532
9533 * Thuban/UI/classifier.py: Setting and Getting table values now
9534 uses a consistent set of functions.
9535 (Classifier): Now non-modal. Has field type label which changes
9536 as the field changes. Keep track of buttons in a list so that
9537 we can enable/disable the buttons when the None field is selected.
9538 (SelectPropertiesDialog): Add buttons to make the colors transparent.
9539
9540 * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
9541 does what OnClose did, but can be called by the application to
9542 close a window. Needed when a session changes, and we have to
9543 close the classifier windows.
9544
9545 * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
9546 Shuts down open dialogs. Used when a new session is created
9547 or a session is opened.
9548 (MainWindow.SaveSession): Should only call application.SaveSession()
9549 if we don't call SaveSessionAs first.
9550 (MainWindow.Classify): Allow different classifier dialogs for
9551 different layers.
9552
9553 * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
9554 the parent class handle it. Add Shutdown() to unsubscibe from
9555 event notification and call the parent Shutdown(). This was
9556 necessary so the application can close the tree window.
9557
9558 2003-03-06 Jonathan Coles <[email protected]>
9559
9560 * Thuban/Model/classification.py: Minor documentation changes,
9561 Addition of __eq__ and __ne__ methods.
9562 (Classification.SetLayer): prevent recursion between this method
9563 and Layer.SetClassification().
9564
9565 * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
9566
9567 * Thuban/Model/layer.py (SetClassification): prevent recursion
9568 between this method and Classification.SetLayer().
9569
9570 * test/test_classification.py, test/test_load.py,
9571 test/test_session.py: Fixed and added tests for the classification
9572 classes.
9573
9574 2003-03-06 Bernhard Herzog <[email protected]>
9575
9576 * Thuban/UI/classifier.py (ClassGrid.__init__)
9577 (ClassGrid.CreateTable): Move the SetSelectionMode call to
9578 CreateTable because otherwise it triggers an assertion in
9579 wxPython/wxGTK 2.4.
9580
9581 2003-03-05 Jonathan Coles <[email protected]>
9582
9583 * Thuban/common.py: Move FIELDTYPE constants back to table.py.
9584
9585 * Thuban/Model/load.py: import FIELDTYPE constants from table.
9586
9587 * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
9588
9589 * Thuban/Model/table.py: Put FIELDTYPE constants back.
9590
9591 2003-03-05 Jonathan Coles <[email protected]>
9592
9593 * Thuban/UI/classifier.py: Added class documentation.
9594 Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
9595 Store just the groups in the table and generate the other
9596 column information when it is requested. Add "None" field
9597 to pull-down to select no classification.
9598
9599 * Thuban/common.py: Moved FIELDTYPE constants from table.py
9600 (Str2Num): Only catch ValueError exceptions.
9601
9602 * Thuban/Model/classification.py: Class documentation. Renaming
9603 of methods with Stroke to Line. Groups are stored in a single
9604 list with the default as the first element. Groups are searched
9605 in the order they appear in the list.
9606
9607 * Thuban/Model/color.py: Documentation.
9608
9609 * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
9610 the kind of data represented by a field.
9611
9612 * Thuban/Model/load.py (ProcessSession): Use proper string
9613 conversion function; fixes RTbug #1713.
9614
9615 * Thuban/Model/save.py (Saver): Store field type information.
9616
9617 * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
9618 (Table): Add field_info_by_name() to retrieve field information
9619 by specifying the field name, not the number.
9620
9621 * Thuban/UI/mainwindow.py: Function name changes.
9622
9623 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
9624 get the layer classification once. Don't try to classify
9625 values when the field is None: just use the default properties.
9626
9627 * Thuban/UI/view.py: Function name changes.
9628
9629 * Doc/thuban.dtd: Add field_type attribute to a classification.
9630
9631 2003-03-04 Bernhard Herzog <[email protected]>
9632
9633 * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
9634 the fill and stroke layer attributes optional with suitable
9635 default values. Add the stroke_width layer attribute. Use correct
9636 syntax for empty elements. Make the attribute list for labels
9637 refer to the label element.
9638
9639 2003-03-04 Bernhard Herzog <[email protected]>
9640
9641 * setup.py (thuban_build_py.build): Add a comment about distutils in
9642 Python 2.3 containing some of the functionality we implement in
9643 setup.py ourselves.
9644
9645 * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
9646 before the selection mode. Doing it the other way round triggers
9647 an assertion in wxWindows.
9648
9649 * Thuban/Model/save.py (escape): Fix typo in doc-string
9650
9651 * Thuban/Model/classification.py: Remove unnecessary wxPython
9652 import
9653
9654 2003-03-04 Jonathan Coles <[email protected]>
9655
9656 * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
9657 Parameter 'value' should default to None.
9658
9659 * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
9660 the class attribute __classification is now private.
9661
9662 * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
9663 Classifier to ClassGrid. Added support for removing selected rows,
9664 which including code for keeping track of when cells are selected,
9665 and deselected.
9666 (ClassTable): Support for added/removing rows. Fixed a problem
9667 with __ParseInput whereby it would not allow strings (only numbers)
9668 to be entered.
9669 (Classifier): Added button and supporting code for removing
9670 selected rows.
9671
9672 2003-02-27 Jonathan Coles <[email protected]>
9673
9674 * Thuban/common.py: Moved color conversion functions into
9675 Thuban/UI/common.py.
9676 (Str2Num): Now converts the float (not the string) to a long/int
9677 so that an exception isn't thrown.
9678
9679 * Thuban/UI/common.py: Common functions used in several UI modules
9680
9681 * Thuban/Model/classification.py: Changed the class hierarchy
9682 so that a Classification consists of Groups which return
9683 Properties when a value matches a Group.
9684
9685 * Thuban/Model/layer.py: Fixed name resolution problem.
9686
9687 * Thuban/Model/load.py: Use new Classification and Group functions.
9688
9689 * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
9690 failure.
9691 (Saver.write_classification): Use new Classification and Group
9692 functions.
9693
9694 * Thuban/UI/classifier.py: Changes to use new Classification and Group
9695 functions. Fix to create a tuple with a single value instead of
9696 simply returning the value.
9697
9698 * Thuban/UI/renderer.py: Use new Classification and Group functions.
9699 Use common.py functions.
9700
9701 * Thuban/UI/tree.py: Use common.py functions.
9702
9703 * test/test_classification.py: Use new Classification and Group
9704 classes.
9705
9706 2003-02-24 Jonathan Coles <[email protected]>
9707
9708 * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
9709 functions from Thuban color objects to wxWindow colour objects.
9710
9711 * Thuban/Model/classification.py (Classification): Renamed
9712 GetProperties() to GetClassData(). Used the new iterator
9713 in TreeInfo().
9714 (ClassIterator): Iterator implementation to iterate over the
9715 ClassData objects in a classification object.
9716
9717 * Thuban/Model/save.py (Saver.write_classificaton): Uses
9718 the new iterator to save the classification information.
9719
9720 * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
9721 for changing the stroke and fill colors and previewing the
9722 changes.
9723
9724 * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
9725 MainWindow.SaveSessionAs): Text string changes so the dialogs
9726 have more meaningful titles.
9727
9728 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
9729 Classification method name from GetProperties to GetClassData.
9730
9731 * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
9732 instead of accessing now non-existent class variables.
9733
9734 2003-02-24 Bernhard Herzog <[email protected]>
9735
9736 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
9737 unneeded Shape() call. Rendering is substantially faster without
9738 it and it avoids some problems with broken shape files.
9739
9740 2003-02-20 Frank Koormann <[email protected]>
9741
9742 Force minimal size of identify and label dialogs. The autosizing
9743 looked too ugly.
9744
9745 * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
9746 * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
9747 Set size of listctrl.
9748 * Thuban/UI/identifyview.py (IdentifyView.__init__):
9749 Set size of dialog.
9750
9751 2003-02-19 Jonathan Coles <[email protected]>
9752
9753 * test/test_classification.py, test/test_layer.py,
9754 test/test_load.py, test/test_map.py, test/test_session.py:
9755 Updated the tests to use the new functions that are in the
9756 respective classes.
9757
9758 * Thuban/Model/classification.py (Classification):
9759 Uses the new ClassData* classes. Modification messages are
9760 passed up to the parent layer (if it exists).
9761 (ClassData): New class to encapsulate the common data in each
9762 classification property.
9763 (ClassDataDefault): Represents the Default class. data.
9764 (ClassDataPoint): Represents a single class. data point
9765 (ClassDataRange): Represents a class. range
9766 (ClassDataMap): Represents a class. map (unused).
9767
9768 * Thuban/Model/color.py: Added Color.None to represent something
9769 with no color. Color.Black represents the color black.
9770 (NoColor): Helper class derived from Color to represent something
9771 with no color.
9772
9773 * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
9774 stroke_width attributes. Made the 'classification' attribute private.
9775 New methods for setting/getting the classification.
9776
9777 * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
9778 to get the classifcation and use the new ClassData* classes to
9779 hold the classification data. Use Str2Num to convert numbers
9780 properly.
9781
9782 * Thuban/Model/save.py (Saver): Use new Color and Classification
9783 methods
9784
9785 * Thuban/UI/classifier.py (ClassGrid): New class to represent a
9786 custom grid.
9787 (ClassTable): Support for editing Values and Labels and for
9788 changing what type (point or range) of data is stored in each
9789 property based on how the user enters the data.
9790 (Classifier): Support for saving the new classifications and
9791 launching the dialog to edit a property.
9792 (SelectPropertiesDialog): New class for editing the visual
9793 properties of a classification (stroke color, width, and fill color)
9794 (ClassPreviewer): Took the Draw method from ClassRenderer and
9795 made most of it into this new class. Intend to use this class in
9796 the SelectPropertiesDialog for previewing changes.
9797
9798 * Thuban/UI/renderer.py: Use new Color and Classification methods.
9799
9800 * Thuban/UI/tree.py: Formatting changes.
9801
9802 * Doc/thuban.dtd: Add 'label' element
9803
9804 * Thuban/common.py: New. Contains common routines used throughout
9805 the code.
9806 (Str2Num): Takes a string and converts it to the "best" type of
9807 number.
9808
9809 2003-02-14 Bernhard Herzog <[email protected]>
9810
9811 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
9812 dragging flag is always set to 0 even when the tool implementation
9813 raises an exception
9814
9815 2003-02-11 Bernhard Herzog <[email protected]>
9816
9817 * Thuban/UI/application.py (ThubanApplication.splash_screen): New
9818 method to create a splash screen.
9819 (ThubanApplication.ShowMainWindow): New. Show the main window.
9820 Needed so the splash screen can display the mainwindow
9821 (ThubanApplication.OnInit): Call the
9822 new splash_screen method to determine whether the application
9823 should display a splash screen. If it displays a splash screen do
9824 not immediately show the main window.
9825
9826 2003-02-11 Jonathan Coles <[email protected]>
9827
9828 * Thuban/Model/classification.py: Added import line to fix
9829 feature conflicts between running on python2.2 and python2.1.
9830
9831 * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
9832 onto the clinfo parameter, so removed the deepcopy().
9833
9834 2003-02-10 Jonathan Coles <[email protected]>
9835
9836 * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
9837 Added element_open variable to track opening and closing of tags
9838 so that tags that don't span more than one line are closed with
9839 /> instead of </tag_name>. Use the GetDefault*() methods of
9840 the Classification class.
9841
9842 * Thuban/Model/classification.py (Classificaton): Added set and
9843 get methods for the default data. The class also takes a layer
9844 reference so that modification messages can be sent. Fixed the
9845 methods to use the new ClassData class.
9846 (ClassData): New class to encapsulate the classification data
9847
9848 * Thuban/Model/layer.py (Layer): Remove the
9849 Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
9850 SetDefault*() methods on the layer's classification object.
9851 (Layer.__init__): Use the new SetDefault*() methods in the
9852 Classification class.
9853
9854 * Thuban/Model/load.py (ProcessSession): Use the new ClassData
9855 object instead of a dictionary.
9856
9857 * Thuban/UI/classifier.py (ClassRenderer): New class to
9858 draw the classifications in the dialog box's table.
9859 (Classifier): Modified to use the ClassRenderer class.
9860
9861 * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
9862 methods of the Classification class.
9863
9864 * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
9865 of the ClassData class.
9866
9867 * test/test_classification.py, test/test_layer.py,
9868 test/test_map.py, test/test_session.py: Fix the tests to work
9869 with the above code changes.
9870
9871 2003-02-03 Jonathan Coles <[email protected]>
9872
9873 * Thuban/Model/classification.py (Classification): Added getNull()
9874 to return the NullData reference
9875
9876 * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
9877 Layer.SetStrokeWidth): Modified these functions to change the
9878 null data in the classification rather than keep these values
9879 directly in the Layer class. Menu options to change these values
9880 work again.
9881
9882 2003-01-28 Jonathan Coles <[email protected]>
9883
9884 * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
9885 Fixed crashing problem on some systems. Dialog box shows
9886 classification data.
9887
9888 * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
9889 Colors in the tree view.
9890
9891 * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
9892 the tree info for classifications. Commented out unnecessary lines.
9893
9894 * Thuban/Model/classification.py (Classification.TreeInfo): New
9895 function to add information about the classification into the
9896 tree view.
9897
9898 2003-01-27 Jan-Oliver Wagner <[email protected]>
9899
9900 * Thuban/__init__.py (_): New.
9901
9902 * Thuban/Model/classification.py, Thuban/Model/extension.py,
9903 Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
9904 Thuban/Model/session.py, Thuban/UI/application.py,
9905 Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
9906 Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
9907 Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
9908 Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
9909 Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
9910
9911 2003-01-27 Jonathan Coles <[email protected]>
9912
9913 * Thuban/Model/layer.py: Classification initialization calls.
9914
9915 * Thuban/Model/classification.py: Created class to encapsulate
9916 a layer classification. Supports specific data points and
9917 ranges.
9918
9919 * Thuban/Model/load.py: Added support for loading classification
9920 information.
9921
9922 * Thuban/Model/save.py: Added support for saving classification
9923 information.
9924
9925 * Thuban/UI/classifier.py: Initial class for a dialog box for
9926 specifying classification information.
9927
9928 * Thuban/UI/mainwindows.py: Support for opening the classifier
9929 dialog.
9930
9931 * Thuban/UI/renderer.py: Support for drawing a layer with the
9932 classification information.
9933
9934 * Data/iceland_sample_class.thuban: iceland_sample with
9935 classification data.
9936
9937 * test/test_classification: Tests for the Classification class.
9938
9939 2002-12-09 Bernhard Herzog <[email protected]>
9940
9941 * test/test_command.py: New. Tests for the command classes.
9942
9943 * Thuban/UI/command.py (ToolCommand): New class for tool commands.
9944 (Command.IsTool): New method to distinguish between command
9945 switching tools and other commands.
9946
9947 * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
9948 the tool to avoid direct assignments to instance variables
9949 (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
9950 (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
9951 change the tool
9952
9953 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
9954 active tool's command turns insensitive, disable the tool.
9955 (_tool_command): Use the new ToolCommand class
9956
9957 * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
9958 SelectTool method to change the tool
9959 (iconfile): Use the ToolCommand class
9960
9961 2002-12-03 Bernhard Herzog <[email protected]>
9962
9963 * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
9964 the case of selected items that are not children of Layers or Maps
9965 properly. Previously this bug would trigger an assertion in
9966 wxWindows.
9967
9968 2002-11-06 Frank Koormann <[email protected]>
9969
9970 * Thuban/UI/mainwindow.py: Altered the order of tools in the
9971 toolbar: First now are all navigation tools (Zoom In/Out, Pan,
9972 Full Extent).
9973
9974 2002-10-23 Bernhard Herzog <[email protected]>
9975
9976 * setup.py (setup call): version now 0.1.3
9977
9978 * MANIFEST.in: Add the files in test/
9979
9980 * test/README: Add note about tests requiring the iceland data
9981
9982 * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
9983 copyright notice.
9984
9985 2002-10-18 Bernhard Herzog <[email protected]>
9986
9987 * test/test_map.py
9988 (TestMapWithContents.test_projected_bounding_box): Use an explicit
9989 epsilon.
9990
9991 * test/support.py (FloatComparisonMixin.assertFloatEqual)
9992 (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
9993 message if the assertion fails and don't return the return value
9994 of self.assert_. In assertFloatSeqEqual the return meant that not
9995 all items of the sequence were compared.
9996
9997 2002-09-20 Bernhard Herzog <[email protected]>
9998
9999 * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
10000
10001 * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
10002
10003 * test/test_map.py (TestMapWithContents.test_tree_info): Create
10004 the string with the bounding box on the fly because of platform
10005 differences in the way %g is handled.
10006
10007 * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
10008 DBFfile too because Thuban layers can't yet cope missing DBF
10009 files.
10010
10011 2002-09-20 Bernhard Herzog <[email protected]>
10012
10013 * test/test_menu.py: Use initthuban instead of
10014 add_thuban_dir_to_path to initialize Thuban.
10015
10016 * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
10017 Mixin class for float comparisons
10018 (SubscriberMixin): New. Mixin class to test messages sent through
10019 the Connector class
10020
10021 * test/README: Fix a typo and add the -v flag to the command for
10022 individual tests
10023
10024 * test/test_session.py: New. Test cases for Thuban.Model.session
10025
10026 * test/test_proj.py: New. Test cases for Thuban.Model.proj
10027
10028 * test/test_map.py: New. Test cases for Thuban.Model.map
10029
10030 * test/test_layer.py: New. Test cases for Thuban.Model.layer
10031
10032 * test/test_label.py: New. Test cases for Thuban.Model.label
10033
10034 * test/test_connector.py: New. Test cases for Thuban.Lib.connector
10035
10036 * test/test_color.py: New. Test cases for Thuban.Model.color
10037
10038 * test/test_base.py: New. Test cases for Thuban.Model.base
10039
10040 2002-09-13 Bernhard Herzog <[email protected]>
10041
10042 * Thuban/Model/session.py (Session.forwarded_channels): Forward
10043 the CHANGED channel too.
10044
10045 * Thuban/Model/map.py (Map.forwarded_channels): Forward the
10046 CHANGED channel too.
10047 (Map.__init__): Call the Modifiable constructor as well.
10048
10049 * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
10050 event if the modified flag changes.
10051 (Modifiable.changed): Tweak the doc-string.
10052
10053 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
10054 (MainWindow.set_position_text): Put the code that puts the text
10055 with the mouse position into the status bar into the new method
10056 set_position_text so that it can overwritten in derived classes.
10057
10058 2002-09-12 Bernhard Herzog <[email protected]>
10059
10060 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
10061 message box on the main window.
10062
10063 2002-09-11 Bernhard Herzog <[email protected]>
10064
10065 * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
10066 the 'E' because it's less likely to interfere with other menu
10067 entries.
10068 (MainWindow.build_menu): remove an incorrect comment.
10069
10070 2002-09-10 Bernhard Herzog <[email protected]>
10071
10072 * Thuban/UI/mainwindow.py (MainWindow.Map): New.
10073 (_tool_command): Add sensitive parameter
10074 (_has_visible_map): Sensitivity callback to tools and other
10075 commands that require a visible map. Use it in map_zoom_in_tool,
10076 map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
10077 and map_full_extent
10078
10079 2002-09-06 Bernhard Herzog <[email protected]>
10080
10081 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
10082 VIEW_POSITION
10083
10084 2002-09-04 Frank Koormann <[email protected]>
10085
10086 * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
10087
10088 2002-09-02 Bernhard Herzog <[email protected]>
10089
10090 * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
10091 wxWindows already and our implementation doesn't work correctly
10092 with wxGTK 2.3:
10093 (MapCanvas.__init__): Remove the instance variable
10094 (MapCanvas.OnPaint): Always call do_redraw when there's a map to
10095 be drawin
10096 (MapCanvas.OnIdle): Removed.
10097
10098 * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
10099 a parameter to determine the size of the rectangle.
10100 (MapCanvas.find_shape_at): Create the box around the point on a
10101 layer by layer basis and make the size depend on the shape type.
10102 This solves a problem with the selection of point shapes at the
10103 border of the layer's bounding box
10104
10105 2002-08-30 Bernhard Herzog <[email protected]>
10106
10107 * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
10108 for the sensitivity of remove layer.
10109 (_can_remove_layer): New. Sensitivity callback for remove layer
10110 (Command layer_remove): Use _can_remove_layer
10111
10112 * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
10113 determine whether a given layer can be deleted.
10114
10115 * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
10116 (MapCanvas.do_redraw): Get rid of the unused update_region
10117 instance variable
10118
10119 * Thuban/UI/view.py: Add/update some doc-strings.
10120
10121 * test/: new subdirectory with a bunch of unit tests.
10122
10123 * test/README, test/test_table.py, test/test_save.py,
10124 test/test_menu.py, test/test_load.py: Initial set of tests and
10125 brief instructions on how to run them
10126
10127 2002-08-29 Bernhard Herzog <[email protected]>
10128
10129 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
10130 arcs with multiple parts.
10131
10132 * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
10133 Handle degenrate rectangles.
10134
10135 * Thuban/Model/table.py: Make writing records work correctly:
10136 (Table.__init__): Keep track of whether the DBF is open for
10137 writing
10138 (Table.write_record): Open the DBF file for writing when necessary
10139
10140 2002-08-27 Bernhard Herzog <[email protected]>
10141
10142 * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
10143 dbf files only for reading by default. Use a new writable dbf
10144 object for writing.
10145
10146 2002-08-26 Bernhard Herzog <[email protected]>
10147
10148 * Thuban/UI/mainwindow.py: Refactor the context creation:
10149 (MainWindow.Context): New method to return a context
10150 (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
10151 new method
10152
10153 * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
10154 layer table specific code from TableGrid into LayerTableGrid
10155 (TableFrame, LayerTableFrame): Split the layer table specific code
10156 from TableFrame into LayerTableFrame
10157 (LayerTableGrid.select_shape): Remove a debug print
10158
10159 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
10160 LayerTableFrame
10161
10162 2002-08-23 Bernhard Herzog <[email protected]>
10163
10164 * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
10165 absolute filename.
10166
10167 2002-08-22 Bernhard Herzog <[email protected]>
10168
10169 * Thuban/Model/table.py (Table.write_record): New method to write
10170 records.
10171 (Table.__init__): Open the DBF file for writing too.
10172
10173 * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
10174 into the underlying table.
10175
10176 * extensions/shapelib/shapefil.h (DBFCommit),
10177 extensions/shapelib/dbfopen.c (DBFCommit): New API function to
10178 commit any changes made to the DBF file.
10179
10180 * Thuban/UI/mainwindow.py (make_check_current_tool)
10181 (_tool_command): Put the code that generates the "checked"
10182 callback into a separate function so that we can reuse it
10183 elsewhere
10184
10185 * Thuban/Model/save.py (Saver): New class to handle serializing a
10186 session into an XML file. The main reason to introduce a class is
10187 that applications built on Thuban can derive from it so that they
10188 can save additional information in a session file.
10189 (save_session): Delegate almost all the work to the Saver class.
10190 Rename the filename argument to file because it may be a file like
10191 object now.
10192
10193 * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
10194 code. Remove the little test code which would be executed when the
10195 module is run as a script which didn't work anymore since it can't
10196 import the other Thuban modules.
10197 (ProcessSession, load_session): Refactor the ProcessSession to
10198 have one method for each element start and end tag so that derived
10199 classes can easily override the processing of individual tags.
10200 Also, always parse with namespaces enabled because applications
10201 built on top of Thuban will likely use namespaces if they extend
10202 the session file format.
10203
10204 2002-08-21 Bernhard Herzog <[email protected]>
10205
10206 * setup.py (ThubanInstall.run): Don't repr install_lib_orig
10207 because thubaninit_contents will do it for us.
10208
10209 2002-08-16 Jan-Oliver Wagner <[email protected]>
10210
10211 * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
10212 tree window already open
10213
10214 2002-08-15 Bernhard Herzog <[email protected]>
10215
10216 * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
10217 with self.
10218
10219 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
10220 when we have actually captured it.
10221
10222 * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
10223 shapefile and destroy the table.
10224
10225 * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
10226
10227 2002-08-14 Bernhard Herzog <[email protected]>
10228
10229 * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
10230 instance variable columns
10231 (RecordTable.GetTypeName): row and col may be negative in some
10232 cases.
10233
10234 * setup.py (InstallLocal.initialize_options)
10235 (InstallLocal.finalize_options, InstallLocal.user_options): New
10236 option create-init-file to build a thubaninit.py when running
10237 install_local
10238 (InstallLocal.run): Create the thubaninit.py module when requested
10239 (thubaninit_contents): Split the template into several parts and
10240 create a new function thubaninit_contents that creates the
10241 contents of a thubaninit module.
10242 (ThubanInstall.run): Use the new function to create the thubaninit
10243 module.
10244
10245 2002-07-30 Bernhard Herzog <[email protected]>
10246
10247 * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
10248 cleanup.
10249 (ThubanApplication.MainLoop): Extend to automatically call OnExit.
10250
10251 * Thuban/Model/session.py (Session.Destroy): Don't bypass the
10252 direct base class' Destroy method.
10253
10254 * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
10255 layers.
10256 (Map.Destroy): Destroy the label_layer as well and call the
10257 inherited Desatroymethod first so that no more messages are
10258 issued.
10259 (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
10260 message if the stacking order actually has changed. Add
10261 doc-strings.
10262 (Map.BoundingBox): Correct the doc-string.
10263 (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
10264 (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
10265
10266 * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
10267 all labels.
10268
10269 2002-07-29 Bernhard Herzog <[email protected]>
10270
10271 * Thuban/Model/map.py (Map.subscribe_layer_channels)
10272 (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
10273 to a layer's channels into separate methods.
10274 (Map.RemoveLayer, Map.AddLayer): Call the new methods
10275 (Map.Destroy): Unsubscribe from a layer's channels before
10276 destroying it.
10277
10278 * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
10279 selected_layer parameter to searched_layer which is the layer to
10280 search in.
10281 (MapCanvas.SelectShapeAt): New parameter layer to restrict the
10282 search to that layer. Return the selected layer and shape.
10283
10284 * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
10285 typo
10286
10287 2002-07-24 Bernhard Herzog <[email protected]>
10288
10289 * Thuban/UI/application.py (ThubanApplication.create_session):
10290 Extend the doc string.
10291 (ThubanApplication.subscribe_session)
10292 (ThubanApplication.unsubscribe_session): New methods to
10293 subscribe/unsubscribe to/from session channels.
10294 (ThubanApplication.SetSession): Call the new methods here.
10295 (ThubanApplication.maps_changed, ThubanApplication.set_map):
10296 Renamed set_map to maps_changed. Its now a subscriber for
10297 MAPS_CHANGED.
10298
10299 * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
10300 x-coordinate in case of simple clicks
10301
10302 * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
10303 don't pass it as a parameter
10304
10305 * Thuban/Model/session.py (Session.RemoveMap): New
10306
10307 * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
10308 window size into a parameter.
10309
10310 2002-07-23 Bernhard Herzog <[email protected]>
10311
10312 * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
10313 just commands.
10314
10315 * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
10316 parameter list a bit to allow setting the window title and the
10317 initial message in the status bar. Update the callers.
10318
10319 * Thuban/UI/application.py (ThubanApplication.OnInit)
10320 (ThubanApplication.CreateMainWindow): Put the mainwindow
10321 instantiation into a separate method so that it can be overridden
10322 by a subclass.
10323
10324 2002-07-19 Bernhard Herzog <[email protected]>
10325
10326 * Thuban/Model/session.py: Issue a CHANGED message every time
10327 another changed message is issued to make it easier to get
10328 notified of changes.
10329 (Session): Update the doc string
10330 (Session.forward): Issue changed-events as CHANGED as well.
10331 (Session.changed): Overwrite the inherited version to issue
10332 CHANGED events as well.
10333
10334 * Thuban/UI/tree.py: We can now simply subscribe to the session's
10335 CHANGED channel to be informed of changes.
10336 (SessionTreeCtrl.session_channels): Not needed any longer.
10337 (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
10338 Only have to (un)subscribe CHANGED
10339
10340 * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
10341
10342 * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
10343 for the wxPython locale bug to __init__.py so that it's
10344 automatically executed by anybody using UI code from Thuban.
10345
10346 2002-07-18 Bernhard Herzog <[email protected]>
10347
10348 * Thuban/UI/main.py (main): app no longer needs to be global
10349
10350 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
10351 as parameter and store it in an instance variable
10352 (MainWindow.invoke_command, MainWindow.update_command_ui)
10353 (MainWindow.save_modified_session, MainWindow.NewSession)
10354 (MainWindow.OpenSession, MainWindow.SaveSession)
10355 (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
10356 application object.
10357
10358 * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
10359 the main window with self.
10360
10361 * Thuban/UI/context.py: New module with the context class
10362
10363 * Thuban/UI/command.py (Command): Update doc string.
10364
10365 * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
10366 MainWindow.update_command_ui): Pass an instance of the context
10367 class to the command's methods
10368 (check_current_tool, call_method): Handle the new context
10369 implementation
10370
10371 * Examples/simple_extensions/simple_tool.py (simple_tool,
10372 check_simple_tool): Handle the new context implementation
10373
10374 * Examples/simple_extensions/simple_command.py (simple_command):
10375 Handle the new context implementation. Update the comments about
10376 the context.
10377
10378 * Thuban/UI/application.py (ThubanApplication.SetSession): Add
10379 doc-string
10380 (ThubanApplication.Session): New method to return the session
10381 object
10382
10383 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
10384 interactor's selected_layer may not be a layer of the current
10385 session when the tree is updated while a new session is being set.
10386
10387 2002-07-17 Bernhard Herzog <[email protected]>
10388
10389 * Thuban/UI/tree.py (color_string): Removed. No longer used.
10390 (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
10391 update_tree into update_tree and add_items. The tree now uses a
10392 more generic way to display the contents of the tree.
10393 (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
10394
10395 * Thuban/Model/layer.py (Layer.TreeInfo),
10396 Thuban/Model/extension.py (Extension.TreeInfo),
10397 Thuban/Model/map.py (Map.TreeInfo),
10398 Thuban/Model/session.py (Session.TreeInfo):
10399 Add TreeInfo methods to implement the new tree view update scheme
10400
10401 2002-07-16 Bernhard Herzog <[email protected]>
10402
10403 * Thuban/UI/application.py: Don't use "import from" for the
10404 MainWindow. It can't always be resolved.
10405 (ThubanApplication.OnInit): change reference to MainWindow
10406 accordingly.
10407
10408 * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
10409 completely
10410
10411 2002-07-10 Bernhard Herzog <[email protected]>
10412
10413 * setup.py (create_init_module): New configurable variable whose
10414 default depends on the platform we're running on.
10415 (ThubanInstall.initialize_options): Initialize
10416 self.create_init_module from the global create_init_module
10417 (ThubanInstall.user_options): indictate that the options
10418 create-init-module and init-module-dir have arguments.
10419
10420 * setup.py: In the setup call change the version number to include
10421 cvs.
10422
10423 * MANIFEST.in: Add the files in Examples
10424
10425 2002-07-09 Bernhard Herzog <[email protected]>
10426
10427 * setup.py: In the setup call, use the thuban homepage as the
10428 value of the url parameter.
10429
10430 * Examples: New subdirectory for examples.
10431
10432 * Examples/simple_extensions/simple_tool.xpm,
10433 Examples/simple_extensions/simple_tool.py,
10434 Examples/simple_extensions/simple_command.py,
10435 Examples/simple_extensions/README: Simple examples showing how to
10436 add new commands and tools.
10437
10438 * setup.cfg (bdist_rpm): Add the default value for prefix and tell
10439 bdist_rpm that we also have an install script.
10440 (bdist_inno): Add 2002 to the copyright notice.
10441
10442 * setup.py: Create a file in python's site-packages directory to
10443 make installation of Thuban as a library easier.
10444 (ThubanInstall.user_options): Add two new options,
10445 create-init-module and init-module-dir
10446 (ThubanInstall.expand_with_pure_python_dirs): New method to expand
10447 filenames for installation in the default directories.
10448 (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
10449 the inherited methods to capture some filenames before they're
10450 transformed too much by distutils.
10451 (ThubanInstall.run): Create the init module if requested.
10452 (ThubanInstall.thuban_init_filename): New method to return the
10453 full name of the init module.
10454 (ThubanInstall.get_outputs): Append the filename of the init
10455 module.
10456
10457 2002-07-08 Bernhard Herzog <[email protected]>
10458
10459 * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
10460 handle the prefix properly which means that the default for the
10461 installation prefix should be /usr for RPMs and /usr/local when
10462 doing a normal source install.
10463 (bdist_rpm_install_script): Script to override the default install
10464 commands in the specfile generated by the bdist_rpm command.
10465 (thuban_bdist_rpm.user_options): Add a prefix option
10466 (thuban_bdist_rpm.initialize_options): Init the prefix option.
10467 Create the script files for the spec files as empty files here
10468 (thuban_bdist_rpm._make_spec_file): Override the inherited method
10469 to fill the script files with content.
10470
10471 * Thuban/Model/save.py (relative_filename): Wrapper around
10472 Thuban.Lib.fileutil.relative_filename that accepts an empty dir
10473 argument. save_session now automatically uses this version,
10474 solving a problem when saving to a relative filename.
10475
10476 * setup.py: In the setup call, make sure that the library
10477 directories are under $prefix/lib not directly under $prefix.
10478
10479 2002-06-20 Jan-Oliver Wagner <[email protected]>
10480
10481 * Thuban/Model/extension.py: new module to handle extension objects.
10482 * Thuban/Model/messages.py: new messages for extensions.
10483 * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
10484 Session.AddExtension): new for handling extensions.
10485 Also some other minor changes to round up extension handling.
10486 * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
10487 of Extension titles and title and names of its objects.
10488
10489 2002-05-29 Bernhard Herzog <[email protected]>
10490
10491 * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
10492 the events for a command.
10493 (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
10494 Call bind_command_events to bind the events. add_toolbar_command
10495 can now bind events too so that it's possible to have commands
10496 that are only available through the toolbar.
10497 (MainWindow.init_ids): New instance variable events_bound to keep
10498 track of for which commands events have been bound.
10499
10500 2002-05-28 Bernhard Herzog <[email protected]>
10501
10502 * Thuban/UI/menu.py: New module to build and manage menus.
10503
10504 * Thuban/UI/mainwindow.py: Remove some unused imports.
10505 (MainWindow.__init__, main_menu): move the definition of the main
10506 menu from __init__ to the Menu instance main_menu.
10507 (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
10508 build the menu bar and sub-menus from a menu description.
10509
10510 * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
10511 startup file
10512 (ThubanApplication.read_startup_files): New method to run
10513 ~/.thuban/thubanstart.py
10514
10515 * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
10516 Move the toolbar definition to the Menu instance main_toolbar.
10517 (MainWindow.build_toolbar): New method to build the toolbar
10518 similar to the build_menu methods
10519
10520 2002-05-23 Bernhard Herzog <[email protected]>
10521
10522 * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
10523 layer_outline_color. Fix it in the definition of the command too.
10524
10525 * Thuban/UI/command.py (Command): Fix typo in doc string
10526
10527 2002-05-22 Bernhard Herzog <[email protected]>
10528
10529 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
10530 in the docstring
10531
10532 2002-05-15 Bernhard Herzog <[email protected]>
10533
10534 * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
10535 when the shapefile is empty.
10536 (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
10537 now return None for empty shapefiles. Update doc-strings.
10538
10539 * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
10540 the layer's bbox being None.
10541
10542 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
10543 layer's bbox being None.
10544
10545 * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
10546 necessary.
10547 (MapCanvas.__init__): New instance variables, last_selected_layer
10548 and last_selected_shape to determine how the selection has
10549 changed.
10550
10551 * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
10552 AutoSizeColumns because it will cause a traversal of the entire
10553 table which for large .dbf files will take a very long time.
10554
10555 2002-05-14 Bernhard Herzog <[email protected]>
10556
10557 * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
10558 maximum depth for the tree than shapelib does by default.
10559
10560 2002-05-10 Bernhard Herzog <[email protected]>
10561
10562 * setup.py (py_modules): The shptree modules doesn't have a
10563 wrapper, so don't include it in the py_modules
10564
10565 2002-05-08 Bernhard Herzog <[email protected]>
10566
10567 * extensions/shapelib/shptree.c (compare_ints): Make arguments
10568 const void * as in the qsort prototype
10569 (SHPTreeFindLikelyShapes): Remove some unused variables.
10570
10571 * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
10572 maintains to redraw the window during a drag.
10573 (MapCanvas.unprojected_rect_around_point): New method to determine
10574 a small region around a point for hit-testing.
10575 (MapCanvas.find_shape_at): Only test the shapes in a small region
10576 around the point.
10577
10578 * setup.py: Increment the version to 0.1.2
10579
10580 * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
10581 debug print and set session to None after unsubscribing
10582
10583 2002-05-07 Bernhard Herzog <[email protected]>
10584
10585 * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
10586 the file to have a .thuban extension.
10587
10588 * Thuban/UI/tree.py (session_channels): New class constant with
10589 all the session channels to subscribe to to update the tree
10590 (SessionTreeCtrl.session_changed): Remember the session so that we
10591 can unsubscribe properly. Use the new class constant to
10592 unsubscribe from the old session and subscribe to the new one.
10593 (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
10594 subscriptions of the SessionTreeCtrl.
10595 (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
10596
10597 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
10598 Session Tree" command to the file menu.
10599
10600 * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
10601 as update_region to the renderer.
10602
10603 * Thuban/UI/renderer.py
10604 (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
10605 update box is now directly a tuple, not a wxRect anymore.
10606
10607 * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
10608 prints.
10609
10610 2002-05-07 Bernhard Herzog <[email protected]>
10611
10612 * setup.py: Add the shptree extension module. See
10613 extensions/pyshapelib/ChangeLog for more details.
10614
10615 * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
10616 extensions/shapelib/dbfopen.c: Really update to the versions of
10617 shapelib 1.2.9. For some reason it wasn't really done on
10618 2002-04-11.
10619
10620 * extensions/shapelib/shptree.c: Modified version of shptree.c of
10621 shapelib 1.2.9. The only real difference is the use of qsort
10622 instead of a bubble sort implementation
10623
10624 * Thuban/Model/layer.py (Layer.__init__): New instance variable
10625 shapetree to hold the shapelib quadtree for the shapefile
10626 (Layer.open_shapefile): Create the quad tree.
10627 (Layer.ShapesInRegion): New method to return the ids of shapes in
10628 a given region using the quad tree.
10629
10630 * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
10631 comment
10632 (draw_polygon_shape): Accept both arcs and polygons.
10633 (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
10634 the api.
10635
10636 * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
10637 return the shape ids to be rendered in a given layer.
10638 (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
10639 ids. Use draw_polygon_shape to draw arc shapes as well.
10640 (ScreenRenderer.RenderMap): New parameter for the rectangle that
10641 has to be updated
10642 (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
10643 calling it's ShapesInRegion method.
10644
10645 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
10646 update_region for the update region.
10647 (MapCanvas.OnPaint): Maintain the update region
10648 (MapCanvas.do_redraw): Pass the bounding box of the update_region
10649 to the renderer when drawing the bitmap. Reset the update_region.
10650
10651 2002-05-03 Bernhard Herzog <[email protected]>
10652
10653 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
10654 MainWindow.OpenSession): Change the file extension of the session
10655 files to .thuban
10656
10657 * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
10658 Move the map channels to be forwarded by the session into the
10659 class constant with forwarded_channels. Also add
10660 LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
10661 forwarded_channels
10662
10663 * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
10664 typo and some rewording).
10665
10666 2002-05-02 Bernhard Herzog <[email protected]>
10667
10668 * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
10669 around to speed up most redraws:
10670 (MapCanvas.__init__): New instance variable bitmap which holds the
10671 bitmap
10672 (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
10673 self.bitmap to draw.
10674 (MapCanvas.full_redraw): New method to force a full redraw
10675 including the bitmap
10676 (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
10677 make sure the bitmap is redrawn.
10678 (MapCanvas.projection_changed, MapCanvas.set_view_transform,
10679 MapCanvas.shape_selected): Call full_redraw instead of readraw to
10680 make sure the bitmap is redrawn.
10681 (MapCanvas.OnSize): New method to handle size events so that the
10682 bitmap can be redrawn.
10683
10684 2002-04-29 Bernhard Herzog <[email protected]>
10685
10686 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
10687 canvas' VIEW_POSITION event
10688 (MainWindow.view_position_changed): Handler for VIEW_POSITION.
10689 Update the text in the status-bar accordingly.
10690
10691 * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
10692 (MapCanvas.__del__): Implement because Publisher.__del__ has to be
10693 called.
10694 (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
10695 current_position
10696 (MapCanvas.set_current_position): New method to set
10697 current_position. Issue a VIEW_POSITION event
10698 (MapCanvas.CurrentPosition): New public method to return the value
10699 of current_position. Should be called when the VIEW_POSITION event
10700 is processed.
10701 (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
10702 Update the position.
10703 (MapCanvas.OnLeaveWindow): Set the position to None.
10704
10705 * Thuban/UI/messages.py (VIEW_POSITION): New message for the
10706 position in the statusbar
10707
10708 2002-04-26 Frank Koormann <[email protected]>
10709
10710 * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
10711
10712 2002-04-24 Frank Koormann <[email protected]>
10713
10714 * Resources/Bitmaps/identify.xpm: shadow added
10715
10716 * Resources/Bitmaps/fullextent.xpm: new
10717
10718 2002-04-22 Jan-Oliver Wagner <[email protected]>
10719
10720 * Thuban/UI/tree.py (update_tree): added test for None on map bounding
10721 box
10722
10723 2002-04-21 Jan-Oliver Wagner <[email protected]>
10724
10725 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
10726
10727 * Thuban/UI/tree.py (update_tree): added added map extent
10728
10729 * Thuban/UI/mainwindow.py (_method_command): extended by parameter
10730 icon; added map_full_extend as tool
10731
10732 2002-04-19 Jan-Oliver Wagner <[email protected]>
10733
10734 * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
10735 saving _new_ sessions
10736
10737 * Thuban/Model/session.py (create_empty_session): new session
10738 don't have a filename (set to None)
10739
10740 * Thuban/UI/tree.py (update_tree): added filename and modified flag
10741
10742 * Thuban/Model/load.py (ProcessSession): convert projection
10743 parameters from unicode to regular string
10744
10745 * Data/iceland_sample.session: Added UTM Zone 26 projection.
10746
10747 2002-04-11 Bernhard Herzog <[email protected]>
10748
10749 * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
10750 extensions/shapelib/dbfopen.c: Update to the versions of shapelib
10751 1.2.9
10752
10753 * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
10754 the pyshapelib directoy into the list of include dirs, so that
10755 pyshapelib_api.h can be found.
10756
10757 * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
10758 holds the pyshapelib C-API
10759 (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
10760 pyshapelib_api to access the shapelib functions.
10761 (initwxproj): Import the c_api from the shapelib module and
10762 initialize pyshapelib_api.
10763
10764 2002-04-04 Bernhard Herzog <[email protected]>
10765
10766 * setup.py (thuban_bdist_rpm.initialize_options): Use
10767 initialize_options to create the scripts for the rpm.
10768
10769 * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
10770
10771 2002-04-03 Bernhard Herzog <[email protected]>
10772
10773 * setup.py: Increment version to 0.1.1
10774
10775 * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
10776 Layer" and "Remove Layer" commands from the layer menu to the map
10777 menu
10778
10779 2002-02-15 Bernhard Herzog <[email protected]>
10780
10781 * Thuban/Model/layer.py (Layer.Shape): list append only takes one
10782 argument (python <= 1.5.2 erroneously accepted multiuple
10783 arguments)
10784
10785 2002-02-04 Bernhard Herzog <[email protected]>
10786
10787 * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
10788 RecordGrid in the identifyview.
10789 (IdentifyView.__init__): Use IdentifyGridCtrl instead of
10790 IdentifyListCtrl. The grid allows editing of the values.
10791
10792 * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
10793 implementing a grid for a single row of a thuban table.
10794
10795 * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
10796 layers by default. Easier to use than the previous default of only
10797 searching through the select layer which meant that if no layer
10798 was selected, you couldn't select a shape.
10799
10800 * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
10801
10802 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
10803 stroke_width attribute
10804
10805 * Thuban/Model/save.py (save_session): Write the new stroke_width
10806 attribute
10807
10808 * Thuban/Model/load.py (ProcessSession.startElement): Read the
10809 stroke_width attribute
10810
10811 * Thuban/Model/layer.py (Layer.__init__): New parameter and
10812 instance variable stroke_width
10813 (Layer.SetStrokeWidth): Set the stroke_width.
10814
10815 2002-02-01 Bernhard Herzog <[email protected]>
10816
10817 * extensions/thuban/wxproj.cpp (project_points): Fix two
10818 off-by-one errors in the last loop that joins the various parts
10819 together.
10820
10821 2002-01-14 Bernhard Herzog <[email protected]>
10822
10823 * setup.py (data_dist.make_distribution): Fix some typos
10824
10825 2001-09-18 Bernhard Herzog <[email protected]>
10826
10827 * README: Slight tweaking in preparation for the 0.1 release
10828
10829 * setup.cfg: Add section for sdist to create both tgz and zip
10830 archives
10831
10832 * setup.py: increase version number to 0.1
10833 (data_dist): New command class for data distribution
10834
10835 2001-09-14 Bernhard Herzog <[email protected]>
10836
10837 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
10838 Handle the case of no layer (i.e. layer is None) properly.
10839
10840 * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
10841 Set the initial selection of the combo boxes to reflect the
10842 projection we're starting with in a way that works on windows,
10843 too.
10844
10845 * Thuban/Lib/connector.py (Connector.print_connections): Print the
10846 puiblisher's ids in hex to make it easier to compare them to the
10847 standard repr of python methods
10848
10849 * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
10850 messages
10851
10852 2001-09-13 Bernhard Herzog <[email protected]>
10853
10854 * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
10855 deselect the layer if no layer is selected
10856
10857 * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
10858 idle time when there actually is something to draw. If there's
10859 nothing to draw simply clear the window
10860 (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
10861 (MapCanvas.SetMap): force a redraw in all cases because
10862 FitMapToWindow doesn't always do it.
10863 (MapCanvas.ZoomFactor): Add an optional parameter, center, to
10864 specify the point to move into the center of the window
10865 (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
10866 dragged, zoon in/out by a factor of 2
10867 (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
10868 index, i.e. reversed drawing order) so that objects appearing to
10869 be in from of others are selected first. This is probably mostly
10870 relevant for point shapes where the symbols used may overlap
10871
10872 * Thuban/Model/session.py (create_empty_session): Unset the
10873 modified bit before returning it
10874
10875 * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
10876 create_empty_session session to create the new, empty session.
10877
10878 * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
10879 the tool bitmaps.
10880 (MainWindow.OnClose, MainWindow.save_modified_session): Separate
10881 the code that asks whether the session should be saved into the
10882 new method save_modified_session.
10883 (MainWindow.OpenSession, MainWindow.NewSession): Use the new
10884 method to save modified session here too.
10885
10886 2001-09-11 Bernhard Herzog <[email protected]>
10887
10888 * setup.py (InnoIconItem): fix typo
10889
10890 (thuban_bdist_inno.run):
10891 (bdist_inno.run): Move the decision not to create symlinks on
10892 non-nt platforms to thuban_bdist_inno and do it unconditinally
10893 since we never want to create the symlinks here
10894
10895 2001-09-10 Bernhard Herzog <[email protected]>
10896
10897 * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
10898 identify view immediately
10899
10900 * Thuban/UI/controls.py: New file with two classes RecordListCtrl
10901 and SelectableRecordListCtrl that implement the code shared by the
10902 identify view and the label dialog
10903
10904 * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
10905 new class RecordListCtrl
10906
10907 * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
10908 return value of GetValue is None instead of using it as a boolean
10909 directly so that Zero numbers are handled properly.
10910 (LabelListCtrl): Derive from the new class
10911 SelectableRecordListCtrl
10912
10913 * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
10914 (Proj4Dialog.dialogLayout): Make the window resizable and set the
10915 size of the text control explicitly to make the sizers work on
10916 both Windows and X.
10917
10918 2001-09-07 Bernhard Herzog <[email protected]>
10919
10920 * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
10921 that can limit the search to the currently selected layer.
10922 (MapCanvas.SelectShapeAt): Make sure that the currently selected
10923 layer stays selected even when no shape is found
10924 (MapCanvas.FitRectToWindow): If the rect has zero with or zero
10925 height do nothing (avoids zero division errors)
10926
10927 2001-09-06 Bernhard Herzog <[email protected]>
10928
10929 * Thuban/UI/tree.py (SessionTreeCtrl, SessionTreeView.__init__):
10930 Correct the spelling of SessionTreeCtrl. dabbrev is too damn
10931 convenient :-)
10932 (SessionTreeCtrl.__init__, SessionTreeCtrl.update_tree): Introduce
10933 a new instvar layer_to_item to map layers to tree items
10934 (SessionTreeCtrl.layer_selected): Select the appropriate tree item
10935 to match the current selection in the interactor
10936
10937 * Thuban/UI/interactor.py (Interactor.SelectedLayer):
10938 (Interactor.HasSelectedLayer): New methods to query the current
10939 selection
10940
10941 * Thuban/UI/mainwindow.py (MainWindow.current_layer):
10942 (MainWindow.has_selected_layer): Simply call the appropriate
10943 interactor method
10944
10945 * Thuban/UI/mainwindow.py (MainWindow.__init__):
10946 (MainWindow.LayerShowTable):
10947 (MainWindow.identify_view_on_demand): Store the interactor in an
10948 instvar and use that reference instead of going through main.app
10949
10950 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
10951 * Thuban/UI/application.py (ThubanApplication.OnInit):
10952 * Thuban/UI/main.py (main): Create the session tree view in main
10953 with the new mainwindow method ShowSessionTree and not directly
10954 the application's OnInit method
10955
10956 * Thuban/UI/tree.py (myTreeCtrlPanel):
10957 (SessioinTreeCtrl): Rename to SessioinTreeCtrl and turn it into a
10958 TreeCtrl isntead of a panel. This affects most method since we now
10959 refer to self instead of self.tree
10960 (SessionTreeView): New class implementing a non-modal dialog
10961 showing the session tree.
10962
10963 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Pass the
10964 layer to the tableview dialog.
10965
10966 * Thuban/UI/tableview.py: Add some doc-strings
10967 (TableGrid):
10968 (TableGrid.OnRangeSelect):
10969 (TableGrid.OnSelectCell):
10970 (TableFrame.__init__):
10971 (TableFrame.row_selected):
10972 Selecting rows in the grid view now updates the selected shapes
10973 through the TableFrame. To achieve this we derive TableGrid from
10974 Publisher and introduce the message type ROW_SELECTED which the
10975 TableFrame subscribes to and which is issued by OnRangeSelect and
10976 OnSelectCell
10977
10978 (DataTable.SelectRow): Removed because it's no longer needed in
10979 the row/shape selection scheme
10980
10981 * Thuban/UI/dialogs.py: New file implementing common classes for
10982 dialogs
10983
10984 * Thuban/UI/tableview.py (TableGrid.__init__): Don't subscribe to
10985 the SELECTED_SHAPE message anymore. This is now handled by the
10986 parent.
10987 (TableGrid.select_shape): Only update the selection if the shape
10988 is not None.
10989 (TableFrame): Inherit from the new NonModalDialog class.
10990 (TableFrame.__init__, TableFrame.select_shape): Handle the
10991 SELECT_SHAPE message.
10992 (TableFrame.OnClose): Extend the inherited method to unsubscribe
10993 SELECT_SHAPE
10994
10995 * Thuban/UI/mainwindow.py (MainWindow.init_dialogs):
10996 (MainWindow.add_dialog):
10997 (MainWindow.dialog_open):
10998 (MainWindow.remove_dialog):
10999 (MainWindow.get_open_dialog): New methods to maintain a dictionary
11000 of opened non-modal dialogs.
11001
11002 (MainWindow.__init__): Initialize the new non-modal dictionary
11003 management code
11004 (MainWindow.LayerShowTable): maintain separate dialogs for each
11005 table using the non-modal dialog management code to only open a
11006 view once for each table.
11007
11008 (MainWindow.IdentifyTool):
11009 (MainWindow.__init__):
11010 (MainWindow.identify_view_on_demand): Don't open the identify view
11011 in IdentifyTool anymore. This will be done automatically by the
11012 new method identify_view_on_demand which handles the
11013 SELECTED_SHAPE message so that the identify view will be opened on
11014 demand
11015
11016 * Thuban/UI/identifyview.py (IdentifyListCtrl.__init__): Remove
11017 the interactor argument. The SELECTED_SHAPE message is now handled
11018 by the parent.
11019 (IdentifyView.__init__): Add the interactor argument so that we
11020 can handle the SELECTED_SHAPE message here
11021 (IdentifyView.selected_shape): New method to handle the
11022 SELECTED_SHAPE messages
11023
11024 * Thuban/UI/identifyview.py (IdentifyView): Derive from the new
11025 NonModalDialog class
11026 (IdentifyView.OnClose): Extend the inherited version to
11027 unsubscribe SELECT_SHAPE
11028
11029 * Thuban/Model/session.py (Session.UnsetModified): Remove debug prints
11030
11031 2001-09-05 Bernhard Herzog <[email protected]>
11032
11033 * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
11034
11035 * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
11036 interactor to pass through to the MapCanvas
11037
11038 * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
11039 argument to the MainWindow constructor to get rid of the ugly hack
11040 that made main.app available early just so that the mapcanvas
11041 could access the interactor object.
11042
11043 2001-09-04 Bernhard Herzog <[email protected]>
11044
11045 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): New method
11046 that runs a modal message box
11047 (MainWindow.OnClose): Use the new method
11048 (MainWindow.RemoveLayer): Just do nothing in case no layer is
11049 selected. The command should be grayed out anyway, so there's no
11050 need to pop up a message box.
11051 (MainWindow.AddLayer): Pop up a message box with an error message
11052 if the shape file can't be opened
11053
11054 * Thuban/Model/layer.py (Layer.__init__): Open the shapefile
11055 immediately. This will cause an exception in case the file can't
11056 be opened and we can display an appropriate message.
11057
11058 * MANIFEST.in: Add extensions/pyprojection/LICENSE
11059
11060 * setup.py (thuban_bdist_rpm): New class implementing a Thuban
11061 specific bdist_rpm command.
11062
11063 * Thuban/UI/main.py: Catch ImportError exceptions when importing
11064 the locale module because it may not be available on some
11065 installations.
11066
11067 * extensions/pyprojection/LICENSE: Copy of the license text in
11068 Projection.i. Having it in a separate file makes it easier to
11069 refer to license text in e.g. RPMs
11070
11071 2001-09-03 Bernhard Herzog <[email protected]>
11072
11073 * setup.py: use wx-config instead of wxgtk-config because it's
11074 more generic
11075
11076 * setup.py (ThubanInstall.get_outputs): Add the symlink in
11077 <prefix>/bin to the outputs
11078 (ThubanInstall.link_file): New method to link files. We need this
11079 because the standard copy_files refuses to link non-existing
11080 files.
11081 (ThubanInstall.run): Remove the leading install root from the
11082 script filename if an install root was specified and use the new
11083 link_file method
11084
11085 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
11086 the window when the first layer is added to the map.
11087
11088 * setup.py (ThubanInstall.run): Honor the build root (self.root)
11089 when linking thuban.py to <prefix>/bin
11090
11091 2001-08-31 Bernhard Herzog <[email protected]>
11092
11093 * setup.py: In the setup call, the install parameters shouldn't
11094 have trailing slashes because distutils on non-posix platforms
11095 doesn't like that. The same applies to other directories like
11096 "Resources/Bitmaps"
11097
11098 In the configuration section for nt, move the wxWindows directory
11099 optins into the part clearly marked as editable.
11100
11101 (InstallLocal.initialize_options):
11102 (InstallLocal.user_options): remove the currently unused debug
11103 flag
11104 (thuban_build_py.find_all_modules): Add this method so that it
11105 works for our case of having packages and modules in one
11106 distribution as well.
11107 (ThubanInstall.initialize_options):
11108 (ThubanInstall.finalize_options):
11109 (ThubanInstall.user_options):
11110 (ThubanInstall.boolean_options): Add new options, do-symlink and
11111 extra files. Since these are the first ThubanInstall specific
11112 options, override user_options and boolean_options
11113 (ThubanInstall.run): Honor the new do-symlink and extra-files
11114 options.
11115 (ThubanInstall.get_outputs): Add to override the base-class's
11116 version and add the extra-files to the outputs
11117 (bdist_inno): New class for windows distributions with Inno Setup
11118 (InnoIconItem): Helper class for bdist_inno
11119 (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
11120 this together with the appropriate parameters, to the setup call.
11121
11122 * setup.cfg (bdist_inno): added new section for the inno setup
11123 installer
11124
11125 * Thuban/UI/tree.py (myTreeCtrlPanel.__init__): New inst var
11126 changing_selection to avoid recursive selection events when
11127 modifying the selection in response to a selection event.
11128 (myTreeCtrlPanel.normalize_selection): Set the new inst var when
11129 changing the tree's selection.
11130 (myTreeCtrlPanel.OnSelChanged): Only normalize the selection when
11131 we're not being called indirectly from normalize_selection.
11132
11133 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): Call
11134 event.Check only if the command is actuall checkable.
11135 (MainWindow.__init__): Call the toolbar's Realize method to make
11136 sure that the items are actually shown
11137
11138 2001-08-28 Bernhard Herzog <[email protected]>
11139
11140 * setup.py: Fix some doc strings
11141
11142 * ChangeLog: started
11143

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26