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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 448 - (hide annotations)
Tue Mar 4 10:32:42 2003 UTC (22 years ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 56487 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26