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

Legend:
Removed from v.1582  
changed lines
  Added in v.1880

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26