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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 762 - (hide annotations)
Tue Apr 29 09:02:33 2003 UTC (21 years, 10 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 109168 byte(s)
updated ChangeLog

1 jonathan 735 2003-04-25 Jonathan Coles <[email protected]>
2    
3 jonathan 762 * Thuban/Model/proj.py (Projection): Removed Set*() methods to make
4     Projection an immutable item. Fixes RTbug #1825.
5     (Projection.__init__): Initialize instance variables here.
6     (ProjFile.Replace): New. Replace the given projection object with
7     the new projection object. This solves the problem of needing the
8     mutator Projection.SetProjection() in the ProjFrame class and
9     allows a projection to change parameters without changing its
10     location in the file.
11    
12     * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs): Dialog should
13     be of type wxSAVE and should verify overwriting a file.
14    
15     * Thuban/UI/projdialog.py (ProjFrame._OnSave): Use the new
16     ProjFile.Replace() method instead of the mutator
17     Projection.SetProjection(). Also requires that we reassign the
18     client data to the new projection.
19    
20     * test/test_proj.py (TestProjection.test): Test GetName() and
21     GetAllParameters()
22     (TestProjFile.test): Remove tests for Set*() methods. Add tests
23     for Replace().
24    
25     2003-04-25 Jonathan Coles <[email protected]>
26    
27 jonathan 756 * Thuban/Model/save.py (SessionSaver.write_projection): Make sure
28     to save the name of the projection.
29    
30     * test/test_save.py (SaveSessionTest.testLayerProjection): New
31     test to verify layer projections are saved correctly.
32    
33     2003-04-25 Jonathan Coles <[email protected]>
34    
35 jonathan 753 * Thuban/Model/proj.py (Projection.SetName): Set the name
36     to "Unknown" if name is None.
37     (Projection.SetAllParameters): New. Set the projection's
38     parameter list to the one supplied.
39     (Projection.SetProjection): New. Set the projection's
40     properties to those of the supplied Projection.
41    
42     * Thuban/UI/mainwindow.py (MainWindow.MapProjection): Set
43     the dialog title to include the map's title.
44     (MainWindow.LayerProjection): Set the dialog title to include
45     the layer's title.
46    
47     * Thuban/UI/projdialog.py (ProjFrame.__ShowError): Consolidate
48     error dialogs into a single method call.
49     (ProjFrame.__VerifyButtons): Add more states to check.
50     (ProjFrame.__GetProjection): Return the current state of an
51     edited projection or None.
52     (ProjFrame.__FillAvailList): Remove checks for states that
53     shouldn't exist.
54     (ProjFrame._OnNew): Clear all selected items and supply
55     a projection panel if necessary.
56    
57     * test/test_proj.py (TestProjFile.test): Add tests for
58     ProjFile.SetAllParameters, ProjFile.SetProjection,
59     ProjFile.SetName.
60    
61     2003-04-25 Jonathan Coles <[email protected]>
62    
63 jonathan 748 * Thuban/UI/projdialog.py (ProjFrame.__FillAvailList): Now
64     takes an optional argument to select the current projection.
65     This does not guarantee that the item is visible due to
66     limited wxWindows functionality. Fixes RTBug #1821.
67    
68     2003-04-25 Jonathan Coles <[email protected]>
69    
70 jonathan 743 * Thuban/Model/load.py (SessionLoader.start_projection): Remember
71     the projection name and use it when constructing the Projection
72     object.
73    
74     * Thuban/Model/proj.py (Projection.__init__): Change the default
75     value for 'name' to None and then test if name is equal to None
76     in the body of the constructor. This way the caller doesn't have to
77     know what the default value should be. Namely, useful in load.py
78     where we have to pick a default value if the 'name' parameter
79     doesn't exist in the XML file.
80    
81     * test/test_load.py (LoadSessionTest.testLayerProjection): New.
82     Tests a file where a layer has a projection.
83    
84     2003-04-25 Jonathan Coles <[email protected]>
85    
86 jonathan 735 * Thuban/Model/layer.py (Layer.TreeInfo): Add an item to the
87     tree for projection information.
88    
89     * Thuban/Model/load.py (XMLReader.GetFilename): Renamed from
90     XMLReader.GetFileName.
91     (SessionLoader): Added support for loading projection tags that
92     appear inside a layer.
93    
94     * Thuban/Model/proj.py (ProjFile): Document the class. Move
95     back to using a list because the order of the projections in
96     the file is important to maintain. Fixes RTbug #1817.
97    
98     * Thuban/Model/resource.py: Rename calls to ProjFile.GetFileName
99     to ProjFile.GetFilename.
100    
101     * Thuban/Model/save.py (SessionSaver.write_layer): Save projection
102     information.
103    
104     * Thuban/UI/projdialog.py (ProjFrame._OnAddToList): Renamed from
105     ProjFrame._OnSaveAs. Removed old dead code from previous
106     implementation.
107     (ProjFrame._OnExport): Add support for exporting more than one
108     projection to a single file.
109     (ProjFrame.__FillAvailList): use string formatting (% operator)
110     to build strings that are (partly) translated. Fixes RTbug #1818.
111    
112     * test/test_proj.py (TestProjFile.test): New. Tests the base ProjFile
113     class.
114    
115 bh 734 2003-04-24 Bernhard Herzog <[email protected]>
116    
117     * po/es.po: Updated Spanish translation by Daniel Calvelo Aros
118    
119     * po/fr.po: New. French translation by Daniel Calvelo Aros
120    
121     * Thuban/UI/projdialog.py (ProjFrame._OnSaveAs): Don't translate
122     empty strings.
123    
124 jonathan 735 2003-04-24 Jonathan Coles <[email protected]>
125 jonathan 724
126     * Thuban/Model/layer.py (Layer.GetProjection): New. Needed to
127     implement the interface that the ProjFrame dialog expects.
128    
129     * Thuban/Model/proj.py (Projection.SetName): New. Allows the
130     name of the projection to be changed.
131     (ProjFile): Use a dictionary instead of a list so that removing
132     projections is easier and we are sure about uniqueness.
133     (ProjFile.Remove): Remove the given projection object.
134    
135     * Thuban/Model/resource.py (GetSystemProjFiles, GetUserProjFiles):
136     Return a list with only one projection file instead of searching for
137     any projection file. This simplifies many things if the user can
138     only have one system file and one user file.
139    
140     * Thuban/UI/classgen.py: Change all references to
141     genCombo to genChoice.
142    
143     * Thuban/UI/mainwindow.py: Add a Projection option under the
144     layer menu.
145     (MainWindow.LayerProjection): New. Open up a projection window
146     for a layer.
147    
148     * Thuban/UI/projdialog.py: Large changes to how the dialog is
149     laid out. Use three panels instead of one. One for the list of
150     projections, one for the edit controls, and one for the buttons.
151     Fixed resizing problems so that the dialog resizes correctly
152     when the projection panel changes. Added import/export, save, and
153     new buttons/functionality.
154    
155 bh 723 2003-04-24 Bernhard Herzog <[email protected]>
156    
157     First step towards table management. Introduce a simple data
158     abstraction so that we replace the data a layer uses more easily
159     in the next step.
160    
161     * Thuban/Model/data.py: New file with a simple data abstraction
162     that bundles shapefile and dbffile into one object.
163    
164     * Thuban/Model/session.py (Session.OpenShapefile): New method to
165     open shapefiles and return a shape store object
166    
167     * Thuban/Model/layer.py (Layer.__init__): Pass the data as a store
168     object instead of a shapefile filename. This introduces a new
169     instance variable store holding the datastore. For intermediate
170     backwards compatibility keep the old instance variables.
171     (open_shapefile): Removed. No longer needed with the shape store.
172     (Layer.SetShapeStore, Layer.ShapeStore): New methods to set and
173     get the shape store used by a layer.
174     (Layer.Destroy): No need to explicitly destroy the shapefile or
175     table anymore.
176    
177     * Thuban/UI/mainwindow.py (MainWindow.AddLayer)
178     (MainWindow.AddLayer): Use the session's OpenShapefile method to
179     open shapefiles
180    
181     * Thuban/Model/load.py (ProcessSession.start_layer): Use the
182     session's OpenShapefile method to open shapefiles
183    
184     * test/test_classification.py
185     (TestClassification.test_classification): Use the session's
186     OpenShapefile method to open shapefiles and build the filename in
187     a more platform independed way
188    
189     * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
190     Implement to have a session to use in the tests
191     (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
192     (TestLayer.test_point_layer, TestLayer.test_empty_layer): Use the
193     session's OpenShapefile method to open shapefiles
194     (TestLayerLegend.setUp): Instantiate a session so that we can use
195     it to open shapefiles.
196     (TestLayerLegend.tearDown): Make sure that all references to
197     layers and session are removed otherwise we may get a resource
198     leak
199    
200     * test/test_map.py (TestMapAddLayer.test_add_layer)
201     (TestMapWithContents.setUp): Instantiate a session so that we can
202     use it to open shapefiles.
203     (TestMapWithContents.tearDown): Make sure that all references to
204     layers, maps and sessions are removed otherwise we may get a
205     resource leak
206     ("__main__"): use support.run_tests() so that more info about
207     uncollected garbage is printed
208    
209     * test/test_save.py (SaveSessionTest.testSingleLayer): Use the
210     session's OpenShapefile method to open shapefiles
211     ("__main__"): use support.run_tests() so that more info about
212     uncollected garbage is printed
213    
214     * test/test_selection.py (TestSelection.tearDown): Make sure that
215     all references to the session and the selection are removed
216     otherwise we may get a resource leak
217     (TestSelection.get_layer): Instantiate a session so that we can
218     use it to open shapefiles.
219     ("__main__"): use support.run_tests() so that more info about
220     uncollected garbage is printed
221    
222     * test/test_session.py (TestSessionBase.tearDown)
223     (TestSessionWithContent.tearDown): Make sure that all references
224     to the session and layers are removed otherwise we may get a
225     resource leak
226     (TestSessionWithContent.setUp): Use the session's OpenShapefile
227     method to open shapefiles
228    
229 jonathan 721 2003-04-24 Jonathan Coles <[email protected]>
230    
231     * Thuban/Model/load.py (XMLReader.read): Should have been checking
232     if the file_or_filename object had the 'read' attribute.
233    
234 jonathan 715 2003-04-23 Jonathan Coles <[email protected]>
235    
236 jonathan 720 * Thuban/Model/resource.py: Fixes RTbug #1813.
237     (ReadProjFile): Add documentation about which exceptions are raised.
238     Always pass the exceptions up to the caller.
239     (GetProjFiles): If the directory can't be read return an empty list.
240     If any of the proj files can't be read skip that file and go
241     on to the next one.
242    
243     * test/test_proj.py: Added test cases to handle nonexistent files,
244     unreadable files, and files that don't parse correctly.
245    
246     2003-04-23 Jonathan Coles <[email protected]>
247    
248 jonathan 716 Projection dialog. Allows the user to select from a list
249     of projection templates and optionally edit them and save new ones.
250    
251     * Thuban/UI/projdialog.py (ProjFrame): New. Main dialog.
252     (ProjPanel): Base class for projection specific panels.
253     (TMPanel): Projection panel for Transverse Mercartor.
254     (UTMPanel): Projection panel for Universal Transverse Mercartor.
255     (LCCPanel): Projection panel for Lambert Conic Conformal.
256     (GeoPanel): Projetion panel for Geographic Projection.
257    
258     2003-04-23 Jonathan Coles <[email protected]>
259    
260 jonathan 715 * Thuban/Model/load.py (XMLReader): Renamed from XMLProcessor to
261     promote symmetry. There now exists XMLReader and XMLWriter.
262     (XMLReader.read): New. Call to read the given file descriptor or
263     filename.
264     (XMLReader.close): New. Make sure the file is closed.
265     (XMLReader.GetFileName): New. Return just the file name that is being
266     read from.
267     (XMLReader.GetDirectory): New. Return just the directory of the file
268     that is being read.
269     (XMLReader.AddDispatchers): New. Take a dictionary which contains
270     the names of functions to call as the XML tree is parsed.
271     (XMLReader.startElementNS): Updated to use new dispatcher dictionary.
272     (XMLReader.endElementNS): Updated to use new dispatcher dictionary.
273     (SessionLoader): Removed class variables start_dispatcher and
274     end_dispatcher since this functionality is now part of a class
275     instance. Fixes RTbug #1808.
276     (SessionLoader.__init__): Add dispatcher functions.
277     (load_xmlfile): Code was moved into the XMLReader.read().
278     (load_session): Use modified SessionLoader.
279    
280     * Thuban/Model/map.py (Map.GetProjection): New. Returns the
281     map's projection.
282    
283     * Thuban/Model/proj.py (Projection.GetParameters): Renamed to
284     GetAllParameters.
285     (Projection.GetParameter): Returns the value for the given parameter.
286    
287     * Thuban/Model/resource.py: Use XMLReader and XMLWriter.
288     (GetProjFiles): Renamed from GetProjections. Now returns a list
289     of ProjFile objects.
290     (GetSystemProjFiles): Renamed from GetSuppliedProjections. Returns
291     a list of ProjFile objects whose files are not user defined.
292     (GetUserProjFiles): Renamed from GetUserProjections. Returns a
293     list of ProjFile objects whose files are user defined.
294     (ProjFileReader): Extend new XMLReader.
295    
296     * Thuban/Model/save.py (XMLWriter): Renamed from XMLSaver to
297     promote symmetry.
298    
299     * Thuban/UI/classgen.py (ClassGenDialog.__init__): Use a wxChoice
300     control instead of a wxComboBox. wxChoice controls do not generate
301     events as the uses highlights possible choices which fixes problems
302     with resizing the dialog when the use selects an option.
303    
304     * Thuban/UI/classifier.py (Classifier.__init__): Use a wxChoice
305     control instead of a wxComboBox.
306    
307     * Thuban/UI/mainwindow.py (MainWindow.Projection): Use new projection
308     dialog.
309    
310     * test/test_proj.py (TestProjection.test): New tests for GetParameter
311     method.
312    
313 bh 703 2003-04-22 Bernhard Herzog <[email protected]>
314    
315 bh 705 * Thuban/UI/mainwindow.py: Remove some unused imports and global
316     constants
317    
318 bh 703 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
319     (IdentifyGridCtrl.selected_shape): Use table, not shapetable.
320    
321 bh 700 2003-04-17 Bernhard Herzog <[email protected]>
322    
323 bh 701 * Thuban/Model/layer.py: Don't import LAYER_LEGEND_CHANGED.
324     (Layer): Update doc-string since LAYER_LEGEND_CHANGED is not used
325     anymore.
326     (Layer.BoundingBox, Layer.GetFieldType, Layer.NumShapes)
327     (Layer.ShapeType, Layer.Shape): No need to call
328     self.open_shapefile since it's always called in __init__
329    
330 bh 700 * Thuban/UI/application.py (ThubanApplication.MainLoop): Removed.
331     In wxPython 2.4 there's no need to extend MainLoop anymore since
332     wxPython itself makes sure OnExit is called.
333    
334 jonathan 688 2003-04-16 Jonathan Coles <[email protected]>
335    
336 jonathan 693 Initial putback of projection management code. Includes new
337     classes to read and write projection files. The current load
338     and save classes were abstracted a bit so they could be reused.
339     The Projection class was extended to provide new methods and
340     have a name.
341    
342     * Thuban/Model/load.py (XMLProcessor): New. Contains all the
343     general XML reading methods that were part of ProcessSession.
344    
345     * Thuban/Model/proj.py (Projection.__init__): Accepts an optional
346     name.
347     (ProjFile): New. Represents a file that contains projection
348     information.
349    
350     * Thuban/Model/resource.py: New. Contains general utilities
351     for read and writing projection files.
352    
353     * Thuban/Model/save.py (XMLSaver): New. Contains all the
354     general XML writing methods that were part of SessionSaver.
355     (SessionSaver): Renamed from Saver.
356    
357     * test/test_proj.py: New test cases for the projection
358     file read and write functions.
359    
360     2003-04-16 Jonathan Coles <[email protected]>
361    
362 jonathan 688 * Thuban/Model/classification.py: Use repr() around values
363     in the ClassGroup*.__repr__() methods so it is clearer when
364     a value is a string and when it is a number.
365    
366     * test/test_load.py: Rework the classification test to test
367     that we can load old files.
368     (testLabels): Test a file where the groups have labels.
369    
370 bh 687 2003-04-16 Bernhard Herzog <[email protected]>
371    
372     Safer implementation of the performance enhancements of the
373     low-level renderer:
374    
375     * extensions/thuban/wxproj.cpp (extract_projection)
376     (extract_pointer): Rename extract_projection to extract_pointer
377     and redefine its purpose to return the pointer stored in a CObject
378     returned by the object's cobject method. Update all callers.
379     (s_draw_info, free_draw_info, draw_polygon_init): Implement the
380     handling of these low-level parameters so that each s_draw_info
381     instance is handled as a CObject at python level that also
382     contains real references to the actual python objects which
383     contain the values in the struct. Add free_draw_info as the
384     destructor.
385     (draw_polygon_shape): Add the py_draw_info parameter which must a
386     cobject containing an s_draw_info pointer.
387    
388     * Thuban/UI/renderer.py (MapRenderer.polygon_render_param): New
389     method to instantiat the low-level render parameter
390     (MapRenderer.draw_shape_layer): Use the new method. Remove some
391     commented out code.
392     (MapRenderer.draw_polygon_shape): Make the first parameter not the
393     layer but the low-level render parameter
394     (ScreenRenderer.draw_shape_layer): Use the low-level render
395     parameter.
396    
397 jonathan 673 2003-04-15 Jonathan Coles <[email protected]>
398    
399 jonathan 680 * Thuban/Model/classification.py: Implemented __repr__ for
400     the ClassGroup* classes to make debugging a bit easier.
401     (ClassGroup.SetLabel): Check that the string is an instance
402     of StringTypes not StringType. Accounts for Unicode strings.
403    
404     * Thuban/Model/color.py: Implemented __repr__ to make
405     debugging a bit easier.
406    
407     * Thuban/Model/save.py (Saver.write_classification): Need to
408     save the group label.
409    
410     * test/test_load.py (testClassification): New. Loads the
411     iceland_sample_test.thuban file and checks if it was loaded
412     correctly.
413    
414     2003-04-15 Jonathan Coles <[email protected]>
415    
416 jonathan 673 * extensions/thuban/wxproj.cpp (draw_polygon_init): New. Used
417     to improve rendering performance by initializing the variables
418     that are not change each time draw_polygon_shape() is called.
419     The values are stored in a global struct draw_info.
420     (draw_polygon_shape): Removed initialization code that is
421     now in draw_polygon_init().
422    
423     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Make
424 jonathan 674 drawing initialization call to draw_polygon_init()
425     (MapRenderer.draw_polygon_shape): Use new signature of
426     draw_polygon_shape.
427 jonathan 673
428 jonathan 674 * Thuban/UI/classgen.py (GenUniformPanel): Fix spin control
429     weirdness by setting the range to (1, maxint).
430 jonathan 673
431 jonathan 674 * Thuban/Model/classification.py (ClassGroupProperties): Make
432     instance variables private and optimize comparison operator
433     by first checking if the color references are the same.
434     (ClassGroupSingleton): Make instance variables private.
435     (ClassGroupRange): Make instance variables private.
436 jonathan 673
437 jonathan 674 * HOWTO-Release: Filled in missing steps for releasing packages.
438    
439 bh 672 2003-04-15 Bernhard Herzog <[email protected]>
440    
441     First stab at internationalized messages:
442    
443     * Thuban/__init__.py (_): Implement the translation function for
444     real using the python gettext module.
445    
446     * Thuban/UI/classifier.py (ClassTable.GetRowLabelValue): Don't
447     translate empty strings.
448    
449     * Thuban/UI/application.py (ThubanApplication.read_startup_files):
450     Add a missing space to a warning message
451    
452     * po/README: New. Notes about the management of the translation
453     files.
454    
455     * po/Makefile: New. Makefile to help manage the translation files.
456    
457     * po/es.po: New. Spanish translation by Daniel Calvelo Aros
458    
459     * MANIFEST.in: Include the *.mo files in Resources/Locale and the
460     translations and support files in po/
461    
462     * setup.py (data_files): Add the *.mo files to the data_files too
463    
464     * README: Add note about the translations when building from CVS
465    
466 jonathan 669 2003-04-14 Jonathan Coles <[email protected]>
467    
468     * Thuban/UI/dock.py: Fixes some window resizing problems most
469     noticable under windows. Always assume the button bitmaps will
470     be there. Code clean up.
471     (DockabelWindow.Dock, DockableWindow.UnDock): Force all the
472     images for the dock/undock button to the same images.
473     Work around for RTbug #1801.
474    
475     * Thuban/UI/legend.py (LegendPanel.__init__): The toolbar should
476     be allowed to grow within the sizer. Fixes a bug under Windows
477     where the toolbar wasn't being drawn.
478    
479 frank 664 2003-04-14 Frank Koormann <[email protected]>
480    
481     * Resources/Bitmaps/dock_12.xpm, Resources/Bitmaps/undock_12.xpm:
482     Updated design to try to make the button functionality more
483     transparent.
484    
485 jonathan 662 2003-04-14 Jonathan Coles <[email protected]>
486    
487     * Thuban/UI/legend.py (LegendPanel.__init__): Call Create() to
488     finalize the intialization of the panel.
489    
490     * Thuban/UI/dock.py (DockPanel.Create): New. Finalizes the
491     creation of the panel. Should be the last thing called in the
492     initializer of a subclass.
493    
494     * Thuban/UI/classgen.py (ClassGenDialog.__init__): Actively
495     set the current selections in the combo boxes. This is needed
496     under Windows.
497    
498     * Thuban/UI/classifier.py (Classifier.__init__): Add a top
499     level panel to the dialog so that the background colors are
500     consistent under Windows.
501    
502 jonathan 646 2003-04-11 Jonathan Coles <[email protected]>
503    
504 jonathan 662 * Thuban/UI/classgen.py: Change color ramps to start at white
505     not black.
506    
507     * Thuban/UI/legend.py: Enable/disable the legend buttons when
508     the legend changes. Fixes RTbug #1793.
509    
510     * test/test_classification.py: Added test for copying of
511     classifications.
512    
513     2003-04-11 Jonathan Coles <[email protected]>
514    
515 jonathan 647 * Thuban/UI/resource.py: New. Centralize the loading of resources
516     such as bitmaps.
517    
518     * Thuban/UI/classgen.py (GenUniquePanel.__init__): Reordered buttons,
519     added images to the move buttons, added 'reverse' button.
520     (CustomRampPanel.__init__): Added images to the move buttons.
521     (GreyRamp): New. Generates a ramp from white to black.
522     (HotToColdRamp): New. Generates a ramp from cold to hot colors.
523    
524     * Thuban/UI/classifier.py: Refactored ID's from ID_CLASSIFY_* to
525     ID_PROPERTY_*.
526     (Classifier.__init__): Minor changes to the layout.
527     (Classifier._OnTitleChanged): Listen for when the user edits the
528     title and update the dialog's title and the layer's title.
529    
530     * Thuban/UI/dock.py: Use new bitmaps for the control buttons.
531    
532     * Thuban/UI/legend.py: Use new bitmaps for the control buttons.
533     (LegendTree._OnMsgLayerTitleChanged): Change the displayed title
534     if the layer's title changes.
535    
536     * Thuban/UI/mainwindow.py: Added new menu item and associated code
537     to open a dialog to rename the map.
538     (MainWindow): Use new resource class to import bitmaps.
539    
540     2003-04-11 Jonathan Coles <[email protected]>
541    
542 jonathan 646 * Resources/Bitmaps/close_12.xpm, Resources/Bitmaps/dock_12.xpm,
543 jonathan 647 Resources/Bitmaps/group_use.xpm, Resources/Bitmaps/group_use_all.xpm,
544     Resources/Bitmaps/group_use_none.xpm,
545     Resources/Bitmaps/group_use_not.xpm,
546     Resources/Bitmaps/hide_layer.xpm,
547     Resources/Bitmaps/layer_properties.xpm,
548     Resources/Bitmaps/lower_layer.xpm, Resources/Bitmaps/raise_layer.xpm,
549     Resources/Bitmaps/show_layer.xpm, Resources/Bitmaps/undock_12.xpm:
550     New.
551 jonathan 646
552 jonathan 636 2003-04-10 Jonathan Coles <[email protected]>
553    
554 jonathan 644 * Thuban/Model/classification.py: (ClassGroupRange.__init__):
555     Should pass group to ClassGroup constructor.
556    
557     2003-04-10 Jonathan Coles <[email protected]>
558    
559 jonathan 636 * Thuban/Model/classification.py: (ClassGroup): Move all the common
560     methods of the derived classes ([Set|Get]Properties(), __eq__, __ne__)
561     here. Implement SetVisible(), IsVisible().
562     (ClassGroup.__init__): Add group parameter which acts as a copy
563     constructor.
564    
565     * Thuban/UI/classifier.py (ClassTable): Add a new column for the
566     "Visible" check boxes.
567     (Classifier): Rename the buttons and refactor the code to match
568     the new labels.
569    
570     * Thuban/UI/legend.py: Classify button is now called "Properties".
571     Refactored the code to change variable names.
572     (LegendTree.__FillTreeLayer): Only list a group if it is visible.
573    
574     * Thuban/UI/mainwindow.py: MainWindow.OpenClassifier renamed to
575     MainWindow.OpenLayerProperties. MainWindow.LayerEditProperties
576     renamed to MainWindow.LayerEditProperties.
577     (MainWindow.ToggleLegend): Don't include map name in legend title.
578     (MainWindow.SetMap): Added the map name to the window title.
579     (MainWindow.LayerFillColor, MainWindow.LayerTransparentFill,
580     MainWindow.LayerOutlineColor, MainWindow.LayerNoOutline): Removed.
581     Functionality is found in the layer properties dialog.
582    
583     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
584     draw visible groups.
585    
586 jonathan 626 2003-04-09 Jonathan Coles <[email protected]>
587    
588 jonathan 634 * Thuban/UI/classgen.py: Modifications to allow simple
589     addition and selection of new color schemes.
590     (MonochromaticRamp): New. Generates a ramp between two colors.
591     (RedRamp): New. Generates a ramp of all red.
592     (GreenRamp): New. Generates a ramp of all green.
593     (BlueRamp): New. Generates a ramp of all blue.
594    
595     2003-04-09 Jonathan Coles <[email protected]>
596    
597 jonathan 626 * Thuban/Model/classification.py (Classification.__deepcopy__):
598     Need to copy over field and fieldType attributes.
599    
600     * Thuban/Model/table.py (Table.field_range): New. Retrive the
601     maximum and minimum values over the entire table for a given
602     field.
603     (Table.GetUniqueValues): New. Retrieve all the unique values
604     in the table for a given field.
605    
606     * Thuban/UI/classgen.py: Renamed GenRangePanel to GenUniformPanel.
607     (GenUniquePanel): New. Controls to allow the user to select
608     which unique field values they would like in the classification.
609     (CustomRampPanel): Code that was in ClassGenDialog that allows
610     the user to select the properties for a custom ramp.
611     (ClassGenerator.GenUniformDistribution): Was called GenerateRanges.
612    
613     * Thuban/UI/classifier.py: Removed a lot of debugging code.
614     (Classifier._SetClassification): Callback method so that the
615     class generator can set the classification in the grid.
616     (ClassGroupPropertiesCtrl): New. Encapsulates the drawing and
617     editing of a group properties class into a wxWindows control.
618    
619     * Thuban/UI/dock.py: It was decided that if the user closes
620     a dockable window the window should simply hide itself. That
621     way if the user wants to show the dock again it appears in the
622     same place as it was when it was closed.
623     (DockableWindow.Destroy): Call renamed method OnDockDestroy().
624     (DockableWindow._OnButtonClose): Hide the window instead of
625     destroying it.
626     (DockableWindow._OnClose): Hide the window instead of
627     destroying it.
628    
629     * Thuban/UI/legend.py (LegendTree): Use a private method to
630     consistently set the font and style of the text. Fixes RTbug #1786.
631    
632     * Thuban/UI/mainwindow.py: Import just the Classifier class.
633    
634 bh 623 2003-04-07 Bernhard Herzog <[email protected]>
635    
636 bh 625 * Thuban/UI/mainwindow.py (main_menu): Move the toggle_legend item
637     to the map module
638    
639     2003-04-07 Bernhard Herzog <[email protected]>
640    
641 bh 623 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree): Removed in
642     favor of ToggleSessionTree
643     (MainWindow.ToggleSessionTree): New method to toggle visibility of
644     the session tree.
645     (MainWindow.SessionTreeShown): New method to return whether the
646     session tree is currently shown.
647     (MainWindow.ToggleLegend): New method to toggle visibility of the
648     legend
649     (MainWindow.ShowLegend): Implement in terms of ToggleLegend and
650     LegendShown
651     (MainWindow.LegendShown): New method to return whether the legend
652     is currently shown.
653     (_method_command): Add checked parameter so we can define check
654     menu items
655     (_has_tree_window_shown, _has_legend_shown): Use the appropriate
656     mainwindow methods.
657     (show_session_tree, show_legend commands): Removed.
658     (toggle_session_tree, toggle_legend commands): New commands to
659     toggle the visibility of the dialogs
660    
661 jonathan 612 2003-04-07 Jonathan Coles <[email protected]>
662    
663 jonathan 619 * Thuban/UI/classgen.py: Fix Windows problem.
664    
665     * Thuban/UI/dock.py: Fix Windows problem.
666    
667     * Thuban/UI/mainwindow.py: Use False instead of false.
668     (MainWindow.ShowLegend): Remove unnecessary switch parameter.
669    
670     2003-04-07 Jonathan Coles <[email protected]>
671    
672 jonathan 612 Since we now say that the order of the groups in a classification
673     matters, it makes sense to be able to manipulate that order. Most
674     of the changes to Thuban/Model/classification.py are to that end.
675    
676     * Thuban/Model/classification.py (Classification.AppendGroup,
677     Classification.InsertGroup, Classification.ReplaceGroup,
678     Classification.RemoveGroup, Classification.GetGroup): Do as the
679     names imply.
680     (Classification.FindGroup): This was called GetGroup, but GetGroup
681     takes an index, while FindGroup takes a value.
682     (Classification.__deepcopy__): Copy all the groups, BUT NOT THE LAYER
683     REFERENCE. Currently there is a cyclic reference between the layer
684     and its classification. If the classification doesn't need to know
685     its owning layer we can change this, since it may make sense to be
686     able to use the same classification with different layers.
687    
688     * Thuban/Model/load.py: Use Classification.AppendGroup(), not AddGroup()
689    
690     * Thuban/UI/classgen.py: Use Classification.AppendGroup(),
691     not AddGroup()
692    
693     * Thuban/UI/classifier.py: Now that we can depend on the order in
694     a Classification and have methods to manipulate that order we don't
695     need to use our own data structures in the grid. We can simply make
696     the grid/table access the information they need from a copy of
697     the classification object.
698     (Classifier._OnCloseBtn): Event handler for when the user clicks
699     'Close'. This is needed so if the user applies changes and then
700     continues to change the table the user has the option of discarding
701     the most recent changes and keeping what they applied.
702    
703     * Thuban/UI/mainwindow.py: Put "Show Legend" and "Show Session Tree"
704     into the same group.
705    
706     * extensions/thuban/wxproj.cpp (check_version): If Thuban is compiled
707     with a really old version of proj, PJ_VERSION won't even be defined.
708     If it isn't defined then just compile so that the function always
709     returns Py_False.
710    
711     * test/test_classification.py: Fix tests to use the renamed methods.
712     Still need to write tests for the new methods.
713    
714 jonathan 601 2003-04-04 Jonathan Coles <[email protected]>
715 jonathan 608
716 jonathan 612 * Thuban/UI/classifier.py (Classifier.__SelectField): Move the
717     call to SetSelection out of the method and before the call
718     to __SelectField in __init__. This prevents a recursion of events
719     when _OnFieldSelect is triggered by the user.
720    
721     2003-04-04 Jonathan Coles <[email protected]>
722    
723 jonathan 608 * Thuban/Model/classification.py: Rename Color.None to
724     Color.Transparent.
725     (ClassGroupProperties.SetLineColori, ClassGroupProperties.SetFill):
726     Don't bother copying the color, since Colors are immutable.
727    
728     * Thuban/Model/color.py, Thuban/Model/layer.py, Thuban/Model/load.py,
729     Thuban/UI/classifier.py, Thuban/UI/mainwindow.py,
730     Thuban/UI/renderer.py, Thuban/UI/view.py:
731     Rename Color.None to Color.Transparent.
732    
733     * test/test_classification.py, test/test_load.py: Rename Color.None
734     to Color.Transparent.
735    
736     2003-04-04 Jonathan Coles <[email protected]>
737 jonathan 603
738     * Thuban/Model/classification.py: Fix assert calls.
739     (ClassGroupProperties.SetLineColor, ClassGroupProperties.SetFill):
740     Copy the color parameter rather than hold onto a reference.
741 jonathan 601
742 jonathan 603 * Thuban/Model/color.py (Color.__copy__, Color.__deepcopy): Copy
743     the color object.
744     (NoColor.__copy__, NoColor.__deepcopy): Return 'self' so that we
745     are sure there exists only one refernce to Color.None in the system.
746     This allows us to use 'is' rather than the comparision functions.
747    
748     * Thuban/Model/save.py: Fix assert calls.
749    
750     * Thuban/UI/classifier.py: Fix assert calls.
751     (ClassGrid._OnCellDClick): Call up to the classifier to open the
752     dialog to edit the groups properties.
753     (ClassGrid._OnCellResize): Make sure that the scollbars are drawn
754     correctly if a cell is resized.
755     (ClassTable.SetClassification): New. Changes the classification
756     that is in the table.
757     (ClassTable.__SetRow): Allow groups to be prepended.
758     (Classifier): New code for opening the EditProperties and
759     GenerateRanges dialogs.
760     (SelectPropertiesDialog.__GetColor): Only set the color in the
761     color dialog if the current color is not None.
762    
763     * Thuban/UI/dock.py: Fix assert calls.
764    
765     * Thuban/UI/legend.py: Fix assert calls.
766    
767     * Thuban/UI/renderer.py: Fix assert calls.
768    
769     * Thuban/UI/classgen.py (ClassGenDialog): Dialog for generating
770     classifications.
771     (GenRangePanel): Panel specific to range generation.
772     (GenSingletonPanel): Panel specific to singleton generation.
773     (ClassGenerator): Class responsible for actually generating
774     the classification from the data gathered in the dialog box.
775     (PropertyRamp): Generates properties whose values range from
776     a starting property to an ending property.
777 jonathan 601
778 bh 600 2003-04-03 Bernhard Herzog <[email protected]>
779    
780     * test/support.py (print_garbage_information): New function that
781     prints information about still connected messages and memory
782     leaks.
783     (run_suite): Removed.
784     (run_tests): New function for use as a replacement of
785     unittest.main in the test_* files. This one calls
786     print_garbage_information at the end.
787    
788     * test/runtests.py (main): Use support.print_garbage_information
789    
790     * test/test_layer.py: Use support.run_tests instead of
791     unittest.main so we get memory leak information
792     (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
793     (TestLayer.test_point_layer, TestLayer.test_empty_layer)
794     (TestLayerLegend.test_visibility): Call the layer's Destroy method
795     to fix a memory leak.
796    
797     * test/test_classification.py: Use support.run_tests instead of
798     unittest.main so we get memory leak information
799     (TestClassification.test_classification): Call the layer's Destroy
800     method to fix a memory leak.
801    
802 bh 591 2003-04-02 Bernhard Herzog <[email protected]>
803    
804 bh 595 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
805     Handle the reference counts of the return value and errors in
806     PyArg_ParseTuple correctly.
807    
808 bh 593 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
809     sure the filename is absolute to avoid problems when saving the
810     session again
811    
812 bh 591 * Thuban/Model/table.py: Remove unnecessary import. Fix a typo.
813    
814 jonathan 587 2003-04-01 Jonathan Coles <[email protected]>
815    
816 jonathan 589 * Thuban/UI/renderer.py (MapRenderer.draw_point_shape): Check
817 jonathan 587 that there actually are points in the returned list of points
818     before trying to index into the list. The list may be empty if
819     the shape is a Null Shape.
820    
821 bh 586 2003-04-01 Bernhard Herzog <[email protected]>
822    
823     * test/test_map.py: Don't use from <module> import *
824    
825 jonathan 581 2003-04-01 Jonathan Coles <[email protected]>
826    
827     * Thuban/Model/session.py: Use LAYER_CHANGED instead of
828     LAYER_LEGEND_CHANGED
829    
830     * Thuban/UI/dock.py (DockableWindow._OnButtonClose): Call
831     self.Destroy() to close the window after yesterday's changes.
832    
833     * test/test_map.py, test/test_session.py: Fix messages that
834     are sent from maps and layers.
835    
836 jonathan 575 2003-03-31 Jonathan Coles <[email protected]>
837    
838     * Thuban/UI/classifier.py: Commented out some debugging statements.
839     (ClassDataPreviewer.Draw): Draw rectangles for polygon layers per
840     RTbug #1769.
841    
842     * Thuban/UI/dock.py (DockableWindow.UnDock): Restore size and
843     position (although position doesn't work yet under GTK).
844     (DockableWindow.Destroy): New. Called when the window must be
845     closed. Namely needed when the DockFrame closes and must close
846     its children.
847     (DockFrame): Listen for EVT_CLOSE and destroy all children.
848    
849     * Thuban/UI/legend.py (LegendPanel.Destroy): New. Cleans up
850     when then window is told to close.
851     (LegendTree._OnMsgLayerChanged): Fixes a seg fault bug. See
852     comment in source for more info.
853    
854     * Thuban/UI/main.py: Show the legend by default when Thuban starts.
855    
856     * Thuban/UI/mainwindow.py: Renamed OnClose to _OnClose for
857     symmetry with other such methods.
858     (MainWindow.ShowLegend): Show the legend docked by default.
859    
860 jonathan 569 2003-03-28 Jonathan Coles <[email protected]>
861    
862     * Thuban/UI/classifier.py: Support for highlighting a specific
863     group within the grid when the classification dialog is opened.
864     Also contains a lot of debugging printouts which will later
865     be removed.
866    
867     * Thuban/UI/dock.py: Complete rework on the dock code so that
868     that it is fairly removed from the rest of the Thuban application.
869     It is easy to add new docks which the rest of the program having
870     to be aware of them.
871    
872     * Thuban/UI/legend.py: Modifications to support selecting a
873     specific group in the classification dialog. Changed how layers
874     are drawn when the layer is visible/invisible.
875    
876     * Thuban/UI/mainwindow.py: Removed legend specific code and
877     replaced it with calls to the new dock code.
878    
879     * Thuban/UI/renderer.py (MapRenderer.__init__): Added assert
880     to check if scale > 0. Trying to track down a divide by zero.
881    
882 jonathan 557 2003-03-26 Jonathan Coles <[email protected]>
883    
884 jonathan 567 * Thuban/UI/legend.py: Removed unnecessary LegendDialog class.
885     (LegendPanel): Removed _OnDock()/_OnUnDock() methods which are
886     now part of DockableWindow.
887     (LegendPanel.DoOnSelChanged): Select the current layer in the
888     map.
889     (LegendTree._OnSelChanged): Call LegendPanel.DoOnSelChanged()
890     with the selected layer and/or group.
891    
892     2003-03-26 Jonathan Coles <[email protected]>
893    
894 jonathan 557 This putback contains the code for dockable windows. There is
895     no support in wxWindows as of this date for windows that can
896     attach themselves to other windows.
897    
898     The current model contains a DockableWindow which has a parent
899     window for when it is detached and a dock window that it puts
900     its contents in when it is docked. The contents of a DockableWindow
901     must be a DockPanel. DockPanel itself derives from wxPanel.
902    
903     * Thuban/Model/layer.py (Layer.ClassChanged): Send a LAYER_CHANGED
904     message, not a LAYER_LEGEND_CHANGED message.
905    
906     * Thuban/Model/map.py (Map): Forward LAYER_CHANGED messages.
907    
908     * Thuban/UI/classifier.py (Classifier.__init__): Use wxADJUST_MINSIZE
909     as one of the style properties for the fieldTypeText item to
910     be sure that its size is correct when the text changes.
911    
912     * Thuban/UI/dock.py: New. Classes for the DockPanel and
913     DockableWindow.
914    
915     * Thuban/UI/legend.py: Added some more buttons and made the
916     LegendPanel a DockPanel.
917    
918     * Thuban/UI/mainwindow.py: Added sash windows to the main window
919     and supporting functions for manipulating the sashes.
920     (MainWindow.ShowLegend): Create a DockableWindow with the
921     LegendPanel as the contents.
922    
923     * Thuban/UI/messages.py: Added DOCKABLE_* messages
924    
925     * Thuban/UI/view.py (MapCanves.SetMap): Listen for LAYER_CHANGED,
926     not LAYER_LEGEND_CHANGED, messages.
927    
928 jonathan 554 2003-03-25 Jonathan Coles <[email protected]>
929    
930     * setup.py: Added custom script bdist_rpm_build_script so that
931     when the rpm is built the path to wx-config is correct.
932    
933     * setup.cfg: Added line saying to use the custom build script
934    
935 jonathan 552 2003-03-20 Jonathan Coles <[email protected]>
936    
937     Initial implementation of the Legend.
938    
939     * Thuban/UI/legend.py: New. Creates a window that shows the map's
940     Legend information and allows the user to add/modify classifications
941     and how the layers are drawn on the map.
942    
943     * setup.py: New command 'build_docs' which currently uses
944     happydoc to generate html documentation for Thuban.
945    
946     * Thuban/Model/classification.py (ClassGroup.GetDisplayText): New.
947     Returns a string which is appropriately describes the group.
948    
949     * Thuban/Model/layer.py (Layer.SetClassification): Generate a
950     LAYER_CHANGED event instead of a LAYER_LEGEND_CHANGED event.
951    
952     * Thuban/Model/map.py (Map): Rename messages and use new, more
953     specific, messages.
954    
955     * Thuban/Model/messages.py: New message to indicate that a layer's
956     data has changed (LAYER_CHANGED). New map messages to indicate
957     when layers have been added/removed/changed or if the stacking order
958     of the layers has changed.
959    
960     * Thuban/Model/session.py: Rename and use new messages.
961    
962     * Thuban/UI/classifier.py: Remember if any changes have actually
963     been applied so that if the dialog is cancelled without an application
964     of changes we don't have to set a new classification.
965     (ClassDataPreviewer): Pulled out the window specific code and put it
966     ClassDataPreviewWindow. ClassDataPreviewer can then be used to draw
967     symbols on any DC.
968    
969     * Thuban/UI/mainwindow.py: New code to open the legend.
970    
971     * Thuban/UI/view.py: Use new message names.
972    
973 jonathan 541 2003-03-19 Jonathan Coles <[email protected]>
974    
975     * Thuban/UI/main.py (verify_versions): New. Checks the versions
976     of Python, wxPython, and some other libraries.
977    
978     * extensions/thuban/wxproj.cpp (check_version): Checks the given
979     version against what wxproj was compiled with.
980     (check_version_gtk): If wxproj was compiled with gtk then check
981     the given version against the version of the gtk library
982     currently being used.
983    
984 bh 538 2003-03-14 Bernhard Herzog <[email protected]>
985    
986     * test/test_command.py: Run the tests when the module is run as a
987     script
988    
989     2003-03-14 Bernhard Herzog <[email protected]>
990    
991     Implement selection of multiple selected shapes in the same layer:
992    
993     - Introduce a new class to hold the selection. This basically
994     replaces the interactor which was nothing more than the
995     selection anyway. A major difference is of course that the new
996     selection class supports multiple selected shapes in one layer
997    
998     - Move the object that represents the selection from the
999     application to the canvas. The canvas is a better place than the
1000     application because the selection represents which shapes and
1001     layer of the map displayed by the canvas are selected and
1002     affects how the map is drawn.
1003    
1004     - Make the selection and its messages publicly available through
1005     the mainwindow.
1006    
1007     - The non-modal dialogs do not get a reference to the interactor
1008     anymore as they can simply refer to their parent, the
1009     mainwindow, for the what the interactor had to offer.
1010    
1011     * Thuban/UI/selection.py: New module with a class to represent the
1012     selection.
1013    
1014     * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
1015     these unused messages
1016    
1017     * Thuban/UI/application.py (ThubanApplication.OnInit)
1018     (ThubanApplication.OnExit, ThubanApplication.SetSession): The
1019     interactor is gone now.
1020     (ThubanApplication.CreateMainWindow): There is no interactor
1021     anymore so we pass None as the interactor argument for now for
1022     compatibility.
1023    
1024     * Thuban/UI/view.py (MapCanvas.delegated_messages)
1025     (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
1026     Unsubscribe, delegate messages according to the delegated_messages
1027     class variable.
1028     (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
1029     attributes from instance variables as described with the
1030     delegated_methods class variable.
1031     (MapCanvas.__init__): New instance variable selection holding the
1032     current selection
1033     (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
1034     pass them on to the renderer
1035     (MapCanvas.SetMap): Clear the selection when a different map is
1036     selected.
1037     (MapCanvas.shape_selected): Simple force a complete redraw. The
1038     selection class now takes care of only issueing SHAPES_SELECTED
1039     messages when the set of selected shapes actually does change.
1040     (MapCanvas.SelectShapeAt): The selection is now managed in
1041     self.selection
1042    
1043     * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
1044     (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
1045     Unsubscribe, delegate messages according to the delegated_messages
1046     class variable.
1047     (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
1048     attributes from instance variables as described with the
1049     delegated_methods class variable.
1050     (MainWindow.__init__): The interactor as ivar is gone. The
1051     parameter is still there for compatibility. The selection messages
1052     now come from the canvas.
1053     (MainWindow.current_layer, MainWindow.has_selected_layer):
1054     Delegate to the the canvas.
1055     (MainWindow.LayerShowTable, MainWindow.Classify)
1056     (MainWindow.identify_view_on_demand): The dialogs don't need the
1057     interactor parameter anymore.
1058    
1059     * Thuban/UI/tableview.py (TableFrame.__init__)
1060     (LayerTableFrame.__init__, LayerTableFrame.OnClose)
1061     (LayerTableFrame.row_selected): The interactor is gone. It's job
1062     from the dialog's point of view is now done by the mainwindow,
1063     i.e. the parent. Subscribe to SHAPES_SELECTED instead
1064     of SELECTED_SHAPE
1065    
1066     * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
1067     is gone. It's job from the dialog's point of view is now done by
1068     the mainwindow, i.e. the parent.
1069    
1070     * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
1071     gone. It's job from the dialog's point of view is now done by the
1072     mainwindow, i.e. the parent.
1073    
1074     * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
1075     gone. It's job from the dialog's point of view is now done by the
1076     mainwindow, i.e. the parent.
1077     (SessionTreeCtrl.__init__): New parameter mainwindow which is
1078     stored as self.mainwindow. The mainwindow is need so that the tree
1079     can still subscribe to the selection messages.
1080     (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
1081     (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
1082     selection is now accessible through the mainwindow. Subscribe to
1083     SHAPES_SELECTED instead of SELECTED_SHAPE
1084    
1085     * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
1086     SHAPES_SELECTED message now.
1087     (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
1088     so deal with multiple shapes
1089     (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
1090     gone. It's job from the dialog's point of view is now done by the
1091     mainwindow, i.e. the parent.
1092    
1093     * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
1094     parameter is now a list of shape ids.
1095     (RecordTable.SetTable): The second parameter is now a list of
1096     indices.
1097    
1098     * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
1099     selected_shape parameter and ivar to selected_shapes. It's now a
1100     list of shape ids.
1101     (MapRenderer.draw_label_layer): Deal with multiple selected
1102     shapes. Rearrange the code a bit so that the setup and shape type
1103     distinctions are only executed once.
1104    
1105     * test/test_selection.py: Test cases for the selection class
1106    
1107 jonathan 527 2003-03-11 Jonathan Coles <[email protected]>
1108    
1109     * Thuban/Model/load.py: Temporary fix so that the xml reader
1110     doesn't cause Thuban to crash.
1111    
1112     * Thuban/Model/layer.py: Handle the cyclic references between
1113     a layer and its classification better, and be sure to disconnect
1114     the classification from the layer when the layer is destroyed
1115     so that we don't maintain a cyclic reference that may not be
1116     garbage collected.
1117    
1118     * Thuban/Model/classification.py: See comment for layer.py.
1119    
1120 jan 523 2003-03-12 Jan-Oliver Wagner <[email protected]>
1121    
1122     * HOWTO-Release: New. Information on the steps for releasing
1123     a new version of Thuban.
1124    
1125 jonathan 514 2003-03-11 Jonathan Coles <[email protected]>
1126    
1127     * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
1128     Use True instead of true.
1129     (Classifier): Should have a single panel in which all the controls lie.
1130    
1131     * Thuban/UI/proj4dialog.py: Add normal border.
1132    
1133     * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
1134    
1135     * Thuban/UI/mainwindow.py: Use True instead of true.
1136    
1137     * setup.py: Update some definitions to use wxWindows2.4 files
1138    
1139     * Data/iceland_sample_class.thuban: Fixed file so that the
1140     field_type information is present.
1141    
1142 jonathan 490 2003-03-10 Jonathan Coles <[email protected]>
1143    
1144 jonathan 505 * Thuban/UI/classifier.py (Classifier.__init__): Make the
1145     field type label grow so that when the text changes the
1146     size is updated correctly. This may be a wxWindows bug.
1147    
1148     2003-03-10 Jonathan Coles <[email protected]>
1149    
1150 jonathan 499 * Thuban/UI/application.py: Changed SESSION_CHANGED to
1151     SESSION_REPLACED.
1152    
1153     * Thuban/UI/classifier.py: Wrap text with _().
1154     (ClassGrid.CreateTable): Set dimensions and size hints here,
1155     instead of in Reset, so we only set the size once.
1156    
1157     * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
1158    
1159     * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
1160     Call Close() instead of Shutdown().
1161    
1162     * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
1163    
1164     * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
1165     Go back to using OnClose() instead of Shutdown().
1166    
1167     2003-03-10 Jonathan Coles <[email protected]>
1168    
1169 jonathan 497 * Thuban/UI/classifier.py (Classifier): SelectField() needed
1170     to know the old field index as well as the new one.
1171    
1172     2003-03-10 Jonathan Coles <[email protected]>
1173    
1174 jonathan 495 * Thuban/UI/classifier.py (Classifier): Use __SelectField()
1175     to correctly set the table information and call this from
1176     __init__ and from _OnFieldSelect so that all the information
1177     is up to date when the dialog opens and when a field is changed.
1178    
1179     2003-03-10 Jonathan Coles <[email protected]>
1180    
1181 jonathan 490 * Thuban/Model/classification.py (Classification): Don't use
1182     layer's message function directly, use the ClassChanged() method
1183     when then classification changes. SetField/SetFieldType/SetLayer
1184     must keep the information about field name and field type in
1185     sync when an owning layer is set or removed.
1186    
1187     * Thuban/Model/layer.py: Added ClassChanged() so that the
1188     classification can tell the layer when its data has changed.
1189     (Layer.SetClassification): Accepts None as an arguement to
1190     remove the current classification and correctly handles
1191     adding a new classification.
1192    
1193     * Thuban/Model/load.py: Comment out print statement
1194    
1195     * test/test_classification.py, test/test_save.py: New and
1196     improved tests.
1197    
1198 jonathan 483 2003-03-07 Jonathan Coles <[email protected]>
1199    
1200     * Thuban/Model/classification.py: Implemented __copy__ and
1201     __deepcopy__ for ClassGroup* and ClassGroupProperites so
1202     they can easily be copied by the classifier dialog.
1203     (ClassGroupProperites.__init__): The default line color should
1204     have been Color.Black.
1205    
1206     * Thuban/UI/classifier.py: Setting and Getting table values now
1207     uses a consistent set of functions.
1208     (Classifier): Now non-modal. Has field type label which changes
1209     as the field changes. Keep track of buttons in a list so that
1210     we can enable/disable the buttons when the None field is selected.
1211     (SelectPropertiesDialog): Add buttons to make the colors transparent.
1212    
1213     * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
1214     does what OnClose did, but can be called by the application to
1215     close a window. Needed when a session changes, and we have to
1216     close the classifier windows.
1217    
1218     * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
1219     Shuts down open dialogs. Used when a new session is created
1220     or a session is opened.
1221     (MainWindow.SaveSession): Should only call application.SaveSession()
1222     if we don't call SaveSessionAs first.
1223     (MainWindow.Classify): Allow different classifier dialogs for
1224     different layers.
1225    
1226     * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
1227     the parent class handle it. Add Shutdown() to unsubscibe from
1228     event notification and call the parent Shutdown(). This was
1229     necessary so the application can close the tree window.
1230    
1231 jonathan 478 2003-03-06 Jonathan Coles <[email protected]>
1232    
1233     * Thuban/Model/classification.py: Minor documentation changes,
1234     Addition of __eq__ and __ne__ methods.
1235     (Classification.SetLayer): prevent recursion between this method
1236     and Layer.SetClassification().
1237    
1238     * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
1239    
1240     * Thuban/Model/layer.py (SetClassification): prevent recursion
1241     between this method and Classification.SetLayer().
1242    
1243     * test/test_classification.py, test/test_load.py,
1244     test/test_session.py: Fixed and added tests for the classification
1245     classes.
1246    
1247 bh 477 2003-03-06 Bernhard Herzog <[email protected]>
1248    
1249     * Thuban/UI/classifier.py (ClassGrid.__init__)
1250     (ClassGrid.CreateTable): Move the SetSelectionMode call to
1251     CreateTable because otherwise it triggers an assertion in
1252     wxPython/wxGTK 2.4.
1253    
1254 jonathan 459 2003-03-05 Jonathan Coles <[email protected]>
1255    
1256 jonathan 475 * Thuban/common.py: Move FIELDTYPE constants back to table.py.
1257 jonathan 471
1258 jonathan 475 * Thuban/Model/load.py: import FIELDTYPE constants from table.
1259 jonathan 471
1260 jonathan 475 * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
1261 jonathan 471
1262 jonathan 475 * Thuban/Model/table.py: Put FIELDTYPE constants back.
1263 jonathan 471
1264     2003-03-05 Jonathan Coles <[email protected]>
1265    
1266 jonathan 459 * Thuban/UI/classifier.py: Added class documentation.
1267     Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
1268     Store just the groups in the table and generate the other
1269     column information when it is requested. Add "None" field
1270     to pull-down to select no classification.
1271    
1272     * Thuban/common.py: Moved FIELDTYPE constants from table.py
1273     (Str2Num): Only catch ValueError exceptions.
1274    
1275     * Thuban/Model/classification.py: Class documentation. Renaming
1276     of methods with Stroke to Line. Groups are stored in a single
1277     list with the default as the first element. Groups are searched
1278     in the order they appear in the list.
1279    
1280     * Thuban/Model/color.py: Documentation.
1281    
1282     * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
1283     the kind of data represented by a field.
1284    
1285     * Thuban/Model/load.py (ProcessSession): Use proper string
1286     conversion function; fixes RTbug #1713.
1287    
1288     * Thuban/Model/save.py (Saver): Store field type information.
1289    
1290     * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
1291     (Table): Add field_info_by_name() to retrieve field information
1292     by specifying the field name, not the number.
1293    
1294     * Thuban/UI/mainwindow.py: Function name changes.
1295    
1296     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
1297     get the layer classification once. Don't try to classify
1298     values when the field is None: just use the default properties.
1299    
1300     * Thuban/UI/view.py: Function name changes.
1301    
1302     * Doc/thuban.dtd: Add field_type attribute to a classification.
1303    
1304 bh 456 2003-03-04 Bernhard Herzog <[email protected]>
1305    
1306 bh 458 * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
1307     the fill and stroke layer attributes optional with suitable
1308     default values. Add the stroke_width layer attribute. Use correct
1309     syntax for empty elements. Make the attribute list for labels
1310     refer to the label element.
1311    
1312     2003-03-04 Bernhard Herzog <[email protected]>
1313    
1314 bh 456 * setup.py (thuban_build_py.build): Add a comment about distutils in
1315     Python 2.3 containing some of the functionality we implement in
1316     setup.py ourselves.
1317    
1318     * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
1319     before the selection mode. Doing it the other way round triggers
1320     an assertion in wxWindows.
1321    
1322     * Thuban/Model/save.py (escape): Fix typo in doc-string
1323    
1324     * Thuban/Model/classification.py: Remove unnecessary wxPython
1325     import
1326    
1327 jonathan 448 2003-03-04 Jonathan Coles <[email protected]>
1328    
1329     * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
1330     Parameter 'value' should default to None.
1331    
1332     * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
1333     the class attribute __classification is now private.
1334    
1335     * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
1336     Classifier to ClassGrid. Added support for removing selected rows,
1337     which including code for keeping track of when cells are selected,
1338     and deselected.
1339     (ClassTable): Support for added/removing rows. Fixed a problem
1340     with __ParseInput whereby it would not allow strings (only numbers)
1341     to be entered.
1342     (Classifier): Added button and supporting code for removing
1343     selected rows.
1344    
1345 jonathan 445 2003-02-27 Jonathan Coles <[email protected]>
1346 jonathan 434
1347     * Thuban/common.py: Moved color conversion functions into
1348     Thuban/UI/common.py.
1349     (Str2Num): Now converts the float (not the string) to a long/int
1350     so that an exception isn't thrown.
1351    
1352     * Thuban/UI/common.py: Common functions used in several UI modules
1353    
1354     * Thuban/Model/classification.py: Changed the class hierarchy
1355     so that a Classification consists of Groups which return
1356     Properties when a value matches a Group.
1357    
1358     * Thuban/Model/layer.py: Fixed name resolution problem.
1359    
1360     * Thuban/Model/load.py: Use new Classification and Group functions.
1361    
1362     * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
1363     failure.
1364     (Saver.write_classification): Use new Classification and Group
1365     functions.
1366    
1367     * Thuban/UI/classifier.py: Changes to use new Classification and Group
1368 jonathan 445 functions. Fix to create a tuple with a single value instead of
1369     simply returning the value.
1370 jonathan 434
1371     * Thuban/UI/renderer.py: Use new Classification and Group functions.
1372     Use common.py functions.
1373    
1374 jonathan 445 * Thuban/UI/tree.py: Use common.py functions.
1375 jonathan 447
1376     * test/test_classification.py: Use new Classification and Group
1377     classes.
1378 jonathan 434
1379 jonathan 426 2003-02-24 Jonathan Coles <[email protected]>
1380    
1381     * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
1382     functions from Thuban color objects to wxWindow colour objects.
1383    
1384     * Thuban/Model/classification.py (Classification): Renamed
1385     GetProperties() to GetClassData(). Used the new iterator
1386     in TreeInfo().
1387     (ClassIterator): Iterator implementation to iterate over the
1388     ClassData objects in a classification object.
1389    
1390     * Thuban/Model/save.py (Saver.write_classificaton): Uses
1391     the new iterator to save the classification information.
1392    
1393     * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
1394     for changing the stroke and fill colors and previewing the
1395     changes.
1396    
1397     * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
1398     MainWindow.SaveSessionAs): Text string changes so the dialogs
1399     have more meaningful titles.
1400    
1401     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
1402     Classification method name from GetProperties to GetClassData.
1403    
1404     * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
1405     instead of accessing now non-existent class variables.
1406    
1407 bh 425 2003-02-24 Bernhard Herzog <[email protected]>
1408    
1409     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
1410     unneeded Shape() call. Rendering is substantially faster without
1411     it and it avoids some problems with broken shape files.
1412    
1413 frank 423 2003-02-20 Frank Koormann <[email protected]>
1414    
1415     Force minimal size of identify and label dialogs. The autosizing
1416     looked too ugly.
1417    
1418     * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
1419     * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
1420     Set size of listctrl.
1421     * Thuban/UI/identifyview.py (IdentifyView.__init__):
1422     Set size of dialog.
1423    
1424 jonathan 408 2003-02-19 Jonathan Coles <[email protected]>
1425    
1426     * test/test_classification.py, test/test_layer.py,
1427     test/test_load.py, test/test_map.py, test/test_session.py:
1428     Updated the tests to use the new functions that are in the
1429     respective classes.
1430    
1431     * Thuban/Model/classification.py (Classification):
1432     Uses the new ClassData* classes. Modification messages are
1433     passed up to the parent layer (if it exists).
1434     (ClassData): New class to encapsulate the common data in each
1435     classification property.
1436     (ClassDataDefault): Represents the Default class. data.
1437     (ClassDataPoint): Represents a single class. data point
1438     (ClassDataRange): Represents a class. range
1439     (ClassDataMap): Represents a class. map (unused).
1440    
1441     * Thuban/Model/color.py: Added Color.None to represent something
1442     with no color. Color.Black represents the color black.
1443     (NoColor): Helper class derived from Color to represent something
1444     with no color.
1445    
1446     * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
1447     stroke_width attributes. Made the 'classification' attribute private.
1448     New methods for setting/getting the classification.
1449    
1450     * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
1451     to get the classifcation and use the new ClassData* classes to
1452     hold the classification data. Use Str2Num to convert numbers
1453     properly.
1454    
1455     * Thuban/Model/save.py (Saver): Use new Color and Classification
1456     methods
1457    
1458     * Thuban/UI/classifier.py (ClassGrid): New class to represent a
1459     custom grid.
1460     (ClassTable): Support for editing Values and Labels and for
1461     changing what type (point or range) of data is stored in each
1462     property based on how the user enters the data.
1463     (Classifier): Support for saving the new classifications and
1464     launching the dialog to edit a property.
1465     (SelectPropertiesDialog): New class for editing the visual
1466     properties of a classification (stroke color, width, and fill color)
1467     (ClassPreviewer): Took the Draw method from ClassRenderer and
1468     made most of it into this new class. Intend to use this class in
1469     the SelectPropertiesDialog for previewing changes.
1470    
1471     * Thuban/UI/renderer.py: Use new Color and Classification methods.
1472    
1473     * Thuban/UI/tree.py: Formatting changes.
1474    
1475     * Doc/thuban.dtd: Add 'label' element
1476    
1477     * Thuban/common.py: New. Contains common routines used throughout
1478     the code.
1479     (Str2Num): Takes a string and converts it to the "best" type of
1480     number.
1481    
1482 bh 405 2003-02-14 Bernhard Herzog <[email protected]>
1483    
1484     * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
1485     dragging flag is always set to 0 even when the tool implementation
1486     raises an exception
1487    
1488 bh 402 2003-02-11 Bernhard Herzog <[email protected]>
1489    
1490     * Thuban/UI/application.py (ThubanApplication.splash_screen): New
1491     method to create a splash screen.
1492     (ThubanApplication.ShowMainWindow): New. Show the main window.
1493     Needed so the splash screen can display the mainwindow
1494     (ThubanApplication.OnInit): Call the
1495     new splash_screen method to determine whether the application
1496     should display a splash screen. If it displays a splash screen do
1497     not immediately show the main window.
1498    
1499 jonathan 399 2003-02-11 Jonathan Coles <[email protected]>
1500    
1501     * Thuban/Model/classification.py: Added import line to fix
1502     feature conflicts between running on python2.2 and python2.1.
1503    
1504     * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
1505     onto the clinfo parameter, so removed the deepcopy().
1506    
1507 jonathan 396 2003-02-10 Jonathan Coles <[email protected]>
1508    
1509 tkoester 403 * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
1510 jonathan 396 Added element_open variable to track opening and closing of tags
1511     so that tags that don't span more than one line are closed with
1512     /> instead of </tag_name>. Use the GetDefault*() methods of
1513     the Classification class.
1514    
1515     * Thuban/Model/classification.py (Classificaton): Added set and
1516     get methods for the default data. The class also takes a layer
1517     reference so that modification messages can be sent. Fixed the
1518     methods to use the new ClassData class.
1519     (ClassData): New class to encapsulate the classification data
1520    
1521     * Thuban/Model/layer.py (Layer): Remove the
1522 tkoester 403 Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
1523 jonathan 396 SetDefault*() methods on the layer's classification object.
1524 tkoester 403 (Layer.__init__): Use the new SetDefault*() methods in the
1525 jonathan 396 Classification class.
1526    
1527     * Thuban/Model/load.py (ProcessSession): Use the new ClassData
1528     object instead of a dictionary.
1529    
1530 tkoester 403 * Thuban/UI/classifier.py (ClassRenderer): New class to
1531 jonathan 396 draw the classifications in the dialog box's table.
1532     (Classifier): Modified to use the ClassRenderer class.
1533    
1534 tkoester 403 * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
1535     methods of the Classification class.
1536 jonathan 396
1537     * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
1538     of the ClassData class.
1539    
1540     * test/test_classification.py, test/test_layer.py,
1541     test/test_map.py, test/test_session.py: Fix the tests to work
1542     with the above code changes.
1543    
1544 jonathan 387 2003-02-03 Jonathan Coles <[email protected]>
1545    
1546     * Thuban/Model/classification.py (Classification): Added getNull()
1547     to return the NullData reference
1548    
1549     * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
1550     Layer.SetStrokeWidth): Modified these functions to change the
1551     null data in the classification rather than keep these values
1552     directly in the Layer class. Menu options to change these values
1553     work again.
1554    
1555 jonathan 380 2003-01-28 Jonathan Coles <[email protected]>
1556    
1557 jonathan 384 * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
1558 tkoester 403 Fixed crashing problem on some systems. Dialog box shows
1559 jonathan 380 classification data.
1560    
1561 jonathan 384 * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
1562     Colors in the tree view.
1563    
1564     * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
1565     the tree info for classifications. Commented out unnecessary lines.
1566    
1567     * Thuban/Model/classification.py (Classification.TreeInfo): New
1568     function to add information about the classification into the
1569     tree view.
1570    
1571 tkoester 403 2003-01-27 Jan-Oliver Wagner <[email protected]>
1572 jan 375
1573 tkoester 403 * Thuban/__init__.py (_): New.
1574 jan 375
1575     * Thuban/Model/classification.py, Thuban/Model/extension.py,
1576     Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
1577 tkoester 403 Thuban/Model/session.py, Thuban/UI/application.py,
1578     Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
1579     Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
1580     Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
1581     Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
1582     Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
1583 jan 375
1584 jonathan 370 2003-01-27 Jonathan Coles <[email protected]>
1585    
1586 tkoester 403 * Thuban/Model/layer.py: Classification initialization calls.
1587 jonathan 370
1588 tkoester 403 * Thuban/Model/classification.py: Created class to encapsulate
1589     a layer classification. Supports specific data points and
1590     ranges.
1591 jonathan 370
1592 tkoester 403 * Thuban/Model/load.py: Added support for loading classification
1593     information.
1594 jonathan 370
1595 tkoester 403 * Thuban/Model/save.py: Added support for saving classification
1596     information.
1597 jonathan 370
1598 tkoester 403 * Thuban/UI/classifier.py: Initial class for a dialog box for
1599     specifying classification information.
1600 jonathan 370
1601 tkoester 403 * Thuban/UI/mainwindows.py: Support for opening the classifier
1602     dialog.
1603 jonathan 370
1604 tkoester 403 * Thuban/UI/renderer.py: Support for drawing a layer with the
1605     classification information.
1606 jonathan 370
1607 tkoester 403 * Data/iceland_sample_class.thuban: iceland_sample with
1608     classification data.
1609 jonathan 370
1610 tkoester 403 * test/test_classification: Tests for the Classification class.
1611 jonathan 370
1612 bh 359 2002-12-09 Bernhard Herzog <[email protected]>
1613    
1614 bh 361 * test/test_command.py: New. Tests for the command classes.
1615    
1616 bh 359 * Thuban/UI/command.py (ToolCommand): New class for tool commands.
1617     (Command.IsTool): New method to distinguish between command
1618     switching tools and other commands.
1619    
1620     * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
1621     the tool to avoid direct assignments to instance variables
1622     (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
1623     (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
1624     change the tool
1625    
1626     * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
1627     active tool's command turns insensitive, disable the tool.
1628     (_tool_command): Use the new ToolCommand class
1629    
1630     * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
1631     SelectTool method to change the tool
1632     (iconfile): Use the ToolCommand class
1633    
1634 bh 354 2002-12-03 Bernhard Herzog <[email protected]>
1635    
1636     * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
1637     the case of selected items that are not children of Layers or Maps
1638     properly. Previously this bug would trigger an assertion in
1639     wxWindows.
1640    
1641 frank 352 2002-11-06 Frank Koormann <[email protected]>
1642    
1643 bh 354 * Thuban/UI/mainwindow.py: Altered the order of tools in the
1644     toolbar: First now are all navigation tools (Zoom In/Out, Pan,
1645     Full Extent).
1646 tkoester 403
1647 bh 349 2002-10-23 Bernhard Herzog <[email protected]>
1648    
1649     * setup.py (setup call): version now 0.1.3
1650    
1651     * MANIFEST.in: Add the files in test/
1652    
1653     * test/README: Add note about tests requiring the iceland data
1654    
1655     * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
1656     copyright notice.
1657    
1658 bh 344 2002-10-18 Bernhard Herzog <[email protected]>
1659    
1660     * test/test_map.py
1661     (TestMapWithContents.test_projected_bounding_box): Use an explicit
1662     epsilon.
1663    
1664     * test/support.py (FloatComparisonMixin.assertFloatEqual)
1665     (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
1666     message if the assertion fails and don't return the return value
1667     of self.assert_. In assertFloatSeqEqual the return meant that not
1668     all items of the sequence were compared.
1669    
1670 bh 326 2002-09-20 Bernhard Herzog <[email protected]>
1671    
1672 bh 341 * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
1673    
1674     * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
1675    
1676 bh 338 * test/test_map.py (TestMapWithContents.test_tree_info): Create
1677     the string with the bounding box on the fly because of platform
1678     differences in the way %g is handled.
1679    
1680     * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
1681     DBFfile too because Thuban layers can't yet cope missing DBF
1682     files.
1683    
1684     2002-09-20 Bernhard Herzog <[email protected]>
1685    
1686 bh 326 * test/test_menu.py: Use initthuban instead of
1687     add_thuban_dir_to_path to initialize Thuban.
1688    
1689     * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
1690     Mixin class for float comparisons
1691     (SubscriberMixin): New. Mixin class to test messages sent through
1692     the Connector class
1693    
1694     * test/README: Fix a typo and add the -v flag to the command for
1695     individual tests
1696    
1697 bh 335 * test/test_session.py: New. Test cases for Thuban.Model.session
1698    
1699     * test/test_proj.py: New. Test cases for Thuban.Model.proj
1700    
1701     * test/test_map.py: New. Test cases for Thuban.Model.map
1702    
1703     * test/test_layer.py: New. Test cases for Thuban.Model.layer
1704    
1705     * test/test_label.py: New. Test cases for Thuban.Model.label
1706    
1707     * test/test_connector.py: New. Test cases for Thuban.Lib.connector
1708    
1709     * test/test_color.py: New. Test cases for Thuban.Model.color
1710    
1711     * test/test_base.py: New. Test cases for Thuban.Model.base
1712    
1713 bh 322 2002-09-13 Bernhard Herzog <[email protected]>
1714    
1715     * Thuban/Model/session.py (Session.forwarded_channels): Forward
1716     the CHANGED channel too.
1717    
1718     * Thuban/Model/map.py (Map.forwarded_channels): Forward the
1719     CHANGED channel too.
1720     (Map.__init__): Call the Modifiable constructor as well.
1721    
1722     * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
1723     event if the modified flag changes.
1724     (Modifiable.changed): Tweak the doc-string.
1725    
1726     * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
1727     (MainWindow.set_position_text): Put the code that puts the text
1728     with the mouse position into the status bar into the new method
1729     set_position_text so that it can overwritten in derived classes.
1730    
1731 bh 317 2002-09-12 Bernhard Herzog <[email protected]>
1732    
1733     * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
1734     message box on the main window.
1735    
1736 bh 313 2002-09-11 Bernhard Herzog <[email protected]>
1737    
1738     * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
1739     the 'E' because it's less likely to interfere with other menu
1740     entries.
1741 bh 315 (MainWindow.build_menu): remove an incorrect comment.
1742 bh 313
1743 bh 311 2002-09-10 Bernhard Herzog <[email protected]>
1744    
1745     * Thuban/UI/mainwindow.py (MainWindow.Map): New.
1746     (_tool_command): Add sensitive parameter
1747     (_has_visible_map): Sensitivity callback to tools and other
1748     commands that require a visible map. Use it in map_zoom_in_tool,
1749     map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
1750     and map_full_extent
1751    
1752 bh 308 2002-09-06 Bernhard Herzog <[email protected]>
1753    
1754     * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
1755     VIEW_POSITION
1756    
1757 tkoester 403 2002-09-04 Frank Koormann <[email protected]>
1758 frank 306
1759     * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
1760    
1761 bh 302 2002-09-02 Bernhard Herzog <[email protected]>
1762    
1763 bh 304 * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
1764     wxWindows already and our implementation doesn't work correctly
1765     with wxGTK 2.3:
1766     (MapCanvas.__init__): Remove the instance variable
1767     (MapCanvas.OnPaint): Always call do_redraw when there's a map to
1768     be drawin
1769     (MapCanvas.OnIdle): Removed.
1770    
1771 bh 302 * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
1772     a parameter to determine the size of the rectangle.
1773     (MapCanvas.find_shape_at): Create the box around the point on a
1774     layer by layer basis and make the size depend on the shape type.
1775     This solves a problem with the selection of point shapes at the
1776     border of the layer's bounding box
1777    
1778 bh 292 2002-08-30 Bernhard Herzog <[email protected]>
1779    
1780 bh 300 * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
1781     for the sensitivity of remove layer.
1782     (_can_remove_layer): New. Sensitivity callback for remove layer
1783     (Command layer_remove): Use _can_remove_layer
1784    
1785     * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
1786     determine whether a given layer can be deleted.
1787    
1788 bh 297 * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
1789     (MapCanvas.do_redraw): Get rid of the unused update_region
1790     instance variable
1791    
1792 bh 294 * Thuban/UI/view.py: Add/update some doc-strings.
1793    
1794 bh 292 * test/: new subdirectory with a bunch of unit tests.
1795    
1796     * test/README, test/test_table.py, test/test_save.py,
1797     test/test_menu.py, test/test_load.py: Initial set of tests and
1798     brief instructions on how to run them
1799    
1800 bh 287 2002-08-29 Bernhard Herzog <[email protected]>
1801    
1802 bh 291 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
1803     arcs with multiple parts.
1804    
1805 bh 289 * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
1806     Handle degenrate rectangles.
1807    
1808 bh 287 * Thuban/Model/table.py: Make writing records work correctly:
1809     (Table.__init__): Keep track of whether the DBF is open for
1810     writing
1811     (Table.write_record): Open the DBF file for writing when necessary
1812    
1813 bh 285 2002-08-27 Bernhard Herzog <[email protected]>
1814    
1815     * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
1816     dbf files only for reading by default. Use a new writable dbf
1817     object for writing.
1818    
1819 bh 278 2002-08-26 Bernhard Herzog <[email protected]>
1820    
1821 bh 282 * Thuban/UI/mainwindow.py: Refactor the context creation:
1822     (MainWindow.Context): New method to return a context
1823     (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
1824     new method
1825    
1826 bh 278 * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
1827     layer table specific code from TableGrid into LayerTableGrid
1828     (TableFrame, LayerTableFrame): Split the layer table specific code
1829     from TableFrame into LayerTableFrame
1830 bh 280 (LayerTableGrid.select_shape): Remove a debug print
1831 bh 278
1832     * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
1833     LayerTableFrame
1834    
1835 bh 277 2002-08-23 Bernhard Herzog <[email protected]>
1836    
1837     * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
1838     absolute filename.
1839    
1840 bh 269 2002-08-22 Bernhard Herzog <[email protected]>
1841    
1842 bh 275 * Thuban/Model/table.py (Table.write_record): New method to write
1843     records.
1844 tkoester 403 (Table.__init__): Open the DBF file for writing too.
1845 bh 275
1846     * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
1847     into the underlying table.
1848    
1849     * extensions/shapelib/shapefil.h (DBFCommit),
1850     extensions/shapelib/dbfopen.c (DBFCommit): New API function to
1851     commit any changes made to the DBF file.
1852    
1853 bh 271 * Thuban/UI/mainwindow.py (make_check_current_tool)
1854     (_tool_command): Put the code that generates the "checked"
1855     callback into a separate function so that we can reuse it
1856     elsewhere
1857    
1858 bh 269 * Thuban/Model/save.py (Saver): New class to handle serializing a
1859     session into an XML file. The main reason to introduce a class is
1860     that applications built on Thuban can derive from it so that they
1861     can save additional information in a session file.
1862     (save_session): Delegate almost all the work to the Saver class.
1863     Rename the filename argument to file because it may be a file like
1864     object now.
1865    
1866     * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
1867     code. Remove the little test code which would be executed when the
1868     module is run as a script which didn't work anymore since it can't
1869     import the other Thuban modules.
1870     (ProcessSession, load_session): Refactor the ProcessSession to
1871     have one method for each element start and end tag so that derived
1872     classes can easily override the processing of individual tags.
1873     Also, always parse with namespaces enabled because applications
1874     built on top of Thuban will likely use namespaces if they extend
1875     the session file format.
1876    
1877 bh 266 2002-08-21 Bernhard Herzog <[email protected]>
1878    
1879     * setup.py (ThubanInstall.run): Don't repr install_lib_orig
1880     because thubaninit_contents will do it for us.
1881    
1882 tkoester 403 2002-08-16 Jan-Oliver Wagner <[email protected]>
1883 jan 265
1884     * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
1885     tree window already open
1886    
1887 bh 259 2002-08-15 Bernhard Herzog <[email protected]>
1888    
1889 bh 263 * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
1890     with self.
1891    
1892     * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
1893     when we have actually captured it.
1894    
1895 bh 259 * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
1896     shapefile and destroy the table.
1897    
1898     * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
1899    
1900 bh 254 2002-08-14 Bernhard Herzog <[email protected]>
1901    
1902 bh 256 * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
1903     instance variable columns
1904     (RecordTable.GetTypeName): row and col may be negative in some
1905     cases.
1906    
1907 bh 254 * setup.py (InstallLocal.initialize_options)
1908     (InstallLocal.finalize_options, InstallLocal.user_options): New
1909     option create-init-file to build a thubaninit.py when running
1910     install_local
1911     (InstallLocal.run): Create the thubaninit.py module when requested
1912     (thubaninit_contents): Split the template into several parts and
1913     create a new function thubaninit_contents that creates the
1914     contents of a thubaninit module.
1915     (ThubanInstall.run): Use the new function to create the thubaninit
1916     module.
1917    
1918 bh 252 2002-07-30 Bernhard Herzog <[email protected]>
1919    
1920     * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
1921     cleanup.
1922     (ThubanApplication.MainLoop): Extend to automatically call OnExit.
1923    
1924     * Thuban/Model/session.py (Session.Destroy): Don't bypass the
1925     direct base class' Destroy method.
1926    
1927     * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
1928     layers.
1929     (Map.Destroy): Destroy the label_layer as well and call the
1930     inherited Desatroymethod first so that no more messages are
1931     issued.
1932     (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
1933     message if the stacking order actually has changed. Add
1934     doc-strings.
1935     (Map.BoundingBox): Correct the doc-string.
1936     (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
1937     (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
1938    
1939     * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
1940     all labels.
1941    
1942 bh 247 2002-07-29 Bernhard Herzog <[email protected]>
1943    
1944     * Thuban/Model/map.py (Map.subscribe_layer_channels)
1945     (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
1946     to a layer's channels into separate methods.
1947     (Map.RemoveLayer, Map.AddLayer): Call the new methods
1948     (Map.Destroy): Unsubscribe from a layer's channels before
1949     destroying it.
1950    
1951     * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
1952     selected_layer parameter to searched_layer which is the layer to
1953     search in.
1954     (MapCanvas.SelectShapeAt): New parameter layer to restrict the
1955     search to that layer. Return the selected layer and shape.
1956    
1957     * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
1958     typo
1959    
1960 bh 238 2002-07-24 Bernhard Herzog <[email protected]>
1961    
1962 bh 243 * Thuban/UI/application.py (ThubanApplication.create_session):
1963     Extend the doc string.
1964     (ThubanApplication.subscribe_session)
1965     (ThubanApplication.unsubscribe_session): New methods to
1966     subscribe/unsubscribe to/from session channels.
1967     (ThubanApplication.SetSession): Call the new methods here.
1968     (ThubanApplication.maps_changed, ThubanApplication.set_map):
1969     Renamed set_map to maps_changed. Its now a subscriber for
1970     MAPS_CHANGED.
1971    
1972     * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
1973     x-coordinate in case of simple clicks
1974    
1975     * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
1976     don't pass it as a parameter
1977    
1978     * Thuban/Model/session.py (Session.RemoveMap): New
1979    
1980 bh 238 * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
1981     window size into a parameter.
1982    
1983 bh 235 2002-07-23 Bernhard Herzog <[email protected]>
1984    
1985 bh 237 * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
1986     just commands.
1987    
1988 bh 235 * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
1989     parameter list a bit to allow setting the window title and the
1990     initial message in the status bar. Update the callers.
1991    
1992     * Thuban/UI/application.py (ThubanApplication.OnInit)
1993     (ThubanApplication.CreateMainWindow): Put the mainwindow
1994     instantiation into a separate method so that it can be overridden
1995     by a subclass.
1996    
1997 bh 230 2002-07-19 Bernhard Herzog <[email protected]>
1998    
1999 bh 234 * Thuban/Model/session.py: Issue a CHANGED message every time
2000     another changed message is issued to make it easier to get
2001     notified of changes.
2002     (Session): Update the doc string
2003     (Session.forward): Issue changed-events as CHANGED as well.
2004     (Session.changed): Overwrite the inherited version to issue
2005     CHANGED events as well.
2006    
2007     * Thuban/UI/tree.py: We can now simply subscribe to the session's
2008     CHANGED channel to be informed of changes.
2009     (SessionTreeCtrl.session_channels): Not needed any longer.
2010 tkoester 403 (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
2011 bh 234 Only have to (un)subscribe CHANGED
2012    
2013     * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
2014    
2015 bh 230 * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
2016     for the wxPython locale bug to __init__.py so that it's
2017     automatically executed by anybody using UI code from Thuban.
2018    
2019 bh 225 2002-07-18 Bernhard Herzog <[email protected]>
2020    
2021 bh 228 * Thuban/UI/main.py (main): app no longer needs to be global
2022    
2023     * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
2024     as parameter and store it in an instance variable
2025     (MainWindow.invoke_command, MainWindow.update_command_ui)
2026     (MainWindow.save_modified_session, MainWindow.NewSession)
2027     (MainWindow.OpenSession, MainWindow.SaveSession)
2028     (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
2029     application object.
2030    
2031     * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
2032     the main window with self.
2033    
2034 bh 225 * Thuban/UI/context.py: New module with the context class
2035    
2036     * Thuban/UI/command.py (Command): Update doc string.
2037    
2038     * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
2039     MainWindow.update_command_ui): Pass an instance of the context
2040     class to the command's methods
2041     (check_current_tool, call_method): Handle the new context
2042     implementation
2043    
2044     * Examples/simple_extensions/simple_tool.py (simple_tool,
2045     check_simple_tool): Handle the new context implementation
2046    
2047     * Examples/simple_extensions/simple_command.py (simple_command):
2048     Handle the new context implementation. Update the comments about
2049     the context.
2050    
2051     * Thuban/UI/application.py (ThubanApplication.SetSession): Add
2052     doc-string
2053     (ThubanApplication.Session): New method to return the session
2054     object
2055    
2056     * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
2057     interactor's selected_layer may not be a layer of the current
2058     session when the tree is updated while a new session is being set.
2059    
2060 bh 217 2002-07-17 Bernhard Herzog <[email protected]>
2061    
2062     * Thuban/UI/tree.py (color_string): Removed. No longer used.
2063     (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
2064     update_tree into update_tree and add_items. The tree now uses a
2065     more generic way to display the contents of the tree.
2066     (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
2067    
2068     * Thuban/Model/layer.py (Layer.TreeInfo),
2069     Thuban/Model/extension.py (Extension.TreeInfo),
2070     Thuban/Model/map.py (Map.TreeInfo),
2071 tkoester 403 Thuban/Model/session.py (Session.TreeInfo):
2072 bh 217 Add TreeInfo methods to implement the new tree view update scheme
2073    
2074 bh 216 2002-07-16 Bernhard Herzog <[email protected]>
2075    
2076     * Thuban/UI/application.py: Don't use "import from" for the
2077     MainWindow. It can't always be resolved.
2078     (ThubanApplication.OnInit): change reference to MainWindow
2079     accordingly.
2080    
2081     * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
2082     completely
2083    
2084 bh 213 2002-07-10 Bernhard Herzog <[email protected]>
2085    
2086     * setup.py (create_init_module): New configurable variable whose
2087     default depends on the platform we're running on.
2088     (ThubanInstall.initialize_options): Initialize
2089     self.create_init_module from the global create_init_module
2090     (ThubanInstall.user_options): indictate that the options
2091     create-init-module and init-module-dir have arguments.
2092    
2093     * setup.py: In the setup call change the version number to include
2094     cvs.
2095    
2096     * MANIFEST.in: Add the files in Examples
2097    
2098 bh 205 2002-07-09 Bernhard Herzog <[email protected]>
2099    
2100 bh 210 * setup.py: In the setup call, use the thuban homepage as the
2101     value of the url parameter.
2102    
2103 bh 208 * Examples: New subdirectory for examples.
2104    
2105     * Examples/simple_extensions/simple_tool.xpm,
2106     Examples/simple_extensions/simple_tool.py,
2107     Examples/simple_extensions/simple_command.py,
2108     Examples/simple_extensions/README: Simple examples showing how to
2109     add new commands and tools.
2110    
2111 bh 207 * setup.cfg (bdist_rpm): Add the default value for prefix and tell
2112     bdist_rpm that we also have an install script.
2113     (bdist_inno): Add 2002 to the copyright notice.
2114    
2115 bh 205 * setup.py: Create a file in python's site-packages directory to
2116     make installation of Thuban as a library easier.
2117     (ThubanInstall.user_options): Add two new options,
2118     create-init-module and init-module-dir
2119     (ThubanInstall.expand_with_pure_python_dirs): New method to expand
2120     filenames for installation in the default directories.
2121     (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
2122     the inherited methods to capture some filenames before they're
2123     transformed too much by distutils.
2124     (ThubanInstall.run): Create the init module if requested.
2125     (ThubanInstall.thuban_init_filename): New method to return the
2126     full name of the init module.
2127     (ThubanInstall.get_outputs): Append the filename of the init
2128     module.
2129    
2130 bh 202 2002-07-08 Bernhard Herzog <[email protected]>
2131    
2132 bh 205 * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
2133     handle the prefix properly which means that the default for the
2134     installation prefix should be /usr for RPMs and /usr/local when
2135     doing a normal source install.
2136     (bdist_rpm_install_script): Script to override the default install
2137     commands in the specfile generated by the bdist_rpm command.
2138     (thuban_bdist_rpm.user_options): Add a prefix option
2139     (thuban_bdist_rpm.initialize_options): Init the prefix option.
2140     Create the script files for the spec files as empty files here
2141     (thuban_bdist_rpm._make_spec_file): Override the inherited method
2142     to fill the script files with content.
2143    
2144 bh 202 * Thuban/Model/save.py (relative_filename): Wrapper around
2145     Thuban.Lib.fileutil.relative_filename that accepts an empty dir
2146     argument. save_session now automatically uses this version,
2147     solving a problem when saving to a relative filename.
2148    
2149     * setup.py: In the setup call, make sure that the library
2150     directories are under $prefix/lib not directly under $prefix.
2151    
2152 tkoester 403 2002-06-20 Jan-Oliver Wagner <[email protected]>
2153 jan 199
2154     * Thuban/Model/extension.py: new module to handle extension objects.
2155     * Thuban/Model/messages.py: new messages for extensions.
2156     * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
2157     Session.AddExtension): new for handling extensions.
2158     Also some other minor changes to round up extension handling.
2159     * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
2160     of Extension titles and title and names of its objects.
2161    
2162 bh 194 2002-05-29 Bernhard Herzog <[email protected]>
2163    
2164     * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
2165 bh 202 the events for a command.
2166 bh 194 (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
2167     Call bind_command_events to bind the events. add_toolbar_command
2168     can now bind events too so that it's possible to have commands
2169     that are only available through the toolbar.
2170     (MainWindow.init_ids): New instance variable events_bound to keep
2171     track of for which commands events have been bound.
2172    
2173 bh 190 2002-05-28 Bernhard Herzog <[email protected]>
2174    
2175     * Thuban/UI/menu.py: New module to build and manage menus.
2176    
2177     * Thuban/UI/mainwindow.py: Remove some unused imports.
2178     (MainWindow.__init__, main_menu): move the definition of the main
2179     menu from __init__ to the Menu instance main_menu.
2180     (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
2181     build the menu bar and sub-menus from a menu description.
2182    
2183     * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
2184     startup file
2185     (ThubanApplication.read_startup_files): New method to run
2186     ~/.thuban/thubanstart.py
2187    
2188 bh 192 * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
2189     Move the toolbar definition to the Menu instance main_toolbar.
2190     (MainWindow.build_toolbar): New method to build the toolbar
2191     similar to the build_menu methods
2192    
2193 bh 184 2002-05-23 Bernhard Herzog <[email protected]>
2194    
2195 bh 186 * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
2196     layer_outline_color. Fix it in the definition of the command too.
2197    
2198 bh 184 * Thuban/UI/command.py (Command): Fix typo in doc string
2199    
2200 bh 182 2002-05-22 Bernhard Herzog <[email protected]>
2201    
2202     * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
2203     in the docstring
2204    
2205 bh 175 2002-05-15 Bernhard Herzog <[email protected]>
2206    
2207 bh 180 * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
2208     when the shapefile is empty.
2209     (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
2210     now return None for empty shapefiles. Update doc-strings.
2211    
2212     * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
2213     the layer's bbox being None.
2214    
2215     * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
2216     layer's bbox being None.
2217    
2218 bh 175 * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
2219     necessary.
2220     (MapCanvas.__init__): New instance variables, last_selected_layer
2221     and last_selected_shape to determine how the selection has
2222     changed.
2223    
2224     * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
2225     AutoSizeColumns because it will cause a traversal of the entire
2226     table which for large .dbf files will take a very long time.
2227    
2228 bh 172 2002-05-14 Bernhard Herzog <[email protected]>
2229    
2230     * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
2231     maximum depth for the tree than shapelib does by default.
2232    
2233 bh 165 2002-05-10 Bernhard Herzog <[email protected]>
2234    
2235     * setup.py (py_modules): The shptree modules doesn't have a
2236     wrapper, so don't include it in the py_modules
2237    
2238 bh 163 2002-05-08 Bernhard Herzog <[email protected]>
2239    
2240     * extensions/shapelib/shptree.c (compare_ints): Make arguments
2241     const void * as in the qsort prototype
2242     (SHPTreeFindLikelyShapes): Remove some unused variables.
2243    
2244     * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
2245     maintains to redraw the window during a drag.
2246     (MapCanvas.unprojected_rect_around_point): New method to determine
2247     a small region around a point for hit-testing.
2248     (MapCanvas.find_shape_at): Only test the shapes in a small region
2249     around the point.
2250    
2251     * setup.py: Increment the version to 0.1.2
2252    
2253     * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
2254     debug print and set session to None after unsubscribing
2255    
2256 bh 146 2002-05-07 Bernhard Herzog <[email protected]>
2257    
2258 bh 154 * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
2259     the file to have a .thuban extension.
2260    
2261 bh 152 * Thuban/UI/tree.py (session_channels): New class constant with
2262     all the session channels to subscribe to to update the tree
2263     (SessionTreeCtrl.session_changed): Remember the session so that we
2264     can unsubscribe properly. Use the new class constant to
2265     unsubscribe from the old session and subscribe to the new one.
2266     (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
2267     subscriptions of the SessionTreeCtrl.
2268     (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
2269    
2270     * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
2271     Session Tree" command to the file menu.
2272    
2273     * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
2274     as update_region to the renderer.
2275    
2276     * Thuban/UI/renderer.py
2277     (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
2278     update box is now directly a tuple, not a wxRect anymore.
2279    
2280     * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
2281     prints.
2282    
2283     2002-05-07 Bernhard Herzog <[email protected]>
2284    
2285 bh 146 * setup.py: Add the shptree extension module. See
2286     extensions/pyshapelib/ChangeLog for more details.
2287    
2288     * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
2289     extensions/shapelib/dbfopen.c: Really update to the versions of
2290     shapelib 1.2.9. For some reason it wasn't really done on
2291     2002-04-11.
2292    
2293     * extensions/shapelib/shptree.c: Modified version of shptree.c of
2294     shapelib 1.2.9. The only real difference is the use of qsort
2295     instead of a bubble sort implementation
2296    
2297     * Thuban/Model/layer.py (Layer.__init__): New instance variable
2298     shapetree to hold the shapelib quadtree for the shapefile
2299     (Layer.open_shapefile): Create the quad tree.
2300     (Layer.ShapesInRegion): New method to return the ids of shapes in
2301     a given region using the quad tree.
2302    
2303     * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
2304     comment
2305     (draw_polygon_shape): Accept both arcs and polygons.
2306     (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
2307     the api.
2308    
2309     * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
2310     return the shape ids to be rendered in a given layer.
2311     (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
2312     ids. Use draw_polygon_shape to draw arc shapes as well.
2313     (ScreenRenderer.RenderMap): New parameter for the rectangle that
2314     has to be updated
2315     (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
2316     calling it's ShapesInRegion method.
2317    
2318     * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
2319     update_region for the update region.
2320     (MapCanvas.OnPaint): Maintain the update region
2321     (MapCanvas.do_redraw): Pass the bounding box of the update_region
2322     to the renderer when drawing the bitmap. Reset the update_region.
2323    
2324 bh 129 2002-05-03 Bernhard Herzog <[email protected]>
2325    
2326 bh 131 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
2327     MainWindow.OpenSession): Change the file extension of the session
2328     files to .thuban
2329    
2330 bh 129 * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
2331     Move the map channels to be forwarded by the session into the
2332 bh 146 class constant with forwarded_channels. Also add
2333     LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
2334     forwarded_channels
2335 bh 129
2336     * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
2337     typo and some rewording).
2338    
2339 bh 126 2002-05-02 Bernhard Herzog <[email protected]>
2340    
2341     * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
2342     around to speed up most redraws:
2343     (MapCanvas.__init__): New instance variable bitmap which holds the
2344     bitmap
2345     (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
2346     self.bitmap to draw.
2347     (MapCanvas.full_redraw): New method to force a full redraw
2348     including the bitmap
2349     (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
2350     make sure the bitmap is redrawn.
2351     (MapCanvas.projection_changed, MapCanvas.set_view_transform,
2352     MapCanvas.shape_selected): Call full_redraw instead of readraw to
2353     make sure the bitmap is redrawn.
2354     (MapCanvas.OnSize): New method to handle size events so that the
2355     bitmap can be redrawn.
2356    
2357 bh 124 2002-04-29 Bernhard Herzog <[email protected]>
2358    
2359     * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
2360     canvas' VIEW_POSITION event
2361     (MainWindow.view_position_changed): Handler for VIEW_POSITION.
2362     Update the text in the status-bar accordingly.
2363    
2364     * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
2365     (MapCanvas.__del__): Implement because Publisher.__del__ has to be
2366     called.
2367     (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
2368     current_position
2369     (MapCanvas.set_current_position): New method to set
2370     current_position. Issue a VIEW_POSITION event
2371     (MapCanvas.CurrentPosition): New public method to return the value
2372     of current_position. Should be called when the VIEW_POSITION event
2373     is processed.
2374     (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
2375     Update the position.
2376     (MapCanvas.OnLeaveWindow): Set the position to None.
2377    
2378     * Thuban/UI/messages.py (VIEW_POSITION): New message for the
2379     position in the statusbar
2380    
2381 tkoester 403 2002-04-26 Frank Koormann <[email protected]>
2382 frank 120
2383     * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
2384    
2385 tkoester 403 2002-04-24 Frank Koormann <[email protected]>
2386    
2387 frank 118 * Resources/Bitmaps/identify.xpm: shadow added
2388    
2389     * Resources/Bitmaps/fullextent.xpm: new
2390 jan 116
2391 tkoester 403 2002-04-22 Jan-Oliver Wagner <[email protected]>
2392 jan 116
2393 tkoester 403 * Thuban/UI/tree.py (update_tree): added test for None on map bounding
2394     box
2395 jan 114
2396 tkoester 403 2002-04-21 Jan-Oliver Wagner <[email protected]>
2397    
2398 jan 114 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
2399    
2400     * Thuban/UI/tree.py (update_tree): added added map extent
2401    
2402     * Thuban/UI/mainwindow.py (_method_command): extended by parameter
2403 tkoester 403 icon; added map_full_extend as tool
2404 jan 114
2405 tkoester 403 2002-04-19 Jan-Oliver Wagner <[email protected]>
2406 jan 107
2407     * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
2408     saving _new_ sessions
2409    
2410     * Thuban/Model/session.py (create_empty_session): new session
2411     don't have a filename (set to None)
2412    
2413     * Thuban/UI/tree.py (update_tree): added filename and modified flag
2414    
2415     * Thuban/Model/load.py (ProcessSession): convert projection
2416     parameters from unicode to regular string
2417    
2418     * Data/iceland_sample.session: Added UTM Zone 26 projection.
2419    
2420 bh 100 2002-04-11 Bernhard Herzog <[email protected]>
2421    
2422     * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
2423     extensions/shapelib/dbfopen.c: Update to the versions of shapelib
2424     1.2.9
2425    
2426     * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
2427     the pyshapelib directoy into the list of include dirs, so that
2428     pyshapelib_api.h can be found.
2429    
2430     * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
2431     holds the pyshapelib C-API
2432     (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
2433     pyshapelib_api to access the shapelib functions.
2434     (initwxproj): Import the c_api from the shapelib module and
2435     initialize pyshapelib_api.
2436    
2437 bh 89 2002-04-04 Bernhard Herzog <[email protected]>
2438    
2439 bh 91 * setup.py (thuban_bdist_rpm.initialize_options): Use
2440     initialize_options to create the scripts for the rpm.
2441    
2442 bh 89 * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
2443    
2444 bh 85 2002-04-03 Bernhard Herzog <[email protected]>
2445    
2446 bh 87 * setup.py: Increment version to 0.1.1
2447    
2448 bh 85 * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
2449     Layer" and "Remove Layer" commands from the layer menu to the map
2450     menu
2451    
2452 bh 83 2002-02-15 Bernhard Herzog <[email protected]>
2453    
2454     * Thuban/Model/layer.py (Layer.Shape): list append only takes one
2455     argument (python <= 1.5.2 erroneously accepted multiuple
2456     arguments)
2457    
2458 bh 81 2002-02-04 Bernhard Herzog <[email protected]>
2459    
2460     * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
2461     RecordGrid in the identifyview.
2462     (IdentifyView.__init__): Use IdentifyGridCtrl instead of
2463     IdentifyListCtrl. The grid allows editing of the values.
2464    
2465     * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
2466     implementing a grid for a single row of a thuban table.
2467    
2468     * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
2469     layers by default. Easier to use than the previous default of only
2470     searching through the select layer which meant that if no layer
2471     was selected, you couldn't select a shape.
2472    
2473     * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
2474    
2475     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
2476     stroke_width attribute
2477    
2478     * Thuban/Model/save.py (save_session): Write the new stroke_width
2479     attribute
2480    
2481     * Thuban/Model/load.py (ProcessSession.startElement): Read the
2482     stroke_width attribute
2483    
2484     * Thuban/Model/layer.py (Layer.__init__): New parameter and
2485     instance variable stroke_width
2486     (Layer.SetStrokeWidth): Set the stroke_width.
2487    
2488 bh 72 2002-02-01 Bernhard Herzog <[email protected]>
2489    
2490     * extensions/thuban/wxproj.cpp (project_points): Fix two
2491     off-by-one errors in the last loop that joins the various parts
2492     together.
2493    
2494 bh 71 2002-01-14 Bernhard Herzog <[email protected]>
2495    
2496     * setup.py (data_dist.make_distribution): Fix some typos
2497    
2498 bh 70 2001-09-18 Bernhard Herzog <[email protected]>
2499    
2500     * README: Slight tweaking in preparation for the 0.1 release
2501    
2502     * setup.cfg: Add section for sdist to create both tgz and zip
2503     archives
2504    
2505     * setup.py: increase version number to 0.1
2506     (data_dist): New command class for data distribution
2507    
2508 bh 64 2001-09-14 Bernhard Herzog <[email protected]>
2509    
2510 bh 70 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
2511     Handle the case of no layer (i.e. layer is None) properly.
2512    
2513 tkoester 403 * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
2514 bh 70 Set the initial selection of the combo boxes to reflect the
2515     projection we're starting with in a way that works on windows,
2516     too.
2517    
2518 bh 64 * Thuban/Lib/connector.py (Connector.print_connections): Print the
2519     puiblisher's ids in hex to make it easier to compare them to the
2520     standard repr of python methods
2521    
2522     * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
2523     messages
2524    
2525 bh 59 2001-09-13 Bernhard Herzog <[email protected]>
2526    
2527 bh 64 * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
2528     deselect the layer if no layer is selected
2529    
2530 bh 59 * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
2531     idle time when there actually is something to draw. If there's
2532     nothing to draw simply clear the window
2533     (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
2534     (MapCanvas.SetMap): force a redraw in all cases because
2535     FitMapToWindow doesn't always do it.
2536     (MapCanvas.ZoomFactor): Add an optional parameter, center, to
2537     specify the point to move into the center of the window
2538     (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
2539     dragged, zoon in/out by a factor of 2
2540 bh 64 (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
2541     index, i.e. reversed drawing order) so that objects appearing to
2542     be in from of others are selected first. This is probably mostly
2543     relevant for point shapes where the symbols used may overlap
2544 bh 59
2545     * Thuban/Model/session.py (create_empty_session): Unset the
2546     modified bit before returning it
2547    
2548     * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
2549     create_empty_session session to create the new, empty session.
2550    
2551     * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
2552     the tool bitmaps.
2553     (MainWindow.OnClose, MainWindow.save_modified_session): Separate
2554     the code that asks whether the session should be saved into the
2555     new method save_modified_session.
2556     (MainWindow.OpenSession, MainWindow.NewSession): Use the new
2557     method to save modified session here too.
2558    
2559 bh 55 2001-09-11 Bernhard Herzog <[email protected]>
2560    
2561     * setup.py (InnoIconItem): fix typo
2562    
2563     (thuban_bdist_inno.run):
2564     (bdist_inno.run): Move the decision not to create symlinks on
2565     non-nt platforms to thuban_bdist_inno and do it unconditinally
2566     since we never want to create the symlinks here
2567    
2568 bh 48 2001-09-10 Bernhard Herzog <[email protected]>
2569    
2570 bh 53 * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
2571     identify view immediately
2572    
2573     * Thuban/UI/controls.py: New file with two classes RecordListCtrl
2574     and SelectableRecordListCtrl that implement the code shared by the
2575     identify view and the label dialog
2576    
2577     * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
2578     new class RecordListCtrl
2579    
2580     * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
2581     return value of GetValue is None instead of using it as a boolean
2582     directly so that Zero numbers are handled properly.
2583     (LabelListCtrl): Derive from the new class
2584     SelectableRecordListCtrl
2585    
2586 bh 48 * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
2587     (Proj4Dialog.dialogLayout): Make the window resizable and set the
2588     size of the text control explicitly to make the sizers work on
2589     both Windows and X.
2590    
2591 bh 44 2001-09-07 Bernhard Herzog <[email protected]>
2592    
2593     * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
2594     that can limit the search to the currently selected layer.
2595     (MapCanvas.SelectShapeAt): Make sure that the currently selected
2596     layer stays selected even when no shape is found
2597 bh 46 (MapCanvas.FitRectToWindow): If the rect has zero with or zero
2598     height do nothing (avoids zero division errors)
2599 bh 44
2600 bh 32 2001-09-06 Bernhard Herzog <[email protected]>
2601    
2602 bh 42 * Thuban/UI/tree.py (SessionTreeCtrl, SessionTreeView.__init__):
2603     Correct the spelling of SessionTreeCtrl. dabbrev is too damn
2604     convenient :-)
2605     (SessionTreeCtrl.__init__, SessionTreeCtrl.update_tree): Introduce
2606     a new instvar layer_to_item to map layers to tree items
2607     (SessionTreeCtrl.layer_selected): Select the appropriate tree item
2608     to match the current selection in the interactor
2609    
2610 bh 40 * Thuban/UI/interactor.py (Interactor.SelectedLayer):
2611     (Interactor.HasSelectedLayer): New methods to query the current
2612     selection
2613    
2614     * Thuban/UI/mainwindow.py (MainWindow.current_layer):
2615     (MainWindow.has_selected_layer): Simply call the appropriate
2616     interactor method
2617    
2618     * Thuban/UI/mainwindow.py (MainWindow.__init__):
2619     (MainWindow.LayerShowTable):
2620     (MainWindow.identify_view_on_demand): Store the interactor in an
2621     instvar and use that reference instead of going through main.app
2622    
2623 tkoester 403 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
2624     * Thuban/UI/application.py (ThubanApplication.OnInit):
2625 bh 40 * Thuban/UI/main.py (main): Create the session tree view in main
2626     with the new mainwindow method ShowSessionTree and not directly
2627     the application's OnInit method
2628    
2629     * Thuban/UI/tree.py (myTreeCtrlPanel):
2630     (SessioinTreeCtrl): Rename to SessioinTreeCtrl and turn it into a
2631     TreeCtrl isntead of a panel. This affects most method since we now
2632     refer to self instead of self.tree
2633     (SessionTreeView): New class implementing a non-modal dialog
2634     showing the session tree.
2635    
2636 bh 35 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Pass the
2637     layer to the tableview dialog.
2638    
2639     * Thuban/UI/tableview.py: Add some doc-strings
2640 tkoester 403 (TableGrid):
2641 bh 35 (TableGrid.OnRangeSelect):
2642     (TableGrid.OnSelectCell):
2643     (TableFrame.__init__):
2644     (TableFrame.row_selected):
2645     Selecting rows in the grid view now updates the selected shapes
2646     through the TableFrame. To achieve this we derive TableGrid from
2647     Publisher and introduce the message type ROW_SELECTED which the
2648     TableFrame subscribes to and which is issued by OnRangeSelect and
2649     OnSelectCell
2650    
2651     (DataTable.SelectRow): Removed because it's no longer needed in
2652     the row/shape selection scheme
2653    
2654 bh 32 * Thuban/UI/dialogs.py: New file implementing common classes for
2655     dialogs
2656    
2657     * Thuban/UI/tableview.py (TableGrid.__init__): Don't subscribe to
2658     the SELECTED_SHAPE message anymore. This is now handled by the
2659     parent.
2660     (TableGrid.select_shape): Only update the selection if the shape
2661     is not None.
2662     (TableFrame): Inherit from the new NonModalDialog class.
2663     (TableFrame.__init__, TableFrame.select_shape): Handle the
2664     SELECT_SHAPE message.
2665     (TableFrame.OnClose): Extend the inherited method to unsubscribe
2666     SELECT_SHAPE
2667    
2668     * Thuban/UI/mainwindow.py (MainWindow.init_dialogs):
2669     (MainWindow.add_dialog):
2670     (MainWindow.dialog_open):
2671     (MainWindow.remove_dialog):
2672     (MainWindow.get_open_dialog): New methods to maintain a dictionary
2673     of opened non-modal dialogs.
2674    
2675     (MainWindow.__init__): Initialize the new non-modal dictionary
2676     management code
2677     (MainWindow.LayerShowTable): maintain separate dialogs for each
2678     table using the non-modal dialog management code to only open a
2679     view once for each table.
2680    
2681     (MainWindow.IdentifyTool):
2682     (MainWindow.__init__):
2683     (MainWindow.identify_view_on_demand): Don't open the identify view
2684     in IdentifyTool anymore. This will be done automatically by the
2685     new method identify_view_on_demand which handles the
2686     SELECTED_SHAPE message so that the identify view will be opened on
2687     demand
2688    
2689     * Thuban/UI/identifyview.py (IdentifyListCtrl.__init__): Remove
2690     the interactor argument. The SELECTED_SHAPE message is now handled
2691     by the parent.
2692     (IdentifyView.__init__): Add the interactor argument so that we
2693     can handle the SELECTED_SHAPE message here
2694     (IdentifyView.selected_shape): New method to handle the
2695     SELECTED_SHAPE messages
2696    
2697     * Thuban/UI/identifyview.py (IdentifyView): Derive from the new
2698     NonModalDialog class
2699     (IdentifyView.OnClose): Extend the inherited version to
2700     unsubscribe SELECT_SHAPE
2701    
2702     * Thuban/Model/session.py (Session.UnsetModified): Remove debug prints
2703    
2704 bh 26 2001-09-05 Bernhard Herzog <[email protected]>
2705    
2706     * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
2707 tkoester 403
2708 bh 26 * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
2709     interactor to pass through to the MapCanvas
2710 tkoester 403
2711 bh 26 * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
2712     argument to the MainWindow constructor to get rid of the ugly hack
2713     that made main.app available early just so that the mapcanvas
2714     could access the interactor object.
2715    
2716 bh 19 2001-09-04 Bernhard Herzog <[email protected]>
2717    
2718 bh 22 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): New method
2719     that runs a modal message box
2720     (MainWindow.OnClose): Use the new method
2721     (MainWindow.RemoveLayer): Just do nothing in case no layer is
2722     selected. The command should be grayed out anyway, so there's no
2723     need to pop up a message box.
2724     (MainWindow.AddLayer): Pop up a message box with an error message
2725     if the shape file can't be opened
2726    
2727     * Thuban/Model/layer.py (Layer.__init__): Open the shapefile
2728     immediately. This will cause an exception in case the file can't
2729     be opened and we can display an appropriate message.
2730    
2731 bh 19 * MANIFEST.in: Add extensions/pyprojection/LICENSE
2732    
2733     * setup.py (thuban_bdist_rpm): New class implementing a Thuban
2734     specific bdist_rpm command.
2735    
2736     * Thuban/UI/main.py: Catch ImportError exceptions when importing
2737     the locale module because it may not be available on some
2738     installations.
2739    
2740     * extensions/pyprojection/LICENSE: Copy of the license text in
2741     Projection.i. Having it in a separate file makes it easier to
2742     refer to license text in e.g. RPMs
2743    
2744 bh 18 2001-09-03 Bernhard Herzog <[email protected]>
2745    
2746 bh 19 * setup.py: use wx-config instead of wxgtk-config because it's
2747     more generic
2748    
2749     * setup.py (ThubanInstall.get_outputs): Add the symlink in
2750     <prefix>/bin to the outputs
2751     (ThubanInstall.link_file): New method to link files. We need this
2752     because the standard copy_files refuses to link non-existing
2753     files.
2754     (ThubanInstall.run): Remove the leading install root from the
2755     script filename if an install root was specified and use the new
2756     link_file method
2757 tkoester 403
2758 bh 18 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
2759     the window when the first layer is added to the map.
2760    
2761     * setup.py (ThubanInstall.run): Honor the build root (self.root)
2762     when linking thuban.py to <prefix>/bin
2763    
2764 bh 16 2001-08-31 Bernhard Herzog <[email protected]>
2765    
2766     * setup.py: In the setup call, the install parameters shouldn't
2767     have trailing slashes because distutils on non-posix platforms
2768     doesn't like that. The same applies to other directories like
2769     "Resources/Bitmaps"
2770    
2771     In the configuration section for nt, move the wxWindows directory
2772     optins into the part clearly marked as editable.
2773    
2774     (InstallLocal.initialize_options):
2775     (InstallLocal.user_options): remove the currently unused debug
2776     flag
2777     (thuban_build_py.find_all_modules): Add this method so that it
2778     works for our case of having packages and modules in one
2779     distribution as well.
2780     (ThubanInstall.initialize_options):
2781     (ThubanInstall.finalize_options):
2782     (ThubanInstall.user_options):
2783     (ThubanInstall.boolean_options): Add new options, do-symlink and
2784     extra files. Since these are the first ThubanInstall specific
2785     options, override user_options and boolean_options
2786     (ThubanInstall.run): Honor the new do-symlink and extra-files
2787     options.
2788     (ThubanInstall.get_outputs): Add to override the base-class's
2789     version and add the extra-files to the outputs
2790     (bdist_inno): New class for windows distributions with Inno Setup
2791     (InnoIconItem): Helper class for bdist_inno
2792     (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
2793     this together with the appropriate parameters, to the setup call.
2794 tkoester 403
2795 bh 16 * setup.cfg (bdist_inno): added new section for the inno setup
2796     installer
2797    
2798     * Thuban/UI/tree.py (myTreeCtrlPanel.__init__): New inst var
2799     changing_selection to avoid recursive selection events when
2800     modifying the selection in response to a selection event.
2801     (myTreeCtrlPanel.normalize_selection): Set the new inst var when
2802     changing the tree's selection.
2803     (myTreeCtrlPanel.OnSelChanged): Only normalize the selection when
2804     we're not being called indirectly from normalize_selection.
2805    
2806     * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): Call
2807     event.Check only if the command is actuall checkable.
2808     (MainWindow.__init__): Call the toolbar's Realize method to make
2809     sure that the items are actually shown
2810    
2811 bh 7 2001-08-28 Bernhard Herzog <[email protected]>
2812    
2813 bh 9 * setup.py: Fix some doc strings
2814    
2815 bh 7 * ChangeLog: started
2816    

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26