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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 426 - (hide annotations)
Mon Feb 24 18:45:37 2003 UTC (22 years ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 54613 byte(s)
updated ChangeLog

1 jonathan 426 2003-02-24 Jonathan Coles <[email protected]>
2    
3     * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
4     functions from Thuban color objects to wxWindow colour objects.
5    
6     * Thuban/Model/classification.py (Classification): Renamed
7     GetProperties() to GetClassData(). Used the new iterator
8     in TreeInfo().
9     (ClassIterator): Iterator implementation to iterate over the
10     ClassData objects in a classification object.
11    
12     * Thuban/Model/save.py (Saver.write_classificaton): Uses
13     the new iterator to save the classification information.
14    
15     * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
16     for changing the stroke and fill colors and previewing the
17     changes.
18    
19     * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
20     MainWindow.SaveSessionAs): Text string changes so the dialogs
21     have more meaningful titles.
22    
23     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
24     Classification method name from GetProperties to GetClassData.
25    
26     * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
27     instead of accessing now non-existent class variables.
28    
29 bh 425 2003-02-24 Bernhard Herzog <[email protected]>
30    
31     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
32     unneeded Shape() call. Rendering is substantially faster without
33     it and it avoids some problems with broken shape files.
34    
35 frank 423 2003-02-20 Frank Koormann <[email protected]>
36    
37     Force minimal size of identify and label dialogs. The autosizing
38     looked too ugly.
39    
40     * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
41     * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
42     Set size of listctrl.
43     * Thuban/UI/identifyview.py (IdentifyView.__init__):
44     Set size of dialog.
45    
46 jonathan 408 2003-02-19 Jonathan Coles <[email protected]>
47    
48     * test/test_classification.py, test/test_layer.py,
49     test/test_load.py, test/test_map.py, test/test_session.py:
50     Updated the tests to use the new functions that are in the
51     respective classes.
52    
53     * Thuban/Model/classification.py (Classification):
54     Uses the new ClassData* classes. Modification messages are
55     passed up to the parent layer (if it exists).
56     (ClassData): New class to encapsulate the common data in each
57     classification property.
58     (ClassDataDefault): Represents the Default class. data.
59     (ClassDataPoint): Represents a single class. data point
60     (ClassDataRange): Represents a class. range
61     (ClassDataMap): Represents a class. map (unused).
62    
63     * Thuban/Model/color.py: Added Color.None to represent something
64     with no color. Color.Black represents the color black.
65     (NoColor): Helper class derived from Color to represent something
66     with no color.
67    
68     * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
69     stroke_width attributes. Made the 'classification' attribute private.
70     New methods for setting/getting the classification.
71    
72     * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
73     to get the classifcation and use the new ClassData* classes to
74     hold the classification data. Use Str2Num to convert numbers
75     properly.
76    
77     * Thuban/Model/save.py (Saver): Use new Color and Classification
78     methods
79    
80     * Thuban/UI/classifier.py (ClassGrid): New class to represent a
81     custom grid.
82     (ClassTable): Support for editing Values and Labels and for
83     changing what type (point or range) of data is stored in each
84     property based on how the user enters the data.
85     (Classifier): Support for saving the new classifications and
86     launching the dialog to edit a property.
87     (SelectPropertiesDialog): New class for editing the visual
88     properties of a classification (stroke color, width, and fill color)
89     (ClassPreviewer): Took the Draw method from ClassRenderer and
90     made most of it into this new class. Intend to use this class in
91     the SelectPropertiesDialog for previewing changes.
92    
93     * Thuban/UI/renderer.py: Use new Color and Classification methods.
94    
95     * Thuban/UI/tree.py: Formatting changes.
96    
97     * Doc/thuban.dtd: Add 'label' element
98    
99     * Thuban/common.py: New. Contains common routines used throughout
100     the code.
101     (Str2Num): Takes a string and converts it to the "best" type of
102     number.
103    
104 bh 405 2003-02-14 Bernhard Herzog <[email protected]>
105    
106     * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
107     dragging flag is always set to 0 even when the tool implementation
108     raises an exception
109    
110 bh 402 2003-02-11 Bernhard Herzog <[email protected]>
111    
112     * Thuban/UI/application.py (ThubanApplication.splash_screen): New
113     method to create a splash screen.
114     (ThubanApplication.ShowMainWindow): New. Show the main window.
115     Needed so the splash screen can display the mainwindow
116     (ThubanApplication.OnInit): Call the
117     new splash_screen method to determine whether the application
118     should display a splash screen. If it displays a splash screen do
119     not immediately show the main window.
120    
121 jonathan 399 2003-02-11 Jonathan Coles <[email protected]>
122    
123     * Thuban/Model/classification.py: Added import line to fix
124     feature conflicts between running on python2.2 and python2.1.
125    
126     * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
127     onto the clinfo parameter, so removed the deepcopy().
128    
129 jonathan 396 2003-02-10 Jonathan Coles <[email protected]>
130    
131 tkoester 403 * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
132 jonathan 396 Added element_open variable to track opening and closing of tags
133     so that tags that don't span more than one line are closed with
134     /> instead of </tag_name>. Use the GetDefault*() methods of
135     the Classification class.
136    
137     * Thuban/Model/classification.py (Classificaton): Added set and
138     get methods for the default data. The class also takes a layer
139     reference so that modification messages can be sent. Fixed the
140     methods to use the new ClassData class.
141     (ClassData): New class to encapsulate the classification data
142    
143     * Thuban/Model/layer.py (Layer): Remove the
144 tkoester 403 Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
145 jonathan 396 SetDefault*() methods on the layer's classification object.
146 tkoester 403 (Layer.__init__): Use the new SetDefault*() methods in the
147 jonathan 396 Classification class.
148    
149     * Thuban/Model/load.py (ProcessSession): Use the new ClassData
150     object instead of a dictionary.
151    
152 tkoester 403 * Thuban/UI/classifier.py (ClassRenderer): New class to
153 jonathan 396 draw the classifications in the dialog box's table.
154     (Classifier): Modified to use the ClassRenderer class.
155    
156 tkoester 403 * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
157     methods of the Classification class.
158 jonathan 396
159     * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
160     of the ClassData class.
161    
162     * test/test_classification.py, test/test_layer.py,
163     test/test_map.py, test/test_session.py: Fix the tests to work
164     with the above code changes.
165    
166 jonathan 387 2003-02-03 Jonathan Coles <[email protected]>
167    
168     * Thuban/Model/classification.py (Classification): Added getNull()
169     to return the NullData reference
170    
171     * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
172     Layer.SetStrokeWidth): Modified these functions to change the
173     null data in the classification rather than keep these values
174     directly in the Layer class. Menu options to change these values
175     work again.
176    
177 jonathan 380 2003-01-28 Jonathan Coles <[email protected]>
178    
179 jonathan 384 * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
180 tkoester 403 Fixed crashing problem on some systems. Dialog box shows
181 jonathan 380 classification data.
182    
183 jonathan 384 * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
184     Colors in the tree view.
185    
186     * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
187     the tree info for classifications. Commented out unnecessary lines.
188    
189     * Thuban/Model/classification.py (Classification.TreeInfo): New
190     function to add information about the classification into the
191     tree view.
192    
193 tkoester 403 2003-01-27 Jan-Oliver Wagner <[email protected]>
194 jan 375
195 tkoester 403 * Thuban/__init__.py (_): New.
196 jan 375
197     * Thuban/Model/classification.py, Thuban/Model/extension.py,
198     Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
199 tkoester 403 Thuban/Model/session.py, Thuban/UI/application.py,
200     Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
201     Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
202     Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
203     Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
204     Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
205 jan 375
206 jonathan 370 2003-01-27 Jonathan Coles <[email protected]>
207    
208 tkoester 403 * Thuban/Model/layer.py: Classification initialization calls.
209 jonathan 370
210 tkoester 403 * Thuban/Model/classification.py: Created class to encapsulate
211     a layer classification. Supports specific data points and
212     ranges.
213 jonathan 370
214 tkoester 403 * Thuban/Model/load.py: Added support for loading classification
215     information.
216 jonathan 370
217 tkoester 403 * Thuban/Model/save.py: Added support for saving classification
218     information.
219 jonathan 370
220 tkoester 403 * Thuban/UI/classifier.py: Initial class for a dialog box for
221     specifying classification information.
222 jonathan 370
223 tkoester 403 * Thuban/UI/mainwindows.py: Support for opening the classifier
224     dialog.
225 jonathan 370
226 tkoester 403 * Thuban/UI/renderer.py: Support for drawing a layer with the
227     classification information.
228 jonathan 370
229 tkoester 403 * Data/iceland_sample_class.thuban: iceland_sample with
230     classification data.
231 jonathan 370
232 tkoester 403 * test/test_classification: Tests for the Classification class.
233 jonathan 370
234 bh 359 2002-12-09 Bernhard Herzog <[email protected]>
235    
236 bh 361 * test/test_command.py: New. Tests for the command classes.
237    
238 bh 359 * Thuban/UI/command.py (ToolCommand): New class for tool commands.
239     (Command.IsTool): New method to distinguish between command
240     switching tools and other commands.
241    
242     * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
243     the tool to avoid direct assignments to instance variables
244     (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
245     (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
246     change the tool
247    
248     * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
249     active tool's command turns insensitive, disable the tool.
250     (_tool_command): Use the new ToolCommand class
251    
252     * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
253     SelectTool method to change the tool
254     (iconfile): Use the ToolCommand class
255    
256 bh 354 2002-12-03 Bernhard Herzog <[email protected]>
257    
258     * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
259     the case of selected items that are not children of Layers or Maps
260     properly. Previously this bug would trigger an assertion in
261     wxWindows.
262    
263 frank 352 2002-11-06 Frank Koormann <[email protected]>
264    
265 bh 354 * Thuban/UI/mainwindow.py: Altered the order of tools in the
266     toolbar: First now are all navigation tools (Zoom In/Out, Pan,
267     Full Extent).
268 tkoester 403
269 bh 349 2002-10-23 Bernhard Herzog <[email protected]>
270    
271     * setup.py (setup call): version now 0.1.3
272    
273     * MANIFEST.in: Add the files in test/
274    
275     * test/README: Add note about tests requiring the iceland data
276    
277     * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
278     copyright notice.
279    
280 bh 344 2002-10-18 Bernhard Herzog <[email protected]>
281    
282     * test/test_map.py
283     (TestMapWithContents.test_projected_bounding_box): Use an explicit
284     epsilon.
285    
286     * test/support.py (FloatComparisonMixin.assertFloatEqual)
287     (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
288     message if the assertion fails and don't return the return value
289     of self.assert_. In assertFloatSeqEqual the return meant that not
290     all items of the sequence were compared.
291    
292 bh 326 2002-09-20 Bernhard Herzog <[email protected]>
293    
294 bh 341 * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
295    
296     * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
297    
298 bh 338 * test/test_map.py (TestMapWithContents.test_tree_info): Create
299     the string with the bounding box on the fly because of platform
300     differences in the way %g is handled.
301    
302     * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
303     DBFfile too because Thuban layers can't yet cope missing DBF
304     files.
305    
306     2002-09-20 Bernhard Herzog <[email protected]>
307    
308 bh 326 * test/test_menu.py: Use initthuban instead of
309     add_thuban_dir_to_path to initialize Thuban.
310    
311     * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
312     Mixin class for float comparisons
313     (SubscriberMixin): New. Mixin class to test messages sent through
314     the Connector class
315    
316     * test/README: Fix a typo and add the -v flag to the command for
317     individual tests
318    
319 bh 335 * test/test_session.py: New. Test cases for Thuban.Model.session
320    
321     * test/test_proj.py: New. Test cases for Thuban.Model.proj
322    
323     * test/test_map.py: New. Test cases for Thuban.Model.map
324    
325     * test/test_layer.py: New. Test cases for Thuban.Model.layer
326    
327     * test/test_label.py: New. Test cases for Thuban.Model.label
328    
329     * test/test_connector.py: New. Test cases for Thuban.Lib.connector
330    
331     * test/test_color.py: New. Test cases for Thuban.Model.color
332    
333     * test/test_base.py: New. Test cases for Thuban.Model.base
334    
335 bh 322 2002-09-13 Bernhard Herzog <[email protected]>
336    
337     * Thuban/Model/session.py (Session.forwarded_channels): Forward
338     the CHANGED channel too.
339    
340     * Thuban/Model/map.py (Map.forwarded_channels): Forward the
341     CHANGED channel too.
342     (Map.__init__): Call the Modifiable constructor as well.
343    
344     * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
345     event if the modified flag changes.
346     (Modifiable.changed): Tweak the doc-string.
347    
348     * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
349     (MainWindow.set_position_text): Put the code that puts the text
350     with the mouse position into the status bar into the new method
351     set_position_text so that it can overwritten in derived classes.
352    
353 bh 317 2002-09-12 Bernhard Herzog <[email protected]>
354    
355     * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
356     message box on the main window.
357    
358 bh 313 2002-09-11 Bernhard Herzog <[email protected]>
359    
360     * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
361     the 'E' because it's less likely to interfere with other menu
362     entries.
363 bh 315 (MainWindow.build_menu): remove an incorrect comment.
364 bh 313
365 bh 311 2002-09-10 Bernhard Herzog <[email protected]>
366    
367     * Thuban/UI/mainwindow.py (MainWindow.Map): New.
368     (_tool_command): Add sensitive parameter
369     (_has_visible_map): Sensitivity callback to tools and other
370     commands that require a visible map. Use it in map_zoom_in_tool,
371     map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
372     and map_full_extent
373    
374 bh 308 2002-09-06 Bernhard Herzog <[email protected]>
375    
376     * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
377     VIEW_POSITION
378    
379 tkoester 403 2002-09-04 Frank Koormann <[email protected]>
380 frank 306
381     * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
382    
383 bh 302 2002-09-02 Bernhard Herzog <[email protected]>
384    
385 bh 304 * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
386     wxWindows already and our implementation doesn't work correctly
387     with wxGTK 2.3:
388     (MapCanvas.__init__): Remove the instance variable
389     (MapCanvas.OnPaint): Always call do_redraw when there's a map to
390     be drawin
391     (MapCanvas.OnIdle): Removed.
392    
393 bh 302 * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
394     a parameter to determine the size of the rectangle.
395     (MapCanvas.find_shape_at): Create the box around the point on a
396     layer by layer basis and make the size depend on the shape type.
397     This solves a problem with the selection of point shapes at the
398     border of the layer's bounding box
399    
400 bh 292 2002-08-30 Bernhard Herzog <[email protected]>
401    
402 bh 300 * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
403     for the sensitivity of remove layer.
404     (_can_remove_layer): New. Sensitivity callback for remove layer
405     (Command layer_remove): Use _can_remove_layer
406    
407     * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
408     determine whether a given layer can be deleted.
409    
410 bh 297 * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
411     (MapCanvas.do_redraw): Get rid of the unused update_region
412     instance variable
413    
414 bh 294 * Thuban/UI/view.py: Add/update some doc-strings.
415    
416 bh 292 * test/: new subdirectory with a bunch of unit tests.
417    
418     * test/README, test/test_table.py, test/test_save.py,
419     test/test_menu.py, test/test_load.py: Initial set of tests and
420     brief instructions on how to run them
421    
422 bh 287 2002-08-29 Bernhard Herzog <[email protected]>
423    
424 bh 291 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
425     arcs with multiple parts.
426    
427 bh 289 * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
428     Handle degenrate rectangles.
429    
430 bh 287 * Thuban/Model/table.py: Make writing records work correctly:
431     (Table.__init__): Keep track of whether the DBF is open for
432     writing
433     (Table.write_record): Open the DBF file for writing when necessary
434    
435 bh 285 2002-08-27 Bernhard Herzog <[email protected]>
436    
437     * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
438     dbf files only for reading by default. Use a new writable dbf
439     object for writing.
440    
441 bh 278 2002-08-26 Bernhard Herzog <[email protected]>
442    
443 bh 282 * Thuban/UI/mainwindow.py: Refactor the context creation:
444     (MainWindow.Context): New method to return a context
445     (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
446     new method
447    
448 bh 278 * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
449     layer table specific code from TableGrid into LayerTableGrid
450     (TableFrame, LayerTableFrame): Split the layer table specific code
451     from TableFrame into LayerTableFrame
452 bh 280 (LayerTableGrid.select_shape): Remove a debug print
453 bh 278
454     * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
455     LayerTableFrame
456    
457 bh 277 2002-08-23 Bernhard Herzog <[email protected]>
458    
459     * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
460     absolute filename.
461    
462 bh 269 2002-08-22 Bernhard Herzog <[email protected]>
463    
464 bh 275 * Thuban/Model/table.py (Table.write_record): New method to write
465     records.
466 tkoester 403 (Table.__init__): Open the DBF file for writing too.
467 bh 275
468     * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
469     into the underlying table.
470    
471     * extensions/shapelib/shapefil.h (DBFCommit),
472     extensions/shapelib/dbfopen.c (DBFCommit): New API function to
473     commit any changes made to the DBF file.
474    
475 bh 271 * Thuban/UI/mainwindow.py (make_check_current_tool)
476     (_tool_command): Put the code that generates the "checked"
477     callback into a separate function so that we can reuse it
478     elsewhere
479    
480 bh 269 * Thuban/Model/save.py (Saver): New class to handle serializing a
481     session into an XML file. The main reason to introduce a class is
482     that applications built on Thuban can derive from it so that they
483     can save additional information in a session file.
484     (save_session): Delegate almost all the work to the Saver class.
485     Rename the filename argument to file because it may be a file like
486     object now.
487    
488     * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
489     code. Remove the little test code which would be executed when the
490     module is run as a script which didn't work anymore since it can't
491     import the other Thuban modules.
492     (ProcessSession, load_session): Refactor the ProcessSession to
493     have one method for each element start and end tag so that derived
494     classes can easily override the processing of individual tags.
495     Also, always parse with namespaces enabled because applications
496     built on top of Thuban will likely use namespaces if they extend
497     the session file format.
498    
499 bh 266 2002-08-21 Bernhard Herzog <[email protected]>
500    
501     * setup.py (ThubanInstall.run): Don't repr install_lib_orig
502     because thubaninit_contents will do it for us.
503    
504 tkoester 403 2002-08-16 Jan-Oliver Wagner <[email protected]>
505 jan 265
506     * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
507     tree window already open
508    
509 bh 259 2002-08-15 Bernhard Herzog <[email protected]>
510    
511 bh 263 * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
512     with self.
513    
514     * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
515     when we have actually captured it.
516    
517 bh 259 * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
518     shapefile and destroy the table.
519    
520     * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
521    
522 bh 254 2002-08-14 Bernhard Herzog <[email protected]>
523    
524 bh 256 * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
525     instance variable columns
526     (RecordTable.GetTypeName): row and col may be negative in some
527     cases.
528    
529 bh 254 * setup.py (InstallLocal.initialize_options)
530     (InstallLocal.finalize_options, InstallLocal.user_options): New
531     option create-init-file to build a thubaninit.py when running
532     install_local
533     (InstallLocal.run): Create the thubaninit.py module when requested
534     (thubaninit_contents): Split the template into several parts and
535     create a new function thubaninit_contents that creates the
536     contents of a thubaninit module.
537     (ThubanInstall.run): Use the new function to create the thubaninit
538     module.
539    
540 bh 252 2002-07-30 Bernhard Herzog <[email protected]>
541    
542     * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
543     cleanup.
544     (ThubanApplication.MainLoop): Extend to automatically call OnExit.
545    
546     * Thuban/Model/session.py (Session.Destroy): Don't bypass the
547     direct base class' Destroy method.
548    
549     * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
550     layers.
551     (Map.Destroy): Destroy the label_layer as well and call the
552     inherited Desatroymethod first so that no more messages are
553     issued.
554     (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
555     message if the stacking order actually has changed. Add
556     doc-strings.
557     (Map.BoundingBox): Correct the doc-string.
558     (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
559     (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
560    
561     * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
562     all labels.
563    
564 bh 247 2002-07-29 Bernhard Herzog <[email protected]>
565    
566     * Thuban/Model/map.py (Map.subscribe_layer_channels)
567     (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
568     to a layer's channels into separate methods.
569     (Map.RemoveLayer, Map.AddLayer): Call the new methods
570     (Map.Destroy): Unsubscribe from a layer's channels before
571     destroying it.
572    
573     * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
574     selected_layer parameter to searched_layer which is the layer to
575     search in.
576     (MapCanvas.SelectShapeAt): New parameter layer to restrict the
577     search to that layer. Return the selected layer and shape.
578    
579     * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
580     typo
581    
582 bh 238 2002-07-24 Bernhard Herzog <[email protected]>
583    
584 bh 243 * Thuban/UI/application.py (ThubanApplication.create_session):
585     Extend the doc string.
586     (ThubanApplication.subscribe_session)
587     (ThubanApplication.unsubscribe_session): New methods to
588     subscribe/unsubscribe to/from session channels.
589     (ThubanApplication.SetSession): Call the new methods here.
590     (ThubanApplication.maps_changed, ThubanApplication.set_map):
591     Renamed set_map to maps_changed. Its now a subscriber for
592     MAPS_CHANGED.
593    
594     * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
595     x-coordinate in case of simple clicks
596    
597     * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
598     don't pass it as a parameter
599    
600     * Thuban/Model/session.py (Session.RemoveMap): New
601    
602 bh 238 * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
603     window size into a parameter.
604    
605 bh 235 2002-07-23 Bernhard Herzog <[email protected]>
606    
607 bh 237 * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
608     just commands.
609    
610 bh 235 * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
611     parameter list a bit to allow setting the window title and the
612     initial message in the status bar. Update the callers.
613    
614     * Thuban/UI/application.py (ThubanApplication.OnInit)
615     (ThubanApplication.CreateMainWindow): Put the mainwindow
616     instantiation into a separate method so that it can be overridden
617     by a subclass.
618    
619 bh 230 2002-07-19 Bernhard Herzog <[email protected]>
620    
621 bh 234 * Thuban/Model/session.py: Issue a CHANGED message every time
622     another changed message is issued to make it easier to get
623     notified of changes.
624     (Session): Update the doc string
625     (Session.forward): Issue changed-events as CHANGED as well.
626     (Session.changed): Overwrite the inherited version to issue
627     CHANGED events as well.
628    
629     * Thuban/UI/tree.py: We can now simply subscribe to the session's
630     CHANGED channel to be informed of changes.
631     (SessionTreeCtrl.session_channels): Not needed any longer.
632 tkoester 403 (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
633 bh 234 Only have to (un)subscribe CHANGED
634    
635     * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
636    
637 bh 230 * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
638     for the wxPython locale bug to __init__.py so that it's
639     automatically executed by anybody using UI code from Thuban.
640    
641 bh 225 2002-07-18 Bernhard Herzog <[email protected]>
642    
643 bh 228 * Thuban/UI/main.py (main): app no longer needs to be global
644    
645     * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
646     as parameter and store it in an instance variable
647     (MainWindow.invoke_command, MainWindow.update_command_ui)
648     (MainWindow.save_modified_session, MainWindow.NewSession)
649     (MainWindow.OpenSession, MainWindow.SaveSession)
650     (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
651     application object.
652    
653     * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
654     the main window with self.
655    
656 bh 225 * Thuban/UI/context.py: New module with the context class
657    
658     * Thuban/UI/command.py (Command): Update doc string.
659    
660     * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
661     MainWindow.update_command_ui): Pass an instance of the context
662     class to the command's methods
663     (check_current_tool, call_method): Handle the new context
664     implementation
665    
666     * Examples/simple_extensions/simple_tool.py (simple_tool,
667     check_simple_tool): Handle the new context implementation
668    
669     * Examples/simple_extensions/simple_command.py (simple_command):
670     Handle the new context implementation. Update the comments about
671     the context.
672    
673     * Thuban/UI/application.py (ThubanApplication.SetSession): Add
674     doc-string
675     (ThubanApplication.Session): New method to return the session
676     object
677    
678     * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
679     interactor's selected_layer may not be a layer of the current
680     session when the tree is updated while a new session is being set.
681    
682 bh 217 2002-07-17 Bernhard Herzog <[email protected]>
683    
684     * Thuban/UI/tree.py (color_string): Removed. No longer used.
685     (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
686     update_tree into update_tree and add_items. The tree now uses a
687     more generic way to display the contents of the tree.
688     (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
689    
690     * Thuban/Model/layer.py (Layer.TreeInfo),
691     Thuban/Model/extension.py (Extension.TreeInfo),
692     Thuban/Model/map.py (Map.TreeInfo),
693 tkoester 403 Thuban/Model/session.py (Session.TreeInfo):
694 bh 217 Add TreeInfo methods to implement the new tree view update scheme
695    
696 bh 216 2002-07-16 Bernhard Herzog <[email protected]>
697    
698     * Thuban/UI/application.py: Don't use "import from" for the
699     MainWindow. It can't always be resolved.
700     (ThubanApplication.OnInit): change reference to MainWindow
701     accordingly.
702    
703     * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
704     completely
705    
706 bh 213 2002-07-10 Bernhard Herzog <[email protected]>
707    
708     * setup.py (create_init_module): New configurable variable whose
709     default depends on the platform we're running on.
710     (ThubanInstall.initialize_options): Initialize
711     self.create_init_module from the global create_init_module
712     (ThubanInstall.user_options): indictate that the options
713     create-init-module and init-module-dir have arguments.
714    
715     * setup.py: In the setup call change the version number to include
716     cvs.
717    
718     * MANIFEST.in: Add the files in Examples
719    
720 bh 205 2002-07-09 Bernhard Herzog <[email protected]>
721    
722 bh 210 * setup.py: In the setup call, use the thuban homepage as the
723     value of the url parameter.
724    
725 bh 208 * Examples: New subdirectory for examples.
726    
727     * Examples/simple_extensions/simple_tool.xpm,
728     Examples/simple_extensions/simple_tool.py,
729     Examples/simple_extensions/simple_command.py,
730     Examples/simple_extensions/README: Simple examples showing how to
731     add new commands and tools.
732    
733 bh 207 * setup.cfg (bdist_rpm): Add the default value for prefix and tell
734     bdist_rpm that we also have an install script.
735     (bdist_inno): Add 2002 to the copyright notice.
736    
737 bh 205 * setup.py: Create a file in python's site-packages directory to
738     make installation of Thuban as a library easier.
739     (ThubanInstall.user_options): Add two new options,
740     create-init-module and init-module-dir
741     (ThubanInstall.expand_with_pure_python_dirs): New method to expand
742     filenames for installation in the default directories.
743     (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
744     the inherited methods to capture some filenames before they're
745     transformed too much by distutils.
746     (ThubanInstall.run): Create the init module if requested.
747     (ThubanInstall.thuban_init_filename): New method to return the
748     full name of the init module.
749     (ThubanInstall.get_outputs): Append the filename of the init
750     module.
751    
752 bh 202 2002-07-08 Bernhard Herzog <[email protected]>
753    
754 bh 205 * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
755     handle the prefix properly which means that the default for the
756     installation prefix should be /usr for RPMs and /usr/local when
757     doing a normal source install.
758     (bdist_rpm_install_script): Script to override the default install
759     commands in the specfile generated by the bdist_rpm command.
760     (thuban_bdist_rpm.user_options): Add a prefix option
761     (thuban_bdist_rpm.initialize_options): Init the prefix option.
762     Create the script files for the spec files as empty files here
763     (thuban_bdist_rpm._make_spec_file): Override the inherited method
764     to fill the script files with content.
765    
766 bh 202 * Thuban/Model/save.py (relative_filename): Wrapper around
767     Thuban.Lib.fileutil.relative_filename that accepts an empty dir
768     argument. save_session now automatically uses this version,
769     solving a problem when saving to a relative filename.
770    
771     * setup.py: In the setup call, make sure that the library
772     directories are under $prefix/lib not directly under $prefix.
773    
774 tkoester 403 2002-06-20 Jan-Oliver Wagner <[email protected]>
775 jan 199
776     * Thuban/Model/extension.py: new module to handle extension objects.
777     * Thuban/Model/messages.py: new messages for extensions.
778     * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
779     Session.AddExtension): new for handling extensions.
780     Also some other minor changes to round up extension handling.
781     * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
782     of Extension titles and title and names of its objects.
783    
784 bh 194 2002-05-29 Bernhard Herzog <[email protected]>
785    
786     * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
787 bh 202 the events for a command.
788 bh 194 (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
789     Call bind_command_events to bind the events. add_toolbar_command
790     can now bind events too so that it's possible to have commands
791     that are only available through the toolbar.
792     (MainWindow.init_ids): New instance variable events_bound to keep
793     track of for which commands events have been bound.
794    
795 bh 190 2002-05-28 Bernhard Herzog <[email protected]>
796    
797     * Thuban/UI/menu.py: New module to build and manage menus.
798    
799     * Thuban/UI/mainwindow.py: Remove some unused imports.
800     (MainWindow.__init__, main_menu): move the definition of the main
801     menu from __init__ to the Menu instance main_menu.
802     (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
803     build the menu bar and sub-menus from a menu description.
804    
805     * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
806     startup file
807     (ThubanApplication.read_startup_files): New method to run
808     ~/.thuban/thubanstart.py
809    
810 bh 192 * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
811     Move the toolbar definition to the Menu instance main_toolbar.
812     (MainWindow.build_toolbar): New method to build the toolbar
813     similar to the build_menu methods
814    
815 bh 184 2002-05-23 Bernhard Herzog <[email protected]>
816    
817 bh 186 * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
818     layer_outline_color. Fix it in the definition of the command too.
819    
820 bh 184 * Thuban/UI/command.py (Command): Fix typo in doc string
821    
822 bh 182 2002-05-22 Bernhard Herzog <[email protected]>
823    
824     * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
825     in the docstring
826    
827 bh 175 2002-05-15 Bernhard Herzog <[email protected]>
828    
829 bh 180 * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
830     when the shapefile is empty.
831     (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
832     now return None for empty shapefiles. Update doc-strings.
833    
834     * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
835     the layer's bbox being None.
836    
837     * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
838     layer's bbox being None.
839    
840 bh 175 * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
841     necessary.
842     (MapCanvas.__init__): New instance variables, last_selected_layer
843     and last_selected_shape to determine how the selection has
844     changed.
845    
846     * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
847     AutoSizeColumns because it will cause a traversal of the entire
848     table which for large .dbf files will take a very long time.
849    
850 bh 172 2002-05-14 Bernhard Herzog <[email protected]>
851    
852     * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
853     maximum depth for the tree than shapelib does by default.
854    
855 bh 165 2002-05-10 Bernhard Herzog <[email protected]>
856    
857     * setup.py (py_modules): The shptree modules doesn't have a
858     wrapper, so don't include it in the py_modules
859    
860 bh 163 2002-05-08 Bernhard Herzog <[email protected]>
861    
862     * extensions/shapelib/shptree.c (compare_ints): Make arguments
863     const void * as in the qsort prototype
864     (SHPTreeFindLikelyShapes): Remove some unused variables.
865    
866     * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
867     maintains to redraw the window during a drag.
868     (MapCanvas.unprojected_rect_around_point): New method to determine
869     a small region around a point for hit-testing.
870     (MapCanvas.find_shape_at): Only test the shapes in a small region
871     around the point.
872    
873     * setup.py: Increment the version to 0.1.2
874    
875     * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
876     debug print and set session to None after unsubscribing
877    
878 bh 146 2002-05-07 Bernhard Herzog <[email protected]>
879    
880 bh 154 * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
881     the file to have a .thuban extension.
882    
883 bh 152 * Thuban/UI/tree.py (session_channels): New class constant with
884     all the session channels to subscribe to to update the tree
885     (SessionTreeCtrl.session_changed): Remember the session so that we
886     can unsubscribe properly. Use the new class constant to
887     unsubscribe from the old session and subscribe to the new one.
888     (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
889     subscriptions of the SessionTreeCtrl.
890     (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
891    
892     * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
893     Session Tree" command to the file menu.
894    
895     * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
896     as update_region to the renderer.
897    
898     * Thuban/UI/renderer.py
899     (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
900     update box is now directly a tuple, not a wxRect anymore.
901    
902     * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
903     prints.
904    
905     2002-05-07 Bernhard Herzog <[email protected]>
906    
907 bh 146 * setup.py: Add the shptree extension module. See
908     extensions/pyshapelib/ChangeLog for more details.
909    
910     * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
911     extensions/shapelib/dbfopen.c: Really update to the versions of
912     shapelib 1.2.9. For some reason it wasn't really done on
913     2002-04-11.
914    
915     * extensions/shapelib/shptree.c: Modified version of shptree.c of
916     shapelib 1.2.9. The only real difference is the use of qsort
917     instead of a bubble sort implementation
918    
919     * Thuban/Model/layer.py (Layer.__init__): New instance variable
920     shapetree to hold the shapelib quadtree for the shapefile
921     (Layer.open_shapefile): Create the quad tree.
922     (Layer.ShapesInRegion): New method to return the ids of shapes in
923     a given region using the quad tree.
924    
925     * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
926     comment
927     (draw_polygon_shape): Accept both arcs and polygons.
928     (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
929     the api.
930    
931     * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
932     return the shape ids to be rendered in a given layer.
933     (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
934     ids. Use draw_polygon_shape to draw arc shapes as well.
935     (ScreenRenderer.RenderMap): New parameter for the rectangle that
936     has to be updated
937     (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
938     calling it's ShapesInRegion method.
939    
940     * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
941     update_region for the update region.
942     (MapCanvas.OnPaint): Maintain the update region
943     (MapCanvas.do_redraw): Pass the bounding box of the update_region
944     to the renderer when drawing the bitmap. Reset the update_region.
945    
946 bh 129 2002-05-03 Bernhard Herzog <[email protected]>
947    
948 bh 131 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
949     MainWindow.OpenSession): Change the file extension of the session
950     files to .thuban
951    
952 bh 129 * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
953     Move the map channels to be forwarded by the session into the
954 bh 146 class constant with forwarded_channels. Also add
955     LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
956     forwarded_channels
957 bh 129
958     * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
959     typo and some rewording).
960    
961 bh 126 2002-05-02 Bernhard Herzog <[email protected]>
962    
963     * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
964     around to speed up most redraws:
965     (MapCanvas.__init__): New instance variable bitmap which holds the
966     bitmap
967     (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
968     self.bitmap to draw.
969     (MapCanvas.full_redraw): New method to force a full redraw
970     including the bitmap
971     (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
972     make sure the bitmap is redrawn.
973     (MapCanvas.projection_changed, MapCanvas.set_view_transform,
974     MapCanvas.shape_selected): Call full_redraw instead of readraw to
975     make sure the bitmap is redrawn.
976     (MapCanvas.OnSize): New method to handle size events so that the
977     bitmap can be redrawn.
978    
979 bh 124 2002-04-29 Bernhard Herzog <[email protected]>
980    
981     * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
982     canvas' VIEW_POSITION event
983     (MainWindow.view_position_changed): Handler for VIEW_POSITION.
984     Update the text in the status-bar accordingly.
985    
986     * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
987     (MapCanvas.__del__): Implement because Publisher.__del__ has to be
988     called.
989     (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
990     current_position
991     (MapCanvas.set_current_position): New method to set
992     current_position. Issue a VIEW_POSITION event
993     (MapCanvas.CurrentPosition): New public method to return the value
994     of current_position. Should be called when the VIEW_POSITION event
995     is processed.
996     (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
997     Update the position.
998     (MapCanvas.OnLeaveWindow): Set the position to None.
999    
1000     * Thuban/UI/messages.py (VIEW_POSITION): New message for the
1001     position in the statusbar
1002    
1003 tkoester 403 2002-04-26 Frank Koormann <[email protected]>
1004 frank 120
1005     * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
1006    
1007 tkoester 403 2002-04-24 Frank Koormann <[email protected]>
1008    
1009 frank 118 * Resources/Bitmaps/identify.xpm: shadow added
1010    
1011     * Resources/Bitmaps/fullextent.xpm: new
1012 jan 116
1013 tkoester 403 2002-04-22 Jan-Oliver Wagner <[email protected]>
1014 jan 116
1015 tkoester 403 * Thuban/UI/tree.py (update_tree): added test for None on map bounding
1016     box
1017 jan 114
1018 tkoester 403 2002-04-21 Jan-Oliver Wagner <[email protected]>
1019    
1020 jan 114 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
1021    
1022     * Thuban/UI/tree.py (update_tree): added added map extent
1023    
1024     * Thuban/UI/mainwindow.py (_method_command): extended by parameter
1025 tkoester 403 icon; added map_full_extend as tool
1026 jan 114
1027 tkoester 403 2002-04-19 Jan-Oliver Wagner <[email protected]>
1028 jan 107
1029     * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
1030     saving _new_ sessions
1031    
1032     * Thuban/Model/session.py (create_empty_session): new session
1033     don't have a filename (set to None)
1034    
1035     * Thuban/UI/tree.py (update_tree): added filename and modified flag
1036    
1037     * Thuban/Model/load.py (ProcessSession): convert projection
1038     parameters from unicode to regular string
1039    
1040     * Data/iceland_sample.session: Added UTM Zone 26 projection.
1041    
1042 bh 100 2002-04-11 Bernhard Herzog <[email protected]>
1043    
1044     * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
1045     extensions/shapelib/dbfopen.c: Update to the versions of shapelib
1046     1.2.9
1047    
1048     * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
1049     the pyshapelib directoy into the list of include dirs, so that
1050     pyshapelib_api.h can be found.
1051    
1052     * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
1053     holds the pyshapelib C-API
1054     (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
1055     pyshapelib_api to access the shapelib functions.
1056     (initwxproj): Import the c_api from the shapelib module and
1057     initialize pyshapelib_api.
1058    
1059 bh 89 2002-04-04 Bernhard Herzog <[email protected]>
1060    
1061 bh 91 * setup.py (thuban_bdist_rpm.initialize_options): Use
1062     initialize_options to create the scripts for the rpm.
1063    
1064 bh 89 * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
1065    
1066 bh 85 2002-04-03 Bernhard Herzog <[email protected]>
1067    
1068 bh 87 * setup.py: Increment version to 0.1.1
1069    
1070 bh 85 * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
1071     Layer" and "Remove Layer" commands from the layer menu to the map
1072     menu
1073    
1074 bh 83 2002-02-15 Bernhard Herzog <[email protected]>
1075    
1076     * Thuban/Model/layer.py (Layer.Shape): list append only takes one
1077     argument (python <= 1.5.2 erroneously accepted multiuple
1078     arguments)
1079    
1080 bh 81 2002-02-04 Bernhard Herzog <[email protected]>
1081    
1082     * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
1083     RecordGrid in the identifyview.
1084     (IdentifyView.__init__): Use IdentifyGridCtrl instead of
1085     IdentifyListCtrl. The grid allows editing of the values.
1086    
1087     * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
1088     implementing a grid for a single row of a thuban table.
1089    
1090     * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
1091     layers by default. Easier to use than the previous default of only
1092     searching through the select layer which meant that if no layer
1093     was selected, you couldn't select a shape.
1094    
1095     * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
1096    
1097     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
1098     stroke_width attribute
1099    
1100     * Thuban/Model/save.py (save_session): Write the new stroke_width
1101     attribute
1102    
1103     * Thuban/Model/load.py (ProcessSession.startElement): Read the
1104     stroke_width attribute
1105    
1106     * Thuban/Model/layer.py (Layer.__init__): New parameter and
1107     instance variable stroke_width
1108     (Layer.SetStrokeWidth): Set the stroke_width.
1109    
1110 bh 72 2002-02-01 Bernhard Herzog <[email protected]>
1111    
1112     * extensions/thuban/wxproj.cpp (project_points): Fix two
1113     off-by-one errors in the last loop that joins the various parts
1114     together.
1115    
1116 bh 71 2002-01-14 Bernhard Herzog <[email protected]>
1117    
1118     * setup.py (data_dist.make_distribution): Fix some typos
1119    
1120 bh 70 2001-09-18 Bernhard Herzog <[email protected]>
1121    
1122     * README: Slight tweaking in preparation for the 0.1 release
1123    
1124     * setup.cfg: Add section for sdist to create both tgz and zip
1125     archives
1126    
1127     * setup.py: increase version number to 0.1
1128     (data_dist): New command class for data distribution
1129    
1130 bh 64 2001-09-14 Bernhard Herzog <[email protected]>
1131    
1132 bh 70 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
1133     Handle the case of no layer (i.e. layer is None) properly.
1134    
1135 tkoester 403 * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
1136 bh 70 Set the initial selection of the combo boxes to reflect the
1137     projection we're starting with in a way that works on windows,
1138     too.
1139    
1140 bh 64 * Thuban/Lib/connector.py (Connector.print_connections): Print the
1141     puiblisher's ids in hex to make it easier to compare them to the
1142     standard repr of python methods
1143    
1144     * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
1145     messages
1146    
1147 bh 59 2001-09-13 Bernhard Herzog <[email protected]>
1148    
1149 bh 64 * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
1150     deselect the layer if no layer is selected
1151    
1152 bh 59 * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
1153     idle time when there actually is something to draw. If there's
1154     nothing to draw simply clear the window
1155     (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
1156     (MapCanvas.SetMap): force a redraw in all cases because
1157     FitMapToWindow doesn't always do it.
1158     (MapCanvas.ZoomFactor): Add an optional parameter, center, to
1159     specify the point to move into the center of the window
1160     (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
1161     dragged, zoon in/out by a factor of 2
1162 bh 64 (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
1163     index, i.e. reversed drawing order) so that objects appearing to
1164     be in from of others are selected first. This is probably mostly
1165     relevant for point shapes where the symbols used may overlap
1166 bh 59
1167     * Thuban/Model/session.py (create_empty_session): Unset the
1168     modified bit before returning it
1169    
1170     * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
1171     create_empty_session session to create the new, empty session.
1172    
1173     * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
1174     the tool bitmaps.
1175     (MainWindow.OnClose, MainWindow.save_modified_session): Separate
1176     the code that asks whether the session should be saved into the
1177     new method save_modified_session.
1178     (MainWindow.OpenSession, MainWindow.NewSession): Use the new
1179     method to save modified session here too.
1180    
1181 bh 55 2001-09-11 Bernhard Herzog <[email protected]>
1182    
1183     * setup.py (InnoIconItem): fix typo
1184    
1185     (thuban_bdist_inno.run):
1186     (bdist_inno.run): Move the decision not to create symlinks on
1187     non-nt platforms to thuban_bdist_inno and do it unconditinally
1188     since we never want to create the symlinks here
1189    
1190 bh 48 2001-09-10 Bernhard Herzog <[email protected]>
1191    
1192 bh 53 * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
1193     identify view immediately
1194    
1195     * Thuban/UI/controls.py: New file with two classes RecordListCtrl
1196     and SelectableRecordListCtrl that implement the code shared by the
1197     identify view and the label dialog
1198    
1199     * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
1200     new class RecordListCtrl
1201    
1202     * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
1203     return value of GetValue is None instead of using it as a boolean
1204     directly so that Zero numbers are handled properly.
1205     (LabelListCtrl): Derive from the new class
1206     SelectableRecordListCtrl
1207    
1208 bh 48 * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
1209     (Proj4Dialog.dialogLayout): Make the window resizable and set the
1210     size of the text control explicitly to make the sizers work on
1211     both Windows and X.
1212    
1213 bh 44 2001-09-07 Bernhard Herzog <[email protected]>
1214    
1215     * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
1216     that can limit the search to the currently selected layer.
1217     (MapCanvas.SelectShapeAt): Make sure that the currently selected
1218     layer stays selected even when no shape is found
1219 bh 46 (MapCanvas.FitRectToWindow): If the rect has zero with or zero
1220     height do nothing (avoids zero division errors)
1221 bh 44
1222 bh 32 2001-09-06 Bernhard Herzog <[email protected]>
1223    
1224 bh 42 * Thuban/UI/tree.py (SessionTreeCtrl, SessionTreeView.__init__):
1225     Correct the spelling of SessionTreeCtrl. dabbrev is too damn
1226     convenient :-)
1227     (SessionTreeCtrl.__init__, SessionTreeCtrl.update_tree): Introduce
1228     a new instvar layer_to_item to map layers to tree items
1229     (SessionTreeCtrl.layer_selected): Select the appropriate tree item
1230     to match the current selection in the interactor
1231    
1232 bh 40 * Thuban/UI/interactor.py (Interactor.SelectedLayer):
1233     (Interactor.HasSelectedLayer): New methods to query the current
1234     selection
1235    
1236     * Thuban/UI/mainwindow.py (MainWindow.current_layer):
1237     (MainWindow.has_selected_layer): Simply call the appropriate
1238     interactor method
1239    
1240     * Thuban/UI/mainwindow.py (MainWindow.__init__):
1241     (MainWindow.LayerShowTable):
1242     (MainWindow.identify_view_on_demand): Store the interactor in an
1243     instvar and use that reference instead of going through main.app
1244    
1245 tkoester 403 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
1246     * Thuban/UI/application.py (ThubanApplication.OnInit):
1247 bh 40 * Thuban/UI/main.py (main): Create the session tree view in main
1248     with the new mainwindow method ShowSessionTree and not directly
1249     the application's OnInit method
1250    
1251     * Thuban/UI/tree.py (myTreeCtrlPanel):
1252     (SessioinTreeCtrl): Rename to SessioinTreeCtrl and turn it into a
1253     TreeCtrl isntead of a panel. This affects most method since we now
1254     refer to self instead of self.tree
1255     (SessionTreeView): New class implementing a non-modal dialog
1256     showing the session tree.
1257    
1258 bh 35 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Pass the
1259     layer to the tableview dialog.
1260    
1261     * Thuban/UI/tableview.py: Add some doc-strings
1262 tkoester 403 (TableGrid):
1263 bh 35 (TableGrid.OnRangeSelect):
1264     (TableGrid.OnSelectCell):
1265     (TableFrame.__init__):
1266     (TableFrame.row_selected):
1267     Selecting rows in the grid view now updates the selected shapes
1268     through the TableFrame. To achieve this we derive TableGrid from
1269     Publisher and introduce the message type ROW_SELECTED which the
1270     TableFrame subscribes to and which is issued by OnRangeSelect and
1271     OnSelectCell
1272    
1273     (DataTable.SelectRow): Removed because it's no longer needed in
1274     the row/shape selection scheme
1275    
1276 bh 32 * Thuban/UI/dialogs.py: New file implementing common classes for
1277     dialogs
1278    
1279     * Thuban/UI/tableview.py (TableGrid.__init__): Don't subscribe to
1280     the SELECTED_SHAPE message anymore. This is now handled by the
1281     parent.
1282     (TableGrid.select_shape): Only update the selection if the shape
1283     is not None.
1284     (TableFrame): Inherit from the new NonModalDialog class.
1285     (TableFrame.__init__, TableFrame.select_shape): Handle the
1286     SELECT_SHAPE message.
1287     (TableFrame.OnClose): Extend the inherited method to unsubscribe
1288     SELECT_SHAPE
1289    
1290     * Thuban/UI/mainwindow.py (MainWindow.init_dialogs):
1291     (MainWindow.add_dialog):
1292     (MainWindow.dialog_open):
1293     (MainWindow.remove_dialog):
1294     (MainWindow.get_open_dialog): New methods to maintain a dictionary
1295     of opened non-modal dialogs.
1296    
1297     (MainWindow.__init__): Initialize the new non-modal dictionary
1298     management code
1299     (MainWindow.LayerShowTable): maintain separate dialogs for each
1300     table using the non-modal dialog management code to only open a
1301     view once for each table.
1302    
1303     (MainWindow.IdentifyTool):
1304     (MainWindow.__init__):
1305     (MainWindow.identify_view_on_demand): Don't open the identify view
1306     in IdentifyTool anymore. This will be done automatically by the
1307     new method identify_view_on_demand which handles the
1308     SELECTED_SHAPE message so that the identify view will be opened on
1309     demand
1310    
1311     * Thuban/UI/identifyview.py (IdentifyListCtrl.__init__): Remove
1312     the interactor argument. The SELECTED_SHAPE message is now handled
1313     by the parent.
1314     (IdentifyView.__init__): Add the interactor argument so that we
1315     can handle the SELECTED_SHAPE message here
1316     (IdentifyView.selected_shape): New method to handle the
1317     SELECTED_SHAPE messages
1318    
1319     * Thuban/UI/identifyview.py (IdentifyView): Derive from the new
1320     NonModalDialog class
1321     (IdentifyView.OnClose): Extend the inherited version to
1322     unsubscribe SELECT_SHAPE
1323    
1324     * Thuban/Model/session.py (Session.UnsetModified): Remove debug prints
1325    
1326 bh 26 2001-09-05 Bernhard Herzog <[email protected]>
1327    
1328     * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
1329 tkoester 403
1330 bh 26 * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
1331     interactor to pass through to the MapCanvas
1332 tkoester 403
1333 bh 26 * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
1334     argument to the MainWindow constructor to get rid of the ugly hack
1335     that made main.app available early just so that the mapcanvas
1336     could access the interactor object.
1337    
1338 bh 19 2001-09-04 Bernhard Herzog <[email protected]>
1339    
1340 bh 22 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): New method
1341     that runs a modal message box
1342     (MainWindow.OnClose): Use the new method
1343     (MainWindow.RemoveLayer): Just do nothing in case no layer is
1344     selected. The command should be grayed out anyway, so there's no
1345     need to pop up a message box.
1346     (MainWindow.AddLayer): Pop up a message box with an error message
1347     if the shape file can't be opened
1348    
1349     * Thuban/Model/layer.py (Layer.__init__): Open the shapefile
1350     immediately. This will cause an exception in case the file can't
1351     be opened and we can display an appropriate message.
1352    
1353 bh 19 * MANIFEST.in: Add extensions/pyprojection/LICENSE
1354    
1355     * setup.py (thuban_bdist_rpm): New class implementing a Thuban
1356     specific bdist_rpm command.
1357    
1358     * Thuban/UI/main.py: Catch ImportError exceptions when importing
1359     the locale module because it may not be available on some
1360     installations.
1361    
1362     * extensions/pyprojection/LICENSE: Copy of the license text in
1363     Projection.i. Having it in a separate file makes it easier to
1364     refer to license text in e.g. RPMs
1365    
1366 bh 18 2001-09-03 Bernhard Herzog <[email protected]>
1367    
1368 bh 19 * setup.py: use wx-config instead of wxgtk-config because it's
1369     more generic
1370    
1371     * setup.py (ThubanInstall.get_outputs): Add the symlink in
1372     <prefix>/bin to the outputs
1373     (ThubanInstall.link_file): New method to link files. We need this
1374     because the standard copy_files refuses to link non-existing
1375     files.
1376     (ThubanInstall.run): Remove the leading install root from the
1377     script filename if an install root was specified and use the new
1378     link_file method
1379 tkoester 403
1380 bh 18 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
1381     the window when the first layer is added to the map.
1382    
1383     * setup.py (ThubanInstall.run): Honor the build root (self.root)
1384     when linking thuban.py to <prefix>/bin
1385    
1386 bh 16 2001-08-31 Bernhard Herzog <[email protected]>
1387    
1388     * setup.py: In the setup call, the install parameters shouldn't
1389     have trailing slashes because distutils on non-posix platforms
1390     doesn't like that. The same applies to other directories like
1391     "Resources/Bitmaps"
1392    
1393     In the configuration section for nt, move the wxWindows directory
1394     optins into the part clearly marked as editable.
1395    
1396     (InstallLocal.initialize_options):
1397     (InstallLocal.user_options): remove the currently unused debug
1398     flag
1399     (thuban_build_py.find_all_modules): Add this method so that it
1400     works for our case of having packages and modules in one
1401     distribution as well.
1402     (ThubanInstall.initialize_options):
1403     (ThubanInstall.finalize_options):
1404     (ThubanInstall.user_options):
1405     (ThubanInstall.boolean_options): Add new options, do-symlink and
1406     extra files. Since these are the first ThubanInstall specific
1407     options, override user_options and boolean_options
1408     (ThubanInstall.run): Honor the new do-symlink and extra-files
1409     options.
1410     (ThubanInstall.get_outputs): Add to override the base-class's
1411     version and add the extra-files to the outputs
1412     (bdist_inno): New class for windows distributions with Inno Setup
1413     (InnoIconItem): Helper class for bdist_inno
1414     (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
1415     this together with the appropriate parameters, to the setup call.
1416 tkoester 403
1417 bh 16 * setup.cfg (bdist_inno): added new section for the inno setup
1418     installer
1419    
1420     * Thuban/UI/tree.py (myTreeCtrlPanel.__init__): New inst var
1421     changing_selection to avoid recursive selection events when
1422     modifying the selection in response to a selection event.
1423     (myTreeCtrlPanel.normalize_selection): Set the new inst var when
1424     changing the tree's selection.
1425     (myTreeCtrlPanel.OnSelChanged): Only normalize the selection when
1426     we're not being called indirectly from normalize_selection.
1427    
1428     * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): Call
1429     event.Check only if the command is actuall checkable.
1430     (MainWindow.__init__): Call the toolbar's Realize method to make
1431     sure that the items are actually shown
1432    
1433 bh 7 2001-08-28 Bernhard Herzog <[email protected]>
1434    
1435 bh 9 * setup.py: Fix some doc strings
1436    
1437 bh 7 * ChangeLog: started
1438    

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26