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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 471 - (hide annotations)
Wed Mar 5 18:37:55 2003 UTC (22 years ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 59139 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26