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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 591 - (hide annotations)
Wed Apr 2 15:03:30 2003 UTC (21 years, 11 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 76658 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26