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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 456 - (hide annotations)
Tue Mar 4 11:32:31 2003 UTC (22 years ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 56981 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26