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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1890 by frank, Thu Oct 30 16:20:41 2003 UTC revision 2003 by bh, Mon Dec 1 19:45:17 2003 UTC
# Line 1  Line 1 
1    2003-12-01  Bernhard Herzog  <[email protected]>
2    
3            * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
4            nt to better match Intevation's current w32 setup
5    
6            * HOWTO-Release: Add note about updating MANIFEST.in
7    
8            * MANIFEST.in: Add the Extensions
9    
10            * NEWS: Update for 1.0rc1
11    
12    2003-12-01  Bernhard Herzog  <[email protected]>
13    
14            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
15            cards for the dialog so that shapefiles ending in all uppercase
16            SHP are listed too
17    
18    2003-11-28  Bernhard Herzog  <[email protected]>
19    
20            * Thuban/version.py (longversion): Update to 1.0rc1
21    
22            * setup.py (setup call): Update version to 1.0rc1. Use the
23            [email protected] email address as author email instead of my
24            personal one.
25    
26    2003-11-28  Bernhard Herzog  <[email protected]>
27    
28            * po/de.po: Update german translation.
29    
30    2003-11-28  Bernhard Herzog  <[email protected]>
31    
32            Unify the filenames stored in .thuban files so that the .thuban
33            files are more platform independend
34    
35            * Thuban/Model/save.py (unify_filename): New. Unify filenames so
36            that they can be used on both windows and unix
37            (SessionSaver.prepare_filename): New. Handle all filename
38            transformations for filenames stored in the thuban file
39            (SessionSaver.write_data_containers, SessionSaver.write_layer):
40            Use prepare_filename
41    
42            * test/test_save.py (SaveSessionTest.testSingleLayer)
43            (SaveSessionTest.testLayerProjection)
44            (SaveSessionTest.testRasterLayer)
45            (SaveSessionTest.testClassifiedLayer)
46            (SaveSessionTest.test_dbf_table)
47            (SaveSessionTest.test_joined_table): Filenames are always stored
48            with slashes on all currently supported platforms so adapt all
49            tests to this
50    
51            * test/test_load.py (LoadSessionTest.filenames): With the new
52            filename scheme the filenames in the tests should be
53            understandable on all currently supported platforms so we turn
54            this into an empty list because we don't have to normalize them
55            anymore
56    
57    2003-11-28  Bernhard Herzog  <[email protected]>
58    
59            * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
60            Add the ellipsoid to the projection since some Proj versions
61            complain if it's missing.
62    
63    2003-11-27  Bernhard Herzog  <[email protected]>
64    
65            Corect some bounding box projection problems
66    
67            * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
68            version of ForwardBBox
69            (Projection._transform_bbox): New. common implementation of
70            ForwardBBox and InverseBBox
71            (Projection.ForwardBBox): Use _transform_bbox.
72    
73            * test/test_proj.py (TestProjection.test): Add test for
74            InverseBBox
75    
76            * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
77            (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
78            new InverseBBox method to determine the unprojected bounding box
79            (Layer.ShapesInRegion): Use the ForwardBBox method to project the
80            bbox.
81    
82            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
83            Removed.
84            (TestLayer.test_arc_layer_with_projection): New. This test is
85            better able to test whether bounding boxes are projected correctly
86            than test_point_layer_with_projection
87    
88            * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
89            InverseBBox to unproject bboxes
90    
91    2003-11-25  Bernhard Herzog  <[email protected]>
92    
93            * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
94            source code.
95    
96    2003-11-25  Bernhard Herzog  <[email protected]>
97    
98            * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
99            there for backwards compatibility and all code relying on that
100            should have been updated by now.
101    
102    2003-11-25  Bernhard Herzog  <[email protected]>
103    
104            * test/test_load.py (TestClassification.test): Add the missing
105            round trip test.
106            (TestClassification.file_contents): Update to the newest file
107            format
108    
109    2003-11-25  Bernhard Herzog  <[email protected]>
110    
111            Add very experimental (and possibly dangerous) extension to draw
112            polygons:
113    
114            * Extensions/drawshape/README: New. Brief installation
115            instructions
116    
117            * Extensions/drawshape/drawshape.py: New. Implementation of the
118            drawshape extensions
119    
120            * Extensions/drawshape/patch.diff: Patch to apply before the
121            extension can be used.
122    
123    2003-11-24  Bernhard Herzog  <[email protected]>
124    
125            * Thuban/Model/data.py (ShapefileStore._open_shapefile)
126            (ShapefileStore.__init__): Factor opening the shapefile into a
127            separate method (the new _open_shapefile). This makes the code a
128            bit more readable but the real reason is that it makes some evil
129            hacks easier. :-)
130    
131    2003-11-24  Bernhard Herzog  <[email protected]>
132    
133            * Thuban/Model/load.py (SessionLoader.check_attrs): If no
134            converter is specified for an attribute assume it's a string
135            containing only Latin1 characters. Update doc-string accordingly.
136            This change should fix many places where unicode objects might
137            accidentally enter Thuban.
138    
139            * test/test_load.py (TestNonAsciiColumnName): New test to check
140            what happens with column names in DBF files that contain non-ascii
141            characters
142    
143    2003-11-21  Bernhard Herzog  <[email protected]>
144    
145            Enable the experimental attribute editing again and introduce a
146            command line switch to actually activate it
147    
148            * Thuban/UI/main.py (options): New. Container for options set on
149            the commmand line
150            (main): Add the --enable-attribute-editing flag.
151    
152            * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
153            editing is enabled use the grid ctrl which allows editing of the
154            values
155    
156            * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
157            New. Just delegate this to the underlying table.
158    
159    2003-11-20  Bernhard Herzog  <[email protected]>
160    
161            * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
162            Skip this test if run under non-posix systems since it only works
163            there
164    
165    2003-11-19  Bernhard Herzog  <[email protected]>
166    
167            * Thuban/Model/resource.py: Rework the way gdal support is
168            determined so that we can give a reason in the about why gdal is
169            not supported.
170            (gdal_support_status): New. Variable holding a string with the
171            reason for no gdal support
172    
173            * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
174            not supported to the message
175    
176    2003-11-19  Bernhard Herzog  <[email protected]>
177    
178            Remove the old table interface and its test cases
179    
180            * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
181            (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
182            anymore
183    
184            * Thuban/Model/transientdb.py (TransientTableBase)
185            (AutoTransientTable): Do not derive from OldTableInterfaceMixin
186            anymore
187    
188            * test/test_table.py: Removed since the old interface it tests is
189            gone.
190    
191            * test/runtests.py (main): The old table interface is gone and
192            with it the deprecation warnings so remove the code that turns
193            these warnings into errors
194    
195    2003-11-19  Bernhard Herzog  <[email protected]>
196    
197            * test/test_table.py: Revert to revision 1.5 again. Changing the
198            tests to use the new table interface is completely wrong since the
199            whole purpose of the tests in this module is to test the old
200            interface.
201    
202    2003-11-18  Bernhard Herzog  <[email protected]>
203    
204            * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
205            New. Test whether the connection matches a set of connection
206            parameters
207    
208            * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
209            (DBFrame.OnAdd): Use the new MatchesParameters method when looking
210            for existing connections with the same parameters and break out of
211            the loop correctly.
212    
213            * test/test_postgis_db.py (TestBriefDescription)
214            (TestPostGISSimple.test_brief_description): Rename
215            TestBriefDescription to TestPostGISSimple and the test method to
216            test_brief_description so that we can add more test methods.
217            (TestPostGISSimple.test_matches_parameters): New. Test the new
218            MatchesParameters method
219    
220    2003-11-18  Bernhard Herzog  <[email protected]>
221    
222            * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
223            _was_destroyed, to indicate whether an publisher instance has
224            already been destroyed.
225            (Publisher.Unsubscribe): Only disconnect if the publisher has not
226            been destroyed yet.
227            (Publisher.Destroy): Set the _was_destroyed flag to true.
228    
229            * test/test_connector.py
230            (TestPublisher.test_unsubscribe_after_destroy): New. Test that
231            calling Unsubscribe after Destroy doesn't raise an exception
232    
233    2003-11-14  Bernhard Herzog  <[email protected]>
234    
235            * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
236            typo in doc-string
237    
238    2003-11-13  Bernhard Herzog  <[email protected]>
239    
240            Quote table and column names properly for postgis.
241    
242            * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
243            quote an identifier for use in an sql statement
244            (PostGISColumn.__init__): Add the quoted_name attribute
245            (PostGISTable.__init__): New instance variable quoted_tablename
246            (PostGISTable._fetch_table_information): Use the quoted table
247            name. New isntance variable quoted_geo_col with a quoted version
248            of geometry_column
249            (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
250            (PostGISTable.RowOrdinalToId): Use the quoted table name
251            (PostGISTable.ReadValue, PostGISTable.ValueRange)
252            (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
253            (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
254            (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
255            Use quoted table and column names
256    
257            * test/test_postgis_db.py (TestPostGISSpecialCases)
258            (TestPostGISIgnoredColumns): Rename the class to
259            TestPostGISSpecialCases because that better describes the new
260            cases
261            (TestPostGISSpecialCases.test_unsupported_types)
262            (TestPostGISSpecialCases.test): Rename the method to
263            test_unsupported_types because we need a more descriptive name now
264            that there are more methods
265            (TestPostGISSpecialCases.test_table_name_quoting)
266            (TestPostGISSpecialCases.test_column_name_quoting)
267            (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
268            cases to test quoting of table and column names in PostGISTable
269            and PostGISShapeStore
270    
271            * test/postgissupport.py
272            (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
273            AddGeometryColumn desn't support table or column names with sapces
274            or double quotes
275    
276    2003-11-12  Jan-Oliver Wagner <[email protected]>
277    
278            * Extensions/wms/__init__.py: New: Init to make this
279            directory a package.
280    
281            * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
282    
283    2003-11-11  Bernhard Herzog  <[email protected]>
284    
285            * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
286            Constant for the file woth deprecated epsg projections
287            (get_system_proj_file): Update doc-string
288    
289            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
290            above the EPS widgets, introduce a check box for the deprecated
291            eps projections and a label for the epsg widgets
292            (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
293            too
294    
295    2003-11-11  Bernhard Herzog  <[email protected]>
296    
297            Avoid warnings when run under Python 2.3
298    
299            * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
300            (BaseRenderer.draw_label_layer): Coordinates must be ints.
301    
302            * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
303            real method so that we can convert to int.
304            (MapRenderer.label_font): The font size mist be an int.
305    
306            * Thuban/UI/common.py (Color2wxColour): The color values must be
307            ints. Also, remove the unnecessary asserts.
308    
309            * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
310            (TestUnicodeStrings.test): Python source code should not contain
311            non-ascii characters unless an encoding is specified in the file.
312            Therefore use \x escapes in the string literals for non-ascii
313            characters.
314    
315    2003-11-11  Bernhard Herzog  <[email protected]>
316    
317            * Thuban/Model/resource.py (get_system_proj_file): Add a filename
318            parameter so that this function can be used for all proj files in
319            Resource/Projections
320            (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
321            get_system_proj_file
322    
323            * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
324            ProjFile self.__sysProjFile use a dictionary of system ProjFile
325            objects self._sys_proj_files
326            (ProjFrame.build_dialog): Adapt to the new changes in the
327            ProjectionList constructor. Add a check button to toggle whether
328            EPSG projections are shown
329            (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
330            events.
331            (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
332            the busy cursor if the files have not yet been loaded by the
333            dialog.
334            (ProjFrame.load_system_proj): Add a parameter for the name of the
335            proj file. Maintain the dictionary of system projections
336            self._sys_proj_files
337    
338            * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
339            user_projs parameters into one parameter proj_files which is a
340            list of proj files.
341            (ProjectionList._subscribe_proj_files)
342            (ProjectionList._unsubscribe_proj_files): New. Move
343            subscription/unsubscription of projfile messages to separate
344            methods
345            (ProjectionList.Destroy): The unsubscribe is now done in
346            _unsubscribe_proj_files
347            (ProjectionList.update_projections): We now have a list of proj
348            file objects
349            (ProjectionList.SetProjFiles): New method to set a new list of
350            proj file objects
351    
352            * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
353            Specify explicitly which system proj file to load.
354    
355    2003-11-11  Bernhard Herzog  <[email protected]>
356    
357            * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
358            instance variables to cut cyclic references. The GC would have
359            collected the loader eventually but it can happen that it doesn't
360            run at all until thuban is closed (2.3 but not 2.2 tries a bit
361            harder and forces a collection when the interpreter terminates)
362            (load_session): Call the handler's Destroy method to make sure
363            that it gets garbage collected early. Otherwise it will be
364            collected very late if at all and it holds some references to e.g.
365            shapestores and the session which can lead to leaks (of e.g. the
366            temporary files)
367    
368            * test/test_load.py (TestSingleLayer.test_leak): New. test for the
369            resource leak in load_session
370    
371    2003-11-10  Bernhard Herzog  <[email protected]>
372    
373            * Thuban/UI/baserenderer.py: Add a way to specify how layers in
374            extensions are to be rendered.
375            (_renderer_extensions): New. List with renderer for layers in
376            extensions
377            (add_renderer_extension): New. Add a renderer extension
378            (init_renderer_extensions): New. Init the renderer extensions
379            (BaseRenderer.render_map_incrementally): Search
380            _renderer_extensions for how to draw unknown layer types
381            (BaseRenderer.draw_raster_data): Add format parameter so that
382            formats other than BMP can be drawn
383            (BaseRenderer.draw_raster_layer): Pass an explicit format to
384            draw_raster_data
385    
386            * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
387            strings of the format parameter of draw_raster_data method to wx
388            constants
389            (MapRenderer.draw_raster_data): Add the format parameter and use
390            raster_format_map to map it to the right wxwindows constant for
391            wxImageFromStream
392    
393            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
394            the format parameter and record it
395            (TestBaseRenderer.test_raster_no_projection): check the format
396            paramter of the draw_raster_data method
397            (TestBaseRenderer.test_renderer_extension): New. Test the renderer
398            extension facility
399    
400    2003-11-07  Bernhard Herzog  <[email protected]>
401    
402            Tweak the usage of the sqlite database to make common use cases
403            more responsive. In most cases copying the data to the sqlite
404            database takes so long that using sqlite doesn't have enough
405            advantages.
406    
407            * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
408            comments about performance and query the min and max in separate
409            statements because only that way will indexes be used.
410            (TransientTableBase.UniqueValues): Add some comments about
411            performance.
412            (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
413            Do not copy the data to the transient DB but use the transient
414            copy if it exists. See the new comments for the performance trade
415            offs
416    
417            * test/test_transientdb.py
418            (TestTransientTable.test_auto_transient_table): Make sure that the
419            data is copied to the transient database at some point.
420    
421    2003-11-03  Bernhard Herzog  <[email protected]>
422    
423            * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
424            globals to locals so that it's a bit faster
425    
426    2003-11-03  Bernhard Herzog  <[email protected]>
427    
428            * Thuban/UI/baserenderer.py
429            (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
430            method. ReadValue is faster than ReadRowAsDict since it only reads
431            one cell especially now that the dbf file objects actually
432            implement it.
433    
434            * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
435            read_attribute method of the dbf objects
436    
437    2003-11-03  Bernhard Herzog  <[email protected]>
438    
439            * Extensions/profiling/profiling.py (popup_dialog_box): New config
440            variable to indicate whether the result should be shown in a
441            dialog box
442            (profile_screen_renderer, time_screen_renderer): Only show a
443            dialog box if popup_dialog_box is true.
444            (profile_screen_renderer): Flush stdout after the printing the
445            first part of the "profiling..." message
446    
447            * Thuban/UI/baserenderer.py
448            (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
449            brushes for the groups so that they're not created over and over
450            again
451    
452            * Thuban/Model/classification.py (Classification.__getattr__)
453            (Classification._compile_classification)
454            (Classification._clear_compiled_classification): New. Methods to
455            manage a 'compiled' representation of the classification groups
456            which is created on demand
457            (Classification.InsertGroup, Classification.RemoveGroup)
458            (Classification.ReplaceGroup): reset the compiled representation
459            (Classification.FindGroup): Use the compiled representation to
460            find the matching group
461            (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
462    
463    2003-10-31  Bernhard Herzog  <[email protected]>
464    
465            * Thuban/Model/classification.py (Classification.SetDefaultGroup):
466            Send a CLASS_CHANGED message
467            (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
468            not return the removed group since it wasn't used.
469    
470            * test/test_classification.py
471            (TestClassification.test_set_default_group): New. Test the
472            SetDefaultGroup method
473            (TestClassification.test_insert_group): New. Test the InsertGroup
474            method
475            (TestClassification.test_remove_group): New. Test the RemoveGroup
476            method
477            (TestClassification.test_replace_group): New. Test the
478            ReplaceGroup method
479    
480    2003-10-31  Bernhard Herzog  <[email protected]>
481    
482            * test/test_classification.py (TestClassification.setUp):
483            Subscribe to the CLASS_CHANGED messages
484            (TestClassification.tearDown): New. Destroy the classification
485            properly
486            (TestClassification.test_defaults): Add tests for the default line
487            width and whether no messages were sent yet
488            (TestClassification.test_set_default_properties): Add tests for
489            messages and setting the default line width
490            (TestClassification.test_add_singleton)
491            (TestClassification.test_add_range)
492            (TestClassification.test_multiple_groups): Add tests for messages
493    
494    2003-10-31  Bernhard Herzog  <[email protected]>
495    
496            Some more refactoring in preparation for new tests:
497    
498            * test/test_classification.py (TestClassification.setUp): New.
499            Instantiate the classification here. Update the test methods
500            accordingly.
501            (TestClassification.test_multiple_groups): Make sure that the two
502            singletons matching 1 are considered different.
503    
504    2003-10-31  Bernhard Herzog  <[email protected]>
505    
506            * test/test_classification.py (red, green, blue): New. These
507            constants were used in several cases. Update the relevant methods.
508            (TestClassification.test_defaults)
509            (TestClassification.test_set_default_properties)
510            (TestClassification.test_add_singleton)
511            (TestClassification.test_add_range)
512            (TestClassification.test_multiple_groups)
513            (TestClassification.test_deepcopy): New. These were formerly all
514            part of the single method test.
515            (TestClassification.test_deepcopy): Removed.
516            (TestClassIterator): Removed. The test case is now a method of
517            TestClassification since it tests part of the public interface of
518            Classification
519            (TestClassification.test_iterator): New. Used to be
520            TestClassIterator effectively
521    
522    2003-10-31  Jan-Oliver Wagner <[email protected]>
523    
524            GUIfied the functions of the profiling extension.
525    
526            * /Extensions/profiling/__init__.py: New: Init to make this
527            directory a package.
528    
529            * Extensions/profiling/profiling.py: Moved menu entries to
530            the Extensions menu. Applied _() for strings.
531            (profile_screen_renderer): Catch the detailed printout and present
532            it in a dialog.
533            (time_screen_renderer): Raise a dialog to present the result instead
534            of printing it to stdout.
535    
536    2003-10-31  Bernhard Herzog  <[email protected]>
537    
538            * test/test_classification.py (TestClassGroupProperties)
539            (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
540            (TestClassGroupSingleton, TestClassIterator, TestClassification):
541            Split TestClassification into several classes, one for each class
542            being tested. TestClassification itself now only tests
543            Classification. This split makes changes to the tests a bit easier
544    
545    2003-10-31  Bernhard Herzog  <[email protected]>
546    
547            * Extensions/profiling/profiling.py: New. Extension to measure
548            Thuban performance
549    
550    2003-10-31  Frank Koormann <[email protected]>
551    
552            Added two items to legend popup menu: Remove Layer and Show Layer Table
553    
554            * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
555            LegendPanel._OnShowTable): New event handlers, call the corresponding
556            mainwindow methods.
557            (LegendTree._OnRightClick): Added items to popup menu.
558    
559    2003-10-30  Bernhard Herzog  <[email protected]>
560    
561            * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
562            EVT_WINDOW_DESTROY
563            (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
564            nothing but is convenient for the derived classes.
565    
566            * Thuban/UI/tableview.py
567            (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
568            Unsubscribe the messages here not in OnClose because that might
569            get called multiple times. Fixes RT #2196
570            (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
571            anymore.
572    
573            * README: Update the minimum requirement for wxPython. Since we
574            now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
575            the version in which that was introduced for all platforms
576    
577  2003-10-30  Frank Koormann <[email protected]>  2003-10-30  Frank Koormann <[email protected]>
578    
579          * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of          * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of

Legend:
Removed from v.1890  
changed lines
  Added in v.2003

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26