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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 569 - (hide annotations)
Fri Mar 28 17:06:11 2003 UTC (21 years, 11 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 74859 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26