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

Legend:
Removed from v.1767  
changed lines
  Added in v.1996

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26