/[thuban]/branches/WIP-pyshapelib-bramz/ChangeLog
ViewVC logotype

Annotation of /branches/WIP-pyshapelib-bramz/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log


Revision 723 - (hide annotations)
Thu Apr 24 15:31:53 2003 UTC (21 years, 10 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 103129 byte(s)
First step towards table management. Introduce a simple data
abstraction so that we replace the data a layer uses more easily
in the next step.

* Thuban/Model/data.py: New file with a simple data abstraction
that bundles shapefile and dbffile into one object.

* Thuban/Model/session.py (Session.OpenShapefile): New method to
open shapefiles and return a shape store object

* Thuban/Model/layer.py (Layer.__init__): Pass the data as a store
object instead of a shapefile filename. This introduces a new
instance variable store holding the datastore. For intermediate
backwards compatibility keep the old instance variables.
(open_shapefile): Removed. No longer needed with the shape store.
(Layer.SetShapeStore, Layer.ShapeStore): New methods to set and
get the shape store used by a layer.
(Layer.Destroy): No need to explicitly destroy the shapefile or
table anymore.

* Thuban/UI/mainwindow.py (MainWindow.AddLayer)
(MainWindow.AddLayer): Use the session's OpenShapefile method to
open shapefiles

* Thuban/Model/load.py (ProcessSession.start_layer): Use the
session's OpenShapefile method to open shapefiles

* test/test_classification.py
(TestClassification.test_classification): Use the session's
OpenShapefile method to open shapefiles and build the filename in
a more platform independed way

* test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
Implement to have a session to use in the tests
(TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
(TestLayer.test_point_layer, TestLayer.test_empty_layer): Use the
session's OpenShapefile method to open shapefiles
(TestLayerLegend.setUp): Instantiate a session so that we can use
it to open shapefiles.
(TestLayerLegend.tearDown): Make sure that all references to
layers and session are removed otherwise we may get a resource
leak

* test/test_map.py (TestMapAddLayer.test_add_layer)
(TestMapWithContents.setUp): Instantiate a session so that we can
use it to open shapefiles.
(TestMapWithContents.tearDown): Make sure that all references to
layers, maps and sessions are removed otherwise we may get a
resource leak
("__main__"): use support.run_tests() so that more info about
uncollected garbage is printed

* test/test_save.py (SaveSessionTest.testSingleLayer): Use the
session's OpenShapefile method to open shapefiles
("__main__"): use support.run_tests() so that more info about
uncollected garbage is printed

* test/test_selection.py (TestSelection.tearDown): Make sure that
all references to the session and the selection are removed
otherwise we may get a resource leak
(TestSelection.get_layer): Instantiate a session so that we can
use it to open shapefiles.
("__main__"): use support.run_tests() so that more info about
uncollected garbage is printed

* test/test_session.py (TestSessionBase.tearDown)
(TestSessionWithContent.tearDown): Make sure that all references
to the session and layers are removed otherwise we may get a
resource leak
(TestSessionWithContent.setUp): Use the session's OpenShapefile
method to open shapefiles

1 bh 723 2003-04-24 Bernhard Herzog <[email protected]>
2    
3     First step towards table management. Introduce a simple data
4     abstraction so that we replace the data a layer uses more easily
5     in the next step.
6    
7     * Thuban/Model/data.py: New file with a simple data abstraction
8     that bundles shapefile and dbffile into one object.
9    
10     * Thuban/Model/session.py (Session.OpenShapefile): New method to
11     open shapefiles and return a shape store object
12    
13     * Thuban/Model/layer.py (Layer.__init__): Pass the data as a store
14     object instead of a shapefile filename. This introduces a new
15     instance variable store holding the datastore. For intermediate
16     backwards compatibility keep the old instance variables.
17     (open_shapefile): Removed. No longer needed with the shape store.
18     (Layer.SetShapeStore, Layer.ShapeStore): New methods to set and
19     get the shape store used by a layer.
20     (Layer.Destroy): No need to explicitly destroy the shapefile or
21     table anymore.
22    
23     * Thuban/UI/mainwindow.py (MainWindow.AddLayer)
24     (MainWindow.AddLayer): Use the session's OpenShapefile method to
25     open shapefiles
26    
27     * Thuban/Model/load.py (ProcessSession.start_layer): Use the
28     session's OpenShapefile method to open shapefiles
29    
30     * test/test_classification.py
31     (TestClassification.test_classification): Use the session's
32     OpenShapefile method to open shapefiles and build the filename in
33     a more platform independed way
34    
35     * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
36     Implement to have a session to use in the tests
37     (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
38     (TestLayer.test_point_layer, TestLayer.test_empty_layer): Use the
39     session's OpenShapefile method to open shapefiles
40     (TestLayerLegend.setUp): Instantiate a session so that we can use
41     it to open shapefiles.
42     (TestLayerLegend.tearDown): Make sure that all references to
43     layers and session are removed otherwise we may get a resource
44     leak
45    
46     * test/test_map.py (TestMapAddLayer.test_add_layer)
47     (TestMapWithContents.setUp): Instantiate a session so that we can
48     use it to open shapefiles.
49     (TestMapWithContents.tearDown): Make sure that all references to
50     layers, maps and sessions are removed otherwise we may get a
51     resource leak
52     ("__main__"): use support.run_tests() so that more info about
53     uncollected garbage is printed
54    
55     * test/test_save.py (SaveSessionTest.testSingleLayer): Use the
56     session's OpenShapefile method to open shapefiles
57     ("__main__"): use support.run_tests() so that more info about
58     uncollected garbage is printed
59    
60     * test/test_selection.py (TestSelection.tearDown): Make sure that
61     all references to the session and the selection are removed
62     otherwise we may get a resource leak
63     (TestSelection.get_layer): Instantiate a session so that we can
64     use it to open shapefiles.
65     ("__main__"): use support.run_tests() so that more info about
66     uncollected garbage is printed
67    
68     * test/test_session.py (TestSessionBase.tearDown)
69     (TestSessionWithContent.tearDown): Make sure that all references
70     to the session and layers are removed otherwise we may get a
71     resource leak
72     (TestSessionWithContent.setUp): Use the session's OpenShapefile
73     method to open shapefiles
74    
75 jonathan 721 2003-04-24 Jonathan Coles <[email protected]>
76    
77     * Thuban/Model/load.py (XMLReader.read): Should have been checking
78     if the file_or_filename object had the 'read' attribute.
79    
80 jonathan 715 2003-04-23 Jonathan Coles <[email protected]>
81    
82 jonathan 720 * Thuban/Model/resource.py: Fixes RTbug #1813.
83     (ReadProjFile): Add documentation about which exceptions are raised.
84     Always pass the exceptions up to the caller.
85     (GetProjFiles): If the directory can't be read return an empty list.
86     If any of the proj files can't be read skip that file and go
87     on to the next one.
88    
89     * test/test_proj.py: Added test cases to handle nonexistent files,
90     unreadable files, and files that don't parse correctly.
91    
92     2003-04-23 Jonathan Coles <[email protected]>
93    
94 jonathan 716 Projection dialog. Allows the user to select from a list
95     of projection templates and optionally edit them and save new ones.
96    
97     * Thuban/UI/projdialog.py (ProjFrame): New. Main dialog.
98     (ProjPanel): Base class for projection specific panels.
99     (TMPanel): Projection panel for Transverse Mercartor.
100     (UTMPanel): Projection panel for Universal Transverse Mercartor.
101     (LCCPanel): Projection panel for Lambert Conic Conformal.
102     (GeoPanel): Projetion panel for Geographic Projection.
103    
104     2003-04-23 Jonathan Coles <[email protected]>
105    
106 jonathan 715 * Thuban/Model/load.py (XMLReader): Renamed from XMLProcessor to
107     promote symmetry. There now exists XMLReader and XMLWriter.
108     (XMLReader.read): New. Call to read the given file descriptor or
109     filename.
110     (XMLReader.close): New. Make sure the file is closed.
111     (XMLReader.GetFileName): New. Return just the file name that is being
112     read from.
113     (XMLReader.GetDirectory): New. Return just the directory of the file
114     that is being read.
115     (XMLReader.AddDispatchers): New. Take a dictionary which contains
116     the names of functions to call as the XML tree is parsed.
117     (XMLReader.startElementNS): Updated to use new dispatcher dictionary.
118     (XMLReader.endElementNS): Updated to use new dispatcher dictionary.
119     (SessionLoader): Removed class variables start_dispatcher and
120     end_dispatcher since this functionality is now part of a class
121     instance. Fixes RTbug #1808.
122     (SessionLoader.__init__): Add dispatcher functions.
123     (load_xmlfile): Code was moved into the XMLReader.read().
124     (load_session): Use modified SessionLoader.
125    
126     * Thuban/Model/map.py (Map.GetProjection): New. Returns the
127     map's projection.
128    
129     * Thuban/Model/proj.py (Projection.GetParameters): Renamed to
130     GetAllParameters.
131     (Projection.GetParameter): Returns the value for the given parameter.
132    
133     * Thuban/Model/resource.py: Use XMLReader and XMLWriter.
134     (GetProjFiles): Renamed from GetProjections. Now returns a list
135     of ProjFile objects.
136     (GetSystemProjFiles): Renamed from GetSuppliedProjections. Returns
137     a list of ProjFile objects whose files are not user defined.
138     (GetUserProjFiles): Renamed from GetUserProjections. Returns a
139     list of ProjFile objects whose files are user defined.
140     (ProjFileReader): Extend new XMLReader.
141    
142     * Thuban/Model/save.py (XMLWriter): Renamed from XMLSaver to
143     promote symmetry.
144    
145     * Thuban/UI/classgen.py (ClassGenDialog.__init__): Use a wxChoice
146     control instead of a wxComboBox. wxChoice controls do not generate
147     events as the uses highlights possible choices which fixes problems
148     with resizing the dialog when the use selects an option.
149    
150     * Thuban/UI/classifier.py (Classifier.__init__): Use a wxChoice
151     control instead of a wxComboBox.
152    
153     * Thuban/UI/mainwindow.py (MainWindow.Projection): Use new projection
154     dialog.
155    
156     * test/test_proj.py (TestProjection.test): New tests for GetParameter
157     method.
158    
159 bh 703 2003-04-22 Bernhard Herzog <[email protected]>
160    
161 bh 705 * Thuban/UI/mainwindow.py: Remove some unused imports and global
162     constants
163    
164 bh 703 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
165     (IdentifyGridCtrl.selected_shape): Use table, not shapetable.
166    
167 bh 700 2003-04-17 Bernhard Herzog <[email protected]>
168    
169 bh 701 * Thuban/Model/layer.py: Don't import LAYER_LEGEND_CHANGED.
170     (Layer): Update doc-string since LAYER_LEGEND_CHANGED is not used
171     anymore.
172     (Layer.BoundingBox, Layer.GetFieldType, Layer.NumShapes)
173     (Layer.ShapeType, Layer.Shape): No need to call
174     self.open_shapefile since it's always called in __init__
175    
176 bh 700 * Thuban/UI/application.py (ThubanApplication.MainLoop): Removed.
177     In wxPython 2.4 there's no need to extend MainLoop anymore since
178     wxPython itself makes sure OnExit is called.
179    
180 jonathan 688 2003-04-16 Jonathan Coles <[email protected]>
181    
182 jonathan 693 Initial putback of projection management code. Includes new
183     classes to read and write projection files. The current load
184     and save classes were abstracted a bit so they could be reused.
185     The Projection class was extended to provide new methods and
186     have a name.
187    
188     * Thuban/Model/load.py (XMLProcessor): New. Contains all the
189     general XML reading methods that were part of ProcessSession.
190    
191     * Thuban/Model/proj.py (Projection.__init__): Accepts an optional
192     name.
193     (ProjFile): New. Represents a file that contains projection
194     information.
195    
196     * Thuban/Model/resource.py: New. Contains general utilities
197     for read and writing projection files.
198    
199     * Thuban/Model/save.py (XMLSaver): New. Contains all the
200     general XML writing methods that were part of SessionSaver.
201     (SessionSaver): Renamed from Saver.
202    
203     * test/test_proj.py: New test cases for the projection
204     file read and write functions.
205    
206     2003-04-16 Jonathan Coles <[email protected]>
207    
208 jonathan 688 * Thuban/Model/classification.py: Use repr() around values
209     in the ClassGroup*.__repr__() methods so it is clearer when
210     a value is a string and when it is a number.
211    
212     * test/test_load.py: Rework the classification test to test
213     that we can load old files.
214     (testLabels): Test a file where the groups have labels.
215    
216 bh 687 2003-04-16 Bernhard Herzog <[email protected]>
217    
218     Safer implementation of the performance enhancements of the
219     low-level renderer:
220    
221     * extensions/thuban/wxproj.cpp (extract_projection)
222     (extract_pointer): Rename extract_projection to extract_pointer
223     and redefine its purpose to return the pointer stored in a CObject
224     returned by the object's cobject method. Update all callers.
225     (s_draw_info, free_draw_info, draw_polygon_init): Implement the
226     handling of these low-level parameters so that each s_draw_info
227     instance is handled as a CObject at python level that also
228     contains real references to the actual python objects which
229     contain the values in the struct. Add free_draw_info as the
230     destructor.
231     (draw_polygon_shape): Add the py_draw_info parameter which must a
232     cobject containing an s_draw_info pointer.
233    
234     * Thuban/UI/renderer.py (MapRenderer.polygon_render_param): New
235     method to instantiat the low-level render parameter
236     (MapRenderer.draw_shape_layer): Use the new method. Remove some
237     commented out code.
238     (MapRenderer.draw_polygon_shape): Make the first parameter not the
239     layer but the low-level render parameter
240     (ScreenRenderer.draw_shape_layer): Use the low-level render
241     parameter.
242    
243 jonathan 673 2003-04-15 Jonathan Coles <[email protected]>
244    
245 jonathan 680 * Thuban/Model/classification.py: Implemented __repr__ for
246     the ClassGroup* classes to make debugging a bit easier.
247     (ClassGroup.SetLabel): Check that the string is an instance
248     of StringTypes not StringType. Accounts for Unicode strings.
249    
250     * Thuban/Model/color.py: Implemented __repr__ to make
251     debugging a bit easier.
252    
253     * Thuban/Model/save.py (Saver.write_classification): Need to
254     save the group label.
255    
256     * test/test_load.py (testClassification): New. Loads the
257     iceland_sample_test.thuban file and checks if it was loaded
258     correctly.
259    
260     2003-04-15 Jonathan Coles <[email protected]>
261    
262 jonathan 673 * extensions/thuban/wxproj.cpp (draw_polygon_init): New. Used
263     to improve rendering performance by initializing the variables
264     that are not change each time draw_polygon_shape() is called.
265     The values are stored in a global struct draw_info.
266     (draw_polygon_shape): Removed initialization code that is
267     now in draw_polygon_init().
268    
269     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Make
270 jonathan 674 drawing initialization call to draw_polygon_init()
271     (MapRenderer.draw_polygon_shape): Use new signature of
272     draw_polygon_shape.
273 jonathan 673
274 jonathan 674 * Thuban/UI/classgen.py (GenUniformPanel): Fix spin control
275     weirdness by setting the range to (1, maxint).
276 jonathan 673
277 jonathan 674 * Thuban/Model/classification.py (ClassGroupProperties): Make
278     instance variables private and optimize comparison operator
279     by first checking if the color references are the same.
280     (ClassGroupSingleton): Make instance variables private.
281     (ClassGroupRange): Make instance variables private.
282 jonathan 673
283 jonathan 674 * HOWTO-Release: Filled in missing steps for releasing packages.
284    
285 bh 672 2003-04-15 Bernhard Herzog <[email protected]>
286    
287     First stab at internationalized messages:
288    
289     * Thuban/__init__.py (_): Implement the translation function for
290     real using the python gettext module.
291    
292     * Thuban/UI/classifier.py (ClassTable.GetRowLabelValue): Don't
293     translate empty strings.
294    
295     * Thuban/UI/application.py (ThubanApplication.read_startup_files):
296     Add a missing space to a warning message
297    
298     * po/README: New. Notes about the management of the translation
299     files.
300    
301     * po/Makefile: New. Makefile to help manage the translation files.
302    
303     * po/es.po: New. Spanish translation by Daniel Calvelo Aros
304    
305     * MANIFEST.in: Include the *.mo files in Resources/Locale and the
306     translations and support files in po/
307    
308     * setup.py (data_files): Add the *.mo files to the data_files too
309    
310     * README: Add note about the translations when building from CVS
311    
312 jonathan 669 2003-04-14 Jonathan Coles <[email protected]>
313    
314     * Thuban/UI/dock.py: Fixes some window resizing problems most
315     noticable under windows. Always assume the button bitmaps will
316     be there. Code clean up.
317     (DockabelWindow.Dock, DockableWindow.UnDock): Force all the
318     images for the dock/undock button to the same images.
319     Work around for RTbug #1801.
320    
321     * Thuban/UI/legend.py (LegendPanel.__init__): The toolbar should
322     be allowed to grow within the sizer. Fixes a bug under Windows
323     where the toolbar wasn't being drawn.
324    
325 frank 664 2003-04-14 Frank Koormann <[email protected]>
326    
327     * Resources/Bitmaps/dock_12.xpm, Resources/Bitmaps/undock_12.xpm:
328     Updated design to try to make the button functionality more
329     transparent.
330    
331 jonathan 662 2003-04-14 Jonathan Coles <[email protected]>
332    
333     * Thuban/UI/legend.py (LegendPanel.__init__): Call Create() to
334     finalize the intialization of the panel.
335    
336     * Thuban/UI/dock.py (DockPanel.Create): New. Finalizes the
337     creation of the panel. Should be the last thing called in the
338     initializer of a subclass.
339    
340     * Thuban/UI/classgen.py (ClassGenDialog.__init__): Actively
341     set the current selections in the combo boxes. This is needed
342     under Windows.
343    
344     * Thuban/UI/classifier.py (Classifier.__init__): Add a top
345     level panel to the dialog so that the background colors are
346     consistent under Windows.
347    
348 jonathan 646 2003-04-11 Jonathan Coles <[email protected]>
349    
350 jonathan 662 * Thuban/UI/classgen.py: Change color ramps to start at white
351     not black.
352    
353     * Thuban/UI/legend.py: Enable/disable the legend buttons when
354     the legend changes. Fixes RTbug #1793.
355    
356     * test/test_classification.py: Added test for copying of
357     classifications.
358    
359     2003-04-11 Jonathan Coles <[email protected]>
360    
361 jonathan 647 * Thuban/UI/resource.py: New. Centralize the loading of resources
362     such as bitmaps.
363    
364     * Thuban/UI/classgen.py (GenUniquePanel.__init__): Reordered buttons,
365     added images to the move buttons, added 'reverse' button.
366     (CustomRampPanel.__init__): Added images to the move buttons.
367     (GreyRamp): New. Generates a ramp from white to black.
368     (HotToColdRamp): New. Generates a ramp from cold to hot colors.
369    
370     * Thuban/UI/classifier.py: Refactored ID's from ID_CLASSIFY_* to
371     ID_PROPERTY_*.
372     (Classifier.__init__): Minor changes to the layout.
373     (Classifier._OnTitleChanged): Listen for when the user edits the
374     title and update the dialog's title and the layer's title.
375    
376     * Thuban/UI/dock.py: Use new bitmaps for the control buttons.
377    
378     * Thuban/UI/legend.py: Use new bitmaps for the control buttons.
379     (LegendTree._OnMsgLayerTitleChanged): Change the displayed title
380     if the layer's title changes.
381    
382     * Thuban/UI/mainwindow.py: Added new menu item and associated code
383     to open a dialog to rename the map.
384     (MainWindow): Use new resource class to import bitmaps.
385    
386     2003-04-11 Jonathan Coles <[email protected]>
387    
388 jonathan 646 * Resources/Bitmaps/close_12.xpm, Resources/Bitmaps/dock_12.xpm,
389 jonathan 647 Resources/Bitmaps/group_use.xpm, Resources/Bitmaps/group_use_all.xpm,
390     Resources/Bitmaps/group_use_none.xpm,
391     Resources/Bitmaps/group_use_not.xpm,
392     Resources/Bitmaps/hide_layer.xpm,
393     Resources/Bitmaps/layer_properties.xpm,
394     Resources/Bitmaps/lower_layer.xpm, Resources/Bitmaps/raise_layer.xpm,
395     Resources/Bitmaps/show_layer.xpm, Resources/Bitmaps/undock_12.xpm:
396     New.
397 jonathan 646
398 jonathan 636 2003-04-10 Jonathan Coles <[email protected]>
399    
400 jonathan 644 * Thuban/Model/classification.py: (ClassGroupRange.__init__):
401     Should pass group to ClassGroup constructor.
402    
403     2003-04-10 Jonathan Coles <[email protected]>
404    
405 jonathan 636 * Thuban/Model/classification.py: (ClassGroup): Move all the common
406     methods of the derived classes ([Set|Get]Properties(), __eq__, __ne__)
407     here. Implement SetVisible(), IsVisible().
408     (ClassGroup.__init__): Add group parameter which acts as a copy
409     constructor.
410    
411     * Thuban/UI/classifier.py (ClassTable): Add a new column for the
412     "Visible" check boxes.
413     (Classifier): Rename the buttons and refactor the code to match
414     the new labels.
415    
416     * Thuban/UI/legend.py: Classify button is now called "Properties".
417     Refactored the code to change variable names.
418     (LegendTree.__FillTreeLayer): Only list a group if it is visible.
419    
420     * Thuban/UI/mainwindow.py: MainWindow.OpenClassifier renamed to
421     MainWindow.OpenLayerProperties. MainWindow.LayerEditProperties
422     renamed to MainWindow.LayerEditProperties.
423     (MainWindow.ToggleLegend): Don't include map name in legend title.
424     (MainWindow.SetMap): Added the map name to the window title.
425     (MainWindow.LayerFillColor, MainWindow.LayerTransparentFill,
426     MainWindow.LayerOutlineColor, MainWindow.LayerNoOutline): Removed.
427     Functionality is found in the layer properties dialog.
428    
429     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
430     draw visible groups.
431    
432 jonathan 626 2003-04-09 Jonathan Coles <[email protected]>
433    
434 jonathan 634 * Thuban/UI/classgen.py: Modifications to allow simple
435     addition and selection of new color schemes.
436     (MonochromaticRamp): New. Generates a ramp between two colors.
437     (RedRamp): New. Generates a ramp of all red.
438     (GreenRamp): New. Generates a ramp of all green.
439     (BlueRamp): New. Generates a ramp of all blue.
440    
441     2003-04-09 Jonathan Coles <[email protected]>
442    
443 jonathan 626 * Thuban/Model/classification.py (Classification.__deepcopy__):
444     Need to copy over field and fieldType attributes.
445    
446     * Thuban/Model/table.py (Table.field_range): New. Retrive the
447     maximum and minimum values over the entire table for a given
448     field.
449     (Table.GetUniqueValues): New. Retrieve all the unique values
450     in the table for a given field.
451    
452     * Thuban/UI/classgen.py: Renamed GenRangePanel to GenUniformPanel.
453     (GenUniquePanel): New. Controls to allow the user to select
454     which unique field values they would like in the classification.
455     (CustomRampPanel): Code that was in ClassGenDialog that allows
456     the user to select the properties for a custom ramp.
457     (ClassGenerator.GenUniformDistribution): Was called GenerateRanges.
458    
459     * Thuban/UI/classifier.py: Removed a lot of debugging code.
460     (Classifier._SetClassification): Callback method so that the
461     class generator can set the classification in the grid.
462     (ClassGroupPropertiesCtrl): New. Encapsulates the drawing and
463     editing of a group properties class into a wxWindows control.
464    
465     * Thuban/UI/dock.py: It was decided that if the user closes
466     a dockable window the window should simply hide itself. That
467     way if the user wants to show the dock again it appears in the
468     same place as it was when it was closed.
469     (DockableWindow.Destroy): Call renamed method OnDockDestroy().
470     (DockableWindow._OnButtonClose): Hide the window instead of
471     destroying it.
472     (DockableWindow._OnClose): Hide the window instead of
473     destroying it.
474    
475     * Thuban/UI/legend.py (LegendTree): Use a private method to
476     consistently set the font and style of the text. Fixes RTbug #1786.
477    
478     * Thuban/UI/mainwindow.py: Import just the Classifier class.
479    
480 bh 623 2003-04-07 Bernhard Herzog <[email protected]>
481    
482 bh 625 * Thuban/UI/mainwindow.py (main_menu): Move the toggle_legend item
483     to the map module
484    
485     2003-04-07 Bernhard Herzog <[email protected]>
486    
487 bh 623 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree): Removed in
488     favor of ToggleSessionTree
489     (MainWindow.ToggleSessionTree): New method to toggle visibility of
490     the session tree.
491     (MainWindow.SessionTreeShown): New method to return whether the
492     session tree is currently shown.
493     (MainWindow.ToggleLegend): New method to toggle visibility of the
494     legend
495     (MainWindow.ShowLegend): Implement in terms of ToggleLegend and
496     LegendShown
497     (MainWindow.LegendShown): New method to return whether the legend
498     is currently shown.
499     (_method_command): Add checked parameter so we can define check
500     menu items
501     (_has_tree_window_shown, _has_legend_shown): Use the appropriate
502     mainwindow methods.
503     (show_session_tree, show_legend commands): Removed.
504     (toggle_session_tree, toggle_legend commands): New commands to
505     toggle the visibility of the dialogs
506    
507 jonathan 612 2003-04-07 Jonathan Coles <[email protected]>
508    
509 jonathan 619 * Thuban/UI/classgen.py: Fix Windows problem.
510    
511     * Thuban/UI/dock.py: Fix Windows problem.
512    
513     * Thuban/UI/mainwindow.py: Use False instead of false.
514     (MainWindow.ShowLegend): Remove unnecessary switch parameter.
515    
516     2003-04-07 Jonathan Coles <[email protected]>
517    
518 jonathan 612 Since we now say that the order of the groups in a classification
519     matters, it makes sense to be able to manipulate that order. Most
520     of the changes to Thuban/Model/classification.py are to that end.
521    
522     * Thuban/Model/classification.py (Classification.AppendGroup,
523     Classification.InsertGroup, Classification.ReplaceGroup,
524     Classification.RemoveGroup, Classification.GetGroup): Do as the
525     names imply.
526     (Classification.FindGroup): This was called GetGroup, but GetGroup
527     takes an index, while FindGroup takes a value.
528     (Classification.__deepcopy__): Copy all the groups, BUT NOT THE LAYER
529     REFERENCE. Currently there is a cyclic reference between the layer
530     and its classification. If the classification doesn't need to know
531     its owning layer we can change this, since it may make sense to be
532     able to use the same classification with different layers.
533    
534     * Thuban/Model/load.py: Use Classification.AppendGroup(), not AddGroup()
535    
536     * Thuban/UI/classgen.py: Use Classification.AppendGroup(),
537     not AddGroup()
538    
539     * Thuban/UI/classifier.py: Now that we can depend on the order in
540     a Classification and have methods to manipulate that order we don't
541     need to use our own data structures in the grid. We can simply make
542     the grid/table access the information they need from a copy of
543     the classification object.
544     (Classifier._OnCloseBtn): Event handler for when the user clicks
545     'Close'. This is needed so if the user applies changes and then
546     continues to change the table the user has the option of discarding
547     the most recent changes and keeping what they applied.
548    
549     * Thuban/UI/mainwindow.py: Put "Show Legend" and "Show Session Tree"
550     into the same group.
551    
552     * extensions/thuban/wxproj.cpp (check_version): If Thuban is compiled
553     with a really old version of proj, PJ_VERSION won't even be defined.
554     If it isn't defined then just compile so that the function always
555     returns Py_False.
556    
557     * test/test_classification.py: Fix tests to use the renamed methods.
558     Still need to write tests for the new methods.
559    
560 jonathan 601 2003-04-04 Jonathan Coles <[email protected]>
561 jonathan 608
562 jonathan 612 * Thuban/UI/classifier.py (Classifier.__SelectField): Move the
563     call to SetSelection out of the method and before the call
564     to __SelectField in __init__. This prevents a recursion of events
565     when _OnFieldSelect is triggered by the user.
566    
567     2003-04-04 Jonathan Coles <[email protected]>
568    
569 jonathan 608 * Thuban/Model/classification.py: Rename Color.None to
570     Color.Transparent.
571     (ClassGroupProperties.SetLineColori, ClassGroupProperties.SetFill):
572     Don't bother copying the color, since Colors are immutable.
573    
574     * Thuban/Model/color.py, Thuban/Model/layer.py, Thuban/Model/load.py,
575     Thuban/UI/classifier.py, Thuban/UI/mainwindow.py,
576     Thuban/UI/renderer.py, Thuban/UI/view.py:
577     Rename Color.None to Color.Transparent.
578    
579     * test/test_classification.py, test/test_load.py: Rename Color.None
580     to Color.Transparent.
581    
582     2003-04-04 Jonathan Coles <[email protected]>
583 jonathan 603
584     * Thuban/Model/classification.py: Fix assert calls.
585     (ClassGroupProperties.SetLineColor, ClassGroupProperties.SetFill):
586     Copy the color parameter rather than hold onto a reference.
587 jonathan 601
588 jonathan 603 * Thuban/Model/color.py (Color.__copy__, Color.__deepcopy): Copy
589     the color object.
590     (NoColor.__copy__, NoColor.__deepcopy): Return 'self' so that we
591     are sure there exists only one refernce to Color.None in the system.
592     This allows us to use 'is' rather than the comparision functions.
593    
594     * Thuban/Model/save.py: Fix assert calls.
595    
596     * Thuban/UI/classifier.py: Fix assert calls.
597     (ClassGrid._OnCellDClick): Call up to the classifier to open the
598     dialog to edit the groups properties.
599     (ClassGrid._OnCellResize): Make sure that the scollbars are drawn
600     correctly if a cell is resized.
601     (ClassTable.SetClassification): New. Changes the classification
602     that is in the table.
603     (ClassTable.__SetRow): Allow groups to be prepended.
604     (Classifier): New code for opening the EditProperties and
605     GenerateRanges dialogs.
606     (SelectPropertiesDialog.__GetColor): Only set the color in the
607     color dialog if the current color is not None.
608    
609     * Thuban/UI/dock.py: Fix assert calls.
610    
611     * Thuban/UI/legend.py: Fix assert calls.
612    
613     * Thuban/UI/renderer.py: Fix assert calls.
614    
615     * Thuban/UI/classgen.py (ClassGenDialog): Dialog for generating
616     classifications.
617     (GenRangePanel): Panel specific to range generation.
618     (GenSingletonPanel): Panel specific to singleton generation.
619     (ClassGenerator): Class responsible for actually generating
620     the classification from the data gathered in the dialog box.
621     (PropertyRamp): Generates properties whose values range from
622     a starting property to an ending property.
623 jonathan 601
624 bh 600 2003-04-03 Bernhard Herzog <[email protected]>
625    
626     * test/support.py (print_garbage_information): New function that
627     prints information about still connected messages and memory
628     leaks.
629     (run_suite): Removed.
630     (run_tests): New function for use as a replacement of
631     unittest.main in the test_* files. This one calls
632     print_garbage_information at the end.
633    
634     * test/runtests.py (main): Use support.print_garbage_information
635    
636     * test/test_layer.py: Use support.run_tests instead of
637     unittest.main so we get memory leak information
638     (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
639     (TestLayer.test_point_layer, TestLayer.test_empty_layer)
640     (TestLayerLegend.test_visibility): Call the layer's Destroy method
641     to fix a memory leak.
642    
643     * test/test_classification.py: Use support.run_tests instead of
644     unittest.main so we get memory leak information
645     (TestClassification.test_classification): Call the layer's Destroy
646     method to fix a memory leak.
647    
648 bh 591 2003-04-02 Bernhard Herzog <[email protected]>
649    
650 bh 595 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
651     Handle the reference counts of the return value and errors in
652     PyArg_ParseTuple correctly.
653    
654 bh 593 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
655     sure the filename is absolute to avoid problems when saving the
656     session again
657    
658 bh 591 * Thuban/Model/table.py: Remove unnecessary import. Fix a typo.
659    
660 jonathan 587 2003-04-01 Jonathan Coles <[email protected]>
661    
662 jonathan 589 * Thuban/UI/renderer.py (MapRenderer.draw_point_shape): Check
663 jonathan 587 that there actually are points in the returned list of points
664     before trying to index into the list. The list may be empty if
665     the shape is a Null Shape.
666    
667 bh 586 2003-04-01 Bernhard Herzog <[email protected]>
668    
669     * test/test_map.py: Don't use from <module> import *
670    
671 jonathan 581 2003-04-01 Jonathan Coles <[email protected]>
672    
673     * Thuban/Model/session.py: Use LAYER_CHANGED instead of
674     LAYER_LEGEND_CHANGED
675    
676     * Thuban/UI/dock.py (DockableWindow._OnButtonClose): Call
677     self.Destroy() to close the window after yesterday's changes.
678    
679     * test/test_map.py, test/test_session.py: Fix messages that
680     are sent from maps and layers.
681    
682 jonathan 575 2003-03-31 Jonathan Coles <[email protected]>
683    
684     * Thuban/UI/classifier.py: Commented out some debugging statements.
685     (ClassDataPreviewer.Draw): Draw rectangles for polygon layers per
686     RTbug #1769.
687    
688     * Thuban/UI/dock.py (DockableWindow.UnDock): Restore size and
689     position (although position doesn't work yet under GTK).
690     (DockableWindow.Destroy): New. Called when the window must be
691     closed. Namely needed when the DockFrame closes and must close
692     its children.
693     (DockFrame): Listen for EVT_CLOSE and destroy all children.
694    
695     * Thuban/UI/legend.py (LegendPanel.Destroy): New. Cleans up
696     when then window is told to close.
697     (LegendTree._OnMsgLayerChanged): Fixes a seg fault bug. See
698     comment in source for more info.
699    
700     * Thuban/UI/main.py: Show the legend by default when Thuban starts.
701    
702     * Thuban/UI/mainwindow.py: Renamed OnClose to _OnClose for
703     symmetry with other such methods.
704     (MainWindow.ShowLegend): Show the legend docked by default.
705    
706 jonathan 569 2003-03-28 Jonathan Coles <[email protected]>
707    
708     * Thuban/UI/classifier.py: Support for highlighting a specific
709     group within the grid when the classification dialog is opened.
710     Also contains a lot of debugging printouts which will later
711     be removed.
712    
713     * Thuban/UI/dock.py: Complete rework on the dock code so that
714     that it is fairly removed from the rest of the Thuban application.
715     It is easy to add new docks which the rest of the program having
716     to be aware of them.
717    
718     * Thuban/UI/legend.py: Modifications to support selecting a
719     specific group in the classification dialog. Changed how layers
720     are drawn when the layer is visible/invisible.
721    
722     * Thuban/UI/mainwindow.py: Removed legend specific code and
723     replaced it with calls to the new dock code.
724    
725     * Thuban/UI/renderer.py (MapRenderer.__init__): Added assert
726     to check if scale > 0. Trying to track down a divide by zero.
727    
728 jonathan 557 2003-03-26 Jonathan Coles <[email protected]>
729    
730 jonathan 567 * Thuban/UI/legend.py: Removed unnecessary LegendDialog class.
731     (LegendPanel): Removed _OnDock()/_OnUnDock() methods which are
732     now part of DockableWindow.
733     (LegendPanel.DoOnSelChanged): Select the current layer in the
734     map.
735     (LegendTree._OnSelChanged): Call LegendPanel.DoOnSelChanged()
736     with the selected layer and/or group.
737    
738     2003-03-26 Jonathan Coles <[email protected]>
739    
740 jonathan 557 This putback contains the code for dockable windows. There is
741     no support in wxWindows as of this date for windows that can
742     attach themselves to other windows.
743    
744     The current model contains a DockableWindow which has a parent
745     window for when it is detached and a dock window that it puts
746     its contents in when it is docked. The contents of a DockableWindow
747     must be a DockPanel. DockPanel itself derives from wxPanel.
748    
749     * Thuban/Model/layer.py (Layer.ClassChanged): Send a LAYER_CHANGED
750     message, not a LAYER_LEGEND_CHANGED message.
751    
752     * Thuban/Model/map.py (Map): Forward LAYER_CHANGED messages.
753    
754     * Thuban/UI/classifier.py (Classifier.__init__): Use wxADJUST_MINSIZE
755     as one of the style properties for the fieldTypeText item to
756     be sure that its size is correct when the text changes.
757    
758     * Thuban/UI/dock.py: New. Classes for the DockPanel and
759     DockableWindow.
760    
761     * Thuban/UI/legend.py: Added some more buttons and made the
762     LegendPanel a DockPanel.
763    
764     * Thuban/UI/mainwindow.py: Added sash windows to the main window
765     and supporting functions for manipulating the sashes.
766     (MainWindow.ShowLegend): Create a DockableWindow with the
767     LegendPanel as the contents.
768    
769     * Thuban/UI/messages.py: Added DOCKABLE_* messages
770    
771     * Thuban/UI/view.py (MapCanves.SetMap): Listen for LAYER_CHANGED,
772     not LAYER_LEGEND_CHANGED, messages.
773    
774 jonathan 554 2003-03-25 Jonathan Coles <[email protected]>
775    
776     * setup.py: Added custom script bdist_rpm_build_script so that
777     when the rpm is built the path to wx-config is correct.
778    
779     * setup.cfg: Added line saying to use the custom build script
780    
781 jonathan 552 2003-03-20 Jonathan Coles <[email protected]>
782    
783     Initial implementation of the Legend.
784    
785     * Thuban/UI/legend.py: New. Creates a window that shows the map's
786     Legend information and allows the user to add/modify classifications
787     and how the layers are drawn on the map.
788    
789     * setup.py: New command 'build_docs' which currently uses
790     happydoc to generate html documentation for Thuban.
791    
792     * Thuban/Model/classification.py (ClassGroup.GetDisplayText): New.
793     Returns a string which is appropriately describes the group.
794    
795     * Thuban/Model/layer.py (Layer.SetClassification): Generate a
796     LAYER_CHANGED event instead of a LAYER_LEGEND_CHANGED event.
797    
798     * Thuban/Model/map.py (Map): Rename messages and use new, more
799     specific, messages.
800    
801     * Thuban/Model/messages.py: New message to indicate that a layer's
802     data has changed (LAYER_CHANGED). New map messages to indicate
803     when layers have been added/removed/changed or if the stacking order
804     of the layers has changed.
805    
806     * Thuban/Model/session.py: Rename and use new messages.
807    
808     * Thuban/UI/classifier.py: Remember if any changes have actually
809     been applied so that if the dialog is cancelled without an application
810     of changes we don't have to set a new classification.
811     (ClassDataPreviewer): Pulled out the window specific code and put it
812     ClassDataPreviewWindow. ClassDataPreviewer can then be used to draw
813     symbols on any DC.
814    
815     * Thuban/UI/mainwindow.py: New code to open the legend.
816    
817     * Thuban/UI/view.py: Use new message names.
818    
819 jonathan 541 2003-03-19 Jonathan Coles <[email protected]>
820    
821     * Thuban/UI/main.py (verify_versions): New. Checks the versions
822     of Python, wxPython, and some other libraries.
823    
824     * extensions/thuban/wxproj.cpp (check_version): Checks the given
825     version against what wxproj was compiled with.
826     (check_version_gtk): If wxproj was compiled with gtk then check
827     the given version against the version of the gtk library
828     currently being used.
829    
830 bh 538 2003-03-14 Bernhard Herzog <[email protected]>
831    
832     * test/test_command.py: Run the tests when the module is run as a
833     script
834    
835     2003-03-14 Bernhard Herzog <[email protected]>
836    
837     Implement selection of multiple selected shapes in the same layer:
838    
839     - Introduce a new class to hold the selection. This basically
840     replaces the interactor which was nothing more than the
841     selection anyway. A major difference is of course that the new
842     selection class supports multiple selected shapes in one layer
843    
844     - Move the object that represents the selection from the
845     application to the canvas. The canvas is a better place than the
846     application because the selection represents which shapes and
847     layer of the map displayed by the canvas are selected and
848     affects how the map is drawn.
849    
850     - Make the selection and its messages publicly available through
851     the mainwindow.
852    
853     - The non-modal dialogs do not get a reference to the interactor
854     anymore as they can simply refer to their parent, the
855     mainwindow, for the what the interactor had to offer.
856    
857     * Thuban/UI/selection.py: New module with a class to represent the
858     selection.
859    
860     * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
861     these unused messages
862    
863     * Thuban/UI/application.py (ThubanApplication.OnInit)
864     (ThubanApplication.OnExit, ThubanApplication.SetSession): The
865     interactor is gone now.
866     (ThubanApplication.CreateMainWindow): There is no interactor
867     anymore so we pass None as the interactor argument for now for
868     compatibility.
869    
870     * Thuban/UI/view.py (MapCanvas.delegated_messages)
871     (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
872     Unsubscribe, delegate messages according to the delegated_messages
873     class variable.
874     (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
875     attributes from instance variables as described with the
876     delegated_methods class variable.
877     (MapCanvas.__init__): New instance variable selection holding the
878     current selection
879     (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
880     pass them on to the renderer
881     (MapCanvas.SetMap): Clear the selection when a different map is
882     selected.
883     (MapCanvas.shape_selected): Simple force a complete redraw. The
884     selection class now takes care of only issueing SHAPES_SELECTED
885     messages when the set of selected shapes actually does change.
886     (MapCanvas.SelectShapeAt): The selection is now managed in
887     self.selection
888    
889     * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
890     (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
891     Unsubscribe, delegate messages according to the delegated_messages
892     class variable.
893     (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
894     attributes from instance variables as described with the
895     delegated_methods class variable.
896     (MainWindow.__init__): The interactor as ivar is gone. The
897     parameter is still there for compatibility. The selection messages
898     now come from the canvas.
899     (MainWindow.current_layer, MainWindow.has_selected_layer):
900     Delegate to the the canvas.
901     (MainWindow.LayerShowTable, MainWindow.Classify)
902     (MainWindow.identify_view_on_demand): The dialogs don't need the
903     interactor parameter anymore.
904    
905     * Thuban/UI/tableview.py (TableFrame.__init__)
906     (LayerTableFrame.__init__, LayerTableFrame.OnClose)
907     (LayerTableFrame.row_selected): The interactor is gone. It's job
908     from the dialog's point of view is now done by the mainwindow,
909     i.e. the parent. Subscribe to SHAPES_SELECTED instead
910     of SELECTED_SHAPE
911    
912     * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
913     is gone. It's job from the dialog's point of view is now done by
914     the mainwindow, i.e. the parent.
915    
916     * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
917     gone. It's job from the dialog's point of view is now done by the
918     mainwindow, i.e. the parent.
919    
920     * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
921     gone. It's job from the dialog's point of view is now done by the
922     mainwindow, i.e. the parent.
923     (SessionTreeCtrl.__init__): New parameter mainwindow which is
924     stored as self.mainwindow. The mainwindow is need so that the tree
925     can still subscribe to the selection messages.
926     (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
927     (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
928     selection is now accessible through the mainwindow. Subscribe to
929     SHAPES_SELECTED instead of SELECTED_SHAPE
930    
931     * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
932     SHAPES_SELECTED message now.
933     (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
934     so deal with multiple shapes
935     (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
936     gone. It's job from the dialog's point of view is now done by the
937     mainwindow, i.e. the parent.
938    
939     * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
940     parameter is now a list of shape ids.
941     (RecordTable.SetTable): The second parameter is now a list of
942     indices.
943    
944     * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
945     selected_shape parameter and ivar to selected_shapes. It's now a
946     list of shape ids.
947     (MapRenderer.draw_label_layer): Deal with multiple selected
948     shapes. Rearrange the code a bit so that the setup and shape type
949     distinctions are only executed once.
950    
951     * test/test_selection.py: Test cases for the selection class
952    
953 jonathan 527 2003-03-11 Jonathan Coles <[email protected]>
954    
955     * Thuban/Model/load.py: Temporary fix so that the xml reader
956     doesn't cause Thuban to crash.
957    
958     * Thuban/Model/layer.py: Handle the cyclic references between
959     a layer and its classification better, and be sure to disconnect
960     the classification from the layer when the layer is destroyed
961     so that we don't maintain a cyclic reference that may not be
962     garbage collected.
963    
964     * Thuban/Model/classification.py: See comment for layer.py.
965    
966 jan 523 2003-03-12 Jan-Oliver Wagner <[email protected]>
967    
968     * HOWTO-Release: New. Information on the steps for releasing
969     a new version of Thuban.
970    
971 jonathan 514 2003-03-11 Jonathan Coles <[email protected]>
972    
973     * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
974     Use True instead of true.
975     (Classifier): Should have a single panel in which all the controls lie.
976    
977     * Thuban/UI/proj4dialog.py: Add normal border.
978    
979     * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
980    
981     * Thuban/UI/mainwindow.py: Use True instead of true.
982    
983     * setup.py: Update some definitions to use wxWindows2.4 files
984    
985     * Data/iceland_sample_class.thuban: Fixed file so that the
986     field_type information is present.
987    
988 jonathan 490 2003-03-10 Jonathan Coles <[email protected]>
989    
990 jonathan 505 * Thuban/UI/classifier.py (Classifier.__init__): Make the
991     field type label grow so that when the text changes the
992     size is updated correctly. This may be a wxWindows bug.
993    
994     2003-03-10 Jonathan Coles <[email protected]>
995    
996 jonathan 499 * Thuban/UI/application.py: Changed SESSION_CHANGED to
997     SESSION_REPLACED.
998    
999     * Thuban/UI/classifier.py: Wrap text with _().
1000     (ClassGrid.CreateTable): Set dimensions and size hints here,
1001     instead of in Reset, so we only set the size once.
1002    
1003     * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
1004    
1005     * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
1006     Call Close() instead of Shutdown().
1007    
1008     * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
1009    
1010     * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
1011     Go back to using OnClose() instead of Shutdown().
1012    
1013     2003-03-10 Jonathan Coles <[email protected]>
1014    
1015 jonathan 497 * Thuban/UI/classifier.py (Classifier): SelectField() needed
1016     to know the old field index as well as the new one.
1017    
1018     2003-03-10 Jonathan Coles <[email protected]>
1019    
1020 jonathan 495 * Thuban/UI/classifier.py (Classifier): Use __SelectField()
1021     to correctly set the table information and call this from
1022     __init__ and from _OnFieldSelect so that all the information
1023     is up to date when the dialog opens and when a field is changed.
1024    
1025     2003-03-10 Jonathan Coles <[email protected]>
1026    
1027 jonathan 490 * Thuban/Model/classification.py (Classification): Don't use
1028     layer's message function directly, use the ClassChanged() method
1029     when then classification changes. SetField/SetFieldType/SetLayer
1030     must keep the information about field name and field type in
1031     sync when an owning layer is set or removed.
1032    
1033     * Thuban/Model/layer.py: Added ClassChanged() so that the
1034     classification can tell the layer when its data has changed.
1035     (Layer.SetClassification): Accepts None as an arguement to
1036     remove the current classification and correctly handles
1037     adding a new classification.
1038    
1039     * Thuban/Model/load.py: Comment out print statement
1040    
1041     * test/test_classification.py, test/test_save.py: New and
1042     improved tests.
1043    
1044 jonathan 483 2003-03-07 Jonathan Coles <[email protected]>
1045    
1046     * Thuban/Model/classification.py: Implemented __copy__ and
1047     __deepcopy__ for ClassGroup* and ClassGroupProperites so
1048     they can easily be copied by the classifier dialog.
1049     (ClassGroupProperites.__init__): The default line color should
1050     have been Color.Black.
1051    
1052     * Thuban/UI/classifier.py: Setting and Getting table values now
1053     uses a consistent set of functions.
1054     (Classifier): Now non-modal. Has field type label which changes
1055     as the field changes. Keep track of buttons in a list so that
1056     we can enable/disable the buttons when the None field is selected.
1057     (SelectPropertiesDialog): Add buttons to make the colors transparent.
1058    
1059     * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
1060     does what OnClose did, but can be called by the application to
1061     close a window. Needed when a session changes, and we have to
1062     close the classifier windows.
1063    
1064     * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
1065     Shuts down open dialogs. Used when a new session is created
1066     or a session is opened.
1067     (MainWindow.SaveSession): Should only call application.SaveSession()
1068     if we don't call SaveSessionAs first.
1069     (MainWindow.Classify): Allow different classifier dialogs for
1070     different layers.
1071    
1072     * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
1073     the parent class handle it. Add Shutdown() to unsubscibe from
1074     event notification and call the parent Shutdown(). This was
1075     necessary so the application can close the tree window.
1076    
1077 jonathan 478 2003-03-06 Jonathan Coles <[email protected]>
1078    
1079     * Thuban/Model/classification.py: Minor documentation changes,
1080     Addition of __eq__ and __ne__ methods.
1081     (Classification.SetLayer): prevent recursion between this method
1082     and Layer.SetClassification().
1083    
1084     * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
1085    
1086     * Thuban/Model/layer.py (SetClassification): prevent recursion
1087     between this method and Classification.SetLayer().
1088    
1089     * test/test_classification.py, test/test_load.py,
1090     test/test_session.py: Fixed and added tests for the classification
1091     classes.
1092    
1093 bh 477 2003-03-06 Bernhard Herzog <[email protected]>
1094    
1095     * Thuban/UI/classifier.py (ClassGrid.__init__)
1096     (ClassGrid.CreateTable): Move the SetSelectionMode call to
1097     CreateTable because otherwise it triggers an assertion in
1098     wxPython/wxGTK 2.4.
1099    
1100 jonathan 459 2003-03-05 Jonathan Coles <[email protected]>
1101    
1102 jonathan 475 * Thuban/common.py: Move FIELDTYPE constants back to table.py.
1103 jonathan 471
1104 jonathan 475 * Thuban/Model/load.py: import FIELDTYPE constants from table.
1105 jonathan 471
1106 jonathan 475 * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
1107 jonathan 471
1108 jonathan 475 * Thuban/Model/table.py: Put FIELDTYPE constants back.
1109 jonathan 471
1110     2003-03-05 Jonathan Coles <[email protected]>
1111    
1112 jonathan 459 * Thuban/UI/classifier.py: Added class documentation.
1113     Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
1114     Store just the groups in the table and generate the other
1115     column information when it is requested. Add "None" field
1116     to pull-down to select no classification.
1117    
1118     * Thuban/common.py: Moved FIELDTYPE constants from table.py
1119     (Str2Num): Only catch ValueError exceptions.
1120    
1121     * Thuban/Model/classification.py: Class documentation. Renaming
1122     of methods with Stroke to Line. Groups are stored in a single
1123     list with the default as the first element. Groups are searched
1124     in the order they appear in the list.
1125    
1126     * Thuban/Model/color.py: Documentation.
1127    
1128     * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
1129     the kind of data represented by a field.
1130    
1131     * Thuban/Model/load.py (ProcessSession): Use proper string
1132     conversion function; fixes RTbug #1713.
1133    
1134     * Thuban/Model/save.py (Saver): Store field type information.
1135    
1136     * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
1137     (Table): Add field_info_by_name() to retrieve field information
1138     by specifying the field name, not the number.
1139    
1140     * Thuban/UI/mainwindow.py: Function name changes.
1141    
1142     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
1143     get the layer classification once. Don't try to classify
1144     values when the field is None: just use the default properties.
1145    
1146     * Thuban/UI/view.py: Function name changes.
1147    
1148     * Doc/thuban.dtd: Add field_type attribute to a classification.
1149    
1150 bh 456 2003-03-04 Bernhard Herzog <[email protected]>
1151    
1152 bh 458 * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
1153     the fill and stroke layer attributes optional with suitable
1154     default values. Add the stroke_width layer attribute. Use correct
1155     syntax for empty elements. Make the attribute list for labels
1156     refer to the label element.
1157    
1158     2003-03-04 Bernhard Herzog <[email protected]>
1159    
1160 bh 456 * setup.py (thuban_build_py.build): Add a comment about distutils in
1161     Python 2.3 containing some of the functionality we implement in
1162     setup.py ourselves.
1163    
1164     * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
1165     before the selection mode. Doing it the other way round triggers
1166     an assertion in wxWindows.
1167    
1168     * Thuban/Model/save.py (escape): Fix typo in doc-string
1169    
1170     * Thuban/Model/classification.py: Remove unnecessary wxPython
1171     import
1172    
1173 jonathan 448 2003-03-04 Jonathan Coles <[email protected]>
1174    
1175     * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
1176     Parameter 'value' should default to None.
1177    
1178     * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
1179     the class attribute __classification is now private.
1180    
1181     * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
1182     Classifier to ClassGrid. Added support for removing selected rows,
1183     which including code for keeping track of when cells are selected,
1184     and deselected.
1185     (ClassTable): Support for added/removing rows. Fixed a problem
1186     with __ParseInput whereby it would not allow strings (only numbers)
1187     to be entered.
1188     (Classifier): Added button and supporting code for removing
1189     selected rows.
1190    
1191 jonathan 445 2003-02-27 Jonathan Coles <[email protected]>
1192 jonathan 434
1193     * Thuban/common.py: Moved color conversion functions into
1194     Thuban/UI/common.py.
1195     (Str2Num): Now converts the float (not the string) to a long/int
1196     so that an exception isn't thrown.
1197    
1198     * Thuban/UI/common.py: Common functions used in several UI modules
1199    
1200     * Thuban/Model/classification.py: Changed the class hierarchy
1201     so that a Classification consists of Groups which return
1202     Properties when a value matches a Group.
1203    
1204     * Thuban/Model/layer.py: Fixed name resolution problem.
1205    
1206     * Thuban/Model/load.py: Use new Classification and Group functions.
1207    
1208     * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
1209     failure.
1210     (Saver.write_classification): Use new Classification and Group
1211     functions.
1212    
1213     * Thuban/UI/classifier.py: Changes to use new Classification and Group
1214 jonathan 445 functions. Fix to create a tuple with a single value instead of
1215     simply returning the value.
1216 jonathan 434
1217     * Thuban/UI/renderer.py: Use new Classification and Group functions.
1218     Use common.py functions.
1219    
1220 jonathan 445 * Thuban/UI/tree.py: Use common.py functions.
1221 jonathan 447
1222     * test/test_classification.py: Use new Classification and Group
1223     classes.
1224 jonathan 434
1225 jonathan 426 2003-02-24 Jonathan Coles <[email protected]>
1226    
1227     * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
1228     functions from Thuban color objects to wxWindow colour objects.
1229    
1230     * Thuban/Model/classification.py (Classification): Renamed
1231     GetProperties() to GetClassData(). Used the new iterator
1232     in TreeInfo().
1233     (ClassIterator): Iterator implementation to iterate over the
1234     ClassData objects in a classification object.
1235    
1236     * Thuban/Model/save.py (Saver.write_classificaton): Uses
1237     the new iterator to save the classification information.
1238    
1239     * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
1240     for changing the stroke and fill colors and previewing the
1241     changes.
1242    
1243     * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
1244     MainWindow.SaveSessionAs): Text string changes so the dialogs
1245     have more meaningful titles.
1246    
1247     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
1248     Classification method name from GetProperties to GetClassData.
1249    
1250     * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
1251     instead of accessing now non-existent class variables.
1252    
1253 bh 425 2003-02-24 Bernhard Herzog <[email protected]>
1254    
1255     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
1256     unneeded Shape() call. Rendering is substantially faster without
1257     it and it avoids some problems with broken shape files.
1258    
1259 frank 423 2003-02-20 Frank Koormann <[email protected]>
1260    
1261     Force minimal size of identify and label dialogs. The autosizing
1262     looked too ugly.
1263    
1264     * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
1265     * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
1266     Set size of listctrl.
1267     * Thuban/UI/identifyview.py (IdentifyView.__init__):
1268     Set size of dialog.
1269    
1270 jonathan 408 2003-02-19 Jonathan Coles <[email protected]>
1271    
1272     * test/test_classification.py, test/test_layer.py,
1273     test/test_load.py, test/test_map.py, test/test_session.py:
1274     Updated the tests to use the new functions that are in the
1275     respective classes.
1276    
1277     * Thuban/Model/classification.py (Classification):
1278     Uses the new ClassData* classes. Modification messages are
1279     passed up to the parent layer (if it exists).
1280     (ClassData): New class to encapsulate the common data in each
1281     classification property.
1282     (ClassDataDefault): Represents the Default class. data.
1283     (ClassDataPoint): Represents a single class. data point
1284     (ClassDataRange): Represents a class. range
1285     (ClassDataMap): Represents a class. map (unused).
1286    
1287     * Thuban/Model/color.py: Added Color.None to represent something
1288     with no color. Color.Black represents the color black.
1289     (NoColor): Helper class derived from Color to represent something
1290     with no color.
1291    
1292     * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
1293     stroke_width attributes. Made the 'classification' attribute private.
1294     New methods for setting/getting the classification.
1295    
1296     * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
1297     to get the classifcation and use the new ClassData* classes to
1298     hold the classification data. Use Str2Num to convert numbers
1299     properly.
1300    
1301     * Thuban/Model/save.py (Saver): Use new Color and Classification
1302     methods
1303    
1304     * Thuban/UI/classifier.py (ClassGrid): New class to represent a
1305     custom grid.
1306     (ClassTable): Support for editing Values and Labels and for
1307     changing what type (point or range) of data is stored in each
1308     property based on how the user enters the data.
1309     (Classifier): Support for saving the new classifications and
1310     launching the dialog to edit a property.
1311     (SelectPropertiesDialog): New class for editing the visual
1312     properties of a classification (stroke color, width, and fill color)
1313     (ClassPreviewer): Took the Draw method from ClassRenderer and
1314     made most of it into this new class. Intend to use this class in
1315     the SelectPropertiesDialog for previewing changes.
1316    
1317     * Thuban/UI/renderer.py: Use new Color and Classification methods.
1318    
1319     * Thuban/UI/tree.py: Formatting changes.
1320    
1321     * Doc/thuban.dtd: Add 'label' element
1322    
1323     * Thuban/common.py: New. Contains common routines used throughout
1324     the code.
1325     (Str2Num): Takes a string and converts it to the "best" type of
1326     number.
1327    
1328 bh 405 2003-02-14 Bernhard Herzog <[email protected]>
1329    
1330     * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
1331     dragging flag is always set to 0 even when the tool implementation
1332     raises an exception
1333    
1334 bh 402 2003-02-11 Bernhard Herzog <[email protected]>
1335    
1336     * Thuban/UI/application.py (ThubanApplication.splash_screen): New
1337     method to create a splash screen.
1338     (ThubanApplication.ShowMainWindow): New. Show the main window.
1339     Needed so the splash screen can display the mainwindow
1340     (ThubanApplication.OnInit): Call the
1341     new splash_screen method to determine whether the application
1342     should display a splash screen. If it displays a splash screen do
1343     not immediately show the main window.
1344    
1345 jonathan 399 2003-02-11 Jonathan Coles <[email protected]>
1346    
1347     * Thuban/Model/classification.py: Added import line to fix
1348     feature conflicts between running on python2.2 and python2.1.
1349    
1350     * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
1351     onto the clinfo parameter, so removed the deepcopy().
1352    
1353 jonathan 396 2003-02-10 Jonathan Coles <[email protected]>
1354    
1355 tkoester 403 * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
1356 jonathan 396 Added element_open variable to track opening and closing of tags
1357     so that tags that don't span more than one line are closed with
1358     /> instead of </tag_name>. Use the GetDefault*() methods of
1359     the Classification class.
1360    
1361     * Thuban/Model/classification.py (Classificaton): Added set and
1362     get methods for the default data. The class also takes a layer
1363     reference so that modification messages can be sent. Fixed the
1364     methods to use the new ClassData class.
1365     (ClassData): New class to encapsulate the classification data
1366    
1367     * Thuban/Model/layer.py (Layer): Remove the
1368 tkoester 403 Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
1369 jonathan 396 SetDefault*() methods on the layer's classification object.
1370 tkoester 403 (Layer.__init__): Use the new SetDefault*() methods in the
1371 jonathan 396 Classification class.
1372    
1373     * Thuban/Model/load.py (ProcessSession): Use the new ClassData
1374     object instead of a dictionary.
1375    
1376 tkoester 403 * Thuban/UI/classifier.py (ClassRenderer): New class to
1377 jonathan 396 draw the classifications in the dialog box's table.
1378     (Classifier): Modified to use the ClassRenderer class.
1379    
1380 tkoester 403 * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
1381     methods of the Classification class.
1382 jonathan 396
1383     * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
1384     of the ClassData class.
1385    
1386     * test/test_classification.py, test/test_layer.py,
1387     test/test_map.py, test/test_session.py: Fix the tests to work
1388     with the above code changes.
1389    
1390 jonathan 387 2003-02-03 Jonathan Coles <[email protected]>
1391    
1392     * Thuban/Model/classification.py (Classification): Added getNull()
1393     to return the NullData reference
1394    
1395     * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
1396     Layer.SetStrokeWidth): Modified these functions to change the
1397     null data in the classification rather than keep these values
1398     directly in the Layer class. Menu options to change these values
1399     work again.
1400    
1401 jonathan 380 2003-01-28 Jonathan Coles <[email protected]>
1402    
1403 jonathan 384 * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
1404 tkoester 403 Fixed crashing problem on some systems. Dialog box shows
1405 jonathan 380 classification data.
1406    
1407 jonathan 384 * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
1408     Colors in the tree view.
1409    
1410     * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
1411     the tree info for classifications. Commented out unnecessary lines.
1412    
1413     * Thuban/Model/classification.py (Classification.TreeInfo): New
1414     function to add information about the classification into the
1415     tree view.
1416    
1417 tkoester 403 2003-01-27 Jan-Oliver Wagner <[email protected]>
1418 jan 375
1419 tkoester 403 * Thuban/__init__.py (_): New.
1420 jan 375
1421     * Thuban/Model/classification.py, Thuban/Model/extension.py,
1422     Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
1423 tkoester 403 Thuban/Model/session.py, Thuban/UI/application.py,
1424     Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
1425     Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
1426     Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
1427     Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
1428     Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
1429 jan 375
1430 jonathan 370 2003-01-27 Jonathan Coles <[email protected]>
1431    
1432 tkoester 403 * Thuban/Model/layer.py: Classification initialization calls.
1433 jonathan 370
1434 tkoester 403 * Thuban/Model/classification.py: Created class to encapsulate
1435     a layer classification. Supports specific data points and
1436     ranges.
1437 jonathan 370
1438 tkoester 403 * Thuban/Model/load.py: Added support for loading classification
1439     information.
1440 jonathan 370
1441 tkoester 403 * Thuban/Model/save.py: Added support for saving classification
1442     information.
1443 jonathan 370
1444 tkoester 403 * Thuban/UI/classifier.py: Initial class for a dialog box for
1445     specifying classification information.
1446 jonathan 370
1447 tkoester 403 * Thuban/UI/mainwindows.py: Support for opening the classifier
1448     dialog.
1449 jonathan 370
1450 tkoester 403 * Thuban/UI/renderer.py: Support for drawing a layer with the
1451     classification information.
1452 jonathan 370
1453 tkoester 403 * Data/iceland_sample_class.thuban: iceland_sample with
1454     classification data.
1455 jonathan 370
1456 tkoester 403 * test/test_classification: Tests for the Classification class.
1457 jonathan 370
1458 bh 359 2002-12-09 Bernhard Herzog <[email protected]>
1459    
1460 bh 361 * test/test_command.py: New. Tests for the command classes.
1461    
1462 bh 359 * Thuban/UI/command.py (ToolCommand): New class for tool commands.
1463     (Command.IsTool): New method to distinguish between command
1464     switching tools and other commands.
1465    
1466     * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
1467     the tool to avoid direct assignments to instance variables
1468     (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
1469     (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
1470     change the tool
1471    
1472     * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
1473     active tool's command turns insensitive, disable the tool.
1474     (_tool_command): Use the new ToolCommand class
1475    
1476     * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
1477     SelectTool method to change the tool
1478     (iconfile): Use the ToolCommand class
1479    
1480 bh 354 2002-12-03 Bernhard Herzog <[email protected]>
1481    
1482     * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
1483     the case of selected items that are not children of Layers or Maps
1484     properly. Previously this bug would trigger an assertion in
1485     wxWindows.
1486    
1487 frank 352 2002-11-06 Frank Koormann <[email protected]>
1488    
1489 bh 354 * Thuban/UI/mainwindow.py: Altered the order of tools in the
1490     toolbar: First now are all navigation tools (Zoom In/Out, Pan,
1491     Full Extent).
1492 tkoester 403
1493 bh 349 2002-10-23 Bernhard Herzog <[email protected]>
1494    
1495     * setup.py (setup call): version now 0.1.3
1496    
1497     * MANIFEST.in: Add the files in test/
1498    
1499     * test/README: Add note about tests requiring the iceland data
1500    
1501     * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
1502     copyright notice.
1503    
1504 bh 344 2002-10-18 Bernhard Herzog <[email protected]>
1505    
1506     * test/test_map.py
1507     (TestMapWithContents.test_projected_bounding_box): Use an explicit
1508     epsilon.
1509    
1510     * test/support.py (FloatComparisonMixin.assertFloatEqual)
1511     (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
1512     message if the assertion fails and don't return the return value
1513     of self.assert_. In assertFloatSeqEqual the return meant that not
1514     all items of the sequence were compared.
1515    
1516 bh 326 2002-09-20 Bernhard Herzog <[email protected]>
1517    
1518 bh 341 * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
1519    
1520     * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
1521    
1522 bh 338 * test/test_map.py (TestMapWithContents.test_tree_info): Create
1523     the string with the bounding box on the fly because of platform
1524     differences in the way %g is handled.
1525    
1526     * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
1527     DBFfile too because Thuban layers can't yet cope missing DBF
1528     files.
1529    
1530     2002-09-20 Bernhard Herzog <[email protected]>
1531    
1532 bh 326 * test/test_menu.py: Use initthuban instead of
1533     add_thuban_dir_to_path to initialize Thuban.
1534    
1535     * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
1536     Mixin class for float comparisons
1537     (SubscriberMixin): New. Mixin class to test messages sent through
1538     the Connector class
1539    
1540     * test/README: Fix a typo and add the -v flag to the command for
1541     individual tests
1542    
1543 bh 335 * test/test_session.py: New. Test cases for Thuban.Model.session
1544    
1545     * test/test_proj.py: New. Test cases for Thuban.Model.proj
1546    
1547     * test/test_map.py: New. Test cases for Thuban.Model.map
1548    
1549     * test/test_layer.py: New. Test cases for Thuban.Model.layer
1550    
1551     * test/test_label.py: New. Test cases for Thuban.Model.label
1552    
1553     * test/test_connector.py: New. Test cases for Thuban.Lib.connector
1554    
1555     * test/test_color.py: New. Test cases for Thuban.Model.color
1556    
1557     * test/test_base.py: New. Test cases for Thuban.Model.base
1558    
1559 bh 322 2002-09-13 Bernhard Herzog <[email protected]>
1560    
1561     * Thuban/Model/session.py (Session.forwarded_channels): Forward
1562     the CHANGED channel too.
1563    
1564     * Thuban/Model/map.py (Map.forwarded_channels): Forward the
1565     CHANGED channel too.
1566     (Map.__init__): Call the Modifiable constructor as well.
1567    
1568     * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
1569     event if the modified flag changes.
1570     (Modifiable.changed): Tweak the doc-string.
1571    
1572     * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
1573     (MainWindow.set_position_text): Put the code that puts the text
1574     with the mouse position into the status bar into the new method
1575     set_position_text so that it can overwritten in derived classes.
1576    
1577 bh 317 2002-09-12 Bernhard Herzog <[email protected]>
1578    
1579     * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
1580     message box on the main window.
1581    
1582 bh 313 2002-09-11 Bernhard Herzog <[email protected]>
1583    
1584     * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
1585     the 'E' because it's less likely to interfere with other menu
1586     entries.
1587 bh 315 (MainWindow.build_menu): remove an incorrect comment.
1588 bh 313
1589 bh 311 2002-09-10 Bernhard Herzog <[email protected]>
1590    
1591     * Thuban/UI/mainwindow.py (MainWindow.Map): New.
1592     (_tool_command): Add sensitive parameter
1593     (_has_visible_map): Sensitivity callback to tools and other
1594     commands that require a visible map. Use it in map_zoom_in_tool,
1595     map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
1596     and map_full_extent
1597    
1598 bh 308 2002-09-06 Bernhard Herzog <[email protected]>
1599    
1600     * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
1601     VIEW_POSITION
1602    
1603 tkoester 403 2002-09-04 Frank Koormann <[email protected]>
1604 frank 306
1605     * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
1606    
1607 bh 302 2002-09-02 Bernhard Herzog <[email protected]>
1608    
1609 bh 304 * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
1610     wxWindows already and our implementation doesn't work correctly
1611     with wxGTK 2.3:
1612     (MapCanvas.__init__): Remove the instance variable
1613     (MapCanvas.OnPaint): Always call do_redraw when there's a map to
1614     be drawin
1615     (MapCanvas.OnIdle): Removed.
1616    
1617 bh 302 * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
1618     a parameter to determine the size of the rectangle.
1619     (MapCanvas.find_shape_at): Create the box around the point on a
1620     layer by layer basis and make the size depend on the shape type.
1621     This solves a problem with the selection of point shapes at the
1622     border of the layer's bounding box
1623    
1624 bh 292 2002-08-30 Bernhard Herzog <[email protected]>
1625    
1626 bh 300 * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
1627     for the sensitivity of remove layer.
1628     (_can_remove_layer): New. Sensitivity callback for remove layer
1629     (Command layer_remove): Use _can_remove_layer
1630    
1631     * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
1632     determine whether a given layer can be deleted.
1633    
1634 bh 297 * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
1635     (MapCanvas.do_redraw): Get rid of the unused update_region
1636     instance variable
1637    
1638 bh 294 * Thuban/UI/view.py: Add/update some doc-strings.
1639    
1640 bh 292 * test/: new subdirectory with a bunch of unit tests.
1641    
1642     * test/README, test/test_table.py, test/test_save.py,
1643     test/test_menu.py, test/test_load.py: Initial set of tests and
1644     brief instructions on how to run them
1645    
1646 bh 287 2002-08-29 Bernhard Herzog <[email protected]>
1647    
1648 bh 291 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
1649     arcs with multiple parts.
1650    
1651 bh 289 * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
1652     Handle degenrate rectangles.
1653    
1654 bh 287 * Thuban/Model/table.py: Make writing records work correctly:
1655     (Table.__init__): Keep track of whether the DBF is open for
1656     writing
1657     (Table.write_record): Open the DBF file for writing when necessary
1658    
1659 bh 285 2002-08-27 Bernhard Herzog <[email protected]>
1660    
1661     * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
1662     dbf files only for reading by default. Use a new writable dbf
1663     object for writing.
1664    
1665 bh 278 2002-08-26 Bernhard Herzog <[email protected]>
1666    
1667 bh 282 * Thuban/UI/mainwindow.py: Refactor the context creation:
1668     (MainWindow.Context): New method to return a context
1669     (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
1670     new method
1671    
1672 bh 278 * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
1673     layer table specific code from TableGrid into LayerTableGrid
1674     (TableFrame, LayerTableFrame): Split the layer table specific code
1675     from TableFrame into LayerTableFrame
1676 bh 280 (LayerTableGrid.select_shape): Remove a debug print
1677 bh 278
1678     * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
1679     LayerTableFrame
1680    
1681 bh 277 2002-08-23 Bernhard Herzog <[email protected]>
1682    
1683     * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
1684     absolute filename.
1685    
1686 bh 269 2002-08-22 Bernhard Herzog <[email protected]>
1687    
1688 bh 275 * Thuban/Model/table.py (Table.write_record): New method to write
1689     records.
1690 tkoester 403 (Table.__init__): Open the DBF file for writing too.
1691 bh 275
1692     * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
1693     into the underlying table.
1694    
1695     * extensions/shapelib/shapefil.h (DBFCommit),
1696     extensions/shapelib/dbfopen.c (DBFCommit): New API function to
1697     commit any changes made to the DBF file.
1698    
1699 bh 271 * Thuban/UI/mainwindow.py (make_check_current_tool)
1700     (_tool_command): Put the code that generates the "checked"
1701     callback into a separate function so that we can reuse it
1702     elsewhere
1703    
1704 bh 269 * Thuban/Model/save.py (Saver): New class to handle serializing a
1705     session into an XML file. The main reason to introduce a class is
1706     that applications built on Thuban can derive from it so that they
1707     can save additional information in a session file.
1708     (save_session): Delegate almost all the work to the Saver class.
1709     Rename the filename argument to file because it may be a file like
1710     object now.
1711    
1712     * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
1713     code. Remove the little test code which would be executed when the
1714     module is run as a script which didn't work anymore since it can't
1715     import the other Thuban modules.
1716     (ProcessSession, load_session): Refactor the ProcessSession to
1717     have one method for each element start and end tag so that derived
1718     classes can easily override the processing of individual tags.
1719     Also, always parse with namespaces enabled because applications
1720     built on top of Thuban will likely use namespaces if they extend
1721     the session file format.
1722    
1723 bh 266 2002-08-21 Bernhard Herzog <[email protected]>
1724    
1725     * setup.py (ThubanInstall.run): Don't repr install_lib_orig
1726     because thubaninit_contents will do it for us.
1727    
1728 tkoester 403 2002-08-16 Jan-Oliver Wagner <[email protected]>
1729 jan 265
1730     * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
1731     tree window already open
1732    
1733 bh 259 2002-08-15 Bernhard Herzog <[email protected]>
1734    
1735 bh 263 * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
1736     with self.
1737    
1738     * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
1739     when we have actually captured it.
1740    
1741 bh 259 * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
1742     shapefile and destroy the table.
1743    
1744     * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
1745    
1746 bh 254 2002-08-14 Bernhard Herzog <[email protected]>
1747    
1748 bh 256 * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
1749     instance variable columns
1750     (RecordTable.GetTypeName): row and col may be negative in some
1751     cases.
1752    
1753 bh 254 * setup.py (InstallLocal.initialize_options)
1754     (InstallLocal.finalize_options, InstallLocal.user_options): New
1755     option create-init-file to build a thubaninit.py when running
1756     install_local
1757     (InstallLocal.run): Create the thubaninit.py module when requested
1758     (thubaninit_contents): Split the template into several parts and
1759     create a new function thubaninit_contents that creates the
1760     contents of a thubaninit module.
1761     (ThubanInstall.run): Use the new function to create the thubaninit
1762     module.
1763    
1764 bh 252 2002-07-30 Bernhard Herzog <[email protected]>
1765    
1766     * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
1767     cleanup.
1768     (ThubanApplication.MainLoop): Extend to automatically call OnExit.
1769    
1770     * Thuban/Model/session.py (Session.Destroy): Don't bypass the
1771     direct base class' Destroy method.
1772    
1773     * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
1774     layers.
1775     (Map.Destroy): Destroy the label_layer as well and call the
1776     inherited Desatroymethod first so that no more messages are
1777     issued.
1778     (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
1779     message if the stacking order actually has changed. Add
1780     doc-strings.
1781     (Map.BoundingBox): Correct the doc-string.
1782     (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
1783     (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
1784    
1785     * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
1786     all labels.
1787    
1788 bh 247 2002-07-29 Bernhard Herzog <[email protected]>
1789    
1790     * Thuban/Model/map.py (Map.subscribe_layer_channels)
1791     (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
1792     to a layer's channels into separate methods.
1793     (Map.RemoveLayer, Map.AddLayer): Call the new methods
1794     (Map.Destroy): Unsubscribe from a layer's channels before
1795     destroying it.
1796    
1797     * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
1798     selected_layer parameter to searched_layer which is the layer to
1799     search in.
1800     (MapCanvas.SelectShapeAt): New parameter layer to restrict the
1801     search to that layer. Return the selected layer and shape.
1802    
1803     * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
1804     typo
1805    
1806 bh 238 2002-07-24 Bernhard Herzog <[email protected]>
1807    
1808 bh 243 * Thuban/UI/application.py (ThubanApplication.create_session):
1809     Extend the doc string.
1810     (ThubanApplication.subscribe_session)
1811     (ThubanApplication.unsubscribe_session): New methods to
1812     subscribe/unsubscribe to/from session channels.
1813     (ThubanApplication.SetSession): Call the new methods here.
1814     (ThubanApplication.maps_changed, ThubanApplication.set_map):
1815     Renamed set_map to maps_changed. Its now a subscriber for
1816     MAPS_CHANGED.
1817    
1818     * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
1819     x-coordinate in case of simple clicks
1820    
1821     * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
1822     don't pass it as a parameter
1823    
1824     * Thuban/Model/session.py (Session.RemoveMap): New
1825    
1826 bh 238 * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
1827     window size into a parameter.
1828    
1829 bh 235 2002-07-23 Bernhard Herzog <[email protected]>
1830    
1831 bh 237 * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
1832     just commands.
1833    
1834 bh 235 * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
1835     parameter list a bit to allow setting the window title and the
1836     initial message in the status bar. Update the callers.
1837    
1838     * Thuban/UI/application.py (ThubanApplication.OnInit)
1839     (ThubanApplication.CreateMainWindow): Put the mainwindow
1840     instantiation into a separate method so that it can be overridden
1841     by a subclass.
1842    
1843 bh 230 2002-07-19 Bernhard Herzog <[email protected]>
1844    
1845 bh 234 * Thuban/Model/session.py: Issue a CHANGED message every time
1846     another changed message is issued to make it easier to get
1847     notified of changes.
1848     (Session): Update the doc string
1849     (Session.forward): Issue changed-events as CHANGED as well.
1850     (Session.changed): Overwrite the inherited version to issue
1851     CHANGED events as well.
1852    
1853     * Thuban/UI/tree.py: We can now simply subscribe to the session's
1854     CHANGED channel to be informed of changes.
1855     (SessionTreeCtrl.session_channels): Not needed any longer.
1856 tkoester 403 (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
1857 bh 234 Only have to (un)subscribe CHANGED
1858    
1859     * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
1860    
1861 bh 230 * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
1862     for the wxPython locale bug to __init__.py so that it's
1863     automatically executed by anybody using UI code from Thuban.
1864    
1865 bh 225 2002-07-18 Bernhard Herzog <[email protected]>
1866    
1867 bh 228 * Thuban/UI/main.py (main): app no longer needs to be global
1868    
1869     * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
1870     as parameter and store it in an instance variable
1871     (MainWindow.invoke_command, MainWindow.update_command_ui)
1872     (MainWindow.save_modified_session, MainWindow.NewSession)
1873     (MainWindow.OpenSession, MainWindow.SaveSession)
1874     (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
1875     application object.
1876    
1877     * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
1878     the main window with self.
1879    
1880 bh 225 * Thuban/UI/context.py: New module with the context class
1881    
1882     * Thuban/UI/command.py (Command): Update doc string.
1883    
1884     * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
1885     MainWindow.update_command_ui): Pass an instance of the context
1886     class to the command's methods
1887     (check_current_tool, call_method): Handle the new context
1888     implementation
1889    
1890     * Examples/simple_extensions/simple_tool.py (simple_tool,
1891     check_simple_tool): Handle the new context implementation
1892    
1893     * Examples/simple_extensions/simple_command.py (simple_command):
1894     Handle the new context implementation. Update the comments about
1895     the context.
1896    
1897     * Thuban/UI/application.py (ThubanApplication.SetSession): Add
1898     doc-string
1899     (ThubanApplication.Session): New method to return the session
1900     object
1901    
1902     * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
1903     interactor's selected_layer may not be a layer of the current
1904     session when the tree is updated while a new session is being set.
1905    
1906 bh 217 2002-07-17 Bernhard Herzog <[email protected]>
1907    
1908     * Thuban/UI/tree.py (color_string): Removed. No longer used.
1909     (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
1910     update_tree into update_tree and add_items. The tree now uses a
1911     more generic way to display the contents of the tree.
1912     (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
1913    
1914     * Thuban/Model/layer.py (Layer.TreeInfo),
1915     Thuban/Model/extension.py (Extension.TreeInfo),
1916     Thuban/Model/map.py (Map.TreeInfo),
1917 tkoester 403 Thuban/Model/session.py (Session.TreeInfo):
1918 bh 217 Add TreeInfo methods to implement the new tree view update scheme
1919    
1920 bh 216 2002-07-16 Bernhard Herzog <[email protected]>
1921    
1922     * Thuban/UI/application.py: Don't use "import from" for the
1923     MainWindow. It can't always be resolved.
1924     (ThubanApplication.OnInit): change reference to MainWindow
1925     accordingly.
1926    
1927     * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
1928     completely
1929    
1930 bh 213 2002-07-10 Bernhard Herzog <[email protected]>
1931    
1932     * setup.py (create_init_module): New configurable variable whose
1933     default depends on the platform we're running on.
1934     (ThubanInstall.initialize_options): Initialize
1935     self.create_init_module from the global create_init_module
1936     (ThubanInstall.user_options): indictate that the options
1937     create-init-module and init-module-dir have arguments.
1938    
1939     * setup.py: In the setup call change the version number to include
1940     cvs.
1941    
1942     * MANIFEST.in: Add the files in Examples
1943    
1944 bh 205 2002-07-09 Bernhard Herzog <[email protected]>
1945    
1946 bh 210 * setup.py: In the setup call, use the thuban homepage as the
1947     value of the url parameter.
1948    
1949 bh 208 * Examples: New subdirectory for examples.
1950    
1951     * Examples/simple_extensions/simple_tool.xpm,
1952     Examples/simple_extensions/simple_tool.py,
1953     Examples/simple_extensions/simple_command.py,
1954     Examples/simple_extensions/README: Simple examples showing how to
1955     add new commands and tools.
1956    
1957 bh 207 * setup.cfg (bdist_rpm): Add the default value for prefix and tell
1958     bdist_rpm that we also have an install script.
1959     (bdist_inno): Add 2002 to the copyright notice.
1960    
1961 bh 205 * setup.py: Create a file in python's site-packages directory to
1962     make installation of Thuban as a library easier.
1963     (ThubanInstall.user_options): Add two new options,
1964     create-init-module and init-module-dir
1965     (ThubanInstall.expand_with_pure_python_dirs): New method to expand
1966     filenames for installation in the default directories.
1967     (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
1968     the inherited methods to capture some filenames before they're
1969     transformed too much by distutils.
1970     (ThubanInstall.run): Create the init module if requested.
1971     (ThubanInstall.thuban_init_filename): New method to return the
1972     full name of the init module.
1973     (ThubanInstall.get_outputs): Append the filename of the init
1974     module.
1975    
1976 bh 202 2002-07-08 Bernhard Herzog <[email protected]>
1977    
1978 bh 205 * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
1979     handle the prefix properly which means that the default for the
1980     installation prefix should be /usr for RPMs and /usr/local when
1981     doing a normal source install.
1982     (bdist_rpm_install_script): Script to override the default install
1983     commands in the specfile generated by the bdist_rpm command.
1984     (thuban_bdist_rpm.user_options): Add a prefix option
1985     (thuban_bdist_rpm.initialize_options): Init the prefix option.
1986     Create the script files for the spec files as empty files here
1987     (thuban_bdist_rpm._make_spec_file): Override the inherited method
1988     to fill the script files with content.
1989    
1990 bh 202 * Thuban/Model/save.py (relative_filename): Wrapper around
1991     Thuban.Lib.fileutil.relative_filename that accepts an empty dir
1992     argument. save_session now automatically uses this version,
1993     solving a problem when saving to a relative filename.
1994    
1995     * setup.py: In the setup call, make sure that the library
1996     directories are under $prefix/lib not directly under $prefix.
1997    
1998 tkoester 403 2002-06-20 Jan-Oliver Wagner <[email protected]>
1999 jan 199
2000     * Thuban/Model/extension.py: new module to handle extension objects.
2001     * Thuban/Model/messages.py: new messages for extensions.
2002     * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
2003     Session.AddExtension): new for handling extensions.
2004     Also some other minor changes to round up extension handling.
2005     * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
2006     of Extension titles and title and names of its objects.
2007    
2008 bh 194 2002-05-29 Bernhard Herzog <[email protected]>
2009    
2010     * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
2011 bh 202 the events for a command.
2012 bh 194 (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
2013     Call bind_command_events to bind the events. add_toolbar_command
2014     can now bind events too so that it's possible to have commands
2015     that are only available through the toolbar.
2016     (MainWindow.init_ids): New instance variable events_bound to keep
2017     track of for which commands events have been bound.
2018    
2019 bh 190 2002-05-28 Bernhard Herzog <[email protected]>
2020    
2021     * Thuban/UI/menu.py: New module to build and manage menus.
2022    
2023     * Thuban/UI/mainwindow.py: Remove some unused imports.
2024     (MainWindow.__init__, main_menu): move the definition of the main
2025     menu from __init__ to the Menu instance main_menu.
2026     (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
2027     build the menu bar and sub-menus from a menu description.
2028    
2029     * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
2030     startup file
2031     (ThubanApplication.read_startup_files): New method to run
2032     ~/.thuban/thubanstart.py
2033    
2034 bh 192 * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
2035     Move the toolbar definition to the Menu instance main_toolbar.
2036     (MainWindow.build_toolbar): New method to build the toolbar
2037     similar to the build_menu methods
2038    
2039 bh 184 2002-05-23 Bernhard Herzog <[email protected]>
2040    
2041 bh 186 * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
2042     layer_outline_color. Fix it in the definition of the command too.
2043    
2044 bh 184 * Thuban/UI/command.py (Command): Fix typo in doc string
2045    
2046 bh 182 2002-05-22 Bernhard Herzog <[email protected]>
2047    
2048     * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
2049     in the docstring
2050    
2051 bh 175 2002-05-15 Bernhard Herzog <[email protected]>
2052    
2053 bh 180 * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
2054     when the shapefile is empty.
2055     (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
2056     now return None for empty shapefiles. Update doc-strings.
2057    
2058     * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
2059     the layer's bbox being None.
2060    
2061     * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
2062     layer's bbox being None.
2063    
2064 bh 175 * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
2065     necessary.
2066     (MapCanvas.__init__): New instance variables, last_selected_layer
2067     and last_selected_shape to determine how the selection has
2068     changed.
2069    
2070     * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
2071     AutoSizeColumns because it will cause a traversal of the entire
2072     table which for large .dbf files will take a very long time.
2073    
2074 bh 172 2002-05-14 Bernhard Herzog <[email protected]>
2075    
2076     * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
2077     maximum depth for the tree than shapelib does by default.
2078    
2079 bh 165 2002-05-10 Bernhard Herzog <[email protected]>
2080    
2081     * setup.py (py_modules): The shptree modules doesn't have a
2082     wrapper, so don't include it in the py_modules
2083    
2084 bh 163 2002-05-08 Bernhard Herzog <[email protected]>
2085    
2086     * extensions/shapelib/shptree.c (compare_ints): Make arguments
2087     const void * as in the qsort prototype
2088     (SHPTreeFindLikelyShapes): Remove some unused variables.
2089    
2090     * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
2091     maintains to redraw the window during a drag.
2092     (MapCanvas.unprojected_rect_around_point): New method to determine
2093     a small region around a point for hit-testing.
2094     (MapCanvas.find_shape_at): Only test the shapes in a small region
2095     around the point.
2096    
2097     * setup.py: Increment the version to 0.1.2
2098    
2099     * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
2100     debug print and set session to None after unsubscribing
2101    
2102 bh 146 2002-05-07 Bernhard Herzog <[email protected]>
2103    
2104 bh 154 * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
2105     the file to have a .thuban extension.
2106    
2107 bh 152 * Thuban/UI/tree.py (session_channels): New class constant with
2108     all the session channels to subscribe to to update the tree
2109     (SessionTreeCtrl.session_changed): Remember the session so that we
2110     can unsubscribe properly. Use the new class constant to
2111     unsubscribe from the old session and subscribe to the new one.
2112     (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
2113     subscriptions of the SessionTreeCtrl.
2114     (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
2115    
2116     * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
2117     Session Tree" command to the file menu.
2118    
2119     * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
2120     as update_region to the renderer.
2121    
2122     * Thuban/UI/renderer.py
2123     (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
2124     update box is now directly a tuple, not a wxRect anymore.
2125    
2126     * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
2127     prints.
2128    
2129     2002-05-07 Bernhard Herzog <[email protected]>
2130    
2131 bh 146 * setup.py: Add the shptree extension module. See
2132     extensions/pyshapelib/ChangeLog for more details.
2133    
2134     * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
2135     extensions/shapelib/dbfopen.c: Really update to the versions of
2136     shapelib 1.2.9. For some reason it wasn't really done on
2137     2002-04-11.
2138    
2139     * extensions/shapelib/shptree.c: Modified version of shptree.c of
2140     shapelib 1.2.9. The only real difference is the use of qsort
2141     instead of a bubble sort implementation
2142    
2143     * Thuban/Model/layer.py (Layer.__init__): New instance variable
2144     shapetree to hold the shapelib quadtree for the shapefile
2145     (Layer.open_shapefile): Create the quad tree.
2146     (Layer.ShapesInRegion): New method to return the ids of shapes in
2147     a given region using the quad tree.
2148    
2149     * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
2150     comment
2151     (draw_polygon_shape): Accept both arcs and polygons.
2152     (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
2153     the api.
2154    
2155     * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
2156     return the shape ids to be rendered in a given layer.
2157     (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
2158     ids. Use draw_polygon_shape to draw arc shapes as well.
2159     (ScreenRenderer.RenderMap): New parameter for the rectangle that
2160     has to be updated
2161     (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
2162     calling it's ShapesInRegion method.
2163    
2164     * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
2165     update_region for the update region.
2166     (MapCanvas.OnPaint): Maintain the update region
2167     (MapCanvas.do_redraw): Pass the bounding box of the update_region
2168     to the renderer when drawing the bitmap. Reset the update_region.
2169    
2170 bh 129 2002-05-03 Bernhard Herzog <[email protected]>
2171    
2172 bh 131 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
2173     MainWindow.OpenSession): Change the file extension of the session
2174     files to .thuban
2175    
2176 bh 129 * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
2177     Move the map channels to be forwarded by the session into the
2178 bh 146 class constant with forwarded_channels. Also add
2179     LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
2180     forwarded_channels
2181 bh 129
2182     * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
2183     typo and some rewording).
2184    
2185 bh 126 2002-05-02 Bernhard Herzog <[email protected]>
2186    
2187     * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
2188     around to speed up most redraws:
2189     (MapCanvas.__init__): New instance variable bitmap which holds the
2190     bitmap
2191     (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
2192     self.bitmap to draw.
2193     (MapCanvas.full_redraw): New method to force a full redraw
2194     including the bitmap
2195     (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
2196     make sure the bitmap is redrawn.
2197     (MapCanvas.projection_changed, MapCanvas.set_view_transform,
2198     MapCanvas.shape_selected): Call full_redraw instead of readraw to
2199     make sure the bitmap is redrawn.
2200     (MapCanvas.OnSize): New method to handle size events so that the
2201     bitmap can be redrawn.
2202    
2203 bh 124 2002-04-29 Bernhard Herzog <[email protected]>
2204    
2205     * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
2206     canvas' VIEW_POSITION event
2207     (MainWindow.view_position_changed): Handler for VIEW_POSITION.
2208     Update the text in the status-bar accordingly.
2209    
2210     * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
2211     (MapCanvas.__del__): Implement because Publisher.__del__ has to be
2212     called.
2213     (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
2214     current_position
2215     (MapCanvas.set_current_position): New method to set
2216     current_position. Issue a VIEW_POSITION event
2217     (MapCanvas.CurrentPosition): New public method to return the value
2218     of current_position. Should be called when the VIEW_POSITION event
2219     is processed.
2220     (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
2221     Update the position.
2222     (MapCanvas.OnLeaveWindow): Set the position to None.
2223    
2224     * Thuban/UI/messages.py (VIEW_POSITION): New message for the
2225     position in the statusbar
2226    
2227 tkoester 403 2002-04-26 Frank Koormann <[email protected]>
2228 frank 120
2229     * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
2230    
2231 tkoester 403 2002-04-24 Frank Koormann <[email protected]>
2232    
2233 frank 118 * Resources/Bitmaps/identify.xpm: shadow added
2234    
2235     * Resources/Bitmaps/fullextent.xpm: new
2236 jan 116
2237 tkoester 403 2002-04-22 Jan-Oliver Wagner <[email protected]>
2238 jan 116
2239 tkoester 403 * Thuban/UI/tree.py (update_tree): added test for None on map bounding
2240     box
2241 jan 114
2242 tkoester 403 2002-04-21 Jan-Oliver Wagner <[email protected]>
2243    
2244 jan 114 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
2245    
2246     * Thuban/UI/tree.py (update_tree): added added map extent
2247    
2248     * Thuban/UI/mainwindow.py (_method_command): extended by parameter
2249 tkoester 403 icon; added map_full_extend as tool
2250 jan 114
2251 tkoester 403 2002-04-19 Jan-Oliver Wagner <[email protected]>
2252 jan 107
2253     * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
2254     saving _new_ sessions
2255    
2256     * Thuban/Model/session.py (create_empty_session): new session
2257     don't have a filename (set to None)
2258    
2259     * Thuban/UI/tree.py (update_tree): added filename and modified flag
2260    
2261     * Thuban/Model/load.py (ProcessSession): convert projection
2262     parameters from unicode to regular string
2263    
2264     * Data/iceland_sample.session: Added UTM Zone 26 projection.
2265    
2266 bh 100 2002-04-11 Bernhard Herzog <[email protected]>
2267    
2268     * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
2269     extensions/shapelib/dbfopen.c: Update to the versions of shapelib
2270     1.2.9
2271    
2272     * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
2273     the pyshapelib directoy into the list of include dirs, so that
2274     pyshapelib_api.h can be found.
2275    
2276     * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
2277     holds the pyshapelib C-API
2278     (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
2279     pyshapelib_api to access the shapelib functions.
2280     (initwxproj): Import the c_api from the shapelib module and
2281     initialize pyshapelib_api.
2282    
2283 bh 89 2002-04-04 Bernhard Herzog <[email protected]>
2284    
2285 bh 91 * setup.py (thuban_bdist_rpm.initialize_options): Use
2286     initialize_options to create the scripts for the rpm.
2287    
2288 bh 89 * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
2289    
2290 bh 85 2002-04-03 Bernhard Herzog <[email protected]>
2291    
2292 bh 87 * setup.py: Increment version to 0.1.1
2293    
2294 bh 85 * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
2295     Layer" and "Remove Layer" commands from the layer menu to the map
2296     menu
2297    
2298 bh 83 2002-02-15 Bernhard Herzog <[email protected]>
2299    
2300     * Thuban/Model/layer.py (Layer.Shape): list append only takes one
2301     argument (python <= 1.5.2 erroneously accepted multiuple
2302     arguments)
2303    
2304 bh 81 2002-02-04 Bernhard Herzog <[email protected]>
2305    
2306     * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
2307     RecordGrid in the identifyview.
2308     (IdentifyView.__init__): Use IdentifyGridCtrl instead of
2309     IdentifyListCtrl. The grid allows editing of the values.
2310    
2311     * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
2312     implementing a grid for a single row of a thuban table.
2313    
2314     * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
2315     layers by default. Easier to use than the previous default of only
2316     searching through the select layer which meant that if no layer
2317     was selected, you couldn't select a shape.
2318    
2319     * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
2320    
2321     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
2322     stroke_width attribute
2323    
2324     * Thuban/Model/save.py (save_session): Write the new stroke_width
2325     attribute
2326    
2327     * Thuban/Model/load.py (ProcessSession.startElement): Read the
2328     stroke_width attribute
2329    
2330     * Thuban/Model/layer.py (Layer.__init__): New parameter and
2331     instance variable stroke_width
2332     (Layer.SetStrokeWidth): Set the stroke_width.
2333    
2334 bh 72 2002-02-01 Bernhard Herzog <[email protected]>
2335    
2336     * extensions/thuban/wxproj.cpp (project_points): Fix two
2337     off-by-one errors in the last loop that joins the various parts
2338     together.
2339    
2340 bh 71 2002-01-14 Bernhard Herzog <[email protected]>
2341    
2342     * setup.py (data_dist.make_distribution): Fix some typos
2343    
2344 bh 70 2001-09-18 Bernhard Herzog <[email protected]>
2345    
2346     * README: Slight tweaking in preparation for the 0.1 release
2347    
2348     * setup.cfg: Add section for sdist to create both tgz and zip
2349     archives
2350    
2351     * setup.py: increase version number to 0.1
2352     (data_dist): New command class for data distribution
2353    
2354 bh 64 2001-09-14 Bernhard Herzog <[email protected]>
2355    
2356 bh 70 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
2357     Handle the case of no layer (i.e. layer is None) properly.
2358    
2359 tkoester 403 * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
2360 bh 70 Set the initial selection of the combo boxes to reflect the
2361     projection we're starting with in a way that works on windows,
2362     too.
2363    
2364 bh 64 * Thuban/Lib/connector.py (Connector.print_connections): Print the
2365     puiblisher's ids in hex to make it easier to compare them to the
2366     standard repr of python methods
2367    
2368     * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
2369     messages
2370    
2371 bh 59 2001-09-13 Bernhard Herzog <[email protected]>
2372    
2373 bh 64 * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
2374     deselect the layer if no layer is selected
2375    
2376 bh 59 * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
2377     idle time when there actually is something to draw. If there's
2378     nothing to draw simply clear the window
2379     (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
2380     (MapCanvas.SetMap): force a redraw in all cases because
2381     FitMapToWindow doesn't always do it.
2382     (MapCanvas.ZoomFactor): Add an optional parameter, center, to
2383     specify the point to move into the center of the window
2384     (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
2385     dragged, zoon in/out by a factor of 2
2386 bh 64 (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
2387     index, i.e. reversed drawing order) so that objects appearing to
2388     be in from of others are selected first. This is probably mostly
2389     relevant for point shapes where the symbols used may overlap
2390 bh 59
2391     * Thuban/Model/session.py (create_empty_session): Unset the
2392     modified bit before returning it
2393    
2394     * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
2395     create_empty_session session to create the new, empty session.
2396    
2397     * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
2398     the tool bitmaps.
2399     (MainWindow.OnClose, MainWindow.save_modified_session): Separate
2400     the code that asks whether the session should be saved into the
2401     new method save_modified_session.
2402     (MainWindow.OpenSession, MainWindow.NewSession): Use the new
2403     method to save modified session here too.
2404    
2405 bh 55 2001-09-11 Bernhard Herzog <[email protected]>
2406    
2407     * setup.py (InnoIconItem): fix typo
2408    
2409     (thuban_bdist_inno.run):
2410     (bdist_inno.run): Move the decision not to create symlinks on
2411     non-nt platforms to thuban_bdist_inno and do it unconditinally
2412     since we never want to create the symlinks here
2413    
2414 bh 48 2001-09-10 Bernhard Herzog <[email protected]>
2415    
2416 bh 53 * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
2417     identify view immediately
2418    
2419     * Thuban/UI/controls.py: New file with two classes RecordListCtrl
2420     and SelectableRecordListCtrl that implement the code shared by the
2421     identify view and the label dialog
2422    
2423     * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
2424     new class RecordListCtrl
2425    
2426     * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
2427     return value of GetValue is None instead of using it as a boolean
2428     directly so that Zero numbers are handled properly.
2429     (LabelListCtrl): Derive from the new class
2430     SelectableRecordListCtrl
2431    
2432 bh 48 * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
2433     (Proj4Dialog.dialogLayout): Make the window resizable and set the
2434     size of the text control explicitly to make the sizers work on
2435     both Windows and X.
2436    
2437 bh 44 2001-09-07 Bernhard Herzog <[email protected]>
2438    
2439     * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
2440     that can limit the search to the currently selected layer.
2441     (MapCanvas.SelectShapeAt): Make sure that the currently selected
2442     layer stays selected even when no shape is found
2443 bh 46 (MapCanvas.FitRectToWindow): If the rect has zero with or zero
2444     height do nothing (avoids zero division errors)
2445 bh 44
2446 bh 32 2001-09-06 Bernhard Herzog <[email protected]>
2447    
2448 bh 42 * Thuban/UI/tree.py (SessionTreeCtrl, SessionTreeView.__init__):
2449     Correct the spelling of SessionTreeCtrl. dabbrev is too damn
2450     convenient :-)
2451     (SessionTreeCtrl.__init__, SessionTreeCtrl.update_tree): Introduce
2452     a new instvar layer_to_item to map layers to tree items
2453     (SessionTreeCtrl.layer_selected): Select the appropriate tree item
2454     to match the current selection in the interactor
2455    
2456 bh 40 * Thuban/UI/interactor.py (Interactor.SelectedLayer):
2457     (Interactor.HasSelectedLayer): New methods to query the current
2458     selection
2459    
2460     * Thuban/UI/mainwindow.py (MainWindow.current_layer):
2461     (MainWindow.has_selected_layer): Simply call the appropriate
2462     interactor method
2463    
2464     * Thuban/UI/mainwindow.py (MainWindow.__init__):
2465     (MainWindow.LayerShowTable):
2466     (MainWindow.identify_view_on_demand): Store the interactor in an
2467     instvar and use that reference instead of going through main.app
2468    
2469 tkoester 403 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
2470     * Thuban/UI/application.py (ThubanApplication.OnInit):
2471 bh 40 * Thuban/UI/main.py (main): Create the session tree view in main
2472     with the new mainwindow method ShowSessionTree and not directly
2473     the application's OnInit method
2474    
2475     * Thuban/UI/tree.py (myTreeCtrlPanel):
2476     (SessioinTreeCtrl): Rename to SessioinTreeCtrl and turn it into a
2477     TreeCtrl isntead of a panel. This affects most method since we now
2478     refer to self instead of self.tree
2479     (SessionTreeView): New class implementing a non-modal dialog
2480     showing the session tree.
2481    
2482 bh 35 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Pass the
2483     layer to the tableview dialog.
2484    
2485     * Thuban/UI/tableview.py: Add some doc-strings
2486 tkoester 403 (TableGrid):
2487 bh 35 (TableGrid.OnRangeSelect):
2488     (TableGrid.OnSelectCell):
2489     (TableFrame.__init__):
2490     (TableFrame.row_selected):
2491     Selecting rows in the grid view now updates the selected shapes
2492     through the TableFrame. To achieve this we derive TableGrid from
2493     Publisher and introduce the message type ROW_SELECTED which the
2494     TableFrame subscribes to and which is issued by OnRangeSelect and
2495     OnSelectCell
2496    
2497     (DataTable.SelectRow): Removed because it's no longer needed in
2498     the row/shape selection scheme
2499    
2500 bh 32 * Thuban/UI/dialogs.py: New file implementing common classes for
2501     dialogs
2502    
2503     * Thuban/UI/tableview.py (TableGrid.__init__): Don't subscribe to
2504     the SELECTED_SHAPE message anymore. This is now handled by the
2505     parent.
2506     (TableGrid.select_shape): Only update the selection if the shape
2507     is not None.
2508     (TableFrame): Inherit from the new NonModalDialog class.
2509     (TableFrame.__init__, TableFrame.select_shape): Handle the
2510     SELECT_SHAPE message.
2511     (TableFrame.OnClose): Extend the inherited method to unsubscribe
2512     SELECT_SHAPE
2513    
2514     * Thuban/UI/mainwindow.py (MainWindow.init_dialogs):
2515     (MainWindow.add_dialog):
2516     (MainWindow.dialog_open):
2517     (MainWindow.remove_dialog):
2518     (MainWindow.get_open_dialog): New methods to maintain a dictionary
2519     of opened non-modal dialogs.
2520    
2521     (MainWindow.__init__): Initialize the new non-modal dictionary
2522     management code
2523     (MainWindow.LayerShowTable): maintain separate dialogs for each
2524     table using the non-modal dialog management code to only open a
2525     view once for each table.
2526    
2527     (MainWindow.IdentifyTool):
2528     (MainWindow.__init__):
2529     (MainWindow.identify_view_on_demand): Don't open the identify view
2530     in IdentifyTool anymore. This will be done automatically by the
2531     new method identify_view_on_demand which handles the
2532     SELECTED_SHAPE message so that the identify view will be opened on
2533     demand
2534    
2535     * Thuban/UI/identifyview.py (IdentifyListCtrl.__init__): Remove
2536     the interactor argument. The SELECTED_SHAPE message is now handled
2537     by the parent.
2538     (IdentifyView.__init__): Add the interactor argument so that we
2539     can handle the SELECTED_SHAPE message here
2540     (IdentifyView.selected_shape): New method to handle the
2541     SELECTED_SHAPE messages
2542    
2543     * Thuban/UI/identifyview.py (IdentifyView): Derive from the new
2544     NonModalDialog class
2545     (IdentifyView.OnClose): Extend the inherited version to
2546     unsubscribe SELECT_SHAPE
2547    
2548     * Thuban/Model/session.py (Session.UnsetModified): Remove debug prints
2549    
2550 bh 26 2001-09-05 Bernhard Herzog <[email protected]>
2551    
2552     * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
2553 tkoester 403
2554 bh 26 * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
2555     interactor to pass through to the MapCanvas
2556 tkoester 403
2557 bh 26 * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
2558     argument to the MainWindow constructor to get rid of the ugly hack
2559     that made main.app available early just so that the mapcanvas
2560     could access the interactor object.
2561    
2562 bh 19 2001-09-04 Bernhard Herzog <[email protected]>
2563    
2564 bh 22 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): New method
2565     that runs a modal message box
2566     (MainWindow.OnClose): Use the new method
2567     (MainWindow.RemoveLayer): Just do nothing in case no layer is
2568     selected. The command should be grayed out anyway, so there's no
2569     need to pop up a message box.
2570     (MainWindow.AddLayer): Pop up a message box with an error message
2571     if the shape file can't be opened
2572    
2573     * Thuban/Model/layer.py (Layer.__init__): Open the shapefile
2574     immediately. This will cause an exception in case the file can't
2575     be opened and we can display an appropriate message.
2576    
2577 bh 19 * MANIFEST.in: Add extensions/pyprojection/LICENSE
2578    
2579     * setup.py (thuban_bdist_rpm): New class implementing a Thuban
2580     specific bdist_rpm command.
2581    
2582     * Thuban/UI/main.py: Catch ImportError exceptions when importing
2583     the locale module because it may not be available on some
2584     installations.
2585    
2586     * extensions/pyprojection/LICENSE: Copy of the license text in
2587     Projection.i. Having it in a separate file makes it easier to
2588     refer to license text in e.g. RPMs
2589    
2590 bh 18 2001-09-03 Bernhard Herzog <[email protected]>
2591    
2592 bh 19 * setup.py: use wx-config instead of wxgtk-config because it's
2593     more generic
2594    
2595     * setup.py (ThubanInstall.get_outputs): Add the symlink in
2596     <prefix>/bin to the outputs
2597     (ThubanInstall.link_file): New method to link files. We need this
2598     because the standard copy_files refuses to link non-existing
2599     files.
2600     (ThubanInstall.run): Remove the leading install root from the
2601     script filename if an install root was specified and use the new
2602     link_file method
2603 tkoester 403
2604 bh 18 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
2605     the window when the first layer is added to the map.
2606    
2607     * setup.py (ThubanInstall.run): Honor the build root (self.root)
2608     when linking thuban.py to <prefix>/bin
2609    
2610 bh 16 2001-08-31 Bernhard Herzog <[email protected]>
2611    
2612     * setup.py: In the setup call, the install parameters shouldn't
2613     have trailing slashes because distutils on non-posix platforms
2614     doesn't like that. The same applies to other directories like
2615     "Resources/Bitmaps"
2616    
2617     In the configuration section for nt, move the wxWindows directory
2618     optins into the part clearly marked as editable.
2619    
2620     (InstallLocal.initialize_options):
2621     (InstallLocal.user_options): remove the currently unused debug
2622     flag
2623     (thuban_build_py.find_all_modules): Add this method so that it
2624     works for our case of having packages and modules in one
2625     distribution as well.
2626     (ThubanInstall.initialize_options):
2627     (ThubanInstall.finalize_options):
2628     (ThubanInstall.user_options):
2629     (ThubanInstall.boolean_options): Add new options, do-symlink and
2630     extra files. Since these are the first ThubanInstall specific
2631     options, override user_options and boolean_options
2632     (ThubanInstall.run): Honor the new do-symlink and extra-files
2633     options.
2634     (ThubanInstall.get_outputs): Add to override the base-class's
2635     version and add the extra-files to the outputs
2636     (bdist_inno): New class for windows distributions with Inno Setup
2637     (InnoIconItem): Helper class for bdist_inno
2638     (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
2639     this together with the appropriate parameters, to the setup call.
2640 tkoester 403
2641 bh 16 * setup.cfg (bdist_inno): added new section for the inno setup
2642     installer
2643    
2644     * Thuban/UI/tree.py (myTreeCtrlPanel.__init__): New inst var
2645     changing_selection to avoid recursive selection events when
2646     modifying the selection in response to a selection event.
2647     (myTreeCtrlPanel.normalize_selection): Set the new inst var when
2648     changing the tree's selection.
2649     (myTreeCtrlPanel.OnSelChanged): Only normalize the selection when
2650     we're not being called indirectly from normalize_selection.
2651    
2652     * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): Call
2653     event.Check only if the command is actuall checkable.
2654     (MainWindow.__init__): Call the toolbar's Realize method to make
2655     sure that the items are actually shown
2656    
2657 bh 7 2001-08-28 Bernhard Herzog <[email protected]>
2658    
2659 bh 9 * setup.py: Fix some doc strings
2660    
2661 bh 7 * ChangeLog: started
2662    

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26