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

Legend:
Removed from v.1120  
changed lines
  Added in v.1312

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26