/[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 1418 by bh, Tue Jul 15 08:44:20 2003 UTC revision 1979 by bh, Tue Nov 25 14:30:42 2003 UTC
# Line 1  Line 1 
1    2003-11-25  Bernhard Herzog  <[email protected]>
2    
3            * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
4            there for backwards compatibility and all code relying on that
5            should have been updated by now.
6    
7    2003-11-25  Bernhard Herzog  <[email protected]>
8    
9            * test/test_load.py (TestClassification.test): Add the missing
10            round trip test.
11            (TestClassification.file_contents): Update to the newest file
12            format
13    
14    2003-11-25  Bernhard Herzog  <[email protected]>
15    
16            Add very experimental (and possibly dangerous) extension to draw
17            polygons:
18    
19            * Extensions/drawshape/README: New. Brief installation
20            instructions
21    
22            * Extensions/drawshape/drawshape.py: New. Implementation of the
23            drawshape extensions
24    
25            * Extensions/drawshape/patch.diff: Patch to apply before the
26            extension can be used.
27    
28    2003-11-24  Bernhard Herzog  <[email protected]>
29    
30            * Thuban/Model/data.py (ShapefileStore._open_shapefile)
31            (ShapefileStore.__init__): Factor opening the shapefile into a
32            separate method (the new _open_shapefile). This makes the code a
33            bit more readable but the real reason is that it makes some evil
34            hacks easier. :-)
35    
36    2003-11-24  Bernhard Herzog  <[email protected]>
37    
38            * Thuban/Model/load.py (SessionLoader.check_attrs): If no
39            converter is specified for an attribute assume it's a string
40            containing only Latin1 characters. Update doc-string accordingly.
41            This change should fix many places where unicode objects might
42            accidentally enter Thuban.
43    
44            * test/test_load.py (TestNonAsciiColumnName): New test to check
45            what happens with column names in DBF files that contain non-ascii
46            characters
47    
48    2003-11-21  Bernhard Herzog  <[email protected]>
49    
50            Enable the experimental attribute editing again and introduce a
51            command line switch to actually activate it
52    
53            * Thuban/UI/main.py (options): New. Container for options set on
54            the commmand line
55            (main): Add the --enable-attribute-editing flag.
56    
57            * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
58            editing is enabled use the grid ctrl which allows editing of the
59            values
60    
61            * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
62            New. Just delegate this to the underlying table.
63    
64    2003-11-20  Bernhard Herzog  <[email protected]>
65    
66            * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
67            Skip this test if run under non-posix systems since it only works
68            there
69    
70    2003-11-19  Bernhard Herzog  <[email protected]>
71    
72            * Thuban/Model/resource.py: Rework the way gdal support is
73            determined so that we can give a reason in the about why gdal is
74            not supported.
75            (gdal_support_status): New. Variable holding a string with the
76            reason for no gdal support
77    
78            * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
79            not supported to the message
80    
81    2003-11-19  Bernhard Herzog  <[email protected]>
82    
83            Remove the old table interface and its test cases
84    
85            * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
86            (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
87            anymore
88    
89            * Thuban/Model/transientdb.py (TransientTableBase)
90            (AutoTransientTable): Do not derive from OldTableInterfaceMixin
91            anymore
92    
93            * test/test_table.py: Removed since the old interface it tests is
94            gone.
95    
96            * test/runtests.py (main): The old table interface is gone and
97            with it the deprecation warnings so remove the code that turns
98            these warnings into errors
99    
100    2003-11-19  Bernhard Herzog  <[email protected]>
101    
102            * test/test_table.py: Revert to revision 1.5 again. Changing the
103            tests to use the new table interface is completely wrong since the
104            whole purpose of the tests in this module is to test the old
105            interface.
106    
107    2003-11-18  Bernhard Herzog  <[email protected]>
108    
109            * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
110            New. Test whether the connection matches a set of connection
111            parameters
112    
113            * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
114            (DBFrame.OnAdd): Use the new MatchesParameters method when looking
115            for existing connections with the same parameters and break out of
116            the loop correctly.
117    
118            * test/test_postgis_db.py (TestBriefDescription)
119            (TestPostGISSimple.test_brief_description): Rename
120            TestBriefDescription to TestPostGISSimple and the test method to
121            test_brief_description so that we can add more test methods.
122            (TestPostGISSimple.test_matches_parameters): New. Test the new
123            MatchesParameters method
124    
125    2003-11-18  Bernhard Herzog  <[email protected]>
126    
127            * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
128            _was_destroyed, to indicate whether an publisher instance has
129            already been destroyed.
130            (Publisher.Unsubscribe): Only disconnect if the publisher has not
131            been destroyed yet.
132            (Publisher.Destroy): Set the _was_destroyed flag to true.
133    
134            * test/test_connector.py
135            (TestPublisher.test_unsubscribe_after_destroy): New. Test that
136            calling Unsubscribe after Destroy doesn't raise an exception
137    
138    2003-11-14  Bernhard Herzog  <[email protected]>
139    
140            * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
141            typo in doc-string
142    
143    2003-11-13  Bernhard Herzog  <[email protected]>
144    
145            Quote table and column names properly for postgis.
146    
147            * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
148            quote an identifier for use in an sql statement
149            (PostGISColumn.__init__): Add the quoted_name attribute
150            (PostGISTable.__init__): New instance variable quoted_tablename
151            (PostGISTable._fetch_table_information): Use the quoted table
152            name. New isntance variable quoted_geo_col with a quoted version
153            of geometry_column
154            (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
155            (PostGISTable.RowOrdinalToId): Use the quoted table name
156            (PostGISTable.ReadValue, PostGISTable.ValueRange)
157            (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
158            (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
159            (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
160            Use quoted table and column names
161    
162            * test/test_postgis_db.py (TestPostGISSpecialCases)
163            (TestPostGISIgnoredColumns): Rename the class to
164            TestPostGISSpecialCases because that better describes the new
165            cases
166            (TestPostGISSpecialCases.test_unsupported_types)
167            (TestPostGISSpecialCases.test): Rename the method to
168            test_unsupported_types because we need a more descriptive name now
169            that there are more methods
170            (TestPostGISSpecialCases.test_table_name_quoting)
171            (TestPostGISSpecialCases.test_column_name_quoting)
172            (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
173            cases to test quoting of table and column names in PostGISTable
174            and PostGISShapeStore
175    
176            * test/postgissupport.py
177            (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
178            AddGeometryColumn desn't support table or column names with sapces
179            or double quotes
180    
181    2003-11-12  Jan-Oliver Wagner <[email protected]>
182    
183            * Extensions/wms/__init__.py: New: Init to make this
184            directory a package.
185    
186            * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
187    
188    2003-11-11  Bernhard Herzog  <[email protected]>
189    
190            * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
191            Constant for the file woth deprecated epsg projections
192            (get_system_proj_file): Update doc-string
193    
194            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
195            above the EPS widgets, introduce a check box for the deprecated
196            eps projections and a label for the epsg widgets
197            (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
198            too
199    
200    2003-11-11  Bernhard Herzog  <[email protected]>
201    
202            Avoid warnings when run under Python 2.3
203    
204            * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
205            (BaseRenderer.draw_label_layer): Coordinates must be ints.
206    
207            * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
208            real method so that we can convert to int.
209            (MapRenderer.label_font): The font size mist be an int.
210    
211            * Thuban/UI/common.py (Color2wxColour): The color values must be
212            ints. Also, remove the unnecessary asserts.
213    
214            * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
215            (TestUnicodeStrings.test): Python source code should not contain
216            non-ascii characters unless an encoding is specified in the file.
217            Therefore use \x escapes in the string literals for non-ascii
218            characters.
219    
220    2003-11-11  Bernhard Herzog  <[email protected]>
221    
222            * Thuban/Model/resource.py (get_system_proj_file): Add a filename
223            parameter so that this function can be used for all proj files in
224            Resource/Projections
225            (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
226            get_system_proj_file
227    
228            * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
229            ProjFile self.__sysProjFile use a dictionary of system ProjFile
230            objects self._sys_proj_files
231            (ProjFrame.build_dialog): Adapt to the new changes in the
232            ProjectionList constructor. Add a check button to toggle whether
233            EPSG projections are shown
234            (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
235            events.
236            (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
237            the busy cursor if the files have not yet been loaded by the
238            dialog.
239            (ProjFrame.load_system_proj): Add a parameter for the name of the
240            proj file. Maintain the dictionary of system projections
241            self._sys_proj_files
242    
243            * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
244            user_projs parameters into one parameter proj_files which is a
245            list of proj files.
246            (ProjectionList._subscribe_proj_files)
247            (ProjectionList._unsubscribe_proj_files): New. Move
248            subscription/unsubscription of projfile messages to separate
249            methods
250            (ProjectionList.Destroy): The unsubscribe is now done in
251            _unsubscribe_proj_files
252            (ProjectionList.update_projections): We now have a list of proj
253            file objects
254            (ProjectionList.SetProjFiles): New method to set a new list of
255            proj file objects
256    
257            * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
258            Specify explicitly which system proj file to load.
259    
260    2003-11-11  Bernhard Herzog  <[email protected]>
261    
262            * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
263            instance variables to cut cyclic references. The GC would have
264            collected the loader eventually but it can happen that it doesn't
265            run at all until thuban is closed (2.3 but not 2.2 tries a bit
266            harder and forces a collection when the interpreter terminates)
267            (load_session): Call the handler's Destroy method to make sure
268            that it gets garbage collected early. Otherwise it will be
269            collected very late if at all and it holds some references to e.g.
270            shapestores and the session which can lead to leaks (of e.g. the
271            temporary files)
272    
273            * test/test_load.py (TestSingleLayer.test_leak): New. test for the
274            resource leak in load_session
275    
276    2003-11-10  Bernhard Herzog  <[email protected]>
277    
278            * Thuban/UI/baserenderer.py: Add a way to specify how layers in
279            extensions are to be rendered.
280            (_renderer_extensions): New. List with renderer for layers in
281            extensions
282            (add_renderer_extension): New. Add a renderer extension
283            (init_renderer_extensions): New. Init the renderer extensions
284            (BaseRenderer.render_map_incrementally): Search
285            _renderer_extensions for how to draw unknown layer types
286            (BaseRenderer.draw_raster_data): Add format parameter so that
287            formats other than BMP can be drawn
288            (BaseRenderer.draw_raster_layer): Pass an explicit format to
289            draw_raster_data
290    
291            * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
292            strings of the format parameter of draw_raster_data method to wx
293            constants
294            (MapRenderer.draw_raster_data): Add the format parameter and use
295            raster_format_map to map it to the right wxwindows constant for
296            wxImageFromStream
297    
298            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
299            the format parameter and record it
300            (TestBaseRenderer.test_raster_no_projection): check the format
301            paramter of the draw_raster_data method
302            (TestBaseRenderer.test_renderer_extension): New. Test the renderer
303            extension facility
304    
305    2003-11-07  Bernhard Herzog  <[email protected]>
306    
307            Tweak the usage of the sqlite database to make common use cases
308            more responsive. In most cases copying the data to the sqlite
309            database takes so long that using sqlite doesn't have enough
310            advantages.
311    
312            * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
313            comments about performance and query the min and max in separate
314            statements because only that way will indexes be used.
315            (TransientTableBase.UniqueValues): Add some comments about
316            performance.
317            (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
318            Do not copy the data to the transient DB but use the transient
319            copy if it exists. See the new comments for the performance trade
320            offs
321    
322            * test/test_transientdb.py
323            (TestTransientTable.test_auto_transient_table): Make sure that the
324            data is copied to the transient database at some point.
325    
326    2003-11-03  Bernhard Herzog  <[email protected]>
327    
328            * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
329            globals to locals so that it's a bit faster
330    
331    2003-11-03  Bernhard Herzog  <[email protected]>
332    
333            * Thuban/UI/baserenderer.py
334            (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
335            method. ReadValue is faster than ReadRowAsDict since it only reads
336            one cell especially now that the dbf file objects actually
337            implement it.
338    
339            * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
340            read_attribute method of the dbf objects
341    
342    2003-11-03  Bernhard Herzog  <[email protected]>
343    
344            * Extensions/profiling/profiling.py (popup_dialog_box): New config
345            variable to indicate whether the result should be shown in a
346            dialog box
347            (profile_screen_renderer, time_screen_renderer): Only show a
348            dialog box if popup_dialog_box is true.
349            (profile_screen_renderer): Flush stdout after the printing the
350            first part of the "profiling..." message
351    
352            * Thuban/UI/baserenderer.py
353            (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
354            brushes for the groups so that they're not created over and over
355            again
356    
357            * Thuban/Model/classification.py (Classification.__getattr__)
358            (Classification._compile_classification)
359            (Classification._clear_compiled_classification): New. Methods to
360            manage a 'compiled' representation of the classification groups
361            which is created on demand
362            (Classification.InsertGroup, Classification.RemoveGroup)
363            (Classification.ReplaceGroup): reset the compiled representation
364            (Classification.FindGroup): Use the compiled representation to
365            find the matching group
366            (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
367    
368    2003-10-31  Bernhard Herzog  <[email protected]>
369    
370            * Thuban/Model/classification.py (Classification.SetDefaultGroup):
371            Send a CLASS_CHANGED message
372            (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
373            not return the removed group since it wasn't used.
374    
375            * test/test_classification.py
376            (TestClassification.test_set_default_group): New. Test the
377            SetDefaultGroup method
378            (TestClassification.test_insert_group): New. Test the InsertGroup
379            method
380            (TestClassification.test_remove_group): New. Test the RemoveGroup
381            method
382            (TestClassification.test_replace_group): New. Test the
383            ReplaceGroup method
384    
385    2003-10-31  Bernhard Herzog  <[email protected]>
386    
387            * test/test_classification.py (TestClassification.setUp):
388            Subscribe to the CLASS_CHANGED messages
389            (TestClassification.tearDown): New. Destroy the classification
390            properly
391            (TestClassification.test_defaults): Add tests for the default line
392            width and whether no messages were sent yet
393            (TestClassification.test_set_default_properties): Add tests for
394            messages and setting the default line width
395            (TestClassification.test_add_singleton)
396            (TestClassification.test_add_range)
397            (TestClassification.test_multiple_groups): Add tests for messages
398    
399    2003-10-31  Bernhard Herzog  <[email protected]>
400    
401            Some more refactoring in preparation for new tests:
402    
403            * test/test_classification.py (TestClassification.setUp): New.
404            Instantiate the classification here. Update the test methods
405            accordingly.
406            (TestClassification.test_multiple_groups): Make sure that the two
407            singletons matching 1 are considered different.
408    
409    2003-10-31  Bernhard Herzog  <[email protected]>
410    
411            * test/test_classification.py (red, green, blue): New. These
412            constants were used in several cases. Update the relevant methods.
413            (TestClassification.test_defaults)
414            (TestClassification.test_set_default_properties)
415            (TestClassification.test_add_singleton)
416            (TestClassification.test_add_range)
417            (TestClassification.test_multiple_groups)
418            (TestClassification.test_deepcopy): New. These were formerly all
419            part of the single method test.
420            (TestClassification.test_deepcopy): Removed.
421            (TestClassIterator): Removed. The test case is now a method of
422            TestClassification since it tests part of the public interface of
423            Classification
424            (TestClassification.test_iterator): New. Used to be
425            TestClassIterator effectively
426    
427    2003-10-31  Jan-Oliver Wagner <[email protected]>
428    
429            GUIfied the functions of the profiling extension.
430    
431            * /Extensions/profiling/__init__.py: New: Init to make this
432            directory a package.
433    
434            * Extensions/profiling/profiling.py: Moved menu entries to
435            the Extensions menu. Applied _() for strings.
436            (profile_screen_renderer): Catch the detailed printout and present
437            it in a dialog.
438            (time_screen_renderer): Raise a dialog to present the result instead
439            of printing it to stdout.
440    
441    2003-10-31  Bernhard Herzog  <[email protected]>
442    
443            * test/test_classification.py (TestClassGroupProperties)
444            (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
445            (TestClassGroupSingleton, TestClassIterator, TestClassification):
446            Split TestClassification into several classes, one for each class
447            being tested. TestClassification itself now only tests
448            Classification. This split makes changes to the tests a bit easier
449    
450    2003-10-31  Bernhard Herzog  <[email protected]>
451    
452            * Extensions/profiling/profiling.py: New. Extension to measure
453            Thuban performance
454    
455    2003-10-31  Frank Koormann <[email protected]>
456    
457            Added two items to legend popup menu: Remove Layer and Show Layer Table
458    
459            * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
460            LegendPanel._OnShowTable): New event handlers, call the corresponding
461            mainwindow methods.
462            (LegendTree._OnRightClick): Added items to popup menu.
463    
464    2003-10-30  Bernhard Herzog  <[email protected]>
465    
466            * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
467            EVT_WINDOW_DESTROY
468            (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
469            nothing but is convenient for the derived classes.
470    
471            * Thuban/UI/tableview.py
472            (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
473            Unsubscribe the messages here not in OnClose because that might
474            get called multiple times. Fixes RT #2196
475            (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
476            anymore.
477    
478            * README: Update the minimum requirement for wxPython. Since we
479            now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
480            the version in which that was introduced for all platforms
481    
482    2003-10-30  Frank Koormann <[email protected]>
483    
484            * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
485            the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
486            frame.
487    
488    2003-10-30  Jan-Oliver Wagner <[email protected]>
489    
490            Improved APR import extension, added further EPSG definitions
491            and some cleanup regarding string class.
492    
493            * test/test_proj.py (TestProjection.test_get_projection_units_geo):
494            Added test for alias 'longlat'.
495    
496            * Resources/Projections/epsg-deprecated.proj: New. Contains
497            deprecated EPSG definitions.
498    
499            * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
500            the variable names for objects.
501    
502            * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
503            Copied from importAPR and provided with documentation.
504    
505            * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
506            Moved to apr.py.
507            (APR_View): Added object ref 'ITheme'.
508    
509            * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
510            split function by corresponding use of the string class method.
511    
512            * Thuban/Model/xmlwriter.py: Replaced string replace function by
513            corresponding string method.
514    
515    2003-10-29  Bernhard Herzog  <[email protected]>
516    
517            * Thuban/UI/baserenderer.py
518            (BaseRenderer.draw_shape_layer_incrementally): Speed up the
519            special case of a classification that only has the default group
520    
521    2003-10-27  Bernhard Herzog  <[email protected]>
522    
523            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
524    
525            * po/de.po: Update.
526    
527            * Thuban/UI/application.py
528            (ThubanApplication.ShowExceptionDialog): Handle translation of the
529            dialog message properly
530    
531    2003-10-27  Bernhard Herzog  <[email protected]>
532    
533            Rework how localization works so that we use wx's translation
534            functions when running Thuban as a normal application but not when
535            we don't need any UI, such as in the test suite. See the comment
536            in Thuban/__init__.py for details
537    
538            * Thuban/__init__.py (_): Add one level of indirection to make the
539            translation handling more flexible and to make it possible to use
540            either wx's translation services or not.
541            (gettext_identity, translation_function_installed)
542            (install_translation_function): New function to help with this
543    
544            * Thuban/UI/__init__.py: Install the wx specific translation
545            function if it's OK to do that
546    
547            * test/support.py (initthuban): Install a dummy translation
548            function so that importing Thuban.UI doesn't install a wx specific
549            one for which would need to import wxPython
550    
551    2003-10-27  Bernhard Herzog  <[email protected]>
552    
553            * HOWTO-Release: Source archives should be created first and the
554            binary packages should be created from the source archives.
555            There's an official debian package now so there's no need to test
556            the rpm on debian anymore
557    
558    2003-10-27  Bernhard Herzog  <[email protected]>
559    
560            Several rendering changes:
561    
562             - Render the selection into a separate bitmap so that only that
563               bitmap needs to be redrawn when the selection changes
564    
565             - Render incrementally showing previews and allowing interaction
566               before rendering is complete
567    
568             - Update the renderer interface a bit. Most parameters of
569               RenderMap are now parameters of the constructor
570    
571            * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
572            and the update region as parameters. Update the doc-string
573            (BaseRenderer.render_map_incrementally): New. Generator function
574            to renders the map incrementally
575            (BaseRenderer.render_map): Remove the map argument (it's now in
576            the constructor) and simply iterate over the
577            render_map_incrementally generator to draw the map.
578            (BaseRenderer.draw_shape_layer_incrementally)
579            (BaseRenderer.draw_shape_layer): Renamed to
580            draw_shape_layer_incrementally and changed into a generator that
581            yields True every 500 shapes. Used by render_map_incrementally to
582            render shape layers incrementally
583    
584            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
585            map and region parameters which are now in the constructor
586            (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
587            the inherited render_map_incrementally.
588            (BaseRenderer.draw_shape_layer): Removed.
589            (ScreenRenderer.draw_selection_incrementally): New. The selection
590            drawing part of the removed draw_shape_layer as a generator
591            (ScreenRenderer.layer_shapes): Update because of the region
592            parameter change
593            (ExportRenderer.__init__): New. Extend the inherited constructor
594            with the destination region for the drawing
595            (ExportRenderer.RenderMap): Removed the map and region parameters
596            which are now in the constructor
597    
598            * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
599            bitmap suitable for a preview in a tool
600            (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
601            bitmap
602            (MapPrintout.draw_on_dc): Adapt to new renderer interface
603            (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
604            exists
605            (MapCanvas.OnIdle): Update the logic to deal with incremental
606            rendering and the selection bitmap
607            (MapCanvas._do_redraw): Handle the instantiation of the render
608            iterator and the redraws during rendering
609            (MapCanvas._render_iterator): New. Generator to incrementally
610            redraw both bitmaps
611            (MapCanvas.Export): Adapt to new renderer interface.
612            (MapCanvas.full_redraw): Reset the selection bitmap and the
613            renderer iterator too
614            (MapCanvas.redraw_selection): New. Force a redraw of the selection
615            bitmap
616            (MapCanvas.shape_selected): Only redraw the selection bitmap
617    
618            * test/test_baserenderer.py
619            (TestBaseRenderer.test_polygon_no_projection)
620            (TestBaseRenderer.test_raster_no_projection)
621            (TestBaseRenderer.test_point_map_projection)
622            (TestBaseRenderer.test_point_layer_and_map_projection)
623            (TestBaseRenderer.test_point_layer_projection)
624            (TestBaseRenderer.test_point_with_classification): Adapt to new
625            renderer interface
626    
627    2003-10-24  Bernhard Herzog  <[email protected]>
628    
629            * libraries/thuban/wxproj.cpp (draw_polygon_shape)
630            (point_in_polygon_shape, shape_centroid): Raise an exception if
631            the shape can't be read. Previously invalid shape ids would lead
632            to a segfault.
633    
634            * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
635            New. test whether an exception is raised for invalid shape ids
636    
637    2003-10-24  Jan-Oliver Wagner <[email protected]>
638    
639            * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
640            as alias for 'latlong'.
641    
642            * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
643            as alias for 'latlong'.
644    
645    2003-10-24  Jan-Oliver Wagner <[email protected]>
646    
647            * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
648            the projection even for the UnknownPanel.
649            (UnknownProjPanel.__init__): Define the text and create the textctrl
650            widget.
651            (UnknownProjPanel._DoLayout): Replaced static text widget by the
652            textctrl created in __init__.
653            (UnknownProjPanel.SetProjection): Set the text for the text ctrl
654            including the parameters of the projection.
655            
656    2003-10-24  Jan-Oliver Wagner <[email protected]>
657    
658            * Resources/Projections/epsg.proj: New. This is a list of
659            EPSG codes with parameters for proj. The list has been
660            generated using devtools/create_epsg.py based on the
661            file nad/epsg of the proj 4.4.7 package. Four projection
662            definitions have been deleted as they are not accepted by proj:
663            "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
664            and "HD72 / EOV".
665    
666    2003-10-22  Bernhard Herzog  <[email protected]>
667    
668            Some more tweaks to the projection dialog which should fix RT
669            #1886.
670    
671            * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
672            the ProjFile's messages and call the base class methods correctly
673            (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
674            flag on the newly selected item too. Otherwise some other item is
675            focused and the first time the focus is moved with the keyboard
676            the selection moves in unexpected ways.
677    
678            * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
679            focus on the OK button, only on the projection list. That way the
680            list really has the focus initially
681            (ProjFrame.OnClose): Call the projection list's Destroy method to
682            make it unsubscribe all messages
683    
684    2003-10-21  Bernhard Herzog  <[email protected]>
685    
686            Rework the projection dialog to fix a few bugs, including RT 2166
687            and most of 2168
688    
689            * Thuban/UI/projlist.py: New. The class ProjectionList is a
690            special wxListCtrl to show a list of projections in a more MVC
691            fashion
692    
693            * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
694            throughout the class. The main change is to use the ProjectionList
695            class instead of a normal wxListBox. Also, add an explicit
696            "Unknown" projection to the projection choice control.
697            (ProjPanel.__init__): Add an "unknown" ellipsoid
698            (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
699            instantiation of the panel's controls to make the tab-order more
700            natural
701    
702    2003-10-21  Bernhard Herzog  <[email protected]>
703    
704            * test/test_load.py (TestSingleLayer.file_contents)
705            (TestSingleLayer.test): Add non-ascii characters to the titles of
706            session, map and layer. This is effectively a port of the
707            TestUnicodeStrings test in test_load_0_8.py which for some reason
708            was only added there.
709    
710            * test/test_load_0_9.py (TestSingleLayer.file_contents)
711            (TestSingleLayer.test): Same as in test_load.py: add non-ascii
712            characters to the titles of session, map and layer,.
713    
714    2003-10-21  Bernhard Herzog  <[email protected]>
715    
716            Add EPSG projection handling to .thuban files
717    
718            * test/test_save.py (SaveSessionTest.dtd)
719            (SaveSessionTest.testEmptySession)
720            (SaveSessionTest.testLayerProjection)
721            (SaveSessionTest.testRasterLayer)
722            (SaveSessionTest.testClassifiedLayer)
723            (SaveSessionTest.test_dbf_table)
724            (SaveSessionTest.test_joined_table)
725            (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
726            (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
727            use a and epsg projection to test saving them
728    
729            * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
730            namespace
731            (TestLayerVisibility.file_contents, TestLabels.file_contents)
732            (TestLayerProjection.file_contents)
733            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
734            (TestPostGISLayer.file_contents)
735            (TestPostGISLayerPassword.file_contents)
736            (TestLoadError.file_contents, TestLoadError.test): Update to use
737            1.0-dev namespace
738            (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
739            use 1.0-dev namespace and use an EPSG projection to test whether
740            loading it works
741    
742            * test/test_load_0_9.py: New. Effectively a copy of test_load.py
743            as of Thuban 0.9. These are now tests to determine whether Thuban
744            can still read files generated by Thuban 0.9
745    
746            * Thuban/Model/save.py (SessionSaver.write)
747            (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
748            namespace
749            (SessionSaver.write_projection): Write the projection's epsg
750            attribute
751    
752            * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
753            thuban-1.0-dev.dtd namespace
754            (SessionLoader.check_attrs): Allow a callable object as conversion
755            too
756            (SessionLoader.start_projection, SessionLoader.end_projection)
757            (SessionLoader.start_parameter): Handle the epsg attribute and
758            rename a few instance variables to lower case
759    
760            * Resources/XML/thuban-1.0.dtd: New. Only difference to
761            thuban-0.9.dtd is the epsg attribute for projections.
762    
763    2003-10-21  Bernhard Herzog  <[email protected]>
764    
765            * test/runtests.py (main): Let the user specify which tests to run
766            on the command line
767    
768            * test/support.py (ThubanTestResult.getDescription): Override to
769            give a better short description. The description can be used as a
770            parameter to run_tests to run that particular test in isolation.
771    
772    2003-10-21  Frank Koormann   <[email protected]>
773    
774            Popup menu for legend. Scheduled for the 1.2 release this was too
775            simple to implement: The popup menu is bound to the legend tree, while
776            the events are hanlded by its anchestor, the legend panel. This
777            allows reuse of all the event handlers already implemented for the
778            legend toolbar buttons.
779    
780            * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
781            to add handlers for the events issued by the popup menu.
782            (LegendPanel._OnToggleVisibility): Handler for toggling layer
783            visibility event
784            (LegendPanel._OnProjection): Handler for layer projection event.
785            (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
786            (LegendTree._OnRightClick): Event handler for right click, select item
787            and pop up menu.
788            (LegendTree.ToggleVisibility): Toggle layer visibility
789            (LegendTree.LayerProjection): Raise layer projection dialog for
790            current layer.
791    
792    2003-10-21  Bernhard Herzog  <[email protected]>
793    
794            * Resources/Projections/defaults.proj: Use correct DOCTYPE
795            declaration. The top-level element is projectionlist not projfile
796    
797    2003-10-20  Bernhard Herzog  <[email protected]>
798    
799            * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
800            method to write a projfile and display a busy cursor and error
801            dialogs.
802            (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
803            (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
804            (ProjFrame.__FillAvailList): Translate "<None>" too and display a
805            busy cursor while loading the user and system prj files.
806    
807    2003-10-16  Bernhard Herzog  <[email protected]>
808    
809            * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
810            ProjFile objects
811            (clear_proj_file_cache): New function to clear the cache. Mainly
812            useful for use by the test suite
813            (read_proj_file): Use the cache.
814    
815            * test/test_proj.py (TestProjFile): Clarify the doc-string
816            (ProjFileReadTests): Update doc-string
817            (ProjFileReadTests.test_get_system_proj_file): Check whether the
818            system proj files is cached.
819            (ProjFileLoadTestCase): New base class for the proj file tests
820            derived from support.FileLoadTestCase to provide some common
821            behavior.
822            (TestLoadingProjFile)
823            (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
824            (TestProjFileWithInvalidParameters.file_contents): Derive from
825            ProjFileLoadTestCase
826            (TestLoadingProjFile.test_caching): New. Test whether the cache
827            works
828    
829    2003-10-16      Silke Reimer    <[email protected]>
830    
831            * debian/*: New directory with configuration files for building a thuban
832              deb-package.
833    
834    2003-10-14  Bernhard Herzog  <[email protected]>
835    
836            * test/test_proj.py: Execute support.run_tests when run as
837            __main__ so that missing unsubscribes are detected
838            (TestProjFile.tearDown): Destroy the proj_file properly
839    
840    2003-10-14  Bernhard Herzog  <[email protected]>
841    
842            * Thuban/Model/messages.py (PROJECTION_ADDED)
843            (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
844            the ProjFile objects
845    
846            * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
847            easily send messages when the projections change
848            (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
849            when the change was successful
850    
851            * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
852            proj file messages
853            (TestProjFile.test_add_remove)
854            (TestProjFile.test_remove_non_existing)
855            (TestProjFile.test_replace)
856            (TestProjFile.test_replace_non_existing): Test whether the right
857            messages are sent
858    
859    2003-10-14  Bernhard Herzog  <[email protected]>
860    
861            * test/test_proj.py (TestProjFile.test): Refactor into several
862            tests
863            (TestProjFile.test_add_remove)
864            (TestProjFile.test_remove_non_existing)
865            (TestProjFile.test_replace)
866            (TestProjFile.test_replace_non_existing): Some of the new
867            individual test cases
868            (TestProjFileSimple): New class for the rest of the test cases
869            that came out of the refactoring
870            (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
871            derived classes don't have to
872    
873    2003-10-13  Bernhard Herzog  <[email protected]>
874    
875            Add an optional EPSG code to the projection objects and extend the
876            .proj file format accordingly.
877    
878            * Resources/XML/projfile.dtd (element projection): Add epsg
879            attribute
880    
881            * Thuban/Model/proj.py (Projection.__init__): New parameter and
882            instance variable epsg. Update doc-string
883            (Projection.EPSGCode, Projection.Label): New methods to provide
884            access to EPSG code and a label for use in dialogs
885    
886            * Thuban/Model/resource.py (ProjFileReader.start_projection)
887            (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
888            Handle the epsg code attribute when reading or writing proj files
889    
890            * Thuban/UI/projdialog.py (ProjFrame._OnSave)
891            (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
892            (ProjFrame.__FillAvailList): Use the projection's Label method to
893            get the string for the list box
894    
895            * test/test_proj.py (TestProjection.test_label)
896            (TestProjection.test_label_epsg)
897            (TestProjection.test_epsgcode_for_non_epsg_projection)
898            (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
899            for the label and EPSGCode methods
900            (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
901            (WriteProjFileTests.test_write_empty_file): Create the ProjFile
902            objects in the test cases and put the expected contents into the
903            test case methods too. Update doTestWrite accordingly
904            (TestLoadingProjFile)
905            (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
906            read tests from TestProjFile.
907            (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
908            tests are now in the new classes.
909            (sample_projfile, sample_projfile_data)
910            (sample_projfile2, sample_projfile_data2): Removed. Not used
911            anymore.
912            (TestProjFile.test_read_unreadable_file): No need to reset the
913            permissions at the end anymore since we use a unique filename
914    
915    2003-10-13  Bernhard Herzog  <[email protected]>
916    
917            * test/test_proj.py: Some more refactoring of the test cases
918            (ProjFileTest): New base class for the proj file tests.
919            (TestProjFile): Derive from ProjFileTest
920            (TestProjFile.test_read_unreadable_file)
921            (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
922            the new filename method to get a unique filename
923            (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
924            (WriteProjFileTests): New class for proj file write tests.
925            Contains the write test that were in TestProjFile originally.
926    
927    2003-10-13  Bernhard Herzog  <[email protected]>
928    
929            * test/test_proj.py (TestProjFile.testRead)
930            (TestProjFile.test_read_non_existing_file)
931            (TestProjFile.test_read_unreadable_file)
932            (TestProjFile.test_read_empty_file): Split into several methods.
933    
934    2003-10-10  Bernhard Herzog  <[email protected]>
935    
936            * Thuban/UI/sizers.py: New file with custom sizers.
937    
938            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
939            all projection type specific panels and put them into a
940            NotebookLikeSizer. This way the dialog doesn't change its size
941            when a different projection is selected
942            (ProjFrame.__init__): Rename projection_panels
943            projection_panel_defs and reuse projection_panels for a list of
944            the instantiated panels.
945            (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
946            (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
947            the panels
948            (UnknownProjPanel._DoLayout): Place the newlines in the message
949            differently to make the panel narrower.
950            (TMPanel._DoLayout): Layout the parameters in one column.
951    
952    2003-10-10  Bernhard Herzog  <[email protected]>
953    
954            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
955            that contains all the setup for the dialog's widgets, layout and
956            event handling.
957            (__): Call build_dialog to build the dialog.
958            (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
959            Their functionality is now in build_dialog
960            (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
961            (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
962            (ProjFrame.__DoOnProjChoice): Small updates due to slightly
963            different widget names and hierarchy introduced with build_dialog.
964    
965    2003-10-10  Bernhard Herzog  <[email protected]>
966    
967            * README: Fix typo.
968    
969    2003-10-09  Bernhard Herzog  <[email protected]>
970    
971            * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
972            projection is already in the list. This is *a lot* faster when
973            loading files with hundreds of projections since it saves a linear
974            search. OTOH this will allow adding the same projection to the
975            user.proj file multiple times in the projection dialog but we'll
976            deal with that later
977    
978    2003-10-09  Jan-Oliver Wagner <[email protected]>
979    
980            * devtools: New. Directory for developer tools that are not intended
981            for the regular user.
982    
983            * devtools/create_epsg.py: New. Convert the epsg file of proj into
984            a python .proj file.
985    
986    2003-10-09  Bernhard Herzog  <[email protected]>
987    
988            * test/test_proj.py
989            (TestProjection.test_get_parameter_without_equals_sign): New. Test
990            whether GetParameter handles parameters without "=" sign correctly
991    
992            * Thuban/Model/proj.py (Projection.GetParameter): Handle
993            parameters that do not contain a "=". Update the doc-string
994    
995    2003-10-08  Bernhard Herzog  <[email protected]>
996    
997            * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
998            length limit on the projname text control
999    
1000    2003-10-08  Bernhard Herzog  <[email protected]>
1001    
1002            * test/test_proj.py (TestProjection.test_get_projection_units_geo)
1003            (TestProjection.test_get_projection_units_normal): New. Tests for
1004            the Projection.GetProjectedUnits method
1005    
1006    2003-10-08  Jan-Oliver Wagner <[email protected]>
1007    
1008            * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
1009            Added missing 'val' parameter.
1010    
1011    2003-10-08  Bernhard Herzog  <[email protected]>
1012    
1013            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
1014            projection type of the currently selected projection is not known,
1015            i.e. there's no panel for it, use the UnknownProjPanel
1016            (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
1017            the actual replacing of the proj panel into the new method
1018            _show_proj_panel.
1019            (UnknownProjPanel): Add doc-string.
1020            (UnknownProjPanel._DoLayout): Insert a newline into the text so
1021            that the panel is not so wide.
1022    
1023    2003-10-08  Bernhard Herzog  <[email protected]>
1024    
1025            * Thuban/Model/resource.py (read_proj_file): Return the warnings
1026            too. Update the doc-string
1027            (get_proj_files): Removed. It wasn't used anywhere
1028            (get_system_proj_files, get_system_proj_file): Rename to
1029            get_system_proj_file and return the ProjFile object and not a list
1030            of ProjFile objects. Update the callers.
1031            (get_user_proj_files, get_user_proj_file): Rename to
1032            get_user_proj_file return the ProjFile object and not a list of
1033            ProjFile objects. Update the callers.
1034            (ProjFileReader.__init__): New instance variable for the warnings.
1035            Rename the __pf ivar to projfile. Update the methods referring to
1036            __pf
1037            (ProjFileReader.end_projection): Catch any errors raised when
1038            instantiating the projection and record that as an error. The
1039            projection will not be in the final ProjFile object.
1040            (ProjFileReader.GetWarnings): New method to return the warnings.
1041    
1042            * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
1043            show the warnings from the projfile reader
1044            (ProjFrame._OnImport): Deal with any warnings returned by
1045            read_proj_file
1046            (ProjFrame.__FillAvailList): Deal with any warnings returned by
1047            get_system_proj_file or get_user_proj_file.
1048    
1049            * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
1050            (TestProjFileWithInvalidParameters.file_contents): New test cases
1051            to test whether read_proj_file handles invalid projection
1052            parameters correctly
1053            (TestProjFile.test_get_system_proj_file): New. Simple test for
1054            resource.get_system_proj_file
1055    
1056    2003-10-07  Bernhard Herzog  <[email protected]>
1057    
1058            * test/test_derivedshapestore.py
1059            (TestDerivedShapeStoreExceptions.tearDown): Clear the session
1060            properly so that the temporary directories get deleted correctly
1061    
1062    2003-10-06  Bernhard Herzog  <[email protected]>
1063    
1064            Handle the title changes in a proper MVC way.
1065    
1066            * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
1067            canvas' TITLE_CHANGED messages
1068            (MainWindow.update_title): New. Update the main window's title
1069            (MainWindow.__SetTitle): Removed. Use update_title instead.
1070            (MainWindow.SetMap): Use update_title instead of __SetTitle
1071            (MainWindow.RenameMap): Do change the window title explicitly
1072            here. That's handled in a proper MVC way now.
1073            (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
1074            messages
1075    
1076            * Thuban/Lib/connector.py (Conduit): New class to help classes
1077            that forward messages
1078    
1079            * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
1080            (ViewPort): Derive from Conduit instead of Publisher
1081            (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
1082            when calling the inherited versions
1083            (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
1084            methods to subscribe and unsubscribe map messages
1085            (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
1086            handle the map subscriptions
1087            (ViewPort.Map, ViewPort.map_projection_changed)
1088            (ViewPort.layer_projection_changed): Add or update doc-strings
1089    
1090            * test/test_connector.py (TestPublisher.test_issue_simple): Fix
1091            typo
1092            (MyConduit): Helper class for the Conduit test.
1093            (TestConduit): Test cases for Conduit
1094    
1095            * test/test_connector.py: Use support.run_tests as main.
1096    
1097            * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
1098            the TITLE_CHANGED messages
1099            (ViewPortTest.test_forwarding_title_changed): New test to check
1100            whether the viewport forwards the map's TITLE_CHANGED messages
1101            (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
1102            after the port's because the latter may require a still functional
1103            map.
1104    
1105    2003-10-06  Bernhard Herzog  <[email protected]>
1106    
1107            * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
1108            doc-string
1109    
1110    2003-10-06  Bernhard Herzog  <[email protected]>
1111    
1112            * test/test_viewport.py (ViewPortTest.setUp)
1113            (SimpleViewPortTest.test_init_with_size): Move the test for the
1114            initial size as a constructor parameter from ViewPortTest.setUp
1115            method to a new separate test in SimpleViewPortTest.
1116    
1117    2003-10-06  Bernhard Herzog  <[email protected]>
1118    
1119            * test/test_viewport.py (MockView): New class derived from
1120            ViewPort with a mock implementation of GetTextExtent to be used in
1121            the test cases
1122            (ViewPortTest.setUp): Use MockView instead of ViewPort
1123    
1124            * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
1125            into what would be a "pure virtual function" in C++: always raise
1126            NotImplementedError. Mock implementations for test cases don't
1127            belong into the real code
1128    
1129    2003-10-02  Bernhard Herzog  <[email protected]>
1130    
1131            * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
1132            close the dbf file we create so that it's contents have been
1133            written properly.
1134    
1135            * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
1136            libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
1137            Update to shapelib 1.2.10
1138    
1139    2003-10-01  Jan-Oliver Wagner <[email protected]>
1140    
1141            * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
1142            it annoys lintian which warns about these files not being
1143            executable. The #! isn't necessary here since if you absolutely
1144            must execute them you can always say "python <filename>".
1145    
1146    2003-09-26  Bernhard Herzog  <[email protected]>
1147    
1148            * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
1149            only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
1150            is ported to a newer the import will fail, so it should be noticed
1151            immediately that this function is gone.
1152            Fixes RT#1919
1153    
1154    2003-09-26  Bernhard Herzog  <[email protected]>
1155    
1156            Add a DTD for the projection files and make thuban write valid
1157            projection files
1158    
1159            * Resources/XML/projfile.dtd: New. DTD for thuban's projection
1160            files
1161    
1162            * Thuban/Model/resource.py (ProjFileSaver.write): Use
1163            'projectionlist' as the name in the document type declaration so
1164            that it matches the element type of the root element.
1165    
1166            * test/test_proj.py (sample_projfile, sample_projfile2): Use
1167            'projectionlist' as the name in the document type declaration just
1168            as it is done now in the files thuban would write
1169            (sample_projfile, sample_projfile_data): Fix spelling of
1170            "Mercator"
1171            (TestProjFile.doTestWrite): Validate the written and the expected
1172            XML data
1173            (TestProjFile): Derive from ValidationTest so that we can run xml
1174            validation tests
1175    
1176    2003-09-24  Bernhard Herzog  <[email protected]>
1177    
1178            * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
1179            modify the list returned by map.Layers() in place since it is the
1180            actual list of layers used by the map.
1181    
1182    2003-09-23  Jan-Oliver Wagner <[email protected]>
1183    
1184            * Doc/manual/thuban-manual.xml: Added subsection to chapter
1185            Extensions to describe the extensions coming with the Thuban
1186            standard package (gns2shp and importAPR).
1187    
1188    2003-09-23  Bernhard Herzog  <[email protected]>
1189    
1190            * libraries/thuban/wxproj.cpp (project_point): if there's an
1191            inverse but no forward projection, convert to degrees after
1192            applying the inverse projection. Fixes RT#2096
1193    
1194            * test/test_wxproj.py: New. Test cases for wxproj.so. One test
1195            implicitly tests for the fix to RT#2096
1196    
1197            * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
1198            Check that the sequences have the same lengths
1199    
1200            * Resources/Projections/defaults.proj (Geographic projection): Use
1201            a much more precise value for the to_meter attribute.
1202    
1203    2003-09-22  Bernhard Herzog  <[email protected]>
1204    
1205            * test/support.py (initthuban): Make sure to unset the LANG env.
1206            var. so that tests that compare translated strings work. Solves RT
1207            #2094
1208    
1209    2003-09-22  Jan-Oliver Wagner <[email protected]>
1210    
1211            Small improvement of APR import.
1212    
1213            * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
1214            Added tests for text-ranges.
1215    
1216            * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
1217            returns a string object if the range is based on text.
1218    
1219            * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
1220            range retrieval.
1221    
1222    2003-09-22  Jan-Oliver Wagner <[email protected]>
1223    
1224            Initial version of the importAPR extension which is in
1225            experimental state.
1226    
1227            * /Extensions/importAPR/, /Extensions/importAPR/samples/,
1228            /Extensions/importAPR/test/: New directories.
1229    
1230            * /Extensions/importAPR/samples/README: New: Howto load the samples.
1231    
1232            * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
1233            file which refers to the Thuban Iceland demo data.
1234    
1235            * /Extensions/importAPR/test/README: New: Howto execute the tests.
1236    
1237            * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
1238    
1239            * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
1240            as in '.apr'-files.
1241    
1242            * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
1243            ODB Objects as in '.apr', '.avl' and other files.
1244    
1245            * /Extensions/importAPR/__init__.py: New: Init to make this
1246            directory a package.
1247    
1248            * /Extensions/importAPR/importAPR.py: New: Import a ArcView
1249            project file (.apr) and convert it to Thuban.
1250    
1251    2003-09-22  Jan-Oliver Wagner <[email protected]>
1252    
1253            * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
1254    
1255    2003-09-19  Jan-Oliver Wagner <[email protected]>
1256    
1257            * Doc/manual/thuban-manual.xml: Extended section 'Installation'
1258            with description on RPM installation and RPM binary package
1259            creation.
1260    
1261    2003-09-18  Bernhard Herzog  <[email protected]>
1262    
1263            * setup.py (data_files): Only add the mo files if the Locales
1264            directory actually exists, so that setup.py works with a fresh CVS
1265            checkout
1266    
1267    2003-09-12  Jan-Oliver Wagner <[email protected]>
1268    
1269            * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
1270            in viewport, not anymore in view
1271    
1272    2003-09-04  Jan-Oliver Wagner <[email protected]>
1273    
1274            Introducing first Extension (gns2shp).
1275    
1276            * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
1277    
1278            * Extensions/__init__.py: New. init to make this dir a package.
1279    
1280            * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
1281    
1282            * Extensions/gns2shp/test/README: New. some info on this test directory.
1283    
1284            * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
1285    
1286            * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
1287            of Shapefile from GNS text file format
1288    
1289    2003-09-03  Jan-Oliver Wagner <[email protected]>
1290    
1291            Fix/workaround for bug #2019:
1292            https://intevation.de/rt/webrt?serial_num=2019
1293    
1294            * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
1295            (IdentifyView.__init__): Added another button that allows to
1296            stop the identify mode.
1297            (IdentifyView.OnStop): New. Stops the identify mode.
1298    
1299    2003-09-03  Jan-Oliver Wagner <[email protected]>
1300    
1301            Introducing a new exception dialog that allows to exit the
1302            application immediately.
1303            This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
1304    
1305            * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
1306    
1307            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
1308            Made strings available to translations. Exchanged the simple
1309            ScrolledMessageDialog by the new ExceptionDialog.
1310    
1311    2003-09-01  Bernhard Herzog  <[email protected]>
1312    
1313            * NEWS: New. Summary of changes and release notes.
1314    
1315            * MANIFEST.in: Add NEWS
1316    
1317    2003-09-01  Bernhard Herzog  <[email protected]>
1318    
1319            * MANIFEST.in: Correct the include statement for the mo-files and
1320            include the documentation too.
1321    
1322            * setup.py (data_files): Add the .mo files
1323            (setup call): Up to version 0.9.0
1324    
1325    2003-09-01  Bernhard Herzog  <[email protected]>
1326    
1327            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
1328            parameter list to just parent and session
1329            (ChooseDBTableDialog.__set_properties): Removed. Setting the
1330            selection of empty list boxes is not allowed (and produces C++
1331            assertion errors) and the rest of the setup is better done in
1332            __init__ anyway.
1333            (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
1334            (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
1335            builtins True/False for booleans to avoid warnings from wxPython
1336    
1337            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
1338            ChooseDBTableDialog constructor parameters.
1339    
1340    2003-09-01  Bernhard Herzog  <[email protected]>
1341    
1342            * Thuban/Model/postgisdb.py
1343            (PostGISTable): Extend doc-string
1344            (PostGISTable._fetch_table_information): Set the column index
1345            correctly, pretending ignored columns don't exist.
1346    
1347            * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
1348            for postgis tables with data types not yet supported by thuban.
1349    
1350    2003-08-29  Bernhard Herzog  <[email protected]>
1351    
1352            * HOWTO-Release: Tweak item about running the tests.
1353    
1354    2003-08-29  Jan-Oliver Wagner <[email protected]>
1355    
1356            * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
1357    
1358    2003-08-29  Bernhard Herzog  <[email protected]>
1359    
1360            Add some missing parameters to projections. Proj complains about
1361            them on windows but for some reason not on Linux.
1362    
1363            * test/test_save.py (SaveSessionTest.testLayerProjection): Add
1364            missing required projection parameters
1365    
1366            * test/test_proj.py (TestProjFile.test): Add missing required
1367            projection parameters
1368    
1369            * test/test_load_0_8.py (TestLayerProjection.file_contents)
1370            (TestLayerProjection.test): Add missing required projection
1371            parameters and tests for them
1372    
1373            * test/test_load.py (TestLayerProjection.file_contents)
1374            (TestLayerProjection.test): Add missing required projection
1375            parameters and tests for them
1376    
1377            * test/test_layer.py (TestLayer.test_base_layer): Add missing
1378            required projection parameters
1379    
1380    2003-08-29  Bernhard Herzog  <[email protected]>
1381    
1382            * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
1383            access the pj_errno because directly accessing pj_errno doesn't
1384            work on windows if the proj library is in a DLL
1385    
1386            * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
1387    
1388    2003-08-28  Bernhard Herzog  <[email protected]>
1389    
1390            * test/test_proj.py: Import things from Thuban after calling
1391            initthuban
1392    
1393            * test/test_load.py (LoadSessionTest.filenames): New class
1394            variable with the filename attributes to normalize
1395            (LoadSessionTest.check_format): Pass self.filenames to
1396            sax_eventlist to normalize the filename attributes
1397    
1398            * test/xmlsupport.py: Add cvs keywords
1399            (SaxEventLister.__init__): New parameter filenames which indicates
1400            attributes that contain filenames
1401            (SaxEventLister.startElementNS): Normalize the filename attributes
1402            with os.path.normpath
1403            (sax_eventlist): New parameter filenames to pass through to
1404            SaxEventLister
1405    
1406            * test/test_derivedshapestore.py: Make this file callable as a
1407            program to execute the tests
1408            (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
1409            the session to self.session so that it gets destroyed properly
1410    
1411            * test/test_layer.py (TestLayer.tearDown): Call the session's
1412            Destroy method
1413    
1414            * test/test_map.py (TestMapBase.tearDown): Destroy self.session
1415            too if it exists
1416            (TestMapAddLayer.test_add_layer): Bind the session to self.session
1417            so that it gets destroyed properly
1418    
1419            * test/postgissupport.py (reason_for_not_running_tests): Add a
1420            test for the existence of popen2.Popen4.
1421    
1422            * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
1423            reliable way to destroy the sessions created in the test cases
1424            (SaveSessionTest.test_dbf_table): Bind the session to self.session
1425            so that it gets destroyed properly
1426            (SaveSessionTest.testLayerProjection): Bind the session to
1427            self.session so that it gets destroyed properly
1428    
1429            * test/test_session.py (UnreferencedTablesTests.tearDown): Make
1430            sure that the session is destroyed properly
1431    
1432            * test/test_shapefilestore.py: Make this callable as a program to
1433            execute the tests
1434    
1435            * test/test_scalebar.py: Remove unnecessary import of _ from
1436            Thuban
1437    
1438            * test/support.py (print_garbage_information): Call initthuban
1439            here because it may be called indirectly from test cases that test
1440            test support modules which do not use anything from thuban itself
1441            (ThubanTestProgram.runTests): Remove unnecessary debug print
1442    
1443    2003-08-28  Bernhard Herzog  <[email protected]>
1444    
1445            * Thuban/version.py (longversion): Update to 0.9
1446    
1447            * Thuban/UI/mainwindow.py: Remove some unused imports
1448    
1449            * README: Add section about required additional software. Add date
1450            and revision CVS keywords
1451    
1452            * HOWTO-Release: Add item about the translations. Add date and
1453            revision CVs keywords and change formatting to match README a bit
1454            better
1455    
1456            * po/de.po: Update for 0.9
1457    
1458            * test/README: Tweak the wording a little because many tests are
1459            not really unittest.
1460    
1461    2003-08-27  Bernhard Herzog  <[email protected]>
1462    
1463            As preparation for the 0.9 release, switch thuban files to a
1464            non-dev namespace
1465    
1466            * Thuban/Model/save.py (SessionSaver.write_session): Write files
1467            with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
1468            namespace
1469    
1470            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
1471            http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
1472    
1473            * test/test_save.py (SaveSessionTest.dtd)
1474            (SaveSessionTest.testEmptySession)
1475            (SaveSessionTest.testSingleLayer)
1476            (SaveSessionTest.testLayerProjection)
1477            (SaveSessionTest.testRasterLayer)
1478            (SaveSessionTest.testClassifiedLayer)
1479            (SaveSessionTest.test_dbf_table)
1480            (SaveSessionTest.test_joined_table)
1481            (SaveSessionTest.test_save_postgis): Update for new namespace
1482    
1483            * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
1484            (TestLayerVisibility.file_contents, TestLabels.file_contents)
1485            (TestLayerProjection.file_contents)
1486            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
1487            (TestPostGISLayer.file_contents)
1488            (TestPostGISLayerPassword.file_contents)
1489            (TestLoadError.file_contents, TestLoadError.test): Update for new
1490            namespace
1491    
1492    2003-08-27  Bernhard Herzog  <[email protected]>
1493    
1494            Make the table interface distinguish between row ids (an integer
1495            that uniquely identifies a row) and row ordinals (a simple row
1496            count from 0 to NumRows() - 1)
1497    
1498            * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
1499            (PostGISTable.RowOrdinalToId): New methods to conver between row
1500            ids and row ordinals
1501            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
1502            parameter row_is_ordinal to indicate whether the row parameter is
1503            the row id or the ordinal
1504    
1505            * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
1506            (TransientTableBase.RowOrdinalToId)
1507            (AutoTransientTable.RowIdToOrdinal)
1508            (AutoTransientTable.RowOrdinalToId): Same new methods as in
1509            PostGISTable.
1510            (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
1511            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
1512            Same new parameter as in PostGISTable.
1513    
1514            * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
1515            (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
1516            (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
1517            (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
1518            (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
1519            parameter as in PostGISTable.
1520    
1521            * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
1522            (DataTable.RowOrdinalToId): New methods to convert between row ids
1523            and row ordinals.
1524            (TableGrid.SelectRowById): New method to select a row based on its
1525            ID as opposed to its ordinal
1526            (DataTable.GetValue, TableGrid.OnRangeSelect)
1527            (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
1528            (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
1529            (LayerTableFrame.__init__): Convert between row ids and row
1530            ordinals as appropriate
1531    
1532            * test/postgissupport.py (PostGISDatabase.__init__): Add
1533            doc-string.
1534            (PostGISDatabase.initdb): The optional third item in a tuple in
1535            tables is now a (key, value) list with additional arguments to
1536            pass to upload_shapefile
1537            (upload_shapefile): New parameter gid_offset to allow gids that
1538            are not the same as the shapeids in the shapefile
1539            (PostgreSQLServer.get_default_static_data_db): Use the new
1540            gid_offset to make the gids in landmarks 1000 higher than the
1541            shapeids in the shapefile
1542    
1543            * test/test_viewport.py
1544            (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
1545            new shapeids in the landmarks table
1546    
1547            * test/test_transientdb.py
1548            (TestTransientTable.run_iceland_political_tests)
1549            (TestTransientTable.test_transient_joined_table): Add tests for
1550            the new table methods and new keywords arguments.
1551    
1552            * test/test_postgis_db.py
1553            (TestPostGISTable.test_read_row_as_dict_row_count_mode)
1554            (TestPostGISTable.test_read_value_row_count_mode)
1555            (TestPostGISTable.test_row_id_to_ordinal)
1556            (TestPostGISTable.test_row_oridnal_to_id): New test for the new
1557            table methods and the new arguments
1558            (TestPostGISShapestorePoint.test_shapes_in_region)
1559            (TestPostGISShapestorePoint.test_shape_raw_data)
1560            (TestPostGISShapestorePoint.test_shape_points)
1561            (TestPostGISShapestorePoint.test_shape_shapeid)
1562            (TestPostGISShapestorePoint.test_all_shapes)
1563            (TestPostGISTable.test_simple_query)
1564            (TestPostGISTable.test_simple_query)
1565            (TestPostGISTable.test_simple_query)
1566            (TestPostGISTable.test_read_value)
1567            (TestPostGISTable.test_read_row_as_dict): Adapt to the new
1568            shapeids in the landmarks table
1569    
1570            * test/test_memory_table.py
1571            (TestMemoryTable.test_read_row_as_dict_row_count_mode)
1572            (TestMemoryTable.test_read_value_row_count_mode)
1573            (TestMemoryTable.test_row_id_to_ordinal)
1574            (TestMemoryTable.test_row_oridnal_to_id): New test for the new
1575            table methods and the new arguments
1576    
1577            * test/test_dbf_table.py
1578            (TestDBFTable.test_read_row_as_dict_row_count_mode)
1579            (TestDBFTable.test_read_value_row_count_mode)
1580            (TestDBFTable.test_row_id_to_ordinal)
1581            (TestDBFTable.test_row_oridnal_to_id): New test for the new table
1582            methods and the new arguments
1583    
1584    2003-08-26  Bernhard Herzog  <[email protected]>
1585    
1586            * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
1587            more postgis specific but much faster method to get the bounding
1588            box
1589    
1590    2003-08-26  Bernhard Herzog  <[email protected]>
1591    
1592            * Thuban/Model/postgisdb.py (PostGISTable.Title)
1593            (PostGISShapeStore.AllShapes): Add these missing methods.
1594            (PostGISShapeStore.ShapesInRegion): No need to raise
1595            StopIteration. We can simply return
1596    
1597            * test/test_postgis_db.py (TestPostGISTable.test_title)
1598            (TestPostGISShapestorePoint.test_all_shapes): New tests for the
1599            new methods
1600    
1601    2003-08-25  Bernhard Herzog  <[email protected]>
1602    
1603            * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
1604    
1605            * test/test_postgis_db.py (PolygonTests): New class containing
1606            those tests from TestPostGISShapestorePolygon that can also be
1607            used to test MUTLIPOLYGON tables
1608            (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
1609            so derive from that
1610            (TestPostGISShapestoreMultiPolygon): New class with tests for
1611            MUTLIPOLYGON tables
1612    
1613            * test/postgissupport.py (PostGISDatabase.initdb): Allow the
1614            tables argument to have tuples with three items to override the
1615            WKT type used.
1616            (PostgreSQLServer.get_default_static_data_db): Use the above to
1617            create a polygon table with MUTLIPOLYGONs
1618            (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
1619            (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
1620            coords_to*
1621            (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
1622            (wkt_converter): New. Map WKT types to converters
1623            (upload_shapefile): New parameter force_wkt_type to use a
1624            different WKT type than the default
1625    
1626    2003-08-25  Bernhard Herzog  <[email protected]>
1627    
1628            * Thuban/UI/application.py
1629            (ThubanApplication.run_db_param_dialog): New. Suitable as a
1630            db_connection_callback. Main difference is that the dialog run
1631            from this method doesn't have a parent so it can be used even when
1632            there is no main window
1633            (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
1634            no db_connection_callback was given. This way the dialog pops up
1635            even when the .thuban file was given as a command line parameter.
1636    
1637    2003-08-25  Bernhard Herzog  <[email protected]>
1638    
1639            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
1640            before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
1641            which leads to an effectively frozen X session because the user
1642            can only interact with the dialog but the mouse is still grabbed
1643            by the canvas.
1644            Also, call the tool's Hide method before MouseLeftUp because
1645            MouseLeftUp may change the tool's coordinates.
1646    
1647    2003-08-25  Bernhard Herzog  <[email protected]>
1648    
1649            * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
1650            LoadCancelled exceptions and handle them by returning immediately.
1651    
1652    2003-08-25  Bernhard Herzog  <[email protected]>
1653    
1654            GUI part of loading sessions with postgis connections which may
1655            require user interaction to get passwords or updated parameters
1656    
1657            * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
1658            bit nucer and be more generic.
1659            (DBFrame.OnAdd): Adapt to new DBDialog interface
1660    
1661            * Thuban/UI/application.py (ThubanApplication.OpenSession): New
1662            optional parameter db_connection_callback which is passed to
1663            load_session.
1664    
1665            * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
1666            Suitable as a db_connection_callback
1667            (MainWindow.OpenSession): Use self.run_db_param_dialog as the
1668            db_connection_callback of the application's OpenSession method
1669    
1670    
1671    2003-08-25  Bernhard Herzog  <[email protected]>
1672    
1673            Basic loading of sessions containing postgis connections:
1674    
1675            * Thuban/Model/load.py (LoadError): Add doc-string
1676            (LoadCancelled): New exception class to indicate a cancelled load
1677            (SessionLoader.__init__): Add the db_connection_callback parameter
1678            which will be used by the loader to get updated parameters and a
1679            password for a database connection
1680            (SessionLoader.__init__): Add the new XML elements to the
1681            dispatchers dictionary
1682            (SessionLoader.check_attrs): Two new conversions, ascii to convert
1683            to a byte-string object and idref as a generic id reference
1684            (SessionLoader.start_dbconnection)
1685            (SessionLoader.start_dbshapesource): New. Handlers for the new XML
1686            elements
1687            (load_session): Add the db_connection_callback to pass through the
1688            SessionLoader
1689    
1690            * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
1691            New classes to test loading of sessions with postgis database
1692            connections.
1693    
1694    2003-08-25  Bernhard Herzog  <[email protected]>
1695    
1696            * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
1697            replace it and the comment with __BuildDate__ by the Source: and
1698            Id: cvs keywords as used in the other files.
1699    
1700    2003-08-25  Bernhard Herzog  <[email protected]>
1701    
1702            * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
1703            LoadError when a required attribute is missing. The code used to
1704            be commented out for some reason, but probably should have been
1705            active.
1706    
1707            * test/test_load.py (TestLoadError.test): Test the message in the
1708            LoadError too to make sure it really is about the missing
1709            attribute
1710    
1711    2003-08-22  Bernhard Herzog  <[email protected]>
1712    
1713            * test/test_save.py (SaveSessionTest.test_dbf_table)
1714            (SaveSessionTest.test_joined_table): Add XML validation tests.
1715    
1716    2003-08-22  Bernhard Herzog  <[email protected]>
1717    
1718            Implement saving a session with a postgis connection
1719    
1720            * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
1721            elements for database connections and shapestores using db
1722            connections
1723            (session): Add the dbconnections to the content model
1724    
1725            * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
1726            Write the db connections
1727            (SessionSaver.write_session): Call write_db_connections to write
1728            the connection before the data sources
1729            (SessionSaver.write_data_containers): Handle postgis shapestores
1730    
1731            * test/test_save.py (SaveSessionTest.thubanids)
1732            (SaveSessionTest.thubanidrefs): Update for new DTD
1733            (SaveSessionTest.test_save_postgis): New. Test saving a session
1734            with postgis connections
1735    
1736            * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
1737            (PostGISTable.TableName): New accessor methods for the connection
1738            and table name
1739    
1740            * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
1741            (TestPostGISTable.test_dbname): New methods to test the new
1742            PostGISConnection methods
1743    
1744    2003-08-22  Bernhard Herzog  <[email protected]>
1745    
1746            * Thuban/Model/postgisdb.py (ConnectionError): New exception class
1747            for exceptions occurring when establishing a Database connection
1748            (PostGISConnection.connect): Catch psycopg.OperationalError during
1749            connects and raise ConnectionError.
1750    
1751            * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
1752            tests for database exceptions
1753    
1754    2003-08-22  Bernhard Herzog  <[email protected]>
1755    
1756            Prepare the test suite for tests with required authentication
1757    
1758            * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
1759            variables with two predefined users/passwords, one for the admin
1760            and one for a non-privileged user.
1761            (PostgreSQLServer.createdb): Pass the admin name to initdb and add
1762            the non-privileged user to the database and set the admin password
1763            (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
1764            Better error reporting
1765            (PostgreSQLServer.connection_params)
1766            (PostgreSQLServer.connection_string): New methods to return
1767            information about how to connect to the server
1768            (PostgreSQLServer.execute_sql): New. Convenience method to execute
1769            SQL statements
1770            (PostgreSQLServer.require_authentication): Toggle whether the
1771            server requires authentication
1772            (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
1773            Add or alter users
1774            (PostGISDatabase.initdb): Pass the admin name one the
1775            subprocesses' command lines. Grant select rights on
1776            geometry_columns to everybody.
1777            (upload_shapefile): Use the admin name and password when
1778            connecting. Grant select rights on the new table to everybody.
1779    
1780            * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
1781            server's new methods to get the connection parameters.
1782    
1783            * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
1784            (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
1785            server's new methods to get the connection parameters.
1786    
1787            * test/test_postgis_db.py
1788            (TestPostGISConnection.test_gis_tables_empty)
1789            (TestPostGISConnection.test_gis_tables_non_empty)
1790            (PostGISStaticTests.setUp): Use the server's new methods to get
1791            the connection parameters.
1792    
1793    2003-08-22  Bernhard Herzog  <[email protected]>
1794    
1795            * Thuban/UI/about.py (About.__init__): Add the psycopg version.
1796    
1797            * Thuban/version.py: Add psycopg version
1798    
1799            * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
1800            version of the psycopg module
1801    
1802    2003-08-22  Bernhard Herzog  <[email protected]>
1803    
1804            * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
1805            (DBFrame.OnEdit): Removed because it's not used and wouldn't work
1806            at the moment. The functionality should probably be implemented
1807            some time, though.
1808            (DBFrame.OnRemove): Display a message if the connection can't be
1809            removed because it's still in use.
1810    
1811    2003-08-22  Jan-Oliver Wagner <[email protected]>
1812    
1813            * Thuban/UI/about.py (About.__init__): split up the huge about
1814            text into elements/lists for easier translation. This fixes bug
1815            https://intevation.de/rt/webrt?serial_num=2058
1816            Also, made some forgotten string available for the i18n.
1817    
1818    2003-08-21  Bernhard Herzog  <[email protected]>
1819    
1820            Make postgis support really optional including insensitive menu
1821            items.
1822    
1823            * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
1824            whether the postgis is supported.
1825    
1826            * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
1827            to make postgis support optional
1828    
1829            * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
1830            version of Thuban.Model.postgisdb.has_postgis_support
1831            (database_management command): Make it only sensitive if postgis
1832            is supported.
1833    
1834    2003-08-21  Jan-Oliver Wagner <[email protected]>
1835    
1836            * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
1837            (section Adding and Removing Layers): Added text and described
1838            multi-selection.
1839            (chapter Extensions): New.
1840    
1841    2003-08-21  Jan-Oliver Wagner <[email protected]>
1842    
1843            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
1844            settings to allow multiple files to load into the map.
1845            Also reduced selection to *.shp as a default.
1846    
1847    2003-08-20  Bernhard Herzog  <[email protected]>
1848    
1849            Add dialogs and commands to open database connections and add
1850            database layers.
1851    
1852            * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
1853            method to open the database connection management dialog
1854            (MainWindow.AddDBLayer): New method to add a layer from a database
1855            (_has_dbconnections): New helper function to use for sensitivity
1856            (database_management command, layer_add_db command): New commands
1857            that call the above new methods.
1858            (main_menu): Add the new commands to the menu.
1859    
1860            * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
1861            (PostGISConnection.connect): Establish the actual connection in a
1862            separate method and call it in __init__. This makes it easier to
1863            override the behavior in test cases
1864            (PostGISConnection.BriefDescription): New method to return a brief
1865            description for use in dialogs.
1866    
1867            * test/test_postgis_db.py (NonConnection): DB connection that
1868            doesn't actually connect
1869            (TestBriefDescription): New class with tests for the new
1870            BriefDescription method
1871    
1872    2003-08-19  Jan-Oliver Wagner <[email protected]>
1873    
1874            Moved anything from extensions to libraries.
1875    
1876            * libraries: New.
1877    
1878            * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
1879    
1880            * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
1881            Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
1882            been moved here from thuban/extensions/pyprojection/
1883            See there in the Attic for the older history.
1884    
1885            * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
1886            dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
1887            shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
1888            have been moved here from thuban/extensions/pyshapelib/
1889            See there in the Attic for the older history.
1890    
1891            * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
1892            files have been moved here from thuban/extensions/shapelib/
1893            See there in the Attic for the older history.
1894    
1895            * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
1896            gdalwarp.cpp, wxproj.cpp: These files have been moved here from
1897            thuban/extensions/thuban/
1898            See there in the Attic for the older history.
1899    
1900            * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
1901    
1902            * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
1903            gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
1904    
1905            * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
1906            Moved to libraries/shapelib.
1907    
1908            * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
1909            shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
1910            ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
1911            Moved to libraries/pyshapelib.
1912    
1913            * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
1914            LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
1915            Moved to libraries/pyprojection.
1916    
1917            * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
1918    
1919            * extensions: Removed.
1920    
1921    2003-08-19  Bernhard Herzog  <[email protected]>
1922    
1923            * test/test_viewport.py (ViewPortTest): We don't use the
1924            facilities of FileTestMixin so don't derive from it.
1925            (TestViewportWithPostGIS): New class with tests for using a
1926            viewport on a map with postgis layers.
1927    
1928    2003-08-19  Bernhard Herzog  <[email protected]>
1929    
1930            Add the db connection management to the session.
1931    
1932            * Thuban/Model/session.py (Session.__init__): New instance
1933            variable db_connections
1934            (Session.AddDBConnection, Session.DBConnections)
1935            (Session.HasDBConnections, Session.CanRemoveDBConnection)
1936            (Session.RemoveDBConnection): New methods to manage and query the
1937            db connections managed by the session
1938            (Session.OpenDBShapeStore): New method to open a shapestore from a
1939            db connection
1940    
1941            * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
1942            messages for the db connection handling in the session
1943    
1944            * test/test_postgis_session.py: New. test cases for the session's
1945            db connection handling with postgis connections
1946    
1947    2003-08-19  Bernhard Herzog  <[email protected]>
1948    
1949            Add very basic postgis database support and the corresponding test
1950            cases. The test cases require a PostgreSQL + postgis installation
1951            but no existing database. The database will be created
1952            automatically by the test cases
1953    
1954            * test/README: Add note about skipped tests and the requirements
1955            of the postgis tests.
1956    
1957            * Thuban/Model/postgisdb.py: New. Basic postgis database support.
1958    
1959            * test/test_postgis_db.py: New. Test cases for the postgis
1960            support.
1961    
1962            * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
1963            format
1964    
1965            * test/test_wellknowntext.py: New. Test cases for the
1966            wellknowntext parser
1967    
1968            * test/postgissupport.py: New. Support module for tests involving
1969            a postgis database.
1970    
1971            * test/support.py (execute_as_testsuite): Shut down the postmaster
1972            if it's still running after the tests
1973    
1974            * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
1975            well known text format
1976    
1977    2003-08-19  Jan-Oliver Wagner <[email protected]>
1978    
1979            * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
1980            message dialog.
1981    
1982    2003-08-18  Bernhard Herzog  <[email protected]>
1983    
1984            * test/support.py (ThubanTestResult.printErrors): Indent the
1985            reason for the skips in the output to make it a bit more readable.
1986            (execute_as_testsuite): New helper function to run a test suite
1987            and print some more information.
1988            (run_tests): Use execute_as_testsuite to run the tests
1989    
1990            * test/runtests.py (main): Use execute_as_testsuite to run the
1991            tests
1992    
1993    2003-08-18  Bernhard Herzog  <[email protected]>
1994    
1995            Fix some bugs in Thuban and the test suite that were uncovered by
1996            changes introduced in Python 2.3:
1997    
1998            * Thuban/Model/table.py (DBFTable.__init__): Make sure the
1999            filename is an absolute name
2000    
2001            * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
2002            filename is an absolute name
2003    
2004            * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
2005            unique filename to save to and use the correct relative filename
2006            in the expected output.
2007            (SaveSessionTest.test_dbf_table): Use the correct relative
2008            filename in the expected output.
2009    
2010            * test/test_layer.py (TestLayer.test_raster_layer): Update the
2011            test to check whether the filename is absolute.
2012    
2013    2003-08-18  Jan-Oliver Wagner <[email protected]>
2014    
2015            * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
2016    
2017    2003-08-15  Bernhard Herzog  <[email protected]>
2018    
2019            Change the way shapes are returned by a shape store. The
2020            ShapesInRegion method returns an iterator over actual shape
2021            objects instead of a list of shape ids.
2022    
2023            * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
2024            id.
2025            (ShapefileStore.ShapesInRegion): Return an iterator over the
2026            shapes which yields shape objects instead of returning a list of
2027            shape ids
2028            (ShapefileStore.AllShapes): New. Return an iterator over all
2029            shapes in the shape store
2030            (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
2031    
2032            * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
2033            doc-string.
2034    
2035            * Thuban/UI/baserenderer.py
2036            (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
2037            layer_shapes and make it return an iterator containg shapes
2038            instead of a list of ids.
2039            (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
2040            layer_shapes() change
2041    
2042            * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
2043            (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
2044    
2045            * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
2046            changes in the ShapesInRegion return value.
2047            (ViewPort._get_hit_tester): Remove commented out code
2048    
2049            * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
2050            new return value.
2051            (SimpleShapeStore.AllShapes): New. Implement this method too.
2052    
2053            * test/test_layer.py (TestLayer.test_arc_layer)
2054            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
2055            (TestLayer.test_point_layer_with_projection)
2056            (TestLayer.test_derived_store): Adapt to changes in the
2057            ShapesInRegion return value.
2058    
2059            * test/test_shapefilestore.py
2060            (TestShapefileStoreArc.test_shapes_in_region)
2061            (TestShapefileStorePolygon.test_shapes_in_region)
2062            (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
2063            in the ShapesInRegion return value.
2064            (TestShapefileStorePoint.test_all_shapes)
2065            (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
2066            methods
2067    
2068            * test/test_derivedshapestore.py
2069            (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
2070            the ShapesInRegion return value.
2071            (TestDerivedShapeStore.test_all_shapes)
2072            (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
2073            methods
2074    
2075    2003-08-15  Bernhard Herzog  <[email protected]>
2076    
2077            Make the renderers deal correctly with raw vs. python level
2078            representation of shape geometries
2079    
2080            * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
2081            Return a flag useraw in addition to the callable and the parameter
2082            to indicate whether the callable can deal with the raw shape data
2083            or uses the higher level python lists of coordinates. The callable
2084            now should accept either the raw data or the return value of the
2085            shape's Points() method.
2086            (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
2087            change
2088            (BaseRenderer.projected_points): Instead of the shape id use the
2089            points list as parameter.
2090            (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
2091            (BaseRenderer.draw_point_shape): Adapt to projected_points()
2092            change and accept the points list as parameter instead of the
2093            shape id.
2094    
2095            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
2096            the useraw flag as required by the BaseRenderer
2097            (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
2098            changes.
2099    
2100            * test/test_baserenderer.py
2101            (TestBaseRenderer.test_point_with_classification): New test for
2102            rendering a map with classifications.
2103    
2104    2003-08-15  Bernhard Herzog  <[email protected]>
2105    
2106            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
2107            (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
2108            (ViewPort._get_hit_tester, ViewPort.projected_points)
2109            (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
2110            (ViewPort._find_label_at): Split the find_shape_at method into
2111            several new methods and use the functions in the hit-test module.
2112    
2113            * Thuban/UI/hittest.py: New module with Python-level hit-testing
2114            functions
2115    
2116            * test/test_hittest.py: New. Test for the new hittest module
2117    
2118    2003-08-15  Bernhard Herzog  <[email protected]>
2119    
2120            * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
2121            projection to all corners of the bounding box to get a better
2122            approximation of the projected bounding box
2123    
2124            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
2125            New. Test coordinate handling of a layer with a projection.
2126            Catches the bug fixed in Layer.ShapesInRegion
2127    
2128    2003-08-15  Bernhard Herzog  <[email protected]>
2129    
2130            Move some of the mock objects in test_baserenderer into their own
2131            module so they can easily be used from other tests
2132    
2133            * test/mockgeo.py: New test helper module with some mock objects
2134            for geometry related things like shapes, shapestores and
2135            projections.
2136    
2137            * test/test_mockgeo.py: New. Tests for the new helper module
2138    
2139            * test/test_baserenderer.py: Some of the mock-objects are in
2140            mockgeo now.
2141    
2142    2003-08-12  Jan-Oliver Wagner <[email protected]>
2143    
2144            * Thuban/UI/about.py (About.__init__): Added Bj�rn Broscheit.
2145    
2146    2003-08-12  Bernhard Herzog  <[email protected]>
2147    
2148            * po/de.po: New. German translations by Bjoern Broscheit
2149    
2150    2003-08-12  Bernhard Herzog  <[email protected]>
2151    
2152            * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
2153            strings have to be one string literal.
2154    
2155    2003-08-11  Bernhard Herzog  <[email protected]>
2156    
2157            * test/support.py (FloatComparisonMixin.assertPointListEquals):
2158            New. This method was used in various derived classes, but it's
2159            better to have it here.
2160    
2161            * test/test_shapefilestore.py
2162            (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
2163            FloatComparisonMixin
2164    
2165            * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
2166            It's now in FloatComparisonMixin
2167    
2168            * test/test_derivedshapestore.py
2169            (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
2170            in FloatComparisonMixin
2171    
2172    2003-08-11  Bernhard Herzog  <[email protected]>
2173    
2174            * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
2175            error message
2176    
2177    2003-08-08  Jan-Oliver Wagner <[email protected]>
2178    
2179            * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
2180            with version number.
2181            Changed title to reflect version number of Thuban.
2182    
2183    2003-08-08  Jan-Oliver Wagner <[email protected]>
2184    
2185            * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
2186            the list corresponds to the "About" web page.
2187    
2188    2003-08-08  Bernhard Herzog  <[email protected]>
2189    
2190            * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
2191            Make sure translated strings are recognized as one string literal.
2192    
2193            * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
2194            Make sure translated strings are recognized as one string literal.
2195    
2196            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
2197            translated strings are recognized as one string literal.
2198    
2199            * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
2200            sure translated strings are recognized as one string literal.
2201    
2202    2003-08-07  Bernhard Herzog  <[email protected]>
2203    
2204            * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
2205            Simply delegates to the original shapestore.
2206    
2207            * test/test_derivedshapestore.py
2208            (TestDerivedShapeStore.test_raw_format): New. Test case for
2209            DerivedShapeStore.RawShapeFormat
2210    
2211    2003-08-07  Bernhard Herzog  <[email protected]>
2212    
2213            Add raw data interface to shape objects.
2214    
2215            * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
2216            class to ShapefileShape which now holds shapefile specific
2217            information.
2218            (ShapefileShape.compute_bbox): Simplified to not cache any
2219            information. The way this method is used that shouldn't matter
2220            performance wise.
2221            (ShapefileShape.RawData): New. Return the shapeid which is the raw
2222            data format for shapes from shapefiles.
2223            (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
2224            in the shape objects returned by a shapestore. For a
2225            ShapefileStore this is always RAW_SHAPEFILE.
2226            (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
2227            method.
2228    
2229            * test/test_shapefilestore.py
2230            (TestShapefileStore.test_raw_format): New test to test the raw
2231            format feature of shapes.
2232    
2233            * Thuban/Model/layer.py: Remove the unused import of Shape from
2234            data. It was only there for interface compatibility but it's not
2235            used inside of Thuban and the generic Shape class has gone away.
2236    
2237            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
2238            the raw data format and only use an optimized version of its a
2239            shapefile.
2240    
2241    2003-08-07  Bernhard Herzog  <[email protected]>
2242    
2243            * test/test_baserenderer.py (SimpleShape): Shape class for the
2244            tests.
2245            (SimpleShapeStore.Shape): Use SimpleShape instead of
2246            Thuban.Model.data.Shape to make the tests independed of the coming
2247            changes.
2248    
2249    2003-08-07  Bernhard Herzog  <[email protected]>
2250    
2251            * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
2252            (ThubanTestProgram): New classes that extend the respective
2253            classes from unittest. These new version support skipping tests
2254            under certain expected conditions. In the Thuban test suite we
2255            uses this for tests that require the optional gdal support.
2256            (run_tests): Use ThubanTestProgram instead of the unittest.main()
2257    
2258            * test/runtests.py (main): Use the new ThubanTestRunner instead of
2259            the normal one from unittest
2260    
2261            * test/test_layer.py (TestLayer.test_raster_layer): If this test
2262            is not run because gdal support isn't available report this to the
2263            runner.
2264    
2265            * test/test_baserenderer.py
2266            (TestBaseRenderer.test_raster_no_projection): Do not run this test
2267            if gdal support isn't available and report this to the runner.
2268    
2269    2003-08-06  Bernhard Herzog  <[email protected]>
2270    
2271            Rearrange the renderers a bit, partly in preparation for changes
2272            required for the postgis merge, partly to make it more testable.
2273            Also make the representation of coordinates in Shapes more
2274            consistent.
2275    
2276            * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
2277            this class is now in BaseRenderer. This class is now practically
2278            only a specialization of BaseRenderer for rendering to an actual
2279            wx DC.
2280            (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
2281            to get the shapetype specific rendering functions.
2282    
2283            * Thuban/UI/baserenderer.py: New file with the basic rendering
2284            logic. The code in this file is completely independend of wx.
2285            (BaseRenderer): Class with the basic rendering logic
2286    
2287            * test/test_baserenderer.py: New. Test cases for BaseRenderer
2288    
2289            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
2290            error_on_redraw to guard agains endless loops and stack overflows
2291            when there's a bug in the rendering code that raises exceptions.
2292            (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
2293            rendering into a separate method _do_redraw so that error handling
2294            is a bit easier. When an exception occurs, set error_on_redraw to
2295            true. When it's true on entry to OnIdle do nothing and return
2296            immediately.
2297    
2298            * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
2299            Shape object will always have the coordinates as a list of list of
2300            coordinate pairs (tuples).
2301            (Shape.compute_bbox): Adapt to new representation.
2302    
2303            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
2304            (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
2305            Shape objects.
2306    
2307            * test/test_shapefilestore.py
2308            (ShapefileStoreTests.assertFloatTuplesEqual)
2309            (ShapefileStoreTests.assertPointListEquals): Rename to
2310            assertPointListEquals and change purpose to checking equality of
2311            the lists returned by Shape.Points().
2312            (TestShapefileStoreArc.test_shape)
2313            (TestShapefileStorePolygon.test_shape)
2314            (TestShapefileStorePoint.test_shape): Use the new
2315            assertPointListEquals instead of assertFloatTuplesEqual
2316    
2317            * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
2318            (TestLayer.assertPointListEquals): Rename to assertPointListEquals
2319            and change purpose to checking equality of the lists returned by
2320            Shape.Points().
2321            (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
2322            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
2323            (TestLayer.test_derived_store): Use the new assertPointListEquals
2324            instead of assertFloatTuplesEqual
2325    
2326            * test/test_derivedshapestore.py
2327            (TestDerivedShapeStore.assertFloatTuplesEqual)
2328            (TestDerivedShapeStore.assertPointListEquals): Rename to
2329            assertPointListEquals and change purpose to checking equality of
2330            the lists returned by Shape.Points().
2331            (TestDerivedShapeStore.test_shape): Use the new
2332            assertPointListEquals instead of assertFloatTuplesEqual
2333    
2334    2003-08-06  Jan-Oliver Wagner <[email protected]>
2335    
2336            * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
2337            a bounding box. A dialog is raised in case, no bounding box
2338            is found. This fixes bug #2043:
2339            https://intevation.de/rt/webrt?serial_num=2043
2340    
2341    2003-08-05  Bernhard Herzog  <[email protected]>
2342    
2343            * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
2344            object look like a Color instantiation. Formerly it looked like a
2345            tuple.
2346    
2347            * test/test_color.py (TestColor.test_repr)
2348            (TestColor.test_equality, TestColor.test_inequality): New. test
2349            some more apects of the Color class
2350            (TestTransparent.test_repr, TestTransparent.test_hex)
2351            (TestTransparent.test_equality): New. Test cases for the
2352            Transparent object.
2353    
2354    2003-08-04  Jan-Oliver Wagner <[email protected]>
2355    
2356            * Doc/manual/thuban-manual.xml: a number of small improvements.
2357            The resulting file is the version submitted for GREAT-ER II.
2358    
2359    2003-08-01  Bernhard Herzog  <[email protected]>
2360    
2361            * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
2362            Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
2363            Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
2364    
2365            * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
2366            (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
2367            (ThubanEndBusyCursor): Add doc-strings
2368    
2369    2003-08-01  Bernhard Herzog  <[email protected]>
2370    
2371            First step towards PostGIS integration. More abstraction by movin
2372            more code from the layer to the shapestore. More methods of the
2373            layer are now simply delegated to the equivalent method of the
2374            shapestore. The SHAPETYPE_* constants are now in data not in
2375            layer.
2376    
2377            * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
2378            (SHAPETYPE_POINT, Shape): Move these constants and classes from
2379            layer.py to data.py
2380            (ShapefileStore.__init__): More Initialization for the new methods
2381            and functionality.
2382            (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
2383            (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
2384            (ShapefileStore.Shape): New methods that were formerly implemented
2385            in the layer.
2386            (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
2387            (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
2388            (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
2389            equivalents of the new shape methods. These versions are simply
2390            delegated to the original shapstore.
2391    
2392            * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
2393            (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
2394            (Layer.SetShapeStore): Removed the initializatin of instance
2395            variables that were needed for the stuff that's now in
2396            ShapefileStore
2397            (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
2398            (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
2399            shapestore.
2400    
2401            * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
2402            Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
2403            instead of layer.
2404    
2405            * test/test_shapefilestore.py: New. Tests for ShapefileStore.
2406    
2407            * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
2408    
2409            * test/test_layer.py: Import the SHAPETYPE_* constants from data
2410            instead of layer.
2411            (TestLayer.test_derived_store): Remove the test for the exception
2412            when instantiating the DerivedShapeStore with an incompatible
2413            table which is now in test_derivedshapestore.py. Add some more
2414            tests of the layer methods to determine whether they work for a
2415            DerivedShapeStore as well.
2416    
2417    2003-07-31  Jonathan Coles   <[email protected]>
2418    
2419            * Doc/manual/thuban-manual.xml: Fix the list of required packages
2420            by just listing the name and where they can be found.
2421    
2422    2003-07-31  Frank Koormann   <[email protected]>
2423    
2424            * Doc/manual/thuban-manual.xml:
2425            Changed the screenshot elements to figure.
2426            Changed some variablelist elements to itemizedlist.
2427            Added section on GDAL formats.
2428    
2429    2003-07-31  Jonathan Coles   <[email protected]>
2430    
2431            * Doc/manual/thuban-manual.xml: Added a few sentences about
2432            the Fix Border Color option when generating classes.
2433    
2434    2003-07-30  Jonathan Coles   <[email protected]>
2435    
2436            * Thuban/Model/classgen.py: Add docstrings. Rename specific
2437            Ramp instances to use lower_case_style.
2438    
2439            * Thuban/UI/classgen.py: Use renamed Ramp instances.
2440            
2441            * Thuban/UI/classifier.py: Add docstrings.
2442    
2443            * Thuban/UI/dock.py: Add docstrings.
2444    
2445            * test/test_classgen.py: Use renamed Ramp instances.
2446    
2447    2003-07-30  Bernhard Herzog  <[email protected]>
2448    
2449            * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
2450            was never used in Thuban.
2451    
2452    2003-07-30  Bernhard Herzog  <[email protected]>
2453    
2454            * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
2455            method directly instead of going through the transient_table
2456            method. This faster because transient_table may force the copy of
2457            a DBF file into the transient database and setting a table's title
2458            doesnm't affect the title of the associated transient table, so
2459            this fixes RT #2042
2460    
2461            * Thuban/UI/main.py (__version__): Don't import the already
2462            removed show_exception_dialog.
2463    
2464    2003-07-29  Jonathan Coles   <[email protected]>
2465    
2466            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
2467            Put back this method and remove the equivalent function since we
2468            are setting the exception hook from within this class (OnInit).
2469    
2470    2003-07-29  Jonathan Coles   <[email protected]>
2471    
2472            * Doc/manual/images/5_2_custom_ramp.png,
2473            Doc/manual/images/5_2_quantiles.png,
2474            Doc/manual/images/5_2_uniform_dist.png,
2475            Doc/manual/images/5_2_unique_values.png,
2476            Doc/manual/images/8_int_error.png: New screen shots.
2477    
2478            * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
2479            some points, and added more screen shots.
2480    
2481    2003-07-29  Bernhard Herzog  <[email protected]>
2482    
2483            * Thuban/Model/data.py: Remove the now unused import of warnings
2484    
2485    2003-07-29  Bernhard Herzog  <[email protected]>
2486    
2487            * Thuban/Model/data.py (SimpleStore): Removed. This class has been
2488            deprecated since before the 0.8 release and isn't used in Thuban
2489            itself anymore.
2490    
2491            * Thuban/Model/transientdb.py: Remove some unnecessary imports
2492    
2493    2003-07-29  Jonathan Coles   <[email protected]>
2494    
2495            * Thuban/UI/application.py (ThubanApplication.OnInit): set the
2496            python exception hook here so that we are sure to catch any
2497            Thuban exception that happen during initialization.
2498    
2499            * Thuban/UI/main.py (main): Don't set the exception hook here,
2500            it will get set in ThubanApplication.OnInit.
2501    
2502    2003-07-29  Jonathan Coles   <[email protected]>
2503                                                                                
2504            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
2505            Removed and called it show_exception_dialog() so that the exception
2506            handler can be set before the class is created.
2507                                                                                
2508            * Thuban/UI/main.py (main): Install the exception handler before
2509            a ThubanApplication is created.
2510                                                                                    
2511    2003-07-29  Bernhard Herzog  <[email protected]>
2512    
2513            * po/it.po: New. Italian translation by Maurizio Napolitano
2514    
2515            * po/ru.po: New. Russian translation by Alex Shevlakov
2516    
2517    2003-07-29  Frank Koormann   <[email protected]>
2518    
2519            * Doc/manual/thuban-manual.xml: Extended section on supported
2520            projections.
2521            
2522    2003-07-29  Frank Koormann   <[email protected]>
2523    
2524            * Doc/manual/thuban-manual.xml: gaspell-checked.
2525    
2526    2003-07-29  Jonathan Coles   <[email protected]>
2527    
2528            * Doc/manual/images/3_5_legend.png: Added border to improve look
2529            on white background.
2530    
2531    2003-07-29  Jonathan Coles   <[email protected]>
2532    
2533            * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
2534            descriptions for the legend toolbar.
2535    
2536            * Doc/manual/images/4_2_raster_layer_properties.png: Removed
2537            cursor from dialog box.
2538    
2539    2003-07-28  Jonathan Coles   <[email protected]>
2540    
2541            * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
2542    
2543            * Doc/manual/images/2_4_session_tree.png,
2544            Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
2545            Doc/manual/images/4_2_layer_properties.png,
2546            Doc/manual/images/4_2_raster_layer_properties.png,
2547            Doc/manual/images/5_3_genclass.png,
2548            Doc/manual/images/5_classification.png,
2549            Doc/manual/images/6_projection.png,
2550            Doc/manual/images/7_1_table_view.png,
2551            Doc/manual/images/7_2_5_join.png: New screenshots.
2552    
2553    2003-07-24  Jonathan Coles   <[email protected]>
2554    
2555            * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
2556    
2557    2003-07-24  Jonathan Coles   <[email protected]>
2558    
2559            * Doc/manual/thuban-manual.xml: Added EPS images and wrote
2560            chapter on Layer Management.
2561    
2562            * Doc/manual/Makefile: New. Makefile to generate all formats for the
2563            manual and images.
2564    
2565    2003-07-24  Bernhard Herzog  <[email protected]>
2566    
2567            * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
2568            it annoys lintian which warns about these files not being
2569            executable. The #! isn't necessary here since if you absolutely
2570            must execute them you can always say "python <filename>".
2571    
2572            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
2573            superfluous code to set brush and pen for point shapes
2574    
2575            * Thuban/UI/viewport.py: Remove commented out code that wouldn't
2576            belong in viewport anyway
2577    
2578    2003-07-24  Frank Koormann   <[email protected]>
2579    
2580            * Doc/manual/thuban-manual.xml: Added section on table management.
2581    
2582    2003-07-24  Bernhard Herzog  <[email protected]>
2583    
2584            * test/runtests.py (main): Recognize the long "verbose" option
2585            correctly.
2586    
2587    2003-07-22  Jonathan Coles   <[email protected]>
2588    
2589            * Doc/manual/thuban-manual.xml: Continue to write first revision
2590            of the manual.
2591    
2592            * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
2593            with Begin/EndDrawing() calls to ensure we aren't doing to
2594            many updates to the dc during rendering.
2595            (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
2596            a pen and brush argument so they need to be passed to the function.
2597    
2598            * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
2599            Calculates the minimum and maximum scale values. Factored out
2600            of set_view_transform so that it could be used to zoom all the
2601            way into a single point.
2602            (ViewPort.set_view_transform): Call calc_min_max_scales().
2603            (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
2604            if only a single point is selected.
2605    
2606            * Doc/manual/images/1_2_legend_close.png,
2607            Doc/manual/images/1_2_legend_dock.png,
2608            Doc/manual/images/1_2_mainwindow.png,
2609            Doc/manual/images/1_2_mainwindow.ps,
2610            Doc/manual/images/1_2_mainwindow.sk,
2611            Doc/manual/images/3_2_fullextent.png,
2612            Doc/manual/images/3_2_fulllayerextent.png,
2613            Doc/manual/images/3_2_fullshapeextent.png,
2614            Doc/manual/images/3_2_pan.png,
2615            Doc/manual/images/3_2_zoomin.png,
2616            Doc/manual/images/3_2_zoomout.png,
2617            Doc/manual/images/3_3_identify.png,
2618            Doc/manual/images/3_3_label.png,
2619            Doc/manual/images/3_5_invisible.png,
2620            Doc/manual/images/3_5_movedown.png,
2621            Doc/manual/images/3_5_moveup.png,
2622            Doc/manual/images/3_5_props.png,
2623            Doc/manual/images/3_5_tobottom.png,
2624            Doc/manual/images/3_5_totop.png,
2625            Doc/manual/images/3_5_visible.png: New. Images for the documentation.
2626    
2627    2003-07-18  Bernhard Herzog  <[email protected]>
2628    
2629            * Thuban/UI/messages.py (MAP_REPLACED): New message.
2630    
2631            * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
2632            after the new map has been assigned
2633    
2634            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
2635            Delegate MAP_REPLACED to the canvas too
2636            (MainWindow.prepare_new_session): Removed. Thanks to the new
2637            MAP_REPLACED message it's no longer needed
2638            (MainWindow.OpenSession, MainWindow.NewSession):
2639            prepare_new_session has been removed.
2640    
2641            * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
2642            MAP_REPLACED so that we can close the dialog if a new map is set.
2643            (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
2644            (Classifier.map_replaced): Handle MAP_REPLACED by closing the
2645            dialog
2646    
2647            * test/test_viewport.py (SimpleViewPortTest)
2648            (SimpleViewPortTest.test_default_size): Add doc-strings
2649            (ViewPortTest.setUp): Bind map to self.map so we can use it in
2650            tests. Subscribe to MAP_REPLACED messages too.
2651            (ViewPortTest.tearDown): No need to explicitly unsubscribe
2652            (ViewPortTest.test_set_map): New test for the SetMap method.
2653    
2654    2003-07-18  Bernhard Herzog  <[email protected]>
2655    
2656            * test/test_viewport.py (SimpleViewPortTest.test_default_size):
2657            Move this test from ViewPortTest.setUp to this new separate test
2658            case. setUp is not the place for the actual tests.
2659            (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
2660            more of the test from setUp to the new test test_inital_settings.
2661            (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
2662            (ViewPortTest.test_proj_conv): Split test_proj_conv into
2663            test_win_to_proj and test_proj_to_win and make the tests easier to
2664            understand
2665            (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
2666            (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
2667            (ViewPortTest.test_unprojected_rect_around_point)
2668            (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
2669            Reformat to increase readability.
2670    
2671    2003-07-18  Bernhard Herzog  <[email protected]>
2672    
2673            * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
2674    
2675    2003-07-18  Bernhard Herzog  <[email protected]>
2676    
2677            * test/runtests.py: The test suite can now be run without an X
2678            connection. To make sure this remains true, remove the DISPLAY
2679            environment variable so that an error occurs if the wxGTK is
2680            imported accidentally
2681    
2682    2003-07-18  Bernhard Herzog  <[email protected]>
2683    
2684            * Thuban/UI/viewport.py: Remove unused imports
2685    
2686            * Thuban/UI/view.py: Remove unused imports
2687    
2688    2003-07-18  Bernhard Herzog  <[email protected]>
2689    
2690            * test/test_export.py Remove unused imports. The OutputTransform
2691            function is now in viewport.py and is called output_transform
2692            (TestScalebar.test_output_transform)
2693            (TestScalebar.test_OutputTransform): Renamed to
2694            test_output_transform and updated to use output_transform instead
2695            of OutputTransform
2696    
2697            * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
2698            renamed.
2699            (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
2700            renamed to output_transform
2701    
2702            * Thuban/UI/viewport.py (OutputTransform, output_transform):
2703            Rename to output_transform
2704    
2705    2003-07-18  Bernhard Herzog  <[email protected]>
2706    
2707            * Thuban/Model/layer.py (Layer.__init__): Rename
2708            classificationField to classificatin_column and init it here so
2709            that it can be used in SetClassificationColumn
2710            (Layer.GetClassificationColumn, Layer.GetClassificationField):
2711            Rename to GetClassificationColumn.
2712            (Layer.SetClassificationColumn, Layer.SetClassificationField):
2713            Rename to SetClassificationColumn and issue a LAYER_CHANGED
2714            message if the column changes.
2715            (Layer._classification_changed, Layer.ClassChanged): Rename to
2716            _classification_changed. Update the callers.
2717            (Layer.SetShapeStore): Further field->column renames.
2718    
2719            * Thuban/Model/load.py (SessionLoader.start_classification)
2720            (SessionLoader.start_clpoint): Updates because of
2721            field->column method name changes in the Layer class
2722    
2723            * Thuban/Model/save.py (SessionSaver.write_classification): Updates
2724            because of field->column method name changes in the Layer class
2725    
2726            * Thuban/UI/classifier.py (Classifier.__init__)
2727            (Classifier._OnTry, Classifier._OnRevert): Updates because of
2728            field->column method name changes in the Layer class
2729    
2730            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
2731            because of field->column method name changes in the Layer class
2732    
2733            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
2734            of field->column method name changes in the Layer class
2735    
2736            * test/test_save.py (SaveSessionTest.testClassifiedLayer)
2737            (SaveSessionTest.testClassifiedLayer): Update because of
2738            field->column method name changes in the Layer class
2739    
2740            * test/test_layer.py (SetShapeStoreTests.setUp)
2741            (SetShapeStoreTests.test_sanity): Update because of field->column
2742            method name changes in the Layer class
2743            (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
2744            (TestLayerModification.test_sanity)
2745            (TestLayerModification.test_initial_settings): remove unsued code
2746            and rename to test_sanity.
2747            (TestLayerModification.test_set_classification): New test for
2748            SetClassification and SetClassificationField.
2749    
2750    2003-07-18  Bernhard Herzog  <[email protected]>
2751    
2752            * test/test_classgen.py (TestFixedRamp.test): Extend test to check
2753            the non-fixed values as well. The old test would have accepted a
2754            fixed ramp that only returnes the fixed properties
2755    
2756    2003-07-17  Jonathan Coles   <[email protected]>
2757    
2758            * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
2759            shots for the manual. The XCF file is the source image and
2760            has additional layers to support changes.
2761    
2762            * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
2763    
2764            * Thuban/UI/classifier.py (Classifier.__BuildClassification):
2765            Return both the new class and the field name.
2766    
2767            * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
2768            fit the map to the window as this changes any zoom level that
2769            the user may have set.
2770    
2771    2003-07-16  Jonathan Coles   <[email protected]>
2772    
2773            * Thuban/Model/classgen.py (generate_singletons,
2774            generate_uniform_distribution, generate_quantiles): Remove
2775            fixes parameter, but maintain the same functionality by having
2776            the calling function pass a FixedRamp object for the ramp.
2777            (FixedRamp): New. Adapts a ramp to have fixed property values.
2778    
2779            * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
2780            (Classification): Inherit from Publisher.
2781            (Classification.__init__): Remove the layer parameter.
2782            Classifications no longer need to have a parent layer.
2783            (Classification.GetField, Classification.GetFieldType,
2784            Classification.SetFieldInfo): Removed. The field name is stored
2785            in the layer, and the type can be retreived by calling
2786            Layer.GetFieldType().
2787            (Classification._set_layer, Classification.GetLayer): Removed.
2788            Classifications no longer have a parent layer.
2789    
2790            * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
2791            classification.
2792            (Layer.SetShapeStore): Reset the classification first while
2793            we still have the old shape store to work with.
2794            (Layer.GetClassificationField, Layer.SetClassificationField):
2795            New. Method for getting/setting the field to classify on.
2796            (Layer.SetClassification): Simplified now that the layer
2797            simply has to hold a reference to the classification and not
2798            tell the classification who owns it.
2799            Fixes RTbug #2023.
2800    
2801            * Thuban/Model/load.py (SessionLoader.start_classification):
2802            Set the field name on the layer, not the classification.
2803    
2804            * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
2805            classification is modified.
2806    
2807            * Thuban/Model/save.py (SessionSaver.write_classification):
2808            Get the field name and type from the layer.
2809    
2810            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
2811            parameter records to rows and add docstring. Fixes RTbug #1997.
2812    
2813            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
2814            ramp when we need to fix certain values of a ramp rather than
2815            using the old fixes parameter. Fixes RTbug #2024.
2816    
2817            * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
2818            parameter.
2819            (ClassTable.Reset): Add fieldType parameter and use it, rather
2820            than asking the classification.
2821            (Classifier.__init__): Remember the original class's field
2822            and ask the layer for the field type, rather than the classification.
2823            (Classifier.__SetGridTable): Retrieve the field and field type
2824            for the table because they are not in the classification.
2825            (Classifier._OnTry, Classifier._OnRevert): Set the classification
2826            field on the layer in addition to the classification itself.
2827    
2828            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
2829            classification field from layer.
2830    
2831            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
2832            classification field from layer. Split up tests and remove
2833            *-imports. Fixes RTbug #1992.
2834    
2835            * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
2836    
2837            * test/test_classification.py
2838            (TestClassification.test_classification): Remove tests for methods
2839            that no longer exist.
2840    
2841            * test/test_layer.py (SetShapeStoreTests.setUp): Classification
2842            __init__ no longer has a field parameter, use SetClassificationField.
2843            (SetShapeStoreTests.test_sanity): Use layer object to get class
2844            field info.
2845    
2846            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
2847            SetClassificationField on layer to set class field info.
2848    
2849            * test/test_viewport.py: Renamed from test/test_view.py.
2850    
2851    2003-07-16  Jan-Oliver Wagner <[email protected]>
2852    
2853            * Doc/manual/thuban-manual.xml: Added authors and an initial
2854            coarse structure.
2855    
2856    2003-07-15  Bernhard Herzog  <[email protected]>
2857    
2858            * test/support.py (FloatComparisonMixin): This is a mix-in class
2859            and therefore should not be derived from any other class.
2860    
2861            * test/test_range.py (RangeTest): FloatComparisonMixin is a
2862            mix-in, so derive from TestCase as well.
2863    
2864    2003-07-15  Bernhard Herzog  <[email protected]>
2865    
2866            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
2867            draw_func handling a bit to remove one layer of indirection. This
2868            makes the renderer about 10% faster in the non-classifying case
2869            and the code a bit cleaner
2870            (MapRenderer.draw_point_shape): Add the pen and brush parameters
2871            and set them in the dc. Now the draw_point_shape method and
2872            wxproj's draw_polygon_shape function have basically the same
2873            signature so that both can be directly used as draw_func
2874    
2875  2003-07-15  Bernhard Herzog  <[email protected]>  2003-07-15  Bernhard Herzog  <[email protected]>
2876    
2877          * Thuban/Model/save.py (SessionSaver.write_classification): Encode          * Thuban/Model/save.py (SessionSaver.write_classification): Encode

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26