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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 527 - (hide annotations)
Wed Mar 12 19:54:04 2003 UTC (21 years, 11 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 64757 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26