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

Legend:
Removed from v.1737  
changed lines
  Added in v.1992

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26