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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 423 - (hide annotations)
Thu Feb 20 16:23:59 2003 UTC (22 years ago) by frank
Original Path: trunk/thuban/ChangeLog
File size: 53299 byte(s)
Force minimal size of identify and label dialogs.

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26