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

Legend:
Removed from v.1760  
changed lines
  Added in v.1951

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26