/[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 1114 by bh, Fri May 30 15:59:58 2003 UTC revision 1294 by jonathan, Mon Jun 23 13:06:13 2003 UTC
# Line 1  Line 1 
1    2003-06-23  Jonathan Coles   <[email protected]>
2    
3            * MANIFEST.in: Update with Resources/XML
4    
5            * setup.py: Don't include Locale resources yet as we don't
6            have any and it causes problems building the distribution
7            for Windows. Update version to 0.8.0.
8    
9            * Doc/thuban.dtd: Removed since it is now in Resources/XML.
10    
11            * Thuban/UI/mainwindow.py: Add blank line at the end because
12            file was not being read correctly building the Windows
13            distribution.
14    
15    2003-06-23  Jonathan Coles   <[email protected]>
16    
17            * Thuban/UI/mainwindow.py (MainWindow.About): Fix text.
18    
19            * Thuban/version.py: Temporarily update longversion for
20            the 0.8 release so that it doesn't have the cvs revision.
21    
22    2003-06-23  Jonathan Coles   <[email protected]>
23    
24            * Thuban/UI/common.py (ThubanBeginBusyCursor): Call wxSafeYield
25            to make sure that we don't create reentrant possibilities with
26            wxYield.
27    
28            * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxBeginBusyCursor()
29            directly to avoid the wxSafeYield() call which generates an
30            OnPaint event causing infinite recursion. Don't try to catch
31            exception anymore. This was for before there were limits on map
32            scaling.
33    
34    2003-06-23  Bernhard Herzog  <[email protected]>
35    
36            Bug fix for RT #1961:
37    
38            * Thuban/Model/load.py (SessionLoader.start_derivedshapesource):
39            Register DerivedShapestores with the session
40    
41            * Thuban/Model/session.py (Session.Tables): Make sure each table
42            is only listed once.
43    
44            * test/test_load.py (TestJoinedTable.test): Add check_format call.
45            Update file contents to match the one written out.
46    
47    2003-06-20  Bernhard Herzog  <[email protected]>
48    
49            * test/xmlsupport.py (SaxEventLister.startElementNS)
50            (SaxEventLister.endElementNS): Do not include the qname. Python
51            2.2.1 and 2.2.2 and 2.2.3 differ in this regard. In 2.2.1 qname it
52            is (presumably incorrectly) None, whereas it's a string with the
53            element name in the later versions.
54    
55            * test/test_xmlsupport.py (TestEventList.test_even_list_simple)
56            (TestEventList.test_even_list_namespace): Update tests to reflect
57            the new behaviour
58            (TestEventList.test_even_list_id_normalization): Fix doc-string
59    
60    2003-06-20  Jonathan Coles   <[email protected]>
61    
62            * Thuban/Model/layer.py (BaseLayer.HasShapes): New. Overridden
63            by deriving classes to determine if that layer supports shapes.
64            (Layer): Override HasShapes and return true.
65    
66            * Thuban/UI/classgen.py: Use Thuban[Begin|End]BusyCursor()
67            instead of a direct call to wx[Begin|End]CusyCursor().
68            (GenUniquePanel._OnRetrieve): Set busy cursor while retrieving
69            table data.
70    
71            * Thuban/UI/common.py (ThubanBeginBusyCursor, ThubanEndBusyCursor):
72            New. Wrappers around the wxWindows functions that allow us to
73            make additional calls such as wxYield which gives the native
74            system a chance to update the cursor correctly.
75    
76            * Thuban/UI/tableview.py: Use Thuban[Begin|End]BusyCursor()
77            instead of a direct call to wx[Begin|End]CusyCursor().
78    
79            * Thuban/UI/view.py: Use Thuban[Begin|End]BusyCursor()
80            instead of a direct call to wx[Begin|End]CusyCursor().
81            (MapCanvas.find_shape_at): Check if the current search layer
82            support shapes, otherwise go on to the next layer.
83    
84            * test/test_layer.py: Add tests in each type of layer for
85            HasClassification() and HasShapes()
86    
87    2003-06-20  Jonathan Coles   <[email protected]>
88    
89            * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after
90            turning on the busy cursor to allow the system to change the
91            cursor before we begin painting. This fixes a problem that
92            was occuring only under GTK. Fixes RTbug #1840.
93    
94    2003-06-20  Bernhard Herzog  <[email protected]>
95    
96            * Resources/XML/thuban-0.8.dtd: New DTD for the new file format
97            version.
98    
99            * Thuban/Model/save.py (sort_data_stores): New. Make topological
100            sort of the data sources so they can be written with sources that
101            data sources that depend on other data sources come after the
102            sources they depend on.
103            (SessionSaver.__init__): Add idmap instance variable to map from
104            objects to the ids used in the file.
105            (SessionSaver.get_id, SessionSaver.define_id)
106            (SessionSaver.has_id): New. Methods to manage the idmap
107            (SessionSaver.write): Use thuban-0.8.dtd
108            (SessionSaver.write_session): Add a namespace on the session and
109            write out the data sources before the maps.
110            (SessionSaver.write_data_containers): New. Write the data
111            containers.
112            (SessionSaver.write_layer): Layer elements now refer to a
113            shapestore and don't contain filenames anymore.
114    
115            * Thuban/Model/load.py (LoadError): Exception class to raise when
116            errors in the files are discovered
117            (SessionLoader.__init__): Define dispatchers for elements with a
118            thuban-0.8 namespace too.
119            (SessionLoader.check_attrs): New helper method to check and
120            convert attributes
121            (AttrDesc): New. Helper class for SessionLoader.check_attrs
122            (SessionLoader.start_fileshapesource)
123            (SessionLoader.start_derivedshapesource)
124            (SessionLoader.start_filetable, SessionLoader.start_jointable):
125            Handlers for the new elements in the new fileformat
126            (SessionLoader.start_layer): Handle the shapestore attribute in
127            addition to filename.
128            (SessionLoader.start_table, SessionLoader.end_table): Removed.
129            They were never used in the old formats and aren't needed for the
130            new.
131    
132            * Thuban/Model/session.py (Session.DataContainers): New method to
133            return all "data containers", i.e. shapestores and tables
134    
135            * test/xmlsupport.py (SaxEventLister.__init__)
136            (SaxEventLister.startElementNS, sax_eventlist): Add support to
137            normalize IDs.
138    
139            * test/test_xmlsupport.py
140            (TestEventList.test_even_list_id_normalization): New test case for
141            id normalization
142    
143            * test/test_load.py (LoadSessionTest.check_format): Use ID
144            normalization
145            (LoadSessionTest.thubanids, LoadSessionTest.thubanidrefs): New
146            class atrributes used for ID normalization
147            (TestSingleLayer, TestLayerVisibility, TestLabels.test)
148            (TestLayerProjection.test, TestRasterLayer.test): Adapt to new
149            file format
150            (TestJoinedTable): New test for loading sessions with joined
151            tables.
152            (TestLoadError): New. Test whether missing required attributes
153            cause a LoadError.
154    
155            * test/test_save.py (SaveSessionTest.thubanids)
156            (SaveSessionTest.thubanidrefs): New class attributes for ID
157            normalization in .thuban files.
158            (SaveSessionTest.compare_xml): Use id-normalization.
159            (SaveSessionTest.testEmptySession)
160            (SaveSessionTest.testLayerProjection)
161            (SaveSessionTest.testRasterLayer)
162            (SaveSessionTest.testClassifiedLayer): Adapt to new file format.
163            (SaveSessionTest.testLayerProjection): The filename used was the
164            same as for testSingleLayer. Use a different one.
165            (SaveSessionTest.test_dbf_table)
166            (SaveSessionTest.test_joined_table): New test cases for saving the
167            new data sources structures.
168            (TestStoreSort, MockDataStore): Classes to test the sorting of the
169            data stores for writing.
170    
171            * test/runtests.py: Add CVS keywords
172    
173    2003-06-20  Jonathan Coles   <[email protected]>
174    
175            * test/test_session.py
176            (UnreferencedTablesTests.test_unreferenced_tables_with_joins):
177            Use the cultural_landmark-point.dbf file for the store so that
178            the table rows and shape count match.
179    
180    2003-06-20  Jonathan Coles   <[email protected]>
181    
182            * Thuban/Model/data.py (DerivedShapeStore.__init__): Raise
183            an exception if the number of shapes is different from the
184            number of rows in the table. Address RTbug #1933.
185    
186            * test/test_layer.py (TestLayer.test_derived_store): Add
187            a test for the new exception in DerivedShapeStore.__init__.
188    
189            * test/support.py (FloatTestCase): Removed since there is
190            already FloatComparisonMixin. Fixes RTbug #1954.
191            (FloatComparisonMixin.assertFloatEqual): Include test for
192            infinity that was part of FloatTestCase.
193    
194            * test/test_range.py (RangeTest): Inherit from
195            support.FloatComparisonMixin now that we don't have
196            support.FloatTestCase.
197    
198    2003-06-20  Bernhard Herzog  <[email protected]>
199    
200            * test/test_save.py (SaxEventLister, sax_eventlist): Removed. Use
201            the implementation in xmlsupport instead.
202            (SaveSessionTest.compare_xml): sax_eventlist is now in xmlsupport
203    
204            * test/test_proj.py: Import sax_eventlist from xmlsupport instead
205            of test_save
206    
207    2003-06-20  Bernhard Herzog  <[email protected]>
208    
209            * test/test_load.py (LoadSessionTest.check_format): New helper
210            method to make sure the test files we load might have been written
211            by the current thuban version.
212            (ClassificationTest.TestLayers, TestSingleLayer.test)
213            (TestLayerVisibility.test, TestClassification.test)
214            (TestLabels.test, TestLayerProjection.test, TestRasterLayer.test):
215            Add check_format() calls and fix the thuban data to match the data
216            that would be written by saving the session loaded from it.
217    
218            * test/xmlsupport.py (SaxEventLister, sax_eventlist): Copies of
219            the same class and function in test_save.
220    
221            * test/test_xmlsupport.py (TestEventList): New. test cases for
222            sax_eventlist
223    
224    2003-06-20  Bernhard Herzog  <[email protected]>
225    
226            * Resources/XML/thuban.dtd: Add comment about which versions of
227            Thuban are covered by this DTD
228            (map): Fix content model for layers and raster layers. There can
229            be any number or layers and raster layers in any order.
230    
231    2003-06-20  Jonathan Coles   <[email protected]>
232    
233            This is mainly about fixing RTbug #1949.
234    
235            * Thuban/Model/classification.py: Remove "from __future__"
236            import statement since python 2.2 is the earliest supported
237            version.
238    
239            * Thuban/Model/proj.py (Projection.GetProjectedUnits): New.
240            Currently returns PROJ_UNITS_METERS or PROJ_UNITS_DEGREES
241            depending on the units this projection *forwards* into.
242    
243            * Thuban/Model/save.py (SessionSaver.write_classification):
244            Remove unnecessary use of lambdas and nested functions.
245    
246            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Do scale
247            adjustment here if the map projection uses degrees.
248    
249            * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Remove
250            scale adjust code since it is now done before calling
251            this method. Don't do anything if the map projection
252            is None.
253    
254    2003-06-19  Bernhard Herzog  <[email protected]>
255    
256            Move version specific load tests to their own file.
257    
258            * test/test_load.py: Expand the doc-string to explain a bit how to
259            handle file format changes.
260            (TestClassification.test): Update the docstring as this test is
261            not about Thuban 0.2 anymore.
262    
263            * test/test_load_0_2.py: New file with the load tests for thuban
264            files created with Thuban 0.2 and earlier.
265    
266    2003-06-19  Bernhard Herzog  <[email protected]>
267    
268            Add XML validation to some of the tests. Validation will only be
269            done if pyRXP is installed (http://reportlab.com/xml/pyrxp.html).
270            To make the DTD available to the test cases it's moved into
271            Resources/XML
272    
273            * Resources/XML/thuban.dtd: New. This is now the real Thuban DTD
274            for versions up to and including 0.2. Two slight changes: added an
275            encoding specification and fixed the comment which refered to
276            GRASS, not Thuban
277    
278            * test/xmlsupport.py: New support module for tests involving XML.
279            Currently there's a mix-in class for XML validation.
280    
281            * test/test_xmlsupport.py: New. Tests for the xmlsupport module
282    
283            * test/test_save.py (SaveSessionTest): Derive from ValidationTest
284            so that we can validate the
285            (SaveSessionTest.testEmptySession)
286            (SaveSessionTest.testSingleLayer)
287            (SaveSessionTest.testSingleLayer)
288            (SaveSessionTest.testLayerProjection)
289            (SaveSessionTest.testRasterLayer)
290            (SaveSessionTest.testClassifiedLayer): Validate the generated XML
291    
292            * test/runtests.py (main): Call print_additional_summary instead
293            of print_garbage_information
294    
295            * test/support.py (resource_dir): New function to return the
296            "Resource" subdirectory
297            (print_additional_summary): New function to combine several
298            summary functions
299            (run_tests): Use print_additional_summary instead of calling
300            print_garbage_information directly
301    
302    2003-06-19  Bernhard Herzog  <[email protected]>
303    
304            * Doc/thuban.dtd (classification): Correct the content model of
305            the classification element.
306            (projection): Add the "name" attribute
307    
308    2003-06-19  Frank Koormann   <[email protected]>
309    
310            MERGE from the greater-ms3 branch.
311    
312            * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Apply conversion to
313            scale if projection is latlong to get better estimate.
314    
315            Fix problem of hidden properties dialog under windows after double
316            click on layer tree:
317            The tree control always gets an Expanded / Collapsed event after
318            the ItemActivated  on double click, which raises the main window again.         We add a second ItemActivated event to the queue, which simply
319            raises the already displayed window.
320    
321            * Thuban/UI/legend.py (LegendTree.__init__): Instance variable
322            raiseProperties initialized to prevent endless loops
323            (LegendTree._OnItemActivated): Depending on self.raiseProperties
324            simply raise the properties or open the dialog and issue a second
325            event.
326    
327    2003-06-18  Jonathan Coles   <[email protected]>
328    
329            * setup.py: Fix a few problems that occured under Windows.
330    
331    2003-06-18  Jonathan Coles   <[email protected]>
332    
333            When Thuban loaded the map was redrawn twice because the
334            legend was being opened after the mainwindow was created
335            and not during its creation. This meant the map was drawn
336            initially and then had to be redrawn when the legend
337            caused the display to change. Now the legend is opened
338            in the mainwindow constructor which resolves this issue.
339    
340            Also, although we were checking for the existence of
341            gdal and gdalwarp modules, the gdalwarp extension was
342            still being compiled (which may fail if the system doesn't
343            have gdal installed). the build_ext command to setup.py
344            now accepts the flags --with-gdal and --without-gdal.
345            If --without-gdal is specified setup.py will try to
346            use the gdal parameters specified by gdal-config. Under
347            windows, those parameters have to be set in setup.py
348            as with proj4 an wxWindows.
349    
350            * setup.py: Use a list instead of seperate variables for
351            extension parameters so we can create a generic function
352            that runs an appropriate *-config script.
353            (run_cs_script): Renamed from run_wx_script and modified
354            to accept a second argument which is a list of lists to
355            be filled in by the values returned from running the command.
356            (thuban_build_ext): New. Extends the build_ext command and
357            provides the options --with-gdal/--without-gdal which then
358            optionally includes the gdalwarp extension.
359    
360            * Thuban/Model/resource.py: First check if we can import
361            the gdalwarp Thuban extension before checking for gdal.
362            Also added some comments.
363            
364            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Check if
365            the map is None which may be the case if none has been loaded
366            yet.
367    
368            * Thuban/UI/main.py (main): Remove call to ShowLegend.
369    
370            * Thuban/UI/mainwindow.py (MainWindow.__init__): Call ShowLegend().
371    
372            * Thuban/UI/renderer.py: Check for gdal support before importing
373            gdalwarp.
374            (MapRenderer.render_map): Only try to optimize if we have gdal
375            support otherwise nothing will get drawn.
376    
377            * Thuban/UI/view.py (MapCanvas.FitMapToWindow): This may be called
378            during startup before a map has been created. Check if map is None
379            before using it and do nothing if it is.
380    
381    2003-06-17  Jonathan Coles   <[email protected]>
382    
383            Fix the problem with raster layers under Windows that caused
384            Thuban to crash. The view should respond to layer projection
385            changed events to update the display. Changes to a projection
386            should not cause the map to be set to full extent.
387            
388            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
389            current_map_proj to remember the current map projection so that
390            when the projection changes we know what the previous projection
391            was.
392            (MapCanvas.SetMap): Unsubscribe and subscribe to
393            LAYER_PROJECTION_CHANGED events.
394            (MapCanvas.projection_changed): Split into two methods that respond
395            to map and layer projection changes.
396            (MapCanvas.map_projection_changed): New. Takes the current view and
397            projects it using the new projection. This does not cause the
398            map to be redrawn at full extent.
399            (MapCanvas.layer_projection_changed): New. Cause a redraw which
400            will draw each layer in its new projection.
401            
402            * extensions/thuban/bmpdataset.cpp (BMPDataset::Open): Call
403            VSIFClose() not VSIFCloseL() to close the file. Fixes a crash
404            under Windows.
405            
406            * extensions/thuban/gdalwarp.cpp (MFILENAME): Padding should be
407            to twice sizeof(void*) because there are two digits for each
408            hex byte.
409    
410    2003-06-16  Bernhard Herzog  <[email protected]>
411    
412            Update to the layer interface: Direct access to the table,
413            shapetable, shapefile and filename attributes is now actively
414            deprecated by issuing deprecation warnings for all places where
415            this happens.
416    
417            * Thuban/Model/layer.py (Layer.__getattr__): New. Implement access
418            to the instance variables table, shapetable, shapefile and
419            filename via __getattr__ so that we can issue a deprecation
420            warning.
421            (Layer.SetShapeStore): Don't set the deprecated instance variables
422            any more
423            (Layer.SetShapeStore): Don't use deprecated layer instance
424            variables
425            (Layer.Destroy): No need to explicitly remove the instance
426            variables any more
427            (Layer.GetFieldType, Layer.Shape): Don't use deprecated layer
428            instance variables
429    
430            * Thuban/UI/classgen.py (ClassGenDialog.__init__)
431            (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve)
432            (GenQuantilesPanel.GetList, GenQuantilesPanel.OnRetrieve): Don't
433            use deprecated layer instance variables
434    
435            * Thuban/UI/classifier.py (Classifier.__init__): Don't use
436            deprecated layer instance variables
437    
438            * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
439            (IdentifyGridCtrl.selected_shape): Don't set the deprecated layer
440            instance variables
441    
442            * Thuban/UI/tableview.py (LayerTableGrid.select_shapes): Don't use
443            deprecated layer instance variables
444    
445            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Don't use
446            deprecated layer instance variables
447    
448            * Thuban/Model/save.py (SessionSaver.write_layer): Don't use
449            deprecated layer instance variables
450    
451            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer)
452            (MapRenderer.polygon_render_param): Don't use deprecated layer instance
453            variables
454    
455            * test/runtests.py (main): Turn Thuban's deprecation warnings into
456            errors so that they're cought by the tests
457    
458            * test/test_load.py (TestSingleLayer.test): Don't use deprecated
459            layer instance variables
460    
461    2003-06-16  Jonathan Coles   <[email protected]>
462    
463            Fix a problem under Windows whereby if the user double-clicks on a
464            layer in the legend that tree item will expand or collapse as well
465            as open the layer properties dialog. The state of the tree item
466            should not be affected.
467    
468            * Thuban/UI/legend.py (LegendTree.__init__): Add instance variable
469            preventExpandCollapse and subscribe to expanding and collapsing
470            events.
471            (LegendTree.OnItemExpandCollapse): New. Responds to expanding and
472            collapsing events and will veto the event if it has been triggered
473            by the user double clicking on a layer.
474            (LegendTree._OnItemActivated): Set preventExpandCollapse to indicate
475            that an expanding/collapsing event should be vetoed.
476    
477    2003-06-13  Bernhard Herzog  <[email protected]>
478    
479            * Thuban/UI/classifier.py (Classifier.OnClose)
480            (Classifier.map_layers_removed)
481            (Classifier.layer_shapestore_replaced): Unsubscribe the messages
482            in OnClose and not in map_layers_removed or
483            layer_shapestore_replaced to make sure it always happens when the
484            dialog is closed
485    
486    2003-06-13  Jonathan Coles   <[email protected]>
487    
488            This puts back a fix for Windows where a panel is needed so that
489            the background of the table view appears correctly.
490    
491            * Thuban/UI/tableview.py (TableFrame.__init__): Add a panel
492            object that can be used by derived classes to place any
493            controls (including the grid) onto.
494            (QueryTableFrame.__init__): Use the panel as the parent window
495            for all the controls. Reparent the grid so that the panel is
496            the parent. Call UpdateStatusText() to correctly initialize
497            the status bar.
498    
499    2003-06-13  Jonathan Coles   <[email protected]>
500    
501            * Thuban/UI/dialogs.py (ThubanFrame): New: a class that inherits
502            from wxFrame (as opposed to wxDialog like the other classes)
503            but otherwise behaves like the other classes. This is needed
504            for the TableView which isn't really a dialog and needs to
505            have a status bar and control buttons.
506    
507            * Thuban/UI/tableview.py (TableGrid.__init__): Create an
508            instance variable to keep track of how many rows are selected.
509            Subscribe once to the the events we are interested in.
510            (ThubanGrid.OnRangeSelect): Only handle event if event handling
511            hasn't been turned off.
512            (ThubanGrid.OnSelectCell): Only handle event if event handling
513            hasn't been turned off.
514            (ThubanGrid.ToggleEventListeners): Rather than subscribe None
515            as an event listener (which changes the event handler stack)
516            simply set an instance variable to False. This is checked in
517            the event handlers.
518            (ThubanGrid.GetNumberSelected): Return the number of currently
519            selected rows.
520            (TableFrame): Inherit from ThubanFrame so we can have a
521            status bar and control buttons.
522            (QueryTableFrame.__init__): Create a status bar. Fixes RTbug #1942.
523            Explicitly set which items are selected in the operator choice and
524            action choice so there is always a valid selection. Fixes RTbug #1941.
525            Subscribe to grid cell selection events so we can update the
526            status bar.
527            (QueryTableFrame.UpdateStatusText): Update the status bar with
528            how many rows are in the grid, how many columns, and how many
529            rows are selected.
530            (QueryTableFrame.OnGridSelectRange, QueryTableFrame.OnGridSelectCell):
531            Call UpdateStatusText when cells are (de)selected.
532            (QueryTableFrame.OnQuery): Use the string value in the value
533            combo if either the selected item index is 0 or if the string
534            cannot be found in the predefined list (this happens if the
535            user changes the text). Fixes RTbug #1940.
536            Only turn off the grid event listeners if there a query comes
537            back with a none empty list of ids. in the case that the list
538            is empty this causes a grid.ClearSelection() call to actually
539            clear the grid selection which causes the selected items in
540            the map to be deselected. Fixes RTbug #1939.
541    
542            * test/test_save.py (XMLWriterTest.Encode): Check return values.
543            Fixes RTbug #1851.
544    
545    2003-06-13  Bernhard Herzog  <[email protected]>
546    
547            * Thuban/UI/identifyview.py (IdentifyView.__init__): Call
548            self.selected_shape with the current selection to make sure the
549            contents of the dialog are up to date when it's shown for the
550            first time.
551            The dialog used to work without this by luck. The recent fix to
552            the connector module 'broke' a 'feature' the identify view was
553            relying on, i.e that subscribing to a message in response to
554            receiving a message of that type would mean that the new
555            subscriber would also be called for the same message.
556            
557    2003-06-12  Jonathan Coles   <[email protected]>
558    
559            * extensions/thuban/gdalwarp.cpp: Removed debug printing as
560            the image is rendered. Fixes RTbug #1937.
561    
562    2003-06-12  Jonathan Coles   <[email protected]>
563    
564            * Thuban/Lib/fileutil.py: As is done under Windows, create the
565            user directory if it doesn't exist on a posix system.
566            Fixes RTbug #1815.
567    
568            * Thuban/Model/resource.py (get_user_proj_files): Moved the
569            called to get_application_dir here, so that the directory
570            will only be called if this method is invoked.
571    
572            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Clear
573            the projfilepath if no projection is selected.
574    
575    2003-06-12  Jonathan Coles   <[email protected]>
576    
577            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Don't draw
578            the scalebar if the current map has no projection set.
579    
580            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Set the
581            projfilepath label to just the basename of the projection file
582            rather than include the entire path.
583    
584            * Thuban/Model/resource.py: Fix missed proj functions that
585            needed to be renamed.
586    
587    2003-06-12  Jonathan Coles   <[email protected]>
588    
589            * Thuban/Model/classification.py: Removed assert statements that
590            tested if the variable was an instance of Color.
591    
592            * Thuban/Model/color.py (Color): Remove commented code that isn't
593            used.
594            (Transparent): Renamed from NoColor. Doesn't inherit from Color.
595            Fixes RTbug #1835.
596            (Transparent.__eq__, Transparent.__ne, Transparent.__repr): New.
597            Needed now that the class doesn't inherit from Color.
598    
599    2003-06-12  Jonathan Coles   <[email protected]>
600    
601            * test/test_save.py (XMLWriterTest.testEncode): Explicitly
602            check unicode strings.
603    
604            * test/test_layer.py: Check for existence of gdal.
605    
606    2003-06-12  Jonathan Coles   <[email protected]>
607        
608            * Thuban/Model/xmlreader.py: New. Contains the XMLReader class
609            that was in load.py
610    
611            * Thuban/Model/xmlwriter.py: New. Contains the XMLWriter class
612            that was in save.py
613    
614    2003-06-12  Jonathan Coles   <[email protected]>
615    
616            This is largely a collection of bug fixes. We also handle the
617            case where gdal is not on the system. The XMLReader and XMLWriter
618            classes were moved into there own files to resolve some circular
619            import references and because they shouldn't really be in the
620            file that is dediciated to reading/writing session files since
621            they are also used elsewhere.
622    
623            * Thuban/Model/classgen.py: Renamed functions to follow the
624            function_names_with_underscores style. Fixes RTbug #1903.
625            (calculate_quantiles): Raise ValueError if 'percents' is invalid.
626    
627            * Thuban/Model/layer.py: Import gdal only if it available.
628            (RasterLayer): Handle the case where the gdal library is unavailable.
629            Addresses RTbug #1877.
630    
631            * Thuban/Model/load.py (XMLReader): Moved into seperate file
632            xmlreader.py.
633    
634    2003-06-12  Jonathan Coles   <[email protected]>
635    
636            This is largely a collection of bug fixes. We also handle the
637            case where gdal is not on the system. The XMLReader and XMLWriter
638            classes were moved into there own files to resolve some circular
639            import references and because they shouldn't really be in the
640            file that is dediciated to reading/writing session files since
641            they are also used elsewhere.
642    
643            * Thuban/Model/classgen.py: Renamed functions to follow the
644            function_names_with_underscores style. Fixes RTbug #1903.
645            (calculate_quantiles): Raise ValueError if 'percents' is invalid.
646    
647            * Thuban/Model/layer.py: Import gdal only if it available.
648            (RasterLayer): Handle the case where the gdal library is unavailable.
649            Addresses RTbug #1877.
650    
651            * Thuban/Model/load.py (XMLReader): Moved into seperate file
652            xmlreader.py.
653    
654            * Thuban/Model/save.py (escape, XMLWriter): Moved into seperate
655            file xmlwriter.py.
656    
657            * Thuban/Model/resource.py: Renamed functions to following the
658            function_names_with_underscores style.
659            (has_gdal_support): New function that returns true if the gdal
660            library is available. Addresses RTbug #1877.
661    
662            * Thuban/UI/application.py (ThubanApplication.OpenSession):
663            Display a message box if the gdal library is not available, but
664            only if there are any layers that would use it. Addresses RTbug #1877.
665    
666            * Thuban/UI/classgen.py: Use renamed projection resource functions.
667            (GenUniformPanel.__CalcStepping): Fix a slight discrepency
668            when using integers versus floats.
669    
670            * Thuban/UI/mainwindow.py (_has_gdal_support): New. Used to
671            determine if the "Add Image Layer" menu option should be
672            greyed out or not. Addresses RTbug #1877.
673    
674            * Thuban/UI/projdialog.py: Use renamed projection resource functions.
675    
676            * Thuban/UI/renderer.py (MapRenderer.render_map): Only try to
677            optimize if a raster layer is visible. Fixes RTbug #1931.
678            Only draw the raster layer if the gdal library is available.
679            Addresses RTbug #1877.
680    
681            * test/test_classgen.py: Add tests for generate_singletons,
682            generate_uniform_distribution, generate_quantiles. Fixes RTbug #1903.
683            (test_calculate_quantiles): Fix some tests to catch the new
684            ValueError that is raised.
685    
686            * test/test_proj.py: Use renamed projection resource functions.
687    
688            * test/test_save.py (SaveSessionTest.testClassifiedLayer): New
689            test for saving classified layers. Fixes RTbug #1902.
690            (XMLWriterTest): New. Tests the XMLWriter class. Fixes RTbug #1851.
691    
692    2003-06-12  Jan-Oliver Wagner <[email protected]>
693    
694            Fix for http://intevation.de/rt/webrt?serial_num=1900.
695    
696            * Thuban/UI/multiplechoicedialog.py: New. A multiple choice dialog.
697    
698            * Thuban/UI/mainwindow.py: import wxMultipleChoiceDialog from
699            multiplechoicedialog.py rather than from the wxPython library.
700    
701    2003-06-11  Frank Koormann  <[email protected]>
702    
703            * Thuban/Lib/fileutil.py (get_application_dir): Minor stability
704            update.
705    
706    2003-06-11  Frank Koormann  <[email protected]>
707    
708            * Thuban/Lib/fileutil.py (get_application_dir): New function to
709            determine the absolute .thuban/thuban directory under
710            "posix" (os.expanduser) and "nt" (read AppData registry key).
711    
712            * Thuban/Model/resource.py: Use get_application_dir
713    
714            * Thuban/UI/application.py (ThubanApplication.read_startup_files):
715            Use get_application_dir.
716    
717    2003-06-10  Bernhard Herzog  <[email protected]>
718    
719            * Thuban/UI/tableview.py (LayerTableFrame.__init__): Subscribe to
720            the messages MAP_LAYERS_REMOVED messages
721            (LayerTableFrame.OnClose): Unsubscribe from it.
722            (LayerTableFrame.map_layers_removed): New. Receiver for
723            MAP_LAYERS_REMOVED. Close the dialog when the layer whose the
724            dialog is showing is removed.
725    
726    2003-06-10  Bernhard Herzog  <[email protected]>
727    
728            * Thuban/Lib/connector.py (Connector.Issue): Iterate over a copy
729            of the receivers list so that unsubscribing in a receiver doesn't
730            modify it while iterating over it.
731    
732            * test/test_connector.py
733            (ConnectorTest.test_disconnect_in_receiver): New. Test whether
734            unsubscribing in a receiver works correctly. See docstring for
735            details
736    
737    2003-06-10  Bernhard Herzog  <[email protected]>
738    
739            * Thuban/Model/messages.py (LAYER_SHAPESTORE_REPLACED): New
740            message.
741    
742            * Thuban/Model/layer.py (Layer.SetShapeStore): Send
743            LAYER_SHAPESTORE_REPLACED when the shapestore changes. A
744            LAYER_CHANGED will still be sent if the classification changes.
745    
746            * Thuban/UI/classifier.py (Classifier.__init__): Add the map as
747            parameter so we can subscribe to some of its messages
748            (Classifier.__init__): Subscribe to the map's MAP_LAYERS_REMOVED
749            and the layer's LAYER_SHAPESTORE_REPLACED
750            (Classifier.unsubscribe_messages): New. Unsubscribe from message
751            subscribed to in __init__
752            (Classifier.map_layers_removed)
753            (Classifier.layer_shapestore_replaced): receivers for the messages
754            subscribed to in __init__. Unsubscribe and close the dialog
755    
756            * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): Pass
757            the map to the Classifier dialog
758    
759            * test/test_layer.py (SetShapeStoreTests): Derive from
760            SubscriberMixin as well so we can test messages
761            (SetShapeStoreTests.setUp): Subscribe to some of the layer's
762            messages
763            (SetShapeStoreTests.tearDown): Clear the messages again
764            (SetShapeStoreTests.test_sanity): Expand the doc-string and check
765            for the modified flag too
766            (SetShapeStoreTests.test_set_shape_store_modified_flag): New test
767            to check whether SetShapeStore sets the modified flag
768            (SetShapeStoreTests.test_set_shape_store_different_field_name)
769            (SetShapeStoreTests.test_set_shape_store_same_field)
770            (SetShapeStoreTests.test_set_shape_store_same_field_different_type):
771            Add tests for the messages. This checks both the new
772            LAYER_SHAPESTORE_REPLACED and the older LAYER_CHANGED
773    
774    2003-06-06  Jan-Oliver Wagner <[email protected]>
775    
776            * Thuban/UI/mainwindow.py: Improved and partly added help texts for
777            the menu items.
778    
779    2003-06-05  Frank Koormann  <[email protected]>
780    
781            * Thuban/UI/identifyview.py (IdentifyView.__init__):
782            Layout reimplemented without panel. Make life easier to fit the list
783            in the dialog.
784    
785    2003-06-05  Frank Koormann  <[email protected]>
786    
787            * Thuban/UI/projdialog.py (ProjFrame.__init__): Fill the projchoice
788            once on initialisation (Former implementation resulted in multiple
789            entries for each projection).
790            (ProjFrame.__FillAvailList): selectProj as second optional parameter,
791            if set, select the projection found under the specified name. This
792            overwrites any other selection estimate.
793            Removed projchoice filling from this method.
794            (ProjFrame._OnSave, ProjFrame._OnAddToList):
795            Updated call of ProjFrame.__FillAvailList
796            (LCCPanel._DoLayout): Moved parameter controls in more common order.
797    
798            * Resources/Projections/defaults.proj: Extended defaults representing
799            various common European projections.
800    
801    2003-06-05  Frank Koormann  <[email protected]>
802    
803            * Thuban/UI/identifyview.py (IdentifyView.__init__):
804            Use ListCtrl instead of GridCtrl
805    
806            * Thuban/Model/resource.py:
807            Guess location of .thuban directory from tempdir parent directory.
808    
809            * Thuban/UI/application.py (ThubanApplication.read_startup_files):
810            Guess location of .thuban directory from tempdir parent directory.
811    
812    2003-06-04  Bernhard Herzog  <[email protected]>
813    
814            Do not cache the values returned by the tree widget's
815            GetFirstChild and GetNextChild methods because it led to lots of
816            segfaults. The new way requires more brute force but is more
817            reliable.
818    
819            * Thuban/UI/legend.py (LegendTree.__init__): Remove instance
820            variable layer2id
821            (LegendTree.find_layer): New method to do with brute force what
822            layer2id tried to accomplish
823            (LegendTree._OnMsgLayerChanged)
824            (LegendTree._OnMsgLayerTitleChanged, LegendTree.__ShowHideLayer):
825            Use find_layer instead of layer2id
826            (LegendTree.__RemoveLayer, LegendTree.__AddLayer): No need to
827            update layer2id anymore
828            (LegendTree._OnMsgMapLayersRemoved)
829            (LegendTree._OnMsgMapLayersAdded): Get by without layer2id.
830    
831    2003-06-03  Thomas Koester  <[email protected]>
832    
833            * Thuban/Model/classgen.py (GenQuantiles0): New function.
834    
835    2003-06-02  Bernhard Herzog  <[email protected]>
836    
837            * Thuban/UI/mainwindow.py (layer_rename command, table_rename command):
838            New commands.
839            (main_menu): Add the new commands.
840            (MainWindow.TableRename): New. Implementation of the table_rename
841            command.
842            (MainWindow.RenameLayer): New. Implementation of the layer_rename
843            command.
844    
845            * Thuban/Model/session.py (Session.AddTable): call self.changed to
846            set the modified flag
847    
848            * test/test_session.py (TestSessionSimple.test_add_table): Test
849            whether the modified flag is set properly
850    
851            * Thuban/Model/base.py (TitledObject.SetTitle): Call changed
852            instead of issue so that the modified flags get updated.
853    
854            * test/test_base.py (SomeTitledObject): Derive from Modifiable
855            instead of Publisher to reflect reality better and to accomodate
856            the fact that SetTitle now calls changed instead of issue
857    
858    2003-06-02  Bernhard Herzog  <[email protected]>
859    
860            * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Resource
861            acquisition has to happen before the try in a try-finally.
862    
863    2003-06-02  Bernhard Herzog  <[email protected]>
864    
865            * Thuban/UI/legend.py (LegendTree._OnMsgMapLayersRemoved): It's
866            possible that a layer is removed that is not currently selected in
867            the legend so don't check for this.
868    
869    2003-05-30  Bernhard Herzog  <[email protected]>
870    
871            * Thuban/Model/layer.py (Layer.Destroy): Set all instance
872            variables to None that have direct or indirect references to
873            shapefiles or dbf files to make sure that they do go away and the
874            files are closed.
875    
876    2003-05-30  Bernhard Herzog  <[email protected]>
877    
878            * Thuban/UI/legend.py (LegendTree.GetRootItem): Reset
879            availImgListIndices when a new image list is created
880            
881  2003-05-30  Bernhard Herzog  <[email protected]>  2003-05-30  Bernhard Herzog  <[email protected]>
882    
883          * Thuban/UI/legend.py (LegendTree.__init__): New instance variable          * Thuban/UI/legend.py (LegendTree.__init__): New instance variable

Legend:
Removed from v.1114  
changed lines
  Added in v.1294

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26