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

Legend:
Removed from v.1272  
changed lines
  Added in v.1807

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26