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

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

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

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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26