/[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 1403 by jonathan, Thu Jul 10 14:56:46 2003 UTC revision 1770 by bh, Thu Oct 2 15:15:35 2003 UTC
# Line 1  Line 1 
1    2003-10-02  Bernhard Herzog  <[email protected]>
2    
3            * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
4            close the dbf file we create so that it's contents have been
5            written properly.
6    
7            * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
8            libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
9            Update to shapelib 1.2.10
10    
11    2003-10-01  Jan-Oliver Wagner <[email protected]>
12    
13            * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
14            it annoys lintian which warns about these files not being
15            executable. The #! isn't necessary here since if you absolutely
16            must execute them you can always say "python <filename>".
17    
18    2003-09-26  Bernhard Herzog  <[email protected]>
19    
20            * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
21            only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
22            is ported to a newer the import will fail, so it should be noticed
23            immediately that this function is gone.
24            Fixes RT#1919
25    
26    2003-09-26  Bernhard Herzog  <[email protected]>
27    
28            Add a DTD for the projection files and make thuban write valid
29            projection files
30    
31            * Resources/XML/projfile.dtd: New. DTD for thuban's projection
32            files
33    
34            * Thuban/Model/resource.py (ProjFileSaver.write): Use
35            'projectionlist' as the name in the document type declaration so
36            that it matches the element type of the root element.
37    
38            * test/test_proj.py (sample_projfile, sample_projfile2): Use
39            'projectionlist' as the name in the document type declaration just
40            as it is done now in the files thuban would write
41            (sample_projfile, sample_projfile_data): Fix spelling of
42            "Mercator"
43            (TestProjFile.doTestWrite): Validate the written and the expected
44            XML data
45            (TestProjFile): Derive from ValidationTest so that we can run xml
46            validation tests
47    
48    2003-09-24  Bernhard Herzog  <[email protected]>
49    
50            * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
51            modify the list returned by map.Layers() in place since it is the
52            actual list of layers used by the map.
53    
54    2003-09-23  Jan-Oliver Wagner <[email protected]>
55    
56            * Doc/manual/thuban-manual.xml: Added subsection to chapter
57            Extensions to describe the extensions coming with the Thuban
58            standard package (gns2shp and importAPR).
59    
60    2003-09-23  Bernhard Herzog  <[email protected]>
61    
62            * libraries/thuban/wxproj.cpp (project_point): if there's an
63            inverse but no forward projection, convert to degrees after
64            applying the inverse projection. Fixes RT#2096
65    
66            * test/test_wxproj.py: New. Test cases for wxproj.so. One test
67            implicitly tests for the fix to RT#2096
68    
69            * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
70            Check that the sequences have the same lengths
71    
72            * Resources/Projections/defaults.proj (Geographic projection): Use
73            a much more precise value for the to_meter attribute.
74    
75    2003-09-22  Bernhard Herzog  <[email protected]>
76    
77            * test/support.py (initthuban): Make sure to unset the LANG env.
78            var. so that tests that compare translated strings work. Solves RT
79            #2094
80    
81    2003-09-22  Jan-Oliver Wagner <[email protected]>
82    
83            Small improvement of APR import.
84    
85            * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
86            Added tests for text-ranges.
87    
88            * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
89            returns a string object if the range is based on text.
90    
91            * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
92            range retrieval.
93    
94    2003-09-22  Jan-Oliver Wagner <[email protected]>
95    
96            Initial version of the importAPR extension which is in
97            experimental state.
98    
99            * /Extensions/importAPR/, /Extensions/importAPR/samples/,
100            /Extensions/importAPR/test/: New directories.
101    
102            * /Extensions/importAPR/samples/README: New: Howto load the samples.
103    
104            * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
105            file which refers to the Thuban Iceland demo data.
106    
107            * /Extensions/importAPR/test/README: New: Howto execute the tests.
108    
109            * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
110    
111            * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
112            as in '.apr'-files.
113    
114            * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
115            ODB Objects as in '.apr', '.avl' and other files.
116    
117            * /Extensions/importAPR/__init__.py: New: Init to make this
118            directory a package.
119    
120            * /Extensions/importAPR/importAPR.py: New: Import a ArcView
121            project file (.apr) and convert it to Thuban.
122    
123    2003-09-22  Jan-Oliver Wagner <[email protected]>
124    
125            * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
126    
127    2003-09-19  Jan-Oliver Wagner <[email protected]>
128    
129            * Doc/manual/thuban-manual.xml: Extended section 'Installation'
130            with description on RPM installation and RPM binary package
131            creation.
132    
133    2003-09-18  Bernhard Herzog  <[email protected]>
134    
135            * setup.py (data_files): Only add the mo files if the Locales
136            directory actually exists, so that setup.py works with a fresh CVS
137            checkout
138    
139    2003-09-12  Jan-Oliver Wagner <[email protected]>
140    
141            * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
142            in viewport, not anymore in view
143    
144    2003-09-04  Jan-Oliver Wagner <[email protected]>
145    
146            Introducing first Extension (gns2shp).
147    
148            * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
149    
150            * Extensions/__init__.py: New. init to make this dir a package.
151    
152            * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
153    
154            * Extensions/gns2shp/test/README: New. some info on this test directory.
155    
156            * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
157    
158            * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
159            of Shapefile from GNS text file format
160    
161    2003-09-03  Jan-Oliver Wagner <[email protected]>
162    
163            Fix/workaround for bug #2019:
164            https://intevation.de/rt/webrt?serial_num=2019
165    
166            * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
167            (IdentifyView.__init__): Added another button that allows to
168            stop the identify mode.
169            (IdentifyView.OnStop): New. Stops the identify mode.
170    
171    2003-09-03  Jan-Oliver Wagner <[email protected]>
172    
173            Introducing a new exception dialog that allows to exit the
174            application immediately.
175            This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
176    
177            * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
178    
179            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
180            Made strings available to translations. Exchanged the simple
181            ScrolledMessageDialog by the new ExceptionDialog.
182    
183    2003-09-01  Bernhard Herzog  <[email protected]>
184    
185            * NEWS: New. Summary of changes and release notes.
186    
187            * MANIFEST.in: Add NEWS
188    
189    2003-09-01  Bernhard Herzog  <[email protected]>
190    
191            * MANIFEST.in: Correct the include statement for the mo-files and
192            include the documentation too.
193    
194            * setup.py (data_files): Add the .mo files
195            (setup call): Up to version 0.9.0
196    
197    2003-09-01  Bernhard Herzog  <[email protected]>
198    
199            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
200            parameter list to just parent and session
201            (ChooseDBTableDialog.__set_properties): Removed. Setting the
202            selection of empty list boxes is not allowed (and produces C++
203            assertion errors) and the rest of the setup is better done in
204            __init__ anyway.
205            (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
206            (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
207            builtins True/False for booleans to avoid warnings from wxPython
208    
209            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
210            ChooseDBTableDialog constructor parameters.
211    
212    2003-09-01  Bernhard Herzog  <[email protected]>
213    
214            * Thuban/Model/postgisdb.py
215            (PostGISTable): Extend doc-string
216            (PostGISTable._fetch_table_information): Set the column index
217            correctly, pretending ignored columns don't exist.
218    
219            * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
220            for postgis tables with data types not yet supported by thuban.
221    
222    2003-08-29  Bernhard Herzog  <[email protected]>
223    
224            * HOWTO-Release: Tweak item about running the tests.
225    
226    2003-08-29  Jan-Oliver Wagner <[email protected]>
227    
228            * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
229    
230    2003-08-29  Bernhard Herzog  <[email protected]>
231    
232            Add some missing parameters to projections. Proj complains about
233            them on windows but for some reason not on Linux.
234    
235            * test/test_save.py (SaveSessionTest.testLayerProjection): Add
236            missing required projection parameters
237    
238            * test/test_proj.py (TestProjFile.test): Add missing required
239            projection parameters
240    
241            * test/test_load_0_8.py (TestLayerProjection.file_contents)
242            (TestLayerProjection.test): Add missing required projection
243            parameters and tests for them
244    
245            * test/test_load.py (TestLayerProjection.file_contents)
246            (TestLayerProjection.test): Add missing required projection
247            parameters and tests for them
248    
249            * test/test_layer.py (TestLayer.test_base_layer): Add missing
250            required projection parameters
251    
252    2003-08-29  Bernhard Herzog  <[email protected]>
253    
254            * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
255            access the pj_errno because directly accessing pj_errno doesn't
256            work on windows if the proj library is in a DLL
257    
258            * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
259    
260    2003-08-28  Bernhard Herzog  <[email protected]>
261    
262            * test/test_proj.py: Import things from Thuban after calling
263            initthuban
264    
265            * test/test_load.py (LoadSessionTest.filenames): New class
266            variable with the filename attributes to normalize
267            (LoadSessionTest.check_format): Pass self.filenames to
268            sax_eventlist to normalize the filename attributes
269    
270            * test/xmlsupport.py: Add cvs keywords
271            (SaxEventLister.__init__): New parameter filenames which indicates
272            attributes that contain filenames
273            (SaxEventLister.startElementNS): Normalize the filename attributes
274            with os.path.normpath
275            (sax_eventlist): New parameter filenames to pass through to
276            SaxEventLister
277    
278            * test/test_derivedshapestore.py: Make this file callable as a
279            program to execute the tests
280            (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
281            the session to self.session so that it gets destroyed properly
282    
283            * test/test_layer.py (TestLayer.tearDown): Call the session's
284            Destroy method
285    
286            * test/test_map.py (TestMapBase.tearDown): Destroy self.session
287            too if it exists
288            (TestMapAddLayer.test_add_layer): Bind the session to self.session
289            so that it gets destroyed properly
290    
291            * test/postgissupport.py (reason_for_not_running_tests): Add a
292            test for the existence of popen2.Popen4.
293    
294            * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
295            reliable way to destroy the sessions created in the test cases
296            (SaveSessionTest.test_dbf_table): Bind the session to self.session
297            so that it gets destroyed properly
298            (SaveSessionTest.testLayerProjection): Bind the session to
299            self.session so that it gets destroyed properly
300    
301            * test/test_session.py (UnreferencedTablesTests.tearDown): Make
302            sure that the session is destroyed properly
303    
304            * test/test_shapefilestore.py: Make this callable as a program to
305            execute the tests
306    
307            * test/test_scalebar.py: Remove unnecessary import of _ from
308            Thuban
309    
310            * test/support.py (print_garbage_information): Call initthuban
311            here because it may be called indirectly from test cases that test
312            test support modules which do not use anything from thuban itself
313            (ThubanTestProgram.runTests): Remove unnecessary debug print
314    
315    2003-08-28  Bernhard Herzog  <[email protected]>
316    
317            * Thuban/version.py (longversion): Update to 0.9
318    
319            * Thuban/UI/mainwindow.py: Remove some unused imports
320    
321            * README: Add section about required additional software. Add date
322            and revision CVS keywords
323    
324            * HOWTO-Release: Add item about the translations. Add date and
325            revision CVs keywords and change formatting to match README a bit
326            better
327    
328            * po/de.po: Update for 0.9
329    
330            * test/README: Tweak the wording a little because many tests are
331            not really unittest.
332    
333    2003-08-27  Bernhard Herzog  <[email protected]>
334    
335            As preparation for the 0.9 release, switch thuban files to a
336            non-dev namespace
337    
338            * Thuban/Model/save.py (SessionSaver.write_session): Write files
339            with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
340            namespace
341    
342            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
343            http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
344    
345            * test/test_save.py (SaveSessionTest.dtd)
346            (SaveSessionTest.testEmptySession)
347            (SaveSessionTest.testSingleLayer)
348            (SaveSessionTest.testLayerProjection)
349            (SaveSessionTest.testRasterLayer)
350            (SaveSessionTest.testClassifiedLayer)
351            (SaveSessionTest.test_dbf_table)
352            (SaveSessionTest.test_joined_table)
353            (SaveSessionTest.test_save_postgis): Update for new namespace
354    
355            * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
356            (TestLayerVisibility.file_contents, TestLabels.file_contents)
357            (TestLayerProjection.file_contents)
358            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
359            (TestPostGISLayer.file_contents)
360            (TestPostGISLayerPassword.file_contents)
361            (TestLoadError.file_contents, TestLoadError.test): Update for new
362            namespace
363    
364    2003-08-27  Bernhard Herzog  <[email protected]>
365    
366            Make the table interface distinguish between row ids (an integer
367            that uniquely identifies a row) and row ordinals (a simple row
368            count from 0 to NumRows() - 1)
369    
370            * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
371            (PostGISTable.RowOrdinalToId): New methods to conver between row
372            ids and row ordinals
373            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
374            parameter row_is_ordinal to indicate whether the row parameter is
375            the row id or the ordinal
376    
377            * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
378            (TransientTableBase.RowOrdinalToId)
379            (AutoTransientTable.RowIdToOrdinal)
380            (AutoTransientTable.RowOrdinalToId): Same new methods as in
381            PostGISTable.
382            (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
383            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
384            Same new parameter as in PostGISTable.
385    
386            * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
387            (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
388            (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
389            (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
390            (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
391            parameter as in PostGISTable.
392    
393            * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
394            (DataTable.RowOrdinalToId): New methods to convert between row ids
395            and row ordinals.
396            (TableGrid.SelectRowById): New method to select a row based on its
397            ID as opposed to its ordinal
398            (DataTable.GetValue, TableGrid.OnRangeSelect)
399            (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
400            (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
401            (LayerTableFrame.__init__): Convert between row ids and row
402            ordinals as appropriate
403    
404            * test/postgissupport.py (PostGISDatabase.__init__): Add
405            doc-string.
406            (PostGISDatabase.initdb): The optional third item in a tuple in
407            tables is now a (key, value) list with additional arguments to
408            pass to upload_shapefile
409            (upload_shapefile): New parameter gid_offset to allow gids that
410            are not the same as the shapeids in the shapefile
411            (PostgreSQLServer.get_default_static_data_db): Use the new
412            gid_offset to make the gids in landmarks 1000 higher than the
413            shapeids in the shapefile
414    
415            * test/test_viewport.py
416            (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
417            new shapeids in the landmarks table
418    
419            * test/test_transientdb.py
420            (TestTransientTable.run_iceland_political_tests)
421            (TestTransientTable.test_transient_joined_table): Add tests for
422            the new table methods and new keywords arguments.
423    
424            * test/test_postgis_db.py
425            (TestPostGISTable.test_read_row_as_dict_row_count_mode)
426            (TestPostGISTable.test_read_value_row_count_mode)
427            (TestPostGISTable.test_row_id_to_ordinal)
428            (TestPostGISTable.test_row_oridnal_to_id): New test for the new
429            table methods and the new arguments
430            (TestPostGISShapestorePoint.test_shapes_in_region)
431            (TestPostGISShapestorePoint.test_shape_raw_data)
432            (TestPostGISShapestorePoint.test_shape_points)
433            (TestPostGISShapestorePoint.test_shape_shapeid)
434            (TestPostGISShapestorePoint.test_all_shapes)
435            (TestPostGISTable.test_simple_query)
436            (TestPostGISTable.test_simple_query)
437            (TestPostGISTable.test_simple_query)
438            (TestPostGISTable.test_read_value)
439            (TestPostGISTable.test_read_row_as_dict): Adapt to the new
440            shapeids in the landmarks table
441    
442            * test/test_memory_table.py
443            (TestMemoryTable.test_read_row_as_dict_row_count_mode)
444            (TestMemoryTable.test_read_value_row_count_mode)
445            (TestMemoryTable.test_row_id_to_ordinal)
446            (TestMemoryTable.test_row_oridnal_to_id): New test for the new
447            table methods and the new arguments
448    
449            * test/test_dbf_table.py
450            (TestDBFTable.test_read_row_as_dict_row_count_mode)
451            (TestDBFTable.test_read_value_row_count_mode)
452            (TestDBFTable.test_row_id_to_ordinal)
453            (TestDBFTable.test_row_oridnal_to_id): New test for the new table
454            methods and the new arguments
455    
456    2003-08-26  Bernhard Herzog  <[email protected]>
457    
458            * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
459            more postgis specific but much faster method to get the bounding
460            box
461    
462    2003-08-26  Bernhard Herzog  <[email protected]>
463    
464            * Thuban/Model/postgisdb.py (PostGISTable.Title)
465            (PostGISShapeStore.AllShapes): Add these missing methods.
466            (PostGISShapeStore.ShapesInRegion): No need to raise
467            StopIteration. We can simply return
468    
469            * test/test_postgis_db.py (TestPostGISTable.test_title)
470            (TestPostGISShapestorePoint.test_all_shapes): New tests for the
471            new methods
472    
473    2003-08-25  Bernhard Herzog  <[email protected]>
474    
475            * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
476    
477            * test/test_postgis_db.py (PolygonTests): New class containing
478            those tests from TestPostGISShapestorePolygon that can also be
479            used to test MUTLIPOLYGON tables
480            (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
481            so derive from that
482            (TestPostGISShapestoreMultiPolygon): New class with tests for
483            MUTLIPOLYGON tables
484    
485            * test/postgissupport.py (PostGISDatabase.initdb): Allow the
486            tables argument to have tuples with three items to override the
487            WKT type used.
488            (PostgreSQLServer.get_default_static_data_db): Use the above to
489            create a polygon table with MUTLIPOLYGONs
490            (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
491            (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
492            coords_to*
493            (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
494            (wkt_converter): New. Map WKT types to converters
495            (upload_shapefile): New parameter force_wkt_type to use a
496            different WKT type than the default
497    
498    2003-08-25  Bernhard Herzog  <[email protected]>
499    
500            * Thuban/UI/application.py
501            (ThubanApplication.run_db_param_dialog): New. Suitable as a
502            db_connection_callback. Main difference is that the dialog run
503            from this method doesn't have a parent so it can be used even when
504            there is no main window
505            (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
506            no db_connection_callback was given. This way the dialog pops up
507            even when the .thuban file was given as a command line parameter.
508    
509    2003-08-25  Bernhard Herzog  <[email protected]>
510    
511            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
512            before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
513            which leads to an effectively frozen X session because the user
514            can only interact with the dialog but the mouse is still grabbed
515            by the canvas.
516            Also, call the tool's Hide method before MouseLeftUp because
517            MouseLeftUp may change the tool's coordinates.
518    
519    2003-08-25  Bernhard Herzog  <[email protected]>
520    
521            * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
522            LoadCancelled exceptions and handle them by returning immediately.
523    
524    2003-08-25  Bernhard Herzog  <[email protected]>
525    
526            GUI part of loading sessions with postgis connections which may
527            require user interaction to get passwords or updated parameters
528    
529            * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
530            bit nucer and be more generic.
531            (DBFrame.OnAdd): Adapt to new DBDialog interface
532    
533            * Thuban/UI/application.py (ThubanApplication.OpenSession): New
534            optional parameter db_connection_callback which is passed to
535            load_session.
536    
537            * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
538            Suitable as a db_connection_callback
539            (MainWindow.OpenSession): Use self.run_db_param_dialog as the
540            db_connection_callback of the application's OpenSession method
541    
542    
543    2003-08-25  Bernhard Herzog  <[email protected]>
544    
545            Basic loading of sessions containing postgis connections:
546    
547            * Thuban/Model/load.py (LoadError): Add doc-string
548            (LoadCancelled): New exception class to indicate a cancelled load
549            (SessionLoader.__init__): Add the db_connection_callback parameter
550            which will be used by the loader to get updated parameters and a
551            password for a database connection
552            (SessionLoader.__init__): Add the new XML elements to the
553            dispatchers dictionary
554            (SessionLoader.check_attrs): Two new conversions, ascii to convert
555            to a byte-string object and idref as a generic id reference
556            (SessionLoader.start_dbconnection)
557            (SessionLoader.start_dbshapesource): New. Handlers for the new XML
558            elements
559            (load_session): Add the db_connection_callback to pass through the
560            SessionLoader
561    
562            * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
563            New classes to test loading of sessions with postgis database
564            connections.
565    
566    2003-08-25  Bernhard Herzog  <[email protected]>
567    
568            * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
569            replace it and the comment with __BuildDate__ by the Source: and
570            Id: cvs keywords as used in the other files.
571    
572    2003-08-25  Bernhard Herzog  <[email protected]>
573    
574            * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
575            LoadError when a required attribute is missing. The code used to
576            be commented out for some reason, but probably should have been
577            active.
578    
579            * test/test_load.py (TestLoadError.test): Test the message in the
580            LoadError too to make sure it really is about the missing
581            attribute
582    
583    2003-08-22  Bernhard Herzog  <[email protected]>
584    
585            * test/test_save.py (SaveSessionTest.test_dbf_table)
586            (SaveSessionTest.test_joined_table): Add XML validation tests.
587    
588    2003-08-22  Bernhard Herzog  <[email protected]>
589    
590            Implement saving a session with a postgis connection
591    
592            * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
593            elements for database connections and shapestores using db
594            connections
595            (session): Add the dbconnections to the content model
596    
597            * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
598            Write the db connections
599            (SessionSaver.write_session): Call write_db_connections to write
600            the connection before the data sources
601            (SessionSaver.write_data_containers): Handle postgis shapestores
602    
603            * test/test_save.py (SaveSessionTest.thubanids)
604            (SaveSessionTest.thubanidrefs): Update for new DTD
605            (SaveSessionTest.test_save_postgis): New. Test saving a session
606            with postgis connections
607    
608            * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
609            (PostGISTable.TableName): New accessor methods for the connection
610            and table name
611    
612            * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
613            (TestPostGISTable.test_dbname): New methods to test the new
614            PostGISConnection methods
615    
616    2003-08-22  Bernhard Herzog  <[email protected]>
617    
618            * Thuban/Model/postgisdb.py (ConnectionError): New exception class
619            for exceptions occurring when establishing a Database connection
620            (PostGISConnection.connect): Catch psycopg.OperationalError during
621            connects and raise ConnectionError.
622    
623            * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
624            tests for database exceptions
625    
626    2003-08-22  Bernhard Herzog  <[email protected]>
627    
628            Prepare the test suite for tests with required authentication
629    
630            * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
631            variables with two predefined users/passwords, one for the admin
632            and one for a non-privileged user.
633            (PostgreSQLServer.createdb): Pass the admin name to initdb and add
634            the non-privileged user to the database and set the admin password
635            (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
636            Better error reporting
637            (PostgreSQLServer.connection_params)
638            (PostgreSQLServer.connection_string): New methods to return
639            information about how to connect to the server
640            (PostgreSQLServer.execute_sql): New. Convenience method to execute
641            SQL statements
642            (PostgreSQLServer.require_authentication): Toggle whether the
643            server requires authentication
644            (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
645            Add or alter users
646            (PostGISDatabase.initdb): Pass the admin name one the
647            subprocesses' command lines. Grant select rights on
648            geometry_columns to everybody.
649            (upload_shapefile): Use the admin name and password when
650            connecting. Grant select rights on the new table to everybody.
651    
652            * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
653            server's new methods to get the connection parameters.
654    
655            * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
656            (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
657            server's new methods to get the connection parameters.
658    
659            * test/test_postgis_db.py
660            (TestPostGISConnection.test_gis_tables_empty)
661            (TestPostGISConnection.test_gis_tables_non_empty)
662            (PostGISStaticTests.setUp): Use the server's new methods to get
663            the connection parameters.
664    
665    2003-08-22  Bernhard Herzog  <[email protected]>
666    
667            * Thuban/UI/about.py (About.__init__): Add the psycopg version.
668    
669            * Thuban/version.py: Add psycopg version
670    
671            * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
672            version of the psycopg module
673    
674    2003-08-22  Bernhard Herzog  <[email protected]>
675    
676            * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
677            (DBFrame.OnEdit): Removed because it's not used and wouldn't work
678            at the moment. The functionality should probably be implemented
679            some time, though.
680            (DBFrame.OnRemove): Display a message if the connection can't be
681            removed because it's still in use.
682    
683    2003-08-22  Jan-Oliver Wagner <[email protected]>
684    
685            * Thuban/UI/about.py (About.__init__): split up the huge about
686            text into elements/lists for easier translation. This fixes bug
687            https://intevation.de/rt/webrt?serial_num=2058
688            Also, made some forgotten string available for the i18n.
689    
690    2003-08-21  Bernhard Herzog  <[email protected]>
691    
692            Make postgis support really optional including insensitive menu
693            items.
694    
695            * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
696            whether the postgis is supported.
697    
698            * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
699            to make postgis support optional
700    
701            * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
702            version of Thuban.Model.postgisdb.has_postgis_support
703            (database_management command): Make it only sensitive if postgis
704            is supported.
705    
706    2003-08-21  Jan-Oliver Wagner <[email protected]>
707    
708            * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
709            (section Adding and Removing Layers): Added text and described
710            multi-selection.
711            (chapter Extensions): New.
712    
713    2003-08-21  Jan-Oliver Wagner <[email protected]>
714    
715            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
716            settings to allow multiple files to load into the map.
717            Also reduced selection to *.shp as a default.
718    
719    2003-08-20  Bernhard Herzog  <[email protected]>
720    
721            Add dialogs and commands to open database connections and add
722            database layers.
723    
724            * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
725            method to open the database connection management dialog
726            (MainWindow.AddDBLayer): New method to add a layer from a database
727            (_has_dbconnections): New helper function to use for sensitivity
728            (database_management command, layer_add_db command): New commands
729            that call the above new methods.
730            (main_menu): Add the new commands to the menu.
731    
732            * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
733            (PostGISConnection.connect): Establish the actual connection in a
734            separate method and call it in __init__. This makes it easier to
735            override the behavior in test cases
736            (PostGISConnection.BriefDescription): New method to return a brief
737            description for use in dialogs.
738    
739            * test/test_postgis_db.py (NonConnection): DB connection that
740            doesn't actually connect
741            (TestBriefDescription): New class with tests for the new
742            BriefDescription method
743    
744    2003-08-19  Jan-Oliver Wagner <[email protected]>
745    
746            Moved anything from extensions to libraries.
747    
748            * libraries: New.
749    
750            * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
751    
752            * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
753            Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
754            been moved here from thuban/extensions/pyprojection/
755            See there in the Attic for the older history.
756    
757            * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
758            dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
759            shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
760            have been moved here from thuban/extensions/pyshapelib/
761            See there in the Attic for the older history.
762    
763            * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
764            files have been moved here from thuban/extensions/shapelib/
765            See there in the Attic for the older history.
766    
767            * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
768            gdalwarp.cpp, wxproj.cpp: These files have been moved here from
769            thuban/extensions/thuban/
770            See there in the Attic for the older history.
771    
772            * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
773    
774            * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
775            gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
776    
777            * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
778            Moved to libraries/shapelib.
779    
780            * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
781            shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
782            ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
783            Moved to libraries/pyshapelib.
784    
785            * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
786            LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
787            Moved to libraries/pyprojection.
788    
789            * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
790    
791            * extensions: Removed.
792    
793    2003-08-19  Bernhard Herzog  <[email protected]>
794    
795            * test/test_viewport.py (ViewPortTest): We don't use the
796            facilities of FileTestMixin so don't derive from it.
797            (TestViewportWithPostGIS): New class with tests for using a
798            viewport on a map with postgis layers.
799    
800    2003-08-19  Bernhard Herzog  <[email protected]>
801    
802            Add the db connection management to the session.
803    
804            * Thuban/Model/session.py (Session.__init__): New instance
805            variable db_connections
806            (Session.AddDBConnection, Session.DBConnections)
807            (Session.HasDBConnections, Session.CanRemoveDBConnection)
808            (Session.RemoveDBConnection): New methods to manage and query the
809            db connections managed by the session
810            (Session.OpenDBShapeStore): New method to open a shapestore from a
811            db connection
812    
813            * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
814            messages for the db connection handling in the session
815    
816            * test/test_postgis_session.py: New. test cases for the session's
817            db connection handling with postgis connections
818    
819    2003-08-19  Bernhard Herzog  <[email protected]>
820    
821            Add very basic postgis database support and the corresponding test
822            cases. The test cases require a PostgreSQL + postgis installation
823            but no existing database. The database will be created
824            automatically by the test cases
825    
826            * test/README: Add note about skipped tests and the requirements
827            of the postgis tests.
828    
829            * Thuban/Model/postgisdb.py: New. Basic postgis database support.
830    
831            * test/test_postgis_db.py: New. Test cases for the postgis
832            support.
833    
834            * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
835            format
836    
837            * test/test_wellknowntext.py: New. Test cases for the
838            wellknowntext parser
839    
840            * test/postgissupport.py: New. Support module for tests involving
841            a postgis database.
842    
843            * test/support.py (execute_as_testsuite): Shut down the postmaster
844            if it's still running after the tests
845    
846            * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
847            well known text format
848    
849    2003-08-19  Jan-Oliver Wagner <[email protected]>
850    
851            * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
852            message dialog.
853    
854    2003-08-18  Bernhard Herzog  <[email protected]>
855    
856            * test/support.py (ThubanTestResult.printErrors): Indent the
857            reason for the skips in the output to make it a bit more readable.
858            (execute_as_testsuite): New helper function to run a test suite
859            and print some more information.
860            (run_tests): Use execute_as_testsuite to run the tests
861    
862            * test/runtests.py (main): Use execute_as_testsuite to run the
863            tests
864    
865    2003-08-18  Bernhard Herzog  <[email protected]>
866    
867            Fix some bugs in Thuban and the test suite that were uncovered by
868            changes introduced in Python 2.3:
869    
870            * Thuban/Model/table.py (DBFTable.__init__): Make sure the
871            filename is an absolute name
872    
873            * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
874            filename is an absolute name
875    
876            * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
877            unique filename to save to and use the correct relative filename
878            in the expected output.
879            (SaveSessionTest.test_dbf_table): Use the correct relative
880            filename in the expected output.
881    
882            * test/test_layer.py (TestLayer.test_raster_layer): Update the
883            test to check whether the filename is absolute.
884    
885    2003-08-18  Jan-Oliver Wagner <[email protected]>
886    
887            * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
888    
889    2003-08-15  Bernhard Herzog  <[email protected]>
890    
891            Change the way shapes are returned by a shape store. The
892            ShapesInRegion method returns an iterator over actual shape
893            objects instead of a list of shape ids.
894    
895            * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
896            id.
897            (ShapefileStore.ShapesInRegion): Return an iterator over the
898            shapes which yields shape objects instead of returning a list of
899            shape ids
900            (ShapefileStore.AllShapes): New. Return an iterator over all
901            shapes in the shape store
902            (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
903    
904            * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
905            doc-string.
906    
907            * Thuban/UI/baserenderer.py
908            (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
909            layer_shapes and make it return an iterator containg shapes
910            instead of a list of ids.
911            (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
912            layer_shapes() change
913    
914            * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
915            (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
916    
917            * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
918            changes in the ShapesInRegion return value.
919            (ViewPort._get_hit_tester): Remove commented out code
920    
921            * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
922            new return value.
923            (SimpleShapeStore.AllShapes): New. Implement this method too.
924    
925            * test/test_layer.py (TestLayer.test_arc_layer)
926            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
927            (TestLayer.test_point_layer_with_projection)
928            (TestLayer.test_derived_store): Adapt to changes in the
929            ShapesInRegion return value.
930    
931            * test/test_shapefilestore.py
932            (TestShapefileStoreArc.test_shapes_in_region)
933            (TestShapefileStorePolygon.test_shapes_in_region)
934            (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
935            in the ShapesInRegion return value.
936            (TestShapefileStorePoint.test_all_shapes)
937            (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
938            methods
939    
940            * test/test_derivedshapestore.py
941            (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
942            the ShapesInRegion return value.
943            (TestDerivedShapeStore.test_all_shapes)
944            (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
945            methods
946    
947    2003-08-15  Bernhard Herzog  <[email protected]>
948    
949            Make the renderers deal correctly with raw vs. python level
950            representation of shape geometries
951    
952            * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
953            Return a flag useraw in addition to the callable and the parameter
954            to indicate whether the callable can deal with the raw shape data
955            or uses the higher level python lists of coordinates. The callable
956            now should accept either the raw data or the return value of the
957            shape's Points() method.
958            (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
959            change
960            (BaseRenderer.projected_points): Instead of the shape id use the
961            points list as parameter.
962            (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
963            (BaseRenderer.draw_point_shape): Adapt to projected_points()
964            change and accept the points list as parameter instead of the
965            shape id.
966    
967            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
968            the useraw flag as required by the BaseRenderer
969            (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
970            changes.
971    
972            * test/test_baserenderer.py
973            (TestBaseRenderer.test_point_with_classification): New test for
974            rendering a map with classifications.
975    
976    2003-08-15  Bernhard Herzog  <[email protected]>
977    
978            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
979            (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
980            (ViewPort._get_hit_tester, ViewPort.projected_points)
981            (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
982            (ViewPort._find_label_at): Split the find_shape_at method into
983            several new methods and use the functions in the hit-test module.
984    
985            * Thuban/UI/hittest.py: New module with Python-level hit-testing
986            functions
987    
988            * test/test_hittest.py: New. Test for the new hittest module
989    
990    2003-08-15  Bernhard Herzog  <[email protected]>
991    
992            * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
993            projection to all corners of the bounding box to get a better
994            approximation of the projected bounding box
995    
996            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
997            New. Test coordinate handling of a layer with a projection.
998            Catches the bug fixed in Layer.ShapesInRegion
999    
1000    2003-08-15  Bernhard Herzog  <[email protected]>
1001    
1002            Move some of the mock objects in test_baserenderer into their own
1003            module so they can easily be used from other tests
1004    
1005            * test/mockgeo.py: New test helper module with some mock objects
1006            for geometry related things like shapes, shapestores and
1007            projections.
1008    
1009            * test/test_mockgeo.py: New. Tests for the new helper module
1010    
1011            * test/test_baserenderer.py: Some of the mock-objects are in
1012            mockgeo now.
1013    
1014    2003-08-12  Jan-Oliver Wagner <[email protected]>
1015    
1016            * Thuban/UI/about.py (About.__init__): Added Bj�rn Broscheit.
1017    
1018    2003-08-12  Bernhard Herzog  <[email protected]>
1019    
1020            * po/de.po: New. German translations by Bjoern Broscheit
1021    
1022    2003-08-12  Bernhard Herzog  <[email protected]>
1023    
1024            * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
1025            strings have to be one string literal.
1026    
1027    2003-08-11  Bernhard Herzog  <[email protected]>
1028    
1029            * test/support.py (FloatComparisonMixin.assertPointListEquals):
1030            New. This method was used in various derived classes, but it's
1031            better to have it here.
1032    
1033            * test/test_shapefilestore.py
1034            (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
1035            FloatComparisonMixin
1036    
1037            * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
1038            It's now in FloatComparisonMixin
1039    
1040            * test/test_derivedshapestore.py
1041            (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
1042            in FloatComparisonMixin
1043    
1044    2003-08-11  Bernhard Herzog  <[email protected]>
1045    
1046            * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
1047            error message
1048    
1049    2003-08-08  Jan-Oliver Wagner <[email protected]>
1050    
1051            * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
1052            with version number.
1053            Changed title to reflect version number of Thuban.
1054    
1055    2003-08-08  Jan-Oliver Wagner <[email protected]>
1056    
1057            * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
1058            the list corresponds to the "About" web page.
1059    
1060    2003-08-08  Bernhard Herzog  <[email protected]>
1061    
1062            * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
1063            Make sure translated strings are recognized as one string literal.
1064    
1065            * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
1066            Make sure translated strings are recognized as one string literal.
1067    
1068            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
1069            translated strings are recognized as one string literal.
1070    
1071            * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
1072            sure translated strings are recognized as one string literal.
1073    
1074    2003-08-07  Bernhard Herzog  <[email protected]>
1075    
1076            * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
1077            Simply delegates to the original shapestore.
1078    
1079            * test/test_derivedshapestore.py
1080            (TestDerivedShapeStore.test_raw_format): New. Test case for
1081            DerivedShapeStore.RawShapeFormat
1082    
1083    2003-08-07  Bernhard Herzog  <[email protected]>
1084    
1085            Add raw data interface to shape objects.
1086    
1087            * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
1088            class to ShapefileShape which now holds shapefile specific
1089            information.
1090            (ShapefileShape.compute_bbox): Simplified to not cache any
1091            information. The way this method is used that shouldn't matter
1092            performance wise.
1093            (ShapefileShape.RawData): New. Return the shapeid which is the raw
1094            data format for shapes from shapefiles.
1095            (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
1096            in the shape objects returned by a shapestore. For a
1097            ShapefileStore this is always RAW_SHAPEFILE.
1098            (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
1099            method.
1100    
1101            * test/test_shapefilestore.py
1102            (TestShapefileStore.test_raw_format): New test to test the raw
1103            format feature of shapes.
1104    
1105            * Thuban/Model/layer.py: Remove the unused import of Shape from
1106            data. It was only there for interface compatibility but it's not
1107            used inside of Thuban and the generic Shape class has gone away.
1108    
1109            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
1110            the raw data format and only use an optimized version of its a
1111            shapefile.
1112    
1113    2003-08-07  Bernhard Herzog  <[email protected]>
1114    
1115            * test/test_baserenderer.py (SimpleShape): Shape class for the
1116            tests.
1117            (SimpleShapeStore.Shape): Use SimpleShape instead of
1118            Thuban.Model.data.Shape to make the tests independed of the coming
1119            changes.
1120    
1121    2003-08-07  Bernhard Herzog  <[email protected]>
1122    
1123            * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
1124            (ThubanTestProgram): New classes that extend the respective
1125            classes from unittest. These new version support skipping tests
1126            under certain expected conditions. In the Thuban test suite we
1127            uses this for tests that require the optional gdal support.
1128            (run_tests): Use ThubanTestProgram instead of the unittest.main()
1129    
1130            * test/runtests.py (main): Use the new ThubanTestRunner instead of
1131            the normal one from unittest
1132    
1133            * test/test_layer.py (TestLayer.test_raster_layer): If this test
1134            is not run because gdal support isn't available report this to the
1135            runner.
1136    
1137            * test/test_baserenderer.py
1138            (TestBaseRenderer.test_raster_no_projection): Do not run this test
1139            if gdal support isn't available and report this to the runner.
1140    
1141    2003-08-06  Bernhard Herzog  <[email protected]>
1142    
1143            Rearrange the renderers a bit, partly in preparation for changes
1144            required for the postgis merge, partly to make it more testable.
1145            Also make the representation of coordinates in Shapes more
1146            consistent.
1147    
1148            * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
1149            this class is now in BaseRenderer. This class is now practically
1150            only a specialization of BaseRenderer for rendering to an actual
1151            wx DC.
1152            (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
1153            to get the shapetype specific rendering functions.
1154    
1155            * Thuban/UI/baserenderer.py: New file with the basic rendering
1156            logic. The code in this file is completely independend of wx.
1157            (BaseRenderer): Class with the basic rendering logic
1158    
1159            * test/test_baserenderer.py: New. Test cases for BaseRenderer
1160    
1161            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
1162            error_on_redraw to guard agains endless loops and stack overflows
1163            when there's a bug in the rendering code that raises exceptions.
1164            (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
1165            rendering into a separate method _do_redraw so that error handling
1166            is a bit easier. When an exception occurs, set error_on_redraw to
1167            true. When it's true on entry to OnIdle do nothing and return
1168            immediately.
1169    
1170            * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
1171            Shape object will always have the coordinates as a list of list of
1172            coordinate pairs (tuples).
1173            (Shape.compute_bbox): Adapt to new representation.
1174    
1175            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
1176            (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
1177            Shape objects.
1178    
1179            * test/test_shapefilestore.py
1180            (ShapefileStoreTests.assertFloatTuplesEqual)
1181            (ShapefileStoreTests.assertPointListEquals): Rename to
1182            assertPointListEquals and change purpose to checking equality of
1183            the lists returned by Shape.Points().
1184            (TestShapefileStoreArc.test_shape)
1185            (TestShapefileStorePolygon.test_shape)
1186            (TestShapefileStorePoint.test_shape): Use the new
1187            assertPointListEquals instead of assertFloatTuplesEqual
1188    
1189            * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
1190            (TestLayer.assertPointListEquals): Rename to assertPointListEquals
1191            and change purpose to checking equality of the lists returned by
1192            Shape.Points().
1193            (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
1194            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
1195            (TestLayer.test_derived_store): Use the new assertPointListEquals
1196            instead of assertFloatTuplesEqual
1197    
1198            * test/test_derivedshapestore.py
1199            (TestDerivedShapeStore.assertFloatTuplesEqual)
1200            (TestDerivedShapeStore.assertPointListEquals): Rename to
1201            assertPointListEquals and change purpose to checking equality of
1202            the lists returned by Shape.Points().
1203            (TestDerivedShapeStore.test_shape): Use the new
1204            assertPointListEquals instead of assertFloatTuplesEqual
1205    
1206    2003-08-06  Jan-Oliver Wagner <[email protected]>
1207    
1208            * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
1209            a bounding box. A dialog is raised in case, no bounding box
1210            is found. This fixes bug #2043:
1211            https://intevation.de/rt/webrt?serial_num=2043
1212    
1213    2003-08-05  Bernhard Herzog  <[email protected]>
1214    
1215            * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
1216            object look like a Color instantiation. Formerly it looked like a
1217            tuple.
1218    
1219            * test/test_color.py (TestColor.test_repr)
1220            (TestColor.test_equality, TestColor.test_inequality): New. test
1221            some more apects of the Color class
1222            (TestTransparent.test_repr, TestTransparent.test_hex)
1223            (TestTransparent.test_equality): New. Test cases for the
1224            Transparent object.
1225    
1226    2003-08-04  Jan-Oliver Wagner <[email protected]>
1227    
1228            * Doc/manual/thuban-manual.xml: a number of small improvements.
1229            The resulting file is the version submitted for GREAT-ER II.
1230    
1231    2003-08-01  Bernhard Herzog  <[email protected]>
1232    
1233            * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
1234            Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
1235            Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
1236    
1237            * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
1238            (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
1239            (ThubanEndBusyCursor): Add doc-strings
1240    
1241    2003-08-01  Bernhard Herzog  <[email protected]>
1242    
1243            First step towards PostGIS integration. More abstraction by movin
1244            more code from the layer to the shapestore. More methods of the
1245            layer are now simply delegated to the equivalent method of the
1246            shapestore. The SHAPETYPE_* constants are now in data not in
1247            layer.
1248    
1249            * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
1250            (SHAPETYPE_POINT, Shape): Move these constants and classes from
1251            layer.py to data.py
1252            (ShapefileStore.__init__): More Initialization for the new methods
1253            and functionality.
1254            (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
1255            (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
1256            (ShapefileStore.Shape): New methods that were formerly implemented
1257            in the layer.
1258            (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
1259            (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
1260            (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
1261            equivalents of the new shape methods. These versions are simply
1262            delegated to the original shapstore.
1263    
1264            * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
1265            (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
1266            (Layer.SetShapeStore): Removed the initializatin of instance
1267            variables that were needed for the stuff that's now in
1268            ShapefileStore
1269            (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
1270            (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
1271            shapestore.
1272    
1273            * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
1274            Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
1275            instead of layer.
1276    
1277            * test/test_shapefilestore.py: New. Tests for ShapefileStore.
1278    
1279            * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
1280    
1281            * test/test_layer.py: Import the SHAPETYPE_* constants from data
1282            instead of layer.
1283            (TestLayer.test_derived_store): Remove the test for the exception
1284            when instantiating the DerivedShapeStore with an incompatible
1285            table which is now in test_derivedshapestore.py. Add some more
1286            tests of the layer methods to determine whether they work for a
1287            DerivedShapeStore as well.
1288    
1289    2003-07-31  Jonathan Coles   <[email protected]>
1290    
1291            * Doc/manual/thuban-manual.xml: Fix the list of required packages
1292            by just listing the name and where they can be found.
1293    
1294    2003-07-31  Frank Koormann   <[email protected]>
1295    
1296            * Doc/manual/thuban-manual.xml:
1297            Changed the screenshot elements to figure.
1298            Changed some variablelist elements to itemizedlist.
1299            Added section on GDAL formats.
1300    
1301    2003-07-31  Jonathan Coles   <[email protected]>
1302    
1303            * Doc/manual/thuban-manual.xml: Added a few sentences about
1304            the Fix Border Color option when generating classes.
1305    
1306    2003-07-30  Jonathan Coles   <[email protected]>
1307    
1308            * Thuban/Model/classgen.py: Add docstrings. Rename specific
1309            Ramp instances to use lower_case_style.
1310    
1311            * Thuban/UI/classgen.py: Use renamed Ramp instances.
1312            
1313            * Thuban/UI/classifier.py: Add docstrings.
1314    
1315            * Thuban/UI/dock.py: Add docstrings.
1316    
1317            * test/test_classgen.py: Use renamed Ramp instances.
1318    
1319    2003-07-30  Bernhard Herzog  <[email protected]>
1320    
1321            * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
1322            was never used in Thuban.
1323    
1324    2003-07-30  Bernhard Herzog  <[email protected]>
1325    
1326            * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
1327            method directly instead of going through the transient_table
1328            method. This faster because transient_table may force the copy of
1329            a DBF file into the transient database and setting a table's title
1330            doesnm't affect the title of the associated transient table, so
1331            this fixes RT #2042
1332    
1333            * Thuban/UI/main.py (__version__): Don't import the already
1334            removed show_exception_dialog.
1335    
1336    2003-07-29  Jonathan Coles   <[email protected]>
1337    
1338            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
1339            Put back this method and remove the equivalent function since we
1340            are setting the exception hook from within this class (OnInit).
1341    
1342    2003-07-29  Jonathan Coles   <[email protected]>
1343    
1344            * Doc/manual/images/5_2_custom_ramp.png,
1345            Doc/manual/images/5_2_quantiles.png,
1346            Doc/manual/images/5_2_uniform_dist.png,
1347            Doc/manual/images/5_2_unique_values.png,
1348            Doc/manual/images/8_int_error.png: New screen shots.
1349    
1350            * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
1351            some points, and added more screen shots.
1352    
1353    2003-07-29  Bernhard Herzog  <[email protected]>
1354    
1355            * Thuban/Model/data.py: Remove the now unused import of warnings
1356    
1357    2003-07-29  Bernhard Herzog  <[email protected]>
1358    
1359            * Thuban/Model/data.py (SimpleStore): Removed. This class has been
1360            deprecated since before the 0.8 release and isn't used in Thuban
1361            itself anymore.
1362    
1363            * Thuban/Model/transientdb.py: Remove some unnecessary imports
1364    
1365    2003-07-29  Jonathan Coles   <[email protected]>
1366    
1367            * Thuban/UI/application.py (ThubanApplication.OnInit): set the
1368            python exception hook here so that we are sure to catch any
1369            Thuban exception that happen during initialization.
1370    
1371            * Thuban/UI/main.py (main): Don't set the exception hook here,
1372            it will get set in ThubanApplication.OnInit.
1373    
1374    2003-07-29  Jonathan Coles   <[email protected]>
1375                                                                                
1376            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
1377            Removed and called it show_exception_dialog() so that the exception
1378            handler can be set before the class is created.
1379                                                                                
1380            * Thuban/UI/main.py (main): Install the exception handler before
1381            a ThubanApplication is created.
1382                                                                                    
1383    2003-07-29  Bernhard Herzog  <[email protected]>
1384    
1385            * po/it.po: New. Italian translation by Maurizio Napolitano
1386    
1387            * po/ru.po: New. Russian translation by Alex Shevlakov
1388    
1389    2003-07-29  Frank Koormann   <[email protected]>
1390    
1391            * Doc/manual/thuban-manual.xml: Extended section on supported
1392            projections.
1393            
1394    2003-07-29  Frank Koormann   <[email protected]>
1395    
1396            * Doc/manual/thuban-manual.xml: gaspell-checked.
1397    
1398    2003-07-29  Jonathan Coles   <[email protected]>
1399    
1400            * Doc/manual/images/3_5_legend.png: Added border to improve look
1401            on white background.
1402    
1403    2003-07-29  Jonathan Coles   <[email protected]>
1404    
1405            * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
1406            descriptions for the legend toolbar.
1407    
1408            * Doc/manual/images/4_2_raster_layer_properties.png: Removed
1409            cursor from dialog box.
1410    
1411    2003-07-28  Jonathan Coles   <[email protected]>
1412    
1413            * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
1414    
1415            * Doc/manual/images/2_4_session_tree.png,
1416            Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
1417            Doc/manual/images/4_2_layer_properties.png,
1418            Doc/manual/images/4_2_raster_layer_properties.png,
1419            Doc/manual/images/5_3_genclass.png,
1420            Doc/manual/images/5_classification.png,
1421            Doc/manual/images/6_projection.png,
1422            Doc/manual/images/7_1_table_view.png,
1423            Doc/manual/images/7_2_5_join.png: New screenshots.
1424    
1425    2003-07-24  Jonathan Coles   <[email protected]>
1426    
1427            * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
1428    
1429    2003-07-24  Jonathan Coles   <[email protected]>
1430    
1431            * Doc/manual/thuban-manual.xml: Added EPS images and wrote
1432            chapter on Layer Management.
1433    
1434            * Doc/manual/Makefile: New. Makefile to generate all formats for the
1435            manual and images.
1436    
1437    2003-07-24  Bernhard Herzog  <[email protected]>
1438    
1439            * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
1440            it annoys lintian which warns about these files not being
1441            executable. The #! isn't necessary here since if you absolutely
1442            must execute them you can always say "python <filename>".
1443    
1444            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
1445            superfluous code to set brush and pen for point shapes
1446    
1447            * Thuban/UI/viewport.py: Remove commented out code that wouldn't
1448            belong in viewport anyway
1449    
1450    2003-07-24  Frank Koormann   <[email protected]>
1451    
1452            * Doc/manual/thuban-manual.xml: Added section on table management.
1453    
1454    2003-07-24  Bernhard Herzog  <[email protected]>
1455    
1456            * test/runtests.py (main): Recognize the long "verbose" option
1457            correctly.
1458    
1459    2003-07-22  Jonathan Coles   <[email protected]>
1460    
1461            * Doc/manual/thuban-manual.xml: Continue to write first revision
1462            of the manual.
1463    
1464            * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
1465            with Begin/EndDrawing() calls to ensure we aren't doing to
1466            many updates to the dc during rendering.
1467            (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
1468            a pen and brush argument so they need to be passed to the function.
1469    
1470            * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
1471            Calculates the minimum and maximum scale values. Factored out
1472            of set_view_transform so that it could be used to zoom all the
1473            way into a single point.
1474            (ViewPort.set_view_transform): Call calc_min_max_scales().
1475            (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
1476            if only a single point is selected.
1477    
1478            * Doc/manual/images/1_2_legend_close.png,
1479            Doc/manual/images/1_2_legend_dock.png,
1480            Doc/manual/images/1_2_mainwindow.png,
1481            Doc/manual/images/1_2_mainwindow.ps,
1482            Doc/manual/images/1_2_mainwindow.sk,
1483            Doc/manual/images/3_2_fullextent.png,
1484            Doc/manual/images/3_2_fulllayerextent.png,
1485            Doc/manual/images/3_2_fullshapeextent.png,
1486            Doc/manual/images/3_2_pan.png,
1487            Doc/manual/images/3_2_zoomin.png,
1488            Doc/manual/images/3_2_zoomout.png,
1489            Doc/manual/images/3_3_identify.png,
1490            Doc/manual/images/3_3_label.png,
1491            Doc/manual/images/3_5_invisible.png,
1492            Doc/manual/images/3_5_movedown.png,
1493            Doc/manual/images/3_5_moveup.png,
1494            Doc/manual/images/3_5_props.png,
1495            Doc/manual/images/3_5_tobottom.png,
1496            Doc/manual/images/3_5_totop.png,
1497            Doc/manual/images/3_5_visible.png: New. Images for the documentation.
1498    
1499    2003-07-18  Bernhard Herzog  <[email protected]>
1500    
1501            * Thuban/UI/messages.py (MAP_REPLACED): New message.
1502    
1503            * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
1504            after the new map has been assigned
1505    
1506            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
1507            Delegate MAP_REPLACED to the canvas too
1508            (MainWindow.prepare_new_session): Removed. Thanks to the new
1509            MAP_REPLACED message it's no longer needed
1510            (MainWindow.OpenSession, MainWindow.NewSession):
1511            prepare_new_session has been removed.
1512    
1513            * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
1514            MAP_REPLACED so that we can close the dialog if a new map is set.
1515            (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
1516            (Classifier.map_replaced): Handle MAP_REPLACED by closing the
1517            dialog
1518    
1519            * test/test_viewport.py (SimpleViewPortTest)
1520            (SimpleViewPortTest.test_default_size): Add doc-strings
1521            (ViewPortTest.setUp): Bind map to self.map so we can use it in
1522            tests. Subscribe to MAP_REPLACED messages too.
1523            (ViewPortTest.tearDown): No need to explicitly unsubscribe
1524            (ViewPortTest.test_set_map): New test for the SetMap method.
1525    
1526    2003-07-18  Bernhard Herzog  <[email protected]>
1527    
1528            * test/test_viewport.py (SimpleViewPortTest.test_default_size):
1529            Move this test from ViewPortTest.setUp to this new separate test
1530            case. setUp is not the place for the actual tests.
1531            (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
1532            more of the test from setUp to the new test test_inital_settings.
1533            (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
1534            (ViewPortTest.test_proj_conv): Split test_proj_conv into
1535            test_win_to_proj and test_proj_to_win and make the tests easier to
1536            understand
1537            (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
1538            (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
1539            (ViewPortTest.test_unprojected_rect_around_point)
1540            (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
1541            Reformat to increase readability.
1542    
1543    2003-07-18  Bernhard Herzog  <[email protected]>
1544    
1545            * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
1546    
1547    2003-07-18  Bernhard Herzog  <[email protected]>
1548    
1549            * test/runtests.py: The test suite can now be run without an X
1550            connection. To make sure this remains true, remove the DISPLAY
1551            environment variable so that an error occurs if the wxGTK is
1552            imported accidentally
1553    
1554    2003-07-18  Bernhard Herzog  <[email protected]>
1555    
1556            * Thuban/UI/viewport.py: Remove unused imports
1557    
1558            * Thuban/UI/view.py: Remove unused imports
1559    
1560    2003-07-18  Bernhard Herzog  <[email protected]>
1561    
1562            * test/test_export.py Remove unused imports. The OutputTransform
1563            function is now in viewport.py and is called output_transform
1564            (TestScalebar.test_output_transform)
1565            (TestScalebar.test_OutputTransform): Renamed to
1566            test_output_transform and updated to use output_transform instead
1567            of OutputTransform
1568    
1569            * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
1570            renamed.
1571            (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
1572            renamed to output_transform
1573    
1574            * Thuban/UI/viewport.py (OutputTransform, output_transform):
1575            Rename to output_transform
1576    
1577    2003-07-18  Bernhard Herzog  <[email protected]>
1578    
1579            * Thuban/Model/layer.py (Layer.__init__): Rename
1580            classificationField to classificatin_column and init it here so
1581            that it can be used in SetClassificationColumn
1582            (Layer.GetClassificationColumn, Layer.GetClassificationField):
1583            Rename to GetClassificationColumn.
1584            (Layer.SetClassificationColumn, Layer.SetClassificationField):
1585            Rename to SetClassificationColumn and issue a LAYER_CHANGED
1586            message if the column changes.
1587            (Layer._classification_changed, Layer.ClassChanged): Rename to
1588            _classification_changed. Update the callers.
1589            (Layer.SetShapeStore): Further field->column renames.
1590    
1591            * Thuban/Model/load.py (SessionLoader.start_classification)
1592            (SessionLoader.start_clpoint): Updates because of
1593            field->column method name changes in the Layer class
1594    
1595            * Thuban/Model/save.py (SessionSaver.write_classification): Updates
1596            because of field->column method name changes in the Layer class
1597    
1598            * Thuban/UI/classifier.py (Classifier.__init__)
1599            (Classifier._OnTry, Classifier._OnRevert): Updates because of
1600            field->column method name changes in the Layer class
1601    
1602            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
1603            because of field->column method name changes in the Layer class
1604    
1605            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
1606            of field->column method name changes in the Layer class
1607    
1608            * test/test_save.py (SaveSessionTest.testClassifiedLayer)
1609            (SaveSessionTest.testClassifiedLayer): Update because of
1610            field->column method name changes in the Layer class
1611    
1612            * test/test_layer.py (SetShapeStoreTests.setUp)
1613            (SetShapeStoreTests.test_sanity): Update because of field->column
1614            method name changes in the Layer class
1615            (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
1616            (TestLayerModification.test_sanity)
1617            (TestLayerModification.test_initial_settings): remove unsued code
1618            and rename to test_sanity.
1619            (TestLayerModification.test_set_classification): New test for
1620            SetClassification and SetClassificationField.
1621    
1622    2003-07-18  Bernhard Herzog  <[email protected]>
1623    
1624            * test/test_classgen.py (TestFixedRamp.test): Extend test to check
1625            the non-fixed values as well. The old test would have accepted a
1626            fixed ramp that only returnes the fixed properties
1627    
1628    2003-07-17  Jonathan Coles   <[email protected]>
1629    
1630            * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
1631            shots for the manual. The XCF file is the source image and
1632            has additional layers to support changes.
1633    
1634            * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
1635    
1636            * Thuban/UI/classifier.py (Classifier.__BuildClassification):
1637            Return both the new class and the field name.
1638    
1639            * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
1640            fit the map to the window as this changes any zoom level that
1641            the user may have set.
1642    
1643    2003-07-16  Jonathan Coles   <[email protected]>
1644    
1645            * Thuban/Model/classgen.py (generate_singletons,
1646            generate_uniform_distribution, generate_quantiles): Remove
1647            fixes parameter, but maintain the same functionality by having
1648            the calling function pass a FixedRamp object for the ramp.
1649            (FixedRamp): New. Adapts a ramp to have fixed property values.
1650    
1651            * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
1652            (Classification): Inherit from Publisher.
1653            (Classification.__init__): Remove the layer parameter.
1654            Classifications no longer need to have a parent layer.
1655            (Classification.GetField, Classification.GetFieldType,
1656            Classification.SetFieldInfo): Removed. The field name is stored
1657            in the layer, and the type can be retreived by calling
1658            Layer.GetFieldType().
1659            (Classification._set_layer, Classification.GetLayer): Removed.
1660            Classifications no longer have a parent layer.
1661    
1662            * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
1663            classification.
1664            (Layer.SetShapeStore): Reset the classification first while
1665            we still have the old shape store to work with.
1666            (Layer.GetClassificationField, Layer.SetClassificationField):
1667            New. Method for getting/setting the field to classify on.
1668            (Layer.SetClassification): Simplified now that the layer
1669            simply has to hold a reference to the classification and not
1670            tell the classification who owns it.
1671            Fixes RTbug #2023.
1672    
1673            * Thuban/Model/load.py (SessionLoader.start_classification):
1674            Set the field name on the layer, not the classification.
1675    
1676            * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
1677            classification is modified.
1678    
1679            * Thuban/Model/save.py (SessionSaver.write_classification):
1680            Get the field name and type from the layer.
1681    
1682            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
1683            parameter records to rows and add docstring. Fixes RTbug #1997.
1684    
1685            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
1686            ramp when we need to fix certain values of a ramp rather than
1687            using the old fixes parameter. Fixes RTbug #2024.
1688    
1689            * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
1690            parameter.
1691            (ClassTable.Reset): Add fieldType parameter and use it, rather
1692            than asking the classification.
1693            (Classifier.__init__): Remember the original class's field
1694            and ask the layer for the field type, rather than the classification.
1695            (Classifier.__SetGridTable): Retrieve the field and field type
1696            for the table because they are not in the classification.
1697            (Classifier._OnTry, Classifier._OnRevert): Set the classification
1698            field on the layer in addition to the classification itself.
1699    
1700            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
1701            classification field from layer.
1702    
1703            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
1704            classification field from layer. Split up tests and remove
1705            *-imports. Fixes RTbug #1992.
1706    
1707            * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
1708    
1709            * test/test_classification.py
1710            (TestClassification.test_classification): Remove tests for methods
1711            that no longer exist.
1712    
1713            * test/test_layer.py (SetShapeStoreTests.setUp): Classification
1714            __init__ no longer has a field parameter, use SetClassificationField.
1715            (SetShapeStoreTests.test_sanity): Use layer object to get class
1716            field info.
1717    
1718            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
1719            SetClassificationField on layer to set class field info.
1720    
1721            * test/test_viewport.py: Renamed from test/test_view.py.
1722    
1723    2003-07-16  Jan-Oliver Wagner <[email protected]>
1724    
1725            * Doc/manual/thuban-manual.xml: Added authors and an initial
1726            coarse structure.
1727    
1728    2003-07-15  Bernhard Herzog  <[email protected]>
1729    
1730            * test/support.py (FloatComparisonMixin): This is a mix-in class
1731            and therefore should not be derived from any other class.
1732    
1733            * test/test_range.py (RangeTest): FloatComparisonMixin is a
1734            mix-in, so derive from TestCase as well.
1735    
1736    2003-07-15  Bernhard Herzog  <[email protected]>
1737    
1738            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
1739            draw_func handling a bit to remove one layer of indirection. This
1740            makes the renderer about 10% faster in the non-classifying case
1741            and the code a bit cleaner
1742            (MapRenderer.draw_point_shape): Add the pen and brush parameters
1743            and set them in the dc. Now the draw_point_shape method and
1744            wxproj's draw_polygon_shape function have basically the same
1745            signature so that both can be directly used as draw_func
1746    
1747    2003-07-15  Bernhard Herzog  <[email protected]>
1748    
1749            * Thuban/Model/save.py (SessionSaver.write_classification): Encode
1750            string values (in addition to the labels) as UTF 8
1751    
1752            * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
1753            values if the field type is string
1754    
1755            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
1756            saving a session with non-ascii string classification values.
1757    
1758            * test/test_load.py (TestClassification.file_contents)
1759            (TestClassification.test): Check for non-ascii values in string
1760            classifications
1761    
1762    2003-07-14  Jonathan Coles   <[email protected]>
1763    
1764            * test/test_view.py: New. Tests for ViewPort.
1765    
1766    2003-07-14  Frank Koormann   <[email protected]>
1767    
1768            * Thuban/Model/load.py (SessionLoader.start_map): Encode map
1769            title to latin1.  Fixes https://intevation.de/rt/webrt?serial_num=2013
1770    
1771            * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
1772            unicode strings from session file: session title, map title and
1773            projection name.
1774            
1775    2003-07-10  Jonathan Coles   <[email protected]>
1776    
1777            * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
1778            drag_stop, not drag_move when the mouse is released.
1779    
1780  2003-07-10  Jonathan Coles   <[email protected]>  2003-07-10  Jonathan Coles   <[email protected]>
1781    
1782          The most important part of this is the seperation of view.py into          The most important part of this is the seperation of view.py into

Legend:
Removed from v.1403  
changed lines
  Added in v.1770

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26