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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 673 - (hide annotations)
Tue Apr 15 19:17:39 2003 UTC (21 years, 10 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 92483 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26