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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26