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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26