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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 408 - (hide annotations)
Wed Feb 19 16:49:49 2003 UTC (22 years ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 52929 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26