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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1191 by jonathan, Thu Jun 12 17:01:45 2003 UTC revision 1775 by bh, Mon Oct 6 13:09:24 2003 UTC
# Line 1  Line 1 
1    2003-10-06  Bernhard Herzog  <[email protected]>
2    
3            * test/test_viewport.py (ViewPortTest.setUp)
4            (SimpleViewPortTest.test_init_with_size): Move the test for the
5            initial size as a constructor parameter from ViewPortTest.setUp
6            method to a new separate test in SimpleViewPortTest.
7    
8    2003-10-06  Bernhard Herzog  <[email protected]>
9    
10            * test/test_viewport.py (MockView): New class derived from
11            ViewPort with a mock implementation of GetTextExtent to be used in
12            the test cases
13            (ViewPortTest.setUp): Use MockView instead of ViewPort
14    
15            * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
16            into what would be a "pure virtual function" in C++: always raise
17            NotImplementedError. Mock implementations for test cases don't
18            belong into the real code
19    
20    2003-10-02  Bernhard Herzog  <[email protected]>
21    
22            * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
23            close the dbf file we create so that it's contents have been
24            written properly.
25    
26            * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
27            libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
28            Update to shapelib 1.2.10
29    
30    2003-10-01  Jan-Oliver Wagner <[email protected]>
31    
32            * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
33            it annoys lintian which warns about these files not being
34            executable. The #! isn't necessary here since if you absolutely
35            must execute them you can always say "python <filename>".
36    
37    2003-09-26  Bernhard Herzog  <[email protected]>
38    
39            * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
40            only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
41            is ported to a newer the import will fail, so it should be noticed
42            immediately that this function is gone.
43            Fixes RT#1919
44    
45    2003-09-26  Bernhard Herzog  <[email protected]>
46    
47            Add a DTD for the projection files and make thuban write valid
48            projection files
49    
50            * Resources/XML/projfile.dtd: New. DTD for thuban's projection
51            files
52    
53            * Thuban/Model/resource.py (ProjFileSaver.write): Use
54            'projectionlist' as the name in the document type declaration so
55            that it matches the element type of the root element.
56    
57            * test/test_proj.py (sample_projfile, sample_projfile2): Use
58            'projectionlist' as the name in the document type declaration just
59            as it is done now in the files thuban would write
60            (sample_projfile, sample_projfile_data): Fix spelling of
61            "Mercator"
62            (TestProjFile.doTestWrite): Validate the written and the expected
63            XML data
64            (TestProjFile): Derive from ValidationTest so that we can run xml
65            validation tests
66    
67    2003-09-24  Bernhard Herzog  <[email protected]>
68    
69            * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
70            modify the list returned by map.Layers() in place since it is the
71            actual list of layers used by the map.
72    
73    2003-09-23  Jan-Oliver Wagner <[email protected]>
74    
75            * Doc/manual/thuban-manual.xml: Added subsection to chapter
76            Extensions to describe the extensions coming with the Thuban
77            standard package (gns2shp and importAPR).
78    
79    2003-09-23  Bernhard Herzog  <[email protected]>
80    
81            * libraries/thuban/wxproj.cpp (project_point): if there's an
82            inverse but no forward projection, convert to degrees after
83            applying the inverse projection. Fixes RT#2096
84    
85            * test/test_wxproj.py: New. Test cases for wxproj.so. One test
86            implicitly tests for the fix to RT#2096
87    
88            * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
89            Check that the sequences have the same lengths
90    
91            * Resources/Projections/defaults.proj (Geographic projection): Use
92            a much more precise value for the to_meter attribute.
93    
94    2003-09-22  Bernhard Herzog  <[email protected]>
95    
96            * test/support.py (initthuban): Make sure to unset the LANG env.
97            var. so that tests that compare translated strings work. Solves RT
98            #2094
99    
100    2003-09-22  Jan-Oliver Wagner <[email protected]>
101    
102            Small improvement of APR import.
103    
104            * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
105            Added tests for text-ranges.
106    
107            * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
108            returns a string object if the range is based on text.
109    
110            * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
111            range retrieval.
112    
113    2003-09-22  Jan-Oliver Wagner <[email protected]>
114    
115            Initial version of the importAPR extension which is in
116            experimental state.
117    
118            * /Extensions/importAPR/, /Extensions/importAPR/samples/,
119            /Extensions/importAPR/test/: New directories.
120    
121            * /Extensions/importAPR/samples/README: New: Howto load the samples.
122    
123            * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
124            file which refers to the Thuban Iceland demo data.
125    
126            * /Extensions/importAPR/test/README: New: Howto execute the tests.
127    
128            * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
129    
130            * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
131            as in '.apr'-files.
132    
133            * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
134            ODB Objects as in '.apr', '.avl' and other files.
135    
136            * /Extensions/importAPR/__init__.py: New: Init to make this
137            directory a package.
138    
139            * /Extensions/importAPR/importAPR.py: New: Import a ArcView
140            project file (.apr) and convert it to Thuban.
141    
142    2003-09-22  Jan-Oliver Wagner <[email protected]>
143    
144            * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
145    
146    2003-09-19  Jan-Oliver Wagner <[email protected]>
147    
148            * Doc/manual/thuban-manual.xml: Extended section 'Installation'
149            with description on RPM installation and RPM binary package
150            creation.
151    
152    2003-09-18  Bernhard Herzog  <[email protected]>
153    
154            * setup.py (data_files): Only add the mo files if the Locales
155            directory actually exists, so that setup.py works with a fresh CVS
156            checkout
157    
158    2003-09-12  Jan-Oliver Wagner <[email protected]>
159    
160            * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
161            in viewport, not anymore in view
162    
163    2003-09-04  Jan-Oliver Wagner <[email protected]>
164    
165            Introducing first Extension (gns2shp).
166    
167            * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
168    
169            * Extensions/__init__.py: New. init to make this dir a package.
170    
171            * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
172    
173            * Extensions/gns2shp/test/README: New. some info on this test directory.
174    
175            * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
176    
177            * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
178            of Shapefile from GNS text file format
179    
180    2003-09-03  Jan-Oliver Wagner <[email protected]>
181    
182            Fix/workaround for bug #2019:
183            https://intevation.de/rt/webrt?serial_num=2019
184    
185            * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
186            (IdentifyView.__init__): Added another button that allows to
187            stop the identify mode.
188            (IdentifyView.OnStop): New. Stops the identify mode.
189    
190    2003-09-03  Jan-Oliver Wagner <[email protected]>
191    
192            Introducing a new exception dialog that allows to exit the
193            application immediately.
194            This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
195    
196            * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
197    
198            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
199            Made strings available to translations. Exchanged the simple
200            ScrolledMessageDialog by the new ExceptionDialog.
201    
202    2003-09-01  Bernhard Herzog  <[email protected]>
203    
204            * NEWS: New. Summary of changes and release notes.
205    
206            * MANIFEST.in: Add NEWS
207    
208    2003-09-01  Bernhard Herzog  <[email protected]>
209    
210            * MANIFEST.in: Correct the include statement for the mo-files and
211            include the documentation too.
212    
213            * setup.py (data_files): Add the .mo files
214            (setup call): Up to version 0.9.0
215    
216    2003-09-01  Bernhard Herzog  <[email protected]>
217    
218            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
219            parameter list to just parent and session
220            (ChooseDBTableDialog.__set_properties): Removed. Setting the
221            selection of empty list boxes is not allowed (and produces C++
222            assertion errors) and the rest of the setup is better done in
223            __init__ anyway.
224            (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
225            (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
226            builtins True/False for booleans to avoid warnings from wxPython
227    
228            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
229            ChooseDBTableDialog constructor parameters.
230    
231    2003-09-01  Bernhard Herzog  <[email protected]>
232    
233            * Thuban/Model/postgisdb.py
234            (PostGISTable): Extend doc-string
235            (PostGISTable._fetch_table_information): Set the column index
236            correctly, pretending ignored columns don't exist.
237    
238            * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
239            for postgis tables with data types not yet supported by thuban.
240    
241    2003-08-29  Bernhard Herzog  <[email protected]>
242    
243            * HOWTO-Release: Tweak item about running the tests.
244    
245    2003-08-29  Jan-Oliver Wagner <[email protected]>
246    
247            * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
248    
249    2003-08-29  Bernhard Herzog  <[email protected]>
250    
251            Add some missing parameters to projections. Proj complains about
252            them on windows but for some reason not on Linux.
253    
254            * test/test_save.py (SaveSessionTest.testLayerProjection): Add
255            missing required projection parameters
256    
257            * test/test_proj.py (TestProjFile.test): Add missing required
258            projection parameters
259    
260            * test/test_load_0_8.py (TestLayerProjection.file_contents)
261            (TestLayerProjection.test): Add missing required projection
262            parameters and tests for them
263    
264            * test/test_load.py (TestLayerProjection.file_contents)
265            (TestLayerProjection.test): Add missing required projection
266            parameters and tests for them
267    
268            * test/test_layer.py (TestLayer.test_base_layer): Add missing
269            required projection parameters
270    
271    2003-08-29  Bernhard Herzog  <[email protected]>
272    
273            * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
274            access the pj_errno because directly accessing pj_errno doesn't
275            work on windows if the proj library is in a DLL
276    
277            * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
278    
279    2003-08-28  Bernhard Herzog  <[email protected]>
280    
281            * test/test_proj.py: Import things from Thuban after calling
282            initthuban
283    
284            * test/test_load.py (LoadSessionTest.filenames): New class
285            variable with the filename attributes to normalize
286            (LoadSessionTest.check_format): Pass self.filenames to
287            sax_eventlist to normalize the filename attributes
288    
289            * test/xmlsupport.py: Add cvs keywords
290            (SaxEventLister.__init__): New parameter filenames which indicates
291            attributes that contain filenames
292            (SaxEventLister.startElementNS): Normalize the filename attributes
293            with os.path.normpath
294            (sax_eventlist): New parameter filenames to pass through to
295            SaxEventLister
296    
297            * test/test_derivedshapestore.py: Make this file callable as a
298            program to execute the tests
299            (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
300            the session to self.session so that it gets destroyed properly
301    
302            * test/test_layer.py (TestLayer.tearDown): Call the session's
303            Destroy method
304    
305            * test/test_map.py (TestMapBase.tearDown): Destroy self.session
306            too if it exists
307            (TestMapAddLayer.test_add_layer): Bind the session to self.session
308            so that it gets destroyed properly
309    
310            * test/postgissupport.py (reason_for_not_running_tests): Add a
311            test for the existence of popen2.Popen4.
312    
313            * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
314            reliable way to destroy the sessions created in the test cases
315            (SaveSessionTest.test_dbf_table): Bind the session to self.session
316            so that it gets destroyed properly
317            (SaveSessionTest.testLayerProjection): Bind the session to
318            self.session so that it gets destroyed properly
319    
320            * test/test_session.py (UnreferencedTablesTests.tearDown): Make
321            sure that the session is destroyed properly
322    
323            * test/test_shapefilestore.py: Make this callable as a program to
324            execute the tests
325    
326            * test/test_scalebar.py: Remove unnecessary import of _ from
327            Thuban
328    
329            * test/support.py (print_garbage_information): Call initthuban
330            here because it may be called indirectly from test cases that test
331            test support modules which do not use anything from thuban itself
332            (ThubanTestProgram.runTests): Remove unnecessary debug print
333    
334    2003-08-28  Bernhard Herzog  <[email protected]>
335    
336            * Thuban/version.py (longversion): Update to 0.9
337    
338            * Thuban/UI/mainwindow.py: Remove some unused imports
339    
340            * README: Add section about required additional software. Add date
341            and revision CVS keywords
342    
343            * HOWTO-Release: Add item about the translations. Add date and
344            revision CVs keywords and change formatting to match README a bit
345            better
346    
347            * po/de.po: Update for 0.9
348    
349            * test/README: Tweak the wording a little because many tests are
350            not really unittest.
351    
352    2003-08-27  Bernhard Herzog  <[email protected]>
353    
354            As preparation for the 0.9 release, switch thuban files to a
355            non-dev namespace
356    
357            * Thuban/Model/save.py (SessionSaver.write_session): Write files
358            with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
359            namespace
360    
361            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
362            http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
363    
364            * test/test_save.py (SaveSessionTest.dtd)
365            (SaveSessionTest.testEmptySession)
366            (SaveSessionTest.testSingleLayer)
367            (SaveSessionTest.testLayerProjection)
368            (SaveSessionTest.testRasterLayer)
369            (SaveSessionTest.testClassifiedLayer)
370            (SaveSessionTest.test_dbf_table)
371            (SaveSessionTest.test_joined_table)
372            (SaveSessionTest.test_save_postgis): Update for new namespace
373    
374            * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
375            (TestLayerVisibility.file_contents, TestLabels.file_contents)
376            (TestLayerProjection.file_contents)
377            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
378            (TestPostGISLayer.file_contents)
379            (TestPostGISLayerPassword.file_contents)
380            (TestLoadError.file_contents, TestLoadError.test): Update for new
381            namespace
382    
383    2003-08-27  Bernhard Herzog  <[email protected]>
384    
385            Make the table interface distinguish between row ids (an integer
386            that uniquely identifies a row) and row ordinals (a simple row
387            count from 0 to NumRows() - 1)
388    
389            * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
390            (PostGISTable.RowOrdinalToId): New methods to conver between row
391            ids and row ordinals
392            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
393            parameter row_is_ordinal to indicate whether the row parameter is
394            the row id or the ordinal
395    
396            * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
397            (TransientTableBase.RowOrdinalToId)
398            (AutoTransientTable.RowIdToOrdinal)
399            (AutoTransientTable.RowOrdinalToId): Same new methods as in
400            PostGISTable.
401            (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
402            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
403            Same new parameter as in PostGISTable.
404    
405            * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
406            (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
407            (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
408            (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
409            (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
410            parameter as in PostGISTable.
411    
412            * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
413            (DataTable.RowOrdinalToId): New methods to convert between row ids
414            and row ordinals.
415            (TableGrid.SelectRowById): New method to select a row based on its
416            ID as opposed to its ordinal
417            (DataTable.GetValue, TableGrid.OnRangeSelect)
418            (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
419            (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
420            (LayerTableFrame.__init__): Convert between row ids and row
421            ordinals as appropriate
422    
423            * test/postgissupport.py (PostGISDatabase.__init__): Add
424            doc-string.
425            (PostGISDatabase.initdb): The optional third item in a tuple in
426            tables is now a (key, value) list with additional arguments to
427            pass to upload_shapefile
428            (upload_shapefile): New parameter gid_offset to allow gids that
429            are not the same as the shapeids in the shapefile
430            (PostgreSQLServer.get_default_static_data_db): Use the new
431            gid_offset to make the gids in landmarks 1000 higher than the
432            shapeids in the shapefile
433    
434            * test/test_viewport.py
435            (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
436            new shapeids in the landmarks table
437    
438            * test/test_transientdb.py
439            (TestTransientTable.run_iceland_political_tests)
440            (TestTransientTable.test_transient_joined_table): Add tests for
441            the new table methods and new keywords arguments.
442    
443            * test/test_postgis_db.py
444            (TestPostGISTable.test_read_row_as_dict_row_count_mode)
445            (TestPostGISTable.test_read_value_row_count_mode)
446            (TestPostGISTable.test_row_id_to_ordinal)
447            (TestPostGISTable.test_row_oridnal_to_id): New test for the new
448            table methods and the new arguments
449            (TestPostGISShapestorePoint.test_shapes_in_region)
450            (TestPostGISShapestorePoint.test_shape_raw_data)
451            (TestPostGISShapestorePoint.test_shape_points)
452            (TestPostGISShapestorePoint.test_shape_shapeid)
453            (TestPostGISShapestorePoint.test_all_shapes)
454            (TestPostGISTable.test_simple_query)
455            (TestPostGISTable.test_simple_query)
456            (TestPostGISTable.test_simple_query)
457            (TestPostGISTable.test_read_value)
458            (TestPostGISTable.test_read_row_as_dict): Adapt to the new
459            shapeids in the landmarks table
460    
461            * test/test_memory_table.py
462            (TestMemoryTable.test_read_row_as_dict_row_count_mode)
463            (TestMemoryTable.test_read_value_row_count_mode)
464            (TestMemoryTable.test_row_id_to_ordinal)
465            (TestMemoryTable.test_row_oridnal_to_id): New test for the new
466            table methods and the new arguments
467    
468            * test/test_dbf_table.py
469            (TestDBFTable.test_read_row_as_dict_row_count_mode)
470            (TestDBFTable.test_read_value_row_count_mode)
471            (TestDBFTable.test_row_id_to_ordinal)
472            (TestDBFTable.test_row_oridnal_to_id): New test for the new table
473            methods and the new arguments
474    
475    2003-08-26  Bernhard Herzog  <[email protected]>
476    
477            * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
478            more postgis specific but much faster method to get the bounding
479            box
480    
481    2003-08-26  Bernhard Herzog  <[email protected]>
482    
483            * Thuban/Model/postgisdb.py (PostGISTable.Title)
484            (PostGISShapeStore.AllShapes): Add these missing methods.
485            (PostGISShapeStore.ShapesInRegion): No need to raise
486            StopIteration. We can simply return
487    
488            * test/test_postgis_db.py (TestPostGISTable.test_title)
489            (TestPostGISShapestorePoint.test_all_shapes): New tests for the
490            new methods
491    
492    2003-08-25  Bernhard Herzog  <[email protected]>
493    
494            * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
495    
496            * test/test_postgis_db.py (PolygonTests): New class containing
497            those tests from TestPostGISShapestorePolygon that can also be
498            used to test MUTLIPOLYGON tables
499            (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
500            so derive from that
501            (TestPostGISShapestoreMultiPolygon): New class with tests for
502            MUTLIPOLYGON tables
503    
504            * test/postgissupport.py (PostGISDatabase.initdb): Allow the
505            tables argument to have tuples with three items to override the
506            WKT type used.
507            (PostgreSQLServer.get_default_static_data_db): Use the above to
508            create a polygon table with MUTLIPOLYGONs
509            (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
510            (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
511            coords_to*
512            (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
513            (wkt_converter): New. Map WKT types to converters
514            (upload_shapefile): New parameter force_wkt_type to use a
515            different WKT type than the default
516    
517    2003-08-25  Bernhard Herzog  <[email protected]>
518    
519            * Thuban/UI/application.py
520            (ThubanApplication.run_db_param_dialog): New. Suitable as a
521            db_connection_callback. Main difference is that the dialog run
522            from this method doesn't have a parent so it can be used even when
523            there is no main window
524            (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
525            no db_connection_callback was given. This way the dialog pops up
526            even when the .thuban file was given as a command line parameter.
527    
528    2003-08-25  Bernhard Herzog  <[email protected]>
529    
530            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
531            before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
532            which leads to an effectively frozen X session because the user
533            can only interact with the dialog but the mouse is still grabbed
534            by the canvas.
535            Also, call the tool's Hide method before MouseLeftUp because
536            MouseLeftUp may change the tool's coordinates.
537    
538    2003-08-25  Bernhard Herzog  <[email protected]>
539    
540            * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
541            LoadCancelled exceptions and handle them by returning immediately.
542    
543    2003-08-25  Bernhard Herzog  <[email protected]>
544    
545            GUI part of loading sessions with postgis connections which may
546            require user interaction to get passwords or updated parameters
547    
548            * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
549            bit nucer and be more generic.
550            (DBFrame.OnAdd): Adapt to new DBDialog interface
551    
552            * Thuban/UI/application.py (ThubanApplication.OpenSession): New
553            optional parameter db_connection_callback which is passed to
554            load_session.
555    
556            * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
557            Suitable as a db_connection_callback
558            (MainWindow.OpenSession): Use self.run_db_param_dialog as the
559            db_connection_callback of the application's OpenSession method
560    
561    
562    2003-08-25  Bernhard Herzog  <[email protected]>
563    
564            Basic loading of sessions containing postgis connections:
565    
566            * Thuban/Model/load.py (LoadError): Add doc-string
567            (LoadCancelled): New exception class to indicate a cancelled load
568            (SessionLoader.__init__): Add the db_connection_callback parameter
569            which will be used by the loader to get updated parameters and a
570            password for a database connection
571            (SessionLoader.__init__): Add the new XML elements to the
572            dispatchers dictionary
573            (SessionLoader.check_attrs): Two new conversions, ascii to convert
574            to a byte-string object and idref as a generic id reference
575            (SessionLoader.start_dbconnection)
576            (SessionLoader.start_dbshapesource): New. Handlers for the new XML
577            elements
578            (load_session): Add the db_connection_callback to pass through the
579            SessionLoader
580    
581            * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
582            New classes to test loading of sessions with postgis database
583            connections.
584    
585    2003-08-25  Bernhard Herzog  <[email protected]>
586    
587            * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
588            replace it and the comment with __BuildDate__ by the Source: and
589            Id: cvs keywords as used in the other files.
590    
591    2003-08-25  Bernhard Herzog  <[email protected]>
592    
593            * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
594            LoadError when a required attribute is missing. The code used to
595            be commented out for some reason, but probably should have been
596            active.
597    
598            * test/test_load.py (TestLoadError.test): Test the message in the
599            LoadError too to make sure it really is about the missing
600            attribute
601    
602    2003-08-22  Bernhard Herzog  <[email protected]>
603    
604            * test/test_save.py (SaveSessionTest.test_dbf_table)
605            (SaveSessionTest.test_joined_table): Add XML validation tests.
606    
607    2003-08-22  Bernhard Herzog  <[email protected]>
608    
609            Implement saving a session with a postgis connection
610    
611            * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
612            elements for database connections and shapestores using db
613            connections
614            (session): Add the dbconnections to the content model
615    
616            * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
617            Write the db connections
618            (SessionSaver.write_session): Call write_db_connections to write
619            the connection before the data sources
620            (SessionSaver.write_data_containers): Handle postgis shapestores
621    
622            * test/test_save.py (SaveSessionTest.thubanids)
623            (SaveSessionTest.thubanidrefs): Update for new DTD
624            (SaveSessionTest.test_save_postgis): New. Test saving a session
625            with postgis connections
626    
627            * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
628            (PostGISTable.TableName): New accessor methods for the connection
629            and table name
630    
631            * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
632            (TestPostGISTable.test_dbname): New methods to test the new
633            PostGISConnection methods
634    
635    2003-08-22  Bernhard Herzog  <[email protected]>
636    
637            * Thuban/Model/postgisdb.py (ConnectionError): New exception class
638            for exceptions occurring when establishing a Database connection
639            (PostGISConnection.connect): Catch psycopg.OperationalError during
640            connects and raise ConnectionError.
641    
642            * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
643            tests for database exceptions
644    
645    2003-08-22  Bernhard Herzog  <[email protected]>
646    
647            Prepare the test suite for tests with required authentication
648    
649            * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
650            variables with two predefined users/passwords, one for the admin
651            and one for a non-privileged user.
652            (PostgreSQLServer.createdb): Pass the admin name to initdb and add
653            the non-privileged user to the database and set the admin password
654            (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
655            Better error reporting
656            (PostgreSQLServer.connection_params)
657            (PostgreSQLServer.connection_string): New methods to return
658            information about how to connect to the server
659            (PostgreSQLServer.execute_sql): New. Convenience method to execute
660            SQL statements
661            (PostgreSQLServer.require_authentication): Toggle whether the
662            server requires authentication
663            (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
664            Add or alter users
665            (PostGISDatabase.initdb): Pass the admin name one the
666            subprocesses' command lines. Grant select rights on
667            geometry_columns to everybody.
668            (upload_shapefile): Use the admin name and password when
669            connecting. Grant select rights on the new table to everybody.
670    
671            * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
672            server's new methods to get the connection parameters.
673    
674            * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
675            (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
676            server's new methods to get the connection parameters.
677    
678            * test/test_postgis_db.py
679            (TestPostGISConnection.test_gis_tables_empty)
680            (TestPostGISConnection.test_gis_tables_non_empty)
681            (PostGISStaticTests.setUp): Use the server's new methods to get
682            the connection parameters.
683    
684    2003-08-22  Bernhard Herzog  <[email protected]>
685    
686            * Thuban/UI/about.py (About.__init__): Add the psycopg version.
687    
688            * Thuban/version.py: Add psycopg version
689    
690            * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
691            version of the psycopg module
692    
693    2003-08-22  Bernhard Herzog  <[email protected]>
694    
695            * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
696            (DBFrame.OnEdit): Removed because it's not used and wouldn't work
697            at the moment. The functionality should probably be implemented
698            some time, though.
699            (DBFrame.OnRemove): Display a message if the connection can't be
700            removed because it's still in use.
701    
702    2003-08-22  Jan-Oliver Wagner <[email protected]>
703    
704            * Thuban/UI/about.py (About.__init__): split up the huge about
705            text into elements/lists for easier translation. This fixes bug
706            https://intevation.de/rt/webrt?serial_num=2058
707            Also, made some forgotten string available for the i18n.
708    
709    2003-08-21  Bernhard Herzog  <[email protected]>
710    
711            Make postgis support really optional including insensitive menu
712            items.
713    
714            * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
715            whether the postgis is supported.
716    
717            * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
718            to make postgis support optional
719    
720            * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
721            version of Thuban.Model.postgisdb.has_postgis_support
722            (database_management command): Make it only sensitive if postgis
723            is supported.
724    
725    2003-08-21  Jan-Oliver Wagner <[email protected]>
726    
727            * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
728            (section Adding and Removing Layers): Added text and described
729            multi-selection.
730            (chapter Extensions): New.
731    
732    2003-08-21  Jan-Oliver Wagner <[email protected]>
733    
734            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
735            settings to allow multiple files to load into the map.
736            Also reduced selection to *.shp as a default.
737    
738    2003-08-20  Bernhard Herzog  <[email protected]>
739    
740            Add dialogs and commands to open database connections and add
741            database layers.
742    
743            * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
744            method to open the database connection management dialog
745            (MainWindow.AddDBLayer): New method to add a layer from a database
746            (_has_dbconnections): New helper function to use for sensitivity
747            (database_management command, layer_add_db command): New commands
748            that call the above new methods.
749            (main_menu): Add the new commands to the menu.
750    
751            * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
752            (PostGISConnection.connect): Establish the actual connection in a
753            separate method and call it in __init__. This makes it easier to
754            override the behavior in test cases
755            (PostGISConnection.BriefDescription): New method to return a brief
756            description for use in dialogs.
757    
758            * test/test_postgis_db.py (NonConnection): DB connection that
759            doesn't actually connect
760            (TestBriefDescription): New class with tests for the new
761            BriefDescription method
762    
763    2003-08-19  Jan-Oliver Wagner <[email protected]>
764    
765            Moved anything from extensions to libraries.
766    
767            * libraries: New.
768    
769            * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
770    
771            * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
772            Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
773            been moved here from thuban/extensions/pyprojection/
774            See there in the Attic for the older history.
775    
776            * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
777            dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
778            shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
779            have been moved here from thuban/extensions/pyshapelib/
780            See there in the Attic for the older history.
781    
782            * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
783            files have been moved here from thuban/extensions/shapelib/
784            See there in the Attic for the older history.
785    
786            * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
787            gdalwarp.cpp, wxproj.cpp: These files have been moved here from
788            thuban/extensions/thuban/
789            See there in the Attic for the older history.
790    
791            * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
792    
793            * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
794            gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
795    
796            * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
797            Moved to libraries/shapelib.
798    
799            * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
800            shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
801            ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
802            Moved to libraries/pyshapelib.
803    
804            * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
805            LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
806            Moved to libraries/pyprojection.
807    
808            * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
809    
810            * extensions: Removed.
811    
812    2003-08-19  Bernhard Herzog  <[email protected]>
813    
814            * test/test_viewport.py (ViewPortTest): We don't use the
815            facilities of FileTestMixin so don't derive from it.
816            (TestViewportWithPostGIS): New class with tests for using a
817            viewport on a map with postgis layers.
818    
819    2003-08-19  Bernhard Herzog  <[email protected]>
820    
821            Add the db connection management to the session.
822    
823            * Thuban/Model/session.py (Session.__init__): New instance
824            variable db_connections
825            (Session.AddDBConnection, Session.DBConnections)
826            (Session.HasDBConnections, Session.CanRemoveDBConnection)
827            (Session.RemoveDBConnection): New methods to manage and query the
828            db connections managed by the session
829            (Session.OpenDBShapeStore): New method to open a shapestore from a
830            db connection
831    
832            * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
833            messages for the db connection handling in the session
834    
835            * test/test_postgis_session.py: New. test cases for the session's
836            db connection handling with postgis connections
837    
838    2003-08-19  Bernhard Herzog  <[email protected]>
839    
840            Add very basic postgis database support and the corresponding test
841            cases. The test cases require a PostgreSQL + postgis installation
842            but no existing database. The database will be created
843            automatically by the test cases
844    
845            * test/README: Add note about skipped tests and the requirements
846            of the postgis tests.
847    
848            * Thuban/Model/postgisdb.py: New. Basic postgis database support.
849    
850            * test/test_postgis_db.py: New. Test cases for the postgis
851            support.
852    
853            * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
854            format
855    
856            * test/test_wellknowntext.py: New. Test cases for the
857            wellknowntext parser
858    
859            * test/postgissupport.py: New. Support module for tests involving
860            a postgis database.
861    
862            * test/support.py (execute_as_testsuite): Shut down the postmaster
863            if it's still running after the tests
864    
865            * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
866            well known text format
867    
868    2003-08-19  Jan-Oliver Wagner <[email protected]>
869    
870            * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
871            message dialog.
872    
873    2003-08-18  Bernhard Herzog  <[email protected]>
874    
875            * test/support.py (ThubanTestResult.printErrors): Indent the
876            reason for the skips in the output to make it a bit more readable.
877            (execute_as_testsuite): New helper function to run a test suite
878            and print some more information.
879            (run_tests): Use execute_as_testsuite to run the tests
880    
881            * test/runtests.py (main): Use execute_as_testsuite to run the
882            tests
883    
884    2003-08-18  Bernhard Herzog  <[email protected]>
885    
886            Fix some bugs in Thuban and the test suite that were uncovered by
887            changes introduced in Python 2.3:
888    
889            * Thuban/Model/table.py (DBFTable.__init__): Make sure the
890            filename is an absolute name
891    
892            * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
893            filename is an absolute name
894    
895            * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
896            unique filename to save to and use the correct relative filename
897            in the expected output.
898            (SaveSessionTest.test_dbf_table): Use the correct relative
899            filename in the expected output.
900    
901            * test/test_layer.py (TestLayer.test_raster_layer): Update the
902            test to check whether the filename is absolute.
903    
904    2003-08-18  Jan-Oliver Wagner <[email protected]>
905    
906            * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
907    
908    2003-08-15  Bernhard Herzog  <[email protected]>
909    
910            Change the way shapes are returned by a shape store. The
911            ShapesInRegion method returns an iterator over actual shape
912            objects instead of a list of shape ids.
913    
914            * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
915            id.
916            (ShapefileStore.ShapesInRegion): Return an iterator over the
917            shapes which yields shape objects instead of returning a list of
918            shape ids
919            (ShapefileStore.AllShapes): New. Return an iterator over all
920            shapes in the shape store
921            (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
922    
923            * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
924            doc-string.
925    
926            * Thuban/UI/baserenderer.py
927            (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
928            layer_shapes and make it return an iterator containg shapes
929            instead of a list of ids.
930            (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
931            layer_shapes() change
932    
933            * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
934            (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
935    
936            * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
937            changes in the ShapesInRegion return value.
938            (ViewPort._get_hit_tester): Remove commented out code
939    
940            * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
941            new return value.
942            (SimpleShapeStore.AllShapes): New. Implement this method too.
943    
944            * test/test_layer.py (TestLayer.test_arc_layer)
945            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
946            (TestLayer.test_point_layer_with_projection)
947            (TestLayer.test_derived_store): Adapt to changes in the
948            ShapesInRegion return value.
949    
950            * test/test_shapefilestore.py
951            (TestShapefileStoreArc.test_shapes_in_region)
952            (TestShapefileStorePolygon.test_shapes_in_region)
953            (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
954            in the ShapesInRegion return value.
955            (TestShapefileStorePoint.test_all_shapes)
956            (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
957            methods
958    
959            * test/test_derivedshapestore.py
960            (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
961            the ShapesInRegion return value.
962            (TestDerivedShapeStore.test_all_shapes)
963            (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
964            methods
965    
966    2003-08-15  Bernhard Herzog  <[email protected]>
967    
968            Make the renderers deal correctly with raw vs. python level
969            representation of shape geometries
970    
971            * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
972            Return a flag useraw in addition to the callable and the parameter
973            to indicate whether the callable can deal with the raw shape data
974            or uses the higher level python lists of coordinates. The callable
975            now should accept either the raw data or the return value of the
976            shape's Points() method.
977            (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
978            change
979            (BaseRenderer.projected_points): Instead of the shape id use the
980            points list as parameter.
981            (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
982            (BaseRenderer.draw_point_shape): Adapt to projected_points()
983            change and accept the points list as parameter instead of the
984            shape id.
985    
986            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
987            the useraw flag as required by the BaseRenderer
988            (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
989            changes.
990    
991            * test/test_baserenderer.py
992            (TestBaseRenderer.test_point_with_classification): New test for
993            rendering a map with classifications.
994    
995    2003-08-15  Bernhard Herzog  <[email protected]>
996    
997            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
998            (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
999            (ViewPort._get_hit_tester, ViewPort.projected_points)
1000            (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
1001            (ViewPort._find_label_at): Split the find_shape_at method into
1002            several new methods and use the functions in the hit-test module.
1003    
1004            * Thuban/UI/hittest.py: New module with Python-level hit-testing
1005            functions
1006    
1007            * test/test_hittest.py: New. Test for the new hittest module
1008    
1009    2003-08-15  Bernhard Herzog  <[email protected]>
1010    
1011            * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
1012            projection to all corners of the bounding box to get a better
1013            approximation of the projected bounding box
1014    
1015            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
1016            New. Test coordinate handling of a layer with a projection.
1017            Catches the bug fixed in Layer.ShapesInRegion
1018    
1019    2003-08-15  Bernhard Herzog  <[email protected]>
1020    
1021            Move some of the mock objects in test_baserenderer into their own
1022            module so they can easily be used from other tests
1023    
1024            * test/mockgeo.py: New test helper module with some mock objects
1025            for geometry related things like shapes, shapestores and
1026            projections.
1027    
1028            * test/test_mockgeo.py: New. Tests for the new helper module
1029    
1030            * test/test_baserenderer.py: Some of the mock-objects are in
1031            mockgeo now.
1032    
1033    2003-08-12  Jan-Oliver Wagner <[email protected]>
1034    
1035            * Thuban/UI/about.py (About.__init__): Added Bj�rn Broscheit.
1036    
1037    2003-08-12  Bernhard Herzog  <[email protected]>
1038    
1039            * po/de.po: New. German translations by Bjoern Broscheit
1040    
1041    2003-08-12  Bernhard Herzog  <[email protected]>
1042    
1043            * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
1044            strings have to be one string literal.
1045    
1046    2003-08-11  Bernhard Herzog  <[email protected]>
1047    
1048            * test/support.py (FloatComparisonMixin.assertPointListEquals):
1049            New. This method was used in various derived classes, but it's
1050            better to have it here.
1051    
1052            * test/test_shapefilestore.py
1053            (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
1054            FloatComparisonMixin
1055    
1056            * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
1057            It's now in FloatComparisonMixin
1058    
1059            * test/test_derivedshapestore.py
1060            (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
1061            in FloatComparisonMixin
1062    
1063    2003-08-11  Bernhard Herzog  <[email protected]>
1064    
1065            * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
1066            error message
1067    
1068    2003-08-08  Jan-Oliver Wagner <[email protected]>
1069    
1070            * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
1071            with version number.
1072            Changed title to reflect version number of Thuban.
1073    
1074    2003-08-08  Jan-Oliver Wagner <[email protected]>
1075    
1076            * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
1077            the list corresponds to the "About" web page.
1078    
1079    2003-08-08  Bernhard Herzog  <[email protected]>
1080    
1081            * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
1082            Make sure translated strings are recognized as one string literal.
1083    
1084            * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
1085            Make sure translated strings are recognized as one string literal.
1086    
1087            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
1088            translated strings are recognized as one string literal.
1089    
1090            * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
1091            sure translated strings are recognized as one string literal.
1092    
1093    2003-08-07  Bernhard Herzog  <[email protected]>
1094    
1095            * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
1096            Simply delegates to the original shapestore.
1097    
1098            * test/test_derivedshapestore.py
1099            (TestDerivedShapeStore.test_raw_format): New. Test case for
1100            DerivedShapeStore.RawShapeFormat
1101    
1102    2003-08-07  Bernhard Herzog  <[email protected]>
1103    
1104            Add raw data interface to shape objects.
1105    
1106            * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
1107            class to ShapefileShape which now holds shapefile specific
1108            information.
1109            (ShapefileShape.compute_bbox): Simplified to not cache any
1110            information. The way this method is used that shouldn't matter
1111            performance wise.
1112            (ShapefileShape.RawData): New. Return the shapeid which is the raw
1113            data format for shapes from shapefiles.
1114            (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
1115            in the shape objects returned by a shapestore. For a
1116            ShapefileStore this is always RAW_SHAPEFILE.
1117            (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
1118            method.
1119    
1120            * test/test_shapefilestore.py
1121            (TestShapefileStore.test_raw_format): New test to test the raw
1122            format feature of shapes.
1123    
1124            * Thuban/Model/layer.py: Remove the unused import of Shape from
1125            data. It was only there for interface compatibility but it's not
1126            used inside of Thuban and the generic Shape class has gone away.
1127    
1128            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
1129            the raw data format and only use an optimized version of its a
1130            shapefile.
1131    
1132    2003-08-07  Bernhard Herzog  <[email protected]>
1133    
1134            * test/test_baserenderer.py (SimpleShape): Shape class for the
1135            tests.
1136            (SimpleShapeStore.Shape): Use SimpleShape instead of
1137            Thuban.Model.data.Shape to make the tests independed of the coming
1138            changes.
1139    
1140    2003-08-07  Bernhard Herzog  <[email protected]>
1141    
1142            * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
1143            (ThubanTestProgram): New classes that extend the respective
1144            classes from unittest. These new version support skipping tests
1145            under certain expected conditions. In the Thuban test suite we
1146            uses this for tests that require the optional gdal support.
1147            (run_tests): Use ThubanTestProgram instead of the unittest.main()
1148    
1149            * test/runtests.py (main): Use the new ThubanTestRunner instead of
1150            the normal one from unittest
1151    
1152            * test/test_layer.py (TestLayer.test_raster_layer): If this test
1153            is not run because gdal support isn't available report this to the
1154            runner.
1155    
1156            * test/test_baserenderer.py
1157            (TestBaseRenderer.test_raster_no_projection): Do not run this test
1158            if gdal support isn't available and report this to the runner.
1159    
1160    2003-08-06  Bernhard Herzog  <[email protected]>
1161    
1162            Rearrange the renderers a bit, partly in preparation for changes
1163            required for the postgis merge, partly to make it more testable.
1164            Also make the representation of coordinates in Shapes more
1165            consistent.
1166    
1167            * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
1168            this class is now in BaseRenderer. This class is now practically
1169            only a specialization of BaseRenderer for rendering to an actual
1170            wx DC.
1171            (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
1172            to get the shapetype specific rendering functions.
1173    
1174            * Thuban/UI/baserenderer.py: New file with the basic rendering
1175            logic. The code in this file is completely independend of wx.
1176            (BaseRenderer): Class with the basic rendering logic
1177    
1178            * test/test_baserenderer.py: New. Test cases for BaseRenderer
1179    
1180            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
1181            error_on_redraw to guard agains endless loops and stack overflows
1182            when there's a bug in the rendering code that raises exceptions.
1183            (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
1184            rendering into a separate method _do_redraw so that error handling
1185            is a bit easier. When an exception occurs, set error_on_redraw to
1186            true. When it's true on entry to OnIdle do nothing and return
1187            immediately.
1188    
1189            * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
1190            Shape object will always have the coordinates as a list of list of
1191            coordinate pairs (tuples).
1192            (Shape.compute_bbox): Adapt to new representation.
1193    
1194            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
1195            (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
1196            Shape objects.
1197    
1198            * test/test_shapefilestore.py
1199            (ShapefileStoreTests.assertFloatTuplesEqual)
1200            (ShapefileStoreTests.assertPointListEquals): Rename to
1201            assertPointListEquals and change purpose to checking equality of
1202            the lists returned by Shape.Points().
1203            (TestShapefileStoreArc.test_shape)
1204            (TestShapefileStorePolygon.test_shape)
1205            (TestShapefileStorePoint.test_shape): Use the new
1206            assertPointListEquals instead of assertFloatTuplesEqual
1207    
1208            * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
1209            (TestLayer.assertPointListEquals): Rename to assertPointListEquals
1210            and change purpose to checking equality of the lists returned by
1211            Shape.Points().
1212            (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
1213            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
1214            (TestLayer.test_derived_store): Use the new assertPointListEquals
1215            instead of assertFloatTuplesEqual
1216    
1217            * test/test_derivedshapestore.py
1218            (TestDerivedShapeStore.assertFloatTuplesEqual)
1219            (TestDerivedShapeStore.assertPointListEquals): Rename to
1220            assertPointListEquals and change purpose to checking equality of
1221            the lists returned by Shape.Points().
1222            (TestDerivedShapeStore.test_shape): Use the new
1223            assertPointListEquals instead of assertFloatTuplesEqual
1224    
1225    2003-08-06  Jan-Oliver Wagner <[email protected]>
1226    
1227            * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
1228            a bounding box. A dialog is raised in case, no bounding box
1229            is found. This fixes bug #2043:
1230            https://intevation.de/rt/webrt?serial_num=2043
1231    
1232    2003-08-05  Bernhard Herzog  <[email protected]>
1233    
1234            * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
1235            object look like a Color instantiation. Formerly it looked like a
1236            tuple.
1237    
1238            * test/test_color.py (TestColor.test_repr)
1239            (TestColor.test_equality, TestColor.test_inequality): New. test
1240            some more apects of the Color class
1241            (TestTransparent.test_repr, TestTransparent.test_hex)
1242            (TestTransparent.test_equality): New. Test cases for the
1243            Transparent object.
1244    
1245    2003-08-04  Jan-Oliver Wagner <[email protected]>
1246    
1247            * Doc/manual/thuban-manual.xml: a number of small improvements.
1248            The resulting file is the version submitted for GREAT-ER II.
1249    
1250    2003-08-01  Bernhard Herzog  <[email protected]>
1251    
1252            * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
1253            Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
1254            Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
1255    
1256            * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
1257            (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
1258            (ThubanEndBusyCursor): Add doc-strings
1259    
1260    2003-08-01  Bernhard Herzog  <[email protected]>
1261    
1262            First step towards PostGIS integration. More abstraction by movin
1263            more code from the layer to the shapestore. More methods of the
1264            layer are now simply delegated to the equivalent method of the
1265            shapestore. The SHAPETYPE_* constants are now in data not in
1266            layer.
1267    
1268            * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
1269            (SHAPETYPE_POINT, Shape): Move these constants and classes from
1270            layer.py to data.py
1271            (ShapefileStore.__init__): More Initialization for the new methods
1272            and functionality.
1273            (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
1274            (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
1275            (ShapefileStore.Shape): New methods that were formerly implemented
1276            in the layer.
1277            (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
1278            (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
1279            (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
1280            equivalents of the new shape methods. These versions are simply
1281            delegated to the original shapstore.
1282    
1283            * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
1284            (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
1285            (Layer.SetShapeStore): Removed the initializatin of instance
1286            variables that were needed for the stuff that's now in
1287            ShapefileStore
1288            (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
1289            (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
1290            shapestore.
1291    
1292            * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
1293            Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
1294            instead of layer.
1295    
1296            * test/test_shapefilestore.py: New. Tests for ShapefileStore.
1297    
1298            * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
1299    
1300            * test/test_layer.py: Import the SHAPETYPE_* constants from data
1301            instead of layer.
1302            (TestLayer.test_derived_store): Remove the test for the exception
1303            when instantiating the DerivedShapeStore with an incompatible
1304            table which is now in test_derivedshapestore.py. Add some more
1305            tests of the layer methods to determine whether they work for a
1306            DerivedShapeStore as well.
1307    
1308    2003-07-31  Jonathan Coles   <[email protected]>
1309    
1310            * Doc/manual/thuban-manual.xml: Fix the list of required packages
1311            by just listing the name and where they can be found.
1312    
1313    2003-07-31  Frank Koormann   <[email protected]>
1314    
1315            * Doc/manual/thuban-manual.xml:
1316            Changed the screenshot elements to figure.
1317            Changed some variablelist elements to itemizedlist.
1318            Added section on GDAL formats.
1319    
1320    2003-07-31  Jonathan Coles   <[email protected]>
1321    
1322            * Doc/manual/thuban-manual.xml: Added a few sentences about
1323            the Fix Border Color option when generating classes.
1324    
1325    2003-07-30  Jonathan Coles   <[email protected]>
1326    
1327            * Thuban/Model/classgen.py: Add docstrings. Rename specific
1328            Ramp instances to use lower_case_style.
1329    
1330            * Thuban/UI/classgen.py: Use renamed Ramp instances.
1331            
1332            * Thuban/UI/classifier.py: Add docstrings.
1333    
1334            * Thuban/UI/dock.py: Add docstrings.
1335    
1336            * test/test_classgen.py: Use renamed Ramp instances.
1337    
1338    2003-07-30  Bernhard Herzog  <[email protected]>
1339    
1340            * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
1341            was never used in Thuban.
1342    
1343    2003-07-30  Bernhard Herzog  <[email protected]>
1344    
1345            * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
1346            method directly instead of going through the transient_table
1347            method. This faster because transient_table may force the copy of
1348            a DBF file into the transient database and setting a table's title
1349            doesnm't affect the title of the associated transient table, so
1350            this fixes RT #2042
1351    
1352            * Thuban/UI/main.py (__version__): Don't import the already
1353            removed show_exception_dialog.
1354    
1355    2003-07-29  Jonathan Coles   <[email protected]>
1356    
1357            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
1358            Put back this method and remove the equivalent function since we
1359            are setting the exception hook from within this class (OnInit).
1360    
1361    2003-07-29  Jonathan Coles   <[email protected]>
1362    
1363            * Doc/manual/images/5_2_custom_ramp.png,
1364            Doc/manual/images/5_2_quantiles.png,
1365            Doc/manual/images/5_2_uniform_dist.png,
1366            Doc/manual/images/5_2_unique_values.png,
1367            Doc/manual/images/8_int_error.png: New screen shots.
1368    
1369            * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
1370            some points, and added more screen shots.
1371    
1372    2003-07-29  Bernhard Herzog  <[email protected]>
1373    
1374            * Thuban/Model/data.py: Remove the now unused import of warnings
1375    
1376    2003-07-29  Bernhard Herzog  <[email protected]>
1377    
1378            * Thuban/Model/data.py (SimpleStore): Removed. This class has been
1379            deprecated since before the 0.8 release and isn't used in Thuban
1380            itself anymore.
1381    
1382            * Thuban/Model/transientdb.py: Remove some unnecessary imports
1383    
1384    2003-07-29  Jonathan Coles   <[email protected]>
1385    
1386            * Thuban/UI/application.py (ThubanApplication.OnInit): set the
1387            python exception hook here so that we are sure to catch any
1388            Thuban exception that happen during initialization.
1389    
1390            * Thuban/UI/main.py (main): Don't set the exception hook here,
1391            it will get set in ThubanApplication.OnInit.
1392    
1393    2003-07-29  Jonathan Coles   <[email protected]>
1394                                                                                
1395            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
1396            Removed and called it show_exception_dialog() so that the exception
1397            handler can be set before the class is created.
1398                                                                                
1399            * Thuban/UI/main.py (main): Install the exception handler before
1400            a ThubanApplication is created.
1401                                                                                    
1402    2003-07-29  Bernhard Herzog  <[email protected]>
1403    
1404            * po/it.po: New. Italian translation by Maurizio Napolitano
1405    
1406            * po/ru.po: New. Russian translation by Alex Shevlakov
1407    
1408    2003-07-29  Frank Koormann   <[email protected]>
1409    
1410            * Doc/manual/thuban-manual.xml: Extended section on supported
1411            projections.
1412            
1413    2003-07-29  Frank Koormann   <[email protected]>
1414    
1415            * Doc/manual/thuban-manual.xml: gaspell-checked.
1416    
1417    2003-07-29  Jonathan Coles   <[email protected]>
1418    
1419            * Doc/manual/images/3_5_legend.png: Added border to improve look
1420            on white background.
1421    
1422    2003-07-29  Jonathan Coles   <[email protected]>
1423    
1424            * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
1425            descriptions for the legend toolbar.
1426    
1427            * Doc/manual/images/4_2_raster_layer_properties.png: Removed
1428            cursor from dialog box.
1429    
1430    2003-07-28  Jonathan Coles   <[email protected]>
1431    
1432            * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
1433    
1434            * Doc/manual/images/2_4_session_tree.png,
1435            Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
1436            Doc/manual/images/4_2_layer_properties.png,
1437            Doc/manual/images/4_2_raster_layer_properties.png,
1438            Doc/manual/images/5_3_genclass.png,
1439            Doc/manual/images/5_classification.png,
1440            Doc/manual/images/6_projection.png,
1441            Doc/manual/images/7_1_table_view.png,
1442            Doc/manual/images/7_2_5_join.png: New screenshots.
1443    
1444    2003-07-24  Jonathan Coles   <[email protected]>
1445    
1446            * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
1447    
1448    2003-07-24  Jonathan Coles   <[email protected]>
1449    
1450            * Doc/manual/thuban-manual.xml: Added EPS images and wrote
1451            chapter on Layer Management.
1452    
1453            * Doc/manual/Makefile: New. Makefile to generate all formats for the
1454            manual and images.
1455    
1456    2003-07-24  Bernhard Herzog  <[email protected]>
1457    
1458            * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
1459            it annoys lintian which warns about these files not being
1460            executable. The #! isn't necessary here since if you absolutely
1461            must execute them you can always say "python <filename>".
1462    
1463            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
1464            superfluous code to set brush and pen for point shapes
1465    
1466            * Thuban/UI/viewport.py: Remove commented out code that wouldn't
1467            belong in viewport anyway
1468    
1469    2003-07-24  Frank Koormann   <[email protected]>
1470    
1471            * Doc/manual/thuban-manual.xml: Added section on table management.
1472    
1473    2003-07-24  Bernhard Herzog  <[email protected]>
1474    
1475            * test/runtests.py (main): Recognize the long "verbose" option
1476            correctly.
1477    
1478    2003-07-22  Jonathan Coles   <[email protected]>
1479    
1480            * Doc/manual/thuban-manual.xml: Continue to write first revision
1481            of the manual.
1482    
1483            * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
1484            with Begin/EndDrawing() calls to ensure we aren't doing to
1485            many updates to the dc during rendering.
1486            (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
1487            a pen and brush argument so they need to be passed to the function.
1488    
1489            * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
1490            Calculates the minimum and maximum scale values. Factored out
1491            of set_view_transform so that it could be used to zoom all the
1492            way into a single point.
1493            (ViewPort.set_view_transform): Call calc_min_max_scales().
1494            (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
1495            if only a single point is selected.
1496    
1497            * Doc/manual/images/1_2_legend_close.png,
1498            Doc/manual/images/1_2_legend_dock.png,
1499            Doc/manual/images/1_2_mainwindow.png,
1500            Doc/manual/images/1_2_mainwindow.ps,
1501            Doc/manual/images/1_2_mainwindow.sk,
1502            Doc/manual/images/3_2_fullextent.png,
1503            Doc/manual/images/3_2_fulllayerextent.png,
1504            Doc/manual/images/3_2_fullshapeextent.png,
1505            Doc/manual/images/3_2_pan.png,
1506            Doc/manual/images/3_2_zoomin.png,
1507            Doc/manual/images/3_2_zoomout.png,
1508            Doc/manual/images/3_3_identify.png,
1509            Doc/manual/images/3_3_label.png,
1510            Doc/manual/images/3_5_invisible.png,
1511            Doc/manual/images/3_5_movedown.png,
1512            Doc/manual/images/3_5_moveup.png,
1513            Doc/manual/images/3_5_props.png,
1514            Doc/manual/images/3_5_tobottom.png,
1515            Doc/manual/images/3_5_totop.png,
1516            Doc/manual/images/3_5_visible.png: New. Images for the documentation.
1517    
1518    2003-07-18  Bernhard Herzog  <[email protected]>
1519    
1520            * Thuban/UI/messages.py (MAP_REPLACED): New message.
1521    
1522            * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
1523            after the new map has been assigned
1524    
1525            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
1526            Delegate MAP_REPLACED to the canvas too
1527            (MainWindow.prepare_new_session): Removed. Thanks to the new
1528            MAP_REPLACED message it's no longer needed
1529            (MainWindow.OpenSession, MainWindow.NewSession):
1530            prepare_new_session has been removed.
1531    
1532            * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
1533            MAP_REPLACED so that we can close the dialog if a new map is set.
1534            (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
1535            (Classifier.map_replaced): Handle MAP_REPLACED by closing the
1536            dialog
1537    
1538            * test/test_viewport.py (SimpleViewPortTest)
1539            (SimpleViewPortTest.test_default_size): Add doc-strings
1540            (ViewPortTest.setUp): Bind map to self.map so we can use it in
1541            tests. Subscribe to MAP_REPLACED messages too.
1542            (ViewPortTest.tearDown): No need to explicitly unsubscribe
1543            (ViewPortTest.test_set_map): New test for the SetMap method.
1544    
1545    2003-07-18  Bernhard Herzog  <[email protected]>
1546    
1547            * test/test_viewport.py (SimpleViewPortTest.test_default_size):
1548            Move this test from ViewPortTest.setUp to this new separate test
1549            case. setUp is not the place for the actual tests.
1550            (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
1551            more of the test from setUp to the new test test_inital_settings.
1552            (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
1553            (ViewPortTest.test_proj_conv): Split test_proj_conv into
1554            test_win_to_proj and test_proj_to_win and make the tests easier to
1555            understand
1556            (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
1557            (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
1558            (ViewPortTest.test_unprojected_rect_around_point)
1559            (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
1560            Reformat to increase readability.
1561    
1562    2003-07-18  Bernhard Herzog  <[email protected]>
1563    
1564            * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
1565    
1566    2003-07-18  Bernhard Herzog  <[email protected]>
1567    
1568            * test/runtests.py: The test suite can now be run without an X
1569            connection. To make sure this remains true, remove the DISPLAY
1570            environment variable so that an error occurs if the wxGTK is
1571            imported accidentally
1572    
1573    2003-07-18  Bernhard Herzog  <[email protected]>
1574    
1575            * Thuban/UI/viewport.py: Remove unused imports
1576    
1577            * Thuban/UI/view.py: Remove unused imports
1578    
1579    2003-07-18  Bernhard Herzog  <[email protected]>
1580    
1581            * test/test_export.py Remove unused imports. The OutputTransform
1582            function is now in viewport.py and is called output_transform
1583            (TestScalebar.test_output_transform)
1584            (TestScalebar.test_OutputTransform): Renamed to
1585            test_output_transform and updated to use output_transform instead
1586            of OutputTransform
1587    
1588            * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
1589            renamed.
1590            (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
1591            renamed to output_transform
1592    
1593            * Thuban/UI/viewport.py (OutputTransform, output_transform):
1594            Rename to output_transform
1595    
1596    2003-07-18  Bernhard Herzog  <[email protected]>
1597    
1598            * Thuban/Model/layer.py (Layer.__init__): Rename
1599            classificationField to classificatin_column and init it here so
1600            that it can be used in SetClassificationColumn
1601            (Layer.GetClassificationColumn, Layer.GetClassificationField):
1602            Rename to GetClassificationColumn.
1603            (Layer.SetClassificationColumn, Layer.SetClassificationField):
1604            Rename to SetClassificationColumn and issue a LAYER_CHANGED
1605            message if the column changes.
1606            (Layer._classification_changed, Layer.ClassChanged): Rename to
1607            _classification_changed. Update the callers.
1608            (Layer.SetShapeStore): Further field->column renames.
1609    
1610            * Thuban/Model/load.py (SessionLoader.start_classification)
1611            (SessionLoader.start_clpoint): Updates because of
1612            field->column method name changes in the Layer class
1613    
1614            * Thuban/Model/save.py (SessionSaver.write_classification): Updates
1615            because of field->column method name changes in the Layer class
1616    
1617            * Thuban/UI/classifier.py (Classifier.__init__)
1618            (Classifier._OnTry, Classifier._OnRevert): Updates because of
1619            field->column method name changes in the Layer class
1620    
1621            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
1622            because of field->column method name changes in the Layer class
1623    
1624            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
1625            of field->column method name changes in the Layer class
1626    
1627            * test/test_save.py (SaveSessionTest.testClassifiedLayer)
1628            (SaveSessionTest.testClassifiedLayer): Update because of
1629            field->column method name changes in the Layer class
1630    
1631            * test/test_layer.py (SetShapeStoreTests.setUp)
1632            (SetShapeStoreTests.test_sanity): Update because of field->column
1633            method name changes in the Layer class
1634            (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
1635            (TestLayerModification.test_sanity)
1636            (TestLayerModification.test_initial_settings): remove unsued code
1637            and rename to test_sanity.
1638            (TestLayerModification.test_set_classification): New test for
1639            SetClassification and SetClassificationField.
1640    
1641    2003-07-18  Bernhard Herzog  <[email protected]>
1642    
1643            * test/test_classgen.py (TestFixedRamp.test): Extend test to check
1644            the non-fixed values as well. The old test would have accepted a
1645            fixed ramp that only returnes the fixed properties
1646    
1647    2003-07-17  Jonathan Coles   <[email protected]>
1648    
1649            * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
1650            shots for the manual. The XCF file is the source image and
1651            has additional layers to support changes.
1652    
1653            * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
1654    
1655            * Thuban/UI/classifier.py (Classifier.__BuildClassification):
1656            Return both the new class and the field name.
1657    
1658            * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
1659            fit the map to the window as this changes any zoom level that
1660            the user may have set.
1661    
1662    2003-07-16  Jonathan Coles   <[email protected]>
1663    
1664            * Thuban/Model/classgen.py (generate_singletons,
1665            generate_uniform_distribution, generate_quantiles): Remove
1666            fixes parameter, but maintain the same functionality by having
1667            the calling function pass a FixedRamp object for the ramp.
1668            (FixedRamp): New. Adapts a ramp to have fixed property values.
1669    
1670            * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
1671            (Classification): Inherit from Publisher.
1672            (Classification.__init__): Remove the layer parameter.
1673            Classifications no longer need to have a parent layer.
1674            (Classification.GetField, Classification.GetFieldType,
1675            Classification.SetFieldInfo): Removed. The field name is stored
1676            in the layer, and the type can be retreived by calling
1677            Layer.GetFieldType().
1678            (Classification._set_layer, Classification.GetLayer): Removed.
1679            Classifications no longer have a parent layer.
1680    
1681            * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
1682            classification.
1683            (Layer.SetShapeStore): Reset the classification first while
1684            we still have the old shape store to work with.
1685            (Layer.GetClassificationField, Layer.SetClassificationField):
1686            New. Method for getting/setting the field to classify on.
1687            (Layer.SetClassification): Simplified now that the layer
1688            simply has to hold a reference to the classification and not
1689            tell the classification who owns it.
1690            Fixes RTbug #2023.
1691    
1692            * Thuban/Model/load.py (SessionLoader.start_classification):
1693            Set the field name on the layer, not the classification.
1694    
1695            * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
1696            classification is modified.
1697    
1698            * Thuban/Model/save.py (SessionSaver.write_classification):
1699            Get the field name and type from the layer.
1700    
1701            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
1702            parameter records to rows and add docstring. Fixes RTbug #1997.
1703    
1704            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
1705            ramp when we need to fix certain values of a ramp rather than
1706            using the old fixes parameter. Fixes RTbug #2024.
1707    
1708            * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
1709            parameter.
1710            (ClassTable.Reset): Add fieldType parameter and use it, rather
1711            than asking the classification.
1712            (Classifier.__init__): Remember the original class's field
1713            and ask the layer for the field type, rather than the classification.
1714            (Classifier.__SetGridTable): Retrieve the field and field type
1715            for the table because they are not in the classification.
1716            (Classifier._OnTry, Classifier._OnRevert): Set the classification
1717            field on the layer in addition to the classification itself.
1718    
1719            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
1720            classification field from layer.
1721    
1722            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
1723            classification field from layer. Split up tests and remove
1724            *-imports. Fixes RTbug #1992.
1725    
1726            * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
1727    
1728            * test/test_classification.py
1729            (TestClassification.test_classification): Remove tests for methods
1730            that no longer exist.
1731    
1732            * test/test_layer.py (SetShapeStoreTests.setUp): Classification
1733            __init__ no longer has a field parameter, use SetClassificationField.
1734            (SetShapeStoreTests.test_sanity): Use layer object to get class
1735            field info.
1736    
1737            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
1738            SetClassificationField on layer to set class field info.
1739    
1740            * test/test_viewport.py: Renamed from test/test_view.py.
1741    
1742    2003-07-16  Jan-Oliver Wagner <[email protected]>
1743    
1744            * Doc/manual/thuban-manual.xml: Added authors and an initial
1745            coarse structure.
1746    
1747    2003-07-15  Bernhard Herzog  <[email protected]>
1748    
1749            * test/support.py (FloatComparisonMixin): This is a mix-in class
1750            and therefore should not be derived from any other class.
1751    
1752            * test/test_range.py (RangeTest): FloatComparisonMixin is a
1753            mix-in, so derive from TestCase as well.
1754    
1755    2003-07-15  Bernhard Herzog  <[email protected]>
1756    
1757            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
1758            draw_func handling a bit to remove one layer of indirection. This
1759            makes the renderer about 10% faster in the non-classifying case
1760            and the code a bit cleaner
1761            (MapRenderer.draw_point_shape): Add the pen and brush parameters
1762            and set them in the dc. Now the draw_point_shape method and
1763            wxproj's draw_polygon_shape function have basically the same
1764            signature so that both can be directly used as draw_func
1765    
1766    2003-07-15  Bernhard Herzog  <[email protected]>
1767    
1768            * Thuban/Model/save.py (SessionSaver.write_classification): Encode
1769            string values (in addition to the labels) as UTF 8
1770    
1771            * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
1772            values if the field type is string
1773    
1774            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
1775            saving a session with non-ascii string classification values.
1776    
1777            * test/test_load.py (TestClassification.file_contents)
1778            (TestClassification.test): Check for non-ascii values in string
1779            classifications
1780    
1781    2003-07-14  Jonathan Coles   <[email protected]>
1782    
1783            * test/test_view.py: New. Tests for ViewPort.
1784    
1785    2003-07-14  Frank Koormann   <[email protected]>
1786    
1787            * Thuban/Model/load.py (SessionLoader.start_map): Encode map
1788            title to latin1.  Fixes https://intevation.de/rt/webrt?serial_num=2013
1789    
1790            * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
1791            unicode strings from session file: session title, map title and
1792            projection name.
1793            
1794    2003-07-10  Jonathan Coles   <[email protected]>
1795    
1796            * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
1797            drag_stop, not drag_move when the mouse is released.
1798    
1799    2003-07-10  Jonathan Coles   <[email protected]>
1800    
1801            The most important part of this is the seperation of view.py into
1802            two pieces. viewport.py now has a class called ViewPort which
1803            contains all the non-wx parts of view.py and can therefore be
1804            tested. view.py contains only the wx-specific parts and is fairly
1805            simple.
1806    
1807            * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
1808            RTTbug #1992.
1809            * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
1810            RTTbug #1992.
1811    
1812            * Thuban/Model/classgen.py (generate_singletons,
1813            generate_uniform_distribution, generate_quantiles):
1814            Added 'fixes' parameter so that property attributes can
1815            be held constant over the generated classification groups.
1816            (CustomRamp.GetProperties): Remove unused variables.
1817    
1818            * Thuban/Model/map.py (Map.SetProjection): Send the old
1819            projection as an argument to listeners of the MAP_PROJECTION_CHANGED
1820            event.
1821    
1822            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
1823            parameter which is a list of records that restricts which
1824            records are saved. Fixes RTbug #1997.
1825    
1826            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
1827            Port exception dialog from GREAT-ER. Fixes RTbug #1993.
1828    
1829            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
1830            to allow the user to fix line color/width on generated groups.
1831            (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
1832            functions to optionally fix group properties.
1833    
1834            * Thuban/UI/main.py (main): Set exception hook to the
1835            ShowExceptionDialog. Fixes RTbug #1993.
1836    
1837            * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
1838            the table window when it is selectd to be shown.
1839    
1840            * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
1841            Export Selection button and move the export buttons underneath
1842            the table.
1843            (QueryTableFrame.UpdateStatusText): Added event argument so
1844            that it can respond to grid selection events. The status text
1845            is now updated even when the table is not associated with a
1846            layer as was previously assumed.
1847            (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
1848            UpdateStatusText responds to these events.
1849            (QueryTableFrame.OnSaveAs): Renamed to doExport.
1850            (QueryTableFrame.doExport): Helper function that saves the
1851            entire table, or selected rows, to a file.
1852            (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
1853            Respond to export button events and call doExport.
1854    
1855            * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
1856            the function doesn't return NULL without first setting a Python
1857            Error.
1858    
1859            * test/runtests.py (main): Only print "Unknown option" for
1860            unsupported options.
1861    
1862            * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
1863            optional epsilon argument to specify floating point accuracy.
1864            (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
1865            for each item test.
1866    
1867            * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
1868            tests for saving selected records.
1869    
1870            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
1871            tests for saving selected records.
1872    
1873            * test/test_map.py (TestMapWithContents.test_set_projection):
1874            MAP_PROJECTION_CHANGED events send the old projection.
1875    
1876            * test/test_session.py
1877            (TestSessionWithContent.test_forward_map_projection):
1878            MAP_PROJECTION_CHANGED events send the old projection.
1879    
1880            * test/test_table.py (TableTest): Update tests to use non-deprecated
1881            functions.
1882    
1883    2003-07-08  Bernhard Herzog  <[email protected]>
1884    
1885            * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
1886            constants in the column objects are the standard ones defined in
1887            the table module.
1888    
1889            * test/test_transientdb.py
1890            (TestTransientTable.test_transienttable_to_dbf): New. Test whether
1891            exporting transient tables as DBF works. This should catch the bug
1892            just fixed in TransientTableBase.Width.
1893    
1894    2003-07-08  Bernhard Herzog  <[email protected]>
1895    
1896            * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
1897            interpolated colors correctly.
1898    
1899            * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
1900            New. Test case for the fix in classgen.py
1901    
1902    2003-07-08  Bernhard Herzog  <[email protected]>
1903    
1904            * test/runtests.py (main): Make the default output less verbose
1905            and add a verbosity option (-v) to get the old output
1906    
1907    2003-07-08  Bernhard Herzog  <[email protected]>
1908    
1909            * Resources/XML/thuban-0.9.dtd: New. This will become the DTD for
1910            0.9.
1911    
1912            * Thuban/Model/transientdb.py (TransientJoinedTable.JoinType):
1913            New. Return the join type
1914    
1915            * Thuban/Model/save.py (SessionSaver.write_session): Use new 0.9
1916            DTD
1917            (SessionSaver.write_data_containers): Save the join type for
1918            joined tables
1919    
1920            * Thuban/Model/load.py (SessionLoader.__init__): Add the new 0.9
1921            namespace
1922            (SessionLoader.start_jointable): Handle the jointype attribute
1923    
1924            * test/test_load_0_8.py: New. Effectively a copy of test_load.py
1925            as of Thuban 0.8. These are now tests to determine whether Thuban
1926            can still read files generated by Thuban 0.8
1927    
1928            * test/test_load.py (LoadSessionTest.dtd)
1929            (TestSingleLayer.file_contents)
1930            (TestLayerVisibility.file_contents, TestLabels.file_contents)
1931            (TestLayerProjection.file_contents)
1932            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
1933            (TestJoinedTable.file_contents)
1934            (TestLoadError.file_contents): Update for new DTD
1935            (TestJoinedTable.file_contents, TestJoinedTable.setUp): Add test
1936            for new join type attribute
1937    
1938            * test/test_save.py (SaveSessionTest.dtd)
1939            (SaveSessionTest.testEmptySession)
1940            (SaveSessionTest.testSingleLayer)
1941            (SaveSessionTest.testLayerProjection)
1942            (SaveSessionTest.testRasterLayer)
1943            (SaveSessionTest.testClassifiedLayer)
1944            (SaveSessionTest.test_dbf_table)
1945            (SaveSessionTest.test_joined_table): Update for new DTD
1946            (SaveSessionTest.test_joined_table): Add test for new join type
1947            attribute
1948    
1949    2003-07-04  Bernhard Herzog  <[email protected]>
1950    
1951            * Thuban/Model/table.py (_find_dbf_column_names): New. Helper
1952            function for table_to_dbf
1953            (table_to_dbf): Deal with names longer than the 10 character limit
1954    
1955            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
1956            doc-string
1957            (TestTableToDBF.test_table_to_dbf_long_col_names): New test for
1958            long column names
1959    
1960    2003-07-03  Bernhard Herzog  <[email protected]>
1961    
1962            * Doc/manual/thuban-manual.xml: Fix the CVS Revision Tag syntax
1963    
1964    2003-07-03  Bernhard Herzog  <[email protected]>
1965    
1966            * Doc/manual/thuban-manual.xml, Doc/manual/README: New. Skeleton
1967            for the Thuban manual and README with some basic information about
1968            the manual
1969    
1970    2003-07-03  Bernhard Herzog  <[email protected]>
1971    
1972            * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
1973            Update doc-string
1974            (TransientJoinedTable.create): Do not modify the column objects of
1975            the input tables in place and copy all columns of the input tables
1976            into the joined table after all.
1977    
1978            * test/test_transientdb.py
1979            (TestTransientTable.test_transient_joined_table_same_column_name):
1980            Update to reflect the new behavior
1981            (TestTransientTable.test_transient_joined_table_with_equal_column_names):
1982            Update to reflect the new behavior
1983            (TestTransientTable.test_transient_joined_table_name_collisions_dont_modify_in_place):
1984            New test case for a bug which modified the column objects in place
1985    
1986    2003-07-02  Jonathan Coles   <[email protected]>
1987    
1988            * Thuban/Model/classgen.py (generate_singletons,
1989            generate_uniform_distribution, generate_quantiles,
1990            GenQuantiles0): Make sure maxValue isn't less than
1991            one, otherwise we could divide by zero.
1992    
1993            * test/test_classgen.py (ClassGenTest.doClassRangeTest,
1994            ClassGenTest.doClassSingleTest): Call doBoundsTest to
1995            check the end classification groups against the
1996            proper property values.
1997            (ClassGenTest.doBoundsTest): New. Checks the first and
1998            last classification groups to make sure their properties
1999            are the correct upper and lower bounds for a color ramp.
2000    
2001    2003-07-02  Jonathan Coles   <[email protected]>
2002    
2003            * Thuban/Model/classgen.py (generate_singletons,
2004            generate_uniform_distribution, generate_quantiles,
2005            GenQuantiles0): The denominator was one to high when
2006            calculating the index for the ramp causing the index
2007            to never to reach one.
2008    
2009    2003-07-02  Jonathan Coles   <[email protected]>
2010    
2011            Changed the singature of ClassGroupRange.__init__ and
2012            ClassGroupRange.SetRange() so that the min/max values are
2013            passed as a tuple. This makes a better calling scheme for
2014            when a Range object is passed instead.
2015    
2016            * Thuban/Model/classgen.py: Fixed parameters to
2017            ClassGroupRange constructor.
2018    
2019            * Thuban/Model/classification.py (ClassGroupRange.__init__):
2020            Consolidate the min/max parameters into a single _range which
2021            can either be a tuple or a Range object.
2022            (ClassGroupRange.SetRange): Consolidate the min/max parameters
2023            into a single _range which can either be a tuple or a Range object.
2024    
2025            * Thuban/Model/load.py (SessionLoader.start_clrange): Fix
2026            call to ClassGroupRange constructor to use a tuple.
2027    
2028            * Thuban/Model/layer.py (Layer.SetClassification): Switch
2029            the classification instance variable to the new class
2030            before calling _set_layer otherwise subscribers to a
2031            LAYER_CHANGED event will not see any difference.
2032    
2033            * test/test_classification.py: Fix tests of ClassGroupRange
2034            so that they use the new signature.
2035    
2036            * test/test_load.py: Fix use of ClassGroupRange so that it
2037            uses the new signature.
2038    
2039            * test/test_load_0_2.py: Fix use of ClassGroupRange so that it
2040            uses the new signature.
2041    
2042            * test/test_save.py: Fix use of ClassGroupRange so that it
2043            uses the new signature.
2044    
2045    
2046    2003-07-01  Jonathan Coles   <[email protected]>
2047    
2048            * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.
2049            Import used objects/class from color.
2050            (generate_singletons): We don't
2051            need the numGroups parameter anymore because we are using
2052            the new ramps with GetProperties().
2053            (generate_uniform_distribution): Use new ramp method
2054            GetProperties().
2055            (generate_quantiles, GenQuantiles0): Use new ramp method
2056            GetProperties().
2057            (CustomRamp.SetNumGroups): Removed. The ramps now map
2058            a value from 0 to 1 to class properties so the number
2059            of groups is not needed ahead of time.
2060            (CustomRamp.next): Removed. CustomRamp does not support
2061            interation anymore.
2062            (CustomRamp.GetProperties): Returns a ClassGroupProperties
2063            object based on the index value from 0 to 1 that is
2064            passed to it.
2065            (GreyRamp, RedRamp, GreenRamp, BlueRamp, GreenToRedRamp):
2066            Made into instances of Monochromatic class instread of
2067            deriving from it.
2068            (HotToCold.SetNumGroups): Removed. See CustomRamp.
2069            (HotToCold.next): Removed. See CustomRamp.
2070    
2071            * Thuban/Model/classification.py: Fixes RTbug #1973, 1971.
2072            (Classification.SetField, Classification.SetFieldType):
2073            Replaced with SetFieldInfo.
2074            (Classification.SetFieldInfo): New. Does a better job of
2075            what SetField and SetFieldType used to do by combining
2076            their function since they should really always be done
2077            at the same time.
2078            (Classification.SetLayer): Renamed to _set_layer.
2079            (Classification._set_layer): Should only be called from
2080            Layer's SetClassification. This does not cause a recursive
2081            call as SetLayer did because we know that Layer knows about
2082            the classification.
2083    
2084            * Thuban/Model/color.py: Fixes RTbug #1971.
2085            (_Transparent): Renamed from Transparent so it doesn't
2086            conflict with the module variable.
2087            (Transparent, Black): Renamed from Color.Transparent,
2088            Color.Black so they are not class variables.
2089    
2090            * Thuban/Model/layer.py: Fixes RTbug #1971, 1973.
2091            (Layer.Destroy): We don't need to call SetClassification
2092            anymore to clear out the back reference in the classifcation
2093            to the layer. It's better to set it to None using _set_layer,
2094            and we won't be creating another clas object too.
2095            (Layer.SetClassification): Classification._set_layer is not
2096            recursive so remove all the locking variables. Also clean
2097            up the code so that it remains unchanged if something fails.
2098    
2099            * Thuban/Model/load.py: Fixes RTbug #1971.
2100            (SessionLoader.start_classification): Call
2101            Classification.SetFieldInfo().
2102    
2103            * Thuban/Model/save.py: Removed import of Color which wasn't
2104            being used.
2105    
2106            * Thuban/UI/classgen.py: Fixes RTbug #1972.
2107            (ClassGenDialog.__init__): Color ramps are now instances
2108            already so we don't need to create any new objects.
2109            (ClassGenDialog.OnOK): Check for numGroups is no longer
2110            necessary because we never use it.
2111    
2112            * Thuban/UI/classifier.py: Fixes RTbug #1971.
2113            (Classifier.__BuildClassification, Classifier.__SetGridTable):
2114            Call Classification.SetFieldInfo() instead of SetFieldType.
2115    
2116            * Thuban/UI/renderer.py: Fixes RTbug #1971.
2117    
2118            * Thuban/UI/view.py: Fixes RTbug #1974, 1971.
2119            (MapCanvas.__init__): Subscribe to the idle time event. Set
2120            background color to white.
2121            (MapCanvas.OnPaint): Set a flag indicating that we should
2122            render the map during idle time. If we already have a bitmap
2123            just draw it now.
2124            (MapCanvas.OnIdle): New. Render the map only during idle time.
2125            This also fixes a problem with the busy cursor under gtk.
2126    
2127            * test/test_classgen.py (ClassGenTest.test_generate_singletons):
2128            Fix calls to generate_singletons because the signature changed.
2129    
2130            * test/test_classification.py: Fix color references and
2131            change calls to Classification.[SetField|SetFieldType] to
2132            SetFieldInfo.
2133    
2134            * test/test_load.py: Fix color references.
2135    
2136            * test/test_load_0_2.py: Fix color references.
2137    
2138            * test/test_save.py (SaveSessionTest.testClassifiedLayer):
2139            Change calls to Classification.[SetField|SetFieldType] to
2140            SetFieldInfo.
2141    
2142    2003-07-01  Frank Koormann   <[email protected]>
2143    
2144            MERGE from the greater-ms3 branch.
2145    
2146            * test/test_transientdb.py
2147            (TestTransientTable.test_transient_joined_table_with_equal_column_names):
2148            New. Test join of two tables with partly equal column names.
2149    
2150            * Thuban/Model/transientdb.py (TransientJoinedTable.create):
2151            If duplicates in left and right tables column names are found,
2152            append '_' (underscores) to the name until it is unique.
2153            Create always new internal names for the resulting table and reference
2154            columns in the join statement with <table>.<column>
2155    
2156    2003-07-01  Bernhard Herzog  <[email protected]>
2157    
2158            * test/test_transientdb.py
2159            (TestTransientTable.test_transient_joined_table_same_column_name):
2160            New. Test whether joining on columns with the same names in both
2161            tables works.
2162            
2163            * Thuban/Model/transientdb.py (TransientJoinedTable.create): Make
2164            sure to use the right internal names even when joining on field
2165            with the same names in both tables. Also, detect duplicate names
2166            in the joined table correctly.
2167    
2168    2003-07-01  Frank Koormann   <[email protected]>
2169    
2170            * Thuban/UI/renderer.py (ExportRenderer.render_legend):
2171            Reverse List of layers to render in same order as in desktop legend.
2172    
2173    2003-06-30  Jonathan Coles   <[email protected]>
2174    
2175            * Thuban/version.py (make_tuple): Takes a version string
2176            and splits it into a tuple of at most three integers.
2177            Used make_tuple() to make tuple versions of the version
2178            numbers.
2179    
2180            * Thuban/UI/about.py: Add Thuban email addresses.
2181    
2182    2003-06-30  Jonathan Coles   <[email protected]>
2183    
2184            * Thuban/version.py: SQLite/PySQLite version dependencies
2185            were too high.
2186    
2187    2003-06-30  Jonathan Coles   <[email protected]>
2188    
2189            * Thuban/version.py: Update version to 0.8.1
2190            
2191            * MANIFEST.in: Added Projections so that default.proj is
2192            included.
2193    
2194    2003-06-26  Jonathan Coles   <[email protected]>
2195    
2196            New About box with lots more information including library
2197            versions and credits. More/better version checking before
2198            Thuban starts.
2199    
2200            * Thuban/UI/about.py: New. New About box that displays
2201            library version information and credits.
2202    
2203            * Thuban/version.py: Added new 'versions' dictionary which
2204            contains the verions of various libraries which are checked
2205            when the module loads.
2206            (verify_versions): Check all version numbers and returns
2207            a list of errors.
2208    
2209            * Thuban/UI/classifier.py (Classifier.__EnableButtons):
2210            Reset the status of the buttons as the situation warrants,
2211            but in a better more reliable way by not relying on the
2212            current status to determine what needs to change.
2213    
2214            * Thuban/UI/main.py (wxCHECK_VERSION): Removed. Not needed.
2215            (verify_versions): Remove most of the code since it is
2216            now in Thuban.version.verify_versions.o
2217    
2218            * Thuban/UI/mainwindow.py (MainWindow.About): Call new
2219            About box in Thuban.UI.about.
2220    
2221            * extensions/thuban/gdalwarp.cpp (get_gdal_version): New.
2222            Returns the version of gdal library being used as a string.
2223    
2224            * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
2225            Removed.
2226            (get_proj_version): Return the version of PROJ that the file
2227            was compiled with.
2228            (get_gtk_version): Return th version of GTK that the file
2229            was compiled with.
2230    
2231    2003-06-25  Jonathan Coles   <[email protected]>
2232    
2233            * Thuban/UI/classifier.py (Classifier.EditSymbol): The parent
2234            of the SelectPropertiesDialog should be self so the window
2235            appears on top.
2236            (ClassGroupPropertiesCtrl.DoEdit): The parent
2237            of the SelectPropertiesDialog should be self so the window
2238            appears on top.
2239    
2240            * Thuban/UI/resource.py: Cleaned up how we determine file
2241            extensions.
2242            (GetImageResource): Return an wxImage from our Resources.
2243    
2244    2003-06-24  Jonathan Coles   <[email protected]>
2245    
2246            * Thuban/UI/renderer.py (ExportRenderer.render_legend):
2247            Check that a layer has a classification before trying
2248            to get it. Raster layers don't have classifications.
2249    
2250    2003-06-23  Jonathan Coles   <[email protected]>
2251            
2252            * setup.py: Add Resources/XML to resource list.
2253        
2254    2003-06-23  Jonathan Coles   <[email protected]>
2255    
2256            * setup.cfg: Fix copyright dates
2257        
2258    2003-06-23  Jonathan Coles   <[email protected]>
2259    
2260            * MANIFEST.in: Update with Resources/XML
2261    
2262            * setup.py: Don't include Locale resources yet as we don't
2263            have any and it causes problems building the distribution
2264            for Windows. Update version to 0.8.0.
2265    
2266            * Doc/thuban.dtd: Removed since it is now in Resources/XML.
2267    
2268            * Thuban/UI/mainwindow.py: Add blank line at the end because
2269            file was not being read correctly building the Windows
2270            distribution.
2271    
2272    2003-06-23  Jonathan Coles   <[email protected]>
2273    
2274            * Thuban/UI/mainwindow.py (MainWindow.About): Fix text.
2275    
2276            * Thuban/version.py: Temporarily update longversion for
2277            the 0.8 release so that it doesn't have the cvs revision.
2278    
2279    2003-06-23  Jonathan Coles   <[email protected]>
2280    
2281            * Thuban/UI/common.py (ThubanBeginBusyCursor): Call wxSafeYield
2282            to make sure that we don't create reentrant possibilities with
2283            wxYield.
2284    
2285            * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxBeginBusyCursor()
2286            directly to avoid the wxSafeYield() call which generates an
2287            OnPaint event causing infinite recursion. Don't try to catch
2288            exception anymore. This was for before there were limits on map
2289            scaling.
2290    
2291    2003-06-23  Bernhard Herzog  <[email protected]>
2292    
2293            Bug fix for RT #1961:
2294    
2295            * Thuban/Model/load.py (SessionLoader.start_derivedshapesource):
2296            Register DerivedShapestores with the session
2297    
2298            * Thuban/Model/session.py (Session.Tables): Make sure each table
2299            is only listed once.
2300    
2301            * test/test_load.py (TestJoinedTable.test): Add check_format call.
2302            Update file contents to match the one written out.
2303    
2304    2003-06-20  Bernhard Herzog  <[email protected]>
2305    
2306            * test/xmlsupport.py (SaxEventLister.startElementNS)
2307            (SaxEventLister.endElementNS): Do not include the qname. Python
2308            2.2.1 and 2.2.2 and 2.2.3 differ in this regard. In 2.2.1 qname it
2309            is (presumably incorrectly) None, whereas it's a string with the
2310            element name in the later versions.
2311    
2312            * test/test_xmlsupport.py (TestEventList.test_even_list_simple)
2313            (TestEventList.test_even_list_namespace): Update tests to reflect
2314            the new behaviour
2315            (TestEventList.test_even_list_id_normalization): Fix doc-string
2316    
2317    2003-06-20  Jonathan Coles   <[email protected]>
2318    
2319            * Thuban/Model/layer.py (BaseLayer.HasShapes): New. Overridden
2320            by deriving classes to determine if that layer supports shapes.
2321            (Layer): Override HasShapes and return true.
2322    
2323            * Thuban/UI/classgen.py: Use Thuban[Begin|End]BusyCursor()
2324            instead of a direct call to wx[Begin|End]CusyCursor().
2325            (GenUniquePanel._OnRetrieve): Set busy cursor while retrieving
2326            table data.
2327    
2328            * Thuban/UI/common.py (ThubanBeginBusyCursor, ThubanEndBusyCursor):
2329            New. Wrappers around the wxWindows functions that allow us to
2330            make additional calls such as wxYield which gives the native
2331            system a chance to update the cursor correctly.
2332    
2333            * Thuban/UI/tableview.py: Use Thuban[Begin|End]BusyCursor()
2334            instead of a direct call to wx[Begin|End]CusyCursor().
2335    
2336            * Thuban/UI/view.py: Use Thuban[Begin|End]BusyCursor()
2337            instead of a direct call to wx[Begin|End]CusyCursor().
2338            (MapCanvas.find_shape_at): Check if the current search layer
2339            support shapes, otherwise go on to the next layer.
2340    
2341            * test/test_layer.py: Add tests in each type of layer for
2342            HasClassification() and HasShapes()
2343    
2344    2003-06-20  Jonathan Coles   <[email protected]>
2345    
2346            * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after
2347            turning on the busy cursor to allow the system to change the
2348            cursor before we begin painting. This fixes a problem that
2349            was occuring only under GTK. Fixes RTbug #1840.
2350    
2351    2003-06-20  Bernhard Herzog  <[email protected]>
2352    
2353            * Resources/XML/thuban-0.8.dtd: New DTD for the new file format
2354            version.
2355    
2356            * Thuban/Model/save.py (sort_data_stores): New. Make topological
2357            sort of the data sources so they can be written with sources that
2358            data sources that depend on other data sources come after the
2359            sources they depend on.
2360            (SessionSaver.__init__): Add idmap instance variable to map from
2361            objects to the ids used in the file.
2362            (SessionSaver.get_id, SessionSaver.define_id)
2363            (SessionSaver.has_id): New. Methods to manage the idmap
2364            (SessionSaver.write): Use thuban-0.8.dtd
2365            (SessionSaver.write_session): Add a namespace on the session and
2366            write out the data sources before the maps.
2367            (SessionSaver.write_data_containers): New. Write the data
2368            containers.
2369            (SessionSaver.write_layer): Layer elements now refer to a
2370            shapestore and don't contain filenames anymore.
2371    
2372            * Thuban/Model/load.py (LoadError): Exception class to raise when
2373            errors in the files are discovered
2374            (SessionLoader.__init__): Define dispatchers for elements with a
2375            thuban-0.8 namespace too.
2376            (SessionLoader.check_attrs): New helper method to check and
2377            convert attributes
2378            (AttrDesc): New. Helper class for SessionLoader.check_attrs
2379            (SessionLoader.start_fileshapesource)
2380            (SessionLoader.start_derivedshapesource)
2381            (SessionLoader.start_filetable, SessionLoader.start_jointable):
2382            Handlers for the new elements in the new fileformat
2383            (SessionLoader.start_layer): Handle the shapestore attribute in
2384            addition to filename.
2385            (SessionLoader.start_table, SessionLoader.end_table): Removed.
2386            They were never used in the old formats and aren't needed for the
2387            new.
2388    
2389            * Thuban/Model/session.py (Session.DataContainers): New method to
2390            return all "data containers", i.e. shapestores and tables
2391    
2392            * test/xmlsupport.py (SaxEventLister.__init__)
2393            (SaxEventLister.startElementNS, sax_eventlist): Add support to
2394            normalize IDs.
2395    
2396            * test/test_xmlsupport.py
2397            (TestEventList.test_even_list_id_normalization): New test case for
2398            id normalization
2399    
2400            * test/test_load.py (LoadSessionTest.check_format): Use ID
2401            normalization
2402            (LoadSessionTest.thubanids, LoadSessionTest.thubanidrefs): New
2403            class atrributes used for ID normalization
2404            (TestSingleLayer, TestLayerVisibility, TestLabels.test)
2405            (TestLayerProjection.test, TestRasterLayer.test): Adapt to new
2406            file format
2407            (TestJoinedTable): New test for loading sessions with joined
2408            tables.
2409            (TestLoadError): New. Test whether missing required attributes
2410            cause a LoadError.
2411    
2412            * test/test_save.py (SaveSessionTest.thubanids)
2413            (SaveSessionTest.thubanidrefs): New class attributes for ID
2414            normalization in .thuban files.
2415            (SaveSessionTest.compare_xml): Use id-normalization.
2416            (SaveSessionTest.testEmptySession)
2417            (SaveSessionTest.testLayerProjection)
2418            (SaveSessionTest.testRasterLayer)
2419            (SaveSessionTest.testClassifiedLayer): Adapt to new file format.
2420            (SaveSessionTest.testLayerProjection): The filename used was the
2421            same as for testSingleLayer. Use a different one.
2422            (SaveSessionTest.test_dbf_table)
2423            (SaveSessionTest.test_joined_table): New test cases for saving the
2424            new data sources structures.
2425            (TestStoreSort, MockDataStore): Classes to test the sorting of the
2426            data stores for writing.
2427    
2428            * test/runtests.py: Add CVS keywords
2429    
2430    2003-06-20  Jonathan Coles   <[email protected]>
2431    
2432            * test/test_session.py
2433            (UnreferencedTablesTests.test_unreferenced_tables_with_joins):
2434            Use the cultural_landmark-point.dbf file for the store so that
2435            the table rows and shape count match.
2436    
2437    2003-06-20  Jonathan Coles   <[email protected]>
2438    
2439            * Thuban/Model/data.py (DerivedShapeStore.__init__): Raise
2440            an exception if the number of shapes is different from the
2441            number of rows in the table. Address RTbug #1933.
2442    
2443            * test/test_layer.py (TestLayer.test_derived_store): Add
2444            a test for the new exception in DerivedShapeStore.__init__.
2445    
2446            * test/support.py (FloatTestCase): Removed since there is
2447            already FloatComparisonMixin. Fixes RTbug #1954.
2448            (FloatComparisonMixin.assertFloatEqual): Include test for
2449            infinity that was part of FloatTestCase.
2450    
2451            * test/test_range.py (RangeTest): Inherit from
2452            support.FloatComparisonMixin now that we don't have
2453            support.FloatTestCase.
2454    
2455    2003-06-20  Bernhard Herzog  <[email protected]>
2456    
2457            * test/test_save.py (SaxEventLister, sax_eventlist): Removed. Use
2458            the implementation in xmlsupport instead.
2459            (SaveSessionTest.compare_xml): sax_eventlist is now in xmlsupport
2460    
2461            * test/test_proj.py: Import sax_eventlist from xmlsupport instead
2462            of test_save
2463    
2464    2003-06-20  Bernhard Herzog  <[email protected]>
2465    
2466            * test/test_load.py (LoadSessionTest.check_format): New helper
2467            method to make sure the test files we load might have been written
2468            by the current thuban version.
2469            (ClassificationTest.TestLayers, TestSingleLayer.test)
2470            (TestLayerVisibility.test, TestClassification.test)
2471            (TestLabels.test, TestLayerProjection.test, TestRasterLayer.test):
2472            Add check_format() calls and fix the thuban data to match the data
2473            that would be written by saving the session loaded from it.
2474    
2475            * test/xmlsupport.py (SaxEventLister, sax_eventlist): Copies of
2476            the same class and function in test_save.
2477    
2478            * test/test_xmlsupport.py (TestEventList): New. test cases for
2479            sax_eventlist
2480    
2481    2003-06-20  Bernhard Herzog  <[email protected]>
2482    
2483            * Resources/XML/thuban.dtd: Add comment about which versions of
2484            Thuban are covered by this DTD
2485            (map): Fix content model for layers and raster layers. There can
2486            be any number or layers and raster layers in any order.
2487    
2488    2003-06-20  Jonathan Coles   <[email protected]>
2489    
2490            This is mainly about fixing RTbug #1949.
2491    
2492            * Thuban/Model/classification.py: Remove "from __future__"
2493            import statement since python 2.2 is the earliest supported
2494            version.
2495    
2496            * Thuban/Model/proj.py (Projection.GetProjectedUnits): New.
2497            Currently returns PROJ_UNITS_METERS or PROJ_UNITS_DEGREES
2498            depending on the units this projection *forwards* into.
2499    
2500            * Thuban/Model/save.py (SessionSaver.write_classification):
2501            Remove unnecessary use of lambdas and nested functions.
2502    
2503            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Do scale
2504            adjustment here if the map projection uses degrees.
2505    
2506            * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Remove
2507            scale adjust code since it is now done before calling
2508            this method. Don't do anything if the map projection
2509            is None.
2510    
2511    2003-06-19  Bernhard Herzog  <[email protected]>
2512    
2513            Move version specific load tests to their own file.
2514    
2515            * test/test_load.py: Expand the doc-string to explain a bit how to
2516            handle file format changes.
2517            (TestClassification.test): Update the docstring as this test is
2518            not about Thuban 0.2 anymore.
2519    
2520            * test/test_load_0_2.py: New file with the load tests for thuban
2521            files created with Thuban 0.2 and earlier.
2522    
2523    2003-06-19  Bernhard Herzog  <[email protected]>
2524    
2525            Add XML validation to some of the tests. Validation will only be
2526            done if pyRXP is installed (http://reportlab.com/xml/pyrxp.html).
2527            To make the DTD available to the test cases it's moved into
2528            Resources/XML
2529    
2530            * Resources/XML/thuban.dtd: New. This is now the real Thuban DTD
2531            for versions up to and including 0.2. Two slight changes: added an
2532            encoding specification and fixed the comment which refered to
2533            GRASS, not Thuban
2534    
2535            * test/xmlsupport.py: New support module for tests involving XML.
2536            Currently there's a mix-in class for XML validation.
2537    
2538            * test/test_xmlsupport.py: New. Tests for the xmlsupport module
2539    
2540            * test/test_save.py (SaveSessionTest): Derive from ValidationTest
2541            so that we can validate the
2542            (SaveSessionTest.testEmptySession)
2543            (SaveSessionTest.testSingleLayer)
2544            (SaveSessionTest.testSingleLayer)
2545            (SaveSessionTest.testLayerProjection)
2546            (SaveSessionTest.testRasterLayer)
2547            (SaveSessionTest.testClassifiedLayer): Validate the generated XML
2548    
2549            * test/runtests.py (main): Call print_additional_summary instead
2550            of print_garbage_information
2551    
2552            * test/support.py (resource_dir): New function to return the
2553            "Resource" subdirectory
2554            (print_additional_summary): New function to combine several
2555            summary functions
2556            (run_tests): Use print_additional_summary instead of calling
2557            print_garbage_information directly
2558    
2559    2003-06-19  Bernhard Herzog  <[email protected]>
2560    
2561            * Doc/thuban.dtd (classification): Correct the content model of
2562            the classification element.
2563            (projection): Add the "name" attribute
2564    
2565    2003-06-19  Frank Koormann   <[email protected]>
2566    
2567            MERGE from the greater-ms3 branch.
2568    
2569            * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Apply conversion to
2570            scale if projection is latlong to get better estimate.
2571    
2572            Fix problem of hidden properties dialog under windows after double
2573            click on layer tree:
2574            The tree control always gets an Expanded / Collapsed event after
2575            the ItemActivated  on double click, which raises the main window again.         We add a second ItemActivated event to the queue, which simply
2576            raises the already displayed window.
2577    
2578            * Thuban/UI/legend.py (LegendTree.__init__): Instance variable
2579            raiseProperties initialized to prevent endless loops
2580            (LegendTree._OnItemActivated): Depending on self.raiseProperties
2581            simply raise the properties or open the dialog and issue a second
2582            event.
2583    
2584    2003-06-18  Jonathan Coles   <[email protected]>
2585    
2586            * setup.py: Fix a few problems that occured under Windows.
2587    
2588    2003-06-18  Jonathan Coles   <[email protected]>
2589    
2590            When Thuban loaded the map was redrawn twice because the
2591            legend was being opened after the mainwindow was created
2592            and not during its creation. This meant the map was drawn
2593            initially and then had to be redrawn when the legend
2594            caused the display to change. Now the legend is opened
2595            in the mainwindow constructor which resolves this issue.
2596    
2597            Also, although we were checking for the existence of
2598            gdal and gdalwarp modules, the gdalwarp extension was
2599            still being compiled (which may fail if the system doesn't
2600            have gdal installed). the build_ext command to setup.py
2601            now accepts the flags --with-gdal and --without-gdal.
2602            If --without-gdal is specified setup.py will try to
2603            use the gdal parameters specified by gdal-config. Under
2604            windows, those parameters have to be set in setup.py
2605            as with proj4 an wxWindows.
2606    
2607            * setup.py: Use a list instead of seperate variables for
2608            extension parameters so we can create a generic function
2609            that runs an appropriate *-config script.
2610            (run_cs_script): Renamed from run_wx_script and modified
2611            to accept a second argument which is a list of lists to
2612            be filled in by the values returned from running the command.
2613            (thuban_build_ext): New. Extends the build_ext command and
2614            provides the options --with-gdal/--without-gdal which then
2615            optionally includes the gdalwarp extension.
2616    
2617            * Thuban/Model/resource.py: First check if we can import
2618            the gdalwarp Thuban extension before checking for gdal.
2619            Also added some comments.
2620            
2621            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Check if
2622            the map is None which may be the case if none has been loaded
2623            yet.
2624    
2625            * Thuban/UI/main.py (main): Remove call to ShowLegend.
2626    
2627            * Thuban/UI/mainwindow.py (MainWindow.__init__): Call ShowLegend().
2628    
2629            * Thuban/UI/renderer.py: Check for gdal support before importing
2630            gdalwarp.
2631            (MapRenderer.render_map): Only try to optimize if we have gdal
2632            support otherwise nothing will get drawn.
2633    
2634            * Thuban/UI/view.py (MapCanvas.FitMapToWindow): This may be called
2635            during startup before a map has been created. Check if map is None
2636            before using it and do nothing if it is.
2637    
2638    2003-06-17  Jonathan Coles   <[email protected]>
2639    
2640            Fix the problem with raster layers under Windows that caused
2641            Thuban to crash. The view should respond to layer projection
2642            changed events to update the display. Changes to a projection
2643            should not cause the map to be set to full extent.
2644            
2645            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
2646            current_map_proj to remember the current map projection so that
2647            when the projection changes we know what the previous projection
2648            was.
2649            (MapCanvas.SetMap): Unsubscribe and subscribe to
2650            LAYER_PROJECTION_CHANGED events.
2651            (MapCanvas.projection_changed): Split into two methods that respond
2652            to map and layer projection changes.
2653            (MapCanvas.map_projection_changed): New. Takes the current view and
2654            projects it using the new projection. This does not cause the
2655            map to be redrawn at full extent.
2656            (MapCanvas.layer_projection_changed): New. Cause a redraw which
2657            will draw each layer in its new projection.
2658            
2659            * extensions/thuban/bmpdataset.cpp (BMPDataset::Open): Call
2660            VSIFClose() not VSIFCloseL() to close the file. Fixes a crash
2661            under Windows.
2662            
2663            * extensions/thuban/gdalwarp.cpp (MFILENAME): Padding should be
2664            to twice sizeof(void*) because there are two digits for each
2665            hex byte.
2666    
2667    2003-06-16  Bernhard Herzog  <[email protected]>
2668    
2669            Update to the layer interface: Direct access to the table,
2670            shapetable, shapefile and filename attributes is now actively
2671            deprecated by issuing deprecation warnings for all places where
2672            this happens.
2673    
2674            * Thuban/Model/layer.py (Layer.__getattr__): New. Implement access
2675            to the instance variables table, shapetable, shapefile and
2676            filename via __getattr__ so that we can issue a deprecation
2677            warning.
2678            (Layer.SetShapeStore): Don't set the deprecated instance variables
2679            any more
2680            (Layer.SetShapeStore): Don't use deprecated layer instance
2681            variables
2682            (Layer.Destroy): No need to explicitly remove the instance
2683            variables any more
2684            (Layer.GetFieldType, Layer.Shape): Don't use deprecated layer
2685            instance variables
2686    
2687            * Thuban/UI/classgen.py (ClassGenDialog.__init__)
2688            (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve)
2689            (GenQuantilesPanel.GetList, GenQuantilesPanel.OnRetrieve): Don't
2690            use deprecated layer instance variables
2691    
2692            * Thuban/UI/classifier.py (Classifier.__init__): Don't use
2693            deprecated layer instance variables
2694    
2695            * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
2696            (IdentifyGridCtrl.selected_shape): Don't set the deprecated layer
2697            instance variables
2698    
2699            * Thuban/UI/tableview.py (LayerTableGrid.select_shapes): Don't use
2700            deprecated layer instance variables
2701    
2702            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Don't use
2703            deprecated layer instance variables
2704    
2705            * Thuban/Model/save.py (SessionSaver.write_layer): Don't use
2706            deprecated layer instance variables
2707    
2708            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer)
2709            (MapRenderer.polygon_render_param): Don't use deprecated layer instance
2710            variables
2711    
2712            * test/runtests.py (main): Turn Thuban's deprecation warnings into
2713            errors so that they're cought by the tests
2714    
2715            * test/test_load.py (TestSingleLayer.test): Don't use deprecated
2716            layer instance variables
2717    
2718    2003-06-16  Jonathan Coles   <[email protected]>
2719    
2720            Fix a problem under Windows whereby if the user double-clicks on a
2721            layer in the legend that tree item will expand or collapse as well
2722            as open the layer properties dialog. The state of the tree item
2723            should not be affected.
2724    
2725            * Thuban/UI/legend.py (LegendTree.__init__): Add instance variable
2726            preventExpandCollapse and subscribe to expanding and collapsing
2727            events.
2728            (LegendTree.OnItemExpandCollapse): New. Responds to expanding and
2729            collapsing events and will veto the event if it has been triggered
2730            by the user double clicking on a layer.
2731            (LegendTree._OnItemActivated): Set preventExpandCollapse to indicate
2732            that an expanding/collapsing event should be vetoed.
2733    
2734    2003-06-13  Bernhard Herzog  <[email protected]>
2735    
2736            * Thuban/UI/classifier.py (Classifier.OnClose)
2737            (Classifier.map_layers_removed)
2738            (Classifier.layer_shapestore_replaced): Unsubscribe the messages
2739            in OnClose and not in map_layers_removed or
2740            layer_shapestore_replaced to make sure it always happens when the
2741            dialog is closed
2742    
2743    2003-06-13  Jonathan Coles   <[email protected]>
2744    
2745            This puts back a fix for Windows where a panel is needed so that
2746            the background of the table view appears correctly.
2747    
2748            * Thuban/UI/tableview.py (TableFrame.__init__): Add a panel
2749            object that can be used by derived classes to place any
2750            controls (including the grid) onto.
2751            (QueryTableFrame.__init__): Use the panel as the parent window
2752            for all the controls. Reparent the grid so that the panel is
2753            the parent. Call UpdateStatusText() to correctly initialize
2754            the status bar.
2755    
2756    2003-06-13  Jonathan Coles   <[email protected]>
2757    
2758            * Thuban/UI/dialogs.py (ThubanFrame): New: a class that inherits
2759            from wxFrame (as opposed to wxDialog like the other classes)
2760            but otherwise behaves like the other classes. This is needed
2761            for the TableView which isn't really a dialog and needs to
2762            have a status bar and control buttons.
2763    
2764            * Thuban/UI/tableview.py (TableGrid.__init__): Create an
2765            instance variable to keep track of how many rows are selected.
2766            Subscribe once to the the events we are interested in.
2767            (ThubanGrid.OnRangeSelect): Only handle event if event handling
2768            hasn't been turned off.
2769            (ThubanGrid.OnSelectCell): Only handle event if event handling
2770            hasn't been turned off.
2771            (ThubanGrid.ToggleEventListeners): Rather than subscribe None
2772            as an event listener (which changes the event handler stack)
2773            simply set an instance variable to False. This is checked in
2774            the event handlers.
2775            (ThubanGrid.GetNumberSelected): Return the number of currently
2776            selected rows.
2777            (TableFrame): Inherit from ThubanFrame so we can have a
2778            status bar and control buttons.
2779            (QueryTableFrame.__init__): Create a status bar. Fixes RTbug #1942.
2780            Explicitly set which items are selected in the operator choice and
2781            action choice so there is always a valid selection. Fixes RTbug #1941.
2782            Subscribe to grid cell selection events so we can update the
2783            status bar.
2784            (QueryTableFrame.UpdateStatusText): Update the status bar with
2785            how many rows are in the grid, how many columns, and how many
2786            rows are selected.
2787            (QueryTableFrame.OnGridSelectRange, QueryTableFrame.OnGridSelectCell):
2788            Call UpdateStatusText when cells are (de)selected.
2789            (QueryTableFrame.OnQuery): Use the string value in the value
2790            combo if either the selected item index is 0 or if the string
2791            cannot be found in the predefined list (this happens if the
2792            user changes the text). Fixes RTbug #1940.
2793            Only turn off the grid event listeners if there a query comes
2794            back with a none empty list of ids. in the case that the list
2795            is empty this causes a grid.ClearSelection() call to actually
2796            clear the grid selection which causes the selected items in
2797            the map to be deselected. Fixes RTbug #1939.
2798    
2799            * test/test_save.py (XMLWriterTest.Encode): Check return values.
2800            Fixes RTbug #1851.
2801    
2802    2003-06-13  Bernhard Herzog  <[email protected]>
2803    
2804            * Thuban/UI/identifyview.py (IdentifyView.__init__): Call
2805            self.selected_shape with the current selection to make sure the
2806            contents of the dialog are up to date when it's shown for the
2807            first time.
2808            The dialog used to work without this by luck. The recent fix to
2809            the connector module 'broke' a 'feature' the identify view was
2810            relying on, i.e that subscribing to a message in response to
2811            receiving a message of that type would mean that the new
2812            subscriber would also be called for the same message.
2813            
2814    2003-06-12  Jonathan Coles   <[email protected]>
2815    
2816            * extensions/thuban/gdalwarp.cpp: Removed debug printing as
2817            the image is rendered. Fixes RTbug #1937.
2818    
2819  2003-06-12  Jonathan Coles   <[email protected]>  2003-06-12  Jonathan Coles   <[email protected]>
2820    
2821          * Thuban/Lib/fileutil.py: As is done under Windows, create the          * Thuban/Lib/fileutil.py: As is done under Windows, create the
2822          user directory if it doesn't exist on a posix system.          user directory if it doesn't exist on a posix system.
2823            Fixes RTbug #1815.
2824    
2825          * Thuban/Model/resource.py (get_user_proj_files): Moved the          * Thuban/Model/resource.py (get_user_proj_files): Moved the
2826          called to get_application_dir here, so that the directory          called to get_application_dir here, so that the directory

Legend:
Removed from v.1191  
changed lines
  Added in v.1775

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26