/[thuban]/branches/greater-ms3/thuban/ChangeLog
ViewVC logotype

Diff of /branches/greater-ms3/thuban/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 567 by jonathan, Wed Mar 26 11:51:01 2003 UTC revision 790 by bh, Wed Apr 30 11:06:07 2003 UTC
# Line 1  Line 1 
1    2003-04-30  Bernhard Herzog  <[email protected]>
2    
3            * Thuban/UI/view.py: Fix some typos.
4    
5            * Thuban/UI/mainwindow.py (MainWindow.identify_view_on_demand): Do
6            not pop up the dialog if the selection becomes empty (this could
7            happen if e.g. a new selection is opened while the identify tool
8            is active and dialog had been closed)
9    
10    2003-04-30  Bernhard Herzog  <[email protected]>
11    
12            * Thuban/Model/transientdb.py (TransientTableBase.__init__): New
13            instance variable read_record_last_result
14            (TransientTableBase.read_record): Make sure reading the same
15            record twice works. The implementation uses the new instance
16            variable read_record_last_result
17    
18            * test/test_transientdb.py
19            (TestTransientTable.test_transient_table_read_twice): New test
20            case for the above bug-fix.
21    
22    2003-04-29  Bernhard Herzog  <[email protected]>
23    
24            * Thuban/Model/session.py (Session.Destroy): Explicitly close the
25            transient DB if it exists to make sure it doesn't leave a journal
26            file in the temp directory.
27    
28            * Thuban/Model/transientdb.py (TransientDatabase.close): Set
29            self.conn to None after closing the connection to make sure it's
30            not closed twice
31    
32    2003-04-29  Jonathan Coles   <[email protected]>
33    
34            Add a visible parameter in the layer XML tag. The default value is
35            "true". If anything other than "false" is specified we also assume
36            "true". Addresses RTbug #1025.
37    
38            * Doc/thuban.dtd: Add visible parameter to a layer.
39    
40            * Thuban/Model/layer.py (BaseLayer.__init__): Change default value
41            of visible from 1 to True.
42            (Layer.__init__): Change default value of visible from 1 to True.
43    
44            * Thuban/Model/load.py (SessionLoader.start_layer): Read visible
45            parameter.
46    
47            * Thuban/Model/save.py (SessionSaver.write_layer): Save visible
48            parameter.
49    
50            * test/test_load.py: Add new test data contents_test_visible.
51            (LoadSessionTest.setUp): save test data.
52            (LoadSessionTest.testLayerVisibility): Test if the visible flag
53            is loaded correctly.
54    
55            * test/test_save.py (SaveSessionTest.testSingleLayer): Add test
56            for saving an invisible layer.
57    
58    2003-04-29  Jonathan Coles   <[email protected]>
59    
60            * Thuban/UI/mainwindow.py (MainWindow.SetMap): Look up the
61            legend dialog box and tell it to change its map to the one
62            supplied to SetMap(). Fixes RTbug #1770.
63    
64    2003-04-29  Bernhard Herzog  <[email protected]>
65    
66            Next step of table implementation. Introduce a transient database
67            using SQLite that some of the data is copied to on demand. This
68            allows us to do joins and other operations that require an index
69            for good performance with reasonable efficiency. Thuban now needs
70            SQLite 2.8.0 and pysqlite 0.4.1. Older versions may work but I
71            haven't tested that.
72            
73            * Thuban/Model/transientdb.py: New. Transient database
74            implementation.
75    
76            * test/test_transientdb.py: New. Tests for the transient DB
77            classes.
78    
79            * Thuban/Model/session.py (AutoRemoveFile, AutoRemoveDir): New
80            classes to help automatically remove temporary files and
81            directories.
82            (Session.__init__): New instance variables temp_dir for the
83            temporary directory and transient_db for the SQLite database
84            (Session.temp_directory): New. Create a temporary directory if not
85            yet done and return its name. Use AutoRemoveDir to have it
86            automatically deleted
87            (Session.TransientDB): Instantiate the transient database if not
88            done yet and return it.
89    
90            * Thuban/Model/data.py (ShapefileStore.__init__): Use an
91            AutoTransientTable so that data is copied to the transient DB on
92            demand.
93            (SimpleStore): New class that simply combines a table and a
94            shapefile
95    
96            * Thuban/Model/table.py (Table, DBFTable): Rename Table into
97            DBFTable and update its doc-string to reflect the fact that this
98            is only the table interface to a DBF file. Table is now an alias
99            for DBFTable for temporary backwards compatibility.
100    
101            * Thuban/UI/application.py (ThubanApplication.OnExit): Make sure
102            the last reference to the session goes away so that the temporary
103            files are removed properly.
104    
105            * test/test_load.py (LoadSessionTest.tearDown): Remove the
106            reference to the session to make sure the temporary files are
107            removed.
108    
109    2003-04-29  Bernhard Herzog  <[email protected]>
110    
111            * Thuban/Model/load.py (XMLReader.__init__, XMLReader.read): Turn
112            the __parser instance variable into a normal local variable in
113            read. It's only used there and read will never be called more than
114            once. Plus it introduces a reference cycle that keeps can keep the
115            session object alive for a long time.
116    
117    2003-04-29  Jonathan Coles   <[email protected]>
118    
119            * Thuban/Model/proj.py (Projection): Removed Set*() methods to make
120            Projection an immutable item. Fixes RTbug #1825.
121            (Projection.__init__): Initialize instance variables here.
122            (ProjFile.Replace): New. Replace the given projection object with
123            the new projection object. This solves the problem of needing the
124            mutator Projection.SetProjection() in the ProjFrame class and
125            allows a projection to change parameters without changing its
126            location in the file.
127    
128            * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs): Dialog should
129            be of type wxSAVE and should verify overwriting a file.
130    
131            * Thuban/UI/projdialog.py (ProjFrame._OnSave): Use the new
132            ProjFile.Replace() method instead of the mutator
133            Projection.SetProjection(). Also requires that we reassign the
134            client data to the new projection.
135    
136            * test/test_proj.py (TestProjection.test): Test GetName() and
137            GetAllParameters()
138            (TestProjFile.test): Remove tests for Set*() methods. Add tests
139            for Replace().
140    
141    2003-04-25  Jonathan Coles   <[email protected]>
142    
143            * Thuban/Model/save.py (SessionSaver.write_projection): Make sure
144            to save the name of the projection.
145    
146            * test/test_save.py (SaveSessionTest.testLayerProjection): New
147            test to verify layer projections are saved correctly.
148    
149    2003-04-25  Jonathan Coles   <[email protected]>
150    
151            * Thuban/Model/proj.py (Projection.SetName): Set the name
152            to "Unknown" if name is None.
153            (Projection.SetAllParameters): New. Set the projection's
154            parameter list to the one supplied.
155            (Projection.SetProjection): New. Set the projection's
156            properties to those of the supplied Projection.
157    
158            * Thuban/UI/mainwindow.py (MainWindow.MapProjection): Set
159            the dialog title to include the map's title.
160            (MainWindow.LayerProjection): Set the dialog title to include
161            the layer's title.
162    
163            * Thuban/UI/projdialog.py (ProjFrame.__ShowError): Consolidate
164            error dialogs into a single method call.
165            (ProjFrame.__VerifyButtons): Add more states to check.
166            (ProjFrame.__GetProjection): Return the current state of an
167            edited projection or None.
168            (ProjFrame.__FillAvailList): Remove checks for states that
169            shouldn't exist.
170            (ProjFrame._OnNew): Clear all selected items and supply
171            a projection panel if necessary.
172    
173            * test/test_proj.py (TestProjFile.test): Add tests for
174            ProjFile.SetAllParameters, ProjFile.SetProjection,
175            ProjFile.SetName.
176    
177    2003-04-25  Jonathan Coles   <[email protected]>
178    
179            * Thuban/UI/projdialog.py (ProjFrame.__FillAvailList): Now
180            takes an optional argument to select the current projection.
181            This does not guarantee that the item is visible due to
182            limited wxWindows functionality. Fixes RTBug #1821.
183    
184    2003-04-25  Jonathan Coles   <[email protected]>
185    
186            * Thuban/Model/load.py (SessionLoader.start_projection): Remember
187            the projection name and use it when constructing the Projection
188            object.
189    
190            * Thuban/Model/proj.py (Projection.__init__): Change the default
191            value for 'name' to None and then test if name is equal to None
192            in the body of the constructor. This way the caller doesn't have to
193            know what the default value should be. Namely, useful in load.py
194            where we have to pick a default value if the 'name' parameter
195            doesn't exist in the XML file.
196    
197            * test/test_load.py (LoadSessionTest.testLayerProjection): New.
198            Tests a file where a layer has a projection.
199    
200    2003-04-25  Jonathan Coles   <[email protected]>
201    
202            * Thuban/Model/layer.py (Layer.TreeInfo): Add an item to the
203            tree for projection information.
204    
205            * Thuban/Model/load.py (XMLReader.GetFilename): Renamed from
206            XMLReader.GetFileName.
207            (SessionLoader): Added support for loading projection tags that
208            appear inside a layer.
209    
210            * Thuban/Model/proj.py (ProjFile): Document the class. Move
211            back to using a list because the order of the projections in
212            the file is important to maintain. Fixes RTbug #1817.
213    
214            * Thuban/Model/resource.py: Rename calls to ProjFile.GetFileName
215            to ProjFile.GetFilename.
216    
217            * Thuban/Model/save.py (SessionSaver.write_layer): Save projection
218            information.
219    
220            * Thuban/UI/projdialog.py (ProjFrame._OnAddToList): Renamed from
221            ProjFrame._OnSaveAs. Removed old dead code from previous
222            implementation.
223            (ProjFrame._OnExport): Add support for exporting more than one
224            projection to a single file.
225            (ProjFrame.__FillAvailList): use string formatting (% operator)
226            to build strings that are (partly) translated. Fixes RTbug #1818.
227    
228            * test/test_proj.py (TestProjFile.test): New. Tests the base ProjFile
229            class.
230    
231    2003-04-24  Bernhard Herzog  <[email protected]>
232    
233            * po/es.po: Updated Spanish translation by Daniel Calvelo Aros
234    
235            * po/fr.po: New. French translation by Daniel Calvelo Aros
236    
237            * Thuban/UI/projdialog.py (ProjFrame._OnSaveAs): Don't translate
238            empty strings.
239    
240    2003-04-24  Jonathan Coles   <[email protected]>
241    
242            * Thuban/Model/layer.py (Layer.GetProjection): New. Needed to
243            implement the interface that the ProjFrame dialog expects.
244    
245            * Thuban/Model/proj.py (Projection.SetName): New. Allows the
246            name of the projection to be changed.
247            (ProjFile): Use a dictionary instead of a list so that removing
248            projections is easier and we are sure about uniqueness.
249            (ProjFile.Remove): Remove the given projection object.
250    
251            * Thuban/Model/resource.py (GetSystemProjFiles, GetUserProjFiles):
252            Return a list with only one projection file instead of searching for
253            any projection file. This simplifies many things if the user can
254            only have one system file and one user file.
255    
256            * Thuban/UI/classgen.py: Change all references to
257            genCombo to genChoice.
258    
259            * Thuban/UI/mainwindow.py: Add a Projection option under the
260            layer menu.
261            (MainWindow.LayerProjection): New. Open up a projection window
262            for a layer.
263    
264            * Thuban/UI/projdialog.py: Large changes to how the dialog is
265            laid out. Use three panels instead of one. One for the list of
266            projections, one for the edit controls, and one for the buttons.
267            Fixed resizing problems so that the dialog resizes correctly
268            when the projection panel changes. Added import/export, save, and
269            new buttons/functionality.
270    
271    2003-04-24  Bernhard Herzog  <[email protected]>
272    
273            First step towards table management. Introduce a simple data
274            abstraction so that we replace the data a layer uses more easily
275            in the next step.
276    
277            * Thuban/Model/data.py: New file with a simple data abstraction
278            that bundles shapefile and dbffile into one object.
279    
280            * Thuban/Model/session.py (Session.OpenShapefile): New method to
281            open shapefiles and return a shape store object
282    
283            * Thuban/Model/layer.py (Layer.__init__): Pass the data as a store
284            object instead of a shapefile filename. This introduces a new
285            instance variable store holding the datastore. For intermediate
286            backwards compatibility keep the old instance variables.
287            (open_shapefile): Removed. No longer needed with the shape store.
288            (Layer.SetShapeStore, Layer.ShapeStore): New methods to set and
289            get the shape store used by a layer.
290            (Layer.Destroy): No need to explicitly destroy the shapefile or
291            table anymore.
292    
293            * Thuban/UI/mainwindow.py (MainWindow.AddLayer)
294            (MainWindow.AddLayer): Use the session's OpenShapefile method to
295            open shapefiles
296    
297            * Thuban/Model/load.py (ProcessSession.start_layer): Use the
298            session's OpenShapefile method to open shapefiles
299    
300            * test/test_classification.py
301            (TestClassification.test_classification): Use the session's
302            OpenShapefile method to open shapefiles and build the filename in
303            a more platform independed way
304    
305            * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
306            Implement to have a session to use in the tests
307            (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
308            (TestLayer.test_point_layer, TestLayer.test_empty_layer): Use the
309            session's OpenShapefile method to open shapefiles
310            (TestLayerLegend.setUp): Instantiate a session so that we can use
311            it to open shapefiles.
312            (TestLayerLegend.tearDown): Make sure that all references to
313            layers and session are removed otherwise we may get a resource
314            leak
315    
316            * test/test_map.py (TestMapAddLayer.test_add_layer)
317            (TestMapWithContents.setUp): Instantiate a session so that we can
318            use it to open shapefiles.
319            (TestMapWithContents.tearDown): Make sure that all references to
320            layers, maps and sessions are removed otherwise we may get a
321            resource leak
322            ("__main__"): use support.run_tests() so that more info about
323            uncollected garbage is printed
324    
325            * test/test_save.py (SaveSessionTest.testSingleLayer): Use the
326            session's OpenShapefile method to open shapefiles
327            ("__main__"): use support.run_tests() so that more info about
328            uncollected garbage is printed
329    
330            * test/test_selection.py (TestSelection.tearDown): Make sure that
331            all references to the session and the selection are removed
332            otherwise we may get a resource leak
333            (TestSelection.get_layer): Instantiate a session so that we can
334            use it to open shapefiles.
335            ("__main__"): use support.run_tests() so that more info about
336            uncollected garbage is printed
337    
338            * test/test_session.py (TestSessionBase.tearDown)
339            (TestSessionWithContent.tearDown): Make sure that all references
340            to the session and layers are removed otherwise we may get a
341            resource leak
342            (TestSessionWithContent.setUp): Use the session's OpenShapefile
343            method to open shapefiles
344    
345    2003-04-24  Jonathan Coles   <[email protected]>
346    
347            * Thuban/Model/load.py (XMLReader.read): Should have been checking
348            if the file_or_filename object had the 'read' attribute.
349    
350    2003-04-23  Jonathan Coles   <[email protected]>
351    
352            * Thuban/Model/resource.py: Fixes RTbug #1813.
353            (ReadProjFile): Add documentation about which exceptions are raised.
354            Always pass the exceptions up to the caller.
355            (GetProjFiles): If the directory can't be read return an empty list.
356            If any of the proj files can't be read skip that file and go
357            on to the next one.
358    
359            * test/test_proj.py: Added test cases to handle nonexistent files,
360            unreadable files, and files that don't parse correctly.
361    
362    2003-04-23  Jonathan Coles   <[email protected]>
363    
364            Projection dialog. Allows the user to select from a list
365            of projection templates and optionally edit them and save new ones.
366    
367            * Thuban/UI/projdialog.py (ProjFrame): New. Main dialog.
368            (ProjPanel): Base class for projection specific panels.
369            (TMPanel): Projection panel for Transverse Mercartor.
370            (UTMPanel): Projection panel for Universal Transverse Mercartor.
371            (LCCPanel): Projection panel for Lambert Conic Conformal.
372            (GeoPanel): Projetion panel for Geographic Projection.
373    
374    2003-04-23  Jonathan Coles   <[email protected]>
375    
376            * Thuban/Model/load.py (XMLReader): Renamed from XMLProcessor to
377            promote symmetry. There now exists XMLReader and XMLWriter.
378            (XMLReader.read): New. Call to read the given file descriptor or
379            filename.
380            (XMLReader.close): New. Make sure the file is closed.
381            (XMLReader.GetFileName): New. Return just the file name that is being
382            read from.
383            (XMLReader.GetDirectory): New. Return just the directory of the file
384            that is being read.
385            (XMLReader.AddDispatchers): New. Take a dictionary which contains
386            the names of functions to call as the XML tree is parsed.
387            (XMLReader.startElementNS): Updated to use new dispatcher dictionary.
388            (XMLReader.endElementNS): Updated to use new dispatcher dictionary.
389            (SessionLoader): Removed class variables start_dispatcher and
390            end_dispatcher since this functionality is now part of a class
391            instance. Fixes RTbug #1808.
392            (SessionLoader.__init__): Add dispatcher functions.
393            (load_xmlfile): Code was moved into the XMLReader.read().
394            (load_session): Use modified SessionLoader.
395    
396            * Thuban/Model/map.py (Map.GetProjection): New. Returns the
397            map's projection.
398    
399            * Thuban/Model/proj.py (Projection.GetParameters): Renamed to
400            GetAllParameters.
401            (Projection.GetParameter): Returns the value for the given parameter.
402    
403            * Thuban/Model/resource.py: Use XMLReader and XMLWriter.
404            (GetProjFiles): Renamed from GetProjections. Now returns a list
405            of ProjFile objects.
406            (GetSystemProjFiles): Renamed from GetSuppliedProjections. Returns
407            a list of ProjFile objects whose files are not user defined.
408            (GetUserProjFiles): Renamed from GetUserProjections. Returns a
409            list of ProjFile objects whose files are user defined.
410            (ProjFileReader): Extend new XMLReader.
411    
412            * Thuban/Model/save.py (XMLWriter): Renamed from XMLSaver to
413            promote symmetry.
414    
415            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Use a wxChoice
416            control instead of a wxComboBox. wxChoice controls do not generate
417            events as the uses highlights possible choices which fixes problems
418            with resizing the dialog when the use selects an option.
419    
420            * Thuban/UI/classifier.py (Classifier.__init__): Use a wxChoice
421            control instead of a wxComboBox.
422    
423            * Thuban/UI/mainwindow.py (MainWindow.Projection): Use new projection
424            dialog.
425    
426            * test/test_proj.py (TestProjection.test): New tests for GetParameter
427            method.
428    
429    2003-04-22  Bernhard Herzog  <[email protected]>
430    
431            * Thuban/UI/mainwindow.py: Remove some unused imports and global
432            constants
433    
434            * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
435            (IdentifyGridCtrl.selected_shape): Use table, not shapetable.
436    
437    2003-04-17  Bernhard Herzog  <[email protected]>
438    
439            * Thuban/Model/layer.py: Don't import LAYER_LEGEND_CHANGED.
440            (Layer): Update doc-string since LAYER_LEGEND_CHANGED is not used
441            anymore.
442            (Layer.BoundingBox, Layer.GetFieldType, Layer.NumShapes)
443            (Layer.ShapeType, Layer.Shape): No need to call
444            self.open_shapefile since it's always called in __init__
445    
446            * Thuban/UI/application.py (ThubanApplication.MainLoop): Removed.
447            In wxPython 2.4 there's no need to extend MainLoop anymore since
448            wxPython itself makes sure OnExit is called.
449    
450    2003-04-16  Jonathan Coles   <[email protected]>
451    
452            Initial putback of projection management code. Includes new
453            classes to read and write projection files. The current load
454            and save classes were abstracted a bit so they could be reused.
455            The Projection class was extended to provide new methods and
456            have a name.
457    
458            * Thuban/Model/load.py (XMLProcessor): New. Contains all the
459            general XML reading methods that were part of ProcessSession.
460    
461            * Thuban/Model/proj.py (Projection.__init__): Accepts an optional
462            name.
463            (ProjFile): New. Represents a file that contains projection
464            information.
465    
466            * Thuban/Model/resource.py: New. Contains general utilities
467            for read and writing projection files.
468    
469            * Thuban/Model/save.py (XMLSaver): New. Contains all the
470            general XML writing methods that were part of SessionSaver.
471            (SessionSaver): Renamed from Saver.
472    
473            * test/test_proj.py: New test cases for the projection
474            file read and write functions.
475    
476    2003-04-16  Jonathan Coles   <[email protected]>
477    
478            * Thuban/Model/classification.py: Use repr() around values
479            in the ClassGroup*.__repr__() methods so it is clearer when
480            a value is a string and when it is a number.
481    
482            * test/test_load.py: Rework the classification test to test
483            that we can load old files.
484            (testLabels): Test a file where the groups have labels.
485    
486    2003-04-16  Bernhard Herzog  <[email protected]>
487    
488            Safer implementation of the performance enhancements of the
489            low-level renderer:
490            
491            * extensions/thuban/wxproj.cpp (extract_projection)
492            (extract_pointer): Rename extract_projection to extract_pointer
493            and redefine its purpose to return the pointer stored in a CObject
494            returned by the object's cobject method. Update all callers.
495            (s_draw_info, free_draw_info, draw_polygon_init): Implement the
496            handling of these low-level parameters so that each s_draw_info
497            instance is handled as a CObject at python level that also
498            contains real references to the actual python objects which
499            contain the values in the struct. Add free_draw_info as the
500            destructor.
501            (draw_polygon_shape): Add the py_draw_info parameter which must a
502            cobject containing an s_draw_info pointer.
503    
504            * Thuban/UI/renderer.py (MapRenderer.polygon_render_param): New
505            method to instantiat the low-level render parameter
506            (MapRenderer.draw_shape_layer): Use the new method. Remove some
507            commented out code.
508            (MapRenderer.draw_polygon_shape): Make the first parameter not the
509            layer but the low-level render parameter
510            (ScreenRenderer.draw_shape_layer): Use the low-level render
511            parameter.
512    
513    2003-04-15  Jonathan Coles   <[email protected]>
514    
515            * Thuban/Model/classification.py: Implemented __repr__ for
516            the ClassGroup* classes to make debugging a bit easier.
517            (ClassGroup.SetLabel): Check that the string is an instance
518            of StringTypes not StringType. Accounts for Unicode strings.
519    
520            * Thuban/Model/color.py: Implemented __repr__ to make
521            debugging a bit easier.
522    
523            * Thuban/Model/save.py (Saver.write_classification): Need to
524            save the group label.
525    
526            * test/test_load.py (testClassification): New. Loads the
527            iceland_sample_test.thuban file and checks if it was loaded
528            correctly.
529    
530    2003-04-15  Jonathan Coles   <[email protected]>
531    
532            * extensions/thuban/wxproj.cpp (draw_polygon_init): New. Used
533            to improve rendering performance by initializing the variables
534            that are not change each time draw_polygon_shape() is called.
535            The values are stored in a global struct draw_info.
536            (draw_polygon_shape): Removed initialization code that is
537            now in draw_polygon_init().
538    
539            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Make
540            drawing initialization call to draw_polygon_init()
541            (MapRenderer.draw_polygon_shape): Use new signature of
542            draw_polygon_shape.
543    
544            * Thuban/UI/classgen.py (GenUniformPanel): Fix spin control
545            weirdness by setting the range to (1, maxint).
546    
547            * Thuban/Model/classification.py (ClassGroupProperties): Make
548            instance variables private and optimize comparison operator
549            by first checking if the color references are the same.
550            (ClassGroupSingleton): Make instance variables private.
551            (ClassGroupRange): Make instance variables private.
552    
553            * HOWTO-Release: Filled in missing steps for releasing packages.
554    
555    2003-04-15  Bernhard Herzog  <[email protected]>
556    
557            First stab at internationalized messages:
558    
559            * Thuban/__init__.py (_): Implement the translation function for
560            real using the python gettext module.
561    
562            * Thuban/UI/classifier.py (ClassTable.GetRowLabelValue): Don't
563            translate empty strings.
564    
565            * Thuban/UI/application.py (ThubanApplication.read_startup_files):
566            Add a missing space to a warning message
567    
568            * po/README: New. Notes about the management of the translation
569            files.
570    
571            * po/Makefile: New. Makefile to help manage the translation files.
572    
573            * po/es.po: New. Spanish translation by Daniel Calvelo Aros
574    
575            * MANIFEST.in: Include the *.mo files in Resources/Locale and the
576            translations and support files in po/
577    
578            * setup.py (data_files): Add the *.mo files to the data_files too
579    
580            * README: Add note about the translations when building from CVS
581    
582    2003-04-14  Jonathan Coles   <[email protected]>
583    
584            * Thuban/UI/dock.py: Fixes some window resizing problems most
585            noticable under windows. Always assume the button bitmaps will
586            be there. Code clean up.
587            (DockabelWindow.Dock, DockableWindow.UnDock): Force all the
588            images for the dock/undock button to the same images.
589            Work around for RTbug #1801.
590    
591            * Thuban/UI/legend.py (LegendPanel.__init__): The toolbar should
592            be allowed to grow within the sizer. Fixes a bug under Windows
593            where the toolbar wasn't being drawn.
594    
595    2003-04-14  Frank Koormann   <[email protected]>
596    
597            * Resources/Bitmaps/dock_12.xpm, Resources/Bitmaps/undock_12.xpm:
598            Updated design to try to make the button functionality more
599            transparent.
600    
601    2003-04-14  Jonathan Coles   <[email protected]>
602    
603            * Thuban/UI/legend.py (LegendPanel.__init__): Call Create() to
604            finalize the intialization of the panel.
605    
606            * Thuban/UI/dock.py (DockPanel.Create): New. Finalizes the
607            creation of the panel. Should be the last thing called in the
608            initializer of a subclass.
609    
610            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Actively
611            set the current selections in the combo boxes. This is needed
612            under Windows.
613    
614            * Thuban/UI/classifier.py (Classifier.__init__): Add a top
615            level panel to the dialog so that the background colors are
616            consistent under Windows.
617    
618    2003-04-11  Jonathan Coles   <[email protected]>
619    
620            * Thuban/UI/classgen.py: Change color ramps to start at white
621            not black.
622    
623            * Thuban/UI/legend.py: Enable/disable the legend buttons when
624            the legend changes. Fixes RTbug #1793.
625    
626            * test/test_classification.py: Added test for copying of
627            classifications.
628    
629    2003-04-11  Jonathan Coles   <[email protected]>
630    
631            * Thuban/UI/resource.py: New. Centralize the loading of resources
632            such as bitmaps.
633    
634            * Thuban/UI/classgen.py (GenUniquePanel.__init__): Reordered buttons,
635            added images to the move buttons, added 'reverse' button.
636            (CustomRampPanel.__init__): Added images to the move buttons.
637            (GreyRamp): New. Generates a ramp from white to black.
638            (HotToColdRamp): New. Generates a ramp from cold to hot colors.
639    
640            * Thuban/UI/classifier.py: Refactored ID's from ID_CLASSIFY_* to
641            ID_PROPERTY_*.
642            (Classifier.__init__): Minor changes to the layout.
643            (Classifier._OnTitleChanged): Listen for when the user edits the
644            title and update the dialog's title and the layer's title.
645    
646            * Thuban/UI/dock.py: Use new bitmaps for the control buttons.
647    
648            * Thuban/UI/legend.py: Use new bitmaps for the control buttons.
649            (LegendTree._OnMsgLayerTitleChanged): Change the displayed title
650            if the layer's title changes.
651    
652            * Thuban/UI/mainwindow.py: Added new menu item and associated code
653            to open a dialog to rename the map.
654            (MainWindow): Use new resource class to import bitmaps.
655    
656    2003-04-11  Jonathan Coles   <[email protected]>
657    
658            * Resources/Bitmaps/close_12.xpm, Resources/Bitmaps/dock_12.xpm,
659            Resources/Bitmaps/group_use.xpm, Resources/Bitmaps/group_use_all.xpm,
660            Resources/Bitmaps/group_use_none.xpm,
661            Resources/Bitmaps/group_use_not.xpm,
662            Resources/Bitmaps/hide_layer.xpm,
663            Resources/Bitmaps/layer_properties.xpm,
664            Resources/Bitmaps/lower_layer.xpm, Resources/Bitmaps/raise_layer.xpm,
665            Resources/Bitmaps/show_layer.xpm, Resources/Bitmaps/undock_12.xpm:
666            New.
667    
668    2003-04-10  Jonathan Coles   <[email protected]>
669    
670            * Thuban/Model/classification.py: (ClassGroupRange.__init__):
671            Should pass group to ClassGroup constructor.
672    
673    2003-04-10  Jonathan Coles   <[email protected]>
674    
675            * Thuban/Model/classification.py: (ClassGroup): Move all the common
676            methods of the derived classes ([Set|Get]Properties(), __eq__, __ne__)
677            here. Implement SetVisible(), IsVisible().
678            (ClassGroup.__init__): Add group parameter which acts as a copy
679            constructor.
680    
681            * Thuban/UI/classifier.py (ClassTable): Add a new column for the
682            "Visible" check boxes.
683            (Classifier): Rename the buttons and refactor the code to match
684            the new labels.
685    
686            * Thuban/UI/legend.py: Classify button is now called "Properties".
687            Refactored the code to change variable names.
688            (LegendTree.__FillTreeLayer): Only list a group if it is visible.
689    
690            * Thuban/UI/mainwindow.py: MainWindow.OpenClassifier renamed to
691            MainWindow.OpenLayerProperties. MainWindow.LayerEditProperties
692            renamed to MainWindow.LayerEditProperties.
693            (MainWindow.ToggleLegend): Don't include map name in legend title.
694            (MainWindow.SetMap): Added the map name to the window title.
695            (MainWindow.LayerFillColor, MainWindow.LayerTransparentFill,
696            MainWindow.LayerOutlineColor, MainWindow.LayerNoOutline): Removed.
697            Functionality is found in the layer properties dialog.
698    
699            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
700            draw visible groups.
701    
702    2003-04-09  Jonathan Coles   <[email protected]>
703    
704            * Thuban/UI/classgen.py: Modifications to allow simple
705            addition and selection of new color schemes.
706            (MonochromaticRamp): New. Generates a ramp between two colors.
707            (RedRamp): New. Generates a ramp of all red.
708            (GreenRamp): New. Generates a ramp of all green.
709            (BlueRamp): New. Generates a ramp of all blue.
710    
711    2003-04-09  Jonathan Coles   <[email protected]>
712    
713            * Thuban/Model/classification.py (Classification.__deepcopy__):
714            Need to copy over field and fieldType attributes.
715    
716            * Thuban/Model/table.py (Table.field_range): New. Retrive the
717            maximum and minimum values over the entire table for a given
718            field.
719            (Table.GetUniqueValues): New. Retrieve all the unique values
720            in the table for a given field.
721    
722            * Thuban/UI/classgen.py: Renamed GenRangePanel to GenUniformPanel.
723            (GenUniquePanel): New. Controls to allow the user to select
724            which unique field values they would like in the classification.
725            (CustomRampPanel): Code that was in ClassGenDialog that allows
726            the user to select the properties for a custom ramp.
727            (ClassGenerator.GenUniformDistribution): Was called GenerateRanges.
728    
729            * Thuban/UI/classifier.py: Removed a lot of debugging code.
730            (Classifier._SetClassification): Callback method so that the
731            class generator can set the classification in the grid.
732            (ClassGroupPropertiesCtrl): New. Encapsulates the drawing and
733            editing of a group properties class into a wxWindows control.
734    
735            * Thuban/UI/dock.py: It was decided that if the user closes
736            a dockable window the window should simply hide itself. That
737            way if the user wants to show the dock again it appears in the
738            same place as it was when it was closed.
739            (DockableWindow.Destroy): Call renamed method OnDockDestroy().
740            (DockableWindow._OnButtonClose): Hide the window instead of
741            destroying it.
742            (DockableWindow._OnClose): Hide the window instead of
743            destroying it.
744    
745            * Thuban/UI/legend.py (LegendTree): Use a private method to
746            consistently set the font and style of the text. Fixes RTbug #1786.
747    
748            * Thuban/UI/mainwindow.py: Import just the Classifier class.
749    
750    2003-04-07  Bernhard Herzog  <[email protected]>
751    
752            * Thuban/UI/mainwindow.py (main_menu): Move the toggle_legend item
753            to the map module
754    
755    2003-04-07  Bernhard Herzog  <[email protected]>
756    
757            * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree): Removed in
758            favor of ToggleSessionTree
759            (MainWindow.ToggleSessionTree): New method to toggle visibility of
760            the session tree.
761            (MainWindow.SessionTreeShown): New method to return whether the
762            session tree is currently shown.
763            (MainWindow.ToggleLegend): New method to toggle visibility of the
764            legend
765            (MainWindow.ShowLegend): Implement in terms of ToggleLegend and
766            LegendShown
767            (MainWindow.LegendShown): New method to return whether the legend
768            is currently shown.
769            (_method_command): Add checked parameter so we can define check
770            menu items
771            (_has_tree_window_shown, _has_legend_shown): Use the appropriate
772            mainwindow methods.
773            (show_session_tree, show_legend commands): Removed.
774            (toggle_session_tree, toggle_legend commands): New commands to
775            toggle the visibility of the dialogs
776    
777    2003-04-07  Jonathan Coles   <[email protected]>
778    
779            * Thuban/UI/classgen.py: Fix Windows problem.
780    
781            * Thuban/UI/dock.py: Fix Windows problem.
782    
783            * Thuban/UI/mainwindow.py: Use False instead of false.
784            (MainWindow.ShowLegend): Remove unnecessary switch parameter.
785    
786    2003-04-07  Jonathan Coles   <[email protected]>
787    
788            Since we now say that the order of the groups in a classification
789            matters, it makes sense to be able to manipulate that order. Most
790            of the changes to Thuban/Model/classification.py are to that end.
791    
792            * Thuban/Model/classification.py (Classification.AppendGroup,
793            Classification.InsertGroup, Classification.ReplaceGroup,
794            Classification.RemoveGroup, Classification.GetGroup): Do as the
795            names imply.
796            (Classification.FindGroup): This was called GetGroup, but GetGroup
797            takes an index, while FindGroup takes a value.
798            (Classification.__deepcopy__): Copy all the groups, BUT NOT THE LAYER
799            REFERENCE. Currently there is a cyclic reference between the layer
800            and its classification. If the classification doesn't need to know
801            its owning layer we can change this, since it may make sense to be
802            able to use the same classification with different layers.
803    
804            * Thuban/Model/load.py: Use Classification.AppendGroup(), not AddGroup()
805    
806            * Thuban/UI/classgen.py: Use Classification.AppendGroup(),
807            not AddGroup()
808    
809            * Thuban/UI/classifier.py: Now that we can depend on the order in
810            a Classification and have methods to manipulate that order we don't
811            need to use our own data structures in the grid. We can simply make
812            the grid/table access the information they need from a copy of
813            the classification object.
814            (Classifier._OnCloseBtn): Event handler for when the user clicks
815            'Close'. This is needed so if the user applies changes and then
816            continues to change the table the user has the option of discarding
817            the most recent changes and keeping what they applied.
818    
819            * Thuban/UI/mainwindow.py: Put "Show Legend" and "Show Session Tree"
820            into the same group.
821    
822            * extensions/thuban/wxproj.cpp (check_version): If Thuban is compiled
823            with a really old version of proj, PJ_VERSION won't even be defined.
824            If it isn't defined then just compile so that the function always
825            returns Py_False.
826    
827            * test/test_classification.py: Fix tests to use the renamed methods.
828            Still need to write tests for the new methods.
829    
830    2003-04-04  Jonathan Coles   <[email protected]>
831    
832            * Thuban/UI/classifier.py (Classifier.__SelectField): Move the
833            call to SetSelection out of the method and before the call
834            to __SelectField in __init__. This prevents a recursion of events
835            when _OnFieldSelect is triggered by the user.
836    
837    2003-04-04  Jonathan Coles   <[email protected]>
838    
839            * Thuban/Model/classification.py: Rename Color.None to
840            Color.Transparent.
841            (ClassGroupProperties.SetLineColori, ClassGroupProperties.SetFill):
842            Don't bother copying the color, since Colors are immutable.
843    
844            * Thuban/Model/color.py, Thuban/Model/layer.py, Thuban/Model/load.py,
845            Thuban/UI/classifier.py, Thuban/UI/mainwindow.py,
846            Thuban/UI/renderer.py, Thuban/UI/view.py:
847            Rename Color.None to Color.Transparent.
848        
849            * test/test_classification.py, test/test_load.py: Rename Color.None
850            to Color.Transparent.
851    
852    2003-04-04  Jonathan Coles   <[email protected]>
853    
854            * Thuban/Model/classification.py: Fix assert calls.
855            (ClassGroupProperties.SetLineColor, ClassGroupProperties.SetFill):
856            Copy the color parameter rather than hold onto a reference.
857    
858            * Thuban/Model/color.py (Color.__copy__, Color.__deepcopy): Copy
859            the color object.
860            (NoColor.__copy__, NoColor.__deepcopy): Return 'self' so that we
861            are sure there exists only one refernce to Color.None in the system.
862            This allows us to use 'is' rather than the comparision functions.
863            
864            * Thuban/Model/save.py: Fix assert calls.
865            
866            * Thuban/UI/classifier.py: Fix assert calls.
867            (ClassGrid._OnCellDClick): Call up to the classifier to open the
868            dialog to edit the groups properties.
869            (ClassGrid._OnCellResize): Make sure that the scollbars are drawn
870            correctly if a cell is resized.
871            (ClassTable.SetClassification): New. Changes the classification
872            that is in the table.
873            (ClassTable.__SetRow): Allow groups to be prepended.
874            (Classifier): New code for opening the EditProperties and
875            GenerateRanges dialogs.
876            (SelectPropertiesDialog.__GetColor): Only set the color in the
877            color dialog if the current color is not None.
878            
879            * Thuban/UI/dock.py: Fix assert calls.
880            
881            * Thuban/UI/legend.py: Fix assert calls.
882            
883            * Thuban/UI/renderer.py: Fix assert calls.
884            
885            * Thuban/UI/classgen.py (ClassGenDialog): Dialog for generating
886            classifications.
887            (GenRangePanel): Panel specific to range generation.
888            (GenSingletonPanel): Panel specific to singleton generation.
889            (ClassGenerator): Class responsible for actually generating
890            the classification from the data gathered in the dialog box.
891            (PropertyRamp): Generates properties whose values range from
892            a starting property to an ending property.
893    
894    2003-04-03  Bernhard Herzog  <[email protected]>
895    
896            * test/support.py (print_garbage_information): New function that
897            prints information about still connected messages and memory
898            leaks.
899            (run_suite): Removed.
900            (run_tests): New function for use as a replacement of
901            unittest.main in the test_* files. This one calls
902            print_garbage_information at the end.
903    
904            * test/runtests.py (main): Use support.print_garbage_information
905    
906            * test/test_layer.py: Use support.run_tests instead of
907            unittest.main so we get memory leak information
908            (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
909            (TestLayer.test_point_layer, TestLayer.test_empty_layer)
910            (TestLayerLegend.test_visibility): Call the layer's Destroy method
911            to fix a memory leak.
912    
913            * test/test_classification.py: Use support.run_tests instead of
914            unittest.main so we get memory leak information
915            (TestClassification.test_classification): Call the layer's Destroy
916            method to fix a memory leak.
917    
918    2003-04-02  Bernhard Herzog  <[email protected]>
919    
920            * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
921            Handle the reference counts of the return value and errors in
922            PyArg_ParseTuple correctly.
923    
924            * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
925            sure the filename is absolute to avoid problems when saving the
926            session again
927    
928            * Thuban/Model/table.py: Remove unnecessary import. Fix a typo.
929    
930    2003-04-01  Jonathan Coles   <[email protected]>
931    
932            *  Thuban/UI/renderer.py (MapRenderer.draw_point_shape): Check
933            that there actually are points in the returned list of points
934            before trying to index into the list. The list may be empty if
935            the shape is a Null Shape.
936    
937    2003-04-01  Bernhard Herzog  <[email protected]>
938    
939            * test/test_map.py: Don't use from <module> import *
940    
941    2003-04-01  Jonathan Coles   <[email protected]>
942    
943            * Thuban/Model/session.py: Use LAYER_CHANGED instead of
944            LAYER_LEGEND_CHANGED
945    
946            * Thuban/UI/dock.py (DockableWindow._OnButtonClose): Call
947            self.Destroy() to close the window after yesterday's changes.
948    
949            * test/test_map.py, test/test_session.py: Fix messages that
950            are sent from maps and layers.
951    
952    2003-03-31  Jonathan Coles   <[email protected]>
953    
954            * Thuban/UI/classifier.py: Commented out some debugging statements.
955            (ClassDataPreviewer.Draw): Draw rectangles for polygon layers per
956            RTbug #1769.
957    
958            * Thuban/UI/dock.py (DockableWindow.UnDock): Restore size and
959            position (although position doesn't work yet under GTK).
960            (DockableWindow.Destroy): New. Called when the window must be
961            closed. Namely needed when the DockFrame closes and must close
962            its children.
963            (DockFrame): Listen for EVT_CLOSE and destroy all children.
964    
965            * Thuban/UI/legend.py (LegendPanel.Destroy): New. Cleans up
966            when then window is told to close.
967            (LegendTree._OnMsgLayerChanged): Fixes a seg fault bug. See
968            comment in source for more info.
969    
970            * Thuban/UI/main.py: Show the legend by default when Thuban starts.
971    
972            * Thuban/UI/mainwindow.py: Renamed OnClose to _OnClose for
973            symmetry with other such methods.
974            (MainWindow.ShowLegend): Show the legend docked by default.
975    
976    2003-03-28  Jonathan Coles   <[email protected]>
977    
978            * Thuban/UI/classifier.py: Support for highlighting a specific
979            group within the grid when the classification dialog is opened.
980            Also contains a lot of debugging printouts which will later
981            be removed.
982    
983            * Thuban/UI/dock.py: Complete rework on the dock code so that
984            that it is fairly removed from the rest of the Thuban application.
985            It is easy to add new docks which the rest of the program having
986            to be aware of them.
987    
988            * Thuban/UI/legend.py: Modifications to support selecting a
989            specific group in the classification dialog. Changed how layers
990            are drawn when the layer is visible/invisible.
991    
992            * Thuban/UI/mainwindow.py: Removed legend specific code and
993            replaced it with calls to the new dock code.
994    
995            * Thuban/UI/renderer.py (MapRenderer.__init__): Added assert
996            to check if scale > 0. Trying to track down a divide by zero.
997    
998  2003-03-26  Jonathan Coles   <[email protected]>  2003-03-26  Jonathan Coles   <[email protected]>
999    
1000          * Thuban/UI/legend.py: Removed unnecessary LegendDialog class.          * Thuban/UI/legend.py: Removed unnecessary LegendDialog class.

Legend:
Removed from v.567  
changed lines
  Added in v.790

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26