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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 477 - (hide annotations)
Thu Mar 6 15:03:48 2003 UTC (22 years ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 59379 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26