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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 459 - (hide annotations)
Wed Mar 5 18:16:06 2003 UTC (22 years ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 58831 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26