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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 425 - (hide annotations)
Mon Feb 24 14:17:19 2003 UTC (22 years ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 53536 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26