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

Legend:
Removed from v.1112  
changed lines
  Added in v.1372

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26