/[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 1655 by bh, Mon Aug 25 16:05:33 2003 UTC revision 1979 by bh, Tue Nov 25 14:30:42 2003 UTC
# Line 1  Line 1 
1    2003-11-25  Bernhard Herzog  <[email protected]>
2    
3            * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
4            there for backwards compatibility and all code relying on that
5            should have been updated by now.
6    
7    2003-11-25  Bernhard Herzog  <[email protected]>
8    
9            * test/test_load.py (TestClassification.test): Add the missing
10            round trip test.
11            (TestClassification.file_contents): Update to the newest file
12            format
13    
14    2003-11-25  Bernhard Herzog  <[email protected]>
15    
16            Add very experimental (and possibly dangerous) extension to draw
17            polygons:
18    
19            * Extensions/drawshape/README: New. Brief installation
20            instructions
21    
22            * Extensions/drawshape/drawshape.py: New. Implementation of the
23            drawshape extensions
24    
25            * Extensions/drawshape/patch.diff: Patch to apply before the
26            extension can be used.
27    
28    2003-11-24  Bernhard Herzog  <[email protected]>
29    
30            * Thuban/Model/data.py (ShapefileStore._open_shapefile)
31            (ShapefileStore.__init__): Factor opening the shapefile into a
32            separate method (the new _open_shapefile). This makes the code a
33            bit more readable but the real reason is that it makes some evil
34            hacks easier. :-)
35    
36    2003-11-24  Bernhard Herzog  <[email protected]>
37    
38            * Thuban/Model/load.py (SessionLoader.check_attrs): If no
39            converter is specified for an attribute assume it's a string
40            containing only Latin1 characters. Update doc-string accordingly.
41            This change should fix many places where unicode objects might
42            accidentally enter Thuban.
43    
44            * test/test_load.py (TestNonAsciiColumnName): New test to check
45            what happens with column names in DBF files that contain non-ascii
46            characters
47    
48    2003-11-21  Bernhard Herzog  <[email protected]>
49    
50            Enable the experimental attribute editing again and introduce a
51            command line switch to actually activate it
52    
53            * Thuban/UI/main.py (options): New. Container for options set on
54            the commmand line
55            (main): Add the --enable-attribute-editing flag.
56    
57            * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
58            editing is enabled use the grid ctrl which allows editing of the
59            values
60    
61            * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
62            New. Just delegate this to the underlying table.
63    
64    2003-11-20  Bernhard Herzog  <[email protected]>
65    
66            * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
67            Skip this test if run under non-posix systems since it only works
68            there
69    
70    2003-11-19  Bernhard Herzog  <[email protected]>
71    
72            * Thuban/Model/resource.py: Rework the way gdal support is
73            determined so that we can give a reason in the about why gdal is
74            not supported.
75            (gdal_support_status): New. Variable holding a string with the
76            reason for no gdal support
77    
78            * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
79            not supported to the message
80    
81    2003-11-19  Bernhard Herzog  <[email protected]>
82    
83            Remove the old table interface and its test cases
84    
85            * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
86            (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
87            anymore
88    
89            * Thuban/Model/transientdb.py (TransientTableBase)
90            (AutoTransientTable): Do not derive from OldTableInterfaceMixin
91            anymore
92    
93            * test/test_table.py: Removed since the old interface it tests is
94            gone.
95    
96            * test/runtests.py (main): The old table interface is gone and
97            with it the deprecation warnings so remove the code that turns
98            these warnings into errors
99    
100    2003-11-19  Bernhard Herzog  <[email protected]>
101    
102            * test/test_table.py: Revert to revision 1.5 again. Changing the
103            tests to use the new table interface is completely wrong since the
104            whole purpose of the tests in this module is to test the old
105            interface.
106    
107    2003-11-18  Bernhard Herzog  <[email protected]>
108    
109            * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
110            New. Test whether the connection matches a set of connection
111            parameters
112    
113            * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
114            (DBFrame.OnAdd): Use the new MatchesParameters method when looking
115            for existing connections with the same parameters and break out of
116            the loop correctly.
117    
118            * test/test_postgis_db.py (TestBriefDescription)
119            (TestPostGISSimple.test_brief_description): Rename
120            TestBriefDescription to TestPostGISSimple and the test method to
121            test_brief_description so that we can add more test methods.
122            (TestPostGISSimple.test_matches_parameters): New. Test the new
123            MatchesParameters method
124    
125    2003-11-18  Bernhard Herzog  <[email protected]>
126    
127            * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
128            _was_destroyed, to indicate whether an publisher instance has
129            already been destroyed.
130            (Publisher.Unsubscribe): Only disconnect if the publisher has not
131            been destroyed yet.
132            (Publisher.Destroy): Set the _was_destroyed flag to true.
133    
134            * test/test_connector.py
135            (TestPublisher.test_unsubscribe_after_destroy): New. Test that
136            calling Unsubscribe after Destroy doesn't raise an exception
137    
138    2003-11-14  Bernhard Herzog  <[email protected]>
139    
140            * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
141            typo in doc-string
142    
143    2003-11-13  Bernhard Herzog  <[email protected]>
144    
145            Quote table and column names properly for postgis.
146    
147            * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
148            quote an identifier for use in an sql statement
149            (PostGISColumn.__init__): Add the quoted_name attribute
150            (PostGISTable.__init__): New instance variable quoted_tablename
151            (PostGISTable._fetch_table_information): Use the quoted table
152            name. New isntance variable quoted_geo_col with a quoted version
153            of geometry_column
154            (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
155            (PostGISTable.RowOrdinalToId): Use the quoted table name
156            (PostGISTable.ReadValue, PostGISTable.ValueRange)
157            (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
158            (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
159            (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
160            Use quoted table and column names
161    
162            * test/test_postgis_db.py (TestPostGISSpecialCases)
163            (TestPostGISIgnoredColumns): Rename the class to
164            TestPostGISSpecialCases because that better describes the new
165            cases
166            (TestPostGISSpecialCases.test_unsupported_types)
167            (TestPostGISSpecialCases.test): Rename the method to
168            test_unsupported_types because we need a more descriptive name now
169            that there are more methods
170            (TestPostGISSpecialCases.test_table_name_quoting)
171            (TestPostGISSpecialCases.test_column_name_quoting)
172            (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
173            cases to test quoting of table and column names in PostGISTable
174            and PostGISShapeStore
175    
176            * test/postgissupport.py
177            (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
178            AddGeometryColumn desn't support table or column names with sapces
179            or double quotes
180    
181    2003-11-12  Jan-Oliver Wagner <[email protected]>
182    
183            * Extensions/wms/__init__.py: New: Init to make this
184            directory a package.
185    
186            * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
187    
188    2003-11-11  Bernhard Herzog  <[email protected]>
189    
190            * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
191            Constant for the file woth deprecated epsg projections
192            (get_system_proj_file): Update doc-string
193    
194            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
195            above the EPS widgets, introduce a check box for the deprecated
196            eps projections and a label for the epsg widgets
197            (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
198            too
199    
200    2003-11-11  Bernhard Herzog  <[email protected]>
201    
202            Avoid warnings when run under Python 2.3
203    
204            * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
205            (BaseRenderer.draw_label_layer): Coordinates must be ints.
206    
207            * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
208            real method so that we can convert to int.
209            (MapRenderer.label_font): The font size mist be an int.
210    
211            * Thuban/UI/common.py (Color2wxColour): The color values must be
212            ints. Also, remove the unnecessary asserts.
213    
214            * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
215            (TestUnicodeStrings.test): Python source code should not contain
216            non-ascii characters unless an encoding is specified in the file.
217            Therefore use \x escapes in the string literals for non-ascii
218            characters.
219    
220    2003-11-11  Bernhard Herzog  <[email protected]>
221    
222            * Thuban/Model/resource.py (get_system_proj_file): Add a filename
223            parameter so that this function can be used for all proj files in
224            Resource/Projections
225            (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
226            get_system_proj_file
227    
228            * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
229            ProjFile self.__sysProjFile use a dictionary of system ProjFile
230            objects self._sys_proj_files
231            (ProjFrame.build_dialog): Adapt to the new changes in the
232            ProjectionList constructor. Add a check button to toggle whether
233            EPSG projections are shown
234            (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
235            events.
236            (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
237            the busy cursor if the files have not yet been loaded by the
238            dialog.
239            (ProjFrame.load_system_proj): Add a parameter for the name of the
240            proj file. Maintain the dictionary of system projections
241            self._sys_proj_files
242    
243            * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
244            user_projs parameters into one parameter proj_files which is a
245            list of proj files.
246            (ProjectionList._subscribe_proj_files)
247            (ProjectionList._unsubscribe_proj_files): New. Move
248            subscription/unsubscription of projfile messages to separate
249            methods
250            (ProjectionList.Destroy): The unsubscribe is now done in
251            _unsubscribe_proj_files
252            (ProjectionList.update_projections): We now have a list of proj
253            file objects
254            (ProjectionList.SetProjFiles): New method to set a new list of
255            proj file objects
256    
257            * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
258            Specify explicitly which system proj file to load.
259    
260    2003-11-11  Bernhard Herzog  <[email protected]>
261    
262            * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
263            instance variables to cut cyclic references. The GC would have
264            collected the loader eventually but it can happen that it doesn't
265            run at all until thuban is closed (2.3 but not 2.2 tries a bit
266            harder and forces a collection when the interpreter terminates)
267            (load_session): Call the handler's Destroy method to make sure
268            that it gets garbage collected early. Otherwise it will be
269            collected very late if at all and it holds some references to e.g.
270            shapestores and the session which can lead to leaks (of e.g. the
271            temporary files)
272    
273            * test/test_load.py (TestSingleLayer.test_leak): New. test for the
274            resource leak in load_session
275    
276    2003-11-10  Bernhard Herzog  <[email protected]>
277    
278            * Thuban/UI/baserenderer.py: Add a way to specify how layers in
279            extensions are to be rendered.
280            (_renderer_extensions): New. List with renderer for layers in
281            extensions
282            (add_renderer_extension): New. Add a renderer extension
283            (init_renderer_extensions): New. Init the renderer extensions
284            (BaseRenderer.render_map_incrementally): Search
285            _renderer_extensions for how to draw unknown layer types
286            (BaseRenderer.draw_raster_data): Add format parameter so that
287            formats other than BMP can be drawn
288            (BaseRenderer.draw_raster_layer): Pass an explicit format to
289            draw_raster_data
290    
291            * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
292            strings of the format parameter of draw_raster_data method to wx
293            constants
294            (MapRenderer.draw_raster_data): Add the format parameter and use
295            raster_format_map to map it to the right wxwindows constant for
296            wxImageFromStream
297    
298            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
299            the format parameter and record it
300            (TestBaseRenderer.test_raster_no_projection): check the format
301            paramter of the draw_raster_data method
302            (TestBaseRenderer.test_renderer_extension): New. Test the renderer
303            extension facility
304    
305    2003-11-07  Bernhard Herzog  <[email protected]>
306    
307            Tweak the usage of the sqlite database to make common use cases
308            more responsive. In most cases copying the data to the sqlite
309            database takes so long that using sqlite doesn't have enough
310            advantages.
311    
312            * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
313            comments about performance and query the min and max in separate
314            statements because only that way will indexes be used.
315            (TransientTableBase.UniqueValues): Add some comments about
316            performance.
317            (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
318            Do not copy the data to the transient DB but use the transient
319            copy if it exists. See the new comments for the performance trade
320            offs
321    
322            * test/test_transientdb.py
323            (TestTransientTable.test_auto_transient_table): Make sure that the
324            data is copied to the transient database at some point.
325    
326    2003-11-03  Bernhard Herzog  <[email protected]>
327    
328            * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
329            globals to locals so that it's a bit faster
330    
331    2003-11-03  Bernhard Herzog  <[email protected]>
332    
333            * Thuban/UI/baserenderer.py
334            (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
335            method. ReadValue is faster than ReadRowAsDict since it only reads
336            one cell especially now that the dbf file objects actually
337            implement it.
338    
339            * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
340            read_attribute method of the dbf objects
341    
342    2003-11-03  Bernhard Herzog  <[email protected]>
343    
344            * Extensions/profiling/profiling.py (popup_dialog_box): New config
345            variable to indicate whether the result should be shown in a
346            dialog box
347            (profile_screen_renderer, time_screen_renderer): Only show a
348            dialog box if popup_dialog_box is true.
349            (profile_screen_renderer): Flush stdout after the printing the
350            first part of the "profiling..." message
351    
352            * Thuban/UI/baserenderer.py
353            (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
354            brushes for the groups so that they're not created over and over
355            again
356    
357            * Thuban/Model/classification.py (Classification.__getattr__)
358            (Classification._compile_classification)
359            (Classification._clear_compiled_classification): New. Methods to
360            manage a 'compiled' representation of the classification groups
361            which is created on demand
362            (Classification.InsertGroup, Classification.RemoveGroup)
363            (Classification.ReplaceGroup): reset the compiled representation
364            (Classification.FindGroup): Use the compiled representation to
365            find the matching group
366            (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
367    
368    2003-10-31  Bernhard Herzog  <[email protected]>
369    
370            * Thuban/Model/classification.py (Classification.SetDefaultGroup):
371            Send a CLASS_CHANGED message
372            (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
373            not return the removed group since it wasn't used.
374    
375            * test/test_classification.py
376            (TestClassification.test_set_default_group): New. Test the
377            SetDefaultGroup method
378            (TestClassification.test_insert_group): New. Test the InsertGroup
379            method
380            (TestClassification.test_remove_group): New. Test the RemoveGroup
381            method
382            (TestClassification.test_replace_group): New. Test the
383            ReplaceGroup method
384    
385    2003-10-31  Bernhard Herzog  <[email protected]>
386    
387            * test/test_classification.py (TestClassification.setUp):
388            Subscribe to the CLASS_CHANGED messages
389            (TestClassification.tearDown): New. Destroy the classification
390            properly
391            (TestClassification.test_defaults): Add tests for the default line
392            width and whether no messages were sent yet
393            (TestClassification.test_set_default_properties): Add tests for
394            messages and setting the default line width
395            (TestClassification.test_add_singleton)
396            (TestClassification.test_add_range)
397            (TestClassification.test_multiple_groups): Add tests for messages
398    
399    2003-10-31  Bernhard Herzog  <[email protected]>
400    
401            Some more refactoring in preparation for new tests:
402    
403            * test/test_classification.py (TestClassification.setUp): New.
404            Instantiate the classification here. Update the test methods
405            accordingly.
406            (TestClassification.test_multiple_groups): Make sure that the two
407            singletons matching 1 are considered different.
408    
409    2003-10-31  Bernhard Herzog  <[email protected]>
410    
411            * test/test_classification.py (red, green, blue): New. These
412            constants were used in several cases. Update the relevant methods.
413            (TestClassification.test_defaults)
414            (TestClassification.test_set_default_properties)
415            (TestClassification.test_add_singleton)
416            (TestClassification.test_add_range)
417            (TestClassification.test_multiple_groups)
418            (TestClassification.test_deepcopy): New. These were formerly all
419            part of the single method test.
420            (TestClassification.test_deepcopy): Removed.
421            (TestClassIterator): Removed. The test case is now a method of
422            TestClassification since it tests part of the public interface of
423            Classification
424            (TestClassification.test_iterator): New. Used to be
425            TestClassIterator effectively
426    
427    2003-10-31  Jan-Oliver Wagner <[email protected]>
428    
429            GUIfied the functions of the profiling extension.
430    
431            * /Extensions/profiling/__init__.py: New: Init to make this
432            directory a package.
433    
434            * Extensions/profiling/profiling.py: Moved menu entries to
435            the Extensions menu. Applied _() for strings.
436            (profile_screen_renderer): Catch the detailed printout and present
437            it in a dialog.
438            (time_screen_renderer): Raise a dialog to present the result instead
439            of printing it to stdout.
440    
441    2003-10-31  Bernhard Herzog  <[email protected]>
442    
443            * test/test_classification.py (TestClassGroupProperties)
444            (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
445            (TestClassGroupSingleton, TestClassIterator, TestClassification):
446            Split TestClassification into several classes, one for each class
447            being tested. TestClassification itself now only tests
448            Classification. This split makes changes to the tests a bit easier
449    
450    2003-10-31  Bernhard Herzog  <[email protected]>
451    
452            * Extensions/profiling/profiling.py: New. Extension to measure
453            Thuban performance
454    
455    2003-10-31  Frank Koormann <[email protected]>
456    
457            Added two items to legend popup menu: Remove Layer and Show Layer Table
458    
459            * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
460            LegendPanel._OnShowTable): New event handlers, call the corresponding
461            mainwindow methods.
462            (LegendTree._OnRightClick): Added items to popup menu.
463    
464    2003-10-30  Bernhard Herzog  <[email protected]>
465    
466            * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
467            EVT_WINDOW_DESTROY
468            (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
469            nothing but is convenient for the derived classes.
470    
471            * Thuban/UI/tableview.py
472            (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
473            Unsubscribe the messages here not in OnClose because that might
474            get called multiple times. Fixes RT #2196
475            (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
476            anymore.
477    
478            * README: Update the minimum requirement for wxPython. Since we
479            now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
480            the version in which that was introduced for all platforms
481    
482    2003-10-30  Frank Koormann <[email protected]>
483    
484            * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
485            the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
486            frame.
487    
488    2003-10-30  Jan-Oliver Wagner <[email protected]>
489    
490            Improved APR import extension, added further EPSG definitions
491            and some cleanup regarding string class.
492    
493            * test/test_proj.py (TestProjection.test_get_projection_units_geo):
494            Added test for alias 'longlat'.
495    
496            * Resources/Projections/epsg-deprecated.proj: New. Contains
497            deprecated EPSG definitions.
498    
499            * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
500            the variable names for objects.
501    
502            * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
503            Copied from importAPR and provided with documentation.
504    
505            * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
506            Moved to apr.py.
507            (APR_View): Added object ref 'ITheme'.
508    
509            * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
510            split function by corresponding use of the string class method.
511    
512            * Thuban/Model/xmlwriter.py: Replaced string replace function by
513            corresponding string method.
514    
515    2003-10-29  Bernhard Herzog  <[email protected]>
516    
517            * Thuban/UI/baserenderer.py
518            (BaseRenderer.draw_shape_layer_incrementally): Speed up the
519            special case of a classification that only has the default group
520    
521    2003-10-27  Bernhard Herzog  <[email protected]>
522    
523            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
524    
525            * po/de.po: Update.
526    
527            * Thuban/UI/application.py
528            (ThubanApplication.ShowExceptionDialog): Handle translation of the
529            dialog message properly
530    
531    2003-10-27  Bernhard Herzog  <[email protected]>
532    
533            Rework how localization works so that we use wx's translation
534            functions when running Thuban as a normal application but not when
535            we don't need any UI, such as in the test suite. See the comment
536            in Thuban/__init__.py for details
537    
538            * Thuban/__init__.py (_): Add one level of indirection to make the
539            translation handling more flexible and to make it possible to use
540            either wx's translation services or not.
541            (gettext_identity, translation_function_installed)
542            (install_translation_function): New function to help with this
543    
544            * Thuban/UI/__init__.py: Install the wx specific translation
545            function if it's OK to do that
546    
547            * test/support.py (initthuban): Install a dummy translation
548            function so that importing Thuban.UI doesn't install a wx specific
549            one for which would need to import wxPython
550    
551    2003-10-27  Bernhard Herzog  <[email protected]>
552    
553            * HOWTO-Release: Source archives should be created first and the
554            binary packages should be created from the source archives.
555            There's an official debian package now so there's no need to test
556            the rpm on debian anymore
557    
558    2003-10-27  Bernhard Herzog  <[email protected]>
559    
560            Several rendering changes:
561    
562             - Render the selection into a separate bitmap so that only that
563               bitmap needs to be redrawn when the selection changes
564    
565             - Render incrementally showing previews and allowing interaction
566               before rendering is complete
567    
568             - Update the renderer interface a bit. Most parameters of
569               RenderMap are now parameters of the constructor
570    
571            * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
572            and the update region as parameters. Update the doc-string
573            (BaseRenderer.render_map_incrementally): New. Generator function
574            to renders the map incrementally
575            (BaseRenderer.render_map): Remove the map argument (it's now in
576            the constructor) and simply iterate over the
577            render_map_incrementally generator to draw the map.
578            (BaseRenderer.draw_shape_layer_incrementally)
579            (BaseRenderer.draw_shape_layer): Renamed to
580            draw_shape_layer_incrementally and changed into a generator that
581            yields True every 500 shapes. Used by render_map_incrementally to
582            render shape layers incrementally
583    
584            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
585            map and region parameters which are now in the constructor
586            (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
587            the inherited render_map_incrementally.
588            (BaseRenderer.draw_shape_layer): Removed.
589            (ScreenRenderer.draw_selection_incrementally): New. The selection
590            drawing part of the removed draw_shape_layer as a generator
591            (ScreenRenderer.layer_shapes): Update because of the region
592            parameter change
593            (ExportRenderer.__init__): New. Extend the inherited constructor
594            with the destination region for the drawing
595            (ExportRenderer.RenderMap): Removed the map and region parameters
596            which are now in the constructor
597    
598            * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
599            bitmap suitable for a preview in a tool
600            (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
601            bitmap
602            (MapPrintout.draw_on_dc): Adapt to new renderer interface
603            (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
604            exists
605            (MapCanvas.OnIdle): Update the logic to deal with incremental
606            rendering and the selection bitmap
607            (MapCanvas._do_redraw): Handle the instantiation of the render
608            iterator and the redraws during rendering
609            (MapCanvas._render_iterator): New. Generator to incrementally
610            redraw both bitmaps
611            (MapCanvas.Export): Adapt to new renderer interface.
612            (MapCanvas.full_redraw): Reset the selection bitmap and the
613            renderer iterator too
614            (MapCanvas.redraw_selection): New. Force a redraw of the selection
615            bitmap
616            (MapCanvas.shape_selected): Only redraw the selection bitmap
617    
618            * test/test_baserenderer.py
619            (TestBaseRenderer.test_polygon_no_projection)
620            (TestBaseRenderer.test_raster_no_projection)
621            (TestBaseRenderer.test_point_map_projection)
622            (TestBaseRenderer.test_point_layer_and_map_projection)
623            (TestBaseRenderer.test_point_layer_projection)
624            (TestBaseRenderer.test_point_with_classification): Adapt to new
625            renderer interface
626    
627    2003-10-24  Bernhard Herzog  <[email protected]>
628    
629            * libraries/thuban/wxproj.cpp (draw_polygon_shape)
630            (point_in_polygon_shape, shape_centroid): Raise an exception if
631            the shape can't be read. Previously invalid shape ids would lead
632            to a segfault.
633    
634            * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
635            New. test whether an exception is raised for invalid shape ids
636    
637    2003-10-24  Jan-Oliver Wagner <[email protected]>
638    
639            * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
640            as alias for 'latlong'.
641    
642            * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
643            as alias for 'latlong'.
644    
645    2003-10-24  Jan-Oliver Wagner <[email protected]>
646    
647            * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
648            the projection even for the UnknownPanel.
649            (UnknownProjPanel.__init__): Define the text and create the textctrl
650            widget.
651            (UnknownProjPanel._DoLayout): Replaced static text widget by the
652            textctrl created in __init__.
653            (UnknownProjPanel.SetProjection): Set the text for the text ctrl
654            including the parameters of the projection.
655            
656    2003-10-24  Jan-Oliver Wagner <[email protected]>
657    
658            * Resources/Projections/epsg.proj: New. This is a list of
659            EPSG codes with parameters for proj. The list has been
660            generated using devtools/create_epsg.py based on the
661            file nad/epsg of the proj 4.4.7 package. Four projection
662            definitions have been deleted as they are not accepted by proj:
663            "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
664            and "HD72 / EOV".
665    
666    2003-10-22  Bernhard Herzog  <[email protected]>
667    
668            Some more tweaks to the projection dialog which should fix RT
669            #1886.
670    
671            * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
672            the ProjFile's messages and call the base class methods correctly
673            (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
674            flag on the newly selected item too. Otherwise some other item is
675            focused and the first time the focus is moved with the keyboard
676            the selection moves in unexpected ways.
677    
678            * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
679            focus on the OK button, only on the projection list. That way the
680            list really has the focus initially
681            (ProjFrame.OnClose): Call the projection list's Destroy method to
682            make it unsubscribe all messages
683    
684    2003-10-21  Bernhard Herzog  <[email protected]>
685    
686            Rework the projection dialog to fix a few bugs, including RT 2166
687            and most of 2168
688    
689            * Thuban/UI/projlist.py: New. The class ProjectionList is a
690            special wxListCtrl to show a list of projections in a more MVC
691            fashion
692    
693            * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
694            throughout the class. The main change is to use the ProjectionList
695            class instead of a normal wxListBox. Also, add an explicit
696            "Unknown" projection to the projection choice control.
697            (ProjPanel.__init__): Add an "unknown" ellipsoid
698            (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
699            instantiation of the panel's controls to make the tab-order more
700            natural
701    
702    2003-10-21  Bernhard Herzog  <[email protected]>
703    
704            * test/test_load.py (TestSingleLayer.file_contents)
705            (TestSingleLayer.test): Add non-ascii characters to the titles of
706            session, map and layer. This is effectively a port of the
707            TestUnicodeStrings test in test_load_0_8.py which for some reason
708            was only added there.
709    
710            * test/test_load_0_9.py (TestSingleLayer.file_contents)
711            (TestSingleLayer.test): Same as in test_load.py: add non-ascii
712            characters to the titles of session, map and layer,.
713    
714    2003-10-21  Bernhard Herzog  <[email protected]>
715    
716            Add EPSG projection handling to .thuban files
717    
718            * test/test_save.py (SaveSessionTest.dtd)
719            (SaveSessionTest.testEmptySession)
720            (SaveSessionTest.testLayerProjection)
721            (SaveSessionTest.testRasterLayer)
722            (SaveSessionTest.testClassifiedLayer)
723            (SaveSessionTest.test_dbf_table)
724            (SaveSessionTest.test_joined_table)
725            (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
726            (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
727            use a and epsg projection to test saving them
728    
729            * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
730            namespace
731            (TestLayerVisibility.file_contents, TestLabels.file_contents)
732            (TestLayerProjection.file_contents)
733            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
734            (TestPostGISLayer.file_contents)
735            (TestPostGISLayerPassword.file_contents)
736            (TestLoadError.file_contents, TestLoadError.test): Update to use
737            1.0-dev namespace
738            (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
739            use 1.0-dev namespace and use an EPSG projection to test whether
740            loading it works
741    
742            * test/test_load_0_9.py: New. Effectively a copy of test_load.py
743            as of Thuban 0.9. These are now tests to determine whether Thuban
744            can still read files generated by Thuban 0.9
745    
746            * Thuban/Model/save.py (SessionSaver.write)
747            (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
748            namespace
749            (SessionSaver.write_projection): Write the projection's epsg
750            attribute
751    
752            * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
753            thuban-1.0-dev.dtd namespace
754            (SessionLoader.check_attrs): Allow a callable object as conversion
755            too
756            (SessionLoader.start_projection, SessionLoader.end_projection)
757            (SessionLoader.start_parameter): Handle the epsg attribute and
758            rename a few instance variables to lower case
759    
760            * Resources/XML/thuban-1.0.dtd: New. Only difference to
761            thuban-0.9.dtd is the epsg attribute for projections.
762    
763    2003-10-21  Bernhard Herzog  <[email protected]>
764    
765            * test/runtests.py (main): Let the user specify which tests to run
766            on the command line
767    
768            * test/support.py (ThubanTestResult.getDescription): Override to
769            give a better short description. The description can be used as a
770            parameter to run_tests to run that particular test in isolation.
771    
772    2003-10-21  Frank Koormann   <[email protected]>
773    
774            Popup menu for legend. Scheduled for the 1.2 release this was too
775            simple to implement: The popup menu is bound to the legend tree, while
776            the events are hanlded by its anchestor, the legend panel. This
777            allows reuse of all the event handlers already implemented for the
778            legend toolbar buttons.
779    
780            * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
781            to add handlers for the events issued by the popup menu.
782            (LegendPanel._OnToggleVisibility): Handler for toggling layer
783            visibility event
784            (LegendPanel._OnProjection): Handler for layer projection event.
785            (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
786            (LegendTree._OnRightClick): Event handler for right click, select item
787            and pop up menu.
788            (LegendTree.ToggleVisibility): Toggle layer visibility
789            (LegendTree.LayerProjection): Raise layer projection dialog for
790            current layer.
791    
792    2003-10-21  Bernhard Herzog  <[email protected]>
793    
794            * Resources/Projections/defaults.proj: Use correct DOCTYPE
795            declaration. The top-level element is projectionlist not projfile
796    
797    2003-10-20  Bernhard Herzog  <[email protected]>
798    
799            * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
800            method to write a projfile and display a busy cursor and error
801            dialogs.
802            (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
803            (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
804            (ProjFrame.__FillAvailList): Translate "<None>" too and display a
805            busy cursor while loading the user and system prj files.
806    
807    2003-10-16  Bernhard Herzog  <[email protected]>
808    
809            * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
810            ProjFile objects
811            (clear_proj_file_cache): New function to clear the cache. Mainly
812            useful for use by the test suite
813            (read_proj_file): Use the cache.
814    
815            * test/test_proj.py (TestProjFile): Clarify the doc-string
816            (ProjFileReadTests): Update doc-string
817            (ProjFileReadTests.test_get_system_proj_file): Check whether the
818            system proj files is cached.
819            (ProjFileLoadTestCase): New base class for the proj file tests
820            derived from support.FileLoadTestCase to provide some common
821            behavior.
822            (TestLoadingProjFile)
823            (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
824            (TestProjFileWithInvalidParameters.file_contents): Derive from
825            ProjFileLoadTestCase
826            (TestLoadingProjFile.test_caching): New. Test whether the cache
827            works
828    
829    2003-10-16      Silke Reimer    <[email protected]>
830    
831            * debian/*: New directory with configuration files for building a thuban
832              deb-package.
833    
834    2003-10-14  Bernhard Herzog  <[email protected]>
835    
836            * test/test_proj.py: Execute support.run_tests when run as
837            __main__ so that missing unsubscribes are detected
838            (TestProjFile.tearDown): Destroy the proj_file properly
839    
840    2003-10-14  Bernhard Herzog  <[email protected]>
841    
842            * Thuban/Model/messages.py (PROJECTION_ADDED)
843            (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
844            the ProjFile objects
845    
846            * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
847            easily send messages when the projections change
848            (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
849            when the change was successful
850    
851            * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
852            proj file messages
853            (TestProjFile.test_add_remove)
854            (TestProjFile.test_remove_non_existing)
855            (TestProjFile.test_replace)
856            (TestProjFile.test_replace_non_existing): Test whether the right
857            messages are sent
858    
859    2003-10-14  Bernhard Herzog  <[email protected]>
860    
861            * test/test_proj.py (TestProjFile.test): Refactor into several
862            tests
863            (TestProjFile.test_add_remove)
864            (TestProjFile.test_remove_non_existing)
865            (TestProjFile.test_replace)
866            (TestProjFile.test_replace_non_existing): Some of the new
867            individual test cases
868            (TestProjFileSimple): New class for the rest of the test cases
869            that came out of the refactoring
870            (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
871            derived classes don't have to
872    
873    2003-10-13  Bernhard Herzog  <[email protected]>
874    
875            Add an optional EPSG code to the projection objects and extend the
876            .proj file format accordingly.
877    
878            * Resources/XML/projfile.dtd (element projection): Add epsg
879            attribute
880    
881            * Thuban/Model/proj.py (Projection.__init__): New parameter and
882            instance variable epsg. Update doc-string
883            (Projection.EPSGCode, Projection.Label): New methods to provide
884            access to EPSG code and a label for use in dialogs
885    
886            * Thuban/Model/resource.py (ProjFileReader.start_projection)
887            (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
888            Handle the epsg code attribute when reading or writing proj files
889    
890            * Thuban/UI/projdialog.py (ProjFrame._OnSave)
891            (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
892            (ProjFrame.__FillAvailList): Use the projection's Label method to
893            get the string for the list box
894    
895            * test/test_proj.py (TestProjection.test_label)
896            (TestProjection.test_label_epsg)
897            (TestProjection.test_epsgcode_for_non_epsg_projection)
898            (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
899            for the label and EPSGCode methods
900            (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
901            (WriteProjFileTests.test_write_empty_file): Create the ProjFile
902            objects in the test cases and put the expected contents into the
903            test case methods too. Update doTestWrite accordingly
904            (TestLoadingProjFile)
905            (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
906            read tests from TestProjFile.
907            (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
908            tests are now in the new classes.
909            (sample_projfile, sample_projfile_data)
910            (sample_projfile2, sample_projfile_data2): Removed. Not used
911            anymore.
912            (TestProjFile.test_read_unreadable_file): No need to reset the
913            permissions at the end anymore since we use a unique filename
914    
915    2003-10-13  Bernhard Herzog  <[email protected]>
916    
917            * test/test_proj.py: Some more refactoring of the test cases
918            (ProjFileTest): New base class for the proj file tests.
919            (TestProjFile): Derive from ProjFileTest
920            (TestProjFile.test_read_unreadable_file)
921            (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
922            the new filename method to get a unique filename
923            (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
924            (WriteProjFileTests): New class for proj file write tests.
925            Contains the write test that were in TestProjFile originally.
926    
927    2003-10-13  Bernhard Herzog  <[email protected]>
928    
929            * test/test_proj.py (TestProjFile.testRead)
930            (TestProjFile.test_read_non_existing_file)
931            (TestProjFile.test_read_unreadable_file)
932            (TestProjFile.test_read_empty_file): Split into several methods.
933    
934    2003-10-10  Bernhard Herzog  <[email protected]>
935    
936            * Thuban/UI/sizers.py: New file with custom sizers.
937    
938            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
939            all projection type specific panels and put them into a
940            NotebookLikeSizer. This way the dialog doesn't change its size
941            when a different projection is selected
942            (ProjFrame.__init__): Rename projection_panels
943            projection_panel_defs and reuse projection_panels for a list of
944            the instantiated panels.
945            (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
946            (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
947            the panels
948            (UnknownProjPanel._DoLayout): Place the newlines in the message
949            differently to make the panel narrower.
950            (TMPanel._DoLayout): Layout the parameters in one column.
951    
952    2003-10-10  Bernhard Herzog  <[email protected]>
953    
954            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
955            that contains all the setup for the dialog's widgets, layout and
956            event handling.
957            (__): Call build_dialog to build the dialog.
958            (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
959            Their functionality is now in build_dialog
960            (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
961            (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
962            (ProjFrame.__DoOnProjChoice): Small updates due to slightly
963            different widget names and hierarchy introduced with build_dialog.
964    
965    2003-10-10  Bernhard Herzog  <[email protected]>
966    
967            * README: Fix typo.
968    
969    2003-10-09  Bernhard Herzog  <[email protected]>
970    
971            * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
972            projection is already in the list. This is *a lot* faster when
973            loading files with hundreds of projections since it saves a linear
974            search. OTOH this will allow adding the same projection to the
975            user.proj file multiple times in the projection dialog but we'll
976            deal with that later
977    
978    2003-10-09  Jan-Oliver Wagner <[email protected]>
979    
980            * devtools: New. Directory for developer tools that are not intended
981            for the regular user.
982    
983            * devtools/create_epsg.py: New. Convert the epsg file of proj into
984            a python .proj file.
985    
986    2003-10-09  Bernhard Herzog  <[email protected]>
987    
988            * test/test_proj.py
989            (TestProjection.test_get_parameter_without_equals_sign): New. Test
990            whether GetParameter handles parameters without "=" sign correctly
991    
992            * Thuban/Model/proj.py (Projection.GetParameter): Handle
993            parameters that do not contain a "=". Update the doc-string
994    
995    2003-10-08  Bernhard Herzog  <[email protected]>
996    
997            * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
998            length limit on the projname text control
999    
1000    2003-10-08  Bernhard Herzog  <[email protected]>
1001    
1002            * test/test_proj.py (TestProjection.test_get_projection_units_geo)
1003            (TestProjection.test_get_projection_units_normal): New. Tests for
1004            the Projection.GetProjectedUnits method
1005    
1006    2003-10-08  Jan-Oliver Wagner <[email protected]>
1007    
1008            * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
1009            Added missing 'val' parameter.
1010    
1011    2003-10-08  Bernhard Herzog  <[email protected]>
1012    
1013            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
1014            projection type of the currently selected projection is not known,
1015            i.e. there's no panel for it, use the UnknownProjPanel
1016            (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
1017            the actual replacing of the proj panel into the new method
1018            _show_proj_panel.
1019            (UnknownProjPanel): Add doc-string.
1020            (UnknownProjPanel._DoLayout): Insert a newline into the text so
1021            that the panel is not so wide.
1022    
1023    2003-10-08  Bernhard Herzog  <[email protected]>
1024    
1025            * Thuban/Model/resource.py (read_proj_file): Return the warnings
1026            too. Update the doc-string
1027            (get_proj_files): Removed. It wasn't used anywhere
1028            (get_system_proj_files, get_system_proj_file): Rename to
1029            get_system_proj_file and return the ProjFile object and not a list
1030            of ProjFile objects. Update the callers.
1031            (get_user_proj_files, get_user_proj_file): Rename to
1032            get_user_proj_file return the ProjFile object and not a list of
1033            ProjFile objects. Update the callers.
1034            (ProjFileReader.__init__): New instance variable for the warnings.
1035            Rename the __pf ivar to projfile. Update the methods referring to
1036            __pf
1037            (ProjFileReader.end_projection): Catch any errors raised when
1038            instantiating the projection and record that as an error. The
1039            projection will not be in the final ProjFile object.
1040            (ProjFileReader.GetWarnings): New method to return the warnings.
1041    
1042            * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
1043            show the warnings from the projfile reader
1044            (ProjFrame._OnImport): Deal with any warnings returned by
1045            read_proj_file
1046            (ProjFrame.__FillAvailList): Deal with any warnings returned by
1047            get_system_proj_file or get_user_proj_file.
1048    
1049            * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
1050            (TestProjFileWithInvalidParameters.file_contents): New test cases
1051            to test whether read_proj_file handles invalid projection
1052            parameters correctly
1053            (TestProjFile.test_get_system_proj_file): New. Simple test for
1054            resource.get_system_proj_file
1055    
1056    2003-10-07  Bernhard Herzog  <[email protected]>
1057    
1058            * test/test_derivedshapestore.py
1059            (TestDerivedShapeStoreExceptions.tearDown): Clear the session
1060            properly so that the temporary directories get deleted correctly
1061    
1062    2003-10-06  Bernhard Herzog  <[email protected]>
1063    
1064            Handle the title changes in a proper MVC way.
1065    
1066            * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
1067            canvas' TITLE_CHANGED messages
1068            (MainWindow.update_title): New. Update the main window's title
1069            (MainWindow.__SetTitle): Removed. Use update_title instead.
1070            (MainWindow.SetMap): Use update_title instead of __SetTitle
1071            (MainWindow.RenameMap): Do change the window title explicitly
1072            here. That's handled in a proper MVC way now.
1073            (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
1074            messages
1075    
1076            * Thuban/Lib/connector.py (Conduit): New class to help classes
1077            that forward messages
1078    
1079            * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
1080            (ViewPort): Derive from Conduit instead of Publisher
1081            (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
1082            when calling the inherited versions
1083            (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
1084            methods to subscribe and unsubscribe map messages
1085            (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
1086            handle the map subscriptions
1087            (ViewPort.Map, ViewPort.map_projection_changed)
1088            (ViewPort.layer_projection_changed): Add or update doc-strings
1089    
1090            * test/test_connector.py (TestPublisher.test_issue_simple): Fix
1091            typo
1092            (MyConduit): Helper class for the Conduit test.
1093            (TestConduit): Test cases for Conduit
1094    
1095            * test/test_connector.py: Use support.run_tests as main.
1096    
1097            * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
1098            the TITLE_CHANGED messages
1099            (ViewPortTest.test_forwarding_title_changed): New test to check
1100            whether the viewport forwards the map's TITLE_CHANGED messages
1101            (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
1102            after the port's because the latter may require a still functional
1103            map.
1104    
1105    2003-10-06  Bernhard Herzog  <[email protected]>
1106    
1107            * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
1108            doc-string
1109    
1110    2003-10-06  Bernhard Herzog  <[email protected]>
1111    
1112            * test/test_viewport.py (ViewPortTest.setUp)
1113            (SimpleViewPortTest.test_init_with_size): Move the test for the
1114            initial size as a constructor parameter from ViewPortTest.setUp
1115            method to a new separate test in SimpleViewPortTest.
1116    
1117    2003-10-06  Bernhard Herzog  <[email protected]>
1118    
1119            * test/test_viewport.py (MockView): New class derived from
1120            ViewPort with a mock implementation of GetTextExtent to be used in
1121            the test cases
1122            (ViewPortTest.setUp): Use MockView instead of ViewPort
1123    
1124            * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
1125            into what would be a "pure virtual function" in C++: always raise
1126            NotImplementedError. Mock implementations for test cases don't
1127            belong into the real code
1128    
1129    2003-10-02  Bernhard Herzog  <[email protected]>
1130    
1131            * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
1132            close the dbf file we create so that it's contents have been
1133            written properly.
1134    
1135            * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
1136            libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
1137            Update to shapelib 1.2.10
1138    
1139    2003-10-01  Jan-Oliver Wagner <[email protected]>
1140    
1141            * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
1142            it annoys lintian which warns about these files not being
1143            executable. The #! isn't necessary here since if you absolutely
1144            must execute them you can always say "python <filename>".
1145    
1146    2003-09-26  Bernhard Herzog  <[email protected]>
1147    
1148            * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
1149            only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
1150            is ported to a newer the import will fail, so it should be noticed
1151            immediately that this function is gone.
1152            Fixes RT#1919
1153    
1154    2003-09-26  Bernhard Herzog  <[email protected]>
1155    
1156            Add a DTD for the projection files and make thuban write valid
1157            projection files
1158    
1159            * Resources/XML/projfile.dtd: New. DTD for thuban's projection
1160            files
1161    
1162            * Thuban/Model/resource.py (ProjFileSaver.write): Use
1163            'projectionlist' as the name in the document type declaration so
1164            that it matches the element type of the root element.
1165    
1166            * test/test_proj.py (sample_projfile, sample_projfile2): Use
1167            'projectionlist' as the name in the document type declaration just
1168            as it is done now in the files thuban would write
1169            (sample_projfile, sample_projfile_data): Fix spelling of
1170            "Mercator"
1171            (TestProjFile.doTestWrite): Validate the written and the expected
1172            XML data
1173            (TestProjFile): Derive from ValidationTest so that we can run xml
1174            validation tests
1175    
1176    2003-09-24  Bernhard Herzog  <[email protected]>
1177    
1178            * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
1179            modify the list returned by map.Layers() in place since it is the
1180            actual list of layers used by the map.
1181    
1182    2003-09-23  Jan-Oliver Wagner <[email protected]>
1183    
1184            * Doc/manual/thuban-manual.xml: Added subsection to chapter
1185            Extensions to describe the extensions coming with the Thuban
1186            standard package (gns2shp and importAPR).
1187    
1188    2003-09-23  Bernhard Herzog  <[email protected]>
1189    
1190            * libraries/thuban/wxproj.cpp (project_point): if there's an
1191            inverse but no forward projection, convert to degrees after
1192            applying the inverse projection. Fixes RT#2096
1193    
1194            * test/test_wxproj.py: New. Test cases for wxproj.so. One test
1195            implicitly tests for the fix to RT#2096
1196    
1197            * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
1198            Check that the sequences have the same lengths
1199    
1200            * Resources/Projections/defaults.proj (Geographic projection): Use
1201            a much more precise value for the to_meter attribute.
1202    
1203    2003-09-22  Bernhard Herzog  <[email protected]>
1204    
1205            * test/support.py (initthuban): Make sure to unset the LANG env.
1206            var. so that tests that compare translated strings work. Solves RT
1207            #2094
1208    
1209    2003-09-22  Jan-Oliver Wagner <[email protected]>
1210    
1211            Small improvement of APR import.
1212    
1213            * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
1214            Added tests for text-ranges.
1215    
1216            * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
1217            returns a string object if the range is based on text.
1218    
1219            * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
1220            range retrieval.
1221    
1222    2003-09-22  Jan-Oliver Wagner <[email protected]>
1223    
1224            Initial version of the importAPR extension which is in
1225            experimental state.
1226    
1227            * /Extensions/importAPR/, /Extensions/importAPR/samples/,
1228            /Extensions/importAPR/test/: New directories.
1229    
1230            * /Extensions/importAPR/samples/README: New: Howto load the samples.
1231    
1232            * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
1233            file which refers to the Thuban Iceland demo data.
1234    
1235            * /Extensions/importAPR/test/README: New: Howto execute the tests.
1236    
1237            * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
1238    
1239            * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
1240            as in '.apr'-files.
1241    
1242            * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
1243            ODB Objects as in '.apr', '.avl' and other files.
1244    
1245            * /Extensions/importAPR/__init__.py: New: Init to make this
1246            directory a package.
1247    
1248            * /Extensions/importAPR/importAPR.py: New: Import a ArcView
1249            project file (.apr) and convert it to Thuban.
1250    
1251    2003-09-22  Jan-Oliver Wagner <[email protected]>
1252    
1253            * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
1254    
1255    2003-09-19  Jan-Oliver Wagner <[email protected]>
1256    
1257            * Doc/manual/thuban-manual.xml: Extended section 'Installation'
1258            with description on RPM installation and RPM binary package
1259            creation.
1260    
1261    2003-09-18  Bernhard Herzog  <[email protected]>
1262    
1263            * setup.py (data_files): Only add the mo files if the Locales
1264            directory actually exists, so that setup.py works with a fresh CVS
1265            checkout
1266    
1267    2003-09-12  Jan-Oliver Wagner <[email protected]>
1268    
1269            * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
1270            in viewport, not anymore in view
1271    
1272    2003-09-04  Jan-Oliver Wagner <[email protected]>
1273    
1274            Introducing first Extension (gns2shp).
1275    
1276            * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
1277    
1278            * Extensions/__init__.py: New. init to make this dir a package.
1279    
1280            * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
1281    
1282            * Extensions/gns2shp/test/README: New. some info on this test directory.
1283    
1284            * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
1285    
1286            * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
1287            of Shapefile from GNS text file format
1288    
1289    2003-09-03  Jan-Oliver Wagner <[email protected]>
1290    
1291            Fix/workaround for bug #2019:
1292            https://intevation.de/rt/webrt?serial_num=2019
1293    
1294            * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
1295            (IdentifyView.__init__): Added another button that allows to
1296            stop the identify mode.
1297            (IdentifyView.OnStop): New. Stops the identify mode.
1298    
1299    2003-09-03  Jan-Oliver Wagner <[email protected]>
1300    
1301            Introducing a new exception dialog that allows to exit the
1302            application immediately.
1303            This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
1304    
1305            * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
1306    
1307            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
1308            Made strings available to translations. Exchanged the simple
1309            ScrolledMessageDialog by the new ExceptionDialog.
1310    
1311    2003-09-01  Bernhard Herzog  <[email protected]>
1312    
1313            * NEWS: New. Summary of changes and release notes.
1314    
1315            * MANIFEST.in: Add NEWS
1316    
1317    2003-09-01  Bernhard Herzog  <[email protected]>
1318    
1319            * MANIFEST.in: Correct the include statement for the mo-files and
1320            include the documentation too.
1321    
1322            * setup.py (data_files): Add the .mo files
1323            (setup call): Up to version 0.9.0
1324    
1325    2003-09-01  Bernhard Herzog  <[email protected]>
1326    
1327            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
1328            parameter list to just parent and session
1329            (ChooseDBTableDialog.__set_properties): Removed. Setting the
1330            selection of empty list boxes is not allowed (and produces C++
1331            assertion errors) and the rest of the setup is better done in
1332            __init__ anyway.
1333            (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
1334            (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
1335            builtins True/False for booleans to avoid warnings from wxPython
1336    
1337            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
1338            ChooseDBTableDialog constructor parameters.
1339    
1340    2003-09-01  Bernhard Herzog  <[email protected]>
1341    
1342            * Thuban/Model/postgisdb.py
1343            (PostGISTable): Extend doc-string
1344            (PostGISTable._fetch_table_information): Set the column index
1345            correctly, pretending ignored columns don't exist.
1346    
1347            * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
1348            for postgis tables with data types not yet supported by thuban.
1349    
1350    2003-08-29  Bernhard Herzog  <[email protected]>
1351    
1352            * HOWTO-Release: Tweak item about running the tests.
1353    
1354    2003-08-29  Jan-Oliver Wagner <[email protected]>
1355    
1356            * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
1357    
1358    2003-08-29  Bernhard Herzog  <[email protected]>
1359    
1360            Add some missing parameters to projections. Proj complains about
1361            them on windows but for some reason not on Linux.
1362    
1363            * test/test_save.py (SaveSessionTest.testLayerProjection): Add
1364            missing required projection parameters
1365    
1366            * test/test_proj.py (TestProjFile.test): Add missing required
1367            projection parameters
1368    
1369            * test/test_load_0_8.py (TestLayerProjection.file_contents)
1370            (TestLayerProjection.test): Add missing required projection
1371            parameters and tests for them
1372    
1373            * test/test_load.py (TestLayerProjection.file_contents)
1374            (TestLayerProjection.test): Add missing required projection
1375            parameters and tests for them
1376    
1377            * test/test_layer.py (TestLayer.test_base_layer): Add missing
1378            required projection parameters
1379    
1380    2003-08-29  Bernhard Herzog  <[email protected]>
1381    
1382            * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
1383            access the pj_errno because directly accessing pj_errno doesn't
1384            work on windows if the proj library is in a DLL
1385    
1386            * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
1387    
1388    2003-08-28  Bernhard Herzog  <[email protected]>
1389    
1390            * test/test_proj.py: Import things from Thuban after calling
1391            initthuban
1392    
1393            * test/test_load.py (LoadSessionTest.filenames): New class
1394            variable with the filename attributes to normalize
1395            (LoadSessionTest.check_format): Pass self.filenames to
1396            sax_eventlist to normalize the filename attributes
1397    
1398            * test/xmlsupport.py: Add cvs keywords
1399            (SaxEventLister.__init__): New parameter filenames which indicates
1400            attributes that contain filenames
1401            (SaxEventLister.startElementNS): Normalize the filename attributes
1402            with os.path.normpath
1403            (sax_eventlist): New parameter filenames to pass through to
1404            SaxEventLister
1405    
1406            * test/test_derivedshapestore.py: Make this file callable as a
1407            program to execute the tests
1408            (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
1409            the session to self.session so that it gets destroyed properly
1410    
1411            * test/test_layer.py (TestLayer.tearDown): Call the session's
1412            Destroy method
1413    
1414            * test/test_map.py (TestMapBase.tearDown): Destroy self.session
1415            too if it exists
1416            (TestMapAddLayer.test_add_layer): Bind the session to self.session
1417            so that it gets destroyed properly
1418    
1419            * test/postgissupport.py (reason_for_not_running_tests): Add a
1420            test for the existence of popen2.Popen4.
1421    
1422            * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
1423            reliable way to destroy the sessions created in the test cases
1424            (SaveSessionTest.test_dbf_table): Bind the session to self.session
1425            so that it gets destroyed properly
1426            (SaveSessionTest.testLayerProjection): Bind the session to
1427            self.session so that it gets destroyed properly
1428    
1429            * test/test_session.py (UnreferencedTablesTests.tearDown): Make
1430            sure that the session is destroyed properly
1431    
1432            * test/test_shapefilestore.py: Make this callable as a program to
1433            execute the tests
1434    
1435            * test/test_scalebar.py: Remove unnecessary import of _ from
1436            Thuban
1437    
1438            * test/support.py (print_garbage_information): Call initthuban
1439            here because it may be called indirectly from test cases that test
1440            test support modules which do not use anything from thuban itself
1441            (ThubanTestProgram.runTests): Remove unnecessary debug print
1442    
1443    2003-08-28  Bernhard Herzog  <[email protected]>
1444    
1445            * Thuban/version.py (longversion): Update to 0.9
1446    
1447            * Thuban/UI/mainwindow.py: Remove some unused imports
1448    
1449            * README: Add section about required additional software. Add date
1450            and revision CVS keywords
1451    
1452            * HOWTO-Release: Add item about the translations. Add date and
1453            revision CVs keywords and change formatting to match README a bit
1454            better
1455    
1456            * po/de.po: Update for 0.9
1457    
1458            * test/README: Tweak the wording a little because many tests are
1459            not really unittest.
1460    
1461    2003-08-27  Bernhard Herzog  <[email protected]>
1462    
1463            As preparation for the 0.9 release, switch thuban files to a
1464            non-dev namespace
1465    
1466            * Thuban/Model/save.py (SessionSaver.write_session): Write files
1467            with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
1468            namespace
1469    
1470            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
1471            http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
1472    
1473            * test/test_save.py (SaveSessionTest.dtd)
1474            (SaveSessionTest.testEmptySession)
1475            (SaveSessionTest.testSingleLayer)
1476            (SaveSessionTest.testLayerProjection)
1477            (SaveSessionTest.testRasterLayer)
1478            (SaveSessionTest.testClassifiedLayer)
1479            (SaveSessionTest.test_dbf_table)
1480            (SaveSessionTest.test_joined_table)
1481            (SaveSessionTest.test_save_postgis): Update for new namespace
1482    
1483            * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
1484            (TestLayerVisibility.file_contents, TestLabels.file_contents)
1485            (TestLayerProjection.file_contents)
1486            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
1487            (TestPostGISLayer.file_contents)
1488            (TestPostGISLayerPassword.file_contents)
1489            (TestLoadError.file_contents, TestLoadError.test): Update for new
1490            namespace
1491    
1492    2003-08-27  Bernhard Herzog  <[email protected]>
1493    
1494            Make the table interface distinguish between row ids (an integer
1495            that uniquely identifies a row) and row ordinals (a simple row
1496            count from 0 to NumRows() - 1)
1497    
1498            * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
1499            (PostGISTable.RowOrdinalToId): New methods to conver between row
1500            ids and row ordinals
1501            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
1502            parameter row_is_ordinal to indicate whether the row parameter is
1503            the row id or the ordinal
1504    
1505            * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
1506            (TransientTableBase.RowOrdinalToId)
1507            (AutoTransientTable.RowIdToOrdinal)
1508            (AutoTransientTable.RowOrdinalToId): Same new methods as in
1509            PostGISTable.
1510            (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
1511            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
1512            Same new parameter as in PostGISTable.
1513    
1514            * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
1515            (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
1516            (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
1517            (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
1518            (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
1519            parameter as in PostGISTable.
1520    
1521            * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
1522            (DataTable.RowOrdinalToId): New methods to convert between row ids
1523            and row ordinals.
1524            (TableGrid.SelectRowById): New method to select a row based on its
1525            ID as opposed to its ordinal
1526            (DataTable.GetValue, TableGrid.OnRangeSelect)
1527            (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
1528            (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
1529            (LayerTableFrame.__init__): Convert between row ids and row
1530            ordinals as appropriate
1531    
1532            * test/postgissupport.py (PostGISDatabase.__init__): Add
1533            doc-string.
1534            (PostGISDatabase.initdb): The optional third item in a tuple in
1535            tables is now a (key, value) list with additional arguments to
1536            pass to upload_shapefile
1537            (upload_shapefile): New parameter gid_offset to allow gids that
1538            are not the same as the shapeids in the shapefile
1539            (PostgreSQLServer.get_default_static_data_db): Use the new
1540            gid_offset to make the gids in landmarks 1000 higher than the
1541            shapeids in the shapefile
1542    
1543            * test/test_viewport.py
1544            (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
1545            new shapeids in the landmarks table
1546    
1547            * test/test_transientdb.py
1548            (TestTransientTable.run_iceland_political_tests)
1549            (TestTransientTable.test_transient_joined_table): Add tests for
1550            the new table methods and new keywords arguments.
1551    
1552            * test/test_postgis_db.py
1553            (TestPostGISTable.test_read_row_as_dict_row_count_mode)
1554            (TestPostGISTable.test_read_value_row_count_mode)
1555            (TestPostGISTable.test_row_id_to_ordinal)
1556            (TestPostGISTable.test_row_oridnal_to_id): New test for the new
1557            table methods and the new arguments
1558            (TestPostGISShapestorePoint.test_shapes_in_region)
1559            (TestPostGISShapestorePoint.test_shape_raw_data)
1560            (TestPostGISShapestorePoint.test_shape_points)
1561            (TestPostGISShapestorePoint.test_shape_shapeid)
1562            (TestPostGISShapestorePoint.test_all_shapes)
1563            (TestPostGISTable.test_simple_query)
1564            (TestPostGISTable.test_simple_query)
1565            (TestPostGISTable.test_simple_query)
1566            (TestPostGISTable.test_read_value)
1567            (TestPostGISTable.test_read_row_as_dict): Adapt to the new
1568            shapeids in the landmarks table
1569    
1570            * test/test_memory_table.py
1571            (TestMemoryTable.test_read_row_as_dict_row_count_mode)
1572            (TestMemoryTable.test_read_value_row_count_mode)
1573            (TestMemoryTable.test_row_id_to_ordinal)
1574            (TestMemoryTable.test_row_oridnal_to_id): New test for the new
1575            table methods and the new arguments
1576    
1577            * test/test_dbf_table.py
1578            (TestDBFTable.test_read_row_as_dict_row_count_mode)
1579            (TestDBFTable.test_read_value_row_count_mode)
1580            (TestDBFTable.test_row_id_to_ordinal)
1581            (TestDBFTable.test_row_oridnal_to_id): New test for the new table
1582            methods and the new arguments
1583    
1584    2003-08-26  Bernhard Herzog  <[email protected]>
1585    
1586            * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
1587            more postgis specific but much faster method to get the bounding
1588            box
1589    
1590    2003-08-26  Bernhard Herzog  <[email protected]>
1591    
1592            * Thuban/Model/postgisdb.py (PostGISTable.Title)
1593            (PostGISShapeStore.AllShapes): Add these missing methods.
1594            (PostGISShapeStore.ShapesInRegion): No need to raise
1595            StopIteration. We can simply return
1596    
1597            * test/test_postgis_db.py (TestPostGISTable.test_title)
1598            (TestPostGISShapestorePoint.test_all_shapes): New tests for the
1599            new methods
1600    
1601    2003-08-25  Bernhard Herzog  <[email protected]>
1602    
1603            * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
1604    
1605            * test/test_postgis_db.py (PolygonTests): New class containing
1606            those tests from TestPostGISShapestorePolygon that can also be
1607            used to test MUTLIPOLYGON tables
1608            (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
1609            so derive from that
1610            (TestPostGISShapestoreMultiPolygon): New class with tests for
1611            MUTLIPOLYGON tables
1612    
1613            * test/postgissupport.py (PostGISDatabase.initdb): Allow the
1614            tables argument to have tuples with three items to override the
1615            WKT type used.
1616            (PostgreSQLServer.get_default_static_data_db): Use the above to
1617            create a polygon table with MUTLIPOLYGONs
1618            (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
1619            (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
1620            coords_to*
1621            (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
1622            (wkt_converter): New. Map WKT types to converters
1623            (upload_shapefile): New parameter force_wkt_type to use a
1624            different WKT type than the default
1625    
1626  2003-08-25  Bernhard Herzog  <[email protected]>  2003-08-25  Bernhard Herzog  <[email protected]>
1627    
1628          * Thuban/UI/application.py          * Thuban/UI/application.py
# Line 941  Line 2566 
2566    
2567          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
2568          it annoys lintian which warns about these files not being          it annoys lintian which warns about these files not being
2569          executable. The #1 isn't necessary here since if you absolutely          executable. The #! isn't necessary here since if you absolutely
2570          must execute them you can always say "python <filename>".          must execute them you can always say "python <filename>".
2571    
2572          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove

Legend:
Removed from v.1655  
changed lines
  Added in v.1979

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26